Ansible развернуть несколько авторизованных ключей на нескольких хостах
Нам нужны ключи развертывания на серверах, но дело в том, что ключей много, и не все из них должны быть развернуты на всех серверах. Теперь мы делаем это следующим образом:
в ролях vars / 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
в задании: role / authorized_keys / tasks / main.yml
- name: Add ssh key.
authorized_key: user={{ item.name }} key="{{ item.key }}" state={{ item.state }}
with_items: ssh_users
в плейбуке: authorized_keys.yml
---
- hosts: '{{ hosts }}'
vars_files:
- '{{ vars }}'
roles:
- { role: authorized_keys }
Перед запуском playbook поменяйте ролями / authorized_keys / vars / main.yml (присутствует или отсутствует). При запуске 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
1 ответ
Я бы использовал переменную хоста "ssh_users", которая указывает пользователей, которым нужны их ключи хоста.
- ssh_users:
- bob
- root
- alice
Затем у вас есть отдельный файл переменных, который определяет имя, ключ и состояние для каждого пользователя SSH. Импортируйте этот переменный файл, а затем вызовите исходную задачу почти как есть.