rog*_*one 6 ansible ansible-playbook
在我的 Ansible playbook 中,我有一个嵌套变量声明,如下所示在变量文件中。
repo:
branch: int
url: git@github:user/repo.git
dest: "/var/code"
Run Code Online (Sandbox Code Playgroud)
我将如何覆盖额外变量中的分支参数?我在下面尝试了类似的东西,但没有用。
--extra-vars "repo.branch=exec_refactor"
Run Code Online (Sandbox Code Playgroud)
既不是这个
--extra-vars "repo[branch]=exec_refactor"
Run Code Online (Sandbox Code Playgroud)
使用像下面这样的 JSON 表示会覆盖整个repo节点,因此 repo.branch 被成功覆盖,但 repo.url 和 repo.dest 都未定义。
--extra-vars '{"repo":{"branch":"exec_refactor"}}'
Run Code Online (Sandbox Code Playgroud)
要合并字典,您需要hash_behaviour=merge在ansible.cfg. 但不建议这样做,因为您在 Ansible Galaxy 上找到的几乎所有角色都期望默认值replace,并且可能会疯狂。
请参阅hash_behaviour文档。
我曾经遇到过类似的问题,并编写了一个动作插件来解决它:include_vars_merged。对于您的问题来说,这不是开箱即用的解决方案,因为 Ansible 在任何情况下都会用我的插件中的字典覆盖字典,--extra-vars并且使用我的插件,您将再次覆盖您传入的单个值--extra-vars。但修改插件并仅添加新值而不是覆盖值应该不会太难。我认为第 34 行和第 40 行中的切换参数include_vars_merged.py应该已经可以做到这一点。
| 归档时间: |
|
| 查看次数: |
4790 次 |
| 最近记录: |