Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables Ansible如何识别相关主机?_Variables_Ansible - Fatal编程技术网

Variables 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

我使用Ansible创建了一个多服务器环境,其中有两组主从配置的数据库服务器,总共有四台主机

我的库存文件当前设置如下:

[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)) }}"