Variables Ansible如何识别相关主机?
我使用Ansible创建了一个多服务器环境,其中有两组主从配置的数据库服务器,总共有四台主机 我的库存文件当前设置如下:Variables Ansible如何识别相关主机?,variables,ansible,Variables,Ansible,我使用Ansible创建了一个多服务器环境,其中有两组主从配置的数据库服务器,总共有四台主机 我的库存文件当前设置如下: [dbmaster] set1-db-master set2-db-master [dbslave] set1-db-slave set2-db-slave 在剧本中,我通常使用when子句来区分主设备和从设备,作为整个安装的一部分。例如: - name: Stop the Slave Database. command: systemctl stop my
[dbmaster]
set1-db-master
set2-db-master
[dbslave]
set1-db-slave
set2-db-slave
在剧本中,我通常使用when
子句来区分主设备和从设备,作为整个安装的一部分。例如:
- name: Stop the Slave Database.
command: systemctl stop mysql
when: inventory_hostname in groups['dbslave']
这对大多数任务都很有效。然而,我现在有一个特别的问题,我想不出一个简单的方法来解决它。当设置主/从配置时,我必须能够将相关的主配置和从配置绑定在一起,但每个配置都不止一个
也就是说,set1 db slave
必须知道它需要指向哪个主机:
set1db-master
,或set2db-master
我猜这个过程将是:
组['dbslave']
数组,以及组。dbslave[i]
- hosts: all
tasks:
- set_fact:
dbsrv: "{{ dict(groups.dbmaster|sort|zip(groups.dbslave|sort)) }}"
run_once: true
- debug:
var: dbsrv
run_once: true
- hosts: dbmaster
tasks:
- debug:
msg: "Related slave: {{ dbsrv[inventory_hostname] }}"
给予
问:“但这是关于阵列位置的安全假设吗?”
答:可以创建字母关系(例如set1 db master:set1 db slave)并使用sort
过滤器
dbsrv: "{{ dict(groups.dbmaster|sort|zip(groups.dbslave|sort)) }}"
弗拉基米尔,这太完美了。非常感谢。
dbsrv: "{{ dict(groups.dbmaster|sort|zip(groups.dbslave|sort)) }}"