I think this is caused by using hosts which are in both the control and compute groups:
ETCD_INITIAL_CLUSTER: "{% for host in etcd_hosts %}{{ hostvars[host]['ansible_hostname'] }}={{ internal_protocol }}://{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['add ress'] }}:{{ etcd_peer_port }}{% if not loop.last %},{% endif %}{% endfor %}"
etcd_hosts: "{{ groups['control'] + (groups['compute'] if enable_kuryr | bool else []) }}"
There probably needs to be some uniqueness enforcement, e.g. the unique filter in etcd_hosts.
Note that this probably doesn't affect Stein & later releases, which just iterate over the etcd group.
As a workaround you could override the etcd_hosts variable.
I think this is caused by using hosts which are in both the control and compute groups:
ETCD_INITIAL_ CLUSTER: "{% for host in etcd_hosts %}{{ hostvars[ host][' ansible_ hostname' ] }}={{ internal_protocol }}://{{ hostvars[ host][' ansible_ ' + hostvars[ host][' api_interface' ]]['ipv4' ]['add ress'] }}:{{ etcd_peer_port }}{% if not loop.last %},{% endif %}{% endfor %}"
etcd_hosts: "{{ groups['control'] + (groups['compute'] if enable_kuryr | bool else []) }}"
There probably needs to be some uniqueness enforcement, e.g. the unique filter in etcd_hosts.
Note that this probably doesn't affect Stein & later releases, which just iterate over the etcd group.
As a workaround you could override the etcd_hosts variable.