Sto usando i playbook Ansible generati programmaticamente. In generale, poiché i playbook sono solo YAML, questo è semplice. Tuttavia, quando si utilizza il key=value
modulo "semplice" , i playbook non sono YAML puri, ma includono contenuti incorporati in un shlex
modulo consultabile.
Per evitare l'ambiguità in questa forma (quella key=value
coppia è un argomento al comando o un argomento per ansible?), E ho solo un singolo formato per analizzare e generare, sto usando incondizionatamente il complesso meccanismo args dimostrato dall'esempio in ansible -expository repository .
Questo utilizza una sintassi del seguente tipo:
action: module-name
args:
key1: value1
key2: value2
... che va bene. Tuttavia, quando si tenta di utilizzare questo modulo per i moduli shell
o command
(la cui documentazione descrive il comando effettivo come passato in un argomento denominato free_form
), questo non funziona così bene:
action: shell
args:
free_form: echo hello_world >/tmp/something
creates: /tmp/something
Quando viene richiamato, viene eseguito quanto segue:
/bin/sh -c " free_form='echo hello_world >/tmp/something' "
... che non è quello che sto cercando di realizzare.
Qual è il modo giusto di utilizzare i moduli Ansible che prendono comandi "in formato libero" usando la sintassi YAML pura?
- shell: ...
? Se questa struttura è qualcosa che può essere generato in modo affidabile solo a mano, ciò in qualche modo sconfigge il punto della domanda.