Назад | Перейти на главную страницу

Итерация через группу доступных хостов для изменения файла шаблона во время выполнения playbook

Допустим, у меня в инвентаре 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")