Update development scripts for control plane deployment

This adds support for deploying a virtualised control plane via Tenks, using
the Kayobe development scripts tenks-deploy.sh and tenks-teardown.sh.

Change-Id: I752455af9eb44cdb0f9921fd0c876fc2dfb50a5c
This commit is contained in:
Mark Goddard 2019-01-29 17:29:29 +00:00
parent 983ce3dae2
commit ab205197b5
6 changed files with 229 additions and 13 deletions

View File

@ -1,5 +1,8 @@
#!/bin/bash
# Save the current shell options.
oldstate=$(set +o)
set -eu
set -o pipefail
@ -19,3 +22,6 @@ function main {
}
main
# Restore previous shell options.
eval "$oldstate"

View File

@ -27,9 +27,6 @@ function config_defaults {
# Path to the kayobe virtual environment.
export KAYOBE_VENV_PATH="${KAYOBE_VENV_PATH:-${HOME}/kayobe-venv}"
# Path to the Tenks virtual environment.
export TENKS_VENV_PATH="${TENKS_VENV_PATH:-${HOME}/tenks-test-venv}"
# Whether to provision a VM for the seed host.
export KAYOBE_SEED_VM_PROVISION=${KAYOBE_SEED_VM_PROVISION:-1}
@ -43,6 +40,14 @@ function config_defaults {
# Additional arguments to pass to kayobe commands.
export KAYOBE_EXTRA_ARGS=${KAYOBE_EXTRA_ARGS:-}
# Path to the Tenks virtual environment.
export TENKS_VENV_PATH="${TENKS_VENV_PATH:-${HOME}/tenks-test-venv}"
# Path to a Tenks YAML configuration file. If unset,
# tenks-deploy-config-overcloud.yml or tenks-deploy-config-compute.yml will
# be used.
export TENKS_CONFIG_PATH=${TENKS_CONFIG_PATH:-}
}
function config_set {
@ -399,6 +404,50 @@ function overcloud_test {
openstack server delete --wait "$name"
}
function write_bifrost_clouds_yaml {
# Generate a clouds.yaml for accessing the Ironic API in Bifrost.
if [[ ! -f ~/.config/openstack/clouds.yaml ]]; then
mkdir -p ~/.config/openstack
cat << EOF > ~/.config/openstack/clouds.yaml
---
clouds:
bifrost:
auth_type: "none"
endpoint: http://192.168.33.5:6385
EOF
fi
}
function run_tenks_playbook {
# Run a Tenks playbook. Arguments:
# $1: The path to the Tenks repo.
# $2: The name of the playbook to run.
local tenks_path="$1"
local tenks_playbook="$2"
local parent="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
if [[ -f "${KOLLA_CONFIG_PATH:-/etc/kolla}/admin-openrc.sh" ]]; then
# Overcloud
default_tenks_config=tenks-deploy-config-compute.yml
source "${KOLLA_CONFIG_PATH:-/etc/kolla}/admin-openrc.sh"
else
# Seed
default_tenks_config=tenks-deploy-config-overcloud.yml
write_bifrost_clouds_yaml
export OS_CLOUD=bifrost
fi
# Allow a specific Tenks config file to be specified via
# $TENKS_CONFIG_PATH.
tenks_config="${TENKS_CONFIG_PATH:-$parent/$default_tenks_config}"
ansible-playbook \
-vvv \
--inventory "$tenks_path/ansible/inventory" \
--extra-vars=@"$tenks_config" \
"$tenks_path/ansible/$tenks_playbook"
}
function tenks_deploy {
set -eu
# Create a simple test Tenks deployment. Assumes that a bridge named
@ -427,15 +476,27 @@ function tenks_deploy {
# vSwitch.
sudo cp --no-clobber "$parent/ovs-vsctl" /usr/bin/ovs-vsctl
source "${KOLLA_CONFIG_PATH:-/etc/kolla}/admin-openrc.sh"
run_tenks_playbook "$tenks_path" deploy.yml
}
pip install python-openstackclient
function tenks_teardown {
set -eu
# Tear down a test Tenks deployment.
# Arguments:
# $1: The path to the Tenks repo.
local tenks_path="$1"
ansible-playbook \
-vvv \
--inventory "$tenks_path/ansible/inventory" \
--extra-vars=@"$parent/tenks-deploy-config.yml" \
"$tenks_path/ansible/deploy.yml"
echo "Tearing down Tenks"
environment_setup
# We don't want to use the Kayobe venv.
deactivate
# Source the Tenks venv.
source ${TENKS_VENV_PATH:-$HOME/tenks-test-venv}/bin/activate
run_tenks_playbook "$tenks_path" teardown.yml
}
# General purpose

View File

@ -0,0 +1,33 @@
---
# This file holds the config given to Tenks when running `tenks-deploy.sh`. It
# assumes the existence of the bridge `breth1`.
node_types:
type0:
memory_mb: 3072
vcpus: 1
volumes:
# There is a minimum disk space capacity requirement of 4GiB when using Ironic Python Agent:
# https://github.com/openstack/ironic-python-agent/blob/master/ironic_python_agent/utils.py#L290
# The CentOS7 cloud image seems to fill a 4GiB disk, so allow 6.
- capacity: 6GiB
physical_networks:
- physnet1
console_log_enabled: true
specs:
- type: type0
count: 1
ironic_config:
resource_class: test-rc
network_interface: noop
node_name_prefix: controller
nova_flavors: []
physnet_mappings:
physnet1: breth1
# No placement service.
wait_for_placement: false

26
dev/tenks-teardown.sh Executable file
View File

@ -0,0 +1,26 @@
#!/bin/bash
set -eu
set -o pipefail
# Simple script to teardown a Tenks cluster. This should be executed from
# within the VM. Arguments:
# $1: The path to the Tenks repo.
PARENT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${PARENT}/functions"
function main {
if [ -z ${1+x} ]; then
echo "Usage: $0 <tenks repo path>"
return 1
fi
tenks_path="$1"
config_init
tenks_teardown "$tenks_path"
}
main "$@"

View File

@ -105,6 +105,94 @@ script::
./dev/overcloud-upgrade.sh
.. _development-automated-seed:
Seed
====
These instructions cover deploying the seed services directly rather than in a
VM. See :ref:`development-automated-seed-vm` for instructions covering
deployment of the seed services in a VM.
Preparation
-----------
Clone the kayobe repository::
git clone https://git.openstack.org/openstack/kayobe.git
Change to the ``kayobe`` directory::
cd kayobe
Clone the ``kayobe-config-dev`` repository to ``config/src/kayobe-config``::
mkdir -p config/src
git clone https://git.openstack.org/openstack/kayobe-config-dev.git config/src/kayobe-config
Inspect the kayobe configuration and make any changes necessary for your
environment.
The default development configuration expects the presence of a bridge
interface on the seed host to carry provisioning traffic. The bridge should be
named ``breth1`` with a single port ``eth1``, and an IP address of
``192.168.33.5/24``. This can be modified by editing
``config/src/kayobe-config/etc/kayobe/inventory/group_vars/seed/network-interfaces``.
Alternatively, this can be added using the following commands::
sudo ip l add breth1 type bridge
sudo ip l set breth1 up
sudo ip a add 192.168.33.5/24 dev breth1
sudo ip l add eth1 type dummy
sudo ip l set eth1 up
sudo ip l set eth1 master breth1
Usage
-----
Run the ``dev/install.sh`` script to install kayobe and its dependencies in a
virtual environment::
./dev/install.sh
Run the ``dev/seed-deploy.sh`` script to deploy the seed services::
./dev/seed-deploy.sh
Upon successful completion of this script, the seed will be active.
Testing
-------
The seed services may be tested using the `Tenks
<https://tenks.readthedocs.io/en/latest/>`__ project to create fake bare metal
nodes.
Clone the tenks repository::
git clone https://git.openstack.org/openstack/tenks.git
Edit the Tenks configuration file, ``dev/tenks-deploy-config-seed.yml``.
Run the ``dev/tenks-deploy.sh`` script to deploy Tenks::
./dev/tenks-deploy.sh ./tenks
Check that Tenks has created a VM called ``controller0``::
sudo virsh list --all
Verify that VirtualBMC is running::
~/tenks-venv/bin/vbmc list
The machines and networking created by Tenks can be cleaned up via
``dev/tenks-teardown.sh``::
./dev/tenks-teardown.sh ./tenks
.. _development-automated-seed-hypervisor:
Seed Hypervisor
===============
@ -149,18 +237,20 @@ hypervisor::
Upon successful completion of this script, the seed hypervisor will be active.
.. _development-automated-seed-vm:
Seed VM
=======
The seed VM should be deployed on a system configured as a libvirt/KVM
hypervisor, using the kayobe seed hypervisor support or otherwise.
hypervisor, using :ref:`development-automated-seed-hypervisor` or otherwise.
Preparation
-----------
The following commands should be executed on the seed hypervisor.
Change the current directory to the kayobe repository::
Clone the kayobe repository::
git clone https://git.openstack.org/openstack/kayobe.git
@ -178,7 +268,7 @@ Inspect the kayobe configuration and make any changes necessary for your
environment.
Usage
=====
-----
Run the ``dev/install.sh`` script to install kayobe and its dependencies in a
virtual environment::