Ansible 变量范围冲突

Ansible 变量范围冲突

我有一个安西布尔设置看起来像这样

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

相关内容