| Works
vCenter Server ApplianceのバックアップをSCPで取得するスクリプト
vCenter Server Appliance 6.5は自前でバックアップ機能を持っており、Management Console (https://VCSAのIPアドレス:5480) から簡単に実行することができます。
これをシェルスクリプトで実行する方法も、オフィシャルのManagement Programming Guideにサンプルスクリプトがありますが、バックアップ先がFTPになっています。
さすがに最近はFTPはないだろうというか、このためにFTPサーバを設定するのが面倒なので、SCPに変更したときのメモ。
まあ、基本はスクリプト中のバックアップに利用するプロトコル(location_type)を"FTP"から"SCP"に、バックアップ先(location)の指定方法を"ftp://$FTP_ADDRESS/~"から"$SCP_ADDRESS/~"に変更しただけです。
あとは"$FTP_~"となっていた変数名を"$SCP_~"に変更したりとか、自分が見やすいように整形したりとか、動作に関係ない軽微な変更くらい。
最後に、古いバックアップを自動で削除する部分を追加してます。
#!/bin/bash
##### EDITABLE BY USER to specify vCenter Server instance and backup destination. #####
VC_ADDRESS="192.168.1.1"
VC_USER="administrator@vsphere.local"
VC_PASSWORD="password"
SCP_ADDRESS="192.168.1.10"
SCP_USER="backup"
SCP_PASSWORD="backuppassword"
BACKUP_FOLDER="backup"
#######################################################################################
# Authenticate with basic credentials.
curl -u "$VC_USER:$VC_PASSWORD" \
-X POST \
-k --cookie-jar cookies.txt \
"https://$VC_ADDRESS/rest/com/vmware/cis/session"
# Create a message body json for the backup request.
TIME=$(date +%Y-%m-%d-%H-%M-%S)
cat << EOF >task.json
{ "piece":
{
"location_type":"SCP",
"comment":"Automatic backup",
"parts":["seat"],
"location":"$SCP_ADDRESS/$BACKUP_FOLDER/$TIME",
"location_user":"$SCP_USER",
"location_password":"$SCP_PASSWORD"
}
}
EOF
# Issue a request to start the backup operation.
echo '' >>backup.log
echo Starting backup $TIME >>backup.log
echo '' >>backup.log
curl -k --cookie cookies.txt \
-H 'Accept:application/json' \
-H 'Content-Type:application/json' \
-X POST \
--data @task.json 2>>backup.log >response.txt \
"https://$VC_ADDRESS/rest/appliance/recovery/backup/job"
cat response.txt >>backup.log
echo '' >>backup.log
# Parse the response to locate the unique identifier of the backup operation.
ID=$(awk '{if (match($0,/"id":"\w+-\w+-\w+"/)) \
print substr($0, RSTART+6, RLENGTH-7);}' \
response.txt)
echo 'Backup job id: '$ID
# Monitor progress of the operation until it is complete.
PROGRESS=INPROGRESS
until [ "$PROGRESS" != "INPROGRESS" ]
do
sleep 10s
curl -k --cookie cookies.txt \
-H 'Accept:application/json' \
--globoff \
"https://$VC_ADDRESS/rest/appliance/recovery/backup/job/$ID" \
>response.txt
cat response.txt >>backup.log
echo '' >>backup.log
PROGRESS=$(awk '{if (match($0,/"state":"\w+"/)) \
print substr($0, RSTART+9, RLENGTH-10);}' \
response.txt)
echo 'Backup job state: '$PROGRESS
done
# Report job completion and clean up temporary files.
echo ''
echo "Backup job completion status: $PROGRESS"
rm -f task.json
rm -f response.txt
rm -f cookies.txt
echo '' >>backup.log
# Remove old backup
find /$BACKUP_FOLDER/* -type d -ctime +2 -exec rm -rf {} +
exit