У меня есть набор сценариев и ролей, которые создают довольно сложную платформу приложений: несколько сценариев, несколько ролей и несколько файлов инвентаризации определяют конкретные варианты платформы. Во время сборки мне нужно ввести имена пользователей / пароли для: учетных записей базы данных, для доступа к git, чтобы получить код и т. Д.
Я хочу запросить все учетные данные для всех playbooks сразу после того, как будет запущена команда ansible-playbook (например, в первой playbook). Сбор их в нескольких сценариях по мере необходимости будет означать приостановку сборки в различных точках с интервалом в несколько минут, поэтому я бы предпочел получить все учетные данные за один раз в самом начале.
Мне также нужна возможность иметь значения по умолчанию для учетных данных, когда я разрабатываю книги воспроизведения Ansible или создаю простую тестовую среду, и мне не нужно вырезать и вставлять реальные учетные данные из диспетчера паролей. Значения по умолчанию означают, что я могу несколько раз нажать return, чтобы принять заранее определенные значения по умолчанию и быстро перейти к сценариям и ролям, которые на самом деле что-то создают.
Ansible Vault - это вариант, но он кажется чрезмерным для моего простого требования, а менеджеры паролей - нормальное решение для моей организации в этой ситуации, поэтому я бы дублировал учетные данные, если бы я представил Vault.
Я смотрел на vars_prompts
, но это не подходит по нескольким причинам, в том числе по следующей: область переменных - это просто текущая книга, поэтому я не могу использовать их позже; и это group_vars
недоступны для vars_prompt
раздел, поэтому я не могу контролировать, какие переменные запрашиваются, на основе переменных, определенных в файле инвентаризации.
Я посмотрел на pause
модуль, который может получить доступ к group_vars вместе с when
статьи и set_facts
чтобы сделать вары доступными позже. Пример рабочего кода ниже, но он довольно подробный, требующий pause
задача и два set_facts
для каждой части собранных данных.
Но первый вопрос: есть ли в Ansible лучшее и стандартное решение этой проблемы? Сбор всех учетных данных в начале выполнения playbook кажется таким очевидным требованием, но я не могу нигде найти стандартное решение этой проблемы.
pre_tasks:
- name: "get username"
pause:
prompt: "Enter username [defaultusername]"
register: username
run_once: yes
- name: username after pause command is
debug:
msg: "{{username}}"
- name: set_fact for default username
set_fact:
username_fact: "defaultusername"
when: username.user_input == ""
- name: set_fact for non-default username
set_fact:
username_fact: "{{username.user_input}}"
when: username.user_input != ""
- name: username_fact
debug:
msg: "username_fact is {{username_fact}} "
ИМХО вы неправильно автоматизируете вещи, когда хотите разрабатывать решения, которые всегда будут зависеть от ручного ввода данных пользователем. Это также затруднит, если не сделает невозможным, автоматический запуск playbook (из Ansible Tower / AWX).
Ansible vault - это стандарт defacto для безопасного предоставления секретов вашим плейбукам, но когда вы используете Ansible-Tower, у вас есть другие варианты, а также вы можете извлекать секреты из внешних систем: Seee документы
Я бы просто сохранил учетные данные / секреты, которые ваши playbooks будут использовать в файле переменных.
Храните эти файлы переменных в виде открытого текста (со значениями по умолчанию) для вашей разработки, когда вы обнаружите, что хранилище Ansible слишком громоздко для его использования.
В производстве используйте другой файл переменных и либо используйте хранилище для полного шифрования этих файлов, либо используйте опцию хранилища для шифрования только значений определенных переменных, в результате чего надежно хранятся секреты в файлах, которые все еще доступны для чтения, например:
notsecret: myvalue
mysecret: !vault |
$ANSIBLE_VAULT;1.1;AES256
66386439653236336462626566653063336164663966303231363934653561363964363833313662
6431626536303530376336343832656537303632313433360a626438346336353331386135323734
62656361653630373231613662633962316233633936396165386439616533353965373339616234
3430613539666330390a313736323265656432366236633330313963326365653937323833366536
34623731376664623134383463316265643436343438623266623965636363326136
other_plain_text: othervalue
Видеть https://docs.ansible.com/ansible/2.4/playbooks_vault.html#single-encrypted-variable