# Wykonywanie automatycznych Migawek z Vault oraz Obrazów z Wirtualnych Maszyn
Przedstawimy w jaki sposób wykorzystać CLI oraz Konto usługi w celu automatycznego wykonywania:
- Migawek na podstawie Vault
- Obrazów na podstawie Wirtualnych Maszyn
CLI jest alternatywą formą dostępu do zarządzania platformą udostępniającą tekstowy interfejs możliwy do wykorzystania w automatycznych skryptach.
Wykorzystany zostanie Konto usługi. Konto usługi to dane dostępowe umożliwiające wykonywanie modyfikacje Zasobów Projektu w imieniu Użytkownika przez aplikacje tj. skrypty, urządzenia lub inne procesy automatyzujące. W szczególności można je wykorzystać poprzez CLI
lub podczas bezpośredniego dostępu do API.
Przed wykonaniem Obrazu - w celu zachowania spójności danych - Wirtualna Maszyna jest wyłączona, a po wykonaniu Obrazu ponownie uruchamiana.
Po wykonaniu Migawek lub Obrazów zostaną usunięte te, które są starsze niż 7 dni i zostały wykonane podczas poprzedniego uruchomienia skryptu.
Wymagane oprogramowanie GNU Date i Bash jest domyślnie dostępne w Rekomendowanym obrazie Ubuntu.
# Warunki wstępne
Przed przystąpieniem do integracji powinieneś mieć:
- zainstalowany system Linux, na przykład w Wirtualnej maszynie utworzonej zgodnie z instrukcją
- zainstalowane GNU Date i Bash
- utworzone Konto usługi, zgodnie z instrukcją
- zainstalowane CLI
# Automatyczne Migawki
# Utwórz nowy plik skryptu
Utwórz nowy plik konfiguracyjny:
sudo nano ~/hyperone-snapshoter.sh
Możesz zapoznać się z objaśnieniem polecenia na explainshell.com (opens new window).
Wklej poniższą zawartość:
#!/bin/bash
set -ueo pipefail
set -x
TOKEN="{token}"
SNAPSHOT_RETENTION="7 days";
DRY_RUN="yes"
export HYPERONE_ACCESS_TOKEN_SECRET="$TOKEN";
## Automatic new snapshots
h1 vault list -o id | while read vault; do
snapshot_name=$(date +'automatic snapshot on %F')
h1 snapshot create --vault "$vault" --name "$snapshot_name" --tag automatic=yes;
echo "Created snapshot for Vault ID: $vault";
done;
## Garbage collector
minimum_unix_time=$(date +"%s" --date="$SNAPSHOT_RETENTION ago")
date +"Removing snapshot older than %d-%m-%Y %H:%M" --date="@$minimum_unix_time";
h1 snapshot list --query "[?tag.automatic == 'yes'].{id:_id,createdOn:createdOn}" -o tsv | while read SNAPSHOT_ID SNAPSHOT_DATE; do
snapshot_unix_time=$(date "+%s" --date "$SNAPSHOT_DATE");
if [ $snapshot_unix_time -lt $minimum_unix_time ]; then
if [ "$DRY_RUN" == "no" ]; then
h1 snapshot delete --yes --snapshot "$SNAPSHOT_ID";
fi
echo "Delete old snapshot $SNAPSHOT_ID created on $SNAPSHOT_DATE"
else
echo "Skip fresh snapshot $SNAPSHOT_ID created on $SNAPSHOT_DATE";
fi
done;
Zastąp poniższe wartości:
{token}
- identyfikator Konta Usługi
# Zweryfikuj poprawność konfiguracji
Wykonaj następujące polecenie:
bash ~/hyperone-snapshoter.sh
Możesz zapoznać się z objaśnieniem polecenia na explainshell.com (opens new window).
# Wyłącz tryb próbny
Odszukaj wiersz pasujący do wzorca DRY_RUN="yes"
i zastąp go następującym:
DRY_RUN="no"
# Dodaj do harmonogramu automatyczne Migawki
Wykonaj następujące polecenie:
crontab -e
Możesz zapoznać się z objaśnieniem polecenia na explainshell.com (opens new window).
W otwartym edytorze dopisz wiersz:
@daily bash ~/hyperone-snapshoter.sh
Zapisz wprowadzone zmiany. Zapisz wprowadzone zmiany. Od teraz to polecenie będzia automatycznie, regularnie wykonywane.
# Automatyczne Obrazy
# Utwórz nowy plik skryptu
Utwórz nowy plik konfiguracyjny:
sudo nano ~/hyperone-imager.sh
Możesz zapoznać się z objaśnieniem polecenia na explainshell.com (opens new window).
Wklej poniższą zawartość:
#!/bin/bash
set -ueo pipefail
set -x
TOKEN="{token}"
IMAGE_RETENTION="-7 days";
DRY_RUN="no"
export HYPERONE_ACCESS_TOKEN_SECRET="$TOKEN";
## Automatic new image
h1 vm list --query '[].{id:_id,name:name,state:state}' -o tsv | while read VM_ID VM_NAME VM_STATE; do
image_name=$(date +"$VM_ID:$VM_NAME:%F");
if [ "$VM_STATE" == "Running" ] || [ "$VM_STATE" == "Off" ]; then
if [ "$VM_STATE" == 'Running' ]; then
h1 vm stop --vm "$VM_ID";
echo "Stopped VM: $VM_NAME ( $VM_ID )";
fi;
h1 image create --vm "$VM_ID" --name "$image_name" --tag automatic=yes;
echo "Created image for VM: $VM_NAME ( $VM_ID )";
if [ "$VM_STATE" == "Running" ]; then
h1 vm start --vm "$VM_ID";
echo "Rerun VM: $VM_NAME ( $VM_ID )";
fi;
else
echo "Skip VM in invalid ($VM_STATE) state: $VM_NAME ( $VM_ID )";
fi;
done;
## Garbage collector
minimum_unix_time=$(date +"%s" --date="$IMAGE_RETENTION ago")
date +"Removing image older than %d-%m-%Y %H:%M" --date="@$minimum_unix_time";
h1 image list --query "[?tag.automatic == 'yes'].{id:_id,createdOn:createdOn}" -o tsv | while read IMAGE_ID IMAGE_DATE; do
image_unix_time=$(date "+%s" --date "$IMAGE_DATE");
if [ $image_unix_time -lt $minimum_unix_time ]; then
if [ "$DRY_RUN" == "no" ]; then
h1 image delete --yes --image "$IMAGE_ID";
fi
echo "Delete old image $IMAGE_ID created on $IMAGE_DATE"
else
echo "Skip fresh image $IMAGE_ID created on $IMAGE_DATE";
fi
done;
Zastąp poniższe wartości:
{token}
- identyfikator Konta Usługi
# Zweryfikuj poprawność konfiguracji
Wykonaj następujące polecenie:
bash ~/hyperone-imager.sh
Możesz zapoznać się z objaśnieniem polecenia na explainshell.com (opens new window).
# Wyłącz tryb próbny
Odszukaj wiersz pasujący do wzorca DRY_RUN="yes"
i zastąp go następującym:
DRY_RUN="no"
# Dodaj do harmonogramu automatyczne Obrazy
Wykonaj następujące polecenie:
crontab -e
Możesz zapoznać się z objaśnieniem polecenia na explainshell.com (opens new window).
W otwartym edytorze dopisz wiersz:
@daily bash ~/hyperone-imager.sh
Zapisz wprowadzone zmiany. Zapisz wprowadzone zmiany. Od teraz to polecenie będzia automatycznie, regularnie wykonywane.
# Zobacz także
Zapoznaj się także z samouczkiem w jaki sposób automatycznie wykonywać kopie bezpieczeństwa do Vault.