在我的剧本中,我有:
roles:
- role: role_1
- role: role_2
在我的角色目录结构中,我已经在role_1和role_2下定义了具有不同值的vars
在调用该剧本时,我试图通过使用限制来要求它仅考虑我目前感兴趣的角色:
ansible-playbook -i ./hosts.yml myplaybook.yml --limit role_1
我期望的是: 它会忽略role_2下的变量值,因为我要求它限制为role_1 我得到的是: role_2变量值将覆盖role_1,因为按字典顺序,role_2稍后。啊!
我还尝试了什么: 我尝试使用标签:
roles:
- role: role_1
tags: [ role_1_tag ]
- role: role_2
tags: [ role_2_tag ]
结果仍然是不希望的
编辑:遵循第一个答案
此处(和文档中)给出的include_role语法未经修改就无法使用。最后,我做到了:
tasks:
- name: include role_1
include_role:
name: role1
apply:
tags:
- role_1_tag
tags: always
- name: include role_2
include_role:
name: role_2
apply:
tags:
- role_2_tag
tags: always
但是即使那样,当我运行它时,什么也不会执行。我是这样运行的:
ansible-playbook -i ./hosts.yml % --limit role_1 -t role_1_tag
尝试另一种方式:
tags: always
tasks:
- name: include role_1
include_role:
name: role1
apply:
tags:
- role_1_tag
- name: include role_2
include_role:
name: role_2
apply:
tags:
- role_2_tag
Ansible尝试执行其他任务,但是没有访问该角色下的任何var,导致未找到变量错误
由于我将tags:
放在了任务之外,所以我猜想每个任务都需要提到标签。即使这样做,我也得到相同的结果,即:
fatal: [host_group]: FAILED! => {"msg": "'my_vars' is undefined"}
Edit2:使用public: yes
似乎使Ansible可以读取var,但是,它再次读取了所有变量,而--limit
没有任何作用
答案 0 :(得分:0)
问:“只考虑我目前感兴趣的角色。”
A:使用include_role。例如
- include_role:
name: role_1
- include_role:
name: role_2
默认情况下,参数 public 为 no
此选项决定角色的var和默认值是否公开给剧本。如果设置为yes,则该变量将可用于include_role任务之后的任务。 此功能不同于角色标头或import_role下列出的角色的标准变量公开,因为它们是在剧本解析时公开的,也适用于早期的角色和任务。
注释
--limit
选择其他模式的主机。