Precisamos implantar chaves nos servidores, mas o truque é que as chaves são muitas e nem todas elas devem ter implantação em todos os servidores. Agora fazemos o seguinte:
em vars funções/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
na tarefa: funções/authorized_keys/tasks/main.yml
- name: Add ssh key.
authorized_key: user={{ item.name }} key="{{ item.key }}" state={{ item.state }}
with_items: ssh_users
no playbook: authorized_keys.yml
---
- hosts: '{{ hosts }}'
vars_files:
- '{{ vars }}'
roles:
- { role: authorized_keys }
Antes de iniciar o playbook, altere funções/authorized_keys/vars/main.yml (presente ou ausente). Ao iniciar o playbook, adicione hosts e grupo de hosts:
ansible-playbook -i production --extra-vars "hosts=web:pg:1.2.3.4" authorized_keys.yml
Antes estava tudo bem, mas agora aumentou o número de chaves e servidores. E agora não me lembro de quem é a chave em qual servidor.
Diga-me, por favor, como posso configurar a lista de hosts para cada chave? Por exemplo algo assim:
- 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
Eu usaria uma variável de host "ssh_users", que indica os usuários que precisam adicionar suas chaves de host.
Então, você tem um arquivo de variável separado que define o nome, a chave e o estado de cada usuário SSH. Importe esse arquivo variável e, em seguida, chame sua tarefa original praticamente como está.