I øjeblikket er der ingen understøttelse af planlægning af snapshots i Oderland Cloud, men du kan bruge OpenStack API til at løse det på egen hånd. Ved hjælp af et bash-script (eller et andet sprog, du foretrækker) og en planlægningstjeneste som cron eller en systemd-timer kan du automatisk tage snapshots af alle monterede diskenheder på din virtuelle server.
Vi har skrevet et forslag til et sådant manuskript, som du kan bruge som inspiration (to variationer over samme tema). Du skal udfylde alle variablerne under kommentarerne OpenStack credentials
og Virtual server ID
(og Email settings
, hvis du bruger e-mail-indstillingen efter kørslen). Scriptet nedenfor vil iterere over alle volumener, der er monteret på serveren, tage et snapshot af dem, kontrollere status og derefter udskrive resultatet i terminalen (og sende en rapport via e-mail, hvis du ønsker det).
Data til brug for scriptet
Før du kan konfigurere og begynde at bruge bash-scriptet, skal du bruge nogle oplysninger om din Cloud-konto og den server, du vil oprette snapshots til:
- Loginoplysningerne til din Cloud-konto (brugernavn og adgangskode). Hvis du ikke har dem, kan du få dem ved at følge instruktionerne her (afsnittet „Nulstilling af din adgangskode‟).
- Projekt-ID for din Cloud-konto. Du kan se dette, når du er logget ind på Cloud-kontrolpanelet i øverste højre hjørne:
- Server-ID for din server. Dette kan findes inde i Oderland Cloud-kontrolpanelet, hvis du går til
Compute
(ikonet, der ligner en terning) ->Virtual machines
i menuen til venstre:
Klik derefter på rækken for den server, du vil oprette snapshots for, og rul ned til rækkenID
i højre del af vinduet.
Du har nu alt, hvad du skal bruge til at oprette scriptet i henhold til vores forslag nedenfor.
Bash-scripts til snapshots
Når du har uddraget alle oplysningerne i ovenstående afsnit, kan du oprette scriptet. Vælg, om du vil modtage e-mails fra scriptet eller ej, ved at kopiere den variant af scriptet, du ønsker, nedenfor.
Scripts, der sender e-mails med resultater
Kopier koden nedenfor til en fil på serveren, og kald den snapshot.sh
.
#!/bin/bash # OpenStack-legitimationsoplysninger eksport OS_AUTH_TYPE='adgangskode' export OS_AUTH_URL='https://cloud-api.oderland.com:5000/v3/' export OS_DOMAIN_NAME='sky' export OS_PASSWORD='CLOUDLÖSENORD
' export OS_PROJECT_NAME='PROJEKT-ID
' export OS_USERNAME='CLOUDANVÄNDARNAMN
' # Virtuel server-ID server_id='SERVER-ID
' # E-mail-indstillinger recipient='' sender='' smtp_password='' smtp_port='' smtp_server='' smtp_brugernavn='' # Afslut ved variabler, der ikke er indstillet set -uo pipefail # Tjek for afhængigheder for dep i openstack mailx jq; do hvis ! hash "$dep" &> /dev/null; then printf 'Manglende eksekverbar afhængighed: %s\n' "$dep" Udgang 1 fi færdig # Hent navnet på den virtuelle server server_name=$(openstack server show -c name -f value "$server_id") # Hent listen over diskenheder, der er knyttet til den virtuelle server volume_list=$( openstack server show -c volumes_attached -f json "$server_id" | jq -r '.volumes_attached[].id' ) # Variabel til at gemme resultatbeskeden result_message="" # Iterér over hver volume og tag et snapshot for volume_id i $volume_list; do snapshot_name="snapshot-$(date +%Y%%M%")". # Opret snapshot if openstack volume snapshot create --volume "$volume_id" --force "$snapshot_name" 1> /dev/null; then result_message+="Snapshot oprettet med succes for volume $volume_id.\n" # Vent på, at snapshotet bliver tilgængeligt 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 er tilgængeligt for volume $volume_id.\n" pause fi sove 5 elapsed_time=$((elapsed_time + 5)) if [ $elapsed_time -ge $timeout ]; then result_message+="Fejl: Snapshot $snapshot_name blev ikke tilgængeligt for volume $volume_id inden for timeout-perioden.\n" pause fi færdig ellers result_message+="Fejl ved oprettelse af snapshot for volume $volume_id.\n" fi færdig # Send e-mail med resultatet printf "$result_message" | ? mailx \ -s "Snapshot-resultat for $server_navn" \ -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"
Glem ikke at gøre filen, der indeholder scriptkoden, eksekverbar:
chmod +x /sti/til/snapshot.sh
Du kan nu teste at oprette snapshots ved hjælp af scriptet ved at køre det:
/sti/til/snapshot.sh
Scripts, der ikke sender e-mails med resultater
Kopier koden nedenfor til en fil på serveren, og kald den snapshot.sh
.
#!/bin/bash # OpenStack-legitimationsoplysninger eksport OS_AUTH_TYPE='adgangskode' export OS_AUTH_URL='https://cloud-api.oderland.com:5000/v3/' export OS_DOMAIN_NAME='sky' export OS_PASSWORD='CLOUDLÖSENORD
' export OS_PROJECT_NAME='PROJEKT-ID
' export OS_USERNAME='CLOUDANVÄNDARNAMN
' # Virtuel server-ID server_id='SERVER-ID
' # Afslut ved variabler, der ikke er indstillet set -uo pipefail # Tjek for afhængigheder for dep i openstack jq; do hvis ! hash "$dep" &> /dev/null; then printf 'Manglende eksekverbar afhængighed: %s\n' "$dep" Udgang 1 fi færdig # Hent navnet på den virtuelle server server_name=$(openstack server show -c name -f value "$server_id") # Hent listen over diskenheder, der er knyttet til den virtuelle server volume_list=$( openstack server show -c volumes_attached -f json "$server_id" | jq -r '.volumes_attached[].id' ) # Variabel til at gemme resultatbeskeden result_message="" # Iterér over hver volume og tag et snapshot for volume_id i $volume_list; do snapshot_name="snapshot-$(date +%Y%%M%")". # Opret snapshot if openstack volume snapshot create --volume "$volume_id" --force "$snapshot_name" 1> /dev/null; then result_message+="Snapshot oprettet med succes for volume $volume_id.\n" # Vent på, at snapshotet bliver tilgængeligt 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 er tilgængeligt for volume $volume_id.\n" pause fi sove 5 elapsed_time=$((elapsed_time + 5)) if [ $elapsed_time -ge $timeout ]; then result_message+="Fejl: Snapshot $snapshot_name blev ikke tilgængeligt for volume $volume_id inden for timeout-perioden.\n" pause fi færdig ellers result_message+="Fejl ved oprettelse af snapshot for volume $volume_id.\n" fi færdig printf "$result_message"
Glem ikke at gøre filen, der indeholder scriptkoden, eksekverbar:
chmod +x /sti/til/snapshot.sh
Du kan nu teste at oprette snapshots ved hjælp af scriptet ved at køre det:
/sti/til/snapshot.sh
Opret planlagte snapshots
Nu, hvor du har scriptet, kan du opsætte snapshot-planlægning, så du ikke behøver at bekymre dig om at oprette dem manuelt. Den enkleste løsning på dette er at oprette et cron-job, som vi vil diskutere nedenfor. Du kan også oprette en systemd-timer til planlægning, men det er ikke omfattet af denne vejledning.
Åbn cronjob-editoren:
crontab -e
Til sidst skal du tilføje følgende i crontab for at planlægge kørslen til kl. 02:00 om natten hver dag. Du kan selvfølgelig angive andre tidspunkter, intervaller osv. – dette er blot et eksempel.
0 2 * * * * /sti/til/snapshot.sh
Rediger derefter din crontab færdig.
Dit script vil nu blive udført af serveren på de tidspunkter, du har angivet i cron-jobbet.