如何相对于角色复制带有ansible的文件?

Posted

技术标签:

【中文标题】如何相对于角色复制带有ansible的文件?【英文标题】:How to copy files with ansible relatively to the role? 【发布时间】:2016-05-30 23:46:03 【问题描述】:

我在角色中有一个复制任务,我希望 src 位置与角色本身相关,而不是调用角色的剧本。

如何完成这项工作并使用来自myrole/tasks 内的任务的来自myfrole/files 的文件,我不想将角色名称包含在路径中,因为它没有多大意义。如果我这样做,如果我复制角色,它就会中断。

【问题讨论】:

【参考方案1】:

如果你根本不提供任何路径,只提供文件名,Ansible 会自动从角色的files 目录中选择它。

- copy:
    src: foo.conf
    dest: /etc/foo.conf

此外,从 Ansible 1.8 开始,您可以在 copy 任务中使用变量 role_path

- copy:
    src: " role_path /files/foo.conf"
    dest: /etc/foo.conf

【讨论】:

如果您不使用角色怎么办? (你应该总是使用角色吗?) @alex 你可以使用 playbook_dir 。如果你应该使用角色,取决于你的项目的大小以及你的剧本是否应该只做一件小事或更多。就个人而言,除了快速测试某些东西之外,我还没有看到不使用角色的有效案例。【参考方案2】:

您不需要指定要复制的文件的路径,只要它存储在files 目录中即可。

你的角色应该是这样的:

my-awesome-role
├───files
│       my-awesome-file
└───tasks
        main.yml

这是在tasks/main.yml中调用copy的方法:

- copy:
    src: my-awesome-file
    dest: ' some_destination '

【讨论】:

以上是关于如何相对于角色复制带有ansible的文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何自动安装 Ansible Galaxy 角色?

具有文件夹“文件”的 Ansible 角色

001Ansible学习__ansible的工作机制

每个主机上的 ansible 复制配置文件

复制后安装rpm,并带有ansible

ansible角色roles