【发布时间】:2020-05-15 18:07:43
【问题描述】:
这是我的 ansible 库存文件:
[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