/// <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);
            }
        }
Example #2
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);
            }
        }
        /// <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);
        }
Example #5
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));
            }
        }
Example #6
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
                    {
                        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));
            }
        }