Ich verwende programmgesteuert generierte Ansible-Playbooks. Da Playbooks nur YAML sind, ist dies im Allgemeinen unkompliziert. Bei Verwendung des "einfachen" key=valueFormulars sind Playbooks jedoch keine reine YAML- shlexDatei - sie enthalten Inhalte, die in ein analysierbares Formular eingebettet sind.
Um die Mehrdeutigkeit in dieser Form zu vermeiden (ist dieses key=valuePaar ein Argument mit dem Befehl oder ein Argument für ansible?) Und nur ein einziges Format zum Parsen und Generieren zu haben, verwende ich bedingungslos den komplexen Argumentmechanismus, der anhand eines Beispiels im Ansible demonstriert wird -Beispiele Repository .
Dies verwendet eine Syntax der folgenden Art:
action: module-name
args:
key1: value1
key2: value2
... was gut und schön ist. Wenn Sie jedoch versuchen, dieses Formular für die Module shelloder zu verwenden command( deren Dokumentation beschreibt, dass der eigentliche Befehl in einem Argument mit dem Namen übergeben wird free_form), funktioniert dies nicht so gut:
action: shell
args:
free_form: echo hello_world >/tmp/something
creates: /tmp/something
Beim Aufrufen wird Folgendes ausgeführt:
/bin/sh -c " free_form='echo hello_world >/tmp/something' "
... was ich nicht erreichen will.
Was ist der richtige Weg, um Ansible-Module zu verwenden, die "Freiform" -Befehle mit reiner YAML-Syntax ausführen?
- shell: ...? Wenn diese Struktur nur von Hand zuverlässig erzeugt werden kann, ist der Punkt der Frage etwas vereitelt.