From a94f0a902616a2e982b2e6876bc64e6da22b145e Mon Sep 17 00:00:00 2001
From: Kevin Carter <kevin.carter@rackspace.com>
Date: Thu, 27 Jul 2017 00:58:32 -0500
Subject: [PATCH] Combine our two multi-node-aio processes into one

The original mnaio was built using a lot of bash and was tailored
specifically for ubuntu 14.04. The new mnaio was built using a mix of
bash and ansible and was tailored specifically for ubuntu 16.04. This
patch takes the two code bases and combines the best things from each
method and wraps it up into a single code path all written using ansible
playbooks and basic variables.

While underlying system has changed the bash environment variable syntax
for overrides remains the same. This allows users to continue with what
has become their normal work-flow while leveraging the new structure and
capabilities.

High level overview:
  * The general performance of the VMs running within the MNAIO will now
    be a lot better. Before the VMs were built within QCOW2 containers,
    while this was flexible and portable it was slower. The new
    capabilities will use RAW logical volumes and native IO.
  * New repo management starts with preseeds and allows the user to pin
    to specific repositories without having to worry about flipping them
    post build.
  * CPU overhead will be a lot less. The old VM system used an
    un-reasonable number of processors per VM which directly translated
    to sockets. The new system will use cores and a single socket
    allowing for generally better VM performance with a lot less
    overhead and resource contention on the host.
  * Memory consumption has been greatly reduced. Each VM is now
    following the memory restrictions we'd find in the gate, as a MAX.
    Most of the VMs are using 1 - 2 GiB of RAM which should be more than
    enough for our purposes.

Overall the deployment process is simpler and more flexible and will
work on both trusty and xenial out of the box with the hope to bring
centos7 and suse into the fold some time in the future.

Change-Id: Idc8924452c481b08fd3b9362efa32d10d1b8f707
Signed-off-by: Kevin Carter <kevin.carter@rackspace.com>
---
 multi-node-aio-xenial-ansible                 |   1 +
 multi-node-aio-xenial-ansible/LICENSE.txt     | 229 -------
 multi-node-aio-xenial-ansible/README.rst      |  15 -
 multi-node-aio-xenial-ansible/build.sh        |  49 --
 .../config-deploy-node.sh                     |  31 -
 .../create_pxeboot_server.yml                 | 139 ----
 multi-node-aio-xenial-ansible/deploy-osa.sh   | 150 -----
 multi-node-aio-xenial-ansible/functions.rc    | 257 -------
 multi-node-aio-xenial-ansible/hosts.json      |  26 -
 multi-node-aio-xenial-ansible/inventory       |   2 -
 .../no-cobbler-configure-vms.sh               |  81 ---
 .../no-cobbler-create-vms.sh                  |  50 --
 .../openstack-service-setup.sh                | 175 -----
 .../roles/apache_install/README.md            |  23 -
 .../roles/apache_install/defaults/main.yml    |  26 -
 .../roles/apache_install/handlers/main.yml    |  20 -
 .../roles/apache_install/meta/main.yml        |  22 -
 .../roles/apache_install/tasks/configure.yml  |  40 --
 .../roles/apache_install/tasks/install.yml    |  25 -
 .../roles/apache_install/tasks/main.yml       |  18 -
 .../apache_install/templates/sites-allowed.j2 |   7 -
 .../roles/atftpd_install/README.md            |  23 -
 .../roles/atftpd_install/defaults/main.yml    |  26 -
 .../roles/atftpd_install/handlers/main.yml    |  20 -
 .../roles/atftpd_install/meta/main.yml        |  22 -
 .../roles/atftpd_install/tasks/configure.yml  |  39 --
 .../roles/atftpd_install/tasks/install.yml    |  25 -
 .../roles/atftpd_install/tasks/main.yml       |  18 -
 .../roles/atftpd_install/templates/atftpd.j2  |   3 -
 .../roles/dhcpd_install/README.md             |  23 -
 .../roles/dhcpd_install/defaults/main.yml     |  45 --
 .../roles/dhcpd_install/handlers/main.yml     |  21 -
 .../roles/dhcpd_install/meta/main.yml         |  22 -
 .../roles/dhcpd_install/tasks/configure.yml   |  24 -
 .../roles/dhcpd_install/tasks/install.yml     |  26 -
 .../roles/dhcpd_install/tasks/main.yml        |  18 -
 .../roles/proxy_install/README.md             |  28 -
 .../roles/proxy_install/defaults/main.yml     |  23 -
 .../roles/proxy_install/meta/main.yml         |  22 -
 .../roles/proxy_install/tasks/configure.yml   |  37 -
 .../roles/proxy_install/tasks/main.yml        |  17 -
 .../roles/proxy_install/templates/80proxy.j2  |   2 -
 .../roles/tftpboot_configure/README.md        |  28 -
 .../tftpboot_configure/defaults/main.yml      |  49 --
 .../roles/tftpboot_configure/files/memdisk    | Bin 26140 -> 0 bytes
 .../roles/tftpboot_configure/files/menu.c32   | Bin 54964 -> 0 bytes
 .../roles/tftpboot_configure/files/pxelinux.0 | Bin 16794 -> 0 bytes
 .../roles/tftpboot_configure/meta/main.yml    |  22 -
 .../tftpboot_configure/tasks/configure.yml    | 118 ----
 .../roles/tftpboot_configure/tasks/main.yml   |  17 -
 .../templates/default_pxelinux.j2             |  19 -
 .../tftpboot_configure/templates/pxelinux.j2  |   8 -
 ...ntu-server-16.04-unattended-cinder.seed.j2 | 282 --------
 ...ntu-server-16.04-unattended-deploy.seed.j2 | 276 --------
 ...untu-server-16.04-unattended-infra.seed.j2 | 276 --------
 ...tu-server-16.04-unattended-logging.seed.j2 | 276 --------
 ...tu-server-16.04-unattended-network.seed.j2 | 276 --------
 ...untu-server-16.04-unattended-swift.seed.j2 | 300 ---------
 multi-node-aio-xenial-ansible/setup-host.sh   | 136 ----
 .../setup-pxeboot.sh                          |  39 --
 .../setup-virsh-net.sh                        |  37 -
 .../templates/kvm-bonded-bridges.cfg          |  69 --
 .../templates/libvirt-network.xml             |   5 -
 .../vm.openstackci.local-bonded-bridges.cfg   |  76 ---
 .../templates/openstack_user_config.yml       |  75 ---
 .../templates/osa-swift.yml                   |  16 -
 .../cinder.openstackci.local.xml              | 131 ----
 .../deploy.openstackci.local.xml              | 131 ----
 .../vmnode-config/infra.openstackci.local.xml | 131 ----
 .../logging.openstackci.local.xml             | 131 ----
 .../network.openstackci.local.xml             | 131 ----
 .../nova_compute.openstackci.local.xml        | 131 ----
 .../vmnode-config/swift.openstackci.local.xml | 131 ----
 .../templates/xenial-sources.list             |  20 -
 multi-node-aio-xenial-ansible/variables.sh    |  74 --
 multi-node-aio/LICENSE.txt                    | 229 -------
 multi-node-aio/README.rst                     | 118 ++--
 multi-node-aio/ansible-env.rc                 |  19 +
 multi-node-aio/bootstrap.sh                   |  86 +++
 multi-node-aio/build.sh                       |  40 +-
 multi-node-aio/config-deploy-node.sh          |  31 -
 multi-node-aio/deploy-osa.sh                  | 150 -----
 multi-node-aio/deploy-vms.sh                  | 105 ---
 multi-node-aio/functions.rc                   | 257 -------
 multi-node-aio/hosts.json                     |  26 -
 multi-node-aio/openstack-service-setup.sh     | 175 -----
 multi-node-aio/playbooks/deploy-dhcp.yml      |  71 ++
 multi-node-aio/playbooks/deploy-osa.yml       | 227 +++++++
 multi-node-aio/playbooks/deploy-pxe.yml       | 296 ++++++++
 multi-node-aio/playbooks/deploy-vms.yml       |  66 ++
 .../playbooks/dhcp}/dhcpd.conf.j2             |  17 +-
 multi-node-aio/playbooks/dhcp/isc-dhcp-server |   1 +
 multi-node-aio/playbooks/inventory            |  51 ++
 multi-node-aio/playbooks/kvm/kvm-vm.xml       |  99 +++
 .../kvm/libvirt-network-template.xml          |   5 +
 .../playbooks/osa/openstack_user_config.yml   | 206 ++++++
 .../playbooks/osa/user_mnaio_variables.yml    |  30 +
 .../playbooks/pxe/debian/basic-interface.cfg  |   7 +
 .../playbooks/pxe/debian/mnaio-bridges.cfg.j2 |  19 +
 .../debian/mnaio-post-install-script.sh.j2    |  15 +
 .../playbooks/pxe/debian/mnaio.preseed.j2     | 256 +++++++
 .../playbooks/pxe/debian/vm-bridges.cfg.j2    |  18 +
 .../pxe/debian/vm-post-install-script.sh.j2   |  35 +
 .../playbooks/pxe/debian/vm.preseed.j2        | 202 ++----
 .../playbooks/pxe/sites-enabled.default       |   8 +
 multi-node-aio/playbooks/pxe/tftp/inetd.conf  |   1 +
 multi-node-aio/playbooks/pxe/tftp/menu.cfg.j2 |  24 +
 .../playbooks/pxe/tftp/pxelinux.cfg.default   |   5 +
 .../pxe/tftp/pxelinux.cfg.macaddr.j2          |   9 +
 multi-node-aio/playbooks/pxe/tftp/tftp-hpa    |   6 +
 multi-node-aio/playbooks/setup-host.yml       | 213 ++++++
 multi-node-aio/playbooks/site.yml             |  34 +
 multi-node-aio/playbooks/vars/main.yml        | 632 ++++++++++++++++++
 multi-node-aio/playbooks/vars/ubuntu.yml      |  43 ++
 multi-node-aio/run_tests.sh                   |  62 ++
 multi-node-aio/setup-cobbler.sh               | 185 -----
 multi-node-aio/setup-host.sh                  | 140 ----
 multi-node-aio/setup-virsh-net.sh             |  37 -
 multi-node-aio/templates/dhcp.template        |  85 ---
 .../templates/kvm-bonded-bridges.cfg          |  69 --
 multi-node-aio/templates/libvirt-network.xml  |   5 -
 .../vm.openstackci.local-bonded-bridges.cfg   |  76 ---
 .../templates/openstack_user_config.yml       |  75 ---
 multi-node-aio/templates/osa-swift.yml        |  16 -
 ...erver-14.04-unattended-cobbler-cinder.seed | 296 --------
 ...erver-14.04-unattended-cobbler-deploy.seed | 296 --------
 ...server-14.04-unattended-cobbler-infra.seed | 290 --------
 ...rver-14.04-unattended-cobbler-logging.seed | 291 --------
 ...rver-14.04-unattended-cobbler-network.seed | 290 --------
 ...14.04-unattended-cobbler-nova_compute.seed | 298 ---------
 ...server-14.04-unattended-cobbler-swift.seed | 315 ---------
 ...erver-16.04-unattended-cobbler-cinder.seed | 293 --------
 ...erver-16.04-unattended-cobbler-deploy.seed | 293 --------
 ...server-16.04-unattended-cobbler-infra.seed | 287 --------
 ...rver-16.04-unattended-cobbler-logging.seed | 288 --------
 ...rver-16.04-unattended-cobbler-network.seed | 287 --------
 ...16.04-unattended-cobbler-nova_compute.seed | 295 --------
 ...server-16.04-unattended-cobbler-swift.seed | 312 ---------
 multi-node-aio/templates/trusty-sources.list  |  20 -
 .../cinder.openstackci.local.xml              | 131 ----
 .../deploy.openstackci.local.xml              | 131 ----
 .../vmnode-config/infra.openstackci.local.xml | 131 ----
 .../logging.openstackci.local.xml             | 131 ----
 .../network.openstackci.local.xml             | 131 ----
 .../nova_compute.openstackci.local.xml        | 131 ----
 .../vmnode-config/swift.openstackci.local.xml | 131 ----
 multi-node-aio/templates/xenial-sources.list  |  20 -
 multi-node-aio/tools/downgrade-all-VMs.sh     |  15 -
 .../tools/ubuntu-kernel-downgrade.sh          |  16 -
 multi-node-aio/variables.sh                   |  50 --
 150 files changed, 2689 insertions(+), 12343 deletions(-)
 create mode 120000 multi-node-aio-xenial-ansible
 delete mode 100644 multi-node-aio-xenial-ansible/LICENSE.txt
 delete mode 100644 multi-node-aio-xenial-ansible/README.rst
 delete mode 100755 multi-node-aio-xenial-ansible/build.sh
 delete mode 100755 multi-node-aio-xenial-ansible/config-deploy-node.sh
 delete mode 100644 multi-node-aio-xenial-ansible/create_pxeboot_server.yml
 delete mode 100755 multi-node-aio-xenial-ansible/deploy-osa.sh
 delete mode 100755 multi-node-aio-xenial-ansible/functions.rc
 delete mode 100644 multi-node-aio-xenial-ansible/hosts.json
 delete mode 100644 multi-node-aio-xenial-ansible/inventory
 delete mode 100755 multi-node-aio-xenial-ansible/no-cobbler-configure-vms.sh
 delete mode 100755 multi-node-aio-xenial-ansible/no-cobbler-create-vms.sh
 delete mode 100644 multi-node-aio-xenial-ansible/openstack-service-setup.sh
 delete mode 100644 multi-node-aio-xenial-ansible/roles/apache_install/README.md
 delete mode 100644 multi-node-aio-xenial-ansible/roles/apache_install/defaults/main.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/apache_install/handlers/main.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/apache_install/meta/main.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/apache_install/tasks/configure.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/apache_install/tasks/install.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/apache_install/tasks/main.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/apache_install/templates/sites-allowed.j2
 delete mode 100644 multi-node-aio-xenial-ansible/roles/atftpd_install/README.md
 delete mode 100644 multi-node-aio-xenial-ansible/roles/atftpd_install/defaults/main.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/atftpd_install/handlers/main.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/atftpd_install/meta/main.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/atftpd_install/tasks/configure.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/atftpd_install/tasks/install.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/atftpd_install/tasks/main.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/atftpd_install/templates/atftpd.j2
 delete mode 100644 multi-node-aio-xenial-ansible/roles/dhcpd_install/README.md
 delete mode 100644 multi-node-aio-xenial-ansible/roles/dhcpd_install/defaults/main.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/dhcpd_install/handlers/main.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/dhcpd_install/meta/main.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/dhcpd_install/tasks/configure.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/dhcpd_install/tasks/install.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/dhcpd_install/tasks/main.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/proxy_install/README.md
 delete mode 100644 multi-node-aio-xenial-ansible/roles/proxy_install/defaults/main.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/proxy_install/meta/main.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/proxy_install/tasks/configure.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/proxy_install/tasks/main.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/proxy_install/templates/80proxy.j2
 delete mode 100644 multi-node-aio-xenial-ansible/roles/tftpboot_configure/README.md
 delete mode 100644 multi-node-aio-xenial-ansible/roles/tftpboot_configure/defaults/main.yml
 delete mode 100755 multi-node-aio-xenial-ansible/roles/tftpboot_configure/files/memdisk
 delete mode 100755 multi-node-aio-xenial-ansible/roles/tftpboot_configure/files/menu.c32
 delete mode 100755 multi-node-aio-xenial-ansible/roles/tftpboot_configure/files/pxelinux.0
 delete mode 100644 multi-node-aio-xenial-ansible/roles/tftpboot_configure/meta/main.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/tftpboot_configure/tasks/configure.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/tftpboot_configure/tasks/main.yml
 delete mode 100644 multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/default_pxelinux.j2
 delete mode 100644 multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/pxelinux.j2
 delete mode 100644 multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-cinder.seed.j2
 delete mode 100644 multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-deploy.seed.j2
 delete mode 100644 multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-infra.seed.j2
 delete mode 100644 multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-logging.seed.j2
 delete mode 100644 multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-network.seed.j2
 delete mode 100644 multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-swift.seed.j2
 delete mode 100755 multi-node-aio-xenial-ansible/setup-host.sh
 delete mode 100755 multi-node-aio-xenial-ansible/setup-pxeboot.sh
 delete mode 100755 multi-node-aio-xenial-ansible/setup-virsh-net.sh
 delete mode 100644 multi-node-aio-xenial-ansible/templates/kvm-bonded-bridges.cfg
 delete mode 100644 multi-node-aio-xenial-ansible/templates/libvirt-network.xml
 delete mode 100644 multi-node-aio-xenial-ansible/templates/network-interfaces/vm.openstackci.local-bonded-bridges.cfg
 delete mode 100644 multi-node-aio-xenial-ansible/templates/openstack_user_config.yml
 delete mode 100644 multi-node-aio-xenial-ansible/templates/osa-swift.yml
 delete mode 100644 multi-node-aio-xenial-ansible/templates/vmnode-config/cinder.openstackci.local.xml
 delete mode 100644 multi-node-aio-xenial-ansible/templates/vmnode-config/deploy.openstackci.local.xml
 delete mode 100644 multi-node-aio-xenial-ansible/templates/vmnode-config/infra.openstackci.local.xml
 delete mode 100644 multi-node-aio-xenial-ansible/templates/vmnode-config/logging.openstackci.local.xml
 delete mode 100644 multi-node-aio-xenial-ansible/templates/vmnode-config/network.openstackci.local.xml
 delete mode 100644 multi-node-aio-xenial-ansible/templates/vmnode-config/nova_compute.openstackci.local.xml
 delete mode 100644 multi-node-aio-xenial-ansible/templates/vmnode-config/swift.openstackci.local.xml
 delete mode 100644 multi-node-aio-xenial-ansible/templates/xenial-sources.list
 delete mode 100755 multi-node-aio-xenial-ansible/variables.sh
 delete mode 100644 multi-node-aio/LICENSE.txt
 create mode 100644 multi-node-aio/ansible-env.rc
 create mode 100755 multi-node-aio/bootstrap.sh
 delete mode 100755 multi-node-aio/config-deploy-node.sh
 delete mode 100755 multi-node-aio/deploy-osa.sh
 delete mode 100755 multi-node-aio/deploy-vms.sh
 delete mode 100755 multi-node-aio/functions.rc
 delete mode 100644 multi-node-aio/hosts.json
 delete mode 100644 multi-node-aio/openstack-service-setup.sh
 create mode 100644 multi-node-aio/playbooks/deploy-dhcp.yml
 create mode 100644 multi-node-aio/playbooks/deploy-osa.yml
 create mode 100644 multi-node-aio/playbooks/deploy-pxe.yml
 create mode 100644 multi-node-aio/playbooks/deploy-vms.yml
 rename {multi-node-aio-xenial-ansible/roles/dhcpd_install/templates => multi-node-aio/playbooks/dhcp}/dhcpd.conf.j2 (81%)
 create mode 100644 multi-node-aio/playbooks/dhcp/isc-dhcp-server
 create mode 100644 multi-node-aio/playbooks/inventory
 create mode 100644 multi-node-aio/playbooks/kvm/kvm-vm.xml
 create mode 100644 multi-node-aio/playbooks/kvm/libvirt-network-template.xml
 create mode 100644 multi-node-aio/playbooks/osa/openstack_user_config.yml
 create mode 100644 multi-node-aio/playbooks/osa/user_mnaio_variables.yml
 create mode 100644 multi-node-aio/playbooks/pxe/debian/basic-interface.cfg
 create mode 100644 multi-node-aio/playbooks/pxe/debian/mnaio-bridges.cfg.j2
 create mode 100644 multi-node-aio/playbooks/pxe/debian/mnaio-post-install-script.sh.j2
 create mode 100644 multi-node-aio/playbooks/pxe/debian/mnaio.preseed.j2
 create mode 100644 multi-node-aio/playbooks/pxe/debian/vm-bridges.cfg.j2
 create mode 100644 multi-node-aio/playbooks/pxe/debian/vm-post-install-script.sh.j2
 rename multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-nova_compute.seed.j2 => multi-node-aio/playbooks/pxe/debian/vm.preseed.j2 (59%)
 create mode 100644 multi-node-aio/playbooks/pxe/sites-enabled.default
 create mode 100644 multi-node-aio/playbooks/pxe/tftp/inetd.conf
 create mode 100644 multi-node-aio/playbooks/pxe/tftp/menu.cfg.j2
 create mode 100644 multi-node-aio/playbooks/pxe/tftp/pxelinux.cfg.default
 create mode 100644 multi-node-aio/playbooks/pxe/tftp/pxelinux.cfg.macaddr.j2
 create mode 100644 multi-node-aio/playbooks/pxe/tftp/tftp-hpa
 create mode 100644 multi-node-aio/playbooks/setup-host.yml
 create mode 100644 multi-node-aio/playbooks/site.yml
 create mode 100644 multi-node-aio/playbooks/vars/main.yml
 create mode 100644 multi-node-aio/playbooks/vars/ubuntu.yml
 create mode 100755 multi-node-aio/run_tests.sh
 delete mode 100755 multi-node-aio/setup-cobbler.sh
 delete mode 100755 multi-node-aio/setup-host.sh
 delete mode 100755 multi-node-aio/setup-virsh-net.sh
 delete mode 100644 multi-node-aio/templates/dhcp.template
 delete mode 100644 multi-node-aio/templates/kvm-bonded-bridges.cfg
 delete mode 100644 multi-node-aio/templates/libvirt-network.xml
 delete mode 100644 multi-node-aio/templates/network-interfaces/vm.openstackci.local-bonded-bridges.cfg
 delete mode 100644 multi-node-aio/templates/openstack_user_config.yml
 delete mode 100644 multi-node-aio/templates/osa-swift.yml
 delete mode 100644 multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-cinder.seed
 delete mode 100644 multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-deploy.seed
 delete mode 100644 multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-infra.seed
 delete mode 100644 multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-logging.seed
 delete mode 100644 multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-network.seed
 delete mode 100644 multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-nova_compute.seed
 delete mode 100644 multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-swift.seed
 delete mode 100644 multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-cinder.seed
 delete mode 100644 multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-deploy.seed
 delete mode 100644 multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-infra.seed
 delete mode 100644 multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-logging.seed
 delete mode 100644 multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-network.seed
 delete mode 100644 multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-nova_compute.seed
 delete mode 100644 multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-swift.seed
 delete mode 100644 multi-node-aio/templates/trusty-sources.list
 delete mode 100644 multi-node-aio/templates/vmnode-config/cinder.openstackci.local.xml
 delete mode 100644 multi-node-aio/templates/vmnode-config/deploy.openstackci.local.xml
 delete mode 100644 multi-node-aio/templates/vmnode-config/infra.openstackci.local.xml
 delete mode 100644 multi-node-aio/templates/vmnode-config/logging.openstackci.local.xml
 delete mode 100644 multi-node-aio/templates/vmnode-config/network.openstackci.local.xml
 delete mode 100644 multi-node-aio/templates/vmnode-config/nova_compute.openstackci.local.xml
 delete mode 100644 multi-node-aio/templates/vmnode-config/swift.openstackci.local.xml
 delete mode 100644 multi-node-aio/templates/xenial-sources.list
 delete mode 100644 multi-node-aio/tools/downgrade-all-VMs.sh
 delete mode 100755 multi-node-aio/tools/ubuntu-kernel-downgrade.sh
 delete mode 100755 multi-node-aio/variables.sh

diff --git a/multi-node-aio-xenial-ansible b/multi-node-aio-xenial-ansible
new file mode 120000
index 00000000..fd2dd80c
--- /dev/null
+++ b/multi-node-aio-xenial-ansible
@@ -0,0 +1 @@
+multi-node-aio
\ No newline at end of file
diff --git a/multi-node-aio-xenial-ansible/LICENSE.txt b/multi-node-aio-xenial-ansible/LICENSE.txt
deleted file mode 100644
index 8863b74f..00000000
--- a/multi-node-aio-xenial-ansible/LICENSE.txt
+++ /dev/null
@@ -1,229 +0,0 @@
-Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "{}"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright {yyyy} {name of copyright owner}
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
--------------------------------------------------------------------------------
-
-The MIT License (MIT)
-
-Copyright (c) [year] [fullname]
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-Files in this project licensed under the MIT license:
-
-  - playbooks/plugins/callbacks/profile_tasks.py
diff --git a/multi-node-aio-xenial-ansible/README.rst b/multi-node-aio-xenial-ansible/README.rst
deleted file mode 100644
index 9f52d636..00000000
--- a/multi-node-aio-xenial-ansible/README.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-OpenStack-Ansible Multi-Node AIO Xenial Ansible
-################################################
-:date: 2016-02-23
-:tags: rackspace, openstack, ansible
-:category: \*openstack, \*nix
-
-
-About this repository
----------------------
-
-This is a re-engineered version of the Multi-Node AIO Cobbler has been removed
-and replaced with Ansible to do the deploy of the KVM virtual machines. With time the intent here is to
-replace the bash which deploys this all with Ansible.
-
-Trusty will not be supported.
diff --git a/multi-node-aio-xenial-ansible/build.sh b/multi-node-aio-xenial-ansible/build.sh
deleted file mode 100755
index 8fbaf926..00000000
--- a/multi-node-aio-xenial-ansible/build.sh
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/env bash
-set -eu
-# Copyright [2016] [Kevin Carter]
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Load all functions
-source functions.rc
-
-# bring in variable definitions if there is a variables.sh file
-[[ -f variables.sh ]] && source variables.sh
-
-# Provide defaults for unset variables
-# Set first two octets of network used for containers, storage, etc
-NETWORK_BASE=${NETWORK_BASE:-10.29}
-
-# Instruct the system do all of the require host setup
-SETUP_HOST=${SETUP_HOST:-true}
-[[ "${SETUP_HOST}" = true ]] && source setup-host.sh
-
-SETUP_PXEBOOT=${SETUP_PXEBOOT:-true}
-[[ "${SETUP_PXEBOOT}" = true ]] && source setup-pxeboot.sh
-
-# Instruct the system do all of the virsh setup
-SETUP_VIRSH_NET=${SETUP_VIRSH_NET:-true}
-[[ "${SETUP_VIRSH_NET}" = true ]] && source setup-virsh-net.sh
-
-# Instruct the system to create and boot all of the VMs
-CREATE_VMS=${CREATE_VMS:-true}
-[[ "${CREATE_VMS}" = true ]] && source no-cobbler-create-vms.sh
-
-# Instruct the system to configure all of the VMs
-CONFIGURE_VMS=${CONFIGURE_VMS:-true}
-[[ "${CONFIGURE_VMS}" = true ]] && source no-cobbler-configure-vms.sh
-
-# Instruct the system to deploy OpenStack Ansible
-DEPLOY_OSA=${DEPLOY_OSA:-true}
-[[ "${DEPLOY_OSA}" = true ]] && source config-deploy-node.sh
-
diff --git a/multi-node-aio-xenial-ansible/config-deploy-node.sh b/multi-node-aio-xenial-ansible/config-deploy-node.sh
deleted file mode 100755
index 219bf0c5..00000000
--- a/multi-node-aio-xenial-ansible/config-deploy-node.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env bash
-
-# Load all functions
-source functions.rc
-
-# bring in variable definitions if there is a variables.sh file
-[[ -f variables.sh ]] && source variables.sh
-
-if [[ "${DEPLOY_OSA}" = true ]]; then
-  # Copy private key and public key to deploy node
-  scp -r -o StrictHostKeyChecking=no  ~/.ssh deploy1:/root/
-
-  # Copy multi-node-aio folder to deploy node
-  scp -r -o StrictHostKeyChecking=no  ../multi-node-aio deploy1:/root
-
-  # Deploy openstack-ansible from deploy node and export all variables deploy-osa.sh needs
-  ssh -o StrictHostKeyChecking=no deploy1 "export NETWORK_BASE=${NETWORK_BASE} RUN_OSA=${RUN_OSA} " \
-  "OSA_BRANCH=${OSA_BRANCH} PRE_CONFIG_OSA=${PRE_CONFIG_OSA}; apt update; cd /root/multi-node-aio/; ./deploy-osa.sh"
-fi
-
-if [[ "${CONFIG_PREROUTING}" = true ]]; then
-  EXTERNAL_IP="$(ip route get 1 | awk '{print $NF;exit}')"
-  # Add 2222 rules to iptables for ssh directly into deployment node.
-  iptables_filter_rule_add nat "PREROUTING -p tcp -d ${EXTERNAL_IP} --dport 2222 -j DNAT --to 10.0.0.150:22"
-
-  scp -o StrictHostKeyChecking=no deploy1:/opt/openstack-ansible/playbooks/vars/configs/haproxy_config.yml .
-  PORTS="$(get_osad_ports) $OSA_PORTS"
-  for port in $PORTS ; do
-    iptables_filter_rule_add nat "PREROUTING -p tcp -d ${EXTERNAL_IP} --dport ${port} -j DNAT --to 10.0.0.150:${port}"
-  done
-fi
\ No newline at end of file
diff --git a/multi-node-aio-xenial-ansible/create_pxeboot_server.yml b/multi-node-aio-xenial-ansible/create_pxeboot_server.yml
deleted file mode 100644
index 4ac0a484..00000000
--- a/multi-node-aio-xenial-ansible/create_pxeboot_server.yml
+++ /dev/null
@@ -1,139 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# create_pxeboot_server.yml
-#
-# This playbook contains all the data to deploy a PXE server with TFTP/ Apache and the preseed
-# environment for Ubuntu Xenial. This is to replace Cobbler.
-
-- hosts: all
-  become: yes
-  become_method: sudo
-
-  vars:
-    proxy: "{{ lookup('env','http_proxy') }}"
-
-    # - List of DHCP Subnets
-    dhcp_list:
-      - netmask: 255.255.255.0
-        gateway: 10.0.0.200
-        dns: "{{ ansible_dns.nameservers.0 }}"
-        subnet: 10.0.0.0                              # Subnet mask
-        default_lease_time: 21600                     # Subnet Default lease time - The default is used if this is not defined
-        max_lease_time: 43200                         # Subnet Max lease time - The default is used if this is not defined
-        tftp_boot_path: /pxelinux.0                   # Path for tftp of where to boot from first - The default is used if this is not defined
-        tftp_server: 10.0.0.200                       # The server hosting the TFTP server - The default is used if this is not defined
-        dhcp_default_domain_name: openstackci.local   # The domain-name option - the above global default is used if this is not defined
-
-    # - tftpboot_configure
-    tftp_mirror: 10.0.0.200
-    tftp_proxy: "{{ proxy }}"
-
-    webserver_ip_address: 10.0.0.200
-    ntp_server: "{{ lookup('pipe','grep -m 1 pool /etc/ntp.conf').split(' ').1 }}" # Check in NTP directory, look for the first pool match and use as our NTP server
-    atftpd_path: /srv/tftp
-    tftp_source: /srv/tftp/pxelinux.cfg
-    atftp_user: atftp
-    atftp_group: atftp
-    distro_name: ubuntu-16.04.2-server-amd64.iso
-    distro_url : "http://releases.ubuntu.com/16.04/{{ distro_name }}"
-
-    # These below variables rely on apache being set up and is where the preseed is set up
-    apache_url: files
-    apache_path: /var/www/html
-
-    tftp_directories:
-      - pxe
-      - ubuntu
-
-    # - List of static DHCP hosts - These are iterated though and each will be created
-    #   last byte of hwaddr matches last two digits of ip address
-    server_list:
-      - name: cinder1
-        hwaddr: "52:54:00:bd:81:30"
-        ip: "10.0.0.130"
-        distro: xenial
-        preseed_file: ubuntu-server-16.04-unattended-cinder.seed
-
-      - name: cinder2
-        hwaddr: "52:54:00:bd:81:31"
-        ip: "10.0.0.131"
-        distro: xenial
-        preseed_file: ubuntu-server-16.04-unattended-cinder.seed
-
-      - name: infra1
-        hwaddr: "52:54:00:bd:81:00"
-        ip: "10.0.0.100"
-        distro: xenial
-        preseed_file: ubuntu-server-16.04-unattended-infra.seed
-
-      - name: infra2
-        hwaddr: "52:54:00:bd:81:01"
-        ip: "10.0.0.101"
-        distro: xenial
-        preseed_file: ubuntu-server-16.04-unattended-infra.seed
-
-      - name: infra3
-        hwaddr: "52:54:00:bd:81:02"
-        ip: "10.0.0.102"
-        distro: xenial
-        preseed_file: ubuntu-server-16.04-unattended-infra.seed
-
-      - name: logging1
-        hwaddr: "52:54:00:bd:81:10"
-        ip: "10.0.0.110"
-        distro: xenial
-        preseed_file: ubuntu-server-16.04-unattended-logging.seed
-
-      - name: compute1
-        hwaddr: "52:54:00:bd:81:20"
-        ip: "10.0.0.120"
-        distro: xenial
-        preseed_file: ubuntu-server-16.04-unattended-nova_compute.seed
-
-      - name: compute2
-        hwaddr: "52:54:00:bd:81:21"
-        ip: "10.0.0.121"
-        distro: xenial
-        preseed_file: ubuntu-server-16.04-unattended-nova_compute.seed
-
-      - name: swift1
-        hwaddr: "52:54:00:bd:81:40"
-        ip: "10.0.0.140"
-        distro: xenial
-        preseed_file: ubuntu-server-16.04-unattended-swift.seed
-
-      - name: swift2
-        hwaddr: "52:54:00:bd:81:41"
-        ip: "10.0.0.141"
-        distro: xenial
-        preseed_file: ubuntu-server-16.04-unattended-swift.seed
-
-      - name: swift3
-        hwaddr: "52:54:00:bd:81:42"
-        ip: "10.0.0.142"
-        distro: xenial
-        preseed_file: ubuntu-server-16.04-unattended-swift.seed
-
-      - name: deploy1
-        hwaddr: "52:54:00:bd:81:50"
-        ip: "10.0.0.150"
-        distro: xenial
-        preseed_file: ubuntu-server-16.04-unattended-deploy.seed
-
-  roles:
-    - { role: proxy_install, when: proxy|length > 0 }
-    - { role: dhcpd_install }
-    - { role: atftpd_install }
-    - { role: apache_install }
-    - { role: tftpboot_configure }
\ No newline at end of file
diff --git a/multi-node-aio-xenial-ansible/deploy-osa.sh b/multi-node-aio-xenial-ansible/deploy-osa.sh
deleted file mode 100755
index 9895efc8..00000000
--- a/multi-node-aio-xenial-ansible/deploy-osa.sh
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/usr/bin/env bash
-# Copyright [2016] [Kevin Carter]
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-MAX_RETRIES=${MAX_RETRIES:-5}
-
-# Load all functions
-source functions.rc
-
-# bring in variable definitions if there is a variables.sh file
-[[ -f variables.sh ]] && source variables.sh
-
-# Provide defaults for unset variables
-# Set first two octets of network used for containers, storage, etc
-NETWORK_BASE=${NETWORK_BASE:-10.29}
-
-# Reset the ssh-agent service to remove potential key issues
-ssh_agent_reset
-
-# Install git and tmux for use within the OSA deploy
-apt-get install -y git tmux
-
-# Clone the OSA source code
-git clone https://git.openstack.org/openstack/openstack-ansible /opt/openstack-ansible || true
-
-# Ensure the "/etc/openstack_deploy" exists
-mkdir_check "/etc/openstack_deploy"
-
-pushd /opt/openstack-ansible/
-  # Fetch all current refs
-  git fetch --all
-
-  # Checkout the OpenStack-Ansible branch
-  git checkout "${OSA_BRANCH:-master}"
-
-  # Copy the etc files into place
-  cp -vR etc/openstack_deploy/* /etc/openstack_deploy/
-popd
-
-# Create a secondary static inventory for hosts
-ansible_static_inventory "/opt/ansible-static-inventory.ini"
-
-# Create the OpenStack User Config
-HOSTIP="$(ip route get 1 | awk '{print $NF;exit}')"
-sed -e "s/__HOSTIP__/${HOSTIP}/g" -e "s/__NETWORK_BASE__/${NETWORK_BASE}/g" templates/openstack_user_config.yml > /etc/openstack_deploy/openstack_user_config.yml
-
-# Create the swift config: function group_name host_type
-cp -v templates/osa-swift.yml /etc/openstack_deploy/conf.d/swift.yml
-
-
-### =========== WRITE OF conf.d FILES =========== ###
-# Setup cinder hosts: function group_name host_type
-write_osa_general_confd storage-infra_hosts cinder
-write_osa_cinder_confd storage_hosts cinder
-
-# Setup nova hosts: function group_name host_type
-write_osa_general_confd compute_hosts nova_compute
-
-# Setup infra hosts: function group_name host_type
-write_osa_general_confd identity_hosts infra
-write_osa_general_confd repo-infra_hosts infra
-write_osa_general_confd os-infra_hosts infra
-write_osa_general_confd shared-infra_hosts infra
-
-# Setup logging hosts: function group_name host_type
-write_osa_general_confd log_hosts logging
-
-# Setup network hosts: function group_name host_type
-write_osa_general_confd network_hosts infra
-
-# Setup swift hosts: function group_name host_type
-write_osa_swift_proxy_confd swift-proxy_hosts swift
-write_osa_swift_storage_confd swift_hosts swift
-### =========== END WRITE OF conf.d FILES =========== ###
-
-# Enable pre-config the OSA enviroment for deploying OSA.
-PRE_CONFIG_OSA=${PRE_CONFIG_OSA:-true}
-if [[ "${PRE_CONFIG_OSA}" = true ]]; then
-  pushd /opt/openstack-ansible/
-    # Bootstrap ansible into the environment
-    bash ./scripts/bootstrap-ansible.sh
-
-    # Generate the passwords for the environment
-    python ./scripts/pw-token-gen.py --file /etc/openstack_deploy/user_secrets.yml
-
-    # This is happening so the VMs running the infra use less storage
-    osa_user_var_add lxc_container_backing_store 'lxc_container_backing_store: dir'
-
-    # Tempest is being configured to use a known network
-    osa_user_var_add tempest_public_subnet_cidr 'tempest_public_subnet_cidr: '${NETWORK_BASE}'.248.0/26'
-
-    # This makes running neutron in a distributed system easier and a lot less noisy
-    osa_user_var_add neutron_l2_population 'neutron_l2_population: True'
-
-    # This makes the glance image store use swift instead of the file backend
-    osa_user_var_add glance_default_store 'glance_default_store: swift'
-
-    # Propagate host proxy settings (if set) into /etc/environment in the targets
-    if [ ! -z ${http_proxy+x} ]; then
-      osa_user_var_add proxy_env_url 'proxy_env_url: '${http_proxy}
-      osa_user_var_add no_proxy_env 'no_proxy_env: "localhost,127.0.0.1,{{ internal_lb_vip_address }},{{ external_lb_vip_address }},{% for host in groups['\''all_containers'\''] %}{{ hostvars[host]['\''container_address'\''] }}{% if not loop.last %},{% endif %}{% endfor %}"'
-      osa_user_var_add global_environment_variables 'global_environment_variables:'
-      osa_user_var_add '  HTTP_PROXY:' '  HTTP_PROXY: "{{ proxy_env_url }}"'
-      osa_user_var_add '  HTTPS_PROXY:' '  HTTPS_PROXY: "{{ proxy_env_url }}"'
-      osa_user_var_add '  NO_PROXY:' '  NO_PROXY: "{{ no_proxy_env }}"'
-      osa_user_var_add '  http_proxy:' '  http_proxy: "{{ proxy_env_url }}"'
-      osa_user_var_add '  https_proxy:' '  https_proxy: "{{ proxy_env_url }}"'
-      osa_user_var_add '  no_proxy:' '  no_proxy: "{{ no_proxy_env }}"'
-      # Propagate proxy setting to glance api conf. Note the unusual format - instead of the typical
-      #   http_proxy=http://proxy.example.com ; https_proxy=http://proxy.example.com
-      # it uses
-      #   http:proxy.example.com, https:proxy.example.com
-      #
-      osa_user_var_add glance_glance_api_conf_overrides 'glance_glance_api_conf_overrides:'
-      osa_user_var_add '  glance_store' '  glance_store:'
-      osa_user_var_add '    http_proxy_information' "    http_proxy_information: \"http:${http_proxy#http://}, https:${http_proxy#http://}\""
-    fi
-  popd
-fi
-
-# Enable deploy OSA of the "${RUN_OSA}"
-RUN_OSA=${RUN_OSA:-true}
-if [[ "${RUN_OSA}" = true ]]; then
-  # Set the number of forks for the ansible client calls
-  export ANSIBLE_FORKS=${ANSIBLE_FORKS:-15}
-
-  pushd /opt/openstack-ansible
-    export DEPLOY_AIO=true
-    bash ./scripts/run-playbooks.sh
-  popd
-
-  EXEC_DIR="$(pwd)"
-  pushd /opt/openstack-ansible/playbooks
-    if [[ -f "/usr/local/bin/openstack-ansible.rc" ]]; then
-      source /usr/local/bin/openstack-ansible.rc
-    fi
-    ansible -m script -a "${EXEC_DIR}/openstack-service-setup.sh ${NETWORK_BASE}" 'utility_all[0]'
-  popd
-fi
diff --git a/multi-node-aio-xenial-ansible/functions.rc b/multi-node-aio-xenial-ansible/functions.rc
deleted file mode 100755
index 45d8325a..00000000
--- a/multi-node-aio-xenial-ansible/functions.rc
+++ /dev/null
@@ -1,257 +0,0 @@
-#!/usr/bin/env bash
-# Copyright [2016] [Kevin Carter]
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-function mkdir_check {
-  if [ ! -d "$1" ];then
-    mkdir -p "$1"
-  fi
-}
-
-function ssh_agent_reset {
-  # If you were running ssh-agent with forwarding this will clear out the keys
-  #  in your cache which can cause confusion.
-  if pgrep ssh-agent; then
-    killall ssh-agent; eval `ssh-agent`
-  fi
-}
-
-function iptables_general_rule_add {
-if ! iptables -w -C $1;then
-  iptables -w -I $1
-fi
-}
-
-function iptables_filter_rule_add {
-if ! iptables -w -t $1 -C $2;then
-  iptables -w -t $1 -I $2
-fi
-}
-
-function get_host_type {
-python <<EOL
-import json
-with open('hosts.json') as f:
-    x = json.loads(f.read())
-for k, v in x.get("$1").items():
-    print('%s:%s' % (k, v))
-EOL
-}
-
-function get_all_hosts {
-python <<EOL
-import json
-with open('hosts.json') as f:
-    x = json.loads(f.read())
-for i in x.values():
-    for k, v in i.items():
-      print('%s:%s' % (k, v))
-EOL
-}
-
-function get_all_types {
-python <<EOL
-import json
-with open('hosts.json') as f:
-    x = json.loads(f.read())
-for i in x.keys():
-    print(i)
-EOL
-}
-
-function wait_ssh {
-echo "Waiting for all nodes to become available. This can take around ${1:-10} min"
-for node in $(get_all_hosts); do
-    echo "Waiting for node: ${node%%":"*} on 10.0.0.${node#*":"}"
-    until ssh -q -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=10 10.0.0.${node#*':'} exit > /dev/null; do
-      sleep 15
-    done
-done
-}
-
-function rekick_vms {
-# If you pass the short name of the host to the function it will only force rekick just the ONE host.
-# Set the VM disk size in gigabytes
-VM_DISK_SIZE="${VM_DISK_SIZE:-252}"
-for node in ${1:-$(get_all_hosts)}; do
-  for node_name in $(virsh list --all --name | grep "${node%%":"*}"); do
-    virsh destroy "${node_name}" || true
-  done
-  # Instruct the system to run the image create.
-  #  If you have the option ``VM_IMAGE_CREATE=true`` the system will reformat the disk image
-  #  destroying anything that was it image previously.
-  VM_IMAGE_CREATE=${VM_IMAGE_CREATE:-true}
-  if [[ "${VM_IMAGE_CREATE}" = true ]]; then
-    qemu-img create -f qcow2 \
-                    -o preallocation=metadata,compat=1.1,lazy_refcounts=on \
-                    /var/lib/libvirt/images/${node%%":"*}.openstackci.local.img \
-                    "${VM_DISK_SIZE}G"
-  fi
-  VM_NAME=$(virsh list --all --name | grep "${node%%":"*}" || echo "")
-  if [[ -z "${VM_NAME}" ]]; then
-    virsh define /etc/libvirt/qemu/${node%%":"*}.openstackci.local.xml || true
-    virsh create /etc/libvirt/qemu/${node%%":"*}.openstackci.local.xml || true
-  else
-    virsh start "${VM_NAME}"
-  fi
-done
-}
-
-function write_osa_general_confd {
-CONFD_FILE="/etc/openstack_deploy/conf.d/${1}.yml"
-echo "## DO NOT WRITE TO THIS FILE, CHANGES WILL BE LOST!" > ${CONFD_FILE}
-echo "---" >> ${CONFD_FILE}
-echo "$1:" >> ${CONFD_FILE}
-for node in $(get_host_type ${2}); do
-echo "  ${node%%':'*}:" >> ${CONFD_FILE}
-echo "    ip: ${NETWORK_BASE}.236.${node#*":"}" >> ${CONFD_FILE}
-done
-}
-
-function write_osa_cinder_confd {
-CONFD_FILE="/etc/openstack_deploy/conf.d/${1}.yml"
-echo "## DO NOT WRITE TO THIS FILE, CHANGES WILL BE LOST!" > ${CONFD_FILE}
-echo "---" >> ${CONFD_FILE}
-echo "$1:" >> ${CONFD_FILE}
-for node in $(get_host_type ${2}); do
-echo "  ${node%%':'*}:" >> ${CONFD_FILE}
-echo "    ip: ${NETWORK_BASE}.236.${node#*":"}" >> ${CONFD_FILE}
-cat >> ${CONFD_FILE} <<EOF
-    container_vars:
-      cinder_backends:
-        limit_container_types: cinder_volume
-        lvm:
-          volume_group: cinder-volumes
-          volume_driver: cinder.volume.drivers.lvm.LVMVolumeDriver
-          volume_backend_name: LVM_iSCSI
-          iscsi_ip_address: "${NETWORK_BASE}.236.${node#*":"}"
-EOF
-done
-}
-
-function write_osa_swift_proxy_confd {
-CONFD_FILE="/etc/openstack_deploy/conf.d/${1}.yml"
-echo "## DO NOT WRITE TO THIS FILE, CHANGES WILL BE LOST!" > ${CONFD_FILE}
-echo "---" >> ${CONFD_FILE}
-echo "$1:" >> ${CONFD_FILE}
-for node in $(get_host_type ${2}); do
-echo "  ${node%%':'*}:" >> ${CONFD_FILE}
-echo "    ip: ${NETWORK_BASE}.236.${node#*":"}" >> ${CONFD_FILE}
-cat >> ${CONFD_FILE} <<EOF
-    container_vars:
-      swift_proxy_vars:
-        limit_container_types: swift_proxy
-        read_affinity: "r1=100"
-        write_affinity: "r1"
-        write_affinity_node_count: "1 * replicas"
-EOF
-done
-}
-
-function write_osa_swift_storage_confd {
-CONFD_FILE="/etc/openstack_deploy/conf.d/${1}.yml"
-echo "## DO NOT WRITE TO THIS FILE, CHANGES WILL BE LOST!" > ${CONFD_FILE}
-echo "---" >> ${CONFD_FILE}
-echo "$1:" >> ${CONFD_FILE}
-for node in $(get_host_type ${2}); do
-echo "  ${node%%':'*}:" >> ${CONFD_FILE}
-echo "    ip: ${NETWORK_BASE}.236.${node#*":"}" >> ${CONFD_FILE}
-cat >> ${CONFD_FILE} <<EOF
-    container_vars:
-      swift_vars:
-        limit_container_types: swift
-        zone: 0
-        region: 1
-EOF
-done
-}
-
-function osa_user_var_add {
-  if ! grep -q "^$1" /etc/openstack_deploy/user_variables.yml; then
-    echo "$2" | tee -a /etc/openstack_deploy/user_variables.yml
-  else
-    sed -i "s|$1.*|$2|g" /etc/openstack_deploy/user_variables.yml
-  fi
-}
-
-function ansible_static_inventory {
-CONFD_FILE="$1"
-echo "## DO NOT WRITE TO THIS FILE, CHANGES WILL BE LOST!" > ${CONFD_FILE}
-for node_type in $(get_all_types); do
-  echo "[${node_type}]" >> ${CONFD_FILE}
-  for node in $(get_host_type ${node_type}); do
-    echo "10.0.0.${node#*":"}" >> ${CONFD_FILE}
-  done
-done
-}
-
-function install_bits {
-successerator openstack-ansible $@
-}
-
-function successerator {
-set +e
-# Get the time taht the method was started
-OP_START_TIME=$(date +%s)
-#Set the initial return value to failure.
-false
-for ((RETRY=0; $? != 0 && RETRY < MAX_RETRIES; RETRY++)); do
-  if [ ${RETRY} -gt 1 ]; then
-    $@ -vvvv
-  else
-    $@
-  fi
-done
-
-# If max retries were hit, fail.
-if [ $? -ne 0 && [ ${RETRY} -eq ${MAX_RETRIES} ];then
-  echo -e "\n Hit maximum number of retries, giving up..\n"
-  exit
-fi
-
-# Print the time that the method completed.
-OP_TOTAL_SECONDS="$(( $(date +%s) - OP_START_TIME ))"
-REPORT_OUTPUT="${OP_TOTAL_SECONDS} seconds"
-REPORT_DATA+="- Operation: [ $@ ]\t${REPORT_OUTPUT}\tNumber of Attempts [ ${RETRY} ]\n"
-echo -e "Run Time = ${REPORT_OUTPUT}"
-set -e
-}
-
-# Return 1 if the second argument is a substring of the first argument, otherwise return 0
-contains() {
-    string="$1"
-    substring="$2"
-    if test "${string#*$substring}" == "$string"
-    then
-        echo 0    # $substring is not in $string
-    else
-        echo 1    # $substring is in $string
-    fi
-}
-
-# Return all service ports
-function get_osad_ports {
-python <<EOL
-import yaml
-with open('haproxy_config.yml') as f:
-    x = yaml.safe_load(f.read())
-    haproxy_services = (x.get('haproxy_default_services')
-                        or x.get('haproxy_service_configs'))
-    for i in haproxy_services:
-        y = i['service'].get('haproxy_port')
-        if isinstance(y, int):
-            print y
-EOL
-}
-
diff --git a/multi-node-aio-xenial-ansible/hosts.json b/multi-node-aio-xenial-ansible/hosts.json
deleted file mode 100644
index 7d604a10..00000000
--- a/multi-node-aio-xenial-ansible/hosts.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-   "infra": {
-        "infra1": "100",
-        "infra2": "101",
-        "infra3": "102"
-   },
-   "logging": {
-       "logging1": "110"
-   },
-   "nova_compute": {
-       "compute1": "120",
-       "compute2": "121"
-   },
-   "cinder": {
-       "cinder1": "130",
-       "cinder2": "131"
-   },
-   "swift": {
-       "swift1": "140",
-       "swift2": "141",
-       "swift3": "142"
-   },
-   "deploy": {
-       "deploy1":"150"
-   }
-}
diff --git a/multi-node-aio-xenial-ansible/inventory b/multi-node-aio-xenial-ansible/inventory
deleted file mode 100644
index df8b5f69..00000000
--- a/multi-node-aio-xenial-ansible/inventory
+++ /dev/null
@@ -1,2 +0,0 @@
-[all]
-localhost ansible_connection=local
diff --git a/multi-node-aio-xenial-ansible/no-cobbler-configure-vms.sh b/multi-node-aio-xenial-ansible/no-cobbler-configure-vms.sh
deleted file mode 100755
index f73cc7ba..00000000
--- a/multi-node-aio-xenial-ansible/no-cobbler-configure-vms.sh
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/usr/bin/env bash
-set -eu
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Load all functions
-source functions.rc
-
-# bring in variable definitions if there is a variables.sh file
-[[ -f variables.sh ]] && source variables.sh
-
-# Reset the ssh-agent service to remove potential key issues
-ssh_agent_reset
-
-# Wait here for all nodes to be booted and ready with SSH
-wait_ssh
-
-# Export all system keys
-mkdir -p /tmp/keys
-for i in $(apt-key list | awk '/pub/ {print $2}' | awk -F'/' '{print $2}'); do
-  apt-key export "$i" > "/tmp/keys/$i"
-done
-
-# Ensure that all running VMs have an updated apt-cache with keys
-# and copy our http proxy settings into each VM (in the environment and apt.conf)
-for node in $(get_all_hosts); do
-  if [ ! -z ${http_proxy+x} ]; then
-    ssh -q -n -f -o StrictHostKeyChecking=no 10.0.0.${node#*":"} "mkdir -p /tmp/keys; \
-      echo \"http_proxy=$http_proxy\" >> /etc/environment; \
-      echo \"https_proxy=$https_proxy\" >> /etc/environment; \
-      echo \"no_proxy=localhost,127.0.0.1,10.0.0.200\" >> /etc/environment; \
-      echo \"Acquire::http::Proxy \\\"$http_proxy\\\";\" >> /etc/apt/apt.conf"
-  else
-    ssh -q -n -f -o StrictHostKeyChecking=no 10.0.0.${node#*":"} "mkdir -p /tmp/keys"
-  fi
-  for i in /etc/apt/apt.conf.d/00-nokey /etc/apt/sources.list /etc/apt/sources.list.d/* /tmp/keys/*; do
-    if [[ -f "$i" ]]; then
-      scp "$i" "10.0.0.${node#*":"}:$i"
-    fi
-  done
-  ssh -q -n -f -o StrictHostKeyChecking=no 10.0.0.${node#*":"} "(for i in /tmp/keys/*; do \
-      apt-key add \$i; \
-      apt-key adv --keyserver keyserver.ubuntu.com --recv-keys \$(basename \$i); done); \
-    apt-get clean; \
-    apt-get update"
-done
-
-# Add node hostname into /etc/hosts
-if ! grep -q "10.0.0.150" /etc/hosts; then
-  for node_type in $(get_all_types); do
-    for node in $(get_host_type ${node_type}); do
-      echo "10.0.0.${node#*":"} ${node%%':'*}" >> /etc/hosts
-    done
-  done
-fi
-
-# Add autocomplete ssh via /etc/hosts and ssh_config to all nodes
-for node in $(get_all_hosts); do
-  echo '
-_complete_hosts () {
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    host_list=`{
-        sed -n -e "s/^[0-9][0-9\.]*//p" /etc/hosts; }|tr " " "\n"|grep -v "*"`
-    COMPREPLY=( $(compgen -W "\${host_list}" -- $cur))
-    return 0
-}
-complete -F _complete_hosts host
-complete -F _complete_hosts ssh
-' | ssh -o StrictHostKeyChecking=no 10.0.0.${node#*":"} "cat >> /root/.bashrc"
-done
diff --git a/multi-node-aio-xenial-ansible/no-cobbler-create-vms.sh b/multi-node-aio-xenial-ansible/no-cobbler-create-vms.sh
deleted file mode 100755
index 02bd800e..00000000
--- a/multi-node-aio-xenial-ansible/no-cobbler-create-vms.sh
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env bash
-set -eu
-# Copyright [2016] [Kevin Carter]
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Load all functions
-source functions.rc
-
-# bring in variable definitions if there is a variables.sh file
-[[ -f variables.sh ]] && source variables.sh
-
-# Reset the ssh-agent service to remove potential key issues
-ssh_agent_reset
-# Set the default preseed device name.
-#  This is being set because sda is on hosts, vda is kvm, xvda is xen.
-DEVICE_NAME="${DEVICE_NAME:-vda}"
-
-# Set Ethernet type
-ETH_TYPE="${ETH_TYPE:-eth}"
-
-# Create VM Basic Configuration files
-for node_type in $(get_all_types); do
-  for node in $(get_host_type ${node_type}); do
-    cp -v "templates/vmnode-config/${node_type}.openstackci.local.xml" /etc/libvirt/qemu/${node%%":"*}.openstackci.local.xml
-    sed -i "s|__NODE__|${node%%":"*}|g" /etc/libvirt/qemu/${node%%":"*}.openstackci.local.xml
-    sed -i "s|__COUNT__|${node:(-2)}|g" /etc/libvirt/qemu/${node%%":"*}.openstackci.local.xml
-    sed -i "s|__DEVICE_NAME__|${DEVICE_NAME}|g" /etc/libvirt/qemu/${node%%":"*}.openstackci.local.xml
-    sed -i "s|__CONTAINER_VMS__|${CONTAINER_VMS}|g" /etc/libvirt/qemu/${node%%":"*}.openstackci.local.xml
-  done
-done
-# Populate network configurations based on node type
-for node_type in $(get_all_types); do
-  for node in $(get_host_type ${node_type}); do
-    sed -e "s/__COUNT__/${node#*":"}/g" -e "s/__DEFAULT_NETWORK__/${DEFAULT_NETWORK}/g" -e "s/__NETWORK_BASE__/${NETWORK_BASE}/g" -e "s/__ETH_TYPE__/${ETH_TYPE}/g" "templates/network-interfaces/vm.openstackci.local-bonded-bridges.cfg" > "/var/www/html/osa-${node%%":"*}-bridges.cfg"
-  done
-done
-# Kick all of the VMs to run the cloud
-#  !!!THIS TASK WILL DESTROY ALL OF THE ROOT DISKS IF THEY ALREADY EXIST!!!
-rekick_vms
diff --git a/multi-node-aio-xenial-ansible/openstack-service-setup.sh b/multi-node-aio-xenial-ansible/openstack-service-setup.sh
deleted file mode 100644
index ddecf854..00000000
--- a/multi-node-aio-xenial-ansible/openstack-service-setup.sh
+++ /dev/null
@@ -1,175 +0,0 @@
-#!/usr/bin/env bash
-
-# Load service variables
-source openrc
-
-# bring in variable definitions if there is a variables.sh file
-[[ -f variables.sh ]] && source variables.sh
-
-# Provide defaults for unset variables
-# Set first two octets of network used for containers, storage, etc
-NETWORK_BASE=${NETWORK_BASE:-10.29}
-
-# Create base flavors for the new deployment
-for flavor in micro tiny mini small medium large xlarge heavy; do
-  NAME="m1.${flavor}"
-  ID="${ID:-0}"
-  RAM="${RAM:-256}"
-  DISK="${DISK:-1}"
-  VCPU="${VCPU:-1}"
-  SWAP="${SWAP:-0}"
-  EPHEMERAL="${EPHEMERAL:-0}"
-  nova flavor-delete $ID > /dev/null || echo "No Flavor with ID: [ $ID ] found to clean up"
-  nova flavor-create $NAME $ID $RAM $DISK $VCPU --swap $SWAP --is-public true --ephemeral $EPHEMERAL --rxtx-factor 1
-  let ID=ID+1
-  let RAM=RAM*2
-  if [ "$ID" -gt 5 ];then
-    let VCPU=VCPU*2
-    let DISK=DISK*2
-    let EPHEMERAL=256
-    let SWAP=4
-  elif [ "$ID" -gt 4 ];then
-    let VCPU=VCPU*2
-    let DISK=DISK*4+$DISK
-    let EPHEMERAL=$DISK/2
-    let SWAP=4
-  elif [ "$ID" -gt 3 ];then
-    let VCPU=VCPU*2
-    let DISK=DISK*4+$DISK
-    let EPHEMERAL=$DISK/3
-    let SWAP=4
-  elif [ "$ID" -gt 2 ];then
-    let VCPU=VCPU+$VCPU/2
-    let DISK=DISK*4
-    let EPHEMERAL=$DISK/3
-    let SWAP=4
-  elif [ "$ID" -gt 1 ];then
-    let VCPU=VCPU+1
-    let DISK=DISK*2+$DISK
-  fi
-done
-
-# Neutron provider network setup
-neutron net-create GATEWAY_NET \
-    --router:external=True \
-    --provider:physical_network=flat \
-    --provider:network_type=flat
-
-neutron subnet-create GATEWAY_NET ${NETWORK_BASE}.248.0/22 \
-    --name GATEWAY_NET_SUBNET \
-    --gateway ${NETWORK_BASE}.248.1 \
-    --allocation-pool start=${NETWORK_BASE}.248.201,end=${NETWORK_BASE}.248.255 \
-    --dns-nameservers list=true ${DNS_NAMESERVER}
-
-# Neutron private network setup
-neutron net-create PRIVATE_NET \
-    --shared \
-    --router:external=True \
-    --provider:network_type=vxlan \
-    --provider:segmentation_id 101
-
-neutron subnet-create PRIVATE_NET 192.168.0.0/24 \
-    --name PRIVATE_NET_SUBNET
-
-# Neutron router setup
-ROUTER_ID=$(neutron router-create GATEWAY_NET_ROUTER | grep -w id | awk '{print $4}')
-neutron router-gateway-set \
-    ${ROUTER_ID} \
-    $(neutron net-list | awk '/GATEWAY_NET/ {print $2}')
-
-neutron router-interface-add \
-    ${ROUTER_ID} \
-    $(neutron subnet-list | awk '/PRIVATE_NET_SUBNET/ {print $2}')
-
-# Neutron security group setup
-for id in $(neutron security-group-list -f yaml | awk '/- id\:/ {print $3}'); do
-    # Allow ICMP
-    neutron security-group-rule-create --protocol icmp \
-                                       --direction ingress \
-                                       $id || true
-    # Allow all TCP
-    neutron security-group-rule-create --protocol tcp \
-                                       --port-range-min 1 \
-                                       --port-range-max 65535 \
-                                       --direction ingress \
-                                       $id || true
-    # Allow all UDP
-    neutron security-group-rule-create --protocol udp \
-                                       --port-range-min 1 \
-                                       --port-range-max 65535 -\
-                                       -direction ingress \
-                                       $id || true
-done
-
-# Create some default images
-wget http://uec-images.ubuntu.com/releases/14.04/release/ubuntu-14.04-server-cloudimg-amd64-disk1.img
-glance image-create --name 'Ubuntu 14.04 LTS' \
-                    --container-format bare \
-                    --disk-format qcow2 \
-                    --visibility public \
-                    --progress \
-                    --file ubuntu-14.04-server-cloudimg-amd64-disk1.img
-rm ubuntu-14.04-server-cloudimg-amd64-disk1.img
-
-wget http://uec-images.ubuntu.com/releases/16.04/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img
-glance image-create --name 'Ubuntu 16.04' \
-                    --container-format bare \
-                    --disk-format qcow2 \
-                    --visibility public \
-                    --progress \
-                    --file ubuntu-16.04-server-cloudimg-amd64-disk1.img
-rm ubuntu-16.04-server-cloudimg-amd64-disk1.img
-
-wget http://dfw.mirror.rackspace.com/fedora/releases/24/CloudImages/x86_64/images/Fedora-Cloud-Base-24-1.2.x86_64.qcow2
-glance image-create --name 'Fedora 24' \
-                    --container-format bare \
-                    --disk-format qcow2 \
-                    --visibility public \
-                    --progress \
-                    --file Fedora-Cloud-Base-24-1.2.x86_64.qcow2
-rm Fedora-Cloud-Base-24-1.2.x86_64.qcow2
-
-wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2
-glance image-create --name 'CentOS 7' \
-                    --container-format bare \
-                    --disk-format qcow2 \
-                    --visibility public \
-                    --progress \
-                    --file CentOS-7-x86_64-GenericCloud.qcow2
-rm CentOS-7-x86_64-GenericCloud.qcow2
-
-wget http://download.opensuse.org/repositories/Cloud:/Images:/Leap_42.1/images/openSUSE-Leap-42.1-OpenStack.x86_64-0.0.4-Build2.12.qcow2
-glance image-create --name 'OpenSuse Leap 42' \
-                    --container-format bare \
-                    --disk-format qcow2 \
-                    --visibility public \
-                    --progress \
-                    --file openSUSE-Leap-42.1-OpenStack.x86_64-0.0.4-Build2.12.qcow2
-rm openSUSE-Leap-42.1-OpenStack.x86_64-0.0.4-Build2.12.qcow2
-
-wget http://cdimage.debian.org/cdimage/openstack/current/debian-8.6.0-openstack-amd64.qcow2
-glance image-create --name 'Debian 8.6.0' \
-                    --container-format bare \
-                    --disk-format qcow2 \
-                    --visibility public \
-                    --progress \
-                    --file debian-8.6.0-openstack-amd64.qcow2
-rm debian-8.6.0-openstack-amd64.qcow2
-
-wget http://cdimage.debian.org/cdimage/openstack/testing/debian-testing-openstack-amd64.qcow2
-glance image-create --name "Debian TESTING $(date +%m-%d-%y)" \
-                    --container-format bare \
-                    --disk-format qcow2 \
-                    --visibility public \
-                    --progress \
-                    --file debian-testing-openstack-amd64.qcow2
-rm debian-testing-openstack-amd64.qcow2
-
-wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
-glance image-create --name "Cirros-0.3.4" \
-                    --container-format bare \
-                    --disk-format qcow2 \
-                    --visibility public \
-                    --progress \
-                    --file cirros-0.3.4-x86_64-disk.img
-rm cirros-0.3.4-x86_64-disk.img
diff --git a/multi-node-aio-xenial-ansible/roles/apache_install/README.md b/multi-node-aio-xenial-ansible/roles/apache_install/README.md
deleted file mode 100644
index acffb058..00000000
--- a/multi-node-aio-xenial-ansible/roles/apache_install/README.md
+++ /dev/null
@@ -1,23 +0,0 @@
-apache_install
-=========
-
-This module installs Apache2 and configures a site
-
-Requirements
-------------
-
-This module requires Ansible 2.0+
-
-Role Variables
---------------
-
-See defaults for variables and descriptions
-
-Example Playbook
-----------------
-
-Example to call:
-
-    - hosts: all
-      roles:
-         - { role: url: default }
diff --git a/multi-node-aio-xenial-ansible/roles/apache_install/defaults/main.yml b/multi-node-aio-xenial-ansible/roles/apache_install/defaults/main.yml
deleted file mode 100644
index 1ef303e7..00000000
--- a/multi-node-aio-xenial-ansible/roles/apache_install/defaults/main.yml
+++ /dev/null
@@ -1,26 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# name: apache_install/defaults
-# description: ALL our default variables for apache_install go in here
-#------------------------------------------------------------------------------
-# Packages - All our required packages we need installing
-#------------------------------------------------------------------------------
-
-# - pre-requisites -
-packages:                             # Packages required for apache role to work
-    - apache2
-
-# - variables -
-apache_url: blank                            # Default sub folder
-publish_root: blank                   # What will the default path be for the apache site
diff --git a/multi-node-aio-xenial-ansible/roles/apache_install/handlers/main.yml b/multi-node-aio-xenial-ansible/roles/apache_install/handlers/main.yml
deleted file mode 100644
index 7c223848..00000000
--- a/multi-node-aio-xenial-ansible/roles/apache_install/handlers/main.yml
+++ /dev/null
@@ -1,20 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# name: apache_install/handlers
-# description: All our handlers for apache_install go in here
-
-- name: restart_apache2
-  service:
-    name: apache2
-    state: restarted
diff --git a/multi-node-aio-xenial-ansible/roles/apache_install/meta/main.yml b/multi-node-aio-xenial-ansible/roles/apache_install/meta/main.yml
deleted file mode 100644
index 40077de8..00000000
--- a/multi-node-aio-xenial-ansible/roles/apache_install/meta/main.yml
+++ /dev/null
@@ -1,22 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-galaxy_info:
-  author: "Stuart Grace - BBC R&D"
-  license: Apache2
-  min_ansible_version: 2.0
-  platforms:
-   - name: Ubuntu
-     versions:
-      - xenial
-dependencies: []
diff --git a/multi-node-aio-xenial-ansible/roles/apache_install/tasks/configure.yml b/multi-node-aio-xenial-ansible/roles/apache_install/tasks/configure.yml
deleted file mode 100644
index 6d887e53..00000000
--- a/multi-node-aio-xenial-ansible/roles/apache_install/tasks/configure.yml
+++ /dev/null
@@ -1,40 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# module: apache_install/tasks/configure
-# description: Configure apache_install
-
-- name: Create default index to show host info
-  copy:
-    content: "System - {{ ansible_fqdn }}"
-    dest: /var/www/html/index.html
-
-- name: Create control file for apache site
-  template:
-    src: sites-allowed.j2
-    dest: "/etc/apache2/sites-available/{{ apache_url }}.conf"
-    mode: 0644
-  notify: restart_apache2
-
-- name: Create publish root path
-  file:
-    path: "{{ apache_path }}"
-    state: directory
-    recurse: yes
-
-- name: Enable apache site using symlink
-  file:
-    path: "/etc/apache2/sites-enabled/{{ apache_url }}.conf"
-    src: "/etc/apache2/sites-available/{{ apache_url }}.conf"
-    state: link
-  notify: restart_apache2
diff --git a/multi-node-aio-xenial-ansible/roles/apache_install/tasks/install.yml b/multi-node-aio-xenial-ansible/roles/apache_install/tasks/install.yml
deleted file mode 100644
index b3b46f0a..00000000
--- a/multi-node-aio-xenial-ansible/roles/apache_install/tasks/install.yml
+++ /dev/null
@@ -1,25 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# module: apache_install/tasks/install
-# description: Install our required packages for apache_install
-
-- name: Install all required packages for apache_install
-  apt:
-    pkg: "{{ packages }}"
-    state: latest
-
-- name: Make sure Apache2 is enabled
-  service:
-    name: apache2
-    enabled: yes
diff --git a/multi-node-aio-xenial-ansible/roles/apache_install/tasks/main.yml b/multi-node-aio-xenial-ansible/roles/apache_install/tasks/main.yml
deleted file mode 100644
index de5dbba4..00000000
--- a/multi-node-aio-xenial-ansible/roles/apache_install/tasks/main.yml
+++ /dev/null
@@ -1,18 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# module: apache_install/tasks
-# description: Install apache onto an Ubuntu 16.xx server
-
-- include: install.yml
-- include: configure.yml
diff --git a/multi-node-aio-xenial-ansible/roles/apache_install/templates/sites-allowed.j2 b/multi-node-aio-xenial-ansible/roles/apache_install/templates/sites-allowed.j2
deleted file mode 100644
index 95a91284..00000000
--- a/multi-node-aio-xenial-ansible/roles/apache_install/templates/sites-allowed.j2
+++ /dev/null
@@ -1,7 +0,0 @@
-### MANAGED BY {{ role_path|basename }} ANSIBLE ROLE ###
-
-Alias /{{apache_url}} {{apache_path}}
-<Directory {{ apache_path }}>
-	Require all granted
-	Options +Indexes
-</Directory>
diff --git a/multi-node-aio-xenial-ansible/roles/atftpd_install/README.md b/multi-node-aio-xenial-ansible/roles/atftpd_install/README.md
deleted file mode 100644
index 7160a76d..00000000
--- a/multi-node-aio-xenial-ansible/roles/atftpd_install/README.md
+++ /dev/null
@@ -1,23 +0,0 @@
-atftpd_install
-=========
-
-This module installs atftpd and allows you to set the path of where it reads tftp from
-
-Requirements
-------------
-
-This module requires Ansible 2.0
-
-Role Variables
---------------
-
-See defaults for variables and descriptions
-
-Example Playbook
-----------------
-
-Example to call:
-
-    - hosts: all
-      roles:
-         - { role: atftpd_install, atftpd_path: /tftpboot }
diff --git a/multi-node-aio-xenial-ansible/roles/atftpd_install/defaults/main.yml b/multi-node-aio-xenial-ansible/roles/atftpd_install/defaults/main.yml
deleted file mode 100644
index 38f97185..00000000
--- a/multi-node-aio-xenial-ansible/roles/atftpd_install/defaults/main.yml
+++ /dev/null
@@ -1,26 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# name: atftpd_install/defaults
-# description: ALL our default variables for atftpd_install go in here
-#------------------------------------------------------------------------------
-# Packages - All our required packages we need installing
-#------------------------------------------------------------------------------
-
-packages:
-    - atftpd
-
-# - variables
-atftpd_path: /srv/tftp     # Where is our defined atftp path
-atftp_user: nobody         # What user does ATFTPd run as
-atftp_group: nogroup       # What group does ATFTPd run as
diff --git a/multi-node-aio-xenial-ansible/roles/atftpd_install/handlers/main.yml b/multi-node-aio-xenial-ansible/roles/atftpd_install/handlers/main.yml
deleted file mode 100644
index b236c07d..00000000
--- a/multi-node-aio-xenial-ansible/roles/atftpd_install/handlers/main.yml
+++ /dev/null
@@ -1,20 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# name: atftpd_install/handlers
-# description: All our handlers for atftpd_install go in here
-
-- name: atftpd_restart
-  service:
-    name: atftpd
-    state: restarted
diff --git a/multi-node-aio-xenial-ansible/roles/atftpd_install/meta/main.yml b/multi-node-aio-xenial-ansible/roles/atftpd_install/meta/main.yml
deleted file mode 100644
index fe3e481e..00000000
--- a/multi-node-aio-xenial-ansible/roles/atftpd_install/meta/main.yml
+++ /dev/null
@@ -1,22 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-galaxy_info:
-  author: "Rick Box - BBC R&D"
-  license: Apache2
-  min_ansible_version: 2.0
-  platforms:
-   - name: Ubuntu
-     versions:
-      - xenial
-dependencies: []
diff --git a/multi-node-aio-xenial-ansible/roles/atftpd_install/tasks/configure.yml b/multi-node-aio-xenial-ansible/roles/atftpd_install/tasks/configure.yml
deleted file mode 100644
index 2c67a4fb..00000000
--- a/multi-node-aio-xenial-ansible/roles/atftpd_install/tasks/configure.yml
+++ /dev/null
@@ -1,39 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# module: atftpd_install/tasks/configure
-# description: Configure atftpd_install
-
-- name: Create group for application to run under
-  group:
-    name: "{{ atftp_group }}"
-    state: present
-
-- name: Create user for application to run under
-  user:
-    name: "{{ atftp_user }}"
-    group: "{{ atftp_group }}"
-    state: present
-
-- name: Atftp create directory and set permissions
-  file:
-    path: "{{ atftpd_path }}"
-    state: directory
-    owner: "{{ atftp_user }}"
-    group: "{{ atftp_group }}"
-
-- name: Atftpd set /etc/init.d/atftpd to not use xinetd and set our tftp path
-  template:
-    src: atftpd.j2
-    dest: /etc/default/atftpd
-  notify: atftpd_restart
diff --git a/multi-node-aio-xenial-ansible/roles/atftpd_install/tasks/install.yml b/multi-node-aio-xenial-ansible/roles/atftpd_install/tasks/install.yml
deleted file mode 100644
index 14c4bf46..00000000
--- a/multi-node-aio-xenial-ansible/roles/atftpd_install/tasks/install.yml
+++ /dev/null
@@ -1,25 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# module: atftpd_install/tasks/install
-# description: Install our required packages for atftpd_install
-
-- name: Install all required packages for atftpd_install
-  apt:
-    pkg: atftpd
-    state: latest
-
-- name: Enable Atftpd on boot
-  service:
-    name: atftpd
-    enabled: yes
diff --git a/multi-node-aio-xenial-ansible/roles/atftpd_install/tasks/main.yml b/multi-node-aio-xenial-ansible/roles/atftpd_install/tasks/main.yml
deleted file mode 100644
index c2b8e5a4..00000000
--- a/multi-node-aio-xenial-ansible/roles/atftpd_install/tasks/main.yml
+++ /dev/null
@@ -1,18 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# module: atftpd_install/tasks
-# description: Install atftpd_install onto an Ubuntu 16.xx server
-
-- include: install.yml
-- include: configure.yml
diff --git a/multi-node-aio-xenial-ansible/roles/atftpd_install/templates/atftpd.j2 b/multi-node-aio-xenial-ansible/roles/atftpd_install/templates/atftpd.j2
deleted file mode 100644
index b88263ef..00000000
--- a/multi-node-aio-xenial-ansible/roles/atftpd_install/templates/atftpd.j2
+++ /dev/null
@@ -1,3 +0,0 @@
-### MANAGED BY {{ role_path|basename }} ANSIBLE ROLE ###
-USE_INETD=false
-OPTIONS="--user {{ atftp_user }}.{{ atftp_group }} --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 {{ atftpd_path }}"
diff --git a/multi-node-aio-xenial-ansible/roles/dhcpd_install/README.md b/multi-node-aio-xenial-ansible/roles/dhcpd_install/README.md
deleted file mode 100644
index fed557ee..00000000
--- a/multi-node-aio-xenial-ansible/roles/dhcpd_install/README.md
+++ /dev/null
@@ -1,23 +0,0 @@
-dhcpd_install
-=========
-
-This module installs dhcpd
-
-Requirements
-------------
-
-This module requires Ansible 2.x
-
-Role Variables
---------------
-
-See defaults for variables and descriptions
-
-Example Playbook
-----------------
-
-Example to call:
-
-    - hosts: all
-      roles:
-         - { role: dhcpd_install }
diff --git a/multi-node-aio-xenial-ansible/roles/dhcpd_install/defaults/main.yml b/multi-node-aio-xenial-ansible/roles/dhcpd_install/defaults/main.yml
deleted file mode 100644
index 15deba58..00000000
--- a/multi-node-aio-xenial-ansible/roles/dhcpd_install/defaults/main.yml
+++ /dev/null
@@ -1,45 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# name: dhcpd_install/defaults
-# description: ALL our default variables for dhcpd_install go in here
-#------------------------------------------------------------------------------
-# Packages - All our required packages we need installing
-#------------------------------------------------------------------------------
-
-# - pre-requisites -
-packages:                                         # Packages required for dhcpd
-    - isc-dhcp-server
-
-# - general variables -
-dhcp_default_lease_time: 21600                    # Default lease time
-dhcp_max_lease_time: 43200                        # Max lease time
-tftp_server: 10.0.2.100                           # The server hosting the TFTP server
-tftp_boot_path: /pxelinux.0                       # Path of where to boot from first
-
-# - List of DHCP Subnets - These are iterated though and each will be created
-dhcp_list:
-  - netmask: 255.255.255.0                        # Netmask
-    gateway: 10.0.2.1                             # Gateway
-    dns: 8.8.8.8                                  # DNS
-    subnet: 10.0.2.0                              # Subnet mask
-    default_lease_time: 21600                     # Subnet Default lease time - The default is used if this is not defined
-    max_lease_time: 43200                         # Subnet Max lease time - The default is used if this is not defined
-    tftp_boot_path: /pxelinux.0                   # Path for tftp of where to boot from first - The default is used if this is not defined
-    tftp_server: 10.0.2.100                       # The server hosting the TFTP server - The default is used if this is not defined
-
-# - List of static DHCP hosts - These are iterated though and each will be created
-server_list:
-  - name: host                                    # Server hostname
-    hwaddr: "aa:aa:aa:aa:aa:aa"                   # Server MAC
-    ip: "10.0.2.2"                                # Server IP
diff --git a/multi-node-aio-xenial-ansible/roles/dhcpd_install/handlers/main.yml b/multi-node-aio-xenial-ansible/roles/dhcpd_install/handlers/main.yml
deleted file mode 100644
index 12c0b2a5..00000000
--- a/multi-node-aio-xenial-ansible/roles/dhcpd_install/handlers/main.yml
+++ /dev/null
@@ -1,21 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# name: dhcpd_install/handlers
-# description: All our handlers for dhcpd_install go in here
-
-- name: restart dhcpd
-  service:
-    name: "{{ item }}"
-    state: restarted
-  with_items: "{{ packages }}"
diff --git a/multi-node-aio-xenial-ansible/roles/dhcpd_install/meta/main.yml b/multi-node-aio-xenial-ansible/roles/dhcpd_install/meta/main.yml
deleted file mode 100644
index fe3e481e..00000000
--- a/multi-node-aio-xenial-ansible/roles/dhcpd_install/meta/main.yml
+++ /dev/null
@@ -1,22 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-galaxy_info:
-  author: "Rick Box - BBC R&D"
-  license: Apache2
-  min_ansible_version: 2.0
-  platforms:
-   - name: Ubuntu
-     versions:
-      - xenial
-dependencies: []
diff --git a/multi-node-aio-xenial-ansible/roles/dhcpd_install/tasks/configure.yml b/multi-node-aio-xenial-ansible/roles/dhcpd_install/tasks/configure.yml
deleted file mode 100644
index 6ce8873e..00000000
--- a/multi-node-aio-xenial-ansible/roles/dhcpd_install/tasks/configure.yml
+++ /dev/null
@@ -1,24 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# module: dhcpd_install/tasks/configure
-# description: Configure dhcpd_install
-
-- name: Create a template in /etc/dhcp/dhcpd.conf
-  template:
-    src: dhcpd.conf.j2
-    dest: /etc/dhcp/dhcpd.conf
-    mode: 0644
-    owner: root
-    group: root
-  notify: restart dhcpd
diff --git a/multi-node-aio-xenial-ansible/roles/dhcpd_install/tasks/install.yml b/multi-node-aio-xenial-ansible/roles/dhcpd_install/tasks/install.yml
deleted file mode 100644
index 463ef474..00000000
--- a/multi-node-aio-xenial-ansible/roles/dhcpd_install/tasks/install.yml
+++ /dev/null
@@ -1,26 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# module: dhcpd_install/tasks/install
-# description: Install our required packages for dhcpd_install
-
-- name: Install all required packages for dhcpd_install
-  apt:
-    pkg: "{{ packages }}"
-    state: latest
-
-- name: Make sure -{{ packages }}- are enabled
-  service:
-    name: "{{ item }}"
-    enabled: yes
-  with_items: "{{ packages }}"
diff --git a/multi-node-aio-xenial-ansible/roles/dhcpd_install/tasks/main.yml b/multi-node-aio-xenial-ansible/roles/dhcpd_install/tasks/main.yml
deleted file mode 100644
index 0bd2f9c7..00000000
--- a/multi-node-aio-xenial-ansible/roles/dhcpd_install/tasks/main.yml
+++ /dev/null
@@ -1,18 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# module: dhcpd_install/tasks
-# description: Install dhcpd_install onto an Ubuntu 16.xx server
-
-- include: install.yml
-- include: configure.yml
diff --git a/multi-node-aio-xenial-ansible/roles/proxy_install/README.md b/multi-node-aio-xenial-ansible/roles/proxy_install/README.md
deleted file mode 100644
index 1a1530f9..00000000
--- a/multi-node-aio-xenial-ansible/roles/proxy_install/README.md
+++ /dev/null
@@ -1,28 +0,0 @@
-proxy_install
-=========
-
-This module sets up a web and apt proxy on Ubuntu 16
-
-Requirements
-------------
-
-This module requires Ansible 2.x
-
-Role Variables
---------------
-
-See defaults for variables and descriptions
-
-Dependencies
-------------
-
-This role has no dependencies
-
-Example Playbook
-----------------
-
-Example to call:
-
-    - hosts: all
-      roles:
-         - { role: proxy_install }
diff --git a/multi-node-aio-xenial-ansible/roles/proxy_install/defaults/main.yml b/multi-node-aio-xenial-ansible/roles/proxy_install/defaults/main.yml
deleted file mode 100644
index 7ee19479..00000000
--- a/multi-node-aio-xenial-ansible/roles/proxy_install/defaults/main.yml
+++ /dev/null
@@ -1,23 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# name: proxy_install/defaults
-# description: ALL our default variables for proxy_install go in here
-#------------------------------------------------------------------------------
-# Packages - All our required packages we need installing
-#------------------------------------------------------------------------------
-
-# - Proxy URL -
-proxy: http://proxy.example.com:8080          # Example proxy URL
-environment_path: /etc/environment            # Default path for environment
-apt_proxy_path: /etc/apt/apt.conf.d/80proxy   # Default path for apt proxy
diff --git a/multi-node-aio-xenial-ansible/roles/proxy_install/meta/main.yml b/multi-node-aio-xenial-ansible/roles/proxy_install/meta/main.yml
deleted file mode 100644
index fe3e481e..00000000
--- a/multi-node-aio-xenial-ansible/roles/proxy_install/meta/main.yml
+++ /dev/null
@@ -1,22 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-galaxy_info:
-  author: "Rick Box - BBC R&D"
-  license: Apache2
-  min_ansible_version: 2.0
-  platforms:
-   - name: Ubuntu
-     versions:
-      - xenial
-dependencies: []
diff --git a/multi-node-aio-xenial-ansible/roles/proxy_install/tasks/configure.yml b/multi-node-aio-xenial-ansible/roles/proxy_install/tasks/configure.yml
deleted file mode 100644
index 7bb45ff7..00000000
--- a/multi-node-aio-xenial-ansible/roles/proxy_install/tasks/configure.yml
+++ /dev/null
@@ -1,37 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# module: proxy_install/tasks/configure
-# description: Configure proxy_install
-
-- name: Setup http proxy for APT
-  template:
-    src: 80proxy.j2
-    dest: "{{ apt_proxy_path }}"
-    mode: 0644
-    owner: root
-    group: root
-
-- name: Setup http proxy environment variables
-  lineinfile:
-    dest: "{{ environment_path }}"
-    line: "{{ item.line }}"
-    regexp: "{{ item.regexp }}"
-  with_items:
-    - { line: "http_proxy={{ proxy }}", regexp: "^http_proxy=" }
-    - { line: "https_proxy={{ proxy }}", regexp: "^https_proxy=" }
-    - { line: "RSYNC_PROXY={{ proxy }}", regexp: "^RSYNC_PROXY=" }
-
-- name: Change current environment variables, change disabled since it runs each time
-  shell: "export http_proxy={{ proxy }}; export https_proxy={{ proxy }}; export RSYNC_PROXY={{ proxy }}"
-  changed_when: false
diff --git a/multi-node-aio-xenial-ansible/roles/proxy_install/tasks/main.yml b/multi-node-aio-xenial-ansible/roles/proxy_install/tasks/main.yml
deleted file mode 100644
index b75c3f89..00000000
--- a/multi-node-aio-xenial-ansible/roles/proxy_install/tasks/main.yml
+++ /dev/null
@@ -1,17 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# module: proxy_install/tasks
-# description: Install proxy_install onto an Ubuntu 16.xx server
-
-- include: configure.yml
diff --git a/multi-node-aio-xenial-ansible/roles/proxy_install/templates/80proxy.j2 b/multi-node-aio-xenial-ansible/roles/proxy_install/templates/80proxy.j2
deleted file mode 100644
index af4314c4..00000000
--- a/multi-node-aio-xenial-ansible/roles/proxy_install/templates/80proxy.j2
+++ /dev/null
@@ -1,2 +0,0 @@
-### MANAGED BY {{ role_path|basename }} ANSIBLE ROLE ###
-Acquire::http::Proxy "{{ proxy }}";
diff --git a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/README.md b/multi-node-aio-xenial-ansible/roles/tftpboot_configure/README.md
deleted file mode 100644
index 493e27ac..00000000
--- a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/README.md
+++ /dev/null
@@ -1,28 +0,0 @@
-tftpboot_configure
-=========
-
-This module configures custom tftp allowing for netboot of an Ubuntu system. It dynamically creates a TFTBoot based on the MAC addresses passed in. It also generates a preseed and late command which are used to install the system
-
-Requirements
-------------
-
-This module requires Ansible 2.x
-
-Role Variables
---------------
-
-See defaults for variables and descriptions
-
-Dependencies
-------------
-
-This role depends on a DHCPD and ATFTP roles
-
-Example Playbook
-----------------
-
-Example to call:
-
-    - hosts: all
-      roles:
-         - { role: tftpboot_configure }
diff --git a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/defaults/main.yml b/multi-node-aio-xenial-ansible/roles/tftpboot_configure/defaults/main.yml
deleted file mode 100644
index cdbde4b2..00000000
--- a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/defaults/main.yml
+++ /dev/null
@@ -1,49 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# name: tftpboot_configure/defaults
-# description: ALL our default variables for tftpboot_configure go in here
-#------------------------------------------------------------------------------
-# Packages - All our required packages we need installing
-#------------------------------------------------------------------------------
-
-# - variables -
-tftp_mirror: archive.ubuntu.com              # Where will we pull our linux boot environment from
-tftp_proxy: blank                            # What proxy will we use, if any.
-tftp_distro: [ xenial ]                      # What distribution will we pull
-tftp_files: [ initrd.gz, linux ]
-
-ntp_server: pool.ntp.org
-atftpd_path: /srv/tftp                       # What is the path for our tftpd
-tftp_source: /srv/tftp_source/               # What is the path where the source pxe config files are placed per server
-
-atftp_user: nobody                           # What user does this environment get set up as
-atftp_group: nogroup                         # What group does this environment get set up as
-
-preseed_password: hackme                     # Default password placed into pre-seed file
-vm_disk_device: vda                          # Default disk device used in pre-seed
-vm_net_iface: eth0                           # Default interface used in pre-seed
-ssh_key: blank
-distro_url:
-
-# These below variables rely on apache being set up and is where the preseed is set up
-
-preseed_apache_url: pxe                      # What is the url http://server/THISVARHERE
-preseed_path: /var/www/html/pxe                   # What path
-webserver_ip_address: "{{ ansible_default_ipv4.address }}"
-
-server_list:                                 # What is our list of servers
-  - name: blank
-    hwaddr: "aa:aa:aa:aa:aa:aa"
-    distro: xenial
-    preseed_file: my-preseed-file            # Allow a custom preseed on a per server basis
diff --git a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/files/memdisk b/multi-node-aio-xenial-ansible/roles/tftpboot_configure/files/memdisk
deleted file mode 100755
index a532e9077d99153ba9d8fbc1b6cf4ccca11bc5b3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 26140
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
NsO875Isd*7{qJj-r3?T7

diff --git a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/files/menu.c32 b/multi-node-aio-xenial-ansible/roles/tftpboot_configure/files/menu.c32
deleted file mode 100755
index 1af2b909cd0dbf4f3ab0a22b3d0bf56b570e2eb9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 54964
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
D$w>nX

diff --git a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/files/pxelinux.0 b/multi-node-aio-xenial-ansible/roles/tftpboot_configure/files/pxelinux.0
deleted file mode 100755
index e59955122bd72d013ef9a1085d00cc542d769250..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16794
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
Aa{vGU

diff --git a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/meta/main.yml b/multi-node-aio-xenial-ansible/roles/tftpboot_configure/meta/main.yml
deleted file mode 100644
index fe3e481e..00000000
--- a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/meta/main.yml
+++ /dev/null
@@ -1,22 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-galaxy_info:
-  author: "Rick Box - BBC R&D"
-  license: Apache2
-  min_ansible_version: 2.0
-  platforms:
-   - name: Ubuntu
-     versions:
-      - xenial
-dependencies: []
diff --git a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/tasks/configure.yml b/multi-node-aio-xenial-ansible/roles/tftpboot_configure/tasks/configure.yml
deleted file mode 100644
index 60c0efa7..00000000
--- a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/tasks/configure.yml
+++ /dev/null
@@ -1,118 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# module: tftpboot_configure/tasks/configure
-# description: Configure tftpboot_configure
-
-- name: Create pxeboot directories
-  file:
-    path: "{{ atftpd_path }}/{{ item }}"
-    state: directory
-    owner: "{{ atftp_user }}"
-    group: "{{ atftp_group }}"
-  with_items:
-  - images
-  - pxelinux.cfg
-
-- name: Create directories for distributions
-  file:
-    path: "{{ atftpd_path }}/images/{{ item }}/"
-    state: directory
-    owner: "{{ atftp_user }}"
-    group: "{{ atftp_group }}"
-  with_items: "{{ tftp_distro }}"
-
-- name: Create apache directories for preseed, ubuntu image,
-  file:
-    path: "{{ apache_path }}/{{ item }}"
-    state: directory
-  with_items: "{{ tftp_directories }}"
-
-- name: Create the preseed files
-  template:
-    src: "{{ item.preseed_file }}.j2"
-    dest: "{{ preseed_path }}/{{ item.preseed_file }}"
-  with_items: "{{ server_list }}"
-
-- name: Get ubuntu server image
-  get_url:
-    url: "{{ distro_url }}"
-    dest: "{{ atftpd_path }}/images/{{ distro_name }}"
-    mode: 0644
-    owner: "{{ atftp_user }}"
-    group: "{{ atftp_group }}"
-
-- name: mount the ubuntu image
-  mount:
-    name: "{{ apache_path }}/ubuntu/"
-    src: "{{ atftpd_path }}/images/{{ distro_name }}"
-    fstype: iso9660
-    opts: loop
-    state: mounted
-
-- name: Pull down boot kernel and initrd - create download directory -{{ tftp_distro }}-
-  file:
-    path: "/var/lib/netboot/{{ item }}"
-    mode: 0644
-    state: directory
-    owner: "{{ atftp_user }}"
-    group: "{{ atftp_group }}"
-  with_items: "{{ tftp_distro }}"
-
-- name: Pull down boot kernel and initrd - download -"{{ tftp_distro }}"- releases -"{{ tftp_files }}"- files and place in /var/lib/netboot/
-  get_url:
-    url: "http://{{ tftp_mirror }}/ubuntu/install/netboot/ubuntu-installer/amd64/{{ item[1] }}"
-    dest: /var/lib/netboot/{{ item[0] }}
-    mode: 0644
-    owner: "{{ atftp_user }}"
-    group: "{{ atftp_group }}"
-  with_nested:
-    - "{{ tftp_distro }}"
-    - "{{ tftp_files }}"
-
-- name: Create hard link to our boot images in the distribution folder
-  file:
-    src: "/var/lib/netboot/{{ item[0] }}/{{ item[1] }}"
-    dest: "{{ atftpd_path }}/images/{{ item[0] }}/{{ item[1] }}"
-    state: hard
-  with_nested:
-    - "{{ tftp_distro }}"
-    - "{{ tftp_files }}"
-
-- name: Copy pxe boot files
-  copy:
-    src: "{{ item }}"
-    dest: "{{ atftpd_path }}"
-    owner: "{{ atftp_user }}"
-    group: "{{ atftp_group }}"
-  with_items:
-    - memdisk
-    - menu.c32
-    - pxelinux.0
-
-- name: Create a template for each of our defined servers
-  template:
-    src: pxelinux.j2
-    dest: "{{ tftp_source }}/01-{{ item.hwaddr | regex_replace(':', '-') }}"
-    owner: "{{ atftp_user }}"
-    group: "{{ atftp_group }}"
-    follow: yes
-  with_items: "{{ server_list }}"
-  when: item.distro is defined
-
-- name: Create our default template for menu
-  template:
-    src: default_pxelinux.j2
-    dest: "{{ atftpd_path }}/pxelinux.cfg/default"
-    owner: "{{ atftp_user }}"
-    group: "{{ atftp_group }}"
diff --git a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/tasks/main.yml b/multi-node-aio-xenial-ansible/roles/tftpboot_configure/tasks/main.yml
deleted file mode 100644
index 1ac97f9f..00000000
--- a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/tasks/main.yml
+++ /dev/null
@@ -1,17 +0,0 @@
----
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# module: tftpboot_configure/tasks
-# description: Install tftpboot_configure onto an Ubuntu 16.xx server
-
-- include: configure.yml
diff --git a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/default_pxelinux.j2 b/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/default_pxelinux.j2
deleted file mode 100644
index 48a31426..00000000
--- a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/default_pxelinux.j2
+++ /dev/null
@@ -1,19 +0,0 @@
-DEFAULT menu
-PROMPT 0
-MENU TITLE PXEBoot
-TIMEOUT 3
-TOTALTIMEOUT 6000
-ONTIMEOUT local
-
-LABEL local
-        MENU LABEL (local)
-        MENU DEFAULT
-        LOCALBOOT -1
-
-LABEL xenial
-        kernel /images/xenial/linux
-        MENU LABEL xenial
-        append initrd=/images/xenial/initrd.gz ksdevice=bootif netcfg/choose_interface=auto text  auto-install/enable=true priority=critical url=http://{{ webserver_ip_address }}/{{ preseed_apache_url }}/xenial hostname=xenial domain=local.lan suite=xenial
-        ipappend 2
-
-MENU end
diff --git a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/pxelinux.j2 b/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/pxelinux.j2
deleted file mode 100644
index 8a81b1a2..00000000
--- a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/pxelinux.j2
+++ /dev/null
@@ -1,8 +0,0 @@
-default linux
-prompt 0
-timeout 1
-label linux
-        kernel /images/{{ item.distro }}/linux
-        ipappend 2
-        append initrd=/images/{{ item.distro }}/initrd.gz ksdevice=bootif netcfg/choose_interface=auto text auto-install/enable=true priority=critical url=http://{{ webserver_ip_address }}/{{ preseed_apache_url }}/{{ item.preseed_file }} hostname={{ item.name }} domain=local.lan suite={{ item.distro }} biosdevname=0 net.ifnames=0
-
diff --git a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-cinder.seed.j2 b/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-cinder.seed.j2
deleted file mode 100644
index 39aeb83b..00000000
--- a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-cinder.seed.j2
+++ /dev/null
@@ -1,282 +0,0 @@
-#
-# Ubuntu Server 16.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/16.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string biosdevname=0 net.ifnames=0
-
-#############
-#
-# Networking
-#
-#############
-
-d-i netcfg/choose_interface select {{ vm_net_iface }}
-d-i netcfg/dhcp_timeout string 60
-#d-i netcfg/disable_autoconfig boolean true
-#d-i netcfg/dhcp_failed note
-#d-i netcfg/dhcp_options select Configure network manually
-
-# Static network configuration.
-#d-i netcfg/get_ipaddress string 192.168.0.1
-#d-i netcfg/get_netmask string 255.255.255.0
-#d-i netcfg/get_gateway string 192.168.0.2
-#d-i netcfg/get_nameservers string 8.8.8.8
-#d-i netcfg/confirm_static boolean true
-
-d-i netcfg/get_hostname string cinder_node
-d-i netcfg/get_domain string openstackci.local
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/{{ vm_disk_device }}. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://{{ tftp_mirror }}/ubuntu/install/filesystem.squashfs
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-{% if tftp_proxy != 'blank' %}
-d-i mirror/http/proxy string {{ tftp_proxy }}
-{% endif %}
-d-i mirror/http/hostname string {{ tftp_mirror }}
-d-i mirror/http/directory string /ubuntu
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string {{ ntp_server }}
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/{{ vm_disk_device }}
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-# This is used to auto-confirm its OK to use a partition without an FS
-d-i partman-basicmethods/method_only boolean false
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/{{ vm_disk_device }}2 }    \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              51200 1 51200 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-              76800 1 76800 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-              1024 1 1000000000 ext4                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ cinder00 }                     \
-                      method{ keep }                          \
-              .                                               \
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python2.7 vim vlan python-simplejson
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password {{ preseed_password }}
-d-i passwd/root-password-again password {{ preseed_password }}
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-d-i preseed/late_command string \
-  wget --no-proxy http://{{ webserver_ip_address }}/xenial-sources.list -O /target/etc/apt/sources.list; \
-  wget --no-proxy http://{{ webserver_ip_address }}/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "{{ ssh_key }}" >> /target/root/.ssh/authorized_keys; \
-  vgcreate cinder-volumes /dev/mapper/lxc-cinder00; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
diff --git a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-deploy.seed.j2 b/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-deploy.seed.j2
deleted file mode 100644
index 7af9c049..00000000
--- a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-deploy.seed.j2
+++ /dev/null
@@ -1,276 +0,0 @@
-#
-# Ubuntu Server 16.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/16.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string biosdevname=0 net.ifnames=0
-
-#############
-#
-# Networking
-#
-#############
-
-d-i netcfg/choose_interface select {{ vm_net_iface }}
-d-i netcfg/dhcp_timeout string 60
-#d-i netcfg/disable_autoconfig boolean true
-#d-i netcfg/dhcp_failed note
-#d-i netcfg/dhcp_options select Configure network manually
-
-# Static network configuration.
-#d-i netcfg/get_ipaddress string 192.168.0.1
-#d-i netcfg/get_netmask string 255.255.255.0
-#d-i netcfg/get_gateway string 192.168.0.2
-#d-i netcfg/get_nameservers string 8.8.8.8
-#d-i netcfg/confirm_static boolean true
-
-d-i netcfg/get_hostname string deploy_node
-d-i netcfg/get_domain string openstackci.local
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/{{ vm_disk_device }}. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://{{ tftp_mirror }}/ubuntu/install/filesystem.squashfs
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-{% if tftp_proxy != 'blank' %}
-d-i mirror/http/proxy string {{ tftp_proxy }}
-{% endif %}
-d-i mirror/http/hostname string {{ tftp_mirror }}
-d-i mirror/http/directory string /ubuntu
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string {{ ntp_server }}
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/{{ vm_disk_device }}
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-# This is used to auto-confirm its OK to use a partition without an FS
-d-i partman-basicmethods/method_only boolean false
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/{{ vm_disk_device }}2 }    \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              153600 1 153600 ext4                            \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-              1024 1 1000000000 ext4                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python2.7 vim vlan python-simplejson
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password {{ preseed_password }}
-d-i passwd/root-password-again password {{ preseed_password }}
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-d-i preseed/late_command string \
-  wget --no-proxy http://{{ webserver_ip_address }}/xenial-sources.list -O /target/etc/apt/sources.list; \
-  wget --no-proxy http://{{ webserver_ip_address }}/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "{{ ssh_key }}" >> /target/root/.ssh/authorized_keys; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
diff --git a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-infra.seed.j2 b/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-infra.seed.j2
deleted file mode 100644
index e3b79a22..00000000
--- a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-infra.seed.j2
+++ /dev/null
@@ -1,276 +0,0 @@
-#
-# Ubuntu Server 16.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/16.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string biosdevname=0 net.ifnames=0
-
-#############
-#
-# Networking
-#
-#############
-
-d-i netcfg/choose_interface select {{ vm_net_iface }}
-d-i netcfg/dhcp_timeout string 60
-#d-i netcfg/disable_autoconfig boolean true
-#d-i netcfg/dhcp_failed note
-#d-i netcfg/dhcp_options select Configure network manually
-
-# Static network configuration.
-#d-i netcfg/get_ipaddress string 192.168.0.1
-#d-i netcfg/get_netmask string 255.255.255.0
-#d-i netcfg/get_gateway string 192.168.0.2
-#d-i netcfg/get_nameservers string 8.8.8.8
-#d-i netcfg/confirm_static boolean true
-
-d-i netcfg/get_hostname string infra_node
-d-i netcfg/get_domain string openstackci.local
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/{{ vm_disk_device }}. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://{{ tftp_mirror }}/ubuntu/install/filesystem.squashfs
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-{% if tftp_proxy != 'blank' %}
-d-i mirror/http/proxy string {{ tftp_proxy }}
-{% endif %}
-d-i mirror/http/hostname string {{ tftp_mirror }}
-d-i mirror/http/directory string /ubuntu
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string {{ ntp_server }}
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/{{ vm_disk_device }}
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-# This is used to auto-confirm its OK to use a partition without an FS
-d-i partman-basicmethods/method_only boolean false
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/{{ vm_disk_device }}2 }    \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              153600 1 153600 ext4                            \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-              1024 1 1000000000 ext4                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python2.7 vim vlan python-simplejson
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password {{ preseed_password }}
-d-i passwd/root-password-again password {{ preseed_password }}
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-d-i preseed/late_command string \
-  wget --no-proxy http://{{ webserver_ip_address }}/xenial-sources.list -O /target/etc/apt/sources.list; \
-  wget --no-proxy http://{{ webserver_ip_address }}/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "{{ ssh_key }}" >> /target/root/.ssh/authorized_keys; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
diff --git a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-logging.seed.j2 b/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-logging.seed.j2
deleted file mode 100644
index df85ea43..00000000
--- a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-logging.seed.j2
+++ /dev/null
@@ -1,276 +0,0 @@
-#
-# Ubuntu Server 16.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/16.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string biosdevname=0 net.ifnames=0
-
-#############
-#
-# Networking
-#
-#############
-
-d-i netcfg/choose_interface select {{ vm_net_iface }}
-d-i netcfg/dhcp_timeout string 60
-#d-i netcfg/disable_autoconfig boolean true
-#d-i netcfg/dhcp_failed note
-#d-i netcfg/dhcp_options select Configure network manually
-
-# Static network configuration.
-#d-i netcfg/get_ipaddress string 192.168.0.1
-#d-i netcfg/get_netmask string 255.255.255.0
-#d-i netcfg/get_gateway string 192.168.0.2
-#d-i netcfg/get_nameservers string 8.8.8.8
-#d-i netcfg/confirm_static boolean true
-
-d-i netcfg/get_hostname string logging_node
-d-i netcfg/get_domain string openstackci.local
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/{{ vm_disk_device }}. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://{{ tftp_mirror }}/ubuntu/install/filesystem.squashfs
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-{% if tftp_proxy != 'blank' %}
-d-i mirror/http/proxy string {{ tftp_proxy }}
-{% endif %}
-d-i mirror/http/hostname string {{ tftp_mirror }}
-d-i mirror/http/directory string /ubuntu
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string {{ ntp_server }}
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/{{ vm_disk_device }}
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-# This is used to auto-confirm its OK to use a partition without an FS
-d-i partman-basicmethods/method_only boolean false
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/{{ vm_disk_device }}2 }    \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              51200 1 51200 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-              1024 1 1000000000 ext4                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python2.7 vim vlan python-simplejson
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password {{ preseed_password }}
-d-i passwd/root-password-again password {{ preseed_password }}
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-d-i preseed/late_command string \
-  wget --no-proxy http://{{ webserver_ip_address }}/xenial-sources.list -O /target/etc/apt/sources.list; \
-  wget --no-proxy http://{{ webserver_ip_address }}/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "{{ ssh_key }}" >> /target/root/.ssh/authorized_keys; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
diff --git a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-network.seed.j2 b/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-network.seed.j2
deleted file mode 100644
index 31593d1e..00000000
--- a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-network.seed.j2
+++ /dev/null
@@ -1,276 +0,0 @@
-#
-# Ubuntu Server 16.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/16.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string biosdevname=0 net.ifnames=0
-
-#############
-#
-# Networking
-#
-#############
-
-d-i netcfg/choose_interface select {{ vm_net_iface }}
-d-i netcfg/dhcp_timeout string 60
-#d-i netcfg/disable_autoconfig boolean true
-#d-i netcfg/dhcp_failed note
-#d-i netcfg/dhcp_options select Configure network manually
-
-# Static network configuration.
-#d-i netcfg/get_ipaddress string 192.168.0.1
-#d-i netcfg/get_netmask string 255.255.255.0
-#d-i netcfg/get_gateway string 192.168.0.2
-#d-i netcfg/get_nameservers string 8.8.8.8
-#d-i netcfg/confirm_static boolean true
-
-d-i netcfg/get_hostname string network_node
-d-i netcfg/get_domain string openstackci.local
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/{{ vm_disk_device }}. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://{{ tftp_mirror }}/ubuntu/install/filesystem.squashfs
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-{% if tftp_proxy != 'blank' %}
-d-i mirror/http/proxy string {{ tftp_proxy }}
-{% endif %}
-d-i mirror/http/hostname string {{ tftp_mirror }}
-d-i mirror/http/directory string /ubuntu
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string {{ ntp_server }}
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/{{ vm_disk_device }}
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-# This is used to auto-confirm its OK to use a partition without an FS
-d-i partman-basicmethods/method_only boolean false
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/{{ vm_disk_device }}2 }    \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              153600 1 153600 ext4                            \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-              1024 1 1000000000 ext4                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python2.7 vim vlan python-simplejson
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password {{ preseed_password }}
-d-i passwd/root-password-again password {{ preseed_password }}
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-d-i preseed/late_command string \
-  wget --no-proxy http://{{ webserver_ip_address }}/xenial-sources.list -O /target/etc/apt/sources.list; \
-  wget --no-proxy http://{{ webserver_ip_address }}/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "{{ ssh_key }}" >> /target/root/.ssh/authorized_keys; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
diff --git a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-swift.seed.j2 b/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-swift.seed.j2
deleted file mode 100644
index 1dabe98f..00000000
--- a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-swift.seed.j2
+++ /dev/null
@@ -1,300 +0,0 @@
-#
-# Ubuntu Server 16.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/16.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string biosdevname=0 net.ifnames=0
-
-#############
-#
-# Networking
-#
-#############
-
-d-i netcfg/choose_interface select {{ vm_net_iface }}
-d-i netcfg/dhcp_timeout string 60
-#d-i netcfg/disable_autoconfig boolean true
-#d-i netcfg/dhcp_failed note
-#d-i netcfg/dhcp_options select Configure network manually
-
-# Static network configuration.
-#d-i netcfg/get_ipaddress string 192.168.0.1
-#d-i netcfg/get_netmask string 255.255.255.0
-#d-i netcfg/get_gateway string 192.168.0.2
-#d-i netcfg/get_nameservers string 8.8.8.8
-#d-i netcfg/confirm_static boolean true
-
-d-i netcfg/get_hostname string swift_node
-d-i netcfg/get_domain string openstackci.local
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/{{ vm_disk_device }}. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://{{ tftp_mirror }}/ubuntu/install/filesystem.squashfs
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-{% if tftp_proxy != 'blank' %}
-d-i mirror/http/proxy string {{ tftp_proxy }}
-{% endif %}
-d-i mirror/http/hostname string {{ tftp_mirror }}
-d-i mirror/http/directory string /ubuntu
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string {{ ntp_server }}
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/{{ vm_disk_device }}
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-# This is used to auto-confirm its OK to use a partition without an FS
-d-i partman-basicmethods/method_only boolean false
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/{{ vm_disk_device }}2 }    \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              51200 1 51200 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-              20480 1 20480 xfs                               \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swift01 }                      \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ xfs }     \
-                      label{ openstack00 }                    \
-                      mountpoint{ /srv/disk1 }                \
-              .                                               \
-              20480 1 20480 xfs                               \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swift02 }                      \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ xfs }     \
-                      label{ openstack00 }                    \
-                      mountpoint{ /srv/disk2 }                \
-              .                                               \
-              20480 1 20480 xfs                               \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swift03 }                      \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ xfs }     \
-                      label{ openstack00 }                    \
-                      mountpoint{ /srv/disk3 }                \
-              .                                               \
-              76800 1 76800 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python2.7 vim vlan python-simplejson xfsprogs
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password {{ preseed_password }}
-d-i passwd/root-password-again password {{ preseed_password }}
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-d-i preseed/late_command string \
-  wget --no-proxy http://{{ webserver_ip_address }}/xenial-sources.list -O /target/etc/apt/sources.list; \
-  wget --no-proxy http://{{ webserver_ip_address }}/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "{{ ssh_key }}" >> /target/root/.ssh/authorized_keys; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
diff --git a/multi-node-aio-xenial-ansible/setup-host.sh b/multi-node-aio-xenial-ansible/setup-host.sh
deleted file mode 100755
index 8a17a895..00000000
--- a/multi-node-aio-xenial-ansible/setup-host.sh
+++ /dev/null
@@ -1,136 +0,0 @@
-#!/usr/bin/env bash
-set -eu
-# Copyright [2016] [Kevin Carter]
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Load all functions
-source functions.rc
-
-# bring in variable definitions if there is a variables.sh file
-[[ -f variables.sh ]] && source variables.sh
-
-# Make the rekick function part of the main general shell
-declare -f rekick_vms | tee /root/.functions.rc
-declare -f ssh_agent_reset | tee -a /root/.functions.rc
-if ! grep -q 'source /root/.functions.rc' /root/.bashrc; then
-  echo 'source /root/.functions.rc' | tee -a /root/.bashrc
-fi
-
-# Reset the ssh-agent service to remove potential key issues
-ssh_agent_reset
-
-if [ ! -f "/root/.ssh/id_rsa" ];then
-  ssh-keygen -t rsa -N '' -f /root/.ssh/id_rsa
-fi
-
-# This gets the root users SSH-public-key
-SSHKEY=${SSHKEY:-$(cat /root/.ssh/id_rsa.pub)}
-if ! grep -q "${SSHKEY}" /root/.ssh/authorized_keys; then
-  cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
-fi
-
-# This will prevent showing dialogs during iptables-persistent installation?
-echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections
-echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections
-
-# Install basic packages known to be needed
-apt-get update && apt-get install -y bridge-utils ifenslave libvirt-bin lvm2 openssh-server python2.7 qemu-kvm ansible virtinst virt-manager \
-                                     vlan software-properties-common python-software-properties python-netaddr ntp qemu-utils lxc1 virtualenv \
-                                     iptables-persistent
-
-if ! grep "^source.*cfg$" /etc/network/interfaces; then
-  echo 'source /etc/network/interfaces.d/*.cfg' | tee -a /etc/network/interfaces
-fi
-
-# create kvm bridges
-cp -v templates/kvm-bonded-bridges.cfg /etc/network/interfaces.d/kvm-bridges.cfg
-
-# set network address
-sed -i "s|__NETWORK_BASE__|${NETWORK_BASE}|g" /etc/network/interfaces.d/kvm-bridges.cfg
-
-for i in $(awk '/iface/ {print $2}' /etc/network/interfaces.d/kvm-bridges.cfg); do
-  ifup $i
-done
-
-# Clean up stale NTP processes. This is because of BUG https://bugs.launchpad.net/ubuntu/+source/ntp/+bug/1125726
-pkill lockfile-create || true
-
-# Set the forward rule
-if ! grep -q '^net.ipv4.ip_forward' /etc/sysctl.conf; then
-  sysctl -w net.ipv4.ip_forward=1 | tee -a /etc/sysctl.conf
-fi
-
-# Add rules from the INPUT chain
-iptables_general_rule_add 'INPUT -i br-dhcp -p udp --dport 67 -j ACCEPT'
-iptables_general_rule_add 'INPUT -i br-dhcp -p tcp --dport 67 -j ACCEPT'
-iptables_general_rule_add 'INPUT -i br-dhcp -p udp --dport 53 -j ACCEPT'
-iptables_general_rule_add 'INPUT -i br-dhcp -p tcp --dport 53 -j ACCEPT'
-
-# Add rules from the FORWARDING chain
-iptables_general_rule_add 'FORWARD -i br-dhcp -j ACCEPT'
-iptables_general_rule_add 'FORWARD -o br-dhcp -j ACCEPT'
-
-# Add rules from the nat POSTROUTING chain
-iptables_filter_rule_add nat 'POSTROUTING -s 10.0.0.0/24 ! -d 10.0.0.0/24 -j MASQUERADE'
-
-# To provide internet connectivity to instances
-iptables_filter_rule_add nat "POSTROUTING -o $(ip route get 1 | awk '/dev/ {print $5}') -j MASQUERADE"
-
-# Add rules from the mangle POSTROUTING chain
-iptables_filter_rule_add mangle 'POSTROUTING -s 10.0.0.0/24 -o br-dhcp -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill'
-
-# To ensure ssh checksum are always correct
-iptables_filter_rule_add mangle 'POSTROUTING -p tcp -j CHECKSUM --checksum-fill'
-
-# save the iptables rules
-systemctl enable netfilter-persistent
-systemctl start netfilter-persistent
-invoke-rc.d netfilter-persistent save
-
-# Enable partitioning of the "${DATA_DISK_DEVICE}"
-PARTITION_HOST=${PARTITION_HOST:-false}
-if [[ "${PARTITION_HOST}" = true ]]; then
-  # Set the data disk device, if unset the largest unpartitioned device will be used to for host VMs
-  DATA_DISK_DEVICE="${DATA_DISK_DEVICE:-$(lsblk -brndo NAME,TYPE,FSTYPE,RO,SIZE | awk '/d[b-z]+ disk +0/{ if ($4>m){m=$4; d=$1}}; END{print d}')}"
-  parted --script /dev/${DATA_DISK_DEVICE} mklabel gpt
-  parted --align optimal --script /dev/${DATA_DISK_DEVICE} mkpart kvm ext4 0% 100%
-  mkfs.ext4 $FORCE_PARTITION /dev/${DATA_DISK_DEVICE}1
-  if ! grep -qw "^/dev/${DATA_DISK_DEVICE}1" /etc/fstab; then
-    echo "/dev/${DATA_DISK_DEVICE}1 /var/lib/libvirt/images/ ext4 defaults 0 0" >> /etc/fstab
-  fi
-  mount -a
-fi
-
-# Set the default OVERRIDE_SOURCES var
-OVERRIDE_SOURCES=${OVERRIDE_SOURCES:-true}
-if ( "${OVERRIDE_SOURCES}" == true )
-then
-  cat > /etc/apt/sources.list <<EOF
-  # Faster likely unsigned repo
-  deb [arch=amd64] http://mirror.rackspace.com/ubuntu xenial main universe
-  deb [arch=amd64] http://mirror.rackspace.com/ubuntu xenial-updates main universe
-  deb [arch=amd64] http://mirror.rackspace.com/ubuntu xenial-backports main universe
-  deb [arch=amd64] http://mirror.rackspace.com/ubuntu xenial-security main universe
-  # i386 comes from the global known repo. This is slower and so it is only used for i386 packages
-  deb [arch=i386] http://archive.ubuntu.com/ubuntu xenial main universe
-  deb [arch=i386] http://archive.ubuntu.com/ubuntu xenial-updates main universe
-  deb [arch=i386] http://archive.ubuntu.com/ubuntu xenial-backports main universe
-  deb [arch=i386] http://archive.ubuntu.com/ubuntu xenial-security main universe
-EOF
-fi
-
-# Allow apt repos to be UnAuthenticated
-cat > /etc/apt/apt.conf.d/00-nokey <<EOF
-APT { Get { AllowUnauthenticated "1"; }; };
-EOF
diff --git a/multi-node-aio-xenial-ansible/setup-pxeboot.sh b/multi-node-aio-xenial-ansible/setup-pxeboot.sh
deleted file mode 100755
index 926d5594..00000000
--- a/multi-node-aio-xenial-ansible/setup-pxeboot.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env bash
-set -eu
-# Copyright [2016] [Kevin Carter]
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Load all functions
-source functions.rc
-
-# bring in variable definitions if there is a variables.sh file
-[[ -f variables.sh ]] && source variables.sh
-
-# set up ssh key in case setup-infra is not run
-SSHKEY=${SSHKEY:-$(cat /root/.ssh/id_rsa.pub)}
-
-# Use Ansible to install and configure a DHCP server, TFTP server and Apache
-# so we can PXEboot all the VMs
-ansible-playbook -v -i inventory create_pxeboot_server.yml --extra-vars \
-          "vm_disk_device=${DEVICE_NAME} ssh_key=\"${SSHKEY}\" vm_net_iface=${DEFAULT_NETWORK}"
-sed -i 's/^INTERFACES.*/INTERFACES="br-dhcp"/g' /etc/default/isc-dhcp-server
-
-# Ensure the services are (re)started
-systemctl enable isc-dhcp-server
-systemctl enable atftpd
-systemctl start isc-dhcp-server
-systemctl start atftpd
-
-# Create a xenial sources file for the VMs to download
-cp -v templates/xenial-sources.list /var/www/html/xenial-sources.list
diff --git a/multi-node-aio-xenial-ansible/setup-virsh-net.sh b/multi-node-aio-xenial-ansible/setup-virsh-net.sh
deleted file mode 100755
index 2c5287df..00000000
--- a/multi-node-aio-xenial-ansible/setup-virsh-net.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env bash
-set -eu
-# Copyright [2016] [Kevin Carter]
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Load all functions
-source functions.rc
-
-# bring in variable definitions if there is a variables.sh file
-[[ -f variables.sh ]] && source variables.sh
-
-# Remove the default libvirt networks
-if virsh net-list |  grep -qw "default"; then
-  virsh net-autostart default --disable
-  virsh net-destroy default
-fi
-
-# Create the libvirt networks used for the Host VMs
-for network in br-dhcp vm-br-eth1 vm-br-eth2 vm-br-eth3 vm-br-eth4 vm-br-eth5; do
-  if ! virsh net-list |  grep -qw "${network}"; then
-    sed "s/__NETWORK__/${network}/g" templates/libvirt-network.xml > /etc/libvirt/qemu/networks/${network}.xml
-    virsh net-define --file /etc/libvirt/qemu/networks/${network}.xml
-    virsh net-create --file /etc/libvirt/qemu/networks/${network}.xml
-    virsh net-autostart ${network}
-  fi
-done
diff --git a/multi-node-aio-xenial-ansible/templates/kvm-bonded-bridges.cfg b/multi-node-aio-xenial-ansible/templates/kvm-bonded-bridges.cfg
deleted file mode 100644
index 0acff947..00000000
--- a/multi-node-aio-xenial-ansible/templates/kvm-bonded-bridges.cfg
+++ /dev/null
@@ -1,69 +0,0 @@
-# VLAN TAGS
-# 1100 - MANAGEMENT_NET
-# 1200 - OVERLAY_NET
-# 1300 - STORAGE_NET
-# 1400 - FLAT_NET
-
-#### BRIDGES USED FOR VM INTERFACES ####
-# MANAGEMENT Network
-auto vm-br-eth1
-iface vm-br-eth1 inet static
-    bridge_stp off
-    bridge_waitport 0
-    bridge_fd 0
-    bridge_ports none
-    address __NETWORK_BASE__.236.200
-    netmask 255.255.252.0
-    offload-sg off
-
-# FLAT Network
-auto vm-br-eth2
-iface vm-br-eth2 inet static
-    bridge_stp off
-    bridge_waitport 0
-    bridge_fd 0
-    bridge_ports none
-    address __NETWORK_BASE__.248.1
-    netmask 255.255.252.0
-    offload-sg off
-
-# VLAN Network
-auto vm-br-eth3
-iface vm-br-eth3 inet manual
-    bridge_stp off
-    bridge_waitport 0
-    bridge_fd 0
-    bridge_ports none
-    offload-sg off
-
-# TUNNEL Network
-auto vm-br-eth4
-iface vm-br-eth4 inet manual
-    bridge_stp off
-    bridge_waitport 0
-    bridge_fd 0
-    bridge_ports none
-    offload-sg off
-
-# STORAGE Network
-auto vm-br-eth5
-iface vm-br-eth5 inet manual
-    bridge_stp off
-    bridge_waitport 0
-    bridge_fd 0
-    bridge_ports none
-    offload-sg off
-#### INTERFACES USED FOR VM BRIDGES ####
-
-
-#### SYSTEM INTEGRATION DEVICES ####
-auto br-dhcp
-iface br-dhcp inet static
-    bridge_stp off
-    bridge_waitport 0
-    bridge_fd 0
-    bridge_ports none
-    address 10.0.0.200
-    netmask 255.255.255.0
-    offload-sg off
-#### SYSTEM INTEGRATION DEVICES ####
diff --git a/multi-node-aio-xenial-ansible/templates/libvirt-network.xml b/multi-node-aio-xenial-ansible/templates/libvirt-network.xml
deleted file mode 100644
index 1c10ff99..00000000
--- a/multi-node-aio-xenial-ansible/templates/libvirt-network.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<network>
-  <name>__NETWORK__</name>
-  <forward mode="bridge"/>
-  <bridge name="__NETWORK__"/>
-</network>
\ No newline at end of file
diff --git a/multi-node-aio-xenial-ansible/templates/network-interfaces/vm.openstackci.local-bonded-bridges.cfg b/multi-node-aio-xenial-ansible/templates/network-interfaces/vm.openstackci.local-bonded-bridges.cfg
deleted file mode 100644
index 48552564..00000000
--- a/multi-node-aio-xenial-ansible/templates/network-interfaces/vm.openstackci.local-bonded-bridges.cfg
+++ /dev/null
@@ -1,76 +0,0 @@
-## Physical interface, could be bond. This only needs to be set once for the physical device
-# MANAGEMENT Network
-auto __ETH_TYPE__1
-iface __ETH_TYPE__1 inet manual
-
-# FLAT Network
-auto __ETH_TYPE__2
-iface __ETH_TYPE__2 inet manual
-
-# VLAN Network
-auto __ETH_TYPE__3
-iface __ETH_TYPE__3 inet manual
-
-# TUNNEL Network
-auto __ETH_TYPE__4
-iface __ETH_TYPE__4 inet manual
-
-# STORAGE Network
-auto __ETH_TYPE__5
-iface __ETH_TYPE__5 inet manual
-
-auto br-mgmt
-iface br-mgmt inet static
-    bridge_stp off
-    bridge_waitport 10
-    bridge_fd 0
-    bridge_ports __ETH_TYPE__1
-    address __NETWORK_BASE__.236.__COUNT__
-    netmask 255.255.252.0
-    offload-sg off
-
-auto br-flat
-iface br-flat inet static
-    bridge_stp off
-    bridge_waitport 10
-    bridge_fd 0
-    bridge_ports __ETH_TYPE__2
-    address __NETWORK_BASE__.248.__COUNT__
-    netmask 255.255.252.0
-    offload-sg off
-
-auto br-vlan
-iface br-vlan inet manual
-    bridge_stp off
-    bridge_waitport 10
-    bridge_fd 0
-    bridge_ports __ETH_TYPE__3
-    offload-sg off
-
-auto br-vxlan
-iface br-vxlan inet static
-    bridge_stp off
-    bridge_waitport 10
-    bridge_fd 0
-    bridge_ports __ETH_TYPE__4
-    address __NETWORK_BASE__.240.__COUNT__
-    netmask 255.255.252.0
-    offload-sg off
-    # To ensure ssh checksum is correct
-    up /sbin/iptables -A POSTROUTING -t mangle -p tcp --dport 22 -j CHECKSUM --checksum-fill
-    down /sbin/iptables -D POSTROUTING -t mangle -p tcp --dport 22 -j CHECKSUM --checksum-fill
-    # To provide internet connectivity to instances
-    up /sbin/iptables -t nat -A POSTROUTING -o __DEFAULT_NETWORK__ -j MASQUERADE
-    down /sbin/iptables -t nat -D POSTROUTING -o __DEFAULT_NETWORK__ -j MASQUERADE
-    # Make sure instances can talk to the metadata server
-    up /sbin/iptables -t mangle -A POSTROUTING -p tcp --sport 80 -j CHECKSUM --checksum-fill
-
-auto br-storage
-iface br-storage inet static
-    bridge_stp off
-    bridge_waitport 10
-    bridge_fd 0
-    bridge_ports __ETH_TYPE__5
-    address __NETWORK_BASE__.244.__COUNT__
-    netmask 255.255.252.0
-    offload-sg off
diff --git a/multi-node-aio-xenial-ansible/templates/openstack_user_config.yml b/multi-node-aio-xenial-ansible/templates/openstack_user_config.yml
deleted file mode 100644
index 87d76c61..00000000
--- a/multi-node-aio-xenial-ansible/templates/openstack_user_config.yml
+++ /dev/null
@@ -1,75 +0,0 @@
----
-cidr_networks:
-  container: __NETWORK_BASE__.236.0/22
-  tunnel: __NETWORK_BASE__.240.0/22
-  storage: __NETWORK_BASE__.244.0/22
-
-used_ips:
-  - "__NETWORK_BASE__.236.0,__NETWORK_BASE__.236.200"
-  - "__NETWORK_BASE__.240.0,__NETWORK_BASE__.240.200"
-  - "__NETWORK_BASE__.244.0,__NETWORK_BASE__.244.200"
-  - "__NETWORK_BASE__.248.0,__NETWORK_BASE__.248.200"
-
-global_overrides:
-  internal_lb_vip_address: __NETWORK_BASE__.236.150
-  # The external IP is quoted simply to ensure that the .aio file can be used as input
-  # dynamic inventory testing.
-  external_lb_vip_address: "__HOSTIP__"
-  tunnel_bridge: "br-vxlan"
-  management_bridge: "br-mgmt"
-  provider_networks:
-    - network:
-        container_bridge: "br-mgmt"
-        container_type: "veth"
-        container_interface: "eth1"
-        ip_from_q: "container"
-        type: "raw"
-        group_binds:
-          - all_containers
-          - hosts
-        is_container_address: true
-        is_ssh_address: true
-    - network:
-        container_bridge: "br-vxlan"
-        container_type: "veth"
-        container_interface: "eth10"
-        ip_from_q: "tunnel"
-        type: "vxlan"
-        range: "1:1000"
-        net_name: "vxlan"
-        group_binds:
-          - neutron_linuxbridge_agent
-    - network:
-        container_bridge: "br-flat"
-        container_type: "veth"
-        container_interface: "eth12"
-        type: "flat"
-        net_name: "flat"
-        group_binds:
-          - neutron_linuxbridge_agent
-          - utility_all
-    - network:
-        container_bridge: "br-vlan"
-        container_type: "veth"
-        container_interface: "eth11"
-        type: "vlan"
-        range: "1:1"
-        net_name: "vlan"
-        group_binds:
-          - neutron_linuxbridge_agent
-    - network:
-        container_bridge: "br-storage"
-        container_type: "veth"
-        container_interface: "eth2"
-        ip_from_q: "storage"
-        type: "raw"
-        group_binds:
-          - glance_api
-          - cinder_api
-          - cinder_volume
-          - nova_compute
-          - swift_proxy
-
-haproxy_hosts:
-  loadbalancer1:
-    ip: __NETWORK_BASE__.236.150
diff --git a/multi-node-aio-xenial-ansible/templates/osa-swift.yml b/multi-node-aio-xenial-ansible/templates/osa-swift.yml
deleted file mode 100644
index cb522b94..00000000
--- a/multi-node-aio-xenial-ansible/templates/osa-swift.yml
+++ /dev/null
@@ -1,16 +0,0 @@
----
-global_overrides:
-  swift:
-    part_power: 8
-    storage_network: 'br-storage'
-    replication_network: 'br-storage'
-    drives:
-      - name: disk1
-      - name: disk2
-      - name: disk3
-    mount_point: /srv
-    storage_policies:
-      - policy:
-          name: default
-          index: 0
-          default: True
diff --git a/multi-node-aio-xenial-ansible/templates/vmnode-config/cinder.openstackci.local.xml b/multi-node-aio-xenial-ansible/templates/vmnode-config/cinder.openstackci.local.xml
deleted file mode 100644
index dc3cf631..00000000
--- a/multi-node-aio-xenial-ansible/templates/vmnode-config/cinder.openstackci.local.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<domain type='kvm'>
-  <name>__NODE__.openstackci.local</name>
-  <memory unit='GiB'>12</memory>
-  <currentMemory unit='GiB'>4</currentMemory>
-  <vcpu placement='static'>2</vcpu>
-  <resource>
-    <partition>/machine</partition>
-  </resource>
-  <os>
-    <type arch='x86_64' machine='pc-i440fx-__CONTAINER_VMS__'>hvm</type>
-  </os>
-  <features>
-    <acpi/>
-    <apic/>
-  </features>
-  <cpu mode='host-model'>
-    <model fallback='allow'/>
-  </cpu>
-  <clock offset='utc'>
-    <timer name='rtc' tickpolicy='catchup'/>
-    <timer name='pit' tickpolicy='delay'/>
-    <timer name='hpet' present='no'/>
-  </clock>
-  <on_poweroff>destroy</on_poweroff>
-  <on_reboot>restart</on_reboot>
-  <on_crash>restart</on_crash>
-  <pm>
-    <suspend-to-mem enabled='no'/>
-    <suspend-to-disk enabled='no'/>
-  </pm>
-  <devices>
-    <disk type='file' device='disk'>
-      <driver name='qemu' type='qcow2' cache='none' io='native'/>
-      <source file='/var/lib/libvirt/images/__NODE__.openstackci.local.img'/>
-      <target dev='__DEVICE_NAME__' bus='virtio'/>
-      <boot order='1'/>
-      <alias name='virtio-disk0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
-    </disk>
-    <controller type='pci' index='0' model='pci-root'>
-      <alias name='pci.0'/>
-    </controller>
-    <controller type='virtio-serial' index='0'>
-      <alias name='virtio-serial0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
-    </controller>
-    <interface type='bridge'>
-      <mac address="52:54:00:bd:81:__COUNT__"/>
-      <source bridge='br-dhcp'/>
-      <target dev='vnet0'/>
-      <model type='virtio'/>
-      <boot order='2'/>
-      <alias name='net0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:fd:7f:__COUNT__"/>
-      <source bridge='vm-br-eth1'/>
-      <target dev='vnet1'/>
-      <model type='virtio'/>
-      <boot order='3'/>
-      <alias name='net1'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:f5:44:__COUNT__"/>
-      <source bridge='vm-br-eth2'/>
-      <target dev='vnet2'/>
-      <model type='virtio'/>
-      <boot order='4'/>
-      <alias name='net2'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:1f:96:__COUNT__"/>
-      <source bridge='vm-br-eth3'/>
-      <target dev='vnet3'/>
-      <model type='virtio'/>
-      <boot order='5'/>
-      <alias name='net3'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:50:03:__COUNT__"/>
-      <source bridge='vm-br-eth4'/>
-      <target dev='vnet4'/>
-      <model type='virtio'/>
-      <boot order='6'/>
-      <alias name='net4'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0d' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:2d:12:__COUNT__"/>
-      <source bridge='vm-br-eth5'/>
-      <target dev='vnet5'/>
-      <model type='virtio'/>
-      <boot order='7'/>
-      <alias name='net5'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0e' function='0x0'/>
-    </interface>
-    <serial type='pty'>
-      <source path='/dev/pts/4'/>
-      <target port='0'/>
-      <alias name='serial0'/>
-    </serial>
-    <console type='pty' tty='/dev/pts/4'>
-      <source path='/dev/pts/4'/>
-      <target type='serial' port='0'/>
-      <alias name='serial0'/>
-    </console>
-    <input type='mouse' bus='ps2'/>
-    <input type='keyboard' bus='ps2'/>
-    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
-      <listen type='address' address='127.0.0.1'/>
-    </graphics>
-    <video>
-      <model type='vmvga' vram='9216' heads='1'/>
-      <alias name='video0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
-    </video>
-    <memballoon model='virtio'>
-      <alias name='balloon0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
-    </memballoon>
-    <rng model='virtio'>
-      <backend model='random'>/dev/random</backend>
-      <alias name='rng0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
-    </rng>
-  </devices>
-</domain>
diff --git a/multi-node-aio-xenial-ansible/templates/vmnode-config/deploy.openstackci.local.xml b/multi-node-aio-xenial-ansible/templates/vmnode-config/deploy.openstackci.local.xml
deleted file mode 100644
index 4a1ef1b7..00000000
--- a/multi-node-aio-xenial-ansible/templates/vmnode-config/deploy.openstackci.local.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<domain type='kvm'>
-  <name>__NODE__.openstackci.local</name>
-  <memory unit='GiB'>4</memory>
-  <currentMemory unit='GiB'>4</currentMemory>
-  <vcpu placement='static'>4</vcpu>
-  <resource>
-    <partition>/machine</partition>
-  </resource>
-  <os>
-    <type arch='x86_64' machine='pc-i440fx-trusty'>hvm</type>
-  </os>
-  <features>
-    <acpi/>
-    <apic/>
-  </features>
-  <cpu mode='host-model'>
-    <model fallback='allow'/>
-  </cpu>
-  <clock offset='utc'>
-    <timer name='rtc' tickpolicy='catchup'/>
-    <timer name='pit' tickpolicy='delay'/>
-    <timer name='hpet' present='no'/>
-  </clock>
-  <on_poweroff>destroy</on_poweroff>
-  <on_reboot>restart</on_reboot>
-  <on_crash>restart</on_crash>
-  <pm>
-    <suspend-to-mem enabled='no'/>
-    <suspend-to-disk enabled='no'/>
-  </pm>
-  <devices>
-    <disk type='file' device='disk'>
-      <driver name='qemu' type='qcow2' cache='none' io='native'/>
-      <source file='/var/lib/libvirt/images/__NODE__.openstackci.local.img'/>
-      <target dev='__DEVICE_NAME__' bus='virtio'/>
-      <boot order='1'/>
-      <alias name='virtio-disk0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
-    </disk>
-    <controller type='pci' index='0' model='pci-root'>
-      <alias name='pci.0'/>
-    </controller>
-    <controller type='virtio-serial' index='0'>
-      <alias name='virtio-serial0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
-    </controller>
-    <interface type='bridge'>
-      <mac address="52:54:00:bd:81:__COUNT__"/>
-      <source bridge='br-dhcp'/>
-      <target dev='vnet0'/>
-      <model type='virtio'/>
-      <boot order='2'/>
-      <alias name='net0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:fd:7f:__COUNT__"/>
-      <source bridge='vm-br-eth1'/>
-      <target dev='vnet1'/>
-      <model type='virtio'/>
-      <boot order='3'/>
-      <alias name='net1'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:f5:44:__COUNT__"/>
-      <source bridge='vm-br-eth2'/>
-      <target dev='vnet2'/>
-      <model type='virtio'/>
-      <boot order='4'/>
-      <alias name='net2'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:1f:96:__COUNT__"/>
-      <source bridge='vm-br-eth3'/>
-      <target dev='vnet3'/>
-      <model type='virtio'/>
-      <boot order='5'/>
-      <alias name='net3'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:50:03:__COUNT__"/>
-      <source bridge='vm-br-eth4'/>
-      <target dev='vnet4'/>
-      <model type='virtio'/>
-      <boot order='6'/>
-      <alias name='net4'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0d' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:2d:12:__COUNT__"/>
-      <source bridge='vm-br-eth5'/>
-      <target dev='vnet5'/>
-      <model type='virtio'/>
-      <boot order='7'/>
-      <alias name='net5'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0e' function='0x0'/>
-    </interface>
-    <serial type='pty'>
-      <source path='/dev/pts/4'/>
-      <target port='0'/>
-      <alias name='serial0'/>
-    </serial>
-    <console type='pty' tty='/dev/pts/4'>
-      <source path='/dev/pts/4'/>
-      <target type='serial' port='0'/>
-      <alias name='serial0'/>
-    </console>
-    <input type='mouse' bus='ps2'/>
-    <input type='keyboard' bus='ps2'/>
-    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
-      <listen type='address' address='127.0.0.1'/>
-    </graphics>
-    <video>
-      <model type='vmvga' vram='1024' heads='1'/>
-      <alias name='video0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
-    </video>
-    <memballoon model='virtio'>
-      <alias name='balloon0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
-    </memballoon>
-    <rng model='virtio'>
-      <backend model='random'>/dev/random</backend>
-      <alias name='rng0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
-    </rng>
-  </devices>
-</domain>
diff --git a/multi-node-aio-xenial-ansible/templates/vmnode-config/infra.openstackci.local.xml b/multi-node-aio-xenial-ansible/templates/vmnode-config/infra.openstackci.local.xml
deleted file mode 100644
index 23d4b0bf..00000000
--- a/multi-node-aio-xenial-ansible/templates/vmnode-config/infra.openstackci.local.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<domain type='kvm'>
-  <name>__NODE__.openstackci.local</name>
-  <memory unit='GiB'>12</memory>
-  <currentMemory unit='GiB'>12</currentMemory>
-  <vcpu placement='static'>10</vcpu>
-  <resource>
-    <partition>/machine</partition>
-  </resource>
-  <os>
-    <type arch='x86_64' machine='pc-i440fx-__CONTAINER_VMS__'>hvm</type>
-  </os>
-  <features>
-    <acpi/>
-    <apic/>
-  </features>
-  <cpu mode='host-model'>
-    <model fallback='allow'/>
-  </cpu>
-  <clock offset='utc'>
-    <timer name='rtc' tickpolicy='catchup'/>
-    <timer name='pit' tickpolicy='delay'/>
-    <timer name='hpet' present='no'/>
-  </clock>
-  <on_poweroff>destroy</on_poweroff>
-  <on_reboot>restart</on_reboot>
-  <on_crash>restart</on_crash>
-  <pm>
-    <suspend-to-mem enabled='no'/>
-    <suspend-to-disk enabled='no'/>
-  </pm>
-  <devices>
-    <disk type='file' device='disk'>
-      <driver name='qemu' type='qcow2' cache='none' io='native'/>
-      <source file='/var/lib/libvirt/images/__NODE__.openstackci.local.img'/>
-      <target dev='__DEVICE_NAME__' bus='virtio'/>
-      <boot order='1'/>
-      <alias name='virtio-disk0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
-    </disk>
-    <controller type='pci' index='0' model='pci-root'>
-      <alias name='pci.0'/>
-    </controller>
-    <controller type='virtio-serial' index='0'>
-      <alias name='virtio-serial0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
-    </controller>
-    <interface type='bridge'>
-      <mac address="52:54:00:bd:81:__COUNT__"/>
-      <source bridge='br-dhcp'/>
-      <target dev='vnet0'/>
-      <model type='virtio'/>
-      <boot order='2'/>
-      <alias name='net0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:fd:7f:__COUNT__"/>
-      <source bridge='vm-br-eth1'/>
-      <target dev='vnet1'/>
-      <model type='virtio'/>
-      <boot order='3'/>
-      <alias name='net1'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:f5:44:__COUNT__"/>
-      <source bridge='vm-br-eth2'/>
-      <target dev='vnet2'/>
-      <model type='virtio'/>
-      <boot order='4'/>
-      <alias name='net2'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:1f:96:__COUNT__"/>
-      <source bridge='vm-br-eth3'/>
-      <target dev='vnet3'/>
-      <model type='virtio'/>
-      <boot order='5'/>
-      <alias name='net3'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:50:03:__COUNT__"/>
-      <source bridge='vm-br-eth4'/>
-      <target dev='vnet4'/>
-      <model type='virtio'/>
-      <boot order='6'/>
-      <alias name='net4'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0d' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:2d:12:__COUNT__"/>
-      <source bridge='vm-br-eth5'/>
-      <target dev='vnet5'/>
-      <model type='virtio'/>
-      <boot order='7'/>
-      <alias name='net5'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0e' function='0x0'/>
-    </interface>
-    <serial type='pty'>
-      <source path='/dev/pts/4'/>
-      <target port='0'/>
-      <alias name='serial0'/>
-    </serial>
-    <console type='pty' tty='/dev/pts/4'>
-      <source path='/dev/pts/4'/>
-      <target type='serial' port='0'/>
-      <alias name='serial0'/>
-    </console>
-    <input type='mouse' bus='ps2'/>
-    <input type='keyboard' bus='ps2'/>
-    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
-      <listen type='address' address='127.0.0.1'/>
-    </graphics>
-    <video>
-      <model type='vmvga' vram='9216' heads='1'/>
-      <alias name='video0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
-    </video>
-    <memballoon model='virtio'>
-      <alias name='balloon0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
-    </memballoon>
-    <rng model='virtio'>
-      <backend model='random'>/dev/random</backend>
-      <alias name='rng0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
-    </rng>
-  </devices>
-</domain>
diff --git a/multi-node-aio-xenial-ansible/templates/vmnode-config/logging.openstackci.local.xml b/multi-node-aio-xenial-ansible/templates/vmnode-config/logging.openstackci.local.xml
deleted file mode 100644
index 7eacf301..00000000
--- a/multi-node-aio-xenial-ansible/templates/vmnode-config/logging.openstackci.local.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<domain type='kvm'>
-  <name>__NODE__.openstackci.local</name>
-  <memory unit='GiB'>2</memory>
-  <currentMemory unit='GiB'>2</currentMemory>
-  <vcpu placement='static'>2</vcpu>
-  <resource>
-    <partition>/machine</partition>
-  </resource>
-  <os>
-    <type arch='x86_64' machine='pc-i440fx-__CONTAINER_VMS__'>hvm</type>
-  </os>
-  <features>
-    <acpi/>
-    <apic/>
-  </features>
-  <cpu mode='host-model'>
-    <model fallback='allow'/>
-  </cpu>
-  <clock offset='utc'>
-    <timer name='rtc' tickpolicy='catchup'/>
-    <timer name='pit' tickpolicy='delay'/>
-    <timer name='hpet' present='no'/>
-  </clock>
-  <on_poweroff>destroy</on_poweroff>
-  <on_reboot>restart</on_reboot>
-  <on_crash>restart</on_crash>
-  <pm>
-    <suspend-to-mem enabled='no'/>
-    <suspend-to-disk enabled='no'/>
-  </pm>
-  <devices>
-    <disk type='file' device='disk'>
-      <driver name='qemu' type='qcow2' cache='none' io='native'/>
-      <source file='/var/lib/libvirt/images/__NODE__.openstackci.local.img'/>
-      <target dev='__DEVICE_NAME__' bus='virtio'/>
-      <boot order='1'/>
-      <alias name='virtio-disk0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
-    </disk>
-    <controller type='pci' index='0' model='pci-root'>
-      <alias name='pci.0'/>
-    </controller>
-    <controller type='virtio-serial' index='0'>
-      <alias name='virtio-serial0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
-    </controller>
-    <interface type='bridge'>
-      <mac address="52:54:00:bd:81:__COUNT__"/>
-      <source bridge='br-dhcp'/>
-      <target dev='vnet0'/>
-      <model type='virtio'/>
-      <boot order='2'/>
-      <alias name='net0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:fd:7f:__COUNT__"/>
-      <source bridge='vm-br-eth1'/>
-      <target dev='vnet1'/>
-      <model type='virtio'/>
-      <boot order='3'/>
-      <alias name='net1'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:f5:44:__COUNT__"/>
-      <source bridge='vm-br-eth2'/>
-      <target dev='vnet2'/>
-      <model type='virtio'/>
-      <boot order='4'/>
-      <alias name='net2'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:1f:96:__COUNT__"/>
-      <source bridge='vm-br-eth3'/>
-      <target dev='vnet3'/>
-      <model type='virtio'/>
-      <boot order='5'/>
-      <alias name='net3'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:50:03:__COUNT__"/>
-      <source bridge='vm-br-eth4'/>
-      <target dev='vnet4'/>
-      <model type='virtio'/>
-      <boot order='6'/>
-      <alias name='net4'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0d' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:2d:12:__COUNT__"/>
-      <source bridge='vm-br-eth5'/>
-      <target dev='vnet5'/>
-      <model type='virtio'/>
-      <boot order='7'/>
-      <alias name='net5'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0e' function='0x0'/>
-    </interface>
-    <serial type='pty'>
-      <source path='/dev/pts/4'/>
-      <target port='0'/>
-      <alias name='serial0'/>
-    </serial>
-    <console type='pty' tty='/dev/pts/4'>
-      <source path='/dev/pts/4'/>
-      <target type='serial' port='0'/>
-      <alias name='serial0'/>
-    </console>
-    <input type='mouse' bus='ps2'/>
-    <input type='keyboard' bus='ps2'/>
-    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
-      <listen type='address' address='127.0.0.1'/>
-    </graphics>
-    <video>
-      <model type='vmvga' vram='9216' heads='1'/>
-      <alias name='video0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
-    </video>
-    <memballoon model='virtio'>
-      <alias name='balloon0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
-    </memballoon>
-    <rng model='virtio'>
-      <backend model='random'>/dev/random</backend>
-      <alias name='rng0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
-    </rng>
-  </devices>
-</domain>
diff --git a/multi-node-aio-xenial-ansible/templates/vmnode-config/network.openstackci.local.xml b/multi-node-aio-xenial-ansible/templates/vmnode-config/network.openstackci.local.xml
deleted file mode 100644
index 9d59a617..00000000
--- a/multi-node-aio-xenial-ansible/templates/vmnode-config/network.openstackci.local.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<domain type='kvm'>
-  <name>__NODE__.openstackci.local</name>
-  <memory unit='GiB'>12</memory>
-  <currentMemory unit='GiB'>6</currentMemory>
-  <vcpu placement='static'>4</vcpu>
-  <resource>
-    <partition>/machine</partition>
-  </resource>
-  <os>
-    <type arch='x86_64' machine='pc-i440fx-__CONTAINER_VMS__'>hvm</type>
-  </os>
-  <features>
-    <acpi/>
-    <apic/>
-  </features>
-  <cpu mode='host-model'>
-    <model fallback='allow'/>
-  </cpu>
-  <clock offset='utc'>
-    <timer name='rtc' tickpolicy='catchup'/>
-    <timer name='pit' tickpolicy='delay'/>
-    <timer name='hpet' present='no'/>
-  </clock>
-  <on_poweroff>destroy</on_poweroff>
-  <on_reboot>restart</on_reboot>
-  <on_crash>restart</on_crash>
-  <pm>
-    <suspend-to-mem enabled='no'/>
-    <suspend-to-disk enabled='no'/>
-  </pm>
-  <devices>
-    <disk type='file' device='disk'>
-      <driver name='qemu' type='qcow2' cache='none' io='native'/>
-      <source file='/var/lib/libvirt/images/__NODE__.openstackci.local.img'/>
-      <target dev='__DEVICE_NAME__' bus='virtio'/>
-      <boot order='1'/>
-      <alias name='virtio-disk0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
-    </disk>
-    <controller type='pci' index='0' model='pci-root'>
-      <alias name='pci.0'/>
-    </controller>
-    <controller type='virtio-serial' index='0'>
-      <alias name='virtio-serial0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
-    </controller>
-    <interface type='bridge'>
-      <mac address="52:54:00:bd:81:__COUNT__"/>
-      <source bridge='br-dhcp'/>
-      <target dev='vnet0'/>
-      <model type='virtio'/>
-      <boot order='2'/>
-      <alias name='net0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:fd:7f:__COUNT__"/>
-      <source bridge='vm-br-eth1'/>
-      <target dev='vnet1'/>
-      <model type='virtio'/>
-      <boot order='3'/>
-      <alias name='net1'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:f5:44:__COUNT__"/>
-      <source bridge='vm-br-eth2'/>
-      <target dev='vnet2'/>
-      <model type='virtio'/>
-      <boot order='4'/>
-      <alias name='net2'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:1f:96:__COUNT__"/>
-      <source bridge='vm-br-eth3'/>
-      <target dev='vnet3'/>
-      <model type='virtio'/>
-      <boot order='5'/>
-      <alias name='net3'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:50:03:__COUNT__"/>
-      <source bridge='vm-br-eth4'/>
-      <target dev='vnet4'/>
-      <model type='virtio'/>
-      <boot order='6'/>
-      <alias name='net4'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0d' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:2d:12:__COUNT__"/>
-      <source bridge='vm-br-eth5'/>
-      <target dev='vnet5'/>
-      <model type='virtio'/>
-      <boot order='7'/>
-      <alias name='net5'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0e' function='0x0'/>
-    </interface>
-    <serial type='pty'>
-      <source path='/dev/pts/4'/>
-      <target port='0'/>
-      <alias name='serial0'/>
-    </serial>
-    <console type='pty' tty='/dev/pts/4'>
-      <source path='/dev/pts/4'/>
-      <target type='serial' port='0'/>
-      <alias name='serial0'/>
-    </console>
-    <input type='mouse' bus='ps2'/>
-    <input type='keyboard' bus='ps2'/>
-    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
-      <listen type='address' address='127.0.0.1'/>
-    </graphics>
-    <video>
-      <model type='vmvga' vram='9216' heads='1'/>
-      <alias name='video0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
-    </video>
-    <memballoon model='virtio'>
-      <alias name='balloon0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
-    </memballoon>
-    <rng model='virtio'>
-      <backend model='random'>/dev/random</backend>
-      <alias name='rng0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
-    </rng>
-  </devices>
-</domain>
diff --git a/multi-node-aio-xenial-ansible/templates/vmnode-config/nova_compute.openstackci.local.xml b/multi-node-aio-xenial-ansible/templates/vmnode-config/nova_compute.openstackci.local.xml
deleted file mode 100644
index ce03136f..00000000
--- a/multi-node-aio-xenial-ansible/templates/vmnode-config/nova_compute.openstackci.local.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<domain type='kvm'>
-  <name>__NODE__.openstackci.local</name>
-  <memory unit='GiB'>24</memory>
-  <currentMemory unit='GiB'>8</currentMemory>
-  <vcpu placement='static'>8</vcpu>
-  <resource>
-    <partition>/machine</partition>
-  </resource>
-  <os>
-    <type arch='x86_64' machine='pc-i440fx-__CONTAINER_VMS__'>hvm</type>
-  </os>
-  <features>
-    <acpi/>
-    <apic/>
-  </features>
-  <cpu mode='host-model'>
-    <model fallback='allow'/>
-  </cpu>
-  <clock offset='utc'>
-    <timer name='rtc' tickpolicy='catchup'/>
-    <timer name='pit' tickpolicy='delay'/>
-    <timer name='hpet' present='no'/>
-  </clock>
-  <on_poweroff>destroy</on_poweroff>
-  <on_reboot>restart</on_reboot>
-  <on_crash>restart</on_crash>
-  <pm>
-    <suspend-to-mem enabled='no'/>
-    <suspend-to-disk enabled='no'/>
-  </pm>
-  <devices>
-    <disk type='file' device='disk'>
-      <driver name='qemu' type='qcow2' cache='none' io='native'/>
-      <source file='/var/lib/libvirt/images/__NODE__.openstackci.local.img'/>
-      <target dev='__DEVICE_NAME__' bus='virtio'/>
-      <boot order='1'/>
-      <alias name='virtio-disk0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
-    </disk>
-    <controller type='pci' index='0' model='pci-root'>
-      <alias name='pci.0'/>
-    </controller>
-    <controller type='virtio-serial' index='0'>
-      <alias name='virtio-serial0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
-    </controller>
-    <interface type='bridge'>
-      <mac address="52:54:00:bd:81:__COUNT__"/>
-      <source bridge='br-dhcp'/>
-      <target dev='vnet0'/>
-      <model type='virtio'/>
-      <boot order='2'/>
-      <alias name='net0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:fd:7f:__COUNT__"/>
-      <source bridge='vm-br-eth1'/>
-      <target dev='vnet1'/>
-      <model type='virtio'/>
-      <boot order='3'/>
-      <alias name='net1'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:f5:44:__COUNT__"/>
-      <source bridge='vm-br-eth2'/>
-      <target dev='vnet2'/>
-      <model type='virtio'/>
-      <boot order='4'/>
-      <alias name='net2'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:1f:96:__COUNT__"/>
-      <source bridge='vm-br-eth3'/>
-      <target dev='vnet3'/>
-      <model type='virtio'/>
-      <boot order='5'/>
-      <alias name='net3'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:50:03:__COUNT__"/>
-      <source bridge='vm-br-eth4'/>
-      <target dev='vnet4'/>
-      <model type='virtio'/>
-      <boot order='6'/>
-      <alias name='net4'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0d' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:2d:12:__COUNT__"/>
-      <source bridge='vm-br-eth5'/>
-      <target dev='vnet5'/>
-      <model type='virtio'/>
-      <boot order='7'/>
-      <alias name='net5'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0e' function='0x0'/>
-    </interface>
-    <serial type='pty'>
-      <source path='/dev/pts/4'/>
-      <target port='0'/>
-      <alias name='serial0'/>
-    </serial>
-    <console type='pty' tty='/dev/pts/4'>
-      <source path='/dev/pts/4'/>
-      <target type='serial' port='0'/>
-      <alias name='serial0'/>
-    </console>
-    <input type='mouse' bus='ps2'/>
-    <input type='keyboard' bus='ps2'/>
-    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
-      <listen type='address' address='127.0.0.1'/>
-    </graphics>
-    <video>
-      <model type='vmvga' vram='9216' heads='1'/>
-      <alias name='video0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
-    </video>
-    <memballoon model='virtio'>
-      <alias name='balloon0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
-    </memballoon>
-    <rng model='virtio'>
-      <backend model='random'>/dev/random</backend>
-      <alias name='rng0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
-    </rng>
-  </devices>
-</domain>
diff --git a/multi-node-aio-xenial-ansible/templates/vmnode-config/swift.openstackci.local.xml b/multi-node-aio-xenial-ansible/templates/vmnode-config/swift.openstackci.local.xml
deleted file mode 100644
index 25fd679a..00000000
--- a/multi-node-aio-xenial-ansible/templates/vmnode-config/swift.openstackci.local.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<domain type='kvm'>
-  <name>__NODE__.openstackci.local</name>
-  <memory unit='GiB'>4</memory>
-  <currentMemory unit='GiB'>4</currentMemory>
-  <vcpu placement='static'>4</vcpu>
-  <resource>
-    <partition>/machine</partition>
-  </resource>
-  <os>
-    <type arch='x86_64' machine='pc-i440fx-__CONTAINER_VMS__'>hvm</type>
-  </os>
-  <features>
-    <acpi/>
-    <apic/>
-  </features>
-  <cpu mode='host-model'>
-    <model fallback='allow'/>
-  </cpu>
-  <clock offset='utc'>
-    <timer name='rtc' tickpolicy='catchup'/>
-    <timer name='pit' tickpolicy='delay'/>
-    <timer name='hpet' present='no'/>
-  </clock>
-  <on_poweroff>destroy</on_poweroff>
-  <on_reboot>restart</on_reboot>
-  <on_crash>restart</on_crash>
-  <pm>
-    <suspend-to-mem enabled='no'/>
-    <suspend-to-disk enabled='no'/>
-  </pm>
-  <devices>
-    <disk type='file' device='disk'>
-      <driver name='qemu' type='qcow2' cache='none' io='native'/>
-      <source file='/var/lib/libvirt/images/__NODE__.openstackci.local.img'/>
-      <target dev='__DEVICE_NAME__' bus='virtio'/>
-      <boot order='1'/>
-      <alias name='virtio-disk0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
-    </disk>
-    <controller type='pci' index='0' model='pci-root'>
-      <alias name='pci.0'/>
-    </controller>
-    <controller type='virtio-serial' index='0'>
-      <alias name='virtio-serial0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
-    </controller>
-    <interface type='bridge'>
-      <mac address="52:54:00:bd:81:__COUNT__"/>
-      <source bridge='br-dhcp'/>
-      <target dev='vnet0'/>
-      <model type='virtio'/>
-      <boot order='2'/>
-      <alias name='net0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:fd:7f:__COUNT__"/>
-      <source bridge='vm-br-eth1'/>
-      <target dev='vnet1'/>
-      <model type='virtio'/>
-      <boot order='3'/>
-      <alias name='net1'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:f5:44:__COUNT__"/>
-      <source bridge='vm-br-eth2'/>
-      <target dev='vnet2'/>
-      <model type='virtio'/>
-      <boot order='4'/>
-      <alias name='net2'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:1f:96:__COUNT__"/>
-      <source bridge='vm-br-eth3'/>
-      <target dev='vnet3'/>
-      <model type='virtio'/>
-      <boot order='5'/>
-      <alias name='net3'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:50:03:__COUNT__"/>
-      <source bridge='vm-br-eth4'/>
-      <target dev='vnet4'/>
-      <model type='virtio'/>
-      <boot order='6'/>
-      <alias name='net4'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0d' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:2d:12:__COUNT__"/>
-      <source bridge='vm-br-eth5'/>
-      <target dev='vnet5'/>
-      <model type='virtio'/>
-      <boot order='7'/>
-      <alias name='net5'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0e' function='0x0'/>
-    </interface>
-    <serial type='pty'>
-      <source path='/dev/pts/4'/>
-      <target port='0'/>
-      <alias name='serial0'/>
-    </serial>
-    <console type='pty' tty='/dev/pts/4'>
-      <source path='/dev/pts/4'/>
-      <target type='serial' port='0'/>
-      <alias name='serial0'/>
-    </console>
-    <input type='mouse' bus='ps2'/>
-    <input type='keyboard' bus='ps2'/>
-    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
-      <listen type='address' address='127.0.0.1'/>
-    </graphics>
-    <video>
-      <model type='vmvga' vram='9216' heads='1'/>
-      <alias name='video0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
-    </video>
-    <memballoon model='virtio'>
-      <alias name='balloon0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
-    </memballoon>
-    <rng model='virtio'>
-      <backend model='random'>/dev/random</backend>
-      <alias name='rng0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
-    </rng>
-  </devices>
-</domain>
diff --git a/multi-node-aio-xenial-ansible/templates/xenial-sources.list b/multi-node-aio-xenial-ansible/templates/xenial-sources.list
deleted file mode 100644
index 5c46164c..00000000
--- a/multi-node-aio-xenial-ansible/templates/xenial-sources.list
+++ /dev/null
@@ -1,20 +0,0 @@
-deb http://archive.ubuntu.com/ubuntu xenial main restricted
-deb-src http://archive.ubuntu.com/ubuntu xenial main restricted
-deb http://archive.ubuntu.com/ubuntu xenial-updates main restricted
-deb-src http://archive.ubuntu.com/ubuntu xenial-updates main restricted
-deb http://archive.ubuntu.com/ubuntu xenial universe
-deb-src http://archive.ubuntu.com/ubuntu xenial universe
-deb http://archive.ubuntu.com/ubuntu xenial-updates universe
-deb-src http://archive.ubuntu.com/ubuntu xenial-updates universe
-deb http://archive.ubuntu.com/ubuntu xenial multiverse
-deb-src http://archive.ubuntu.com/ubuntu xenial multiverse
-deb http://archive.ubuntu.com/ubuntu xenial-updates multiverse
-deb-src http://archive.ubuntu.com/ubuntu xenial-updates multiverse
-deb http://archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse
-deb-src http://archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse
-deb http://security.ubuntu.com/ubuntu xenial-security main restricted
-deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted
-deb http://security.ubuntu.com/ubuntu xenial-security universe
-deb-src http://security.ubuntu.com/ubuntu xenial-security universe
-deb http://security.ubuntu.com/ubuntu xenial-security multiverse
-deb-src http://security.ubuntu.com/ubuntu xenial-security multiverse
\ No newline at end of file
diff --git a/multi-node-aio-xenial-ansible/variables.sh b/multi-node-aio-xenial-ansible/variables.sh
deleted file mode 100755
index c3373a18..00000000
--- a/multi-node-aio-xenial-ansible/variables.sh
+++ /dev/null
@@ -1,74 +0,0 @@
-# Variables used by multi-node-aio
-# Network subnet used for all the virtual machines
-NETWORK_BASE="${NETWORK_BASE:-10.29}"
-# DNS used throughout the deploy
-DNS_NAMESERVER=$(cat /etc/resolv.conf | grep -m 1 "nameserver" | sed "s/nameserver //")
-#DNS_NAMESERVER="${DNS_NAMESERVER:-8.8.8.8}"
-
-# By default AIO deploy overrides apt-sources, if things like a local mirror are already
-# set up then this script will override these. This option allows for the override to be
-# disabled.
-OVERRIDE_SOURCES="${OVERRIDE_SOURCES:-false}"
-
-# What branch of Openstack-Ansible are we deploying from
-OSA_BRANCH="${OSA_BRANCH:-stable/newton}"
-
-# What is the default disk device name
-DEVICE_NAME="${DEVICE_NAME:-vda}"
-
-# What default network device should we use
-DEFAULT_NETWORK="${DEFAULT_NETWORK:-eth0}"
-
-# What is the default virtual machine disk size in GB
-VM_DISK_SIZE="${VM_DISK_SIZE:-252}"
-
-# Do we want to do all the required host setup
-SETUP_HOST="${SETUP_HOST:-true}"
-
-# What fisk shall we use for the default data
-DATA_DISK_DEVICE="${DATA_DISK_DEVICE:-sdb}"
-
-# Do we want to do disk partitioning or is there a partition ready to use
-PARTITION_HOST="${PARTITION_HOST:-true}"
-
-# Force partition - If the above variable is set to -F then we will use the force
-# option of MKFS so there is no confirm
-FORCE_PARTITION="-F"
-
-# Do we want to set up networking on the host for Virsh
-SETUP_VIRSH_NET="${SETUP_VIRSH_NET:-true}"
-
-# When the virtual machines are re-kicked do we format them
-VM_IMAGE_CREATE="${VM_IMAGE_CREATE:-true}"
-
-# Should we run the deploy Openstack-Ansible script at the end of the build script
-DEPLOY_OSA="${DEPLOY_OSA:-true}"
-
-# Should we pre-configure the environment before we deploy OpenStack-Ansible
-PRE_CONFIG_OSA="${PRE_CONFIG_OSA:-true}"
-
-# Should we run the final deploy of OpenStack-Ansible
-RUN_OSA="${RUN_OSA:-true}"
-
-# Should we use PXEboot
-SETUP_PXEBOOT="${SETUP_PXEBOOT:-true}"
-
-# Should we create the virtual machines
-CREATE_VMS="${CREATE_VMS:-true}"
-
-# Should we configure the virtual machines
-CONFIGURE_VMS="${CONFIGURE_VMS:-true}"
-
-# Container vms - override the container virtual machines with xenial
-CONTAINER_VMS="${CONTAINER_VMS:-xenial}"
-
-# Ethernet type, this needs to be ens for Xenial and is for
-# templates/network-interfaces/vm.openstackci.local-bonded-bridges.cfg file
-ETH_TYPE="${ETH_TYPE:-eth}"
-
-# Default service ports
-OSA_PORTS="${OSA_PORTS:-6080 6082 443 80}"
-
-# Config the baremetal host, treat the baremetal host as a switch
-# put all deploy job into deploy node.
-CONFIG_PREROUTING="${CONFIG_PREROUTING:-true}"
diff --git a/multi-node-aio/LICENSE.txt b/multi-node-aio/LICENSE.txt
deleted file mode 100644
index 8863b74f..00000000
--- a/multi-node-aio/LICENSE.txt
+++ /dev/null
@@ -1,229 +0,0 @@
-Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "{}"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright {yyyy} {name of copyright owner}
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
--------------------------------------------------------------------------------
-
-The MIT License (MIT)
-
-Copyright (c) [year] [fullname]
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-Files in this project licensed under the MIT license:
-
-  - playbooks/plugins/callbacks/profile_tasks.py
diff --git a/multi-node-aio/README.rst b/multi-node-aio/README.rst
index 6fa32f18..be90edae 100644
--- a/multi-node-aio/README.rst
+++ b/multi-node-aio/README.rst
@@ -12,7 +12,7 @@ Full OpenStack deployment using a single OnMetal host from the
 Rackspace Public Cloud. This is a multi-node installation using
 VMs that have been PXE booted which was done to provide an environment
 that is almost exactly what is in production. This script will build, kick
-and deploy OpenStack using KVM, Cobbler, OpenStack-Ansible within 13 Nodes
+and deploy OpenStack using KVM, OpenStack-Ansible within 12 Nodes
 and 1 load balancer all using a Hyper Converged environment.
 
 
@@ -20,17 +20,16 @@ Process
 -------
 
 Create at least one physical host that has public network access and is running the
-Ubuntu 14.04 LTS (Trusty Tahr) Operating system. This script assumes that you have
-an unpartitioned device with at least 1TB of storage. If you're using the Rackspace
+Ubuntu 14/6.04 LTS Operating system. System assumes that you have an unpartitioned
+device with at least 1TB of storage, however you can customize the size of each VM
+volume by setting the option ``${VM_DISK_SIZE}``. If you're using the Rackspace
 OnMetal servers the drive partitioning will be done for you by detecting the largest
 unpartitioned device. If you're doing the deployment on something other than a Rackspace
-OnMetal server you may need to modify the ``setup-host.sh`` script to do the needful in
-your environment. If you know the device name you want to format you can also set the
-``${DATA_DISK_DEVICE}`` variable accordingly.
-
-Physical disk partitioning can be skipped by setting ``PARTITION_HOST=false``. If you set
-this, make sure you have enough space available to run all of the infrastructure VMs within
-``/var/lib/libvirt/images``.
+OnMetal server you may need to set the ``${DATA_DISK_DEVICE}`` variable accordingly.
+the playbooks will look for a volume group named "vg01", if this volume group exists
+no partitioning or setup on the data disk will take place. To effectively use this
+process for testing it's recommended that the host machine have at least 32GiB of
+RAM.
 
 ===========    ========   ============
 Physical Host Specs known to work well
@@ -85,56 +84,42 @@ Console Access
     :alt: Screen shot of virt-manager console
     :align: center
 
-The root password for all VMs is "**cobbler**". This password is being set within the pre-seed files under the
+The root password for all VMs is "**secrete**". This password is being set within the pre-seed files under the
 "Users and Password" section. If you want to change this password please edit the pre-seed files.
 
 
-Notes
------
-
-The cobbler and pre-seed setup has been implemented using some of the awesome work originally created by James Thorne.
-  * cobbler installation post - https://thornelabs.net/2015/11/26/install-and-configure-cobbler-on-ubuntu-1404.html
-  * pre-seeds -- https://github.com/jameswthorne/preseeds
-
-
-Options
--------
-
-Set the default preseed device name. This is being set because sda is on hosts, vda is kvm, xvda is xen:
-  ``DEVICE_NAME="${DEVICE_NAME:-vda}"``
+``build.sh`` Options
+--------------------
 
 Set to instruct the preseed what the default network is expected to be:
   ``DEFAULT_NETWORK="${DEFAULT_NETWORK:-eth0}"``
 
-Set the data disk device, if unset the largest unpartitioned device will be used to for host VMs:
-  ``DATA_DISK_DEVICE="${DATA_DISK_DEVICE:-$(lsblk -brndo NAME,TYPE,FSTYPE,RO,SIZE | awk '/d[b-z]+ disk +0/{ if ($4>m){m=$4; d=$1}}; END{print d}')}"``
-
 Set the VM disk size in gigabytes:
   ``VM_DISK_SIZE="${VM_DISK_SIZE:-252}"``
 
-Set the OSA branch for this script to deploy:
-  ``OSA_BRANCH=${OSA_BRANCH:-master}``
 
-Enable partitioning of the "${DATA_DISK_DEVICE}":
-  ``PARTITION_HOST=${PARTITION_HOST:-true}``
+Instruct the system do all of the required host setup:
+  ``SETUP_HOST=${SETUP_HOST:-true}``
+
+Instruct the system do all of the required PXE setup:
+  ``SETUP_PXEBOOT=${SETUP_PXEBOOT:-true}``
+
+Instruct the system do all of the required DHCPD setup:
+  ``SETUP_DHCPD=${SETUP_DHCPD:-true}``
 
-Instruct the system to deploy OpenStack Ansible:
-  ``DEPLOY_OSA=${DEPLOY_OSA:-true}``
 
 Instruct the system to Kick all of the VMs:
   ``DEPLOY_VMS=${DEPLOY_VMS:-true}``
 
-Instruct the system to run VM disk image create:
-  ``VM_IMAGE_CREATE=${VM_IMAGE_CREATE:-true}``
+Instruct the VM to use the selected image, eg. ubuntu-16.04-amd64:
+  ``DEFAULT_IMAGE=${DEFAULT_IMAGE:-ubuntu-16.04-amd64}``
 
-Instruct the system do all of the require host setup:
-  ``SETUP_HOST=${SETUP_HOST:-true}``
 
-Instruct the system do all of the cobbler setup:
-  ``SETUP_COBBLER=${SETUP_COBBLER:-true}``
+Set the OSA branch for this script to deploy:
+  ``OSA_BRANCH=${OSA_BRANCH:-master}``
 
-Instruct the system do all of the virsh network setup:
-  ``SETUP_VIRSH_NET=${SETUP_VIRSH_NET:-true}``
+Instruct the system to deploy OpenStack Ansible:
+  ``DEPLOY_OSA=${DEPLOY_OSA:-true}``
 
 Instruct the system to pre-config the envs for running OSA playbooks:
   ``PRE_CONFIG_OSA=${PRE_CONFIG_OSA:-true}``
@@ -142,57 +127,48 @@ Instruct the system to pre-config the envs for running OSA playbooks:
 Instruct the system to run the OSA playbooks, if you want to deploy other OSA powered cloud, you can set it to false:
   ``RUN_OSA=${RUN_OSA:-true}``
 
-Instruct the VM to use the selected image, eg. ubuntu xenial:
-  ``DEFAULT_IMAGE=${DEFAULT_IMAGE:-16.04}``
 
-Install the specified kernel, eg 3.13.0-34 if you want to deploy Juno release.
-  ``DEFAULT_KERNEL=${DEFAULT_KERNEL:-3.13.0-34}``
+Re-kicking VM(s)
+----------------
 
-Configure the prerouting iptable rules after the OSA deployment
-  ``CONFIG_PREROUTING="${CONFIG_PREROUTING:-true}``
+Re-kicking a VM is as simple as stopping a VM, delete the logical volume, create a new logical volume, start the VM.
+The VM will come back online, pxe boot, and install the base OS.
 
-Re-kicking the VMs
-------------------
+.. code-block:: bash
 
-The build process will add a function to the system to provide you a quick means to re-kick a VM host. The function added
-is ``rekick_vms``. This function can be used to re-kick a specific host. To use this function use the short hostname along
-with the function. EXAMPLE: ``rekick_vms infra1``. This command will destroy the root disk for the VM and reboot it causing
-it to be re-PXE booted. Once the re-deployment has completed (<=10 min) the node will have a vanilla OS.
-
-If you want to re-kick all known hosts you can execute the ``deploy-vms.sh`` script which will do everything needed to
-boot all new VMs paving over the existing ones.
+    virsh destroy "${VM_NAME}"
+    lvremove "/dev/mapper/vg01--${VM_NAME}"
+    lvcreate -L 60G vg01 -n "${VM_NAME}"
+    virsh start "${VM_NAME}"
 
 
-Adding nodes to the deployment
-------------------------------
+To rekick all VMs, the following command can be used on the host machine to cycle through all found VMs and re-provision them.
 
-To add nodes to the deployment simply add the node entries to the hosts.json file. The file divides nodes by type and you
-can add more nodes to any of the available types without any modifications made to the templates or build script. The first
-100 IP address of all used CIDRs have been reserved in the ``openstack_user_config.yml`` and can be used when adding
-additional hosts to the environment.
+.. code-block:: bash
+
+    for VM_NAME in $(virsh list --all | awk '/running/ || /shut/ {print $2}'); do
+      virsh destroy "${VM_NAME}"
+      lvremove "/dev/mapper/vg01--${VM_NAME}"
+      lvcreate -L 60G vg01 -n "${VM_NAME}"
+      virsh start "${VM_NAME}"
+    done
 
 
 Rerunning the build script
 --------------------------
 
 The build script can be rerun at any time. If you have a successful run before and simply want to re-kick everything I
-recommend nuking the running VMs and then executing the build script instructing it to NOT partition the host. This can
-be easily done using the following snippet.
-
-.. code-block:: bash
-
-    for i in $(virsh list --all --name); do virsh destroy $i; virsh undefine $i; rm /var/lib/libvirt/images/$i.img; done
-    rm ~/.ssh/known_hosts; PARTITION_HOST=false ./build.sh
+recommend nuking VMs and then executing the build script.
 
 
 Deploying OpenStack into the environment
 ----------------------------------------
 
-While the build script will deploy OpenStack, you can choose to run this manually. To run a basic deploy using a given branch you can use the following snippet.
+While the build script will deploy OpenStack, you can choose to run this manually. To run a basic deploy using a given branch you can use the following snippet. Set the ansible option ``osa_branch`` or export the environment variable ``OSA_BRANCH`` when using the build.sh script.
 
 .. code-block:: bash
 
-    OSA_BRANCH=master ./deploy-osa.sh
+    ansible-playbook -i playbooks/inventory playbooks/deploy-osa.yml -vv -e 'osa_branch=master'
 
 
 Snapshotting an environment before major testing
diff --git a/multi-node-aio/ansible-env.rc b/multi-node-aio/ansible-env.rc
new file mode 100644
index 00000000..830f43f7
--- /dev/null
+++ b/multi-node-aio/ansible-env.rc
@@ -0,0 +1,19 @@
+export ANSIBLE_GATHERING="${ANSIBLE_GATHERING:-smart}"
+export ANSIBLE_GATHER_SUBSET="${ANSIBLE_GATHER_SUBSET:-network,hardware,virtual}"
+
+export ANSIBLE_CACHE_PLUGIN="${ANSIBLE_CACHE_PLUGIN:-jsonfile}"
+export ANSIBLE_CACHE_PLUGIN_CONNECTION="${ANSIBLE_CACHE_PLUGIN_CONNECTION:-/tmp/mnaio_facts}"
+export ANSIBLE_CACHE_PLUGIN_TIMEOUT="${ANSIBLE_CACHE_PLUGIN_TIMEOUT:-86400}"
+
+export ANSIBLE_HOST_KEY_CHECKING=False
+export ANSIBLE_SSH_CONTROL_PATH=/tmp/%%h-%%r
+export ANSIBLE_SSH_ARGS="-o ControlMaster=no \
+  -o UserKnownHostsFile=/dev/null \
+  -o StrictHostKeyChecking=no \
+  -o ServerAliveInterval=64 \
+  -o ServerAliveCountMax=1024 \
+  -o Compression=no \
+  -o TCPKeepAlive=yes \
+  -o VerifyHostKeyDNS=no \
+  -o ForwardX11=no \
+  -o ForwardAgent=yes"
diff --git a/multi-node-aio/bootstrap.sh b/multi-node-aio/bootstrap.sh
new file mode 100755
index 00000000..27e4d0cb
--- /dev/null
+++ b/multi-node-aio/bootstrap.sh
@@ -0,0 +1,86 @@
+#!/usr/bin/env bash
+# Copyright 2015, Rackspace US, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -o pipefail
+set -euov
+
+BINDEP_FILE=${BINDEP_FILE:-bindep.txt}
+
+source /etc/os-release || source /usr/lib/os-release
+
+case "${ID,,}" in
+    *suse*)
+        # Need to pull libffi and python-pyOpenSSL early
+        # because we install ndg-httpsclient from pip on Leap 42.1
+        [[ "${VERSION}" == "42.1" ]] && extra_suse_deps="libffi-devel python-pyOpenSSL"
+        sudo zypper -n in python-devel lsb-release ${extra_suse_deps:-}
+        ;;
+    amzn|centos|rhel)
+        sudo yum install -y python-devel redhat-lsb-core
+        ;;
+    ubuntu|debian)
+        sudo apt-get update && sudo apt-get install -y python-dev lsb-release
+        ;;
+    *)
+        echo "Unsupported distribution: ${ID,,}"
+        exit 1
+esac
+
+# Install pip
+if ! which pip &>/dev/null; then
+    curl --silent --show-error --retry 5 \
+        https://bootstrap.pypa.io/get-pip.py | sudo python2.7
+fi
+
+# Install bindep and tox
+sudo pip install 'bindep>=2.4.0' tox
+
+# CentOS 7 requires two additional packages:
+#   redhat-lsb-core - for bindep profile support
+#   epel-release    - required to install python-ndg_httpsclient/python2-pyasn1
+if [[ ${ID,,} == "centos" ]]; then
+    sudo yum -y install redhat-lsb-core epel-release yum-utils
+    # epel-release could be installed but not enabled (which is very common
+    # in openstack-ci) so enable it here if needed
+    sudo yum-config-manager --enable epel || true
+# openSUSE 42.1 does not have python-ndg-httpsclient
+elif [[ ${ID,,} == *suse* ]] && [[ ${VERSION} == "42.1" ]]; then
+    sudo pip install ndg-httpsclient
+fi
+
+# Get a list of packages to install with bindep. If packages need to be
+# installed, bindep exits with an exit code of 1.
+BINDEP_PKGS=$(bindep -b -f ${BINDEP_FILE} test || true)
+echo "Packages to install: ${BINDEP_PKGS}"
+
+# Install OS packages using bindep
+if [[ ${#BINDEP_PKGS} > 0 ]]; then
+    case "${ID,,}" in
+        *suse*)
+            sudo zypper -n in $BINDEP_PKGS
+            ;;
+        centos)
+            sudo yum install -y $BINDEP_PKGS
+            ;;
+        ubuntu|debian)
+            sudo apt-get update
+            DEBIAN_FRONTEND=noninteractive \
+                sudo apt-get -q --option "Dpkg::Options::=--force-confold" \
+                --assume-yes install $BINDEP_PKGS
+            ;;
+    esac
+fi
+
+sudo pip install ansible
diff --git a/multi-node-aio/build.sh b/multi-node-aio/build.sh
index 2a1532a1..c160891e 100755
--- a/multi-node-aio/build.sh
+++ b/multi-node-aio/build.sh
@@ -1,5 +1,4 @@
 #!/usr/bin/env bash
-set -eu
 # Copyright [2016] [Kevin Carter]
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -14,28 +13,23 @@ set -eu
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Load all functions
-source functions.rc
+set -euvo
 
-# bring in variable definitions if there is a variables.sh file
-[[ -f variables.sh ]] && source variables.sh
+source bootstrap.sh
 
-# Instruct the system do all of the require host setup
-SETUP_HOST=${SETUP_HOST:-true}
-[[ "${SETUP_HOST}" = true ]] && source setup-host.sh
+source ansible-env.rc
 
-# Instruct the system do all of the cobbler setup
-SETUP_COBBLER=${SETUP_COBBLER:-true}
-[[ "${SETUP_COBBLER}" = true ]] && source setup-cobbler.sh
-
-# Instruct the system do all of the virsh setup
-SETUP_VIRSH_NET=${SETUP_VIRSH_NET:-true}
-[[ "${SETUP_VIRSH_NET}" = true ]] && source setup-virsh-net.sh
-
-# Instruct the system to Kick all of the VMs
-DEPLOY_VMS=${DEPLOY_VMS:-true}
-[[ "${DEPLOY_VMS}" = true ]] && source deploy-vms.sh
-
-# Instruct the system to deploy OpenStack Ansible
-DEPLOY_OSA=${DEPLOY_OSA:-true}
-[[ "${DEPLOY_OSA}" = true ]] && source config-deploy-node.sh
+ansible-playbook -i playbooks/inventory \
+                 -e setup_host=${SETUP_HOST:-"true"} \
+                 -e setup_pxeboot=${SETUP_PXEBOOT:-"true"} \
+                 -e setup_dhcpd=${SETUP_DHCPD:-"true"} \
+                 -e deploy_vms=${DEPLOY_VMS:-"true"} \
+                 -e deploy_osa=${DEPLOY_OSA:-"true"} \
+                 -e osa_branch=${OSA_BRANCH:-"master"} \
+                 -e default_network=${DEFAULT_NETWORK:-"eth0"} \
+                 -e default_image=${DEFAULT_IMAGE:-"ubuntu-16.04-amd64"} \
+                 -e vm_disk_size=${VM_DISK_SIZE:-61440} \
+                 -e http_proxy=${http_proxy:-''} \
+                 -e run_osa=${RUN_OSA:-"true"} \
+                 -e pre_config_osa=${PRE_CONFIG_OSA:-"true"} \
+                 playbooks/site.yml
diff --git a/multi-node-aio/config-deploy-node.sh b/multi-node-aio/config-deploy-node.sh
deleted file mode 100755
index 986ded3d..00000000
--- a/multi-node-aio/config-deploy-node.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env bash
-
-# Load all functions
-source functions.rc
-
-# bring in variable definitions if there is a variables.sh file
-[[ -f variables.sh ]] && source variables.sh
-
-if [[ "${DEPLOY_OSA}" = true ]]; then
-  # Copy private key and public key to deploy node
-  scp -r -o StrictHostKeyChecking=no  ~/.ssh deploy1:/root/
-
-  # Copy multi-node-aio folder to deploy node
-  scp -r -o StrictHostKeyChecking=no  ../multi-node-aio deploy1:/root
-
-  # Deploy openstack-ansible from deploy node and export all variables deploy-osa.sh needs
-  ssh -o StrictHostKeyChecking=no deploy1 "export NETWORK_BASE=${NETWORK_BASE} RUN_OSA=${RUN_OSA} " \
-  "OSA_BRANCH=${OSA_BRANCH} PRE_CONFIG_OSA=${PRE_CONFIG_OSA}; apt update; cd /root/multi-node-aio/; ./deploy-osa.sh"
-fi
-
-if [[ "${CONFIG_PREROUTING}" = true ]]; then
-  EXTERNAL_IP="$(ip route get 1 | awk '{print $NF;exit}')"
-  # Add 2222 rules to iptables for ssh directly into deployment node.
-  iptables_filter_rule_add nat "PREROUTING -p tcp -d ${EXTERNAL_IP} --dport 2222 -j DNAT --to 10.0.0.150:22"
-
-  scp -o StrictHostKeyChecking=no deploy1:/opt/openstack-ansible/playbooks/vars/configs/haproxy_config.yml .
-  PORTS="$(get_osad_ports) $OSA_PORTS"
-  for port in $PORTS ; do
-    iptables_filter_rule_add nat "PREROUTING -p tcp -d ${EXTERNAL_IP} --dport ${port} -j DNAT --to 10.0.0.150:${port}"
-  done
-fi
diff --git a/multi-node-aio/deploy-osa.sh b/multi-node-aio/deploy-osa.sh
deleted file mode 100755
index d19f1923..00000000
--- a/multi-node-aio/deploy-osa.sh
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/usr/bin/env bash
-# Copyright [2016] [Kevin Carter]
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-MAX_RETRIES=${MAX_RETRIES:-5}
-
-# Load all functions
-source functions.rc
-
-# bring in variable definitions if there is a variables.sh file
-[[ -f variables.sh ]] && source variables.sh
-
-# Provide defaults for unset variables
-# Set first two octets of network used for containers, storage, etc
-NETWORK_BASE=${NETWORK_BASE:-172.29}
-
-# Reset the ssh-agent service to remove potential key issues
-ssh_agent_reset
-
-# Install git and tmux for use within the OSA deploy
-apt-get install -y git tmux
-
-# Clone the OSA source code
-git clone https://git.openstack.org/openstack/openstack-ansible /opt/openstack-ansible || true
-
-# Ensure the "/etc/openstack_deploy" exists
-mkdir_check "/etc/openstack_deploy"
-
-pushd /opt/openstack-ansible/
-  # Fetch all current refs
-  git fetch --all
-
-  # Checkout the OpenStack-Ansible branch
-  git checkout "${OSA_BRANCH:-master}"
-
-  # Copy the etc files into place
-  cp -vR etc/openstack_deploy/* /etc/openstack_deploy/
-popd
-
-# Create a secondary static inventory for hosts
-ansible_static_inventory "/opt/ansible-static-inventory.ini"
-
-# Create the OpenStack User Config
-HOSTIP="$(ip route get 1 | awk '{print $NF;exit}')"
-sed -e "s/__HOSTIP__/${HOSTIP}/g" -e "s/__NETWORK_BASE__/${NETWORK_BASE}/g" templates/openstack_user_config.yml > /etc/openstack_deploy/openstack_user_config.yml
-
-# Create the swift config: function group_name host_type
-cp -v templates/osa-swift.yml /etc/openstack_deploy/conf.d/swift.yml
-
-
-### =========== WRITE OF conf.d FILES =========== ###
-# Setup cinder hosts: function group_name host_type
-write_osa_general_confd storage-infra_hosts cinder
-write_osa_cinder_confd storage_hosts cinder
-
-# Setup nova hosts: function group_name host_type
-write_osa_general_confd compute_hosts nova_compute
-
-# Setup infra hosts: function group_name host_type
-write_osa_general_confd identity_hosts infra
-write_osa_general_confd repo-infra_hosts infra
-write_osa_general_confd os-infra_hosts infra
-write_osa_general_confd shared-infra_hosts infra
-
-# Setup logging hosts: function group_name host_type
-write_osa_general_confd log_hosts logging
-
-# Setup network hosts: function group_name host_type
-write_osa_general_confd network_hosts infra
-
-# Setup swift hosts: function group_name host_type
-write_osa_swift_proxy_confd swift-proxy_hosts swift
-write_osa_swift_storage_confd swift_hosts swift
-### =========== END WRITE OF conf.d FILES =========== ###
-
-# Enable pre-config the OSA enviroment for deploying OSA.
-PRE_CONFIG_OSA=${PRE_CONFIG_OSA:-true}
-if [[ "${PRE_CONFIG_OSA}" = true ]]; then
-  pushd /opt/openstack-ansible/
-    # Bootstrap ansible into the environment
-    bash ./scripts/bootstrap-ansible.sh
-
-    # Generate the passwords for the environment
-    python ./scripts/pw-token-gen.py --file /etc/openstack_deploy/user_secrets.yml
-
-    # This is happening so the VMs running the infra use less storage
-    osa_user_var_add lxc_container_backing_store 'lxc_container_backing_store: dir'
-
-    # Tempest is being configured to use a known network
-    osa_user_var_add tempest_public_subnet_cidr 'tempest_public_subnet_cidr: '${NETWORK_BASE}'.248.0/26'
-
-    # This makes running neutron in a distributed system easier and a lot less noisy
-    osa_user_var_add neutron_l2_population 'neutron_l2_population: True'
-
-    # This makes the glance image store use swift instead of the file backend
-    osa_user_var_add glance_default_store 'glance_default_store: swift'
-
-    # Propagate host proxy settings (if set) into /etc/environment in the targets
-    if [ ! -z ${http_proxy+x} ]; then
-      osa_user_var_add proxy_env_url 'proxy_env_url: '${http_proxy}
-      osa_user_var_add no_proxy_env 'no_proxy_env: "localhost,127.0.0.1,{{ internal_lb_vip_address }},{{ external_lb_vip_address }},{% for host in groups['\''all_containers'\''] %}{{ hostvars[host]['\''container_address'\''] }}{% if not loop.last %},{% endif %}{% endfor %}"'
-      osa_user_var_add global_environment_variables 'global_environment_variables:'
-      osa_user_var_add '  HTTP_PROXY:' '  HTTP_PROXY: "{{ proxy_env_url }}"'
-      osa_user_var_add '  HTTPS_PROXY:' '  HTTPS_PROXY: "{{ proxy_env_url }}"'
-      osa_user_var_add '  NO_PROXY:' '  NO_PROXY: "{{ no_proxy_env }}"'
-      osa_user_var_add '  http_proxy:' '  http_proxy: "{{ proxy_env_url }}"'
-      osa_user_var_add '  https_proxy:' '  https_proxy: "{{ proxy_env_url }}"'
-      osa_user_var_add '  no_proxy:' '  no_proxy: "{{ no_proxy_env }}"'
-      # Propagate proxy setting to glance api conf. Note the unusual format - instead of the typical
-      #   http_proxy=http://proxy.example.com ; https_proxy=http://proxy.example.com
-      # it uses
-      #   http:proxy.example.com, https:proxy.example.com
-      #
-      osa_user_var_add glance_glance_api_conf_overrides 'glance_glance_api_conf_overrides:'
-      osa_user_var_add '  glance_store' '  glance_store:'
-      osa_user_var_add '    http_proxy_information' "    http_proxy_information: \"http:${http_proxy#http://}, https:${http_proxy#http://}\""
-    fi
-  popd
-fi
-
-# Enable deploy OSA of the "${RUN_OSA}"
-RUN_OSA=${RUN_OSA:-true}
-if [[ "${RUN_OSA}" = true ]]; then
-  # Set the number of forks for the ansible client calls
-  export ANSIBLE_FORKS=${ANSIBLE_FORKS:-15}
-
-  pushd /opt/openstack-ansible
-    export DEPLOY_AIO=true
-    bash ./scripts/run-playbooks.sh
-  popd
-
-  EXEC_DIR="$(pwd)"
-  pushd /opt/openstack-ansible/playbooks
-    if [[ -f "/usr/local/bin/openstack-ansible.rc" ]]; then
-      source /usr/local/bin/openstack-ansible.rc
-    fi
-    ansible -m script -a "${EXEC_DIR}/openstack-service-setup.sh ${NETWORK_BASE}" 'utility_all[0]'
-  popd
-fi
diff --git a/multi-node-aio/deploy-vms.sh b/multi-node-aio/deploy-vms.sh
deleted file mode 100755
index ebec2045..00000000
--- a/multi-node-aio/deploy-vms.sh
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/usr/bin/env bash
-set -eu
-# Copyright [2016] [Kevin Carter]
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Load all functions
-source functions.rc
-
-# bring in variable definitions if there is a variables.sh file
-[[ -f variables.sh ]] && source variables.sh
-
-# Reset the ssh-agent service to remove potential key issues
-ssh_agent_reset
-
-# Set the default preseed device name.
-#  This is being set because sda is on hosts, vda is kvm, xvda is xen.
-DEVICE_NAME="${DEVICE_NAME:-vda}"
-
-# Create VM Basic Configuration files
-for node_type in $(get_all_types); do
-  for node in $(get_host_type ${node_type}); do
-    cp -v "templates/vmnode-config/${node_type}.openstackci.local.xml" /etc/libvirt/qemu/${node%%":"*}.openstackci.local.xml
-    sed -i "s|__NODE__|${node%%":"*}|g" /etc/libvirt/qemu/${node%%":"*}.openstackci.local.xml
-    sed -i "s|__COUNT__|${node:(-2)}|g" /etc/libvirt/qemu/${node%%":"*}.openstackci.local.xml
-    sed -i "s|__DEVICE_NAME__|${DEVICE_NAME}|g" /etc/libvirt/qemu/${node%%":"*}.openstackci.local.xml
-  done
-done
-
-# Populate network configurations based on node type
-for node_type in $(get_all_types); do
-  for node in $(get_host_type ${node_type}); do
-    sed -e "s/__COUNT__/${node#*":"}/g" -e "s/__NETWORK_BASE__/${NETWORK_BASE}/g" "templates/network-interfaces/vm.openstackci.local-bonded-bridges.cfg" > "/var/www/html/osa-${node%%":"*}.openstackci.local-bridges.cfg"
-  done
-done
-
-# Kick all of the VMs to run the cloud
-#  !!!THIS TASK WILL DESTROY ALL OF THE ROOT DISKS IF THEY ALREADY EXIST!!!
-rekick_vms
-
-# Wait here for all nodes to be booted and ready with SSH
-wait_ssh
-
-# Export all system keys
-mkdir -p /tmp/keys
-for i in $(apt-key list | awk '/pub/ {print $2}' | awk -F'/' '{print $2}'); do
-  apt-key export "$i" > "/tmp/keys/$i"
-done
-
-# Get the ubuntu release version from VMs.
-RELEASE_VERSION=`ssh -q -o StrictHostKeyChecking=no 10.0.0.100 "lsb_release -sr"`
-
-# Ensure that all running VMs have an updated apt-cache with keys
-for node in $(get_all_hosts); do
-  ssh -q -n -f -o StrictHostKeyChecking=no 10.0.0.${node#*":"} "mkdir -p /tmp/keys"
-  for i in /etc/apt/apt.conf.d/00-nokey /etc/apt/sources.list /tmp/sources.list /etc/apt/sources.list.d/* /tmp/keys/*; do
-    if [[ -f "$i" ]]; then
-      scp "$i" "10.0.0.${node#*":"}:$i"
-    fi
-  done
-  if [[ "14.04" != "${RELEASE_VERSION:0:5}" ]]; then
-    ssh -q -n -f -o StrictHostKeyChecking=no 10.0.0.${node#*":"} "mv /tmp/sources.list /etc/apt/sources.list"
-  fi
-  ssh -o StrictHostKeyChecking=no 10.0.0.${node#*":"} "(for i in /tmp/keys/*; do \
-      apt-key add \$i; \
-      apt-key adv --keyserver keyserver.ubuntu.com --recv-keys \$(basename \$i); done); \
-    apt-get clean; \
-    apt-get update"
-done
-
-# Add node hostname into /etc/hosts
-if ! grep -q "10.0.0.150" /etc/hosts; then
-  for node_type in $(get_all_types); do
-    for node in $(get_host_type ${node_type}); do
-      echo "10.0.0.${node#*":"} ${node%%':'*}" >> /etc/hosts
-    done
-  done
-fi
-
-# Add autocomplete ssh via /etc/hosts and ssh_config to all nodes
-for node in $(get_all_hosts); do
-  echo '
-_complete_hosts () {
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    host_list=`{
-        sed -n -e "s/^[0-9][0-9\.]*//p" /etc/hosts; }|tr " " "\n"|grep -v "*"`
-    COMPREPLY=( $(compgen -W "\${host_list}" -- $cur))
-    return 0
-}
-
-complete -F _complete_hosts host
-complete -F _complete_hosts ssh
-' | ssh -o StrictHostKeyChecking=no 10.0.0.${node#*":"} "cat >> /root/.bashrc"
-done
diff --git a/multi-node-aio/functions.rc b/multi-node-aio/functions.rc
deleted file mode 100755
index 45d8325a..00000000
--- a/multi-node-aio/functions.rc
+++ /dev/null
@@ -1,257 +0,0 @@
-#!/usr/bin/env bash
-# Copyright [2016] [Kevin Carter]
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-function mkdir_check {
-  if [ ! -d "$1" ];then
-    mkdir -p "$1"
-  fi
-}
-
-function ssh_agent_reset {
-  # If you were running ssh-agent with forwarding this will clear out the keys
-  #  in your cache which can cause confusion.
-  if pgrep ssh-agent; then
-    killall ssh-agent; eval `ssh-agent`
-  fi
-}
-
-function iptables_general_rule_add {
-if ! iptables -w -C $1;then
-  iptables -w -I $1
-fi
-}
-
-function iptables_filter_rule_add {
-if ! iptables -w -t $1 -C $2;then
-  iptables -w -t $1 -I $2
-fi
-}
-
-function get_host_type {
-python <<EOL
-import json
-with open('hosts.json') as f:
-    x = json.loads(f.read())
-for k, v in x.get("$1").items():
-    print('%s:%s' % (k, v))
-EOL
-}
-
-function get_all_hosts {
-python <<EOL
-import json
-with open('hosts.json') as f:
-    x = json.loads(f.read())
-for i in x.values():
-    for k, v in i.items():
-      print('%s:%s' % (k, v))
-EOL
-}
-
-function get_all_types {
-python <<EOL
-import json
-with open('hosts.json') as f:
-    x = json.loads(f.read())
-for i in x.keys():
-    print(i)
-EOL
-}
-
-function wait_ssh {
-echo "Waiting for all nodes to become available. This can take around ${1:-10} min"
-for node in $(get_all_hosts); do
-    echo "Waiting for node: ${node%%":"*} on 10.0.0.${node#*":"}"
-    until ssh -q -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=10 10.0.0.${node#*':'} exit > /dev/null; do
-      sleep 15
-    done
-done
-}
-
-function rekick_vms {
-# If you pass the short name of the host to the function it will only force rekick just the ONE host.
-# Set the VM disk size in gigabytes
-VM_DISK_SIZE="${VM_DISK_SIZE:-252}"
-for node in ${1:-$(get_all_hosts)}; do
-  for node_name in $(virsh list --all --name | grep "${node%%":"*}"); do
-    virsh destroy "${node_name}" || true
-  done
-  # Instruct the system to run the image create.
-  #  If you have the option ``VM_IMAGE_CREATE=true`` the system will reformat the disk image
-  #  destroying anything that was it image previously.
-  VM_IMAGE_CREATE=${VM_IMAGE_CREATE:-true}
-  if [[ "${VM_IMAGE_CREATE}" = true ]]; then
-    qemu-img create -f qcow2 \
-                    -o preallocation=metadata,compat=1.1,lazy_refcounts=on \
-                    /var/lib/libvirt/images/${node%%":"*}.openstackci.local.img \
-                    "${VM_DISK_SIZE}G"
-  fi
-  VM_NAME=$(virsh list --all --name | grep "${node%%":"*}" || echo "")
-  if [[ -z "${VM_NAME}" ]]; then
-    virsh define /etc/libvirt/qemu/${node%%":"*}.openstackci.local.xml || true
-    virsh create /etc/libvirt/qemu/${node%%":"*}.openstackci.local.xml || true
-  else
-    virsh start "${VM_NAME}"
-  fi
-done
-}
-
-function write_osa_general_confd {
-CONFD_FILE="/etc/openstack_deploy/conf.d/${1}.yml"
-echo "## DO NOT WRITE TO THIS FILE, CHANGES WILL BE LOST!" > ${CONFD_FILE}
-echo "---" >> ${CONFD_FILE}
-echo "$1:" >> ${CONFD_FILE}
-for node in $(get_host_type ${2}); do
-echo "  ${node%%':'*}:" >> ${CONFD_FILE}
-echo "    ip: ${NETWORK_BASE}.236.${node#*":"}" >> ${CONFD_FILE}
-done
-}
-
-function write_osa_cinder_confd {
-CONFD_FILE="/etc/openstack_deploy/conf.d/${1}.yml"
-echo "## DO NOT WRITE TO THIS FILE, CHANGES WILL BE LOST!" > ${CONFD_FILE}
-echo "---" >> ${CONFD_FILE}
-echo "$1:" >> ${CONFD_FILE}
-for node in $(get_host_type ${2}); do
-echo "  ${node%%':'*}:" >> ${CONFD_FILE}
-echo "    ip: ${NETWORK_BASE}.236.${node#*":"}" >> ${CONFD_FILE}
-cat >> ${CONFD_FILE} <<EOF
-    container_vars:
-      cinder_backends:
-        limit_container_types: cinder_volume
-        lvm:
-          volume_group: cinder-volumes
-          volume_driver: cinder.volume.drivers.lvm.LVMVolumeDriver
-          volume_backend_name: LVM_iSCSI
-          iscsi_ip_address: "${NETWORK_BASE}.236.${node#*":"}"
-EOF
-done
-}
-
-function write_osa_swift_proxy_confd {
-CONFD_FILE="/etc/openstack_deploy/conf.d/${1}.yml"
-echo "## DO NOT WRITE TO THIS FILE, CHANGES WILL BE LOST!" > ${CONFD_FILE}
-echo "---" >> ${CONFD_FILE}
-echo "$1:" >> ${CONFD_FILE}
-for node in $(get_host_type ${2}); do
-echo "  ${node%%':'*}:" >> ${CONFD_FILE}
-echo "    ip: ${NETWORK_BASE}.236.${node#*":"}" >> ${CONFD_FILE}
-cat >> ${CONFD_FILE} <<EOF
-    container_vars:
-      swift_proxy_vars:
-        limit_container_types: swift_proxy
-        read_affinity: "r1=100"
-        write_affinity: "r1"
-        write_affinity_node_count: "1 * replicas"
-EOF
-done
-}
-
-function write_osa_swift_storage_confd {
-CONFD_FILE="/etc/openstack_deploy/conf.d/${1}.yml"
-echo "## DO NOT WRITE TO THIS FILE, CHANGES WILL BE LOST!" > ${CONFD_FILE}
-echo "---" >> ${CONFD_FILE}
-echo "$1:" >> ${CONFD_FILE}
-for node in $(get_host_type ${2}); do
-echo "  ${node%%':'*}:" >> ${CONFD_FILE}
-echo "    ip: ${NETWORK_BASE}.236.${node#*":"}" >> ${CONFD_FILE}
-cat >> ${CONFD_FILE} <<EOF
-    container_vars:
-      swift_vars:
-        limit_container_types: swift
-        zone: 0
-        region: 1
-EOF
-done
-}
-
-function osa_user_var_add {
-  if ! grep -q "^$1" /etc/openstack_deploy/user_variables.yml; then
-    echo "$2" | tee -a /etc/openstack_deploy/user_variables.yml
-  else
-    sed -i "s|$1.*|$2|g" /etc/openstack_deploy/user_variables.yml
-  fi
-}
-
-function ansible_static_inventory {
-CONFD_FILE="$1"
-echo "## DO NOT WRITE TO THIS FILE, CHANGES WILL BE LOST!" > ${CONFD_FILE}
-for node_type in $(get_all_types); do
-  echo "[${node_type}]" >> ${CONFD_FILE}
-  for node in $(get_host_type ${node_type}); do
-    echo "10.0.0.${node#*":"}" >> ${CONFD_FILE}
-  done
-done
-}
-
-function install_bits {
-successerator openstack-ansible $@
-}
-
-function successerator {
-set +e
-# Get the time taht the method was started
-OP_START_TIME=$(date +%s)
-#Set the initial return value to failure.
-false
-for ((RETRY=0; $? != 0 && RETRY < MAX_RETRIES; RETRY++)); do
-  if [ ${RETRY} -gt 1 ]; then
-    $@ -vvvv
-  else
-    $@
-  fi
-done
-
-# If max retries were hit, fail.
-if [ $? -ne 0 && [ ${RETRY} -eq ${MAX_RETRIES} ];then
-  echo -e "\n Hit maximum number of retries, giving up..\n"
-  exit
-fi
-
-# Print the time that the method completed.
-OP_TOTAL_SECONDS="$(( $(date +%s) - OP_START_TIME ))"
-REPORT_OUTPUT="${OP_TOTAL_SECONDS} seconds"
-REPORT_DATA+="- Operation: [ $@ ]\t${REPORT_OUTPUT}\tNumber of Attempts [ ${RETRY} ]\n"
-echo -e "Run Time = ${REPORT_OUTPUT}"
-set -e
-}
-
-# Return 1 if the second argument is a substring of the first argument, otherwise return 0
-contains() {
-    string="$1"
-    substring="$2"
-    if test "${string#*$substring}" == "$string"
-    then
-        echo 0    # $substring is not in $string
-    else
-        echo 1    # $substring is in $string
-    fi
-}
-
-# Return all service ports
-function get_osad_ports {
-python <<EOL
-import yaml
-with open('haproxy_config.yml') as f:
-    x = yaml.safe_load(f.read())
-    haproxy_services = (x.get('haproxy_default_services')
-                        or x.get('haproxy_service_configs'))
-    for i in haproxy_services:
-        y = i['service'].get('haproxy_port')
-        if isinstance(y, int):
-            print y
-EOL
-}
-
diff --git a/multi-node-aio/hosts.json b/multi-node-aio/hosts.json
deleted file mode 100644
index 7d604a10..00000000
--- a/multi-node-aio/hosts.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-   "infra": {
-        "infra1": "100",
-        "infra2": "101",
-        "infra3": "102"
-   },
-   "logging": {
-       "logging1": "110"
-   },
-   "nova_compute": {
-       "compute1": "120",
-       "compute2": "121"
-   },
-   "cinder": {
-       "cinder1": "130",
-       "cinder2": "131"
-   },
-   "swift": {
-       "swift1": "140",
-       "swift2": "141",
-       "swift3": "142"
-   },
-   "deploy": {
-       "deploy1":"150"
-   }
-}
diff --git a/multi-node-aio/openstack-service-setup.sh b/multi-node-aio/openstack-service-setup.sh
deleted file mode 100644
index cdb70de7..00000000
--- a/multi-node-aio/openstack-service-setup.sh
+++ /dev/null
@@ -1,175 +0,0 @@
-#!/usr/bin/env bash
-
-# Load service variables
-source openrc
-
-# bring in variable definitions if there is a variables.sh file
-[[ -f variables.sh ]] && source variables.sh
-
-# Provide defaults for unset variables
-# Set first two octets of network used for containers, storage, etc
-NETWORK_BASE=${NETWORK_BASE:-172.29}
-
-# Create base flavors for the new deployment
-for flavor in micro tiny mini small medium large xlarge heavy; do
-  NAME="m1.${flavor}"
-  ID="${ID:-0}"
-  RAM="${RAM:-256}"
-  DISK="${DISK:-1}"
-  VCPU="${VCPU:-1}"
-  SWAP="${SWAP:-0}"
-  EPHEMERAL="${EPHEMERAL:-0}"
-  nova flavor-delete $ID > /dev/null || echo "No Flavor with ID: [ $ID ] found to clean up"
-  nova flavor-create $NAME $ID $RAM $DISK $VCPU --swap $SWAP --is-public true --ephemeral $EPHEMERAL --rxtx-factor 1
-  let ID=ID+1
-  let RAM=RAM*2
-  if [ "$ID" -gt 5 ];then
-    let VCPU=VCPU*2
-    let DISK=DISK*2
-    let EPHEMERAL=256
-    let SWAP=4
-  elif [ "$ID" -gt 4 ];then
-    let VCPU=VCPU*2
-    let DISK=DISK*4+$DISK
-    let EPHEMERAL=$DISK/2
-    let SWAP=4
-  elif [ "$ID" -gt 3 ];then
-    let VCPU=VCPU*2
-    let DISK=DISK*4+$DISK
-    let EPHEMERAL=$DISK/3
-    let SWAP=4
-  elif [ "$ID" -gt 2 ];then
-    let VCPU=VCPU+$VCPU/2
-    let DISK=DISK*4
-    let EPHEMERAL=$DISK/3
-    let SWAP=4
-  elif [ "$ID" -gt 1 ];then
-    let VCPU=VCPU+1
-    let DISK=DISK*2+$DISK
-  fi
-done
-
-# Neutron provider network setup
-neutron net-create GATEWAY_NET \
-    --router:external=True \
-    --provider:physical_network=flat \
-    --provider:network_type=flat
-
-neutron subnet-create GATEWAY_NET ${NETWORK_BASE}.248.0/22 \
-    --name GATEWAY_NET_SUBNET \
-    --gateway ${NETWORK_BASE}.248.1 \
-    --allocation-pool start=${NETWORK_BASE}.248.201,end=${NETWORK_BASE}.248.255 \
-    --dns-nameservers list=true ${DNS_NAMESERVER}
-
-# Neutron private network setup
-neutron net-create PRIVATE_NET \
-    --shared \
-    --router:external=True \
-    --provider:network_type=vxlan \
-    --provider:segmentation_id 101
-
-neutron subnet-create PRIVATE_NET 192.168.0.0/24 \
-    --name PRIVATE_NET_SUBNET
-
-# Neutron router setup
-ROUTER_ID=$(neutron router-create GATEWAY_NET_ROUTER | grep -w id | awk '{print $4}')
-neutron router-gateway-set \
-    ${ROUTER_ID} \
-    $(neutron net-list | awk '/GATEWAY_NET/ {print $2}')
-
-neutron router-interface-add \
-    ${ROUTER_ID} \
-    $(neutron subnet-list | awk '/PRIVATE_NET_SUBNET/ {print $2}')
-
-# Neutron security group setup
-for id in $(neutron security-group-list -f yaml | awk '/- id\:/ {print $3}'); do
-    # Allow ICMP
-    neutron security-group-rule-create --protocol icmp \
-                                       --direction ingress \
-                                       $id || true
-    # Allow all TCP
-    neutron security-group-rule-create --protocol tcp \
-                                       --port-range-min 1 \
-                                       --port-range-max 65535 \
-                                       --direction ingress \
-                                       $id || true
-    # Allow all UDP
-    neutron security-group-rule-create --protocol udp \
-                                       --port-range-min 1 \
-                                       --port-range-max 65535 -\
-                                       -direction ingress \
-                                       $id || true
-done
-
-# Create some default images
-wget http://uec-images.ubuntu.com/releases/14.04/release/ubuntu-14.04-server-cloudimg-amd64-disk1.img
-glance image-create --name 'Ubuntu 14.04 LTS' \
-                    --container-format bare \
-                    --disk-format qcow2 \
-                    --visibility public \
-                    --progress \
-                    --file ubuntu-14.04-server-cloudimg-amd64-disk1.img
-rm ubuntu-14.04-server-cloudimg-amd64-disk1.img
-
-wget http://uec-images.ubuntu.com/releases/16.04/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img
-glance image-create --name 'Ubuntu 16.04' \
-                    --container-format bare \
-                    --disk-format qcow2 \
-                    --visibility public \
-                    --progress \
-                    --file ubuntu-16.04-server-cloudimg-amd64-disk1.img
-rm ubuntu-16.04-server-cloudimg-amd64-disk1.img
-
-wget http://dfw.mirror.rackspace.com/fedora/releases/24/CloudImages/x86_64/images/Fedora-Cloud-Base-24-1.2.x86_64.qcow2
-glance image-create --name 'Fedora 24' \
-                    --container-format bare \
-                    --disk-format qcow2 \
-                    --visibility public \
-                    --progress \
-                    --file Fedora-Cloud-Base-24-1.2.x86_64.qcow2
-rm Fedora-Cloud-Base-24-1.2.x86_64.qcow2
-
-wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2
-glance image-create --name 'CentOS 7' \
-                    --container-format bare \
-                    --disk-format qcow2 \
-                    --visibility public \
-                    --progress \
-                    --file CentOS-7-x86_64-GenericCloud.qcow2
-rm CentOS-7-x86_64-GenericCloud.qcow2
-
-wget http://download.opensuse.org/repositories/Cloud:/Images:/Leap_42.1/images/openSUSE-Leap-42.1-OpenStack.x86_64-0.0.4-Build2.12.qcow2
-glance image-create --name 'OpenSuse Leap 42' \
-                    --container-format bare \
-                    --disk-format qcow2 \
-                    --visibility public \
-                    --progress \
-                    --file openSUSE-Leap-42.1-OpenStack.x86_64-0.0.4-Build2.12.qcow2
-rm openSUSE-Leap-42.1-OpenStack.x86_64-0.0.4-Build2.12.qcow2
-
-wget http://cdimage.debian.org/cdimage/openstack/current/debian-8.6.0-openstack-amd64.qcow2
-glance image-create --name 'Debian 8.6.0' \
-                    --container-format bare \
-                    --disk-format qcow2 \
-                    --visibility public \
-                    --progress \
-                    --file debian-8.6.0-openstack-amd64.qcow2
-rm debian-8.6.0-openstack-amd64.qcow2
-
-wget http://cdimage.debian.org/cdimage/openstack/testing/debian-testing-openstack-amd64.qcow2
-glance image-create --name "Debian TESTING $(date +%m-%d-%y)" \
-                    --container-format bare \
-                    --disk-format qcow2 \
-                    --visibility public \
-                    --progress \
-                    --file debian-testing-openstack-amd64.qcow2
-rm debian-testing-openstack-amd64.qcow2
-
-wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
-glance image-create --name "Cirros-0.3.4" \
-                    --container-format bare \
-                    --disk-format qcow2 \
-                    --visibility public \
-                    --progress \
-                    --file cirros-0.3.4-x86_64-disk.img
-rm cirros-0.3.4-x86_64-disk.img
diff --git a/multi-node-aio/playbooks/deploy-dhcp.yml b/multi-node-aio/playbooks/deploy-dhcp.yml
new file mode 100644
index 00000000..cb83cd8c
--- /dev/null
+++ b/multi-node-aio/playbooks/deploy-dhcp.yml
@@ -0,0 +1,71 @@
+---
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+- name: Gather facts
+  hosts: dhcp_hosts
+  gather_facts: "{{ gather_facts | default(true) }}"
+  pre_tasks:
+    - name: Gather variables for each operating system
+      include_vars: "{{ item }}"
+      with_first_found:
+        - "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}-{{ ansible_distribution_version | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_os_family | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_os_family | lower }}.yml"
+      tags:
+        - always
+
+    - name: Install all required packages for dhcpd_install
+      package:
+        pkg: "{{ item }}"
+        state: "latest"
+        update_cache: yes
+        cache_valid_time: 600
+      with_items: "{{ mnaio_dhcp_distro_packages }}"
+
+    - name: Enable services
+      service:
+        name: "{{ item }}"
+        enabled: yes
+      with_items: "{{ mnaio_dhcp_distro_packages }}"
+
+  tasks:
+    - name: Create a template in /etc/dhcp/dhcpd.conf
+      template:
+        src: dhcp/dhcpd.conf.j2
+        dest: /etc/dhcp/dhcpd.conf
+        mode: 0644
+        owner: root
+        group: root
+      notify: restart dhcpd
+
+    - name: Create a template in /etc/dhcp/dhcpd.conf
+      template:
+        src: dhcp/isc-dhcp-server
+        dest: /etc/default/isc-dhcp-server
+        mode: 0644
+        owner: root
+        group: root
+      notify: restart dhcpd
+
+  handlers:
+    - name: restart dhcpd
+      service:
+        name: "{{ item }}"
+        state: restarted
+      with_items: "{{ mnaio_dhcp_distro_packages }}"
+  vars_files:
+    - vars/main.yml
+  tags:
+    - deploy-dhcpd
diff --git a/multi-node-aio/playbooks/deploy-osa.yml b/multi-node-aio/playbooks/deploy-osa.yml
new file mode 100644
index 00000000..11e58dde
--- /dev/null
+++ b/multi-node-aio/playbooks/deploy-osa.yml
@@ -0,0 +1,227 @@
+---
+# Copyright 2017, Rackspace US, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in witing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+- name: Wait for deploy host
+  hosts: openstack_hosts
+  gather_facts: false
+  pre_tasks:
+    - name: Wait for container connectivity
+      wait_for_connection:
+        connect_timeout: 5
+        sleep: 10
+        timeout: 1200
+  tasks:
+    - name: copy host keys
+      copy:
+        src: "{{ item.src }}"
+        dest: "{{ item.dest }}"
+        mode: "0600"
+      with_items:
+        - src: /root/.ssh/id_rsa
+          dest: /root/.ssh/id_rsa
+        - src: /root/.ssh/id_rsa.pub
+          dest: /root/.ssh/id_rsa.pub
+
+    - name: un-mount deleteme mount
+      mount:
+        name: "/deleteme"
+        state: unmounted
+
+    - name: remote deleteme mount
+      mount:
+        name: "/deleteme"
+        state: absent
+
+    - name: Remove deleteme dir
+      file:
+        path: "/deleteme"
+        state: absent
+
+    - name: Remove deleteme lv
+      lvol:
+        vg: vg00
+        lv: deleteme00
+        force: true
+        state: absent
+
+- name: Setup cinder host volume
+  hosts: cinder_hosts
+  gather_facts: false
+  tasks:
+    - name: Create cinder-volumes lv
+      lvol:
+        vg: vg00
+        lv: cinder-volumes00
+        size: 100%FREE
+        shrink: false
+
+    - name: Create data cinder-volumes group
+      lvg:
+        vg: cinder-volumes
+        pvs: "/dev/vg00/cinder-volumes00"
+
+
+- name: Setup cinder host volume
+  hosts: swift_hosts
+  gather_facts: false
+  tasks:
+    - name: Remove deleteme lv
+      lvol:
+        vg: vg00
+        lv: "{{ item }}"
+        size: 4G
+      with_items:
+        - disk1
+        - disk2
+        - disk3
+
+    - name: Format swift drives
+      filesystem:
+        fstype: xfs
+        dev: "/dev/vg00/{{ item }}"
+      with_items:
+        - disk1
+        - disk2
+        - disk3
+
+    - name: Create drive directories
+      file:
+        path: "/srv/{{ item }}"
+        state: directory
+        owner: "root"
+        group: "root"
+        mode: "0755"
+      with_items:
+        - disk1
+        - disk2
+        - disk3
+
+    - name: Mount swift drives
+      mount:
+        name: "/srv/{{ item }}"
+        src: "/dev/mapper/vg00-{{ item }}"
+        fstype: xfs
+        state: mounted
+      with_items:
+        - disk1
+        - disk2
+        - disk3
+
+- name: Setup deploy host
+  hosts: deploy_hosts
+  gather_facts: "{{ gather_facts | default(true) }}"
+  pre_tasks:
+    - name: Gather variables for each operating system
+      include_vars: "{{ item }}"
+      with_first_found:
+        - "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}-{{ ansible_distribution_version | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_os_family | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_os_family | lower }}.yml"
+      tags:
+        - always
+
+  tasks:
+    # Example read-write git checkout from github
+    - name: Get OSA
+      git:
+        repo: https://git.openstack.org/openstack/openstack-ansible
+        dest: /opt/openstack-ansible
+        version: "{{ osa_branch | default('master') }}"
+      when:
+        - pre_config_osa | default(true) | bool
+
+    - name: Create Basic configs
+      shell: cp -R etc/openstack_deploy/* /etc/openstack_deploy
+      args:
+        chdir: /opt/openstack-ansible
+      when:
+        - pre_config_osa | default(true) | bool
+
+    - name: Create base directories
+      file:
+        path: "{{ item }}"
+        state: directory
+        owner: "root"
+        group: "root"
+        mode: "0755"
+      with_items:
+        - /etc/openstack_deploy
+        - /etc/openstack_deploy/conf.d
+        - /etc/openstack_deploy/env.d
+      when:
+        - pre_config_osa | default(true) | bool
+
+    - name: Drop osa config
+      template:
+        src: "osa/openstack_user_config.yml"
+        dest: /etc/openstack_deploy/openstack_user_config.yml
+        mode: "0644"
+        owner: root
+        group: root
+      when:
+        - pre_config_osa | default(true) | bool
+
+    - name: Drop osa user variables
+      template:
+        src: "osa/user_mnaio_variables.yml"
+        dest: /etc/openstack_deploy/user_mnaio_variables.yml
+        mode: "0644"
+        owner: root
+        group: root
+      when:
+        - pre_config_osa | default(true) | bool
+
+    - name: Bootstrap ansible
+      command: bash ./scripts/bootstrap-ansible.sh
+      args:
+        chdir: /opt/openstack-ansible
+      when:
+        - pre_config_osa | default(true) | bool
+
+    - name: Get pip2 and pw gen deps
+      command: python2 /opt/get-pip.py pycrypto pyyaml
+      args:
+        chdir: /opt/openstack-ansible
+      when:
+        - pre_config_osa | default(true) | bool
+
+    - name: Create passwords
+      command: python2 ./scripts/pw-token-gen.py --file /etc/openstack_deploy/user_secrets.yml
+      args:
+        chdir: /opt/openstack-ansible
+      when:
+        - pre_config_osa | default(true) | bool
+
+    - name: Run OSA
+      command: "{{ item }}"
+      args:
+        chdir: /opt/openstack-ansible/playbooks
+      with_items:
+        - tmux new-session -d -s build-osa
+        - tmux select-pane -t 0
+        - tmux send-keys "ulimit -n 10240" C-m
+        - tmux send-keys "openstack-ansible setup-everything.yml" C-m
+      when:
+        - run_osa | default(true) | bool
+
+    - name: Finished notice
+      debug:
+        msg: |
+          OSA deploy running. To check on the state of this deployment, login
+          to the deploy1 VM and attach to the "build-osa" tmux session.
+      when:
+        - run_osa | default(true) | bool
diff --git a/multi-node-aio/playbooks/deploy-pxe.yml b/multi-node-aio/playbooks/deploy-pxe.yml
new file mode 100644
index 00000000..9220b9e9
--- /dev/null
+++ b/multi-node-aio/playbooks/deploy-pxe.yml
@@ -0,0 +1,296 @@
+---
+# Copyright 2017, Rackspace US, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in witing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+- name: Gather facts
+  hosts: pxe_hosts
+  gather_facts: "{{ gather_facts | default(true) }}"
+  pre_tasks:
+    - name: Gather variables for each operating system
+      include_vars: "{{ item }}"
+      with_first_found:
+        - "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}-{{ ansible_distribution_version | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_os_family | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_os_family | lower }}.yml"
+      tags:
+        - always
+
+    - name: Install host distro packages
+      package:
+        pkg: "{{ item }}"
+        state: "latest"
+        update_cache: yes
+        cache_valid_time: 600
+      with_items: "{{ mnaio_pxe_distro_packages }}"
+
+    - name: Create base directories
+      file:
+        path: "{{ item }}"
+        state: directory
+        owner: "root"
+        group: "root"
+        mode: "0755"
+      with_items:
+        - /var/www/pxe
+        - /var/www/pxe/images
+        - /var/www/pxe/iso
+        - /var/www/pxe/networking
+        - /var/www/pxe/scripts
+        - /var/www/pxe/templates
+        - /var/lib/tftpboot
+        - /var/lib/tftpboot/boot-screens
+        - /var/lib/tftpboot/preseed
+        - /var/lib/tftpboot/pxelinux.cfg
+
+    - name: Get root public key
+      command: cat /root/.ssh/id_rsa.pub
+      register: public_key_get
+      changed_when: false
+
+    - name: Set key facts
+      set_fact:
+        tftp_ssh_key: "{{ public_key_get.stdout }}"
+
+  tasks:
+    - name: Drop NGINX config
+      copy:
+        src: "pxe/sites-enabled.default"
+        dest: /etc/nginx/sites-enabled/default
+        mode: "0644"
+        owner: root
+        group: root
+      notify:
+        - restart nginx
+
+    - name: Drop tftp-hpa configs
+      copy:
+        src: "pxe/tftp/tftp-hpa"
+        dest: /etc/default/tftpd-hpa
+        mode: "0644"
+        owner: root
+        group: root
+      notify:
+        - restart tftp-hpa
+
+    - name: Drop inetd configs
+      copy:
+        src: "pxe/tftp/inetd.conf"
+        dest: /etc/default/tftpd-hpa
+        mode: "0644"
+        owner: root
+        group: root
+      notify:
+        - restart tftp-hpa
+
+    - name: Download image iso(s)
+      get_url:
+        url: "{{ item.value.image_iso_url }}"
+        dest: "/var/www/pxe/iso/{{ item.value.image_name }}"
+      with_dict: "{{ images }}"
+
+    - name: Remove image directory if it exists
+      file:
+        path: "/var/www/pxe/images/{{ item.value.image_short_name }}"
+        state: absent
+      with_dict: "{{ images }}"
+
+    - name: Create image directory if it exists
+      file:
+        path: "/var/www/pxe/images/{{ item.value.image_short_name }}"
+        state: directory
+        owner: "root"
+        group: "root"
+        mode: "0755"
+      with_dict: "{{ images }}"
+
+    - name: Extract ISO(s) contents
+      command: "7z x /var/www/pxe/iso/{{ item.value.image_name }}"
+      args:
+        chdir: "/var/www/pxe/images/{{ item.value.image_short_name }}"
+      with_dict: "{{ images }}"
+
+    - name: Download pxelinux
+      get_url:
+        url: "{{ pxelinux_url }}"
+        dest: "/var/www/pxe/{{ pxelinux_name }}"
+        tmp_dest: /tmp/
+
+    - name: Remove image directory if it exists
+      file:
+        path: "/var/www/pxe/{{ pxelinux_short_name }}"
+        state: absent
+
+    - name: Extract pxelinux contents
+      command: "tar -xf /var/www/pxe/{{ pxelinux_name }}"
+      args:
+        chdir: "/var/www/pxe"
+
+    - name: Drop pxelinux.cfg default menu
+      copy:
+        src: "pxe/tftp/pxelinux.cfg.default"
+        dest: "{{ item }}"
+        mode: "0644"
+        owner: root
+        group: root
+      with_items:
+        - /var/lib/tftpboot/pxelinux.cfg/default
+        - /var/lib/tftpboot/boot-screens/syslinux.cfg
+
+    # These links are using the shell command because the file module does not create hard links
+    - name: Create hard links
+      shell: |
+        ln -f /var/www/pxe/{{ pxelinux_short_name }}/bios/com32/elflink/ldlinux/ldlinux.c32 /var/lib/tftpboot/ldlinux.c32
+        ln -f /var/www/pxe/{{ pxelinux_short_name }}/bios/core/pxelinux.0 /var/lib/tftpboot/pxelinux.0
+        ln -f /var/www/pxe/{{ pxelinux_short_name }}/bios/com32/lib/libcom32.c32 /var/lib/tftpboot/boot-screens/libcom32.c32
+        ln -f /var/www/pxe/{{ pxelinux_short_name }}/bios/com32/libutil/libutil.c32 /var/lib/tftpboot/boot-screens/libutil.c32
+        ln -f /var/www/pxe/{{ pxelinux_short_name }}/bios/com32/menu/vesamenu.c32 /var/lib/tftpboot/boot-screens/vesamenu.c32
+
+    - name: Drop boot-screens default menu
+      template:
+        src: "pxe/tftp/menu.cfg.j2"
+        dest: /var/lib/tftpboot/boot-screens/menu.cfg
+        mode: "0644"
+        owner: root
+        group: root
+      tags:
+        - boot-menu
+
+    - name: Drop tftp-hpa configs
+      template:
+        src: "pxe/tftp/tftp-hpa"
+        dest: /etc/default/tftpd-hpa
+        mode: "0644"
+        owner: root
+        group: root
+      notify:
+        - restart tftp-hpa
+
+    - name: network scripts for pxe
+      template:
+        src: "pxe/{{ ansible_os_family | lower }}/{{ item.src }}"
+        dest: /var/www/pxe/{{ item.dir }}/{{ item.dest }}
+        mode: "0644"
+        owner: root
+        group: root
+      with_items:
+        - src: basic-interface.cfg
+          dest: basic-interface.cfg
+          dir: networking
+        - src: mnaio-bridges.cfg.j2
+          dest: mnaio-bridges.cfg
+          dir: networking
+        - src: mnaio-post-install-script.sh.j2
+          dest: mnaio-post-install-script.sh
+          dir: scripts
+        - src: vm-post-install-script.sh.j2
+          dest: vm-post-install-script.sh
+          dir: scripts
+
+    - name: network scripts for servers
+      template:
+        src: "pxe/{{ ansible_os_family | lower }}/vm-bridges.cfg.j2"
+        dest: /var/www/pxe/networking/{{ item.server_hostname }}-bridges.cfg
+        mode: "0644"
+        owner: root
+        group: root
+      with_items: "{{ servers }}"
+
+    - name: tftp configs for servers
+      template:
+        src: "pxe/tftp/pxelinux.cfg.macaddr.j2"
+        dest: "/var/lib/tftpboot/pxelinux.cfg/01-{{ item.server_mac_address | replace(':', '-') }}"
+        mode: "0644"
+        owner: root
+        group: root
+      with_items: "{{ servers }}"
+
+    - name: Preseeds for pxe mnaio
+      template:
+        src: "pxe/{{ ansible_os_family | lower }}/mnaio.preseed.j2"
+        dest: /var/lib/tftpboot/preseed/mnaio.preseed
+        mode: "0644"
+        owner: root
+        group: root
+      with_dict: "{{ images }}"
+
+    - name: Preseeds for pxe vm
+      template:
+        src: "pxe/{{ ansible_os_family | lower }}/vm.preseed.j2"
+        dest: /var/lib/tftpboot/preseed/vm.preseed
+        mode: "0644"
+        owner: root
+        group: root
+      with_dict: "{{ images }}"
+
+    - name: Create netboot bind mount path
+      file:
+        path: "/var/lib/tftpboot/{{ item.value.image_short_name }}"
+        state: directory
+        owner: "root"
+        group: "root"
+        mode: "0755"
+      with_dict: "{{ images }}"
+
+    - name: Unbind mount netboot images
+      mount:
+        name: "/var/lib/tftpboot/{{ item.value.image_short_name }}"
+        src: "/var/www/pxe/images/{{ item.value.image_netboot }}"
+        opts: bind
+        fstype: none
+        state: unmounted
+      register: fstab
+      with_dict: "{{ images }}"
+
+    - name: Ensure permissions are correct
+      shell: |
+        # Fix perms if needed
+        find /var/lib/tftpboot -type d -exec chmod 0755 {} \;
+        find /var/lib/tftpboot -type f -exec chmod 0644 {} \;
+        find /var/www/pxe -type d -exec chmod 0755 {} \;
+
+    - name: Bind mount netboot images
+      mount:
+        name: "/var/lib/tftpboot/{{ item.value.image_short_name }}"
+        src: "/var/www/pxe/images/{{ item.value.image_netboot }}"
+        opts: bind
+        fstype: none
+        state: mounted
+      register: fstab
+      with_dict: "{{ images }}"
+
+  handlers:
+    - name: restart nginx
+      service:
+        name: "nginx"
+        state: restarted
+        enabled: yes
+
+    - name: restart tftp-hpa
+      service:
+        name: "tftpd-hpa"
+        state: restarted
+        enabled: yes
+
+    - name: restart inetd
+      service:
+        name: "inetutils-inetd"
+        state: restarted
+        enabled: yes
+
+  vars_files:
+    - vars/main.yml
+  tags:
+    - deploy-pxe
diff --git a/multi-node-aio/playbooks/deploy-vms.yml b/multi-node-aio/playbooks/deploy-vms.yml
new file mode 100644
index 00000000..a52df53e
--- /dev/null
+++ b/multi-node-aio/playbooks/deploy-vms.yml
@@ -0,0 +1,66 @@
+---
+# Copyright 2017, Rackspace US, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in witing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+- name: Gather facts
+  hosts: vm_hosts
+  gather_facts: "{{ gather_facts | default(true) }}"
+  pre_tasks:
+    - name: Gather variables for each operating system
+      include_vars: "{{ item }}"
+      with_first_found:
+        - "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}-{{ ansible_distribution_version | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_os_family | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_os_family | lower }}.yml"
+      tags:
+        - always
+
+  tasks:
+    - name: Create VM LV
+      lvol:
+        vg: vg01
+        lv: "{{ item.server_hostname }}"
+        size: "{{ default_vm_storage }}"
+      with_items: "{{ servers }}"
+
+    - name: Create the VM template
+      template:
+        src: kvm/kvm-vm.xml
+        dest: "/etc/libvirt/qemu/{{ item.server_hostname }}.xml"
+        mode: 0644
+        owner: root
+        group: root
+      with_items: "{{ servers }}"
+
+    - name: Define the VM
+      command: "virsh define /etc/libvirt/qemu/{{ item.server_hostname }}.xml"
+      failed_when: false
+      with_items: "{{ servers }}"
+
+    - name: Create the VM
+      command: "virsh create /etc/libvirt/qemu/{{ item.server_hostname }}.xml"
+      failed_when: false
+      with_items: "{{ servers }}"
+
+    - name: Start the VM
+      command: "virsh start {{ item.server_hostname }}"
+      failed_when: false
+      with_items: "{{ servers }}"
+
+  vars_files:
+    - vars/main.yml
+  tags:
+    - setup-host
diff --git a/multi-node-aio-xenial-ansible/roles/dhcpd_install/templates/dhcpd.conf.j2 b/multi-node-aio/playbooks/dhcp/dhcpd.conf.j2
similarity index 81%
rename from multi-node-aio-xenial-ansible/roles/dhcpd_install/templates/dhcpd.conf.j2
rename to multi-node-aio/playbooks/dhcp/dhcpd.conf.j2
index a8fccd42..970a1332 100644
--- a/multi-node-aio-xenial-ansible/roles/dhcpd_install/templates/dhcpd.conf.j2
+++ b/multi-node-aio/playbooks/dhcp/dhcpd.conf.j2
@@ -1,6 +1,3 @@
-#jinja2: lstrip_blocks: True
-### MANAGED BY {{ role_path|basename }} ANSIBLE ROLE ###
-
 ddns-update-style none;
 
 allow booting;
@@ -39,15 +36,15 @@ shared-network all-networks {
 
     {% endfor %}
 
-    {% if server_list.0.name != "blank" %}
     group {
-    {% for host in server_list %}
-        host {{ host.name }} {
-            hardware ethernet {{ host.hwaddr }};
-            fixed-address {{ host.ip }};
-            option host-name "{{ host.name }}";
+    {% for item in servers %}
+        host {{ item.server_hostname }} {
+            hardware ethernet {{ item.server_mac_address }};
+            fixed-address {{ item.server_vm_fixed_addr }};
+            option host-name "{{ item.server_hostname }}";
         }
     {% endfor %}
+
     }
-    {% endif %}
+
 }
diff --git a/multi-node-aio/playbooks/dhcp/isc-dhcp-server b/multi-node-aio/playbooks/dhcp/isc-dhcp-server
new file mode 100644
index 00000000..2cff3f8d
--- /dev/null
+++ b/multi-node-aio/playbooks/dhcp/isc-dhcp-server
@@ -0,0 +1 @@
+INTERFACES="vm-br-dhcp"
\ No newline at end of file
diff --git a/multi-node-aio/playbooks/inventory b/multi-node-aio/playbooks/inventory
new file mode 100644
index 00000000..3c55c86b
--- /dev/null
+++ b/multi-node-aio/playbooks/inventory
@@ -0,0 +1,51 @@
+[all]
+localhost ansible_connection=local
+mnaio1 ansible_host=10.0.2.1
+
+infra1 ansible_host=10.0.236.100
+infra2 ansible_host=10.0.236.101
+infra3 ansible_host=10.0.236.102
+log1 ansible_host=10.0.236.103
+compute1 ansible_host=10.0.236.105
+compute2 ansible_host=10.0.236.106
+cinder1 ansible_host=10.0.236.107
+cinder2 ansible_host=10.0.236.108
+swift1 ansible_host=10.0.236.109
+swift2 ansible_host=10.0.236.110
+swift3 ansible_host=10.0.236.111
+deploy1 ansible_host=10.0.236.112
+
+[pxe_hosts]
+mnaio1
+
+[dhcp_hosts]
+mnaio1
+
+[vm_hosts]
+mnaio1
+
+[deploy_hosts]
+deploy1
+
+[swift_hosts]
+swift1
+swift2
+swift3
+
+[cinder_hosts]
+cinder1
+cinder2
+
+[openstack_hosts]
+infra1
+infra2
+infra3
+log1
+compute1
+compute2
+cinder2
+cinder1
+swift1
+swift2
+swift3
+deploy1
diff --git a/multi-node-aio/playbooks/kvm/kvm-vm.xml b/multi-node-aio/playbooks/kvm/kvm-vm.xml
new file mode 100644
index 00000000..84ac53fa
--- /dev/null
+++ b/multi-node-aio/playbooks/kvm/kvm-vm.xml
@@ -0,0 +1,99 @@
+<domain type='kvm'>
+  <name>{{ item.server_hostname }}</name>
+  <memory unit='MiB'>{{ item.server_vm_ram }}</memory>
+  <currentMemory unit='MiB'>{{ item.server_vm_ram }}</currentMemory>
+  <vcpu placement='static' current='1'>{{ item.server_vm_vcpus }}</vcpu>
+  <resource>
+    <partition>/machine</partition>
+  </resource>
+  <os>
+    <type arch='x86_64' machine='pc-i440fx-{{ ansible_distribution_release | lower }}'>hvm</type>
+    <bootmenu enable='yes'/>
+  </os>
+  <features>
+    <acpi/>
+    <apic/>
+  </features>
+  <cpu mode='host-model'>
+    <model fallback='allow'/>
+    <topology sockets='1' cores='{{ item.server_vm_vcpus }}' threads='1'/>
+  </cpu>
+  <clock offset='utc'>
+    <timer name='rtc' tickpolicy='catchup'/>
+    <timer name='pit' tickpolicy='delay'/>
+    <timer name='hpet' present='no'/>
+  </clock>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>destroy</on_crash>
+  <pm>
+    <suspend-to-mem enabled='no'/>
+    <suspend-to-disk enabled='no'/>
+  </pm>
+  <devices>
+    <emulator>/usr/bin/kvm-spice</emulator>
+    <disk type='block' device='disk'>
+      <driver name='qemu' type='raw' cache='none' io='native'/>
+      <source dev='/dev/vg01/{{ item.server_hostname }}'/>
+      <target dev='vda' bus='virtio'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
+      <boot order='1'/>
+    </disk>
+    <controller type='pci' index='0' model='pci-root'>
+      <alias name='pci.0'/>
+    </controller>
+    <controller type='virtio-serial' index='0'>
+      <alias name='virtio-serial0'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
+    </controller>
+
+{% for _key, _value in item.server_networks.items()|sort(attribute='1.iface') %}
+    <interface type='network'>
+{%     if _key == item.server_vm_primary_network %}
+      <mac address='{{ item.server_mac_address }}'/>
+      <boot order='2'/>
+{%     endif %}
+      <source network='{{ _value.vm_int_iface }}'/>
+      <model type='virtio'/>
+    </interface>
+{% endfor %}
+
+    <serial type='pty'>
+      <source path='/dev/pts/4'/>
+      <target port='0'/>
+      <alias name='serial0'/>
+    </serial>
+
+    <console type='pty' tty='/dev/pts/4'>
+      <source path='/dev/pts/4'/>
+      <target type='serial' port='0'/>
+      <alias name='serial0'/>
+    </console>
+
+    <input type='mouse' bus='ps2'/>
+
+    <input type='keyboard' bus='ps2'/>
+
+    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
+      <listen type='address' address='127.0.0.1'/>
+    </graphics>
+
+    <video>
+      <model type='vmvga' vram='9216' heads='1'/>
+      <alias name='video0'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>
+    </video>
+
+    <memballoon model='virtio'>
+      <alias name='balloon0'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x0d' function='0x0'/>
+    </memballoon>
+
+    <rng model='virtio'>
+      <backend model='random'>/dev/random</backend>
+      <alias name='rng0'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x0e' function='0x0'/>
+    </rng>
+
+  </devices>
+</domain>
\ No newline at end of file
diff --git a/multi-node-aio/playbooks/kvm/libvirt-network-template.xml b/multi-node-aio/playbooks/kvm/libvirt-network-template.xml
new file mode 100644
index 00000000..3076e77f
--- /dev/null
+++ b/multi-node-aio/playbooks/kvm/libvirt-network-template.xml
@@ -0,0 +1,5 @@
+<network>
+  <name>{{ item.value.iface }}</name>
+  <forward mode="bridge"/>
+  <bridge name="{{ item.value.iface }}"/>
+</network>
diff --git a/multi-node-aio/playbooks/osa/openstack_user_config.yml b/multi-node-aio/playbooks/osa/openstack_user_config.yml
new file mode 100644
index 00000000..f14eb977
--- /dev/null
+++ b/multi-node-aio/playbooks/osa/openstack_user_config.yml
@@ -0,0 +1,206 @@
+---
+cidr_networks:
+  container: 10.0.236.0/22
+  tunnel: 10.0.240.0/22
+  storage: 10.0.244.0/22
+  flat: 10.0.248.0/22
+
+used_ips:
+  - "10.0.236.0,10.0.236.200"
+  - "10.0.240.0,10.0.240.200"
+  - "10.0.244.0,10.0.244.200"
+  - "10.0.248.0,10.0.248.200"
+
+global_overrides:
+  internal_lb_vip_address: "10.0.236.112"
+  external_lb_vip_address: "10.0.2.150"
+  tunnel_bridge: "br-vxlan"
+  management_bridge: "br-mgmt"
+  provider_networks:
+    - network:
+        container_bridge: "br-mgmt"
+        container_type: "veth"
+        container_interface: "eth1"
+        ip_from_q: "container"
+        type: "raw"
+        group_binds:
+          - all_containers
+          - hosts
+        is_container_address: true
+        is_ssh_address: true
+    - network:
+        container_bridge: "br-vxlan"
+        container_type: "veth"
+        container_interface: "eth10"
+        ip_from_q: "tunnel"
+        type: "vxlan"
+        range: "1:1000"
+        net_name: "vxlan"
+        group_binds:
+          - neutron_linuxbridge_agent
+    - network:
+        container_bridge: "br-flat"
+        container_type: "veth"
+        container_interface: "eth12"
+        type: "flat"
+        net_name: "flat"
+        group_binds:
+          - neutron_linuxbridge_agent
+          - utility_all
+    - network:
+        container_bridge: "br-vlan"
+        container_type: "veth"
+        container_interface: "eth11"
+        type: "vlan"
+        range: "1:1"
+        net_name: "vlan"
+        group_binds:
+          - neutron_linuxbridge_agent
+    - network:
+        container_bridge: "br-storage"
+        container_type: "veth"
+        container_interface: "eth2"
+        ip_from_q: "storage"
+        type: "raw"
+        group_binds:
+          - glance_api
+          - cinder_api
+          - cinder_volume
+          - nova_compute
+          - swift_proxy
+  swift:
+    part_power: 8
+    storage_network: 'br-storage'
+    replication_network: 'br-storage'
+    drives:
+      - name: disk1
+      - name: disk2
+      - name: disk3
+    mount_point: /srv
+    storage_policies:
+      - policy:
+          name: default
+          index: 0
+          default: True
+
+###
+### Anchors
+###
+infra_block: &infra_block
+  infra1:
+    ip: 10.0.236.100
+
+  infra2:
+    ip: 10.0.236.101
+
+  infra3:
+    ip: 10.0.236.102
+
+compute_block: &compute_block
+  compute1:
+    ip: 10.0.236.105
+
+  compute2:
+    ip: 10.0.236.106
+
+cinder_block: &cinder_block
+  cinder1:
+    ip: 10.0.236.107
+    container_vars:
+      cinder_backends:
+        limit_container_types: cinder_volume
+        lvm:
+          volume_group: cinder-volumes
+          volume_driver: cinder.volume.drivers.lvm.LVMVolumeDriver
+          volume_backend_name: LVM_iSCSI
+          iscsi_ip_address: "10.0.244.107"
+
+  cinder2:
+    ip: 10.0.236.108
+    container_vars:
+      cinder_backends:
+        limit_container_types: cinder_volume
+        lvm:
+          volume_group: cinder-volumes
+          volume_driver: cinder.volume.drivers.lvm.LVMVolumeDriver
+          volume_backend_name: LVM_iSCSI
+          iscsi_ip_address: "10.0.244.108"
+
+swift_block: &swift_block
+  swift1:
+    ip: 10.0.236.109
+
+  swift1:
+    ip: 10.0.236.110
+
+  swift1:
+    ip: 10.0.236.111
+
+###
+### Infrastructure
+###
+
+# galera, memcache, rabbitmq, utility
+shared-infra_hosts: *infra_block
+
+# repository (apt cache, python packages, etc)
+repo-infra_hosts: *infra_block
+
+# rsyslog server
+log_hosts:
+  log1:
+    ip: 10.0.236.103
+
+# load balancer
+haproxy_hosts:
+  deploy1:
+    ip: 10.0.236.112
+
+###
+### OpenStack
+###
+
+# keystone
+identity_hosts: *infra_block
+
+# cinder api services
+storage-infra_hosts: *infra_block
+
+# glance
+image_hosts: *infra_block
+
+# nova api, conductor, etc services
+compute-infra_hosts: *infra_block
+
+# heat
+orchestration_hosts: *infra_block
+
+# horizon
+dashboard_hosts: *infra_block
+
+# neutron server, agents (L3, etc)
+network_hosts: *infra_block
+
+# ceilometer (telemetry data collection)
+metering-infra_hosts: *infra_block
+
+# aodh (telemetry alarm service)
+metering-alarm_hosts: *infra_block
+
+# gnocchi (telemetry metrics storage)
+metrics_hosts: *infra_block
+
+# ceilometer compute agent (telemetry data collection)
+metering-compute_hosts: *compute_block
+
+# nova hypervisors
+compute_hosts: *compute_block
+
+# cinder storage host (LVM-backed)
+storage_hosts: *cinder_block
+
+# swift storage hosts
+swift_hosts: *swift_block
+
+# swift infra hosts
+swift-proxy_hosts: *infra_block
\ No newline at end of file
diff --git a/multi-node-aio/playbooks/osa/user_mnaio_variables.yml b/multi-node-aio/playbooks/osa/user_mnaio_variables.yml
new file mode 100644
index 00000000..95bf20e4
--- /dev/null
+++ b/multi-node-aio/playbooks/osa/user_mnaio_variables.yml
@@ -0,0 +1,30 @@
+---
+
+lxc_container_backing_store: dir
+
+# Tempest is being configured to use a known network
+tempest_public_subnet_cidr: 10.0.248.0/26
+
+# This makes running neutron in a distributed system easier and a lot less noisy
+neutron_l2_population: True
+
+# This makes the glance image store use swift instead of the file backend
+glance_default_store: swift
+
+{% if http_proxy is defined and http_proxy %}
+proxy_env_url: "{{ http_proxy }}"
+{% raw %}
+no_proxy_env: "localhost,127.0.0.1,{{ internal_lb_vip_address }},{{ external_lb_vip_address }},{% for host in groups['\''all_containers'\''] %}{{ hostvars[host]['\''container_address'\''] }}{% if not loop.last %},{% endif %}{% endfor %}"
+global_environment_variables:
+  HTTP_PROXY: "{{ proxy_env_url }}"
+  HTTPS_PROXY: "{{ proxy_env_url }}"
+  NO_PROXY: "{{ no_proxy_env }}"
+  http_proxy: "{{ proxy_env_url }}"
+  https_proxy: "{{ proxy_env_url }}"
+  no_proxy: "{{ no_proxy_env }}"
+{% endraw %}
+
+glance_glance_api_conf_overrides:
+  glance_store:
+    http_proxy_information: "http:http://, https:http://"
+{% endif %}
diff --git a/multi-node-aio/playbooks/pxe/debian/basic-interface.cfg b/multi-node-aio/playbooks/pxe/debian/basic-interface.cfg
new file mode 100644
index 00000000..02e7e50b
--- /dev/null
+++ b/multi-node-aio/playbooks/pxe/debian/basic-interface.cfg
@@ -0,0 +1,7 @@
+# This file describes the network interfaces available on your system
+# and how to activate them. For more information, see interfaces(5).
+# The loopback network interface
+auto lo
+iface lo inet loopback
+
+source /etc/network/interfaces.d/*.cfg
\ No newline at end of file
diff --git a/multi-node-aio/playbooks/pxe/debian/mnaio-bridges.cfg.j2 b/multi-node-aio/playbooks/pxe/debian/mnaio-bridges.cfg.j2
new file mode 100644
index 00000000..ac359843
--- /dev/null
+++ b/multi-node-aio/playbooks/pxe/debian/mnaio-bridges.cfg.j2
@@ -0,0 +1,19 @@
+# Physical interface, could be bond. This only needs to be set once
+{% for key, value in mnaio_host_networks.items() %}
+{% if value.iface_port != 'none' %}
+auto {{ value.iface_port }}
+iface {{ value.iface_port }} inet manual
+{% endif %}
+
+auto {{ value.iface }}
+iface {{ value.iface }} inet {{ value.inet_type }}
+    bridge_stp off
+    bridge_waitport {{ value.iface_port == 'none' | ternary('0', '10') }}
+    bridge_fd 0
+    bridge_ports {{ value.iface_port }}
+    offload-sg off
+{% if value.address is defined %}
+    address {{ value.address }}
+{% endif %}
+
+{% endfor %}
diff --git a/multi-node-aio/playbooks/pxe/debian/mnaio-post-install-script.sh.j2 b/multi-node-aio/playbooks/pxe/debian/mnaio-post-install-script.sh.j2
new file mode 100644
index 00000000..420d6c05
--- /dev/null
+++ b/multi-node-aio/playbooks/pxe/debian/mnaio-post-install-script.sh.j2
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+apt-get remove --purge snap* lxc* lxd* || true
+
+sed -i 's/\(GRUB_CMDLINE_LINUX_DEFAULT=\).*/\1\"\"/g' /target/etc/default/grub
+update-grub
+
+sed -i '/PermitRootLogin / s/ .*/ yes/' /etc/ssh/sshd_config
+
+mkdir -p /root/.ssh
+chmod 0700 /root/.ssh
+echo "{{ tftp_ssh_key }}" >> /root/.ssh/authorized_keys
+
+wget {{ tftp_server }}/networking/mnaio-bridges.cfg -O /etc/network/interfaces.d/mnaio-bridges.cfg
+wget {{ tftp_server }}/networking/basic-interface.cfg -O /etc/network/interfaces
diff --git a/multi-node-aio/playbooks/pxe/debian/mnaio.preseed.j2 b/multi-node-aio/playbooks/pxe/debian/mnaio.preseed.j2
new file mode 100644
index 00000000..13cc6586
--- /dev/null
+++ b/multi-node-aio/playbooks/pxe/debian/mnaio.preseed.j2
@@ -0,0 +1,256 @@
+# Ubuntu Server Preseed
+# Kernel Options
+
+# Use the following option to add additional boot parameters for the
+# installed system (if supported by the bootloader installer).
+# Note: options passed to the installer will be added automatically.
+d-i debian-installer/add-kernel-opts string biosdevname=0 net.ifnames=0
+
+# Networking
+d-i netcfg/choose_interface select eth0
+d-i netcfg/dhcp_timeout string 60
+d-i netcfg/get_hostname string host1
+d-i netcfg/get_domain string host1.openstack.local
+
+## USE THIS FOR STATIC NETWORKING
+# d-i netcfg/disable_autoconfig boolean true
+# d-i netcfg/dhcp_failed note
+# d-i netcfg/dhcp_options select Configure network manually
+
+# # Static network configuration.
+# d-i netcfg/get_ipaddress string 10.0.0.100
+# d-i netcfg/get_netmask string 255.255.255.0
+# d-i netcfg/get_gateway string 10.0.0.200
+# d-i netcfg/get_nameservers string 8.8.8.8
+# d-i netcfg/confirm_static boolean true
+## USE THIS FOR STATIC NETWORKING
+
+# Disable that annoying WEP key dialog.
+d-i netcfg/wireless_wep string
+
+# Pre Install
+
+# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/vda. See Ubuntu bug #1347726.
+d-i preseed/early_command string \
+      umount /media || true
+
+# Net Image
+
+# Required at least for 12.10+
+d-i live-installer/net-image string {{ tftp_server }}/images/{{ item.value.image_short_name }}/install/filesystem.squashfs
+
+# Localization
+
+d-i debian-installer/locale string en
+d-i debian-installer/country string US
+d-i debian-installer/locale string en_US.UTF-8
+d-i debian-installer/language string en
+
+# Keyboard
+
+# Disable automatic (interactive) keymap detection.
+d-i console-setup/ask_detect boolean false
+d-i console-setup/layoutcode string us
+d-i console-setup/variantcode string
+d-i keyboard-configuration/layoutcode string us
+
+# Mirror
+
+d-i mirror/country string manual
+d-i mirror/http/proxy string
+d-i mirror/http/hostname string archive.ubuntu.com
+d-i mirror/http/directory string /ubuntu
+
+# Clock and Time Zone
+
+# Controls whether to use NTP to set the clock during the install
+d-i clock-setup/ntp boolean true
+d-i clock-setup/ntp-server string ntp.ubuntu.com
+
+# You may set this to any valid setting for TZ; see the contents of
+# /usr/share/zoneinfo/ for valid values.
+d-i time/zone string US/Central
+
+# Controls whether or not the hardware clock is set to UTC.
+d-i clock-setup/utc boolean true
+
+# Partitioning
+
+# If one of the disks that are going to be automatically partitioned
+# contains an old LVM configuration, the user will normally receive a
+# warning. This can be preseeded away...
+d-i partman-lvm/device_remove_lvm boolean true
+d-i partman-lvm/device_remove_lvm_span boolean true
+d-i partman-auto/purge_lvm_from_device boolean true
+
+# The same applies to pre-existing software RAID array:
+d-i partman-md/device_remove_md boolean true
+
+# And the same goes for the confirmation to write the lvm partitions.
+d-i partman-lvm/confirm boolean true
+d-i partman-lvm/confirm_nooverwrite boolean true
+d-i partman-md/confirm boolean true
+d-i partman-md/confirm_nooverwrite boolean true
+
+d-i partman-basicfilesystems/choose_label string gpt
+d-i partman-basicfilesystems/default_label string gpt
+d-i partman-partitioning/choose_label string gpt
+d-i partman-partitioning/default_label string gpt
+d-i partman/choose_label string gpt
+d-i partman/default_label string gpt
+
+d-i partman-auto/method string raid
+d-i partman-auto/disk string /dev/[sv]da /dev/[sv]db
+
+# For LVM partitioning, you can select how much of the volume group to use
+# for logical volumes.
+d-i partman-auto-lvm/guided_size string max
+d-i partman-auto-lvm/new_vg_name string vg00
+
+d-i partman-auto/choose_recipe select custompartitioning
+
+d-i partman-auto/expert_recipe string \
+      custompartitioning :: \
+              1 1 1 free                              \
+                      $gptonly{ }                    \
+                      $primary{ }                    \
+                      $bios_boot{ }                  \
+                      method{ biosgrub }              \
+              .                                       \
+              256 1 512 raid                          \
+                      $gptonly{ }                    \
+                      $lvmignore{ }                  \
+                      $primary{ }                    \
+                      $bootable{ }                   \
+                      method{ raid }                  \
+                      raidid{ 1 }                     \
+              .                                       \
+              204800 1 -1 raid                        \
+                      $gptonly{ }                    \
+                      $lvmignore{ }                  \
+                      method{ raid }                  \
+                      raidid{ 2 }                     \
+              .                                       \
+              1024 512 400% linux-swap                \
+                      $defaultignore{ }              \
+                      $lvmok{ }                      \
+                      method{ swap }                  \
+                      format{ }                       \
+              .                                       \
+              16384 5000 100% ext4                    \
+                      $defaultignore{ }              \
+                      $lvmok{ }                      \
+                      method{ format }                \
+                      format{ }                       \
+                      use_filesystem{ }               \
+                      filesystem{ ext4 }              \
+                      mountpoint{ / }                 \
+              .                                       \
+              81920 1000 100% ext4                    \
+                      $defaultignore{ }              \
+                      $lvmok{ }                      \
+                      lv_name{ openstack00 }          \
+                      method{ format }                \
+                      format{ }                       \
+                      use_filesystem{ }               \
+                      filesystem{ ext4 }              \
+                      label{ openstack }              \
+                      mountpoint{ /openstack }        \
+              .                                       \
+              81920 1000 100% btrfs                   \
+                      $defaultignore{ }              \
+                      $lvmok{ }                      \
+                      lv_name{ machines00 }           \
+                      method{ format }                \
+                      format{ }                       \
+                      use_filesystem{ }               \
+                      filesystem{ btrfs }             \
+                      label{ machines }               \
+                      mountpoint{ /var/lib/machines } \
+              .                                       \
+
+d-i partman-auto-raid/recipe string \
+    0 2 0 ext2 /boot raidid=1       \
+        /dev/[sv]da1#/dev/[sv]db1   \
+    .                               \
+    0 2 0 lvm - raidid=2            \
+        /dev/[sv]da5#/dev/[sv]db5   \
+    .                               \
+
+# This makes partman automatically partition without confirmation, provided
+# that you told it what to do using one of the methods above.
+d-i partman-partitioning/confirm_write_new_label boolean true
+d-i partman/choose_partition select finish
+d-i partman/confirm boolean true
+d-i partman/confirm_nooverwrite boolean true
+
+# Packages
+
+# Package selection
+tasksel tasksel/first multiselect openssh-server
+
+# Whether to upgrade packages after debootstrap.
+# Allowed values: none, safe-upgrade, full-upgrade
+d-i pkgsel/upgrade select full-upgrade
+d-i pkgsel/include string bridge-utils      \
+                          dstat             \
+                          ethtool           \
+                          git               \
+                          htop              \
+                          ifenslave         \
+                          libvirt-bin       \
+                          lvm2              \
+                          openssh-server    \
+                          parted            \
+                          python3-all       \
+                          python-all        \
+                          qemu-kvm          \
+                          systemd-container \
+                          tmux              \
+                          vim               \
+                          virt-manager      \
+                          virtinst          \
+                          vlan
+
+d-i pkgsel/update-policy select none
+
+# Some versions of the installer can report back on what software you have
+# installed, and what software you use. The default is not to report back,
+# but sending reports helps the project determine what software is most
+# popular and include it on CDs.
+popularity-contest popularity-contest/participate boolean false
+
+# Users and Password
+
+# Skip creation of a root account (normal user account will be able to
+# use sudo). The default is false; preseed this to true if you want to set
+# a root password.
+d-i passwd/root-login boolean true
+
+# Alternatively, to skip creation of a normal user account.
+d-i passwd/make-user boolean false
+
+# The installer will warn about weak passwords. If you are sure you know
+# what you're doing and want to override it, uncomment this.
+d-i user-setup/allow-password-weak boolean true
+
+# Root password, either in clear text
+d-i passwd/root-password password secrete
+d-i passwd/root-password-again password secrete
+
+# Bootloader
+
+# This is fairly safe to set, it makes grub install automatically to the MBR
+# if no other operating system is detected on the machine.
+d-i grub-installer/only_debian boolean true
+
+# Post Install
+
+d-i preseed/late_command string \
+  in-target bash -c "wget {{ tftp_server }}/scripts/mnaio-post-install-script.sh -O /opt/mnaio-post-install-script.sh"; \
+  in-target bash -c 'chmod +x /opt/mnaio-post-install-script.sh'; \
+  in-target bash -c '/opt/mnaio-post-install-script.sh'
+# Finish
+
+# Reboot after the install is finished.
+d-i finish-install/reboot_in_progress note
diff --git a/multi-node-aio/playbooks/pxe/debian/vm-bridges.cfg.j2 b/multi-node-aio/playbooks/pxe/debian/vm-bridges.cfg.j2
new file mode 100644
index 00000000..0fb421e5
--- /dev/null
+++ b/multi-node-aio/playbooks/pxe/debian/vm-bridges.cfg.j2
@@ -0,0 +1,18 @@
+# Physical interface, could be bond. This only needs to be set once
+
+{% for key, value in item.server_networks.items()|sort(attribute='1.iface') %}
+auto {{ value.iface }}
+iface {{ value.iface }} inet manual
+
+auto br-{{ key }}
+iface br-{{ key }} inet {{ value.inet_type }}
+    bridge_stp off
+    bridge_waitport 10
+    bridge_fd 0
+    bridge_ports {{ value.iface }}
+    offload-sg off
+{% if value.address is defined %}
+    address {{ value.address }}
+{% endif %}
+
+{% endfor %}
diff --git a/multi-node-aio/playbooks/pxe/debian/vm-post-install-script.sh.j2 b/multi-node-aio/playbooks/pxe/debian/vm-post-install-script.sh.j2
new file mode 100644
index 00000000..62f97706
--- /dev/null
+++ b/multi-node-aio/playbooks/pxe/debian/vm-post-install-script.sh.j2
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+
+apt-get remove --purge snap* lxc* lxd* || true
+
+sed -i 's/\(GRUB_CMDLINE_LINUX_DEFAULT=\).*/\1\"\"/g' /target/etc/default/grub
+update-grub
+
+sed -i '/PermitRootLogin / s/ .*/ yes/' /etc/ssh/sshd_config
+
+mkdir -p /root/.ssh
+chmod 0700 /root/.ssh
+echo "{{ tftp_ssh_key }}" >> /root/.ssh/authorized_keys
+
+wget {{ tftp_server }}/networking/$(cat /etc/hostname)-bridges.cfg -O /etc/network/interfaces.d/vm-bridges.cfg
+wget {{ tftp_server }}/networking/basic-interface.cfg -O /etc/network/interfaces
+
+cat > /etc/network/if-up.d/post-up-rules <<EOF
+#!/usr/bin/env bash
+
+function iptables_filter_rule_add {
+if ! iptables -w -t $1 -C $2;then
+  /sbin/iptables -w -t $1 -I $2
+fi
+}
+
+# To ensure ssh checksum is correct
+iptables_filter_rule_add "mangle" "POSTROUTING -p tcp --dport 22 -j CHECKSUM --checksum-fill"
+
+# To provide internet connectivity to instances
+iptables_filter_rule_add "nat" "POSTROUTING -o \$(ip route get 1 | awk '{print $5}') -j MASQUERADE"
+
+# Make sure instances can talk to the metadata server
+iptables_filter_rule_add "mangle" "POSTROUTING -p tcp --sport 80 -j CHECKSUM --checksum-fill"
+EOF
+chmod + /etc/network/if-up.d/post-up-rules
diff --git a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-nova_compute.seed.j2 b/multi-node-aio/playbooks/pxe/debian/vm.preseed.j2
similarity index 59%
rename from multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-nova_compute.seed.j2
rename to multi-node-aio/playbooks/pxe/debian/vm.preseed.j2
index 29c0b2ab..90513104 100644
--- a/multi-node-aio-xenial-ansible/roles/tftpboot_configure/templates/ubuntu-server-16.04-unattended-nova_compute.seed.j2
+++ b/multi-node-aio/playbooks/pxe/debian/vm.preseed.j2
@@ -1,77 +1,52 @@
-#
-# Ubuntu Server 16.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/16.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
+# Ubuntu Server Preseed
 # Kernel Options
-#
-#############
 
 # Use the following option to add additional boot parameters for the
 # installed system (if supported by the bootloader installer).
 # Note: options passed to the installer will be added automatically.
 d-i debian-installer/add-kernel-opts string biosdevname=0 net.ifnames=0
 
-#############
-#
 # Networking
-#
-#############
-
-d-i netcfg/choose_interface select {{ vm_net_iface }}
+d-i netcfg/choose_interface select eth0
 d-i netcfg/dhcp_timeout string 60
-#d-i netcfg/disable_autoconfig boolean true
-#d-i netcfg/dhcp_failed note
-#d-i netcfg/dhcp_options select Configure network manually
+d-i netcfg/get_hostname string common1
+d-i netcfg/get_domain string common1.openstackci.local
 
-# Static network configuration.
-#d-i netcfg/get_ipaddress string 192.168.0.1
-#d-i netcfg/get_netmask string 255.255.255.0
-#d-i netcfg/get_gateway string 192.168.0.2
-#d-i netcfg/get_nameservers string 8.8.8.8
-#d-i netcfg/confirm_static boolean true
+## USE THIS FOR STATIC NETWORKING
+# d-i netcfg/disable_autoconfig boolean true
+# d-i netcfg/dhcp_failed note
+# d-i netcfg/dhcp_options select Configure network manually
 
-d-i netcfg/get_hostname string nova_node
-d-i netcfg/get_domain string openstackci.local
+# # Static network configuration.
+# d-i netcfg/get_ipaddress string 10.0.0.100
+# d-i netcfg/get_netmask string 255.255.255.0
+# d-i netcfg/get_gateway string 10.0.0.200
+# d-i netcfg/get_nameservers string 8.8.8.8
+# d-i netcfg/confirm_static boolean true
+## USE THIS FOR STATIC NETWORKING
 
 # Disable that annoying WEP key dialog.
 d-i netcfg/wireless_wep string
 
-#############
-#
 # Pre Install
-#
-#############
 
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/{{ vm_disk_device }}. See Ubuntu bug #1347726.
+# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/vda. See Ubuntu bug #1347726.
 d-i preseed/early_command string \
       umount /media || true
 
-#############
-#
+# Net Image
+
+# Required at least for 12.10+
+d-i live-installer/net-image string {{ tftp_server }}/images/{{ item.value.image_short_name }}/install/filesystem.squashfs
+
 # Localization
-#
-#############
 
 d-i debian-installer/locale string en
 d-i debian-installer/country string US
 d-i debian-installer/locale string en_US.UTF-8
 d-i debian-installer/language string en
 
-#############
-#
 # Keyboard
-#
-#############
 
 # Disable automatic (interactive) keymap detection.
 d-i console-setup/ask_detect boolean false
@@ -79,55 +54,34 @@ d-i console-setup/layoutcode string us
 d-i console-setup/variantcode string
 d-i keyboard-configuration/layoutcode string us
 
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://{{ tftp_mirror }}/ubuntu/install/filesystem.squashfs
-
-#############
-#
 # Mirror
-#
-#############
 
 d-i mirror/country string manual
-{% if tftp_proxy != 'blank' %}
-d-i mirror/http/proxy string {{ tftp_proxy }}
-{% endif %}
-d-i mirror/http/hostname string {{ tftp_mirror }}
-d-i mirror/http/directory string /ubuntu
+d-i mirror/http/proxy string {{ default_ubuntu_mirror_proxy }}
+d-i mirror/http/hostname string {{ default_ubuntu_mirror_hostname }}
+d-i mirror/http/directory string {{ default_ubuntu_mirror_directory }}
 
-#############
-#
 # Clock and Time Zone
-#
-#############
 
 # Controls whether to use NTP to set the clock during the install
 d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string {{ ntp_server }}
+d-i clock-setup/ntp-server string ntp.ubuntu.com
 
-# You may set this to any valid setting for $TZ; see the contents of
+# You may set this to any valid setting for TZ; see the contents of
 # /usr/share/zoneinfo/ for valid values.
 d-i time/zone string US/Central
 
 # Controls whether or not the hardware clock is set to UTC.
 d-i clock-setup/utc boolean true
 
-#############
-#
 # Partitioning
-#
-#############
 
 # If one of the disks that are going to be automatically partitioned
 # contains an old LVM configuration, the user will normally receive a
 # warning. This can be preseeded away...
 d-i partman-lvm/device_remove_lvm boolean true
+d-i partman-lvm/device_remove_lvm_span boolean true
+d-i partman-auto/purge_lvm_from_device boolean true
 
 # The same applies to pre-existing software RAID array:
 d-i partman-md/device_remove_md boolean true
@@ -137,14 +91,12 @@ d-i partman-lvm/confirm boolean true
 d-i partman-lvm/confirm_nooverwrite boolean true
 
 d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/{{ vm_disk_device }}
+d-i partman-auto/disk string /dev/vda
 
 # For LVM partitioning, you can select how much of the volume group to use
 # for logical volumes.
 d-i partman-auto-lvm/guided_size string max
-
-# This is used to auto-confirm its OK to use a partition without an FS
-d-i partman-basicmethods/method_only boolean false
+d-i partman-auto-lvm/new_vg_name string vg00
 
 d-i partman-auto/choose_recipe select custompartitioning
 d-i partman-auto/expert_recipe string \
@@ -160,37 +112,45 @@ d-i partman-auto/expert_recipe string \
               1024 1 100% ext4                                \
                       $primary{ }                             \
                       method{ lvm }                           \
-                      device{ /dev/{{ vm_disk_device }}2 }    \
-                      vg_name{ lxc }                          \
+                      device{ /dev/vda2 }                     \
+                      vg_name{ vg00 }                         \
               .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
+              1024 1 4096 linux-swap                          \
+                      $lvmok{ } in_vg{ vg00 }                 \
                       lv_name{ swap00 }                       \
                       method{ swap } format{ }                \
               .                                               \
-              51200 1 51200 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
+              8192 1 16384 ext4                               \
+                      $lvmok{ } in_vg{ vg00 }                 \
                       lv_name{ root00 }                       \
                       method{ format } format{ }              \
                       use_filesystem{ } filesystem{ ext4 }    \
                       label{ root }                           \
                       mountpoint{ / }                         \
               .                                               \
-              76800 1 76800 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
+              16384 1 16384 ext4                              \
+                      $lvmok{ } in_vg{ vg00 }                 \
                       lv_name{ openstack00 }                  \
                       method{ format } format{ }              \
                       use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
+                      label{ openstack }                      \
                       mountpoint{ /openstack }                \
               .                                               \
-              1024 1 1000000000 ext4                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ nova00 }                       \
+              8192 1 16384 btrfs                              \
+                      $lvmok{ } in_vg{ vg00 }                 \
+                      lv_name{ machines00 }                   \
+                      method{ format } format{ }              \
+                      use_filesystem{ } filesystem{ btrfs }   \
+                      label{ machines }                       \
+                      mountpoint{ /var/lib/machines }         \
+              .                                               \
+              1024 1 1024000 ext4                             \
+                      $lvmok{ } in_vg{ vg00 }                 \
+                      lv_name{ deleteme00 }                   \
                       method{ format } format{ }              \
                       use_filesystem{ } filesystem{ ext4 }    \
-                      label{ nova }                           \
-                      mountpoint{ /var/lib/nova }             \
+                      label{ deleteme }                       \
+                      mountpoint{ /deleteme }                 \
               .                                               \
 
 # This makes partman automatically partition without confirmation, provided
@@ -200,11 +160,7 @@ d-i partman/choose_partition select finish
 d-i partman/confirm boolean true
 d-i partman/confirm_nooverwrite boolean true
 
-#############
-#
 # Packages
-#
-#############
 
 # Package selection
 tasksel tasksel/first multiselect openssh-server
@@ -212,10 +168,22 @@ tasksel tasksel/first multiselect openssh-server
 # Whether to upgrade packages after debootstrap.
 # Allowed values: none, safe-upgrade, full-upgrade
 d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python2.7 vim vlan python-simplejson
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
+d-i pkgsel/include string bridge-utils      \
+                          dstat             \
+                          ethtool           \
+                          git               \
+                          htop              \
+                          ifenslave         \
+                          lvm2              \
+                          openssh-server    \
+                          parted            \
+                          python-all        \
+                          qemu-guest-agent  \
+                          tmux              \
+                          vim               \
+                          vlan              \
+                          xfsprogs
+
 d-i pkgsel/update-policy select none
 
 # Some versions of the installer can report back on what software you have
@@ -224,11 +192,7 @@ d-i pkgsel/update-policy select none
 # popular and include it on CDs.
 popularity-contest popularity-contest/participate boolean false
 
-#############
-#
 # Users and Password
-#
-#############
 
 # Skip creation of a root account (normal user account will be able to
 # use sudo). The default is false; preseed this to true if you want to set
@@ -243,42 +207,22 @@ d-i passwd/make-user boolean false
 d-i user-setup/allow-password-weak boolean true
 
 # Root password, either in clear text
-d-i passwd/root-password password {{ preseed_password }}
-d-i passwd/root-password-again password {{ preseed_password }}
+d-i passwd/root-password password secrete
+d-i passwd/root-password-again password secrete
 
-#############
-#
 # Bootloader
-#
-#############
 
 # This is fairly safe to set, it makes grub install automatically to the MBR
 # if no other operating system is detected on the machine.
 d-i grub-installer/only_debian boolean true
 
-#############
-#
 # Post Install
-#
-#############
 
 d-i preseed/late_command string \
-  wget --no-proxy http://{{ webserver_ip_address }}/xenial-sources.list -O /target/etc/apt/sources.list; \
-  wget --no-proxy http://{{ webserver_ip_address }}/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "{{ ssh_key }}" >> /target/root/.ssh/authorized_keys; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-#############
-#
+  in-target bash -c "wget {{ tftp_server }}/scripts/vm-post-install-script.sh -O /opt/vm-post-install-script.sh"; \
+  in-target bash -c 'chmod +x /opt/vm-post-install-script.sh'; \
+  in-target bash -c '/opt/vm-post-install-script.sh'
 # Finish
-#
-#############
 
 # Reboot after the install is finished.
 d-i finish-install/reboot_in_progress note
diff --git a/multi-node-aio/playbooks/pxe/sites-enabled.default b/multi-node-aio/playbooks/pxe/sites-enabled.default
new file mode 100644
index 00000000..0ae18590
--- /dev/null
+++ b/multi-node-aio/playbooks/pxe/sites-enabled.default
@@ -0,0 +1,8 @@
+server {
+  listen 80 default_server;
+  listen [::]:80 default_server;
+  root /var/www/pxe;
+  location / {
+    autoindex on;
+  }
+}
\ No newline at end of file
diff --git a/multi-node-aio/playbooks/pxe/tftp/inetd.conf b/multi-node-aio/playbooks/pxe/tftp/inetd.conf
new file mode 100644
index 00000000..934eedc0
--- /dev/null
+++ b/multi-node-aio/playbooks/pxe/tftp/inetd.conf
@@ -0,0 +1 @@
+tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot
diff --git a/multi-node-aio/playbooks/pxe/tftp/menu.cfg.j2 b/multi-node-aio/playbooks/pxe/tftp/menu.cfg.j2
new file mode 100644
index 00000000..c19531ab
--- /dev/null
+++ b/multi-node-aio/playbooks/pxe/tftp/menu.cfg.j2
@@ -0,0 +1,24 @@
+menu hshift 13
+menu width 49
+menu margin 8
+menu tabmsg
+
+menu title Boot Menu
+label local
+    menu label ^Boot local hard drive
+    LOCALBOOT 0
+
+{% for key, value in images.items() %}
+{%   for _key, _value in value.image_preseeds.items() %}
+label {{ key }}-{{ _key }}
+    menu label ^{{ key }}-{{ _key }} automated install
+    kernel {{ value.image_kernel }}
+{%     if value.image_type == 'debian' %}
+    append {{ value.image_kernel_options }} initrd={{ value.image_initrd }} preseed/url={{ _value.url }} preseed/interactive=false netcfg/choose_interface={{ default_interface }}
+{%     endif %}
+
+{%   endfor %}
+
+{% endfor %}
+
+menu end
diff --git a/multi-node-aio/playbooks/pxe/tftp/pxelinux.cfg.default b/multi-node-aio/playbooks/pxe/tftp/pxelinux.cfg.default
new file mode 100644
index 00000000..db9ea4e2
--- /dev/null
+++ b/multi-node-aio/playbooks/pxe/tftp/pxelinux.cfg.default
@@ -0,0 +1,5 @@
+path boot-screens
+include boot-screens/menu.cfg
+default boot-screens/vesamenu.c32
+prompt 0
+timeout 100
\ No newline at end of file
diff --git a/multi-node-aio/playbooks/pxe/tftp/pxelinux.cfg.macaddr.j2 b/multi-node-aio/playbooks/pxe/tftp/pxelinux.cfg.macaddr.j2
new file mode 100644
index 00000000..9e102c9a
--- /dev/null
+++ b/multi-node-aio/playbooks/pxe/tftp/pxelinux.cfg.macaddr.j2
@@ -0,0 +1,9 @@
+{% set image_properties = images[item.server_image] %}
+default linux
+prompt 0
+timeout 1
+label linux
+  kernel {{ image_properties['image_kernel'] }}
+{%     if image_properties['image_type'] == 'debian' %}
+  append hostname={{ item.server_hostname }} {{ image_properties['image_kernel_options'] }} initrd={{ image_properties['image_initrd'] }} preseed/url={{ image_properties['image_preseeds'][item.server_preseed_ks]['url'] }} preseed/interactive=false netcfg/choose_interface={{ item.server_default_interface }} {{ item.server_extra_options | default('') }}
+{%     endif %}
diff --git a/multi-node-aio/playbooks/pxe/tftp/tftp-hpa b/multi-node-aio/playbooks/pxe/tftp/tftp-hpa
new file mode 100644
index 00000000..e1768bde
--- /dev/null
+++ b/multi-node-aio/playbooks/pxe/tftp/tftp-hpa
@@ -0,0 +1,6 @@
+TFTP_USERNAME="tftp"
+TFTP_DIRECTORY="/var/lib/tftpboot"
+TFTP_ADDRESS=":{{ tftp_port }}"
+TFTP_OPTIONS="--secure"
+RUN_DAEMON="yes"
+OPTIONS="-l -s /var/lib/tftpboot"
\ No newline at end of file
diff --git a/multi-node-aio/playbooks/setup-host.yml b/multi-node-aio/playbooks/setup-host.yml
new file mode 100644
index 00000000..2d712210
--- /dev/null
+++ b/multi-node-aio/playbooks/setup-host.yml
@@ -0,0 +1,213 @@
+---
+# Copyright 2017, Rackspace US, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in witing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+- name: Gather facts
+  hosts: localhost
+  gather_facts: "{{ gather_facts | default(true) }}"
+  pre_tasks:
+    - name: Gather variables for each operating system
+      include_vars: "{{ item }}"
+      with_first_found:
+        - "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}-{{ ansible_distribution_version | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_os_family | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}.yml"
+        - "{{ playbook_dir }}/vars/{{ ansible_os_family | lower }}.yml"
+      tags:
+        - always
+
+    - name: Install host distro packages
+      package:
+        pkg: "{{ item }}"
+        state: "latest"
+        update_cache: yes
+        cache_valid_time: 600
+      with_items: "{{ mnaio_host_distro_packages }}"
+
+  tasks:
+    - name: Ensure root has a .ssh directory
+      file:
+        path: /root/.ssh
+        state: directory
+        owner: root
+        group: root
+        mode: 0700
+
+    - name: Create ssh key pair for root
+      user:
+        name: root
+        generate_ssh_key: yes
+        ssh_key_bits: 2048
+        ssh_key_file: /root/.ssh/id_rsa
+
+    - name: Get root public key
+      command: cat /root/.ssh/id_rsa.pub
+      register: public_key_get
+      changed_when: false
+
+    - name: Set key facts
+      set_fact:
+        root_public_key: "{{ public_key_get.stdout }}"
+
+    - name: Ensure root can ssh to localhost
+      authorized_key:
+        user: "root"
+        key: "{{ root_public_key }}"
+
+    - name: Add sysctl options
+      sysctl:
+        name: net.ipv4.ip_forward
+        value: 1
+        sysctl_set: yes
+        state: present
+        reload: yes
+        sysctl_file: /etc/sysctl.conf
+
+    - name: Get gateway interface
+      shell: "/sbin/ip r g 1 | awk '{print $5}'"
+      register: gw_iface
+
+    - set_fact:
+        masquerade_interface: "{{ gw_iface.stdout.strip() }}"
+
+    - name: Add IPtables rules
+      iptables:
+        table: "{{ item.table | default(omit) }}"
+        chain: "{{ item.chain | default(omit) }}"
+        in_interface: "{{ item.in_interface | default(omit) }}"
+        out_interface: "{{ item.out_interface | default(omit) }}"
+        source: "{{ item.source | default(omit) }}"
+        destination: "{{ item.destination | default(omit) }}"
+        protocol: "{{ item.protocol | default(omit) }}"
+        match: "{{ item.match | default(omit) }}"
+        destination_port: "{{ item.destination_port | default(omit) }}"
+        jump: "{{ item.jump | default(omit) }}"
+        to_ports: "{{ item.to_ports | default(omit) }}"
+      with_items: "{{ mnaio_host_iptables_rules }}"
+
+    # These rules are added manually due to bugs in the iptables module.
+    - name: Add IPtables rules
+      shell: |
+        if ! iptables -w -t {{ item.table }} -C {{ item.rule }};then
+          iptables -w -t {{ item.table }} -I {{ item.rule }}
+        fi
+      with_items:
+        - table: 'nat'
+          rule: 'POSTROUTING -s 10.0.2.0/22 ! -d 10.0.2.0/22 -j MASQUERADE'
+        - table: 'mangle'
+          rule: 'POSTROUTING -s 10.0.2.0/22 -o vm-br-dhcp -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill'
+        - table: 'mangle'
+          rule: 'POSTROUTING -s 10.0.2.0/22 -o vm-br-dhcp -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill'
+
+    - name: Start netfilter persistent
+      service:
+        name: "{{ mnaio_host_iptables_service }}"
+        state: started
+        enabled: yes
+      when:
+        - ansible_distribution | lower == 'ubuntu'
+
+    - name: Drop host network interfaces
+      template:
+        src: "pxe/{{ ansible_os_family | lower }}/mnaio-bridges.cfg.j2"
+        dest: /etc/network/interfaces.d/mnaio-bridges.cfg
+        mode: "0644"
+        owner: root
+        group: root
+      register: mnaio_bridges
+
+    - name: Ensure extra interfaces are sourced
+      lineinfile:
+        line: "source /etc/network/interfaces.d/*.cfg"
+        dest: "/etc/network/interfaces"
+
+    - name: Set the host intefaces up
+      command: "/sbin/ifup {{ item.value.iface }}"
+      with_dict: "{{ mnaio_host_networks }}"
+      when: mnaio_bridges | changed
+
+    - name: Disable virsh default network
+      shell: |
+        if virsh net-list |  grep -qw "default"; then
+          virsh net-autostart default --disable
+          virsh net-destroy default
+        fi
+
+    - name: Drop virsh network configs
+      template:
+        src: "kvm/libvirt-network-template.xml"
+        dest: "/etc/libvirt/qemu/networks/{{ item.value.iface }}.xml"
+        mode: "0644"
+        owner: root
+        group: root
+      with_dict: "{{ mnaio_host_networks }}"
+
+    - name: Enable new virsh network(s)
+      shell: |
+        if ! virsh net-list |  grep -qw "{{ item.value.iface }}"; then
+          virsh net-define --file /etc/libvirt/qemu/networks/{{ item.value.iface }}.xml
+          virsh net-create --file /etc/libvirt/qemu/networks/{{ item.value.iface }}.xml
+          virsh net-autostart {{ item.value.iface }} || ture
+        fi
+      with_dict: "{{ mnaio_host_networks }}"
+
+    - name: Locate data volume
+      command: "vgdisplay vg01"
+      failed_when: false
+      register: data_volume
+
+    - name: Locate data disk
+      shell: >
+        lsblk -brndo NAME,TYPE,FSTYPE,RO,SIZE | awk '/d[b-z]+ disk +0/{ if ($4>m){m=$4; d=$1}}; END{print d}'
+      register: lsblk
+      when:
+        - data_volume.rc != 0
+        - mnaio_data_disk is undefined
+
+    - name: Create data disk label
+      command: "parted --script /dev/{{ mnaio_data_disk | default(lsblk.stdout) }} mklabel gpt"
+      when:
+        - data_volume.rc != 0
+
+    - name: Create data disk partition
+      command: "parted --align optimal --script /dev/{{ mnaio_data_disk | default(lsblk.stdout) }} mkpart data1 ext4 0% 100%"
+      when:
+        - data_volume.rc != 0
+
+    - name: Create data volume group
+      lvg:
+        vg: vg01
+        pvs: "/dev/{{ mnaio_data_disk | default(lsblk.stdout) }}1"
+      when:
+        - data_volume.rc != 0
+
+    - name: Locate virsh data volume
+      command: "virsh pool-info vg01"
+      failed_when: false
+      register: virsh_data_volume
+
+    - name: Create virsh data volume
+      shell: |
+        virsh pool-create-as vg01 logical
+        virsh pool-dumpxml vg01 > /etc/libvirt/storage/vg01.xml
+        virsh pool-define /etc/libvirt/storage/vg01.xml
+        virsh pool-autostart vg01 || true
+      when:
+        - virsh_data_volume.rc != 0
+
+  vars_files:
+    - vars/main.yml
+  tags:
+    - setup-host
diff --git a/multi-node-aio/playbooks/site.yml b/multi-node-aio/playbooks/site.yml
new file mode 100644
index 00000000..f3afc04a
--- /dev/null
+++ b/multi-node-aio/playbooks/site.yml
@@ -0,0 +1,34 @@
+---
+# Copyright 2017, Rackspace US, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in witing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+- include: setup-host.yml
+  when:
+    - setup_host | default(true) | bool
+
+- include: deploy-pxe.yml
+  when:
+    - setup_pxeboot | default(true) | bool
+
+- include: deploy-dhcp.yml
+  when:
+    - setup_dhcpd | default(true) | bool
+
+- include: deploy-vms.yml
+  when:
+    - deploy_vms | default(true) | bool
+
+- include: deploy-osa.yml
+  when:
+    - deploy_osa | default(true) | bool
\ No newline at end of file
diff --git a/multi-node-aio/playbooks/vars/main.yml b/multi-node-aio/playbooks/vars/main.yml
new file mode 100644
index 00000000..22236449
--- /dev/null
+++ b/multi-node-aio/playbooks/vars/main.yml
@@ -0,0 +1,632 @@
+---
+############### DEFAULTS ###############
+default_interface: "{{ default_network | default('eth0') }}"
+default_vm_image: "{{ default_image | default('ubuntu-16.04-amd64') }}"
+default_vm_storage: "{{ vm_disk_size | default(61440) }}"
+
+default_ubuntu_mirror_proxy: ''
+default_ubuntu_mirror_hostname: archive.ubuntu.com
+default_ubuntu_mirror_directory: /ubuntu
+
+############### DEFAULTS ###############
+
+
+############### MNAIO ###############
+# mnaio_data_disk: 'sdc'  # str - not required, set this to define a given data disk if no data disk
+#                                               is defined the largest unpartitioned disk will be used.
+
+mnaio_host_networks:
+  dhcp:
+    iface: 'vm-br-dhcp'                 # str  - required, interface name
+    inet_type: 'static'                 # str  - required, iface type [static, dhcp, manual]
+    address: '10.0.2.1/22'              # str  - not required, must be in CIDR format
+    iface_port: none                    # str  - required, physical port used within a host bridge
+  mgmt:
+    iface: 'vm-br-eth1'
+    inet_type: 'static'
+    address: '10.0.236.1/22'
+    iface_port: none
+  flat:
+    iface: 'vm-br-eth2'
+    inet_type: 'static'
+    address: '10.0.248.1/22'
+    iface_port: none
+  vlan:
+    iface: 'vm-br-eth3'
+    inet_type: 'manual'
+    iface_port: none
+  vxlan:
+    iface: 'vm-br-eth4'
+    inet_type: 'manual'
+    address: '10.0.240.1/22'
+    iface_port: none
+  storage:
+    iface: 'vm-br-eth5'
+    inet_type: 'manual'
+    address: '10.0.244.1/22'
+    iface_port: none
+
+mnaio_host_iptables_rules:
+  - table: filter
+    chain: INPUT
+    protocol: tcp
+    match: tcp
+    destination_port: 67
+    jump: ACCEPT
+  - table: filter
+    chain: INPUT
+    protocol: udp
+    match: udp
+    destination_port: 67
+    jump: ACCEPT
+  - table: filter
+    chain: INPUT
+    protocol: udp
+    match: udp
+    destination_port: 53
+    jump: ACCEPT
+  - table: filter
+    chain: INPUT
+    protocol: udp
+    match: udp
+    destination_port: 53
+    jump: ACCEPT
+  - table: filter
+    chain: FORWARD
+    in_interface: vm-br-dhcp
+    jump: ACCEPT
+  - table: filter
+    chain: FORWARD
+    out_interface: vm-br-dhcp
+    jump: ACCEPT
+  - table: nat
+    chain: POSTROUTING
+    out_interface: "{{ masquerade_interface | default(default_interface) }}"
+    jump: MASQUERADE
+############### MNAIO ###############
+
+
+############### PXE ###############
+tftp_port: 69
+tftp_boot_dir: "/var/lib/tftpboot"
+tftp_server: "{{ ansible_host }}"  # IP address, or domain name of the TFTP server
+# tftp_ssh_key: ''  # user defined ssh key, used to access the host
+
+# Default ISO images
+images:
+  ubuntu-16.04-amd64:
+    image_type: debian
+    image_iso_url: "http://releases.ubuntu.com/16.04.2/ubuntu-16.04.2-server-amd64.iso"
+    image_name: "ubuntu-16.04.2-server-amd64.iso"
+    image_short_name: "ubuntu-16.04.2-server-amd64"
+    image_default_boot: "ubuntu-16.04.2-server-amd64/amd64/boot-screens/menu.cfg"
+    image_kernel_options: "biosdevname=0 net.ifnames=0 auto=true priority=critical vga=789"
+    image_kernel: "ubuntu-16.04.2-server-amd64/amd64/linux"
+    image_initrd: "ubuntu-16.04.2-server-amd64/amd64/initrd.gz"
+    image_netboot: "ubuntu-16.04.2-server-amd64/install/netboot/ubuntu-installer"
+    image_preseeds:
+      mnaio:
+        url: "tftp://{{ tftp_server }}/preseed/mnaio.preseed"
+        template_name: "mnaio.preseed"
+      vm:
+        url: "tftp://{{ tftp_server }}/preseed/vm.preseed"
+        template_name: "vm.preseed"
+  ubuntu-14.04-amd64:
+    image_type: debian
+    image_iso_url: "http://releases.ubuntu.com/14.04.5/ubuntu-14.04.5-server-amd64.iso"
+    image_name: "ubuntu-14.04.5-server-amd64.iso"
+    image_short_name: "ubuntu-14.04.5-server-amd64"
+    image_default_boot: "ubuntu-14.04.5-server-amd64/amd64/boot-screens/menu.cfg"
+    image_kernel_options: "biosdevname=0 net.ifnames=0 auto=true priority=critical vga=789"
+    image_kernel: "ubuntu-14.04.5-server-amd64/amd64/linux"
+    image_initrd: "ubuntu-14.04.5-server-amd64/amd64/initrd.gz"
+    image_netboot: "ubuntu-14.04.5-server-amd64/install/netboot/ubuntu-installer"
+    image_preseeds:
+      mnaio:
+        url: "tftp://{{ tftp_server }}/preseed/mnaio.preseed"
+        template_name: "mnaio.preseed"
+      vm:
+        url: "tftp://{{ tftp_server }}/preseed/vm.preseed"
+        template_name: "vm.preseed"
+
+pxelinux_url: "https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.gz"
+pxelinux_name: "syslinux-6.03.tar.gz"
+pxelinux_short_name: "syslinux-6.03"
+############### PXE ###############
+
+
+############### SERVERS ###############
+# List of servers to create specific mac address bound boot entries.
+servers:
+  - server_hostname: 'infra1'               # str  - required, hostname of server
+    server_vm_ram: 4096                     # int  - not required, used to specify ram when provisioning a VM
+    server_vm_vcpus: 4                      # int  - not required, used to specify vcpus when provisioning a VM
+    server_vm_fixed_addr: '10.0.2.100'      # str  - not required, used to specify fixed address when using internal DHCPD
+    server_vm_primary_network: 'dhcp'       # str  - not required, primary network used to kick the VM
+    server_image: "{{ default_vm_image }}"  # str  - required, image name
+    server_default_interface: 'eth0'        # str  - required, default interface
+    server_mac_address: '52:54:00:bd:80:00' # str  - required, mac address of default interface
+    server_preseed_ks: 'vm'                 # str  - required, name of preseed/kickstart file
+    server_extra_options: ''                # str  - not required, added kernel options
+    server_networks:                        # dict - required, hash of networks, can be empty, key is used to name the networks.
+      dhcp:
+        iface: 'eth0'                       # str  - required, interface name
+        inet_type: 'dhcp'                   # str  - required, iface type [static, dhcp, manual]
+        vm_int_iface: vm-br-dhcp            # str  - not Required, used to specify an integration networks interface when provisioning a VM
+      mgmt:
+        iface: 'eth1'                       # str  - required, interface name
+        inet_type: 'static'                 # str  - required, iface type [static, dhcp, manual]
+        address: '10.0.236.100/22'          # str  - not required, must be in CIDR format
+        vm_int_iface: vm-br-eth1            # str  - not Required, used to specify an integration networks interface when provisioning a VM
+      flat:
+        iface: 'eth2'                       # str  - required, interface name
+        inet_type: 'static'                 # str  - required, iface type [static, dhcp, manual]
+        address: '10.0.248.100/22'          # str  - not required, must be in CIDR format
+        vm_int_iface: vm-br-eth2            # str  - not Required, used to specify an integration networks interface when provisioning a VM
+      vlan:
+        iface: 'eth3'                       # str  - required, interface name
+        inet_type: 'manual'                 # str  - required, iface type [static, dhcp, manual]
+        vm_int_iface: vm-br-eth3            # str  - not Required, used to specify an integration networks interface when provisioning a VM
+      vxlan:
+        iface: 'eth4'                       # str  - required, interface name
+        inet_type: 'manual'                 # str  - required, iface type [static, dhcp, manual]
+        address: '10.0.240.100/22'          # str  - not required, must be in CIDR format
+        vm_int_iface: vm-br-eth4            # str  - not Required, used to specify an integration networks interface when provisioning a VM
+      storage:
+        iface: 'eth5'                       # str  - required, interface name
+        inet_type: 'manual'                 # str  - required, iface type [static, dhcp, manual]
+        address: '10.0.244.100/22'          # str  - not required, must be in CIDR format
+        vm_int_iface: vm-br-eth5            # str  - not Required, used to specify an integration networks interface when provisioning a VM
+  - server_hostname: 'infra2'
+    server_vm_ram: 4096
+    server_vm_vcpus: 4
+    server_vm_fixed_addr: '10.0.2.101'
+    server_vm_primary_network: 'dhcp'
+    server_image: "{{ default_vm_image }}"
+    server_default_interface: 'eth0'
+    server_mac_address: '52:54:00:bd:80:01'
+    server_preseed_ks: 'vm'
+    server_extra_options: ''
+    server_networks:
+      dhcp:
+        iface: 'eth0'
+        inet_type: 'dhcp'
+        vm_int_iface: vm-br-dhcp
+      mgmt:
+        iface: 'eth1'
+        inet_type: 'static'
+        address: '10.0.236.101/22'
+        vm_int_iface: vm-br-eth1
+      flat:
+        iface: 'eth2'
+        inet_type: 'static'
+        address: '10.0.248.101/22'
+        vm_int_iface: vm-br-eth2
+      vlan:
+        iface: 'eth3'
+        inet_type: 'manual'
+        vm_int_iface: vm-br-eth3
+      vxlan:
+        iface: 'eth4'
+        inet_type: 'manual'
+        address: '10.0.240.101/22'
+        vm_int_iface: vm-br-eth4
+      storage:
+        iface: 'eth5'
+        inet_type: 'manual'
+        address: '10.0.244.101/22'
+        vm_int_iface: vm-br-eth5
+  - server_hostname: 'infra3'
+    server_vm_ram: 4096
+    server_vm_vcpus: 4
+    server_vm_fixed_addr: '10.0.2.102'
+    server_vm_primary_network: 'dhcp'
+    server_image: "{{ default_vm_image }}"
+    server_default_interface: 'eth0'
+    server_mac_address: '52:54:00:bd:80:02'
+    server_preseed_ks: 'vm'
+    server_extra_options: ''
+    server_networks:
+      dhcp:
+        iface: 'eth0'
+        inet_type: 'dhcp'
+        vm_int_iface: vm-br-dhcp
+      mgmt:
+        iface: 'eth1'
+        inet_type: 'static'
+        address: '10.0.236.102/22'
+        vm_int_iface: vm-br-eth1
+      flat:
+        iface: 'eth2'
+        inet_type: 'static'
+        address: '10.0.248.102/22'
+        vm_int_iface: vm-br-eth2
+      vlan:
+        iface: 'eth3'
+        inet_type: 'manual'
+        vm_int_iface: vm-br-eth3
+      vxlan:
+        iface: 'eth4'
+        inet_type: 'manual'
+        address: '10.0.240.102/22'
+        vm_int_iface: vm-br-eth4
+      storage:
+        iface: 'eth5'
+        inet_type: 'manual'
+        address: '10.0.244.102/22'
+        vm_int_iface: vm-br-eth5
+  - server_hostname: 'logging1'
+    server_vm_ram: 2048
+    server_vm_vcpus: 1
+    server_vm_fixed_addr: '10.0.2.110'
+    server_vm_primary_network: 'dhcp'
+    server_image: "{{ default_vm_image }}"
+    server_default_interface: 'eth0'
+    server_mac_address: '52:54:00:bd:80:03'
+    server_preseed_ks: 'vm'
+    server_extra_options: ''
+    server_networks:
+      dhcp:
+        iface: 'eth0'
+        inet_type: 'dhcp'
+        vm_int_iface: vm-br-dhcp
+      mgmt:
+        iface: 'eth1'
+        inet_type: 'static'
+        address: '10.0.236.103/22'
+        vm_int_iface: vm-br-eth1
+      flat:
+        iface: 'eth2'
+        inet_type: 'static'
+        address: '10.0.248.103/22'
+        vm_int_iface: vm-br-eth2
+      vlan:
+        iface: 'eth3'
+        inet_type: 'manual'
+        vm_int_iface: vm-br-eth3
+      vxlan:
+        iface: 'eth4'
+        inet_type: 'manual'
+        address: '10.0.240.103/22'
+        vm_int_iface: vm-br-eth4
+      storage:
+        iface: 'eth5'
+        inet_type: 'manual'
+        address: '10.0.244.103/22'
+        vm_int_iface: vm-br-eth5
+  - server_hostname: 'compute1'
+    server_vm_ram: 2048
+    server_vm_vcpus: 4
+    server_vm_fixed_addr: '10.0.2.120'
+    server_vm_primary_network: 'dhcp'
+    server_image: "{{ default_vm_image }}"
+    server_default_interface: 'eth0'
+    server_mac_address: '52:54:00:bd:80:05'
+    server_preseed_ks: 'vm'
+    server_extra_options: ''
+    server_networks:
+      dhcp:
+        iface: 'eth0'
+        inet_type: 'dhcp'
+        vm_int_iface: vm-br-dhcp
+      mgmt:
+        iface: 'eth1'
+        inet_type: 'static'
+        address: '10.0.236.105/22'
+        vm_int_iface: vm-br-eth1
+      flat:
+        iface: 'eth2'
+        inet_type: 'static'
+        address: '10.0.248.105/22'
+        vm_int_iface: vm-br-eth2
+      vlan:
+        iface: 'eth3'
+        inet_type: 'manual'
+        vm_int_iface: vm-br-eth3
+      vxlan:
+        iface: 'eth4'
+        inet_type: 'manual'
+        address: '10.0.240.105/22'
+        vm_int_iface: vm-br-eth4
+      storage:
+        iface: 'eth5'
+        inet_type: 'manual'
+        address: '10.0.244.105/22'
+        vm_int_iface: vm-br-eth5
+  - server_hostname: 'compute2'
+    server_vm_ram: 2048
+    server_vm_vcpus: 4
+    server_vm_fixed_addr: '10.0.2.121'
+    server_vm_primary_network: 'dhcp'
+    server_image: "{{ default_vm_image }}"
+    server_default_interface: 'eth0'
+    server_mac_address: '52:54:00:bd:80:06'
+    server_preseed_ks: 'vm'
+    server_extra_options: ''
+    server_networks:
+      dhcp:
+        iface: 'eth0'
+        inet_type: 'dhcp'
+        vm_int_iface: vm-br-dhcp
+      mgmt:
+        iface: 'eth1'
+        inet_type: 'static'
+        address: '10.0.236.106/22'
+        vm_int_iface: vm-br-eth1
+      flat:
+        iface: 'eth2'
+        inet_type: 'static'
+        address: '10.0.248.106/22'
+        vm_int_iface: vm-br-eth2
+      vlan:
+        iface: 'eth3'
+        inet_type: 'manual'
+        vm_int_iface: vm-br-eth3
+      vxlan:
+        iface: 'eth4'
+        inet_type: 'manual'
+        address: '10.0.240.106/22'
+        vm_int_iface: vm-br-eth4
+      storage:
+        iface: 'eth5'
+        inet_type: 'manual'
+        address: '10.0.244.106/22'
+        vm_int_iface: vm-br-eth5
+  - server_hostname: 'cinder1'
+    server_vm_ram: 2048
+    server_vm_vcpus: 1
+    server_vm_fixed_addr: '10.0.2.130'
+    server_vm_primary_network: 'dhcp'
+    server_image: "{{ default_vm_image }}"
+    server_default_interface: 'eth0'
+    server_mac_address: '52:54:00:bd:80:07'
+    server_preseed_ks: 'vm'
+    server_extra_options: ''
+    server_networks:
+      dhcp:
+        iface: 'eth0'
+        inet_type: 'dhcp'
+        vm_int_iface: vm-br-dhcp
+      mgmt:
+        iface: 'eth1'
+        inet_type: 'static'
+        address: '10.0.236.107/22'
+        vm_int_iface: vm-br-eth1
+      flat:
+        iface: 'eth2'
+        inet_type: 'static'
+        address: '10.0.248.107/22'
+        vm_int_iface: vm-br-eth2
+      vlan:
+        iface: 'eth3'
+        inet_type: 'manual'
+        vm_int_iface: vm-br-eth3
+      vxlan:
+        iface: 'eth4'
+        inet_type: 'manual'
+        address: '10.0.240.107/22'
+        vm_int_iface: vm-br-eth4
+      storage:
+        iface: 'eth5'
+        inet_type: 'manual'
+        address: '10.0.244.107/22'
+        vm_int_iface: vm-br-eth5
+  - server_hostname: 'cinder2'
+    server_vm_ram: 2048
+    server_vm_vcpus: 1
+    server_vm_fixed_addr: '10.0.2.131'
+    server_vm_primary_network: 'dhcp'
+    server_image: "{{ default_vm_image }}"
+    server_default_interface: 'eth0'
+    server_mac_address: '52:54:00:bd:80:08'
+    server_preseed_ks: 'vm'
+    server_extra_options: ''
+    server_networks:
+      dhcp:
+        iface: 'eth0'
+        inet_type: 'dhcp'
+        vm_int_iface: vm-br-dhcp
+      mgmt:
+        iface: 'eth1'
+        inet_type: 'static'
+        address: '10.0.236.108/22'
+        vm_int_iface: vm-br-eth1
+      flat:
+        iface: 'eth2'
+        inet_type: 'static'
+        address: '10.0.248.108/22'
+        vm_int_iface: vm-br-eth2
+      vlan:
+        iface: 'eth3'
+        inet_type: 'manual'
+        vm_int_iface: vm-br-eth3
+      vxlan:
+        iface: 'eth4'
+        inet_type: 'manual'
+        address: '10.0.240.108/22'
+        vm_int_iface: vm-br-eth4
+      storage:
+        iface: 'eth5'
+        inet_type: 'manual'
+        address: '10.0.244.108/22'
+        vm_int_iface: vm-br-eth5
+  - server_hostname: 'swift1'
+    server_vm_ram: 2048
+    server_vm_vcpus: 1
+    server_vm_fixed_addr: '10.0.2.140'
+    server_vm_primary_network: 'dhcp'
+    server_image: "{{ default_vm_image }}"
+    server_default_interface: 'eth0'
+    server_mac_address: '52:54:00:bd:80:09'
+    server_preseed_ks: 'vm'
+    server_extra_options: ''
+    server_networks:
+      dhcp:
+        iface: 'eth0'
+        inet_type: 'dhcp'
+        vm_int_iface: vm-br-dhcp
+      mgmt:
+        iface: 'eth1'
+        inet_type: 'static'
+        address: '10.0.236.109/22'
+        vm_int_iface: vm-br-eth1
+      flat:
+        iface: 'eth2'
+        inet_type: 'static'
+        address: '10.0.248.109/22'
+        vm_int_iface: vm-br-eth2
+      vlan:
+        iface: 'eth3'
+        inet_type: 'manual'
+        vm_int_iface: vm-br-eth3
+      vxlan:
+        iface: 'eth4'
+        inet_type: 'manual'
+        address: '10.0.240.109/22'
+        vm_int_iface: vm-br-eth4
+      storage:
+        iface: 'eth5'
+        inet_type: 'manual'
+        address: '10.0.244.109/22'
+        vm_int_iface: vm-br-eth5
+  - server_hostname: 'swift2'
+    server_vm_ram: 2048
+    server_vm_vcpus: 1
+    server_vm_fixed_addr: '10.0.2.140'
+    server_vm_primary_network: 'dhcp'
+    server_image: "{{ default_vm_image }}"
+    server_default_interface: 'eth0'
+    server_mac_address: '52:54:00:bd:80:10'
+    server_preseed_ks: 'vm'
+    server_extra_options: ''
+    server_networks:
+      dhcp:
+        iface: 'eth0'
+        inet_type: 'dhcp'
+        vm_int_iface: vm-br-dhcp
+      mgmt:
+        iface: 'eth1'
+        inet_type: 'static'
+        address: '10.0.236.110/22'
+        vm_int_iface: vm-br-eth1
+      flat:
+        iface: 'eth2'
+        inet_type: 'static'
+        address: '10.0.248.110/22'
+        vm_int_iface: vm-br-eth2
+      vlan:
+        iface: 'eth3'
+        inet_type: 'manual'
+        vm_int_iface: vm-br-eth3
+      vxlan:
+        iface: 'eth4'
+        inet_type: 'manual'
+        address: '10.0.240.110/22'
+        vm_int_iface: vm-br-eth4
+      storage:
+        iface: 'eth5'
+        inet_type: 'manual'
+        address: '10.0.244.110/22'
+        vm_int_iface: vm-br-eth5
+  - server_hostname: 'swift3'
+    server_vm_ram: 2048
+    server_vm_vcpus: 1
+    server_vm_fixed_addr: '10.0.2.141'
+    server_vm_primary_network: 'dhcp'
+    server_image: "{{ default_vm_image }}"
+    server_default_interface: 'eth0'
+    server_mac_address: '52:54:00:bd:80:11'
+    server_preseed_ks: 'vm'
+    server_extra_options: ''
+    server_networks:
+      dhcp:
+        iface: 'eth0'
+        inet_type: 'dhcp'
+        vm_int_iface: vm-br-dhcp
+      mgmt:
+        iface: 'eth1'
+        inet_type: 'static'
+        address: '10.0.236.111/22'
+        vm_int_iface: vm-br-eth1
+      flat:
+        iface: 'eth2'
+        inet_type: 'static'
+        address: '10.0.248.111/22'
+        vm_int_iface: vm-br-eth2
+      vlan:
+        iface: 'eth3'
+        inet_type: 'manual'
+        vm_int_iface: vm-br-eth3
+      vxlan:
+        iface: 'eth4'
+        inet_type: 'manual'
+        address: '10.0.240.111/22'
+        vm_int_iface: vm-br-eth4
+      storage:
+        iface: 'eth5'
+        inet_type: 'manual'
+        address: '10.0.244.111/22'
+        vm_int_iface: vm-br-eth5
+  - server_hostname: 'deploy1'
+    server_vm_ram: 2048
+    server_vm_vcpus: 2
+    server_vm_fixed_addr: '10.0.2.150'
+    server_vm_primary_network: 'dhcp'
+    server_image: "{{ default_vm_image }}"
+    server_default_interface: 'eth0'
+    server_mac_address: '52:54:00:bd:80:12'
+    server_preseed_ks: 'vm'
+    server_extra_options: ''
+    server_networks:
+      dhcp:
+        iface: 'eth0'
+        inet_type: 'dhcp'
+        vm_int_iface: vm-br-dhcp
+      mgmt:
+        iface: 'eth1'
+        inet_type: 'static'
+        address: '10.0.236.112/22'
+        vm_int_iface: vm-br-eth1
+      flat:
+        iface: 'eth2'
+        inet_type: 'static'
+        address: '10.0.248.112/22'
+        vm_int_iface: vm-br-eth2
+      vlan:
+        iface: 'eth3'
+        inet_type: 'manual'
+        vm_int_iface: vm-br-eth3
+      vxlan:
+        iface: 'eth4'
+        inet_type: 'manual'
+        address: '10.0.240.112/22'
+        vm_int_iface: vm-br-eth4
+      storage:
+        iface: 'eth5'
+        inet_type: 'manual'
+        address: '10.0.244.112/22'
+        vm_int_iface: vm-br-eth5
+############### SERVERS ###############
+
+
+############### DHCP ###############
+dhcp_default_lease_time: 21600   # Default lease time
+dhcp_max_lease_time: 43200       # Max lease time
+tftp_boot_path: /pxelinux.0      # Path of where to boot from first
+
+# - List of DHCP Subnets - These are iterated though and each will be created
+dhcp_list:
+  - netmask: 255.255.255.0                       # Netmask
+    gateway: 10.0.2.1                            # Gateway
+    dns: 8.8.8.8                                 # DNS
+    subnet: 10.0.2.0                             # Subnet mask
+    default_lease_time: 21600                    # Subnet Default lease time - The default is used if this is not defined
+    max_lease_time: 43200                        # Subnet Max lease time - The default is used if this is not defined
+    tftp_boot_path: /pxelinux.0                  # Path for tftp of where to boot from first - The default is used if this is not defined
+    tftp_server: "{{ tftp_server }}"             # The server hosting the TFTP server - The default is used if this is not defined
+    dhcp_default_domain_name: openstackci.local
+############### DHCP ###############
+
+
+############### KVM ###############
+############### KVM ###############
diff --git a/multi-node-aio/playbooks/vars/ubuntu.yml b/multi-node-aio/playbooks/vars/ubuntu.yml
new file mode 100644
index 00000000..22547660
--- /dev/null
+++ b/multi-node-aio/playbooks/vars/ubuntu.yml
@@ -0,0 +1,43 @@
+---
+# Copyright 2017, Rackspace US, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in witing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+mnaio_host_distro_packages:
+  - bridge-utils
+  - ifenslave
+  - iptables-persistent
+  - libvirt-bin
+  - lvm2
+  - ntp
+  - openssh-server
+  - python2.7
+  - python-software-properties
+  - python-netaddr
+  - qemu-kvm
+  - qemu-utils
+  - software-properties-common
+  - virtinst
+  - virt-manager
+  - vlan
+
+mnaio_pxe_distro_packages:
+  - tftpd-hpa
+  - inetutils-inetd
+  - nginx
+  - p7zip-full
+
+mnaio_dhcp_distro_packages:
+  - isc-dhcp-server
+
+mnaio_host_iptables_service: "{{ (ansible_distribution | lower + '-' + ansible_distribution_version | lower == 'ubuntu-14.04') | ternary('iptables-persistent', 'netfilter-persistent') }}"
diff --git a/multi-node-aio/run_tests.sh b/multi-node-aio/run_tests.sh
new file mode 100755
index 00000000..cdae6a93
--- /dev/null
+++ b/multi-node-aio/run_tests.sh
@@ -0,0 +1,62 @@
+#!/usr/bin/env bash
+# Copyright 2015, Rackspace US, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Note:
+# This file is maintained in the openstack-ansible-tests repository.
+# https://git.openstack.org/cgit/openstack/openstack-ansible-tests/tree/run_tests.sh
+# If you need to modify this file, update the one in the openstack-ansible-tests
+# repository and then update this file as well. The purpose of this file is to
+# prepare the host and then execute all the tox tests.
+#
+
+## Shell Opts ----------------------------------------------------------------
+set -xeu
+
+## Vars ----------------------------------------------------------------------
+
+export WORKING_DIR=${WORKING_DIR:-$(pwd)}
+
+## Main ----------------------------------------------------------------------
+
+source /etc/os-release || source /usr/lib/os-release
+
+install_pkg_deps() {
+    pkg_deps="git"
+
+    case ${ID,,} in
+        *suse*) pkg_mgr_cmd="zypper -n in" ;;
+        centos|rhel) pkg_mgr_cmd="yum install -y" ;;
+        fedora) pkg_mgr_cmd="dnf -y install" ;;
+        ubuntu|debian) pkg_mgr_cmd="apt-get install -y" ;;
+        *) echo "unsupported distribution: ${ID,,}"; exit 1 ;;
+    esac
+
+    eval sudo $pkg_mgr_cmd $pkg_deps
+}
+
+git_clone_repo() {
+    if [[ ! -d "${WORKING_DIR}/tests/common" ]]; then
+        git clone \
+            https://git.openstack.org/openstack/openstack-ansible-tests \
+            ${WORKING_DIR}/tests/common
+    fi
+}
+
+install_pkg_deps
+
+git_clone_repo
+
+# start executing the main test script
+source /opt/openstack-ansible-tests/run_tests_common.sh
diff --git a/multi-node-aio/setup-cobbler.sh b/multi-node-aio/setup-cobbler.sh
deleted file mode 100755
index e26bd0a3..00000000
--- a/multi-node-aio/setup-cobbler.sh
+++ /dev/null
@@ -1,185 +0,0 @@
-#!/usr/bin/env bash
-set -eu
-# Copyright [2016] [Kevin Carter]
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Load all functions
-source functions.rc
-
-# bring in variable definitions if there is a variables.sh file
-[[ -f variables.sh ]] && source variables.sh
-
-# The default image for VMs, change it to 16.04 if you want to use xenial as operation system.
-DEFAULT_IMAGE="${DEFAULT_IMAGE:-"$(lsb_release -sd | awk '{print $2}')"}"
-
-# The default kernel for Image, leave it empty will install the lastest kernel.
-DEFAULT_KERNEL="${DEFAULT_KERNEL:-linux-image-extra-4.4.0-67-generic}"
-
-# Install cobbler
-wget -qO - http://download.opensuse.org/repositories/home:/libertas-ict:/cobbler26/xUbuntu_14.04/Release.key | apt-key add -
-add-apt-repository "deb http://download.opensuse.org/repositories/home:/libertas-ict:/cobbler26/xUbuntu_14.04/ ./"
-apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y --force-yes install cobbler dhcp3-server debmirror isc-dhcp-server ipcalc tftpd tftp fence-agents iptables-persistent
-
-# Basic cobbler setup
-sed -i 's/^manage_dhcp\:.*/manage_dhcp\: 1/g' /etc/cobbler/settings
-sed -i 's/^restart_dhcp\:.*/restart_dhcp\: 1/g' /etc/cobbler/settings
-sed -i 's/^next_server\:.*/next_server\: 10.0.0.200/g' /etc/cobbler/settings
-sed -i 's/^server\:.*/server\: 10.0.0.200/g' /etc/cobbler/settings
-sed -i 's/^http_port\:.*/http_port\: 5150/g' /etc/cobbler/settings
-sed -i 's/^INTERFACES.*/INTERFACES="br-dhcp"/g' /etc/default/isc-dhcp-server
-
-# Move Cobbler Apache config to the right place
-cp -v /etc/apache2/conf.d/cobbler.conf /etc/apache2/conf-available/
-cp -v /etc/apache2/conf.d/cobbler_web.conf /etc/apache2/conf-available/
-
-# Fix Apache conf to match 2.4 configuration
-sed -i "/Order allow,deny/d" /etc/apache2/conf-available/cobbler*.conf
-sed -i "s/Allow from all/Require all granted/g" /etc/apache2/conf-available/cobbler*.conf
-sed -i "s/^Listen 80/Listen 5150/g" /etc/apache2/ports.conf
-sed -i "s/\:80/\:5150/g" /etc/apache2/sites-available/000-default.conf
-
-# Enable the above config
-a2enconf cobbler cobbler_web
-
-# Enable Proxy modules
-a2enmod proxy
-a2enmod proxy_http
-
-# Fix TFTP server arguments in cobbler template to enable it to work on Ubuntu
-sed -i "s/server_args .*/server_args             = -s \$args/" /etc/cobbler/tftpd.template
-
-mkdir_check "/tftpboot"
-
-chown www-data /var/lib/cobbler/webui_sessions
-
-#  when templated replace \$ with $
-# Copy dhcp template and replace with DNS var
-cp -v templates/dhcp.template /etc/cobbler/dhcp.template
-sed -i "s|__DNS_NAMESERVER__|${DNS_NAMESERVER}|g" /etc/cobbler/dhcp.template
-
-# Create a sources.list file
-if [[ $DEFAULT_IMAGE == "14.04."* ]]; then
-  cp -v templates/trusty-sources.list /var/www/html/trusty-sources.list
-else
-  cp -v templates/xenial-sources.list /var/www/html/xenial-sources.list
-fi
-
-# Set the default preseed device name.
-#  This is being set because sda is on hosts, vda is kvm, xvda is xen.
-DEVICE_NAME="${DEVICE_NAME:-vda}"
-
-# This is set to instruct the preseed what the default network is expected to be
-DEFAULT_NETWORK="${DEFAULT_NETWORK:-eth0}"
-
-# Set SSH key to root user's public key
-SSHKEY="${SSHKEY:-$(cat /root/.ssh/id_rsa.pub)}"
-
-# Template the seed files
-for seed_file in $(ls -1 templates/pre-seeds); do
-  cp -v "templates/pre-seeds/${seed_file}" "/var/lib/cobbler/kickstarts/${seed_file#*'/'}"
-  sed -i "s|__DEVICE_NAME__|${DEVICE_NAME}|g" "/var/lib/cobbler/kickstarts/${seed_file#*'/'}"
-  sed -i "s|__SSHKEY__|${SSHKEY}|g" "/var/lib/cobbler/kickstarts/${seed_file#*'/'}"
-  sed -i "s|__DEFAULT_NETWORK__|${DEFAULT_NETWORK}|g" "/var/lib/cobbler/kickstarts/${seed_file#*'/'}"
-  sed -i "s|__DEFAULT_KERNEL__|${DEFAULT_KERNEL}|g" "/var/lib/cobbler/kickstarts/${seed_file#*'/'}"
-done
-
-# Restart services again and configure autostart
-service cobblerd restart
-service apache2 restart
-service xinetd restart
-update-rc.d cobblerd defaults
-
-# Update Cobbler Signatures
-cobbler signature update
-
-# Get ubuntu server image md5 hash file
-wget -qO /tmp/MD5SUMS http://releases.ubuntu.com/"${DEFAULT_IMAGE:0:5}"/MD5SUMS
-
-# Get ubuntu server image, if the server image exists, compare the md5, rm and download new image if the hash is not
-# the same.
-mkdir_check "/var/cache/iso"
-pushd /var/cache/iso
-  if [ -f "/var/cache/iso/ubuntu-"${DEFAULT_IMAGE}"-server-amd64.iso" ]; then
-    md5=`md5sum ubuntu-"${DEFAULT_IMAGE}"-server-amd64.iso | awk '{ print $1 }'`
-    if ! grep -q ${md5} /tmp/MD5SUMS ; then
-      rm /var/cache/iso/ubuntu-"${DEFAULT_IMAGE}"-server-amd64.iso
-      wget http://releases.ubuntu.com/"${DEFAULT_IMAGE:0:5}"/ubuntu-"${DEFAULT_IMAGE}"-server-amd64.iso
-    fi
-  else
-    wget http://releases.ubuntu.com/"${DEFAULT_IMAGE:0:5}"/ubuntu-"${DEFAULT_IMAGE}"-server-amd64.iso
-  fi
-popd
-
-# import cobbler image
-if ! cobbler distro list | grep -qw "ubuntu-"${DEFAULT_IMAGE}"-server-x86_64"; then
-  mkdir_check "/mnt/iso"
-  mount -o loop /var/cache/iso/ubuntu-"${DEFAULT_IMAGE}"-server-amd64.iso /mnt/iso
-  cobbler import --name=ubuntu-"${DEFAULT_IMAGE}"-server-amd64 --path=/mnt/iso
-  umount /mnt/iso
-fi
-
-# Create cobbler profile
-for seed_file in /var/lib/cobbler/kickstarts/ubuntu*"${DEFAULT_IMAGE:0:5}"*.seed; do
-  if ! cobbler profile list | grep -qw "${seed_file##*'/'}"; then
-    cobbler profile add \
-      --name "${seed_file##*'/'}" \
-      --distro ubuntu-"${DEFAULT_IMAGE}"-server-x86_64 \
-      --kickstart "${seed_file}"
-  fi
-done
-
-# sync cobbler
-cobbler sync
-
-# Get Loaders
-cobbler get-loaders
-
-
-# Create cobbler systems
-for node_type in $(get_all_types); do
-  for node in $(get_host_type ${node_type}); do
-    if cobbler system list | grep -qw "${node%%':'*}"; then
-      echo "removing node ${node%%':'*} from the cobbler system"
-      cobbler system remove --name "${node%%':'*}"
-    fi
-    echo "adding node ${node%%':'*} from the cobbler system"
-    cobbler system add \
-      --name="${node%%':'*}" \
-      --profile="ubuntu-server-"${DEFAULT_IMAGE:0:5}"-unattended-cobbler-${node_type}.seed" \
-      --hostname="${node%%":"*}.openstackci.local" \
-      --kopts="interface=${DEFAULT_NETWORK} net.ifnames=0 biosdevname=0" \
-      --interface="${DEFAULT_NETWORK}" \
-      --mac="52:54:00:bd:81:${node:(-2)}" \
-      --ip-address="10.0.0.${node#*":"}" \
-      --subnet=255.255.255.0 \
-      --gateway=10.0.0.200 \
-      --name-servers="${DNS_NAMESERVER}" \
-      --static=1
-  done
-done
-
-# sync cobbler
-cobbler sync
-
-# Restart XinetD
-service xinetd stop
-service xinetd start
-
-# Remove the expired key and opensuse repo, no need after the cobbler being set up.
-aptkey_mesg=$(apt-key list)
-if [[ $(contains "$aptkey_mesg" "expired") -gt 0 ]]; then
-    expired_key=$(echo "$aptkey_mesg" | awk /expired/'{print $ sub(".*\/", "")}')
-    apt-key del $expired_key
-    add-apt-repository --remove "deb http://download.opensuse.org/repositories/home:/libertas-ict:/cobbler26/xUbuntu_14.04/ ./"
-fi
diff --git a/multi-node-aio/setup-host.sh b/multi-node-aio/setup-host.sh
deleted file mode 100755
index 8e328c91..00000000
--- a/multi-node-aio/setup-host.sh
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/usr/bin/env bash
-set -eu
-# Copyright [2016] [Kevin Carter]
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Load all functions
-source functions.rc
-
-# bring in variable definitions if there is a variables.sh file
-[[ -f variables.sh ]] && source variables.sh
-
-# Make the rekick function part of the main general shell
-declare -f rekick_vms | tee /root/.functions.rc
-declare -f ssh_agent_reset | tee -a /root/.functions.rc
-if ! grep -q 'source /root/.functions.rc' /root/.bashrc; then
-  echo 'source /root/.functions.rc' | tee -a /root/.bashrc
-fi
-
-# Reset the ssh-agent service to remove potential key issues
-ssh_agent_reset
-
-if [ ! -f "/root/.ssh/id_rsa" ];then
-  ssh-keygen -t rsa -N '' -f /root/.ssh/id_rsa
-fi
-
-# This gets the root users SSH-public-key
-SSHKEY=$(cat /root/.ssh/id_rsa.pub)
-if ! grep -q "${SSHKEY}" /root/.ssh/authorized_keys; then
-  cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
-fi
-
-# Install basic packages known to be needed
-apt-get update && apt-get install -y bridge-utils ifenslave libvirt-bin lvm2 openssh-server python2.7 qemu-kvm vim virtinst virt-manager vlan
-
-if ! grep "^source.*cfg$" /etc/network/interfaces; then
-  echo 'source /etc/network/interfaces.d/*.cfg' | tee -a /etc/network/interfaces
-fi
-
-# create kvm bridges
-cp -v templates/kvm-bonded-bridges.cfg /etc/network/interfaces.d/kvm-bridges.cfg
-
-# set network address
-sed -i "s|__NETWORK_BASE__|${NETWORK_BASE}|g" /etc/network/interfaces.d/kvm-bridges.cfg
-
-for i in $(awk '/iface/ {print $2}' /etc/network/interfaces.d/kvm-bridges.cfg); do
-  ifup $i
-done
-
-# Clean up stale NTP processes. This is because of BUG https://bugs.launchpad.net/ubuntu/+source/ntp/+bug/1125726
-pkill lockfile-create || true
-
-# Set the forward rule
-if ! grep -q '^net.ipv4.ip_forward' /etc/sysctl.conf; then
-  sysctl -w net.ipv4.ip_forward=1 | tee -a /etc/sysctl.conf
-fi
-
-# Add rules from the INPUT chain
-iptables_general_rule_add 'INPUT -i br-dhcp -p udp --dport 67 -j ACCEPT'
-iptables_general_rule_add 'INPUT -i br-dhcp -p tcp --dport 67 -j ACCEPT'
-iptables_general_rule_add 'INPUT -i br-dhcp -p udp --dport 53 -j ACCEPT'
-iptables_general_rule_add 'INPUT -i br-dhcp -p tcp --dport 53 -j ACCEPT'
-
-# Add rules from the FORWARDING chain
-iptables_general_rule_add 'FORWARD -i br-dhcp -j ACCEPT'
-iptables_general_rule_add 'FORWARD -o br-dhcp -j ACCEPT'
-
-# Add rules from the nat POSTROUTING chain
-iptables_filter_rule_add nat 'POSTROUTING -s 10.0.0.0/24 ! -d 10.0.0.0/24 -j MASQUERADE'
-
-# To provide internet connectivity to instances
-iptables_filter_rule_add nat "POSTROUTING -o $(ip route get 1 | awk '/dev/ {print $5}') -j MASQUERADE"
-
-# Add rules from the mangle POSTROUTING chain
-iptables_filter_rule_add mangle 'POSTROUTING -s 10.0.0.0/24 -o br-dhcp -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill'
-
-# To ensure ssh checksum are always correct
-iptables_filter_rule_add mangle 'POSTROUTING -p tcp -j CHECKSUM --checksum-fill'
-
-# Enable partitioning of the "${DATA_DISK_DEVICE}"
-PARTITION_HOST=${PARTITION_HOST:-false}
-if [[ "${PARTITION_HOST}" = true ]]; then
-  # Set the data disk device, if unset the largest unpartitioned device will be used to for host VMs
-  DATA_DISK_DEVICE="${DATA_DISK_DEVICE:-$(lsblk -brndo NAME,TYPE,FSTYPE,RO,SIZE | awk '/d[b-z]+ disk +0/{ if ($4>m){m=$4; d=$1}}; END{print d}')}"
-  parted --script /dev/${DATA_DISK_DEVICE} mklabel gpt
-  parted --align optimal --script /dev/${DATA_DISK_DEVICE} mkpart kvm ext4 0% 100%
-  mkfs.ext4 /dev/${DATA_DISK_DEVICE}1
-  if ! grep -qw "^/dev/${DATA_DISK_DEVICE}1" /etc/fstab; then
-    echo "/dev/${DATA_DISK_DEVICE}1 /var/lib/libvirt/images/ ext4 defaults 0 0" >> /etc/fstab
-  fi
-  mount -a
-fi
-
-# Set the default OVERRIDE_SOURCES var
-OVERRIDE_SOURCES=${OVERRIDE_SOURCES:-true}
-if ( "${OVERRIDE_SOURCES}" == true )
-then
-  cat > /etc/apt/sources.list <<EOF
-  # Faster likely unsigned repo
-  deb [arch=amd64] http://mirror.rackspace.com/ubuntu trusty main universe
-  deb [arch=amd64] http://mirror.rackspace.com/ubuntu trusty-updates main universe
-  deb [arch=amd64] http://mirror.rackspace.com/ubuntu trusty-backports main universe
-  deb [arch=amd64] http://mirror.rackspace.com/ubuntu trusty-security main universe
-
-  # i386 comes from the global known repo. This is slower and so it is only used for i386 packages
-  deb [arch=i386] http://archive.ubuntu.com/ubuntu trusty main universe
-  deb [arch=i386] http://archive.ubuntu.com/ubuntu trusty-updates main universe
-  deb [arch=i386] http://archive.ubuntu.com/ubuntu trusty-backports main universe
-  deb [arch=i386] http://archive.ubuntu.com/ubuntu trusty-security main universe
-EOF
-
-  cat > /tmp/sources.list <<EOF
-  # Faster likely unsigned repo
-  deb [arch=amd64] http://mirror.rackspace.com/ubuntu xenial main universe
-  deb [arch=amd64] http://mirror.rackspace.com/ubuntu xenial-updates main universe
-  deb [arch=amd64] http://mirror.rackspace.com/ubuntu xenial-backports main universe
-  deb [arch=amd64] http://mirror.rackspace.com/ubuntu xenial-security main universe
-
-  # i386 comes from the global known repo. This is slower and so it is only used for i386 packages
-  deb [arch=i386] http://archive.ubuntu.com/ubuntu xenial main universe
-  deb [arch=i386] http://archive.ubuntu.com/ubuntu xenial-updates main universe
-  deb [arch=i386] http://archive.ubuntu.com/ubuntu xenial-backports main universe
-  deb [arch=i386] http://archive.ubuntu.com/ubuntu xenial-security main universe
-EOF
-fi
-
-# Allow apt repos to be UnAuthenticated
-cat > /etc/apt/apt.conf.d/00-nokey <<EOF
-APT { Get { AllowUnauthenticated "1"; }; };
-EOF
diff --git a/multi-node-aio/setup-virsh-net.sh b/multi-node-aio/setup-virsh-net.sh
deleted file mode 100755
index 2c5287df..00000000
--- a/multi-node-aio/setup-virsh-net.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env bash
-set -eu
-# Copyright [2016] [Kevin Carter]
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Load all functions
-source functions.rc
-
-# bring in variable definitions if there is a variables.sh file
-[[ -f variables.sh ]] && source variables.sh
-
-# Remove the default libvirt networks
-if virsh net-list |  grep -qw "default"; then
-  virsh net-autostart default --disable
-  virsh net-destroy default
-fi
-
-# Create the libvirt networks used for the Host VMs
-for network in br-dhcp vm-br-eth1 vm-br-eth2 vm-br-eth3 vm-br-eth4 vm-br-eth5; do
-  if ! virsh net-list |  grep -qw "${network}"; then
-    sed "s/__NETWORK__/${network}/g" templates/libvirt-network.xml > /etc/libvirt/qemu/networks/${network}.xml
-    virsh net-define --file /etc/libvirt/qemu/networks/${network}.xml
-    virsh net-create --file /etc/libvirt/qemu/networks/${network}.xml
-    virsh net-autostart ${network}
-  fi
-done
diff --git a/multi-node-aio/templates/dhcp.template b/multi-node-aio/templates/dhcp.template
deleted file mode 100644
index 1864134e..00000000
--- a/multi-node-aio/templates/dhcp.template
+++ /dev/null
@@ -1,85 +0,0 @@
-# ******************************************************************
-# Cobbler managed dhcpd.conf file
-#
-# generated from cobbler dhcp.conf template ($date)
-# Do NOT make changes to /etc/dhcpd.conf. Instead, make your changes
-# in /etc/cobbler/dhcp.template, as /etc/dhcpd.conf will be
-# overwritten.
-#
-# ******************************************************************
-
-ddns-update-style interim;
-
-allow booting;
-allow bootp;
-
-ignore client-updates;
-set vendorclass = option vendor-class-identifier;
-
-option pxe-system-type code 93 = unsigned integer 16;
-
-subnet 10.0.0.0 netmask 255.255.255.0 {
-     option routers             10.0.0.200;
-     option domain-name-servers __DNS_NAMESERVER__;
-     option subnet-mask         255.255.255.0;
-     range dynamic-bootp        10.0.0.1 10.0.0.50;
-     default-lease-time         21600;
-     max-lease-time             43200;
-     next-server                $next_server;
-     class "pxeclients" {
-          match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
-          if option pxe-system-type = 00:02 {
-                  filename "ia64/elilo.efi";
-          } else if option pxe-system-type = 00:06 {
-                  filename "grub/grub-x86.efi";
-          } else if option pxe-system-type = 00:07 {
-                  filename "grub/grub-x86_64.efi";
-          } else {
-                  filename "pxelinux.0";
-          }
-     }
-
-}
-
-#for dhcp_tag in $dhcp_tags.keys():
-    ## group could be subnet if your dhcp tags line up with your subnets
-    ## or really any valid dhcpd.conf construct ... if you only use the
-    ## default dhcp tag in cobbler, the group block can be deleted for a
-    ## flat configuration
-# group for Cobbler DHCP tag: $dhcp_tag
-group {
-        #for mac in $dhcp_tags[$dhcp_tag].keys():
-            #set iface = $dhcp_tags[$dhcp_tag][$mac]
-    host $iface.name {
-        hardware ethernet $mac;
-        #if $iface.ip_address:
-        fixed-address $iface.ip_address;
-        #end if
-        #if $iface.hostname:
-        option host-name "$iface.hostname";
-        #end if
-        #if $iface.netmask:
-        option subnet-mask $iface.netmask;
-        #end if
-        #if $iface.gateway:
-        option routers $iface.gateway;
-        #end if
-        #if $iface.enable_gpxe:
-        if exists user-class and option user-class = "gPXE" {
-            filename "http://$cobbler_server/cblr/svc/op/gpxe/system/$iface.owner";
-        } else if exists user-class and option user-class = "iPXE" {
-            filename "http://$cobbler_server/cblr/svc/op/gpxe/system/$iface.owner";
-        } else {
-            filename "undionly.kpxe";
-        }
-        #else
-        filename "$iface.filename";
-        #end if
-        ## Cobbler defaults to $next_server, but some users
-        ## may like to use $iface.system.server for proxied setups
-        next-server $next_server;
-        ## next-server $iface.next_server;
-    }
-        #end for
-}
-#end for
diff --git a/multi-node-aio/templates/kvm-bonded-bridges.cfg b/multi-node-aio/templates/kvm-bonded-bridges.cfg
deleted file mode 100644
index 0acff947..00000000
--- a/multi-node-aio/templates/kvm-bonded-bridges.cfg
+++ /dev/null
@@ -1,69 +0,0 @@
-# VLAN TAGS
-# 1100 - MANAGEMENT_NET
-# 1200 - OVERLAY_NET
-# 1300 - STORAGE_NET
-# 1400 - FLAT_NET
-
-#### BRIDGES USED FOR VM INTERFACES ####
-# MANAGEMENT Network
-auto vm-br-eth1
-iface vm-br-eth1 inet static
-    bridge_stp off
-    bridge_waitport 0
-    bridge_fd 0
-    bridge_ports none
-    address __NETWORK_BASE__.236.200
-    netmask 255.255.252.0
-    offload-sg off
-
-# FLAT Network
-auto vm-br-eth2
-iface vm-br-eth2 inet static
-    bridge_stp off
-    bridge_waitport 0
-    bridge_fd 0
-    bridge_ports none
-    address __NETWORK_BASE__.248.1
-    netmask 255.255.252.0
-    offload-sg off
-
-# VLAN Network
-auto vm-br-eth3
-iface vm-br-eth3 inet manual
-    bridge_stp off
-    bridge_waitport 0
-    bridge_fd 0
-    bridge_ports none
-    offload-sg off
-
-# TUNNEL Network
-auto vm-br-eth4
-iface vm-br-eth4 inet manual
-    bridge_stp off
-    bridge_waitport 0
-    bridge_fd 0
-    bridge_ports none
-    offload-sg off
-
-# STORAGE Network
-auto vm-br-eth5
-iface vm-br-eth5 inet manual
-    bridge_stp off
-    bridge_waitport 0
-    bridge_fd 0
-    bridge_ports none
-    offload-sg off
-#### INTERFACES USED FOR VM BRIDGES ####
-
-
-#### SYSTEM INTEGRATION DEVICES ####
-auto br-dhcp
-iface br-dhcp inet static
-    bridge_stp off
-    bridge_waitport 0
-    bridge_fd 0
-    bridge_ports none
-    address 10.0.0.200
-    netmask 255.255.255.0
-    offload-sg off
-#### SYSTEM INTEGRATION DEVICES ####
diff --git a/multi-node-aio/templates/libvirt-network.xml b/multi-node-aio/templates/libvirt-network.xml
deleted file mode 100644
index 1c10ff99..00000000
--- a/multi-node-aio/templates/libvirt-network.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<network>
-  <name>__NETWORK__</name>
-  <forward mode="bridge"/>
-  <bridge name="__NETWORK__"/>
-</network>
\ No newline at end of file
diff --git a/multi-node-aio/templates/network-interfaces/vm.openstackci.local-bonded-bridges.cfg b/multi-node-aio/templates/network-interfaces/vm.openstackci.local-bonded-bridges.cfg
deleted file mode 100644
index 278617fb..00000000
--- a/multi-node-aio/templates/network-interfaces/vm.openstackci.local-bonded-bridges.cfg
+++ /dev/null
@@ -1,76 +0,0 @@
-## Physical interface, could be bond. This only needs to be set once for the physical device
-# MANAGEMENT Network
-auto eth1
-iface eth1 inet manual
-
-# FLAT Network
-auto eth2
-iface eth2 inet manual
-
-# VLAN Network
-auto eth3
-iface eth3 inet manual
-
-# TUNNEL Network
-auto eth4
-iface eth4 inet manual
-
-# STORAGE Network
-auto eth5
-iface eth5 inet manual
-
-auto br-mgmt
-iface br-mgmt inet static
-    bridge_stp off
-    bridge_waitport 10
-    bridge_fd 0
-    bridge_ports eth1
-    address __NETWORK_BASE__.236.__COUNT__
-    netmask 255.255.252.0
-    offload-sg off
-
-auto br-flat
-iface br-flat inet static
-    bridge_stp off
-    bridge_waitport 10
-    bridge_fd 0
-    bridge_ports eth2
-    address __NETWORK_BASE__.248.__COUNT__
-    netmask 255.255.252.0
-    offload-sg off
-
-auto br-vlan
-iface br-vlan inet manual
-    bridge_stp off
-    bridge_waitport 10
-    bridge_fd 0
-    bridge_ports eth3
-    offload-sg off
-
-auto br-vxlan
-iface br-vxlan inet static
-    bridge_stp off
-    bridge_waitport 10
-    bridge_fd 0
-    bridge_ports eth4
-    address __NETWORK_BASE__.240.__COUNT__
-    netmask 255.255.252.0
-    offload-sg off
-    # To ensure ssh checksum is correct
-    up /sbin/iptables -A POSTROUTING -t mangle -p tcp --dport 22 -j CHECKSUM --checksum-fill
-    down /sbin/iptables -D POSTROUTING -t mangle -p tcp --dport 22 -j CHECKSUM --checksum-fill
-    # To provide internet connectivity to instances
-    up /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-    down /sbin/iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
-    # Make sure instances can talk to the metadata server
-    up /sbin/iptables -t mangle -A POSTROUTING -p tcp --sport 80 -j CHECKSUM --checksum-fill
-
-auto br-storage
-iface br-storage inet static
-    bridge_stp off
-    bridge_waitport 10
-    bridge_fd 0
-    bridge_ports eth5
-    address __NETWORK_BASE__.244.__COUNT__
-    netmask 255.255.252.0
-    offload-sg off
diff --git a/multi-node-aio/templates/openstack_user_config.yml b/multi-node-aio/templates/openstack_user_config.yml
deleted file mode 100644
index 87d76c61..00000000
--- a/multi-node-aio/templates/openstack_user_config.yml
+++ /dev/null
@@ -1,75 +0,0 @@
----
-cidr_networks:
-  container: __NETWORK_BASE__.236.0/22
-  tunnel: __NETWORK_BASE__.240.0/22
-  storage: __NETWORK_BASE__.244.0/22
-
-used_ips:
-  - "__NETWORK_BASE__.236.0,__NETWORK_BASE__.236.200"
-  - "__NETWORK_BASE__.240.0,__NETWORK_BASE__.240.200"
-  - "__NETWORK_BASE__.244.0,__NETWORK_BASE__.244.200"
-  - "__NETWORK_BASE__.248.0,__NETWORK_BASE__.248.200"
-
-global_overrides:
-  internal_lb_vip_address: __NETWORK_BASE__.236.150
-  # The external IP is quoted simply to ensure that the .aio file can be used as input
-  # dynamic inventory testing.
-  external_lb_vip_address: "__HOSTIP__"
-  tunnel_bridge: "br-vxlan"
-  management_bridge: "br-mgmt"
-  provider_networks:
-    - network:
-        container_bridge: "br-mgmt"
-        container_type: "veth"
-        container_interface: "eth1"
-        ip_from_q: "container"
-        type: "raw"
-        group_binds:
-          - all_containers
-          - hosts
-        is_container_address: true
-        is_ssh_address: true
-    - network:
-        container_bridge: "br-vxlan"
-        container_type: "veth"
-        container_interface: "eth10"
-        ip_from_q: "tunnel"
-        type: "vxlan"
-        range: "1:1000"
-        net_name: "vxlan"
-        group_binds:
-          - neutron_linuxbridge_agent
-    - network:
-        container_bridge: "br-flat"
-        container_type: "veth"
-        container_interface: "eth12"
-        type: "flat"
-        net_name: "flat"
-        group_binds:
-          - neutron_linuxbridge_agent
-          - utility_all
-    - network:
-        container_bridge: "br-vlan"
-        container_type: "veth"
-        container_interface: "eth11"
-        type: "vlan"
-        range: "1:1"
-        net_name: "vlan"
-        group_binds:
-          - neutron_linuxbridge_agent
-    - network:
-        container_bridge: "br-storage"
-        container_type: "veth"
-        container_interface: "eth2"
-        ip_from_q: "storage"
-        type: "raw"
-        group_binds:
-          - glance_api
-          - cinder_api
-          - cinder_volume
-          - nova_compute
-          - swift_proxy
-
-haproxy_hosts:
-  loadbalancer1:
-    ip: __NETWORK_BASE__.236.150
diff --git a/multi-node-aio/templates/osa-swift.yml b/multi-node-aio/templates/osa-swift.yml
deleted file mode 100644
index cb522b94..00000000
--- a/multi-node-aio/templates/osa-swift.yml
+++ /dev/null
@@ -1,16 +0,0 @@
----
-global_overrides:
-  swift:
-    part_power: 8
-    storage_network: 'br-storage'
-    replication_network: 'br-storage'
-    drives:
-      - name: disk1
-      - name: disk2
-      - name: disk3
-    mount_point: /srv
-    storage_policies:
-      - policy:
-          name: default
-          index: 0
-          default: True
diff --git a/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-cinder.seed b/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-cinder.seed
deleted file mode 100644
index 47eac3fa..00000000
--- a/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-cinder.seed
+++ /dev/null
@@ -1,296 +0,0 @@
-#
-# Ubuntu Server 14.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is meant to be used with Cobbler. It has been
-# tested only on Cobbler 2.4.1. It is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/14.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string $kernel_options_post
-
-### Base system installation
-d-i base-installer/kernel/image string __DEFAULT_KERNEL__
-
-#############
-#
-# Networking
-#
-#############
-
-#if "__DEFAULT_NETWORK__" in $interfaces
-    #set idata = $interfaces["__DEFAULT_NETWORK__"]
-    #set static = $idata['static']
-    #set ip_address = $idata.get("ip_address", "127.0.0.1")
-    #set netmask = $idata.get("netmask", "255.0.0.0")
-    #set gateway = $getVar('gateway','127.0.0.1')
-#end if
-
-d-i netcfg/choose_interface select __DEFAULT_NETWORK__
-d-i netcfg/dhcp_timeout string 60
-d-i netcfg/disable_autoconfig boolean true
-d-i netcfg/dhcp_failed note
-d-i netcfg/dhcp_options select Configure network manually
-
-#if $static
-# Static network configuration.
-d-i netcfg/get_ipaddress string $idata.get("ip_address", "127.0.0.1")
-d-i netcfg/get_netmask string $idata.get("netmask", "255.0.0.0")
-d-i netcfg/get_gateway string $gateway
-d-i netcfg/get_nameservers string $name_servers[0]
-d-i netcfg/confirm_static boolean true
-#end if
-
-d-i netcfg/get_hostname string $system_name
-d-i netcfg/get_domain string $hostname
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/__DEVICE_NAME__. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://$http_server/cobbler/links/$distro_name/install/filesystem.squashfs
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-d-i mirror/http/proxy string
-d-i mirror/http/hostname string $http_server
-d-i mirror/http/directory string $install_source_directory
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string ntp.ubuntu.com
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/__DEVICE_NAME__
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-# This is used to auto-confirm its OK to use a partition without an FS
-d-i partman-basicmethods/method_only boolean false
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/__DEVICE_NAME__2 }          \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              51200 1 51200 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-              76800 1 76800 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-              1024 1 1000000000 ext4                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ cinder00 }                     \
-                      method{ keep }                          \
-              .                                               \
-
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python2.7 vim vlan
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password cobbler
-d-i passwd/root-password-again password cobbler
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-d-i preseed/late_command string \
-  wget http://$http_server/trusty-sources.list -O /target/etc/apt/sources.list; \
-  wget http://$http_server/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  wget http://$http_server/cblr/svc/op/nopxe/system/$system_name -O /dev/null; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "__SSHKEY__" >> /target/root/.ssh/authorized_keys; \
-  vgcreate cinder-volumes /dev/mapper/lxc-cinder00; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
\ No newline at end of file
diff --git a/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-deploy.seed b/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-deploy.seed
deleted file mode 100644
index 47eac3fa..00000000
--- a/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-deploy.seed
+++ /dev/null
@@ -1,296 +0,0 @@
-#
-# Ubuntu Server 14.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is meant to be used with Cobbler. It has been
-# tested only on Cobbler 2.4.1. It is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/14.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string $kernel_options_post
-
-### Base system installation
-d-i base-installer/kernel/image string __DEFAULT_KERNEL__
-
-#############
-#
-# Networking
-#
-#############
-
-#if "__DEFAULT_NETWORK__" in $interfaces
-    #set idata = $interfaces["__DEFAULT_NETWORK__"]
-    #set static = $idata['static']
-    #set ip_address = $idata.get("ip_address", "127.0.0.1")
-    #set netmask = $idata.get("netmask", "255.0.0.0")
-    #set gateway = $getVar('gateway','127.0.0.1')
-#end if
-
-d-i netcfg/choose_interface select __DEFAULT_NETWORK__
-d-i netcfg/dhcp_timeout string 60
-d-i netcfg/disable_autoconfig boolean true
-d-i netcfg/dhcp_failed note
-d-i netcfg/dhcp_options select Configure network manually
-
-#if $static
-# Static network configuration.
-d-i netcfg/get_ipaddress string $idata.get("ip_address", "127.0.0.1")
-d-i netcfg/get_netmask string $idata.get("netmask", "255.0.0.0")
-d-i netcfg/get_gateway string $gateway
-d-i netcfg/get_nameservers string $name_servers[0]
-d-i netcfg/confirm_static boolean true
-#end if
-
-d-i netcfg/get_hostname string $system_name
-d-i netcfg/get_domain string $hostname
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/__DEVICE_NAME__. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://$http_server/cobbler/links/$distro_name/install/filesystem.squashfs
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-d-i mirror/http/proxy string
-d-i mirror/http/hostname string $http_server
-d-i mirror/http/directory string $install_source_directory
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string ntp.ubuntu.com
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/__DEVICE_NAME__
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-# This is used to auto-confirm its OK to use a partition without an FS
-d-i partman-basicmethods/method_only boolean false
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/__DEVICE_NAME__2 }          \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              51200 1 51200 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-              76800 1 76800 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-              1024 1 1000000000 ext4                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ cinder00 }                     \
-                      method{ keep }                          \
-              .                                               \
-
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python2.7 vim vlan
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password cobbler
-d-i passwd/root-password-again password cobbler
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-d-i preseed/late_command string \
-  wget http://$http_server/trusty-sources.list -O /target/etc/apt/sources.list; \
-  wget http://$http_server/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  wget http://$http_server/cblr/svc/op/nopxe/system/$system_name -O /dev/null; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "__SSHKEY__" >> /target/root/.ssh/authorized_keys; \
-  vgcreate cinder-volumes /dev/mapper/lxc-cinder00; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
\ No newline at end of file
diff --git a/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-infra.seed b/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-infra.seed
deleted file mode 100644
index d06e4251..00000000
--- a/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-infra.seed
+++ /dev/null
@@ -1,290 +0,0 @@
-#
-# Ubuntu Server 14.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is meant to be used with Cobbler. It has been
-# tested only on Cobbler 2.4.1. It is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/14.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string $kernel_options_post
-
-### Base system installation
-d-i base-installer/kernel/image string __DEFAULT_KERNEL__
-
-#############
-#
-# Networking
-#
-#############
-
-#if "__DEFAULT_NETWORK__" in $interfaces
-    #set idata = $interfaces["__DEFAULT_NETWORK__"]
-    #set static = $idata['static']
-    #set ip_address = $idata.get("ip_address", "127.0.0.1")
-    #set netmask = $idata.get("netmask", "255.0.0.0")
-    #set gateway = $getVar('gateway','127.0.0.1')
-#end if
-
-d-i netcfg/choose_interface select __DEFAULT_NETWORK__
-d-i netcfg/dhcp_timeout string 60
-d-i netcfg/disable_autoconfig boolean true
-d-i netcfg/dhcp_failed note
-d-i netcfg/dhcp_options select Configure network manually
-
-#if $static
-# Static network configuration.
-d-i netcfg/get_ipaddress string $idata.get("ip_address", "127.0.0.1")
-d-i netcfg/get_netmask string $idata.get("netmask", "255.0.0.0")
-d-i netcfg/get_gateway string $gateway
-d-i netcfg/get_nameservers string $name_servers[0]
-d-i netcfg/confirm_static boolean true
-#end if
-
-d-i netcfg/get_hostname string $system_name
-d-i netcfg/get_domain string $hostname
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/__DEVICE_NAME__. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://$http_server/cobbler/links/$distro_name/install/filesystem.squashfs
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-d-i mirror/http/proxy string
-d-i mirror/http/hostname string $http_server
-d-i mirror/http/directory string $install_source_directory
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string ntp.ubuntu.com
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/__DEVICE_NAME__
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/__DEVICE_NAME__2 }          \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              153600 1 153600 ext4                            \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-              1024 1 1000000000 ext4                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python2.7 vim vlan
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password cobbler
-d-i passwd/root-password-again password cobbler
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-# Command Line 1: Allow root to SSH.
-# Command Line 2: Cobbler overwrites sources.list with its own repos. Put the default Ubuntu sources.list back.
-# Command Line 3: Cobbler API call to turn off netboot.
-d-i preseed/late_command string \
-  wget http://$http_server/trusty-sources.list -O /target/etc/apt/sources.list; \
-  wget http://$http_server/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  wget http://$http_server/cblr/svc/op/nopxe/system/$system_name -O /dev/null; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "__SSHKEY__" >> /target/root/.ssh/authorized_keys; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
diff --git a/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-logging.seed b/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-logging.seed
deleted file mode 100644
index 858f6e24..00000000
--- a/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-logging.seed
+++ /dev/null
@@ -1,291 +0,0 @@
-#
-# Ubuntu Server 14.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is meant to be used with Cobbler. It has been
-# tested only on Cobbler 2.4.1. It is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/14.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string $kernel_options_post
-
-### Base system installation
-d-i base-installer/kernel/image string __DEFAULT_KERNEL__
-
-#############
-#
-# Networking
-#
-#############
-
-#if "__DEFAULT_NETWORK__" in $interfaces
-    #set idata = $interfaces["__DEFAULT_NETWORK__"]
-    #set static = $idata['static']
-    #set ip_address = $idata.get("ip_address", "127.0.0.1")
-    #set netmask = $idata.get("netmask", "255.0.0.0")
-    #set gateway = $getVar('gateway','127.0.0.1')
-#end if
-
-d-i netcfg/choose_interface select __DEFAULT_NETWORK__
-d-i netcfg/dhcp_timeout string 60
-d-i netcfg/disable_autoconfig boolean true
-d-i netcfg/dhcp_failed note
-d-i netcfg/dhcp_options select Configure network manually
-
-#if $static
-# Static network configuration.
-d-i netcfg/get_ipaddress string $idata.get("ip_address", "127.0.0.1")
-d-i netcfg/get_netmask string $idata.get("netmask", "255.0.0.0")
-d-i netcfg/get_gateway string $gateway
-d-i netcfg/get_nameservers string $name_servers[0]
-d-i netcfg/confirm_static boolean true
-#end if
-
-d-i netcfg/get_hostname string $system_name
-d-i netcfg/get_domain string $hostname
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/__DEVICE_NAME__. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://$http_server/cobbler/links/$distro_name/install/filesystem.squashfs
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-d-i mirror/http/proxy string
-d-i mirror/http/hostname string $http_server
-d-i mirror/http/directory string $install_source_directory
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string ntp.ubuntu.com
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/__DEVICE_NAME__
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/__DEVICE_NAME__2 }          \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              51200 1 51200 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-              1024 1 1000000000 ext4                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python2.7 vim vlan
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password cobbler
-d-i passwd/root-password-again password cobbler
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-# Command Line 1: Allow root to SSH.
-# Command Line 2: Cobbler overwrites sources.list with its own repos. Put the default Ubuntu sources.list back.
-# Command Line 3: Cobbler API call to turn off netboot.
-d-i preseed/late_command string \
-  wget http://$http_server/trusty-sources.list -O /target/etc/apt/sources.list; \
-  wget http://$http_server/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  wget http://$http_server/cblr/svc/op/nopxe/system/$system_name -O /dev/null; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "__SSHKEY__" >> /target/root/.ssh/authorized_keys; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
diff --git a/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-network.seed b/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-network.seed
deleted file mode 100644
index d06e4251..00000000
--- a/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-network.seed
+++ /dev/null
@@ -1,290 +0,0 @@
-#
-# Ubuntu Server 14.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is meant to be used with Cobbler. It has been
-# tested only on Cobbler 2.4.1. It is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/14.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string $kernel_options_post
-
-### Base system installation
-d-i base-installer/kernel/image string __DEFAULT_KERNEL__
-
-#############
-#
-# Networking
-#
-#############
-
-#if "__DEFAULT_NETWORK__" in $interfaces
-    #set idata = $interfaces["__DEFAULT_NETWORK__"]
-    #set static = $idata['static']
-    #set ip_address = $idata.get("ip_address", "127.0.0.1")
-    #set netmask = $idata.get("netmask", "255.0.0.0")
-    #set gateway = $getVar('gateway','127.0.0.1')
-#end if
-
-d-i netcfg/choose_interface select __DEFAULT_NETWORK__
-d-i netcfg/dhcp_timeout string 60
-d-i netcfg/disable_autoconfig boolean true
-d-i netcfg/dhcp_failed note
-d-i netcfg/dhcp_options select Configure network manually
-
-#if $static
-# Static network configuration.
-d-i netcfg/get_ipaddress string $idata.get("ip_address", "127.0.0.1")
-d-i netcfg/get_netmask string $idata.get("netmask", "255.0.0.0")
-d-i netcfg/get_gateway string $gateway
-d-i netcfg/get_nameservers string $name_servers[0]
-d-i netcfg/confirm_static boolean true
-#end if
-
-d-i netcfg/get_hostname string $system_name
-d-i netcfg/get_domain string $hostname
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/__DEVICE_NAME__. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://$http_server/cobbler/links/$distro_name/install/filesystem.squashfs
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-d-i mirror/http/proxy string
-d-i mirror/http/hostname string $http_server
-d-i mirror/http/directory string $install_source_directory
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string ntp.ubuntu.com
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/__DEVICE_NAME__
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/__DEVICE_NAME__2 }          \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              153600 1 153600 ext4                            \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-              1024 1 1000000000 ext4                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python2.7 vim vlan
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password cobbler
-d-i passwd/root-password-again password cobbler
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-# Command Line 1: Allow root to SSH.
-# Command Line 2: Cobbler overwrites sources.list with its own repos. Put the default Ubuntu sources.list back.
-# Command Line 3: Cobbler API call to turn off netboot.
-d-i preseed/late_command string \
-  wget http://$http_server/trusty-sources.list -O /target/etc/apt/sources.list; \
-  wget http://$http_server/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  wget http://$http_server/cblr/svc/op/nopxe/system/$system_name -O /dev/null; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "__SSHKEY__" >> /target/root/.ssh/authorized_keys; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
diff --git a/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-nova_compute.seed b/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-nova_compute.seed
deleted file mode 100644
index b9ce8a87..00000000
--- a/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-nova_compute.seed
+++ /dev/null
@@ -1,298 +0,0 @@
-#
-# Ubuntu Server 14.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is meant to be used with Cobbler. It has been
-# tested only on Cobbler 2.4.1. It is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/14.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string $kernel_options_post
-
-### Base system installation
-d-i base-installer/kernel/image string __DEFAULT_KERNEL__
-
-#############
-#
-# Networking
-#
-#############
-
-#if "__DEFAULT_NETWORK__" in $interfaces
-    #set idata = $interfaces["__DEFAULT_NETWORK__"]
-    #set static = $idata['static']
-    #set ip_address = $idata.get("ip_address", "127.0.0.1")
-    #set netmask = $idata.get("netmask", "255.0.0.0")
-    #set gateway = $getVar('gateway','127.0.0.1')
-#end if
-
-d-i netcfg/choose_interface select __DEFAULT_NETWORK__
-d-i netcfg/dhcp_timeout string 60
-d-i netcfg/disable_autoconfig boolean true
-d-i netcfg/dhcp_failed note
-d-i netcfg/dhcp_options select Configure network manually
-
-#if $static
-# Static network configuration.
-d-i netcfg/get_ipaddress string $idata.get("ip_address", "127.0.0.1")
-d-i netcfg/get_netmask string $idata.get("netmask", "255.0.0.0")
-d-i netcfg/get_gateway string $gateway
-d-i netcfg/get_nameservers string $name_servers[0]
-d-i netcfg/confirm_static boolean true
-#end if
-
-d-i netcfg/get_hostname string $system_name
-d-i netcfg/get_domain string $hostname
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/__DEVICE_NAME__. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://$http_server/cobbler/links/$distro_name/install/filesystem.squashfs
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-d-i mirror/http/proxy string
-d-i mirror/http/hostname string $http_server
-d-i mirror/http/directory string $install_source_directory
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string ntp.ubuntu.com
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/__DEVICE_NAME__
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/__DEVICE_NAME__2 }          \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              51200 1 51200 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-              76800 1 76800 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-              1024 1 1000000000 ext4                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ nova00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ nova }                           \
-                      mountpoint{ /var/lib/nova }             \
-              .                                               \
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python2.7 vim vlan
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password cobbler
-d-i passwd/root-password-again password cobbler
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-# Command Line 1: Allow root to SSH.
-# Command Line 2: Cobbler overwrites sources.list with its own repos. Put the default Ubuntu sources.list back.
-# Command Line 3: Cobbler API call to turn off netboot.
-d-i preseed/late_command string \
-  wget http://$http_server/trusty-sources.list -O /target/etc/apt/sources.list; \
-  wget http://$http_server/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  wget http://$http_server/cblr/svc/op/nopxe/system/$system_name -O /dev/null; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "__SSHKEY__" >> /target/root/.ssh/authorized_keys; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
diff --git a/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-swift.seed b/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-swift.seed
deleted file mode 100644
index 54f786dd..00000000
--- a/multi-node-aio/templates/pre-seeds/ubuntu-server-14.04-unattended-cobbler-swift.seed
+++ /dev/null
@@ -1,315 +0,0 @@
-#
-# Ubuntu Server 14.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is meant to be used with Cobbler. It has been
-# tested only on Cobbler 2.4.1. It is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/14.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string $kernel_options_post
-
-### Base system installation
-d-i base-installer/kernel/image string __DEFAULT_KERNEL__
-
-#############
-#
-# Networking
-#
-#############
-
-#if "__DEFAULT_NETWORK__" in $interfaces
-    #set idata = $interfaces["__DEFAULT_NETWORK__"]
-    #set static = $idata['static']
-    #set ip_address = $idata.get("ip_address", "127.0.0.1")
-    #set netmask = $idata.get("netmask", "255.0.0.0")
-    #set gateway = $getVar('gateway','127.0.0.1')
-#end if
-
-d-i netcfg/choose_interface select __DEFAULT_NETWORK__
-d-i netcfg/dhcp_timeout string 60
-d-i netcfg/disable_autoconfig boolean true
-d-i netcfg/dhcp_failed note
-d-i netcfg/dhcp_options select Configure network manually
-
-#if $static
-# Static network configuration.
-d-i netcfg/get_ipaddress string $idata.get("ip_address", "127.0.0.1")
-d-i netcfg/get_netmask string $idata.get("netmask", "255.0.0.0")
-d-i netcfg/get_gateway string $gateway
-d-i netcfg/get_nameservers string $name_servers[0]
-d-i netcfg/confirm_static boolean true
-#end if
-
-d-i netcfg/get_hostname string $system_name
-d-i netcfg/get_domain string $hostname
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/__DEVICE_NAME__. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://$http_server/cobbler/links/$distro_name/install/filesystem.squashfs
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-d-i mirror/http/proxy string
-d-i mirror/http/hostname string $http_server
-d-i mirror/http/directory string $install_source_directory
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string ntp.ubuntu.com
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/__DEVICE_NAME__
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                 \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/__DEVICE_NAME__2 }          \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              51200 1 51200 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-              20480 1 20480 xfs                               \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swift01 }                      \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ xfs }     \
-                      label{ openstack00 }                    \
-                      mountpoint{ /srv/disk1 }                \
-              .                                               \
-              20480 1 20480 xfs                               \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swift02 }                      \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ xfs }     \
-                      label{ openstack00 }                    \
-                      mountpoint{ /srv/disk2 }                \
-              .                                               \
-              20480 1 20480 xfs                               \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swift03 }                      \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ xfs }     \
-                      label{ openstack00 }                    \
-                      mountpoint{ /srv/disk3 }                \
-              .                                               \
-              76800 1 76800 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python2.7 vim vlan xfsprogs
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password cobbler
-d-i passwd/root-password-again password cobbler
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-# Command Line 1: Allow root to SSH.
-# Command Line 2: Cobbler overwrites sources.list with its own repos. Put the default Ubuntu sources.list back.
-# Command Line 3: Cobbler API call to turn off netboot.
-d-i preseed/late_command string \
-  wget http://$http_server/trusty-sources.list -O /target/etc/apt/sources.list; \
-  wget http://$http_server/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  wget http://$http_server/cblr/svc/op/nopxe/system/$system_name -O /dev/null; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "__SSHKEY__" >> /target/root/.ssh/authorized_keys; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
diff --git a/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-cinder.seed b/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-cinder.seed
deleted file mode 100644
index d72ddde4..00000000
--- a/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-cinder.seed
+++ /dev/null
@@ -1,293 +0,0 @@
-#
-# Ubuntu Server 16.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is meant to be used with Cobbler. It has been
-# tested only on Cobbler 2.4.1. It is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/16.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string $kernel_options_post
-d-i debian-installer/add-kernel-opts string biosdevname=0 net.ifnames=0
-#############
-#
-# Networking
-#
-#############
-
-#if "__DEFAULT_NETWORK__" in $interfaces
-    #set idata = $interfaces["__DEFAULT_NETWORK__"]
-    #set static = $idata['static']
-    #set ip_address = $idata.get("ip_address", "127.0.0.1")
-    #set netmask = $idata.get("netmask", "255.0.0.0")
-    #set gateway = $getVar('gateway','127.0.0.1')
-#end if
-
-d-i netcfg/choose_interface select __DEFAULT_NETWORK__
-d-i netcfg/dhcp_timeout string 60
-d-i netcfg/disable_autoconfig boolean true
-d-i netcfg/dhcp_failed note
-d-i netcfg/dhcp_options select Configure network manually
-
-#if $static
-# Static network configuration.
-d-i netcfg/get_ipaddress string $idata.get("ip_address", "127.0.0.1")
-d-i netcfg/get_netmask string $idata.get("netmask", "255.0.0.0")
-d-i netcfg/get_gateway string $gateway
-d-i netcfg/get_nameservers string $name_servers[0]
-d-i netcfg/confirm_static boolean true
-#end if
-
-d-i netcfg/get_hostname string $system_name
-d-i netcfg/get_domain string $hostname
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/__DEVICE_NAME__. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://$http_server/cobbler/links/$distro_name/install/filesystem.squashfs
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-d-i mirror/http/proxy string
-d-i mirror/http/hostname string $http_server
-d-i mirror/http/directory string $install_source_directory
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string ntp.ubuntu.com
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/__DEVICE_NAME__
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-# This is used to auto-confirm its OK to use a partition without an FS
-d-i partman-basicmethods/method_only boolean false
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/__DEVICE_NAME__2 }          \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              51200 1 51200 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-              76800 1 76800 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-              1024 1 1000000000 ext4                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ cinder00 }                     \
-                      method{ keep }                          \
-              .                                               \
-
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python vim vlan
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password cobbler
-d-i passwd/root-password-again password cobbler
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-d-i preseed/late_command string \
-  wget http://$http_server/xenial-sources.list -O /target/etc/apt/sources.list; \
-  wget http://$http_server/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  wget http://$http_server/cblr/svc/op/nopxe/system/$system_name -O /dev/null; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "__SSHKEY__" >> /target/root/.ssh/authorized_keys; \
-  vgcreate cinder-volumes /dev/mapper/lxc-cinder00; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
\ No newline at end of file
diff --git a/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-deploy.seed b/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-deploy.seed
deleted file mode 100644
index d72ddde4..00000000
--- a/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-deploy.seed
+++ /dev/null
@@ -1,293 +0,0 @@
-#
-# Ubuntu Server 16.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is meant to be used with Cobbler. It has been
-# tested only on Cobbler 2.4.1. It is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/16.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string $kernel_options_post
-d-i debian-installer/add-kernel-opts string biosdevname=0 net.ifnames=0
-#############
-#
-# Networking
-#
-#############
-
-#if "__DEFAULT_NETWORK__" in $interfaces
-    #set idata = $interfaces["__DEFAULT_NETWORK__"]
-    #set static = $idata['static']
-    #set ip_address = $idata.get("ip_address", "127.0.0.1")
-    #set netmask = $idata.get("netmask", "255.0.0.0")
-    #set gateway = $getVar('gateway','127.0.0.1')
-#end if
-
-d-i netcfg/choose_interface select __DEFAULT_NETWORK__
-d-i netcfg/dhcp_timeout string 60
-d-i netcfg/disable_autoconfig boolean true
-d-i netcfg/dhcp_failed note
-d-i netcfg/dhcp_options select Configure network manually
-
-#if $static
-# Static network configuration.
-d-i netcfg/get_ipaddress string $idata.get("ip_address", "127.0.0.1")
-d-i netcfg/get_netmask string $idata.get("netmask", "255.0.0.0")
-d-i netcfg/get_gateway string $gateway
-d-i netcfg/get_nameservers string $name_servers[0]
-d-i netcfg/confirm_static boolean true
-#end if
-
-d-i netcfg/get_hostname string $system_name
-d-i netcfg/get_domain string $hostname
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/__DEVICE_NAME__. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://$http_server/cobbler/links/$distro_name/install/filesystem.squashfs
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-d-i mirror/http/proxy string
-d-i mirror/http/hostname string $http_server
-d-i mirror/http/directory string $install_source_directory
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string ntp.ubuntu.com
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/__DEVICE_NAME__
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-# This is used to auto-confirm its OK to use a partition without an FS
-d-i partman-basicmethods/method_only boolean false
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/__DEVICE_NAME__2 }          \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              51200 1 51200 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-              76800 1 76800 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-              1024 1 1000000000 ext4                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ cinder00 }                     \
-                      method{ keep }                          \
-              .                                               \
-
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python vim vlan
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password cobbler
-d-i passwd/root-password-again password cobbler
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-d-i preseed/late_command string \
-  wget http://$http_server/xenial-sources.list -O /target/etc/apt/sources.list; \
-  wget http://$http_server/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  wget http://$http_server/cblr/svc/op/nopxe/system/$system_name -O /dev/null; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "__SSHKEY__" >> /target/root/.ssh/authorized_keys; \
-  vgcreate cinder-volumes /dev/mapper/lxc-cinder00; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
\ No newline at end of file
diff --git a/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-infra.seed b/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-infra.seed
deleted file mode 100644
index d8e38703..00000000
--- a/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-infra.seed
+++ /dev/null
@@ -1,287 +0,0 @@
-#
-# Ubuntu Server 16.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is meant to be used with Cobbler. It has been
-# tested only on Cobbler 2.4.1. It is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/16.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string $kernel_options_post
-d-i debian-installer/add-kernel-opts string biosdevname=0 net.ifnames=0
-#############
-#
-# Networking
-#
-#############
-
-#if "__DEFAULT_NETWORK__" in $interfaces
-    #set idata = $interfaces["__DEFAULT_NETWORK__"]
-    #set static = $idata['static']
-    #set ip_address = $idata.get("ip_address", "127.0.0.1")
-    #set netmask = $idata.get("netmask", "255.0.0.0")
-    #set gateway = $getVar('gateway','127.0.0.1')
-#end if
-
-d-i netcfg/choose_interface select __DEFAULT_NETWORK__
-d-i netcfg/dhcp_timeout string 60
-d-i netcfg/disable_autoconfig boolean true
-d-i netcfg/dhcp_failed note
-d-i netcfg/dhcp_options select Configure network manually
-
-#if $static
-# Static network configuration.
-d-i netcfg/get_ipaddress string $idata.get("ip_address", "127.0.0.1")
-d-i netcfg/get_netmask string $idata.get("netmask", "255.0.0.0")
-d-i netcfg/get_gateway string $gateway
-d-i netcfg/get_nameservers string $name_servers[0]
-d-i netcfg/confirm_static boolean true
-#end if
-
-d-i netcfg/get_hostname string $system_name
-d-i netcfg/get_domain string $hostname
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/__DEVICE_NAME__. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://$http_server/cobbler/links/$distro_name/install/filesystem.squashfs
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-d-i mirror/http/proxy string
-d-i mirror/http/hostname string $http_server
-d-i mirror/http/directory string $install_source_directory
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string ntp.ubuntu.com
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/__DEVICE_NAME__
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/__DEVICE_NAME__2 }          \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              153600 1 153600 ext4                            \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-              1024 1 1000000000 ext4                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python vim vlan
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password cobbler
-d-i passwd/root-password-again password cobbler
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-# Command Line 1: Allow root to SSH.
-# Command Line 2: Cobbler overwrites sources.list with its own repos. Put the default Ubuntu sources.list back.
-# Command Line 3: Cobbler API call to turn off netboot.
-d-i preseed/late_command string \
-  wget http://$http_server/xenial-sources.list -O /target/etc/apt/sources.list; \
-  wget http://$http_server/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  wget http://$http_server/cblr/svc/op/nopxe/system/$system_name -O /dev/null; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "__SSHKEY__" >> /target/root/.ssh/authorized_keys; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
\ No newline at end of file
diff --git a/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-logging.seed b/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-logging.seed
deleted file mode 100644
index dd34c8d3..00000000
--- a/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-logging.seed
+++ /dev/null
@@ -1,288 +0,0 @@
-#
-# Ubuntu Server 16.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is meant to be used with Cobbler. It has been
-# tested only on Cobbler 2.4.1. It is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/16.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string $kernel_options_post
-d-i debian-installer/add-kernel-opts string biosdevname=0 net.ifnames=0
-#############
-#
-# Networking
-#
-#############
-
-#if "__DEFAULT_NETWORK__" in $interfaces
-    #set idata = $interfaces["__DEFAULT_NETWORK__"]
-    #set static = $idata['static']
-    #set ip_address = $idata.get("ip_address", "127.0.0.1")
-    #set netmask = $idata.get("netmask", "255.0.0.0")
-    #set gateway = $getVar('gateway','127.0.0.1')
-#end if
-
-d-i netcfg/choose_interface select __DEFAULT_NETWORK__
-d-i netcfg/dhcp_timeout string 60
-d-i netcfg/disable_autoconfig boolean true
-d-i netcfg/dhcp_failed note
-d-i netcfg/dhcp_options select Configure network manually
-
-#if $static
-# Static network configuration.
-d-i netcfg/get_ipaddress string $idata.get("ip_address", "127.0.0.1")
-d-i netcfg/get_netmask string $idata.get("netmask", "255.0.0.0")
-d-i netcfg/get_gateway string $gateway
-d-i netcfg/get_nameservers string $name_servers[0]
-d-i netcfg/confirm_static boolean true
-#end if
-
-d-i netcfg/get_hostname string $system_name
-d-i netcfg/get_domain string $hostname
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/__DEVICE_NAME__. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://$http_server/cobbler/links/$distro_name/install/filesystem.squashfs
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-d-i mirror/http/proxy string
-d-i mirror/http/hostname string $http_server
-d-i mirror/http/directory string $install_source_directory
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string ntp.ubuntu.com
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/__DEVICE_NAME__
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/__DEVICE_NAME__2 }          \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              51200 1 51200 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-              1024 1 1000000000 ext4                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python vim vlan
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password cobbler
-d-i passwd/root-password-again password cobbler
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-# Command Line 1: Allow root to SSH.
-# Command Line 2: Cobbler overwrites sources.list with its own repos. Put the default Ubuntu sources.list back.
-# Command Line 3: Cobbler API call to turn off netboot.
-d-i preseed/late_command string \
-  wget http://$http_server/xenial-sources.list -O /target/etc/apt/sources.list; \
-  wget http://$http_server/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  wget http://$http_server/cblr/svc/op/nopxe/system/$system_name -O /dev/null; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "__SSHKEY__" >> /target/root/.ssh/authorized_keys; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
\ No newline at end of file
diff --git a/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-network.seed b/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-network.seed
deleted file mode 100644
index d8e38703..00000000
--- a/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-network.seed
+++ /dev/null
@@ -1,287 +0,0 @@
-#
-# Ubuntu Server 16.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is meant to be used with Cobbler. It has been
-# tested only on Cobbler 2.4.1. It is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/16.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string $kernel_options_post
-d-i debian-installer/add-kernel-opts string biosdevname=0 net.ifnames=0
-#############
-#
-# Networking
-#
-#############
-
-#if "__DEFAULT_NETWORK__" in $interfaces
-    #set idata = $interfaces["__DEFAULT_NETWORK__"]
-    #set static = $idata['static']
-    #set ip_address = $idata.get("ip_address", "127.0.0.1")
-    #set netmask = $idata.get("netmask", "255.0.0.0")
-    #set gateway = $getVar('gateway','127.0.0.1')
-#end if
-
-d-i netcfg/choose_interface select __DEFAULT_NETWORK__
-d-i netcfg/dhcp_timeout string 60
-d-i netcfg/disable_autoconfig boolean true
-d-i netcfg/dhcp_failed note
-d-i netcfg/dhcp_options select Configure network manually
-
-#if $static
-# Static network configuration.
-d-i netcfg/get_ipaddress string $idata.get("ip_address", "127.0.0.1")
-d-i netcfg/get_netmask string $idata.get("netmask", "255.0.0.0")
-d-i netcfg/get_gateway string $gateway
-d-i netcfg/get_nameservers string $name_servers[0]
-d-i netcfg/confirm_static boolean true
-#end if
-
-d-i netcfg/get_hostname string $system_name
-d-i netcfg/get_domain string $hostname
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/__DEVICE_NAME__. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://$http_server/cobbler/links/$distro_name/install/filesystem.squashfs
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-d-i mirror/http/proxy string
-d-i mirror/http/hostname string $http_server
-d-i mirror/http/directory string $install_source_directory
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string ntp.ubuntu.com
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/__DEVICE_NAME__
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/__DEVICE_NAME__2 }          \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              153600 1 153600 ext4                            \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-              1024 1 1000000000 ext4                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python vim vlan
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password cobbler
-d-i passwd/root-password-again password cobbler
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-# Command Line 1: Allow root to SSH.
-# Command Line 2: Cobbler overwrites sources.list with its own repos. Put the default Ubuntu sources.list back.
-# Command Line 3: Cobbler API call to turn off netboot.
-d-i preseed/late_command string \
-  wget http://$http_server/xenial-sources.list -O /target/etc/apt/sources.list; \
-  wget http://$http_server/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  wget http://$http_server/cblr/svc/op/nopxe/system/$system_name -O /dev/null; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "__SSHKEY__" >> /target/root/.ssh/authorized_keys; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
\ No newline at end of file
diff --git a/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-nova_compute.seed b/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-nova_compute.seed
deleted file mode 100644
index b05b47a9..00000000
--- a/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-nova_compute.seed
+++ /dev/null
@@ -1,295 +0,0 @@
-#
-# Ubuntu Server 16.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is meant to be used with Cobbler. It has been
-# tested only on Cobbler 2.4.1. It is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/16.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string $kernel_options_post
-d-i debian-installer/add-kernel-opts string biosdevname=0 net.ifnames=0
-#############
-#
-# Networking
-#
-#############
-
-#if "__DEFAULT_NETWORK__" in $interfaces
-    #set idata = $interfaces["__DEFAULT_NETWORK__"]
-    #set static = $idata['static']
-    #set ip_address = $idata.get("ip_address", "127.0.0.1")
-    #set netmask = $idata.get("netmask", "255.0.0.0")
-    #set gateway = $getVar('gateway','127.0.0.1')
-#end if
-
-d-i netcfg/choose_interface select __DEFAULT_NETWORK__
-d-i netcfg/dhcp_timeout string 60
-d-i netcfg/disable_autoconfig boolean true
-d-i netcfg/dhcp_failed note
-d-i netcfg/dhcp_options select Configure network manually
-
-#if $static
-# Static network configuration.
-d-i netcfg/get_ipaddress string $idata.get("ip_address", "127.0.0.1")
-d-i netcfg/get_netmask string $idata.get("netmask", "255.0.0.0")
-d-i netcfg/get_gateway string $gateway
-d-i netcfg/get_nameservers string $name_servers[0]
-d-i netcfg/confirm_static boolean true
-#end if
-
-d-i netcfg/get_hostname string $system_name
-d-i netcfg/get_domain string $hostname
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/__DEVICE_NAME__. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://$http_server/cobbler/links/$distro_name/install/filesystem.squashfs
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-d-i mirror/http/proxy string
-d-i mirror/http/hostname string $http_server
-d-i mirror/http/directory string $install_source_directory
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string ntp.ubuntu.com
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/__DEVICE_NAME__
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/__DEVICE_NAME__2 }          \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              51200 1 51200 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-              76800 1 76800 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-              1024 1 1000000000 ext4                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ nova00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ nova }                           \
-                      mountpoint{ /var/lib/nova }             \
-              .                                               \
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python vim vlan
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password cobbler
-d-i passwd/root-password-again password cobbler
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-# Command Line 1: Allow root to SSH.
-# Command Line 2: Cobbler overwrites sources.list with its own repos. Put the default Ubuntu sources.list back.
-# Command Line 3: Cobbler API call to turn off netboot.
-d-i preseed/late_command string \
-  wget http://$http_server/xenial-sources.list -O /target/etc/apt/sources.list; \
-  wget http://$http_server/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  wget http://$http_server/cblr/svc/op/nopxe/system/$system_name -O /dev/null; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "__SSHKEY__" >> /target/root/.ssh/authorized_keys; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
\ No newline at end of file
diff --git a/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-swift.seed b/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-swift.seed
deleted file mode 100644
index 0828ae03..00000000
--- a/multi-node-aio/templates/pre-seeds/ubuntu-server-16.04-unattended-cobbler-swift.seed
+++ /dev/null
@@ -1,312 +0,0 @@
-#
-# Ubuntu Server 16.04 Preseed
-#
-# Usage:
-#
-# This Ubuntu Preseed file is meant to be used with Cobbler. It has been
-# tested only on Cobbler 2.4.1. It is a completely unattended install.
-#
-# References:
-#
-# https://help.ubuntu.com/16.04/installation-guide/example-preseed.txt
-# http://www.claudiokuenzler.com/blog/513/debian-ubuntu-preseed-create-two-volume-groups-same-disk
-
-#############
-#
-# Kernel Options
-#
-#############
-
-# Use the following option to add additional boot parameters for the
-# installed system (if supported by the bootloader installer).
-# Note: options passed to the installer will be added automatically.
-d-i debian-installer/add-kernel-opts string $kernel_options_post
-d-i debian-installer/add-kernel-opts string biosdevname=0 net.ifnames=0
-#############
-#
-# Networking
-#
-#############
-
-#if "__DEFAULT_NETWORK__" in $interfaces
-    #set idata = $interfaces["__DEFAULT_NETWORK__"]
-    #set static = $idata['static']
-    #set ip_address = $idata.get("ip_address", "127.0.0.1")
-    #set netmask = $idata.get("netmask", "255.0.0.0")
-    #set gateway = $getVar('gateway','127.0.0.1')
-#end if
-
-d-i netcfg/choose_interface select __DEFAULT_NETWORK__
-d-i netcfg/dhcp_timeout string 60
-d-i netcfg/disable_autoconfig boolean true
-d-i netcfg/dhcp_failed note
-d-i netcfg/dhcp_options select Configure network manually
-
-#if $static
-# Static network configuration.
-d-i netcfg/get_ipaddress string $idata.get("ip_address", "127.0.0.1")
-d-i netcfg/get_netmask string $idata.get("netmask", "255.0.0.0")
-d-i netcfg/get_gateway string $gateway
-d-i netcfg/get_nameservers string $name_servers[0]
-d-i netcfg/confirm_static boolean true
-#end if
-
-d-i netcfg/get_hostname string $system_name
-d-i netcfg/get_domain string $hostname
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-#############
-#
-# Pre Install
-#
-#############
-
-# Command Line 1: This is necessary otherwise you will be prompted to umount /dev/__DEVICE_NAME__. See Ubuntu bug #1347726.
-d-i preseed/early_command string \
-      umount /media || true
-
-#############
-#
-# Net Image
-#
-#############
-
-# Required at least for 12.10+
-d-i live-installer/net-image string http://$http_server/cobbler/links/$distro_name/install/filesystem.squashfs
-
-#############
-#
-# Localization
-#
-#############
-
-d-i debian-installer/locale string en
-d-i debian-installer/country string US
-d-i debian-installer/locale string en_US.UTF-8
-d-i debian-installer/language string en
-
-#############
-#
-# Keyboard
-#
-#############
-
-# Disable automatic (interactive) keymap detection.
-d-i console-setup/ask_detect boolean false
-d-i console-setup/layoutcode string us
-d-i console-setup/variantcode string
-d-i keyboard-configuration/layoutcode string us
-
-#############
-#
-# Mirror
-#
-#############
-
-d-i mirror/country string manual
-d-i mirror/http/proxy string
-d-i mirror/http/hostname string $http_server
-d-i mirror/http/directory string $install_source_directory
-
-#############
-#
-# Clock and Time Zone
-#
-#############
-
-# Controls whether to use NTP to set the clock during the install
-d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string ntp.ubuntu.com
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Central
-
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-#############
-#
-# Partitioning
-#
-#############
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-lvm/device_remove_lvm boolean true
-
-# The same applies to pre-existing software RAID array:
-d-i partman-md/device_remove_md boolean true
-
-# And the same goes for the confirmation to write the lvm partitions.
-d-i partman-lvm/confirm boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-d-i partman-auto/method string lvm
-d-i partman-auto/disk string /dev/__DEVICE_NAME__
-
-# For LVM partitioning, you can select how much of the volume group to use
-# for logical volumes.
-d-i partman-auto-lvm/guided_size string max
-
-d-i partman-auto/choose_recipe select custompartitioning
-d-i partman-auto/expert_recipe string \
-      custompartitioning :: \
-              512 1 512 ext2                                  \
-                      $primary{ }                             \
-                      $bootable{ }                            \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext2 }    \
-                      label{ boot }                           \
-                      mountpoint{ /boot }                     \
-              .                                               \
-              1024 1 100% ext4                                 \
-                      $primary{ }                             \
-                      method{ lvm }                           \
-                      device{ /dev/__DEVICE_NAME__2 }          \
-                      vg_name{ lxc }                          \
-              .                                               \
-              8192 1 8192 linux-swap                          \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swap00 }                       \
-                      method{ swap } format{ }                \
-              .                                               \
-              51200 1 51200 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ root00 }                       \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ root }                           \
-                      mountpoint{ / }                         \
-              .                                               \
-              20480 1 20480 xfs                               \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swift01 }                      \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ xfs }     \
-                      label{ openstack00 }                    \
-                      mountpoint{ /srv/disk1 }                \
-              .                                               \
-              20480 1 20480 xfs                               \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swift02 }                      \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ xfs }     \
-                      label{ openstack00 }                    \
-                      mountpoint{ /srv/disk2 }                \
-              .                                               \
-              20480 1 20480 xfs                               \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ swift03 }                      \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ xfs }     \
-                      label{ openstack00 }                    \
-                      mountpoint{ /srv/disk3 }                \
-              .                                               \
-              76800 1 76800 ext4                              \
-                      $lvmok{ } in_vg{ lxc }                  \
-                      lv_name{ openstack00 }                  \
-                      method{ format } format{ }              \
-                      use_filesystem{ } filesystem{ ext4 }    \
-                      label{ openstack00 }                    \
-                      mountpoint{ /openstack }                \
-              .                                               \
-
-
-# This makes partman automatically partition without confirmation, provided
-# that you told it what to do using one of the methods above.
-d-i partman-partitioning/confirm_write_new_label boolean true
-d-i partman/choose_partition select finish
-d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-
-#############
-#
-# Packages
-#
-#############
-
-# Package selection
-tasksel tasksel/first multiselect openssh-server
-
-# Whether to upgrade packages after debootstrap.
-# Allowed values: none, safe-upgrade, full-upgrade
-d-i pkgsel/upgrade select none
-d-i pkgsel/include string bridge-utils ethtool ifenslave lvm2 openssh-server python vim vlan xfsprogs
-# Policy for applying updates. May be "none" (no automatic updates),
-# "unattended-upgrades" (install security updates automatically), or
-# "landscape" (manage system with Landscape).
-d-i pkgsel/update-policy select none
-
-# Some versions of the installer can report back on what software you have
-# installed, and what software you use. The default is not to report back,
-# but sending reports helps the project determine what software is most
-# popular and include it on CDs.
-popularity-contest popularity-contest/participate boolean false
-
-#############
-#
-# Users and Password
-#
-#############
-
-# Skip creation of a root account (normal user account will be able to
-# use sudo). The default is false; preseed this to true if you want to set
-# a root password.
-d-i passwd/root-login boolean true
-
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# The installer will warn about weak passwords. If you are sure you know
-# what you're doing and want to override it, uncomment this.
-d-i user-setup/allow-password-weak boolean true
-
-# Root password, either in clear text
-d-i passwd/root-password password cobbler
-d-i passwd/root-password-again password cobbler
-
-#############
-#
-# Bootloader
-#
-#############
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-#############
-#
-# Post Install
-#
-#############
-
-# Command Line 1: Allow root to SSH.
-# Command Line 2: Cobbler overwrites sources.list with its own repos. Put the default Ubuntu sources.list back.
-# Command Line 3: Cobbler API call to turn off netboot.
-d-i preseed/late_command string \
-  wget http://$http_server/xenial-sources.list -O /target/etc/apt/sources.list; \
-  wget http://$http_server/osa-$hostname-bridges.cfg -O /target/etc/network/interfaces.d/osa-$hostname-bridges.cfg; \
-  wget http://$http_server/cblr/svc/op/nopxe/system/$system_name -O /dev/null; \
-  sed -i '/PermitRootLogin / s/ .*/ yes/' /target/etc/ssh/sshd_config; \
-  mkdir /target/root/.ssh; \
-  chmod 0700 /target/root/.ssh; \
-  echo "__SSHKEY__" >> /target/root/.ssh/authorized_keys; \
-  killall.sh || true; \
-  netcfg; \
-  echo -e '#!/bin/sh\n\nif ! grep -q "^source.*cfg$" /etc/network/interfaces; then echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces; fi' > /target/etc/network/if-pre-up.d/multi-nic; \
-  chmod +x /target/etc/network/if-pre-up.d/multi-nic
-
-
-#############
-#
-# Finish
-#
-#############
-
-# Reboot after the install is finished.
-d-i finish-install/reboot_in_progress note
\ No newline at end of file
diff --git a/multi-node-aio/templates/trusty-sources.list b/multi-node-aio/templates/trusty-sources.list
deleted file mode 100644
index 7f1fdea4..00000000
--- a/multi-node-aio/templates/trusty-sources.list
+++ /dev/null
@@ -1,20 +0,0 @@
-deb http://archive.ubuntu.com/ubuntu trusty main restricted
-deb-src http://archive.ubuntu.com/ubuntu trusty main restricted
-deb http://archive.ubuntu.com/ubuntu trusty-updates main restricted
-deb-src http://archive.ubuntu.com/ubuntu trusty-updates main restricted
-deb http://archive.ubuntu.com/ubuntu trusty universe
-deb-src http://archive.ubuntu.com/ubuntu trusty universe
-deb http://archive.ubuntu.com/ubuntu trusty-updates universe
-deb-src http://archive.ubuntu.com/ubuntu trusty-updates universe
-deb http://archive.ubuntu.com/ubuntu trusty multiverse
-deb-src http://archive.ubuntu.com/ubuntu trusty multiverse
-deb http://archive.ubuntu.com/ubuntu trusty-updates multiverse
-deb-src http://archive.ubuntu.com/ubuntu trusty-updates multiverse
-deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse
-deb-src http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse
-deb http://security.ubuntu.com/ubuntu trusty-security main restricted
-deb-src http://security.ubuntu.com/ubuntu trusty-security main restricted
-deb http://security.ubuntu.com/ubuntu trusty-security universe
-deb-src http://security.ubuntu.com/ubuntu trusty-security universe
-deb http://security.ubuntu.com/ubuntu trusty-security multiverse
-deb-src http://security.ubuntu.com/ubuntu trusty-security multiverse
\ No newline at end of file
diff --git a/multi-node-aio/templates/vmnode-config/cinder.openstackci.local.xml b/multi-node-aio/templates/vmnode-config/cinder.openstackci.local.xml
deleted file mode 100644
index 7f706ad7..00000000
--- a/multi-node-aio/templates/vmnode-config/cinder.openstackci.local.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<domain type='kvm'>
-  <name>__NODE__.openstackci.local</name>
-  <memory unit='GiB'>12</memory>
-  <currentMemory unit='GiB'>4</currentMemory>
-  <vcpu placement='static'>2</vcpu>
-  <resource>
-    <partition>/machine</partition>
-  </resource>
-  <os>
-    <type arch='x86_64' machine='pc-i440fx-trusty'>hvm</type>
-  </os>
-  <features>
-    <acpi/>
-    <apic/>
-  </features>
-  <cpu mode='host-model'>
-    <model fallback='allow'/>
-  </cpu>
-  <clock offset='utc'>
-    <timer name='rtc' tickpolicy='catchup'/>
-    <timer name='pit' tickpolicy='delay'/>
-    <timer name='hpet' present='no'/>
-  </clock>
-  <on_poweroff>destroy</on_poweroff>
-  <on_reboot>restart</on_reboot>
-  <on_crash>restart</on_crash>
-  <pm>
-    <suspend-to-mem enabled='no'/>
-    <suspend-to-disk enabled='no'/>
-  </pm>
-  <devices>
-    <disk type='file' device='disk'>
-      <driver name='qemu' type='qcow2' cache='none' io='native'/>
-      <source file='/var/lib/libvirt/images/__NODE__.openstackci.local.img'/>
-      <target dev='__DEVICE_NAME__' bus='virtio'/>
-      <boot order='1'/>
-      <alias name='virtio-disk0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
-    </disk>
-    <controller type='pci' index='0' model='pci-root'>
-      <alias name='pci.0'/>
-    </controller>
-    <controller type='virtio-serial' index='0'>
-      <alias name='virtio-serial0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
-    </controller>
-    <interface type='bridge'>
-      <mac address="52:54:00:bd:81:__COUNT__"/>
-      <source bridge='br-dhcp'/>
-      <target dev='vnet0'/>
-      <model type='virtio'/>
-      <boot order='2'/>
-      <alias name='net0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:fd:7f:__COUNT__"/>
-      <source bridge='vm-br-eth1'/>
-      <target dev='vnet1'/>
-      <model type='virtio'/>
-      <boot order='3'/>
-      <alias name='net1'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:f5:44:__COUNT__"/>
-      <source bridge='vm-br-eth2'/>
-      <target dev='vnet2'/>
-      <model type='virtio'/>
-      <boot order='4'/>
-      <alias name='net2'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:1f:96:__COUNT__"/>
-      <source bridge='vm-br-eth3'/>
-      <target dev='vnet3'/>
-      <model type='virtio'/>
-      <boot order='5'/>
-      <alias name='net3'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:50:03:__COUNT__"/>
-      <source bridge='vm-br-eth4'/>
-      <target dev='vnet4'/>
-      <model type='virtio'/>
-      <boot order='6'/>
-      <alias name='net4'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0d' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:2d:12:__COUNT__"/>
-      <source bridge='vm-br-eth5'/>
-      <target dev='vnet5'/>
-      <model type='virtio'/>
-      <boot order='7'/>
-      <alias name='net5'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0e' function='0x0'/>
-    </interface>
-    <serial type='pty'>
-      <source path='/dev/pts/4'/>
-      <target port='0'/>
-      <alias name='serial0'/>
-    </serial>
-    <console type='pty' tty='/dev/pts/4'>
-      <source path='/dev/pts/4'/>
-      <target type='serial' port='0'/>
-      <alias name='serial0'/>
-    </console>
-    <input type='mouse' bus='ps2'/>
-    <input type='keyboard' bus='ps2'/>
-    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
-      <listen type='address' address='127.0.0.1'/>
-    </graphics>
-    <video>
-      <model type='vmvga' vram='9216' heads='1'/>
-      <alias name='video0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
-    </video>
-    <memballoon model='virtio'>
-      <alias name='balloon0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
-    </memballoon>
-    <rng model='virtio'>
-      <backend model='random'>/dev/random</backend>
-      <alias name='rng0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
-    </rng>
-  </devices>
-</domain>
diff --git a/multi-node-aio/templates/vmnode-config/deploy.openstackci.local.xml b/multi-node-aio/templates/vmnode-config/deploy.openstackci.local.xml
deleted file mode 100644
index 4a1ef1b7..00000000
--- a/multi-node-aio/templates/vmnode-config/deploy.openstackci.local.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<domain type='kvm'>
-  <name>__NODE__.openstackci.local</name>
-  <memory unit='GiB'>4</memory>
-  <currentMemory unit='GiB'>4</currentMemory>
-  <vcpu placement='static'>4</vcpu>
-  <resource>
-    <partition>/machine</partition>
-  </resource>
-  <os>
-    <type arch='x86_64' machine='pc-i440fx-trusty'>hvm</type>
-  </os>
-  <features>
-    <acpi/>
-    <apic/>
-  </features>
-  <cpu mode='host-model'>
-    <model fallback='allow'/>
-  </cpu>
-  <clock offset='utc'>
-    <timer name='rtc' tickpolicy='catchup'/>
-    <timer name='pit' tickpolicy='delay'/>
-    <timer name='hpet' present='no'/>
-  </clock>
-  <on_poweroff>destroy</on_poweroff>
-  <on_reboot>restart</on_reboot>
-  <on_crash>restart</on_crash>
-  <pm>
-    <suspend-to-mem enabled='no'/>
-    <suspend-to-disk enabled='no'/>
-  </pm>
-  <devices>
-    <disk type='file' device='disk'>
-      <driver name='qemu' type='qcow2' cache='none' io='native'/>
-      <source file='/var/lib/libvirt/images/__NODE__.openstackci.local.img'/>
-      <target dev='__DEVICE_NAME__' bus='virtio'/>
-      <boot order='1'/>
-      <alias name='virtio-disk0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
-    </disk>
-    <controller type='pci' index='0' model='pci-root'>
-      <alias name='pci.0'/>
-    </controller>
-    <controller type='virtio-serial' index='0'>
-      <alias name='virtio-serial0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
-    </controller>
-    <interface type='bridge'>
-      <mac address="52:54:00:bd:81:__COUNT__"/>
-      <source bridge='br-dhcp'/>
-      <target dev='vnet0'/>
-      <model type='virtio'/>
-      <boot order='2'/>
-      <alias name='net0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:fd:7f:__COUNT__"/>
-      <source bridge='vm-br-eth1'/>
-      <target dev='vnet1'/>
-      <model type='virtio'/>
-      <boot order='3'/>
-      <alias name='net1'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:f5:44:__COUNT__"/>
-      <source bridge='vm-br-eth2'/>
-      <target dev='vnet2'/>
-      <model type='virtio'/>
-      <boot order='4'/>
-      <alias name='net2'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:1f:96:__COUNT__"/>
-      <source bridge='vm-br-eth3'/>
-      <target dev='vnet3'/>
-      <model type='virtio'/>
-      <boot order='5'/>
-      <alias name='net3'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:50:03:__COUNT__"/>
-      <source bridge='vm-br-eth4'/>
-      <target dev='vnet4'/>
-      <model type='virtio'/>
-      <boot order='6'/>
-      <alias name='net4'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0d' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:2d:12:__COUNT__"/>
-      <source bridge='vm-br-eth5'/>
-      <target dev='vnet5'/>
-      <model type='virtio'/>
-      <boot order='7'/>
-      <alias name='net5'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0e' function='0x0'/>
-    </interface>
-    <serial type='pty'>
-      <source path='/dev/pts/4'/>
-      <target port='0'/>
-      <alias name='serial0'/>
-    </serial>
-    <console type='pty' tty='/dev/pts/4'>
-      <source path='/dev/pts/4'/>
-      <target type='serial' port='0'/>
-      <alias name='serial0'/>
-    </console>
-    <input type='mouse' bus='ps2'/>
-    <input type='keyboard' bus='ps2'/>
-    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
-      <listen type='address' address='127.0.0.1'/>
-    </graphics>
-    <video>
-      <model type='vmvga' vram='1024' heads='1'/>
-      <alias name='video0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
-    </video>
-    <memballoon model='virtio'>
-      <alias name='balloon0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
-    </memballoon>
-    <rng model='virtio'>
-      <backend model='random'>/dev/random</backend>
-      <alias name='rng0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
-    </rng>
-  </devices>
-</domain>
diff --git a/multi-node-aio/templates/vmnode-config/infra.openstackci.local.xml b/multi-node-aio/templates/vmnode-config/infra.openstackci.local.xml
deleted file mode 100644
index 68bda593..00000000
--- a/multi-node-aio/templates/vmnode-config/infra.openstackci.local.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<domain type='kvm'>
-  <name>__NODE__.openstackci.local</name>
-  <memory unit='GiB'>12</memory>
-  <currentMemory unit='GiB'>12</currentMemory>
-  <vcpu placement='static'>10</vcpu>
-  <resource>
-    <partition>/machine</partition>
-  </resource>
-  <os>
-    <type arch='x86_64' machine='pc-i440fx-trusty'>hvm</type>
-  </os>
-  <features>
-    <acpi/>
-    <apic/>
-  </features>
-  <cpu mode='host-model'>
-    <model fallback='allow'/>
-  </cpu>
-  <clock offset='utc'>
-    <timer name='rtc' tickpolicy='catchup'/>
-    <timer name='pit' tickpolicy='delay'/>
-    <timer name='hpet' present='no'/>
-  </clock>
-  <on_poweroff>destroy</on_poweroff>
-  <on_reboot>restart</on_reboot>
-  <on_crash>restart</on_crash>
-  <pm>
-    <suspend-to-mem enabled='no'/>
-    <suspend-to-disk enabled='no'/>
-  </pm>
-  <devices>
-    <disk type='file' device='disk'>
-      <driver name='qemu' type='qcow2' cache='none' io='native'/>
-      <source file='/var/lib/libvirt/images/__NODE__.openstackci.local.img'/>
-      <target dev='__DEVICE_NAME__' bus='virtio'/>
-      <boot order='1'/>
-      <alias name='virtio-disk0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
-    </disk>
-    <controller type='pci' index='0' model='pci-root'>
-      <alias name='pci.0'/>
-    </controller>
-    <controller type='virtio-serial' index='0'>
-      <alias name='virtio-serial0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
-    </controller>
-    <interface type='bridge'>
-      <mac address="52:54:00:bd:81:__COUNT__"/>
-      <source bridge='br-dhcp'/>
-      <target dev='vnet0'/>
-      <model type='virtio'/>
-      <boot order='2'/>
-      <alias name='net0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:fd:7f:__COUNT__"/>
-      <source bridge='vm-br-eth1'/>
-      <target dev='vnet1'/>
-      <model type='virtio'/>
-      <boot order='3'/>
-      <alias name='net1'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:f5:44:__COUNT__"/>
-      <source bridge='vm-br-eth2'/>
-      <target dev='vnet2'/>
-      <model type='virtio'/>
-      <boot order='4'/>
-      <alias name='net2'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:1f:96:__COUNT__"/>
-      <source bridge='vm-br-eth3'/>
-      <target dev='vnet3'/>
-      <model type='virtio'/>
-      <boot order='5'/>
-      <alias name='net3'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:50:03:__COUNT__"/>
-      <source bridge='vm-br-eth4'/>
-      <target dev='vnet4'/>
-      <model type='virtio'/>
-      <boot order='6'/>
-      <alias name='net4'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0d' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:2d:12:__COUNT__"/>
-      <source bridge='vm-br-eth5'/>
-      <target dev='vnet5'/>
-      <model type='virtio'/>
-      <boot order='7'/>
-      <alias name='net5'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0e' function='0x0'/>
-    </interface>
-    <serial type='pty'>
-      <source path='/dev/pts/4'/>
-      <target port='0'/>
-      <alias name='serial0'/>
-    </serial>
-    <console type='pty' tty='/dev/pts/4'>
-      <source path='/dev/pts/4'/>
-      <target type='serial' port='0'/>
-      <alias name='serial0'/>
-    </console>
-    <input type='mouse' bus='ps2'/>
-    <input type='keyboard' bus='ps2'/>
-    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
-      <listen type='address' address='127.0.0.1'/>
-    </graphics>
-    <video>
-      <model type='vmvga' vram='9216' heads='1'/>
-      <alias name='video0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
-    </video>
-    <memballoon model='virtio'>
-      <alias name='balloon0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
-    </memballoon>
-    <rng model='virtio'>
-      <backend model='random'>/dev/random</backend>
-      <alias name='rng0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
-    </rng>
-  </devices>
-</domain>
\ No newline at end of file
diff --git a/multi-node-aio/templates/vmnode-config/logging.openstackci.local.xml b/multi-node-aio/templates/vmnode-config/logging.openstackci.local.xml
deleted file mode 100644
index 8d4e4a7c..00000000
--- a/multi-node-aio/templates/vmnode-config/logging.openstackci.local.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<domain type='kvm'>
-  <name>__NODE__.openstackci.local</name>
-  <memory unit='GiB'>2</memory>
-  <currentMemory unit='GiB'>2</currentMemory>
-  <vcpu placement='static'>2</vcpu>
-  <resource>
-    <partition>/machine</partition>
-  </resource>
-  <os>
-    <type arch='x86_64' machine='pc-i440fx-trusty'>hvm</type>
-  </os>
-  <features>
-    <acpi/>
-    <apic/>
-  </features>
-  <cpu mode='host-model'>
-    <model fallback='allow'/>
-  </cpu>
-  <clock offset='utc'>
-    <timer name='rtc' tickpolicy='catchup'/>
-    <timer name='pit' tickpolicy='delay'/>
-    <timer name='hpet' present='no'/>
-  </clock>
-  <on_poweroff>destroy</on_poweroff>
-  <on_reboot>restart</on_reboot>
-  <on_crash>restart</on_crash>
-  <pm>
-    <suspend-to-mem enabled='no'/>
-    <suspend-to-disk enabled='no'/>
-  </pm>
-  <devices>
-    <disk type='file' device='disk'>
-      <driver name='qemu' type='qcow2' cache='none' io='native'/>
-      <source file='/var/lib/libvirt/images/__NODE__.openstackci.local.img'/>
-      <target dev='__DEVICE_NAME__' bus='virtio'/>
-      <boot order='1'/>
-      <alias name='virtio-disk0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
-    </disk>
-    <controller type='pci' index='0' model='pci-root'>
-      <alias name='pci.0'/>
-    </controller>
-    <controller type='virtio-serial' index='0'>
-      <alias name='virtio-serial0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
-    </controller>
-    <interface type='bridge'>
-      <mac address="52:54:00:bd:81:__COUNT__"/>
-      <source bridge='br-dhcp'/>
-      <target dev='vnet0'/>
-      <model type='virtio'/>
-      <boot order='2'/>
-      <alias name='net0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:fd:7f:__COUNT__"/>
-      <source bridge='vm-br-eth1'/>
-      <target dev='vnet1'/>
-      <model type='virtio'/>
-      <boot order='3'/>
-      <alias name='net1'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:f5:44:__COUNT__"/>
-      <source bridge='vm-br-eth2'/>
-      <target dev='vnet2'/>
-      <model type='virtio'/>
-      <boot order='4'/>
-      <alias name='net2'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:1f:96:__COUNT__"/>
-      <source bridge='vm-br-eth3'/>
-      <target dev='vnet3'/>
-      <model type='virtio'/>
-      <boot order='5'/>
-      <alias name='net3'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:50:03:__COUNT__"/>
-      <source bridge='vm-br-eth4'/>
-      <target dev='vnet4'/>
-      <model type='virtio'/>
-      <boot order='6'/>
-      <alias name='net4'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0d' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:2d:12:__COUNT__"/>
-      <source bridge='vm-br-eth5'/>
-      <target dev='vnet5'/>
-      <model type='virtio'/>
-      <boot order='7'/>
-      <alias name='net5'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0e' function='0x0'/>
-    </interface>
-    <serial type='pty'>
-      <source path='/dev/pts/4'/>
-      <target port='0'/>
-      <alias name='serial0'/>
-    </serial>
-    <console type='pty' tty='/dev/pts/4'>
-      <source path='/dev/pts/4'/>
-      <target type='serial' port='0'/>
-      <alias name='serial0'/>
-    </console>
-    <input type='mouse' bus='ps2'/>
-    <input type='keyboard' bus='ps2'/>
-    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
-      <listen type='address' address='127.0.0.1'/>
-    </graphics>
-    <video>
-      <model type='vmvga' vram='9216' heads='1'/>
-      <alias name='video0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
-    </video>
-    <memballoon model='virtio'>
-      <alias name='balloon0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
-    </memballoon>
-    <rng model='virtio'>
-      <backend model='random'>/dev/random</backend>
-      <alias name='rng0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
-    </rng>
-  </devices>
-</domain>
diff --git a/multi-node-aio/templates/vmnode-config/network.openstackci.local.xml b/multi-node-aio/templates/vmnode-config/network.openstackci.local.xml
deleted file mode 100644
index c4adc426..00000000
--- a/multi-node-aio/templates/vmnode-config/network.openstackci.local.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<domain type='kvm'>
-  <name>__NODE__.openstackci.local</name>
-  <memory unit='GiB'>12</memory>
-  <currentMemory unit='GiB'>6</currentMemory>
-  <vcpu placement='static'>4</vcpu>
-  <resource>
-    <partition>/machine</partition>
-  </resource>
-  <os>
-    <type arch='x86_64' machine='pc-i440fx-trusty'>hvm</type>
-  </os>
-  <features>
-    <acpi/>
-    <apic/>
-  </features>
-  <cpu mode='host-model'>
-    <model fallback='allow'/>
-  </cpu>
-  <clock offset='utc'>
-    <timer name='rtc' tickpolicy='catchup'/>
-    <timer name='pit' tickpolicy='delay'/>
-    <timer name='hpet' present='no'/>
-  </clock>
-  <on_poweroff>destroy</on_poweroff>
-  <on_reboot>restart</on_reboot>
-  <on_crash>restart</on_crash>
-  <pm>
-    <suspend-to-mem enabled='no'/>
-    <suspend-to-disk enabled='no'/>
-  </pm>
-  <devices>
-    <disk type='file' device='disk'>
-      <driver name='qemu' type='qcow2' cache='none' io='native'/>
-      <source file='/var/lib/libvirt/images/__NODE__.openstackci.local.img'/>
-      <target dev='__DEVICE_NAME__' bus='virtio'/>
-      <boot order='1'/>
-      <alias name='virtio-disk0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
-    </disk>
-    <controller type='pci' index='0' model='pci-root'>
-      <alias name='pci.0'/>
-    </controller>
-    <controller type='virtio-serial' index='0'>
-      <alias name='virtio-serial0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
-    </controller>
-    <interface type='bridge'>
-      <mac address="52:54:00:bd:81:__COUNT__"/>
-      <source bridge='br-dhcp'/>
-      <target dev='vnet0'/>
-      <model type='virtio'/>
-      <boot order='2'/>
-      <alias name='net0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:fd:7f:__COUNT__"/>
-      <source bridge='vm-br-eth1'/>
-      <target dev='vnet1'/>
-      <model type='virtio'/>
-      <boot order='3'/>
-      <alias name='net1'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:f5:44:__COUNT__"/>
-      <source bridge='vm-br-eth2'/>
-      <target dev='vnet2'/>
-      <model type='virtio'/>
-      <boot order='4'/>
-      <alias name='net2'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:1f:96:__COUNT__"/>
-      <source bridge='vm-br-eth3'/>
-      <target dev='vnet3'/>
-      <model type='virtio'/>
-      <boot order='5'/>
-      <alias name='net3'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:50:03:__COUNT__"/>
-      <source bridge='vm-br-eth4'/>
-      <target dev='vnet4'/>
-      <model type='virtio'/>
-      <boot order='6'/>
-      <alias name='net4'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0d' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:2d:12:__COUNT__"/>
-      <source bridge='vm-br-eth5'/>
-      <target dev='vnet5'/>
-      <model type='virtio'/>
-      <boot order='7'/>
-      <alias name='net5'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0e' function='0x0'/>
-    </interface>
-    <serial type='pty'>
-      <source path='/dev/pts/4'/>
-      <target port='0'/>
-      <alias name='serial0'/>
-    </serial>
-    <console type='pty' tty='/dev/pts/4'>
-      <source path='/dev/pts/4'/>
-      <target type='serial' port='0'/>
-      <alias name='serial0'/>
-    </console>
-    <input type='mouse' bus='ps2'/>
-    <input type='keyboard' bus='ps2'/>
-    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
-      <listen type='address' address='127.0.0.1'/>
-    </graphics>
-    <video>
-      <model type='vmvga' vram='9216' heads='1'/>
-      <alias name='video0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
-    </video>
-    <memballoon model='virtio'>
-      <alias name='balloon0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
-    </memballoon>
-    <rng model='virtio'>
-      <backend model='random'>/dev/random</backend>
-      <alias name='rng0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
-    </rng>
-  </devices>
-</domain>
diff --git a/multi-node-aio/templates/vmnode-config/nova_compute.openstackci.local.xml b/multi-node-aio/templates/vmnode-config/nova_compute.openstackci.local.xml
deleted file mode 100644
index 462dd2ab..00000000
--- a/multi-node-aio/templates/vmnode-config/nova_compute.openstackci.local.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<domain type='kvm'>
-  <name>__NODE__.openstackci.local</name>
-  <memory unit='GiB'>24</memory>
-  <currentMemory unit='GiB'>8</currentMemory>
-  <vcpu placement='static'>8</vcpu>
-  <resource>
-    <partition>/machine</partition>
-  </resource>
-  <os>
-    <type arch='x86_64' machine='pc-i440fx-trusty'>hvm</type>
-  </os>
-  <features>
-    <acpi/>
-    <apic/>
-  </features>
-  <cpu mode='host-model'>
-    <model fallback='allow'/>
-  </cpu>
-  <clock offset='utc'>
-    <timer name='rtc' tickpolicy='catchup'/>
-    <timer name='pit' tickpolicy='delay'/>
-    <timer name='hpet' present='no'/>
-  </clock>
-  <on_poweroff>destroy</on_poweroff>
-  <on_reboot>restart</on_reboot>
-  <on_crash>restart</on_crash>
-  <pm>
-    <suspend-to-mem enabled='no'/>
-    <suspend-to-disk enabled='no'/>
-  </pm>
-  <devices>
-    <disk type='file' device='disk'>
-      <driver name='qemu' type='qcow2' cache='none' io='native'/>
-      <source file='/var/lib/libvirt/images/__NODE__.openstackci.local.img'/>
-      <target dev='__DEVICE_NAME__' bus='virtio'/>
-      <boot order='1'/>
-      <alias name='virtio-disk0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
-    </disk>
-    <controller type='pci' index='0' model='pci-root'>
-      <alias name='pci.0'/>
-    </controller>
-    <controller type='virtio-serial' index='0'>
-      <alias name='virtio-serial0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
-    </controller>
-    <interface type='bridge'>
-      <mac address="52:54:00:bd:81:__COUNT__"/>
-      <source bridge='br-dhcp'/>
-      <target dev='vnet0'/>
-      <model type='virtio'/>
-      <boot order='2'/>
-      <alias name='net0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:fd:7f:__COUNT__"/>
-      <source bridge='vm-br-eth1'/>
-      <target dev='vnet1'/>
-      <model type='virtio'/>
-      <boot order='3'/>
-      <alias name='net1'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:f5:44:__COUNT__"/>
-      <source bridge='vm-br-eth2'/>
-      <target dev='vnet2'/>
-      <model type='virtio'/>
-      <boot order='4'/>
-      <alias name='net2'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:1f:96:__COUNT__"/>
-      <source bridge='vm-br-eth3'/>
-      <target dev='vnet3'/>
-      <model type='virtio'/>
-      <boot order='5'/>
-      <alias name='net3'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:50:03:__COUNT__"/>
-      <source bridge='vm-br-eth4'/>
-      <target dev='vnet4'/>
-      <model type='virtio'/>
-      <boot order='6'/>
-      <alias name='net4'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0d' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:2d:12:__COUNT__"/>
-      <source bridge='vm-br-eth5'/>
-      <target dev='vnet5'/>
-      <model type='virtio'/>
-      <boot order='7'/>
-      <alias name='net5'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0e' function='0x0'/>
-    </interface>
-    <serial type='pty'>
-      <source path='/dev/pts/4'/>
-      <target port='0'/>
-      <alias name='serial0'/>
-    </serial>
-    <console type='pty' tty='/dev/pts/4'>
-      <source path='/dev/pts/4'/>
-      <target type='serial' port='0'/>
-      <alias name='serial0'/>
-    </console>
-    <input type='mouse' bus='ps2'/>
-    <input type='keyboard' bus='ps2'/>
-    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
-      <listen type='address' address='127.0.0.1'/>
-    </graphics>
-    <video>
-      <model type='vmvga' vram='9216' heads='1'/>
-      <alias name='video0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
-    </video>
-    <memballoon model='virtio'>
-      <alias name='balloon0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
-    </memballoon>
-    <rng model='virtio'>
-      <backend model='random'>/dev/random</backend>
-      <alias name='rng0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
-    </rng>
-  </devices>
-</domain>
diff --git a/multi-node-aio/templates/vmnode-config/swift.openstackci.local.xml b/multi-node-aio/templates/vmnode-config/swift.openstackci.local.xml
deleted file mode 100644
index 7afd6e30..00000000
--- a/multi-node-aio/templates/vmnode-config/swift.openstackci.local.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<domain type='kvm'>
-  <name>__NODE__.openstackci.local</name>
-  <memory unit='GiB'>4</memory>
-  <currentMemory unit='GiB'>4</currentMemory>
-  <vcpu placement='static'>4</vcpu>
-  <resource>
-    <partition>/machine</partition>
-  </resource>
-  <os>
-    <type arch='x86_64' machine='pc-i440fx-trusty'>hvm</type>
-  </os>
-  <features>
-    <acpi/>
-    <apic/>
-  </features>
-  <cpu mode='host-model'>
-    <model fallback='allow'/>
-  </cpu>
-  <clock offset='utc'>
-    <timer name='rtc' tickpolicy='catchup'/>
-    <timer name='pit' tickpolicy='delay'/>
-    <timer name='hpet' present='no'/>
-  </clock>
-  <on_poweroff>destroy</on_poweroff>
-  <on_reboot>restart</on_reboot>
-  <on_crash>restart</on_crash>
-  <pm>
-    <suspend-to-mem enabled='no'/>
-    <suspend-to-disk enabled='no'/>
-  </pm>
-  <devices>
-    <disk type='file' device='disk'>
-      <driver name='qemu' type='qcow2' cache='none' io='native'/>
-      <source file='/var/lib/libvirt/images/__NODE__.openstackci.local.img'/>
-      <target dev='__DEVICE_NAME__' bus='virtio'/>
-      <boot order='1'/>
-      <alias name='virtio-disk0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
-    </disk>
-    <controller type='pci' index='0' model='pci-root'>
-      <alias name='pci.0'/>
-    </controller>
-    <controller type='virtio-serial' index='0'>
-      <alias name='virtio-serial0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
-    </controller>
-    <interface type='bridge'>
-      <mac address="52:54:00:bd:81:__COUNT__"/>
-      <source bridge='br-dhcp'/>
-      <target dev='vnet0'/>
-      <model type='virtio'/>
-      <boot order='2'/>
-      <alias name='net0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:fd:7f:__COUNT__"/>
-      <source bridge='vm-br-eth1'/>
-      <target dev='vnet1'/>
-      <model type='virtio'/>
-      <boot order='3'/>
-      <alias name='net1'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:f5:44:__COUNT__"/>
-      <source bridge='vm-br-eth2'/>
-      <target dev='vnet2'/>
-      <model type='virtio'/>
-      <boot order='4'/>
-      <alias name='net2'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:1f:96:__COUNT__"/>
-      <source bridge='vm-br-eth3'/>
-      <target dev='vnet3'/>
-      <model type='virtio'/>
-      <boot order='5'/>
-      <alias name='net3'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:50:03:__COUNT__"/>
-      <source bridge='vm-br-eth4'/>
-      <target dev='vnet4'/>
-      <model type='virtio'/>
-      <boot order='6'/>
-      <alias name='net4'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0d' function='0x0'/>
-    </interface>
-    <interface type='bridge'>
-      <mac address="52:54:00:2d:12:__COUNT__"/>
-      <source bridge='vm-br-eth5'/>
-      <target dev='vnet5'/>
-      <model type='virtio'/>
-      <boot order='7'/>
-      <alias name='net5'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x0e' function='0x0'/>
-    </interface>
-    <serial type='pty'>
-      <source path='/dev/pts/4'/>
-      <target port='0'/>
-      <alias name='serial0'/>
-    </serial>
-    <console type='pty' tty='/dev/pts/4'>
-      <source path='/dev/pts/4'/>
-      <target type='serial' port='0'/>
-      <alias name='serial0'/>
-    </console>
-    <input type='mouse' bus='ps2'/>
-    <input type='keyboard' bus='ps2'/>
-    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
-      <listen type='address' address='127.0.0.1'/>
-    </graphics>
-    <video>
-      <model type='vmvga' vram='9216' heads='1'/>
-      <alias name='video0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
-    </video>
-    <memballoon model='virtio'>
-      <alias name='balloon0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
-    </memballoon>
-    <rng model='virtio'>
-      <backend model='random'>/dev/random</backend>
-      <alias name='rng0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
-    </rng>
-  </devices>
-</domain>
diff --git a/multi-node-aio/templates/xenial-sources.list b/multi-node-aio/templates/xenial-sources.list
deleted file mode 100644
index 5c46164c..00000000
--- a/multi-node-aio/templates/xenial-sources.list
+++ /dev/null
@@ -1,20 +0,0 @@
-deb http://archive.ubuntu.com/ubuntu xenial main restricted
-deb-src http://archive.ubuntu.com/ubuntu xenial main restricted
-deb http://archive.ubuntu.com/ubuntu xenial-updates main restricted
-deb-src http://archive.ubuntu.com/ubuntu xenial-updates main restricted
-deb http://archive.ubuntu.com/ubuntu xenial universe
-deb-src http://archive.ubuntu.com/ubuntu xenial universe
-deb http://archive.ubuntu.com/ubuntu xenial-updates universe
-deb-src http://archive.ubuntu.com/ubuntu xenial-updates universe
-deb http://archive.ubuntu.com/ubuntu xenial multiverse
-deb-src http://archive.ubuntu.com/ubuntu xenial multiverse
-deb http://archive.ubuntu.com/ubuntu xenial-updates multiverse
-deb-src http://archive.ubuntu.com/ubuntu xenial-updates multiverse
-deb http://archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse
-deb-src http://archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse
-deb http://security.ubuntu.com/ubuntu xenial-security main restricted
-deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted
-deb http://security.ubuntu.com/ubuntu xenial-security universe
-deb-src http://security.ubuntu.com/ubuntu xenial-security universe
-deb http://security.ubuntu.com/ubuntu xenial-security multiverse
-deb-src http://security.ubuntu.com/ubuntu xenial-security multiverse
\ No newline at end of file
diff --git a/multi-node-aio/tools/downgrade-all-VMs.sh b/multi-node-aio/tools/downgrade-all-VMs.sh
deleted file mode 100644
index 07920a71..00000000
--- a/multi-node-aio/tools/downgrade-all-VMs.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-
-#eg. KERNEL_VERSION="3.13.0-98"
-KERNEL_VERSION=${KERNEL_VERSION:-false}
-
-if [[ "${KERNEL_VERSION}" = false ]]; then
-  echo "Please setup the KERNEL_VERSION before running this script"
-  exit 1
-fi
-
-pushd ..
-source functions.rc
-for node in $(get_all_hosts); do
-  ssh -q -t -o StrictHostKeyChecking=no 10.0.0.${node#*":"} KERNEL_VERSION="${KERNEL_VERSION}" 'bash -s' < tools/ubuntu-downgrade.sh
-done
diff --git a/multi-node-aio/tools/ubuntu-kernel-downgrade.sh b/multi-node-aio/tools/ubuntu-kernel-downgrade.sh
deleted file mode 100755
index 95f12875..00000000
--- a/multi-node-aio/tools/ubuntu-kernel-downgrade.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-#eg. KERNEL_VERSION="3.13.0-98"
-KERNEL_VERSION=${KERNEL_VERSION:-false}
-
-if [[ "${KERNEL_VERSION}" = false ]]; then
-  echo "Please setup the KERNEL_VERSION before running this script"
-  exit 1
-fi
-
-sudo apt-get update
-sudo aptitude install -y linux-image-${KERNEL_VERSION}-generic \
-     linux-headers-${KERNEL_VERSION} linux-image-extra-${KERNEL_VERSION}-generic
-
-sudo sed -i "s/GRUB_DEFAULT=.*/GRUB_DEFAULT=\"Advanced options for Ubuntu>Ubuntu, with Linux ${KERNEL_VERSION}-generic\"/" /etc/default/grub
-sudo update-grub
-sudo reboot
diff --git a/multi-node-aio/variables.sh b/multi-node-aio/variables.sh
deleted file mode 100755
index 98d9c052..00000000
--- a/multi-node-aio/variables.sh
+++ /dev/null
@@ -1,50 +0,0 @@
-# Variables used by multi-node-aio
-# Network subnet used for all the virtual machines
-NETWORK_BASE="${NETWORK_BASE:-172.29}"
-# DNS used throughout the deploy
-#DNS_NAMESERVER=$(cat /etc/resolv.conf | grep -m 1 "nameserver" | sed "s/nameserver //")
-DNS_NAMESERVER="${DNS_NAMESERVER:-8.8.8.8}"
-
-# By default AIO deploy overrides apt-sources, if things like a local mirror are already
-# set up then this script will override these. This option allows for the override to be
-# disabled.
-OVERRIDE_SOURCES="${OVERRIDE_SOURCES:-true}"
-
-# What branch of Openstack-Ansible are we deploying from
-OSA_BRANCH="${OSA_BRANCH:-master}"
-
-# What is the default disk device name
-DEVICE_NAME="${DEVICE_NAME:-vda}"
-
-# What default network device should we use for Cobbler
-DEFAULT_NETWORK="${DEFAULT_NETWORK:-eth0}"
-
-# What is the default virtual machine disk size in GB
-VM_DISK_SIZE="${VM_DISK_SIZE:-252}"
-
-# Do we want to do all the required host setup
-SETUP_HOST="${SETUP_HOST:-true}"
-
-# Do we want to do disk partitioning or is there a partition ready to use
-PARTITION_HOST="${PARTITION_HOST:-true}"
-
-# Do we want to set up networking on the host for Virsh
-SETUP_VIRSH_NET="${SETUP_VIRSH_NET:-true}"
-
-# When the virtual machines are re-kicked do we format them
-VM_IMAGE_CREATE="${VM_IMAGE_CREATE:-true}"
-
-# Should we run the deploy Openstack-Ansible script at the end of the build script
-DEPLOY_OSA="${DEPLOY_OSA:-true}"
-
-# Should we pre-configure the environment before we deploy OpenStack-Ansible
-PRE_CONFIG_OSA="${PRE_CONFIG_OSA:-true}"
-
-# Should we run the final deploy of OpenStack-Ansible
-RUN_OSA="${RUN_OSA:-true}"
-
-# Default service ports
-OSA_PORTS="${OSA_PORTS:-6080 6082 443 80}"
-
-# Should we configure prerouting of service ports after deployment
-CONFIG_PREROUTING="${CONFIG_PREROUTING:-true}"
\ No newline at end of file