summaryrefslogtreecommitdiffstats
path: root/deploy
diff options
context:
space:
mode:
authorHarry Huang <huangxiangyu5@huawei.com>2018-05-10 08:46:11 +0000
committerGerrit Code Review <gerrit@opnfv.org>2018-05-10 08:46:11 +0000
commit729a1cc3924f0fb33e00bfebe1f7bfda05606578 (patch)
treea81e0cbfec8cde8afd69a9043a362b7a84b6465f /deploy
parentaedfece7bd93b01e58ce51248c437ee9e2565f51 (diff)
parent1f9ff3030c19d60cb6c639cde8b394994da892f0 (diff)
Merge "Upgrade OpenStack version from Pike to Queens"
Diffstat (limited to 'deploy')
-rw-r--r--deploy/adapters/ansible/openstack_queens/README.md1
-rwxr-xr-xdeploy/adapters/ansible/roles/config-controller/templates/controller.j24
-rw-r--r--deploy/adapters/ansible/roles/config-osa/files/chrony.conf.j22
-rw-r--r--deploy/adapters/ansible/roles/config-osa/tasks/fix_rescue.yml4
-rwxr-xr-xdeploy/adapters/ansible/roles/config-osa/tasks/main.yml19
-rw-r--r--deploy/adapters/ansible/roles/config-osa/tasks/meters.yml2
-rw-r--r--deploy/adapters/ansible/roles/config-osa/vars/main.yml2
-rw-r--r--deploy/adapters/ansible/roles/post-openstack/vars/main.yml2
-rw-r--r--deploy/adapters/ansible/roles/post-osa/tasks/main.yml3
-rw-r--r--deploy/adapters/ansible/roles/post-osa/tasks/novaclient_workaround.yml6
-rw-r--r--deploy/adapters/ansible/roles/post-osa/vars/main.yml4
-rw-r--r--deploy/adapters/ansible/roles/setup-host/tasks/Ubuntu.yml6
-rw-r--r--deploy/adapters/ansible/roles/setup-openvswitch/handlers/main.yml5
-rw-r--r--deploy/adapters/ansible/roles/setup-openvswitch/tasks/compute.yml4
-rw-r--r--deploy/adapters/ansible/roles/setup-openvswitch/tasks/controller.yml20
-rwxr-xr-xdeploy/adapters/ansible/roles/setup-openvswitch/templates/controller.j288
-rwxr-xr-xdeploy/compass_conf/adapter/ansible_openstack_queens.conf7
-rwxr-xr-xdeploy/compass_conf/flavor/openstack_queens.conf32
-rwxr-xr-xdeploy/compass_conf/flavor_mapping/HA-ansible-multinodes-queens.conf124
-rwxr-xr-xdeploy/compass_conf/flavor_metadata/HA-ansible-multinodes-queens.conf19
-rwxr-xr-xdeploy/compass_conf/package_installer/ansible-queens.conf15
-rwxr-xr-xdeploy/compass_conf/role/openstack_queens_ansible.conf125
-rwxr-xr-xdeploy/compass_conf/templates/ansible_installer/openstack_queens/ansible_cfg/HA-ansible-multinodes.tmpl12
-rwxr-xr-xdeploy/compass_conf/templates/ansible_installer/openstack_queens/ansible_cfg/allinone.tmpl6
-rwxr-xr-xdeploy/compass_conf/templates/ansible_installer/openstack_queens/ansible_cfg/multinodes.tmpl6
-rwxr-xr-xdeploy/compass_conf/templates/ansible_installer/openstack_queens/ansible_cfg/single-controller.tmpl6
-rwxr-xr-xdeploy/compass_conf/templates/ansible_installer/openstack_queens/hosts/HA-ansible-multinodes.tmpl31
-rwxr-xr-xdeploy/compass_conf/templates/ansible_installer/openstack_queens/hosts/allinone.tmpl10
-rwxr-xr-xdeploy/compass_conf/templates/ansible_installer/openstack_queens/hosts/multinodes.tmpl110
-rwxr-xr-xdeploy/compass_conf/templates/ansible_installer/openstack_queens/hosts/single-controller.tmpl40
-rwxr-xr-xdeploy/compass_conf/templates/ansible_installer/openstack_queens/inventories/HA-ansible-multinodes.tmpl74
-rwxr-xr-xdeploy/compass_conf/templates/ansible_installer/openstack_queens/inventories/allinone.tmpl47
-rwxr-xr-xdeploy/compass_conf/templates/ansible_installer/openstack_queens/inventories/multinodes.tmpl123
-rwxr-xr-xdeploy/compass_conf/templates/ansible_installer/openstack_queens/inventories/single-controller.tmpl67
-rwxr-xr-xdeploy/compass_conf/templates/ansible_installer/openstack_queens/vars/HA-ansible-multinodes.tmpl224
-rwxr-xr-xdeploy/compass_conf/templates/ansible_installer/openstack_queens/vars/allinone.tmpl65
-rwxr-xr-xdeploy/compass_conf/templates/ansible_installer/openstack_queens/vars/multinodes.tmpl136
-rwxr-xr-xdeploy/compass_conf/templates/ansible_installer/openstack_queens/vars/single-controller.tmpl77
-rw-r--r--deploy/conf/cluster.conf4
-rw-r--r--deploy/conf/hardware_environment/huawei-pod1/network.yml2
-rw-r--r--deploy/conf/hardware_environment/huawei-pod1/network_dpdk.yml2
-rw-r--r--deploy/conf/hardware_environment/huawei-pod2/network.yml2
-rw-r--r--deploy/conf/hardware_environment/huawei-pod2/network_dpdk.yml2
-rw-r--r--deploy/conf/hardware_environment/huawei-pod8/network.yml2
-rw-r--r--deploy/conf/hardware_environment/intel-pod17/network.yml2
-rw-r--r--deploy/conf/hardware_environment/intel-pod17/network_dpdk.yml2
-rw-r--r--deploy/conf/network_cfg_dpdk.yaml2
-rw-r--r--deploy/conf/network_cfg_sriov.yaml2
-rw-r--r--deploy/conf/vm_environment/huawei-virtual1/network.yml2
-rw-r--r--deploy/conf/vm_environment/huawei-virtual1/network_dpdk.yml2
-rw-r--r--deploy/conf/vm_environment/huawei-virtual2/network.yml2
-rw-r--r--deploy/conf/vm_environment/huawei-virtual2/network_dpdk.yml2
-rw-r--r--deploy/conf/vm_environment/huawei-virtual3/network.yml2
-rw-r--r--deploy/conf/vm_environment/huawei-virtual3/network_dpdk.yml2
-rw-r--r--deploy/conf/vm_environment/huawei-virtual4/network.yml2
-rw-r--r--deploy/conf/vm_environment/huawei-virtual4/network_dpdk.yml2
-rw-r--r--deploy/conf/vm_environment/huawei-virtual8/network.yml2
-rw-r--r--deploy/conf/vm_environment/huawei-virtual8/network_dpdk.yml2
-rw-r--r--deploy/conf/vm_environment/huawei-virtual9/network.yml2
-rw-r--r--deploy/conf/vm_environment/huawei-virtual9/network_dpdk.yml2
-rw-r--r--deploy/conf/vm_environment/network.yml2
-rwxr-xr-xdeploy/prepare.sh2
62 files changed, 1519 insertions, 59 deletions
diff --git a/deploy/adapters/ansible/openstack_queens/README.md b/deploy/adapters/ansible/openstack_queens/README.md
new file mode 100644
index 00000000..d6945e07
--- /dev/null
+++ b/deploy/adapters/ansible/openstack_queens/README.md
@@ -0,0 +1 @@
+# keep for openstack queens
diff --git a/deploy/adapters/ansible/roles/config-controller/templates/controller.j2 b/deploy/adapters/ansible/roles/config-controller/templates/controller.j2
index 4e444eca..ae654b47 100755
--- a/deploy/adapters/ansible/roles/config-controller/templates/controller.j2
+++ b/deploy/adapters/ansible/roles/config-controller/templates/controller.j2
@@ -71,11 +71,13 @@ iface br-external inet static
# bridge.
#
auto br-tenant
-iface br-tenant inet manual
+iface br-tenant inet static
bridge_stp off
bridge_waitport 0
bridge_fd 0
bridge_ports {{ intf_tenant }}
+ address {{ ip_settings[inventory_hostname]["tenant"]["ip"] }}
+ netmask 255.255.255.0
# Storage bridge
auto br-storage
diff --git a/deploy/adapters/ansible/roles/config-osa/files/chrony.conf.j2 b/deploy/adapters/ansible/roles/config-osa/files/chrony.conf.j2
index 1c2443e0..d58f9115 100644
--- a/deploy/adapters/ansible/roles/config-osa/files/chrony.conf.j2
+++ b/deploy/adapters/ansible/roles/config-osa/files/chrony.conf.j2
@@ -98,7 +98,5 @@ rtconutc
# Listen for NTP requests only on local interfaces.
port 0
bindcmdaddress 127.0.0.1
-{% if not security_disable_ipv6 | bool %}
bindcmdaddress ::1
{% endif %}
-{% endif %}
diff --git a/deploy/adapters/ansible/roles/config-osa/tasks/fix_rescue.yml b/deploy/adapters/ansible/roles/config-osa/tasks/fix_rescue.yml
index ff7d4250..c73aceb7 100644
--- a/deploy/adapters/ansible/roles/config-osa/tasks/fix_rescue.yml
+++ b/deploy/adapters/ansible/roles/config-osa/tasks/fix_rescue.yml
@@ -28,7 +28,7 @@
- name: fix rescue problem for lxc-hosts-setup
blockinfile:
- dest: "/opt/openstack-ansible/playbooks/lxc-hosts-setup.yml"
+ dest: "/opt/openstack-ansible/playbooks/containers-lxc-host.yml"
block: |
- hosts: localhost
user: root
@@ -38,7 +38,7 @@
- name: delete max_fail_percentage for lxc-hosts-setup
lineinfile:
- dest: "/opt/openstack-ansible/playbooks/lxc-hosts-setup.yml"
+ dest: "/opt/openstack-ansible/playbooks/containers-lxc-host.yml"
regexp: "max_fail_percentage*"
state: absent
diff --git a/deploy/adapters/ansible/roles/config-osa/tasks/main.yml b/deploy/adapters/ansible/roles/config-osa/tasks/main.yml
index 766043d5..3f9dbe1f 100755
--- a/deploy/adapters/ansible/roles/config-osa/tasks/main.yml
+++ b/deploy/adapters/ansible/roles/config-osa/tasks/main.yml
@@ -163,7 +163,7 @@
- name: remove repo_build_pip_no_binary
lineinfile:
- dest: /opt/openstack-ansible/group_vars/repo_all.yml
+ dest: /opt/openstack-ansible/inventory/group_vars/repo_all.yml
state: absent
regexp: "{{ item }}"
with_items: ['^repo_build_pip_no_binary:', '^ - libvirt-python']
@@ -348,20 +348,8 @@
# insertafter: "^- include: repo_post_build.yml"
# line: "- include: repo_fix_pandas.yml"
-- include: meters.yml
-
-# upstream has fix this issue so somments it
-# maybe will use in the furture
-- include: fix_pip_version.yml
-
- include: fix_rescue.yml
-- name: include tacker in setup-openstack
- lineinfile:
- dest: /opt/openstack-ansible/playbooks/setup-openstack.yml
- insertafter: "^- include: os-trove"
- line: "- include: os-tacker-install.yml"
-
- name: rm command "rm -f /etc/resolv.conf" in cache_prep_commands
lineinfile:
dest: /etc/ansible/roles/lxc_hosts/vars/ubuntu-16.04.yml
@@ -374,8 +362,3 @@
dest: /etc/ansible/roles/lxc_hosts/vars/ubuntu-16.04.yml
insertafter: '^ cache_prep_commands:'
line: ' rm /etc/resolv.conf || true'
-
-- name: add variables file of tacker for centos
- copy:
- src: redhat-7.yml
- dest: /etc/ansible/roles/os_tacker/vars/redhat-7.yml
diff --git a/deploy/adapters/ansible/roles/config-osa/tasks/meters.yml b/deploy/adapters/ansible/roles/config-osa/tasks/meters.yml
index 2b3bce5f..ca85f440 100644
--- a/deploy/adapters/ansible/roles/config-osa/tasks/meters.yml
+++ b/deploy/adapters/ansible/roles/config-osa/tasks/meters.yml
@@ -9,7 +9,7 @@
---
- name: modify the aodh haproxy config
copy:
- dest: /opt/openstack-ansible/group_vars/all/haproxy.yml
+ dest: /opt/openstack-ansible/inventory/group_vars/all/haproxy.yml
src: haproxy.yml
mode: 0664
diff --git a/deploy/adapters/ansible/roles/config-osa/vars/main.yml b/deploy/adapters/ansible/roles/config-osa/vars/main.yml
index 65f67c18..7daf40c9 100644
--- a/deploy/adapters/ansible/roles/config-osa/vars/main.yml
+++ b/deploy/adapters/ansible/roles/config-osa/vars/main.yml
@@ -12,5 +12,5 @@ ceph_host: "{{ hostvars[inventory_hostname]['groups']['ceph_osd'][0] }}"
repo_dest_path: "/var/www/repo/os-releases/15.1.4/ubuntu-16.04-x86_64/"
networking_sfc_version: 4.0.0
# yamllint disable rule:line-length
-openstack_release: "{{ lookup('yamlfile', '/opt/openstack-ansible/group_vars/all/all.yml key=openstack_release') }}"
+openstack_release: "{{ lookup('yamlfile', '/opt/openstack-ansible/inventory/group_vars/all/all.yml key=openstack_release') }}"
# yamllint enable rule:line-length
diff --git a/deploy/adapters/ansible/roles/post-openstack/vars/main.yml b/deploy/adapters/ansible/roles/post-openstack/vars/main.yml
index ed64c8db..1fc2cc27 100644
--- a/deploy/adapters/ansible/roles/post-openstack/vars/main.yml
+++ b/deploy/adapters/ansible/roles/post-openstack/vars/main.yml
@@ -45,5 +45,5 @@ flavors:
disk: 160
# yamllint disable rule:line-length
-openstack_release: "{{ lookup('yamlfile', '/opt/openstack-ansible/group_vars/all/all.yml key=openstack_release') }}"
+openstack_release: "{{ lookup('yamlfile', '/opt/openstack-ansible/inventory/group_vars/all/all.yml key=openstack_release') }}"
# yamllint enable rule:line-length
diff --git a/deploy/adapters/ansible/roles/post-osa/tasks/main.yml b/deploy/adapters/ansible/roles/post-osa/tasks/main.yml
index fed3842f..cf6ba1e3 100644
--- a/deploy/adapters/ansible/roles/post-osa/tasks/main.yml
+++ b/deploy/adapters/ansible/roles/post-osa/tasks/main.yml
@@ -29,3 +29,6 @@
- include: tacker_horizon.yml
when: inventory_hostname in groups['horizon_all']
+
+- include: novaclient_workaround.yml
+ when: inventory_hostname in groups['utility']
diff --git a/deploy/adapters/ansible/roles/post-osa/tasks/novaclient_workaround.yml b/deploy/adapters/ansible/roles/post-osa/tasks/novaclient_workaround.yml
new file mode 100644
index 00000000..40ec608d
--- /dev/null
+++ b/deploy/adapters/ansible/roles/post-osa/tasks/novaclient_workaround.yml
@@ -0,0 +1,6 @@
+---
+
+- name: use python-novaclient version 9.0.0 to replace 10.2.0
+ pip:
+ name: python-novaclient
+ version: 9.0.0
diff --git a/deploy/adapters/ansible/roles/post-osa/vars/main.yml b/deploy/adapters/ansible/roles/post-osa/vars/main.yml
index f5ffa335..7aed0472 100644
--- a/deploy/adapters/ansible/roles/post-osa/vars/main.yml
+++ b/deploy/adapters/ansible/roles/post-osa/vars/main.yml
@@ -1,9 +1,9 @@
---
# yamllint disable rule:line-length
-os_ver: "{{ lookup('yamlfile', '/opt/openstack-ansible/group_vars/all/all.yml key=openstack_release') }}"
+os_ver: "{{ lookup('yamlfile', '/opt/openstack-ansible/inventory/group_vars/all/all.yml key=openstack_release') }}"
# yamllint enable rule:line-length
-os_name: pike
+os_name: queens
# yamllint disable rule:line-length
tacker_horizon_repo: https://github.com/openstack/tacker-horizon.git
diff --git a/deploy/adapters/ansible/roles/setup-host/tasks/Ubuntu.yml b/deploy/adapters/ansible/roles/setup-host/tasks/Ubuntu.yml
index 00675d9c..5d9cded0 100644
--- a/deploy/adapters/ansible/roles/setup-host/tasks/Ubuntu.yml
+++ b/deploy/adapters/ansible/roles/setup-host/tasks/Ubuntu.yml
@@ -8,7 +8,7 @@
# #############################################################################
---
- name: setup hosts
- shell: "export ANSIBLE_LOG_PATH=/var/ansible/run/openstack_pike-opnfv2/ansible.log; \
+ shell: "export ANSIBLE_LOG_PATH=/var/ansible/run/openstack_queens-opnfv2/ansible.log; \
export ANSIBLE_SCP_IF_SSH=y; \
cd /opt/openstack-ansible/playbooks; \
openstack-ansible setup-hosts.yml \
@@ -19,7 +19,7 @@
register: failed_container
- name: destroy the failed_container
- shell: "export ANSIBLE_LOG_PATH=/var/ansible/run/openstack_pike-opnfv2/ansible.log; \
+ shell: "export ANSIBLE_LOG_PATH=/var/ansible/run/openstack_queens-opnfv2/ansible.log; \
export ANSIBLE_SCP_IF_SSH=y; \
cd /opt/openstack-ansible/playbooks; \
openstack-ansible lxc-containers-destroy.yml \
@@ -30,7 +30,7 @@
ignore_errors: "True"
- name: retry to setup failed_container
- shell: "export ANSIBLE_LOG_PATH=/var/ansible/run/openstack_pike-opnfv2/ansible.log; \
+ shell: "export ANSIBLE_LOG_PATH=/var/ansible/run/openstack_queens-opnfv2/ansible.log; \
export ANSIBLE_SCP_IF_SSH=y; \
cd /opt/openstack-ansible/playbooks; \
openstack-ansible setup-hosts.yml --limit {{item}} \
diff --git a/deploy/adapters/ansible/roles/setup-openvswitch/handlers/main.yml b/deploy/adapters/ansible/roles/setup-openvswitch/handlers/main.yml
index fb7814b7..58a1710c 100644
--- a/deploy/adapters/ansible/roles/setup-openvswitch/handlers/main.yml
+++ b/deploy/adapters/ansible/roles/setup-openvswitch/handlers/main.yml
@@ -6,6 +6,11 @@
# http://www.apache.org/licenses/LICENSE-2.0
############################################################################
---
+- name: restart network service
+ service:
+ name: networking
+ state: restarted
+
- name: restart neutron-openvswitch-agent
service:
name: neutron-openvswitch-agent
diff --git a/deploy/adapters/ansible/roles/setup-openvswitch/tasks/compute.yml b/deploy/adapters/ansible/roles/setup-openvswitch/tasks/compute.yml
index 43c6689f..670eea75 100644
--- a/deploy/adapters/ansible/roles/setup-openvswitch/tasks/compute.yml
+++ b/deploy/adapters/ansible/roles/setup-openvswitch/tasks/compute.yml
@@ -50,7 +50,7 @@
when:
- compute in item["role"]
-- name: start neutron-openvswitch-agent
+- name: restart neutron-openvswitch-agent
service:
name: neutron-openvswitch-agent
- state: started
+ state: restarted
diff --git a/deploy/adapters/ansible/roles/setup-openvswitch/tasks/controller.yml b/deploy/adapters/ansible/roles/setup-openvswitch/tasks/controller.yml
index 3637d1db..bb96b736 100644
--- a/deploy/adapters/ansible/roles/setup-openvswitch/tasks/controller.yml
+++ b/deploy/adapters/ansible/roles/setup-openvswitch/tasks/controller.yml
@@ -50,7 +50,25 @@
when:
- controller in item["role"]
+- name: configure interfaces ubuntu
+ template:
+ src: controller.j2
+ dest: /etc/network/interfaces
+ notify:
+ - restart network service
+
- name: start neutron-openvswitch-agent
service:
name: neutron-openvswitch-agent
- state: started
+ state: restarted
+
+- name: update keepalived
+ replace:
+ dest: /etc/keepalived/keepalived.conf
+ regexp: 'br-external'
+ replace: 'br-provider'
+
+- name: restart keepalived
+ service:
+ name: keepalived
+ state: restarted
diff --git a/deploy/adapters/ansible/roles/setup-openvswitch/templates/controller.j2 b/deploy/adapters/ansible/roles/setup-openvswitch/templates/controller.j2
new file mode 100755
index 00000000..f7b9756b
--- /dev/null
+++ b/deploy/adapters/ansible/roles/setup-openvswitch/templates/controller.j2
@@ -0,0 +1,88 @@
+# 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
+
+# Physical interface
+auto eth0
+iface eth0 inet manual
+
+# external interface
+{% set intf_external = contr_sys_mappings["external"]["interface"] %}
+{% if contr_sys_mappings["external"]["vlan_tag"] | int %}
+{% set intf_external = intf_external + '.' + contr_sys_mappings["external"]["vlan_tag"]|string %}
+{% endif %}
+auto {{ intf_external }}
+iface {{ intf_external }} inet manual
+{% if contr_sys_mappings["external"]["vlan_tag"] | int %}
+ vlan-raw-device {{ intf_external }}
+{% endif %}
+
+# tenant interface
+{% set intf_tenant = contr_sys_mappings["tenant"]["interface"] %}
+{% if contr_sys_mappings["tenant"]["vlan_tag"] | int %}
+{% set intf_tenant = intf_tenant + '.' + contr_sys_mappings["tenant"]["vlan_tag"]|string %}
+{% endif %}
+auto {{ intf_tenant }}
+iface {{ intf_tenant }} inet static
+{% if contr_sys_mappings["tenant"]["vlan_tag"] | int %}
+ vlan-raw-device {{ intf_tenant }}
+{% endif %}
+
+# storage interface
+{% set intf_storage = contr_sys_mappings["storage"]["interface"] %}
+{% if contr_sys_mappings["storage"]["vlan_tag"] | int %}
+{% set intf_storage = intf_storage + '.' + contr_sys_mappings["storage"]["vlan_tag"]|string %}
+{% endif %}
+auto {{ intf_storage }}
+iface {{ intf_storage }} inet manual
+{% if contr_sys_mappings["storage"]["vlan_tag"] | int %}
+ vlan-raw-device {{ intf_storage }}
+{% endif %}
+
+# Container/Host management bridge
+auto br-mgmt
+iface br-mgmt inet static
+ bridge_stp off
+ bridge_waitport 0
+ bridge_fd 0
+ bridge_ports eth0
+ address {{ ip_settings[inventory_hostname]["mgmt"]["ip"] }}
+ netmask 255.255.255.0
+
+# OpenStack Networking VLAN bridge
+auto br-provider
+iface br-provider inet static
+ address {{ ip_settings[inventory_hostname]["external"]["ip"] }}
+ netmask 255.255.255.0
+ gateway {{ ip_settings[inventory_hostname]["external"]["gw"] }}
+ pre-up ifconfig br-external down || true
+ pre-up brctl delbr br-external || true
+
+# OpenStack Networking VXLAN (tunnel/overlay) bridge
+#
+# Only the COMPUTE and NETWORK nodes must have an IP address
+# on this bridge. When used by infrastructure nodes, the
+# IP addresses are assigned to containers which use this
+# bridge.
+#
+auto br-tenant
+iface br-tenant inet static
+ bridge_stp off
+ bridge_waitport 0
+ bridge_fd 0
+ bridge_ports {{ intf_tenant }}
+ address {{ ip_settings[inventory_hostname]["tenant"]["ip"] }}
+ netmask 255.255.255.0
+
+# Storage bridge
+auto br-storage
+iface br-storage inet static
+ bridge_stp off
+ bridge_waitport 0
+ bridge_fd 0
+ bridge_ports {{ intf_storage }}
+ address {{ ip_settings[inventory_hostname]["storage"]["ip"] }}
+ netmask 255.255.255.0
diff --git a/deploy/compass_conf/adapter/ansible_openstack_queens.conf b/deploy/compass_conf/adapter/ansible_openstack_queens.conf
new file mode 100755
index 00000000..d8ac426f
--- /dev/null
+++ b/deploy/compass_conf/adapter/ansible_openstack_queens.conf
@@ -0,0 +1,7 @@
+NAME = 'openstack_queens'
+DISPLAY_NAME = 'Openstack Queens'
+PARENT = 'openstack'
+PACKAGE_INSTALLER = 'ansible_installer_queens'
+OS_INSTALLER = 'cobbler'
+SUPPORTED_OS_PATTERNS = ['(?i)ubuntu-16\.04\.3', '(?i)CentOS-7.*17.*']
+DEPLOYABLE = True
diff --git a/deploy/compass_conf/flavor/openstack_queens.conf b/deploy/compass_conf/flavor/openstack_queens.conf
new file mode 100755
index 00000000..3f2294d4
--- /dev/null
+++ b/deploy/compass_conf/flavor/openstack_queens.conf
@@ -0,0 +1,32 @@
+ADAPTER_NAME = 'openstack_queens'
+FLAVORS = [{
+ 'flavor': 'allinone',
+ 'display_name': 'All-In-One',
+ 'template': 'allinone.tmpl',
+ 'roles': ['allinone-compute'],
+}, {
+ 'flavor': 'single-controller',
+ 'display_name': 'Single Controller',
+ 'template': 'single-controller.tmpl',
+ 'roles': [
+ 'controller', 'compute', 'network', 'storage', 'odl', 'onos'
+ ],
+}, {
+ 'flavor': 'multinodes',
+ 'display_name': 'Multi-nodes',
+ 'template': 'multinodes.tmpl',
+ 'roles': [
+ 'compute-controller', 'compute-worker', 'network-server',
+ 'network-worker', 'database', 'messaging', 'image', 'odl',
+ 'dashboard', 'identity', 'storage-controller', 'storage-volume'
+ ],
+}, {
+ 'flavor': 'HA-ansible-multinodes-queens',
+ 'display_name': 'HA-ansible-multinodes-queens',
+ 'template': 'HA-ansible-multinodes.tmpl',
+ 'roles': [
+ 'controller', 'compute', 'ha', 'odl', 'onos', 'opencontrail', 'ceph', 'ceph-adm', 'ceph-mon', 'ceph-osd', 'ceph-osd-node', 'moon'
+ ],
+}]
+
+
diff --git a/deploy/compass_conf/flavor_mapping/HA-ansible-multinodes-queens.conf b/deploy/compass_conf/flavor_mapping/HA-ansible-multinodes-queens.conf
new file mode 100755
index 00000000..d287bf58
--- /dev/null
+++ b/deploy/compass_conf/flavor_mapping/HA-ansible-multinodes-queens.conf
@@ -0,0 +1,124 @@
+ADAPTER = 'openstack_queens'
+FLAVOR = 'HA-ansible-multinodes-queens'
+CONFIG_MAPPING = {
+ "mapped_name": "flavor_config",
+ "mapped_children": [{
+ "security": {
+ "accordion_heading": "OpenStack Database and Queue Credentials",
+ "category": "service_credentials",
+ "data_structure": "table",
+ "action": "true",
+ "modifiable_data": ["username", "password"],
+ "table_display_header": ["Service", "UserName", "Password", "Action"],
+ "config": {
+ "rabbitmq": {
+ "username": "guest",
+ "password": ""
+ },
+ "compute": {
+ "username": "nova",
+ "password": ""
+ },
+ "dashboard": {
+ "username": "dashboard",
+ "password": ""
+ },
+ "identity": {
+ "username": "keystone",
+ "password": ""
+ },
+ "image": {
+ "username": "glance",
+ "password": ""
+ },
+ "metering": {
+ "username": "ceilometer",
+ "password": ""
+ },
+ "alarming": {
+ "username": "aodh",
+ "password": ""
+ },
+ "network": {
+ "username": "neutron",
+ "password": ""
+ },
+ "mysql": {
+ "username": "root",
+ "password": ""
+ },
+ "volume": {
+ "username": "cinder",
+ "password": ""
+ },
+ "heat": {
+ "username": "heat",
+ "password": ""
+ },
+ "policy": {
+ "username": "congress",
+ "password": ""
+ }
+ }
+ }
+ },{
+ "security": {
+ "accordion_heading": "OpenStack Keystone User Credentials",
+ "category": "console_credentials",
+ "data_structure": "table",
+ "action": "true",
+ "modifiable_data": ["username", "password"],
+ "table_display_header": ["Service", "UserName", "Password", "Action"],
+ "config":{
+ "admin": {
+ "username": "admin",
+ "password": ""
+ },
+ "demo": {
+ "username": "demo",
+ "password": ""
+ },
+ "compute": {
+ "username": "nova",
+ "password": ""
+ },
+ "dashboard": {
+ "username": "dashboard",
+ "password": ""
+ },
+ "identity": {
+ "username": "keystone",
+ "password": ""
+ },
+ "image": {
+ "username": "glance",
+ "password": ""
+ },
+ "metering": {
+ "username": "ceilometer",
+ "password": ""
+ },
+ "alarming": {
+ "username": "aodh",
+ "password": ""
+ },
+ "network": {
+ "username": "quantum",
+ "password": ""
+ },
+ "object-store": {
+ "username": "swift",
+ "password": ""
+ },
+ "heat": {
+ "username": "heat",
+ "password": ""
+ },
+ "volume": {
+ "username": "cinder",
+ "password": ""
+ }
+ }
+ }
+ }]
+}
diff --git a/deploy/compass_conf/flavor_metadata/HA-ansible-multinodes-queens.conf b/deploy/compass_conf/flavor_metadata/HA-ansible-multinodes-queens.conf
new file mode 100755
index 00000000..e38292b4
--- /dev/null
+++ b/deploy/compass_conf/flavor_metadata/HA-ansible-multinodes-queens.conf
@@ -0,0 +1,19 @@
+ADAPTER = 'openstack_queens'
+FLAVOR = 'HA-ansible-multinodes-queens'
+METADATA = {
+ 'ha_proxy': {
+ '_self': {
+ },
+ 'vip': {
+ '_self': {
+ 'is_required': True,
+ 'field': 'general',
+ 'mapping_to': 'ha_vip'
+ }
+ },
+ 'test': {
+ '_self': {
+ },
+ }
+ }
+}
diff --git a/deploy/compass_conf/package_installer/ansible-queens.conf b/deploy/compass_conf/package_installer/ansible-queens.conf
new file mode 100755
index 00000000..191e21d9
--- /dev/null
+++ b/deploy/compass_conf/package_installer/ansible-queens.conf
@@ -0,0 +1,15 @@
+NAME = 'ansible_installer'
+INSTANCE_NAME = 'ansible_installer_queens'
+SETTINGS = {
+ 'ansible_dir': '/var/ansible',
+ 'ansible_run_dir': '/var/ansible/run',
+ 'ansible_config': 'ansible.cfg',
+ 'playbook_file': 'site.yml',
+ 'inventory_file': 'inventory.py',
+ 'inventory_json_file': 'inventory.json',
+ 'inventory_group': ['controller', 'compute', 'ha', 'odl', 'onos', 'opencontrail', 'ceph_adm', 'ceph_mon', 'ceph_osd', 'moon'],
+ 'group_variable': 'all',
+ 'etc_hosts_path': 'roles/pre-openstack/templates/hosts',
+ 'runner_dirs': ['roles','openstack_queens/templates','openstack_queens/roles']
+}
+
diff --git a/deploy/compass_conf/role/openstack_queens_ansible.conf b/deploy/compass_conf/role/openstack_queens_ansible.conf
new file mode 100755
index 00000000..d46bd401
--- /dev/null
+++ b/deploy/compass_conf/role/openstack_queens_ansible.conf
@@ -0,0 +1,125 @@
+ADAPTER_NAME = 'openstack_queens'
+ROLES = [{
+ 'role': 'allinone-compute',
+ 'display_name': 'all in one',
+ 'description': 'All in One'
+}, {
+ 'role': 'controller',
+ 'display_name': 'controller node',
+ 'description': 'Controller Node'
+}, {
+ 'role': 'compute',
+ 'display_name': 'compute node',
+ 'description': 'Compute Node'
+}, {
+ 'role': 'storage',
+ 'display_name': 'storage node',
+ 'description': 'Storage Node'
+}, {
+ 'role': 'network',
+ 'display_name': 'network node',
+ 'description': 'Network Node'
+}, {
+ 'role': 'compute-worker',
+ 'display_name': 'Compute worker node',
+ 'description': 'Compute worker node'
+}, {
+ 'role': 'compute-controller',
+ 'display_name': 'Compute controller node',
+ 'description': 'Compute controller node'
+}, {
+ 'role': 'network-server',
+ 'display_name': 'Network server node',
+ 'description': 'Network server node'
+}, {
+ 'role': 'database',
+ 'display_name': 'Database node',
+ 'description': 'Database node'
+}, {
+ 'role': 'messaging',
+ 'display_name': 'Messaging queue node',
+ 'description': 'Messaging queue node'
+}, {
+ 'role': 'image',
+ 'display': 'Image node',
+ 'description': 'Image node'
+}, {
+ 'role': 'dashboard',
+ 'display': 'Dashboard node',
+ 'description': 'Dashboard node'
+}, {
+ 'role': 'identity',
+ 'display': 'Identity node',
+ 'description': 'Identity node'
+}, {
+ 'role': 'storage-controller',
+ 'display': 'Storage controller node',
+ 'description': 'Storage controller node'
+}, {
+ 'role': 'storage-volume',
+ 'display': 'Storage volume node',
+ 'description': 'Storage volume node'
+}, {
+ 'role': 'network-worker',
+ 'display': 'Network worker node',
+ 'description': 'Network worker node'
+}, {
+ 'role': 'odl',
+ 'display': 'open day light',
+ 'description': 'odl node',
+ 'optional': True
+}, {
+ 'role': 'onos',
+ 'display': 'open network operating system',
+ 'description': 'onos node',
+ 'optional': True
+}, {
+ 'role': 'opencontrail',
+ 'display': 'open contrail',
+ 'description': 'opencontrail node',
+ 'optional': True
+}, {
+ 'role': 'ha',
+ 'display': 'Cluster with HA',
+ 'description': 'Cluster with HA node'
+}, {
+ 'role': 'ceph-adm',
+ 'display': 'Ceph Admin Node',
+ 'description': 'Ceph Admin Node',
+ 'optional': True
+}, {
+ 'role': 'ceph-mon',
+ 'display': 'Ceph Monitor Node',
+ 'description': 'Ceph Monitor Node',
+ 'optional': True
+}, {
+ 'role': 'ceph-osd',
+ 'display': 'Ceph Storage Node',
+ 'description': 'Ceph Storage Node',
+ 'optional': True
+}, {
+ 'role': 'ceph-osd-node',
+ 'display': 'Ceph osd install from node',
+ 'description': '',
+ 'optional': True
+}, {
+ 'role': 'ceph',
+ 'display': 'ceph node',
+ 'description': 'ceph node',
+ 'optional': True
+}, {
+ 'role': 'sec-patch',
+ 'display': 'sec-patch node',
+ 'description': 'Security Patch Node',
+ 'optional': True
+}, {
+ 'role': 'none',
+ 'display': 'none node',
+ 'description': 'Only install OS Node',
+ 'optional': True
+}, {
+ 'role': 'moon',
+ 'display': 'moon master or slave node',
+ 'description': "Moon master/slave Node",
+ 'optional': True
+}]
diff --git a/deploy/compass_conf/templates/ansible_installer/openstack_queens/ansible_cfg/HA-ansible-multinodes.tmpl b/deploy/compass_conf/templates/ansible_installer/openstack_queens/ansible_cfg/HA-ansible-multinodes.tmpl
new file mode 100755
index 00000000..4d20ff6d
--- /dev/null
+++ b/deploy/compass_conf/templates/ansible_installer/openstack_queens/ansible_cfg/HA-ansible-multinodes.tmpl
@@ -0,0 +1,12 @@
+#set cluster_name = $getVar('name', '')
+[defaults]
+log_path = /var/ansible/run/openstack_queens-$cluster_name/ansible.log
+host_key_checking = False
+callback_whitelist = playbook_done, status_callback
+callback_plugins = /opt/ansible_plugins/callback
+lookup_plugins = /opt/ansible_plugins/lookup
+forks=100
+
+[ssh_connection]
+pipelining=True
+retries = 5
diff --git a/deploy/compass_conf/templates/ansible_installer/openstack_queens/ansible_cfg/allinone.tmpl b/deploy/compass_conf/templates/ansible_installer/openstack_queens/ansible_cfg/allinone.tmpl
new file mode 100755
index 00000000..7a947da7
--- /dev/null
+++ b/deploy/compass_conf/templates/ansible_installer/openstack_queens/ansible_cfg/allinone.tmpl
@@ -0,0 +1,6 @@
+#set cluster_name = $getVar('name', '')
+[defaults]
+log_path = /var/ansible/run/openstack_queens-$cluster_name/ansible.log
+host_key_checking = False
+callback_plugins = /opt/ansible_callbacks
+pipelining=True
diff --git a/deploy/compass_conf/templates/ansible_installer/openstack_queens/ansible_cfg/multinodes.tmpl b/deploy/compass_conf/templates/ansible_installer/openstack_queens/ansible_cfg/multinodes.tmpl
new file mode 100755
index 00000000..7a947da7
--- /dev/null
+++ b/deploy/compass_conf/templates/ansible_installer/openstack_queens/ansible_cfg/multinodes.tmpl
@@ -0,0 +1,6 @@
+#set cluster_name = $getVar('name', '')
+[defaults]
+log_path = /var/ansible/run/openstack_queens-$cluster_name/ansible.log
+host_key_checking = False
+callback_plugins = /opt/ansible_callbacks
+pipelining=True
diff --git a/deploy/compass_conf/templates/ansible_installer/openstack_queens/ansible_cfg/single-controller.tmpl b/deploy/compass_conf/templates/ansible_installer/openstack_queens/ansible_cfg/single-controller.tmpl
new file mode 100755
index 00000000..7a947da7
--- /dev/null
+++ b/deploy/compass_conf/templates/ansible_installer/openstack_queens/ansible_cfg/single-controller.tmpl
@@ -0,0 +1,6 @@
+#set cluster_name = $getVar('name', '')
+[defaults]
+log_path = /var/ansible/run/openstack_queens-$cluster_name/ansible.log
+host_key_checking = False
+callback_plugins = /opt/ansible_callbacks
+pipelining=True
diff --git a/deploy/compass_conf/templates/ansible_installer/openstack_queens/hosts/HA-ansible-multinodes.tmpl b/deploy/compass_conf/templates/ansible_installer/openstack_queens/hosts/HA-ansible-multinodes.tmpl
new file mode 100755
index 00000000..4c98066e
--- /dev/null
+++ b/deploy/compass_conf/templates/ansible_installer/openstack_queens/hosts/HA-ansible-multinodes.tmpl
@@ -0,0 +1,31 @@
+#set ip_settings={}
+#for k,v in $getVar('ip_settings', {}).items()
+#set host_ip_settings={}
+#for intf in v
+#set $host_ip_settings[$intf["alias"]]=intf
+#end for
+#set $ip_settings[$k]=$host_ip_settings
+#end for
+
+# localhost
+127.0.0.1 localhost
+#set controllers = $getVar('controller', [])
+#set computes = $getVar('compute', [])
+#if not $isinstance($controllers, list)
+ #set controllers = [$controllers]
+#end if
+#if not $isinstance($compute, list)
+ #set computes = [$computes]
+#end if
+# controller
+#for worker in $controllers
+ #set worker_hostname = $worker.hostname
+ #set worker_ip = $ip_settings[$worker_hostname]["tenant"]["ip"]
+$worker_ip $worker_hostname
+#end for
+# compute
+#for worker in $computes
+ #set worker_hostname = $worker.hostname
+ #set worker_ip = $ip_settings[$worker_hostname]["tenant"]["ip"]
+$worker_ip $worker_hostname
+#end for
diff --git a/deploy/compass_conf/templates/ansible_installer/openstack_queens/hosts/allinone.tmpl b/deploy/compass_conf/templates/ansible_installer/openstack_queens/hosts/allinone.tmpl
new file mode 100755
index 00000000..b777815e
--- /dev/null
+++ b/deploy/compass_conf/templates/ansible_installer/openstack_queens/hosts/allinone.tmpl
@@ -0,0 +1,10 @@
+#set controllers = $getVar('allinone_compute', [])
+#if not $isinstance($controllers, list)
+ #set controllers = [$controllers]
+#end if
+# allinone
+#for controller in $controllers
+ #set controller_ip = $controller.management.ip
+ #set controller_hostname = $controller.hostname
+$controller_ip $controller_hostname
+#end for
diff --git a/deploy/compass_conf/templates/ansible_installer/openstack_queens/hosts/multinodes.tmpl b/deploy/compass_conf/templates/ansible_installer/openstack_queens/hosts/multinodes.tmpl
new file mode 100755
index 00000000..ca8c793f
--- /dev/null
+++ b/deploy/compass_conf/templates/ansible_installer/openstack_queens/hosts/multinodes.tmpl
@@ -0,0 +1,110 @@
+#set compute_controllers = $getVar('compute_controller', [])
+#set compute_workers = $getVar('compute_worker', [])
+#set network_servers = $getVar('network_server', [])
+#set network_workers = $getVar('network_worker', [])
+#set databases = $getVar('database', [])
+#set messagings = $getVar('messaging', [])
+#set images = $getVar('image', [])
+#set dashboards = $getVar('dashboard', [])
+#set identities = $getVar('identity', [])
+#set storage_controllers = $getVar('storage_controller', [])
+#set storage_volumes = $getVar('storage_volume', [])
+#if not $isinstance($compute_controllers, list)
+ #set compute_controllers = [$compute_controllers]
+#end if
+#if not $isinstance($compute_workers, list)
+ #set compute_workers = [$compute_workers]
+#end if
+#if not $isinstance($network_servers, list)
+ #set network_servers = [$network_servers]
+#end if
+#if not $isinstance($network_workers, list)
+ #set network_workers = [$network_workers]
+#end if
+#if not $isinstance($databases, list)
+ #set databases = [$databases]
+#end if
+#if not $isinstance($messagings, list)
+ #set messagings = [$messagings]
+#end if
+#if not $isinstance($images, list)
+ #set images = [$images]
+#end if
+#if not $isinstance($dashboards, list)
+ #set dashboards = [$dashboards]
+#end if
+#if not $isinstance($identities, list)
+ #set identities = [$identities]
+#end if
+#if not $isinstance($storage_controllers, list)
+ #set storage_controllers = [$storage_controllers]
+#end if
+#if not $isinstance($storage_volumes, list)
+ #set storage_volumes = [$storage_volumes]
+#end if
+# compute-controller
+#for worker in $compute_controllers
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_ip $worker_hostname
+#end for
+# database
+#for worker in $databases
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_ip $worker_hostname
+#end for
+# messaging
+#for worker in $messagings
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_ip $worker_hostname
+#end for
+# storage-controller
+#for worker in $storage_controllers
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_ip $worker_hostname
+#end for
+# image
+#for worker in $images
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_ip $worker_hostname
+#end for
+# identity
+#for worker in $identities
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_ip $worker_hostname
+#end for
+# network-server
+#for worker in $network_servers
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_ip $worker_hostname
+#end for
+# dashboard
+#for worker in $dashboards
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_ip $worker_hostname
+#end for
+# storage-volume
+#for worker in $storage_volumes
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_ip $worker_hostname
+#end for
+# network-worker
+#for worker in $network_workers
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_ip $worker_hostname
+#end for
+# compute-worker
+#for worker in $compute_workers
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_ip $worker_hostname
+#end for
diff --git a/deploy/compass_conf/templates/ansible_installer/openstack_queens/hosts/single-controller.tmpl b/deploy/compass_conf/templates/ansible_installer/openstack_queens/hosts/single-controller.tmpl
new file mode 100755
index 00000000..3ed94694
--- /dev/null
+++ b/deploy/compass_conf/templates/ansible_installer/openstack_queens/hosts/single-controller.tmpl
@@ -0,0 +1,40 @@
+#set controllers = $getVar('controller', [])
+#set computes = $getVar('compute', [])
+#set storages = $getVar('storage', [])
+#set networks = $getVar('network', [])
+#if not $isinstance($controllers, list)
+ #set controllers = [$controllers]
+#end if
+#if not $isinstance($computes, list)
+ #set computes = [$computes]
+#end if
+#if not $isinstance($storages, list)
+ #set storages = [$storages]
+#end if
+#if not $isinstance($networks, list)
+ #set networks = [$networks]
+#end if
+# controller
+#for controller in $controllers
+ #set controller_ip = $controller.management.ip
+ #set controller_hostname = $controller.hostname
+$controller_ip $controller_hostname
+#end for
+# compute
+#for worker in $computes
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_ip $worker_hostname
+#end for
+# storage
+#for worker in $storages
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_ip $worker_hostname
+#end for
+# network
+#for worker in $networks
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_ip $worker_hostname
+#end for
diff --git a/deploy/compass_conf/templates/ansible_installer/openstack_queens/inventories/HA-ansible-multinodes.tmpl b/deploy/compass_conf/templates/ansible_installer/openstack_queens/inventories/HA-ansible-multinodes.tmpl
new file mode 100755
index 00000000..7184d21d
--- /dev/null
+++ b/deploy/compass_conf/templates/ansible_installer/openstack_queens/inventories/HA-ansible-multinodes.tmpl
@@ -0,0 +1,74 @@
+#set inventory_json = $getVar('inventory_json', [])
+#!/usr/bin/env python
+
+import os
+import sys
+import copy
+import argparse
+
+try:
+ import json
+except ImportError:
+ import simplejson as json
+
+local_inventory='$inventory_json'
+
+def _byteify(data, ignore_dicts = False):
+ if isinstance(data, unicode):
+ return data.encode('utf-8')
+ if isinstance(data, list):
+ return [ _byteify(item, ignore_dicts=True) for item in data ]
+ if isinstance(data, dict) and not ignore_dicts:
+ return {
+ _byteify(key, ignore_dicts=True): _byteify(value, ignore_dicts=True)
+ for key, value in data.iteritems()
+ }
+ return data
+
+def merge_dict(ldict, rdict, overwrite=True):
+ if not (ldict and rdict):
+ return
+
+ if not isinstance(ldict, dict):
+ raise TypeError('ldict type is %s not dict' % type(ldict))
+
+ if not isinstance(rdict, dict):
+ raise TypeError('rdict type is %s not dict' % type(rdict))
+
+ for key, value in rdict.items():
+ if isinstance(value, dict) and key in ldict and isinstance(ldict[key],
+ dict):
+ merge_dict(ldict[key], value, overwrite)
+ else:
+ if overwrite or key not in ldict:
+ ldict[key] = copy.deepcopy(value)
+
+def load_inventory(inventory):
+ if not os.path.exists(inventory):
+ raise RuntimeError('file: %s not exist' % inventory)
+ with open(inventory, 'r') as fd:
+ return json.load(fd, object_hook=_byteify)
+
+def dump_inventory(inventory, data):
+ with open(inventory, 'w') as fd:
+ json.dump(data, fd, indent=4)
+
+def merge_inventory(linv, rinv):
+ ldata = load_inventory(linv)
+ rdata = load_inventory(rinv)
+ merge_dict(ldata, rdata, overwrite=True)
+ dump_inventory(linv, ldata)
+
+def read_cli_args():
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--list', action = 'store_true')
+ parser.add_argument('--merge', action = 'store')
+ return parser.parse_args()
+
+if __name__ == '__main__':
+ get_args = read_cli_args()
+ new_inventory = get_args.merge
+ if get_args.list:
+ print load_inventory(local_inventory)
+ elif new_inventory:
+ merge_inventory(local_inventory, new_inventory)
diff --git a/deploy/compass_conf/templates/ansible_installer/openstack_queens/inventories/allinone.tmpl b/deploy/compass_conf/templates/ansible_installer/openstack_queens/inventories/allinone.tmpl
new file mode 100755
index 00000000..b320b9c5
--- /dev/null
+++ b/deploy/compass_conf/templates/ansible_installer/openstack_queens/inventories/allinone.tmpl
@@ -0,0 +1,47 @@
+#set controllers = $getVar('allinone_compute', [])
+#set computes = $getVar('allinone_compute', [])
+#set storages = $getVar('allinone_compute', [])
+#set networks = $getVar('allinone_compute', [])
+#if not $isinstance($controllers, list)
+ #set controllers = [$controllers]
+#end if
+#if not $isinstance($computes, list)
+ #set computes = [$computes]
+#end if
+#if not $isinstance($storages, list)
+ #set storages = [$storages]
+#end if
+#if not $isinstance($networks, list)
+ #set networks = [$networks]
+#end if
+
+#set credentials = $getVar('server_credentials', {})
+#set username = $credentials.get('username', 'root')
+#set password = $credentials.get('password', 'root')
+[controller]
+#for controller in $controllers
+ #set controller_ip = $controller.management.ip
+ #set controller_hostname = $controller.hostname
+$controller_hostname ansible_ssh_host=$controller_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
+
+[compute]
+#for compute in $computes
+ #set compute_ip = $compute.management.ip
+ #set compute_hostname = $compute.hostname
+$compute_hostname ansible_ssh_host=$compute_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
+
+[network]
+#for network in $networks
+ #set network_ip = $network.management.ip
+ #set network_hostname = $network.hostname
+$network_hostname ansible_ssh_host=$network_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
+
+[storage]
+#for storage in storages
+ #set storage_ip = $storage.management.ip
+ #set storage_hostname = $storage.hostname
+$storage_hostname ansible_ssh_host=$storage_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
diff --git a/deploy/compass_conf/templates/ansible_installer/openstack_queens/inventories/multinodes.tmpl b/deploy/compass_conf/templates/ansible_installer/openstack_queens/inventories/multinodes.tmpl
new file mode 100755
index 00000000..b342d22f
--- /dev/null
+++ b/deploy/compass_conf/templates/ansible_installer/openstack_queens/inventories/multinodes.tmpl
@@ -0,0 +1,123 @@
+#set compute_controllers = $getVar('compute_controller', [])
+#set compute_workers = $getVar('compute_worker', [])
+#set network_servers = $getVar('network_server', [])
+#set network_workers = $getVar('network_worker', [])
+#set databases = $getVar('database', [])
+#set messagings = $getVar('messaging', [])
+#set images = $getVar('image', [])
+#set dashboards = $getVar('dashboard', [])
+#set identities = $getVar('identity', [])
+#set storage_controllers = $getVar('storage_controller', [])
+#set storage_volumes = $getVar('storage_volume', [])
+#if not $isinstance($compute_controllers, list)
+ #set compute_controllers = [$compute_controllers]
+#end if
+#if not $isinstance($compute_workers, list)
+ #set compute_workers = [$compute_workers]
+#end if
+#if not $isinstance($network_servers, list)
+ #set network_servers = [$network_servers]
+#end if
+#if not $isinstance($network_workers, list)
+ #set network_workers = [$network_workers]
+#end if
+#if not $isinstance($databases, list)
+ #set databases = [$databases]
+#end if
+#if not $isinstance($messagings, list)
+ #set messagings = [$messagings]
+#end if
+#if not $isinstance($images, list)
+ #set images = [$images]
+#end if
+#if not $isinstance($dashboards, list)
+ #set dashboards = [$dashboards]
+#end if
+#if not $isinstance($identities, list)
+ #set identities = [$identities]
+#end if
+#if not $isinstance($storage_controllers, list)
+ #set storage_controllers = [$storage_controllers]
+#end if
+#if not $isinstance($storage_volumes, list)
+ #set storage_volumes = [$storage_volumes]
+#end if
+#set credentials = $getVar('server_credentials', {})
+#set username = $credentials.get('username', 'root')
+#set password = $credentials.get('password', 'root')
+[compute-controller]
+#for controller in $compute_controllers
+ #set controller_ip = $controller.management.ip
+ #set controller_hostname = $controller.hostname
+$controller_hostname ansible_ssh_host=$controller_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
+
+[compute-worker]
+#for compute in $compute_workers
+ #set compute_ip = $compute.management.ip
+ #set compute_hostname = $compute.hostname
+$compute_hostname ansible_ssh_host=$compute_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
+
+[network-server]
+#for network in $network_servers
+ #set network_ip = $network.management.ip
+ #set network_hostname = $network.hostname
+$network_hostname ansible_ssh_host=$network_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
+
+[network-worker]
+#for network in $network_workers
+ #set network_ip = $network.management.ip
+ #set network_hostname = $network.hostname
+$network_hostname ansible_ssh_host=$network_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
+
+[database]
+#for worker in $databases
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_hostname ansible_ssh_host=$worker_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
+
+[messaging]
+#for worker in $messagings
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_hostname ansible_ssh_host=$worker_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
+
+[image]
+#for worker in $images
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_hostname ansible_ssh_host=$worker_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
+
+[dashboard]
+#for worker in $dashboards
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_hostname ansible_ssh_host=$worker_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
+
+[identity]
+#for worker in $identities
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_hostname ansible_ssh_host=$worker_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
+
+[storage-controller]
+#for worker in $storage_controllers
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_hostname ansible_ssh_host=$worker_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
+
+[storage-volume]
+#for worker in $storage_volumes
+ #set worker_ip = $worker.management.ip
+ #set worker_hostname = $worker.hostname
+$worker_hostname ansible_ssh_host=$worker_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
diff --git a/deploy/compass_conf/templates/ansible_installer/openstack_queens/inventories/single-controller.tmpl b/deploy/compass_conf/templates/ansible_installer/openstack_queens/inventories/single-controller.tmpl
new file mode 100755
index 00000000..1afb45fa
--- /dev/null
+++ b/deploy/compass_conf/templates/ansible_installer/openstack_queens/inventories/single-controller.tmpl
@@ -0,0 +1,67 @@
+#set controllers = $getVar('controller', [])
+#set computes = $getVar('compute', [])
+#set storages = $getVar('storage', [])
+#set networks = $getVar('network', [])
+#set odls = $getVar('odl', [])
+#set onoss = $getVar('onos', [])
+#if not $isinstance($controllers, list)
+ #set controllers = [$controllers]
+#end if
+#if not $isinstance($computes, list)
+ #set computes = [$computes]
+#end if
+#if not $isinstance($storages, list)
+ #set storages = [$storages]
+#end if
+#if not $isinstance($networks, list)
+ #set networks = [$networks]
+#end if
+#if not $isinstance($odls, list)
+ #set odls = [$odls]
+#end if
+#if not $isinstance($onoss, list)
+ #set onoss = [$onoss]
+#end if
+
+#set credentials = $getVar('server_credentials', {})
+#set username = $credentials.get('username', 'root')
+#set password = $credentials.get('password', 'root')
+[controller]
+#for controller in $controllers
+ #set controller_ip = $controller.management.ip
+ #set controller_hostname = $controller.hostname
+$controller_hostname ansible_ssh_host=$controller_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
+
+[compute]
+#for compute in $computes
+ #set compute_ip = $compute.management.ip
+ #set compute_hostname = $compute.hostname
+$compute_hostname ansible_ssh_host=$compute_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
+
+[network]
+#for network in $networks
+ #set network_ip = $network.management.ip
+ #set network_hostname = $network.hostname
+$network_hostname ansible_ssh_host=$network_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
+
+[storage]
+#for storage in storages
+ #set storage_ip = $storage.management.ip
+ #set storage_hostname = $storage.hostname
+$storage_hostname ansible_ssh_host=$storage_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
+[odl]
+#for odl in odls
+ #set odl_ip = $odl.management.ip
+ #set odl_hostname = $odl.hostname
+$odl_hostname ansible_ssh_host=$odl_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
+[storage]
+#for storage in storages
+ #set storage_ip = $storage.management.ip
+ #set storage_hostname = $storage.hostname
+$storage_hostname ansible_ssh_host=$storage_ip ansible_ssh_user=$username ansible_ssh_pass=$password
+#end for
diff --git a/deploy/compass_conf/templates/ansible_installer/openstack_queens/vars/HA-ansible-multinodes.tmpl b/deploy/compass_conf/templates/ansible_installer/openstack_queens/vars/HA-ansible-multinodes.tmpl
new file mode 100755
index 00000000..8ae9bdba
--- /dev/null
+++ b/deploy/compass_conf/templates/ansible_installer/openstack_queens/vars/HA-ansible-multinodes.tmpl
@@ -0,0 +1,224 @@
+#from random import randint
+#set cluster_name = $getVar('name', '')
+#set network_cfg = $getVar('network_cfg', {})
+#set ntp_server = $getVar('ntp_server', "")
+#set ceph_disk = $getVar('ceph_disk',"")
+#set controllers = $getVar('controller', [])
+#set computes = $getVar('compute', [])
+#set $contr_sys_mappings= {}
+#set $compu_sys_mappings= {}
+#for $intf_info in $network_cfg.sys_intf_mappings
+#if "controller" in $intf_info["role"]
+#set $contr_sys_mappings[$intf_info["name"]] = $intf_info
+#end if
+#if "compute" in $intf_info["role"]
+#set $compu_sys_mappings[$intf_info["name"]] = $intf_info
+#end if
+#end for
+
+#set ip_settings={}
+#for k,v in $getVar('ip_settings', {}).items()
+#set host_ip_settings={}
+#for intf in v
+#set $host_ip_settings[$intf["alias"]]=intf
+#end for
+#set $ip_settings[$k]=$host_ip_settings
+#end for
+
+#for item in $network_cfg["ip_settings"]
+#if $item["name"] == "mgmt"
+#set mgmt_cfg = $item
+#end if
+#if $item["name"] == "external"
+#set external_cfg = $item
+#end if
+#if $item["name"] == "tenant"
+#set tenant_cfg = $item
+#end if
+#if $item["name"] == "storage"
+#set storage_cfg = $item
+#end if
+#end for
+
+#set provider_net_mappings = $network_cfg["provider_net_mappings"]
+#set contr_prv_mappings = {}
+#set compu_prv_mappings = {}
+#for item in $provider_net_mappings
+#if "controller" in $item["role"]
+#set $contr_prv_mappings[$item["network"]] = {"bridge":$item["name"],"interface":$item["interface"]}
+#end if
+#if "compute" in $item["role"]
+#set $compu_prv_mappings[$item["network"]] = {"bridge":$item["name"],"interface":$item["interface"]}
+#end if
+#end for
+
+#set neutron_cfg = $getVar('neutron_config', {})
+#set ovs_config = $neutron_cfg.openvswitch
+#set has = $getVar('ha', [])
+#set ha_vip = $getVar('ha_vip', [])
+
+run_dir: $getVar('run_dir', '')
+
+enable_secgroup: $getVar('enable_secgroup', True)
+enable_fwaas: $getVar('enable_fwaas', True)
+enable_vpnaas: $getVar('enable_vpnaas', True)
+odl_l3_agent: $getVar('odl_l3_agent', 'Disable')
+ha_network: $getVar('ha_network', 'Disable')
+onos_nic: $getVar('onos_nic', 'eth2')
+onos_sfc: $getVar('onos_sfc', 'Disable')
+ip_settings: $ip_settings
+network_cfg: $network_cfg
+
+provider_net_mappings: $network_cfg["provider_net_mappings"]
+
+contr_sys_mappings: $contr_sys_mappings
+compu_sys_mappings: $compu_sys_mappings
+
+contr_prv_mappings: $contr_prv_mappings
+compu_prv_mappings: $compu_prv_mappings
+
+deploy_type: $getVar('deploy_type', 'virtual')
+
+mgmt_cidr: $mgmt_cfg["cidr"]
+external_cidr: $external_cfg["cidr"]
+tenant_cidr: $tenant_cfg["cidr"]
+storage_cidr: $storage_cfg["cidr"]
+
+tenant_net_info: "{{ network_cfg.tenant_net_info }}"
+public_net_info: "{{ network_cfg.public_net_info }}"
+host_ip_settings: "{{ ip_settings[inventory_hostname] }}"
+
+ntp_server: $ntp_server
+
+offline_deployment: $getVar('offline_deployment', 'Disable')
+offline_repo_ip: $getVar('compass_ip', '')
+offline_repo_port: $getVar('offline_repo_port', '5151')
+
+internal_vip:
+ ip: $network_cfg["internal_vip"]["ip"]
+ netmask: $network_cfg["internal_vip"]["netmask"]
+#if "vlan_tag" in $contr_sys_mappings[$network_cfg["internal_vip"]["interface"]]
+ interface: $contr_sys_mappings[$network_cfg["internal_vip"]["interface"]]["name"]
+#else
+ interface: $contr_sys_mappings[$network_cfg["internal_vip"]["interface"]]["interface"]
+#end if
+
+public_vip:
+ ip: $network_cfg["public_vip"]["ip"]
+ netmask: $network_cfg["public_vip"]["netmask"]
+#if "vlan_tag" in $contr_sys_mappings[$network_cfg["public_vip"]["interface"]]
+ interface: $contr_sys_mappings[$network_cfg["public_vip"]["interface"]]["name"]
+#else
+ interface: $contr_sys_mappings[$network_cfg["public_vip"]["interface"]]["interface"]
+#end if
+
+db_host: "{{ internal_vip.ip }}"
+rabbit_host: "{{ internal_vip.ip }}"
+
+internal_ip: "{{ ip_settings[inventory_hostname]['tenant']['ip'] }}"
+internal_nic: tenant
+
+#set random_id = randint(1, 255)
+vrouter_id_internal: $random_id
+vrouter_id_public: $random_id
+
+identity_host: "{{ internal_ip }}"
+controllers_host: "{{ internal_ip }}"
+storage_controller_host: "{{ internal_ip }}"
+compute_controller_host: "{{ internal_ip }}"
+image_host: "{{ internal_ip }}"
+network_server_host: "{{ internal_ip }}"
+dashboard_host: "{{ internal_ip }}"
+
+haproxy_hosts:
+#for $item in $has
+#set $hostname=$item["hostname"]
+ $hostname: $ip_settings[$hostname]["tenant"]["ip"]
+#end for
+
+host_index:
+#for $index, $item in enumerate($has)
+ $item["hostname"]: $index
+#end for
+
+ERLANG_TOKEN: YOWSJSJIGGAUFZTIBRAD
+
+cluster_name: $cluster_name
+
+odl_controller: 10.1.0.15
+
+DEBUG: true
+VERBOSE: true
+NTP_SERVER_LOCAL: "{{ controllers_host }}"
+DB_HOST: "{{ db_host }}"
+MQ_BROKER: rabbitmq
+
+OPENSTACK_REPO: cloudarchive-queens.list
+queens_cloud_archive: deb http://ubuntu-cloud.archive.canonical.com/ubuntu xenial-updates/queens main
+ADMIN_TOKEN: admin
+CEILOMETER_TOKEN: c095d479023a0fd58a54
+erlang.cookie: DJJVECFMCJPVYQTJTDWG
+
+#set plugins = $getVar('plugins', [])
+#for item in plugins
+#set keys = $item.keys()
+#set values = $item.values()
+$keys[0]: $values[0]
+#end for
+
+#set neutron_service_plugins=['router']
+#if $getVar('enable_fwaas', True)
+#neutron_service_plugins.append('firewall')
+#end if
+#if $getVar('enable_vpnaas', True)
+#neutron_service_plugins.append('vpnaas')
+#end if
+
+NEUTRON_SERVICE_PLUGINS: $neutron_service_plugins
+NEUTRON_TYPE_DRIVERS: ['flat', 'gre', 'vxlan', 'vlan']
+NEUTRON_TENANT_NETWORK_TYPES: ['$ovs_config["tenant_network_type"]']
+NEUTRON_OVS_BRIDGE_MAPPINGS: $ovs_config['bridge_mappings']
+#if 'vlan_ranges' in $ovs_config
+NEUTRON_VLAN_RANGES: $ovs_config['vlan_ranges']
+#else
+NEUTRON_VLAN_RANGES: []
+#end if
+#if 'tunnel_id_ranges' in $ovs_config
+NEUTRON_TUNNEL_ID_RANGES: $ovs_config['tunnel_id_ranges']
+#else
+NEUTRON_TUNNEL_ID_RANGES: []
+#end if
+
+#NEUTRON_MECHANISM_DRIVERS: ['opendaylight']
+NEUTRON_MECHANISM_DRIVERS: ['openvswitch']
+NEUTRON_TUNNEL_TYPES: ['vxlan']
+METADATA_SECRET: metadata_secret
+WSREP_SST_USER: wsrep_sst
+WSREP_SST_PASS: wsrep_sst_sercet
+
+INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS: "{{ internal_ip }}"
+
+#build_in_image: http://download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img
+build_in_image: http://192.168.121.12:9999/img/cirros-0.3.3-x86_64-disk.img
+build_in_image_name: cirros-0.3.3-x86_64-disk.img
+
+api_workers: 1
+
+physical_device: /dev/sdb
+
+odl_api_port: 8080
+
+odl_pkg_url: https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/distribution-karaf/0.2.2-Helium-SR2/distribution-karaf-0.2.2-Helium-SR2.tar.gz
+odl_pkg_name: karaf.tar.gz
+odl_home: "/opt/opendaylight-0.2.2/"
+odl_base_features: ['config', 'standard', 'region', 'package', 'kar', 'ssh', 'management', 'http', 'odl-base-all','odl-aaa-authn','odl-restconf','odl-nsf-all','odl-adsal-northbound','odl-mdsal-apidocs', 'odl-openflowplugin-all']
+odl_extra_features: ['odl-l2switch-switch', 'odl-ovsdb-plugin', 'odl-ovsdb-openstack', 'odl-ovsdb-northbound','odl-dlux-core', 'odl-restconf-all', 'odl-mdsal-clustering', 'odl-openflowplugin-flow-services', 'odl-netconf-connector', 'odl-netconf-connector-ssh', 'jolokia-osgi']
+odl_features: "{{ odl_base_features + odl_extra_features }}"
+odl_api_port: 8080
+
+#set moon_cfg = $getVar('moon_cfg', {})
+moon_master: $moon_cfg.master.flag
+moon_slave: $moon_cfg.slave.flag
+moon_slave_name: $moon_cfg.slave.name
+moon_master_ip: $moon_cfg.slave.master_ip
+
diff --git a/deploy/compass_conf/templates/ansible_installer/openstack_queens/vars/allinone.tmpl b/deploy/compass_conf/templates/ansible_installer/openstack_queens/vars/allinone.tmpl
new file mode 100755
index 00000000..2260a08d
--- /dev/null
+++ b/deploy/compass_conf/templates/ansible_installer/openstack_queens/vars/allinone.tmpl
@@ -0,0 +1,65 @@
+#set cluster_name = $getVar('name', '')
+#set controllers = $getVar('allinone_compute', [])
+#if not $isinstance($controllers, list)
+ #set controllers = [$controllers]
+#end if
+
+#for controller in $controllers
+ #set controller_ip = $controller.management.ip
+ #set controller_hostname = $controller.hostname
+controller_host: $controller_ip
+#end for
+#for network in $controllers
+ #set network_external_nic = $network.external.interface
+ #set network_external_subnet = $network.external.subnet
+ #set network_internal_nic = $network.management.interface
+INTERFACE_NAME: $network_external_nic
+INTERNAL_INTERFACE: $network_internal_nic
+#end for
+
+
+compute_controller_host: "{{ controller_host }}"
+db_host: "{{ controller_host }}"
+rabbit_host: "{{ controller_host }}"
+storage_controller_host: "{{ controller_host }}"
+image_host: "{{ controller_host }}"
+identity_host: "{{ controller_host }}"
+network_server_host: "{{ controller_host }}"
+dashboard_host: "{{ controller_host }}"
+
+cluster_name: $cluster_name
+odl_controller: 10.1.0.15
+
+DEBUG: true
+VERBOSE: true
+NTP_SERVER_LOCAL: "{{ controller_host }}"
+DB_HOST: "{{ controller_host }}"
+MQ_BROKER: rabbitmq
+
+OPENSTACK_REPO: cloudarchive-queens.list
+queens_cloud_archive: deb http://ubuntu-cloud.archive.canonical.com/ubuntu xenial-updates/queens main
+ADMIN_TOKEN: admin
+CEILOMETER_TOKEN: c095d479023a0fd58a54
+
+NEUTRON_TYPE_DRIVERS: ['flat', 'gre', 'vxlan']
+NEUTRON_TENANT_NETWORK_TYPES: ['vxlan']
+#NEUTRON_MECHANISM_DRIVERS: ['opendaylight']
+NEUTRON_MECHANISM_DRIVERS: ['openvswitch']
+NEUTRON_TUNNEL_TYPES: ['vxlan']
+METADATA_SECRET: metadata_secret
+INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS: 10.1.1.21
+
+EXTERNAL_NETWORK_CIDR: 203.0.113.0/24
+EXTERNAL_NETWORK_GATEWAY: 203.0.113.1
+FLOATING_IP_START: 203.0.113.101
+FLOATING_IP_END: 203.0.113.200
+
+build_in_image: http://download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img
+build_in_image_name: cirros-0.3.3-x86_64-disk.img
+
+physical_device: /dev/sdb
+
+internal_interface: "ansible_{{ INTERNAL_INTERFACE }}"
+internal_ip: "{{ hostvars[inventory_hostname][internal_interface]['ipv4']['address'] }}"
+HA_VIP: "{{ internal_ip }}"
+
diff --git a/deploy/compass_conf/templates/ansible_installer/openstack_queens/vars/multinodes.tmpl b/deploy/compass_conf/templates/ansible_installer/openstack_queens/vars/multinodes.tmpl
new file mode 100755
index 00000000..a75a633a
--- /dev/null
+++ b/deploy/compass_conf/templates/ansible_installer/openstack_queens/vars/multinodes.tmpl
@@ -0,0 +1,136 @@
+#set cluster_name = $getVar('name', '')
+#set compute_controllers = $getVar('compute_controller', [])
+#set compute_workers = $getVar('compute_worker', [])
+#set network_servers = $getVar('network_server', [])
+#set network_workers = $getVar('network_worker', [])
+#set databases = $getVar('database', [])
+#set messagings = $getVar('messaging', [])
+#set images = $getVar('image', [])
+#set dashboards = $getVar('dashboard', [])
+#set identities = $getVar('identity', [])
+#set storage_controllers = $getVar('storage_controller', [])
+#set storage_volumes = $getVar('storage_volume', [])
+#if not $isinstance($compute_controllers, list)
+ #set compute_controllers = [$compute_controllers]
+#end if
+#if not $isinstance($compute_workers, list)
+ #set compute_workers = [$compute_workers]
+#end if
+#if not $isinstance($network_servers, list)
+ #set network_servers = [$network_servers]
+#end if
+#if not $isinstance($network_workers, list)
+ #set network_workers = [$network_workers]
+#end if
+#if not $isinstance($databases, list)
+ #set databases = [$databases]
+#end if
+#if not $isinstance($messagings, list)
+ #set messagings = [$messagings]
+#end if
+#if not $isinstance($images, list)
+ #set images = [$images]
+#end if
+#if not $isinstance($dashboards, list)
+ #set dashboards = [$dashboards]
+#end if
+#if not $isinstance($identities, list)
+ #set identities = [$identities]
+#end if
+#if not $isinstance($storage_controllers, list)
+ #set storage_controllers = [$storage_controllers]
+#end if
+#if not $isinstance($storage_volumes, list)
+ #set storage_volumes = [$storage_volumes]
+#end if
+#for worker in $compute_controllers
+ #set worker_ip = $worker.management.ip
+compute_controller_host: $worker_ip
+#end for
+#for worker in $databases
+ #set worker_ip = $worker.management.ip
+db_host: $worker_ip
+#end for
+#for worker in $messagings
+ #set worker_ip = $worker.management.ip
+rabbit_host: $worker_ip
+#end for
+#for worker in $storage_controllers
+ #set worker_ip = $worker.management.ip
+storage_controller_host: $worker_ip
+#end for
+#for worker in $images
+ #set worker_ip = $worker.management.ip
+image_host: $worker_ip
+#end for
+#for worker in $identities
+ #set worker_ip = $worker.management.ip
+identity_host: $worker_ip
+#end for
+#for worker in $compute_controllers
+ #set worker_ip = $worker.management.ip
+compute_controller_host: $worker_ip
+#end for
+#for worker in $network_servers
+ #set worker_ip = $worker.management.ip
+network_server_host: $worker_ip
+#end for
+#for worker in $dashboards
+ #set worker_ip = $worker.management.ip
+dashboard_host: $worker_ip
+#end for
+#for network in $network_workers
+ #set network_external_nic = $network.external.interface
+ #set network_internal_nic = $network.management.interface
+INTERFACE_NAME: $network_external_nic
+INTERNAL_INTERFACE: $network_internal_nic
+#end for
+
+cluster_name: $cluster_name
+
+odl_controller: 10.1.0.15
+
+DEBUG: true
+VERBOSE: true
+NTP_SERVER_LOCAL: "{{ compute_controller_host }}"
+DB_HOST: "{{ db_host }}"
+MQ_BROKER: rabbitmq
+
+OPENSTACK_REPO: cloudarchive-queens.list
+queens_cloud_archive: deb http://ubuntu-cloud.archive.canonical.com/ubuntu xenial-updates/queens main
+ADMIN_TOKEN: admin
+CEILOMETER_TOKEN: c095d479023a0fd58a54
+
+NEUTRON_TYPE_DRIVERS: ['flat', 'gre', 'vxlan']
+NEUTRON_TENANT_NETWORK_TYPES: ['vxlan']
+#NEUTRON_MECHANISM_DRIVERS: ['opendaylight']
+NEUTRON_MECHANISM_DRIVERS: ['openvswitch']
+NEUTRON_TUNNEL_TYPES: ['vxlan']
+METADATA_SECRET: metadata_secret
+INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS: 10.1.1.21
+
+EXTERNAL_NETWORK_CIDR: 203.0.113.0/24
+EXTERNAL_NETWORK_GATEWAY: 203.0.113.1
+FLOATING_IP_START: 203.0.113.101
+FLOATING_IP_END: 203.0.113.200
+
+build_in_image: http://download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img
+build_in_image_name: cirros-0.3.3-x86_64-disk.img
+
+physical_device: /dev/sdb
+
+internal_interface: "ansible_{{ INTERNAL_INTERFACE }}"
+internal_ip: "{{ hostvars[inventory_hostname][internal_interface]['ipv4']['address'] }}"
+HA_VIP: "{{ internal_ip }}"
+odl_username: admin
+odl_password: admin
+odl_api_port: 8080
+
+odl_pkg_url: https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/distribution-karaf/0.2.2-Helium-SR2/distribution-karaf-0.2.2-Helium-SR2.tar.gz
+odl_pkg_name: karaf.tar.gz
+odl_home: "/opt/opendaylight-0.2.2/"
+odl_base_features: ['config', 'standard', 'region', 'package', 'kar', 'ssh', 'management', 'http', 'odl-base-all','odl-aaa-authn','odl-restconf','odl-nsf-all','odl-adsal-northbound','odl-mdsal-apidocs', 'odl-openflowplugin-all']
+odl_extra_features: ['odl-l2switch-switch', 'odl-ovsdb-plugin', 'odl-ovsdb-openstack', 'odl-ovsdb-northbound','odl-dlux-core', 'odl-restconf-all', 'odl-mdsal-clustering', 'odl-openflowplugin-flow-services', 'odl-netconf-connector', 'odl-netconf-connector-ssh', 'jolokia-osgi']
+odl_features: "{{ odl_base_features + odl_extra_features }}"
+odl_api_port: 8080
+
diff --git a/deploy/compass_conf/templates/ansible_installer/openstack_queens/vars/single-controller.tmpl b/deploy/compass_conf/templates/ansible_installer/openstack_queens/vars/single-controller.tmpl
new file mode 100755
index 00000000..7f021d31
--- /dev/null
+++ b/deploy/compass_conf/templates/ansible_installer/openstack_queens/vars/single-controller.tmpl
@@ -0,0 +1,77 @@
+#set cluster_name = $getVar('name', '')
+#set controllers = $getVar('controller', [])
+#set computes = $getVar('compute', [])
+#set networks = $getVar('network', [])
+#set storages = $getVar('storage', [])
+#if not $isinstance($controllers, list)
+ #set controllers = [$controllers]
+#end if
+#if not $isinstance($computes, list)
+ #set computes = [$computes]
+#end if
+#if not $isinstance($networks, list)
+ #set networks = [$networks]
+#end if
+#if not $isinstance($storages, list)
+ #set storages = [$storages]
+#end if
+
+#for controller in $controllers
+ #set controller_ip = $controller.management.ip
+ #set controller_hostname = $controller.hostname
+controller_host: $controller_ip
+#end for
+#for network in $networks
+ #set network_external_nic = $network.external.interface
+ #set network_external_subnet = $network.external.subnet
+ #set network_internal_nic = $network.management.interface
+INTERFACE_NAME: $network_external_nic
+INTERNAL_INTERFACE: $network_internal_nic
+#end for
+
+
+cluster_name: $cluster_name
+deploy_type: $getVar('deploy_type', 'virtual')
+compute_controller_host: "{{ controller_host }}"
+db_host: "{{ controller_host }}"
+rabbit_host: "{{ controller_host }}"
+storage_controller_host: "{{ controller_host }}"
+image_host: "{{ controller_host }}"
+identity_host: "{{ controller_host }}"
+network_server_host: "{{ controller_host }}"
+dashboard_host: "{{ controller_host }}"
+odl_controller: 10.1.0.15
+
+DEBUG: true
+VERBOSE: true
+NTP_SERVER_LOCAL: "{{ controller_host }}"
+DB_HOST: "{{ controller_host }}"
+MQ_BROKER: rabbitmq
+
+OPENSTACK_REPO: cloudarchive-queens.list
+queens_cloud_archive: deb http://ubuntu-cloud.archive.canonical.com/ubuntu xenial-updates/queens main
+ADMIN_TOKEN: admin
+CEILOMETER_TOKEN: c095d479023a0fd58a54
+
+NEUTRON_TYPE_DRIVERS: ['flat', 'gre', 'vxlan']
+NEUTRON_TENANT_NETWORK_TYPES: ['vxlan']
+#NEUTRON_MECHANISM_DRIVERS: ['opendaylight']
+NEUTRON_MECHANISM_DRIVERS: ['openvswitch']
+NEUTRON_TUNNEL_TYPES: ['vxlan']
+METADATA_SECRET: metadata_secret
+INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS: 10.1.1.21
+
+EXTERNAL_NETWORK_CIDR: 203.0.113.0/24
+# EXTERNAL_NETWORK_CIDR: $network_external_subnet
+EXTERNAL_NETWORK_GATEWAY: 203.0.113.1
+FLOATING_IP_START: 203.0.113.101
+FLOATING_IP_END: 203.0.113.200
+
+build_in_image: http://download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img
+build_in_image_name: cirros-0.3.3-x86_64-disk.img
+
+physical_device: /dev/sdb
+
+internal_interface: "ansible_{{ INTERNAL_INTERFACE }}"
+internal_ip: "{{ hostvars[inventory_hostname][internal_interface]['ipv4']['address'] }}"
+HA_VIP: "{{ internal_ip }}"
diff --git a/deploy/conf/cluster.conf b/deploy/conf/cluster.conf
index 785d4122..6510f3cb 100644
--- a/deploy/conf/cluster.conf
+++ b/deploy/conf/cluster.conf
@@ -8,9 +8,9 @@ else
export ADAPTER_OS_PATTERN=${ADAPTER_OS_PATTERN:-'(?i)CentOS-7.*17.*'}
fi
-# pike
-export OPENSTACK_VERSION=${OPENSTACK_VERSION:-"pike"}
export DEPLOY_TOOL=${DEPLOY_TOOL:-"osa"}
+# queens
+export OPENSTACK_VERSION=${OPENSTACK_VERSION:-"queens"}
# don't touch this
export ADAPTER_TARGET_SYSTEM_PATTERN="^openstack$"
diff --git a/deploy/conf/hardware_environment/huawei-pod1/network.yml b/deploy/conf/hardware_environment/huawei-pod1/network.yml
index 77160d69..a5b01145 100644
--- a/deploy/conf/hardware_environment/huawei-pod1/network.yml
+++ b/deploy/conf/hardware_environment/huawei-pod1/network.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/hardware_environment/huawei-pod1/network_dpdk.yml b/deploy/conf/hardware_environment/huawei-pod1/network_dpdk.yml
index 03483629..3e871f98 100644
--- a/deploy/conf/hardware_environment/huawei-pod1/network_dpdk.yml
+++ b/deploy/conf/hardware_environment/huawei-pod1/network_dpdk.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/hardware_environment/huawei-pod2/network.yml b/deploy/conf/hardware_environment/huawei-pod2/network.yml
index ccf66a47..9e6365ee 100644
--- a/deploy/conf/hardware_environment/huawei-pod2/network.yml
+++ b/deploy/conf/hardware_environment/huawei-pod2/network.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/hardware_environment/huawei-pod2/network_dpdk.yml b/deploy/conf/hardware_environment/huawei-pod2/network_dpdk.yml
index b357a6e1..40124467 100644
--- a/deploy/conf/hardware_environment/huawei-pod2/network_dpdk.yml
+++ b/deploy/conf/hardware_environment/huawei-pod2/network_dpdk.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/hardware_environment/huawei-pod8/network.yml b/deploy/conf/hardware_environment/huawei-pod8/network.yml
index 6a75f34d..d6b89d2b 100644
--- a/deploy/conf/hardware_environment/huawei-pod8/network.yml
+++ b/deploy/conf/hardware_environment/huawei-pod8/network.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/hardware_environment/intel-pod17/network.yml b/deploy/conf/hardware_environment/intel-pod17/network.yml
index bb6f5130..a524c52d 100644
--- a/deploy/conf/hardware_environment/intel-pod17/network.yml
+++ b/deploy/conf/hardware_environment/intel-pod17/network.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/hardware_environment/intel-pod17/network_dpdk.yml b/deploy/conf/hardware_environment/intel-pod17/network_dpdk.yml
index 7cc421e7..4b35483b 100644
--- a/deploy/conf/hardware_environment/intel-pod17/network_dpdk.yml
+++ b/deploy/conf/hardware_environment/intel-pod17/network_dpdk.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/network_cfg_dpdk.yaml b/deploy/conf/network_cfg_dpdk.yaml
index e196d6f4..def5d308 100644
--- a/deploy/conf/network_cfg_dpdk.yaml
+++ b/deploy/conf/network_cfg_dpdk.yaml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/network_cfg_sriov.yaml b/deploy/conf/network_cfg_sriov.yaml
index fcde4c95..cb4d9b7f 100644
--- a/deploy/conf/network_cfg_sriov.yaml
+++ b/deploy/conf/network_cfg_sriov.yaml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/vm_environment/huawei-virtual1/network.yml b/deploy/conf/vm_environment/huawei-virtual1/network.yml
index 4359202e..420b478a 100644
--- a/deploy/conf/vm_environment/huawei-virtual1/network.yml
+++ b/deploy/conf/vm_environment/huawei-virtual1/network.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/vm_environment/huawei-virtual1/network_dpdk.yml b/deploy/conf/vm_environment/huawei-virtual1/network_dpdk.yml
index e196d6f4..def5d308 100644
--- a/deploy/conf/vm_environment/huawei-virtual1/network_dpdk.yml
+++ b/deploy/conf/vm_environment/huawei-virtual1/network_dpdk.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/vm_environment/huawei-virtual2/network.yml b/deploy/conf/vm_environment/huawei-virtual2/network.yml
index 4359202e..420b478a 100644
--- a/deploy/conf/vm_environment/huawei-virtual2/network.yml
+++ b/deploy/conf/vm_environment/huawei-virtual2/network.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/vm_environment/huawei-virtual2/network_dpdk.yml b/deploy/conf/vm_environment/huawei-virtual2/network_dpdk.yml
index e196d6f4..def5d308 100644
--- a/deploy/conf/vm_environment/huawei-virtual2/network_dpdk.yml
+++ b/deploy/conf/vm_environment/huawei-virtual2/network_dpdk.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/vm_environment/huawei-virtual3/network.yml b/deploy/conf/vm_environment/huawei-virtual3/network.yml
index 4359202e..420b478a 100644
--- a/deploy/conf/vm_environment/huawei-virtual3/network.yml
+++ b/deploy/conf/vm_environment/huawei-virtual3/network.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/vm_environment/huawei-virtual3/network_dpdk.yml b/deploy/conf/vm_environment/huawei-virtual3/network_dpdk.yml
index e196d6f4..def5d308 100644
--- a/deploy/conf/vm_environment/huawei-virtual3/network_dpdk.yml
+++ b/deploy/conf/vm_environment/huawei-virtual3/network_dpdk.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/vm_environment/huawei-virtual4/network.yml b/deploy/conf/vm_environment/huawei-virtual4/network.yml
index 4359202e..420b478a 100644
--- a/deploy/conf/vm_environment/huawei-virtual4/network.yml
+++ b/deploy/conf/vm_environment/huawei-virtual4/network.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/vm_environment/huawei-virtual4/network_dpdk.yml b/deploy/conf/vm_environment/huawei-virtual4/network_dpdk.yml
index e196d6f4..def5d308 100644
--- a/deploy/conf/vm_environment/huawei-virtual4/network_dpdk.yml
+++ b/deploy/conf/vm_environment/huawei-virtual4/network_dpdk.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/vm_environment/huawei-virtual8/network.yml b/deploy/conf/vm_environment/huawei-virtual8/network.yml
index 4359202e..420b478a 100644
--- a/deploy/conf/vm_environment/huawei-virtual8/network.yml
+++ b/deploy/conf/vm_environment/huawei-virtual8/network.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/vm_environment/huawei-virtual8/network_dpdk.yml b/deploy/conf/vm_environment/huawei-virtual8/network_dpdk.yml
index e196d6f4..def5d308 100644
--- a/deploy/conf/vm_environment/huawei-virtual8/network_dpdk.yml
+++ b/deploy/conf/vm_environment/huawei-virtual8/network_dpdk.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/vm_environment/huawei-virtual9/network.yml b/deploy/conf/vm_environment/huawei-virtual9/network.yml
index 4359202e..420b478a 100644
--- a/deploy/conf/vm_environment/huawei-virtual9/network.yml
+++ b/deploy/conf/vm_environment/huawei-virtual9/network.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/vm_environment/huawei-virtual9/network_dpdk.yml b/deploy/conf/vm_environment/huawei-virtual9/network_dpdk.yml
index e196d6f4..def5d308 100644
--- a/deploy/conf/vm_environment/huawei-virtual9/network_dpdk.yml
+++ b/deploy/conf/vm_environment/huawei-virtual9/network_dpdk.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/conf/vm_environment/network.yml b/deploy/conf/vm_environment/network.yml
index 4359202e..420b478a 100644
--- a/deploy/conf/vm_environment/network.yml
+++ b/deploy/conf/vm_environment/network.yml
@@ -14,7 +14,7 @@ bond_mappings: []
provider_net_mappings:
- name: br-provider
network: physnet
- interface: eth10
+ interface: eth1
type: ovs
role:
- controller
diff --git a/deploy/prepare.sh b/deploy/prepare.sh
index c0a05564..38d98e1d 100755
--- a/deploy/prepare.sh
+++ b/deploy/prepare.sh
@@ -89,7 +89,7 @@ function _prepare_python_env() {
sudo apt-get install -y --force-yes libxslt-dev libxml2-dev libvirt-dev build-essential qemu-utils qemu-kvm libvirt-bin virtinst libmysqld-dev
sudo apt-get install -y --force-yes libffi-dev libssl-dev
else
- sudo yum install -y centos-release-openstack-pike
+ sudo yum install -y centos-release-openstack-queens
sudo yum install -y epel-release
sudo yum install openvswitch -y --nogpgcheck
sudo yum install -y git python-devel python-pip figlet sshpass mkisofs bc curl ipmitool