13 Commits

Author SHA1 Message Date
Wes Carroll e16d4d8105 Merge branch 'master' into AzureVpg_v2 2020-09-08 09:06:39 -04:00
Wes Carroll 143d5f801e Start Param Params 2020-09-08 08:06:18 -04:00
Wes Carroll f46c620302 Create Add-ZertoAzureVpgVm Function 2020-08-28 13:59:07 -04:00
Wes Carroll 3c60b0c0f3 Create Help File for New-ZertoAzureVpg 2020-08-28 13:59:06 -04:00
Wes Carroll d832812c13 Spelling Typo 2020-08-28 13:59:06 -04:00
Wes Carroll 80e0db3883 Create Add-ZertoAzureVpg function 2020-08-28 13:59:06 -04:00
Wes Carroll 809f9af60d Create Get-ZertoAzureResource function tests 2020-08-28 13:59:06 -04:00
Wes Carroll 5a9cba00d5 Get-ZertoAzureResource Help Creation 2020-08-28 13:59:06 -04:00
Wes Carroll 549238a22d Update Changelog with changes 2020-08-28 13:59:06 -04:00
Wes Carroll 253c9ba1b9 Add siteidentifier valid site validation 2020-08-28 13:59:06 -04:00
Wes Carroll 794f87dbf8 Add helpmessages for each switch 2020-08-28 13:59:06 -04:00
Wes Carroll ca45adcd5d Azure VPG Helper Functions Consolidated 2020-08-28 13:59:06 -04:00
Wes Carroll 5a3f2d8eec Azure VPG Helper Functions Creation 2020-08-28 13:59:06 -04:00
17 changed files with 1127 additions and 58 deletions
+3 -25
View File
@@ -5,35 +5,13 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project is transitioning to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project is transitioning to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.5.4] ## Unreleased
### Zerto Virtual Manager ### Zerto Virtual Manager
#### Updated #### New
* Updated `Install-ZertoVra` function [help documentation](https://github.com/ZertoPublic/ZertoApiWrapper/blob/master/docs/Install-ZertoVra.md) to allow for configuring the number of vCPUs during deployment. Special thanks to @mitchellen for the fix.
## [1.5.3]
### Zerto Virtual Manager
#### Fixed
* Fixed an [issue](https://github.com/ZertoPublic/ZertoApiWrapper/issues/112) where `New-ZertoVpg` would fail when specifying the local site as the target site.
* Updated the method where a Site Identifer is obtained during the `New-ZertoVpg` execution that would occasionally fail on some versions of PowerShell.
#### Updated
* Updated `New-ZertoVpg` function [help documentation](https://github.com/ZertoPublic/ZertoApiWrapper/blob/master/docs/New-ZertoVpg.md) to more clearly specify the return value and the requirement to pass it into the `Save-ZertoVpgSetting` function to commit the VPG.
## [1.5.2]
### Zerto Virtual Manager
#### Fixed
* Fixed an issue when attempting to export more than 100 VPGs with the `Export-ZertoVpg` function that would cause an error.
* Added `Get-ZertoAzureResource` function to the module. This function is designed to retrieve information about resources in Azure that can be utilized when creating VPGs targeting the specified Azure site. Please read the [help file](https://github.com/ZertoPublic/ZertoApiWrapper/blob/master/docs/Get-ZertoAzureResource.md) for more information and examples.
## [1.5.1] ## [1.5.1]
### Zerto Virtual Manager ### Zerto Virtual Manager
-1
View File
@@ -36,7 +36,6 @@ All recent updates can now be tracked via the [Change Log](https://github.com/Ze
## TODO ## TODO
* Support ZVM appliance (different connection flow)
* JFLR Functionality * JFLR Functionality
* Create VPG (Per-VM modification and Backup Settings) * Create VPG (Per-VM modification and Backup Settings)
* Edit VPG * Edit VPG
-4
View File
@@ -46,10 +46,6 @@ Describe $global:function -Tag 'Unit', 'Source', 'Built' {
return "1024d377-afb8-4880-82f0-96eeff413ffd" return "1024d377-afb8-4880-82f0-96eeff413ffd"
} }
Mock -ModuleName ZertoApiWrapper -CommandName Remove-ZertoVpgSettingsIdentifier {
return $null
}
Mock -ModuleName ZertoApiWrapper -CommandName Get-ZertoVpgSetting { Mock -ModuleName ZertoApiWrapper -CommandName Get-ZertoVpgSetting {
$returnObj = @{ $returnObj = @{
Backup = $null Backup = $null
@@ -0,0 +1,56 @@
#Requires -Modules Pester
$global:here = (Split-Path -Parent $PSCommandPath)
$global:function = ((Split-Path -Leaf $PSCommandPath).Split('.'))[0]
Describe $global:function -Tag 'Unit', 'Source', 'Built' {
BeforeAll {
$script:ScriptBlock = (Get-Command $global:function).ScriptBlock
}
Context "$global:function::Parameter Unit Tests" {
It "$global:function should have exactly 17 parameters defined" {
(Get-Command $global:function).Parameters.Count | Should -Be 17
}
$ParameterTestCases = @(
@{ParameterName = 'siteName'; Type = 'String'; Mandatory = $true; Validation = 'NotNullOrEmpty' }
@{ParameterName = 'SiteIdentifier'; Type = 'String'; Mandatory = $true; Validation = 'NotNullOrEmpty' }
@{ParameterName = 'SecurityGroup'; Type = 'Switch'; Mandatory = $true; Validation = 'None' }
@{ParameterName = 'Subnet'; Type = 'Switch'; Mandatory = $true; Validation = 'None' }
@{ParameterName = 'Network'; Type = 'Switch'; Mandatory = $true; Validation = 'None' }
@{ParameterName = 'VmInstanceType'; Type = 'Switch'; Mandatory = $true; Validation = 'None' }
)
It "<ParameterName> parameter is of <Type> type" -TestCases $ParameterTestCases {
param($ParameterName, $Type, $Mandatory, $Validation)
Get-Command $global:function | Should -HaveParameter $ParameterName -Mandatory:$Mandatory -Type $Type
}
It "<ParameterName> parameter has correct validation setting" -TestCases $ParameterTestCases {
param($ParameterName, $Validation)
Switch ($Validation) {
'None' {
$attrs = (Get-Command $global:function).Parameters[$ParameterName].Attributes
$attrs.Count | Should -Be 3
}
'NotNullOrEmpty' {
$attrs = (Get-Command $global:function).Parameters[$ParameterName].Attributes
$attrs.Where{ $_ -is [ValidateNotNullOrEmpty] }.Count | Should -Be 1
}
default {
$true | Should -Be $false -Because "No Validation Selected. Review test cases"
}
}
}
}
Context "$global:function::Functional Unit Tests" {
}
}
Remove-Variable -Name here -Scope Global
Remove-Variable -Name function -Scope Global
+1 -1
View File
@@ -6,7 +6,7 @@ Describe $global:function -Tag 'Unit', 'Source', 'Built' {
Context "$global:function::Parameter Unit Tests" { Context "$global:function::Parameter Unit Tests" {
It "$global:function should have exactly 24 parameters defined" { It "$global:function should have exactly 24 parameters defined" {
(Get-Command $global:function).Parameters.Count | Should -Be 25 (Get-Command $global:function).Parameters.Count | Should -Be 24
} }
$ParameterTestCases = @( $ParameterTestCases = @(
@@ -0,0 +1,170 @@
<# .ExternalHelp ./en-us/ZertoApiWrapper-help.xml #>
function Add-ZertoAzureVpgVm {
[Cmdletbinding()]
param(
[Parameter(
Mandatory,
HelpMessage = "VPG Settings Identifier of the target VPG.",
ValueFromPipeline,
ValueFromPipelineByPropertyName
)]
[ValidateNotNullOrEmpty()]
[Guid]$VpgSettingsIdentifier,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String]$VmName,
[ValidateNotNullOrEmpty()]
[String]$LiveNetworkName,
[ValidateNotNullOrEmpty()]
[String]$LiveSubnetName,
[ValidateNotNullOrEmpty()]
[String]$LiveSecurityGroupName,
[ValidateNotNullOrEmpty()]
[String]$LiveInstanceType,
[ValidateSet("UnmanagedStandard", "ManagedPremiumSSD", "ManagedStandardSSD", "ManagedStandardHDD")]
[String]$LiveDiskType,
[ValidateScript( { $_ -match [IPAddress]$_ })]
[String]$LiveIpAddress,
[ValidateNotNullOrEmpty()]
[String]$TestNetworkName,
[ValidateNotNullOrEmpty()]
[String]$TestSubnetName,
[ValidateNotNullOrEmpty()]
[String]$TestSecurityGroupName,
[ValidateNotNullOrEmpty()]
[String]$TestInstanceType,
[ValidateSet("UnmanagedStandard", "ManagedPremiumSSD", "ManagedStandardSSD", "ManagedStandardHDD")]
[String]$TestDiskType,
[ValidateScript( { $_ -match [IPAddress]$_ })]
[String]$TestIpAddress,
[ValidateNotNullOrEmpty()]
[String[]]$TempDrive
)
begin {
}
process {
# Get Target Site Identifier from the settings for resource lookups
$TargetSiteIdentifier = Get-ZertoVpgSetting -vpgSettingsIdentifier $VpgSettingsIdentifier -basic | Select-Object -ExpandProperty RecoverySiteIdentifier
# Add VM to VPG. Setting to Null as this function returns the VpgSettingsIdentifier
$null = Add-ZertoVpgVm -vpgSettingsIdentifier $VpgSettingsIdentifier -vm $VmName
# Getting the VmIdentifier
$VmIdentifier = Get-ZertoVpgSetting -vpgSettingsIdentifier $VpgSettingsIdentifier -vms | Where-Object { $_.VmName -match $VmName } | Select-Object -ExpandProperty VmIdentifier
# Setting the URI fragment for use later
$VmSettingsUri = "vpgSettings/{0}/vms/{1}" -f $VpgSettingsIdentifier, $VmIdentifier
# Getting all default settings for the specified VM to update per passed parameters
$VmSettings = Get-ZertoVpgSetting -vpgSettingsIdentifier $VpgSettingsIdentifier -vmIdentifier $VmIdentifier
# Create Maps for quick lookups and validations
$NetworksMap = GetMap -InputObject (Get-ZertoAzureResource -SiteIdentifier $TargetSiteIdentifier -Network) -Key "VirtualNetworkName" -Value "VirtualNetworkIdentifier"
$SubnetsMap = GetMap -InputObject (Get-ZertoAzureResource -SiteIdentifier $TargetSiteIdentifier -Subnet) -Key "SubnetName" -Value "SubnetIdentifier"
$SecurityGroupsMap = GetMap -InputObject (Get-ZertoAzureResource -SiteIdentifier $TargetSiteIdentifier -SecurityGroup) -Key "SecurityGroupName" -Value "SecurityGroupIdentifier"
$Instances = Get-ZertoAzureResource -SiteIdentifier $TargetSiteIdentifier -VmInstanceType
# Iterate through the bound parameters and set attributes accordingly
Switch ($PSBoundParameters.Keys) {
"LiveNetworkName" {
if ($null -eq $NetworksMap[$LiveNetworkName]) {
Write-Error "Unable to find network with name $LiveNetworkName. Please check the name and try again." -ErrorAction Stop
} else {
$VmSettings.Recovery.PublicCloud.Failover.VirtualNetworkIdentifier = $NetworksMap[$LiveNetworkName]
}
}
"LiveSubnetName" {
if ($null -eq $SubnetsMap[$LiveSubnetName]) {
Write-Error "Unable to find subnet with name $LiveSubnetName. Please check the name and try again." -ErrorAction Stop
} else {
$VmSettings.Nics[0].Failover.PublicCloud.SubnetIdentifier = $SubnetsMap[$LiveSubnetName]
}
}
"LiveSecurityGroupName" {
if ($null -eq $null -eq $SecurityGroupsMap[$LiveSecurityGroupName]) {
Write-Error "Unable to find security group with name $LiveSecurityGroupName. Please check the name and try again." -ErrorAction Stop
} else {
$VmSettings.Nics[0].Failover.PublicCloud.SecurityGroupIdentifier = $SecurityGroupsMap[$LiveSecurityGroupName]
}
}
"LiveInstanceType" {
if ($LiveInstanceType -notin $Instances.VmInstanceType) {
Write-Error "Unable to find a supported VM Instance Type with name $LiveInstanceType. Please check the name and try again." -ErrorAction Stop
} else {
$LiveInstanceType = $Instances.Where( { $_.VmInstanceType -match $LiveInstanceType }) | Select-Object -ExpandProperty VmInstanceType
$VmSettings.Recovery.PublicCloud.Failover.VmInstanceType = $LiveInstanceType
}
}
"TestNetworkName" {
if ($null -eq $NetworksMap[$TestNetworkName]) {
Write-Error "Unable to find network with name $TestNetworkName. Please check the name and try again." -ErrorAction Stop
} else {
$VmSettings.Recovery.PublicCloud.FailoverTest.VirtualNetworkIdentifier = $NetworksMap[$TestNetworkName]
}
}
"TestSubnetName" {
if ($null -eq $SubnetsMap[$TestSubnetName]) {
Write-Error "Unable to find subnet with name $TestSubnetName. Please check the name and try again." -ErrorAction Stop
} else {
$VmSettings.Nics[0].FailoverTest.PublicCloud.SubnetIdentifier = $SubnetsMap[$TestSubnetName]
}
}
"TestSecurityGroupName" {
if ($null -eq $SecurityGroupsMap) {
Write-Error "Unable to find security group with name $TestSecurityGroupName. Please check the name and try again." -ErrorAction Stop
} else {
$VmSettings.Nics[0].FailoverTest.PublicCloud.SecurityGroupIdentifier = $SecurityGroupsMap[$TestSecurityGroupName]
}
}
"TestInstanceType" {
if ($TestInstanceType -notin $Instances.VmInstanceType) {
Write-Error "Unable to find a supported VM Instance Type with name $TestInstanceType. Please check the name and try again." -ErrorAction Stop
} else {
$TestInstanceType = $Instances.Where( { $_.VmInstanceType -match $TestInstanceType }) | Select-Object -ExpandProperty VmInstanceType
$VmSettings.Recovery.PublicCloud.FailoverTest.VmInstanceType = $TestInstanceType
}
}
"LiveDiskType" {
$VmSettings.Recovery.PublicCloud.Failover.Azure.RecoveryDiskType = $LiveDiskType
}
"TestDiskType" {
$VmSettings.Recovery.PublicCloud.FailoverTest.Azure.RecoveryDiskType = $TestDiskType
}
"LiveIpAddress" {
$VmSettings.Nics[0].Failover.PublicCloud.PrivateIP = $LiveIpAddress
}
"TestIpAddress" {
$VmSettings.Nics[0].FailoverTest.PublicCloud.PrivateIP = $TestIpAddress
}
} # End Switch Statement
# Update the VPG VM Settings Object with the updated attributes
$null = Invoke-ZertoRestRequest -uri $VmSettingsUri -method PUT -body ($VmSettings | ConvertTo-Json -Depth 10)
# If any Temp Drives are specified, loop through them and set them as such
if ($PSBoundParameters.Keys -contains "TempDrive") {
foreach ($drive in $TempDrive) {
$driveUri = "{0}/volumes/{1}" -f $VmSettingsUri, $drive
$driveSettings = Invoke-ZertoRestRequest -uri $driveUri
$driveSettings.IsSwap = $True
$null = Invoke-ZertoRestRequest -uri $driveUri -method PUT -body ($driveSettings | ConvertTo-Json -Depth 10)
}
}
}
end {
}
}
@@ -38,7 +38,6 @@ function Export-ZertoVpg {
$vpgSettings = Get-ZertoVpgSetting -vpgSettingsIdentifier $vpgSettingsIdentifier $vpgSettings = Get-ZertoVpgSetting -vpgSettingsIdentifier $vpgSettingsIdentifier
$filePath = "{0}\{1}.json" -f $outputPath, $name $filePath = "{0}\{1}.json" -f $outputPath, $name
$vpgSettings | Convertto-Json -depth 10 | Out-File -FilePath $filePath $vpgSettings | Convertto-Json -depth 10 | Out-File -FilePath $filePath
$null = Remove-ZertoVpgSettingsIdentifier -vpgSettingsIdentifier $vpgSettingsIdentifier
} }
} }
@@ -0,0 +1,137 @@
<# .ExternalHelp ./en-us/ZertoApiWrapper-help.xml #>
function Get-ZertoAzureResource {
[CmdletBinding(DefaultParameterSetName = "SiteNameVmInstanceType")]
param (
[Parameter(
Mandatory,
HelpMessage = "Name the Azure Site you wish to get the information.",
ParameterSetName = "SiteNameSecurityGroup"
)]
[Parameter(
Mandatory,
HelpMessage = "Name the Azure Site you wish to get the information.",
ParameterSetName = "SiteNameSubnet"
)]
[Parameter(
Mandatory,
HelpMessage = "Name the Azure Site you wish to get the information.",
ParameterSetName = "SiteNameNetwork"
)]
[Parameter(
Mandatory,
HelpMessage = "Name the Azure Site you wish to get the information.",
ParameterSetName = "SiteNameVmInstanceType"
)]
[ValidateNotNullOrEmpty()]
[String]$SiteName,
[Parameter(
Mandatory,
HelpMessage = "Site Identifier of the Azure Site you wish to get the information.",
ParameterSetName = "SiteIdentifierSecurityGroup"
)]
[Parameter(
Mandatory,
HelpMessage = "Site Identifier of the Azure Site you wish to get the information.",
ParameterSetName = "SiteIdentifierSubnet"
)]
[Parameter(
Mandatory,
HelpMessage = "Site Identifier of the Azure Site you wish to get the information.",
ParameterSetName = "SiteIdentifierNetwork"
)]
[Parameter(
Mandatory,
HelpMessage = "Site Identifier of the Azure Site you wish to get the information.",
ParameterSetName = "SiteIdentifierVmInstanceType"
)]
[ValidateNotNullOrEmpty()]
[String]$SiteIdentifier,
[Parameter(
Mandatory,
ParameterSetName = "SiteIdentifierSecurityGroup",
HelpMessage = "Use this switch to get information about the supported Security Groups"
)]
[Parameter(
Mandatory,
ParameterSetName = "SiteNameSecurityGroup",
HelpMessage = "Use this switch to get information about the supported Security Groups"
)]
[Switch]$SecurityGroup,
[Parameter(
Mandatory,
ParameterSetName = "SiteIdentifierSubnet",
HelpMessage = "Use this switch to get information about the supported Subnets"
)]
[Parameter(
Mandatory,
ParameterSetName = "SiteNameSubnet",
HelpMessage = "Use this switch to get information about the supported Subnets"
)]
[Switch]$Subnet,
[Parameter(
Mandatory,
ParameterSetName = "SiteIdentifierNetwork",
HelpMessage = "Use this switch to get information about the supported Networks (VNets)."
)]
[Parameter(
Mandatory,
ParameterSetName = "SiteNameNetwork",
HelpMessage = "Use this switch to get information about the supported Networks (VNets)."
)]
[Switch]$Network,
[Parameter(
Mandatory,
ParameterSetName = "SiteIdentifierVmInstanceType",
HelpMessage = "Use this switch to get information about the supported Vm Instance Types."
)]
[Parameter(
Mandatory,
ParameterSetName = "SiteNameVmInstanceType",
HelpMessage = "Use this switch to get information about the supported Vm Instance Types."
)]
[Switch]$VmInstanceType
)
begin {
}
process {
if ($PSCmdlet.ParameterSetName -match "SiteName") {
$SiteInfo = Get-ZertoPeerSite | Where-Object { $_.PeerSiteName -match $SiteName }
if ($null -eq $SiteInfo) {
Write-Error "Unable to find a peer site with the name $SiteName. Please check your parameters and try again." -ErrorAction Stop
}
$SiteIdentifier = $SiteInfo | Select-Object -ExpandProperty SiteIdentifier
} else {
$SiteInfo = Get-ZertoPeerSite -siteIdentifier $SiteIdentifier
if ($null -eq $SiteInfo) {
Write-Error "Unable to find a peer site with identifier of $SiteIdentifier. Please check your parameters and try again." -ErrorAction Stop
}
}
if ($SiteInfo.SiteType -notmatch "Azure") {
Write-Error "Specified site is not an Azure site. Please specify an Azure site and try again." -ErrorAction Stop
}
$baseUri = "virtualizationsites/{0}/publicCloud" -f $SiteIdentifier
switch -wildcard ($PSCmdlet.ParameterSetName) {
"*VmInstanceType" {
$uri = "{0}/VmInstanceType" -f $baseUri
}
"*Subnet" {
$uri = "{0}/subnets" -f $baseUri
}
"*Network" {
$uri = "{0}/virtualNetworks" -f $baseUri
}
"*SecurityGroup" {
$uri = "{0}/securityGroups" -f $baseUri
}
}
Invoke-ZertoRestRequest -uri $uri
}
end {
}
}
@@ -25,11 +25,6 @@ function Install-ZertoVra {
)] )]
[ValidateRange(1, 16)] [ValidateRange(1, 16)]
[int]$memoryInGB = 3, [int]$memoryInGB = 3,
[Parameter(
HelpMessage = "Initial number of CPUs to assign to the VRA. Default is 1, Minimum is 1, Maximum is 4"
)]
[ValidateRange(1, 4)]
[int]$NumOfCpus = 1,
[Parameter( [Parameter(
HelpMessage = "Bandwidth group to assign to the VRA. If unspecified will assign to the 'default_group'" HelpMessage = "Bandwidth group to assign to the VRA. If unspecified will assign to the 'default_group'"
)] )]
@@ -141,7 +136,6 @@ function Install-ZertoVra {
} }
$vraBasic['HostIdentifier'] = $hostIdentifier.toString() $vraBasic['HostIdentifier'] = $hostIdentifier.toString()
$vraBasic['MemoryInGB'] = $memoryInGB $vraBasic['MemoryInGB'] = $memoryInGB
$vraBasic['NumOfCpus'] = $NumOfCpus
$vraBasic['NetworkIdentifier'] = $networkIdentifier.toString() $vraBasic['NetworkIdentifier'] = $networkIdentifier.toString()
$vraBasic['UsePublicKeyInsteadOfCredentials'] = $true $vraBasic['UsePublicKeyInsteadOfCredentials'] = $true
$vraBasicNetwork = [ordered]@{ } $vraBasicNetwork = [ordered]@{ }
@@ -0,0 +1,201 @@
<# .ExternalHelp ./en-us/ZertoApiWrapper-help.xml #>
function New-ZertoAzureVpg {
[CmdletBinding()]
# Ignoring Should Process PSSA rule. Change is in memory and not committed untill the Save-ZertoVpgSetting function is called.
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseShouldProcessForStateChangingFunctions", "")]
param(
[Parameter(
Mandatory,
HelpMessage = "Desired name of the VPG to be created."
)]
[ValidateNotNullOrEmpty()]
[string]$Name,
[Parameter(
HelpMessage = "Replication priority of the VPG to be created. Default value is 'Medium'"
)]
[ValidateSet("High", "Medium", "Low")]
[string]$Priority = "Medium",
[Parameter(
HelpMessage = "Desired journal history in hours of the VPG to be created. Min 1 hour, Max 720 hours (30 days). Default is 24 hours."
)]
[ValidateRange(1, 720)]
[Int]$JournalHistoryInHours = 24,
[Parameter(
HelpMessage = "Desired RPO alert value in seconds. Min 60 seconds, Max 86400 seconds (24 hours). Default is 300 seconds (5 minutes)."
)]
[ValidateRange(60, 86400)]
[Int]$RpoInSeconds = 300,
[Parameter(
HelpMessage = "Desired test interval in minutes. Please review documentation for values. Default is 262080 minutes (6 months)."
)]
[ValidateSet(0, 43200, 131040, 262080, 394560, 525600)]
[Int]$TestIntervalInMinutes = 262080,
[Parameter(
HelpMessage = "Turn on or off WAN compression. Recommended this setting is not turned off. Default is to leave WAN compression turned on."
)]
[Bool]$UseWanCompression = $True,
[Parameter(
Mandatory,
HelpMessage = "Name of the ZCA site for the VPG to target."
)]
[ValidateNotNullOrEmpty()]
[String]$TargetSiteName,
[Parameter(
Mandatory,
HelpMessage = "Name of the default Network (VNet) to use during a live operation."
)]
[ValidateNotNullOrEmpty()]
[String]$LiveNetworkName,
[Parameter(
Mandatory,
HelpMessage = "Name of the default subnet to use during a live operation."
)]
[ValidateNotNullOrEmpty()]
[String]$LiveSubnetName,
[Parameter(
Mandatory,
HelpMessage = "Name of the default Security Group to use during a live operation."
)]
[ValidateNotNullOrEmpty()]
[String]$LiveSecurityGroupName,
[Parameter(
Mandatory,
HelpMessage = "Name of the default VM Instance Type to use during a live operation."
)]
[ValidateNotNullOrEmpty()]
[String]$LiveInstanceType,
[Parameter(
HelpMessage = "Type of disk to select as the default for the VPG during a live operation. Default is 'ManagedPremiumSSD'"
)]
[ValidateSet("UnmanagedStandard", "ManagedPremiumSSD", "ManagedStandardSSD", "ManagedStandardHDD")]
[String]$LiveDiskType = "ManagedPremiumSSD",
[Parameter(
Mandatory,
HelpMessage = "Name of the default Network (VNet) to use during a test operation."
)]
[ValidateNotNullOrEmpty()]
[String]$TestNetworkName,
[Parameter(
Mandatory,
HelpMessage = "Name of the default subnet to use during a test operation."
)]
[ValidateNotNullOrEmpty()]
[String]$TestSubnetName,
[Parameter(
Mandatory,
HelpMessage = "Name of the default Security Group to use during a test operation."
)]
[ValidateNotNullOrEmpty()]
[String]$TestSecurityGroupName,
[Parameter(
Mandatory,
HelpMessage = "Name of the default VM Instance Type to use during a test operation."
)]
[ValidateNotNullOrEmpty()]
[String]$TestInstanceType,
[Parameter(
HelpMessage = "Type of disk to select as the default for the VPG during a live operation. Default is 'ManagedPremiumSSD'"
)]
[ValidateSet("UnmanagedStandard", "ManagedPremiumSSD", "ManagedStandardSSD", "ManagedStandardHDD")]
[String]$TestDiskType = "ManagedPremiumSSD"
)
begin {
# Grab local site identifier and target site information and identifier
$LocalSiteIdentifier = Get-ZertoLocalSite | Select-Object -ExpandProperty SiteIdentifier
$TargetSiteInfo = Get-ZertoPeerSite | Where-Object { $_.PeerSiteName -match $TargetSiteName }
$TargetSiteIdentifier = $TargetSiteInfo | Select-Object -ExpandProperty SteIdentifier
# Validate site identifier and site type.
if ($null -eq $TargetSiteIdentifier) {
Write-Error "Unable to find target site with name $TargetSiteName. Please check the name and try again" -ErrorAction Stop
} elseif ($TargetSiteInfo.SiteType -notmatch "Azure") {
Write-Error "Specified site is not an Azure site. Please specify an Azure site and try again." -ErrorAction Stop
}
# Build Maps for quick lookups and validation
$NetworksMap = GetMap -InputObject (Get-ZertoAzureResource -SiteIdentifier $TargetSiteIdentifier -Network) -Key "VirtualNetworkName" -Value "VirtualNetworkIdentifier"
$SubnetsMap = GetMap -InputObject (Get-ZertoAzureResource -SiteIdentifier $TargetSiteIdentifier -Subnet) -Key "SubnetName" -Value "SubnetIdentifier"
$SecurityGroupsMap = GetMap -InputObject (Get-ZertoAzureResource -SiteIdentifier $TargetSiteIdentifier -SecurityGroup) -Key "SecurityGroupName" -Value "SecurityGroupIdentifier"
$InstancesMap = GetMap -InputObject (Get-ZertoAzureResource -SiteIdentifier $TargetSiteIdentifier -VmInstanceType) -Key "VmInstanceType" -Value "IsPremiumSupported"
# Validate instance types and ensure case insensitivity
$TestInstanceType = $Instances.Where( { $_.VmInstanceType -match $TestInstanceType }) | Select-Object -ExpandProperty VmInstanceType
$LiveInstanceType = $Instances.Where( { $_.VmInstanceType -match $LiveInstanceType }) | Select-Object -ExpandProperty VmInstanceType
# Validate parameters are found at target site and Instance and Disk Types are valid
if ($null -eq $NetworksMap[$LiveNetworkName]) {
Write-Error "Unable to find network with name $LiveNetworkName. Please check the name and try again." -ErrorAction Stop
} elseif ($null -eq $SubnetsMap[$LiveSubnetName]) {
Write-Error "Unable to find subnet with name $LiveSubnetName. Please check the name and try again." -ErrorAction Stop
} elseif ($null -eq $SecurityGroupsMap[$LiveSecurityGroupName]) {
Write-Error "Unable to find security group with name $LiveSecurityGroupName. Please check the name and try again." -ErrorAction Stop
} elseif ($LiveInstanceType -notin $Instances.VmInstanceType) {
Write-Error "Unable to find a supported VM Instance Type with name $LiveInstanceType. Please check the name and try again." -ErrorAction Stop
} elseif ($null -eq $NetworksMap[$TestNetworkName]) {
Write-Error "Unable to find network with name $TestNetworkName. Please check the name and try again." -ErrorAction Stop
} elseif ($null -eq $SubnetsMap[$TestSubnetName]) {
Write-Error "Unable to find subnet with name $TestSubnetName. Please check the name and try again." -ErrorAction Stop
} elseif ($null -eq $SecurityGroupsMap[$TestSecurityGroupName]) {
Write-Error "Unable to find security group with name $TestSecurityGroupName. Please check the name and try again." -ErrorAction Stop
} elseif ($TestInstanceType -notin $Instances.VmInstanceType) {
Write-Error "Unable to find a supported VM Instance Type with name $TestInstanceType. Please check the name and try again." -ErrorAction Stop
} elseif ($LiveDiskType -eq "ManagedPremiumSSD" -and ( -not $InstancesMap[$LiveInstanceType])) {
Write-Error "$LiveDiskType disk type is not supported on the selected instance $LiveInstanceType. Please check your settings and try again." -ErrorAction Stop
} elseif ($LiveDiskType -ne "ManagedPremiumSSD" -and $InstancesMap[$LiveInstanceType]) {
Write-Error "$TestDiskType disk type is not supported on the selected instance $LiveInstanceType. Please check your settings and try again." -ErrorAction Stop
} elseif ($TestDiskType -eq "ManagedPremiumSSD" -and ( -not $InstancesMap[$TestInstanceType])) {
Write-Error "$TestDiskType disk type is not supported on the selected instance $TestInstanceType. Please check your settings and try again." -ErrorAction Stop
} elseif ($TestDiskType -ne "ManagedPremiumSSD" -and $InstancesMap[$TestInstanceType]) {
Write-Error "$TestDiskType disk type is not supported on the selected instance $TestInstanceType. Please check your settings and try again." -ErrorAction Stop
}
# Create the VPG Settings Identifier and get the skeleton
$VpgSettingsIdentifier = New-ZertoVpgSettingsIdentifier -newVpg
$Settings = Get-ZertoVpgSetting -vpgSettingsIdentifier $VpgSettingsIdentifier
# Set the VPG Settings URI
$VpgSettingsBaseUri = "vpgSettings/{0}" -f $VpgSettingsIdentifier
# Populate the skeleton with the basic information
$Settings.Basic.Name = $Name
$Settings.Basic.Priority = $Priority
$Settings.Basic.JournalHistoryInHours = $JournalHistoryInHours
$Settings.Basic.ProtectedSiteIdentifier = $LocalSiteIdentifier
$Settings.Basic.RecoverySiteIdentifier = $TargetSiteIdentifier
$Settings.Basic.RpoInSeconds = $RpoInSeconds
$Settings.Basic.TestIntervalInMinutes = $TestIntervalInMinutes
$Settings.Basic.UseWanCompression = $UseWanCompression
# Put the basic information to get am Azure Skeleton for the remainder of the default settings
$null = Invoke-ZertoRestRequest -method PUT -uri $VpgSettingsBaseUri -body ($Settings | ConvertTo-Json -Depth 10)
Start-Sleep -Milliseconds 500
# Get an updated Skeleton with Azure specific settings to populate and populate them
$Settings = Get-ZertoVpgSetting -vpgSettingsIdentifier $VpgSettingsIdentifier
$Settings.Networks.Failover.PublicCloud.VirtualNetworkIdentifier = $NetworksMap[$LiveNetworkName]
$Settings.Networks.Failover.PublicCloud.SubnetIdentifier = $SubnetsMap[$LiveSubnetName]
$Settings.Networks.Failover.PublicCloud.SecurityGroupIdentifier = $SecurityGroupsMap[$LiveSecurityGroupName]
$Settings.Networks.FailoverTest.PublicCloud.VirtualNetworkIdentifier = $NetworksMap[$TestNetworkName]
$Settings.Networks.FailoverTest.PublicCloud.SubnetIdentifier = $SubnetsMap[$TestSubnetName]
$Settings.Networks.FailoverTest.PublicCloud.SecurityGroupIdentifier = $SecurityGroupsMap[$TestSecurityGroupName]
$Settings.Recovery.PublicCloud.Failover.VmInstanceType = $LiveInstanceType
$Settings.Recovery.PublicCloud.Failover.Azure.RecoveryDiskType = $LiveDiskType
$Settings.Recovery.PublicCloud.FailoverTest.VmInstanceType = $TestInstanceType
$Settings.Recovery.PublicCloud.FailoverTest.Azure.RecoveryDiskType = $TestDiskType
# Update the VPG Settings on the Server with a PUT request
$null = Invoke-ZertoRestRequest -method PUT -uri $VpgSettingsBaseUri -body ($Settings | ConvertTo-Json -Depth 10)
# Return the VPG Settings Identifier to use when adding VMs to the VPG.
$VpgSettingsIdentifier
}
process {
}
end {
}
}
+1 -1
View File
@@ -165,7 +165,7 @@ function New-ZertoVpg {
begin { begin {
# Create an identifiers table, and start converting names to identifiers. # Create an identifiers table, and start converting names to identifiers.
$identifiersTable = @{ } $identifiersTable = @{ }
$identifiersTable['recoverySiteIdentifier'] = Get-ZertoVirtualizationSite | Where-Object { $_.VirtualizationSiteName -like $recoverySite } | Select-Object -ExpandProperty SiteIdentifier $identifiersTable['recoverySiteIdentifier'] = (Get-ZertoPeerSite).Where({$_.PeerSiteName -like $recoverySite}) | Select-Object -ExpandProperty SiteIdentifier
$peerSiteNetworks = $(Get-ZertoVirtualizationSite -siteIdentifier $identifiersTable['recoverySiteIdentifier'] -networks) $peerSiteNetworks = $(Get-ZertoVirtualizationSite -siteIdentifier $identifiersTable['recoverySiteIdentifier'] -networks)
$identifiersTable['failoverNetworkIdentifier'] = $peerSiteNetworks | Where-Object { $_.VirtualizationNetworkName -like $recoveryNetwork } | Select-Object -ExpandProperty NetworkIdentifier $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['testNetworkIdentifier'] = $peerSiteNetworks | Where-Object { $_.VirtualizationNetworkName -like $testNetwork } | Select-Object -ExpandProperty NetworkIdentifier
+1 -1
View File
@@ -30,7 +30,7 @@ function Remove-ZertoVpgVm {
} }
$VmIdentifiers = foreach ($machine in ($vm | Select-Object -Unique)) { $VmIdentifiers = foreach ($machine in ($vm | Select-Object -Unique)) {
if ($machine -in $protectedVms.VmName) { if ($machine -in $protectedVms.VmName) {
$protectedVms | Where-Object ( { $_.VmName -like $machine }) | Select-Object -ExpandProperty VmIdentifier $protectedVms.Where( { $_.VmName -like $machine }) | Select-Object -ExpandProperty VmIdentifier
} else { } else {
Write-Warning "Virtual Machine: '$machine' is not found in Vpg: '$VpgName'. Check your parameters. Skipping $machine" Write-Warning "Virtual Machine: '$machine' is not found in Vpg: '$VpgName'. Check your parameters. Skipping $machine"
} }
+221
View File
@@ -0,0 +1,221 @@
---
external help file: ZertoApiWrapper-help.xml
Module Name: ZertoApiWrapper
online version: https://github.com/ZertoPublic/ZertoApiWrapper/blob/master/docs/Get-ZertoAzureResource.md
schema: 2.0.0
---
# Get-ZertoAzureResource
## SYNOPSIS
Function used to get data for the Azure site to populate VPGs targeting Azure. This information includes Networks (VNets), Subnets, Security Groups, and VM Instance Types.
## SYNTAX
### SiteNameVmInstanceType (Default)
```
Get-ZertoAzureResource -SiteName <String> [-VmInstanceType] [<CommonParameters>]
```
### SiteNameNetwork
```
Get-ZertoAzureResource -SiteName <String> [-Network] [<CommonParameters>]
```
### SiteNameSubnet
```
Get-ZertoAzureResource -SiteName <String> [-Subnet] [<CommonParameters>]
```
### SiteNameSecurityGroup
```
Get-ZertoAzureResource -SiteName <String> [-SecurityGroup] [<CommonParameters>]
```
### SiteIdentifierVmInstanceType
```
Get-ZertoAzureResource -SiteIdentifier <String> [-VmInstanceType] [<CommonParameters>]
```
### SiteIdentifierNetwork
```
Get-ZertoAzureResource -SiteIdentifier <String> [-Network] [<CommonParameters>]
```
### SiteIdentifierSubnet
```
Get-ZertoAzureResource -SiteIdentifier <String> [-Subnet] [<CommonParameters>]
```
### SiteIdentifierSecurityGroup
```
Get-ZertoAzureResource -SiteIdentifier <String> [-SecurityGroup] [<CommonParameters>]
```
## DESCRIPTION
Function used to get data for the Azure site to populate VPGs targeting Azure. This information includes Networks (VNets), Subnets, Security Groups, and VM Instance Types.
## EXAMPLES
### Example 1
```powershell
PS C:\> Get-ZertoAzureResource -SiteName "My Azure Site" -Network
```
Returns information about the usable Networks (Vnets) at the Azure site with Zerto ZCA site named "My Azure Site"
### Example 2
```powershell
PS C:\> Get-ZertoAzureResource -SiteName "My Azure Site" -Subnet
```
Returns information about the usable Subnets at the Azure site with Zerto ZCA site named "My Azure Site"
### Example 3
```powershell
PS C:\> Get-ZertoAzureResource -SiteName "My Azure Site" -SecurityGroup
```
Returns information about the usable Security Groups at the Azure site with Zerto ZCA site named "My Azure Site"
### Example 4
```powershell
PS C:\> Get-ZertoAzureResource -SiteName "My Azure Site" -VmInstanceType
```
Returns information about the usable Vm Instance Types at the Azure site with Zerto ZCA site named "My Azure Site"
### Example 5
```powershell
PS C:\> Get-ZertoAzureResource -SiteIdentifier "0123-4142-152414" -Network
```
Returns information about the usable Networks (Vnets) at the Azure site with Zerto ZCA site with identifier "0123-4142-152414"
### Example 6
```powershell
PS C:\> Get-ZertoAzureResource -SiteIdentifier "0123-4142-152414" -Subnet
```
Returns information about the usable Subnets at the Azure site with Zerto ZCA site with identifier "0123-4142-152414"
### Example 7
```powershell
PS C:\> Get-ZertoAzureResource -SiteIdentifier "0123-4142-152414" -SecurityGroup
```
Returns information about the usable Security Groups at the Azure site with Zerto ZCA site with identifier "0123-4142-152414"
### Example 8
```powershell
PS C:\> Get-ZertoAzureResource -SiteIdentifier "0123-4142-152414" -VmInstanceType
```
Returns information about the usable Vm Instance Types at the Azure site with Zerto ZCA site with identifier "0123-4142-152414"
## PARAMETERS
### -Network
Use this switch to get information about the supported Networks (VNets).
```yaml
Type: SwitchParameter
Parameter Sets: SiteNameNetwork, SiteIdentifierNetwork
Aliases:
Required: True
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -SecurityGroup
Use this switch to get information about the supported Security Groups
```yaml
Type: SwitchParameter
Parameter Sets: SiteNameSecurityGroup, SiteIdentifierSecurityGroup
Aliases:
Required: True
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -SiteIdentifier
Site Identifier of the Azure Site you wish to get the information.
```yaml
Type: String
Parameter Sets: SiteIdentifierVmInstanceType, SiteIdentifierNetwork, SiteIdentifierSubnet, SiteIdentifierSecurityGroup
Aliases:
Required: True
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -SiteName
Name the Azure Site you wish to get the information.
```yaml
Type: String
Parameter Sets: SiteNameVmInstanceType, SiteNameNetwork, SiteNameSubnet, SiteNameSecurityGroup
Aliases:
Required: True
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -Subnet
Use this switch to get information about the supported Subnets
```yaml
Type: SwitchParameter
Parameter Sets: SiteNameSubnet, SiteIdentifierSubnet
Aliases:
Required: True
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -VmInstanceType
Use this switch to get information about the supported Vm Instance Types.
```yaml
Type: SwitchParameter
Parameter Sets: SiteNameVmInstanceType, SiteIdentifierVmInstanceType
Aliases:
Required: True
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.Object
## NOTES
## RELATED LINKS
[ZVM Azure Resource API Endpoint Documentation](https://s3.amazonaws.com/zertodownload_docs/Latest/Zerto%20Virtual%20Replication%20Zerto%20Virtual%20Manager%20(ZVM)%20-%20vSphere%20Online%20Help/content/zvr_apis/virtualization_sites_api.htm#Availabl)
-16
View File
@@ -165,22 +165,6 @@ Accept pipeline input: False
Accept wildcard characters: False Accept wildcard characters: False
``` ```
### -numofCPU
Initial number of vCPUs to assign to the VRA.
Default is 1, Minimum is 1, Maximum is 4
```yaml
Type: Int32
Parameter Sets: (All)
Aliases:
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -memoryInGB ### -memoryInGB
Initial amount of memory to assign to the VRA in GB. Initial amount of memory to assign to the VRA in GB.
Default is 3, Minimum is 1, Maximum is 16 Default is 3, Minimum is 1, Maximum is 16
+334
View File
@@ -0,0 +1,334 @@
---
external help file: ZertoApiWrapper-help.xml
Module Name: ZertoApiWrapper
online version: https://github.com/ZertoPublic/ZertoApiWrapper/blob/master/docs/New-ZertoAzureVpg.md
schema: 2.0.0
---
# New-ZertoAzureVpg
## SYNOPSIS
Creates a New VPG Settings object targeting an Azure ZCA. A Zerto VPG Settings Identifier will be returned to as the VPG will need to be updated with the Virtual Machines that will be members of this VPG.
## SYNTAX
```
New-ZertoAzureVpg [-Name] <String> [[-Priority] <String>] [[-JournalHistoryInHours] <Int32>]
[[-RpoInSeconds] <Int32>] [[-TestIntervalInMinutes] <Int32>] [[-UseWanCompression] <Boolean>]
[-TargetSiteName] <String> [-LiveNetworkName] <String> [-LiveSubnetName] <String>
[-LiveSecurityGroupName] <String> [-LiveInstanceType] <String> [[-LiveDiskType] <String>]
[-TestNetworkName] <String> [-TestSubnetName] <String> [-TestSecurityGroupName] <String>
[-TestInstanceType] <String> [[-TestDiskType] <String>] [<CommonParameters>]
```
## DESCRIPTION
Creates a New VPG Settings object targeting an Azure ZCA. A Zerto VPG Settings Identifier will be returned to as the VPG will need to be updated with the Virtual Machines that will be members of this VPG.
## EXAMPLES
### Example 1
```powershell
PS C:\> $VpgSettingsIdentifier = New-ZertoAzureVpg -Name "Example VPG" -Priority "Medium" -JournalHistoryInHours 24 -RpoInSeconds 300 -TestIntervalInMinutes 262080 -UseWanCompression $True -targetSiteName "My Azure Site" -liveNetworkName "Vnet_EastUS_Prod" -liveSubnetName "EUS-Subnet-1" -liveSecurityGroupName "SGP_East_Us_Prod" -LiveInstanceType "Standard_DS1_v2" -liveDiskType "ManagedPremiumSSD" -testNetworkName "Vnet_EastUS_Test" -testSubnetName "EUS-Subnet-2" -testSecurityGroupName "SGP_East_Us_Test" -testInstanceType "Standard_DS1_v2" -testDiskType "ManagedPremiumSSD"
```
Creates a VPG with the specified settings returning a Vpg Settings Identifier to the specified variable to be used in later steps creating the Vpg. All parameters are specified in this example.
### Example 2
```powershell
PS C:\> $VpgSettingsIdentifier = New-ZertoAzureVpg -Name "Example VPG" -targetSiteName "My Azure Site" -liveNetworkName "Vnet_EastUS_Prod" -liveSubnetName "EUS-Subnet-1" -liveSecurityGroupName "SGP_East_Us_Prod" -LiveInstanceType "Standard_DS1_v2" -testNetworkName "Vnet_EastUS_Test" -testSubnetName "EUS-Subnet-2" -testSecurityGroupName "SGP_East_Us_Test" -testInstanceType "Standard_DS1_v2"
```
Creates a VPG with the specified settings returning a Vpg Settings Identifier to the specified variable to be used in later steps creating the Vpg. Only mandatory parameters are specified in this example.
## PARAMETERS
### -JournalHistoryInHours
Desired journal history in hours of the VPG to be created.
Min 1 hour, Max 720 hours (30 days).
Default is 24 hours.
```yaml
Type: Int32
Parameter Sets: (All)
Aliases:
Required: False
Position: 2
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -LiveDiskType
Type of disk to select as the default for the VPG during a live operation.
Default is 'ManagedPremiumSSD'
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Accepted values: UnmanagedStandard, ManagedPremiumSSD, ManagedStandardSSD, ManagedStandardHDD
Required: False
Position: 11
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -LiveInstanceType
Name of the default VM Instance Type to use during a live operation.
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: True
Position: 10
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -LiveNetworkName
Name of the default Network (VNet) to use during a live operation.
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: True
Position: 7
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -LiveSecurityGroupName
Name of the default Security Group to use during a live operation.
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: True
Position: 9
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -LiveSubnetName
Name of the default subnet to use during a live operation.
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: True
Position: 8
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -Name
Desired name of the VPG to be created.
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: True
Position: 0
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -Priority
Replication priority of the VPG to be created.
Default value is 'Medium'
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Accepted values: High, Medium, Low
Required: False
Position: 1
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -RpoInSeconds
Desired RPO alert value in seconds.
Min 60 seconds, Max 86400 seconds (24 hours).
Default is 300 seconds (5 minutes).
```yaml
Type: Int32
Parameter Sets: (All)
Aliases:
Required: False
Position: 3
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -TargetSiteName
Name of the ZCA site for the VPG to target.
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: True
Position: 6
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -TestDiskType
Type of disk to select as the default for the VPG during a live operation.
Default is 'ManagedPremiumSSD'
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Accepted values: UnmanagedStandard, ManagedPremiumSSD, ManagedStandardSSD, ManagedStandardHDD
Required: False
Position: 16
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -TestInstanceType
Name of the default VM Instance Type to use during a test operation.
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: True
Position: 15
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -TestIntervalInMinutes
Desired test interval in minutes.
Please review documentation for values.
Default is 262080 minutes (6 months).
```yaml
Type: Int32
Parameter Sets: (All)
Aliases:
Accepted values: 0, 43200, 131040, 262080, 394560, 525600
Required: False
Position: 4
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -TestNetworkName
Name of the default Network (VNet) to use during a test operation.
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: True
Position: 12
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -TestSecurityGroupName
Name of the default Security Group to use during a test operation.
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: True
Position: 14
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -TestSubnetName
Name of the default subnet to use during a test operation.
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: True
Position: 13
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -UseWanCompression
Turn on or off WAN compression.
Recommended this setting is not turned off.
Default is to leave WAN compression turned on.
```yaml
Type: Boolean
Parameter Sets: (All)
Aliases:
Required: False
Position: 5
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.Object
Vpg Settings Identifier
## NOTES
Please review the process and examples outlined in the [Wiki on GitHub](https://Need.ToAdd.link/To/Wiki) for full Vpg Creation workflow and required examples.
## RELATED LINKS
[Zerto Create Azure VPG Help Documentation](https://s3.amazonaws.com/zertodownload_docs/Latest/Zerto%20Virtual%20Replication%20Zerto%20Virtual%20Manager%20(ZVM)%20-%20vSphere%20Online%20Help/content/zvr_apis/vsphere_to_azure_vpg_management_apis.htm?tocpath=ZVR%20RESTful%20APIs%7CZerto%20APIs%7C_____26)
+1 -1
View File
@@ -8,7 +8,7 @@ schema: 2.0.0
# New-ZertoVpg # New-ZertoVpg
## SYNOPSIS ## SYNOPSIS
Creates a New VPG with default settings only. Customization of VM settings can be accomplished with other module level functions. Returns a VpgSettingsIdentifier to be passed into the `Save-ZertoVpgSetting` function to create the VPG. Creates a New VPG with default settings only. Customization of VM settings can be accomplished with other module level functions.
## SYNTAX ## SYNTAX
+1 -1
View File
@@ -1 +1 @@
1.5.4 1.5.1