Add CI job for ironic
Adds four new CI jobs for testing centos/ubuntu binary/source deploys with ironic enabled. These are run only when there are changes to the ironic role. Performs some simple testing by creating a node using the fake-hardware hardware type and creating a server. Change-Id: Ie669e57ce2af53257b4ca05f45193cb73f48827a Depends-On: https://review.opendev.org/664011
This commit is contained in:
parent
860f4ea605
commit
845040ad3f
@ -7,6 +7,8 @@ copy_logs() {
|
|||||||
|
|
||||||
cp -rnL /var/lib/docker/volumes/kolla_logs/_data/* ${LOG_DIR}/kolla/
|
cp -rnL /var/lib/docker/volumes/kolla_logs/_data/* ${LOG_DIR}/kolla/
|
||||||
cp -rnL /etc/kolla/* ${LOG_DIR}/kolla_configs/
|
cp -rnL /etc/kolla/* ${LOG_DIR}/kolla_configs/
|
||||||
|
# Don't save the IPA images.
|
||||||
|
rm ${LOG_DIR}/kolla_configs/config/ironic/ironic-agent.{kernel,initramfs}
|
||||||
cp -rvnL /var/log/* ${LOG_DIR}/system_logs/
|
cp -rvnL /var/log/* ${LOG_DIR}/system_logs/
|
||||||
|
|
||||||
|
|
||||||
@ -62,6 +64,12 @@ copy_logs() {
|
|||||||
docker exec haproxy bash -c 'echo show stat | socat stdio /var/lib/kolla/haproxy/haproxy.sock' > ${LOG_DIR}/kolla/haproxy/stats.txt
|
docker exec haproxy bash -c 'echo show stat | socat stdio /var/lib/kolla/haproxy/haproxy.sock' > ${LOG_DIR}/kolla/haproxy/stats.txt
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# FIXME: remove
|
||||||
|
if [[ $(docker ps -a --filter name=ironic_inspector --format "{{.Names}}") ]]; then
|
||||||
|
mkdir -p ${LOG_DIR}/kolla/ironic-inspector
|
||||||
|
ls -lR /var/lib/docker/volumes/ironic_inspector_dhcp_hosts > ${LOG_DIR}/kolla/ironic-inspector/var-lib-ls.txt
|
||||||
|
fi
|
||||||
|
|
||||||
for container in $(docker ps -a --format "{{.Names}}"); do
|
for container in $(docker ps -a --format "{{.Names}}"); do
|
||||||
docker logs --tail all ${container} &> ${LOG_DIR}/docker_logs/${container}.txt
|
docker logs --tail all ${container} &> ${LOG_DIR}/docker_logs/${container}.txt
|
||||||
done
|
done
|
||||||
|
@ -98,8 +98,29 @@
|
|||||||
- src: "tests/templates/bifrost-dib-overrides.j2"
|
- src: "tests/templates/bifrost-dib-overrides.j2"
|
||||||
dest: /etc/kolla/config/bifrost/dib.yml
|
dest: /etc/kolla/config/bifrost/dib.yml
|
||||||
when: scenario == "bifrost"
|
when: scenario == "bifrost"
|
||||||
|
- src: "tests/templates/ironic-overrides.j2"
|
||||||
|
dest: /etc/kolla/config/ironic.conf
|
||||||
|
when: "{{ scenario == 'ironic' }}"
|
||||||
when: item.when | default(true)
|
when: item.when | default(true)
|
||||||
|
|
||||||
|
- block:
|
||||||
|
- name: ensure ironic config directory exists
|
||||||
|
file:
|
||||||
|
path: /etc/kolla/config/ironic
|
||||||
|
state: directory
|
||||||
|
mode: 0777
|
||||||
|
|
||||||
|
- name: download Ironic Python Agent (IPA) images
|
||||||
|
get_url:
|
||||||
|
url: "https://tarballs.openstack.org/ironic-python-agent/tinyipa/files/{{ item.src }}"
|
||||||
|
dest: "/etc/kolla/config/ironic/{{ item.dest }}"
|
||||||
|
with_items:
|
||||||
|
- src: "tinyipa-{{ zuul.branch | replace('/', '-') }}.gz"
|
||||||
|
dest: ironic-agent.initramfs
|
||||||
|
- src: "tinyipa-{{ zuul.branch | replace('/', '-') }}.vmlinuz"
|
||||||
|
dest: ironic-agent.kernel
|
||||||
|
when: scenario == "ironic"
|
||||||
|
|
||||||
- name: install kolla-ansible requirements
|
- name: install kolla-ansible requirements
|
||||||
pip:
|
pip:
|
||||||
requirements: "{{ kolla_ansible_src_dir }}/requirements.txt"
|
requirements: "{{ kolla_ansible_src_dir }}/requirements.txt"
|
||||||
@ -173,7 +194,7 @@
|
|||||||
chdir: "{{ kolla_ansible_src_dir }}"
|
chdir: "{{ kolla_ansible_src_dir }}"
|
||||||
environment:
|
environment:
|
||||||
ACTION: "{{ scenario }}"
|
ACTION: "{{ scenario }}"
|
||||||
when: scenario not in ['scenario_nfv']
|
when: scenario not in ['ironic', 'scenario_nfv']
|
||||||
|
|
||||||
- name: Run test-scenario-nfv.sh script
|
- name: Run test-scenario-nfv.sh script
|
||||||
script:
|
script:
|
||||||
@ -182,6 +203,13 @@
|
|||||||
chdir: "{{ kolla_ansible_src_dir }}"
|
chdir: "{{ kolla_ansible_src_dir }}"
|
||||||
when: scenario == "scenario_nfv"
|
when: scenario == "scenario_nfv"
|
||||||
|
|
||||||
|
- name: Run test-ironic.sh script
|
||||||
|
script:
|
||||||
|
cmd: test-ironic.sh
|
||||||
|
executable: /bin/bash
|
||||||
|
chdir: "{{ kolla_ansible_src_dir }}"
|
||||||
|
when: scenario == "ironic"
|
||||||
|
|
||||||
- name: Run reconfigure.sh script
|
- name: Run reconfigure.sh script
|
||||||
script:
|
script:
|
||||||
cmd: reconfigure.sh
|
cmd: reconfigure.sh
|
||||||
|
@ -67,3 +67,8 @@ enable_mistral: "yes"
|
|||||||
enable_redis: "yes"
|
enable_redis: "yes"
|
||||||
enable_barbican: "yes"
|
enable_barbican: "yes"
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if scenario == "ironic" %}
|
||||||
|
enable_ironic: "yes"
|
||||||
|
ironic_dnsmasq_dhcp_range: "10.42.0.2,10.42.0.254"
|
||||||
|
{% endif %}
|
||||||
|
19
tests/templates/ironic-overrides.j2
Normal file
19
tests/templates/ironic-overrides.j2
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
# Enable all fake hardware types and interfaces.
|
||||||
|
enabled_hardware_types = fake-hardware
|
||||||
|
enabled_boot_interfaces = fake
|
||||||
|
enabled_console_interfaces = ipmitool-socat,no-console
|
||||||
|
enabled_deploy_interfaces = fake
|
||||||
|
enabled_inspect_interfaces = inspector,no-inspect
|
||||||
|
enabled_management_interfaces = fake
|
||||||
|
enabled_network_interfaces = noop,flat,neutron
|
||||||
|
default_network_interface = neutron
|
||||||
|
enabled_power_interfaces = fake
|
||||||
|
enabled_raid_interfaces = agent,no-raid
|
||||||
|
default_raid_interface = no-raid
|
||||||
|
enabled_rescue_interfaces = fake
|
||||||
|
enabled_vendor_interfaces = no-vendor
|
||||||
|
|
||||||
|
[neutron]
|
||||||
|
cleaning_network = public1
|
||||||
|
provisioning_network = public1
|
138
tests/test-ironic.sh
Executable file
138
tests/test-ironic.sh
Executable file
@ -0,0 +1,138 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -o xtrace
|
||||||
|
set -o errexit
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
# Enable unbuffered output for Ansible in Jenkins.
|
||||||
|
export PYTHONUNBUFFERED=1
|
||||||
|
|
||||||
|
# Adapted from the function of the same name in the ironic devstack plugin.
|
||||||
|
function wait_for_placement_resources {
|
||||||
|
# After nodes have been enrolled, we need to wait for both ironic and
|
||||||
|
# nova's periodic tasks to populate the resource tracker with available
|
||||||
|
# nodes and resources. Wait up to 2 minutes for a given resource before
|
||||||
|
# timing out.
|
||||||
|
local expected_count=1
|
||||||
|
local resource_class="RC0"
|
||||||
|
|
||||||
|
curl -L -o jq https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64
|
||||||
|
chmod +x jq
|
||||||
|
|
||||||
|
# TODO(mgoddard): switch to Placement OSC plugin, once it exists
|
||||||
|
local token
|
||||||
|
token=$(openstack token issue -f value -c id)
|
||||||
|
local endpoint
|
||||||
|
endpoint=$(openstack endpoint list --service placement --interface public -f value -c URL)
|
||||||
|
if [[ -z $endpoint ]]; then
|
||||||
|
echo "Cannot find Placement API endpoint"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local i
|
||||||
|
local count
|
||||||
|
echo "Waiting 2 minutes for Nova resource tracker to pick up $expected_count nodes"
|
||||||
|
for i in $(seq 1 120); do
|
||||||
|
# Fetch provider UUIDs from Placement
|
||||||
|
local providers
|
||||||
|
providers=$(curl -sH "X-Auth-Token: $token" $endpoint/resource_providers \
|
||||||
|
| ./jq -r '.resource_providers[].uuid')
|
||||||
|
|
||||||
|
local p
|
||||||
|
# Total count of the resource class, has to be equal to nodes count
|
||||||
|
count=0
|
||||||
|
for p in $providers; do
|
||||||
|
local amount
|
||||||
|
# A resource class inventory record looks something like
|
||||||
|
# {"max_unit": 1, "min_unit": 1, "step_size": 1, "reserved": 0, "total": 1, "allocation_ratio": 1}
|
||||||
|
# Subtract reserved from total (defaulting both to 0)
|
||||||
|
amount=$(curl -sH "X-Auth-Token: $token" $endpoint/resource_providers/$p/inventories \
|
||||||
|
| ./jq ".inventories.CUSTOM_$resource_class as \$cls
|
||||||
|
| (\$cls.total // 0) - (\$cls.reserved // 0)")
|
||||||
|
if [ $amount -gt 0 ]; then
|
||||||
|
count=$(( count + $amount ))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $count -ge $expected_count ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Timed out waiting for Nova to track $expected_count nodes"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function create_resources {
|
||||||
|
# Create a bare metal node and port.
|
||||||
|
openstack baremetal node create \
|
||||||
|
--name node-0 \
|
||||||
|
--driver fake-hardware \
|
||||||
|
--network-interface noop \
|
||||||
|
--property cpu_arch=x86_64 \
|
||||||
|
--resource-class rc0
|
||||||
|
node_uuid=$(openstack baremetal node show node-0 -f value -c uuid)
|
||||||
|
openstack baremetal port create \
|
||||||
|
00:11:22:33:44:55 \
|
||||||
|
--node $node_uuid
|
||||||
|
openstack baremetal node power off node-0
|
||||||
|
openstack baremetal node manage node-0 --wait
|
||||||
|
openstack baremetal node provide node-0 --wait
|
||||||
|
|
||||||
|
# Create a bare metal flavor in nova.
|
||||||
|
openstack flavor create \
|
||||||
|
baremetal \
|
||||||
|
--vcpus 1 \
|
||||||
|
--ram 1024 \
|
||||||
|
--disk 10 \
|
||||||
|
--property resources:CUSTOM_RC0=1 \
|
||||||
|
--property resources:VCPU=0 \
|
||||||
|
--property resources:MEMORY_MB=0 \
|
||||||
|
--property resources:DISK_GB=0 \
|
||||||
|
--public
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_ironic_logged {
|
||||||
|
# Assumes init-runonce has been executed.
|
||||||
|
. /etc/kolla/admin-openrc.sh
|
||||||
|
. ~/ironic-venv/bin/activate
|
||||||
|
|
||||||
|
# Smoke test ironic API.
|
||||||
|
if ! openstack baremetal driver list | grep fake-hardware; then
|
||||||
|
echo "No active conductors with fake-hardware driver"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
openstack baremetal node list
|
||||||
|
openstack baremetal port list
|
||||||
|
|
||||||
|
create_resources
|
||||||
|
wait_for_placement_resources
|
||||||
|
|
||||||
|
echo "TESTING: Server creation"
|
||||||
|
openstack server create --wait --image cirros --flavor baremetal --key-name mykey --network demo-net kolla_boot_test
|
||||||
|
openstack --debug server list
|
||||||
|
# If the status is not ACTIVE, print info and exit 1
|
||||||
|
if [[ $(openstack server show kolla_boot_test -f value -c status) != "ACTIVE" ]]; then
|
||||||
|
echo "FAILED: Instance is not active"
|
||||||
|
openstack --debug server show kolla_boot_test
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
echo "SUCCESS: Server creation"
|
||||||
|
|
||||||
|
echo "TESTING: Server deletion"
|
||||||
|
openstack server delete --wait kolla_boot_test
|
||||||
|
echo "SUCCESS: Server deletion"
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_ironic {
|
||||||
|
echo "Testing Ironic"
|
||||||
|
if ! test_ironic_logged > /tmp/logs/ansible/test-ironic 2>&1; then
|
||||||
|
echo "Testing Ironic failed. See ansible/test-ironic for details"
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
echo "Successfully tested Ironic. See ansible/test-ironic for details"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
test_ironic
|
@ -6,7 +6,6 @@ set -o errexit
|
|||||||
# Enable unbuffered output for Ansible in Jenkins.
|
# Enable unbuffered output for Ansible in Jenkins.
|
||||||
export PYTHONUNBUFFERED=1
|
export PYTHONUNBUFFERED=1
|
||||||
|
|
||||||
|
|
||||||
function test_openstack_logged {
|
function test_openstack_logged {
|
||||||
. /etc/kolla/admin-openrc.sh
|
. /etc/kolla/admin-openrc.sh
|
||||||
|
|
||||||
|
@ -42,6 +42,9 @@ EOF
|
|||||||
if [[ $ACTION == "scenario_nfv" ]]; then
|
if [[ $ACTION == "scenario_nfv" ]]; then
|
||||||
GATE_IMAGES+=",tacker,mistral,redis,barbican"
|
GATE_IMAGES+=",tacker,mistral,redis,barbican"
|
||||||
fi
|
fi
|
||||||
|
if [[ $ACTION == "ironic" ]]; then
|
||||||
|
GATE_IMAGES+=",dnsmasq,ironic,iscsid"
|
||||||
|
fi
|
||||||
|
|
||||||
cat <<EOF | sudo tee /etc/kolla/kolla-build.conf
|
cat <<EOF | sudo tee /etc/kolla/kolla-build.conf
|
||||||
[DEFAULT]
|
[DEFAULT]
|
||||||
@ -93,6 +96,13 @@ function setup_ansible {
|
|||||||
if [[ $ACTION == "zun" ]]; then
|
if [[ $ACTION == "zun" ]]; then
|
||||||
sudo -H pip install -U "python-zunclient"
|
sudo -H pip install -U "python-zunclient"
|
||||||
fi
|
fi
|
||||||
|
if [[ $ACTION == ironic ]]; then
|
||||||
|
# NOTE(mgoddard): Installing python-ironicclient to site-packages fails
|
||||||
|
# due to pip 10 distutils issue with ipaddress package.
|
||||||
|
virtualenv ~/ironic-venv
|
||||||
|
~/ironic-venv/bin/pip install -U pip
|
||||||
|
~/ironic-venv/bin/pip install python-openstackclient python-ironicclient
|
||||||
|
fi
|
||||||
detect_distro
|
detect_distro
|
||||||
|
|
||||||
sudo mkdir /etc/ansible
|
sudo mkdir /etc/ansible
|
||||||
@ -121,7 +131,6 @@ function prepare_images {
|
|||||||
popd
|
popd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
setup_ansible
|
setup_ansible
|
||||||
setup_config
|
setup_config
|
||||||
setup_node
|
setup_node
|
||||||
|
@ -37,3 +37,13 @@
|
|||||||
scenario: bifrost
|
scenario: bifrost
|
||||||
install_type: source
|
install_type: source
|
||||||
enable_core_openstack: no
|
enable_core_openstack: no
|
||||||
|
|
||||||
|
- job:
|
||||||
|
name: kolla-ansible-ironic-base
|
||||||
|
parent: kolla-ansible-base
|
||||||
|
voting: false
|
||||||
|
files:
|
||||||
|
- ^ansible\/roles\/ironic\/.*
|
||||||
|
- ^tests/test-ironic.sh
|
||||||
|
vars:
|
||||||
|
scenario: ironic
|
||||||
|
@ -205,3 +205,37 @@
|
|||||||
base_distro: centos
|
base_distro: centos
|
||||||
install_type: source
|
install_type: source
|
||||||
scenario: scenario_nfv
|
scenario: scenario_nfv
|
||||||
|
|
||||||
|
- job:
|
||||||
|
name: kolla-ansible-centos-source-ironic
|
||||||
|
parent: kolla-ansible-ironic-base
|
||||||
|
nodeset: kolla-ansible-centos
|
||||||
|
vars:
|
||||||
|
base_distro: centos
|
||||||
|
install_type: source
|
||||||
|
|
||||||
|
- job:
|
||||||
|
name: kolla-ansible-centos-binary-ironic
|
||||||
|
parent: kolla-ansible-ironic-base
|
||||||
|
nodeset: kolla-ansible-centos
|
||||||
|
vars:
|
||||||
|
base_distro: centos
|
||||||
|
install_type: binary
|
||||||
|
|
||||||
|
- job:
|
||||||
|
name: kolla-ansible-ubuntu-source-ironic
|
||||||
|
parent: kolla-ansible-ironic-base
|
||||||
|
nodeset: kolla-ansible-bionic
|
||||||
|
vars:
|
||||||
|
base_distro: ubuntu
|
||||||
|
install_type: source
|
||||||
|
|
||||||
|
# Not running this job because the ironic-neutron-agent image is not available
|
||||||
|
# for Ubuntu binary.
|
||||||
|
- job:
|
||||||
|
name: kolla-ansible-ubuntu-binary-ironic
|
||||||
|
parent: kolla-ansible-ironic-base
|
||||||
|
nodeset: kolla-ansible-bionic
|
||||||
|
vars:
|
||||||
|
base_distro: ubuntu
|
||||||
|
install_type: binary
|
||||||
|
@ -27,6 +27,9 @@
|
|||||||
files: ^ansible\/roles\/(zun|kuryr)\/.*
|
files: ^ansible\/roles\/(zun|kuryr)\/.*
|
||||||
- kolla-ansible-centos-source-scenario-nfv:
|
- kolla-ansible-centos-source-scenario-nfv:
|
||||||
files: ^ansible\/roles\/(barbican|heat|mistral|redis|tacker)\/.*
|
files: ^ansible\/roles\/(barbican|heat|mistral|redis|tacker)\/.*
|
||||||
|
- kolla-ansible-centos-source-ironic
|
||||||
|
- kolla-ansible-centos-binary-ironic
|
||||||
|
- kolla-ansible-ubuntu-source-ironic
|
||||||
- kolla-ansible-centos-source-upgrade
|
- kolla-ansible-centos-source-upgrade
|
||||||
- kolla-ansible-ubuntu-source-upgrade
|
- kolla-ansible-ubuntu-source-upgrade
|
||||||
- kolla-ansible-centos-source-upgrade-ceph
|
- kolla-ansible-centos-source-upgrade-ceph
|
||||||
@ -46,6 +49,9 @@
|
|||||||
- kolla-ansible-centos-source-scenario-nfv
|
- kolla-ansible-centos-source-scenario-nfv
|
||||||
- kolla-ansible-ubuntu-source-cinder-lvm
|
- kolla-ansible-ubuntu-source-cinder-lvm
|
||||||
- kolla-ansible-centos-source-cinder-lvm
|
- kolla-ansible-centos-source-cinder-lvm
|
||||||
|
- kolla-ansible-centos-source-ironic
|
||||||
|
- kolla-ansible-centos-binary-ironic
|
||||||
|
- kolla-ansible-ubuntu-source-ironic
|
||||||
- kolla-ansible-centos-source-upgrade
|
- kolla-ansible-centos-source-upgrade
|
||||||
- kolla-ansible-ubuntu-source-upgrade
|
- kolla-ansible-ubuntu-source-upgrade
|
||||||
- kolla-ansible-centos-source-upgrade-ceph
|
- kolla-ansible-centos-source-upgrade-ceph
|
||||||
|
Loading…
Reference in New Issue
Block a user