Автоматизация резервного копирования vCenter Server Appliance (VCSA) на уровне файлов средствами PowerCLI.

This post was originally published on this site

Год назад мы писали о средствах VMware vCenter Server Appliance для резервного копирования и восстановления на уровне файлов. Эти функции появились в VMware vCSA 6.5 и были существенно доработаны в версии vCSA 6.7 (отдельный раздел Backup, запланированные резервные копии, политика хранения бэкапов, браузер файлов и т.п.).

В то же время, у пользователей VMware vCSA есть запрос на автоматизацию процесса резервного копирования средствами PowerCLI через механизм vSphere RESTful API. На блогах VMware появилась интересная статья, описывающая данный процесс, приведем ниже основные его моменты.

Взаимодействие с механизмом резервного копирования vCSA происходит через модуль CIS, который взаимодействует с компонентами инфраструктуры на низком уровне. Первым шагом как раз и является подключение к службе CIS:

Connect-CisServer -Server vcsa01.corp.local

Затем нужно найти сервис, для которого нужно сделать резервную копию:

Get-CisService -Name *backup*

Из вывода видно, что нам нужен сервис com.vmware.appliance.recovery.backup.job. Сохраняем его в переменую и передаем в Get-Member:

В выводе мы видим метод create, который позволяет создать задачу резервного копирования, а также свойство help, которое помогает сформировать входные параметры для задачи РК:

$backupJobSvc.Help.create.piece

Теперь можно заполнить поля задачи данными из нашего окружения. Параметр parts ожидает на вход тип массив, также в параметре password нужно передать специальный тип, чтобы он был принят:

$backupSpec.parts = @("common")
$backupSpec.location_type = "FTP"
$backupSpec.location = "ftp01.corp.local"
$backupSpec.location_user = "backup"
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$backupSpec.location_password = "VMware1!"
$backupSpec.comment = "PowerCLI Backup Job"

После этого можно уже создавать задачу РК:

$backupJob = $backupJobSvc.create($backupSpec)

Теперь объединяем это все в один скрипт:

# Login to the CIS Service of the desired VCSA
Connect-CisServer -Server vcsa01.corp.local

# Store the Backup Job Service into a variable
$backupJobSvc = Get-CisService -Name com.vmware.appliance.recovery.backup.job

# Create a specification based on the Help response
$backupSpec = $backupJobSvc.Help.create.piece.CreateExample()

# Fill in each input parameter, as needed
$backupSpec.parts = @("common")
$backupSpec.location_type = "FTP"
$backupSpec.location = "ftp01.corp.local"
$backupSpec.location_user = "backup"
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$backupSpec.location_password = "VMware1!"
$backupSpec.comment = "PowerCLI Backup Job"

# Create the backup job
$backupJobSvc.create($backupSpec)

Чтобы создать запланированную задачу резервного копирования, надо использовать сервис com.vmware.appliance.recovery.backup.schedules. Тут нам надо задать schedule ID (это строковый параметр по вашему выбору, задается опционально) и заполнить спецификацию аналогично предыдущему сценарию.

Периодичность бэкапа задается через свойство days, которое можно оставить неустановленным (бэкап будет делаться каждый день), либо задать конкретные дни в виде массива.

Ну и, собственно сам сценарий запланированного бэкапа VMware vCSA на уровне файлов через PowerCLI:

# Store the Backup Job Service into a variable
$backupSchedSvc = Get-CisService -Name com.vmware.appliance.recovery.backup.schedules

# Create a Schedule ID specification based on the Help response
$schedSpec = $backupSchedSvc.Help.create.schedule.Create()
$schedSpec = 'weekly'

# Create a specification based on the Help response
$backupSchedSpec = $backupSchedSvc.Help.create.spec.Create()
$backupSchedSpec.parts = @("common")
$backupSchedSpec.location = "ftp://ftp01.corp.local"
$backupSchedSpec.location_user = "backup"
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$backupSchedSpec.location_password = "VMware1!"
$backupSchedSpec.enable = $true
$recurSpec = $backupSchedSvc.Help.create.spec.recurrence_info.Create()
$recurSpec.days = @("Sunday")
$recurSpec.minute = '59'
$recurSpec.hour = '23'
$backupSchedSpec.recurrence_info = $recurSpec
$retentSpec = $backupschedsvc.help.create.spec.retention_info.Create()
$retentSpec.max_count = '5'
$backupSchedSpec.retention_info = $retentSpec

# Create the backup job
$backupSchedSvc.create($schedSpec, $backupSchedSpec)

Это все соответствует запланированной задаче РК со следующими параметрами:

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.