# 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:

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ć:

# 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.

Czy uważasz ten artykuł za przydatny? Tak Nie