Ansible:在extra-vars中覆盖字典变量

时间:2015-07-31 05:30:25

标签: ansible ansible-playbook

在我的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"}}'

1 个答案:

答案 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人应该已经这样做了。