Ejemplo n.º 1
0
        /// <summary>
        /// Get the status of a deployment.
        /// </summary>
        /// <param name="requestId"></param>
        /// <param name="correlationId"></param>
        /// <param name="subscriptionId">ISV Azure subscription id</param>
        /// <param name="resourceGroup">ISV Azure resource group</param>
        /// <param name="deploymentName"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <DeploymentExtendedResult> GetDeploymentAsync(
            Guid requestId,
            Guid correlationId,
            string subscriptionId,
            string resourceGroup,
            string deploymentName,
            CancellationToken cancellationToken = default)
        {
            try
            {
                var requestUrl = GetRequestUri(subscriptionId, resourceGroup, deploymentName);

                var bearerToken = await _keyVaultHelper.GetBearerToken(
                    _options.AzureActiveDirectory,
                    _options.ClientService.AuthenticationResourceId);

                var response = await SendRequestAndReturnResult(
                    HttpMethod.Get,
                    requestUrl,
                    requestId,
                    correlationId,
                    bearerToken,
                    null,
                    "",
                    cancellationToken);

                return(await DeploymentRequestResult.ParseAsync <DeploymentExtendedResult>(response));
            }
            catch (LunaServerException e)
            {
                throw new LunaProvisioningException($"Cannot get deployment information for {deploymentName}.", e.IsRetryable, ProvisioningState.ArmTemplatePending, e);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Validates whether the specified template is syntactically correct and will be accepted by Azure Resource Manager
        /// </summary>
        /// <param name="requestId"></param>
        /// <param name="correlationId"></param>
        /// <param name="subscriptionId"></param>
        /// <param name="resourceGroup"></param>
        /// <param name="deploymentName"></param>
        /// <param name="deploymentMode"></param>
        /// <param name="templatePath"></param>
        /// <param name="parameterPath"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <DeploymentValidateResult> ValidateTemplateAsync(
            Guid requestId,
            Guid correlationId,
            string subscriptionId,
            string resourceGroup,
            string deploymentName,
            string deploymentMode,
            string templatePath,
            string parameterPath,
            CancellationToken cancellationToken = default
            )
        {
            try
            {
                var requestUrl = GetRequestUri(subscriptionId, resourceGroup, deploymentName);

                var body = new DeploymentRequestBody
                {
                    Properties = new DeploymentProperties
                    {
                        Mode         = deploymentMode,
                        TemplateLink = new TemplateLink {
                            Uri = templatePath
                        },
                        ParametersLink = new ParametersLink {
                            Uri = parameterPath
                        },
                    }
                };

                var requestBody = JsonConvert.SerializeObject(body);
                var bearerToken = await _keyVaultHelper.GetBearerToken(
                    _options.AzureActiveDirectory,
                    _options.ClientService.AuthenticationResourceId);

                var response = await SendRequestAndReturnResult(
                    HttpMethod.Post,
                    requestUrl,
                    requestId,
                    correlationId,
                    bearerToken,
                    null,
                    requestBody,
                    cancellationToken
                    );

                return(await DeploymentRequestResult.ParseAsync <DeploymentValidateResult>(response));
            }
            catch (LunaServerException e)
            {
                throw new LunaProvisioningException($"Cannot validate template for deployment {deploymentName}.", e.IsRetryable, ProvisioningState.NotSpecified, e);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Create a resource group under the given host subscription in the specified location with the specified name
        /// </summary>
        /// <param name="requestId"></param>
        /// <param name="correlationId"></param>
        /// <param name="subscriptionId">The ISV's host subscription id</param>
        /// <param name="resourceGroup">The name for the resource group</param>
        /// <param name="location">The location for the resource group</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <ResourceGroupResult> CreateOrUpdateResourceGroupAsync(
            Guid requestId,
            Guid correlationId,
            string subscriptionId,
            string resourceGroup,
            string location,
            CancellationToken cancellationToken = default
            )
        {
            try
            {
                var requestUrl = GetRequestUri(subscriptionId, resourceGroup);

                var body = new ResourceGroupRequestBody
                {
                    Location = location
                };

                var requestBody = JsonConvert.SerializeObject(body);
                var bearerToken = await _keyVaultHelper.GetBearerToken(
                    _options.AzureActiveDirectory,
                    _options.ClientService.AuthenticationResourceId);

                var response = await SendRequestAndReturnResult(
                    HttpMethod.Put,
                    requestUrl,
                    requestId,
                    correlationId,
                    bearerToken,
                    null,
                    requestBody,
                    cancellationToken
                    );

                return(await DeploymentRequestResult.ParseAsync <ResourceGroupResult>(response));
            }
            catch (LunaServerException e)
            {
                throw new LunaProvisioningException($"Cannot create or update resource group {resourceGroup}.", e.IsRetryable, ProvisioningState.DeployResourceGroupFailed, e);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Deploy to a resource group
        /// </summary>
        /// <remarks>Default to "Complete" deployment</remarks>
        /// <param name="requestId"></param>
        /// <param name="correlationId"></param>
        /// <param name="subscriptionId">ISV Azure subscription id</param>
        /// <param name="resourceGroup">ISV Azure resource group</param>
        /// <param name="deploymentName">Deployment name</param>
        /// <param name="templatePath">Link to template file</param>
        /// <param name="parametersPath">Link to parameter file</param>
        /// <param name="rollbackToLastSuccessful">If true, the rolllback property will be set in the request body</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <DeploymentExtendedResult> PutDeploymentAsync(
            Guid requestId,
            Guid correlationId,
            string subscriptionId,
            string resourceGroup,
            string deploymentName,
            string templatePath                 = default,
            object template                     = default,
            string parametersPath               = default,
            object parameters                   = default,
            bool rollbackToLastSuccessful       = default,
            CancellationToken cancellationToken = default)
        {
            try
            {
                if ((templatePath == null) == (template == null))
                {
                    throw new LunaBadRequestUserException(LoggingUtils.ComposeBadXorArgumentMessage("templatePath", "template"), UserErrorCode.InvalidParameter);
                }
                if ((parametersPath == null) == (parameters == null))
                {
                    throw new LunaBadRequestUserException(LoggingUtils.ComposeBadXorArgumentMessage("parametersPath", "parameters"), UserErrorCode.InvalidParameter);
                }

                var requestUrl = GetRequestUri(subscriptionId, resourceGroup, deploymentName);

                var body = rollbackToLastSuccessful ?
                           new DeploymentRequestBody
                {
                    Properties = new DeploymentProperties
                    {
                        Mode         = nameof(DeploymentMode.Complete),
                        TemplateLink = new TemplateLink {
                            Uri = templatePath
                        },
                        Template          = template,
                        Parameters        = parameters,
                        OnErrorDeployment = new OnErrorDeployment {
                            Type = nameof(DeploymentRollback.LastSuccessful)
                        }
                    }
                } :
                new DeploymentRequestBody
                {
                    Properties = new DeploymentProperties
                    {
                        Mode         = nameof(DeploymentMode.Complete),
                        TemplateLink = new TemplateLink {
                            Uri = templatePath
                        },
                        Template   = template,
                        Parameters = parameters
                    }
                }
                ;

                var requestBody = JsonConvert.SerializeObject(body);
                var bearerToken = await _keyVaultHelper.GetBearerToken(
                    _options.AzureActiveDirectory,
                    _options.ClientService.AuthenticationResourceId);

                var response = await SendRequestAndReturnResult(
                    HttpMethod.Put,
                    requestUrl,
                    requestId,
                    correlationId,
                    bearerToken,
                    null,
                    requestBody,
                    cancellationToken
                    );

                return(await DeploymentRequestResult.ParseAsync <DeploymentExtendedResult>(response));
            }
            catch (LunaServerException e)
            {
                throw new LunaProvisioningException("Cannot deploy template.", e.IsRetryable, ProvisioningState.ArmTemplatePending, e);
            }
        }