Merge pull request #7 from wcarroll/CreateVpg

Create Basic VPG
To be improved upon with additional functions to edit existing vpgs, as well as set detailed settings on a per-vm bases within a VPG.
This commit is contained in:
Wes Carroll
2019-03-11 09:34:34 -04:00
committed by GitHub
9 changed files with 2525 additions and 27 deletions
@@ -1,6 +1,6 @@
<# .ExternalHelp ./en-us/ZertoApiWrapper-help.xml #>
function Get-ZertoUnprotectedVm {
[cmdletbinding()]
$uri = "virtualizationsites/{0}/vms" -f $(Get-ZertoLocalSite).siteidentifier
$uri = "virtualizationsites/{0}/vms" -f $script:zvmLocalInfo.siteidentifier
Invoke-ZertoRestRequest -uri $uri
}
+263
View File
@@ -0,0 +1,263 @@
<# .ExternalHelp ./en-us/ZertoApiWrapper-help.xml #>
function New-ZertoVpg {
[cmdletbinding()]
param(
[Parameter(
HelpMessage = "Name of the VPG",
Mandatory = $true
)]
[string]$vpgName,
[Parameter(
HelpMessage = "VPG Priority. High, Medium, or Low. Default value is Medium"
)]
[ValidateSet("High", "Medium", "Low")]
[string]$vpgPriority = "Medium",
[Parameter(
HelpMessage = "Journal History in Hours. Min 1 hour, Max 720 Hours (30 days). Default value is 24 hours"
)]
[ValidateRange(1, 720)]
[int]$journalHistoryInHours = 24,
[Parameter(
HelpMessage = "Name(s) of the VM(s) to be protected.",
Mandatory = $true
)]
[ValidateNotNullOrEmpty()][string[]]$protectedVm,
[Parameter(
HelpMessage = "Name of the site where the VM(s) will be recoveryed",
Mandatory = $true
)]
[string]$recoverySite,
[Parameter(
HelpMessage = "Name of the cluster where the VM(s) will be recovered.",
ParameterSetName = "recoveryClusterDatastore",
Mandatory = $true
)]
[Parameter(
HelpMessage = "Name of the cluster where the VM(s) will be recovered.",
ParameterSetName = "recoveryClusterDatastoreCluster",
Mandatory = $true
)]
[string]$recoveryCluster,
[Parameter(
HelpMessage = "Name of the host where the VM(s) will be recovered.",
ParameterSetName = "recoveryHostDatastore",
Mandatory = $true
)]
[Parameter(
HelpMessage = "Name of the host where the VM(s) will be recovered.",
ParameterSetName = "recoveryHostDatastoreCluster",
Mandatory = $true
)]
[string]$recoveryHost,
[Parameter(
HelpMessage = "Name of the resource pool where the VM(s) will be recovered.",
ParameterSetName = "recoveryResourcePoolDatastore",
Mandatory = $true
)]
[Parameter(
HelpMessage = "Name of the resource pool where the VM(s) will be recovered.",
ParameterSetName = "recoveryResourcePoolDatastoreCluster",
Mandatory = $true
)]
[string]$recoveryResourcePool,
[Parameter(
HelpMessage = "Name of the datastore where the VM(s), Volume(s), and Journal(s) will reside.",
ParameterSetName = "recoveryClusterDatastore",
Mandatory = $true
)]
[Parameter(
HelpMessage = "Name of the datastore where the VM(s), Volume(s), and Journal(s) will reside.",
ParameterSetName = "recoveryHostDatastore",
Mandatory = $true
)]
[Parameter(
HelpMessage = "Name of the datastore where the VM(s), Volume(s), and Journal(s) will reside.",
ParameterSetName = "recoveryResourcePoolDatastore",
Mandatory = $true
)]
[string]$datastore,
[Parameter(
HelpMessage = "Name of the datastore cluster where the VM(s), Volume(s), and Journal(s) will reside.",
ParameterSetName = "recoveryClusterDatastoreCluster",
Mandatory = $true
)]
[Parameter(
HelpMessage = "Name of the datastore cluster where the VM(s), Volume(s), and Journal(s) will reside.",
ParameterSetName = "recoveryHostDatastoreCluster",
Mandatory = $true
)]
[Parameter(
HelpMessage = "Name of the datastore cluster where the VM(s), Volume(s), and Journal(s) will reside.",
ParameterSetName = "recoveryResourcePoolDatastoreCluster",
Mandatory = $true
)]
[string]$datastoreCluster,
[Parameter(
HelpMessage = "Name of folder at recovery location where the recovered virtual machine(s) will be created.",
Mandatory = $true
)]
[string]$recoveryFolder,
[Parameter(
HelpMessage = "RPO alert"
)]
[ValidateRange(60, 864200)][Int32]$rpoInSeconds = 300,
[Parameter(
HelpMessage = "Minimum test interval for this VPG. Valid values are 0: Off, 43200: 1 Month, 131040: 3 Months, 262080: 6 Months, 294560: 9 Months, 252600: 12 Months"
)]
[ValidateSet(0, 43200, 131040, 262080, 294560, 252600)][int]$testIntervalInMinutes = 262080,
[Parameter(
HelpMessage = "Service profile name to use."
)]
[string]$serviceProfile,
[Parameter(
HelpMessage = "Turn on or off WAN and Journal Compression. Default is turned on."
)]
[bool]$useWanCompression = $true,
[Parameter(
HelpMessage = "Name of ZORG to use."
)]
[String]$zorg,
[Parameter(
HelpMessage = "Name of the network to use during a Failover Live \ Move VPG operation.",
Mandatory = $true
)]
[String]$recoveryNetwork,
[Parameter(
HelpMessage = "Name of the network to use during a Failover Test operation",
Mandatory = $true
)]
[string]$testNetwork
)
begin {
$identifiersTable = @{}
$identifiersTable['recoverySiteIdentifier'] = $(Get-ZertoPeerSite -peerName $recoverySite).siteIdentifier
$peerSiteNetworks = $(Get-ZertoVirtualizationSite -siteIdentifier $identifiersTable['recoverySiteIdentifier'] -networks)
$identifiersTable['failoverNetworkIdentifier'] = $peerSiteNetworks | Where-Object {$_.VirtualizationNetworkName -like $recoveryNetwork} | Select-Object -ExpandProperty NetworkIdentifier
$identifiersTable['testNetworkIdentifier'] = $peerSiteNetworks | Where-Object {$_.VirtualizationNetworkName -like $testNetwork} | Select-Object -ExpandProperty NetworkIdentifier
$identifiersTable['folderIdentifier'] = $(Get-ZertoVirtualizationSite -siteIdentifier $identifiersTable['recoverySiteIdentifier'] -folders | Where-Object {$_.FolderName -like $recoveryFolder}).folderIdentifier
if ($PSBoundParameters.ContainsKey("zorg")) {
$identifiersTable['zorgIdentifier'] = $(Get-ZertoZorg | Where-Object {$_.ZorgName -like $zorg}).ZorgIdentifier
}
if ($PSBoundParameters.ContainsKey("serviceProfile")) {
$identifiersTable['serviceProfileIdentifier'] = $(Get-ZertoServiceProfile -siteIdentifier $identifiersTable['recoverySiteIdentifier'] | Where-Object {$_.ServiceProfileName -like $serviceProfile}).serviceProfileIdentifier
}
switch ($PSCmdlet.ParameterSetName) {
"recoveryClusterDatastoreCluster" {
$identifiersTable['clusterIdentifier'] = $(Get-ZertoVirtualizationSite -siteIdentifier $identifiersTable['recoverySiteIdentifier'] -hostclusters | Where-Object {$_.VirtualizationClusterName -like $recoveryCluster}).ClusterIdentifier
$identifiersTable['datastoreClusterIdentifier'] = $(Get-ZertoVirtualizationSite -siteIdentifier $identifiersTable['recoverySiteIdentifier'] -datastoreclusters | Where-Object {$_.DatastoreClusterName -like $datastoreCluster}).DatastoreClusterIdentifier
}
"recoveryClusterDatastore" {
$identifiersTable['clusterIdentifier'] = $(Get-ZertoVirtualizationSite -siteIdentifier $identifiersTable['recoverySiteIdentifier'] -hostclusters | Where-Object {$_.VirtualizationClusterName -like $recoveryCluster}).ClusterIdentifier
$identifiersTable['datastoreIdentifier'] = $(Get-ZertoVirtualizationSite -siteIdentifier $identifiersTable['recoverySiteIdentifier'] -datastores | Where-Object {$_.DatastoreName -like $datastore}).DatastoreIdentifier
}
"recoveryHostDatastoreCluster" {
$identifiersTable['recoveryHostIdentifier'] = $(Get-ZertoVirtualizationSite -siteIdentifier $identifiersTable['recoverySiteIdentifier'] -hosts | Where-Object {$_.VirtualizationHostName -like $recoveryHost}).HostIdentifier
$identifiersTable['datastoreClusterIdentifier'] = $(Get-ZertoVirtualizationSite -siteIdentifier $identifiersTable['recoverySiteIdentifier'] -datastoreclusters | Where-Object {$_.DatastoreClusterName -like $datastoreCluster}).DatastoreClusterIdentifier
}
"recoveryHostDatastore" {
$identifiersTable['recoveryHostIdentifier'] = $(Get-ZertoVirtualizationSite -siteIdentifier $identifiersTable['recoverySiteIdentifier'] -hosts | Where-Object {$_.VirtualizationHostName -like $recoveryHost}).HostIdentifier
$identifiersTable['datastoreIdentifier'] = $(Get-ZertoVirtualizationSite -siteIdentifier $identifiersTable['recoverySiteIdentifier'] -datastores | Where-Object {$_.DatastoreName -like $datastore}).DatastoreIdentifier
}
"recoveryResourcePoolDatastoreCluster" {
$identifiersTable['recoveryResourcePoolIdentifier'] = $(Get-ZertoVirtualizationSite -siteIdentifier $identifiersTable['recoverySiteIdentifier'] -resourcepools | Where-Object {$_.ResourcePoolName -like $recoveryResourcePool}).ResourcePoolIdentifier
$identifiersTable['datastoreClusterIdentifier'] = $(Get-ZertoVirtualizationSite -siteIdentifier $identifiersTable['recoverySiteIdentifier'] -datastoreclusters | Where-Object {$_.DatastoreClusterName -like $datastoreCluster}).DatastoreClusterIdentifier
}
"recoveryResourcePoolDatastore" {
$identifiersTable['recoveryResourcePoolIdentifier'] = $(Get-ZertoVirtualizationSite -siteIdentifier $identifiersTable['recoverySiteIdentifier'] -resourcepools | Where-Object {$_.ResourcePoolName -like $recoveryResourcePool}).ResourcePoolIdentifier
$identifiersTable['datastoreIdentifier'] = $(Get-ZertoVirtualizationSite -siteIdentifier $identifiersTable['recoverySiteIdentifier'] -datastores | Where-Object {$_.DatastoreName -like $datastore}).DatastoreIdentifier
}
}
$unprotectedVms = Get-ZertoUnprotectedVm
$protectedVms = Get-ZertoProtectedVm
$vmIdentifiers = @()
$vmIdentifiers = foreach ($vm in $protectedVm) {
$vmIdentifier = $unprotectedVms | Where-Object {$_.vmName -like $vm} | Select-Object -ExpandProperty vmIdentifier
if ( -not $vmIdentifier) {
$results = $protectedVms | Where-Object {$_.VmName -like $vm} | Select-Object -ExpandProperty vmIdentifier
if ($results.count -eq 3) {
Write-Warning "$vm is already a part of 3 VPGs and cannot be part of an additional VPG. Skipping $vm"
continue
} elseif ($results.count -eq 0) {
Write-Warning "$vm not found. Skipping $vm"
continue
} else {
$vmIdentifier = $results | Select-Object -First 1
}
}
$returnObject = New-Object PSObject
$returnObject | Add-Member -MemberType NoteProperty -Name "VmIdentifier" -Value $vmIdentifier
$returnObject
}
}
process {
$baseUri = "vpgsettings"
$vpgSettingsIdentifier = Invoke-ZertoRestRequest -uri $baseUri -body "{}" -method "POST"
$baseSettings = Get-ZertoVpgSetting -vpgSettingsIdentifier $vpgSettingsIdentifier
$baseSettings.basic.name = $vpgName
$baseSettings.basic.journalHistoryInHours = $journalHistoryInHours
$baseSettings.basic.Priority = $vpgPriority
$baseSettings.basic.recoverySiteIdentifier = $identifiersTable['recoverySiteIdentifier']
$baseSettings.basic.RpoInSeconds = $rpoInSeconds
if ($identifiersTable.ContainsKey('serviceProfileIdentifier')) {
$baseSettings.basic.ServiceProfileIdentifier = $identifiersTable['serviceProfileIdentifier']
}
$baseSettings.basic.TestIntervalInMinutes = $testIntervalInMinutes
$baseSettings.basic.useWanCompression = $useWanCompression
if ($identifiersTable.ContainsKey('zorgIdentifier')) {
$baseSettings.basic.ZorgIdentifier = $identifiersTable['zorgIdentifier']
}
$baseSettings.Networks.Failover.Hypervisor.DefaultNetworkIdentifier = $identifiersTable['failoverNetworkIdentifier']
$baseSettings.Networks.FailoverTest.Hypervisor.DefaultNetworkIdentifier = $identifiersTable['testNetworkIdentifier']
$baseSettings.Recovery.DefaultFolderIdentifier = $identifiersTable['folderIdentifier']
switch ($PSCmdlet.ParameterSetName) {
"recoveryClusterDatastoreCluster" {
$baseSettings.Recovery.DefaultDatastoreClusterIdentifier = $identifiersTable['datastoreClusterIdentifier']
$baseSettings.Recovery.DefaultHostClusterIdentifier = $identifiersTable['clusterIdentifier']
}
"recoveryClusterDatastore" {
$baseSettings.Recovery.DefaultHostClusterIdentifier = $identifiersTable['clusterIdentifier']
$baseSettings.Recovery.DefaultDatastoreIdentifier = $identifiersTable['datastoreIdentifier']
}
"recoveryHostDatastoreCluster" {
$baseSettings.Recovery.DefaultDatastoreClusterIdentifier = $identifiersTable['datastoreClusterIdentifier']
$baseSettings.Recovery.DefaultHostIdentifier = $identifiersTable['hostIdentifier']
}
"recoveryHostDatastore" {
$baseSettings.Recovery.DefaultHostIdentifier = $identifiersTable['hostIdentifier']
$baseSettings.Recovery.DefaultDatastoreIdentifier = $identifiersTable['datastoreIdentifier']
}
"recoveryResourcePoolDatastoreCluster" {
$baseSettings.Recovery.ResourcePoolIdentifier = $identifiersTable['recoveryResourcePoolIdentifier']
$baseSettings.Recovery.DefaultDatastoreClusterIdentifier = $identifiersTable['datastoreClusterIdentifier']
}
"recoveryResourcePoolDatastore" {
$baseSettings.Recovery.ResourcePoolIdentifier = $identifiersTable['recoveryResourcePoolIdentifier']
$baseSettings.Recovery.DefaultDatastoreIdentifier = $identifiersTable['datastoreIdentifier']
}
}
If ($vmIdentifiers.count -eq 1) {
$basesettings.Vms = @()
$baseSettings.Vms += $vmIdentifiers
} else {
$baseSettings.Vms = $vmIdentifiers
}
$settingsURI = "{0}/{1}" -f $baseUri, $vpgSettingsIdentifier
Invoke-ZertoRestRequest -uri $settingsURI -body $($baseSettings | ConvertTo-Json -Depth 10) -method "PUT" | Out-Null
}
end {
return $vpgSettingsIdentifier.toString()
}
}
+4 -4
View File
@@ -8,13 +8,13 @@ function Remove-ZertoVpg {
)]
[string]$vpgName,
[Parameter(
HelpMessage = "Use this switch to keep the recovery volumes at the target site. If the virtual machines in the deleted VPG are reprotected, these volumes can be used as preseeded volumes to speed up the initial synchronization of the new VPG."
HelpMessage = "Use this parameter to keep the recovery volumes at the target site, by setting it to True. If the virtual machines in the deleted VPG are reprotected, these volumes can be used as preseeded volumes to speed up the initial synchronization of the new VPG. Default is to remove Recovery Volumes"
)]
[switch]$keepRecoveryVolumes,
[bool]$keepRecoveryVolumes = $false,
[Parameter(
HelpMessage = "Use this switch to force delete the VPG."
HelpMessage = "Use this parameter to force delete the VPG, by setting this parameter equal to true."
)]
[switch]$force
[bool]$force = $false
)
begin {
@@ -0,0 +1,20 @@
<# .ExternalHelp ./en-us/ZertoApiWrapper-help.xml #>
function Save-ZertoVpgSettings {
[cmdletbinding(
SupportsShouldProcess = $true
)]
param(
[Parameter(
HelpMessage = "VpgSettings Identifier to save",
Mandatory = $true,
ValueFromPipeline = $true,
ValueFromPipelineByPropertyName = $true
)]
[string]$vpgSettingsIdentifier
)
$baseUri = "vpgsettings/{0}/commit" -f $vpgSettingsIdentifier
if ($PSCmdlet.ShouldProcess("Commiting VPG Settings with Settigns identifier $vpgSettingsIdentifier")) {
Invoke-ZertoRestRequest -uri $baseUri -method "POST"
}
}
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -24,7 +24,7 @@ It is possible to update the Bandwidth group with the -groupName setting. If the
It is possible to update the static IP address, default gateway, or subnetmask.
It is suggested that you use Get-ZertoVra to get the vraIdentifer prameter.
It is suggested that you use Get-ZertoVra to get the vraIdentifer parameter.
## EXAMPLES
+457
View File
@@ -0,0 +1,457 @@
---
external help file: ZertoApiWrapper-help.xml
Module Name: ZertoApiWrapper
online version: https://github.com/wcarroll/ZertoApiWrapper/blob/master/docs/New-ZertoVpg.md
schema: 2.0.0
---
# New-ZertoVpg
## SYNOPSIS
Creates a New VPG with default settings only. Customization of VM settings can be accomplished with other module level functions.
## SYNTAX
### recoveryClusterDatastoreCluster
```
New-ZertoVpg -vpgName <String> [-vpgPriority <String>] [-journalHistoryInHours <Int32>] -protectedVm <String[]>
-recoverySite <String> -recoveryCluster <String> -datastoreCluster <String> -recoveryFolder <String>
[-rpoInSeconds <Int32>] [-testIntervalInMinutes <Int32>] [-serviceProfile <String>]
[-useWanCompression <Boolean>] [-zorg <String>] -recoveryNetwork <String> -testNetwork <String>
[<CommonParameters>]
```
### recoveryClusterDatastore
```
New-ZertoVpg -vpgName <String> [-vpgPriority <String>] [-journalHistoryInHours <Int32>] -protectedVm <String[]>
-recoverySite <String> -recoveryCluster <String> -datastore <String> -recoveryFolder <String>
[-rpoInSeconds <Int32>] [-testIntervalInMinutes <Int32>] [-serviceProfile <String>]
[-useWanCompression <Boolean>] [-zorg <String>] -recoveryNetwork <String> -testNetwork <String>
[<CommonParameters>]
```
### recoveryHostDatastoreCluster
```
New-ZertoVpg -vpgName <String> [-vpgPriority <String>] [-journalHistoryInHours <Int32>] -protectedVm <String[]>
-recoverySite <String> -recoveryHost <String> -datastoreCluster <String> -recoveryFolder <String>
[-rpoInSeconds <Int32>] [-testIntervalInMinutes <Int32>] [-serviceProfile <String>]
[-useWanCompression <Boolean>] [-zorg <String>] -recoveryNetwork <String> -testNetwork <String>
[<CommonParameters>]
```
### recoveryHostDatastore
```
New-ZertoVpg -vpgName <String> [-vpgPriority <String>] [-journalHistoryInHours <Int32>] -protectedVm <String[]>
-recoverySite <String> -recoveryHost <String> -datastore <String> -recoveryFolder <String>
[-rpoInSeconds <Int32>] [-testIntervalInMinutes <Int32>] [-serviceProfile <String>]
[-useWanCompression <Boolean>] [-zorg <String>] -recoveryNetwork <String> -testNetwork <String>
[<CommonParameters>]
```
### recoveryResourcePoolDatastoreCluster
```
New-ZertoVpg -vpgName <String> [-vpgPriority <String>] [-journalHistoryInHours <Int32>] -protectedVm <String[]>
-recoverySite <String> -recoveryResourcePool <String> -datastoreCluster <String> -recoveryFolder <String>
[-rpoInSeconds <Int32>] [-testIntervalInMinutes <Int32>] [-serviceProfile <String>]
[-useWanCompression <Boolean>] [-zorg <String>] -recoveryNetwork <String> -testNetwork <String>
[<CommonParameters>]
```
### recoveryResourcePoolDatastore
```
New-ZertoVpg -vpgName <String> [-vpgPriority <String>] [-journalHistoryInHours <Int32>] -protectedVm <String[]>
-recoverySite <String> -recoveryResourcePool <String> -datastore <String> -recoveryFolder <String>
[-rpoInSeconds <Int32>] [-testIntervalInMinutes <Int32>] [-serviceProfile <String>]
[-useWanCompression <Boolean>] [-zorg <String>] -recoveryNetwork <String> -testNetwork <String>
[<CommonParameters>]
```
## DESCRIPTION
Creates a New VPG with minimal default settings only. If additional configuration is desired, the VPG settings identifier will be returned and can be passed to other VPG modifying functions to include additional details.
Finally, to save the settings, you need to pass the Vpg Settings Identifier to the `Save-ZertoVpgSettings` function to commit the the VPG.
## EXAMPLES
### Example 1
```powershell
PS C:> New-ZertoVpg -vpgName "MyVpg" -protectedVm "WebServer01", "AppServer01", "DatabaseServer01" -recoverySite "Recovery Site" -recoveryFolder "Recovered VMs" -recoveryCluster "Recovery Cluster Name" -recoveryDatastoreCluster "Datastore Cluster Name" -testNetwork "Test Bubble Network" -recoveryNetwork "VM Network"
```
Creates a VPG Settings Object for a VPG called "MyVpg" and protecting Virtual Machines "WebServer01", "AppServer01", and "DatabaseServer01" targeting site "Recovery Site." The Virtual machines will be placed on the compute cluster "Recovery Cluster Name" on the datastore cluster "Datastore Cluster Name." When the virtual machines are created at the recovery site, they will be created in the folder "Recovered VMs." Finally, the network to be used during a live event will be "VM Network" and during a test operation will be "VM Network." Other values set will be the defaults, such as:
- VpgPriority: Medium
- JournalHistoryInHours: 24
- RpoInSeconds: 300
- TestIntervalInMinutes: 262080
- UseWanCompression: True
- ServiceProfile: Null
- Zorg: Null
### Example 2
```powershell
PS C:> New-ZertoVpg -vpgName "MyVpg" -protectedVm "WebServer01", "AppServer01", "DatabaseServer01" -recoverySite "Recovery Site" -recoveryFolder "Recovered VMs" -recoveryCluster "Recovery Cluster Name" -recoveryDatastore "Datastore Name" -testNetwork "Test Bubble Network" -recoveryNetwork "VM Network"
```
Creates a VPG Settings Object for a VPG called "MyVpg" and protecting Virtual Machines "WebServer01", "AppServer01", and "DatabaseServer01" targeting site "Recovery Site." The Virtual machines will be placed on the compute cluster "Recovery Cluster Name" on the datastore named "Datastore Name." When the virtual machines are created at the recovery site, they will be created in the folder "Recovered VMs." Finally, the network to be used during a live event will be "VM Network" and during a test operation will be "VM Network." Other values set will be the defaults, such as:
- VpgPriority: Medium
- JournalHistoryInHours: 24
- RpoInSeconds: 300
- TestIntervalInMinutes: 262080
- UseWanCompression: True
- ServiceProfile: Null
- Zorg: Null
### Example 3
```powershell
PS C:> New-ZertoVpg -vpgName "MyVpg" -protectedVm "WebServer01", "AppServer01", "DatabaseServer01" -recoverySite "Recovery Site" -recoveryFolder "Recovered VMs" -recoveryHost "Recovery Host Name" -recoveryDatastore "Datastore Name" -testNetwork "Test Bubble Network" -recoveryNetwork "VM Network"
```
Creates a VPG Settings Object for a VPG called "MyVpg" and protecting Virtual Machines "WebServer01", "AppServer01", and "DatabaseServer01" targeting site "Recovery Site." The Virtual machines will be placed on the compute host "Recovery Cluster Name" on the datastore named "Datastore Name." When the virtual machines are created at the recovery site, they will be created in the folder "Recovered VMs." Finally, the network to be used during a live event will be "VM Network" and during a test operation will be "VM Network." Other values set will be the defaults, such as:
- VpgPriority: Medium
- JournalHistoryInHours: 24
- RpoInSeconds: 300
- TestIntervalInMinutes: 262080
- UseWanCompression: True
- ServiceProfile: Null
- Zorg: Null
### Example 4
```powershell
PS C:> New-ZertoVpg -vpgName "MyVpg" -protectedVm "WebServer01", "AppServer01", "DatabaseServer01" -recoverySite "Recovery Site" -recoveryFolder "Recovered VMs" -recoveryHost "Recovery Host Name" -recoveryClusterDatastore "Datastore Cluster Name" -testNetwork "Test Bubble Network" -recoveryNetwork "VM Network"
```
Creates a VPG Settings Object for a VPG called "MyVpg" and protecting Virtual Machines "WebServer01", "AppServer01", and "DatabaseServer01" targeting site "Recovery Site." The Virtual machines will be placed on the compute host "Recovery Name" on the datastore named "Datastore Cluster Name." When the virtual machines are created at the recovery site, they will be created in the folder "Recovered VMs." Finally, the network to be used during a live event will be "VM Network" and during a test operation will be "VM Network." Other values set will be the defaults, such as:
- VpgPriority: Medium
- JournalHistoryInHours: 24
- RpoInSeconds: 300
- TestIntervalInMinutes: 262080
- UseWanCompression: True
- ServiceProfile: Null
- Zorg: Null
### Example 5
```powershell
PS C:> New-ZertoVpg -vpgName "MyVpg" -protectedVm "WebServer01", "AppServer01", "DatabaseServer01" -recoverySite "Recovery Site" -recoveryFolder "Recovered VMs" -recoveryResourcePool "Recovery Resource Pool Name" -recoveryDatastore "Datastore Name" -testNetwork "Test Bubble Network" -recoveryNetwork "VM Network"
```
Creates a VPG Settings Object for a VPG called "MyVpg" and protecting Virtual Machines "WebServer01", "AppServer01", and "DatabaseServer01" targeting site "Recovery Site." The Virtual machines will be placed on the resource pool "Recovery Resource Pool Name" on the datastore named "Datastore Name." When the virtual machines are created at the recovery site, they will be created in the folder "Recovered VMs." Finally, the network to be used during a live event will be "VM Network" and during a test operation will be "VM Network." Other values set will be the defaults, such as:
- VpgPriority: Medium
- JournalHistoryInHours: 24
- RpoInSeconds: 300
- TestIntervalInMinutes: 262080
- UseWanCompression: True
- ServiceProfile: Null
- Zorg: Null
### Example 5
```powershell
PS C:> New-ZertoVpg -vpgName "MyVpg" -protectedVm "WebServer01", "AppServer01", "DatabaseServer01" -recoverySite "Recovery Site" -recoveryFolder "Recovered VMs" -recoveryResourcePool "Recovery Resource Pool Name" -recoveryDatastoreCluster "Datastore Cluster Name" -testNetwork "Test Bubble Network" -recoveryNetwork "VM Network"
```
Creates a VPG Settings Object for a VPG called "MyVpg" and protecting Virtual Machines "WebServer01", "AppServer01", and "DatabaseServer01" targeting site "Recovery Site." The Virtual machines will be placed on the resource pool "Recovery Resource Pool Name" on the datastore cluster named "Datastore Cluster Name." When the virtual machines are created at the recovery site, they will be created in the folder "Recovered VMs." Finally, the network to be used during a live event will be "VM Network" and during a test operation will be "VM Network." Other values set will be the defaults, such as:
- VpgPriority: Medium
- JournalHistoryInHours: 24
- RpoInSeconds: 300
- TestIntervalInMinutes: 262080
- UseWanCompression: True
- ServiceProfile: Null
- Zorg: Null
## PARAMETERS
### -datastore
Name of the datastore where the VM(s), Volume(s), and Journal(s) will reside.
```yaml
Type: String
Parameter Sets: recoveryClusterDatastore, recoveryHostDatastore, recoveryResourcePoolDatastore
Aliases:
Required: True
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -datastoreCluster
Name of the datastore cluster where the VM(s), Volume(s), and Journal(s) will reside.
```yaml
Type: String
Parameter Sets: recoveryClusterDatastoreCluster, recoveryHostDatastoreCluster, recoveryResourcePoolDatastoreCluster
Aliases:
Required: True
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -journalHistoryInHours
Journal History in Hours.
Min 1 hour, Max 720 Hours (30 days)
```yaml
Type: Int32
Parameter Sets: (All)
Aliases:
Required: False
Position: Named
Default value: 24
Accept pipeline input: False
Accept wildcard characters: False
```
### -protectedVm
Name(s) of the VM(s) to be protected.
```yaml
Type: String[]
Parameter Sets: (All)
Aliases:
Required: True
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -recoveryCluster
Name of the cluster where the VM(s) will be recovered.
```yaml
Type: String
Parameter Sets: recoveryClusterDatastoreCluster, recoveryClusterDatastore
Aliases:
Required: True
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -recoveryFolder
Name of folder at recovery location where the recovered virtual machine(s) will be created.
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: True
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -recoveryHost
Name of the host where the VM(s) will be recovered.
```yaml
Type: String
Parameter Sets: recoveryHostDatastoreCluster, recoveryHostDatastore
Aliases:
Required: True
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -recoveryNetwork
Name of the network to use during a Failover Live \ Move VPG operation.
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: True
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -recoveryResourcePool
Name of the resource pool where the VM(s) will be recovered.
```yaml
Type: String
Parameter Sets: recoveryResourcePoolDatastoreCluster, recoveryResourcePoolDatastore
Aliases:
Required: True
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -recoverySite
Name of the site where the VM(s) will be recoveryed
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: True
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -rpoInSeconds
RPO alert
```yaml
Type: Int32
Parameter Sets: (All)
Aliases:
Required: False
Position: Named
Default value: 300
Accept pipeline input: False
Accept wildcard characters: False
```
### -serviceProfile
Service profile name to use.
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -testIntervalInMinutes
Minimum test interval for this VPG.
Minimum test interval for this VPG. Valid values are 0: Off, 43200: 1 Month, 131040: 3 Months, 262080: 6 Months, 294560: 9 Months, 252600: 12 Months
```yaml
Type: Int32
Parameter Sets: (All)
Aliases:
Accepted values: 0, 43200, 131040, 262080, 294560, 252600
Required: False
Position: Named
Default value: 262080
Accept pipeline input: False
Accept wildcard characters: False
```
### -testNetwork
Name of the network to use during a Failover Test operation
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: True
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -useWanCompression
Turn on or off WAN and Journal Compression.
Default is turned on.
```yaml
Type: Boolean
Parameter Sets: (All)
Aliases:
Required: False
Position: Named
Default value: True
Accept pipeline input: False
Accept wildcard characters: False
```
### -vpgName
Name of the VPG
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: True
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -vpgPriority
VPG Priority.
High, Medium, or Low.
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Accepted values: High, Medium, Low
Required: False
Position: Named
Default value: Medium
Accept pipeline input: False
Accept wildcard characters: False
```
### -zorg
Name of ZORG to use.
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### CommonParameters
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216).
## INPUTS
### None
## OUTPUTS
### System.String
Vpg Settings Identifier
## NOTES
## RELATED LINKS
[Zerto REST API VPG Settings End Point Documentation](http://s3.amazonaws.com/zertodownload_docs/Latest/Zerto%20Virtual%20Replication%20Zerto%20Virtual%20Manager%20%28ZVM%29%20-%20vSphere%20Online%20Help/RestfulAPIs/StatusAPIs.5.108.html#)
+10 -10
View File
@@ -13,7 +13,8 @@ Deletes a Zerto Virtual Protection Group
## SYNTAX
```
Remove-ZertoVpg [-vpgName] <String> [-keepRecoveryVolumes] [-force] [-WhatIf] [-Confirm] [<CommonParameters>]
Remove-ZertoVpg [-vpgName] <String> [-keepRecoveryVolumes <Boolean>] [-force <Boolean>] [-WhatIf] [-Confirm]
[<CommonParameters>]
```
## DESCRIPTION
@@ -38,32 +39,31 @@ Deletes Zerto Virtual Protection Group named "MyVpg". Recovery volumes at the re
## PARAMETERS
### -force
Use this switch to force delete the VPG.
Use this parameter to force delete the VPG, by setting this parameter equal to true.
```yaml
Type: SwitchParameter
Type: Boolean
Parameter Sets: (All)
Aliases:
Required: False
Position: Named
Default value: None
Default value: False
Accept pipeline input: False
Accept wildcard characters: False
```
### -keepRecoveryVolumes
Use this switch to keep the recovery volumes at the target site.
If the virtual machines in the deleted VPG are reprotected, these volumes can be used as preseeded volumes to speed up the initial synchronization of the new VPG.
Use this parameter to keep the recovery volumes at the target site, by setting it to True. If the virtual machines in the deleted VPG are re-protected, these volumes can be used as pre-seed volumes to speed up the initial synchronization of the new VPG. Default is to remove Recovery Volumes
```yaml
Type: SwitchParameter
Type: Boolean
Parameter Sets: (All)
Aliases:
Required: False
Position: Named
Default value: None
Default value: False
Accept pipeline input: False
Accept wildcard characters: False
```
@@ -115,8 +115,7 @@ Accept wildcard characters: False
```
### CommonParameters
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable.
For more information, see about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216).
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216).
## INPUTS
@@ -127,4 +126,5 @@ For more information, see about_CommonParameters (http://go.microsoft.com/fwlink
## NOTES
## RELATED LINKS
[Zerto REST API VPG End Point Documentation](http://s3.amazonaws.com/zertodownload_docs/Latest/Zerto%20Virtual%20Replication%20Zerto%20Virtual%20Manager%20%28ZVM%29%20-%20vSphere%20Online%20Help/RestfulAPIs/StatusAPIs.5.100.html#)
+91
View File
@@ -0,0 +1,91 @@
---
external help file: ZertoApiWrapper-help.xml
Module Name: ZertoApiWrapper
online version: https://github.com/wcarroll/ZertoApiWrapper/blob/master/docs/Save-ZertoVpgSettings.md
schema: 2.0.0
---
# Save-ZertoVpgSettings
## SYNOPSIS
Commits the updated Vpg Settings with the configured Vpg Settings Identifier
## SYNTAX
```
Save-ZertoVpgSettings [-vpgSettingsIdentifier] <String> [-WhatIf] [-Confirm] [<CommonParameters>]
```
## DESCRIPTION
Commits the updated Vpg Settings with the configured Vpg Settings Identifier
## EXAMPLES
### Example 1
```powershell
PS C:> Save-ZertoVpgSettings -vpgSettingsIdentifier "MyVpgSettingsIdentifier"
```
Commits vpg settings with vpg settings identifier "MyVpgSettingsIdentifier"
## PARAMETERS
### -vpgSettingsIdentifier
VpgSettings Identifier to save
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: True
Position: 0
Default value: None
Accept pipeline input: True (ByPropertyName, ByValue)
Accept wildcard characters: False
```
### -Confirm
Prompts you for confirmation before running the cmdlet.
```yaml
Type: SwitchParameter
Parameter Sets: (All)
Aliases: cf
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -WhatIf
Shows what would happen if the cmdlet runs.
The cmdlet is not run.
```yaml
Type: SwitchParameter
Parameter Sets: (All)
Aliases: wi
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### CommonParameters
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216).
## INPUTS
### System.String
## OUTPUTS
### System.Object
## NOTES
## RELATED LINKS
[Zerto REST API VPG Settings End Point Documentation](http://s3.amazonaws.com/zertodownload_docs/Latest/Zerto%20Virtual%20Replication%20Zerto%20Virtual%20Manager%20%28ZVM%29%20-%20vSphere%20Online%20Help/RestfulAPIs/StatusAPIs.5.108.html#)