Нам нужны ключи развертывания на серверах, но хитрость в том, что ключей много и не все из них должны развертываться на всех серверы. Теперь делаем это следующим образом:
в vars role / authorized_keys / vars / main.yml
ssh_users:
- name: bob
key: "{{ lookup('file', 'roles/authorized_keys/vars/bob.pub') }}"
state: present
- name: root
key: "{{ lookup('file', 'roles/authorized_keys/vars/guru.pub') }}"
state: present
- name: root
key: "{{ lookup('file', 'roles/authorized_keys/vars/user.pub') }}"
state: absent
в задаче: roles / authorized_keys / tasks / main.yml
- name: Add ssh key.
authorized_key: user={{ item.name }} key="{{ item.key }}" state={{ item.state }}
with_items: ssh_users
в playbook: При запуске playbook добавляю хосты и группу хостов:
ansible-playbook -i production --extra-vars "hosts=web:pg:1.2.3.4" authorized_keys.yml
Раньше все было хорошо, но теперь увеличилось количество ключей и серверов. А теперь не помню, чей ключ на каком сервере должен быть.
Подскажите пожалуйста, как настроить список хостов для каждого ключа? Например, что-то вроде этого:
- name: bob
key: "{{ lookup('file', 'roles/authorized_keys/vars/bob.pub') }}"
servers: web,database,12.12.12.12
state: present
- name: root
key: "{{ lookup('file', 'roles/authorized_keys/vars/guru.pub') }}"
servers: api,pg,30.30.30.30
state: present
Я бы использовал переменную хоста "ssh_users", в которой указаны пользователи, которым нужно добавить их ключи хоста.
- ssh_users:
- bob
- root
- alice
Затем у вас есть отдельный файл переменных, который определяет имя, ключ и состояние для каждого пользователя SSH. Импортируйте этот файл переменных, а затем вызовите исходную задачу как есть.