Ansible在没有手动加载的情况下不会选择group_vars

时间:2014-05-20 18:54:24

标签: ansible

在我的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

1 个答案:

答案 0 :(得分:57)

你稍微混淆了这个结构。

  • group_vars目录包含清单文件中定义的每个主机组的文件。这些文件定义了成员主机可以使用的变量。
  • 清单文件不在group_vars目录中,它应该在外面。
  • 只有属于某个组成员的主机可以使用其变量,因此,除非您将127.0.0.1放在一个组中,否则它将无法使用除在其中定义的任何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文件中的变量。