我如何在get_url modul中添加条件,使其不包含或不包含include_role中的所有者和组属性?

问题描述 投票:0回答:1

我在工作文件的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的神奇方法?

ansible ansible-2.x
1个回答
1
投票

的应用,我希望能够从不同的剧本中使用,但不是所有的剧本都需要执行所有的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 用布尔变量或逻辑表达式。


最好的做法是在下面定义角色的默认值。defaultsmain.yml. 例如,该角色的默认值可能是这样的
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

请看 变量优先。我应该把一个变量放在哪里?

© www.soinside.com 2019 - 2024. All rights reserved.