On Tue, 4 Feb 2020 11:56:28 -0800 (PST)
Azir Guleroglu <
azirgu...@gmail.com> wrote:
> I try to automate MongoDB installation with Ansible, but i can't create a
> replica set members automatically.
> I want to get automatically 3 host's hostnames and add to members.
> [...]
>
> - name: replica set
> mongodb_replicaset:
> login_host: localhost
> login_user: admin
> login_password: test
> replica_set: rs0
> members:
> - {{ mongodb1 }}:27017
> - {{ mongodb2 }}:27017
> - {{ mongodb3 }}:27017
> when: groups.mongod.index(inventory_hostname) == 0
Let's assume we have the inventory
$ cat hosts
[rs0]
test_01
test_02
test_03
The playbook below should do the job
- hosts: rs0
tasks:
- set_fact:
mongodb_members: "{{ [0,1,2]|map('extract', groups.rs0)|list }}"
run_once: true
- name: replica set
mongodb_replicaset:
login_host: localhost
login_user: admin
login_password: test
replica_set: rs0
members: "{{ mongodb_members }}"
when: groups.rs0.index(inventory_hostname) == 0
Notes
1) See "Selecting values from arrays or hashtables"
https://docs.ansible.com/ansible/devel/user_guide/playbooks_filters.html#selecting-values-from-arrays-or-hashtables
First 3 members of the group rs0 are replicaset members.
2) See "mongodb_replicaset – Initialises a MongoDB replicaset"
https://docs.ansible.com/ansible/latest/modules/mongodb_replicaset_module.html
members:
- A comma-separated string or a yaml list consisting of the replicaset
members.
- If a port number is not provided then 27017 is assumed.
3) The Ansible task "replica set" will run on the first member of the group
rs0.
HTH,
-vlado