diff --git a/devstack/enabled-drivers.txt b/devstack/enabled-drivers.txt new file mode 100644 index 0000000..aaafe21 --- /dev/null +++ b/devstack/enabled-drivers.txt @@ -0,0 +1,8 @@ +fake_wol_fake +pxe_wol_iscsi +pxe_wol_agent +agent_ipmitool_nm +fake_nm +pxe_libvirt_agent +pxe_libvirt_iscsi +fake_libvirt_fake diff --git a/devstack/plugin.sh b/devstack/plugin.sh new file mode 100755 index 0000000..84c9901 --- /dev/null +++ b/devstack/plugin.sh @@ -0,0 +1,64 @@ +#!/bin/bash +# plugin.sh - devstack plugin for ironic-staging-drivers + +IRONIC_STAGING_DRIVERS_DIR=$DEST/ironic-staging-drivers +IRONIC_DRIVERS_EXCLUDED_DIRS='tests common' + + +function update_ironic_enabled_drivers { + local saveIFS + saveIFS=$IFS + IFS="," + while read driver; do + if [[ ! $IRONIC_ENABLED_DRIVERS =~ $(echo "\<$driver\>") ]]; then + if [[ -z "$IRONIC_ENABLED_DRIVERS" ]]; then + IRONIC_ENABLED_DRIVERS="$driver" + else + IRONIC_ENABLED_DRIVERS+=",$driver" + fi + fi + done < $IRONIC_STAGING_DRIVERS_DIR/devstack/enabled-drivers.txt + IFS=$saveIFS + # NOTE(vsaienko) if ironic-staging-drivers are called after ironic + # setting IRONIC_ENABLED_DRIVERS will not take affect. Update ironic + # configuration explicitly. + iniset $IRONIC_CONF_FILE DEFAULT enabled_drivers "$IRONIC_ENABLED_DRIVERS" +} + +function install_ironic_staging_drivers { + setup_develop $IRONIC_STAGING_DRIVERS_DIR +} + +function install_drivers_dependencies { + local p_deps + local o_deps + for path in $IRONIC_STAGING_DRIVERS_DIR/ironic_staging_drivers/*; do + driver=$(basename $path) + if [[ -d $path && ! "$IRONIC_DRIVERS_EXCLUDED_DIRS" =~ "$driver" ]]; then + p_deps=${IRONIC_STAGING_DRIVERS_DIR}/ironic_staging_drivers/${driver}/python-requirements.txt + o_deps=${IRONIC_STAGING_DRIVERS_DIR}/ironic_staging_drivers/${driver}/other-requirements.sh + if [[ -f "$p_deps" ]]; then + echo_summary "Installing $driver python dependencies" + pip_install -r $p_deps + fi + if [[ -f "$o_deps" ]]; then + echo_summary "Installing $driver other dependencies" + source $o_deps + fi + fi + done +} + +echo_summary "ironic-staging-drivers plugin.sh was called..." + +if is_service_enabled ir-api ir-cond; then + if [[ "$1" == "stack" && "$2" == "install" ]]; then + echo_summary "Installing Ironic-staging-drivers" + install_ironic_staging_drivers + install_drivers_dependencies + + elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then + echo_summary "Configuring Ironic-staging-drivers" + update_ironic_enabled_drivers + fi +fi diff --git a/driver-requirements.txt b/driver-requirements.txt deleted file mode 100644 index bb80469..0000000 --- a/driver-requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -# This file lists all python libraries which are utilized by drivers, -# and may not be listed in global-requirements. - - -# libvirt driver requires libvirt-python library which is available on pypi -libvirt-python>=1.2.5 # LGPLv2+ diff --git a/ironic_staging_drivers/libvirt/python-requirements.txt b/ironic_staging_drivers/libvirt/python-requirements.txt new file mode 100644 index 0000000..64442e9 --- /dev/null +++ b/ironic_staging_drivers/libvirt/python-requirements.txt @@ -0,0 +1 @@ +libvirt-python>=1.2.5 # LGPLv2+