Set up the fault plugin

* Use stx-update and stx-integ plugins as-is
* Copy stx-fault here and validate running external plugins

Zuul jobs are stx-devstack-tis-base and stx-devstack-test1

Change-Id: I554b20d83dce8c0fbad67785bb04232be8c10183
Signed-off-by: Dean Troyer <dtroyer@gmail.com>
This commit is contained in:
Dean Troyer 2019-03-04 14:17:44 -06:00
parent d513e5cb27
commit c601e071b8
8 changed files with 928 additions and 3 deletions

View File

@ -1,3 +1,100 @@
- project:
templates:
- noop-jobs
check:
jobs:
- openstack-tox-linters
- stx-devstack-test1
gate:
jobs:
- openstack-tox-linters
- stx-devstack-test1
# This job is to begin testing a DevStack run here
- job:
name: stx-devstack-tis-base
nodeset: openstack-single-node-bionic
parent: devstack
description: |
Base job template for StarlingX DevStack tests
roles:
- zuul: openstack-infra/devstack
timeout: 9000
required-projects:
- name: git.openstack.org/openstack-dev/devstack
- name: git.openstack.org/openstack/keystone
- name: git.openstack.org/openstack/requirements
vars:
devstack_services:
# Turn off a number of upstream projects
# Ceilometer services
ceilometer-acentral: false
ceilometer-acompute: false
ceilometer-alarm-evaluator: false
ceilometer-alarm-notifier: false
ceilometer-anotification: false
ceilometer-api: false
ceilometer-collector: false
# Cinder services
c-api: false
c-bak: false
c-sch: false
c-vol: false
cinder: false
# Glance services
g-api: false
g-reg: false
# Horizon services
horizon: false
# Neutron services
q-agt: true
q-dhcp: false
q-l3: false
q-meta: false
q-metering: false
q-svc: false
# Nova services
n-api: false
n-api-meta: false
n-cauth: false
n-cond: false
n-cpu: false
n-novnc: false
n-obj: false
n-sch: false
placement-api: false
# Swift services
s-account: false
s-container: false
s-object: false
s-proxy: false
tempest: false
# Database
mysql: false
postgresql: true
devstack_localrc:
LIBS_FROM_GIT: keystone
FORCE: yes
- job:
name: stx-devstack-test1
parent: stx-devstack-tis-base
timeout: 7800
required-projects:
- name: openstack/stx-config
- name: openstack/stx-fault
- name: openstack/stx-integ
- name: openstack/stx-update
vars:
tox_envlist: functional
devstack_services:
stx-config: true
stx-fault: true
fm-common: true
fm-api: true
fm-rest-api: true
fm-mgr: true
devstack_plugins:
stx-tis-repo: git://git.starlingx.io/stx-tis-repo
stx-integ: git://git.starlingx.io/stx-integ
stx-update: git://git.starlingx.io/stx-update
devstack_localrc:
LIBS_FROM_GIT: keystone

View File

@ -1,4 +1,12 @@
stx-tis-repo
============
Placeholder repo
This repo is being used for development of DevStack plugins
for StarlingX flock services. It is not used in the build
or operation of StarlingX in any way in spite of it having
that resembles a historical repo for this project.
The reason for doing this separate form the service plugins
is that there are some interesting dependencies between the
plugins and the base stx devstack job should be not in one of
the service repos.

289
devstack/lib/stx-config Normal file
View File

@ -0,0 +1,289 @@
#!/bin/bash
#
# lib/stx-config
# Functions to control the configuration and operation of stx-config
# Dependencies:
#
# - ``functions`` file
# - ``DEST``, ``DATA_DIR``, ``STACK_USER`` must be defined
# - The stx-update and stx-fault plugins must be enabled
# ``stack.sh`` calls the entry points in this order:
#
# - install_cgtsclient
# - install_sysinv
# - install_sysinv_agent
# - configure_sysinv
# - init_sysinv
# - start_sysinv
# - start_sysinv_agent
# - stop_sysinv
# - stop_sysinv_agent
# - cleanup_sysinv
_XTRACE_STX_CONFIG=$(set +o | grep xtrace)
set -o xtrace
# Defaults
# --------
SYSINV_CLIENT_NAME=cgts-client
GITDIR["$SYSINV_CLIENT_NAME"]=$DEST/stx-config/sysinv/cgts-client/cgts-client
GITDIR["sysinv"]=$DEST/stx-config/sysinv/sysinv/sysinv
STXCONFIG_CONTROL=$DEST/stx-config/controllerconfig/controllerconfig
STXCONFIG_CONFUTILS=$DEST/stx-config/configutilities/configutilities
SYSINV_SERVICE_PROTOCOL=${SYSINV_SERVICE_PROTOCOL:-$SERVICE_PROTOCOL}
SYSINV_SERVICE_PORT=${SYSINV_SERVICE_PORT:-6385}
SYSINV_SERVICE_HOST=${SYSINV_SERVICE_HOST:-$SERVICE_HOST}
SYSINV_DIR=$DEST/stx-config/sysinv/sysinv/sysinv
SYSINV_AGENT_DIR=$DEST/stx-config/sysinv/sysinv-agent
SYSINV_ETC_GOENABLEDD=/etc/goenabled.d
SYSINV_CONF_DIR=/etc/sysinv
SYSINV_CONF_FILE=$SYSINV_CONF_DIR/sysinv.conf
SYSINV_API_PASTE_INI=$SYSINV_CONF_DIR/api-paste.ini
SYSINV_ETC_MOTDD=/etc/motd.d
SYSINV_OCF_RESOURCED=/urs/lib/ocf/resource.d
SYSINV_BIN_DIR=$(get_python_exec_prefix)
SYSINV_API_PORT=$SYSINV_SERVICE_PORT
SYSINV_AUTH_STRATEGY=${SYSINV_AUTH_STRATEGY:-keystone}
SYSINV_AUTH_CACHE_DIR=${SYSINV_AUTH_CACHE_DIR:-/var/cache/sysinv}
PYTHON_SITE_DIR=$(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
# Functions
# ---------
function cleanup_sysinv {
stop_sysinv
sudo rm -rf $SYSINV_AUTHO_CACHE_DIR $SYSINV_CONF_DIR
}
stx_services="sysinv-api sysinv-cond sysinv-agent"
function check_sysinv_services {
local service
for service in $stx_services; do
if $SYSTEMCTL is-enabled devstack@$service.service; then
$SYSTEMCTL status devstack@$service.service --no-pager
fi
done
}
function configure_sysinv {
sudo install -d -o $STACK_USER $SYSINV_CONF_DIR
cp $SYSINV_DIR/etc/sysinv/sysinv.conf.sample $SYSINV_CONF_FILE
iniset $SYSINV_CONF_FILE DEFAULT MTC_INV_LABLE /v1/hosts/
iniset $SYSINV_CONF_FILE DEFAULT sysinv_api_port $SYSINV_API_PORT
iniset $SYSINV_CONF_FILE DEFAULT use_syslog True
iniset $SYSINV_CONF_FILE DEFAULT rabbit_host $RABBIT_HOST
iniset $SYSINV_CONF_FILE DEFAULT rabbit_hosts $RABBIT_HOST:5672
iniset $SYSINV_CONF_FILE DEFAULT rabbit_port 5672
iniset $SYSINV_CONF_FILE DEFAULT verbose True
iniset $SYSINV_CONF_FILE DEFAULT sysinv_api_bind_ip $HOST_IP
iniset $SYSINV_CONF_FILE DEFAULT auth_strategy $SYSINV_AUTH_STRATEGY
iniset $SYSINV_CONF_FILE DEFAULT control_exchange openstack
iniset $SYSINV_CONF_FILE DEFAULT rabbit_userid $RABBIT_USERID
iniset $SYSINV_CONF_FILE DEFAULT rabbit_virtual_host /
iniset $SYSINV_CONF_FILE DEFAULT api_paste_config $CINDER_API_PASTE_INI
iniset $SYSINV_CONF_FILE DEFAULT debug True
iniset $SYSINV_CONF_FILE DEFAULT rabbit_password $RABBIT_PASSWORD
# transport_url is not in config files, so we don't need call iniset_rpc_backend
# iniset_rpc_backend sysinv $SYSINV_CONF_FILE
iniset $SYSINV_CONF_FILE DEFAULT rabbit_ha_queues False
setup_logging $SYSINV_CONF_FILE
configure_auth_token_middleware $SYSINV_CONF_FILE sysinv $SYSINV_AUTH_CACHE_DIR/api
iniset $SYSINV_CONF_FILE database connection `database_connection_url sysinv`
}
function create_sysinv_accounts {
get_or_create_service "sysinv" "platform" "SysInv services"
create_service_user "sysinv" "admin"
sysinv_api_url="$SYSINV_SERVICE_PROTOCOL://$SYSINV_SERVICE_HOST:$SYSINV_SERVICE_PORT"
get_or_create_endpoint \
"sysinv" \
"$REGION_NAME" \
"$sysinv_api_url/v1"
}
# create_sysinv_cache_dir() - Part of the init_sysinv() process
function create_sysinv_cache_dir {
# Create cache dir
sudo mkdir -p $SYSINV_AUTH_CACHE_DIR/api
sudo chown $STACK_USER $SYSINV_AUTH_CACHE_DIR/api
rm -f $SYSINV_AUTH_CACHE_DIR/api/*
sudo mkdir -p $SYSINV_AUTH_CACHE_DIR/registry
sudo chown $STACK_USER $SYSINV_AUTH_CACHE_DIR/registry
rm -f $SYSINV_AUTH_CACHE_DIR/registry/*
}
function create_sysinv_user_group {
if ! getent group sysinv >/dev/null; then
echo "Creating a group called sysinv"
sudo groupadd sysinv
fi
if ! getent passwd sysinv >/dev/null; then
echo "Creating a user called sysinv"
sudo mkdir -p /home/sysinv
sudo useradd -g sysinv -s /bin/bash -d /home/sysinv -m sysinv
echo "Giving user sysinv passwordless sudo privileges"
# UEC images ``/etc/sudoers`` does not have a ``#includedir``, add one
sudo grep -q "^#includedir.*/etc/sudoers.d" /etc/sudoers ||
sudo echo "#includedir /etc/sudoers.d" >> /etc/sudoers
# Set up DevStack sudoers
TEMPFILE=`mktemp`
echo "sysinv ALL=(root) NOPASSWD:ALL" >$TEMPFILE
# Some binaries might be under ``/sbin`` or ``/usr/sbin``, so make sure sudo will
# see them by forcing ``PATH``
echo "Defaults:sysinv secure_path=/sbin:/usr/sbin:/usr/bin:/bin:/usr/local/sbin:/usr/local/bin" >> $TEMPFILE
echo "Defaults:sysinv !requiretty" >> $TEMPFILE
chmod 0440 $TEMPFILE
sudo chown root:root $TEMPFILE
sudo mv $TEMPFILE /etc/sudoers.d/60_sysinv_sh
fi
}
function init_sysinv {
echo "trigger init sysinv"
# Migrations need this
sudo install -d -m 755 -o ${USER} /var/run/sysinv
if [[ "$HOST_TOPOLOGY_ROLE" != "subnode" ]]; then
# (Re)create sysinv database
echo "recreate_database sysinv and dbsync"
recreate_database sysinv
$SYSINV_BIN_DIR/sysinv-dbsync --config-file=$SYSINV_CONF_FILE
fi
create_sysinv_cache_dir
}
function install_cgtsclient {
setup_dev_lib "cgts-client"
sudo install -D -m 0644 -o $STACK_USER {${GITDIR["$SYSINV_CLIENT_NAME"]}/tools/,/etc/bash_completion.d/}system.bash_completion
}
function install_configutilities {
# We can't use setup_develop as there is no setup.cfg file present for configutilities
setup_package $STXCONFIG_CONFUTILS -e
}
function install_controllerconfig {
# This is a hack to work around the lack of proper global-requirements
# setup in these packages
pip_install pycrypto
# We can't use setup_develop as there is no setup.cfg file present for controllerconfig
setup_package $STXCONFIG_CONTROL -e
}
function install_sysinv {
local req_services="key rabbit nova neutron"
for srv in $req_services;do
if ! is_service_enabled "$srv"; then
die $LINENO "$srv should be enabled for SysInv"
fi
done
setup_develop $SYSINV_DIR
sudo install -d -m 755 $SYSINV_ETC_GOENABLEDD
sudo install -p -D -m 755 $SYSINV_DIR/etc/sysinv/sysinv_goenabled_check.sh $SYSINV_ETC_GOENABLEDD/sysinv_goenabled_check.sh
sudo install -d -m 755 $SYSINV_CONF_DIR
sudo install -p -D -m 755 $SYSINV_DIR/etc/sysinv/policy.json $SYSINV_CONF_DIR/policy.json
sudo install -p -D -m 640 $SYSINV_DIR/etc/sysinv/profileSchema.xsd $SYSINV_CONF_DIR/profileSchema.xsd
sudo install -d -m 755 $SYSINV_ETC_MOTDD
sudo install -p -D -m 755 $SYSINV_DIR/etc/sysinv/motd-system $SYSINV_ETC_MOTDD/10-system
sudo install -d -m 755 $SYSINV_CONF_DIR/upgrades
sudo install -p -D -m 755 $SYSINV_DIR/etc/sysinv/delete_load.sh $SYSINV_CONF_DIR/upgrades/delete_load.sh
sudo install -p -D -m 755 $SYSINV_DIR/scripts/sysinv-api /usr/lib/ocf/resource.d/platform/sysinv-api
sudo install -p -D -m 755 $SYSINV_DIR/scripts/sysinv-conductor /usr/lib/ocf/resource.d/platform/sysinv-conductor
sudo install -p -D -m 755 $SYSINV_DIR/scripts/sysinv-api.service /usr/lib/systemd/system/sysinv-api.service
sudo install -p -D -m 755 $SYSINV_DIR/scripts/sysinv-conductor.service /usr/lib/systemd/system/sysinv-conductor.service
sudo install -d -m 755 $SYSINV_BIN_DIR
sudo install -p -D -m 755 $SYSINV_DIR/sysinv/cmd/partition_info.sh $SYSINV_BIN_DIR/partition_info.sh
sudo install -p -D -m 755 $SYSINV_DIR/sysinv/cmd/manage-partitions $SYSINV_BIN_DIR/manage-partitions
sudo install -p -D -m 755 $SYSINV_DIR/sysinv/cmd/query_pci_id $SYSINV_BIN_DIR/query_pci_id
if is_service_enabled sysinv-agent; then
echo_summary "Installing sysinv-agent service"
install_sysinv_agent
fi
}
function install_sysinv_agent {
#rename to sysinv-agent.sh to avoid overwrite entry_point of sysinv-agent
sudo install -p -D -m 755 $SYSINV_AGENT_DIR/sysinv-agent $SYSINV_BIN_DIR/sysinv-agent.sh
}
function install_sysinv_depends {
install_configutilities
install_controllerconfig
}
function start_sysinv {
if is_service_enabled sysinv-api; then
echo "start sysinv-api service"
start_sysinv_api
fi
if is_service_enabled sysinv-cond; then
echo "start sysinv-cond service"
start_sysinv_conductor
fi
if is_service_enabled sysinv-agent; then
echo "start sysinv-agent service"
start_sysinv_agent
fi
}
function start_sysinv_agent {
if is_service_enabled sysinv-agent; then
echo "start sysinv-agent service"
run_process sysinv-agent "$SYSINV_BIN_DIR/sysinv-agent"
fi
}
function start_sysinv_api {
echo "trigger start sysinv api"
run_process sysinv-api "$SYSINV_BIN_DIR/sysinv-api --config-file=$SYSINV_CONF_FILE"
# Get right service port for testing
local service_port=$SYSINV_SERVICE_PORT
local service_protocol=$SYSINV_SERVICE_PROTOCOL
if is_service_enabled tls-proxy; then
service_port=$SYSINV_SERVICE_PORT
service_protocol="http"
fi
echo "Waiting for sysinv-api ($SERVICE_HOST:$service_port) to start..."
if ! timeout $SERVICE_TIMEOUT sh -c "while ! wget --no-proxy -q -O- $service_protocol://$SERVICE_HOST:$service_port/; do sleep 1; done"; then
die $LINENO "sysinv-api did not start"
fi
if is_service_enabled tls-proxy; then
start_tls_proxy sysinv '*' $SYSINV_SERVICE_PORT $SERVICE_HOST $SYSINV_SERVICE_PORT
fi
}
function start_sysinv_conductor {
echo "trigger start sysinv conductor"
# the 1st will fail
stop_sysinv_conductor
run_process sysinv-cond "$SYSINV_BIN_DIR/sysinv-conductor --config-file=$SYSINV_CONF_FILE"
# TODO: Find a way to check whether the conductor has started.
# TODO: first run in extra stage will fail, need run second time in test-config
}
function stop_sysinv {
stop_sysinv_api
stop_sysinv_conductor
stop_sysinv_agent
}
function stop_sysinv_agent {
stop_process sysinv-agent
}
function stop_sysinv_api {
stop_process sysinv-api
}
function stop_sysinv_conductor {
stop_process sysinv-cond
}
$_XTRACE_STX_CONFIG

354
devstack/lib/stx-fault Normal file
View File

@ -0,0 +1,354 @@
#!/bin/bash
#
# lib/stx-fault
# Functions to control the configuration and operation of the **fault** service
# Dependencies:
#
# - The stx-update plugin must be enabled
# ``stack.sh`` calls the entry points in this order:
#
# - install_fault
# - configure_fault
# - init_fault
# - start_fault
# - stop_fault
# - cleanup_fault
_XTRACE_STX_FAULT=$(set +o | grep xtrace)
set -o xtrace
# Defaults
# --------
STX_FAULT_DIR=${GITDIR[$STX_FAULT_NAME]}
STX_FAULT_CONF_DIR=/etc/fm
FM_RESTAPI_CONF=$STX_FAULT_CONF_DIR/fm.conf
FM_RESTAPI_PASTE_INI=$STX_FAULT_CONF_DIR/api-paste.ini
FM_RESTAPI_AUTH_CACHE_DIR=${FM_RESTAPI_AUTH_CACHE_DIR:-/var/cache/fault}
FM_RESTAPI_DIR=$STX_FAULT_DIR/fm-rest-api/fm
if is_service_enabled tls-proxy; then
FM_RESTAPI_SERVICE_PROTOCOL="https"
fi
FM_RESTAPI_SERVICE_PROTOCOL=${FM_RESTAPI_SERVICE_PROTOCOL:-$SERVICE_PROTOCOL}
FM_RESTAPI_SERVICE_HOST=${FM_RESTAPI_SERVICE_HOST:-$SERVICE_HOST}
FM_RESTAPI_SERVICE_PORT=${FM_RESTAPI_SERVICE_PORT:-18002}
FM_RESTAPI_WORKERS=${FM_RESTAPI_WORKERS:-4}
# STX_INST_DIR should be a non-root-writable place to install build artifacts
STX_INST_DIR=${STX_INST_DIR:-$DEST/usr}
STX_BIN_DIR=$STX_INST_DIR/bin
PYTHON_SITE_DIR=$(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
# Functions
# ---------
function build_fm_common {
pushd $STX_FAULT_DIR/fm-common/sources
local major minor version x
if [[ -z $1 || -z $2 ]]; then
# get fm-common version
read x version <<< $(grep '^Version: ' $STX_FAULT_DIR/fm-common/PKG-INFO)
major=${version%%.*}
minor=${version##*.}
else
major=$1
minor=$2
fi
# build
make MAJOR=$major MINOR=$minor
python setup.py build
popd
}
function build_fm_mgr {
pushd $STX_FAULT_DIR/fm-mgr/sources
local x version
local major minor version x
if [[ -z $1 || -z $2 ]]; then
# get fm-mgr version
read x version <<< $(grep '^Version: ' $STX_FAULT_DIR/fm-mgr/PKG-INFO)
local major=${version%%.*}
local minor=${version##*.}
else
major=$1
minor=$2
fi
# build
CPATH=$STX_INST_DIR/include LIBRARY_PATH=$STX_INST_DIR/lib make \
MAJOR=$major \
MINOR=$minor
popd
}
function cleanup_fault {
stop_fault
if is_service_enabled fm-mgr; then
cleanup_fm_mgr
fi
if is_service_enabled fm-common; then
cleanup_fm_common
fi
if is_service_enabled fm-rest-api; then
cleanup_fm_rest_api
fi
}
function cleanup_fm_common {
local x version
# get fm-common version
read x version <<< $(grep '^Version: ' $STX_FAULT_DIR/fm-common/PKG-INFO)
local major=${version%%.*}
local minor=${version##*.}
sudo rm /etc/ld.so.conf.d/stx-fault.conf
pushd $STX_FAULT_DIR/fm-common/sources
make \
DESTDIR=$STX_INST_DIR \
BINDIR=/bin \
LIBDIR=/lib \
INCDIR=/include \
MAJOR=$major \
MINOR=$minor \
clean
rm $STX_BIN_DIR/fm_db_sync_event_suppression.py \
$STX_INST_DIR/include/fmConfig.h \
$STX_INST_DIR/include/fmLog.h
popd
}
function cleanup_fm_mgr {
local x version
# get fm-mgr version
read x version <<< $(grep '^Version: ' $STX_FAULT_DIR/fm-mgr/PKG-INFO)
local major=${version%%.*}
local minor=${version##*.}
pushd $STX_FAULT_DIR/fm-mgr/sources
make \
DESTDIR=$STX_INST_DIR \
BINDIR=/bin \
MAJOR=$major \
MINOR=$minor \
clean
popd
}
function cleanup_fm_rest_api {
sudo rm -rf $FM_RESTAPI_AUTH_CACHE_DIR $FM_RESTAPI_CONF
}
function configure_fault {
if is_service_enabled fm-rest-api; then
configure_fm_rest_api
create_fault_user_group
create_fault_accounts
fi
}
function configure_fm_rest_api {
sudo install -d -o $STACK_USER -m 755 $STX_FAULT_CONF_DIR
cp -p $STX_FAULT_DIR/devstack/files/api-paste.ini $FM_RESTAPI_PASTE_INI
configure_auth_token_middleware $FM_RESTAPI_CONF fm $FM_RESTAPI_AUTH_CACHE_DIR
iniset $FM_RESTAPI_CONF database connection $(database_connection_url fm)
iniset $FM_RESTAPI_CONF api api_paste_config $FM_RESTAPI_PASTE_INI
iniset $FM_RESTAPI_CONF api api_workers $FM_RESTAPI_WORKERS
iniset $FM_RESTAPI_CONF api bind_host $FM_RESTAPI_SERVICE_HOST
iniset $FM_RESTAPI_CONF api bind_port $FM_RESTAPI_SERVICE_PORT
iniset $FM_RESTAPI_CONF oslo_middleware enable_proxy_headers_parsing True
if [ "$SYSLOG" != "False" ]; then
iniset $FM_RESTAPI_CONF DEFAULT use_syslog True
# stx specific?
iniset $FM_RESTAPI_CONF DEFAULT syslog_log_facility local2
fi
# Additional things set in stx config
iniset $FM_RESTAPI_CONF DEFAULT region_name RegionOne
iniset $FM_RESTAPI_CONF DEFAULT event_log_max_size 4000
iniset $FM_RESTAPI_CONF DEFAULT system_name $(hostname)
iniset $FM_RESTAPI_CONF database idle_timeout 60
iniset $FM_RESTAPI_CONF database max_pool_size 1
iniset $FM_RESTAPI_CONF database max_overflow 20
iniset $FM_RESTAPI_CONF keystone_authtoken region_name RegionOne
# sysinv settings to move there...
iniset $FM_RESTAPI_CONF sysinv catalog_info platform:sysinv:internalURL
iniset $FM_RESTAPI_CONF sysinv os_region_name RegionOne
}
function create_fault_accounts {
create_service_user "fm"
get_or_create_service "fm" "faultmanagement" "Fault Management Service"
get_or_create_endpoint \
"faultmanagement" \
"$REGION_NAME" \
"$FM_RESTAPI_SERVICE_PROTOCOL://$FM_RESTAPI_SERVICE_HOST:$FM_RESTAPI_SERVICE_PORT/v1"
}
function create_fault_cache_dir {
# Create cache dir
sudo install -d -o $STACK_USER $FM_RESTAPI_AUTH_CACHE_DIR
rm -f $FM_RESTAPI_AUTH_CACHE_DIR/*
}
function create_fault_user_group {
:
}
function init_fault {
create_fault_cache_dir
}
function install_fault {
if is_service_enabled fm-common; then
install_fm_common
fi
if is_service_enabled fm-client || is_service_enabled fm-common; then
install_fm_client
fi
if is_service_enabled fm-api; then
install_fm_api
fi
if is_service_enabled fm-mgr; then
install_fm_mgr
fi
if is_service_enabled fm-rest-api && is_service_enabled stx-config; then
install_fm_rest_api
fi
}
function install_fm_api {
pushd $STX_FAULT_DIR/fm-api
sudo python setup.py install \
--root=/ \
--install-lib=$PYTHON_SITE_DIR \
--prefix=/usr \
--install-data=/usr/share \
--single-version-externally-managed
popd
}
function install_fm_client {
pushd $STX_FAULT_DIR/python-fmclient/fmclient
sudo python setup.py install \
--root=/ \
--install-lib=$PYTHON_SITE_DIR \
--prefix=/usr \
--install-data=/usr/share \
--single-version-externally-managed
popd
}
function install_fm_common {
pushd $STX_FAULT_DIR/fm-common/sources
local major minor version x
# get fm-common version
read x version <<< $(grep '^Version: ' $STX_FAULT_DIR/fm-common/PKG-INFO)
major=${version%%.*}
minor=${version##*.}
build_fm_common $major $minor
# install to STX_INST_DIR
# Note that DESTDIR prefixes the other locations in the Makefile
make \
DESTDIR=$STX_INST_DIR \
BINDIR=/bin \
LIBDIR=/lib \
INCDIR=/include \
MAJOR=$major \
MINOR=$minor \
install
sudo python setup.py install \
--root=/ \
--install-lib=$PYTHON_SITE_DIR \
--prefix=/usr \
--install-data=/usr/share \
# This _is_ still a little nasty, clean it up
install -m 755 fm_db_sync_event_suppression.py \
$STX_INST_DIR/bin/fm_db_sync_event_suppression.py
# install the headers that used by fm-mgr package
install -m 644 -p -D fmConfig.h $STX_INST_DIR/include/fmConfig.h
install -m 644 -p -D fmLog.h $STX_INST_DIR/include/fmLog.h
# Make sure we can find it later
# TODO: this should be managed better
echo $STX_INST_DIR/lib | sudo tee /etc/ld.so.conf.d/stx-fault.conf
sudo ldconfig
popd
}
function install_fm_mgr {
pushd $STX_FAULT_DIR/fm-mgr/sources
local major minor version x
# get fm-mgr version
read x version <<< $(grep '^Version: ' $STX_FAULT_DIR/fm-mgr/PKG-INFO)
major=${version%%.*}
minor=${version##*.}
build_fm_mgr $major $minor
# install to STX_INST_DIR
# Note that DESTDIR prefixes the other locations in the Makefile
make \
DESTDIR=$STX_INST_DIR \
BINDIR=/bin \
MAJOR=$major \
MINOR=$minor \
install
popd
}
function install_fm_rest_api {
setup_develop $FM_RESTAPI_DIR
}
function start_fault {
if is_service_enabled fm-rest-api; then
run_process fm-api "$STX_BIN_DIR/fm-api --config-file $FM_RESTAPI_CONF"
fi
}
function stop_fault {
if is_service_enabled fm-rest-api; then
stop_process fm_api
fi
}
$_XTRACE_STX_FAULT

88
devstack/plugin.sh Normal file
View File

@ -0,0 +1,88 @@
#!/bin/bash
# devstack/plugin.sh
# Triggers specific functions to install and configure stx-integ
echo_summary "$STX_TIS_NAME devstack plugin.sh called: $1/$2"
# check for service enabled
if is_service_enabled $STX_TIS_NAME; then
if [[ "$1" == "stack" && "$2" == "install" ]]; then
# Perform installation of source
echo_summary "Install $STX_TIS_NAME"
if is_service_enabled $STX_CONFIG_NAME; then
install_cgtsclient
install_sysinv_depends
install_sysinv
fi
if is_service_enabled $STX_FAULT_NAME; then
install_fault
fi
elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
# Configure after the other layer 1 and 2 services have been configured
echo_summary "Configure $STX_TIS_NAME"
if is_service_enabled $STX_CONFIG_NAME; then
configure_sysinv
create_sysinv_user_group
create_sysinv_accounts
fi
if is_service_enabled $STX_FAULT_NAME; then
configure_fault
create_fault_user_group
create_fault_accounts
fi
elif [[ "$1" == "stack" && "$2" == "extra" ]]; then
# Initialize and start the service
echo_summary "Initialize and start $STX_TIS_NAME"
if is_service_enabled $STX_CONFIG_NAME; then
init_sysinv
start_sysinv
fi
if is_service_enabled $STX_FAULT_NAME; then
init_fault
start_fault
fi
elif [[ "$1" == "stack" && "$2" == "test-config" ]]; then
# do sanity test
echo_summary "test-config $STX_TIS_NAME"
if is_service_enabled $STX_CONFIG_NAME; then
check_sysinv_services
fi
fi
if [[ "$1" == "unstack" ]]; then
# Shut down services
echo_summary "Stop $STX_TIS_NAME"
if is_service_enabled $STX_CONFIG_NAME; then
stop_sysinv
fi
if is_service_enabled $STX_FAULT_NAME; then
stop_fault
fi
fi
if [[ "$1" == "clean" ]]; then
echo_summary "Clean $STX_TIS_NAME"
if is_service_enabled $STX_CONFIG_NAME; then
cleanup_sysinv
fi
if is_service_enabled $STX_FAULT_NAME; then
cleanup_fault
fi
fi
fi

53
devstack/settings Normal file
View File

@ -0,0 +1,53 @@
#!/bin/bash
# Devstack settings
# This must not use any variables to work properly in OpenStack's DevStack playbook
define_plugin stx-tis-repo
# This works for Zuul jobs using OpenStack's DevStack roles
plugin_requires stx-tis-repo stx-update
plugin_requires stx-tis-repo stx-integ
STX_TIS_NAME=stx-tis-repo
enable_service $STX_TIS_NAME
# Settings for stx-config ----------
STX_CONFIG_NAME=stx-config
######### Plugin Specific ##########
enable_service $STX_CONFIG_NAME
GITREPO[$STX_CONFIG_NAME]=$GIT_BASE/openstack/$STX_CONFIG_DIR
GITDIR[$STX_CONFIG_NAME]=$DEST/$STX_CONFIG_DIR
GITBRANCH[$STX_CONFIG_NAME]=master
# stx-integ
enable_service platform-util
# stx-update
enable_service sw-patch tsconfig
# Settings for stx-fault ----------
STX_FAULT_NAME=stx-fault
enable_service $STX_FAULT_NAME
# emulate enable_plugin, can't call it because we don't actually want it enabled
GITREPO[$STX_FAULT_NAME]=$GIT_BASE/openstack/$STX_FAULT_DIR
GITDIR[$STX_FAULT_NAME]=$DEST/$STX_FAULT_DIR
GITBRANCH[$STX_FAULT_NAME]=master
# Circular dependencies are fun!
# fm-rest-api has an undeclared dependency on cgtsclient from stx-config
# so if that is not present we can't install it
if ! is_service_enabled stx-config; then
disable_service fm-rest-api
fi
# but fm-rest-api has its own (declared!) external dependencies too
if is_service_enabled fm-rest-api; then
# stx-update
enable_service tsconfig
fi
# Initial source of lib script
source $DEST/stx-tis-repo/devstack/lib/stx-config
source $DEST/stx-tis-repo/devstack/lib/stx-fault

2
test-requirements.txt Normal file
View File

@ -0,0 +1,2 @@
hacking!=0.13.0,<0.14,>=0.12.0
bashate >= 0.2

34
tox.ini Normal file
View File

@ -0,0 +1,34 @@
[tox]
envlist = linters
minversion = 2.3
skipsdist = True
[testenv]
install_command = pip install -U {opts} {packages}
setenv = VIRTUAL_ENV={envdir}
OS_STDOUT_CAPTURE=1
OS_STDERR_CAPTURE=1
OS_TEST_TIMEOUT=60
deps = -r{toxinidir}/test-requirements.txt
[testenv:linters]
whitelist_externals = bash
# Ignore bashate:
# - E006 Line too long
commands =
bash -c "find {toxinidir} \
-not \( -type d -name .?\* -prune \) \
-type f \
-not -name \*~ \
-not -name \*.md \
\( \
-name \*.sh \
-or -not -wholename \*/devstack/files/\* \
-wholename \*/devstack/\* \
\) \
-print0 | xargs -0 bashate -v -iE006"
[testenv:functional]
basepython = python3
whitelist_externals = cat
commands = cat /etc/group