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

luc*_*axi 27 ansible

在我local.yml能够运行剧本和参考变量group_vars/all但我无法访问其中的变量group_vars/phl-stage.我们假设如下.

ansible-playbook -i phl-stage site.yml
Run Code Online (Sandbox Code Playgroud)

我有一个变量,让我们称之为deploy_path每个环境都不同.我把变量放在里面group_vars/< environment name >.如果我group_vars/phl-stagevars_files其中包含文件,但我会认为组文件会自动加载?

site.yml

- include: local.yml
Run Code Online (Sandbox Code Playgroud)

local.yml

- hosts: 127.0.0.1
  connection: local

  vars_files:
    - "group_vars/perlservers"
    - "group_vars/deploy_list"
Run Code Online (Sandbox Code Playgroud)

group_vars/PHL级

[webservers]
phl-web1
phl-web2

[perlservers]
phl-perl1
phl-perl2

[phl-stage:children]
webservers
perlservers
Run Code Online (Sandbox Code Playgroud)

目录结构:

group_vars
  all
  phl-stage
  phl-prod
site.yml
local.yml
Run Code Online (Sandbox Code Playgroud)

hka*_*iti 60

你有点困惑这个结构.

  • group_vars目录包含清单文件中定义的每个主机组的文件.这些文件定义了成员主机可以使用的变量.
  • 库存文件不在group_varsdir中,它应该在外面.
  • 只有属于组成员的主机才能使用其变量,因此除非将127.0.0.1放在组中,否则它将无法使用除中定义的组之外的任何group_vars group_vars/all.

你想要的是这个dir结构:

group_vars/
   all
   perlservers
   phl-stage
hosts
site.yml
local.yml
Run Code Online (Sandbox Code Playgroud)

您的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
Run Code Online (Sandbox Code Playgroud)

因此,您可以定义哪些主机属于清单中的哪个组,然后为每个组定义其group_vars文件中的变量.