在我的local.yml
我能够在group_vars/all
中运行剧本和参考变量但是我无法访问group_vars/phl-stage
中的变量。让我们假设如下。
ansible-playbook -i phl-stage site.yml
我有一个变量,我们称之为 deploy_path
,这些变量因环境而异。我将变量放在group_vars/< environment name >
内。如果我在group_vars/phl-stage
中包含文件vars_files
,那么它可以运行,但我会认为群组文件会自动加载吗?
site.yml
- include: local.yml
local.yml
- hosts: 127.0.0.1
connection: local
vars_files:
- "group_vars/perlservers"
- "group_vars/deploy_list"
group_vars / PHL阶段
[webservers]
phl-web1
phl-web2
[perlservers]
phl-perl1
phl-perl2
[phl-stage:children]
webservers
perlservers
目录结构:
group_vars
all
phl-stage
phl-prod
site.yml
local.yml
答案 0 :(得分:57)
你稍微混淆了这个结构。
group_vars
目录包含清单文件中定义的每个主机组的文件。这些文件定义了成员主机可以使用的变量。group_vars
目录中,它应该在外面。group_vars/all
。 你想要的是这个目录结构:
group_vars/
all
perlservers
phl-stage
hosts
site.yml
local.yml
您的hosts文件应该如下所示,假设127.0.0.1只是一个登台服务器而不是perl或Web服务器:
[webservers]
phl-web1
phl-web2
[perlservers]
phl-perl1
phl-perl2
[phl-stage]
127.0.0.1
[phl-stage:children]
webservers
perlservers
因此,您可以定义哪些主机属于清单中的哪个组,然后为每个组定义其group_vars文件中的变量。