From a0884628cb5d4c6d1f4f957e2d06e26d4bb606a4 Mon Sep 17 00:00:00 2001 From: Dmitry Tantsur Date: Mon, 16 Mar 2015 17:57:46 +0100 Subject: [PATCH] Add DevStack plugin for ironic-discoverd Change-Id: I1026fec12dfd5ba495fc1db1cc98dfdfba623c91 Implements: blueprint devstack-plugin --- MANIFEST.in | 1 + devstack/plugin.sh | 196 +++++++++++++++++++++++++++++++++++++++++++++ devstack/settings | 1 + setup.py | 2 +- 4 files changed, 199 insertions(+), 1 deletion(-) create mode 100644 devstack/plugin.sh create mode 100644 devstack/settings diff --git a/MANIFEST.in b/MANIFEST.in index 9223219a0..25fde2f7d 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -8,3 +8,4 @@ include tox.ini include *.rst recursive-include functest * recursive-include locale * +recursive-include devstack * diff --git a/devstack/plugin.sh b/devstack/plugin.sh new file mode 100644 index 000000000..070f56aee --- /dev/null +++ b/devstack/plugin.sh @@ -0,0 +1,196 @@ +IRONIC_DISCOVERD_DEBUG=${IRONIC_DISCOVERD_DEBUG:-false} +IRONIC_DISCOVERD_DIR=$DEST/ironic-discoverd +IRONIC_DISCOVERD_BIN_DIR=$(get_python_exec_prefix) +IRONIC_DISCOVERD_BIN_FILE=$IRONIC_DISCOVERD_BIN_DIR/ironic-discoverd +IRONIC_DISCOVERD_CONF_DIR=${IRONIC_DISCOVERD_CONF_DIR:-/etc/ironic-discoverd} +IRONIC_DISCOVERD_CONF_FILE=$IRONIC_DISCOVERD_CONF_DIR/discoverd.conf +IRONIC_DISCOVERD_DHCP_CONF_FILE=$IRONIC_DISCOVERD_CONF_DIR/dnsmasq.conf +IRONIC_DISCOVERD_DATA_DIR=$DATA_DIR/ironic-discoverd +IRONIC_DISCOVERD_ADMIN_USER=${IRONIC_DISCOVERD_ADMIN_USER:-ironic-discoverd} +IRONIC_DISCOVERD_MANAGE_FIREWALL=$(trueorfalse True $IRONIC_DISCOVERD_MANAGE_FIREWALL) +IRONIC_DISCOVERD_HOST=$HOST_IP +IRONIC_DISCOVERD_PORT=5050 +IRONIC_DISCOVERD_URI="http://$IRONIC_DISCOVERD_HOST:$IRONIC_DISCOVERD_PORT" +IRONIC_DISCOVERD_RAMDISK_ELEMENT=${IRONIC_DISCOVERD_RAMDISK_ELEMENT:-ironic-discoverd-ramdisk} +IRONIC_DISCOVERD_RAMDISK_FLAVOR=${IRONIC_DISCOVERD_RAMDISK_FLAVOR:-fedora $IRONIC_DISCOVERD_RAMDISK_ELEMENT} +# These should not overlap with other ranges/networks +IRONIC_DISCOVERD_INTERNAL_IP=${IRONIC_DISCOVERD_INTERNAL_IP:-172.24.5.254} +IRONIC_DISCOVERD_INTERNAL_SUBNET_SIZE=${IRONIC_DISCOVERD_INTERNAL_SUBNET_SIZE:-24} +IRONIC_DISCOVERD_DHCP_RANGE=${IRONIC_DISCOVERD_DHCP_RANGE:-172.24.5.100,172.24.5.253} +IRONIC_DISCOVERD_INTERFACE=${IRONIC_DISCOVERD_INTERFACE:-br-discoverd} +IRONIC_DISCOVERD_INTERNAL_URI="http://$IRONIC_DISCOVERD_INTERNAL_IP:$IRONIC_DISCOVERD_PORT" +IRONIC_DISCOVERD_INTERNAL_IP_WITH_NET=$IRONIC_DISCOVERD_INTERNAL_IP/$IRONIC_DISCOVERD_INTERNAL_SUBNET_SIZE + +### Utilities + +function mkdir_chown_stack { + if [[ ! -d "$1" ]]; then + sudo mkdir -p "$1" + fi + sudo chown $STACK_USER "$1" +} + +function discoverd_iniset { + iniset "$IRONIC_DISCOVERD_CONF_FILE" discoverd $1 $2 +} + +### Install-start-stop + +function install_discoverd { + setup_develop $IRONIC_DISCOVERD_DIR +} + +function install_discoverd_dhcp { + install_package dnsmasq +} + +function start_discoverd { + screen_it ironic-discoverd "cd $IRONIC_DISCOVERD_DIR && sudo $IRONIC_DISCOVERD_BIN_FILE --config-file $IRONIC_DISCOVERD_CONF_FILE" +} + +function start_discoverd_dhcp { + screen_it ironic-discoverd-dhcp "sudo dnsmasq --conf-file=$IRONIC_DISCOVERD_DHCP_CONF_FILE" +} + +function stop_discoverd { + screen -S $SCREEN_NAME -p ironic-discoverd -X kill +} + +function stop_discoverd_dhcp { + screen -S $SCREEN_NAME -p ironic-discoverd-dhcp -X kill +} + +### Configuration + +function prepare_tftp { + IRONIC_DISCOVERD_IMAGE_PATH="$TOP_DIR/files/ironic-discoverd" + IRONIC_DISCOVERD_KERNEL_PATH="$IRONIC_DISCOVERD_IMAGE_PATH.kernel" + IRONIC_DISCOVERD_INITRAMFS_PATH="$IRONIC_DISCOVERD_IMAGE_PATH.initramfs" + + if [ ! -e "$IRONIC_DISCOVERD_KERNEL_PATH" -o ! -e "$IRONIC_DISCOVERD_INITRAMFS_PATH" ]; then + if [[ $(type -P ramdisk-image-create) == "" ]]; then + pip_install diskimage_builder + fi + ramdisk-image-create $IRONIC_DISCOVERD_RAMDISK_FLAVOR \ + -o $IRONIC_DISCOVERD_IMAGE_PATH + fi + + mkdir_chown_stack "$IRONIC_TFTPBOOT_DIR/pxelinux.cfg" + + cp $IRONIC_DISCOVERD_KERNEL_PATH $IRONIC_DISCOVERD_INITRAMFS_PATH \ + $IRONIC_TFTPBOOT_DIR + cat > "$IRONIC_TFTPBOOT_DIR/pxelinux.cfg/default" < "$IRONIC_DISCOVERD_DHCP_CONF_FILE" <=]', line)[0] + install_requires = [re.split(r'[<>=~]', line)[0] for line in fp if line.strip()] except EnvironmentError: print("No requirements.txt, not handling dependencies")