- 可以使用神社模板,但不同
- 您的特定代碼沒有做的事情是最明智的
- 多行代碼,你應該使用
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 –