Как передать хранилище (переменную хранилища) в несколько ролей, где сами роли имеют несколько зависимых ролей? - PullRequest
0 голосов
/ 03 июля 2019

Я использую 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

Я читаю здесь , что я могу включить в хранилищев "варс" за главную роль.Есть ли способ для зависимых ролей наследовать переменные (в данном случае хранилище) от главной роли?

1 Ответ

0 голосов
/ 03 июля 2019

Прежде всего мы должны начать с создания ./vault/main.yml из корневого каталога вашего проекта и добавления туда секрета:

my_vault_secret: "It works!"

Затем параметр A , чтобы включить хранилищеВАР с главной ролью, которая будет выделена во время выполнения 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

Подробнее об Ansible переменных по умолчанию в официальной документации здесь и об использовании переменных файлов с книгами воспроизведения, здесь .

...