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); }
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); }