Create Add-ZertoAzureVpgVm Function
This commit is contained in:
@@ -0,0 +1,165 @@
|
||||
<# .ExternalHelp ./en-us/ZertoApiWrapper-help.xml #>
|
||||
function Add-ZertoAzureVpgVm {
|
||||
[Cmdletbinding()]
|
||||
param(
|
||||
[Parameter(Mandatory)]
|
||||
[ValidateNotNullOrEmpty()]
|
||||
[String]$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
|
||||
}
|
||||
}
|
||||
|
||||
# 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 {
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user