假设我的 Ansible 清单中有以下主机组
[qrouters]
devops-qr1
devops-qr2
[shards]
devops-shrd1
devops-shrd2
devops-shrd3
我必须使用类似如下的命令将分片添加到 mongodb 集群中sh.addShard("<$REPLICASETNAME>/comma-separated-list-of-hosts")
(例如:sh.addShard( "<replSetName>/s1-mongo1.example.net:27018,s1-mongo2.example.net:27018,s1-mongo3.example.net:27018")
我想在我的角色中将该命令写入模板文件中(假设roles/mongo_sharding/templates/addShards.j2
),但不知道如何遍历库存文件。
请记住,[shards]
群组中的主持人数量可能会随时发生变化。
答案1
模板
$ cat addShards.j2
sh.addShard( "<{{ my_replica_set }}>/{{ my_hosts }}")
和剧本
$ cat my_playbook.yml
- hosts: localhost
vars:
my_replica_set: "replSetName"
my_group: "shards"
tasks:
- set_fact:
my_hosts: "{{ groups[my_group]|join( ':27018,') ~ ':27018' }}"
- template:
src: addShards.j2
dest: my_command
给
$ cat my_command
sh.addShard( "<replSetName>/devops-shrd1:27018,devops-shrd2:27018,devops-shrd3:27018")