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); }
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()); }
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 * - ... */ }
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); }
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."); }