Hi Everybody,
I have a problem that I can’t resolve on my own.
I want to deploy an etcd cluster with postgresql on the same servers
I have three servers and this is my inventory file:
all:
children:
etcd_cluster: # recommendation: 3 or 5-7 nodes
hosts:
demo_postgres1:
vars:
etcd_ip: '***'
demo_postgres2:
vars:
etcd_ip: '***'
demo_postgres3:
vars:
etcd_ip: '***'
master:
hosts:
demo_postgres1:
vars:
postgres_ip: '***'
postgresql_exists: 'false'
replica:
hosts:
demo_postgres2:
vars:
postgres_ip: '***'
postgresql_exists: 'false'
demo_postgres3:
vars:
postgres_ip: '***'
postgresql_exists: 'false'
balancers:
hosts:
demo_haproxy1:
vars:
haproxy_ip: '***'
demo_haproxy2:
vars:
haproxy_ip: '***'
demo:
vars:
ansible_ssh_common_args: "-F ../../ssh_config/demo_config"
children:
balancers:
etcd_cluster:
postgres_cluster:
children:
master:
replica:
I have the demo_postgres[0-3] servers that run etcd and postgres. Just to prepare an external instance for etcd cluster, I have separated its in two distinct groups: etcd_cluster and postgres_cluster.
I have etcd_ip vars and postgres_ip vars respectively on these groups.
My problem is when I run my playbook with hosts: etcd_cluster and I print hostvars, I get the hostvars of postgres_cluster:
PLAY [etcd_cluster] ***************************************************************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************************************************************
ok: [demo_postgres1]
ok: [demo_postgres3]
ok: [demo_postgres2]
TASK [Ansible | List all known variables and facts] *******************************************************************************************************************************************
ok: [demo_postgres1] => {
"hostvars[inventory_hostname]['vars']": {
"postgres_ip": "***",
"postgresql_exists": "false"
}
}
ok: [demo_postgres2] => {
"hostvars[inventory_hostname]['vars']": {
"postgres_ip": "***",
"postgresql_exists": "false"
}
}
ok: [demo_postgres3] => {
"hostvars[inventory_hostname]['vars']": {
"postgres_ip": "***",
"postgresql_exists": "false"
}
}
I didn’t find any information about the merging of hostvars when the host is in multiple groups and when I have tested to remove the postgres_cluster group, I get the correct hostvars:
PLAY [etcd_cluster] ***************************************************************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************************************************************
ok: [demo_postgres1]
ok: [demo_postgres3]
ok: [demo_postgres2]
TASK [Ansible | List all known variables and facts] *******************************************************************************************************************************************
ok: [demo_postgres1] => {
"hostvars[inventory_hostname]['vars']": {
"etcd_ip": "***"
}
}
ok: [demo_postgres2] => {
"hostvars[inventory_hostname]['vars']": {
"etcd_ip": "***"
}
}
ok: [demo_postgres3] => {
"hostvars[inventory_hostname]['vars']": {
"etcd_ip": "***"
}
}
I would expect that my etcd_ip was merged with postgres_ip ? I can resolve this by adding the etcd_ip in postgres_cluster hostvars but I want to understand why merge is not working.
If you need more information, feel free to ask.
Best regards,
BDO