J'ai installé Vagrant, VirtualBox et Ansible et j'essaie d'exécuter la provision sur un hôte, mais le résultat est toujours "ignorer: aucun hôte ne correspond"
La tête de mon fichier playbook ressemble à ceci:
---
- hosts: webservers
user: vagrant
Sudo: yes
et mon fichier /etc/ansible/hosts
ressemble à ceci:
[webservers]
webserver1
J'ai essayé de mettre l'adresse IP à cet endroit, mais j'ai eu le même résultat. J'ai ajouté ma clé ssh au serveur et ajouté l'hôte webserver1 à .ssh/config
et /etc/hosts
.
Je peux ssh vagrant@webserver1
bien sans être invité à entrer un mot de passe, grâce à l'utilisation de la clé ssh.
Qu'est-ce que j'oublie ici?
Cela pourrait aider d’afficher votre Vagrantfile et votre fichier d’inventaire ansible.
Utilisez-vous le fournisseur de ansible par défaut de vagrant?
avez-vous spécifié le inventory_path
?
config.vm.provision: ansible do | ansible | ansible.playbook = "provisioning/playbook.yml" ansible.inventory_path = "provisioning/ansible_hosts" fin
--connection=local
essayez un/etc/ansible/hosts[webserver1] 127.0.0.1 ansible_connection = local
Assurez-vous que vous utilisez la commande ansible-playbook au lieu de la commande pure ansible.
Je pense que vous pouvez également le faire sans fichier hosts, en assignant les groupes Ansible dans votre fichier Vagrant.
Si vous n'avez pas plusieurs machines dans votre fichier Vagrant, votre boîte s'appellera probablement "par défaut" et vous pourrez ajouter plusieurs groupes Ansible avec le code suivant.
Code:
config.vm.provision "ansible" do |ansible|
ansible.groups = {
"webservers" => ["default"],
"dev_enviroment" => ["default"]
}
ansible.playbook = "provisioning/playbook.yml"
end
Changer les hôtes en "tous" a fonctionné pour moi.
---
- hosts: all
user: vagrant
Sudo: yes
La première chose qui me saute aux yeux, c'est que la syntaxe sur la tête de votre fichier Playbook est incorrecte (il y a des tirets supplémentaires là où ce ne devrait pas être le cas). Cela devrait ressembler à ceci à la place:
---
- hosts: webservers
user: vagrant
Sudo: yes
Selon la documentation de vagrant ( http://docs.vagrantup.com/v2/provisioning/ansible.html ), lorsque vous utilisez Ansible to provision, vagrant crée automatiquement un fichier hôte nommé vagrant_ansible_inventory_default
qui utilise vagrant Informations de configuration (comme votre adresse IP VM, port ssh distant).
Donc, ajoutez simplement votre chemin de livre de lecture en utilisant le ansible.playbook = "playbook.yml"
J'ai essayé de faire pointer les groupes vers la boîte par défaut et cela a fonctionné. Voir https://gagor.pl/2015/12/ansible-on-vagrant-skipping-no-hosts-matched/
ansible.groups = {
'webservers' => ['default']
}
Vous pouvez exécuter votre playbook en mode prolixe en ajoutant -vvvv à la fin. Ansible utilise le fichier hôte de /etc/ansible/hostsadd ci-dessous
Vous pouvez vérifier quel fichier d'inventaire est utilisé par votre ansible en dessous
ansible --version
ansible 2.0.0.2
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
Ensuite, vérifiez votre fichier hôte s'il contient le groupe exact pour l'hôte
vim /etc/ansible/hosts
[webserver1]
IP of machine
vérifier en exécutant la commande ci-dessous
ansible -m ping 10.0.3.145 (IP Of machine)
10.0.3.145 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Cela devrait résoudre le problème.