我在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"
答案 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
的值更改为其他主机名。