diff --git a/deploy-guide/source/deploymenthost.rst b/deploy-guide/source/deploymenthost.rst
index 5d933247e6..5b630e319a 100644
--- a/deploy-guide/source/deploymenthost.rst
+++ b/deploy-guide/source/deploymenthost.rst
@@ -24,12 +24,13 @@ Install one of the following supported operating systems on the deployment
hosts:
* `Ubuntu server 16.04 (Xenial Xerus) LTS 64-bit `_
+* `Centos 7 64-bit `_
Configure at least one network interface to access the Internet or suitable
local repositories.
-Configure the operating system
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Configure the operating system (Ubuntu)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Install additional software packages and configure Network Time Protocol (NTP).
Before you begin, we recommend upgrading your system packages and kernel.
@@ -40,6 +41,7 @@ Before you begin, we recommend upgrading your system packages and kernel.
# apt-get update
+
#. Upgrade the system packages and kernel:
.. code-block:: shell-session
@@ -58,6 +60,30 @@ Before you begin, we recommend upgrading your system packages and kernel.
#. Configure NTP to synchronize with a suitable time source.
+Configure the operating system (CentOS)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Install additional software packages and configure Network Time Protocol (NTP).
+Before you begin, we recommend upgrading your system packages and kernel.
+
+#. Upgrade the system packages and kernel
+
+ .. code-block:: shell-session
+
+ # yum upgrade
+
+#. Reboot the host.
+
+#. Install additional software packages if they were not installed
+ during the operating system installation:
+
+ .. code-block:: shell-session
+
+ # yum install git centos-release-openstack-newton ntp ntpdate \
+ openssh-server python-devel sudo '@Development Tools'
+
+#. Configure NTP to synchronize with a suitable time source.
+
Configure the network
~~~~~~~~~~~~~~~~~~~~~
diff --git a/deploy-guide/source/overview-requirements.rst b/deploy-guide/source/overview-requirements.rst
index 5cc8130785..22b465d29e 100644
--- a/deploy-guide/source/overview-requirements.rst
+++ b/deploy-guide/source/overview-requirements.rst
@@ -11,9 +11,17 @@ Software requirements
Ensure that all hosts within an OpenStack-Ansible (OSA) environment meet the
following minimum requirements:
-* Ubuntu 16.04 LTS (Xenial Xerus)
+* Ubuntu
-* Linux kernel version ``3.13.0-34-generic`` or later is required.
+ * Ubuntu 16.04 LTS (Xenial Xerus)
+
+ * Linux kernel version ``3.13.0-34-generic`` or later is required.
+
+* CentOS (support is experimental)
+
+ * Centos 7, fully updated.
+
+ * Linux kernel verison ``3.10.0`` or later.
* Secure Shell (SSH) client and server that support public key
authentication
diff --git a/deploy-guide/source/targethosts-prepare.rst b/deploy-guide/source/targethosts-prepare.rst
index 8923daa8d7..7da140eef8 100644
--- a/deploy-guide/source/targethosts-prepare.rst
+++ b/deploy-guide/source/targethosts-prepare.rst
@@ -13,6 +13,7 @@ Install one of the following supported operating systems on the
target host:
* Ubuntu server 16.04 (Xenial Xerus) LTS 64-bit
+* Centos 7 64-bit
Configure at least one network interface to access the Internet or
suitable local repositories.
@@ -25,8 +26,8 @@ installation on target hosts that do not have local (console) access.
We also recommend setting your locale to `en_US.UTF-8`. Other locales might
work, but they are not tested or supported.
-Configure the operating system
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Configure the operating system (Ubuntu)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#. Update package source lists
@@ -72,6 +73,48 @@ Configure the operating system
#. Reboot the host to activate the changes and use the new kernel.
+Configure the operating system (CentOS)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#. Upgrade the system packages and kernel:
+
+ .. code-block:: shell-session
+
+ # yum upgrade
+
+#. Reboot the host.
+
+#. Ensure that the kernel version is ``3.10`` or later:
+
+ .. code-block:: shell-session
+
+ # uname -r
+
+#. Install additional software packages:
+
+ .. code-block:: shell-session
+
+ # yum install epel-release
+ # yum install bridge-utils debootstrap iputils lsof lvm2 \
+ ntp ntpdate openssh-server sudo tcpdump vconfig
+
+#. Add the appropriate kernel modules to the ``/etc/modules`` file to
+ enable VLAN and bond interfaces:
+
+ .. code-block:: shell-session
+
+ # echo 'bonding' >> /etc/modules-load.d/openstack-ansible.conf
+ # echo '8021q' >> /etc/modules-load.d/openstack-ansible.conf
+
+#. Configure Network Time Protocol (NTP) in ``/etc/ntp.conf`` to
+ synchronize with a suitable time source and restart the service:
+
+ .. code-block:: shell-session
+
+ # service ntpd restart
+
+#. Reboot the host to activate the changes and use the new kernel.
+
Deploying Secure Shell (SSH) keys
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/doc/source/developer-docs/quickstart-aio.rst b/doc/source/developer-docs/quickstart-aio.rst
index 5e2adf5c67..c0b3842645 100644
--- a/doc/source/developer-docs/quickstart-aio.rst
+++ b/doc/source/developer-docs/quickstart-aio.rst
@@ -53,9 +53,17 @@ system packages are upgraded and then reboot into the new kernel:
.. code-block:: shell-session
+ ## Ubuntu
# apt-get dist-upgrade
# reboot
+.. code-block:: shell-session
+
+ ## CentOS
+ # yum upgrade
+ # yum install centos-release-openstack-newton git
+ # reboot
+
.. note::
If you are installing with limited connectivity, please review
@@ -91,7 +99,7 @@ version.
.. note::
The |current_release_formal_name| release is only compatible with Ubuntu
- 16.04 (Xenial Xerus).
+ 16.04 (Xenial Xerus) and Centos 7.
By default the scripts deploy all OpenStack services with sensible defaults
for the purpose of a gate check, development or testing system.
diff --git a/releasenotes/notes/Add-CentOS-support-9a63262163dfb678.yaml b/releasenotes/notes/Add-CentOS-support-9a63262163dfb678.yaml
new file mode 100644
index 0000000000..5bfa7bc5b4
--- /dev/null
+++ b/releasenotes/notes/Add-CentOS-support-9a63262163dfb678.yaml
@@ -0,0 +1,4 @@
+---
+features:
+ - There is now experimental support to deploy OpenStack-Ansible on CentOS 7 for both development
+ and test environments.
diff --git a/tests/bootstrap-aio.yml b/tests/bootstrap-aio.yml
index f0f147493a..49ca3ebed6 100644
--- a/tests/bootstrap-aio.yml
+++ b/tests/bootstrap-aio.yml
@@ -62,6 +62,7 @@
- name: neutron.yml.aio
- name: nova.yml.aio
- name: swift.yml.aio
+ sftp_subsystem: "{{ (ansible_pkg_mgr == 'apt') | ternary('sftp /usr/lib/openssh/sftp-server','sftp /usr/libexec/openssh/sftp-server') }}"
sshd:
ListenAddress:
- 0.0.0.0
@@ -93,7 +94,7 @@
PrintLastLog: no
TCPKeepAlive: yes
AcceptEnv: "LANG LC_*"
- Subsystem: "sftp /usr/lib/openssh/sftp-server"
+ Subsystem: "{{ sftp_subsystem }}"
UsePAM: yes
UseDNS: no
X11Forwarding: no
@@ -101,3 +102,6 @@
CompressionLevel: 6
MaxSessions: 100
MaxStartups: "100:100:100"
+ GSSAPIAuthentication: no
+ GSSAPICleanupCredentials: no
+
diff --git a/tests/roles/bootstrap-host/defaults/main.yml b/tests/roles/bootstrap-host/defaults/main.yml
index 29ced5dd60..66700b973c 100644
--- a/tests/roles/bootstrap-host/defaults/main.yml
+++ b/tests/roles/bootstrap-host/defaults/main.yml
@@ -121,6 +121,22 @@ bootstrap_host_encapsulation_interfaces:
friendly_name: "Encapsulation of br-vlan with VXLAN"
#
# Bridges
+bridges:
+ - name: "br-mgmt"
+ ip_addr: "172.29.236.100"
+ netmask: "255.255.252.0"
+ - name: "br-vxlan"
+ ip_addr: "172.29.240.100"
+ netmask: "255.255.252.0"
+ - name: "br-storage"
+ ip_addr: "172.29.244.100"
+ netmask: "255.255.252.0"
+ - name: "br-vlan"
+ ip_addr: "172.29.248.100"
+ alias: "172.29.248.1"
+ veth_peer: "eth12"
+ netmask: "255.255.252.0"
+
bootstrap_host_bridges_interfaces:
br-mgmt:
ports: "{{ bootstrap_host_encapsulation_enabled | bool | ternary ('encap-mgmt', bootstrap_host_bridge_mgmt_ports) }}"
diff --git a/tests/roles/bootstrap-host/tasks/install-apt.yml b/tests/roles/bootstrap-host/tasks/install-apt.yml
deleted file mode 100644
index 9d1e5b21b3..0000000000
--- a/tests/roles/bootstrap-host/tasks/install-apt.yml
+++ /dev/null
@@ -1,77 +0,0 @@
----
-# 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.
-
-- name: Ensure that apt supports HTTPS package sources
- apt:
- name: apt-transport-https
- state: present
- tags:
- - apt-install-prerequisites
-
-- name: Determine the existing Ubuntu repo configuration
- command: 'grep -oP "^deb \K(\[?.*\]?.*ubuntu\S*\/?)(?= {{ ansible_distribution_release }} main)" /etc/apt/sources.list'
- register: ubuntu_repo
- when:
- - bootstrap_host_ubuntu_repo is not defined
- changed_when: false
- tags:
- - find-apt-repo
-
-- name: Determine the existing Ubuntu Security repo configuration
- command: 'grep -oP "^deb \K(\[?.*\]?.*ubuntu\S*\/?)(?= {{ ansible_distribution_release }}-security main)" /etc/apt/sources.list'
- register: ubuntu_security_repo
- when:
- - bootstrap_host_ubuntu_security_repo is not defined
- changed_when: false
- tags:
- - find-apt-security-repo
-
-- name: Set apt repo facts based on discovered information
- set_fact:
- bootstrap_host_ubuntu_repo: "{{ ubuntu_repo.stdout_lines[0] }}"
- bootstrap_host_ubuntu_security_repo: "{{ ubuntu_security_repo.stdout_lines[0] }}"
- when:
- - bootstrap_host_ubuntu_repo is not defined
- - bootstrap_host_ubuntu_security_repo is not defined
- - ubuntu_repo is defined
- - ubuntu_security_repo is defined
-
-- name: Configure apt's sources.list (Ubuntu only)
- template:
- src: apt-sources.list.j2
- dest: /etc/apt/sources.list
- backup: yes
- when:
- - ansible_distribution == 'Ubuntu'
- - bootstrap_host_ubuntu_repo is defined
- - bootstrap_host_ubuntu_security_repo is defined
- register: apt_sources_configure
-
-- name: Update apt-cache
- apt:
- update_cache: yes
- when:
- - apt_sources_configure is defined
- - apt_sources_configure | changed
- tags:
- - apt-cache-update
-
-- name: Remove known problem packages
- apt:
- name: "{{ item }}"
- state: absent
- with_items: "{{ packages_remove }}"
- tags:
- - remove-packages
diff --git a/tests/roles/bootstrap-host/tasks/install_packages.yml b/tests/roles/bootstrap-host/tasks/install_packages.yml
new file mode 100644
index 0000000000..19c18054d3
--- /dev/null
+++ b/tests/roles/bootstrap-host/tasks/install_packages.yml
@@ -0,0 +1,114 @@
+---
+# 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.
+
+# Ubuntu
+- block:
+ - name: Ensure that apt supports HTTPS package sources
+ apt:
+ name: apt-transport-https
+ state: present
+ tags:
+ - apt-install-prerequisites
+
+ - name: Determine the existing Ubuntu repo configuration
+ command: 'grep -oP "^deb \K(\[?.*\]?.*ubuntu\S*\/?)(?= {{ ansible_distribution_release }} main)" /etc/apt/sources.list'
+ register: ubuntu_repo
+ when:
+ - bootstrap_host_ubuntu_repo is not defined
+ changed_when: false
+ tags:
+ - find-apt-repo
+
+ - name: Determine the existing Ubuntu Security repo configuration
+ command: 'grep -oP "^deb \K(\[?.*\]?.*ubuntu\S*\/?)(?= {{ ansible_distribution_release }}-security main)" /etc/apt/sources.list'
+ register: ubuntu_security_repo
+ when:
+ - bootstrap_host_ubuntu_security_repo is not defined
+ changed_when: false
+ tags:
+ - find-apt-security-repo
+
+ - name: Set apt repo facts based on discovered information
+ set_fact:
+ bootstrap_host_ubuntu_repo: "{{ ubuntu_repo.stdout_lines[0] }}"
+ bootstrap_host_ubuntu_security_repo: "{{ ubuntu_security_repo.stdout_lines[0] }}"
+ when:
+ - bootstrap_host_ubuntu_repo is not defined
+ - bootstrap_host_ubuntu_security_repo is not defined
+ - ubuntu_repo is defined
+ - ubuntu_security_repo is defined
+
+ - name: Configure apt's sources.list (Ubuntu only)
+ template:
+ src: apt-sources.list.j2
+ dest: /etc/apt/sources.list
+ backup: yes
+ when:
+ - ansible_distribution == 'Ubuntu'
+ - bootstrap_host_ubuntu_repo is defined
+ - bootstrap_host_ubuntu_security_repo is defined
+ register: apt_sources_configure
+
+ - name: Update apt-cache
+ apt:
+ update_cache: yes
+ when:
+ - apt_sources_configure is defined
+ - apt_sources_configure | changed
+ tags:
+ - apt-cache-update
+
+ when:
+ - ansible_pkg_mgr == 'apt'
+
+# CentOS
+- block:
+ - name: Install RDO package
+ package:
+ name: "{{ rdo_package }}"
+ state: "present"
+ register: install_cloud_rdo_package
+ until: install_cloud_rdo_package | success
+ retries: 5
+ delay: 2
+
+ - name: Install epel package
+ package:
+ name: "{{ epel_package }}"
+ state: "present"
+ register: install_epel_package
+ until: install_epel_package | success
+ retries: 5
+ delay: 2
+
+ when:
+ - ansible_pkg_mgr == 'yum'
+
+- name: Remove known problem packages
+ package:
+ name: "{{ item }}"
+ state: absent
+ with_items: "{{ packages_remove }}"
+ tags:
+ - remove-packages
+
+- name: Install packages
+ package:
+ name: "{{ item }}"
+ state: present
+ with_items: "{{ packages_install }}"
+ tags:
+ - install-packages
+
diff --git a/tests/roles/bootstrap-host/tasks/main.yml b/tests/roles/bootstrap-host/tasks/main.yml
index 4f4f22efdb..3fa16fed4b 100644
--- a/tests/roles/bootstrap-host/tasks/main.yml
+++ b/tests/roles/bootstrap-host/tasks/main.yml
@@ -40,18 +40,7 @@
tags:
- create-directories
-# Configure apt in a known way to reduce the chance of unexpected failures
-- include: install-apt.yml
- when:
- - ansible_pkg_mgr == 'apt'
- tags:
- - install-apt
-
-- name: Install packages
- package:
- name: "{{ item }}"
- state: present
- with_items: "{{ packages_install }}"
+- include: install_packages.yml
tags:
- install-packages
diff --git a/tests/roles/bootstrap-host/tasks/prepare_loopback_cinder.yml b/tests/roles/bootstrap-host/tasks/prepare_loopback_cinder.yml
index 493b23c967..38fd224cc2 100644
--- a/tests/roles/bootstrap-host/tasks/prepare_loopback_cinder.yml
+++ b/tests/roles/bootstrap-host/tasks/prepare_loopback_cinder.yml
@@ -36,7 +36,7 @@
- name: Ensure that rc.local exists
file:
- path: /etc/rc.local
+ path: "{{ rc_local }}"
state: touch
mode: "u+x"
tags:
@@ -48,9 +48,9 @@
# after the boot process completes.
- name: Create loopback devices at boot time
lineinfile:
- dest: /etc/rc.local
+ dest: "{{ rc_local }}"
line: "losetup $(losetup -f) /openstack/cinder.img"
- insertbefore: "^exit 0$"
+ insertbefore: "{{ rc_local_insert_before }}"
tags:
- cinder-rc-config
diff --git a/tests/roles/bootstrap-host/tasks/prepare_loopback_swap.yml b/tests/roles/bootstrap-host/tasks/prepare_loopback_swap.yml
index 42654512c0..56c9ae7471 100644
--- a/tests/roles/bootstrap-host/tasks/prepare_loopback_swap.yml
+++ b/tests/roles/bootstrap-host/tasks/prepare_loopback_swap.yml
@@ -19,7 +19,7 @@
rescue:
- name: Create swap file
- command: "fallocate -l {{ bootstrap_host_swap_size }}G /openstack/swap.img"
+ command: "{{ swap_create_command }}"
args:
creates: /openstack/swap.img
register: swap_create
diff --git a/tests/roles/bootstrap-host/tasks/prepare_networking.yml b/tests/roles/bootstrap-host/tasks/prepare_networking.yml
index f07a77773b..8f43592810 100644
--- a/tests/roles/bootstrap-host/tasks/prepare_networking.yml
+++ b/tests/roles/bootstrap-host/tasks/prepare_networking.yml
@@ -13,41 +13,91 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-- name: Ensure that /etc/network/interfaces.d/ exists
+- name: Ensure that /etc/network/interfaces.d/ exists (Debian)
file:
path: /etc/network/interfaces.d/
state: directory
tags:
- networking-dir-create
+ when:
+ - ansible_pkg_mgr == 'apt'
-- name: Copy AIO network configuration
+- name: Copy AIO network configuration (Debian)
template:
src: osa_interfaces.cfg.j2
dest: /etc/network/interfaces.d/osa_interfaces.cfg
register: osa_interfaces
- when: bootstrap_host_aio_config | bool
+ when:
+ - bootstrap_host_aio_config | bool
+ - ansible_pkg_mgr == 'apt'
tags:
- networking-interfaces-file
-- name: Copy multinode network configuration
+- name: Copy network configuration (RedHat)
+ template:
+ src: "redhat_interface_{{ item.type | default('default') }}.cfg.j2"
+ dest: "/etc/sysconfig/network-scripts/ifcfg-{{ item.name | default('br-mgmt') }}"
+ with_items: "{{ bridges }}"
+ register: network_interfaces_rhel
+ when:
+ - ansible_pkg_mgr == 'yum'
+
+- name: Create alias file when required (RedHat)
+ template:
+ src: "redhat_interface_alias.cfg.j2"
+ dest: "/etc/sysconfig/network-scripts/ifcfg-{{ item.name | default('br-mgmt')}}:0"
+ with_items: "{{ bridges }}"
+ when:
+ - ansible_pkg_mgr == 'yum'
+ - item.alias is defined
+
+- name: Put down post-up script for veth-peer interfaces (RedHat)
+ template:
+ src: "redhat_interface_{{ item[0] | default('default') }}.cfg.j2"
+ dest: "/etc/sysconfig/network-scripts/{{ item[0] }}-veth-{{ item[1].name | default('br-mgmt') }}-2-{{ item[1].veth_peer | default('eth1') }}"
+ mode: "0755"
+ with_nested:
+ - [ "ifup-post", "ifdown-post" ]
+ - "{{ bridges }}"
+ when:
+ - item[1].veth_peer is defined
+ - ansible_pkg_mgr == 'yum'
+
+- name: Ensure the postup/postdown scripts are loaded (RedHat)
+ lineinfile:
+ dest: "/etc/sysconfig/network-scripts/{{ item[0] }}"
+ line: ". /etc/sysconfig/network-scripts/{{ item[0] }}-veth-{{ item[1].name | default('br-mgmt') }}-2-{{ item[1].veth_peer | default('eth1') }}"
+ insertbefore: "^exit 0"
+ with_nested:
+ - [ "ifup-post", "ifdown-post" ]
+ - "{{ bridges }}"
+ when:
+ - item[1].veth_peer is defined
+ - ansible_pkg_mgr == 'yum'
+
+- name: Copy multinode network configuration (Debian)
template:
src: osa_interfaces_multinode.cfg.j2
dest: /etc/network/interfaces.d/osa_interfaces.cfg
register: osa_multinode_interfaces
- when: not bootstrap_host_aio_config | bool
+ when:
+ - not bootstrap_host_aio_config | bool
+ - ansible_pkg_mgr == 'apt'
tags:
- networking-interfaces-file
-- name: Ensure our interfaces.d configuration files are loaded automatically
+- name: Ensure our interfaces.d configuration files are loaded automatically (Debian)
lineinfile:
dest: /etc/network/interfaces
line: "source /etc/network/interfaces.d/*.cfg"
+ when:
+ - ansible_pkg_mgr == 'apt'
tags:
- networking-interfaces-load
- name: Shut down the network interfaces
command: "ifdown {{ item }}"
- when: osa_interfaces | changed or osa_multinode_interfaces | changed
+ when: osa_interfaces | changed or osa_multinode_interfaces | changed or network_interfaces_rhel | changed
with_items:
- br-mgmt
- br-storage
@@ -76,7 +126,7 @@
- name: Start the network interfaces
command: "ifup {{ item }}"
- when: osa_interfaces | changed
+ when: osa_interfaces | changed or network_interfaces_rhel | changed
with_items:
- br-mgmt
- br-storage
@@ -89,4 +139,4 @@
setup:
filter: "ansible_br*"
tags:
- - networking
\ No newline at end of file
+ - networking
diff --git a/tests/roles/bootstrap-host/templates/redhat_interface_alias.cfg.j2 b/tests/roles/bootstrap-host/templates/redhat_interface_alias.cfg.j2
new file mode 100644
index 0000000000..79a04a855c
--- /dev/null
+++ b/tests/roles/bootstrap-host/templates/redhat_interface_alias.cfg.j2
@@ -0,0 +1,5 @@
+# This interface is an alias
+DEVICE={{ item.name | default('br-mgmt') }}:0
+IPADDR={{ item.alias | default('10.1.0.1') }}
+NETMASK={{ item.netmask | default('255.255.255.0') }}
+ONBOOT=yes
diff --git a/tests/roles/bootstrap-host/templates/redhat_interface_default.cfg.j2 b/tests/roles/bootstrap-host/templates/redhat_interface_default.cfg.j2
new file mode 100644
index 0000000000..416bfbe912
--- /dev/null
+++ b/tests/roles/bootstrap-host/templates/redhat_interface_default.cfg.j2
@@ -0,0 +1,11 @@
+{% if item.veth_peer is defined %}
+# This interface has a veth peer
+{% endif %}
+DEVICE={{ item.name | default('br-mgmt') }}
+TYPE=Bridge
+IPADDR={{ item.ip_addr | default('10.1.0.1') }}
+NETMASK={{ item.netmask | default('255.255.255.0') }}
+ONBOOT=yes
+BOOTPROTO=none
+NM_CONTROLLED=no
+DELAY=0
diff --git a/tests/roles/bootstrap-host/templates/redhat_interface_ifdown-post.cfg.j2 b/tests/roles/bootstrap-host/templates/redhat_interface_ifdown-post.cfg.j2
new file mode 100644
index 0000000000..40f147d50b
--- /dev/null
+++ b/tests/roles/bootstrap-host/templates/redhat_interface_ifdown-post.cfg.j2
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+# Copyright 2014, 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.
+
+if [ "${DEVICE}" == "{{ item[1].name | default('br-mgmt') }}" ]; then
+ /usr/sbin/ip link set {{ item[1].name | default('br-mgmt') }}-veth nomaster || true
+ /usr/sbin/ip link del {{ item[1].name | default('br-mgmt') }}-veth || true
+fi
diff --git a/tests/roles/bootstrap-host/templates/redhat_interface_ifup-post.cfg.j2 b/tests/roles/bootstrap-host/templates/redhat_interface_ifup-post.cfg.j2
new file mode 100644
index 0000000000..d28fb9d661
--- /dev/null
+++ b/tests/roles/bootstrap-host/templates/redhat_interface_ifup-post.cfg.j2
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+# Copyright 2014, 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.
+
+if [ "${DEVICE}" == "{{ item[1].name | default('br-mgmt') }}" ]; then
+ # Create veth pair, don't bomb if already exists
+ echo "Creating veth"
+ /usr/sbin/ip link add {{ item[1].name | default('br-mgmt') }}-veth type veth peer name {{ item[1].veth_peer | default('eth0') }} || true
+ # Set both ends UP
+ /usr/sbin/ip link set {{ item[1].name | default('br-mgmt') }}-veth up || true
+ /usr/sbin/ip link set {{ item[1].veth_peer | default('eth0') }} up || true
+ # add eth12 to the bridge
+ /usr/sbin/ip link set {{ item[1].name | default('br-mgmt') }}-veth master {{ item[1].name | default('br-mgmt') }} || true
+fi
diff --git a/tests/roles/bootstrap-host/vars/redhat.yml b/tests/roles/bootstrap-host/vars/redhat.yml
index 19a5be5df8..b40f2d2745 100644
--- a/tests/roles/bootstrap-host/vars/redhat.yml
+++ b/tests/roles/bootstrap-host/vars/redhat.yml
@@ -13,5 +13,28 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+rdo_package: "centos-release-openstack-newton"
+epel_package: "epel-release"
+
packages_install:
+ - '@Development Tools'
+ - bridge-utils
+ - curl
+ - ethtool
+ - git
- iputils
+ - lvm2
+ - python
+ - python-devel
+ - python-ipython
+ - tmux
+ - vconfig
+ - vim
+ - xfsprogs
+
+packages_remove: []
+
+swap_create_command: "dd if=/dev/zero of=/openstack/swap.img bs={{ bootstrap_host_swap_size }}G count=1"
+rc_local: /etc/rc.d/rc.local
+rc_local_insert_before: "^touch /var/lock/subsys/local$"
+
diff --git a/tests/roles/bootstrap-host/vars/ubuntu.yml b/tests/roles/bootstrap-host/vars/ubuntu.yml
index e81bd271d3..2301af5373 100644
--- a/tests/roles/bootstrap-host/vars/ubuntu.yml
+++ b/tests/roles/bootstrap-host/vars/ubuntu.yml
@@ -33,3 +33,7 @@ packages_install:
packages_remove:
- libmysqlclient18
- mysql-common
+
+swap_create_command: "fallocate -l {{ bootstrap_host_swap_size }}G /openstack/swap.img"
+rc_local: /etc/rc.local
+rc_local_insert_before: "^exit 0$"