2016-05-06 13 views
1

Ich betreibe ein ansible Textbuch, das die route53 Modul verwendet und erhalte eine Fehlermeldung sagen, ich brauche ‚Boto‘ installiert:Laufen Ansible-Module lokal oder auf dem Remote-Host?

TASK [dns : Retrieve DNS record] *********************************************** 
fatal: [10.13.25.12]: FAILED! => {"changed": false, "failed": true, "msg": "boto required for this module"} 

I ‚Boto‘ auf meiner ansible Maschine installiert haben.

Frage: Laufen alle Ansible-Module, die in Playbook-Aufgaben zitiert werden, tatsächlich auf dem Remote-Host-Computer?

Ich habe Aufgaben hinzugefügt, die 'Python-Pip' und 'Boto' installieren, aber es scheint, dass Boto auf meinem Ansible-Server ausgeführt werden sollte. Ich fühle mich, als hätte ich hier etwas falsch gemacht.

Hier sind meine Aufgaben für die Installation von pip/Boto auf meiner Remote-Host-Maschine, die in nicht mehr Fehlern im Laufe des route53 Modul zur Folge hat: remote

- name: Install Pip 
    apt: name=python-pip state=present 

- name: Install boto 
    pip: name=boto 
+0

ansible Aufgaben auf den Hosts laufen, die (explizit) angegeben; Wenn Sie einen Remote-Host angegeben haben, werden sie auf dem Remote-Host ausgeführt. Wenn Sie jedoch localhost angegeben haben, werden sie auf dem lokalen Host ausgeführt. –

Antwort

4

Module ausgeführt. Obwohl dies nur die Hälfte der Wahrheit ist. Viele Module bringen Action-Plugins mit. Diese Action-Plugins werden lokal ausgeführt und rufen später ihre Modulkomponente (oder andere Module) auf.

Zum Beispiel ist das template Modul tatsächlich ein Action-Plugin, das die Vorlage lokal rendert und dann das Kopiermodul aufruft.

Leider können Sie nicht wissen, was ein Modul ist und was ein Action-Plugin ist, ohne auf die Quelle zu schauen. Die Dokumentation erwähnt nicht einmal Aktion Plugins existiert ...

Sie können alle Core-Action-Plugins here finden. Wie Sie sehen können, gibt es kein route53-Plugin, das ist also wirklich ein Modul und läuft daher remote.

Warum erhalten Sie immer noch diesen Fehler nach der Installation von Boto kann ich nicht erklären. Ich kann Ihnen nur look at the source vorschlagen und versuchen, das Problem ohne Ansible zu reproduzieren.

Diese wenigen Importanweisungen werden auf dem Remotecomputer nicht ohne Fehler ausgeführt.

import boto 
import boto.ec2 
from boto import route53 
from boto.route53 import Route53Connection 
from boto.route53.record import Record, ResourceRecordSets 
from boto.route53.status import Status 
+0

Ich habe vielleicht falsch verstanden. Alles funktioniert jetzt gut, wenn ich diese Aufgaben auf dem Remote-Rechner ausführen lasse, um Pip und beides zu installieren. Das sind interessante Informationen zur Remote/Local-Ausführung. Obwohl eine zusätzliche Ebene der Komplexität zu beachten ist, denke ich. –

+0

Sowohl Sie als auch @ydaetskcoR hatten großartige Antworten, aber ich akzeptierte diese, da sie die Frage etwas direkter ansprach. Obwohl seine Antwort gut war, sprach es über das Wie. –

3

Udondan's answer deckt die, wie einige Module verfügen über eine lokale Komponente sowie Remote-Aktionen, aber für den allgemeinen Gebrauch alles, was Sie wissen müssen, ist, dass für diese Module, die mit einem Remote-Service (wie alle der cloud modules) interagieren anstatt eines Remote-Hosts können Sie diese am besten als local action ausführen, um Ansible zu zwingen, das Modul lokal und nicht auf dem Remote-Host auszuführen, auf den das Playbook/die Rolle gerade abzielt.

Sie können dies leicht tun, indem local_action in der Task-Definition wie folgt verwendet:

- name: Retrieve DNS record 
    local_action: 
    module: route53_facts 
    query: record_sets 
    hosted_zone_id: '{{ route53_hosted_zone_id }}' 
    ... 
    register: dns_records 
+0

Große Antwort.Gab es eine Verbesserung statt "akzeptieren", da seine Antwort die Frage direkt beantwortet, aber Ihre Antwort war auch sehr hilfreich. –

Verwandte Themen