Как управлять переменными / секретами для нескольких хостов только один раз с Ansible? Se - PullRequest
0 голосов
/ 10 июня 2019

В настоящее время я пытаюсь найти лучший способ управления общими секретами между несколькими хостами.Я хочу указать эти секреты только в одном месте, а не в нескольких файлах и т. Д.

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

Однако для одного конкретного аспекта мне нужен общий секрет между парамииз хостов, например, hostA поделится секретом с hostB, но hostA поделится другим секретом с hostC.

Упрощение проблемы и сведение ее к коду, это выглядит примерно так:

Задача в playbook, которая будет запускаться на всех хостах:

- name: manage secrets
  template: src=secrets.j2 dest=/etc/secrets owner=root group=root mode=0600

Шаблон

{% for secret in abc.secrets %}
secret {{ secret }}
{% endfor %}

Переменные

abc:
  someAttribute: 123
  secrets:
    - 123
    - 234

I 'Теперь я пытаюсь иметь только секреты на каждом хосте, которые ему нужны, вместо того, чтобы иметь все секреты на всех хостах (как в примере выше).

Моя идея примерно такая:

Наличие глобальной структуры с секретами и списком хостов, на которые она влияет, например,

secrets:
  - secret: 123
    hosts:
      - hostA
      - hostB
  - secret: 234
    hosts:
      - hostA
      - hostC

Установка переменных для определенных хостов с помощью set_fact

Это то, что в настоящее время не работает дляме.Ищите способы, как реализовать это и / или даже лучше подходить всем вместе.

1 Ответ

1 голос
/ 11 июня 2019

Поскольку ansible ориентирован на хост, я бы также использовал структуру данных, ориентированную на хост.Когда вы определяете что-то вроде этого, тогда у вас также есть все секреты, определенные только один раз и в одном центральном месте.

secrets:
  secretAB: '123'
  secretAC: '234'
  secretBC: '345'

myhosts:
  - host: 'hostA'
    secrets:
      - '{{ secrets.secretAB }}'
      - '{{ secrets.secretAC }}'
  - host: 'hostB'
    secrets:
      - '{{ secrets.secretAB }}'
      - '{{ secrets.secretBC }}'
  - host: 'hostC'
    secrets:
      - '{{ secrets.secretAC }}'
      - '{{ secrets.secretBC }}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...