在我的Ansible playbook中,我有一个嵌套变量声明,如下所示在变量文件中。
repo:
branch: int
url: git@github:user/repo.git
dest: "/var/code"
我如何覆盖额外变量中的分支参数?我在下面尝试了类似的东西,但它没有用。
--extra-vars "repo.branch=exec_refactor"
这两个
--extra-vars "repo[branch]=exec_refactor"
使用如下所示的JSON表示会覆盖整个repo
节点,因此成功覆盖了repo.branch,但repo.url和repo.dest都变为未定义。
--extra-vars '{"repo":{"branch":"exec_refactor"}}'
答案 0 :(得分:1)
要合并词典,您需要在hash_behaviour=merge
中设置ansible.cfg
。但是不建议这样做,因为你在Ansible Galaxy上发现的几乎所有角色都需要默认值replace
并且可能会疯狂。
请参阅文档中的hash_behaviour
。
我曾遇到过类似的问题,并编写了一个动作插件来解决它:include_vars_merged。对于您的问题,它没有开箱即用的解决方案,因为Ansible在任何情况下都会使用--extra-vars
中的一个覆盖dict并使用我的插件,您将再次覆盖您在{{1}中传递的单个值}}。但是修改插件并不是太难,只能添加新值而不是覆盖值。我认为第34行和第3行的切换参数--extra-vars
中的40人应该已经这样做了。