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);
        }
Beispiel #2
0
 public string GetSubstitutedTemplateContent(string relativePath, bool inPackage, IVariables variables)
 {
     return(replacement.ResolveAndSubstituteFile(
                () => resolver.Resolve(relativePath, inPackage, variables).Value,
                fileSystem.ReadFile,
                variables));
 }
        private void DeployCloudFormation(RunningDeployment deployment)
        {
            Guard.NotNull(deployment, "deployment can not be null");

            WriteCredentialInfo(deployment);

            WaitForStackToComplete(deployment, false);

            TemplateReplacement.ResolveAndSubstituteFile(
                fileSystem,
                templateFile,
                filesInPackage,
                deployment.Variables)
            .Tee(template => DeployStack(deployment, template));

            GetOutputVars(deployment);
        }