diff --git a/ansible/group_vars/all/apt b/ansible/inventory/group_vars/all/apt
similarity index 100%
rename from ansible/group_vars/all/apt
rename to ansible/inventory/group_vars/all/apt
diff --git a/ansible/group_vars/all/bifrost b/ansible/inventory/group_vars/all/bifrost
similarity index 100%
rename from ansible/group_vars/all/bifrost
rename to ansible/inventory/group_vars/all/bifrost
diff --git a/ansible/group_vars/all/bmc b/ansible/inventory/group_vars/all/bmc
similarity index 100%
rename from ansible/group_vars/all/bmc
rename to ansible/inventory/group_vars/all/bmc
diff --git a/ansible/group_vars/all/compute b/ansible/inventory/group_vars/all/compute
similarity index 100%
rename from ansible/group_vars/all/compute
rename to ansible/inventory/group_vars/all/compute
diff --git a/ansible/group_vars/all/controllers b/ansible/inventory/group_vars/all/controllers
similarity index 100%
rename from ansible/group_vars/all/controllers
rename to ansible/inventory/group_vars/all/controllers
diff --git a/ansible/group_vars/all/dell-switch-bmp b/ansible/inventory/group_vars/all/dell-switch-bmp
similarity index 100%
rename from ansible/group_vars/all/dell-switch-bmp
rename to ansible/inventory/group_vars/all/dell-switch-bmp
diff --git a/ansible/group_vars/all/dnf b/ansible/inventory/group_vars/all/dnf
similarity index 100%
rename from ansible/group_vars/all/dnf
rename to ansible/inventory/group_vars/all/dnf
diff --git a/ansible/group_vars/all/dns b/ansible/inventory/group_vars/all/dns
similarity index 100%
rename from ansible/group_vars/all/dns
rename to ansible/inventory/group_vars/all/dns
diff --git a/ansible/group_vars/all/docker b/ansible/inventory/group_vars/all/docker
similarity index 100%
rename from ansible/group_vars/all/docker
rename to ansible/inventory/group_vars/all/docker
diff --git a/ansible/group_vars/all/docker-registry b/ansible/inventory/group_vars/all/docker-registry
similarity index 100%
rename from ansible/group_vars/all/docker-registry
rename to ansible/inventory/group_vars/all/docker-registry
diff --git a/ansible/group_vars/all/globals b/ansible/inventory/group_vars/all/globals
similarity index 100%
rename from ansible/group_vars/all/globals
rename to ansible/inventory/group_vars/all/globals
diff --git a/ansible/group_vars/all/grafana b/ansible/inventory/group_vars/all/grafana
similarity index 100%
rename from ansible/group_vars/all/grafana
rename to ansible/inventory/group_vars/all/grafana
diff --git a/ansible/group_vars/all/idrac b/ansible/inventory/group_vars/all/idrac
similarity index 100%
rename from ansible/group_vars/all/idrac
rename to ansible/inventory/group_vars/all/idrac
diff --git a/ansible/group_vars/all/infra-vms b/ansible/inventory/group_vars/all/infra-vms
similarity index 100%
rename from ansible/group_vars/all/infra-vms
rename to ansible/inventory/group_vars/all/infra-vms
diff --git a/ansible/group_vars/all/inspector b/ansible/inventory/group_vars/all/inspector
similarity index 100%
rename from ansible/group_vars/all/inspector
rename to ansible/inventory/group_vars/all/inspector
diff --git a/ansible/group_vars/all/ipa b/ansible/inventory/group_vars/all/ipa
similarity index 100%
rename from ansible/group_vars/all/ipa
rename to ansible/inventory/group_vars/all/ipa
diff --git a/ansible/group_vars/all/ironic b/ansible/inventory/group_vars/all/ironic
similarity index 100%
rename from ansible/group_vars/all/ironic
rename to ansible/inventory/group_vars/all/ironic
diff --git a/ansible/group_vars/all/kolla b/ansible/inventory/group_vars/all/kolla
similarity index 100%
rename from ansible/group_vars/all/kolla
rename to ansible/inventory/group_vars/all/kolla
diff --git a/ansible/group_vars/all/monasca b/ansible/inventory/group_vars/all/monasca
similarity index 100%
rename from ansible/group_vars/all/monasca
rename to ansible/inventory/group_vars/all/monasca
diff --git a/ansible/group_vars/all/monitoring b/ansible/inventory/group_vars/all/monitoring
similarity index 100%
rename from ansible/group_vars/all/monitoring
rename to ansible/inventory/group_vars/all/monitoring
diff --git a/ansible/group_vars/all/network b/ansible/inventory/group_vars/all/network
similarity index 100%
rename from ansible/group_vars/all/network
rename to ansible/inventory/group_vars/all/network
diff --git a/ansible/group_vars/all/neutron b/ansible/inventory/group_vars/all/neutron
similarity index 100%
rename from ansible/group_vars/all/neutron
rename to ansible/inventory/group_vars/all/neutron
diff --git a/ansible/group_vars/all/nova b/ansible/inventory/group_vars/all/nova
similarity index 100%
rename from ansible/group_vars/all/nova
rename to ansible/inventory/group_vars/all/nova
diff --git a/ansible/group_vars/all/opensm b/ansible/inventory/group_vars/all/opensm
similarity index 100%
rename from ansible/group_vars/all/opensm
rename to ansible/inventory/group_vars/all/opensm
diff --git a/ansible/group_vars/all/openstack b/ansible/inventory/group_vars/all/openstack
similarity index 100%
rename from ansible/group_vars/all/openstack
rename to ansible/inventory/group_vars/all/openstack
diff --git a/ansible/group_vars/all/overcloud b/ansible/inventory/group_vars/all/overcloud
similarity index 100%
rename from ansible/group_vars/all/overcloud
rename to ansible/inventory/group_vars/all/overcloud
diff --git a/ansible/group_vars/all/overcloud-dib b/ansible/inventory/group_vars/all/overcloud-dib
similarity index 100%
rename from ansible/group_vars/all/overcloud-dib
rename to ansible/inventory/group_vars/all/overcloud-dib
diff --git a/ansible/group_vars/all/pip b/ansible/inventory/group_vars/all/pip
similarity index 100%
rename from ansible/group_vars/all/pip
rename to ansible/inventory/group_vars/all/pip
diff --git a/ansible/group_vars/all/proxy b/ansible/inventory/group_vars/all/proxy
similarity index 100%
rename from ansible/group_vars/all/proxy
rename to ansible/inventory/group_vars/all/proxy
diff --git a/ansible/group_vars/all/seed b/ansible/inventory/group_vars/all/seed
similarity index 100%
rename from ansible/group_vars/all/seed
rename to ansible/inventory/group_vars/all/seed
diff --git a/ansible/group_vars/all/seed-hypervisor b/ansible/inventory/group_vars/all/seed-hypervisor
similarity index 100%
rename from ansible/group_vars/all/seed-hypervisor
rename to ansible/inventory/group_vars/all/seed-hypervisor
diff --git a/ansible/group_vars/all/seed-vm b/ansible/inventory/group_vars/all/seed-vm
similarity index 100%
rename from ansible/group_vars/all/seed-vm
rename to ansible/inventory/group_vars/all/seed-vm
diff --git a/ansible/group_vars/all/ssh b/ansible/inventory/group_vars/all/ssh
similarity index 100%
rename from ansible/group_vars/all/ssh
rename to ansible/inventory/group_vars/all/ssh
diff --git a/ansible/group_vars/all/storage b/ansible/inventory/group_vars/all/storage
similarity index 100%
rename from ansible/group_vars/all/storage
rename to ansible/inventory/group_vars/all/storage
diff --git a/ansible/group_vars/all/swift b/ansible/inventory/group_vars/all/swift
similarity index 100%
rename from ansible/group_vars/all/swift
rename to ansible/inventory/group_vars/all/swift
diff --git a/ansible/group_vars/all/switches/arista b/ansible/inventory/group_vars/all/switches/arista
similarity index 100%
rename from ansible/group_vars/all/switches/arista
rename to ansible/inventory/group_vars/all/switches/arista
diff --git a/ansible/group_vars/all/switches/config b/ansible/inventory/group_vars/all/switches/config
similarity index 100%
rename from ansible/group_vars/all/switches/config
rename to ansible/inventory/group_vars/all/switches/config
diff --git a/ansible/group_vars/all/switches/dell b/ansible/inventory/group_vars/all/switches/dell
similarity index 100%
rename from ansible/group_vars/all/switches/dell
rename to ansible/inventory/group_vars/all/switches/dell
diff --git a/ansible/group_vars/all/switches/dell-powerconnect b/ansible/inventory/group_vars/all/switches/dell-powerconnect
similarity index 100%
rename from ansible/group_vars/all/switches/dell-powerconnect
rename to ansible/inventory/group_vars/all/switches/dell-powerconnect
diff --git a/ansible/group_vars/all/switches/junos b/ansible/inventory/group_vars/all/switches/junos
similarity index 100%
rename from ansible/group_vars/all/switches/junos
rename to ansible/inventory/group_vars/all/switches/junos
diff --git a/ansible/group_vars/all/switches/mellanox b/ansible/inventory/group_vars/all/switches/mellanox
similarity index 100%
rename from ansible/group_vars/all/switches/mellanox
rename to ansible/inventory/group_vars/all/switches/mellanox
diff --git a/ansible/group_vars/all/time b/ansible/inventory/group_vars/all/time
similarity index 100%
rename from ansible/group_vars/all/time
rename to ansible/inventory/group_vars/all/time
diff --git a/ansible/group_vars/all/users b/ansible/inventory/group_vars/all/users
similarity index 100%
rename from ansible/group_vars/all/users
rename to ansible/inventory/group_vars/all/users
diff --git a/ansible/group_vars/compute/ansible-user b/ansible/inventory/group_vars/compute/ansible-user
similarity index 100%
rename from ansible/group_vars/compute/ansible-user
rename to ansible/inventory/group_vars/compute/ansible-user
diff --git a/ansible/group_vars/compute/bios b/ansible/inventory/group_vars/compute/bios
similarity index 100%
rename from ansible/group_vars/compute/bios
rename to ansible/inventory/group_vars/compute/bios
diff --git a/ansible/group_vars/compute/firewall b/ansible/inventory/group_vars/compute/firewall
similarity index 100%
rename from ansible/group_vars/compute/firewall
rename to ansible/inventory/group_vars/compute/firewall
diff --git a/ansible/group_vars/compute/luks b/ansible/inventory/group_vars/compute/luks
similarity index 100%
rename from ansible/group_vars/compute/luks
rename to ansible/inventory/group_vars/compute/luks
diff --git a/ansible/group_vars/compute/lvm b/ansible/inventory/group_vars/compute/lvm
similarity index 100%
rename from ansible/group_vars/compute/lvm
rename to ansible/inventory/group_vars/compute/lvm
diff --git a/ansible/group_vars/compute/mdadm b/ansible/inventory/group_vars/compute/mdadm
similarity index 100%
rename from ansible/group_vars/compute/mdadm
rename to ansible/inventory/group_vars/compute/mdadm
diff --git a/ansible/group_vars/compute/network b/ansible/inventory/group_vars/compute/network
similarity index 100%
rename from ansible/group_vars/compute/network
rename to ansible/inventory/group_vars/compute/network
diff --git a/ansible/group_vars/compute/raid b/ansible/inventory/group_vars/compute/raid
similarity index 100%
rename from ansible/group_vars/compute/raid
rename to ansible/inventory/group_vars/compute/raid
diff --git a/ansible/group_vars/compute/sysctl b/ansible/inventory/group_vars/compute/sysctl
similarity index 100%
rename from ansible/group_vars/compute/sysctl
rename to ansible/inventory/group_vars/compute/sysctl
diff --git a/ansible/group_vars/compute/tuned b/ansible/inventory/group_vars/compute/tuned
similarity index 100%
rename from ansible/group_vars/compute/tuned
rename to ansible/inventory/group_vars/compute/tuned
diff --git a/ansible/group_vars/compute/users b/ansible/inventory/group_vars/compute/users
similarity index 100%
rename from ansible/group_vars/compute/users
rename to ansible/inventory/group_vars/compute/users
diff --git a/ansible/group_vars/controllers/ansible-user b/ansible/inventory/group_vars/controllers/ansible-user
similarity index 100%
rename from ansible/group_vars/controllers/ansible-user
rename to ansible/inventory/group_vars/controllers/ansible-user
diff --git a/ansible/group_vars/controllers/bios b/ansible/inventory/group_vars/controllers/bios
similarity index 100%
rename from ansible/group_vars/controllers/bios
rename to ansible/inventory/group_vars/controllers/bios
diff --git a/ansible/group_vars/controllers/firewall b/ansible/inventory/group_vars/controllers/firewall
similarity index 100%
rename from ansible/group_vars/controllers/firewall
rename to ansible/inventory/group_vars/controllers/firewall
diff --git a/ansible/group_vars/controllers/luks b/ansible/inventory/group_vars/controllers/luks
similarity index 100%
rename from ansible/group_vars/controllers/luks
rename to ansible/inventory/group_vars/controllers/luks
diff --git a/ansible/group_vars/controllers/lvm b/ansible/inventory/group_vars/controllers/lvm
similarity index 100%
rename from ansible/group_vars/controllers/lvm
rename to ansible/inventory/group_vars/controllers/lvm
diff --git a/ansible/group_vars/controllers/mdadm b/ansible/inventory/group_vars/controllers/mdadm
similarity index 100%
rename from ansible/group_vars/controllers/mdadm
rename to ansible/inventory/group_vars/controllers/mdadm
diff --git a/ansible/group_vars/controllers/network b/ansible/inventory/group_vars/controllers/network
similarity index 100%
rename from ansible/group_vars/controllers/network
rename to ansible/inventory/group_vars/controllers/network
diff --git a/ansible/group_vars/controllers/raid b/ansible/inventory/group_vars/controllers/raid
similarity index 100%
rename from ansible/group_vars/controllers/raid
rename to ansible/inventory/group_vars/controllers/raid
diff --git a/ansible/group_vars/controllers/sysctl b/ansible/inventory/group_vars/controllers/sysctl
similarity index 100%
rename from ansible/group_vars/controllers/sysctl
rename to ansible/inventory/group_vars/controllers/sysctl
diff --git a/ansible/group_vars/controllers/tuned b/ansible/inventory/group_vars/controllers/tuned
similarity index 100%
rename from ansible/group_vars/controllers/tuned
rename to ansible/inventory/group_vars/controllers/tuned
diff --git a/ansible/group_vars/controllers/users b/ansible/inventory/group_vars/controllers/users
similarity index 100%
rename from ansible/group_vars/controllers/users
rename to ansible/inventory/group_vars/controllers/users
diff --git a/ansible/group_vars/infra-vms/ansible-host b/ansible/inventory/group_vars/infra-vms/ansible-host
similarity index 100%
rename from ansible/group_vars/infra-vms/ansible-host
rename to ansible/inventory/group_vars/infra-vms/ansible-host
diff --git a/ansible/group_vars/infra-vms/ansible-user b/ansible/inventory/group_vars/infra-vms/ansible-user
similarity index 100%
rename from ansible/group_vars/infra-vms/ansible-user
rename to ansible/inventory/group_vars/infra-vms/ansible-user
diff --git a/ansible/group_vars/infra-vms/firewall b/ansible/inventory/group_vars/infra-vms/firewall
similarity index 100%
rename from ansible/group_vars/infra-vms/firewall
rename to ansible/inventory/group_vars/infra-vms/firewall
diff --git a/ansible/group_vars/infra-vms/luks b/ansible/inventory/group_vars/infra-vms/luks
similarity index 100%
rename from ansible/group_vars/infra-vms/luks
rename to ansible/inventory/group_vars/infra-vms/luks
diff --git a/ansible/group_vars/infra-vms/lvm b/ansible/inventory/group_vars/infra-vms/lvm
similarity index 100%
rename from ansible/group_vars/infra-vms/lvm
rename to ansible/inventory/group_vars/infra-vms/lvm
diff --git a/ansible/group_vars/infra-vms/mdadm b/ansible/inventory/group_vars/infra-vms/mdadm
similarity index 100%
rename from ansible/group_vars/infra-vms/mdadm
rename to ansible/inventory/group_vars/infra-vms/mdadm
diff --git a/ansible/group_vars/infra-vms/network b/ansible/inventory/group_vars/infra-vms/network
similarity index 100%
rename from ansible/group_vars/infra-vms/network
rename to ansible/inventory/group_vars/infra-vms/network
diff --git a/ansible/group_vars/infra-vms/sysctl b/ansible/inventory/group_vars/infra-vms/sysctl
similarity index 100%
rename from ansible/group_vars/infra-vms/sysctl
rename to ansible/inventory/group_vars/infra-vms/sysctl
diff --git a/ansible/group_vars/infra-vms/tuned b/ansible/inventory/group_vars/infra-vms/tuned
similarity index 100%
rename from ansible/group_vars/infra-vms/tuned
rename to ansible/inventory/group_vars/infra-vms/tuned
diff --git a/ansible/group_vars/infra-vms/users b/ansible/inventory/group_vars/infra-vms/users
similarity index 100%
rename from ansible/group_vars/infra-vms/users
rename to ansible/inventory/group_vars/infra-vms/users
diff --git a/ansible/group_vars/monitoring/ansible-user b/ansible/inventory/group_vars/monitoring/ansible-user
similarity index 100%
rename from ansible/group_vars/monitoring/ansible-user
rename to ansible/inventory/group_vars/monitoring/ansible-user
diff --git a/ansible/group_vars/monitoring/bios b/ansible/inventory/group_vars/monitoring/bios
similarity index 100%
rename from ansible/group_vars/monitoring/bios
rename to ansible/inventory/group_vars/monitoring/bios
diff --git a/ansible/group_vars/monitoring/firewall b/ansible/inventory/group_vars/monitoring/firewall
similarity index 100%
rename from ansible/group_vars/monitoring/firewall
rename to ansible/inventory/group_vars/monitoring/firewall
diff --git a/ansible/group_vars/monitoring/luks b/ansible/inventory/group_vars/monitoring/luks
similarity index 100%
rename from ansible/group_vars/monitoring/luks
rename to ansible/inventory/group_vars/monitoring/luks
diff --git a/ansible/group_vars/monitoring/lvm b/ansible/inventory/group_vars/monitoring/lvm
similarity index 100%
rename from ansible/group_vars/monitoring/lvm
rename to ansible/inventory/group_vars/monitoring/lvm
diff --git a/ansible/group_vars/monitoring/mdadm b/ansible/inventory/group_vars/monitoring/mdadm
similarity index 100%
rename from ansible/group_vars/monitoring/mdadm
rename to ansible/inventory/group_vars/monitoring/mdadm
diff --git a/ansible/group_vars/monitoring/network b/ansible/inventory/group_vars/monitoring/network
similarity index 100%
rename from ansible/group_vars/monitoring/network
rename to ansible/inventory/group_vars/monitoring/network
diff --git a/ansible/group_vars/monitoring/raid b/ansible/inventory/group_vars/monitoring/raid
similarity index 100%
rename from ansible/group_vars/monitoring/raid
rename to ansible/inventory/group_vars/monitoring/raid
diff --git a/ansible/group_vars/monitoring/sysctl b/ansible/inventory/group_vars/monitoring/sysctl
similarity index 100%
rename from ansible/group_vars/monitoring/sysctl
rename to ansible/inventory/group_vars/monitoring/sysctl
diff --git a/ansible/group_vars/monitoring/tuned b/ansible/inventory/group_vars/monitoring/tuned
similarity index 100%
rename from ansible/group_vars/monitoring/tuned
rename to ansible/inventory/group_vars/monitoring/tuned
diff --git a/ansible/group_vars/monitoring/users b/ansible/inventory/group_vars/monitoring/users
similarity index 100%
rename from ansible/group_vars/monitoring/users
rename to ansible/inventory/group_vars/monitoring/users
diff --git a/ansible/group_vars/overcloud/ansible-host b/ansible/inventory/group_vars/overcloud/ansible-host
similarity index 100%
rename from ansible/group_vars/overcloud/ansible-host
rename to ansible/inventory/group_vars/overcloud/ansible-host
diff --git a/ansible/group_vars/seed-hypervisor/ansible-host b/ansible/inventory/group_vars/seed-hypervisor/ansible-host
similarity index 100%
rename from ansible/group_vars/seed-hypervisor/ansible-host
rename to ansible/inventory/group_vars/seed-hypervisor/ansible-host
diff --git a/ansible/group_vars/seed-hypervisor/ansible-user b/ansible/inventory/group_vars/seed-hypervisor/ansible-user
similarity index 100%
rename from ansible/group_vars/seed-hypervisor/ansible-user
rename to ansible/inventory/group_vars/seed-hypervisor/ansible-user
diff --git a/ansible/group_vars/seed-hypervisor/firewall b/ansible/inventory/group_vars/seed-hypervisor/firewall
similarity index 100%
rename from ansible/group_vars/seed-hypervisor/firewall
rename to ansible/inventory/group_vars/seed-hypervisor/firewall
diff --git a/ansible/group_vars/seed-hypervisor/luks b/ansible/inventory/group_vars/seed-hypervisor/luks
similarity index 100%
rename from ansible/group_vars/seed-hypervisor/luks
rename to ansible/inventory/group_vars/seed-hypervisor/luks
diff --git a/ansible/group_vars/seed-hypervisor/lvm b/ansible/inventory/group_vars/seed-hypervisor/lvm
similarity index 100%
rename from ansible/group_vars/seed-hypervisor/lvm
rename to ansible/inventory/group_vars/seed-hypervisor/lvm
diff --git a/ansible/group_vars/seed-hypervisor/mdadm b/ansible/inventory/group_vars/seed-hypervisor/mdadm
similarity index 100%
rename from ansible/group_vars/seed-hypervisor/mdadm
rename to ansible/inventory/group_vars/seed-hypervisor/mdadm
diff --git a/ansible/group_vars/seed-hypervisor/network b/ansible/inventory/group_vars/seed-hypervisor/network
similarity index 100%
rename from ansible/group_vars/seed-hypervisor/network
rename to ansible/inventory/group_vars/seed-hypervisor/network
diff --git a/ansible/group_vars/seed-hypervisor/snat b/ansible/inventory/group_vars/seed-hypervisor/snat
similarity index 100%
rename from ansible/group_vars/seed-hypervisor/snat
rename to ansible/inventory/group_vars/seed-hypervisor/snat
diff --git a/ansible/group_vars/seed-hypervisor/sysctl b/ansible/inventory/group_vars/seed-hypervisor/sysctl
similarity index 100%
rename from ansible/group_vars/seed-hypervisor/sysctl
rename to ansible/inventory/group_vars/seed-hypervisor/sysctl
diff --git a/ansible/group_vars/seed-hypervisor/tuned b/ansible/inventory/group_vars/seed-hypervisor/tuned
similarity index 100%
rename from ansible/group_vars/seed-hypervisor/tuned
rename to ansible/inventory/group_vars/seed-hypervisor/tuned
diff --git a/ansible/group_vars/seed-hypervisor/users b/ansible/inventory/group_vars/seed-hypervisor/users
similarity index 100%
rename from ansible/group_vars/seed-hypervisor/users
rename to ansible/inventory/group_vars/seed-hypervisor/users
diff --git a/ansible/group_vars/seed/ansible-host b/ansible/inventory/group_vars/seed/ansible-host
similarity index 100%
rename from ansible/group_vars/seed/ansible-host
rename to ansible/inventory/group_vars/seed/ansible-host
diff --git a/ansible/group_vars/seed/ansible-user b/ansible/inventory/group_vars/seed/ansible-user
similarity index 100%
rename from ansible/group_vars/seed/ansible-user
rename to ansible/inventory/group_vars/seed/ansible-user
diff --git a/ansible/group_vars/seed/firewall b/ansible/inventory/group_vars/seed/firewall
similarity index 100%
rename from ansible/group_vars/seed/firewall
rename to ansible/inventory/group_vars/seed/firewall
diff --git a/ansible/group_vars/seed/luks b/ansible/inventory/group_vars/seed/luks
similarity index 100%
rename from ansible/group_vars/seed/luks
rename to ansible/inventory/group_vars/seed/luks
diff --git a/ansible/group_vars/seed/lvm b/ansible/inventory/group_vars/seed/lvm
similarity index 100%
rename from ansible/group_vars/seed/lvm
rename to ansible/inventory/group_vars/seed/lvm
diff --git a/ansible/group_vars/seed/mdadm b/ansible/inventory/group_vars/seed/mdadm
similarity index 100%
rename from ansible/group_vars/seed/mdadm
rename to ansible/inventory/group_vars/seed/mdadm
diff --git a/ansible/group_vars/seed/network b/ansible/inventory/group_vars/seed/network
similarity index 100%
rename from ansible/group_vars/seed/network
rename to ansible/inventory/group_vars/seed/network
diff --git a/ansible/group_vars/seed/snat b/ansible/inventory/group_vars/seed/snat
similarity index 100%
rename from ansible/group_vars/seed/snat
rename to ansible/inventory/group_vars/seed/snat
diff --git a/ansible/group_vars/seed/sysctl b/ansible/inventory/group_vars/seed/sysctl
similarity index 100%
rename from ansible/group_vars/seed/sysctl
rename to ansible/inventory/group_vars/seed/sysctl
diff --git a/ansible/group_vars/seed/tuned b/ansible/inventory/group_vars/seed/tuned
similarity index 100%
rename from ansible/group_vars/seed/tuned
rename to ansible/inventory/group_vars/seed/tuned
diff --git a/ansible/group_vars/seed/users b/ansible/inventory/group_vars/seed/users
similarity index 100%
rename from ansible/group_vars/seed/users
rename to ansible/inventory/group_vars/seed/users
diff --git a/ansible/group_vars/storage/ansible-user b/ansible/inventory/group_vars/storage/ansible-user
similarity index 100%
rename from ansible/group_vars/storage/ansible-user
rename to ansible/inventory/group_vars/storage/ansible-user
diff --git a/ansible/group_vars/storage/bios b/ansible/inventory/group_vars/storage/bios
similarity index 100%
rename from ansible/group_vars/storage/bios
rename to ansible/inventory/group_vars/storage/bios
diff --git a/ansible/group_vars/storage/firewall b/ansible/inventory/group_vars/storage/firewall
similarity index 100%
rename from ansible/group_vars/storage/firewall
rename to ansible/inventory/group_vars/storage/firewall
diff --git a/ansible/group_vars/storage/luks b/ansible/inventory/group_vars/storage/luks
similarity index 100%
rename from ansible/group_vars/storage/luks
rename to ansible/inventory/group_vars/storage/luks
diff --git a/ansible/group_vars/storage/lvm b/ansible/inventory/group_vars/storage/lvm
similarity index 100%
rename from ansible/group_vars/storage/lvm
rename to ansible/inventory/group_vars/storage/lvm
diff --git a/ansible/group_vars/storage/mdadm b/ansible/inventory/group_vars/storage/mdadm
similarity index 100%
rename from ansible/group_vars/storage/mdadm
rename to ansible/inventory/group_vars/storage/mdadm
diff --git a/ansible/group_vars/storage/network b/ansible/inventory/group_vars/storage/network
similarity index 100%
rename from ansible/group_vars/storage/network
rename to ansible/inventory/group_vars/storage/network
diff --git a/ansible/group_vars/storage/raid b/ansible/inventory/group_vars/storage/raid
similarity index 100%
rename from ansible/group_vars/storage/raid
rename to ansible/inventory/group_vars/storage/raid
diff --git a/ansible/group_vars/storage/sysctl b/ansible/inventory/group_vars/storage/sysctl
similarity index 100%
rename from ansible/group_vars/storage/sysctl
rename to ansible/inventory/group_vars/storage/sysctl
diff --git a/ansible/group_vars/storage/tuned b/ansible/inventory/group_vars/storage/tuned
similarity index 100%
rename from ansible/group_vars/storage/tuned
rename to ansible/inventory/group_vars/storage/tuned
diff --git a/ansible/group_vars/storage/users b/ansible/inventory/group_vars/storage/users
similarity index 100%
rename from ansible/group_vars/storage/users
rename to ansible/inventory/group_vars/storage/users
diff --git a/doc/source/configuration/reference/infra-vms.rst b/doc/source/configuration/reference/infra-vms.rst
index baa46facacdd1686549e2274c54350886d367ed8..0fd8e6013205b363848144cad5d4a49573178fdb 100644
--- a/doc/source/configuration/reference/infra-vms.rst
+++ b/doc/source/configuration/reference/infra-vms.rst
@@ -39,7 +39,7 @@ can be added by setting ``infra_vm_network_interfaces_extra``.
 List of Kayobe applied defaults to required docker_container variables.
 Any of these variables can be overridden with a ``host_var``.
 
-.. literalinclude:: ../../../../ansible/group_vars/all/infra-vms
+.. literalinclude:: ../../../../ansible/inventory/group_vars/all/infra-vms
     :language: yaml
 
 Customisations
diff --git a/doc/source/configuration/reference/kayobe.rst b/doc/source/configuration/reference/kayobe.rst
index f478fbdfea762d8728b97793b4266d99705b5630..c442f90d0a79adda42ad816c9cc6e43a14c7bd99 100644
--- a/doc/source/configuration/reference/kayobe.rst
+++ b/doc/source/configuration/reference/kayobe.rst
@@ -44,19 +44,21 @@ and provide a mechanism we can use for providing site localisation and
 customisation of OpenStack in combination with some reasonable default values.
 For global configuration options, Kayobe typically uses the following patterns:
 
-- Playbook group variables for the *all* group in
-  ``<kayobe repo>/ansible/group_vars/all/*`` set **global defaults**.  These
-  files should not be modified.
-- Playbook group variables for other groups in
-  ``<kayobe repo>/ansible/group_vars/<group>/*`` set **defaults for some subsets
-  of hosts**.  These files should not be modified.
+- Inventory group variables for the *all* group in
+  ``<kayobe repo>/ansible/inventory/group_vars/all/*`` set **global defaults**.
+  These files should not be modified.
+- Inventory group variables for other groups in
+  ``<kayobe repo>/ansible/inventory/group_vars/<group>/*`` set **defaults for
+  some subsets of hosts**.  These files should not be modified.
 - Extra-vars files in ``${KAYOBE_CONFIG_PATH}/*.yml`` set **custom values
   for global variables** and should be used to apply global site localisation
   and customisation.  By default these variables are commented out.
 
-Additionally, variables can be set on a per-host basis using inventory host
-variables files in ``${KAYOBE_CONFIG_PATH}/inventory/host_vars/*``.  It should
-be noted that variables set in extra-vars files take precedence over per-host
+Additionally, variables can be set on a per-group or per-host basis using
+inventory group or host variables files in
+``${KAYOBE_CONFIG_PATH}/inventory/group_vars/*`` or
+``${KAYOBE_CONFIG_PATH}/inventory/host_vars/*`` respectively.  It should be
+noted that variables set in extra-vars files take precedence over per-host
 variables.
 
 .. _configuring-kayobe:
diff --git a/doc/source/configuration/reference/kolla.rst b/doc/source/configuration/reference/kolla.rst
index 5a35196cf729c0aa107beb51d1c2a326ad128f4c..a4b4e4f4c92695f2da130cf6983b8a7b2c34a23b 100644
--- a/doc/source/configuration/reference/kolla.rst
+++ b/doc/source/configuration/reference/kolla.rst
@@ -153,7 +153,7 @@ images that will be built:
 
 If a required image is not built when the corresponding flag is set, check the
 image sets defined in ``overcloud_container_image_sets`` in
-``ansible/group_vars/all/kolla``.
+``ansible/inventory/group_vars/all/kolla``.
 
 Image Customisation
 ===================
diff --git a/doc/source/contributor/development.rst b/doc/source/contributor/development.rst
index 6aede74014128065049e0bf5abc3a0a3614145ce..e65f630e5a8beb9be79de35b71ff42054053bee6 100644
--- a/doc/source/contributor/development.rst
+++ b/doc/source/contributor/development.rst
@@ -31,7 +31,7 @@ Kayobe's Ansible playbooks live in `ansible/*.yml
 typically execute roles in `ansible/roles/
 <https://opendev.org/openstack/kayobe/src/branch/master/ansible/roles>`__.
 Global variable defaults are defined in group variable files in
-`ansible/group_vars/all/
+`ansible/inventory/group_vars/all/
 <https://opendev.org/openstack/kayobe/src/branch/master/ansible/group_vars/>`__
 and these typically map to commented out variables in the configuration files
 in `etc/kayobe/*.yml
diff --git a/doc/source/control-plane-service-placement.rst b/doc/source/control-plane-service-placement.rst
index fa634a22abdc3ee934e2fca1b9908acb1fcb3ce8..401c5adb9304d061b35541a2583ffe2bb1c6426a 100644
--- a/doc/source/control-plane-service-placement.rst
+++ b/doc/source/control-plane-service-placement.rst
@@ -46,10 +46,10 @@ Variables For Custom Server Roles
 Certain variables must be defined for hosts in the ``overcloud`` group.  For
 hosts in the ``controllers`` group, many variables are mapped to other
 variables with a ``controller_`` prefix in files under
-``ansible/group_vars/controllers/``. This is done in order that they may be set
-in a global extra variables file, typically ``controllers.yml``, with defaults
-set in ``ansible/group_vars/all/controllers``.  A similar scheme is used for
-hosts in the ``monitoring`` group.
+``ansible/inventory/group_vars/controllers/``. This is done in order that they
+may be set in a global extra variables file, typically ``controllers.yml``,
+with defaults set in ``ansible/inventory/group_vars/all/controllers``.  A
+similar scheme is used for hosts in the ``monitoring`` group.
 
 .. table:: Overcloud host variables
 
diff --git a/doc/source/custom-ansible-playbooks.rst b/doc/source/custom-ansible-playbooks.rst
index 7941a0f7959b61c5f6f505b89192d3e69b27a8cf..0c61793679a05ff5d0298210783fbfdb59a497ef 100644
--- a/doc/source/custom-ansible-playbooks.rst
+++ b/doc/source/custom-ansible-playbooks.rst
@@ -61,7 +61,6 @@ plugins:
 
    cd ${KAYOBE_CONFIG_PATH}/ansible/
    ln -s ../../../../kayobe/ansible/filter_plugins/ filter_plugins
-   ln -s ../../../../kayobe/ansible/group_vars/ group_vars
    ln -s ../../../../kayobe/ansible/test_plugins/ test_plugins
 
 These symlinks can even be committed to the kayobe-config Git repository.
diff --git a/kayobe/ansible.py b/kayobe/ansible.py
index d8dd800546dcb6087dd55d083fed64b44e637aa3..9d47a9243b76cd48dcf206c4be0b34b52e53fe55 100644
--- a/kayobe/ansible.py
+++ b/kayobe/ansible.py
@@ -91,10 +91,11 @@ def _get_kayobe_environment_path(parsed_args):
 
 def _get_inventories_paths(parsed_args, env_path):
     """Return the paths to the Kayobe inventories."""
+    default_inventory = utils.get_data_files_path("ansible", "inventory")
+    inventories = [default_inventory]
     if parsed_args.inventory:
-        return parsed_args.inventory
+        inventories.extend(parsed_args.inventory)
     else:
-        inventories = []
         shared_inventory = os.path.join(parsed_args.config_path, "inventory")
         if env_path:
             if os.path.exists(shared_inventory):
@@ -106,7 +107,7 @@ def _get_inventories_paths(parsed_args, env_path):
             # Preserve existing behaviour: don't check if an inventory
             # directory exists when no environment is specified
             inventories.append(shared_inventory)
-        return inventories
+    return inventories
 
 
 def _validate_args(parsed_args, playbooks):
diff --git a/kayobe/tests/unit/test_ansible.py b/kayobe/tests/unit/test_ansible.py
index 5656ac378cdb9c236578a93e47471dc1654cfdfe..7da686379eafc61ccb106129b0934694f0837a70 100644
--- a/kayobe/tests/unit/test_ansible.py
+++ b/kayobe/tests/unit/test_ansible.py
@@ -45,6 +45,7 @@ class TestCase(unittest.TestCase):
         ansible.run_playbooks(parsed_args, ["playbook1.yml", "playbook2.yml"])
         expected_cmd = [
             "ansible-playbook",
+            "--inventory", utils.get_data_files_path("ansible", "inventory"),
             "--inventory", "/etc/kayobe/inventory",
             "-e", "@/etc/kayobe/vars-file1.yml",
             "-e", "@/etc/kayobe/vars-file2.yaml",
@@ -85,6 +86,7 @@ class TestCase(unittest.TestCase):
             "ansible-playbook",
             "-vv",
             "--list-tasks",
+            "--inventory", utils.get_data_files_path("ansible", "inventory"),
             "--inventory", "/path/to/inventory",
             "-e", "@/path/to/config/vars-file1.yml",
             "-e", "@/path/to/config/vars-file2.yaml",
@@ -137,6 +139,7 @@ class TestCase(unittest.TestCase):
             "ansible-playbook",
             "--list-tasks",
             "--vault-password-file", "/path/to/kayobe-vault-password-helper",
+            "--inventory", utils.get_data_files_path("ansible", "inventory"),
             "--inventory", "/path/to/inventory",
             "-e", "@/path/to/config/vars-file1.yml",
             "-e", "@/path/to/config/vars-file2.yaml",
@@ -182,6 +185,7 @@ class TestCase(unittest.TestCase):
         expected_cmd = [
             "ansible-playbook",
             "--vault-password-file", "/path/to/vault/pw",
+            "--inventory", utils.get_data_files_path("ansible", "inventory"),
             "--inventory", "/etc/kayobe/inventory",
             "playbook1.yml",
         ]
@@ -211,6 +215,7 @@ class TestCase(unittest.TestCase):
         expected_cmd = [
             "ansible-playbook",
             "--vault-password-file", "/path/to/kayobe-vault-password-helper",
+            "--inventory", utils.get_data_files_path("ansible", "inventory"),
             "--inventory", "/etc/kayobe/inventory",
             "playbook1.yml",
         ]
@@ -261,6 +266,7 @@ class TestCase(unittest.TestCase):
                               **kwargs)
         expected_cmd = [
             "ansible-playbook",
+            "--inventory", utils.get_data_files_path("ansible", "inventory"),
             "--inventory", "/etc/kayobe/inventory",
             "-e", "@/etc/kayobe/vars-file1.yml",
             "-e", "@/etc/kayobe/vars-file2.yaml",
@@ -296,6 +302,7 @@ class TestCase(unittest.TestCase):
                               limit="foo", ignore_limit=True)
         expected_cmd = [
             "ansible-playbook",
+            "--inventory", utils.get_data_files_path("ansible", "inventory"),
             "--inventory", "/etc/kayobe/inventory",
             "-e", "@/etc/kayobe/vars-file1.yml",
             "-e", "@/etc/kayobe/vars-file2.yaml",
@@ -327,6 +334,7 @@ class TestCase(unittest.TestCase):
                               **kwargs)
         expected_cmd = [
             "ansible-playbook",
+            "--inventory", utils.get_data_files_path("ansible", "inventory"),
             "--inventory", "/etc/kayobe/inventory",
             "playbook1.yml",
             "playbook2.yml",
@@ -351,6 +359,7 @@ class TestCase(unittest.TestCase):
         ansible.run_playbooks(parsed_args, ["playbook1.yml"])
         expected_cmd = [
             "ansible-playbook",
+            "--inventory", utils.get_data_files_path("ansible", "inventory"),
             "--inventory", "/etc/kayobe/inventory",
             "playbook1.yml",
         ]
@@ -379,6 +388,7 @@ class TestCase(unittest.TestCase):
         ansible.run_playbooks(parsed_args, ["playbook1.yml"])
         expected_cmd = [
             "ansible-playbook",
+            "--inventory", utils.get_data_files_path("ansible", "inventory"),
             "--inventory", "/etc/kayobe/inventory",
             "playbook1.yml",
         ]
@@ -673,6 +683,7 @@ class TestCase(unittest.TestCase):
         ansible.run_playbooks(parsed_args, ["playbook1.yml", "playbook2.yml"])
         expected_cmd = [
             "ansible-playbook",
+            "--inventory", utils.get_data_files_path("ansible", "inventory"),
             "--inventory", "/etc/kayobe/inventory",
             "--inventory", "/etc/kayobe/environments/foobar/inventory",
             "playbook1.yml",
@@ -705,6 +716,7 @@ class TestCase(unittest.TestCase):
         ansible.run_playbooks(parsed_args, ["playbook1.yml", "playbook2.yml"])
         expected_cmd = [
             "ansible-playbook",
+            "--inventory", utils.get_data_files_path("ansible", "inventory"),
             "--inventory", "/etc/kayobe/inventory",
             "--inventory", "/etc/kayobe/environments/test-env/inventory",
             "playbook1.yml",
@@ -745,6 +757,7 @@ class TestCase(unittest.TestCase):
         ansible.run_playbooks(parsed_args, ["playbook1.yml", "playbook2.yml"])
         expected_cmd = [
             "ansible-playbook",
+            "--inventory", utils.get_data_files_path("ansible", "inventory"),
             "--inventory", "/etc/kayobe/inventory",
             "playbook1.yml",
             "playbook2.yml",
@@ -784,6 +797,7 @@ class TestCase(unittest.TestCase):
         ansible.run_playbooks(parsed_args, ["playbook1.yml", "playbook2.yml"])
         expected_cmd = [
             "ansible-playbook",
+            "--inventory", utils.get_data_files_path("ansible", "inventory"),
             "--inventory", "/etc/kayobe/environments/test-env/inventory",
             "playbook1.yml",
             "playbook2.yml",
diff --git a/releasenotes/notes/inventory-group-vars-cef39cb6f3803ee7.yaml b/releasenotes/notes/inventory-group-vars-cef39cb6f3803ee7.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..e43ce0306374b1d3779fa7fbdbb58e6180086803
--- /dev/null
+++ b/releasenotes/notes/inventory-group-vars-cef39cb6f3803ee7.yaml
@@ -0,0 +1,18 @@
+---
+upgrade:
+  - |
+    Changes the Kayobe playbook group variables in ``ansible/group_vars/`` to
+    be inventory group variables in ``ansible/inventory/group_vars``. This has
+    two important consequences:
+
+    1. Inventory group variables have a lower precedence than playbook group
+       variables. This means that these variables can now be overridden by
+       group variables in the Kayobe configuration inventory.
+
+    2. The new inventory group variables are automatically used by all Kayobe
+       commands, and do not need to be in the same directory as the playbook
+       being executed. This means that the `previous workaround
+       <https://docs.openstack.org/kayobe/yoga/custom-ansible-playbooks.html#packaging-custom-playbooks-with-configuration>`_
+       for custom playbooks involving symlinking to the group_vars directory
+       from the directory containing the custom playbook is no longer
+       necessary.
diff --git a/tools/test-ansible.sh b/tools/test-ansible.sh
index 62f1904cfad012f401477f72c32e2f24044e1d79..35daa9300b85a6ba8488fc32cc6c08456df28870 100755
--- a/tools/test-ansible.sh
+++ b/tools/test-ansible.sh
@@ -10,9 +10,9 @@ export ANSIBLE_ACTION_PLUGINS="kayobe/plugins/action:~/.ansible/plugins/action:/
 for playbook in ansible/roles/*/tests/main.yml; do
     # We declare extra variables to install the {{ openstack_branch }} version
     # of kolla-ansible. We should use {{ kolla_ansible_source_version }}, but
-    # adding ansible/group_vars/all/kolla would in turn require other
+    # adding ansible/inventory/group_vars/all/kolla would in turn require other
     # extra-vars files (like pip) and may cause unintended side effects.
-    if ! ansible-playbook --connection=local $playbook $* -e @ansible/group_vars/all/openstack; then
+    if ! ansible-playbook --connection=local $playbook $* -e @ansible/inventory/group_vars/all/openstack; then
         failed=$((failed + 1))
     fi
 done