【发布时间】:2016-05-30 23:46:03
【问题描述】:
我在角色中有一个复制任务,我希望 src 位置与角色本身相关,而不是调用角色的剧本。
如何完成这项工作并使用来自myrole/tasks 内的任务的来自myfrole/files 的文件,我不想将角色名称包含在路径中,因为它没有多大意义。如果我这样做,如果我复制角色,它就会中断。
【问题讨论】:
我在角色中有一个复制任务,我希望 src 位置与角色本身相关,而不是调用角色的剧本。
如何完成这项工作并使用来自myrole/tasks 内的任务的来自myfrole/files 的文件,我不想将角色名称包含在路径中,因为它没有多大意义。如果我这样做,如果我复制角色,它就会中断。
【问题讨论】:
如果你根本不提供任何路径,只提供文件名,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
【讨论】:
{{ playbook_dir }}。如果你应该使用角色,取决于你的项目的大小以及你的剧本是否应该只做一件小事或更多。就个人而言,除了快速测试某些东西之外,我还没有看到不使用角色的有效案例。
您不需要指定要复制的文件的路径,只要它存储在files 目录中即可。
你的角色应该是这样的:
my-awesome-role
├───files
│ my-awesome-file
└───tasks
main.yml
这是在tasks/main.yml中调用copy的方法:
- copy:
src: my-awesome-file
dest: '{{ some_destination }}'
【讨论】: