Merge "Run IPMI, SNMP and Redfish BMC emulators as stack"

This commit is contained in:
Zuul 2019-04-17 23:16:56 +00:00 committed by Gerrit Code Review
commit b0f0483818
1 changed files with 78 additions and 54 deletions

View File

@ -343,6 +343,7 @@ IRONIC_VPDU_PORT_RANGE_START=${IRONIC_VPDU_PORT_RANGE_START:-1}
IRONIC_VPDU_LISTEN_PORT=${IRONIC_VPDU_LISTEN_PORT:-1161} IRONIC_VPDU_LISTEN_PORT=${IRONIC_VPDU_LISTEN_PORT:-1161}
IRONIC_VPDU_COMMUNITY=${IRONIC_VPDU_COMMUNITY:-private} IRONIC_VPDU_COMMUNITY=${IRONIC_VPDU_COMMUNITY:-private}
IRONIC_VPDU_SNMPDRIVER=${IRONIC_VPDU_SNMPDRIVER:-apc_rackpdu} IRONIC_VPDU_SNMPDRIVER=${IRONIC_VPDU_SNMPDRIVER:-apc_rackpdu}
IRONIC_VPDU_SYSTEMD_SERVICE=devstack@virtualpdu.service
# Redfish configs # Redfish configs
IRONIC_REDFISH_EMULATOR_PORT=${IRONIC_REDFISH_EMULATOR_PORT:-9132} IRONIC_REDFISH_EMULATOR_PORT=${IRONIC_REDFISH_EMULATOR_PORT:-9132}
@ -772,11 +773,28 @@ function setup_virtualbmc {
cmd=$(which vbmcd) cmd=$(which vbmcd)
cmd+=" --foreground" cmd+=" --foreground"
write_user_unit_file $IRONIC_VBMC_SYSTEMD_SERVICE "$cmd" "" "root" write_user_unit_file $IRONIC_VBMC_SYSTEMD_SERVICE "$cmd" "" "stack"
$SYSTEMCTL enable $IRONIC_VBMC_SYSTEMD_SERVICE $SYSTEMCTL enable $IRONIC_VBMC_SYSTEMD_SERVICE
}
start_virtualbmc function start_virtualpdu {
$SYSTEMCTL start $IRONIC_VPDU_SYSTEMD_SERVICE
}
function stop_virtualpdu {
$SYSTEMCTL stop $IRONIC_VPDU_SYSTEMD_SERVICE
}
function cleanup_virtualpdu {
stop_virtualpdu
$SYSTEMCTL disable $IRONIC_VPDU_SYSTEMD_SERVICE
local unitfile="$SYSTEMD_DIR/$IRONIC_VPDU_SYSTEMD_SERVICE"
sudo rm -f $unitfile
$SYSTEMCTL daemon-reload
} }
function setup_virtualpdu { function setup_virtualpdu {
@ -797,7 +815,14 @@ function setup_virtualpdu {
iniset $IRONIC_VPDU_CONFIG_FILE PDU ports $(_generate_pdu_ports) iniset $IRONIC_VPDU_CONFIG_FILE PDU ports $(_generate_pdu_ports)
iniset $IRONIC_VPDU_CONFIG_FILE PDU outlet_default_state "OFF" iniset $IRONIC_VPDU_CONFIG_FILE PDU outlet_default_state "OFF"
enable_service ir-vpdu local cmd
cmd=$(which virtualpdu)
cmd+=" $IRONIC_VPDU_CONFIG_FILE"
write_user_unit_file $IRONIC_VPDU_SYSTEMD_SERVICE "$cmd" "" "stack"
$SYSTEMCTL enable $IRONIC_VPDU_SYSTEMD_SERVICE
} }
# _generate_pdu_ports() - Generates list of port:node_name. # _generate_pdu_ports() - Generates list of port:node_name.
@ -811,16 +836,16 @@ function _generate_pdu_ports {
echo ${port_config[*]} | tr ' ' ',' echo ${port_config[*]} | tr ' ' ','
} }
function start_redfish_emulator { function start_redfish {
$SYSTEMCTL start $IRONIC_REDFISH_EMULATOR_SYSTEMD_SERVICE $SYSTEMCTL start $IRONIC_REDFISH_EMULATOR_SYSTEMD_SERVICE
} }
function stop_redfish_emulator { function stop_redfish {
$SYSTEMCTL stop $IRONIC_REDFISH_EMULATOR_SYSTEMD_SERVICE $SYSTEMCTL stop $IRONIC_REDFISH_EMULATOR_SYSTEMD_SERVICE
} }
function cleanup_redfish_emulator { function cleanup_redfish {
stop_redfish_emulator stop_redfish
rm -f $IRONIC_REDFISH_EMULATOR_CONFIG rm -f $IRONIC_REDFISH_EMULATOR_CONFIG
@ -832,7 +857,7 @@ function cleanup_redfish_emulator {
$SYSTEMCTL daemon-reload $SYSTEMCTL daemon-reload
} }
function setup_redfish_emulator { function setup_redfish {
if [[ ! -d $(dirname $IRONIC_REDFISH_EMULATOR_CONFIG) ]]; then if [[ ! -d $(dirname $IRONIC_REDFISH_EMULATOR_CONFIG) ]]; then
mkdir -p $(dirname $IRONIC_REDFISH_EMULATOR_CONFIG) mkdir -p $(dirname $IRONIC_REDFISH_EMULATOR_CONFIG)
@ -877,24 +902,18 @@ EOF
cmd+=" --env FLASK_DEBUG=1" cmd+=" --env FLASK_DEBUG=1"
cmd+=" --env SUSHY_EMULATOR_CONFIG=${IRONIC_REDFISH_EMULATOR_CONFIG}" cmd+=" --env SUSHY_EMULATOR_CONFIG=${IRONIC_REDFISH_EMULATOR_CONFIG}"
write_user_unit_file $IRONIC_REDFISH_EMULATOR_SYSTEMD_SERVICE "$cmd" "" "root" write_user_unit_file $IRONIC_REDFISH_EMULATOR_SYSTEMD_SERVICE "$cmd" "" "stack"
$SYSTEMCTL enable $IRONIC_REDFISH_EMULATOR_SYSTEMD_SERVICE $SYSTEMCTL enable $IRONIC_REDFISH_EMULATOR_SYSTEMD_SERVICE
start_redfish_emulator
} }
function setup_redfish { function setup_sushy {
if use_library_from_git "sushy"; then if use_library_from_git "sushy"; then
git_clone_by_name "sushy" git_clone_by_name "sushy"
setup_dev_lib "sushy" setup_dev_lib "sushy"
else else
pip_install_gr "sushy" pip_install_gr "sushy"
fi fi
if [[ "$IRONIC_IS_HARDWARE" == "False" ]]; then
setup_redfish_emulator
fi
} }
# install_ironic() - Install the things! # install_ironic() - Install the things!
@ -958,16 +977,22 @@ function install_ironic {
restart_libvirt restart_libvirt
fi fi
if is_deployed_by_ipmi && [[ "$IRONIC_IS_HARDWARE" == "False" ]]; then
setup_virtualbmc
fi
if is_deployed_by_snmp && [[ "$IRONIC_IS_HARDWARE" == "False" ]]; then
setup_virtualpdu
fi
if is_deployed_by_redfish; then if is_deployed_by_redfish; then
setup_redfish setup_sushy
fi
if [[ "$IRONIC_IS_HARDWARE" == "False" ]]; then
if is_deployed_by_ipmi; then
setup_virtualbmc
fi
if is_deployed_by_snmp; then
setup_virtualpdu
fi
if is_deployed_by_redfish; then
setup_redfish
fi
fi fi
if is_drac_enabled; then if is_drac_enabled; then
@ -1033,10 +1058,9 @@ function cleanup_ironic {
_cleanup_ironic_apache_additions _cleanup_ironic_apache_additions
fi fi
# It's noop if no emulator is running cleanup_virtualbmc
stop_redfish_emulator cleanup_virtualpdu
cleanup_redfish
cleanup_redfish_emulator
# Remove the hook to disable log rotate # Remove the hook to disable log rotate
sudo rm -rf $IRONIC_LIBVIRT_HOOKS_PATH/qemu sudo rm -rf $IRONIC_LIBVIRT_HOOKS_PATH/qemu
@ -1261,7 +1285,20 @@ cgroup_device_acl = [
EOF EOF
restart_libvirt restart_libvirt
fi fi
fi
if [[ "$IRONIC_IS_HARDWARE" == "False" ]]; then
if is_deployed_by_ipmi; then
start_virtualbmc
fi
if is_deployed_by_snmp; then
start_virtualpdu
fi
if is_deployed_by_redfish; then
start_redfish
fi
fi fi
} }
@ -1554,10 +1591,6 @@ function start_ironic {
if [[ "$IRONIC_IPXE_ENABLED" == "True" ]] ; then if [[ "$IRONIC_IPXE_ENABLED" == "True" ]] ; then
restart_apache_server restart_apache_server
fi fi
if is_service_enabled ir-vpdu; then
start_virtualpdu
fi
} }
# start_ironic_api() - Used by start_ironic(). # start_ironic_api() - Used by start_ironic().
@ -1598,12 +1631,6 @@ function start_ironic_conductor {
# TODO(romcheg): Find a way to check whether the conductor has started. # TODO(romcheg): Find a way to check whether the conductor has started.
} }
# Starts VirtualPDU
function start_virtualpdu {
run_process ir-vpdu "$(which virtualpdu) $IRONIC_VPDU_CONFIG_FILE" libvirt
}
# stop_ironic() - Stop running processes # stop_ironic() - Stop running processes
function stop_ironic { function stop_ironic {
stop_process ir-api stop_process ir-api
@ -1734,14 +1761,14 @@ function create_bridge_and_vms {
bridge_mac=$(ip link show dev $IRONIC_VM_NETWORK_BRIDGE | grep -Eo "ether [A-Za-z0-9:]+"|sed "s/ether\ //") bridge_mac=$(ip link show dev $IRONIC_VM_NETWORK_BRIDGE | grep -Eo "ether [A-Za-z0-9:]+"|sed "s/ether\ //")
for vm_name in $(_ironic_bm_vm_names); do for vm_name in $(_ironic_bm_vm_names); do
# The su appears to be important here for picking up the stack user's # pick up the $LIBVIRT_GROUP we have possibly joint
# new libvirt group abilities that allow it to speak to virsh. newgrp $LIBVIRT_GROUP <<SUBSHELL
# We pass through PATH explicitly as sudo has a tendency to sanitize it $IRONIC_SCRIPTS_DIR/create-node.sh -n $vm_name \
# from the env even with -E. -c $IRONIC_VM_SPECS_CPU -m $IRONIC_VM_SPECS_RAM -d $IRONIC_VM_SPECS_DISK \
sudo -E su -p $STACK_USER -c "PATH=$PATH $IRONIC_SCRIPTS_DIR/create-node.sh -n $vm_name \ -a $IRONIC_VM_SPECS_CPU_ARCH -b $IRONIC_VM_NETWORK_BRIDGE $vm_opts -p $vbmc_port -o $pdu_outlet \
-c $IRONIC_VM_SPECS_CPU -m $IRONIC_VM_SPECS_RAM -d $IRONIC_VM_SPECS_DISK \ -i $IRONIC_VM_INTERFACE_COUNT -f $IRONIC_VM_SPECS_DISK_FORMAT -M $PUBLIC_BRIDGE_MTU $log_arg >> $IRONIC_VM_MACS_CSV_FILE
-a $IRONIC_VM_SPECS_CPU_ARCH -b $IRONIC_VM_NETWORK_BRIDGE $vm_opts -p $vbmc_port -o $pdu_outlet \ SUBSHELL
-i $IRONIC_VM_INTERFACE_COUNT -f $IRONIC_VM_SPECS_DISK_FORMAT -M $PUBLIC_BRIDGE_MTU $log_arg" >> $IRONIC_VM_MACS_CSV_FILE
echo " ${bridge_mac} $IRONIC_VM_NETWORK_BRIDGE" >> $IRONIC_VM_MACS_CSV_FILE echo " ${bridge_mac} $IRONIC_VM_NETWORK_BRIDGE" >> $IRONIC_VM_MACS_CSV_FILE
vbmc_port=$((vbmc_port+1)) vbmc_port=$((vbmc_port+1))
@ -2533,11 +2560,10 @@ function cleanup_baremetal_basic_ops {
local vm_name local vm_name
for vm_name in $(_ironic_bm_vm_names); do for vm_name in $(_ironic_bm_vm_names); do
# The su appears to be important here for picking up the stack user's # pick up the $LIBVIRT_GROUP we have possibly joint
# new libvirt group abilities that allow it to speak to virsh. newgrp $LIBVIRT_GROUP <<SUBSHELL
# We pass through PATH explicitly as sudo has a tendency to sanitize it $IRONIC_SCRIPTS_DIR/cleanup-node.sh $vm_name
# from the env even with -E. SUBSHELL
sudo -E su -p $STACK_USER -c "PATH=$PATH $IRONIC_SCRIPTS_DIR/cleanup-node.sh $vm_name"
# Cleanup node bridge/interfaces # Cleanup node bridge/interfaces
for i in $(seq 1 $IRONIC_VM_INTERFACE_COUNT); do for i in $(seq 1 $IRONIC_VM_INTERFACE_COUNT); do
@ -2545,8 +2571,6 @@ function cleanup_baremetal_basic_ops {
done done
done done
cleanup_virtualbmc
sudo ovs-vsctl --if-exists del-br $IRONIC_VM_NETWORK_BRIDGE sudo ovs-vsctl --if-exists del-br $IRONIC_VM_NETWORK_BRIDGE
sudo rm -rf /etc/xinetd.d/tftp /etc/init/tftpd-hpa.override sudo rm -rf /etc/xinetd.d/tftp /etc/init/tftpd-hpa.override