Ansible group_vars未根据环境/主机列表加载

时间:2017-05-04 14:56:55

标签: ansible

我有一个像这样的剧本:

- 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/下吗?

1 个答案:

答案 0 :(得分:2)

Ansible中的库存(主机和组)变量绑定到主机。为方便起见,存在组变量。

如果主机同时位于多个组中,则所有组变量都将应用于该主机 如果不同的组具有相同的变量,则它们会在库存加载过程中相互覆盖。

因此,如果您在mybox.1.spaceqa群组中test,则群组qatest中的变量将应用于此主机。

通常,您希望使用单独的清单来处理不同的部署环境。组用于分隔库存中的不同逻辑单元。