public void Validate_Success()
        {
            var configuration = new TeamCloudConfiguration()
            {
                ProjectTypes = new List <ProjectType>()
                {
                    new ProjectType()
                    {
                        Id            = "default",
                        Region        = "WestUS",
                        Subscriptions = new List <Guid>()
                        {
                            Guid.NewGuid()
                        },
                        ResourceGroupNamePrefix = "tc_",
                        Providers = new List <ProviderReference>()
                        {
                            new ProviderReference()
                            {
                                Id = "providerA"
                            },
                            new ProviderReference()
                            {
                                Id = "providerB"
                            }
                        }
                    }
                }
            };

            var result = configuration.Validate();

            Assert.True(result.IsValid);
        }
Пример #2
0
        public async Task <IActionResult> Get()
        {
            var teamCloudInstance = await teamCloudRepository
                                    .GetAsync()
                                    .ConfigureAwait(false);

            if (teamCloudInstance is null)
            {
                return(ErrorResult
                       .NotFound($"No TeamCloud Instance was found.")
                       .ActionResult());
            }

            var projectTypes = await projectTypesRepository
                               .ListAsync()
                               .ToListAsync()
                               .ConfigureAwait(false);

            var config = new TeamCloudConfiguration
            {
                ProjectTypes = projectTypes,
                Providers    = teamCloudInstance.Providers,
                Users        = teamCloudInstance.Users,
                Tags         = teamCloudInstance.Tags,
                Properties   = teamCloudInstance.Properties,
            };

            return(DataResult <TeamCloudConfiguration>
                   .Ok(config)
                   .ActionResult());
        }
Пример #3
0
        public async Task <IActionResult> Post([FromBody] TeamCloudConfiguration teamCloudConfiguraiton)
        {
            if (teamCloudConfiguraiton is null)
            {
                return(new BadRequestObjectResult("Unable to parse teamcloud.yaml file."));
            }

            try
            {
                new TeamCloudConfigurationValidator().ValidateAndThrow(teamCloudConfiguraiton);
            }
            catch (ValidationException validationEx)
            {
                return(new BadRequestObjectResult(validationEx.Errors));
            }

            var teamCloud = new TeamCloudInstance
            {
                Users         = teamCloudConfiguraiton.Users,
                Configuration = teamCloudConfiguraiton
            };

            var command = new TeamCloudCreateCommand(currentUser, teamCloud);

            var commandResult = await orchestrator
                                .InvokeAsync <TeamCloudInstance>(command)
                                .ConfigureAwait(false);

            if (commandResult.Links.TryGetValue("status", out var statusUrl))
            {
                return(new AcceptedResult(statusUrl, commandResult));
            }
            else
            {
                return(new OkObjectResult(commandResult));
            }

            /* TODO:
             *
             * - Change the input to a file upload
             * - This will be in the form of a yaml file (see: https://github.com/microsoft/TeamCloud/blob/master/docs/teamcloud.yaml)
             * - Possibly save (cache) the file in storage
             * - Parse the file into the TeamCloudConfiguraiton
             * - ...
             */
        }
Пример #4
0
        public async Task <TeamCloudInstance> RunActivity(
            [ActivityTrigger] TeamCloudConfiguration teamCloudConfiguration)
        {
            if (teamCloudConfiguration is null)
            {
                throw new ArgumentNullException(nameof(teamCloudConfiguration));
            }

            var teamCloudInstance = new TeamCloudInstance(teamCloudConfiguration);

            var teamCloud = await teamCloudRepository
                            .SetAsync(teamCloudInstance)
                            .ConfigureAwait(false);

            foreach (var projectType in teamCloudConfiguration.ProjectTypes)
            {
                await projectTypesRepository
                .AddAsync(projectType)
                .ConfigureAwait(false);
            }

            return(teamCloud);
        }
Пример #5
0
        public async Task <IActionResult> Post([FromBody] TeamCloudConfiguration teamCloudConfiguraiton)
        {
            var validation = new TeamCloudConfigurationValidator().Validate(teamCloudConfiguraiton);

            if (!validation.IsValid)
            {
                return(ErrorResult
                       .BadRequest(validation)
                       .ActionResult());
            }

            var teamCloudInstance = await teamCloudRepository
                                    .GetAsync()
                                    .ConfigureAwait(false);

            if (teamCloudInstance != null)
            {
                return(ErrorResult
                       .Conflict("A TeamCloud Instance already existis.")
                       .ActionResult());
            }

            var command = new OrchestratorTeamCloudCreateCommand(CurrentUser, teamCloudConfiguraiton);

            var commandResult = await orchestrator
                                .InvokeAsync(command)
                                .ConfigureAwait(false);

            if (commandResult.Links.TryGetValue("status", out var statusUrl))
            {
                return(StatusResult
                       .Accepted(commandResult.CommandId.ToString(), statusUrl, commandResult.RuntimeStatus.ToString(), commandResult.CustomStatus)
                       .ActionResult());
            }

            throw new Exception("This shoudn't happen, but we need to decide to do when it does.");
        }