Estoy usando libros de jugadas Ansible generados programáticamente. En general, debido a que los libros de jugadas son solo YAML, esto es sencillo. Sin embargo, cuando se usa la forma "simple" key=value
, los libros de jugadas no son YAML puros, sino que incluyen contenido incrustado en una shlex
forma analizable.
Para evitar la ambigüedad en esta forma (¿es eso key=value
emparejar un argumento con el comando o un argumento para ansible?) Y tener un solo formato para analizar y generar, estoy usando incondicionalmente el complejo mecanismo de argumentos demostrado por ejemplo en el ansible -positorio de ejemplos .
Esto usa una sintaxis del siguiente tipo:
action: module-name
args:
key1: value1
key2: value2
... que está bien y bien. Sin embargo, al intentar usar este formulario para los módulos shell
o command
( cuya documentación describe el comando real como se pasa en un argumento llamado free_form
), esto no funciona tan bien:
action: shell
args:
free_form: echo hello_world >/tmp/something
creates: /tmp/something
Cuando se invoca, esto ejecuta lo siguiente:
/bin/sh -c " free_form='echo hello_world >/tmp/something' "
... que no es lo que estoy tratando de lograr.
¿Cuál es la forma correcta de usar módulos Ansible que toman comandos de "forma libre" usando sintaxis YAML pura?
- shell: ...
? Si esta estructura es algo que solo se puede generar de manera confiable a mano, eso de alguna manera frustra el punto de la pregunta.