在剧本中更改主机组时 Ansible 不会重新加载 group_vars
Ansible does not reload group_vars when changing host group in a playbook
我已经在 ansible 存储库中填写了一个问题,但我想确认这确实是一个错误,我没有做错任何事情。
https://github.com/ansible/ansible/issues/14945
似乎在 group_vars 中定义的变量在 playbook 中更改主机组时未重新加载。
这是我使用 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 }}"
而这个变量的值:
inventory/dev/group_vars/all 的内容:
---
deploy_source_folder: "default"
inventory/dev/group_vars/backend 的内容:
---
deploy_source_folder: "backend"
inventory/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"
在与 Ansible 的@abadger 讨论后:https://github.com/ansible/ansible/issues/14945,我对 Ansible 有了更多的了解。
房东首先是 class 公民。这意味着它们会在您所有的剧本中加载一次。所以即使你的主机出现在多个库存组中,它们也只会有一个配置。
解决方案是为每个清单组中的每个主机添加别名。例如:
[shop]
shop ansible_host=localhost
[backend]
backend ansible_host=localhost
[backoffice]
backoffice ansible_host=localhost
有了这个,每个主机将是不同的公民,即使他们针对同一服务器。
注意:您可以将 ansible_host
的值更改为不同的主机名。
我已经在 ansible 存储库中填写了一个问题,但我想确认这确实是一个错误,我没有做错任何事情。 https://github.com/ansible/ansible/issues/14945
似乎在 group_vars 中定义的变量在 playbook 中更改主机组时未重新加载。
这是我使用 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 }}"
而这个变量的值:
inventory/dev/group_vars/all 的内容:
---
deploy_source_folder: "default"
inventory/dev/group_vars/backend 的内容:
---
deploy_source_folder: "backend"
inventory/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"
在与 Ansible 的@abadger 讨论后:https://github.com/ansible/ansible/issues/14945,我对 Ansible 有了更多的了解。
房东首先是 class 公民。这意味着它们会在您所有的剧本中加载一次。所以即使你的主机出现在多个库存组中,它们也只会有一个配置。
解决方案是为每个清单组中的每个主机添加别名。例如:
[shop]
shop ansible_host=localhost
[backend]
backend ansible_host=localhost
[backoffice]
backoffice ansible_host=localhost
有了这个,每个主机将是不同的公民,即使他们针对同一服务器。
注意:您可以将 ansible_host
的值更改为不同的主机名。