0

我正在运行 ansible 2.7.10 并有一本剧本,其中我在不同的剧本中“包含”了不同的角色。我所称的所有角色都有共同的依赖角色。

我现在处于一个阶段,我希望该剧本中的所有角色都阅读保险库。

如果我将文件作为额外变量( -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

我在这里读到,我可以将 Vault 包含在主要角色的“vars”中。从属角色有没有办法从主要角色继承变量(在这种情况下是保险库)?

4

1 回答 1

0

首先,我们应该首先./vault/main.yml从您的项目根目录创建一个 , 并在其中添加密码:

my_vault_secret: "It works!"

然后,选项 A包括具有主要角色的保险库变量,将在剧本运行时分配,创建./roles/role1/default/main.yml并添加将引用秘密的变量:

my_vault_var: "{{ my_vault_secret }}"

然后my_vault_varrole_a, role_b,中使用role_c

或者,选项 B,保留./vault/main.yml所有秘密,包括在role_a, role_b,中使用的秘密role_c,但不要使用 default/main.yml,而是直接在用于执行任务的剧本中包含 vault 文件role1role2

- 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

有关 Ansible 默认变量的更多信息,请参见此处的官方文档,以及有关在剧本中使用变量文件的信息,请参见此处

于 2019-07-03T10:27:51.250 回答