URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

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