/// <summary> /// Queries by friendly name. /// </summary> private void GetByFriendlyName() { FabricListResponse fabricListResponse = RecoveryServicesClient.GetAzureSiteRecoveryFabric(); bool found = false; foreach (Fabric fabric in fabricListResponse.Fabrics) { // Do not process for fabrictype other than HyperVSite if (String.Compare(fabric.Properties.CustomDetails.InstanceType, Constants.HyperVSite) != 0) { continue; } if (0 == string.Compare(this.FriendlyName, fabric.Properties.FriendlyName, StringComparison.OrdinalIgnoreCase)) { var fabricByName = RecoveryServicesClient.GetAzureSiteRecoveryFabric(fabric.Name).Fabric; this.WriteSite(fabricByName); found = true; } } if (!found) { throw new InvalidOperationException( string.Format( Properties.Resources.SiteNotFound, this.FriendlyName, PSRecoveryServicesClient.asrVaultCreds.ResourceName)); } }
/// <summary> /// Queries all / by default. /// </summary> private void GetAll() { FabricListResponse fabricListResponse = RecoveryServicesClient.GetAzureSiteRecoveryFabric(); foreach (Fabric fabric in fabricListResponse.Fabrics) { this.WriteFabric(fabric); } }
/// <summary> /// ProcessRecord of the command. /// </summary> public override void ExecuteSiteRecoveryCmdlet() { base.ExecuteSiteRecoveryCmdlet(); switch (this.ParameterSetName) { case ASRParameterSets.EnterpriseToEnterprise: failoverDeploymentModel = Constants.NotApplicable; this.primaryserver = RecoveryServicesClient.GetAzureSiteRecoveryFabric(Utilities.GetValueFromArmId(this.PrimaryServer.ID, ARMResourceTypeConstants.ReplicationFabrics)).Fabric.Id; this.recoveryserver = RecoveryServicesClient.GetAzureSiteRecoveryFabric(Utilities.GetValueFromArmId(this.RecoveryServer.ID, ARMResourceTypeConstants.ReplicationFabrics)).Fabric.Id; break; case ASRParameterSets.EnterpriseToAzure: failoverDeploymentModel = this.FailoverDeploymentModel; this.primaryserver = RecoveryServicesClient.GetAzureSiteRecoveryFabric(Utilities.GetValueFromArmId(this.PrimaryServer.ID, ARMResourceTypeConstants.ReplicationFabrics)).Fabric.Id; this.recoveryserver = Constants.AzureContainer; break; case ASRParameterSets.HyperVSiteToAzure: failoverDeploymentModel = this.FailoverDeploymentModel; this.primaryserver = this.PrimarySite.ID; this.recoveryserver = Constants.AzureContainer; break; case ASRParameterSets.ByRPFile: if (!File.Exists(this.Path)) { throw new FileNotFoundException(string.Format(Properties.Resources.FileNotFound, this.Path));; } string filePath = this.Path; using (System.IO.StreamReader file = new System.IO.StreamReader(filePath)) { recoveryPlan = JsonConvert.DeserializeObject <RecoveryPlan>(file.ReadToEnd(), new RecoveryPlanActionDetailsConverter()); } break; } if (string.Compare(this.ParameterSetName, ASRParameterSets.ByRPFile, StringComparison.OrdinalIgnoreCase) == 0) { CreateRecoveryPlan(recoveryPlan); } else { this.CreateRecoveryPlan(); } }
/// <summary> /// Queries all / by default. /// </summary> private void GetAll() { FabricListResponse fabricListResponse = RecoveryServicesClient.GetAzureSiteRecoveryFabric(); foreach (Fabric fabric in fabricListResponse.Fabrics) { // Do not process for fabrictype other than HyperVSite if (String.Compare(fabric.Properties.CustomDetails.InstanceType, Constants.HyperVSite) != 0) { continue; } this.WriteSite(fabric); } }
/// <summary> /// Queries by friendly name. /// </summary> private void GetByFriendlyName() { ProtectionContainerListResponse protectionContainerListResponse; bool found = false; FabricListResponse fabricListResponse = RecoveryServicesClient.GetAzureSiteRecoveryFabric(); foreach (Fabric fabric in fabricListResponse.Fabrics) { // Do not process for fabrictype other than Vmm|HyperVSite if (String.Compare(fabric.Properties.CustomDetails.InstanceType, Constants.VMM) != 0 && String.Compare(fabric.Properties.CustomDetails.InstanceType, Constants.HyperVSite) != 0) { continue; } protectionContainerListResponse = RecoveryServicesClient.GetAzureSiteRecoveryProtectionContainer(fabric.Name); foreach ( ProtectionContainer protectionContainer in protectionContainerListResponse.ProtectionContainers) { if (0 == string.Compare(this.FriendlyName, protectionContainer.Properties.FriendlyName, StringComparison.OrdinalIgnoreCase)) { var protectionContainerByName = RecoveryServicesClient.GetAzureSiteRecoveryProtectionContainer(fabric.Name, protectionContainer.Name).ProtectionContainer; this.WriteProtectionContainer(protectionContainerByName); found = true; // break; //We can break if we are sure that we have clouds with unique name across fabrics } } } if (!found) { throw new InvalidOperationException( string.Format( Properties.Resources.ProtectionContainerNotFound, this.FriendlyName, PSRecoveryServicesClient.asrVaultCreds.ResourceName)); } }
/// <summary> /// Queries all Protection Containers under given Fabric. /// </summary> private void GetAll() { ProtectionContainerListResponse protectionContainerListResponse; FabricListResponse fabricListResponse = RecoveryServicesClient.GetAzureSiteRecoveryFabric(); foreach (Fabric fabric in fabricListResponse.Fabrics) { // Do not process for fabrictype other than Vmm|HyperVSite if (String.Compare(fabric.Properties.CustomDetails.InstanceType, Constants.VMM) != 0 && String.Compare(fabric.Properties.CustomDetails.InstanceType, Constants.HyperVSite) != 0) { continue; } protectionContainerListResponse = RecoveryServicesClient.GetAzureSiteRecoveryProtectionContainer(fabric.Name); this.WriteProtectionContainers(protectionContainerListResponse.ProtectionContainers); } }
/// <summary> /// Queries by name. /// </summary> private void GetByName() { FabricResponse fabricResponse = RecoveryServicesClient.GetAzureSiteRecoveryFabric(this.Name); bool found = false; if (fabricResponse != null) { this.WriteSite(fabricResponse.Fabric); found = true; } if (!found) { throw new InvalidOperationException( string.Format( Properties.Resources.ServerNotFound, this.Name, PSRecoveryServicesClient.asrVaultCreds.ResourceName)); } }
/// <summary> /// Queries by friendly name. /// </summary> private void GetByFriendlyName() { FabricListResponse fabricListResponse = RecoveryServicesClient.GetAzureSiteRecoveryFabric(); bool found = false; foreach (Fabric fabric in fabricListResponse.Fabrics) { // Do not process for fabrictype other than Vmm|HyperVSite if (String.Compare(fabric.Properties.CustomDetails.InstanceType, Constants.VMM) != 0 && String.Compare(fabric.Properties.CustomDetails.InstanceType, Constants.HyperVSite) != 0) { continue; } RecoveryServicesProviderListResponse recoveryServicesProviderListResponse = RecoveryServicesClient.GetAzureSiteRecoveryProvider( fabric.Name); foreach (RecoveryServicesProvider recoveryServicesProvider in recoveryServicesProviderListResponse.RecoveryServicesProviders) { if (0 == string.Compare(this.FriendlyName, recoveryServicesProvider.Properties.FriendlyName, true)) { this.WriteServer(fabric, recoveryServicesProvider); found = true; } } } if (!found) { throw new InvalidOperationException( string.Format( Properties.Resources.ServerNotFound, this.FriendlyName, PSRecoveryServicesClient.asrVaultCreds.ResourceName)); } }
/// <summary> /// Queries all / by default. /// </summary> private void GetAll() { FabricListResponse fabricListResponse = RecoveryServicesClient.GetAzureSiteRecoveryFabric(); foreach (Fabric fabric in fabricListResponse.Fabrics) { // Do not process for fabrictype other than Vmm|HyperVSite if (String.Compare(fabric.Properties.CustomDetails.InstanceType, Constants.VMM) != 0 && String.Compare(fabric.Properties.CustomDetails.InstanceType, Constants.HyperVSite) != 0) { continue; } RecoveryServicesProviderListResponse recoveryServicesProviderListResponse = RecoveryServicesClient.GetAzureSiteRecoveryProvider( fabric.Name); foreach (RecoveryServicesProvider recoveryServicesProvider in recoveryServicesProviderListResponse.RecoveryServicesProviders) { this.WriteServer(fabric, recoveryServicesProvider); } } }
/// <summary> /// Starts PE Planned failover. /// </summary> private void StartPEPlannedFailover() { var plannedFailoverInputProperties = new PlannedFailoverInputProperties() { FailoverDirection = this.Direction, ProviderSpecificDetails = new ProviderSpecificFailoverInput() }; var input = new PlannedFailoverInput() { Properties = plannedFailoverInputProperties }; // fetch the latest PE object ProtectableItemResponse protectableItemResponse = RecoveryServicesClient.GetAzureSiteRecoveryProtectableItem(this.fabricName, this.ProtectionEntity.ProtectionContainerId, this.ProtectionEntity.Name); ReplicationProtectedItemResponse replicationProtectedItemResponse = RecoveryServicesClient.GetAzureSiteRecoveryReplicationProtectedItem(this.fabricName, this.ProtectionEntity.ProtectionContainerId, Utilities.GetValueFromArmId(protectableItemResponse.ProtectableItem.Properties.ReplicationProtectedItemId, ARMResourceTypeConstants.ReplicationProtectedItems)); PolicyResponse policyResponse = RecoveryServicesClient.GetAzureSiteRecoveryPolicy(Utilities.GetValueFromArmId(replicationProtectedItemResponse.ReplicationProtectedItem.Properties.PolicyID, ARMResourceTypeConstants.ReplicationPolicies)); this.ProtectionEntity = new ASRProtectionEntity(protectableItemResponse.ProtectableItem, replicationProtectedItemResponse.ReplicationProtectedItem); if (0 == string.Compare( this.ProtectionEntity.ReplicationProvider, Constants.HyperVReplicaAzure, StringComparison.OrdinalIgnoreCase)) { if (this.Direction == Constants.PrimaryToRecovery) { var failoverInput = new HyperVReplicaAzureFailoverProviderInput() { PrimaryKekCertificatePfx = primaryKekCertpfx, SecondaryKekCertificatePfx = secondaryKekCertpfx, VaultLocation = this.GetCurrentVaultLocation() }; input.Properties.ProviderSpecificDetails = failoverInput; } else { var failbackInput = new HyperVReplicaAzureFailbackProviderInput() { DataSyncOption = this.Optimize == Constants.ForDownTime ? Constants.ForDownTime : Constants.ForSynchronization, RecoveryVmCreationOption = String.Compare(this.CreateVmIfNotFound, Constants.Yes, StringComparison.OrdinalIgnoreCase) == 0 ? Constants.CreateVmIfNotFound : Constants.NoAction }; if (String.Compare(this.CreateVmIfNotFound, Constants.Yes, StringComparison.OrdinalIgnoreCase) == 0 && string.Compare(RecoveryServicesClient.GetAzureSiteRecoveryFabric(this.fabricName).Fabric.Properties.CustomDetails.InstanceType, Constants.HyperVSite) == 0) { if (this.Server == null || string.Compare(this.Server.FabricType, Constants.HyperVSite) != 0) { throw new InvalidOperationException( Properties.Resources.ImproperServerObjectPassedForHyperVFailback); } else { failbackInput.ProviderIdForAlternateRecovery = this.Server.ID; } } input.Properties.ProviderSpecificDetails = failbackInput; } } LongRunningOperationResponse response = RecoveryServicesClient.StartAzureSiteRecoveryPlannedFailover( this.fabricName, this.protectionContainerName, Utilities.GetValueFromArmId(replicationProtectedItemResponse.ReplicationProtectedItem.Id, ARMResourceTypeConstants.ReplicationProtectedItems), input); JobResponse jobResponse = RecoveryServicesClient .GetAzureSiteRecoveryJobDetails(PSRecoveryServicesClient.GetJobIdFromReponseLocation(response.Location)); WriteObject(new ASRJob(jobResponse.Job)); }