如何在单个模板中使用多个主机名?

问题描述:

我要生成一个文件,该文件是在两个主机相同,同时包含主机名,如:如何在单个模板中使用多个主机名?

resource r0 { 
    on host01 { 
    device /dev/drbd0; 
    } 
    on host02 { 
    device /dev/drbd0; 
    } 
} 

我试图用一个模板来实现这个功能,比如下面:

resource r0 { 
    on {{ hostvars[groups['hosts'][0]]['ansible_nodename'] }} { 
    device /dev/drbd0; 
    } 
    on {{ hostvars[groups['hosts'][1]]['ansible_nodename'] }} { 
    device /dev/drbd0; 
    } 
}  

这适用于第一个变量,但该列表没有第二个元素,因此第二个变量未知。

如何获取主机列表,以便我可以从列表中单独选择每个主机?

编辑:库存的相关位是

[hosts] 
host01 
host02 

编辑:

我下面的作品的答案,如果我只需要主机名。不过,我也需要 某个接口的IP地址。

我该如何访问hostvars中的信息,而不是当前主机的 ?

+0

您还可以添加您的库存文件(或其相关代码片段)吗? – ydaetskcoR

下面做什么,我想:

resource r0 { 
    on {{ groups['hosts'][0] }} { 
    device /dev/drbd0; 
    } 
    on {{ groups['hosts'][1] }} { 
    device /dev/drbd0; 
    } 
}  

编辑:

要访问比当前其他主机,例如IP地址的变量,在剧本必须包括在hosts其他主机指令。我正在测试一个只能运行一台主机的剧本,因此无法访问有关其他主机的信息。您仍然可以像这样运行测试,但您需要对其他主机执行虚拟操作,如下所述:https://serverfault.com/a/639269/144800,以便收集其他主机的事实。