/// <summary> /// Method to get Cloud Service object for a given vault /// </summary> /// <param name="vault">vault object</param> /// <returns>cloud service object.</returns> public CloudService GetCloudServiceForVault(ASRVault vault) { IEnumerable <CloudService> cloudServiceList = this.GetCloudServices(); foreach (var cloudService in cloudServiceList) { Vault selectedVault = null; if (cloudService.GeoRegion.Equals(vault.Location, StringComparison.InvariantCultureIgnoreCase)) { foreach (var resource in cloudService.Resources) { if (resource.Name.Equals(vault.Name, StringComparison.InvariantCultureIgnoreCase)) { selectedVault = resource; return(cloudService); } } } } throw new ArgumentException( string.Format( Properties.Resources.InCorrectVaultInformation, vault.Name, vault.Location)); }
/// <summary> /// Method to get the Azure site recovery sites /// </summary> /// <param name="vault">vault object</param> /// <returns>Site list response</returns> public SiteListResponse GetAzureSiteRecoverySites(ASRVault vault = null) { if (vault != null) { Utilities.UpdateVaultSettings(new ASRVaultCreds() { CloudServiceName = vault.CloudServiceName, ResourceName = vault.Name }); } return(this.GetSiteRecoveryClient().Sites.List(this.GetRequestHeaders(false))); }
/// <summary> /// Gets the vault credential object /// </summary> /// <param name="managementCert">certificate to be uploaded</param> /// <param name="vault">vault object</param> /// <param name="site">site object </param> /// <returns>credential object</returns> public ASRVaultCreds GenerateVaultCredential(X509Certificate2 managementCert, ASRVault vault, Site site) { string currentResourceName = PSRecoveryServicesClient.asrVaultCreds.ResourceName; string currentCloudServiceName = PSRecoveryServicesClient.asrVaultCreds.CloudServiceName; // Update vault settings with the working vault to generate file Utilities.UpdateVaultSettings(new ASRVaultCreds() { CloudServiceName = vault.CloudServiceName, ResourceName = vault.Name }); // 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.UpdateVaultSettings(new ASRVaultCreds() { CloudServiceName = currentCloudServiceName, ResourceName = currentResourceName }); 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, Site site) { 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.CloudServiceName, site.ID, site.Name); return(vaultCreds); }
/// <summary> /// Method to create a Site /// </summary> /// <param name="siteName">name of the site</param> /// <param name="siteType">type of the site</param> /// <param name="vault">vault object</param> /// <returns>job object for the creation.</returns> public JobResponse CreateAzureSiteRecoverySite(string siteName, string siteType = null, ASRVault vault = null) { if (vault != null) { Utilities.UpdateVaultSettings(new ASRVaultCreds() { CloudServiceName = vault.CloudServiceName, ResourceName = vault.Name }); } if (string.IsNullOrEmpty(siteType)) { siteType = FabricProviders.HyperVSite; } SiteCreationInput input = new SiteCreationInput() { Name = siteName, FabricType = siteType }; return(this.GetSiteRecoveryClient().Sites.Create(input, this.GetRequestHeaders(false))); }