Add functional test for k8s ironic
This patch adds functional test for k8s ironic, and modify utility scripts for gate jobs. Partial-Implements: blueprint magnum-baremetal-full-support Change-Id: I8d68711af9d90e4a52901765e7daf97bc2851125 Co-Authored-By: Spyros Trigazis <strigazi@gmail.com> Co-Authored-By: OTSUKA, Yuanying <yuanying@fraction.jp>
This commit is contained in:
parent
08531c1702
commit
83e0d8d32b
|
@ -67,9 +67,7 @@ else
|
||||||
MAGNUM_BIN_DIR=$(get_python_exec_prefix)
|
MAGNUM_BIN_DIR=$(get_python_exec_prefix)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if is_service_enabled ir-api; then
|
MAGNUM_CONFIGURE_IPTABLES=${MAGNUM_CONFIGURE_IPTABLES:-True}
|
||||||
MAGNUM_CONFIGURE_IPTABLES=${MAGNUM_CONFIGURE_IPTABLES:-False}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Functions
|
# Functions
|
||||||
# ---------
|
# ---------
|
||||||
|
@ -270,8 +268,28 @@ function magnum_register_image {
|
||||||
if [ ! -z "$coreos" ]; then
|
if [ ! -z "$coreos" ]; then
|
||||||
magnum_image_property=$magnum_image_property"coreos"
|
magnum_image_property=$magnum_image_property"coreos"
|
||||||
fi
|
fi
|
||||||
|
# os_distro property for fedora ironic image
|
||||||
|
local fedora_ironic="$(echo $MAGNUM_GUEST_IMAGE_URL | grep -i "ironic" \
|
||||||
|
| grep -io "fedora" || true;)"
|
||||||
|
if [ ! -z "$fedora_ironic" ]; then
|
||||||
|
magnum_image_property=$magnum_image_property"fedora"
|
||||||
|
fi
|
||||||
|
|
||||||
openstack --os-url $GLANCE_SERVICE_PROTOCOL://$GLANCE_HOSTPORT --os-image-api-version 1 image set $(basename "$MAGNUM_GUEST_IMAGE_URL" ".qcow2") $magnum_image_property
|
# get the image name
|
||||||
|
local image_filename=$(basename "$MAGNUM_GUEST_IMAGE_URL")
|
||||||
|
local image_name=""
|
||||||
|
for extension in "tgz" "img" "qcow2" "iso" "vhd" "vhdx" "tar.gz" "img.gz" "img.bz2" "vhd.gz" "vhdx.gz"
|
||||||
|
do
|
||||||
|
if [ $(expr match "${image_filename}" ".*\.${extension}$") -ne 0 ]; then
|
||||||
|
image_name=$(basename "$image_filename" ".${extension}")
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [ -z ${image_name} ]; then
|
||||||
|
echo "Unknown image extension in $image_filename, supported extensions: tgz, img, qcow2, iso, vhd, vhdx, tar.gz, img.gz, img.bz2, vhd.gz, vhdx.gz"; false
|
||||||
|
fi
|
||||||
|
|
||||||
|
openstack --os-url $GLANCE_SERVICE_PROTOCOL://$GLANCE_HOSTPORT --os-image-api-version 1 image set $image_name $magnum_image_property
|
||||||
}
|
}
|
||||||
|
|
||||||
# install_magnumclient() - Collect source and prepare
|
# install_magnumclient() - Collect source and prepare
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
|
|
||||||
coe=$1
|
coe=$1
|
||||||
|
special=$2
|
||||||
|
|
||||||
export PROJECTS="openstack/barbican $PROJECTS"
|
export PROJECTS="openstack/barbican $PROJECTS"
|
||||||
export DEVSTACK_LOCAL_CONFIG="enable_plugin magnum git://git.openstack.org/openstack/magnum"
|
export DEVSTACK_LOCAL_CONFIG="enable_plugin magnum git://git.openstack.org/openstack/magnum"
|
||||||
|
@ -25,6 +26,43 @@ if [ "$coe" = "mesos" ]; then
|
||||||
echo "MAGNUM_GUEST_IMAGE_URL=https://fedorapeople.org/groups/magnum/ubuntu-14.04.3-mesos-0.25.0.qcow2" >> $BASE/new/devstack/localrc
|
echo "MAGNUM_GUEST_IMAGE_URL=https://fedorapeople.org/groups/magnum/ubuntu-14.04.3-mesos-0.25.0.qcow2" >> $BASE/new/devstack/localrc
|
||||||
elif [ "$coe" = "k8s-coreos" ]; then
|
elif [ "$coe" = "k8s-coreos" ]; then
|
||||||
echo "MAGNUM_GUEST_IMAGE_URL=http://beta.release.core-os.net/amd64-usr/current/coreos_production_openstack_image.img.bz2" >> $BASE/new/devstack/localrc
|
echo "MAGNUM_GUEST_IMAGE_URL=http://beta.release.core-os.net/amd64-usr/current/coreos_production_openstack_image.img.bz2" >> $BASE/new/devstack/localrc
|
||||||
|
elif [ "${coe}${special}" = "k8s-ironic" ]; then
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"MAGNUM_GUEST_IMAGE_URL='https://fedorapeople.org/groups/magnum/fedora-23-kubernetes-ironic.tar.gz'"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"MAGNUM_IMAGE_NAME='fedora-23-kubernetes-ironic'"
|
||||||
|
|
||||||
|
export DEVSTACK_GATE_VIRT_DRIVER="ironic"
|
||||||
|
# NOTE(yuanying): Current implementation requires only 1 subnet under network
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"IP_VERSION=4"
|
||||||
|
# NOTE(strigazi) keep cinder
|
||||||
|
# export DEVSTACK_LOCAL_CONFIG+=$'\n'"disable_service cinder c-sch c-api c-vol"
|
||||||
|
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin ironic git://git.openstack.org/openstack/ironic"
|
||||||
|
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_DEPLOY_DRIVER=pxe_ssh"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_BAREMETAL_BASIC_OPS=True"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_LOG_DIR=/opt/stack/new/ironic-bm-logs"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"DEFAULT_INSTANCE_TYPE=baremetal"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"BUILD_TIMEOUT=600"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_CALLBACK_TIMEOUT=600"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"Q_AGENT=openvswitch"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"Q_ML2_TENANT_NETWORK_TYPE=vxlan"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_BUILD_DEPLOY_RAMDISK=False"
|
||||||
|
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"SWIFT_ENABLE_TEMPURLS=True"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"SWIFT_TEMPURL_KEY=password"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"SWIFT_HASH=password"
|
||||||
|
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_ENABLED_DRIVERS=fake,agent_ssh,agent_ipmitool,pxe_ssh,pxe_ipmitool"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"VOLUME_BACKING_FILE_SIZE=24G"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"FORCE_CONFIG_DRIVE=True"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_DEPLOY_DRIVER_ISCSI_WITH_IPA=True"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_RAMDISK_TYPE=tinyipa"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_IPXE_ENABLED=True"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_COUNT=2"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_SSH_PORT=22"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_SPECS_RAM=1024"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_SPECS_DISK=10"
|
||||||
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_EPHEMERAL_DISK=5"
|
||||||
else
|
else
|
||||||
export DEVSTACK_LOCAL_CONFIG+=$'\n'"MAGNUM_GUEST_IMAGE_URL='http://tarballs.openstack.org/magnum/images/fedora-atomic-f23-dib.qcow2'"
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"MAGNUM_GUEST_IMAGE_URL='http://tarballs.openstack.org/magnum/images/fedora-atomic-f23-dib.qcow2'"
|
||||||
export DEVSTACK_LOCAL_CONFIG+=$'\n'"MAGNUM_IMAGE_NAME='fedora-atomic-f23-dib'"
|
export DEVSTACK_LOCAL_CONFIG+=$'\n'"MAGNUM_IMAGE_NAME='fedora-atomic-f23-dib'"
|
||||||
|
|
|
@ -28,12 +28,27 @@ function create_test_data {
|
||||||
# a baymodel, bay and a pod
|
# a baymodel, bay and a pod
|
||||||
|
|
||||||
coe=$1
|
coe=$1
|
||||||
|
special=$2
|
||||||
if [ $coe == 'mesos' ]; then
|
if [ $coe == 'mesos' ]; then
|
||||||
local image_name="ubuntu-14.04"
|
local image_name="ubuntu-14.04"
|
||||||
|
local container_format="bare"
|
||||||
elif [ $coe == 'k8s-coreos' ]; then
|
elif [ $coe == 'k8s-coreos' ]; then
|
||||||
local image_name="coreos"
|
local image_name="coreos"
|
||||||
|
local container_format="bare"
|
||||||
|
elif [ "${coe}${special}" == 'k8s-ironic' ]; then
|
||||||
|
local bm_flavor_id=$(openstack flavor show baremetal -f value -c id)
|
||||||
|
die_if_not_set $LINENO bm_flavor_id "Failed to get id of baremetal flavor"
|
||||||
|
|
||||||
|
# NOTE(yuanying): Workaround fix for ironic issue
|
||||||
|
# cf. https://bugs.launchpad.net/ironic/+bug/1596421
|
||||||
|
echo "alter table ironic.nodes modify instance_info LONGTEXT;" | mysql -uroot -p${MYSQL_PASSWORD} ironic
|
||||||
|
# NOTE(yuanying): Ironic instances need to connect to Internet
|
||||||
|
neutron subnet-update private-subnet --dns-nameserver 8.8.8.8
|
||||||
|
|
||||||
|
local container_format="ami"
|
||||||
else
|
else
|
||||||
local image_name="atomic"
|
local image_name="atomic"
|
||||||
|
local container_format="bare"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# if we have the MAGNUM_IMAGE_NAME setting, use it instead
|
# if we have the MAGNUM_IMAGE_NAME setting, use it instead
|
||||||
|
@ -42,7 +57,12 @@ function create_test_data {
|
||||||
image_name=${MAGNUM_IMAGE_NAME:-$image_name}
|
image_name=${MAGNUM_IMAGE_NAME:-$image_name}
|
||||||
|
|
||||||
export NIC_ID=$(neutron net-show public | awk '/ id /{print $4}')
|
export NIC_ID=$(neutron net-show public | awk '/ id /{print $4}')
|
||||||
export IMAGE_ID=$(glance --os-image-api-version 1 image-list | grep -i $image_name | awk '{print $2}')
|
|
||||||
|
# We need to filter by container_format to get the appropriate
|
||||||
|
# image. Specifically, when we provide kernel and ramdisk images
|
||||||
|
# we need to select the 'ami' image. Otherwise, when we have
|
||||||
|
# qcow2 images, the format is 'bare'.
|
||||||
|
export IMAGE_ID=$(glance --os-image-api-version 1 image-list | grep $container_format | grep -i $image_name | awk '{print $2}')
|
||||||
|
|
||||||
# pass the appropriate variables via a config file
|
# pass the appropriate variables via a config file
|
||||||
CREDS_FILE=$MAGNUM_DIR/functional_creds.conf
|
CREDS_FILE=$MAGNUM_DIR/functional_creds.conf
|
||||||
|
@ -65,8 +85,8 @@ region_name = $OS_REGION_NAME
|
||||||
image_id = $IMAGE_ID
|
image_id = $IMAGE_ID
|
||||||
nic_id = $NIC_ID
|
nic_id = $NIC_ID
|
||||||
keypair_id = default
|
keypair_id = default
|
||||||
flavor_id = s1.magnum
|
flavor_id = ${bm_flavor_id:-s1.magnum}
|
||||||
master_flavor_id = m1.magnum
|
master_flavor_id = ${bm_flavor_id:-m1.magnum}
|
||||||
copy_logs = true
|
copy_logs = true
|
||||||
csr_location = $MAGNUM_DIR/default.csr
|
csr_location = $MAGNUM_DIR/default.csr
|
||||||
dns_nameserver = 8.8.8.8
|
dns_nameserver = 8.8.8.8
|
||||||
|
@ -175,6 +195,7 @@ echo "Running magnum functional test suite for $1"
|
||||||
# For api, we will run tempest tests
|
# For api, we will run tempest tests
|
||||||
|
|
||||||
coe=$1
|
coe=$1
|
||||||
|
special=$2
|
||||||
|
|
||||||
if [[ "api" == "$coe" ]]; then
|
if [[ "api" == "$coe" ]]; then
|
||||||
# Import devstack functions 'iniset', 'iniget' and 'trueorfalse'
|
# Import devstack functions 'iniset', 'iniget' and 'trueorfalse'
|
||||||
|
@ -224,9 +245,10 @@ else
|
||||||
|
|
||||||
add_flavor
|
add_flavor
|
||||||
|
|
||||||
create_test_data $coe
|
create_test_data $coe $special
|
||||||
|
|
||||||
sudo -E -H -u jenkins tox -e functional-"$coe" -- --concurrency=1
|
target="${coe}${special}"
|
||||||
|
sudo -E -H -u jenkins tox -e functional-"$target" -- --concurrency=1
|
||||||
fi
|
fi
|
||||||
EXIT_CODE=$?
|
EXIT_CODE=$?
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
from magnum.tests.functional import python_client_base as base
|
||||||
|
|
||||||
|
|
||||||
|
class TestFedoraKubernetesIronicAPIs(base.BaseK8sTest):
|
||||||
|
bay_complete_timeout = 3200
|
||||||
|
baymodel_kwargs = {
|
||||||
|
"tls_disabled": True,
|
||||||
|
"network_driver": 'flannel',
|
||||||
|
"volume_driver": None,
|
||||||
|
"fixed_subnet": 'private-subnet',
|
||||||
|
"server_type": 'bm',
|
||||||
|
}
|
|
@ -138,6 +138,8 @@ class BaseMagnumClient(base.BaseMagnumTest):
|
||||||
volume_driver = kwargs.pop('volume_driver', 'cinder')
|
volume_driver = kwargs.pop('volume_driver', 'cinder')
|
||||||
labels = kwargs.pop('labels', {"K1": "V1", "K2": "V2"})
|
labels = kwargs.pop('labels', {"K1": "V1", "K2": "V2"})
|
||||||
tls_disabled = kwargs.pop('tls_disabled', False)
|
tls_disabled = kwargs.pop('tls_disabled', False)
|
||||||
|
fixed_subnet = kwargs.pop('fixed_subnet', None)
|
||||||
|
server_type = kwargs.pop('server_type', 'vm')
|
||||||
|
|
||||||
baymodel = cls.cs.baymodels.create(
|
baymodel = cls.cs.baymodels.create(
|
||||||
name=name,
|
name=name,
|
||||||
|
@ -153,6 +155,8 @@ class BaseMagnumClient(base.BaseMagnumTest):
|
||||||
coe=coe,
|
coe=coe,
|
||||||
labels=labels,
|
labels=labels,
|
||||||
tls_disabled=tls_disabled,
|
tls_disabled=tls_disabled,
|
||||||
|
fixed_subnet=fixed_subnet,
|
||||||
|
server_type=server_type,
|
||||||
**kwargs)
|
**kwargs)
|
||||||
return baymodel
|
return baymodel
|
||||||
|
|
||||||
|
@ -200,7 +204,7 @@ class BaseMagnumClient(base.BaseMagnumTest):
|
||||||
bay,
|
bay,
|
||||||
[None, "CREATE_IN_PROGRESS"],
|
[None, "CREATE_IN_PROGRESS"],
|
||||||
["CREATE_FAILED", "CREATE_COMPLETE"],
|
["CREATE_FAILED", "CREATE_COMPLETE"],
|
||||||
timeout=1800
|
timeout=self.bay_complete_timeout
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.cs.bays.get(bay.uuid).status == 'CREATE_FAILED':
|
if self.cs.bays.get(bay.uuid).status == 'CREATE_FAILED':
|
||||||
|
@ -231,6 +235,8 @@ extendedKeyUsage = clientAuth
|
||||||
cert_file = None
|
cert_file = None
|
||||||
ca_file = None
|
ca_file = None
|
||||||
|
|
||||||
|
bay_complete_timeout = 1800
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUpClass(cls):
|
def setUpClass(cls):
|
||||||
super(BayTest, cls).setUpClass()
|
super(BayTest, cls).setUpClass()
|
||||||
|
|
10
tox.ini
10
tox.ini
|
@ -46,6 +46,16 @@ commands =
|
||||||
find . -type f -name "*.pyc" -delete
|
find . -type f -name "*.pyc" -delete
|
||||||
bash tools/pretty_tox.sh '{posargs}'
|
bash tools/pretty_tox.sh '{posargs}'
|
||||||
|
|
||||||
|
[testenv:functional-k8s-ironic]
|
||||||
|
sitepackages = True
|
||||||
|
setenv = OS_TEST_PATH=./magnum/tests/functional/k8s_ironic
|
||||||
|
OS_TEST_TIMEOUT=7200
|
||||||
|
deps =
|
||||||
|
{[testenv]deps}
|
||||||
|
commands =
|
||||||
|
find . -type f -name "*.pyc" -delete
|
||||||
|
bash tools/pretty_tox.sh '{posargs}'
|
||||||
|
|
||||||
[testenv:functional-k8s-coreos]
|
[testenv:functional-k8s-coreos]
|
||||||
sitepackages = True
|
sitepackages = True
|
||||||
setenv = OS_TEST_PATH=./magnum/tests/functional/k8s_coreos
|
setenv = OS_TEST_PATH=./magnum/tests/functional/k8s_coreos
|
||||||
|
|
Loading…
Reference in New Issue