Estou usando playbooks Ansible gerados programaticamente. Em geral, como os playbooks são apenas YAML, isso é direto. No entanto, ao usar o key=value
formulário "simples" , os playbooks não são YAML puros - eles incluem conteúdo incorporado em um shlex
formulário comparável.
Para evitar a ambiguidade neste formulário (esse key=value
par é um argumento para o comando ou um argumento para ansible?) E tem apenas um único formato para analisar e gerar, estou usando incondicionalmente o mecanismo args complexo demonstrado por exemplo no ansible repositório -examples .
Isso usa uma sintaxe do seguinte tipo:
action: module-name
args:
key1: value1
key2: value2
... o que é bom e bom. No entanto, ao tentar usar este formulário para os módulos shell
ou command
( cuja documentação descreve o comando real como sendo passado em um argumento chamado free_form
), isso não funciona tão bem:
action: shell
args:
free_form: echo hello_world >/tmp/something
creates: /tmp/something
Quando invocado, isso executa o seguinte:
/bin/sh -c " free_form='echo hello_world >/tmp/something' "
... o que não é o que estou tentando realizar.
Qual é a maneira correta de usar módulos Ansible que tomam comandos "de forma livre" usando a sintaxe YAML pura?
- shell: ...
? Se essa estrutura é algo que só pode ser gerado de forma confiável com a mão, isso acaba com o argumento da questão.