我在工作文件的playbook中使用了include_role,我希望能够在不同的playbook中使用它,但不是所有的playbook都需要执行所有的get_url属性。
- name: Download
include_role:
name: utilities
tasks_from: download
vars:
dest: "{{ ansible_env.APP }}/"
url: "{{ url }}"
和这个角色。
---
- name: Download_role
get_url:
url_username: "{{ packages_user }}"
url_password: "{{ packages_pass }}"
dest: "{{ dest }}"
url: "{{ url }}"
owner: "{{ ansible_user|default('ec2-user') }}"
group: "{{ ansible_user|default('ec2-user') }}"
现在对这个角色的默认调用将在文件上设置默认的所有者和组属性,但如果我不喜欢它在不同的playbook中调用相同的include_role时调用所有者和组属性怎么办?
我可以在Download_role中添加围绕所有者和组的if else吗? 在role或其他任何ansible的神奇方法?
的应用,我希望能够从不同的剧本中使用,但不是所有的剧本都需要执行所有的get_url属性。default
滤镜在这里没有意义
owner: "{{ ansible_user|default('ec2-user') }}"
变量 浏览器的用户 总是被定义的。
Q: "我可以在'Download_role'中添加ifelse,围绕着所有者和组吗? 在角色或其他Ansible魔法方法中?"
答:有两种情况 否则 和妙法可用。可以使用如果其他
owner: "{{ 'userA' if my_condition else 'userB' }}"
或 三元 过滤
owner: "{{ my_condition|ternary('userA', 'userB') }}"
这就限制了选择,只能选择两个选项。替换 my_condition
用布尔变量或逻辑表达式。
shell> cat roles/utilities/defaults/main.yml
my_user: user_A
那么参数的值 owner
身为 utilities
默认为 user_A
owner: "{{ my_user }}"
神奇的地方来了。它可以通过以下方式选择一个默认值的文件默认值_from 当一个角色被 include_role
. 例如,让我们创建额外的默认文件。
shell> cat roles/utilities/defaults/opt_B.yml
my_user: user_B
shell> cat roles/utilities/defaults/opt_C.yml
my_user: user_C
然后,举例来说,让我们使用文件中的默认值,即 opt_B.yml
在所包含的角色中
- name: Download
include_role:
name: utilities
tasks_from: download
defaults_from: opt_B.yml