这是我的库存清单文件:
[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,所以它是第一次出现而不是在分区之间进行区分。
即使变量与相同的主机名关联,也如何识别该变量在不同的组中?我想利用这样一个事实,即使变量和主机相同,组名也是唯一的,因此希望使用组名来访问变量。
我如何识别变量在不同的位置组名称相同吗?还有额外的困难主机名在两个分区中也是相同的。
似乎您已踏入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