![Ansible 变量范围冲突](https://linux22.com/image/8949/Ansible%20%E5%8F%98%E9%87%8F%E8%8C%83%E5%9B%B4%E5%86%B2%E7%AA%81.png)
我有一个安西布尔设置看起来像这样
inventories/
sandbox1
group_vars/
all
sandbox1
pb/
pb1/
run_pb1.yml
我也有角色和其他东西,但我认为这足以抓住我需要做的事情的要点。
我有一个变量富我在里面定义的库存/group_vars/全部和库存/group_vars/sandbox1
现在我的问题是每当我打电话
ansible-playbook -i inventories/sandbox1 pb/pb1/run_pb1.yml
该剧本的运行价值为富 包含在库存/group_vars/全部...换句话说, foo 没有被从库存/group_vars/sandbox1
这是实施库存特定变量的正确方法吗?我想避免为像变量更改这样简单的事情创建多个剧本...即,我不想在“all”文件中执行类似的操作
default_foo: bar
sandbox1_foo: baz
以及多个剧本,除了它们引用的变量之外,这些剧本都是相同的。
有办法做我所要求的吗?
答案1
主机变量覆盖组变量(参见文档)但你应该在/host_vars
目录中定义它们。因此,例如使用以下设置:
.
├── group_vars
│ └── all.yml # foo: var_from_all
├── hosts
├── host_vars
│ └── host1.yml # foo: var_from_host1
└── test.yml
你会得到:
$ ansible-playbook -i hosts test.yml
PLAY [host1,host2] *************************************************************
TASK [debug] *******************************************************************
ok: [host1] => {
"foo": "var_from_host1"
}
ok: [host2] => {
"foo": "var_from_all"
}