it-swarm.com.de

"Überspringen: Keine Hosts gefunden" - Problem mit Vagrant und Ansible

Ich habe Vagrant, VirtualBox und Ansible installiert und versucht, die Bereitstellung über einen Host auszuführen, aber es wird immer "Überspringen: Keine Hosts gefunden" zurückgegeben.

Der Kopf meiner Playbook-Datei sieht folgendermaßen aus:

---
- hosts: webservers
  user: vagrant
  Sudo: yes

und meine /etc/ansible/hosts-Datei sieht folgendermaßen aus:

[webservers]
webserver1

Ich habe versucht, die IP-Adresse dort zu platzieren, hatte aber das gleiche Ergebnis. Ich habe meinen SSH-Schlüssel zum Server hinzugefügt und den Webserver1-Host zu .ssh/config und /etc/hosts hinzugefügt.

Ich kann ssh [email protected] ohne Verwendung des SSH-Schlüssels ohne Eingabe eines Passworts bezahlen.

Was fehlt mir hier?

  • Host: Debian 7.2
  • Client-Rechner: Debian 7
  • Virtualbox: 4.1.18
  • Vangrantup: 1.4.1
  • Ansible: 1.5
28
Dubby

Es könnte hilfreich sein, Ihre Vagrantfile und Ihre verfügbare Inventardatei zu veröffentlichen.

  • Verwenden Sie den standardmäßig ansässigen Anbieter von Vagrant?

    haben Sie den inventory_path angegeben?

 config.vm.provision: ansible do | ansible | 
 ansible.playbook = "Bereitstellung/playbook.yml" 
 ansible.inventory_path = "Bereitstellung/ansible_hosts" 
 Ende
  • Starten Sie es durch das Vagrant-SSH mit --connection=local, probieren Sie ein/etc/ansible/hosts
 [webserver1] 
 127.0.0.1 ansible_connection = local 
  • Verwenden Sie das Provider/Vagrant-Plugin von ansibleLocal? 
30
mestachs

Stellen Sie sicher, dass Sie den Befehl "Ansible-Playbook" anstelle des Befehls "Pure Ansible" ausführen.

27

Ich denke, Sie können dies auch ohne eine hosts-Datei tun, indem Sie die Ansible-Gruppen in Ihrer Vagrant-Datei zuweisen. 

Wenn Ihre Vagrant-Datei nicht über mehrere Maschinen verfügt, wird Ihre Box wahrscheinlich als "Standard" bezeichnet und Sie können mit dem folgenden Code mehrere Ansible-Gruppen hinzufügen.

Code: 

config.vm.provision "ansible" do |ansible|
    ansible.groups = {
        "webservers" => ["default"],
        "dev_enviroment" => ["default"]
    }

    ansible.playbook = "provisioning/playbook.yml"
end
19
Theo Kouzelis

Das Wechseln der Hosts zu "Alle" hat für mich funktioniert.

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

Das erste, was mir auffällt, ist, dass die Syntax im Kopf Ihrer Playbook-Datei falsch ist (es gibt zusätzliche Bindestriche, wo dies nicht der Fall sein sollte). Es sollte stattdessen so aussehen:

---
- hosts: webservers
  user: vagrant
  Sudo: yes
3
Lorin Hochstein

Laut der Vagrant-Dokumentation ( http://docs.vagrantup.com/v2/provisioning/ansible.html ) erstellt Vagrant automatisch eine Host-Datei mit dem Namen vagrant_ansible_inventory_default, die Vagrant vm verwendet, wenn Sie Ansible für Provision verwenden .config Informationen (wie Ihre VM IP, Remote-SSH-Port).

Fügen Sie einfach Ihren Playbook-Pfad mit dem ansible.playbook = "playbook.yml" hinzu.

2

Ich habe versucht, die Gruppen auf die Standard-Vagrant-Box zu zeigen, und es hat funktioniert. Siehe https://gagor.pl/2015/12/ansible-on-vagrant-skipping-no-hosts-matched/

ansible.groups = {
  'webservers' => ['default']
}
1
Geetha

Sie können Ihr Playbook im ausführlichen Modus ausführen, indem Sie am Ende -vvvv hinzufügen. Ansible verwendet die Host-Datei aus /etc/ansible/hostsadd

Sie können prüfen, welche Inventardatei von Ihrem Ansible verwendet wird

ansible --version
ansible 2.0.0.2
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides

Überprüfen Sie dann Ihre Host-Datei, ob sie die genaue Gruppe für Host enthält

 vim /etc/ansible/hosts
 [webserver1]
 IP of machine

Überprüfen Sie, indem Sie den folgenden Befehl ausführen 

ansible -m ping 10.0.3.145 (IP Of machine)
10.0.3.145 | SUCCESS => {
"changed": false, 
"ping": "pong"

}

Dies sollte das Problem beheben.

1
Vaseem007