Сохранение UUID снимка виртуальной машины Xenserver в качестве переменной в сценарии оболочки для создания файлов .xva из снимков

Я смотрел на этот вопрос, который задавал что-то похожее на помощь, и это самое близкое, что я мог найти, чтобы помочь, но это не решает мою проблему: экспорт снимка XenServer в виде файла через консоль

Что мне конкретно нужно, так это сделать так, чтобы в скрипте через что-то вроде curl или sed извлекался только сам UUID из информации списка снимков и сохранялся в качестве переменной в скрипте (у нас будет только один на машину в любое время, но любой ответ, масштабируемый для охвата нескольких UUID, также будет более чем приемлемым).

Проще говоря, мне нужен только Сам UUID для хранения в качестве переменной в сценарии .sh из этого вывода или любого другого вывода, имеющего UUID:

uuid ( RO)                : 30820e58-886e-972e-8435-c5cf83140446
      name-label ( RW): xgdc00-7-20
name-description ( RW):
is-vmss-snapshot ( RO): false

Это в основном понадобится на серверах с Xenserver 7.0 или, возможно, немного новее, я определенно буду признателен за помощь по это, поскольку я не могу найти способ сделать это правильно, поскольку UUID изменяется для снимков, чтобы я мог поместить переменную в эту команду или команду, подобную этой, в скрипт:

xe vm-export vm=SNAPSHOT_UUID filename=/mnt/anything
0
задан 7 March 2019 в 21:14
1 ответ

Я еще немного поохотился в Интернете и нашел сценарий в сообщении для обсуждения на форумах Citrix, в котором есть сценарий, который делает именно то, что мне нужно: https: // обсуждения .citrix.com / topic / 345960-xenserver-automatic-snapshots-script /

Вот сам сценарий, который, как я могу проверить, работает у меня на XenServer 7.0, все, что вам нужно сделать, это указать UUID виртуальной машины и путь экспорта в config:

#!/bin/bash


# [usage & Config]
# put this script on Xenserver master and execute with root privilege
# Change VM UUID(s) and the location to export
# Configs:
# VMs: a list of VM uuid, separated by comma
# ExportPath: the mount path to store exported xva file
# 
# [How it work]
# step1: iterate specified VM UUID(s) and create a snapshot for each
# step2: backup the snapshots to specified location
# step3: delete temporary snapshot created in step 1
# 
# [Note]
# please make sure you have enough disk space for ExportPath, or backup will fail
# tested on Xenserver 5.6 sp2 and 6.2
# Xenserver 6.2's performance is at least 4 times better than Xenserver 5.6
# on error, script will print the reason, and proceed to handle next VM 
# backed up file format: vm_label + "backup" + date of snapshot, i.e, 
win71_backup_2013-12-31_17-11-47.xva
#

##### Config #######

VMs="4bce3dc4-a1f1-66c7-48b5-31536be6f123,278fc9f6-f377-fa30-bd54- 
a3b239027456,167e0e3e-a991-bae0-2b04-abad270d0789"
ExportPath="/mnt/test"

####################


vm_array=(${VMs//,/ })
ret_code=0
snapshot_uuid_array=
snapshot_name_array=
backup_ext=".xva"

echo "Starting to backup..."
echo "VM list: ${vm_array[@]}"
echo "ExportPath: ${ExportPath}"

if [[ "$ExportPath" != */ ]]; then
    ExportPath="$ExportPath/"
fi

for i in "${!vm_array[@]}"; do
    # get vm label
    uuid=${vm_array[$i]}
    vm_label_raw=`xe vm-param-get param-name=name-label uuid=$uuid`
    if [ $? -ne 0 ]; then
        echo "failed to get VM label uuid = $uuid"
        ret_code=1
        continue
    fi
    vm_label=`echo "$vm_label_raw" | tr ' ' _ | tr -d '(' | tr -d ')'`

    # prepare snapshot name
    date=$(date +%Y-%m-%d_%H-%M-%S)
snapshot_name=$vm_label"_backup_"$date

# snapshot vm
snapshot_uuid=`xe vm-snapshot uuid=$uuid new-name-label=$snapshot_name`
if [ $? -ne 0 ]; then
    echo "failed to snapshot VM uuid = $uuid"
    ret_code=1
    continue
fi
snapshot_uuid_array[$i]=$snapshot_uuid
snapshot_name_array[$i]=$snapshot_name

# remove is-a-template attribute from snapshot
echo=`xe template-param-set is-a-template=false uuid=$snapshot_uuid`
if [ $? -ne 0 ]; then
    echo "failed to remove template attribute from VM uuid = $uuid"
    ret_code=1
fi
done


# backup each VM to specified path and delete
for i in "${!snapshot_uuid_array[@]}"; do
snapshot_uuid=${snapshot_uuid_array[$i]}
snapshot_name=${snapshot_name_array[$i]}

echo "Start backup $snapshot_name ..."
echo=`xe vm-export uuid=$snapshot_uuid filename="$ExportPath$snapshot_name$backup_ext"`
if [ $? -ne 0 ]; then
    echo "failed to export snapshot name = $snapshot_name$backup_ext"
    ret_code=1
else    
    echo "Successfully backup $snapshot_name to $ExportPath"
fi

echo=`xe vm-uninstall force=true uuid=$snapshot_uuid`
if [ $? -ne 0 ]; then
    echo "failed to remove temporary snapshot name = $snapshot_name"
    ret_code=1 
fi
done

exit $ret_code
0
ответ дан 5 December 2019 в 03:50

Теги

Похожие вопросы