我正试图从组变量中读取变量值,但ansible无法找到该值。但是ansible无法找到这个值。
我的清单文件夹是这样的。
prod.ini
uat1.ini
uat2.ini
我的uat1. ini看起来是这样的:
[server a]
12.12.12.12
[server b]
13.13.131.1
我的uat2.ini看起来是这样的:
[server a]
1.1.1.2
[server b]
2.23.12.5
group vars文件夹看起来是这样的:
all
environment
在环境文件夹内,我有子文件夹,它们是
uat1 and uat2
在Uat1和Uat2中,我有一个名为pick.yml的文件。
对于Uat1,我有下面的pick.yml。
modern: "re run"
对于Uat2,我有下面的pick.yml。
modern: "no re run"
我的剧本是这样的。
- name: try and run to get the value of group vars
hosts: server a
debug:
var: modern
我用下面的命令运行我的剧本
ansible-playbook -i inventory/uat2.ini -b playbookname
我的期望是--它应该返回Uat2的值,也就是 "no re run",但不能返回。但是当我把组变量放在group_varsall中时,playbook能够读取它。
谢谢,谢谢
确保你的层次结构是正确的:Ansible会自动从group_vars加载变量(默认路径是etcansiblegroup_vars)。
在你的例子中,有3个组。all
, server a
和 server b
.
假设有一个主机在组 server a
server_a",下面的group_vars将被加载到这个主机上(默认情况下,只有当这些文件存在时)。
/etc/ansible/group_vars/all.yml
/etc/ansible/group_vars/<group name>.yml
{{ playbook_dir }}/group_vars/all.yml
{{ playbook_dir }}/group_vars/<group name>.yml
因此,除非你创建了正确的层次结构,或者调整了配置文件或playbook中group_vars的路径,否则你将无法导入group_vars。
例如你的用例中的层次结构。
/etc/ansible/group_vars:
all.yml
server a.yml
server b.yml
Ansible通过搜索相对于清单文件或playbook文件的路径来加载主机和组变量文件。如果你在etcansiblehosts的清单文件中包含一个名为'foosball'的主机,它属于两个组,'raleigh'和'webservers',该主机将在以下位置使用YAML文件中的变量。
/etc/ansible/group_vars/raleigh # can optionally end in '.yml', '.yaml', or '.json'
/etc/ansible/group_vars/webservers
/etc/ansible/host_vars/foosball
你也可以创建以组或主机命名的目录。Ansible将按照词法顺序读取这些目录中的所有文件。以'raleigh'组为例。
/etc/ansible/group_vars/raleigh/db_settings
/etc/ansible/group_vars/raleigh/cluster_settings
在你的例子中 environment
文件夹是组名。由于您没有 environment
组,它不被使用。此外,名为 uat1
和 uat2
不存在,因为清单不是群体。
all
组变量的作用,因为它是一个特殊的默认组。
有两个默认组: all和ungrouped。all组包含每个主机。
听起来你想为每个库存设置一组变量。在这种情况下,你可以做的是在目录中为以下变量设置变量 all
组。
[all:vars]
modern="re run"
[server a]
12.12.12.12
[server b]
13.13.131.1
这将适用于 modern
变量给该特定清单中的所有主机。
或者,如果您已经将这两个目录使用得更像组,您可以考虑将您的主机安排到一个单独的目录中,并创建一个 uat1
和 uat2
组,如。
[server a]
12.12.12.12
1.1.1.2
[server b]
13.13.131.1
2.23.12.5
[uat1]
12.12.12.12
13.13.131.1
[uat2]
1.1.1.2
2.23.12.5
在这种情况下,你可以有 group_vars/uat1
和 group_vars/uat2
文件。
这两个想法应该希望能让你更好地了解如何使用组和组变量。