Назад | Перейти на главную страницу

Ansible развертывает несколько authorized_keys на нескольких хостах

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

в варах роли / авторизованные_ключи / вары / 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

в задаче: роли / авторизованные_ключи / задачи / main.yml

- name: Add ssh key.
    authorized_key: user={{ item.name }} key="{{ item.key }}" state={{ item.state }}
    with_items: ssh_users

в учебнике: авторизованный_keys.yml

---
- hosts: '{{ hosts }}'
  vars_files:
    - '{{ vars }}'
  roles:
    - { role: authorized_keys }

Перед началом смены playbook роли / авторизованные_ключи / вары / 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

Я бы использовал переменную хоста «ssh_users», в которой указываются пользователи, которым нужно добавить их ключи хоста.

- ssh_users:
   - bob
   - root
   - alice

Затем у вас есть отдельный файл переменных, который определяет имя, ключ и состояние для каждого пользователя SSH. Импортируйте этот файл переменных, а затем вызовите исходную задачу как есть.