2015-05-05 3 views
13

Ich bemerkte, dass Ansible das temporäre Skript mit einem Semikolon entfernt, um die Bash-Befehle zu trennen. HierSpeichern Sie temporäre ansible Shell-Skripte statt zu löschen

ist ein Beispiel Befehl:

EXEC ssh -C -tt -v -o ControlMaster=auto -o ControlPersist=60s -o 
ControlPath="/Users/devuser/.ansible/cp/ansible-ssh-%h-%p-%r" -o 
KbdInteractiveAuthentication=no -o 
PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey 
-o PasswordAuthentication=no -o ConnectTimeout=10 build /bin/sh -c 
'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python 
/home/ec2-user/.ansible/tmp/ansible-tmp-1430847489.81-75617096172775/docker; 
rm -rf 
/home/ec2-user/.ansible/tmp/ansible-tmp-1430847489.81-75617096172775/ 
>/dev/null 2>&1' 

Gibt es eine Möglichkeit ansible zu sagen, das Semikolon mit einem Doppel-Et-Zeichen zu ersetzen oder zu sagen, das Skript oder die Ausgabe der Inhalte zu speichern, wenn läuft ansible- Spielbuch?

Ich versuche, einen Fehler in diesem Skript zu debuggen und jetzt das einzige, was erscheint, ist dies:

failed: [build] => {"changed": false, "failed": true} 
msg: ConnectionError(ProtocolError('Connection aborted.', error(2, 'No such file or directory')),) 

Antwort

26

ich die Umgebungsvariable gefunden -

export ANSIBLE_KEEP_REMOTE_FILES=1 

dieses Set, dann Führen Sie ansible-playbook erneut aus, und wechseln Sie dann mit ssh und cd zu ~/.ansible/tmp /, um die Dateien zu finden.

+1

Funktioniert nicht. Es gibt keine Dateien in ~/.ansible/tmp/ – hfranco

+0

Das funktioniert für mich. Überprüfst du den Remote-Computer? Dort werden die Python-Dateien ausgeführt. –

+0

Ich wollte nur sagen, dass, wenn Ihr Playbook auf 'localhost' abzielt, Ansible * Dateien auf' ~/.ansible/tmp' auf dem Rechner kopiert, auf dem Sie 'ANSIBLE_KEEP_REMOTE_FILES = 1 ansible-playbook ...' ausgeführt haben . Dies macht die Verwendung von [pdb-clone] (https://bitbucket.org/xdegaye/pdb-clone/wiki/Home) zum Debuggen etwas einfacher. Fügen Sie einfach (vorübergehend) 'von pdb_clone import pdb; pdb.set_trace_remote() 'direkt in den Ansible-Quellen in der Nähe des vermuteten Problems und dann' pdb-attach' in einem anderen Terminal, wenn es den Haltepunkt erreicht. (Sie können auch remote debuggen, aber es ist ein bisschen komplizierter.) – evadeflow

Verwandte Themen