Ansible:在额外变量中重写字典变量

Ansible:在额外变量中重写字典变量,ansible,ansible-playbook,Ansible,Ansible Playbook,在我的Ansible剧本中,我有一个嵌套的变量声明,如下所示,在一个变量文件中 repo: branch: int url: git@github:user/repo.git dest: "/var/code" 如何在额外变量中重写分支参数?我在下面尝试了类似的方法,但没有成功 --extra-vars "repo.branch=exec_refactor" 也不是这个 --extra-vars "repo[branch]=exec_refactor" 使用如下所示的JSO

在我的Ansible剧本中,我有一个嵌套的变量声明,如下所示,在一个变量文件中

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"}}'

要合并dict,需要在
ansible.cfg
中设置
hash\u behavior=merge
。但不建议这样做,因为您在Ansible Galaxy上找到的几乎所有角色都期望默认值
replace
,并且可能会运行异常

请参阅文档中的


我曾经遇到过类似的问题,并编写了一个动作插件来解决它:。对于您的问题,这不是现成的解决方案,因为Ansible在任何情况下都会使用
--extra vars
中的dict覆盖dict,并且使用我的插件,您将再次覆盖您在
--extra vars
中传递的单个值。但是修改插件并只添加新值而不是覆盖值应该不会太难。我认为
中第34行和第40行中的切换参数包括了\u vars\u merged.py
应该已经做到了。

谢谢,知道为什么不包括这个功能吗?我已经为此提出了一个功能请求。我也面临着一个类似的问题,@rogue one你找到解决方案了吗?