From fe96ed66f5fea37484dfaae597c43756c16e5779 Mon Sep 17 00:00:00 2001 From: yunhong jiang Date: Wed, 5 Nov 2014 03:30:25 -0700 Subject: [PATCH] Add agent_ipmitool support This patch enables to use the agent_ipmitool deploy driver to deploy the ironic on real hardware, instead of virtual machine. It also append the deploy driver name to the kernel/ramdisk path, so that if developer switch the deploy driver after ./unstack.sh, devstack will use the correct kernel/ramdisk. Change-Id: Iac0415f6895d037c876e137aa4f2bf2990eb47c5 --- lib/ironic | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/lib/ironic b/lib/ironic index 98619c5f51..f2b1fb2f6a 100644 --- a/lib/ironic +++ b/lib/ironic @@ -93,7 +93,7 @@ IRONIC_AGENT_KERNEL_URL=${IRONIC_AGENT_KERNEL_URL:-http://tarballs.openstack.org IRONIC_AGENT_RAMDISK_URL=${IRONIC_AGENT_RAMDISK_URL:-http://tarballs.openstack.org/ironic-python-agent/coreos/files/coreos_production_pxe_image-oem.cpio.gz} # Which deploy driver to use - valid choices right now -# are 'pxe_ssh', 'pxe_ipmitool' and 'agent_ssh'. +# are 'pxe_ssh', 'pxe_ipmitool', 'agent_ssh' and 'agent_ipmitool'. IRONIC_DEPLOY_DRIVER=${IRONIC_DEPLOY_DRIVER:-pxe_ssh} #TODO(agordeev): replace 'ubuntu' with host distro name getting @@ -152,6 +152,11 @@ function is_ironic_hardware { return 1 } +function is_deployed_by_agent { + [[ -z "${IRONIC_DEPLOY_DRIVER%%agent*}" ]] && return 0 + return 1 +} + # install_ironic() - Collect source and prepare function install_ironic { # make sure all needed service were enabled @@ -307,7 +312,7 @@ function configure_ironic_conductor { if [[ "$IRONIC_VM_LOG_CONSOLE" == "True" ]] ; then iniset $IRONIC_CONF_FILE pxe pxe_append_params "nofb nomodeset vga=normal console=ttyS0" fi - if [[ "$IRONIC_DEPLOY_DRIVER" == "agent_ssh" ]] ; then + if is_deployed_by_agent; then if [[ "$SWIFT_ENABLE_TEMPURLS" == "True" ]] ; then iniset $IRONIC_CONF_FILE glance swift_temp_url_key $SWIFT_TEMPURL_KEY else @@ -510,7 +515,7 @@ function enroll_nodes { if [[ "$IRONIC_DEPLOY_DRIVER" == "pxe_ssh" ]] ; then local _IRONIC_DEPLOY_KERNEL_KEY=pxe_deploy_kernel local _IRONIC_DEPLOY_RAMDISK_KEY=pxe_deploy_ramdisk - elif [[ "$IRONIC_DEPLOY_DRIVER" == "agent_ssh" ]] ; then + elif is_deployed_by_agent; then local _IRONIC_DEPLOY_KERNEL_KEY=deploy_kernel local _IRONIC_DEPLOY_RAMDISK_KEY=deploy_ramdisk fi @@ -552,6 +557,10 @@ function enroll_nodes { # we create the bare metal flavor with minimum value local node_options="-i ipmi_address=$ipmi_address -i ipmi_password=$ironic_ipmi_passwd\ -i ipmi_username=$ironic_ipmi_username" + if is_deployed_by_agent; then + node_options+=" -i $_IRONIC_DEPLOY_KERNEL_KEY=$IRONIC_DEPLOY_KERNEL_ID" + node_options+=" -i $_IRONIC_DEPLOY_RAMDISK_KEY=$IRONIC_DEPLOY_RAMDISK_ID" + fi fi local node_id=$(ironic node-create --chassis_uuid $chassis_id \ @@ -589,7 +598,7 @@ function configure_iptables { # nodes boot from TFTP and callback to the API server listening on $HOST_IP sudo iptables -I INPUT -d $HOST_IP -p udp --dport 69 -j ACCEPT || true sudo iptables -I INPUT -d $HOST_IP -p tcp --dport $IRONIC_SERVICE_PORT -j ACCEPT || true - if [ "$IRONIC_DEPLOY_DRIVER" == "agent_ssh" ]; then + if is_deployed_by_agent; then # agent ramdisk gets instance image from swift sudo iptables -I INPUT -d $HOST_IP -p tcp --dport ${SWIFT_DEFAULT_BIND_PORT:-8080} -j ACCEPT || true fi @@ -665,8 +674,8 @@ function upload_baremetal_ironic_deploy { fi if [ -z "$IRONIC_DEPLOY_KERNEL" -o -z "$IRONIC_DEPLOY_RAMDISK" ]; then - local IRONIC_DEPLOY_KERNEL_PATH=$TOP_DIR/files/ir-deploy.kernel - local IRONIC_DEPLOY_RAMDISK_PATH=$TOP_DIR/files/ir-deploy.initramfs + local IRONIC_DEPLOY_KERNEL_PATH=$TOP_DIR/files/ir-deploy-$IRONIC_DEPLOY_DRIVER.kernel + local IRONIC_DEPLOY_RAMDISK_PATH=$TOP_DIR/files/ir-deploy-$IRONIC_DEPLOY_DRIVER.initramfs else local IRONIC_DEPLOY_KERNEL_PATH=$IRONIC_DEPLOY_KERNEL local IRONIC_DEPLOY_RAMDISK_PATH=$IRONIC_DEPLOY_RAMDISK @@ -677,17 +686,17 @@ function upload_baremetal_ironic_deploy { if [ "$IRONIC_BUILD_DEPLOY_RAMDISK" = "True" ]; then # we can build them only if we're not offline if [ "$OFFLINE" != "True" ]; then - if [ "$IRONIC_DEPLOY_DRIVER" == "agent_ssh" ]; then + if is_deployed_by_agent; then build_ipa_coreos_ramdisk $IRONIC_DEPLOY_KERNEL_PATH $IRONIC_DEPLOY_RAMDISK_PATH else ramdisk-image-create $IRONIC_DEPLOY_FLAVOR \ - -o $TOP_DIR/files/ir-deploy + -o $TOP_DIR/files/ir-deploy-$IRONIC_DEPLOY_DRIVER fi else die $LINENO "Deploy kernel+ramdisk files don't exist and cannot be build in OFFLINE mode" fi else - if [ "$IRONIC_DEPLOY_DRIVER" == "agent_ssh" ]; then + if is_deployed_by_agent; then # download the agent image tarball wget "$IRONIC_AGENT_KERNEL_URL" -O $IRONIC_DEPLOY_KERNEL_PATH wget "$IRONIC_AGENT_RAMDISK_URL" -O $IRONIC_DEPLOY_RAMDISK_PATH @@ -751,7 +760,7 @@ function cleanup_baremetal_basic_ops { restart_service xinetd sudo iptables -D INPUT -d $HOST_IP -p udp --dport 69 -j ACCEPT || true sudo iptables -D INPUT -d $HOST_IP -p tcp --dport $IRONIC_SERVICE_PORT -j ACCEPT || true - if [ "$IRONIC_DEPLOY_DRIVER" == "agent_ssh" ]; then + if is_deployed_by_agent; then # agent ramdisk gets instance image from swift sudo iptables -D INPUT -d $HOST_IP -p tcp --dport ${SWIFT_DEFAULT_BIND_PORT:-8080} -j ACCEPT || true fi