Eric MacDonald 804ec52227 Add redfish support detection to maintenance
This update

1. Refactors some of the common maintenance ipmi
   definitions and utilities into a more generic
   'bmcUtil' module to reduce code duplication and improve
   improve code reuse with the introduction of a second
   bmc communication protocol ; redfish.

2. Creates a new 'redFishUtil' module similar to the existing
   'ipmiUtil' module but in support of common redfish
   utilities and definitions that can be used by both
   maintenance and the hardware monitor.

3. Moves the existing 'mtcIpmiUtil' module to a more common
   'mtcBmcUtil' and renames the 'ipmi_command_send/recv' to
   the more generic 'bmc_command_send/recv' which are enhanced
   to support both ipmi and redfish bmc communication methods.

4. Renames the bmc info collection and connection monitor ;
   'bm_handler' to 'bmc_handler' and adds support necessary
   to learn if a host's bmc supports redfish.

5. Renames the existing 'mtcThread_ipmitool' to a more common
   'mtcThread_bmc' and redfishtool support for the now common
   set of bmc thread commands and the addition of the new
   redfishtool bmc query, aka 'redfish root query', used to
   detect if a host's bmc supports redfish.

   Note: This aspect is the primary feature of this update.

         Namely the ability to detect and print a log indicating
         if a host's bmc supports redfish.

Test Plan:

PASS: Verify sensor monitoring and alarming still works.
PASS: Verify power-off command handling.
PASS: Verify power-on command handling.
PASS: Verify reset command handling.
PASS: Verify reinstall (netboot) command handling.
PASS: Verify logging when redfish is not supported.
PASS: Verify logging when redfish is supported.
PASS: Verify ipmitool is used regardless of redfish support.
PASS: Verify mtce thread error handling for both protocols.

Change-Id: I72e63958f61d10f5c0d4a93a49a7f39bdd53a76f
Story: 2005861
Task: 35825
Signed-off-by: Eric MacDonald <eric.macdonald@windriver.com>
2019-08-19 14:03:37 +00:00

1023 lines
35 KiB
Bash

#!/bin/bash
#
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (C) 2019 Intel Corporation
#
# lib/metal
# Functions to control the configuration and operation of metal
#
# To add a new maintenance service, the following functions should be
# added/modified.
#
# install_maintenance Build and install maintenance services regardless
# node personality. The services within this function
# will be installed on each node.
#
# install_mtce_{personality}
# Per personality build and install services on
# specific node. A new kind of personality installation
# function has to be added under 'install' of plugin.sh.
#
# configure_maintenance Add configuration for services, if a config file
# template is needed, add it to devstack/files/
# AIO-SX supported only for current configuration.
#
# start_{service_name} The service start function, add to start_maintenance
# if the service is running on each node, or to
# start_mtce_{personality} if the service is running on one
# node per personality.
# Make sure the service is enabled in devstack when testing,
# otherwise run_process will return immediately.
#
# stop_{service_name} Stop the service when unstack.sh is processed. Called by
# stop_maintenance or stop_mtce_{personality}.
#
# cleanup_metal Remove the service files installed.
_XTRACE_STX_METAL=$(set +o | grep xtrace)
set -o xtrace
# Defaults
# --------
STX_METAL_DIR=${GITDIR[$STX_METAL_NAME]}
# STX_INST_DIR should be a non-root-writable place to install build artifacts
STX_INST_DIR=${STX_INST_DIR:-/usr/local}
STX_BIN_DIR=$STX_INST_DIR/bin
# Set up so we don't use sudo for installs when not necessary
STX_SUDO="sudo"
[[ -w $STX_INST_DIR ]] && STX_SUDO="env"
SYSCONFDIR=/etc
# Todo:
# For the time being, we use the same interface for oam and management
# network as a temporal solution. In the future, stx devstack common
# module should create multiple inteface, then we need make changes here
# accordingly.
OAM_ETH_NAME=$(ip -f inet route | awk '/default/ {print $5}' | head -1)
MGMT_ETH_NAME=$(ip -f inet route | awk '/default/ {print $5}' | head -1)
SW_VERSION=18.10
OCF_ROOT=/usr/lib/ocf
# Functions
# ---------
function build_mtce {
pushd ${STX_METAL_DIR}/mtce/src
local major minor version x
if [[ -z $1 || -z $2 ]]; then
# get mtce version
read x version <<< $(grep '^Version:' ${STX_METAL_DIR}/mtce/PKG-INFO)
major=${version%%.*}
minor=${version##*.}
else
major=$1
minor=$2
fi
# build
CPATH=$STX_INST_DIR/include LIBRARY_PATH=$STX_INST_DIR/lib make \
VER_MJR=${major} \
VER=${major}.${minor} \
CCFLAGS=' -g -O2 -Wall -Wextra -std=c++11 -DBUILDINFO="\"$$(date)\""' \
EXTRALDFLAGS="-L$STX_INST_DIR"/lib64 \
build
popd
}
function build_mtce_common {
pushd ${STX_METAL_DIR}/mtce-common/src
# build
CPATH=$STX_INST_DIR/include LIBRARY_PATH=$STX_INST_DIR/lib make \
CCFLAGS=' -g -O2 -Wall -Wextra -std=c++11 -DBUILDINFO="\"$$(date)\""' \
build
popd
}
function build_inventory {
pushd ${STX_METAL_DIR}/inventory/inventory
python setup.py build
popd
}
function build_inventory_client {
pushd ${STX_METAL_DIR}/python-inventoryclient/inventoryclient
python setup.py build
popd
}
function install_metal {
install_mtce_common
# components could be seperately installed if
# installation is well controlled in Makefile
install_mtce
if is_service_enabled mtce-compute; then
install_mtce_compute
fi
if is_service_enabled mtce-control; then
install_mtce_control
fi
if is_service_enabled mtce-storage; then
install_mtce_storage
fi
if is_service_enabled inventory-api || is_service_enabled inventory-conductor || is_service_enabled inventory-agent; then
install_inventory
fi
if is_service_enabled inventory-client; then
install_inventory_client
fi
}
function install_mtce_common {
pushd ${STX_METAL_DIR}/mtce-common/src
local x version
# get mtce-common version
read x version <<< $(grep '^Version:' ${STX_METAL_DIR}/mtce-common/PKG-INFO)
local major=${version%%.*}
local minor=${version##*.}
build_mtce_common
local lib64_dir=${STX_INST_DIR}/lib64
local inc_dir=${STX_INST_DIR}/include
local inc_dir_common=${STX_INST_DIR}/include/mtce-common
local inc_dir_daemon=${STX_INST_DIR}/include/mtce-daemon
local libdaecom_file=( \
"common/libcommon.a" \
"common/libthreadUtil.a" \
"common/libbmcUtils.a" \
"common/libpingUtil.a" \
"common/libnodeBase.a" \
"common/libregexUtil.a" \
"common/libhostUtil.a" \
"daemon/libdaemon.a" \
)
$STX_SUDO install -m 755 -d ${lib64_dir}
$STX_SUDO install -m 644 -t ${lib64_dir} ${libdaecom_file[*]}
$STX_SUDO install -m 755 -d ${inc_dir}
local commonhdr_file=( \
"common/fitCodes.h" \
"common/logMacros.h" \
"common/returnCodes.h" \
"common/nodeTimers.h" \
"common/hostClass.h" \
"common/httpUtil.h" \
"common/jsonUtil.h" \
"common/msgClass.h" \
"common/nodeBase.h" \
"common/nodeEvent.h" \
"common/nodeMacro.h" \
"common/nodeUtil.h" \
"common/timeUtil.h" \
"common/alarmUtil.h" \
"common/hostUtil.h" \
"common/bmcUtil.h" \
"common/ipmiUtil.h" \
"common/redfishUtil.h" \
"common/nlEvent.h" \
"common/pingUtil.h" \
"common/regexUtil.h" \
"common/threadUtil.h" \
"common/tokenUtil.h" \
"common/secretUtil.h" \
)
$STX_SUDO install -m 755 -d ${inc_dir}
$STX_SUDO install -m 644 -t ${inc_dir} ${commonhdr_file[*]}
local daemonhdr_file=( \
"daemon/daemon_ini.h" \
"daemon/daemon_common.h" \
"daemon/daemon_option.h" \
)
$STX_SUDO install -m 755 -d ${inc_dir}
$STX_SUDO install -m 644 -t ${inc_dir} ${daemonhdr_file[*]}
popd
}
function install_mtce_compute {
local sysconf_dir=${SYSCONFDIR}
local unit_dir=${SYSCONFDIR}/systemd/system
local local_etc_pmond=${SYSCONFDIR}/pmon.d
local local_etc_goenabledd=${SYSCONFDIR}/goenabled.d
# install
pushd ${STX_METAL_DIR}/mtce-compute/src
# Worker-Only Init Scripts
sudo install -m 755 -p -D scripts/goenabled ${sysconf_dir}/init.d/goenabledWorker
# Worker-Only Process Monitor Config files
sudo install -m 755 -d ${local_etc_pmond}
# Worker-Only Go Enabled Test
sudo install -m 755 -d ${local_etc_goenabledd}
sudo install -m 755 -p -D scripts/virt-support-goenabled.sh ${local_etc_goenabledd}/virt-support-goenabled.sh
popd
}
function install_mtce_control {
local sysconf_dir=${SYSCONFDIR}
local unit_dir=${SYSCONFDIR}/systemd/system
local local_etc_pmond=${SYSCONFDIR}/pmon.d
local local_etc_goenabledd=${SYSCONFDIR}/goenabled.d
# install
pushd ${STX_METAL_DIR}/mtce-control/src
# Controller-Only Init Scripts
sudo install -m 755 -p -D scripts/goenabled ${sysconf_dir}/init.d/goenabledControl
sudo install -m 755 -p -D scripts/hbsAgent ${sysconf_dir}/init.d/hbsAgent
# Controller-Only Process Monitor Config files
sudo install -m 755 -d ${local_etc_pmond}
sudo install -m 644 -p -D scripts/hbsAgent.conf ${local_etc_pmond}/hbsAgent.conf
# Controller-Only Heartbeat Service file
sudo install -m 644 -p -D scripts/hbsAgent.service ${unit_dir}/devstack@hbsAgent.service
# Controller-Only Go Enabled Test
sudo install -m 755 -d ${local_etc_goenabledd}
popd
}
function install_inventory {
local lib_dir=${PREFIX}/lib
local unit_dir=${PREFIX}/lib/systemd/system
local lib64_dir=${PREFIX}/lib64
local pythonroot=${lib64_dir}/python2.7/site-packages
local sysconf_dir=${SYSCONFDIR}
local local_etc_goenabledd=${SYSCONFDIR}/goenabled.d
local local_etc_inventory=${SYSCONFDIR}/inventory
local local_etc_motdd=${SYSCONFDIR}/motd.d
build_inventory
pushd ${STX_METAL_DIR}/inventory/inventory
sudo python setup.py install \
--root=/ \
--install-lib=$PYTHON_SITE_DIR \
--prefix=/usr \
--install-data=/usr/share \
--single-version-externally-managed
sudo install -d -m 755 ${local_etc_goenabledd}
sudo install -p -D -m 755 etc/inventory/inventory_goenabled_check.sh ${local_etc_goenabledd}/inventory_goenabled_check.sh
sudo install -d -m 755 ${local_etc_inventory}
sudo install -p -D -m 755 etc/inventory/policy.json ${local_etc_inventory}/policy.json
sudo install -d -m 755 ${local_etc_motdd}
sudo install -p -D -m 755 etc/inventory/motd-system ${local_etc_motdd}/10-system-config
sudo install -m 755 -p -D scripts/inventory-api ${lib_dir}/ocf/resource.d/platform/inventory-api
sudo install -m 755 -p -D scripts/inventory-conductor ${lib_dir}/ocf/resource.d/platform/inventory-conductor
sudo install -m 644 -p -D scripts/inventory-api.service ${unit_dir}/inventory-api.service
sudo install -m 644 -p -D scripts/inventory-conductor.service ${unit_dir}/inventory-conductor.service
popd
}
function install_inventory_client {
pushd ${STX_METAL_DIR}/python-inventoryclient/inventoryclient
build_inventory_client
sudo python setup.py install \
--root=/ \
--install-lib=$PYTHON_SITE_DIR \
--prefix=/usr \
--install-data=/usr/share \
--single-version-externally-managed
sudo install -d -m 755 /etc/bash_completion.d/
sudo install -p -D -m 664 tools/inventory.bash_completion /etc/bash_completion.d/inventory.bash_completion
popd
}
function install_mtce_storage {
local sysconf_dir=${SYSCONFDIR}
local unit_dir=${SYSCONFDIR}/systemd/system
local local_etc_pmond=${SYSCONFDIR}/pmon.d
local local_etc_goenabledd=${SYSCONFDIR}/goenabled.d
local local_etc_servicesd=${SYSCONFDIR}/services.d
# install
pushd ${STX_METAL_DIR}/mtce-storage/src
# Storage-Only Init Scripts
sudo install -m 755 -p -D scripts/goenabled ${sysconf_dir}/init.d/goenabledStorage
# Storage-Only Process Monitor Config files
sudo install -m 755 -d ${local_etc_pmond}
# Storage-Only Go Enabled Tests
sudo install -m 755 -d ${local_etc_goenabledd}
# Storage-Only Services
sudo install -m 755 -d ${local_etc_servicesd}/storage
popd
}
function install_mtce {
pushd ${STX_METAL_DIR}/mtce/src
local x version
# get mtce version
read x version <<< $(grep '^Version:' ${STX_METAL_DIR}/mtce/PKG-INFO)
local major=${version%%.*}
local minor=${version##*.}
build_mtce $major $minor
local bin_dir=/usr/local/bin
local sbin_dir=/usr/local/sbin
local lib_dir=${STX_INST_DIR}/lib
local lib64_dir=${STX_INST_DIR}/lib64
local inc_dir=${STX_INST_DIR}/include
local sysconf_dir=${SYSCONFDIR}
local unit_dir=${SYSCONFDIR}/systemd/system
local local_etc_pmond=${sysconf_dir}/pmon.d
local local_etc_goenabledd=${sysconf_dir}/goenabled.d
local local_etc_servicesd=${sysconf_dir}/services.d
local local_etc_logrotated=${sysconf_dir}/logrotate.d
# install
if [ ! -d "/etc/rc.d" ]; then
sudo mkdir -p /etc/rc.d
fi
sudo ln -sf /etc/init.d /etc/rc.d/init.d
# TODO: follow install_files way in install_mtce_common to install files
# Resource Agent Stuff
sudo install -m 755 -d ${OCF_ROOT}/resource.d/platform
sudo install -m 755 -p -D scripts/mtcAgent ${OCF_ROOT}/resource.d/platform/mtcAgent
sudo install -m 755 -p -D hwmon/scripts/ocf/hwmon ${OCF_ROOT}/resource.d/platform/hwmon
# TODO: fix this issue in multi-os task
# The default shell of ubuntu is dash, causes loop syntax error
if is_ubuntu; then
sudo sed -i "s|#!/bin/sh|#!/bin/bash|g" ${OCF_ROOT}/resource.d/platform/mtcAgent
sudo sed -i "s|#!/bin/sh|#!/bin/bash|g" ${OCF_ROOT}/resource.d/platform/hwmon
fi
# TODO: figure out why OCF_ROOT is not set when running stack.sh
# workaround to hardcode OCF_ROOT
# sed -i "s|\${OCF_ROOT}|\${OCF_ROOT}|g" ${OCF_ROOT}/resource.d/platform/mtcAgent
# sed -i "s|\${OCF_ROOT}|\${OCF_ROOT}|g" ${OCF_ROOT}/resource.d/platform/hwmon
# config files
sudo install -m 755 -d ${sysconf_dir}/mtc
sudo install -m 644 -p -D scripts/mtc.ini ${sysconf_dir}/mtc.ini
sudo install -m 644 -p -D scripts/mtc.conf ${sysconf_dir}/mtc.conf
sudo install -m 644 -p -D fsmon/scripts/fsmond.conf ${sysconf_dir}/mtc/fsmond.conf
sudo install -m 644 -p -D hwmon/scripts/hwmond.conf ${sysconf_dir}/mtc/hwmond.conf
sudo install -m 644 -p -D pmon/scripts/pmond.conf ${sysconf_dir}/mtc/pmond.conf
sudo install -m 644 -p -D hostw/scripts/hostwd.conf ${sysconf_dir}/mtc/hostwd.conf
sudo install -m 755 -d ${sysconf_dir}/bmc/server_profiles.d
sudo install -m 644 -p -D scripts/sensor_hp360_v1_ilo_v4.profile ${sysconf_dir}/bmc/server_profiles.d/sensor_hp360_v1_ilo_v4.profile
sudo install -m 644 -p -D scripts/sensor_hp380_v1_ilo_v4.profile ${sysconf_dir}/bmc/server_profiles.d/sensor_hp380_v1_ilo_v4.profile
sudo install -m 644 -p -D scripts/sensor_quanta_v1_ilo_v4.profile ${sysconf_dir}/bmc/server_profiles.d/sensor_quanta_v1_ilo_v4.profile
# binaries
sudo install -m 755 -p -D maintenance/mtcAgent ${bin_dir}/mtcAgent
sudo install -m 755 -p -D maintenance/mtcClient ${bin_dir}/mtcClient
sudo install -m 755 -p -D heartbeat/hbsAgent ${bin_dir}/hbsAgent
sudo install -m 755 -p -D heartbeat/hbsClient ${bin_dir}/hbsClient
sudo install -m 755 -p -D pmon/pmond ${bin_dir}/pmond
sudo install -m 755 -p -D hostw/hostwd ${bin_dir}/hostwd
sudo install -m 755 -p -D fsmon/fsmond ${bin_dir}/fsmond
sudo install -m 755 -p -D hwmon/hwmond ${bin_dir}/hwmond
sudo install -m 755 -p -D mtclog/mtclogd ${bin_dir}/mtclogd
sudo install -m 755 -p -D alarm/mtcalarmd ${bin_dir}/mtcalarmd
sudo install -m 755 -p -D scripts/wipedisk ${bin_dir}/wipedisk
$STX_SUDO install -m 755 -p -D fsync/fsync ${STX_INST_DIR}/sbin/fsync
sudo install -m 700 -p -D pmon/scripts/pmon-restart ${sbin_dir}/pmon-restart
sudo install -m 700 -p -D pmon/scripts/pmon-start ${sbin_dir}/pmon-start
sudo install -m 700 -p -D pmon/scripts/pmon-stop ${sbin_dir}/pmon-stop
# init script files
sudo install -m 755 -p -D scripts/mtcClient ${sysconf_dir}/init.d/mtcClient
sudo install -m 755 -p -D scripts/hbsClient ${sysconf_dir}/init.d/hbsClient
sudo install -m 755 -p -D hwmon/scripts/lsb/hwmon ${sysconf_dir}/init.d/hwmon
sudo install -m 755 -p -D fsmon/scripts/fsmon ${sysconf_dir}/init.d/fsmon
sudo install -m 755 -p -D scripts/mtclog ${sysconf_dir}/init.d/mtclog
sudo install -m 755 -p -D pmon/scripts/pmon ${sysconf_dir}/init.d/pmon
sudo install -m 755 -p -D hostw/scripts/hostw ${sysconf_dir}/init.d/hostw
sudo install -m 755 -p -D alarm/scripts/mtcalarm.init ${sysconf_dir}/init.d/mtcalarm
sudo install -m 755 -p -D scripts/config ${sysconf_dir}/init.d/config
sudo install -m 755 -p -D scripts/hwclock.sh ${sysconf_dir}/init.d/hwclock.sh
sudo install -m 644 -p -D scripts/hwclock.service ${unit_dir}/devstack@hwclock.service
# systemd service files
sudo install -m 644 -p -D fsmon/scripts/fsmon.service ${unit_dir}/devstack@fsmon.service
sudo install -m 644 -p -D hwmon/scripts/hwmon.service ${unit_dir}/devstack@hwmon.service
sudo install -m 644 -p -D pmon/scripts/pmon.service ${unit_dir}/devstack@pmon.service
sudo install -m 644 -p -D hostw/scripts/hostw.service ${unit_dir}/devstack@hostw.service
sudo install -m 644 -p -D scripts/mtcClient.service ${unit_dir}/devstack@mtcClient.service
sudo install -m 644 -p -D scripts/hbsClient.service ${unit_dir}/devstack@hbsClient.service
sudo install -m 644 -p -D scripts/mtclog.service ${unit_dir}/devstack@mtclog.service
sudo install -m 644 -p -D scripts/goenabled.service ${unit_dir}/devstack@goenabled.service
sudo install -m 644 -p -D scripts/runservices.service ${unit_dir}/devstack@runservices.service
sudo install -m 644 -p -D alarm/scripts/mtcalarm.service ${unit_dir}/devstack@mtcalarm.service
# go enabled stuff
sudo install -m 755 -d ${local_etc_goenabledd}
sudo install -m 755 -p -D scripts/goenabled ${sysconf_dir}/init.d/goenabled
# start or stop services test script
sudo install -m 755 -d ${local_etc_servicesd}/controller
sudo install -m 755 -d ${local_etc_servicesd}/storage
sudo install -m 755 -d ${local_etc_servicesd}/worker
sudo install -m 755 -p -D scripts/mtcTest ${local_etc_servicesd}/controller
sudo install -m 755 -p -D scripts/mtcTest ${local_etc_servicesd}/storage
sudo install -m 755 -p -D scripts/mtcTest ${local_etc_servicesd}/worker
sudo install -m 755 -p -D scripts/runservices ${sysconf_dir}/init.d/runservices
# test tools
sudo install -m 755 -p -D scripts/dmemchk.sh ${sbin_dir}
# process monitor config files
sudo install -m 755 -d ${local_etc_pmond}
sudo install -m 644 -p -D scripts/mtcClient.conf ${local_etc_pmond}/mtcClient.conf
sudo install -m 644 -p -D scripts/hbsClient.conf ${local_etc_pmond}/hbsClient.conf
sudo install -m 644 -p -D pmon/scripts/acpid.conf ${local_etc_pmond}/acpid.conf
sudo install -m 644 -p -D pmon/scripts/sshd.conf ${local_etc_pmond}/sshd.conf
sudo install -m 644 -p -D pmon/scripts/syslog-ng.conf ${local_etc_pmond}/syslog-ng.conf
sudo install -m 644 -p -D pmon/scripts/nslcd.conf ${local_etc_pmond}/nslcd.conf
sudo install -m 644 -p -D fsmon/scripts/fsmon.conf ${local_etc_pmond}/fsmon.conf
sudo install -m 644 -p -D scripts/mtclogd.conf ${local_etc_pmond}/mtclogd.conf
sudo install -m 644 -p -D alarm/scripts/mtcalarm.pmon.conf ${local_etc_pmond}/mtcalarm.conf
# log rotation
sudo install -m 755 -d ${local_etc_logrotated}
sudo install -m 644 -p -D scripts/mtce.logrotate ${local_etc_logrotated}/mtce.logrotate
sudo install -m 644 -p -D hostw/scripts/hostw.logrotate ${local_etc_logrotated}/hostw.logrotate
sudo install -m 644 -p -D pmon/scripts/pmon.logrotate ${local_etc_logrotated}/pmon.logrotate
sudo install -m 644 -p -D fsmon/scripts/fsmon.logrotate ${local_etc_logrotated}/fsmon.logrotate
sudo install -m 644 -p -D hwmon/scripts/hwmon.logrotate ${local_etc_logrotated}/hwmon.logrotate
sudo install -m 644 -p -D alarm/scripts/mtcalarm.logrotate ${local_etc_logrotated}/mtcalarm.logrotate
# software development files
$STX_SUDO install -m 644 -p -D heartbeat/mtceHbsCluster.h ${inc_dir}/mtceHbsCluster.h
$STX_SUDO install -m 755 -p -D public/libamon.so.${major} ${lib64_dir}/libamon.so.${major}
popd
pushd ${lib64_dir}
$STX_SUDO ln -sf libamon.so.${major} libamon.so.${major}.${minor}
$STX_SUDO ln -sf libamon.so.${major} libamon.so
popd
}
function configure_metal {
echo "${STX_INST_DIR}/lib64" | sudo tee /etc/ld.so.conf.d/stx-metal.conf
sudo ldconfig
sudo mkdir -p /etc/platform
sudo cp -p ${GITDIR["$STX_METAL_NAME"]}/devstack/files/platform.conf /etc/platform/
# TODO: implement other configuration
# All-in-one simplex config
if is_service_enabled mtce-control -a is_service_enabled mtce-compute \
-a is_service_enabled mtce-storage; then
sudo sed -i "s|@SUBFUNCTION@|controller,worker,storage|g" /etc/platform/platform.conf
sudo sed -i "s|@SYS_TYPE@|All-in-one|g" /etc/platform/platform.conf
sudo sed -i "s|@SYS_MODE@|simplex|g" /etc/platform/platform.conf
sudo sed -i "s|@SW_VERSION@|${SW_VERSION}|g" /etc/platform/platform.conf
sudo sed -i "s|@MGMT_ETH@|${MGMT_ETH_NAME}|g" /etc/platform/platform.conf
sudo sed -i "s|@OAM_ETH@|${OAM_ETH_NAME}|g" /etc/platform/platform.conf
fi
# TODO: enable controllerconfig to do this
# Todo:
# For the time being, we use the same ips as fixed and float ip. In
# the future, we need stx devstack common module to enable float ip and
# write them in /etc/hosts, then we can remove below code.
# add floating ip hostname in hosts
if ! grep -q 'controller$' /etc/hosts; then
echo "$HOST_IP controller" | sudo tee -a /etc/hosts
fi
# add controller-0
if ! grep -q 'controller-0$' /etc/hosts; then
echo "$HOST_IP controller-0" | sudo tee -a /etc/hosts
fi
# puppet configuration for mtce
iniset -sudo /etc/mtc.ini "agent" "keystone_auth_username" "admin"
iniset -sudo /etc/mtc.ini "agent" "keystone_auth_pw" "$SERVICE_PASSWORD"
iniset -sudo /etc/mtc.ini "agent" "keystone_auth_project" "admin"
iniset -sudo /etc/mtc.ini "agent" "keystone_user_domain" "$SERVICE_DOMAIN_NAME"
iniset -sudo /etc/mtc.ini "agent" "keystone_project_domain" "$SERVICE_DOMAIN_NAME"
iniset -sudo /etc/mtc.ini "agent" "keystone_auth_host" "127.0.0.1"
iniset -sudo /etc/mtc.ini "agent" "keystone_auth_uri" "$KEYSTONE_SERVICE_URI"
iniset -sudo /etc/mtc.ini "agent" "keystone_auth_port" "5000"
iniset -sudo /etc/mtc.ini "agent" "keystone_region_name" "$REGION_NAME"
iniset -sudo /etc/mtc.ini "agent" "keyring_directory" "/opt/platform/.keyring/${SW_VERSION}"
# sm port add to config file
iniset -sudo /etc/mtc.ini "agent" "sm_server_port" "2124"
iniset -sudo /etc/mtc.ini "agent" "sm_client_port" "2224"
# TODO(dtroyer): Do this with the devstack functions in lib/apache
# # add port 5000 to keystone apache server
# sudo sed -i '$aListen 5000' /etc/apache2/sites-available/keystone-wsgi-public.conf
# sudo sed -i '$a<VirtualHost *:5000>' /etc/apache2/sites-available/keystone-wsgi-public.conf
# sudo sed -i '$aProxyPass / "unix:/var/run/uwsgi/keystone-wsgi-public.socket|uwsgi://uwsgi-uds-keystone-wsgi-public/" retry=0"' /etc/apache2/sites-available/keystone-wsgi-public.conf
# sudo sed -i '$a</VirtualHost>' /etc/apache2/sites-available/keystone-wsgi-public.conf
# sudo systemctl restart apache2
if is_ubuntu; then
sudo ln -sf /lib/lsb/init-functions /etc/init.d/functions
fi
}
function start_mtcAgent {
# add admin compute endpoint
if is_service_enabled nova; then
source openrc admin admin
openstack endpoint create --region RegionOne compute admin http://172.28.0.79/compute/v2.1
fi
# init mtcAgent
iniset -sudo /etc/systemd/system/devstack@mtcAgent.service "Service" "Type" "forking"
iniset -sudo /etc/systemd/system/devstack@mtcAgent.service "Service" "PIDFile" "/var/run/mtcAgent.pid"
iniset -sudo /etc/systemd/system/devstack@mtcAgent.service "Service" "Environment" "OCF_ROOT=${OCF_ROOT}"
sudo sed -i "s|OCF_RESKEY_state_default=\"standby\"|OCF_RESKEY_state_default=\"active\"|g" \
${OCF_ROOT}/resource.d/platform/mtcAgent
run_process mtcAgent "${OCF_ROOT}/resource.d/platform/mtcAgent start" root root
}
function start_hbsAgent {
run_process hbsAgent "${SYSCONFDIR}/rc.d/init.d/hbsAgent start" root root
}
function start_hwmon {
# init hwmon
iniset -sudo /etc/systemd/system/devstack@hwmon.service "Service" "Type" "forking"
iniset -sudo /etc/systemd/system/devstack@hwmon.service "Service" "PIDFile" "/var/run/hwmond.pid"
iniset -sudo /etc/systemd/system/devstack@hwmon.service "Service" "Environment" "OCF_ROOT=${OCF_ROOT}"
run_process hwmon "${OCF_ROOT}/resource.d/platform/hwmon start" root root
}
function start_mtce_control {
# Oneshot goenabled control
sudo ${SYSCONFDIR}/init.d/goenabledControl start
if is_service_enabled mtcAgent; then
start_mtcAgent
fi
if is_service_enabled hbsAgent; then
start_hbsAgent
fi
if is_service_enabled hwmon && is_service_enabled sysinv; then
start_hwmon
fi
}
function start_mtce_compute {
# Oneshot goenabled worker
sudo ${SYSCONFDIR}/init.d/goenabledWorker start
}
function start_mtce_storage {
# Oneshot goenabled storage
sudo ${SYSCONFDIR}/init.d/goenabledStorage start
}
function start_metal {
if is_service_enabled mtce-control; then
start_mtce_control
fi
if is_service_enabled mtce-compute; then
start_mtce_compute
fi
if is_service_enabled mtce-storage; then
start_mtce_storage
fi
start_goenabled
if is_service_enabled hbsClient; then
start_hbsClient
fi
if is_service_enabled mtcClient; then
start_mtcClient
fi
if is_service_enabled mtclog; then
start_mtclog
fi
if is_service_enabled mtcalarm; then
start_mtcalarm
fi
if is_service_enabled fsmon; then
start_fsmon
fi
if is_service_enabled pmon; then
start_pmon
fi
if is_service_enabled hostw; then
start_hostw
fi
}
function start_mtcClient {
run_process mtcClient "${SYSCONFDIR}/rc.d/init.d/mtcClient start" root root
}
function start_hbsClient {
run_process hbsClient "${SYSCONFDIR}/rc.d/init.d/hbsClient start" root root
}
function start_pmon {
run_process pmon "${SYSCONFDIR}/rc.d/init.d/pmon start" root root
}
function start_mtclog {
run_process mtclog "${SYSCONFDIR}/rc.d/init.d/mtclog start" root root
}
function start_mtcalarm {
run_process mtcalarm "${SYSCONFDIR}/rc.d/init.d/mtcalarm start" root root
}
function start_goenabled {
sudo ${SYSCONFDIR}/init.d/goenabled start
}
function start_fsmon {
run_process fsmon "${SYSCONFDIR}/rc.d/init.d/fsmon start" root root
}
function start_hostw {
run_process hostw "${SYSCONFDIR}/rc.d/init.d/hostw start" root root
}
function stop_mtcAgent {
stop_process mtcAgent
}
function stop_hbsAgent {
stop_process hbsAgent
}
function stop_hwmon {
stop_process hwmon
}
function stop_mtce_control {
sudo ${SYSCONFDIR}/init.d/goenabledControl stop
if is_service_enabled mtcAgent; then
stop_mtcAgent
fi
if is_service_enabled hbsAgent; then
stop_hbsAgent
fi
if is_service_enabled hwmon && is_service_enabled sysinv; then
stop_hwmon
fi
}
function stop_mtce_compute {
sudo ${SYSCONFDIR}/init.d/goenabledWorker stop
}
function stop_mtce_storage {
sudo ${SYSCONFDIR}/init.d/goenabledStorage stop
}
function stop_goenabled {
sudo ${SYSCONFDIR}/init.d/goenabled stop
}
function stop_pmon {
stop_process pmon
}
function stop_mtcClient {
stop_process mtcClient
}
function stop_hbsClient {
stop_process hbsClient
}
function stop_mtclog {
stop_process mtclog
}
function stop_mtcalarm {
stop_process mtcalarm
}
function stop_fsmon {
stop_process fsmon
}
function stop_hostw {
stop_process hostw
}
function stop_metal {
stop_goenabled
if is_service_enabled pmon; then
stop_pmon
fi
if is_service_enabled mtce; then
stop_mtcClient
fi
if is_service_enabled hbs; then
stop_hbsClient
fi
if is_service_enabled mtclog; then
stop_mtclog
fi
if is_service_enabled mtcalarm; then
stop_mtcalarm
fi
if is_service_enabled fsmon; then
stop_fsmon
fi
if is_service_enabled hostw; then
stop_hostw
fi
if is_service_enabled mtce-control; then
stop_mtce_control
fi
if is_service_enabled mtce-compute; then
stop_mtce_compute
fi
if is_service_enabled mtce-storage; then
stop_mtce_storage
fi
}
function cleanup_metal {
# TODO: move it to Makefile uninstall
# remove mtce
local x version
# get mtce version
read x version <<< $(grep '^Version:' ${STX_METAL_DIR}/mtce/PKG-INFO)
local major=${version%%.*}
local minor=${version##*.}
local bin_dir=/usr/local/bin
local sbin_dir=/usr/local/sbin
local lib_dir=${STX_INST_DIR}/lib
local lib64_dir=${STX_INST_DIR}/lib64
local inc_dir=${STX_INST_DIR}/include
local sysconf_dir=${SYSCONFDIR}
local unit_dir=${SYSCONFDIR}/systemd/system
local local_etc_pmond=${sysconf_dir}/pmon.d
local local_etc_goenabledd=${sysconf_dir}/goenabled.d
local local_etc_servicesd=${sysconf_dir}/services.d
local local_etc_logrotated=${sysconf_dir}/logrotate.d
sudo rm -rf ${OCF_ROOT}/resource.d/platform/mtcAgent
sudo rm -rf ${OCF_ROOT}/resource.d/platform/hwmon
sudo rm -rf ${sysconf_dir}/mtc.ini
sudo rm -rf ${sysconf_dir}/mtc.conf
sudo rm -rf ${sysconf_dir}/mtc/fsmond.conf
sudo rm -rf ${sysconf_dir}/mtc/hwmond.conf
sudo rm -rf ${sysconf_dir}/mtc/pmond.conf
sudo rm -rf ${sysconf_dir}/mtc/hostwd.conf
sudo rm -rf ${sysconf_dir}/bmc/server_profiles.d/sensor_hp360_v1_ilo_v4.profile
sudo rm -rf ${sysconf_dir}/bmc/server_profiles.d/sensor_hp380_v1_ilo_v4.profile
sudo rm -rf ${sysconf_dir}/bmc/server_profiles.d/sensor_quanta_v1_ilo_v4.profile
# binaries
sudo rm -rf ${bin_dir}/mtcAgent
sudo rm -rf ${bin_dir}/mtcClient
sudo rm -rf ${bin_dir}/hbsAgent
sudo rm -rf ${bin_dir}/hbsClient
sudo rm -rf ${bin_dir}/pmond
sudo rm -rf ${bin_dir}/hostwd
sudo rm -rf ${bin_dir}/fsmond
sudo rm -rf ${bin_dir}/hwmond
sudo rm -rf ${bin_dir}/mtclogd
sudo rm -rf ${bin_dir}/mtcalarmd
sudo rm -rf ${bin_dir}/wipedisk
rm -rf ${STX_INST_DIR}/sbin/fsync
sudo rm -rf ${sbin_dir}/pmon-restart
sudo rm -rf ${sbin_dir}/pmon-start
sudo rm -rf ${sbin_dir}/pmon-stop
# init script files
sudo rm -rf ${sysconf_dir}/init.d/mtcClient
sudo rm -rf ${sysconf_dir}/init.d/hbsClient
sudo rm -rf ${sysconf_dir}/init.d/hwmon
sudo rm -rf ${sysconf_dir}/init.d/fsmon
sudo rm -rf ${sysconf_dir}/init.d/mtclog
sudo rm -rf ${sysconf_dir}/init.d/pmon
sudo rm -rf ${sysconf_dir}/init.d/hostw
sudo rm -rf ${sysconf_dir}/init.d/mtcalarm
sudo rm -rf ${sysconf_dir}/init.d/config
sudo rm -rf ${sysconf_dir}/init.d/hwclock.sh
sudo rm -rf ${unit_dir}/devstack@hwclock.service
# systemd service files
sudo rm -rf ${unit_dir}/devstack@fsmon.service
sudo rm -rf ${unit_dir}/devstack@hwmon.service
sudo rm -rf ${unit_dir}/devstack@pmon.service
sudo rm -rf ${unit_dir}/devstack@hostw.service
sudo rm -rf ${unit_dir}/devstack@mtcClient.service
sudo rm -rf ${unit_dir}/devstack@hbsClient.service
sudo rm -rf ${unit_dir}/devstack@mtclog.service
sudo rm -rf ${unit_dir}/devstack@goenabled.service
sudo rm -rf ${unit_dir}/devstack@runservices.service
sudo rm -rf ${unit_dir}/devstack@mtcalarm.service
# go enabled stuff
sudo rm -rf ${sysconf_dir}/init.d/goenabled
# start or stop services test script
sudo rm -rf ${local_etc_servicesd}/worker
sudo rm -rf ${local_etc_servicesd}/controller
sudo rm -rf ${local_etc_servicesd}/storage
sudo rm -rf ${sysconf_dir}/init.d/runservices
# test tools
sudo rm -rf ${sbin_dir}/dmemchk.sh
# process monitor config files
sudo rm -rf ${local_etc_pmond}/mtcClient.conf
sudo rm -rf ${local_etc_pmond}/hbsClient.conf
sudo rm -rf ${local_etc_pmond}/acpid.conf
sudo rm -rf ${local_etc_pmond}/sshd.conf
sudo rm -rf ${local_etc_pmond}/syslog-ng.conf
sudo rm -rf ${local_etc_pmond}/nslcd.conf
sudo rm -rf ${local_etc_pmond}/fsmon.conf
sudo rm -rf ${local_etc_pmond}/mtclogd.conf
sudo rm -rf ${local_etc_pmond}/mtcalarm.conf
# log rotation
sudo rm -rf ${local_etc_logrotated}/mtce.logrotate
sudo rm -rf ${local_etc_logrotated}/hostw.logrotate
sudo rm -rf ${local_etc_logrotated}/pmon.logrotate
sudo rm -rf ${local_etc_logrotated}/fsmon.logrotate
sudo rm -rf ${local_etc_logrotated}/hwmon.logrotate
sudo rm -rf ${local_etc_logrotated}/mtcalarm.logrotate
# software development files
$STX_SUDO rm -rf ${inc_dir}/mtceHbsCluster.h
$STX_SUDO rm -rf ${lib64_dir}/libamon.so.${major}
$STX_SUDO rm -rf ${lib64_dir}/libamon.so.${major}.${minor}
$STX_SUDO rm -rf ${lib64_dir}/libamon.so
#remove mtce_common
local inc_dir_common=${STX_INST_DIR}/include/mtce-common
local inc_dir_daemon=${STX_INST_DIR}/include/mtce-daemon
local libdaecom_file=( \
"libcommon.a" \
"libthreadUtil.a" \
"libBmcUtils.a" \
"libpingUtil.a" \
"libnodeBase.a" \
"libregexUtil.a" \
"libhostUtil.a" \
"libdaemon.a" \
)
uninstall_files ${lib64_dir} "${libdaecom_file[*]}"
local daecomhdr_file=( \
"fitCodes.h" \
"logMacros.h" \
"returnCodes.h" \
"nodeTimers.h" \
"hostClass.h" \
"httpUtil.h" \
"jsonUtil.h" \
"msgClass.h" \
"nodeBase.h" \
"nodeEvent.h" \
"nodeMacro.h" \
"nodeUtil.h" \
"timeUtil.h" \
"alarmUtil.h" \
"hostUtil.h" \
"ipmiUtil.h" \
"nlEvent.h" \
"pingUtil.h" \
"regexUtil.h" \
"threadUtil.h" \
"tokenUtil.h" \
"secretUtil.h" \
"daemon_ini.h" \
"daemon_common.h" \
"daemon_option.h" \
)
uninstall_files ${inc_dir_common} "${daecomhdr_file[*]}"
if is_service_enabled mtce-compute; then
local sysconf_dir=${SYSCONFDIR}
local unit_dir=${SYSCONFDIR}/systemd/system
local local_etc_pmond=${SYSCONFDIR}/pmon.d
local local_etc_goenabledd=${SYSCONFDIR}/goenabled.d
sudo rm -rf ${sysconf_dir}/init.d/goenabledWorker
# Worker-Only Go Enabled Test
sudo rm -rf ${local_etc_goenabledd}/virt-support-goenabled.sh
fi
if is_service_enabled mtce-control; then
local sysconf_dir=${SYSCONFDIR}
local unit_dir=${SYSCONFDIR}/systemd/system
local local_etc_pmond=${SYSCONFDIR}/pmon.d
local local_etc_goenabledd=${SYSCONFDIR}/goenabled.d
# Controller-Only Init Scripts
sudo rm -rf ${sysconf_dir}/init.d/goenabledControl
sudo rm -rf ${sysconf_dir}/init.d/hbsAgent
sudo rm -rf ${local_etc_pmond}/hbsAgent.conf
sudo rm -rf ${unit_dir}/devstack@hbsAgent.service
fi
if is_service_enabled mtce-storage; then
local sysconf_dir=${SYSCONFDIR}
local unit_dir=${SYSCONFDIR}/systemd/system
local local_etc_pmond=${SYSCONFDIR}/pmon.d
local local_etc_goenabledd=${SYSCONFDIR}/goenabled.d
local local_etc_servicesd=${SYSCONFDIR}/services.d
# Storage-Only Init Scripts
sudo rm -rf ${sysconf_dir}/init.d/goenabledStorage
fi
if is_service_enabled inventory-api || is_service_enabled inventory-conductor || is_service_enabled inventory-agent; then
cleanup_inventory
fi
if is_service_enabled inventory-client; then
cleanup_inventory_client
fi
}
function cleanup_inventory {
local lib_dir=${PREFIX}/lib
local unit_dir=${PREFIX}/lib/systemd/system
local lib64_dir=${PREFIX}/lib64
local pythonroot=${lib64_dir}/python2.7/site-packages
local sysconf_dir=${SYSCONFDIR}
local local_etc_goenabledd=${SYSCONFDIR}/goenabled.d
local local_etc_inventory=${SYSCONFDIR}/inventory
local local_etc_motdd=${SYSCONFDIR}/motd.d
sudo pip uninstall -y inventory
sudo rm -rf ${local_etc_goenabledd}/inventory_goenabled_check.sh
sudo rm -rf ${local_etc_inventory}/policy.json
sudo rm -rf ${local_etc_motdd}/10-system-config
sudo rm -rf ${lib_dir}/ocf/resource.d/platform/inventory-api
sudo rm -rf ${lib_dir}/ocf/resource.d/platform/inventory-conductor
sudo rm -rf ${unit_dir}/inventory-api.service
sudo rm -rf ${unit_dir}/inventory-conductor.service
}
function cleanup_inventory_client {
sudo pip uninstall -y inventoryclient
sudo rm -rf /etc/bash_completion.d/inventory.bash_completion
}
function uninstall_files {
local dest_dir=$1
local dest_file_array=($2)
local file=""
for (( i=0; i<${#dest_file_array[*]}; i++ )); do
file=${dest_file_array[$i]##*/}
$STX_SUDO rm -rf $dest_dir/$file
done
}
$_XTRACE_STX_METAL