Ansible:如何在不同组中访问同一主机的组变量?

问题描述 投票:0回答:1

这是我的库存清单文件:

[slurm_master]
slurm-gpu-0 ansible_host=192.168.0.24 ansible_connection=local

[slurm_compute]
slurm-gpu-1 ansible_host=192.168.0.200 cpus=16 gpus=2
slurm-gpu-2 ansible_host=192.168.0.124 cpus=1 gpus=0


[slurm_partition_gpu]                                                                               
slurm-gpu-1

[slurm_partition_gpu:vars]
allow_accounts=['whitelist','gpu_users']
default_partition=no

[slurm_partition_debug]
slurm-gpu-1
slurm-gpu-2

[slurm_partition_debug:vars]
allow_accounts=['whitelist']
default_partition='yes'

[allnodes:children]
slurm_master
slurm_compute

[allnodes:vars]
slurm_partitions=['slurm_partition_gpu','slurm_partition_debug']

我有2个分区-“ slurm_partition_gpu”和“ slurm_partition_debug”。所有分区都具有属性“ allow_accounts”“ default_partition”。因此,显然这些变量在分区之间具有相同的名称。另外,两个分区(组)共用一个主机。当我尝试使用hostvars使用变量访问这些变量时,该变量会(错误地)计算出主机文件中的第一个匹配项。例如,在jinja2模板内部:

{{ hostvars[groups['slurm_partition_debug'][0]].allow_accounts }}

结果:

['whitelist','gpu_users']

而不是预期的:

['whitelist']

这显然是因为它正在寻找“ slurm-gpu-1.allow_accounts”,并且因为在两个分区(组)中都存在slurm-gpu-1,所以它是第一次出现而不是在分区之间进行区分。

即使变量与相同的主机名关联,也如何识别该变量在不同的组中?我想利用这样一个事实,即使变量和主机相同,组名也是唯一的,因此希望使用组名来访问变量。

ansible jinja2 ansible-inventory
1个回答
0
投票

我如何识别变量在不同的位置组名称相同吗?还有额外的困难主机名在两个分区中也是相同的。

似乎您已踏入How variables are merged领域。您可以重命名组以更改ansible的默认变量合并顺序,也可以使用ansible_group_priority定义合并的方式。例如,使用如下所示的ansible_group_priority,您可以告诉ansible赋予slurm_partition_debug组比slurm_partition_gpu高的优先级。 ansible_group_priority的值越高,优先级越高,默认值为1(如果未指定)。

[slurm_partition_debug:vars]
allow_accounts=['whitelist']
default_partition='yes'
ansible_group_priority=2
© www.soinside.com 2019 - 2024. All rights reserved.