Je voudrais provisionner mes trois nœuds du dernier en utilisant Ansible.
Mon ordinateur hôte est Windows 10.
Mon Vagrantfile ressemble à:
Vagrant.configure("2") do |config|
(1..3).each do |index|
config.vm.define "node#{index}" do |node|
node.vm.box = "ubuntu"
node.vm.box = "../boxes/ubuntu_base.box"
node.vm.network :private_network, ip: "192.168.10.#{10 + index}"
if index == 3
node.vm.provision :setup, type: :ansible_local do |ansible|
ansible.playbook = "playbook.yml"
ansible.provisioning_path = "/vagrant/ansible"
ansible.inventory_path = "/vagrant/ansible/hosts"
ansible.limit = :all
ansible.install_mode = :pip
ansible.version = "2.0"
end
end
end
end
end
Mon cahier ressemble à ceci:
---
# my little playbook
- name: My little playbook
hosts: webservers
gather_facts: false
roles:
- create_user
Mon fichier hosts ressemble à:
[webservers]
192.168.10.11
192.168.10.12
[dbservers]
192.168.10.11
192.168.10.13
[all:vars]
ansible_connection=ssh
ansible_ssh_user=vagrant
ansible_ssh_pass=vagrant
Après avoir exécuté vagrant up --provision
j'ai eu l'erreur suivante:
Bringing machine 'node1' up with 'virtualbox' provider...
Bringing machine 'node2' up with 'virtualbox' provider...
Bringing machine 'node3' up with 'virtualbox' provider...
==> node3: Running provisioner: setup (ansible_local)...
node3: Running ansible-playbook...
PLAY [My little playbook] ******************************************************
TASK [create_user : Create group] **********************************************
fatal: [192.168.10.11]: FAILED! => {"failed": true, "msg": "ERROR! Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this Host's fingerprint to your known_hosts file to manage this Host."}
fatal: [192.168.10.12]: FAILED! => {"failed": true, "msg": "ERROR! Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this Host's fingerprint to your known_hosts file to manage this Host."}
PLAY RECAP *********************************************************************
192.168.10.11 : ok=0 changed=0 unreachable=0 failed=1
192.168.10.12 : ok=0 changed=0 unreachable=0 failed=1
Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.
J'ai étendu mon Vagrantfile avec ansible.limit = :all
et ajouté [all:vars]
au fichier hôte, mais je ne parviens toujours pas à résoudre le problème.
Quelqu'un at-il rencontré le même problème?
Créez un fichier ansible/ansible.cfg
dans votre répertoire de projet (c'est-à-dire ansible.cfg
dans le provisioning_path
sur la cible) avec le contenu suivant:
[defaults]
Host_key_checking = false
à condition que sshpass
soit déjà installé dans votre boîte Vagrant - ce n'est pas clair, car le message d'erreur dans votre question suggère qu'il a été installé (sinon, ce serait "ERROR! pour utiliser le type de connexion 'ssh' avec des mots de passe, vous devez installer le programme "), mais dans votre réponse vous l'ajoutez explicitement (Sudo apt-get install sshpass
), comme si ce n'était pas
J'utilise Ansible version 2.6.2 et la solution avec Host_key_checking = false
ne fonctionne pas.
Ajout de la variable d’environnement export ANSIBLE_Host_KEY_CHECKING=False
en ignorant la vérification des empreintes digitales.
Ce SO post a donné la réponse.
Je viens de prolonger le fichier known_hosts sur la machine responsable de l'approvisionnement, comme ceci:
Extrait de mon Vagrantfile modifié:
...
if index == 3
node.vm.provision :pre, type: :Shell, path: "install.sh"
node.vm.provision :setup, type: :ansible_local do |ansible|
...
Mon install.sh ressemble à:
# add web/database hosts to known_hosts (IP is defined in Vagrantfile)
ssh-keyscan -H 192.168.10.11 >> /home/vagrant/.ssh/known_hosts
ssh-keyscan -H 192.168.10.12 >> /home/vagrant/.ssh/known_hosts
ssh-keyscan -H 192.168.10.13 >> /home/vagrant/.ssh/known_hosts
chown vagrant:vagrant /home/vagrant/.ssh/known_hosts
# reload ssh in order to load the known hosts
/etc/init.d/ssh reload
Cette erreur peut également être résolue par la simple exportation de la variable ANSIBLE_Host_KEY_CHECKING
.
export ANSIBLE_Host_KEY_CHECKING=False