Come può essere utilizzato Ansible tramite il ansible
provider di Vagrant mentre si lavora con azioni che become
un superutente? Ogni tentativo che ho fatto finora non funziona per ragioni abbastanza inspiegabili.
Lo scenario sta annotando apt
un'azione con become
per dargli le giuste autorizzazioni. L'invocazione di Ansible, che viene attivata vagrant provision
, è SSHing tramite l' vagrant
utente (che Vagrant ora applica per impostazione predefinita tramite il ansible
provider), un utente che ha una password sudo
predefinita per impostazione predefinita su due caselle di base che ho provato: ubuntu/trusty64
e debian/stretch64
.
Nonostante sudo apparentemente senza password sia supportato sulla macchina virtuale sottostante, questo non funziona e genera il seguente errore:
fatal: [default]: FAILED! => {"changed": false, "module_stderr": "sudo: a password is required\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}
Dato che le caselle Vagrant usano il nome utente vagrant
/ vagrant
for e le password sulle caselle di default, allora aggiorno il Vagrantfile per chiedere esplicitamente una password sudo:
config.vm.provision "ansible" do |ansible|
ansible.playbook = 'main.yml'
ansible.ask_become_pass = true
Che richiede una password:
default: Running ansible-playbook...
SUDO password:
Tuttavia, dopo vagrant
averlo inserito non riesce ancora, anche se posso usare vagrant ssh
per accedere alla VM e confermare che questa è la password corretta:
fatal: [default]: FAILED! => {"changed": false, "module_stderr": "Sorry, try again.\n[sudo via ansible, key=XXXXXXXXXXXXXXXXXXX] password: \nsudo: 1 incorrect password attempt\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}
È interessante notare che il ansible_local
provider funziona bene per la ubuntu/trusty64
scatola, ma fallisce debian/stretch64
per motivi completamente indipendenti. Quindi sembra che abbia a che fare con l'interazione tra Vagrant e Ansible su SSH con sudo.
Informazioni sulle mie installazioni Vagrant e Ansible:
$ ansible --version
ansible 2.7.1
config file = None
configured module search path = ['/Users/XXXXXX/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.7/site-packages/ansible
executable location = /usr/local/bin/ansible
python version = 3.7.1 (default, Nov 6 2018, 18:46:03) [Clang 10.0.0 (clang-1000.11.45.5)]
$ vagrant --version
Vagrant 2.2.2
Qual è l'attuale modo affidabile raccomandato per utilizzare il ansible
provisioner di Vagrant become
? Grazie.