Ansible + SSH keys, как сделать задуманое?

Нужно деплоить ключи на сервера, но фишка в том, что ключей много и они не должны все попадать на все сервера. Сейчас это реализируется следующим образом.
в файле roles/authorized_keys/vars/main.yml
ssh_users:
  - name: pupkin
    key: "{{ lookup('file', 'roles/authorized_keys/vars/pupkin.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


в плейбуке: authorized_keys.yml
---
- hosts: '{{ hosts }}'
  vars_files:
    - '{{ vars }}'
  roles:
    - { role: authorized_keys }


Перед запуском редактирую: roles/authorized_keys/vars/main.yml, present или absent
И при запуске указываю групы хостов или хосты. Сначала было все норм, но сейчас больше ключей и серверов, уже не помню чей ключ должен быть на каком сервере. Было бы хорошо если например вот так возможно было, в файле roles/authorized_keys/vars/main.yml
- name: pupkin
    key: "{{ lookup('file', 'roles/authorized_keys/vars/pupkin.pub') }}" 
    servers: web,database,12.12.12.12
    state: present

Чтобы для каждого ключа были перечень серверов куда их закидывать.
Или может есть другой способ это реализовать.
  • Вопрос задан
  • 9783 просмотра
Пригласить эксперта
Ответы на вопрос 1
@gerasimov
собственно ничего не мешает вам это сделать, нужно изменить описание ключей в roles/authorized_keys/vars/main.yml примерно так:
ssh_users:
  - name: pupkin
    key: "{{ lookup('file', 'roles/authorized_keys/vars/pupkin.pub') }}" 
    servers: 
      - host1
      - host2
    state: present
  - name: root
    key: "{{ lookup('file', 'roles/authorized_keys/vars/guru.pub') }}"
    servers: 
      - host1
      - host2
    state: present
  - name: root
    key: "{{ lookup('file', 'roles/authorized_keys/vars/user.pub') }}"
    servers: 
      - host3
      - host4
    state: absent

и добавить условие в roles/authorized_keys/tasks/main.yml:
- name: Add ssh key.
    authorized_key: user="{{ item.name }}" key="{{ item.key }}" state="{{ item.state }}"
    when: "inventory_hostname in item.servers"
    with_items: "{{ ssh_users }}"

при этом само собой имена перечисленные в servers должны совпадать с тем что написано в inventory
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы