如何使用Ansible动态生成MongoDB副本集成员列表

问题描述 投票:0回答:1

我正在使用Ansible创建MongoDB副本集。我正在关注mongodb_replicaset模块,例如:

# Create a replicaset called 'rs0' with the 3 provided members
- name: Ensure replicaset rs0 exists
  mongodb_replicaset:
    login_host: localhost
    login_user: admin
    login_password: ?????
    replica_set: rs0
    members:
    - mongodb1:27017
    - mongodb2:27017
    - mongodb3:27017
  when: groups.mongod.index(inventory_hostname) == 0

(来自文档https://docs.ansible.com/ansible/latest/modules/mongodb_replicaset_module.html

我在主机清单文件中定义了复制服务器

[replication_servers]
mongodb1 ansible_host=192.168.50.4
mongodb2 ansible_host=192.168.50.5
mongodb3 ansible_host=192.168.50.6

可以,但是我想避免对members属性中的主机名进行硬编码(和重复),并以某种方式使用已经定义的[replication_servers]组。Ansible有可能吗?

mongodb ansible pymongo
1个回答
0
投票

引用members尝试

members: "{{ groups.replication_servers|join(',') }}"

这将创建简单的csv字符串(默认为端口27017)

members: "mongodb1,mongodb2,mongodb3"


使用端口创建副本集

可以创建带有端口的字符串。例如,下面的广告资源

[replication_servers] mongodb1 ansible_host=192.168.50.4 mongodb_port=27017 mongodb2 ansible_host=192.168.50.5 mongodb_port=27017 mongodb3 ansible_host=192.168.50.6 mongodb_port=27017

此任务

- set_fact: my_members: "{{ groups.replication_servers| zip(groups.replication_servers| map('extract', hostvars, 'mongodb_port')| list)| map('join', ':')| join(',') }}"

给予

my_members: "mongodb1:27017,mongodb2:27017,mongodb3:27017"

© www.soinside.com 2019 - 2024. All rights reserved.