/// <summary> /// Set Azure Recovery Services Vault context. /// </summary> private void SetARSVaultContext( ARSVault arsVault) { try { VaultExtendedInfoResource vaultExtendedInfo = null; try { vaultExtendedInfo = this.RecoveryServicesClient .GetVaultExtendedInfo(this.Vault.ResourceGroupName, this.Vault.Name); } catch (Exception ex) { // code interanally handled the cloud exception thrown earlier.But still there are changes of other exception. // suggesting alternate way to user to unblock if this command is failing. Logger.Instance.WriteWarning(ex.Message); throw new Exception(Resources.TryDownloadingVaultFile); } ASRVaultCreds asrVaultCreds = new ASRVaultCreds(); asrVaultCreds.ResourceName = this.Vault.Name; asrVaultCreds.ResourceGroupName = this.Vault.ResourceGroupName; asrVaultCreds.ChannelIntegrityKey = vaultExtendedInfo.IntegrityKey; asrVaultCreds.ResourceNamespace = ARMResourceTypeConstants .RecoveryServicesResourceProviderNameSpace; asrVaultCreds.ARMResourceType = ARMResourceTypeConstants.RecoveryServicesVault; asrVaultCreds.PrivateEndpointStateForSiteRecovery = this.Vault.Properties.PrivateEndpointStateForSiteRecovery; Utilities.UpdateCurrentVaultContext(asrVaultCreds); this.RecoveryServicesClient.ValidateVaultSettings( asrVaultCreds.ResourceName, asrVaultCreds.ResourceGroupName); this.WriteObject(new ASRVaultSettings(asrVaultCreds)); } catch (InvalidOperationException e) { this.WriteDebug(e.Message); } }
/// <summary> /// Set Azure Recovery Services Vault context. /// </summary> private void SetARSVaultContext( ARSVault arsVault) { try { VaultExtendedInfoResource vaultExtendedInfo = null; try { vaultExtendedInfo = this.RecoveryServicesClient .GetVaultExtendedInfo(this.Vault.ResourceGroupName, this.Vault.Name); } catch (CloudException ex) { throw new Exception(Resources.TryDownloadingVaultFile); } ASRVaultCreds asrVaultCreds = new ASRVaultCreds(); asrVaultCreds.ResourceName = this.Vault.Name; asrVaultCreds.ResourceGroupName = this.Vault.ResourceGroupName; asrVaultCreds.ChannelIntegrityKey = vaultExtendedInfo.IntegrityKey; asrVaultCreds.ResourceNamespace = ARMResourceTypeConstants .RecoveryServicesResourceProviderNameSpace; asrVaultCreds.ARMResourceType = ARMResourceTypeConstants.RecoveryServicesVault; Utilities.UpdateCurrentVaultContext(asrVaultCreds); this.RecoveryServicesClient.ValidateVaultSettings( asrVaultCreds.ResourceName, asrVaultCreds.ResourceGroupName); this.WriteObject(new ASRVaultSettings(asrVaultCreds)); } catch (InvalidOperationException e) { this.WriteDebug(e.Message); } }
/// <summary> /// Set Azure Recovery Services Vault context. /// </summary> private void SetARSVaultContext( ARSVault arsVault) { try { using (var powerShell = System.Management.Automation.PowerShell.Create()) { var vaultExtendedInfo = this.RecoveryServicesClient .GetVaultExtendedInfo(this.Vault.ResourceGroupName, this.Vault.Name); ASRVaultCreds asrVaultCreds = new ASRVaultCreds(); asrVaultCreds.ResourceName = this.Vault.Name; asrVaultCreds.ResourceGroupName = this.Vault.ResourceGroupName; asrVaultCreds.ChannelIntegrityKey = vaultExtendedInfo.IntegrityKey; asrVaultCreds.ResourceNamespace = ARMResourceTypeConstants .RecoveryServicesResourceProviderNameSpace; asrVaultCreds.ARMResourceType = ARMResourceTypeConstants.RecoveryServicesVault; Utilities.UpdateCurrentVaultContext(asrVaultCreds); this.RecoveryServicesClient.ValidateVaultSettings( asrVaultCreds.ResourceName, asrVaultCreds.ResourceGroupName); this.WriteObject(new ASRVaultSettings(asrVaultCreds)); powerShell.Commands.Clear(); } } catch (InvalidOperationException e) { this.WriteDebug(e.Message); } }
/// <summary> /// Initializes a new instance of the <see cref="PSRecoveryServicesClient" /> class with /// required current subscription. /// </summary> /// <param name="azureSubscription">Azure Subscription</param> public PSRecoveryServicesClient( IAzureContextContainer azureProfile) { AzureContext = (AzureContext)azureProfile.DefaultContext; var resourceNamespace = ARMResourceTypeConstants .RecoveryServicesResourceProviderNameSpace; var resourceType = ARMResourceTypeConstants.RecoveryServicesVault; // Get Resource provider namespace and type from config only if Vault context is not set // (hopefully it is required only for Vault related cmdlets) if (string.IsNullOrEmpty(asrVaultCreds.ResourceNamespace) || string.IsNullOrEmpty(asrVaultCreds.ARMResourceType)) { Utilities.UpdateCurrentVaultContext( new ASRVaultCreds { ResourceNamespace = resourceNamespace, ARMResourceType = resourceType }); } if (null == endPointUri) { endPointUri = azureProfile.DefaultContext.Environment.GetEndpointAsUri( AzureEnvironment.Endpoint.ResourceManager); } cloudCredentials = AzureSession.Instance.AuthenticationFactory .GetSubscriptionCloudCredentials(azureProfile.DefaultContext); this.recoveryServicesVaultClient = AzureSession.Instance.ClientFactory .CreateArmClient <RecoveryServicesClient>( AzureContext, AzureEnvironment.Endpoint.ResourceManager); }
/// <summary> /// ProcessRecord of the command. /// </summary> public override void ExecuteSiteRecoveryCmdlet() { base.ExecuteSiteRecoveryCmdlet(); if (this.ShouldProcess( "Vault Setting file", VerbsData.Import)) { this.WriteVerbose("Vault Settings File path: " + this.Path); ASRVaultCreds asrVaultCreds = null; if (File.Exists(this.Path)) { try { if (FileUtilities.DataStore.ReadFileAsText(this.Path).ToLower().Contains("<asrvaultcreds")) { asrVaultCreds = ReadAcsASRVaultCreds(); } else { asrVaultCreds = ReadAadASRVaultCreds(); } } catch (XmlException xmlException) { throw new XmlException( string.Format( Resources.InvalidXml, xmlException)); } catch (SerializationException serializationException) { throw new SerializationException( string.Format( Resources.InvalidXml, serializationException)); } } else { throw new FileNotFoundException( Resources.VaultSettingFileNotFound, this.Path); } // Validate required parameters taken from the Vault settings file. if (string.IsNullOrEmpty(asrVaultCreds.ResourceName)) { throw new ArgumentException( Resources.ResourceNameNullOrEmpty, asrVaultCreds.ResourceName); } if (string.IsNullOrEmpty(asrVaultCreds.ResourceGroupName)) { throw new ArgumentException( Resources.CloudServiceNameNullOrEmpty, asrVaultCreds.ResourceGroupName); } Utilities.UpdateCurrentVaultContext(asrVaultCreds); this.RecoveryServicesClient.ValidateVaultSettings( asrVaultCreds.ResourceName, asrVaultCreds.ResourceGroupName); this.WriteObject(new ASRVaultSettings(asrVaultCreds)); } }
/// <summary> /// ProcessRecord of the command. /// </summary> public override void ExecuteSiteRecoveryCmdlet() { base.ExecuteSiteRecoveryCmdlet(); if (this.ShouldProcess( "Vault Setting file", VerbsData.Import)) { this.WriteVerbose("Vault Settings File path: " + this.Path); ASRVaultCreds asrVaultCreds = null; if (File.Exists(this.Path)) { try { var serializer = new DataContractSerializer(typeof(ASRVaultCreds)); using (var s = new FileStream( this.Path, FileMode.Open, FileAccess.Read, FileShare.Read)) { asrVaultCreds = (ASRVaultCreds)serializer.ReadObject(s); } } catch (XmlException xmlException) { throw new XmlException( string.Format( Resources.InvalidXml, xmlException)); } catch (SerializationException serializationException) { throw new SerializationException( string.Format( Resources.InvalidXml, serializationException)); } } else { throw new FileNotFoundException( Resources.VaultSettingFileNotFound, this.Path); } // Validate required parameters taken from the Vault settings file. if (string.IsNullOrEmpty(asrVaultCreds.ResourceName)) { throw new ArgumentException( Resources.ResourceNameNullOrEmpty, asrVaultCreds.ResourceName); } if (string.IsNullOrEmpty(asrVaultCreds.ResourceGroupName)) { throw new ArgumentException( Resources.CloudServiceNameNullOrEmpty, asrVaultCreds.ResourceGroupName); } Utilities.UpdateCurrentVaultContext(asrVaultCreds); this.RecoveryServicesClient.ValidateVaultSettings( asrVaultCreds.ResourceName, asrVaultCreds.ResourceGroupName); this.WriteObject(new ASRVaultSettings(asrVaultCreds)); } }