Probabilmente il modo migliore per farlo - supponendo che non sia possibile utilizzare la soluzione NOPASSWD fornita da scottod è utilizzare la soluzione di Mircea Vutcovici in combinazione con Ansible vault .
Ad esempio, potresti avere un playbook simile a questo:
- hosts: all
vars_files:
- secret
tasks:
- name: Do something as sudo
service: name=nginx state=restarted
sudo: yes
Qui stiamo includendo un file chiamato secret
che conterrà la nostra password sudo.
Useremo ansible-vault per creare una versione crittografata di questo file:
ansible-vault create secret
Questo ti chiederà una password, quindi apri l'editor predefinito per modificare il file. Puoi metterti ansible_sudo_pass
qui.
es secret
::
ansible_sudo_pass: mysudopassword
Salva ed esci, ora hai un secret
file crittografato che Ansible è in grado di decrittografare quando esegui il tuo playbook. Nota: è possibile modificare il file con ansible-vault edit secret
(e immettere la password utilizzata durante la creazione del file)
L'ultimo pezzo del puzzle è fornire ad Ansible un --vault-password-file
oggetto che userà per decrittografare il tuo secret
file.
Crea un file chiamato vault.txt
e in quello inserisci la password che hai usato durante la creazione del secret
file. La password deve essere una stringa memorizzata come una singola riga nel file.
Dai documenti Ansible:
.. assicurati che le autorizzazioni sul file siano tali che nessun altro possa accedere alla tua chiave e non aggiungere la chiave al controllo del codice sorgente
Finalmente: ora puoi eseguire il tuo playbook con qualcosa del genere
ansible-playbook playbook.yml -u someuser -i hosts --sudo --vault-password-file=vault.txt
Quanto sopra presuppone il seguente layout di directory:
.
|_ playbook.yml
|_ secret
|_ hosts
|_ vault.txt
Puoi leggere di più su Ansible Vault qui: https://docs.ansible.com/playbooks_vault.html