我正在使用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有可能吗?
引用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"