【问题标题】:Ansible: overriding dictionary variables in extra-vars [duplicate]Ansible:覆盖额外变量中的字典变量[重复]
【发布时间】:2015-07-31 05:30:24
【问题描述】:

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

【问题讨论】:

    标签: ansible ansible-playbook


    【解决方案1】:

    要合并字典,你需要在你的ansible.cfg 中设置hash_behaviour=merge。但不建议这样做,因为您在 Ansible Galaxy 上找到的几乎所有角色都期望默认值 replace 并且可能会发疯。

    请参阅文档中的 hash_behaviour

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

    【讨论】:

    • 谢谢,知道为什么不包含此功能吗?我为此提出了功能请求。
    • 我也遇到了类似的问题,@rogue-one 你找到解决办法了吗?
    猜你喜欢
    • 2018-02-27
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    相关资源
    最近更新 更多