首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ansible:在额外的vars中覆盖字典变量

Ansible:在额外的vars中覆盖字典变量
EN

Stack Overflow用户
提问于 2015-07-31 05:30:24
回答 1查看 5.6K关注 0票数 7

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

代码语言:javascript
复制
repo:
  branch: int
  url: git@github:user/repo.git
  dest: "/var/code"

我怎么才能在额外的范围内推翻分支系统呢?我在下面试过这样的方法,但没有用。

代码语言:javascript
复制
 --extra-vars "repo.branch=exec_refactor"

这两件事

代码语言:javascript
复制
 --extra-vars "repo[branch]=exec_refactor"

像下面这样使用JSON表示会导致覆盖整个repo节点,因此repo.branch被成功覆盖,但是repo.url和repo.dest都没有定义。

代码语言:javascript
复制
 --extra-vars '{"repo":{"branch":"exec_refactor"}}'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-31 06:08:08

要合并dicts,需要在hash_behaviour=merge中设置ansible.cfg。但是不建议这样做,因为您在Ansible上找到的几乎所有角色都期望缺省值replace,并且可能会疯狂运行。

见文档中的hash_behaviour

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31738708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档