Ejemplo n.º 1
0
        private List <VMNicInputDetails> getNicListToUpdate(IList <VMNicDetails> vmNicList)
        {
            var vMNicInputDetailsList = new List <VMNicInputDetails>();
            // Weather to track Nic found to be updated. IF primary nic is not or empty no need to update.
            var nicFoundToBeUpdated = string.IsNullOrEmpty(this.PrimaryNic);

            if (vmNicList != null)
            {
                foreach (var nDetails in vmNicList)
                {
                    var vMNicInputDetails = new VMNicInputDetails();
                    if (!string.IsNullOrEmpty(this.PrimaryNic) &&
                        string.Compare(nDetails.NicId, this.PrimaryNic, StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        vMNicInputDetails.NicId = this.PrimaryNic;
                        vMNicInputDetails.RecoveryVMSubnetName      = this.RecoveryNicSubnetName;
                        vMNicInputDetails.ReplicaNicStaticIPAddress =
                            this.RecoveryNicStaticIPAddress;
                        vMNicInputDetails.SelectionType =
                            string.IsNullOrEmpty(this.NicSelectionType)
                                ? Constants.SelectedByUser : this.NicSelectionType;
                        vMNicInputDetailsList.Add(vMNicInputDetails);
                        // NicId  matched for updation
                        nicFoundToBeUpdated = true;
                    }
                    else
                    {
                        vMNicInputDetails.NicId = nDetails.NicId;
                        vMNicInputDetails.RecoveryVMSubnetName      = nDetails.RecoveryVMSubnetName;
                        vMNicInputDetails.ReplicaNicStaticIPAddress =
                            nDetails.ReplicaNicStaticIPAddress;
                        vMNicInputDetails.SelectionType = nDetails.SelectionType;
                        vMNicInputDetailsList.Add(vMNicInputDetails);
                    }
                }
            }

            if (!nicFoundToBeUpdated)
            {
                throw new PSInvalidOperationException(Resources.NicNotFoundInVMForUpdateVmProperties);
            }
            return(vMNicInputDetailsList);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// ProcessRecord of the command.
        /// </summary>
        public override void ExecuteSiteRecoveryCmdlet()
        {
            base.ExecuteSiteRecoveryCmdlet();

            ProtectableItemResponse protectableItemResponse =
                RecoveryServicesClient.GetAzureSiteRecoveryProtectableItem(Utilities.GetValueFromArmId(this.VirtualMachine.ID, ARMResourceTypeConstants.ReplicationFabrics),
                                                                           this.VirtualMachine.ProtectionContainerId, this.VirtualMachine.Name);

            if (protectableItemResponse.ProtectableItem.Properties.ReplicationProtectedItemId == null)
            {
                this.WriteWarning(Properties.Resources.ProtectionIsNotEnabledForVM.ToString());
                return;
            }

            ReplicationProtectedItemResponse replicationProtectedItemResponse =
                RecoveryServicesClient.GetAzureSiteRecoveryReplicationProtectedItem(Utilities.GetValueFromArmId(this.VirtualMachine.ID, ARMResourceTypeConstants.ReplicationFabrics),
                                                                                    this.VirtualMachine.ProtectionContainerId, Utilities.GetValueFromArmId(protectableItemResponse.ProtectableItem.Properties.ReplicationProtectedItemId, ARMResourceTypeConstants.ReplicationProtectedItems));

            // Check for Replication Provider type HyperVReplicaAzure
            if (0 != string.Compare(
                    replicationProtectedItemResponse.ReplicationProtectedItem.Properties.ProviderSpecificDetails.InstanceType,
                    Constants.HyperVReplicaAzure,
                    StringComparison.OrdinalIgnoreCase))
            {
                this.WriteWarning(Properties.Resources.UnsupportedReplicationProvidedForUpdateVmProperties.ToString());
                return;
            }

            // Check for at least one option
            if (string.IsNullOrEmpty(this.Name) &&
                string.IsNullOrEmpty(this.Size) &&
                string.IsNullOrEmpty(this.PrimaryNic) &&
                string.IsNullOrEmpty(this.RecoveryNetworkId))
            {
                this.WriteWarning(Properties.Resources.ArgumentsMissingForUpdateVmProperties.ToString());
                return;
            }

            // Both primary & recovery inputs should be present
            if (string.IsNullOrEmpty(this.PrimaryNic) ^
                string.IsNullOrEmpty(this.RecoveryNetworkId))
            {
                this.WriteWarning(Properties.Resources.NetworkArgumentsMissingForUpdateVmProperties.ToString());
                return;
            }

            List <VMNicInputDetails> vMNicInputDetailsList = new List <VMNicInputDetails>();
            VMNicDetails             vMNicDetailsToBeUpdated;

            if (!string.IsNullOrEmpty(this.PrimaryNic))
            {
                HyperVReplicaAzureReplicationDetails providerSpecificDetails =
                    (HyperVReplicaAzureReplicationDetails)replicationProtectedItemResponse.ReplicationProtectedItem.Properties.ProviderSpecificDetails;

                if (providerSpecificDetails.VMNics != null)
                {
                    vMNicDetailsToBeUpdated = providerSpecificDetails.VMNics.SingleOrDefault(n => string.Compare(n.NicId, this.PrimaryNic, StringComparison.OrdinalIgnoreCase) == 0);
                    if (vMNicDetailsToBeUpdated != null)
                    {
                        VMNicInputDetails vMNicInputDetails = new VMNicInputDetails();

                        vMNicInputDetails.NicId = this.PrimaryNic;
                        vMNicInputDetails.RecoveryVMSubnetName      = this.RecoveryNicSubnetName;
                        vMNicInputDetails.ReplicaNicStaticIPAddress = this.RecoveryNicStaticIPAddress;
                        vMNicInputDetails.SelectionType             = string.IsNullOrEmpty(this.NicSelectionType) ? Constants.SelectedByUser : this.NicSelectionType;
                        vMNicInputDetailsList.Add(vMNicInputDetails);

                        IEnumerable <VMNicDetails> vMNicDetailsListRemaining = providerSpecificDetails.VMNics.Where(n => string.Compare(n.NicId, this.PrimaryNic, StringComparison.OrdinalIgnoreCase) != 0);
                        foreach (VMNicDetails nDetails in vMNicDetailsListRemaining)
                        {
                            vMNicInputDetails = new VMNicInputDetails();

                            vMNicInputDetails.NicId = nDetails.NicId;
                            vMNicInputDetails.RecoveryVMSubnetName      = nDetails.RecoveryVMSubnetName;
                            vMNicInputDetails.ReplicaNicStaticIPAddress = nDetails.ReplicaNicStaticIPAddress;
                            vMNicInputDetails.SelectionType             = nDetails.SelectionType;
                            vMNicInputDetailsList.Add(vMNicInputDetails);
                        }
                    }
                    else
                    {
                        throw new PSInvalidOperationException(Properties.Resources.NicNotFoundInVMForUpdateVmProperties);
                    }
                }
            }

            UpdateReplicationProtectedItemInputProperties updateReplicationProtectedItemInputProperties = new UpdateReplicationProtectedItemInputProperties()
            {
                RecoveryAzureVMName            = this.Name,
                RecoveryAzureVMSize            = this.Size,
                SelectedRecoveryAzureNetworkId = this.RecoveryNetworkId,
                VmNics = vMNicInputDetailsList
            };

            UpdateReplicationProtectedItemInput input = new UpdateReplicationProtectedItemInput()
            {
                Properties = updateReplicationProtectedItemInputProperties
            };

            LongRunningOperationResponse response = RecoveryServicesClient.UpdateVmProperties(
                Utilities.GetValueFromArmId(this.VirtualMachine.ID, ARMResourceTypeConstants.ReplicationFabrics),
                Utilities.GetValueFromArmId(this.VirtualMachine.ID, ARMResourceTypeConstants.ReplicationProtectionContainers),
                replicationProtectedItemResponse.ReplicationProtectedItem.Name,
                input);

            JobResponse jobResponse =
                RecoveryServicesClient
                .GetAzureSiteRecoveryJobDetails(PSRecoveryServicesClient.GetJobIdFromReponseLocation(response.Location));

            WriteObject(new ASRJob(jobResponse.Job));
        }
Ejemplo n.º 3
0
        private List <VMNicInputDetails> getNicListToUpdate(IList <VMNicDetails> vmNicList)
        {
            var vMNicInputDetailsList = new List <VMNicInputDetails>();
            // Weather to track NIC found to be updated. IF primary NIC is not or empty no need to update.
            var nicFoundToBeUpdated = string.IsNullOrEmpty(this.UpdateNic);

            if (vmNicList != null)
            {
                foreach (var nDetails in vmNicList)
                {
                    var vMNicInputDetails = new VMNicInputDetails();
                    if (!string.IsNullOrEmpty(this.UpdateNic) &&
                        string.Compare(nDetails.NicId, this.UpdateNic, StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        vMNicInputDetails.NicId = this.UpdateNic;
                        vMNicInputDetails.RecoveryVMSubnetName      = this.RecoveryNicSubnetName;
                        vMNicInputDetails.ReplicaNicStaticIPAddress =
                            this.RecoveryNicStaticIPAddress;
                        vMNicInputDetails.SelectionType =
                            string.IsNullOrEmpty(this.NicSelectionType)
                                ? Constants.SelectedByUser : this.NicSelectionType;
                        vMNicInputDetails.RecoveryLBBackendAddressPoolIds =
                            this.RecoveryLBBackendAddressPoolId?.ToList();
                        vMNicInputDetails.RecoveryPublicIpAddressId =
                            this.RecoveryPublicIPAddressId;
                        vMNicInputDetails.RecoveryNetworkSecurityGroupId =
                            this.RecoveryNetworkSecurityGroupId;
                        vMNicInputDetailsList.Add(vMNicInputDetails);
                        // NicId  matched for update
                        nicFoundToBeUpdated = true;

                        if (this.MyInvocation.BoundParameters.ContainsKey(
                                Utilities.GetMemberName(() => this.EnableAcceleratedNetworkingOnRecovery)))
                        {
                            vMNicInputDetails.EnableAcceleratedNetworkingOnRecovery = true;
                        }
                        else
                        {
                            vMNicInputDetails.EnableAcceleratedNetworkingOnRecovery = false;
                        }
                    }
                    else
                    {
                        vMNicInputDetails.NicId = nDetails.NicId;
                        vMNicInputDetails.RecoveryVMSubnetName      = nDetails.RecoveryVMSubnetName;
                        vMNicInputDetails.ReplicaNicStaticIPAddress =
                            nDetails.ReplicaNicStaticIPAddress;
                        vMNicInputDetails.SelectionType = nDetails.SelectionType;
                        vMNicInputDetailsList.Add(vMNicInputDetails);
                        vMNicInputDetails.EnableAcceleratedNetworkingOnRecovery = nDetails.EnableAcceleratedNetworkingOnRecovery;
                        vMNicInputDetails.RecoveryLBBackendAddressPoolIds       =
                            nDetails.RecoveryLBBackendAddressPoolIds;
                        vMNicInputDetails.RecoveryPublicIpAddressId =
                            nDetails.RecoveryPublicIpAddressId;
                        vMNicInputDetails.RecoveryNetworkSecurityGroupId =
                            nDetails.RecoveryNetworkSecurityGroupId;
                    }
                }
            }

            if (!nicFoundToBeUpdated)
            {
                throw new PSInvalidOperationException(Resources.NicNotFoundInVMForUpdateVmProperties);
            }
            return(vMNicInputDetailsList);
        }
Ejemplo n.º 4
0
        private List <VMNicInputDetails> getNicListToUpdate(IList <VMNicDetails> vmNicList)
        {
            var vMNicInputDetailsList = new List <VMNicInputDetails>();
            // Weather to track NIC found to be updated. IF primary NIC is not or empty no need to update.
            var nicFoundToBeUpdated = string.IsNullOrEmpty(this.UpdateNic);

            if (vmNicList != null)
            {
                // If VM NICs list provided along with UpdateNic then only the NICs list is
                // honored.
                if (this.ASRVMNicConfiguration != null && this.ASRVMNicConfiguration.Count() > 0)
                {
                    var vmNicIds = vmNicList.Select(nic => nic.NicId);

                    foreach (var nic in this.ASRVMNicConfiguration)
                    {
                        if (!vmNicIds.Contains(nic.NicId, StringComparer.OrdinalIgnoreCase))
                        {
                            throw new PSInvalidOperationException(
                                      Resources.NicNotFoundInVMForUpdateVmProperties);
                        }

                        var vMNicInputDetails = new VMNicInputDetails();

                        vMNicInputDetails.NicId           = nic.NicId;
                        vMNicInputDetails.RecoveryNicName = nic.RecoveryNicName;
                        vMNicInputDetails.RecoveryNicResourceGroupName          = nic.RecoveryNicResourceGroupName;
                        vMNicInputDetails.ReuseExistingNic                      = nic.ReuseExistingNic;
                        vMNicInputDetails.RecoveryVMSubnetName                  = nic.RecoveryVMSubnetName;
                        vMNicInputDetails.EnableAcceleratedNetworkingOnRecovery =
                            nic.EnableAcceleratedNetworkingOnRecovery;
                        vMNicInputDetails.RecoveryNetworkSecurityGroupId =
                            nic.RecoveryNetworkSecurityGroupId;
                        vMNicInputDetails.ReplicaNicStaticIPAddress =
                            nic.RecoveryIPConfigs?.FirstOrDefault()?.StaticIPAddress;
                        vMNicInputDetails.RecoveryPublicIpAddressId =
                            nic.RecoveryIPConfigs?.FirstOrDefault()?.PublicIpAddressId;
                        vMNicInputDetails.RecoveryLBBackendAddressPoolIds =
                            nic.RecoveryIPConfigs?.FirstOrDefault()?.LBBackendAddressPoolIds;

                        vMNicInputDetails.TfoNicName = nic.TfoNicName;
                        vMNicInputDetails.TfoNicResourceGroupName          = nic.TfoNicResourceGroupName;
                        vMNicInputDetails.TfoReuseExistingNic              = nic.TfoReuseExistingNic;
                        vMNicInputDetails.TfoVMSubnetName                  = nic.TfoVMSubnetName;
                        vMNicInputDetails.EnableAcceleratedNetworkingOnTfo =
                            nic.EnableAcceleratedNetworkingOnTfo;
                        vMNicInputDetails.TfoNetworkSecurityGroupId =
                            nic.TfoNetworkSecurityGroupId;
                        vMNicInputDetails.TfoIPConfigs = nic.TfoIPConfigs;

                        vMNicInputDetails.SelectionType =
                            string.IsNullOrEmpty(this.NicSelectionType)
                                ? Constants.SelectedByUser : this.NicSelectionType;

                        vMNicInputDetailsList.Add(vMNicInputDetails);
                    }

                    return(vMNicInputDetailsList);
                }

                foreach (var nDetails in vmNicList)
                {
                    var vMNicInputDetails = new VMNicInputDetails();
                    if (!string.IsNullOrEmpty(this.UpdateNic) &&
                        string.Compare(nDetails.NicId, this.UpdateNic, StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        vMNicInputDetails.NicId = this.UpdateNic;
                        vMNicInputDetails.RecoveryVMSubnetName      = this.RecoveryNicSubnetName;
                        vMNicInputDetails.ReplicaNicStaticIPAddress =
                            this.RecoveryNicStaticIPAddress;
                        vMNicInputDetails.SelectionType =
                            string.IsNullOrEmpty(this.NicSelectionType)
                                ? Constants.SelectedByUser : this.NicSelectionType;
                        vMNicInputDetails.RecoveryLBBackendAddressPoolIds =
                            this.RecoveryLBBackendAddressPoolId?.ToList();
                        vMNicInputDetails.RecoveryPublicIpAddressId =
                            this.RecoveryPublicIPAddressId;
                        vMNicInputDetails.RecoveryNetworkSecurityGroupId =
                            this.RecoveryNetworkSecurityGroupId;
                        vMNicInputDetailsList.Add(vMNicInputDetails);
                        // NicId  matched for update
                        nicFoundToBeUpdated = true;

                        if (this.MyInvocation.BoundParameters.ContainsKey(
                                Utilities.GetMemberName(() => this.EnableAcceleratedNetworkingOnRecovery)))
                        {
                            vMNicInputDetails.EnableAcceleratedNetworkingOnRecovery = true;
                        }
                        else
                        {
                            vMNicInputDetails.EnableAcceleratedNetworkingOnRecovery = false;
                        }
                    }
                    else
                    {
                        vMNicInputDetails.NicId = nDetails.NicId;
                        vMNicInputDetails.RecoveryVMSubnetName      = nDetails.RecoveryVMSubnetName;
                        vMNicInputDetails.ReplicaNicStaticIPAddress =
                            nDetails.ReplicaNicStaticIPAddress;
                        vMNicInputDetails.SelectionType = nDetails.SelectionType;
                        vMNicInputDetailsList.Add(vMNicInputDetails);
                        vMNicInputDetails.EnableAcceleratedNetworkingOnRecovery = nDetails.EnableAcceleratedNetworkingOnRecovery;
                        vMNicInputDetails.RecoveryLBBackendAddressPoolIds       =
                            nDetails.RecoveryLBBackendAddressPoolIds;
                        vMNicInputDetails.RecoveryPublicIpAddressId =
                            nDetails.RecoveryPublicIpAddressId;
                        vMNicInputDetails.RecoveryNetworkSecurityGroupId =
                            nDetails.RecoveryNetworkSecurityGroupId;
                    }
                }
            }

            if (!nicFoundToBeUpdated)
            {
                throw new PSInvalidOperationException(Resources.NicNotFoundInVMForUpdateVmProperties);
            }
            return(vMNicInputDetailsList);
        }
Ejemplo n.º 5
0
        /// <summary>
        ///     ProcessRecord of the command.
        /// </summary>
        public override void ExecuteSiteRecoveryCmdlet()
        {
            base.ExecuteSiteRecoveryCmdlet();

            if (this.ShouldProcess(
                    this.InputObject.FriendlyName,
                    VerbsCommon.Set))
            {
                var replicationProtectedItemResponse = this.RecoveryServicesClient
                                                       .GetAzureSiteRecoveryReplicationProtectedItem(
                    Utilities.GetValueFromArmId(
                        this.InputObject.ID,
                        ARMResourceTypeConstants.ReplicationFabrics),
                    Utilities.GetValueFromArmId(
                        this.InputObject.ID,
                        ARMResourceTypeConstants.ReplicationProtectionContainers),
                    this.InputObject.Name);

                var provider = replicationProtectedItemResponse.Properties.ProviderSpecificDetails;

                // Check for Replication Provider type HyperVReplicaAzure/InMageAzureV2
                if (!(provider is HyperVReplicaAzureReplicationDetails) &&
                    !(provider is InMageAzureV2ReplicationDetails))
                {
                    this.WriteWarning(
                        Resources.UnsupportedReplicationProvidedForUpdateVmProperties);
                    return;
                }

                // Check for at least one option
                if (string.IsNullOrEmpty(this.Name) &&
                    string.IsNullOrEmpty(this.Size) &&
                    string.IsNullOrEmpty(this.PrimaryNic) &&
                    string.IsNullOrEmpty(this.RecoveryNetworkId) &&
                    string.IsNullOrEmpty(this.RecoveryResourceGroupId) &&
                    string.IsNullOrEmpty(this.LicenseType))
                {
                    this.WriteWarning(Resources.ArgumentsMissingForUpdateVmProperties);
                    return;
                }

                // Both primary & recovery inputs should be present
                if (string.IsNullOrEmpty(this.PrimaryNic) ^
                    string.IsNullOrEmpty(this.RecoveryNetworkId))
                {
                    this.WriteWarning(Resources.NetworkArgumentsMissingForUpdateVmProperties);
                    return;
                }

                var          vmName = this.Name;
                var          vmSize = this.Size;
                var          vmRecoveryNetworkId     = this.RecoveryNetworkId;
                var          licenseType             = this.LicenseType;
                var          recoveryResourceGroupId = this.RecoveryResourceGroupId;
                var          vMNicInputDetailsList   = new List <VMNicInputDetails>();
                VMNicDetails vMNicDetailsToBeUpdated;
                var          providerSpecificInput = new UpdateReplicationProtectedItemProviderInput();

                if (provider is HyperVReplicaAzureReplicationDetails)
                {
                    var providerSpecificDetails =
                        (HyperVReplicaAzureReplicationDetails)replicationProtectedItemResponse
                        .Properties.ProviderSpecificDetails;

                    if (string.IsNullOrEmpty(this.RecoveryResourceGroupId))
                    {
                        recoveryResourceGroupId =
                            providerSpecificDetails.RecoveryAzureResourceGroupId;
                    }

                    var deploymentType = Utilities.GetValueFromArmId(
                        providerSpecificDetails.RecoveryAzureStorageAccount,
                        ARMResourceTypeConstants.Providers);
                    if (deploymentType.ToLower()
                        .Contains(Constants.Classic.ToLower()))
                    {
                        providerSpecificInput =
                            new HyperVReplicaAzureUpdateReplicationProtectedItemInput
                        {
                            RecoveryAzureV1ResourceGroupId = recoveryResourceGroupId,
                            RecoveryAzureV2ResourceGroupId = null
                        };
                    }
                    else
                    {
                        providerSpecificInput =
                            new HyperVReplicaAzureUpdateReplicationProtectedItemInput
                        {
                            RecoveryAzureV1ResourceGroupId = null,
                            RecoveryAzureV2ResourceGroupId = recoveryResourceGroupId
                        };
                    }

                    if (string.IsNullOrEmpty(this.Name))
                    {
                        vmName = providerSpecificDetails.RecoveryAzureVMName;
                    }

                    if (string.IsNullOrEmpty(this.Size))
                    {
                        vmSize = providerSpecificDetails.RecoveryAzureVMSize;
                    }

                    if (string.IsNullOrEmpty(this.RecoveryNetworkId))
                    {
                        vmRecoveryNetworkId = providerSpecificDetails
                                              .SelectedRecoveryAzureNetworkId;
                    }

                    if (string.IsNullOrEmpty(this.LicenseType))
                    {
                        //licenseType = providerSpecificDetails.LicenseType;
                    }

                    if (!string.IsNullOrEmpty(this.PrimaryNic))
                    {
                        if (providerSpecificDetails.VmNics != null)
                        {
                            vMNicDetailsToBeUpdated =
                                providerSpecificDetails.VmNics.SingleOrDefault(
                                    n => string.Compare(
                                        n.NicId,
                                        this.PrimaryNic,
                                        StringComparison.OrdinalIgnoreCase) ==
                                    0);
                            if (vMNicDetailsToBeUpdated != null)
                            {
                                var vMNicInputDetails = new VMNicInputDetails();

                                vMNicInputDetails.NicId = this.PrimaryNic;
                                vMNicInputDetails.RecoveryVMSubnetName      = this.RecoveryNicSubnetName;
                                vMNicInputDetails.ReplicaNicStaticIPAddress =
                                    this.RecoveryNicStaticIPAddress;
                                vMNicInputDetails.SelectionType =
                                    string.IsNullOrEmpty(this.NicSelectionType)
                                        ? Constants.SelectedByUser : this.NicSelectionType;
                                vMNicInputDetailsList.Add(vMNicInputDetails);

                                var vMNicDetailsListRemaining =
                                    providerSpecificDetails.VmNics.Where(
                                        n => string.Compare(
                                            n.NicId,
                                            this.PrimaryNic,
                                            StringComparison.OrdinalIgnoreCase) !=
                                        0);
                                foreach (var nDetails in vMNicDetailsListRemaining)
                                {
                                    vMNicInputDetails = new VMNicInputDetails();

                                    vMNicInputDetails.NicId = nDetails.NicId;
                                    vMNicInputDetails.RecoveryVMSubnetName =
                                        nDetails.RecoveryVMSubnetName;
                                    vMNicInputDetails.ReplicaNicStaticIPAddress =
                                        nDetails.ReplicaNicStaticIPAddress;
                                    vMNicInputDetails.SelectionType = nDetails.SelectionType;
                                    vMNicInputDetailsList.Add(vMNicInputDetails);
                                }
                            }
                            else
                            {
                                throw new PSInvalidOperationException(
                                          Resources.NicNotFoundInVMForUpdateVmProperties);
                            }
                        }
                    }
                    else
                    {
                        VMNicInputDetails vMNicInputDetails;
                        foreach (var nDetails in providerSpecificDetails.VmNics)
                        {
                            vMNicInputDetails = new VMNicInputDetails();

                            vMNicInputDetails.NicId = nDetails.NicId;
                            vMNicInputDetails.RecoveryVMSubnetName      = nDetails.RecoveryVMSubnetName;
                            vMNicInputDetails.ReplicaNicStaticIPAddress =
                                nDetails.ReplicaNicStaticIPAddress;
                            vMNicInputDetails.SelectionType = nDetails.SelectionType;
                            vMNicInputDetailsList.Add(vMNicInputDetails);
                        }
                    }
                }
                else if (provider is InMageAzureV2ReplicationDetails)
                {
                    var providerSpecificDetails =
                        (InMageAzureV2ReplicationDetails)replicationProtectedItemResponse.Properties
                        .ProviderSpecificDetails;

                    if (string.IsNullOrEmpty(this.RecoveryResourceGroupId))
                    {
                        recoveryResourceGroupId =
                            providerSpecificDetails.RecoveryAzureResourceGroupId;
                    }

                    var deploymentType = Utilities.GetValueFromArmId(
                        providerSpecificDetails.RecoveryAzureStorageAccount,
                        ARMResourceTypeConstants.Providers);
                    if (deploymentType.ToLower()
                        .Contains(Constants.Classic.ToLower()))
                    {
                        providerSpecificInput =
                            new InMageAzureV2UpdateReplicationProtectedItemInput
                        {
                            RecoveryAzureV1ResourceGroupId = recoveryResourceGroupId,
                            RecoveryAzureV2ResourceGroupId = null
                        };
                    }
                    else
                    {
                        providerSpecificInput =
                            new InMageAzureV2UpdateReplicationProtectedItemInput
                        {
                            RecoveryAzureV1ResourceGroupId = null,
                            RecoveryAzureV2ResourceGroupId = recoveryResourceGroupId
                        };
                    }

                    if (string.IsNullOrEmpty(this.Name))
                    {
                        vmName = providerSpecificDetails.RecoveryAzureVMName;
                    }

                    if (string.IsNullOrEmpty(this.Size))
                    {
                        vmSize = providerSpecificDetails.RecoveryAzureVMSize;
                    }

                    if (string.IsNullOrEmpty(this.RecoveryNetworkId))
                    {
                        vmRecoveryNetworkId = providerSpecificDetails
                                              .SelectedRecoveryAzureNetworkId;
                    }

                    if (string.IsNullOrEmpty(this.LicenseType))
                    {
                        //licenseType = providerSpecificDetails.LicenseType;
                    }

                    if (!string.IsNullOrEmpty(this.PrimaryNic))
                    {
                        if (providerSpecificDetails.VmNics != null)
                        {
                            vMNicDetailsToBeUpdated =
                                providerSpecificDetails.VmNics.SingleOrDefault(
                                    n => string.Compare(
                                        n.NicId,
                                        this.PrimaryNic,
                                        StringComparison.OrdinalIgnoreCase) ==
                                    0);
                            if (vMNicDetailsToBeUpdated != null)
                            {
                                var vMNicInputDetails = new VMNicInputDetails();

                                vMNicInputDetails.NicId = this.PrimaryNic;
                                vMNicInputDetails.RecoveryVMSubnetName      = this.RecoveryNicSubnetName;
                                vMNicInputDetails.ReplicaNicStaticIPAddress =
                                    this.RecoveryNicStaticIPAddress;
                                vMNicInputDetails.SelectionType =
                                    string.IsNullOrEmpty(this.NicSelectionType)
                                        ? Constants.SelectedByUser : this.NicSelectionType;
                                vMNicInputDetailsList.Add(vMNicInputDetails);

                                var vMNicDetailsListRemaining =
                                    providerSpecificDetails.VmNics.Where(
                                        n => string.Compare(
                                            n.NicId,
                                            this.PrimaryNic,
                                            StringComparison.OrdinalIgnoreCase) !=
                                        0);
                                foreach (var nDetails in vMNicDetailsListRemaining)
                                {
                                    vMNicInputDetails = new VMNicInputDetails();

                                    vMNicInputDetails.NicId = nDetails.NicId;
                                    vMNicInputDetails.RecoveryVMSubnetName =
                                        nDetails.RecoveryVMSubnetName;
                                    vMNicInputDetails.ReplicaNicStaticIPAddress =
                                        nDetails.ReplicaNicStaticIPAddress;
                                    vMNicInputDetails.SelectionType = nDetails.SelectionType;
                                    vMNicInputDetailsList.Add(vMNicInputDetails);
                                }
                            }
                            else
                            {
                                throw new PSInvalidOperationException(
                                          Resources.NicNotFoundInVMForUpdateVmProperties);
                            }
                        }
                    }
                    else
                    {
                        VMNicInputDetails vMNicInputDetails;
                        foreach (var nDetails in providerSpecificDetails.VmNics)
                        {
                            vMNicInputDetails = new VMNicInputDetails();

                            vMNicInputDetails.NicId = nDetails.NicId;
                            vMNicInputDetails.RecoveryVMSubnetName      = nDetails.RecoveryVMSubnetName;
                            vMNicInputDetails.ReplicaNicStaticIPAddress =
                                nDetails.ReplicaNicStaticIPAddress;
                            vMNicInputDetails.SelectionType = nDetails.SelectionType;
                            vMNicInputDetailsList.Add(vMNicInputDetails);
                        }
                    }
                }

                var updateReplicationProtectedItemInputProperties =
                    new UpdateReplicationProtectedItemInputProperties
                {
                    RecoveryAzureVMName            = vmName,
                    RecoveryAzureVMSize            = vmSize,
                    SelectedRecoveryAzureNetworkId = vmRecoveryNetworkId,
                    VmNics      = vMNicInputDetailsList,
                    LicenseType =
                        licenseType ==
                        Management.RecoveryServices.SiteRecovery.Models.LicenseType
                        .NoLicenseType.ToString()
                                ? Management.RecoveryServices.SiteRecovery.Models.LicenseType
                        .NoLicenseType
                                : Management.RecoveryServices.SiteRecovery.Models.LicenseType
                        .WindowsServer,
                    ProviderSpecificDetails = providerSpecificInput
                };

                var input = new UpdateReplicationProtectedItemInput
                {
                    Properties = updateReplicationProtectedItemInputProperties
                };

                var response = this.RecoveryServicesClient.UpdateVmProperties(
                    Utilities.GetValueFromArmId(
                        this.InputObject.ID,
                        ARMResourceTypeConstants.ReplicationFabrics),
                    Utilities.GetValueFromArmId(
                        this.InputObject.ID,
                        ARMResourceTypeConstants.ReplicationProtectionContainers),
                    this.InputObject.Name,
                    input);

                var jobResponse = this.RecoveryServicesClient.GetAzureSiteRecoveryJobDetails(
                    PSRecoveryServicesClient.GetJobIdFromReponseLocation(response.Location));

                this.WriteObject(new ASRJob(jobResponse));
            }
        }