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 secretche 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_passqui.
es secret::
ansible_sudo_pass: mysudopassword
Salva ed esci, ora hai un secretfile 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-fileoggetto che userà per decrittografare il tuo secretfile.
Crea un file chiamato vault.txte in quello inserisci la password che hai usato durante la creazione del secretfile. 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