如何在不引起遞歸循環的情況下,在其他變量中重用變量Ansible(2.1.x)?角色默認變量中的Ansible遞歸循環
設置
考慮這個roles/<role>/defaults/main.yml
文件:
---
liquibase:
version: "3.5.3"
download_file: "liquibase-{{liquibase.version}}-bin.tar.gz"
# I also tried this alternative with a similar result:
# download_file: "liquibase-{{liquibase[version]}}-bin.tar.gz
...
這roles/<role>tasks/main.yml
文件:
---
- name: Liquibase | Download
debug:
msg: "download_file: {{liquibase.download_file}}"
...
錯誤
我期望變量liquibase.download_file
具有值liquibase-3.5.3-bin.tar.gz
但是當我跑步使用這個角色的劇本,我得到以下錯誤:
...
TASK [liquibase : Liquibase | Download] *******************************************
fatal: [localhost]: FAILED! => {"failed": true, "msg": "...: recursive loop detected in template string: liquibase-{{liquibase.version}}-bin.tar.gz"}
...
我的使用案例
很顯然,我想下載Liquibase,我希望讓角色的用戶決定使用哪個版本。我也想給出完全覆蓋下載位置(文件,URL等)的可能性,例如使用公司的FTP服務器或類似的。
這對於提出的問題是正確的,但是PS是不準確的:用戶可以將Ansible的'hash_behaviour'配置爲'merge',((參見這裏的文檔)(http://docs.ansible.com/ansible /latest/intro_configuration.html#hash-behaviour)) –
好的說法,但不推薦更改'hash_behaviour',所以你不應該編寫需要這個設置的角色(記住你寫的角色可以在整個劇本中重用)。 –