コード例 #1
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);
            }
        }