Esempio n. 1
0
        /// <summary>
        /// Method to execute the command
        /// </summary>
        private void GetVaultSettingsFile()
        {
            AzureSubscription subscription = DefaultProfile.Context.Subscription;

            // Generate certificate
            X509Certificate2 cert = CertUtils.CreateSelfSignedCertificate(VaultCertificateExpiryInHoursForHRM, subscription.Id.ToString(), this.Vault.Name);

            ASRSite site = new ASRSite();

            if (!string.IsNullOrEmpty(this.SiteIdentifier) && !string.IsNullOrEmpty(this.SiteFriendlyName))
            {
                site.ID   = this.SiteIdentifier;
                site.Name = this.SiteFriendlyName;
            }

            // Generate file.
            ASRVaultCreds vaultCreds = RecoveryServicesClient.GenerateVaultCredential(
                cert,
                this.Vault,
                site);

            string filePath = string.IsNullOrEmpty(this.Path) ? Utilities.GetDefaultPath() : this.Path;
            string fileName = this.GenerateFileName();

            // write the content to a file.
            VaultSettingsFilePath output = new VaultSettingsFilePath()
            {
                FilePath = Utilities.WriteToFile <ASRVaultCreds>(vaultCreds, filePath, fileName)
            };

            // print the path to the user.
            this.WriteObject(output, true);
        }
        /// <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,
            VaultCertificateResponse acsDetails,
            string channelIntegrityKey,
            ARSVault vault,
            ASRSite site)
        {
            string serializedCertificate = Convert.ToBase64String(managementCert.Export(X509ContentType.Pfx));

            AcsNamespace acsNamespace = new AcsNamespace(acsDetails.Properties as ResourceCertificateAndAcsDetails);

            string resourceProviderNamespace = string.Empty;
            string resourceType = string.Empty;

            Utilities.GetResourceProviderNamespaceAndType(vault.ID, out resourceProviderNamespace, out resourceType);
            ASRVaultCreds vaultCreds = new ASRVaultCreds(
                vault.SubscriptionId,
                vault.Name,
                serializedCertificate,
                acsNamespace,
                channelIntegrityKey,
                vault.ResourceGroupName,
                site.ID,
                site.Name,
                resourceProviderNamespace,
                resourceType,
                vault.Location);

            return(vaultCreds);
        }
Esempio n. 3
0
        private ASRVaultCreds ReadAadASRVaultCreds()
        {
            ASRVaultCreds asrVaultCreds;
            var           serializer = new DataContractSerializer(typeof(RSVaultAsrCreds));

            using (var s = new FileStream(
                       this.Path,
                       FileMode.Open,
                       FileAccess.Read,
                       FileShare.Read))
            {
                RSVaultAsrCreds aadCreds = (RSVaultAsrCreds)serializer.ReadObject(s);
                asrVaultCreds = new ASRVaultCreds();
                asrVaultCreds.ChannelIntegrityKey = aadCreds.ChannelIntegrityKey;
                asrVaultCreds.ResourceGroupName   = aadCreds.VaultDetails.ResourceGroup;
                asrVaultCreds.Version             = aadCreds.Version;
                asrVaultCreds.SiteId            = aadCreds.SiteId;
                asrVaultCreds.SiteName          = aadCreds.SiteName;
                asrVaultCreds.ResourceNamespace = aadCreds.VaultDetails.ProviderNamespace;
                asrVaultCreds.ARMResourceType   = aadCreds.VaultDetails.ResourceType;
                asrVaultCreds.ResourceName      = aadCreds.VaultDetails.ResourceName;
                asrVaultCreds.PrivateEndpointStateForSiteRecovery = aadCreds.PrivateEndpointStateForSiteRecovery;
            }
            return(asrVaultCreds);
        }
Esempio n. 4
0
 /// <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;
 }
Esempio n. 5
0
        /// <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.ResourceGroupName,
                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);
        }
        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");
            this.vaultName             = "VaultUpgrade";
            this.location          = "South India";
            this.resourceType      = "HyperVRecoveryManagerVault";
            this.targetRgName      = "test-rg";
            this.resourceNamespace = "WAHyperVRecoveryManager";
            this.cloudServiceName  = "CS-South-India-RecoveryServices";

            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();
        }
        /// <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>
        /// <param name="authType">authentication type</param>
        /// <returns>credential object</returns>
        public ASRVaultCreds GenerateVaultCredential(
            X509Certificate2 managementCert,
            ARSVault vault,
            ASRSite site,
            string authType)
        {
            ASRVaultCreds currentVaultContext = PSRecoveryServicesClient.arsVaultCreds;

            string resourceProviderNamespace = string.Empty;
            string resourceType = string.Empty;

            Utilities.GetResourceProviderNamespaceAndType(vault.ID, out resourceProviderNamespace, out resourceType);

            Logger.Instance.WriteDebug(string.Format(
                                           "GenerateVaultCredential resourceProviderNamespace = {0}, resourceType = {1}",
                                           resourceProviderNamespace,
                                           resourceType));

            // Update vault settings with the working vault to generate file
            Utilities.UpdateCurrentVaultContext(new ASRVaultCreds()
            {
                ResourceGroupName = vault.ResourceGroupName,
                ResourceName      = vault.Name,
                ResourceNamespace = resourceProviderNamespace,
                ARMResourceType   = resourceType
            });

            // Get Channel Integrity key
            string channelIntegrityKey;
            string getChannelIntegrityKey = this.GetCurrentVaultChannelIntegrityKey();

            // 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.

            // Upload certificate
            VaultCertificateResponse uploadCertificate = this.UpdateVaultCertificate(
                managementCert,
                authType);

            channelIntegrityKey = getChannelIntegrityKey;

            ASRVaultCreds arsVaultCreds = this.GenerateCredentialObject(
                managementCert,
                uploadCertificate,
                channelIntegrityKey,
                vault,
                site);

            // Update back the original vault settings
            Utilities.UpdateCurrentVaultContext(currentVaultContext);

            return(arsVaultCreds);
        }
Esempio n. 8
0
        /// <summary>
        /// ProcessRecord of the command.
        /// </summary>
        protected override void ProcessRecord()
        {
            // Validate the Vault
            RecoveryServicesClient.ValidateVaultSettings(
                this.Vault.Name,
                this.Vault.ResouceGroupName);

            // Change the vault context
            ASRVaultCreds vaultCreds = RecoveryServicesClient.ChangeVaultContext(this.Vault);

            this.WriteObject(new ASRVaultSettings(PSRecoveryServicesClient.asrVaultCreds));
        }
        /// <summary>
        /// ProcessRecord of the command.
        /// </summary>
        public override void ExecuteCmdlet()
        {
            // Validate the Vault
            RecoveryServicesClient.ValidateVaultSettings(
                this.Vault.Name,
                this.Vault.ResouceGroupName);

            // Change the vault context
            ASRVaultCreds vaultCreds = RecoveryServicesClient.ChangeVaultContext(this.Vault);

            this.WriteObject(new ASRVaultSettings(
                                 PSRecoveryServicesClient.asrVaultCreds.ResourceName,
                                 PSRecoveryServicesClient.asrVaultCreds.ResourceGroupName));
        }
Esempio n. 10
0
        /// <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;
            }
        }
Esempio n. 11
0
        /// <summary>
        /// Imports Azure Site Recovery Vault settings.
        /// </summary>
        /// <param name="asrVaultCreds">ASR Vault credentials</param>
        public static void UpdateVaultSettings(ASRVaultCreds asrVaultCreds)
        {
            object updateVaultSettingsOneAtATime = new object();

            lock (updateVaultSettingsOneAtATime)
            {
                PSRecoveryServicesClient.asrVaultCreds.ResourceName =
                    asrVaultCreds.ResourceName;
                PSRecoveryServicesClient.asrVaultCreds.ResourceGroupName =
                    asrVaultCreds.ResourceGroupName;
                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, 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);
        }
        protected RecoveryServicesTestsBase()
        {
            if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("VAULT_SETTINGS_FILE_PATH")))
            {
                Environment.SetEnvironmentVariable("VAULT_SETTINGS_FILE_PATH", "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();
        }
Esempio n. 14
0
        /// <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>
        ///     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);
            }
        }
Esempio n. 16
0
        /// <summary>
        ///     Updates current Vault context.
        /// </summary>
        /// <param name="asrVaultCreds">ASR Vault credentials</param>
        public static void UpdateCurrentVaultContext(
            ASRVaultCreds asrVaultCreds)
        {
            var updateVaultContextOneAtATime = new object();

            lock (updateVaultContextOneAtATime)
            {
                PSRecoveryServicesClient.asrVaultCreds.ResourceName      = asrVaultCreds.ResourceName;
                PSRecoveryServicesClient.asrVaultCreds.ResourceGroupName =
                    asrVaultCreds.ResourceGroupName;
                PSRecoveryServicesClient.asrVaultCreds.ChannelIntegrityKey =
                    asrVaultCreds.ChannelIntegrityKey;
                PSRecoveryServicesClient.asrVaultCreds.ResourceNamespace =
                    asrVaultCreds.ResourceNamespace;
                PSRecoveryServicesClient.asrVaultCreds.ARMResourceType =
                    asrVaultCreds.ARMResourceType;
            }
        }
        protected AsrTestsBase()
        {
            this.vaultSettingsFilePath = Path.Combine(
                AppDomain.CurrentDomain.BaseDirectory,
                "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))
                    {
                        this.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(
                          string.Format(
                              "Vault settings file not found at '{0}', please pass the file downloaded from portal",
                              this.vaultSettingsFilePath));
            }

            this.helper = new EnvironmentSetupHelper();
        }
Esempio n. 18
0
        /// <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);
            }
        }
Esempio n. 19
0
        /// <summary>
        /// Method to execute the command
        /// </summary>
        private void GetByObject()
        {
            IAzureSubscription subscription = this.Profile.Context.Subscription;

            this.Vault.SubscriptionId = subscription.Id.ToString();

            CloudService cloudService = RecoveryServicesClient.GetCloudServiceForVault(this.Vault);

            this.Vault.CloudServiceName = cloudService.Name;

            // Generate certificate
            X509Certificate2 cert = CertUtils.CreateSelfSignedCertificate(VaultCertificateExpiryInHoursForHRM, subscription.Id.ToString(), this.Vault.Name);

            var site = new Site();

            if (this.Site != null)
            {
                site.ID   = this.Site.ID;
                site.Name = this.Site.Name;
                site.Type = this.Site.Type;
            }

            // Generate file.
            ASRVaultCreds vaultCreds = RecoveryServicesClient.GenerateVaultCredential(
                cert,
                this.Vault,
                site);

            string filePath = string.IsNullOrEmpty(this.Path) ? Utilities.GetDefaultPath() : this.Path;
            string fileName = this.GenerateFileName();

            // write the content to a file.
            VaultSettingsFilePath output = new VaultSettingsFilePath()
            {
                FilePath = Utilities.WriteToFile <ASRVaultCreds>(vaultCreds, filePath, fileName)
            };

            // print the path to the user.
            this.WriteObject(output, true);
        }
        /// <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);
            }
        }
Esempio n. 21
0
        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();
        }
Esempio n. 22
0
        /// <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));
            }
        }
Esempio n. 23
0
        /// <summary>
        /// ProcessRecord of the command.
        /// </summary>
        public override void ExecuteCmdlet()
        {
            this.WriteVerbose("Vault Settings File path: " + this.Path);

            ASRVaultCreds asrVaultCreds = null;

            if (File.Exists(this.Path))
            {
                try
                {
                    this.WriteWarningWithTimestamp(
                        string.Format(
                            Properties.Resources.CmdletWillBeDeprecatedSoon,
                            this.MyInvocation.MyCommand.Name));

                    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(Properties.Resources.InvalidXml, xmlException));
                }
                catch (SerializationException serializationException)
                {
                    throw new SerializationException(
                              string.Format(Properties.Resources.InvalidXml, serializationException));
                }
            }
            else
            {
                throw new FileNotFoundException(
                          Properties.Resources.VaultSettingFileNotFound,
                          this.Path);
            }

            // Validate required parameters taken from the Vault settings file.
            if (string.IsNullOrEmpty(asrVaultCreds.ResourceName))
            {
                throw new ArgumentException(
                          Properties.Resources.ResourceNameNullOrEmpty,
                          asrVaultCreds.ResourceName);
            }

            if (string.IsNullOrEmpty(asrVaultCreds.CloudServiceName))
            {
                throw new ArgumentException(
                          Properties.Resources.CloudServiceNameNullOrEmpty,
                          asrVaultCreds.CloudServiceName);
            }

            try
            {
                RecoveryServicesClient.ValidateVaultSettings(
                    asrVaultCreds.ResourceName,
                    asrVaultCreds.CloudServiceName);

                Utilities.UpdateVaultSettings(asrVaultCreds);
                this.WriteObject(new ASRVaultSettings(
                                     asrVaultCreds.ResourceName,
                                     asrVaultCreds.CloudServiceName));
            }
            catch (Exception exception)
            {
                this.HandleException(exception);
            }
        }
        /// <summary>
        /// Method to execute the command
        /// </summary>
        private void GetSiteRecoveryCredentials()
        {
            IAzureSubscription subscription = DefaultProfile.DefaultContext.Subscription;

            // Generate certificate
            X509Certificate2 cert = CertUtils.CreateSelfSignedCertificate(
                VaultCertificateExpiryInHoursForHRM,
                subscription.Id.ToString(),
                this.Vault.Name);

            ASRSite site = new ASRSite();

            if (!string.IsNullOrEmpty(this.SiteIdentifier) &&
                !string.IsNullOrEmpty(this.SiteFriendlyName))
            {
                site.ID   = this.SiteIdentifier;
                site.Name = this.SiteFriendlyName;
            }

            string fileName = this.GenerateFileName();

            string filePath = string.IsNullOrEmpty(this.Path) ? Utilities.GetDefaultPath() : this.Path;

            // Generate file.
            if (RecoveryServicesClient.getVaultAuthType(this.Vault.ResourceGroupName, this.Vault.Name) == 0)
            {
                ASRVaultCreds vaultCreds = RecoveryServicesClient.GenerateVaultCredential(
                    cert,
                    this.Vault,
                    site,
                    AuthType.ACS);

                // write the content to a file.
                VaultSettingsFilePath output = new VaultSettingsFilePath()
                {
                    FilePath = Utilities.WriteToFile <ASRVaultCreds>(vaultCreds, filePath, fileName)
                };

                // print the path to the user.
                this.WriteObject(output, true);
            }
            else
            {
                string fullFilePath = System.IO.Path.Combine(filePath, fileName);
                WriteDebug(
                    string.Format(
                        CultureInfo.InvariantCulture,
                        Resources.ExecutingGetVaultCredCmdlet,
                        subscription.Id,
                        this.Vault.ResourceGroupName,
                        this.Vault.Name,
                        fullFilePath));

                VaultCertificateResponse vaultCertificateResponse = null;
                try
                {
                    // Upload cert into ID Mgmt
                    WriteDebug(string.Format(CultureInfo.InvariantCulture, Resources.UploadingCertToIdmgmt));
                    vaultCertificateResponse = UploadCert(cert);
                    WriteDebug(string.Format(CultureInfo.InvariantCulture, Resources.UploadedCertToIdmgmt));

                    // generate vault credentials
                    string vaultCredsFileContent = GenerateVaultCredsForSiteRecovery(
                        cert,
                        subscription.Id,
                        vaultCertificateResponse,
                        site);

                    WriteDebug(string.Format(Resources.SavingVaultCred, fullFilePath));

                    File.WriteAllBytes(fullFilePath, Encoding.UTF8.GetBytes(vaultCredsFileContent));

                    VaultSettingsFilePath output = new VaultSettingsFilePath()
                    {
                        FilePath = fullFilePath,
                    };

                    // Output filename back to user
                    WriteObject(output, true);
                }
                catch (Exception exception)
                {
                    throw exception;
                }
            }
        }
        /// <summary>
        /// ProcessRecord of the command.
        /// </summary>
        public override void ExecuteSiteRecoveryCmdlet()
        {
            base.ExecuteSiteRecoveryCmdlet();

            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(Properties.Resources.InvalidXml, xmlException));
                }
                catch (SerializationException serializationException)
                {
                    throw new SerializationException(
                              string.Format(Properties.Resources.InvalidXml, serializationException));
                }
            }
            else
            {
                throw new FileNotFoundException(
                          Properties.Resources.VaultSettingFileNotFound,
                          this.Path);
            }

            // Validate required parameters taken from the Vault settings file.
            if (string.IsNullOrEmpty(asrVaultCreds.ResourceName))
            {
                throw new ArgumentException(
                          Properties.Resources.ResourceNameNullOrEmpty,
                          asrVaultCreds.ResourceName);
            }

            if (string.IsNullOrEmpty(asrVaultCreds.ResourceGroupName))
            {
                throw new ArgumentException(
                          Properties.Resources.CloudServiceNameNullOrEmpty,
                          asrVaultCreds.ResourceGroupName);
            }

            Utilities.UpdateCurrentVaultContext(asrVaultCreds);

            RecoveryServicesClient.ValidateVaultSettings(
                asrVaultCreds.ResourceName,
                asrVaultCreds.ResourceGroupName);

            this.WriteObject(new ASRVaultSettings(asrVaultCreds));
        }