无法从/etc/ansible加载和获取组变量文件中的变量

无法从/etc/ansible加载和获取组变量文件中的变量,ansible,ansible-inventory,Ansible,Ansible Inventory,我试图从组变量中获取变量值,但ansible无法从默认位置找到它/etc/ansible。详情如下 易变版本 [admin@ansicontrol newvarsexample]$ ansible --version ansible 2.9.18 config file = /etc/ansible/ansible.cfg configured module search path = ['/home/admin/.ansible/plugins/modules', '/usr/shar

我试图从组变量中获取变量值,但ansible无法从默认位置找到它
/etc/ansible
。详情如下

易变版本

[admin@ansicontrol newvarsexample]$ ansible --version
ansible 2.9.18
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/admin/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.8/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.8.2 (default, Feb 28 2020, 00:00:00) [GCC 10.0.1 20200216 (Red Hat 10.0.1-0.8)]
Ansible清单文件
/etc/Ansible/hosts

[stack]
192.168.47.130
Ansible Playbook
fedoragroupvarfile.yaml

- hosts: all
  remote_user: admin
  tasks:
    - name: Set OS distribution dependent variables
      include_vars: "os_{{ ansible_facts['distribution'] }}.yaml"
    - debug:
        var: fedcharm
fedcharm: "This is Fedora 32 OS variable file"
fedcharm: "This is Fedora 32 OS variable file"
Ansible组变量文件
/etc/Ansible/group\u vars/os\u Fedora.yaml

- hosts: all
  remote_user: admin
  tasks:
    - name: Set OS distribution dependent variables
      include_vars: "os_{{ ansible_facts['distribution'] }}.yaml"
    - debug:
        var: fedcharm
fedcharm: "This is Fedora 32 OS variable file"
fedcharm: "This is Fedora 32 OS variable file"
错误

为什么
include_vars
尝试在当前playbook的目录中查找变量文件,而不是文件所在的默认
/etc/ansible/group_vars
位置。

如果您没有使用
-i/path/to/inventory.yaml指定一个,那么“默认位置”就是ansible查找清单的位置,但是随
include\u vars
包含的文件不是清单,而是仅包含裸变量。
如果使用带有相对路径的
include_vars
,ansible将在相对于剧本/角色的位置查找文件(请参见)。
您还可以在
include_vars
中指定绝对路径。例如
/etc/ansible/variables.yaml
(文件必须存在)

但事实上,我不认为那是你想要的。如果您的变量位于
/etc/ansible/group\u vars
中,则默认情况下,如果您的目录结构正确,这些变量将在不使用
include\u vars
的情况下加载。检查一下

将包含此行的文件放入
/etc/ansible/group\u vars/stack.yaml

- hosts: all
  remote_user: admin
  tasks:
    - name: Set OS distribution dependent variables
      include_vars: "os_{{ ansible_facts['distribution'] }}.yaml"
    - debug:
        var: fedcharm
fedcharm: "This is Fedora 32 OS variable file"
fedcharm: "This is Fedora 32 OS variable file"
fedoragroupvarsfile.yaml
应包含以下内容:

- hosts: all
  remote_user: admin
  tasks:
    - debug:
        var: fedcharm

然后像以前一样运行你的剧本。如果所有操作都正确,ansible将从
/etc/ansible/group_vars/stack.yaml
加载组
stack
的变量,并显示正确的消息。

谢谢@toydarian。。是的,如果我将变量文件放在playbook当前目录中,它就会工作,并且不包含变量的组变量也可以工作。但唯一让我困惑的是下面的文档-到底是哪一部分?文档-。最后一部分“这将从group_vars/os_CentOS.yml文件中提取变量”。我假设它来自/etc/ansible默认位置。但我现在明白你的意思了。。谢谢@toydaria这个文档实际上有点混乱,可能理解错误。摘要:资源清册将查找与资源清册相关的
组变量
,而
包含变量
如果路径是相对的,则始终查找与角色/剧本相关的组变量。我的回答回答了你的问题吗?如果是这样的话,请随意接受:)是的。。现在清楚了。。已经对您的答案投了赞成票:)