2016-03-30 17 views
3

Erstens habe ich viele ähnlich getaggte Posts gesehen, aber nichts, was funktioniert .. Ich habe einen vorhandenen Ansible-Host, den ich erfolgreich verwenden, um Software auf anderen Servern bereitzustellen. Ich wollte eine Testumgebung mit Vagrant einrichten, um meine bestehenden Playbooks ohne Änderungen zu starten.Ausführen von Aufgaben auf Localhost mit Vagrant und Ansible

Ich habe Ansible und Vagrant auf einem anderen Server installiert und über die Playbook-, Inventory- und Gruppen-/Host-Vars-Dateien kopiert.

Allerdings, wenn ich vagrant up laufen, die das Textbuch auf dem Vagabunden Host aufruft, mit einem ansible (remote) provisioner, gibt es die folgende Meldung an, wenn sie gegen Hosts ausgeführt werden: localhost

PLAY [Set fact for later use] ************************************************** 
skipping: no hosts matched 

Das Textbuch (Auszug) sieht wie folgt aus:

- name: Set fact for later use 
    hosts: localhost 
    tasks: 
    - name: set number of hosts for later use 
     set_fact: num_hosts="{{ groups[tagname] | length }}" 

ich auch versucht habe:

- name: Set fact for later use 
    hosts: 127.0.0.1 
    connection: local 
    tasks: 
    - name: set number of hosts for later use 
     set_fact: num_hosts="{{ groups[tagname] | length }}" 

Mein statischen Inventar (Auszug) sieht wie folgt aus:

'# Ungrouped hosts, specify before any group headers. 
localhost ansible_connection=local 

Ich habe versucht, dynamische Inventar und verschiedene Kombinationen von localhost/127.0.0.1 im Textbuch und die Bestandsdatei, aber der Schritt übersprungen wird immer auf dem Vagabunden-Host.

Antwort

0

Grundsätzlich weiß ich, das Playbook funktioniert, weil ich es die ganze Zeit laufen. Ich habe versucht, es manuell auf dem Vagrant-Host ausgeführt und es lief wie erwartet. Dann war es einfach ein Fall von dem ansible provisioner mit dem Vagabunden host_shell provisioner ersetzt, die über ein Plugin zur Verfügung:

vagrant Plugin Vagabund-Host-Shell

Für Vollständigkeit installieren:

config.vm .provision: host_shell, inline: < < -Schale

cd ansible

ansible-Textbuch -v -i Inventar install.yml --extr a-vars '{ "db": "mysql"}'

SHELL

+0

Ist diese zusätzliche Information über die Frage oder haben Sie eine Lösung gefunden? Das Format hier ist Q & A, es ist kein Forum, in dem du einen neuen Beitrag machst, um zusätzliche Informationen hinzuzufügen. – bschlueter

+0

Dies ist eigentlich das einzige, was bei mir mit den neuesten Ansible und Vagrant funktioniert hat. OP muss nur klarer sein, dass dies tatsächlich sein Problem gelöst hat. –

1

localhost ansible.limit hat mein Problem gelöst Hinzufügen ich pro Vagrantfile Ausführung nur einmal Provisioning zu starten, so dass ich

ansible.limit = "all,localhost" 

Im Fall, wenn Sie starten ansible Provisioning für jede VM Sie so etwas wie

ansible.limit = "#{machine.vm.hostname},localhost" 

Die Grenze Schlüssel übergeben direkt an ansible und Vagrant Satz verwenden kann es auf jeden Fall. Wenn das Limit nicht direkt angegeben wird, wird es auf den aktuellen VM-Hostnamen gesetzt, so dass Ansible nur mit der VM funktioniert, die gerade bereitgestellt wird.

2

Ich werde anhand Ihres ersten Textbuch Beispiel beantworten:

- name: Set fact for later use 
    hosts: localhost 
    tasks: 
    - name: set number of hosts for later use 
     set_fact: num_hosts="{{ groups[tagname] | length }}" 

In diesem Textbuch-Extrakt, wenn Sie sagen, hosts: localhost, Sie sind nicht wirklich ansible sagen, die Aufgabe auf localhost (127.0.0.1 laufen). Stattdessen erwartet ansible "localhost" als Überschrift in einer "hosts" -Datei, die sich standardmäßig hier befindet:/etc/ansible/hosts.

Um dies zu demonstrieren, werfen Sie einen Blick auf die Struktur des ansible Textbuch in Wallabag's Docker repo:

Wallabag's Ansible Setup

Beachten Sie, wie es ist ein ansible Textbuch (entrypoint.yml) und einem anderen Host-Datei. Die Hosts-Datei lautet:

[localhost] 
localhost 

Diese Datei, bekannt als Inventory stellt eine Liste von Hosts, auf dem das Textbuch ausgeführt werden soll. Betrachten Sie nun die ersten beiden Zeilen des entrypoints.yml Textbuch:

--- 
- hosts: localhost 
... 

Wenn wir sagen, dass der Eintrag für Hosts ‚localhost‘, die wir verwenden localhost nicht 127.0.0.1 zu bedeuten, aber wir werden einfach unter Bezugnahme an alle Hosts in der Hosts-Datei unter der [localhost] Überschrift.


Wenn wir also die gleiche Funktionalität halten wollte, aber verändert die HOSTS-Datei an:

[bingo] 
localhost 

wir die zweite Zeile von entrypoint.yml ändern möchte:

--- 
- hosts: bingo 
... 
Verwandte Themen