ansible - Ansible 从额外的变量标志覆盖组变量
问题描述
传递一个-e "@globals.yml"
标志ansible-playbook
会覆盖所有主机的变量。如何仅针对特定群体这样做?例如:
.
├── README.md
├── ansible.cfg
├── globals.yml
├── group_vars
│ ├── all.yml
│ ├── g1.yml
│ └── g2.yml
├── inventory.yml
├── out.log
└── site.yml
inventory.yml
:
all:
hosts:
host01:
ansible_host: host1
host02:
ansible_host: host2
host03:
ansible_host: host3
children:
g1:
hosts:
host01:
g2:
hosts:
host02:
group_vars/all.yml
:
all: this is in all.yml
group_vars/g1.yml
:
name1: group1, located in g1.yml
group_vars/g2.yaml
:
name2: group2, located in g2.yml
globals.yml
:
net_int: eno2
name1: name1 overwritten by globals.yml!
为组中的所有其他主机运行ansible-playbook -i inventory.yml -e "@globals.yml" site.yml
覆盖和创建。有没有办法让额外的变量只覆盖for而不是为所有其他人创建变量?name1
g1
name1
all
name1
g1
解决方案
不幸的是,无法从命令行选项覆盖组变量-e
。来自Ansible 变量优先级文档:
使用 -e 传递的值是变量,而不是命令行选项,它们将覆盖配置设置、命令行选项和 playbook 关键字以及其他地方设置的变量。
一个解决方法是在每个主机组上单独运行你的剧本,用-e
选项覆盖任何变量。
推荐阅读
- sql - 如何对此进行正确的 SQL 查询:
- html - 如何找到横幅文本的 XPath?
- typescript - 在泛型函数中使用 keyof 正确进行类型推断
- reactjs - Typescript 和 Redux - 使用 Visual Studio 2017 的默认应用程序布局时出错
- c# - 使用 X 或创建按钮关闭表单
- java - 约束布局自定义页脚
- objective-c - 如何在整个应用程序中“共享”代码片段?
- jenkins - 在 Jenkinsfile 中使用元组时出现 Unapprovable RejectedAccessException
- javascript - 检测不可滚动的 div 内的滚动
- emacs - helm-projectile:如何在多个 git repo 中搜索