【发布时间】:2014-11-25 00:24:32
【问题描述】:
我在我的剧本中使用zzet.rbenv role。它有一个files/default-gems 文件,将其复制到预配系统。
我需要我的剧本来检查myplaybook/files/default-gems 并使用它如果它存在,否则使用zzet.rbenv/files/default-gems。
我该怎么做?
【问题讨论】:
标签: provisioning ansible ansible-playbook
我在我的剧本中使用zzet.rbenv role。它有一个files/default-gems 文件,将其复制到预配系统。
我需要我的剧本来检查myplaybook/files/default-gems 并使用它如果它存在,否则使用zzet.rbenv/files/default-gems。
我该怎么做?
【问题讨论】:
标签: provisioning ansible ansible-playbook
经过一些研究和试验/错误。我发现 Ansible 无法检查角色之间是否存在文件。这是由于角色依赖(角色本身)将扩展为需要它的依赖的方式,使其成为剧本的一部分。没有任何任务可以让您区分 my_role/files/my_file.txt 和 required_role/files/my_file.txt。
解决问题的一种方法(我认为最简单和最干净的方法)是:
my_role 中添加一个变量,其中包含我要使用的文件的路径(覆盖默认路径)示例
required_role
# Existing task
- name: some task
copy: src=roles_file.txt dest=some/directory/file.txt
when: my_file_path is not defined
# My custom task
- name: my custom task (an alteration of the above task)
copy: src={{ my_file_path }} dest=/some/directory/file.txt
when: my_file_path is defined
我的角色
#... existing code
my_file_path: "path/to/my/file"
正如 Ramon de la Fuente 所述:此解决方案已被 zzet.rbenv repo 接受:)
【讨论】: