För närvarande finns det inget stöd för schemaläggning av snapshots i Oderland Cloud, men du kan använda OpenStack API för att lösa det på egen hand. Genom att använda ett bash-skript (eller valfritt annat språk som du föredrar) och en schemaläggningstjänst så som cron eller en systemd-timer, kan du automatiskt ta snapshots av alla monterade volymer på din virtuella server.
Vi har skrivit ett förslag till ett sådant skript som du kan använda som inspiration (två varianter på samma tema). Du behöver fylla i alla variabler under kommentarerna OpenStack credentials
och Virtual server ID
(samt Email settings
om du använder varianten som skickar mail efter körning). Skriptet nedan kommer att iterera över alla volymer monterade på server, ta en snapshot på dem, kontrollera status och därefter skriva ut resultatet i terminalen (samt skicka en rapport på mail om du så önskar).
Uppgifter som behövs för skriptet
Innan du kan sätta upp och börja använda bash-skriptet behöver du några uppgifter om ditt Cloud-konto samt den server du vill skapa snapshots för:
- Inloggningsuppgifterna för ditt Cloud-konto (användarnamn och lösenord). Har du inte dessa kan du få fram dem enligt instruktionerna här (avsnittet “Återställa lösenordet”).
- Projekt-ID för ditt Cloud-konto. Detta kan du se när du är inloggad på kontrollpanelen för Cloud, högst upp åt höger:
- Server-ID för din server. Detta hittar du inne på kontrollpanelen för Oderland Cloud, om du går in på
Compute
(ikonen som ser ut som en kub) ->Virtual machines
i menyn ute till vänster:
Klicka sedan på raden för servern du vill skapa snapshots för och rulla ner till radenID
i den högra delen av fönstret.
Du har nu allt du behöver för att kunna skapa skriptet enligt våra förslag nedan.
Bash-skript för snapshots
När du hämtat ut alla uppgifter enligt avsnittet ovan kan du skapa skriptet. Välj om du vill ha mail från skriptet eller ej genom att kopiera den variant av skriptet du önskar nedan.
Skript som skickar mail med resultat
Kopiera koden nedan till en fil på servern som du döper till exempelvis snapshot.sh
.
#!/bin/bash # OpenStack credentials export OS_AUTH_TYPE='password' export OS_AUTH_URL='https://cloud-api.oderland.com:5000/v3/' export OS_DOMAIN_NAME='cloud' export OS_PASSWORD='CLOUDLÖSENORD
' export OS_PROJECT_NAME='PROJEKT-ID
' export OS_USERNAME='CLOUDANVÄNDARNAMN
' # Virtual server ID server_id='SERVER-ID
' # Email settings recipient='' sender='' smtp_password='' smtp_port='' smtp_server='' smtp_username='' # Exit on unset variables set -uo pipefail # Check for dependencies for dep in openstack mailx jq; do if ! hash "$dep" &> /dev/null; then printf 'Missing executable dependency: %s\n' "$dep" exit 1 fi done # Get the name of the virtual server server_name=$(openstack server show -c name -f value "$server_id") # Get the list of volumes attached to the virtual server volume_list=$( openstack server show -c volumes_attached -f json "$server_id" | jq -r '.volumes_attached[].id' ) # Variable to store the result message result_message="" # Iterate over each volume and take a snapshot for volume_id in $volume_list; do snapshot_name="snapshot-$(date +"%Y%m%d%H%M%S")" # Create the snapshot if openstack volume snapshot create --volume "$volume_id" --force "$snapshot_name" 1> /dev/null; then result_message+="Snapshot created successfully for volume $volume_id.\n" # Wait for the snapshot to become available timeout=60 elapsed_time=0 while true; do snapshot_status=$(openstack volume snapshot show -c status --format value "$snapshot_name") if [ "$snapshot_status" == "available" ]; then result_message+="Snapshot $snapshot_name is available for volume $volume_id.\n" break fi sleep 5 elapsed_time=$((elapsed_time + 5)) if [ $elapsed_time -ge $timeout ]; then result_message+="Error: Snapshot $snapshot_name did not become available for volume $volume_id within the timeout period.\n" break fi done else result_message+="Error creating snapshot for volume $volume_id.\n" fi done # Send email with the result printf "$result_message" | mailx \ -s "Snapshot Result for $server_name" \ -S 'v15-compat' \ -S "mta=smtp://$smtp_username:$smtp_password@$smtp_server:$smtp_port" \ -S 'smtp-use-starttls' \ -S 'smtp-auth=login' \ -r "$sender" \ "$recipient" printf "$result_message"
Glöm inte att göra filen som innehåller skriptkoden körbar:
chmod +x /sökväg/till/snapshot.sh
Du kan nu testa att skapa snapshots med hjälp av scriptet genom att köra det:
/sökväg/till/snapshot.sh
Skript som inte skickar mail med resultat
Kopiera koden nedan till en fil på servern som du döper till exempelvis snapshot.sh
.
#!/bin/bash # OpenStack credentials export OS_AUTH_TYPE='password' export OS_AUTH_URL='https://cloud-api.oderland.com:5000/v3/' export OS_DOMAIN_NAME='cloud' export OS_PASSWORD='CLOUDLÖSENORD
' export OS_PROJECT_NAME='PROJEKT-ID
' export OS_USERNAME='CLOUDANVÄNDARNAMN
' # Virtual server ID server_id='SERVER-ID
' # Exit on unset variables set -uo pipefail # Check for dependencies for dep in openstack jq; do if ! hash "$dep" &> /dev/null; then printf 'Missing executable dependency: %s\n' "$dep" exit 1 fi done # Get the name of the virtual server server_name=$(openstack server show -c name -f value "$server_id") # Get the list of volumes attached to the virtual server volume_list=$( openstack server show -c volumes_attached -f json "$server_id" | jq -r '.volumes_attached[].id' ) # Variable to store the result message result_message="" # Iterate over each volume and take a snapshot for volume_id in $volume_list; do snapshot_name="snapshot-$(date +"%Y%m%d%H%M%S")" # Create the snapshot if openstack volume snapshot create --volume "$volume_id" --force "$snapshot_name" 1> /dev/null; then result_message+="Snapshot created successfully for volume $volume_id.\n" # Wait for the snapshot to become available timeout=60 elapsed_time=0 while true; do snapshot_status=$(openstack volume snapshot show -c status --format value "$snapshot_name") if [ "$snapshot_status" == "available" ]; then result_message+="Snapshot $snapshot_name is available for volume $volume_id.\n" break fi sleep 5 elapsed_time=$((elapsed_time + 5)) if [ $elapsed_time -ge $timeout ]; then result_message+="Error: Snapshot $snapshot_name did not become available for volume $volume_id within the timeout period.\n" break fi done else result_message+="Error creating snapshot for volume $volume_id.\n" fi done printf "$result_message"
Glöm inte att göra filen som innehåller skriptkoden körbar:
chmod +x /sökväg/till/snapshot.sh
Du kan nu testa att skapa snapshots med hjälp av scriptet genom att köra det:
/sökväg/till/snapshot.sh
Skapa schemalagda snapshots
När du nu har skriptet kan du sätta upp schemaläggning av snapshots, så du slipper tänka på att skapa dem manuellt. Enklaste lösningen för detta är att sätta upp ett cronjob, vilket vi går igenom nedan. Du kan också skapa en systemd-timer för schemaläggningen, men detta täcks inte av den här guiden.
Öppna redigeringen av cronjob:
crontab -e
Sist i crontab, lägg in föjande för att schemalägga körningen till kl 02:00 på natten varje dag. Du kan givetvis ange andra tider, intervall etc – detta är bara ett exempel.
0 2 * * * /sökväg/till/snapshot.sh
Avsluta därefter redigeringen av din crontab.
Ditt skript kommer nu köras av servern vid den/de tidpunkt(er) du angivit i cronjobbet.