在更改剧本中的主机组时,Ansible不会重新加载group_vars

时间:2016-03-15 17:17:00

标签: ansible-playbook ansible-2.x

我在ansible存储库中填写了一个问题,但我想确认它确实是一个错误,而且我没有做错任何事情。 https://github.com/ansible/ansible/issues/14945

当主机组在剧本中发生变化时,似乎没有重新加载group_vars中定义的变量。

这是我使用ansible 2.0.1.0的剧本

├── inventory
│   └── dev
│       ├── group_vars
│       │   ├── all
│       │   ├── backend
│       │   └── backoffice
│       └── hosts
├── playbook.yml
└── roles
    └── deploy
        └── tasks
            └── main.yml

主持人的广告资源:

[shop]
weenect.dev ansible_user=vagrant

[backend]
weenect.dev ansible_user=vagrant

[backoffice]
weenect.dev ansible_user=vagrant

为每个主机组执行部署角色中的任务:

---
- debug: msg="{{ deploy_source_folder }}"

此变量的值:

库存内容/ dev / group_vars / all:

---
deploy_source_folder: "default"

广告资源/ dev / group_vars / backend的内容:

---
deploy_source_folder: "backend"

广告资源/ dev / group_vars / backoffice的内容:

---
deploy_source_folder: "backoffice"

执行我的剧本时,预期结果为:

Debug of deploy_source_folder for backend : "backend"
Debug of deploy_source_folder for backoffice : "backoffice"
Debug of deploy_source_folder for shop : "default"

但我有:

Debug of deploy_source_folder for backend : "backend"
Debug of deploy_source_folder for backoffice : "backend"
Debug of deploy_source_folder for shop : "backend"

1 个答案:

答案 0 :(得分:0)

在与Ansible的@abadger进行一些讨论之后:https://github.com/ansible/ansible/issues/14945,我理解了更多的Ansible。

主持人是一等公民。这意味着它们会在您的所有剧本中加载一次。因此,即使您的主机出现在多个广告资源组中,它们也只有一个配置。

解决方案是为每个清单组中的每个主机设置别名。例如:

[shop]
shop ansible_host=localhost

[backend]
backend ansible_host=localhost

[backoffice]
backoffice ansible_host=localhost

有了这个,即使他们的目标是同一台服务器,每个主机也会是不同的公民。

注意:您可以将ansible_host的值更改为其他主机名。