在剧本运行时,通过 ansible 主机组进行迭代来修改模板文件

在剧本运行时,通过 ansible 主机组进行迭代来修改模板文件

假设我的 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")

相关内容