public async Task <Template> Create(DeploymentDefinition creatorConfig)
        {
            var template = EmptyTemplate;

            template.Parameters.Add(ApiServiceNameParameter.Key, ApiServiceNameParameter.Value);

            var resources = new List <TemplateResource>();

            foreach (var tag in creatorConfig.Tags)
            {
                var tagTemplateResource = new TagTemplateResouce()
                {
                    Name       = $"[concat(parameters('ApimServiceName'), '/{tag.Name}')]",
                    Properties = new TagPropertise()
                    {
                        DisplayName = tag.DisplayName
                    },
                    DependsOn = new string[0]
                };

                resources.Add(tagTemplateResource);
            }

            template.Resources = resources.ToArray();

            return(await Task.FromResult(template));
        }
Esempio n. 2
0
 private bool ValidateApis(DeploymentDefinition deploymentDefinition)
 {
     if (deploymentDefinition.Apis == null)
     {
         throw new ArgumentException("API configuration is required");
     }
     foreach (ApiDeploymentDefinition api in deploymentDefinition.Apis)
     {
         if (api.Name == null)
         {
             throw new ArgumentException("API name is required");
         }
         if (api.OpenApiSpec == null)
         {
             throw new ArgumentException("Open API Spec is required");
         }
         if (api.Path == null)
         {
             throw new ArgumentException("API path is required");
         }
         if (api.Operations != null)
         {
             foreach (KeyValuePair <string, OperationsDeploymentDefinition> operation in api.Operations)
             {
                 if (operation.Value == null || operation.Value.Policy == null)
                 {
                     throw new ArgumentException("Policy XML is required if an API operation is provided");
                 }
             }
         }
     }
     return(true);
 }
Esempio n. 3
0
        private async Task <DeploymentDefinition> AggregateDeploymentDefinitionsAsync(CommandLineOption option)
        {
            var deploymentDefinition = default(DeploymentDefinition);

            if (Directory.Exists(option.YamlConfigPath))
            {
                var fileDefinitionPaths = Directory.GetFiles(option.YamlConfigPath, "*.yml", new EnumerationOptions
                {
                    RecurseSubdirectories = true
                });

                deploymentDefinition = new DeploymentDefinition();

                foreach (var fileDefinitionPath in fileDefinitionPaths)
                {
                    var individualDefinition = await _fileReader.GetDeploymentDefinitionFromYaml(fileDefinitionPath);

                    deploymentDefinition = deploymentDefinition.MergeWith(individualDefinition);
                }
            }
            else
            {
                deploymentDefinition = await _fileReader.GetDeploymentDefinitionFromYaml(option.YamlConfigPath);
            }

            return(deploymentDefinition);
        }
Esempio n. 4
0
        private bool IsCreatorConfigValid(DeploymentDefinition creatorConfig)
        {
            var  creatorConfigurationValidator = new ConfigurationValidator();
            bool isValidCreatorConfig          = creatorConfigurationValidator.Validate(creatorConfig);

            return(isValidCreatorConfig);
        }
Esempio n. 5
0
 private IEnumerable <ArmTemplateResource <ApiProperties> > CreateApis(DeploymentDefinition deploymentDefinition)
 {
     return(new ArmTemplateResourceCreator <ApiDeploymentDefinition, ApiProperties>(_mapper)
            .ForDeploymentDefinitions(deploymentDefinition.Apis)
            .WithName(d => d.Name)
            .OfType(ResourceType.Api)
            .CheckDependencies()
            .CreateResources());
 }
Esempio n. 6
0
 private bool ValidateBaseProperties(DeploymentDefinition deploymentDefinition)
 {
     if (deploymentDefinition.Version == null)
     {
         throw new ArgumentException("Version is required");
     }
     if (deploymentDefinition.ApimServiceName == null)
     {
         throw new ArgumentException("APIM service name is required");
     }
     return(true);
 }
Esempio n. 7
0
        public bool Validate(DeploymentDefinition deploymentDefinition)
        {
            // ensure required parameters have been passed in

            return(ValidateBaseProperties(deploymentDefinition) &&
                   ValidateApis(deploymentDefinition) &&
                   ValidateApiVersionSets(deploymentDefinition) &&
                   ValidateProducts(deploymentDefinition) &&
                   ValidateLoggers(deploymentDefinition) &&
                   ValidateAuthorizationServers(deploymentDefinition) &&
                   ValidateBackends(deploymentDefinition));
        }
Esempio n. 8
0
 private bool ValidateAuthorizationServers(DeploymentDefinition deploymentDefinition)
 {
     if (deploymentDefinition.AuthorizationServers != null)
     {
         foreach (var authorizationServer in deploymentDefinition.AuthorizationServers)
         {
             if (authorizationServer.DisplayName == null)
             {
                 throw new ArgumentException("Display name is required if an Authorization Server is provided");
             }
         }
     }
     return(true);
 }
Esempio n. 9
0
 private bool ValidateBackends(DeploymentDefinition deploymentDefinition)
 {
     if (deploymentDefinition.Backends != null)
     {
         foreach (var backend in deploymentDefinition.Backends)
         {
             if (backend.Title == null)
             {
                 throw new ArgumentException("Title is required if a Backend is provided");
             }
         }
     }
     return(true);
 }
Esempio n. 10
0
 private bool ValidateLoggers(DeploymentDefinition deploymentDefinition)
 {
     if (deploymentDefinition.Loggers != null)
     {
         foreach (LoggerDeploymentDefinition logger in deploymentDefinition.Loggers)
         {
             if (logger.Name == null)
             {
                 throw new ArgumentException("Name is required if an Logger is provided");
             }
         }
     }
     return(true);
 }
        public IEnumerable <ArmTemplateResource> Create(DeploymentDefinition deploymentDefinition)
        {
            if (deploymentDefinition.AuthorizationServers.Count() == 0)
            {
                return(Array.Empty <ArmTemplateResource>());
            }

            Console.WriteLine("Creating authorization servers template");
            Console.WriteLine("------------------------------------------");

            return(new ArmTemplateResourceCreator <AuthorizationServerDeploymentDefinition, AuthorizationServerProperties>(_mapper)
                   .ForDeploymentDefinitions(deploymentDefinition.AuthorizationServers)
                   .WithName(d => d.DisplayName)
                   .OfType(ResourceType.AuthorizationServer)
                   .CreateResources());
        }
Esempio n. 12
0
        public IEnumerable <ArmTemplateResource> Create(DeploymentDefinition deploymentDefinition)
        {
            if (deploymentDefinition.Policy != null)
            {
                return(Array.Empty <ArmTemplateResource>());
            }

            Console.WriteLine("Creating global service policy template");
            Console.WriteLine("------------------------------------------");

            return(new ArmTemplateResourceCreator <DeploymentDefinition, PolicyProperties>(_mapper)
                   .ForDeploymentDefinition(deploymentDefinition)
                   .WithName((_) => "/policy")
                   .OfType(ResourceType.GlobalServicePolicy)
                   .CreateResourcesIf(d => d.Policy != null));
        }
Esempio n. 13
0
        public IEnumerable <ArmTemplateResource> Create(DeploymentDefinition deploymentDefinition)
        {
            if (deploymentDefinition.NamedValues.Count() == 0)
            {
                return(Array.Empty <ArmTemplateResource>());
            }

            Console.WriteLine("Creating named values resources");
            Console.WriteLine("------------------------------------------");

            return(new ArmTemplateResourceCreator <NamedValueDeploymentDefinition, NamedValueProperties>(_mapper)
                   .ForDeploymentDefinitions(deploymentDefinition.NamedValues)
                   .WithName(d => d.Name)
                   .OfType(ResourceType.NamedValue)
                   .CreateResources());
        }
Esempio n. 14
0
        public IEnumerable <ArmTemplateResource> Create(DeploymentDefinition deploymentDefinition)
        {
            if (deploymentDefinition.Tags.Count() == 0)
            {
                return(Array.Empty <ArmTemplateResource>());
            }

            Console.WriteLine("Creating tags template");
            Console.WriteLine("------------------------------------------");

            return(new ArmTemplateResourceCreator <TagDeploymentDefinition, TagProperties>(_mapper)
                   .ForDeploymentDefinitions(deploymentDefinition.Tags)
                   .WithName(d => d.Name)
                   .OfType(ResourceType.Tag)
                   .CreateResources());
        }
Esempio n. 15
0
        public IEnumerable <ArmTemplateResource> Create(DeploymentDefinition deploymentDefinition)
        {
            if (deploymentDefinition.Subscriptions.Count() == 0)
            {
                return(Array.Empty <ArmTemplateResource>());
            }

            Console.WriteLine("Creating subscriptions template");
            Console.WriteLine("------------------------------------------");

            return(new ArmTemplateResourceCreator <SubscriptionDeploymentDefinition, SubscriptionProperties>(_mapper)
                   .ForDeploymentDefinitions(deploymentDefinition.Subscriptions)
                   .WithName(d => d.Name)
                   .OfType(ResourceType.Subscription)
                   .CheckDependencies()
                   .CreateResources());
        }
Esempio n. 16
0
        private bool ValidateApiVersionSets(DeploymentDefinition deploymentDefinition)
        {
            if (deploymentDefinition.ApiVersionSets != null)
            {
                foreach (ApiVersionSetDeploymentDefinition apiVersionSet in deploymentDefinition.ApiVersionSets)
                {
                    if (apiVersionSet != null && apiVersionSet.DisplayName == null)
                    {
                        throw new ArgumentException("Display name is required if an API Version Set is provided");
                    }

                    if (apiVersionSet != null && apiVersionSet.Name == null)
                    {
                        throw new ArgumentException("Name is required if an API Version Set is provided");
                    }
                }
            }
            return(true);
        }
Esempio n. 17
0
        private bool ValidateProducts(DeploymentDefinition deploymentDefinition)
        {
            if (deploymentDefinition.Products != null)
            {
                foreach (var product in deploymentDefinition.Products)
                {
                    if (product.DisplayName == null)
                    {
                        throw new ArgumentException("Display name is required if an Product is provided");
                    }

                    if (product.Name == null)
                    {
                        throw new ArgumentException("Name is required if an Product is provided");
                    }
                }
            }

            return(true);
        }
Esempio n. 18
0
        public IEnumerable <ArmTemplateResource> Create(DeploymentDefinition deploymentDefinition)
        {
            if (deploymentDefinition.Products.Count() == 0)
            {
                return(Array.Empty <ArmTemplateResource>());
            }

            Console.WriteLine("Creating products template");
            Console.WriteLine("------------------------------------------");

            var resources = new List <ArmTemplateResource>();

            resources.AddRange(CreateProducts(deploymentDefinition));

            resources.AddRange(CreateProductPolicies(deploymentDefinition));

            resources.AddRange(CreateProductTags(deploymentDefinition));

            return(resources);
        }
        public static async Task <DeploymentResult> DeployAndConfigureAsync(DeploymentDefinition deploymentDefinition)
        {
            var windowsHostNames = new List <string>();

            var deployTasks = deploymentDefinition.WindowsTemplates
                              .Select(s =>
            {
                var hostName = "win_" + Guid.NewGuid();
                windowsHostNames.Add(hostName);
                return(PowerShellProxy.ExecuteCommandAsync(CreateWindowsDeploymentScriptBlock(s, hostName), "bajor"));
            }).ToList();


            var elkHostname = "elk_" + Guid.NewGuid();

            deployTasks.Add(
                PowerShellProxy.ExecuteCommandAsync(CreateElkDeploymentScriptBlock(deploymentDefinition.ElkTemplate, elkHostname),
                                                    "bajor"));


            await Task.WhenAll(deployTasks);

            var elkIp = await GetIpAddressFromVmName(elkHostname);

            var windowsIps = new List <string>();

            foreach (var hostname in windowsHostNames)
            {
                var winIp = await GetIpAddressFromVmName(hostname);

                windowsIps.Add(winIp);

                // Configure Windows VM
            }

            return(new DeploymentResult
            {
                ElkIp = elkIp,
                WindowsIps = windowsIps
            });
        }
Esempio n. 20
0
        private bool ValidateDeploymentDefinition(DeploymentDefinition deploymentDefinition)
        {
            var DeploymentDefinitionValidator = new DeploymentDefinitionValidator();

            return(DeploymentDefinitionValidator.Validate(deploymentDefinition));
        }
Esempio n. 21
0
 public ArmTemplateCreator(DeploymentDefinition deploymentDefinition, IMapper mapper)
 {
     _deploymentDefinition = deploymentDefinition;
     _mapper = mapper;
 }
Esempio n. 22
0
 private IEnumerable <ArmTemplateResource <ProductPolicyProperties> > CreateProductPolicies(DeploymentDefinition deploymentDefinition)
 {
     return(new ArmTemplateResourceCreator <ProductDeploymentDefinition, ProductPolicyProperties>(_mapper)
            .ForDeploymentDefinitions(deploymentDefinition.Products)
            .WithName(d => $"{d.Name}/policy")
            .OfType(ResourceType.ProductPolicy)
            .WhichDependsOnResourceOfType(ResourceType.Product)
            .WhichDependsOnResourceWithName(d => d.Name)
            .CreateResourcesIf(d => d.Policy != null, true));
 }
Esempio n. 23
0
        private IEnumerable <ArmTemplateResource <TagProductProperties> > CreateProductTags(DeploymentDefinition deploymentDefinition)
        {
            return(new ArmTemplateResourceCreator <ProductDeploymentDefinition, TagProductProperties>(_mapper)
                   .ForDeploymentDefinitions(deploymentDefinition.Products)
                   .UseResourceCreator(ProductDeploymentDefinition =>
            {
                var templateResources = new List <ArmTemplateResource <TagProductProperties> >();

                foreach (string tagDisplayName in ProductDeploymentDefinition.TagList)
                {
                    var tagName = ProductDeploymentDefinition.GetTagName(tagDisplayName);
                    var templateRsource = new ArmTemplateResource <TagProductProperties>(
                        $"{ProductDeploymentDefinition.Name}/{tagName}",
                        $"[concat(parameters('ApimServiceName'), '/{ProductDeploymentDefinition.Name}/{tagName}')]",
                        ResourceType.TagProduct,
                        new TagProductProperties(),
                        new string[]
                    {
                        $"[resourceId('{ResourceType.Product}', parameters('ApimServiceName'), '{ProductDeploymentDefinition.Name}')]",
                        $"[resourceId('{ResourceType.Tag}', parameters('ApimServiceName'), '{tagName}')]"
                    });

                    templateResources.Add(templateRsource);
                }

                return templateResources;
            })
                   .CreateResourcesIf(d => d.Tags != null, true));
        }
Esempio n. 24
0
        private IEnumerable <ArmTemplateResource <ProductApiProperties> > CreateProductApis(DeploymentDefinition deploymentDefinition)
        {
            return(new ArmTemplateResourceCreator <ApiDeploymentDefinition, ProductApiProperties>(_mapper)
                   .ForDeploymentDefinitions(deploymentDefinition.Apis)
                   .UseResourceCreator(apiDeploymentDefinition =>
            {
                var templateResources = new List <ArmTemplateResource <ProductApiProperties> >();
                foreach (string productDisplayName in apiDeploymentDefinition.ProductList)
                {
                    var productName = apiDeploymentDefinition.GetProductName(productDisplayName);
                    var dependencies = new List <string>()
                    {
                        $"[resourceId('{ResourceType.Api}', parameters('ApimServiceName'), '{apiDeploymentDefinition.Name}')]",
                        $"[resourceId('{ResourceType.Product}', parameters('ApimServiceName'), '{productName}')]"
                    };

                    var templateResource = new ArmTemplateResource <ProductApiProperties>(
                        $"{productName}/{apiDeploymentDefinition.Name}",
                        $"[concat(parameters('ApimServiceName'), '/{productName}/{apiDeploymentDefinition.Name}')]",
                        ResourceType.ProductApi,
                        new ProductApiProperties(),
                        dependencies);

                    templateResources.Add(templateResource);
                }

                return templateResources;
            })
                   .CreateResourcesIf(d => d.IsDependentOnProducts(), true));
        }
Esempio n. 25
0
 public ArmTemplateCreator(DeploymentDefinition creatorConfig)
 {
     _creatorConfig     = creatorConfig;
     _fileWriter        = new FileWriter();
     _templateFileNames = new TemplateFileName(_creatorConfig.PrefixFileName, _creatorConfig.MasterTemplateName);
 }
Esempio n. 26
0
 private IEnumerable <ArmTemplateResource <ApiPolicyProperties> > CreateApiPolicies(DeploymentDefinition deploymentDefinition)
 {
     return(new ArmTemplateResourceCreator <ApiDeploymentDefinition, ApiPolicyProperties>(_mapper)
            .ForDeploymentDefinitions(deploymentDefinition.Apis)
            .WithName(d => $"{d.Name}/policy")
            .OfType(ResourceType.ApiPolicy)
            .WhichDependsOnResourceOfType(ResourceType.Api)
            .WhichDependsOnResourceWithName(d => d.Name)
            .CreateResourcesIf(d => d.HasPolicy()));
 }
Esempio n. 27
0
        private IEnumerable <ArmTemplateResource <ApiOperationPolicyProperties> > CreateOperationPolicies(DeploymentDefinition deploymentDefinition)
        {
            return(new ArmTemplateResourceCreator <ApiDeploymentDefinition, ApiOperationPolicyProperties>(_mapper)
                   .ForDeploymentDefinitions(deploymentDefinition.Apis)
                   .UseResourceCreator(apiDeploymentDefinition =>
            {
                var templateResources = new List <ArmTemplateResource <ApiOperationPolicyProperties> >();
                var fileReader = new FileReader();

                foreach (var pair in apiDeploymentDefinition.Operations)
                {
                    var operationPolicy = pair.Value.Policy;
                    var operationName = pair.Key;

                    var isUrl = operationPolicy.IsUri(out _);

                    var templateResource = new ArmTemplateResource <ApiOperationPolicyProperties>(
                        $"{apiDeploymentDefinition.Name}/{operationName}/policy",
                        $"[concat(parameters('ApimServiceName'), '/{apiDeploymentDefinition.Name}/{operationName}/policy')]",
                        ResourceType.ApiOperationPolicy,
                        new ApiOperationPolicyProperties()
                    {
                        Format = isUrl ? "rawxml-link" : "rawxml",
                        Value = isUrl ? operationPolicy : fileReader.RetrieveFileContentsAsync(operationPolicy).Result
                    },
                        new string[] { $"[resourceId('{ResourceType.Api}', parameters('ApimServiceName'), '{apiDeploymentDefinition.Name}')]" });

                    templateResources.Add(templateResource);
                }

                return templateResources;
            })
                   .CreateResourcesIf(d => d.Operations != null, true));
        }
        public async Task <IActionResult> Deploy([FromBody] DeploymentDefinition deploymentDefinition)
        {
            var deploymentResult = await DeploymentHelper.DeployAndConfigureAsync(deploymentDefinition);

            return(Ok(deploymentResult));
        }
Esempio n. 29
0
        private async Task GenerateArmTemplateFile(List <ArmTemplateResource> resources, DeploymentDefinition deploymentDefinition)
        {
            var fileGenerator = new ArmTemplateFileGenerator(deploymentDefinition.OutputLocation,
                                                             deploymentDefinition.MasterTemplateName,
                                                             deploymentDefinition.PrefixFileName,
                                                             deploymentDefinition.ApimServiceName);

            await fileGenerator.Save(resources);
        }