我正在使用以编程方式生成的Ansible剧本。通常,因为剧本只是YAML,所以这很简单。但是,当使用“简单” key=value
形式时,剧本不是纯粹的YAML,它们包含嵌入了shlex
-parsable形式的内容。
为了避免这种形式的歧义(key=value
将命令的参数与ansible的参数配对?),并且只有一种格式可以解析和生成,我无条件地使用ansible中的示例演示的复杂args机制-examples存储库。
这使用以下语法:
action: module-name
args:
key1: value1
key2: value2
...很好。但是,当尝试将这种形式用于shell
或command
模块时(其文档将实际命令描述为在名为的参数中传递free_form
),因此效果不佳:
action: shell
args:
free_form: echo hello_world >/tmp/something
creates: /tmp/something
调用时,它将运行以下内容:
/bin/sh -c " free_form='echo hello_world >/tmp/something' "
...这不是我要完成的任务。
使用Ansible模块通过纯YAML语法接受“自由格式”命令的正确方法是什么?
- shell: ...
?如果这种结构只能通过手工可靠地生成,那么这在一定程度上使问题无法解决。