- 可以使用神社模板,但不同
- 您的特定代码没有做的事情是最明智的
- 多行代码,你应该使用
shell
模块。多码片呼叫的
例如:
- name: run multiline stuff
shell: |
for x in "${envvar}"; do
echo "${x}"
done
args:
executable: /bin/bash
注意到我明确设置executable
,这将确保bash-isms
会工作。
我刚刚使用envvar
作为例子,可用的任意环境变量。
,如果你需要通过特定的ENV变量,你应该使用通话environment
子句shell
模块,请参阅:http://docs.ansible.com/ansible/playbooks_environment.html
对于简单的变量,你可以使用在外壳的价值:echo "myvar: {{myvar}}"
如果你想在bash代码中使用一个安全的列表/元组变量,你可以先将它变成bash变量。例如如果你有一个mylist
中的东西列表,你可以展开它并分配给一个bash数组,然后遍历它。呼叫的到shell
shell代码将是:
mylist_for_bash=({{mylist|join(" ")}})
for myitem in "${mylist_for_bash[@]}"; do
echo "my current item: ${myitem}"
done
另一种方法是把它作为字符串环境变量,它在代码转换成一个阵列后面。
注: 当然这一切工作正常只SPACELESS值 我从来没有通过阵列容纳空间项目
@杰里米 - 休伊,最佳实践,使用'shellcheck',例如把你的scriptlet写入一个文件,然后运行:'shellcheck myfile.sh' 这会打印出各种警告信息。 https://github.com/koalaman/shellcheck –
那么,'$ {envvar}'是适用于Ansible角色的../var目录中的一个列表吗? –
@JeremyHuey我刚刚用它作为示例,提供了一些可用的环境变量。如果您需要传递特定的env变量,则应该使用'shell'模块调用的'environment'子句,请参阅:http://docs.ansible.com/ansible/playbooks_environment.html –