Как использовать существующие Файлы хранилища в Ansible Tower?

Я хочу импортировать существующие инвентаризации, которые я ранее использовал с Ansible (автономно), включая файлы group_vars и хранилища, в Ansible Tower (3.2.0).

Однако , это не Кажется, что они не работают, когда в игру вступают файлы Vault. После того, как я настроил учетные данные файла паролей Vault и создаю инвентарь с использованием типа источника «Источник из проекта» - я не могу выбрать учетные данные Vault в разделе «Сведения об источнике».

Credentials Dialog screenshot

Когда я вручную ввожу их и сохраняю источник - синхронизация завершается неудачно со следующей ошибкой:

 1.735 INFO     Updating inventory 10: TEST
    1.753 DEBUG    Using system install of ansible-inventory CLI: /usr/bin/ansible-inventory
    1.753 INFO     Reading Ansible inventory source: /var/lib/awx/projects/_6__ansible_master/inventories/test/hosts
    1.754 DEBUG    Using private credential data in '/tmp/awx_123_LXUj9p'.
    1.755 DEBUG    Using fresh temporary directory '/tmp/awx_proot_ZURWmR' for isolation.
    1.755 DEBUG    Running from `/var/lib/awx/projects/_6__ansible_master/inventories/test` working directory.
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 9, in <module>
    load_entry_point('awx==3.2.0', 'console_scripts', 'awx-manage')()
  File "/lib/python2.7/site-packages/awx/__init__.py", line 107, in manage
  File "/var/lib/awx/venv/awx/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib/python2.7/site-packages/django/core/management/__init__.py", line 346, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib/python2.7/site-packages/django/core/management/base.py", line 394, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib/python2.7/site-packages/django/core/management/base.py", line 445, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib/python2.7/site-packages/django/core/management/base.py", line 661, in handle
    return self.handle_noargs(**options)
  File "/lib/python2.7/site-packages/awx/main/management/commands/inventory_import.py", line 1000, in handle_noargs
  File "/lib/python2.7/site-packages/awx/main/management/commands/inventory_import.py", line 243, in load_inventory_source
  File "/lib/python2.7/site-packages/awx/main/management/commands/inventory_import.py", line 179, in load
  File "/lib/python2.7/site-packages/awx/main/management/commands/inventory_import.py", line 163, in command_to_json
RuntimeError: ansible-inventory failed (rc=4) with stdout:

stderr:
ERROR! Attempting to decrypt but no vault secrets found

Я также попытался создать файл ansible_vault и указать на него переменную vault_password_file - но это тоже не сработает (жалуется, что не может найти файл паролей хранилища) .

Кто-нибудь сталкивался с этим раньше?

4
задан 13 October 2017 в 14:40
3 ответа

Похоже, это скорее проблема реализации. Согласно RedHat, не рекомендуется хранить файлы хранилища вместе с инвентаризацией - это будет означать, что он расшифровывает файл каждый раз, когда запускается синхронизация инвентаризации.

Я решил эту проблему сейчас, используя "vars_files" в учебник. Это выглядит так:

  # Secrets
  vars_files:
    - '../../secrets/{{ tower_env }}/vault.yml'

В Tower я передаю переменную tower_env, например «dev» или «qa», которые затем расшифровывают соответствующий файл хранилища при запуске playbook, а не при синхронизации инвентаризаций.

4
ответ дан 3 December 2019 в 03:15

хорошо - после расследования я могу признать, что в настоящее время нет возможности сделать это в версии 2.6. 5 по следующей причине:

  • вполне возможно зашифровать переменные где угодно в host_vars или group_vars
  • пароль хранилища берется исключительно способами:

- пароль хранилища -file параметр

- ask-vault-pass , который был заменен на - vault-id = @ prompt

согласно коду, указанному здесь из строка 220

Нам понадобится еще одна возможность предоставить кодовую фразу хранилища, например с помощью групповой переменной, что в настоящее время невозможно.

А это означает, что Bugreport на Github не решен / не заменен чем-то другим. ИМХО это все еще раскрыто всеми другими потоками. Я продолжу рассказ об ошибке на github.

1
ответ дан 3 December 2019 в 03:15

Есть 2 вещи, которые вы пытаетесь сделать, которые (по крайней мере, на данный момент) не поддерживаются:

  • расшифровка ваших секретов во время импорта инвентаря
  • с использованием ansible-vault для шифрования всего файла, в отличие от переменных

Терминология здесь немного скудная, но посмотрите в этих документах раздел «Единая зашифрованная переменная», я иногда называю эти встроенные переменные.

https://docs.ansible.com/ansible/latest/user_guide/playbooks_vault.html

Теперь Ansible поддерживает перемещение этих встроенных переменных с через в процесс анализа инвентаризации. Этот формат тоже не менее безопасен, под капотом тот же алгоритм. имя зашифрованных переменных будет доступно людям, имеющим доступ к вашей системе управления версиями (что, вероятно, разумно), но ваше значение будет зашифровано.

Теперь сохраните значения с этим синтаксисом в .yml файлы переменных в папках group_vars / или host_vars / . Вы должны обнаружить, что синхронизация инвентаря внутри Tower прошла успешно (без использования каких-либо учетных данных хранилища), и когда вы перейдете к группе или хосту, вы увидите зашифрованную форму переменной.

Когда вы запустите playbook (шаблон задания) в Башне), а затем прикрепите учетные данные хранилища в это время. Это задерживает шифрование до контекста времени выполнения, когда оно действительно необходимо.

Пример структуры файла инвентаризации:

https://github.com/AlanCoding/Ansible-inventory-file-examples/tree/master/vault/single_var_file

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

0
ответ дан 3 December 2019 в 03:15

Теги

Похожие вопросы