web-dev-qa-db-fra.com

problème "ignorer: aucun hôte ne correspond" avec Vagrant et Ansible

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?

  • Hôte: Debian 7.2
  • Machine client: Debian 7
  • Virtualbox: 4.1.18
  • Vangrantup: 1.4.1
  • Ansible: 1.5
28
Dubby

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
  • Lancez-vous le à travers le ssh vagrant avec --connection=local essayez un/etc/ansible/hosts
 [webserver1] 
 127.0.0.1 ansible_connection = local 
  • Utilisez-vous le plugin ansibleLocal provider/vagrant? 
30
mestachs

Assurez-vous que vous utilisez la commande ansible-playbook au lieu de la commande pure ansible.

27
Ricardo Mayerhofer

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
19
Theo Kouzelis

Changer les hôtes en "tous" a fonctionné pour moi.

---
- hosts: all
  user: vagrant
  Sudo: yes
9
Theo Kouzelis

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
3
Lorin Hochstein

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"

2
Guillaume Dedrie

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']
}
1
Geetha

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.

1
Vaseem007