Ansible версия 2.7.9
Я пишу сборник рассказов для развертывания части программного обеспечения в среде Linux.Доступ SSH к этим системам защищен CPM (Cyberark), который используется как менеджер ключей ssh.
Я понял большую часть логики, за исключением одного куска.Плейбук должен пройтись по хостам в группе инвентаризации, найти закрытый ключ ssh в Cyberark для каждого хоста, а затем использовать каждый ключ для подключения ssh к каждому хосту в группе инвентаризации для установки программного обеспечения.Я борюсь с тем, как сделать так, чтобы это работало в ANSIBLE.
Я прочитал документацию add_host и cyberarkpassword , а также около 4 часов поиска по стеку и в блогах, и не смог найти ни одного примера, даже близкого к тому, что япытаясь сделать.
Что касается того, как я думаю , это должно работать:
- Используя модуль поиска cyberarkpassword, прокрутите хосты в группе ресурсов, указанной в
{{ env }}
.Значение для этого будет передано через --extra-args. - Получить закрытый ключ ssh для каждого хоста.
- Зарегистрировать вывод из поиска и скопировать на диск, снова просматриваякаждого хоста и присвоив файлу имя
{{ inventory_hostname }}
.pem - Наконец, чтобы использовать его в следующем воспроизведении, установите переменную
ansible_ssh_common_args: "-o StrictHostKeyChecking=no -i {{ deploy_temp_dir}}/keys/{{ inventory_hostname }}.pem"
Но я не могу понятьиз того, как соединить часть цикла loop-lookup-write на диск.
Пример файла инвентаризации
[local]
localhost
[local:vars]
ansible_connection=local
[corp:children]
corp-onprem-dev
corp-onprem-stage
corp-onprem-prod
corp-cloud-dev
corp-cloud-stage
corp-cloud-dev
[corp-onprem-dev]
host1
host2
host3
[corp-onprem-stage]
host1
host2
host3
[corp-onprem-prod]
host1
host2
host3
[corp-cloud-dev]
[corp-cloud-stage]
[corp-cloud-prod]
deploy.yml - этот код не работает , только моя попытка выяснить это.
- name: retrieve ssh keys for hosts in the specified group, and write them to disk
hosts: local
gather_facts: no
tasks:
- name: lookup ssh private key for each host
debug: msg={{ lookup("cyberarkpassword", cyquery)}}
vars:
cyquery:
appid: 'myapp'
query: 'Safe=mysafe;Folder=Root;Object={{ env[0] }}'
output: 'Password'
loop: groups['{{ env }}']
register: sshkeys
- name: Copy ssh key to disk
copy:
content: "{{ sshkeys }}"
dest: "{{ deploy_temp_dir }}/keys/{{ env[0] }}.pem"
mode: 0600
loop: groups['{{ env }}']