我有一个像这样的剧本:
- hosts: "{{env}}"
name: "REDIS Playbook"
sudo: no
vars:
product: redis
roles:
- redis
我称之为:ansible-playbook pb_redis.yml -i inventory/redis -e env=qa -v
我的目录结构如下:
.
├── group_vars
│ ├── qa
│ │ ├── common
│ │ | └── redis.yml
│ │ ├── products
│ │ | └── abc-1.yml
│ │ | └── xyz-2.yml
│ ├── test
│ │ ├── common
│ │ | └── redis.yml
│ │ ├── products
│ │ | └── abc-1.yml
│ │ | └── xyz-2.yml
├── inventory
└── roles
└── redis
├── files
├── handlers
├── meta
├── tasks
├── templates
└── vars
我有一个清单,如:
[qa:children]
qa_redis
[qa_redis]
mybox.1.space
mybox.2.space
mybox.3.space
我的问题:当我运行ansible-playbook pb_redis.yml -i inventory/redis -e env=qa -v
时,我仍然选择group_vars
而不是../test/common/redis.yml
中定义的../qa/common/redis.yml
- 我误解了这应该如何运作?从库存文件中获取正确的主机,但不是正确的 group_vars 。我应该将redis.yml
放在../qa/products/
下吗?
答案 0 :(得分:2)
Ansible中的库存(主机和组)变量绑定到主机。为方便起见,存在组变量。
如果主机同时位于多个组中,则所有组变量都将应用于该主机 如果不同的组具有相同的变量,则它们会在库存加载过程中相互覆盖。
因此,如果您在mybox.1.space
和qa
群组中test
,则群组qa
和test
中的变量将应用于此主机。
通常,您希望使用单独的清单来处理不同的部署环境。组用于分隔库存中的不同逻辑单元。