无法从 /etc/ansible 的 group_vars 文件加载和获取变量
Unable to load and fetch variables from group_vars file from /etc/ansible
我正在尝试从 group_vars 获取变量值,但 ansible 无法从默认位置 /etc/ansible
找到它。这是详细信息。
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 剧本 fedoragroupvarfile.yaml
:
- hosts: all
remote_user: admin
tasks:
- name: Set OS distribution dependent variables
include_vars: "os_{{ ansible_facts['distribution'] }}.yaml"
- debug:
var: fedcharm
Ansible group_vars 文件 /etc/ansible/group_vars/os_Fedora.yaml
:
fedcharm: "This is Fedora 32 OS variable file"
错误
TASK [Set OS distribution dependent variables] *******************************************************************************
fatal: [192.168.47.130]: FAILED! => {"ansible_facts": {}, "ansible_included_var_files": [], "changed": false, "message": "Could not find or access 'os_Fedora.yaml'\nSearched in:\n\t/home/admin/practiceansible/newvarsexample/vars/os_Fedora.yaml\n\t/home/admin/practiceansible/newvarsexample/os_Fedora.yaml\n\t/home/admin/practiceansible/newvarsexample/vars/os_Fedora.yaml\n\t/home/admin/practiceansible/newvarsexample/os_Fedora.yaml on the Ansible Controller.\nIf you are using a module and expect the file to exist on the remote, see the remote_src option"}
为什么 include_vars
尝试在当前 playbook 的目录而不是文件所在的默认 /etc/ansible/group_vars
位置查找变量文件。
“默认位置”是 ansible 查找库存的地方,如果你没有用 -i /path/to/inventory.yaml
指定一个,但是你用 include_vars
包含的文件不是库存,但只包含裸变量。
如果您将 include_vars
与相对路径一起使用,ansible 将在相对于 playbook/role 的位置查找文件(请参阅 documentation)。
您也可以在 include_vars
中指定绝对路径。例如。 /etc/ansible/variables.yaml
(文件必须存在)。
但实际上,我认为这不是您想要的。如果你的变量在 /etc/ansible/group_vars
中,如果你的目录结构正确,它们将在没有 include_vars
的情况下默认加载。检查 docs.
将包含此行的文件放入 /etc/ansible/group_vars/stack.yaml
:
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
的变量并显示正确的消息。
我正在尝试从 group_vars 获取变量值,但 ansible 无法从默认位置 /etc/ansible
找到它。这是详细信息。
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 剧本 fedoragroupvarfile.yaml
:
- hosts: all
remote_user: admin
tasks:
- name: Set OS distribution dependent variables
include_vars: "os_{{ ansible_facts['distribution'] }}.yaml"
- debug:
var: fedcharm
Ansible group_vars 文件 /etc/ansible/group_vars/os_Fedora.yaml
:
fedcharm: "This is Fedora 32 OS variable file"
错误
TASK [Set OS distribution dependent variables] *******************************************************************************
fatal: [192.168.47.130]: FAILED! => {"ansible_facts": {}, "ansible_included_var_files": [], "changed": false, "message": "Could not find or access 'os_Fedora.yaml'\nSearched in:\n\t/home/admin/practiceansible/newvarsexample/vars/os_Fedora.yaml\n\t/home/admin/practiceansible/newvarsexample/os_Fedora.yaml\n\t/home/admin/practiceansible/newvarsexample/vars/os_Fedora.yaml\n\t/home/admin/practiceansible/newvarsexample/os_Fedora.yaml on the Ansible Controller.\nIf you are using a module and expect the file to exist on the remote, see the remote_src option"}
为什么 include_vars
尝试在当前 playbook 的目录而不是文件所在的默认 /etc/ansible/group_vars
位置查找变量文件。
“默认位置”是 ansible 查找库存的地方,如果你没有用 -i /path/to/inventory.yaml
指定一个,但是你用 include_vars
包含的文件不是库存,但只包含裸变量。
如果您将 include_vars
与相对路径一起使用,ansible 将在相对于 playbook/role 的位置查找文件(请参阅 documentation)。
您也可以在 include_vars
中指定绝对路径。例如。 /etc/ansible/variables.yaml
(文件必须存在)。
但实际上,我认为这不是您想要的。如果你的变量在 /etc/ansible/group_vars
中,如果你的目录结构正确,它们将在没有 include_vars
的情况下默认加载。检查 docs.
将包含此行的文件放入 /etc/ansible/group_vars/stack.yaml
:
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
的变量并显示正确的消息。