public void Install(RunningDeployment deployment)
        {
            var variables         = deployment.Variables;
            var subscriptionId    = variables[SpecialVariables.Action.Azure.SubscriptionId];
            var tenantId          = variables[SpecialVariables.Action.Azure.TenantId];
            var clientId          = variables[SpecialVariables.Action.Azure.ClientId];
            var password          = variables[SpecialVariables.Action.Azure.Password];
            var resourceGroupName = variables[SpecialVariables.Action.Azure.ResourceGroupName];
            var deploymentName    = !string.IsNullOrWhiteSpace(variables[SpecialVariables.Action.Azure.ResourceGroupDeploymentName])
                    ? variables[SpecialVariables.Action.Azure.ResourceGroupDeploymentName]
                    : GenerateDeploymentNameFromStepName(variables[SpecialVariables.Action.Name]);
            var deploymentMode = (DeploymentMode)Enum.Parse(typeof(DeploymentMode),
                                                            variables[SpecialVariables.Action.Azure.ResourceGroupDeploymentMode]);
            var template   = ResolveAndSubstituteFile(templateFile, filesInPackage, variables);
            var parameters = !string.IsNullOrWhiteSpace(templateParametersFile)
                ? parameterNormalizer.Normalize(ResolveAndSubstituteFile(templateParametersFile, filesInPackage, variables))
                : null;

            Log.Info(
                $"Deploying Resource Group {resourceGroupName} in subscription {subscriptionId}.\nDeployment name: {deploymentName}\nDeployment mode: {deploymentMode}");

            // We re-create the client each time it is required in order to get a new authorization-token. Else, the token can expire during long-running deployments.
            Func <IResourceManagementClient> createArmClient = () => new ResourceManagementClient(new TokenCloudCredentials(subscriptionId, ServicePrincipal.GetAuthorizationToken(tenantId, clientId, password)));

            CreateDeployment(createArmClient, resourceGroupName, deploymentName, deploymentMode, template, parameters);
            PollForCompletion(createArmClient, resourceGroupName, deploymentName, variables);
        }
예제 #2
0
        public async Task Execute(RunningDeployment deployment)
        {
            var variables      = deployment.Variables;
            var subscriptionId = variables[AzureAccountVariables.SubscriptionId];
            var tenantId       = variables[AzureAccountVariables.TenantId];
            var clientId       = variables[AzureAccountVariables.ClientId];
            var password       = variables[AzureAccountVariables.Password];

            var templateFile           = variables.Get(SpecialVariables.Action.Azure.Template, "template.json");
            var templateParametersFile = variables.Get(SpecialVariables.Action.Azure.TemplateParameters, "parameters.json");
            var filesInPackage         = variables.Get(SpecialVariables.Action.Azure.TemplateSource, String.Empty) == "Package";

            if (filesInPackage)
            {
                templateFile           = variables.Get(SpecialVariables.Action.Azure.ResourceGroupTemplate);
                templateParametersFile = variables.Get(SpecialVariables.Action.Azure.ResourceGroupTemplateParameters);
            }
            var resourceManagementEndpoint = variables.Get(AzureAccountVariables.ResourceManagementEndPoint, DefaultVariables.ResourceManagementEndpoint);

            if (resourceManagementEndpoint != DefaultVariables.ResourceManagementEndpoint)
            {
                log.InfoFormat("Using override for resource management endpoint - {0}", resourceManagementEndpoint);
            }

            var activeDirectoryEndPoint = variables.Get(AzureAccountVariables.ActiveDirectoryEndPoint, DefaultVariables.ActiveDirectoryEndpoint);

            log.InfoFormat("Using override for Azure Active Directory endpoint - {0}", activeDirectoryEndPoint);

            var resourceGroupName = variables[SpecialVariables.Action.Azure.ResourceGroupName];
            var deploymentName    = !string.IsNullOrWhiteSpace(variables[SpecialVariables.Action.Azure.ResourceGroupDeploymentName])
                ? variables[SpecialVariables.Action.Azure.ResourceGroupDeploymentName]
                : GenerateDeploymentNameFromStepName(variables[ActionVariables.Name]);
            var deploymentMode = (DeploymentMode)Enum.Parse(typeof(DeploymentMode),
                                                            variables[SpecialVariables.Action.Azure.ResourceGroupDeploymentMode]);
            var template   = templateService.GetSubstitutedTemplateContent(templateFile, filesInPackage, variables);
            var parameters = !string.IsNullOrWhiteSpace(templateParametersFile)
                ? parameterNormalizer.Normalize(templateService.GetSubstitutedTemplateContent(templateParametersFile, filesInPackage, variables))
                : null;

            log.Info($"Deploying Resource Group {resourceGroupName} in subscription {subscriptionId}.\nDeployment name: {deploymentName}\nDeployment mode: {deploymentMode}");

            // We re-create the client each time it is required in order to get a new authorization-token. Else, the token can expire during long-running deployments.
            Func <Task <IResourceManagementClient> > createArmClient = async() =>
            {
                var token           = new TokenCredentials(await ServicePrincipal.GetAuthorizationToken(tenantId, clientId, password, resourceManagementEndpoint, activeDirectoryEndPoint));
                var resourcesClient = new ResourceManagementClient(token)
                {
                    SubscriptionId = subscriptionId,
                    BaseUri        = new Uri(resourceManagementEndpoint),
                };
                resourcesClient.HttpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
                resourcesClient.HttpClient.BaseAddress = new Uri(resourceManagementEndpoint);
                return(resourcesClient);
            };

            await CreateDeployment(createArmClient, resourceGroupName, deploymentName, deploymentMode, template, parameters);
            await PollForCompletion(createArmClient, resourceGroupName, deploymentName, variables);
        }
        public void Install(RunningDeployment deployment)
        {
            var variables                  = deployment.Variables;
            var subscriptionId             = variables[SpecialVariables.Action.Azure.SubscriptionId];
            var tenantId                   = variables[SpecialVariables.Action.Azure.TenantId];
            var clientId                   = variables[SpecialVariables.Action.Azure.ClientId];
            var password                   = variables[SpecialVariables.Action.Azure.Password];
            var resourceManagementEndpoint = variables.Get(SpecialVariables.Action.Azure.ResourceManagementEndPoint, DefaultVariables.ResourceManagementEndpoint);

            if (resourceManagementEndpoint != DefaultVariables.ResourceManagementEndpoint)
            {
                Log.Info("Using override for resource management endpoint - {0}", resourceManagementEndpoint);
            }

            var activeDirectoryEndPoint = variables.Get(SpecialVariables.Action.Azure.ActiveDirectoryEndPoint, DefaultVariables.ActiveDirectoryEndpoint);

            if (activeDirectoryEndPoint != DefaultVariables.ActiveDirectoryEndpoint)
            {
                Log.Info("Using override for Azure Active Directory endpoint - {0}", activeDirectoryEndPoint);
            }

            var resourceGroupName = variables[SpecialVariables.Action.Azure.ResourceGroupName];
            var deploymentName    = !string.IsNullOrWhiteSpace(variables[SpecialVariables.Action.Azure.ResourceGroupDeploymentName])
                    ? variables[SpecialVariables.Action.Azure.ResourceGroupDeploymentName]
                    : GenerateDeploymentNameFromStepName(variables[SpecialVariables.Action.Name]);
            var deploymentMode = (DeploymentMode)Enum.Parse(typeof(DeploymentMode),
                                                            variables[SpecialVariables.Action.Azure.ResourceGroupDeploymentMode]);
            var template   = TemplateReplacement.ResolveAndSubstituteFile(fileSystem, templateFile, filesInPackage, variables);
            var parameters = !string.IsNullOrWhiteSpace(templateParametersFile)
                ? parameterNormalizer.Normalize(TemplateReplacement.ResolveAndSubstituteFile(fileSystem, templateParametersFile, filesInPackage, variables))
                : null;

            Log.Info($"Deploying Resource Group {resourceGroupName} in subscription {subscriptionId}.\nDeployment name: {deploymentName}\nDeployment mode: {deploymentMode}");

            // We re-create the client each time it is required in order to get a new authorization-token. Else, the token can expire during long-running deployments.
            Func <IResourceManagementClient> createArmClient = () =>
            {
                var token           = new TokenCredentials(ServicePrincipal.GetAuthorizationToken(tenantId, clientId, password, resourceManagementEndpoint, activeDirectoryEndPoint));
                var resourcesClient = new ResourceManagementClient(token)
                {
                    SubscriptionId = subscriptionId,
                    BaseUri        = new Uri(resourceManagementEndpoint),
                };
                resourcesClient.HttpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
                resourcesClient.HttpClient.BaseAddress = new Uri(resourceManagementEndpoint);
                return(resourcesClient);
            };

            CreateDeployment(createArmClient, resourceGroupName, deploymentName, deploymentMode, template, parameters);
            PollForCompletion(createArmClient, resourceGroupName, deploymentName, variables);
        }