ansible 我如何向 get_url 模块添加条件以不包含或包含 include_role 中的所有者和组属性
ansible how can i add condition to get_url modul to not include or include the owner and group properties from include_role
我 include_role 我正在使用剧本中的工作文件,我希望能够使用它
不同的剧本,但并非所有剧本都需要执行所有 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') }}"
现在默认调用此角色,它将设置文件的默认所有者和组属性
但是,当我从不同的剧本
调用相同的 include_role 时,如果我不喜欢 invoke/use 所有者和组属性怎么办
我可以在 Download_role 所有者和群组周围添加 if / else 吗?在角色中
或任何其他可靠的魔术方法?
default
过滤器的应用在这里没有意义
owner: "{{ ansible_user|default('ec2-user') }}"
变量ansible_user总是被定义。
回答你的问题:
问:"Can I add if/else in the 'Download_role' surrounding the owner and group? In the role or any other Ansible magic method?"
答:有if/else和魔术两种方法。可以使用 if / else
owner: "{{ 'userA' if my_condition else 'userB' }}"
,或 ternary 过滤器
owner: "{{ my_condition|ternary('userA', 'userB') }}"
这将 selection 限制为只有两个选项。将 my_condition
替换为布尔变量或逻辑表达式。
最佳做法是在 defaults/main.yml 中定义角色的默认值。例如,角色的默认值可能类似于
shell> cat roles/utilities/defaults/main.yml
my_user: user_A
那么角色utilities
中参数owner
的值默认为user_A
owner: "{{ my_user }}"
魔法来了。可以 select 具有默认值的文件
defaults_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
我 include_role 我正在使用剧本中的工作文件,我希望能够使用它 不同的剧本,但并非所有剧本都需要执行所有 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') }}"
现在默认调用此角色,它将设置文件的默认所有者和组属性 但是,当我从不同的剧本
调用相同的 include_role 时,如果我不喜欢 invoke/use 所有者和组属性怎么办我可以在 Download_role 所有者和群组周围添加 if / else 吗?在角色中 或任何其他可靠的魔术方法?
default
过滤器的应用在这里没有意义
owner: "{{ ansible_user|default('ec2-user') }}"
变量ansible_user总是被定义。
回答你的问题:
问:"Can I add if/else in the 'Download_role' surrounding the owner and group? In the role or any other Ansible magic method?"
答:有if/else和魔术两种方法。可以使用 if / else
owner: "{{ 'userA' if my_condition else 'userB' }}"
,或 ternary 过滤器
owner: "{{ my_condition|ternary('userA', 'userB') }}"
这将 selection 限制为只有两个选项。将 my_condition
替换为布尔变量或逻辑表达式。
最佳做法是在 defaults/main.yml 中定义角色的默认值。例如,角色的默认值可能类似于
shell> cat roles/utilities/defaults/main.yml
my_user: user_A
那么角色utilities
中参数owner
的值默认为user_A
owner: "{{ my_user }}"
魔法来了。可以 select 具有默认值的文件
defaults_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