【问题标题】:Ansible: How to access group variables of the same host in different groups?Ansible:如何访问不同组中同一主机的组变量?
【发布时间】: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


    【解决方案1】:

    我如何让 ansible 识别出该变量位于不同的 组,即使它具有相同的名称?还有额外的难度 是主机名在两个分区中也是相同的。

    看来您已经踏入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
    

    【讨论】:

    • 这在组数较少时很有用。但是可能会发生分区(即组)的数量可能很大(并且同一主机可能存在于多个组中),因此为每个组定义优先级可能很繁琐。我正在寻找一种解决方案,您可以在其中通过组名引用变量。我想利用这样一个事实,即使变量和主机相同,组名也是唯一的,因此我想使用组名来访问变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2015-05-15
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 2019-10-28
    相关资源
    最近更新 更多