Merge "DevStack support and Redfish job" into stable/train

This commit is contained in:
Zuul 2020-03-23 22:05:39 +00:00 committed by Gerrit Code Review
commit a952594c5b
4 changed files with 212 additions and 0 deletions

View File

@ -1,6 +1,95 @@
- job:
name: ironic-prometheus-exporter-redfish
description: Job that installs the exporter with redfish driver.
parent: devstack
nodeset: openstack-single-node-bionic
timeout: 5400
required-projects:
- openstack/ironic
- openstack/ironic-python-agent
- openstack/ironic-python-agent-builder
- openstack/ironic-tempest-plugin
- openstack/virtualbmc
irrelevant-files:
- ^.*\.rst$
- ^api-ref/.*$
- ^doc/.*$
- ^driver-requirements.txt$
- ^install-guide/.*$
- ^ironic/locale/.*$
- ^ironic/tests/.*$
- ^releasenotes/.*$
- ^setup.cfg$
- ^tools/.*$
- ^tox.ini$
- ^ironic_prometheus_exporter/tests/*$
vars:
devstack_localrc:
DEFAULT_INSTANCE_TYPE: baremetal
FORCE_CONFIG_DRIVE: True
INSTALL_TEMPEST: False # Don't install a tempest package globaly
TEMPEST_PLUGINS: "{{ ansible_user_dir }}/src/opendev.org/openstack/ironic-tempest-plugin"
VIRT_DRIVER: ironic
BUILD_TIMEOUT: 720
IRONIC_BAREMETAL_BASIC_OPS: True
IRONIC_BUILD_DEPLOY_RAMDISK: False
IRONIC_CALLBACK_TIMEOUT: 600
IRONIC_DEPLOY_DRIVER: redfish
IRONIC_ENABLED_HARDWARE_TYPES: redfish
IRONIC_DEFAULT_RESCUE_INTERFACE: ""
EBTABLES_RACE_FIX: True
IRONIC_INSPECTOR_BUILD_RAMDISK: False
IRONIC_RAMDISK_TYPE: tinyipa
IRONIC_VM_COUNT: 1
IRONIC_VM_EPHEMERAL_DISK: 1
IRONIC_VM_LOG_DIR: '{{ devstack_base_dir }}/ironic-bm-logs'
IRONIC_VM_SPECS_RAM: 384
IRONIC_VM_SPECS_DISK: 4
IRONIC_DEFAULT_DEPLOY_INTERFACE: iscsi
Q_AGENT: openvswitch
Q_ML2_TENANT_NETWORK_TYPE: vxlan
SERVICE_TIMEOUT: 90
USE_PYTHON3: True
IRONIC_PROMETHEUS_EXPORTER_LOCATION: '{{ devstack_base_dir }}/ironic-bm-logs/ipe'
devstack_plugins:
ironic: https://opendev.org/openstack/ironic
ironic-prometheus-exporter: https://opendev.org/openstack/ironic-prometheus-exporter
zuul_copy_output:
'{{ devstack_base_dir }}/ironic-bm-logs': 'logs'
'{{ devstack_base_dir }}/ironic-bm-logs/ipe': 'logs'
devstack_services:
q-agt: false
q-dhcp: false
q-l3: false
q-meta: false
q-metering: false
q-svc: false
neutron-api: true
neutron-agent: true
neutron-dhcp: true
neutron-l3: true
neutron-metadata-agent: true
neutron-metering: true
c-api: False
c-bak: False
c-sch: False
c-vol: False
cinder: False
s-account: False
s-container: False
s-object: False
s-proxy: False
- project:
templates:
- check-requirements
- openstack-python-jobs
- openstack-python3-train-jobs
- release-notes-jobs-python3
check:
jobs:
- ironic-prometheus-exporter-redfish
gate:
queue: ironic
jobs:
- ironic-prometheus-exporter-redfish

4
bindep.txt Normal file
View File

@ -0,0 +1,4 @@
libvirt-dev [platform:dpkg]
libvirt-devel [platform:rpm]
pkg-config [platform:dpkg]
pkgconfig [platform:redhat]

116
devstack/plugin.sh Normal file
View File

@ -0,0 +1,116 @@
#!/usr/bin/env bash
# plugin.sh - DevStack plugin.sh dispatch script template
IRONIC_PROMETHEUS_EXPORTER_DIR=${IRONIC_PROMETHEUS_EXPORTER_DIR:-$DEST/ironic-prometheus-exporter}
IRONIC_PROMETHEUS_EXPORTER_PORT=${IRONIC_PROMETHEUS_EXPORTER_PORT:-9608}
IRONIC_PROMETHEUS_EXPORTER_DATA_DIR=""$DATA_DIR/ironic-prometheus-exporter""
IRONIC_PROMETHEUS_EXPORTER_SYSTEMD_SERVICE="devstack@ironic-prometheus-exporter.service"
# Location where the metrics from the baremetal nodes will be stored
IRONIC_PROMETHEUS_EXPORTER_LOCATION=${IRONIC_PROMETHEUS_EXPORTER_LOCATION:-$IRONIC_VM_LOG_DIR}
COLLECT_DATA_UNDEPLOYED_NODES=$(trueorfalse True COLLECT_DATA_UNDEPLOYED_NODES)
IRONIC_CONFIG=${IRONIC_CONFIG:-$IRONIC_CONF_FILE}
IPE_ACCESS_LF="$IRONIC_VM_LOG_DIR/ipe_access.log"
IPE_ERROR_LF="$IRONIC_VM_LOG_DIR/ipe_errors.log"
function install_ironic_prometheus_exporter {
git_clone_by_name "ironic-prometheus-exporter"
setup_dev_lib "ironic-prometheus-exporter"
}
function configure_ironic_prometheus_exporter {
# Update ironic configuration file to use the exporter
iniset $IRONIC_CONF_FILE conductor send_sensor_data true
iniset $IRONIC_CONF_FILE conductor send_sensor_data_for_undeployed_nodes $COLLECT_DATA_UNDEPLOYED_NODES
iniset $IRONIC_CONF_FILE conductor send_sensor_data_interval 90
iniset $IRONIC_CONF_FILE oslo_messaging_notifications driver prometheus_exporter
iniset $IRONIC_CONF_FILE oslo_messaging_notifications transport_url fake://
iniset $IRONIC_CONF_FILE oslo_messaging_notifications location $IRONIC_PROMETHEUS_EXPORTER_LOCATION
local gunicorn_ipe_cmd
gunicorn_ipe_cmd=$(which gunicorn3)
gunicorn_ipe_cmd+=" -b ${HOST_IP}:${IRONIC_PROMETHEUS_EXPORTER_PORT}"
gunicorn_ipe_cmd+=" --env IRONIC_CONFIG=$IRONIC_CONFIG"
gunicorn_ipe_cmd+=" --env FLASK_DEBUG=1 -w 4"
gunicorn_ipe_cmd+=" --access-logfile=$IPE_ACCESS_LF --error-logfile=$IPE_ERROR_LF"
gunicorn_ipe_cmd+=" -D ironic_prometheus_exporter.app.wsgi:application"
write_user_unit_file $IRONIC_PROMETHEUS_EXPORTER_SYSTEMD_SERVICE "$gunicorn_ipe_cmd" "" "$STACK_USER"
enable_service $IRONIC_PROMETHEUS_EXPORTER_SYSTEMD_SERVICE
}
function start_ironic_prometheus_exporter {
start_service $IRONIC_PROMETHEUS_EXPORTER_SYSTEMD_SERVICE
}
function stop_ironic_prometheus_exporter {
stop_service $IRONIC_PROMETHEUS_EXPORTER_SYSTEMD_SERVICE
}
function cleanup_ironic_prometheus_exporter {
stop_ironic_prometheus_exporter
disable_service $IRONIC_PROMETHEUS_EXPORTER_SYSTEMD_SERVICE
sudo rm -rf $IRONIC_PROMETHEUS_EXPORTER_DATA_DIR
local unitfile="$SYSTEMD_DIR/$IRONIC_PROMETHEUS_EXPORTER_SYSTEMD_SERVICE"
sudo rm -f $unitfile
$SYSTEMCTL daemon-reload
}
function wait_for_data {
# Sleep for more than the [conductor]send_sensor_data_interval value
# to verify if we can get data from the baremetal
# FIXME(iurygregory): Add some logic to verify if the data already exists
sleep 240
}
function check_data {
local node_file="node-0-hardware.redfish.metrics"
if [ -f "$IRONIC_PROMETHEUS_EXPORTER_LOCATION/$node_file" ]; then
echo "Found $node_file in $IRONIC_PROMETHEUS_EXPORTER_LOCATION"
if curl -s --head --request GET "http://$HOST_IP:$IRONIC_PROMETHEUS_EXPORTER_PORT/metrics" | grep "200 OK" > /dev/null; then
echo "Data successfully retrived from ironic-prometheus-exporter application"
else
die $LINENO "Couldn't get data from ironic-prometheus-exporter application"
fi
else
die $LINENO "Couldn't find $node_file in $IRONIC_PROMETHEUS_EXPORTER_LOCATION"
fi
}
echo_summary "ironic-prometheus-exporter devstack plugin.sh called: $1/$2"
if is_service_enabled ironic-prometheus-exporter; then
if [[ "$1" == "stack" ]]; then
case "$2" in
install)
echo_summary "Installing Ironic Prometheus Exporter"
install_ironic_prometheus_exporter
;;
post-config)
echo_summary "Configuring Ironic Prometheus Exporter Application"
configure_ironic_prometheus_exporter
;;
extra)
echo_summary "Starting Ironic Prometheus Exporter Application"
start_ironic_prometheus_exporter
echo_summary "Give time to baremetal to provide data"
wait_for_data
check_data
;;
esac
fi
if [[ "$1" == "unstack" ]]; then
echo_summary "Stopping Ironic Prometheus Exporter Application"
stop_ironic_prometheus_exporter
echo_summary "Cleaning Ironic Prometheus Exporter"
cleanup_ironic_prometheus_exporter
fi
fi

3
devstack/settings Normal file
View File

@ -0,0 +1,3 @@
define_plugin ironic-prometheus-exporter
plugin_requires ironic-prometheus-exporter ironic
enable_service ironic-prometheus-exporter