我正在运行ansible 2.7.10,并有一本剧本,其中我在不同剧本中“包含”不同的角色。 我所说的所有角色都有共同的从属角色。
我现在正处于一个阶段,我希望该剧本中的所有角色都可以读取Vault。
如果我将文件作为附加变量(-e @)传递,则此方法有效
- name: main playbook - play 1
hosts: hosts1
vars_files:
- "<path_to_universal_vault>"
tasks:
- include_role:
name: role1
- name: main playbook - play 2
hosts: hosts2
vars_files:
- "<path_to_universal_vault>"
tasks:
- include_role:
name: role2
role1和role2都有从属角色:
- role: role_a
- role: role_b
- role: role_c
我读过here,可以将保管库包含在“ vars”中作为主要角色。 有没有一种方法可以使从属角色从主要角色继承变量(在这种情况下为Vault)?
答案 0 :(得分:0)
首先,我们应该从您的项目根目录创建一个./vault/main.yml
,然后在其中添加秘密:
my_vault_secret: "It works!"
然后,选项A ,以包含主要角色的Vault变量,该变量将在Playbook运行时分配,创建./roles/role1/default/main.yml
并添加引用秘密的变量:>
my_vault_var: "{{ my_vault_secret }}"
然后在my_vault_var
,role_a
,role_b
中使用role_c
。
或者,选项B ,将./vault/main.yml
保留为所有机密,包括role_a
,role_b
,role_c
,但不要使用default / main.yml,而是将文件库文件直接包含在您用来执行role1
和role2
中的任务的剧本中:
- hosts: localhost
connection: local
vars_files:
- "vault/main.yml"
roles:
- role1
- role2
PLAY [localhost] *******************************************************************************************************************************************************************************************
TASK [role_a : debug] ****************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "It works!"
}
项目结构如下所示,defaults
仅对于选项A是必需的:
my_ansible_repo
|-- group_vars
|-- main.yml
|-- vault
|-- main.yml
|-- roles
|-- role1
|-- defaults
|-- main.yml
|-- tasks
|-- main.yml
|-- meta
|-- main.yml
|-- role_a
|-- tasks
|-- main.yml
|-- my_playbook.yml