/// <summary> /// Initializes a new instance of the <see cref="ASRVaultSettings" /> class /// </summary> /// <param name="asrVaultCreds">Vault credentails</param> public ASRVaultSettings(ASRVaultCreds asrVaultCreds) { this.ResourceName = asrVaultCreds.ResourceName; this.ResouceGroupName = asrVaultCreds.ResourceGroupName; this.ResourceNamespace = asrVaultCreds.ResourceNamespace; this.ResouceType = asrVaultCreds.ARMResourceType; }
protected RecoveryServicesTestsBase() { if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("VAULT_SETTINGS_FILE_PATH"))) { Environment.SetEnvironmentVariable( "VAULT_SETTINGS_FILE_PATH", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ScenarioTests\\vaultSettings.vaultcredentials")); } this.vaultSettingsFilePath = Environment.GetEnvironmentVariable("VAULT_SETTINGS_FILE_PATH"); if (string.IsNullOrEmpty(vaultSettingsFilePath)) { throw new Exception("Please set VAULT_SETTINGS_FILE_PATH environment variable before running the tests"); } if (File.Exists(this.vaultSettingsFilePath)) { try { var serializer1 = new DataContractSerializer(typeof(ASRVaultCreds)); using (var s = new FileStream( this.vaultSettingsFilePath, FileMode.Open, FileAccess.Read, FileShare.Read)) { asrVaultCreds = (ASRVaultCreds)serializer1.ReadObject(s); } } catch (XmlException xmlException) { throw new XmlException( "XML is malformed or file is empty", xmlException); } catch (SerializationException serializationException) { throw new SerializationException( "XML is malformed or file is empty", serializationException); } } else { throw new FileNotFoundException( "Vault settings file not found, please pass the file downloaded from portal"); } helper = new EnvironmentSetupHelper(); }
protected SiteRecoveryTestsBase() { this.vaultSettingsFilePath = "ScenarioTests\\vaultSettings.VaultCredentials"; if (File.Exists(this.vaultSettingsFilePath)) { try { var serializer1 = new DataContractSerializer(typeof(ASRVaultCreds)); using (var s = new FileStream( this.vaultSettingsFilePath, FileMode.Open, FileAccess.Read, FileShare.Read)) { asrVaultCreds = (ASRVaultCreds)serializer1.ReadObject(s); } } catch (XmlException xmlException) { throw new XmlException( "XML is malformed or file is empty", xmlException); } catch (SerializationException serializationException) { throw new SerializationException( "XML is malformed or file is empty", serializationException); } } else { throw new FileNotFoundException( "Vault settings file not found, please pass the file downloaded from portal"); } helper = new EnvironmentSetupHelper(); }
/// <summary> /// Imports Azure Site Recovery Vault settings. /// </summary> /// <param name="asrVaultCreds">ASR Vault credentials</param> public void ImportAzureSiteRecoveryVaultSettings(ASRVaultCreds asrVaultCreds) { object updateVaultSettingsOneAtATime = new object(); lock (updateVaultSettingsOneAtATime) { PSRecoveryServicesClient.asrVaultCreds.ResourceName = asrVaultCreds.ResourceName; PSRecoveryServicesClient.asrVaultCreds.CloudServiceName = asrVaultCreds.CloudServiceName; PSRecoveryServicesClient.asrVaultCreds.ChannelIntegrityKey = asrVaultCreds.ChannelIntegrityKey; } }
/// <summary> /// Method to generate the credential file content /// </summary> /// <param name="managementCert">management cert</param> /// <param name="acsDetails">ACS details</param> /// <param name="channelIntegrityKey">Integrity key</param> /// <param name="vault">vault object</param> /// <param name="site">site object</param> /// <returns>vault credential object</returns> private ASRVaultCreds GenerateCredentialObject(X509Certificate2 managementCert, UploadCertificateResponse acsDetails, string channelIntegrityKey, ARSVault vault, ASRSite site) { string serializedCertifivate = Convert.ToBase64String(managementCert.Export(X509ContentType.Pfx)); AcsNamespace acsNamespace = new AcsNamespace(acsDetails); string resourceProviderNamespace = string.Empty; string resourceType = string.Empty; Utilities.GetResourceProviderNamespaceAndType(vault.ID, out resourceProviderNamespace, out resourceType); ASRVaultCreds vaultCreds = new ASRVaultCreds( vault.SubscriptionId, vault.Name, serializedCertifivate, acsNamespace, channelIntegrityKey, vault.ResourceGroupName, site.ID, site.Name, resourceProviderNamespace, resourceType, vault.Location); return vaultCreds; }
/// <summary> /// Gets the vault credential object /// </summary> /// <param name="managementCert">certificate to be uploaded</param> /// <param name="vault">vault object</param> /// <returns>credential object</returns> public ASRVaultCreds GenerateVaultCredential(X509Certificate2 managementCert, ASRVault vault, ASRSite site) { ASRVaultCreds currentVaultContext = new ASRVaultCreds( PSRecoveryServicesClient.asrVaultCreds.SubscriptionId, PSRecoveryServicesClient.asrVaultCreds.ResourceName, PSRecoveryServicesClient.asrVaultCreds.ManagementCert, PSRecoveryServicesClient.asrVaultCreds.AcsNamespace, PSRecoveryServicesClient.asrVaultCreds.ChannelIntegrityKey, PSRecoveryServicesClient.asrVaultCreds.ResourceGroupName, PSRecoveryServicesClient.asrVaultCreds.SiteId, PSRecoveryServicesClient.asrVaultCreds.SiteName, PSRecoveryServicesClient.asrVaultCreds.ResourceNamespace, PSRecoveryServicesClient.asrVaultCreds.ResourceType); string resourceProviderNamespace = string.Empty; string resourceType = string.Empty; Utilities.GetResourceProviderNamespaceAndType(vault.ID, out resourceProviderNamespace, out resourceType); // Update vault settings with the working vault to generate file Utilities.UpdateCurrentVaultContext(new ASRVaultCreds() { ResourceGroupName = vault.ResouceGroupName, ResourceName = vault.Name, ResourceNamespace = resourceProviderNamespace, ARMResourceType = resourceType }); // Get Channel Integrity key string channelIntegrityKey; Task<string> getChannelIntegrityKey = this.GetChannelIntegrityKey(); // Making sure we can generate the file, once the SDK and portal are inter-operable // upload certificate and fetch of ACIK can be made parallel to improvve the performace. getChannelIntegrityKey.Wait(); // Upload certificate UploadCertificateResponse acsDetails; Task<UploadCertificateResponse> uploadCertificate = this.UpdateVaultCertificate(managementCert); uploadCertificate.Wait(); acsDetails = uploadCertificate.Result; channelIntegrityKey = getChannelIntegrityKey.Result; ASRVaultCreds asrVaultCreds = this.GenerateCredentialObject( managementCert, acsDetails, channelIntegrityKey, vault, site); // Update back the original vault settings Utilities.UpdateCurrentVaultContext(currentVaultContext); return asrVaultCreds; }
/// <summary> /// Method to generate the credential file content /// </summary> /// <param name="managementCert">management cert</param> /// <param name="acsDetails">ACS details</param> /// <param name="channelIntegrityKey">Integrity key</param> /// <param name="vault">vault object</param> /// <param name="site">site object</param> /// <returns>vault credential object</returns> private ASRVaultCreds GenerateCredentialObject(X509Certificate2 managementCert, UploadCertificateResponse acsDetails, string channelIntegrityKey, ASRVault vault) { string serializedCertifivate = Convert.ToBase64String(managementCert.Export(X509ContentType.Pfx)); AcsNamespace acsNamespace = new AcsNamespace(acsDetails); ASRVaultCreds vaultCreds = new ASRVaultCreds( vault.SubscriptionId, vault.Name, serializedCertifivate, acsNamespace, channelIntegrityKey, vault.ResouceGroupName); return vaultCreds; }