概要
GCP 上のVMを一括起動/停止し、既に起動/停止済のVMがあったら注意喚起するshellを書いた際にブランクが1年くらいあって忘れてる事が多かったので備忘録を残す。
仕様
- 引数にstartかstopを指定して起動と停止を分岐する。
- 適切な引数がない場合はエラーメッセージを返す。
- 対象VMが既に起動/停止している場合は注意喚起のメッセージを出力する。
ソース
#!/bin/bash
#対象VM
VMs=' #←変数と=の間にスペースを入れると正しく動作しない
GCP_project1.VM1.ZONE1
GCP_project2.VM2.ZONE2
etc...
'
#引数がstartの場合の処理
if [ $1 = "start" ] ; then #←[]内のスペースを空けないとコマンドとして認識される
for gce in $VMs #←for文はpythonと一緒
do
pj=`echo $gce | cut -d "." -f 1`
vm=`echo $gce | cut -d "." -f 2`
zone=`echo $gce | cut -d "." -f 3`
#↓コマンドとして認識させたい時は`(バッククォート)を使う
status=`gcloud compute instances describe --project=$pj $vm --zone=$zone | \
grep "status:" | tr -d " " | cut -d ":" -f 2`
if [ $status = "TERMINATED" ] ; then
gcloud compute instances start --project=$pj $vm --zone=$zone
else
#↓出力する文字色を変えたい時は-eオプションでコードを入れる(31は赤)
echo -e"\e[31m$pj.$vm は既に起動済みです。起動した人と連絡をとって停止して下さい。"
fi
done
#引数がstopの場合の処理
elif [ $1 = "stop" ] ; then
for gce in $VMs
do
pj=`echo $gce | cut -d "." -f 1`
vm=`echo $gce | cut -d "." -f 2`
zone=`echo $gce | cut -d "." -f 3`
status=`gcloud compute instances describe --project=$pj $vm --zone=$zone | \
grep "status:" | tr -d " " | cut -d ":" -f 2`
if [ $status = "RUNNING" ] ; then
gcloud compute instances stop --project=$pj $vm --zone=$zone
else
echo -e "\e[31m$pj.$vm は既に停止済みです。"
fi
done
#引数がstart , stop 以外の処理
else #←elseに ;(セミコロン)はいらない
echo "start か stop を引数で渡してください。"
fi
コメント