VMware ESXi 5.0 update 1 AutoStartManager代替スクリプト (改)

2012-08-15追記
VMware ESXi 5.0 update 1のAutoStartManagerがBugFixされていたで、AutoStartManagerがBugFixされていたことを書いています。
 
 


VMware ESXi 5.0 update 1 AutoStartManager代替スクリプトを書いてみたにコメントを頂きまして、あのスクリプトのままだと startAction = “None” のマシンまで起動してしまうというご指摘をいただきました。
せっかく良いご指摘を頂いたのに放置するのは申し訳がないので、その方に示していただいたコードを反映した版を貼り付けておきます。

#!/bin/sh
#
#  Copyright (C) 2012 Lunatilia.net 
#
#  ShellID : vmware-autostart.sh
#  Date    : 2012/04/30
#  Version : 0.2a
#  Author  : Mitsuki Shirase, modified by bignumorg
#

#---------------------------------------
# Env
#---------------------------------------
export PATH=/bin:/sbin
SCRIPT_DIR=$( cd $(dirname $0); pwd )
VIMSH=/bin/vim-cmd
ROOT_USER="root"
INC=0

#---------------------------------------
# Get AutoStart Config
#---------------------------------------
GET_AUTOSTARTSEQ="hostsvc/autostartmanager/get_autostartseq"
GET_DEFAULT="hostsvc/autostartmanager/get_default"

#---------------------------------------
# VMIDs save file
#---------------------------------------
AUTOSTARTVMID="/AutoStartVMID"
AUTOSTOPVMID="/AutoStopVMID"

#---------------------------------------
# Delay parameter
#---------------------------------------
START_DELAY=$( ${VIMSH} -U ${ROOT_USER} ${GET_DEFAULT} | grep startDelay | grep -o "[0-9]\{1,\}" )
STOP_DELAY=$( ${VIMSH} -U ${ROOT_USER} ${GET_DEFAULT} | grep stopDelay | grep -o "[0-9]\{1,\}" )

#---------------------------------------
# Number of VMIDs
#---------------------------------------
##NUMBER_OF_VMS=$( ${VIMSH} -U ${ROOT_USER} ${GET_AUTOSTARTSEQ} | grep vim.VirtualMachine | grep -o "[0-9]\{1,\}" | wc -l )
NUMBER_OF_VMS=$( ${VIMSH} -U ${ROOT_USER} ${GET_AUTOSTARTSEQ} | egrep 'vim.VirtualMachine|startAction' | sed 'Ns/\(.*\)\n/\1/' | grep PowerOn | grep -o "[0-9]\{1,\}" | wc -l )

#---------------------------------------
# Get VMIDs
#---------------------------------------
##${VIMSH} -U ${ROOT_USER} ${GET_AUTOSTARTSEQ} | grep vim.VirtualMachine | grep -o "[0-9]\{1,\}" > ${SCRIPT_DIR}${AUTOSTARTVMID}
${VIMSH} -U ${ROOT_USER} ${GET_AUTOSTARTSEQ} | egrep 'vim.VirtualMachine|startAction' | sed 'Ns/\(.*\)\n/\1/' | grep PowerOn | grep -o "[0-9]\{1,\}" > ${SCRIPT_DIR}${AUTOSTARTVMID}
echo > ${SCRIPT_DIR}${AUTOSTOPVMID}
while read BUFF
do
    sed -i "1i ${BUFF}" ${SCRIPT_DIR}${AUTOSTOPVMID}
done < ${SCRIPT_DIR}${AUTOSTARTVMID}
sed -i '$d' ${SCRIPT_DIR}${AUTOSTOPVMID}

#---------------------------------------
# AutoStart VMs
#---------------------------------------
vmware_autostart_vms() {
    if [ ${NUMBER_OF_VMS} -eq 0 ]; then
        logger -t 'VMware[startup]' " Not defined."
        exit
    fi

    logger -t 'VMware[startup]' " Starting VMs(custom script)"

    while read VMID
    do
        ${VIMSH} vmsvc/power.on ${VMID}
        logger -t 'VMware[startup]' " Starting VMID ${VMID}."
        INC=`expr ${INC} + 1`
        if [ ${INC} -eq ${NUMBER_OF_VMS} ]; then
            break
        fi
        sleep ${START_DELAY}
    done < ${SCRIPT_DIR}${AUTOSTARTVMID}
}

#---------------------------------------
# AutoStop VMs
#---------------------------------------
vmware_autostop_vms() {
    if [ ${NUMBER_OF_VMS} -eq 0 ]; then
        logger -t 'Vmware[shutdown]' " Not defined."
    fi

    logger -t 'VMware[shutdown]' " Stopping VMs(custom script)"

    while read VMID
    do
        ${VIMSH} vmsvc/power.shutdown ${VMID}
        logger -t 'VMware[shutdown]' " Stopping VMID ${VMID}."
        INC=`expr ${INC} + 1`
        if [ ${INC} -eq ${NUMBER_OF_VMS} ]; then
            break
        fi
        sleep ${STOP_DELAY}
    done < ${SCRIPT_DIR}${AUTOSTOPVMID}
}

#---------------------------------------
# Usage
#---------------------------------------
usage() {
   echo "Usage: `basename "$0"` {start|stop|restart}"
}

#---------------------------------------
# Call function
#---------------------------------------
case $1 in
   "start")
      vmware_autostart_vms
      ;;
   "stop")
      vmware_autostop_vms
      ;;
   "restart")
      vmware_autostop_vms
      vmware_autostart_vms
      ;;
   *)
      usage
      exit 1
esac

2ヶ所変更していまして(Number of VMIDsのところとGet VMIDsのところ)、変更内容は前のコメントを見ていたければわかると思いますが、一応書いておきます。

変更前

${VIMSH} -U ${ROOT_USER} ${GET_AUTOSTARTSEQ} | grep vim.VirtualMachine | grep -o "[0-9]\{1,\}"

変更後

${VIMSH} -U ${ROOT_USER} ${GET_AUTOSTARTSEQ} | egrep 'vim.VirtualMachine|startAction' | sed 'Ns/\(.*\)\n/\1/' | grep PowerOn | grep -o "[0-9]\{1,\}"

というわけで、もし「こうしたほうが良いよ〜」ってのがありましたら、ご指摘ください。
もちろん「てめぇが勝手に頑張れよ」っていう話もあったりするんですけどね。

「VMware ESXi 5.0 update 1 AutoStartManager代替スクリプト (改)」への1件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中