Finding variable collision in Ansible from group_vars
When you start building large complicated Ansible deployments the likely hood that your using group_vars
in new and exiting ways is VERY high due to the desire to co-locate configuration for nodes based on group membership into once place. If you are at the point where nodes are members of multiple groups all within a single deployment this quick BASH one-liner should help you search for your group vars and find potential disasters before they're impacting your production environment.
for i in $(grep -hv '^#' inventory/group_vars/*.yml | grep -v '^\s' | awk -F':' '/:/ {print $1}'); do
VAR="$(grep -l "^$i" inventory/group_vars/*.yml)"
if [[ "$(echo -e ${VAR} | sed 's/\s/\n/g' | wc -l)" -gt 1 ]];then
echo -e "\n$i:"
echo -e "${VAR}"
fi
done
If your deployment has group_var
collisions the output will look similar to something like this.
lxc_container_config_list:
playbooks/inventory/group_vars/all_containers.yml
playbooks/inventory/group_vars/cinder_volume.yml
playbooks/inventory/group_vars/neutron_agent.yml
memcached_port:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/keystone_all.yml
memcached_servers:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/keystone_all.yml
galera_address:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/neutron_all.yml
rabbitmq_port:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/neutron_all.yml
rabbitmq_servers:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/neutron_all.yml
rabbitmq_use_ssl:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/neutron_all.yml
openstack_external_ssl:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/gnocchi_all.yml
playbooks/inventory/group_vars/horizon_all.yml
playbooks/inventory/group_vars/keystone_all.yml
playbooks/inventory/group_vars/nova_all.yml
openstack_service_publicuri_proto:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/aodh_all.yml
playbooks/inventory/group_vars/ceilometer_all.yml
service_region:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/ceilometer_all.yml
playbooks/inventory/group_vars/cinder_all.yml
playbooks/inventory/group_vars/glance_all.yml
playbooks/inventory/group_vars/gnocchi_all.yml
playbooks/inventory/group_vars/heat_all.yml
playbooks/inventory/group_vars/horizon_all.yml
playbooks/inventory/group_vars/swift_all.yml
dhcp_domain:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/neutron_all.yml
playbooks/inventory/group_vars/nova_all.yml
service_ldap_backend_enabled:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/aodh_all.yml
playbooks/inventory/group_vars/ceilometer_all.yml
playbooks/inventory/group_vars/cinder_all.yml
playbooks/inventory/group_vars/glance_all.yml
playbooks/inventory/group_vars/heat_all.yml
playbooks/inventory/group_vars/keystone_all.yml
playbooks/inventory/group_vars/neutron_all.yml
playbooks/inventory/group_vars/nova_all.yml
playbooks/inventory/group_vars/swift_all.yml
cinder_backends_rbd_inuse:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/cinder_all.yml
cinder_ceph_client:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/nova_all.yml
glance_api_servers:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/cinder_all.yml
playbooks/inventory/group_vars/nova_all.yml
neutron_rabbitmq_userid:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/neutron_all.yml
neutron_rabbitmq_vhost:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/neutron_all.yml
neutron_rabbitmq_port:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/neutron_all.yml
neutron_plugin_type:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/horizon_all.yml
lxc_container_config_list:
playbooks/inventory/group_vars/all_containers.yml
playbooks/inventory/group_vars/cinder_volume.yml
playbooks/inventory/group_vars/neutron_agent.yml
galera_client_drop_config_file:
playbooks/inventory/group_vars/galera_all.yml
playbooks/inventory/group_vars/utility_all.yml
lxc_container_config_list:
playbooks/inventory/group_vars/all_containers.yml
playbooks/inventory/group_vars/cinder_volume.yml
playbooks/inventory/group_vars/neutron_agent.yml
neutron_rabbitmq_userid:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/neutron_all.yml
neutron_rabbitmq_vhost:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/neutron_all.yml
neutron_rabbitmq_port:
playbooks/inventory/group_vars/all.yml
playbooks/inventory/group_vars/neutron_all.yml
galera_client_drop_config_file:
playbooks/inventory/group_vars/galera_all.yml
playbooks/inventory/group_vars/utility_all.yml
Sadly a fix which would've solved for variable collisions was rejected by Ansible proper and the less than desirable interface group_vars
provides still exists.