15.2. 使用 Ansible 确保多个 IdM 副本之间存在复制协议

存储在身份管理 (IdM) 服务器上的数据存储基于复制协议:配置了两个服务器时,它们共享其数据。复制协议始终为现实:数据从第一个副本复制到另一个副本,另一个副本复制到第一个副本。

按照以下流程,确保 IdM 中的多个副本对之间存在复制协议。

先决条件

  • 确保您了解设计 在拓扑中连接副本 中列出的 IdM 拓扑的建议。
  • 您知道 IdM 管理员 密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点(这是执行 ansible-freeipa 模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。

流程

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 复制位于 /usr/share/doc/ansible-freeipa/playbooks/topology/ 目录中的 add-topologysegments.yml Ansible playbook 文件:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/topology/add-topologysegments.yml add-topologysegments-copy.yml
  3. 打开 add-topologysegments-copy.yml 文件进行编辑。
  4. 通过在 vars 部分中设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM admin 的密码。
    • 对于每个拓扑片段,在 ipatopology_segments 部分添加一个行并设置以下变量:

      • 根据您要添加的分段类型,将 suffix 变量设置为 domainca
      • left 变量设置为您要作为复制协议左侧节点的 IdM 服务器的名称。
      • right 变量设置为您要作为复制协议正确节点的 IdM 服务器的名称。
  5. add-topologysegments-copy.yml 文件的 tasks 部分中,确保 state 变量设置为 present

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Add topology segments
      hosts: ipaserver
      gather_facts: false
    
      vars:
        ipaadmin_password: "{{ ipaadmin_password }}"
        ipatopology_segments:
        - {suffix: domain, left: replica1.idm.example.com , right: replica2.idm.example.com }
        - {suffix: domain, left: replica2.idm.example.com , right: replica3.idm.example.com }
        - {suffix: domain, left: replica3.idm.example.com , right: replica4.idm.example.com }
        - {suffix: domain+ca, left: replica4.idm.example.com , right: replica1.idm.example.com }
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Add topology segment
        ipatopologysegment:
          ipaadmin_password: "{{ ipaadmin_password }}"
          suffix: "{{ item.suffix }}"
          name: "{{ item.name | default(omit) }}"
          left: "{{ item.left }}"
          right: "{{ item.right }}"
          state: present
          #state: absent
          #state: checked
          #state: reinitialized
        loop: "{{ ipatopology_segments | default([]) }}"
  6. 保存该文件。
  7. 运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory add-topologysegments-copy.yml

其它资源

  • 请参阅 解释复制协议、拓扑后缀和拓扑段
  • 请参阅 /usr/share/doc/ansible-freeipa/ 目录中的 README-topology.md 文件。
  • 请参阅 /usr/share/doc/ansible-freeipa/playbooks/topology 目录中的 playbook 示例。