Допустим, у меня в инвентаре 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]
группа могла время от времени меняться.
Шаблон
$ 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")