В соответствии с Ansible руководствами важно иметь спецификации среды c. Вы можете связать эту переменную на уровне инвентаря, а не на уровне работы. Вот мои предложения -
1. Задать спецификацию среды c инвентаризации - Важно не изменять состояние узла в какой-либо другой среде, что помогает избежать неожиданностей во время выполнения. https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#example -one-инвентарь-на-среду .
2. Move env. Speci c информация. из playbooks в инвентарь - Вы можете настроить env. укажите c переменные на вашем уровне инвентаря вместе с магическими c переменными. Маги c переменные известны Ansible. Например -
ansible_connection, ansible_user, ansible_ssh_pass . Ansible хорошо понимает, он должен войти в систему через s sh, используя ansible_user, ansible_ssh_pass .
Таким образом, вам не нужно указывать учетные данные на AWX Job Шаблон и счастливо оставить параметр учетных данных машины пусто на уровне шаблона. https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html#magic.
3. Переменные и хранилище - Обратите внимание, что раздел учетных данных содержит значения в виде переменных. Очевидно, мы не хотим показывать какие-либо учетные данные в виде открытого текста. поэтому важно следовать рекомендациям Ansible, чтобы Ansible находил переменные в незашифрованном файле и все чувствительные переменные поступали из зашифрованного файла. https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#variables -and-vaults .
Я сохраняю переменный файл, т.е. файл конфигурации, вместе с хранилищем, чтобы они отображались во время выполнения в книгах воспроизведения. Вы можете создать подкаталог скажем vars и отобразить переменные, указанные как значения в переменных инвентаризации, в файл vars / var.yml . vars.yml может иметь ключ, определяемый как -
ssh_secret_dev: "{{ vault_secret_pass }}"
ssh_user_dev: username
И зашифрованный файл хранилища может иметь окончательное значение -
vault_secret_pass: very_secret_password
Почему большой танец? Почему бы просто не определить все в хранилище и не связать переменную инвентаря с хранилищем? Это обеспечивает дополнительный уровень безопасности, где вы можете отобразить защищенные учетные данные в файле переменной и более конфиденциально в хранилище. Очевидно, что хранилище будет зашифровано, поэтому вам нужно указать учетные данные хранилища на уровне шаблона задания. Раздел учетных данных на уровне шаблона задания будет содержать только учетные данные хранилища.
4. Выберите приглашение при запуске для инвентаризации на уровне шаблона задания - поскольку мы создаем среду WorkFlows, указав c, а не шаблоны задания, поэтому , мы можем упомянуть Inventory на уровне WorkFlow и выбрать параметр «Приглашение при запуске» на уровне «Шаблон работы», чтобы разрешить применение Inventory ко всем шаблонам заданий, которые имеют параметр «Запуск при запуске».
5. Редактирование Playbooks для загрузки этих двух переменных файлов (vault.yml и vars.yml).
- hosts: localhost
vars_files:
- ./vars/vault.yml
- ./vars/vars.yml
gather_facts: no
no_log: true
tasks:
- .....some tasks......
Вы также можете использовать любую переменную, которую вы определили в инвентаре (которая не является специальной ansible переменными), и использовать их в своих книгах, значения которых можно выбрать из переменной. файлы.