diff --git a/src/main/java/io/codeka/gaia/stacks/controller/StackController.java b/src/main/java/io/codeka/gaia/stacks/controller/StackController.java index c2bd1c98c..d22335c74 100644 --- a/src/main/java/io/codeka/gaia/stacks/controller/StackController.java +++ b/src/main/java/io/codeka/gaia/stacks/controller/StackController.java @@ -1,10 +1,10 @@ package io.codeka.gaia.stacks.controller; +import io.codeka.gaia.modules.repository.TerraformModuleRepository; +import io.codeka.gaia.runner.StackRunner; import io.codeka.gaia.stacks.bo.Job; import io.codeka.gaia.stacks.repository.JobRepository; import io.codeka.gaia.stacks.repository.StackRepository; -import io.codeka.gaia.modules.repository.TerraformModuleRepository; -import io.codeka.gaia.runner.StackRunner; import io.codeka.gaia.teams.bo.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -55,38 +55,11 @@ public String editStack(@PathVariable String stackId, Model model){ return "stack"; } - @GetMapping("/stacks/{stackId}/apply") - public String applyStack(@PathVariable String stackId, Model model, User user){ - // checking if the stack exists - // TODO throw an exception (404) if not - if(stackRepository.existsById(stackId)){ - model.addAttribute("stackId", stackId); - } - - // create a new job - var job = new Job(user); - job.setId(UUID.randomUUID().toString()); - job.setStackId(stackId); - - model.addAttribute("jobId", job.getId()); - + @GetMapping("/stacks/{stackId}/{jobType}") + public String startJob(@PathVariable String stackId, @PathVariable String jobType, Model model, User user){ // get the stack - var stack = this.stackRepository.findById(stackId).get(); - // get the module - var module = this.terraformModuleRepository.findById(stack.getModuleId()).get(); - - this.stackRunner.apply(job, module, stack); - - return "job"; - } - - @GetMapping("/stacks/{stackId}/preview") - public String previewStack(@PathVariable String stackId, Model model, User user){ - // checking if the stack exists - // TODO throw an exception (404) if not - if(stackRepository.existsById(stackId)){ - model.addAttribute("stackId", stackId); - } + var stack = this.stackRepository.findById(stackId).orElseThrow(StackNotFoundException::new); + model.addAttribute("stackId", stackId); // create a new job var job = new Job(user); @@ -95,12 +68,16 @@ public String previewStack(@PathVariable String stackId, Model model, User user) model.addAttribute("jobId", job.getId()); - // get the stack - var stack = this.stackRepository.findById(stackId).get(); // get the module - var module = this.terraformModuleRepository.findById(stack.getModuleId()).get(); - - this.stackRunner.plan(job, module, stack); + var module = this.terraformModuleRepository.findById(stack.getModuleId()).orElseThrow(); + + if ("apply".equals(jobType)) { + this.stackRunner.apply(job, module, stack); + } else if ("preview".equals(jobType)) { + this.stackRunner.plan(job, module, stack); + } else if ("stop".equals(jobType)) { + this.stackRunner.stop(job, module, stack); + } return "job"; } @@ -125,29 +102,4 @@ public Job getJob(@PathVariable String stackId, @PathVariable String jobId){ return this.stackRunner.getJob(jobId); } - @GetMapping("/stacks/{stackId}/stop") - public String stopStack(@PathVariable String stackId, Model model, User user){ - // checking if the stack exists - // TODO throw an exception (404) if not - if(stackRepository.existsById(stackId)){ - model.addAttribute("stackId", stackId); - } - - // create a new job - var job = new Job(user); - job.setId(UUID.randomUUID().toString()); - job.setStackId(stackId); - - model.addAttribute("jobId", job.getId()); - - // get the stack - var stack = this.stackRepository.findById(stackId).get(); - // get the module - var module = this.terraformModuleRepository.findById(stack.getModuleId()).get(); - - this.stackRunner.stop(job, module, stack); - - return "job"; - } - } diff --git a/src/test/java/io/codeka/gaia/stacks/controller/StackControllerTest.java b/src/test/java/io/codeka/gaia/stacks/controller/StackControllerTest.java index 7b13a39e1..434ea8bd2 100644 --- a/src/test/java/io/codeka/gaia/stacks/controller/StackControllerTest.java +++ b/src/test/java/io/codeka/gaia/stacks/controller/StackControllerTest.java @@ -87,17 +87,16 @@ void editStack_shouldSetModelIfStackExists() { void applyStack_shouldReturnTheView() { when(stackRepository.findById(anyString())).thenReturn(Optional.of(new Stack())); when(terraformModuleRepository.findById(any())).thenReturn(Optional.of(new TerraformModule())); - var result = controller.applyStack("test_stack", model, user); + var result = controller.startJob("test_stack", "apply",model, user); assertEquals("job", result); } @Test void applyStack_shouldSetModelIfStackExists() { - when(stackRepository.existsById(anyString())).thenReturn(true); when(stackRepository.findById(anyString())).thenReturn(Optional.of(new Stack())); when(terraformModuleRepository.findById(any())).thenReturn(Optional.of(new TerraformModule())); - var result = controller.applyStack("test_stack", model, user); + var result = controller.startJob("test_stack", "apply", model, user); assertEquals("job", result); verify(model).addAttribute("stackId", "test_stack"); @@ -110,7 +109,7 @@ void applyStack_shouldConfigureAndLaunchTheJob() { when(stackRepository.findById(anyString())).thenReturn(Optional.of(stack)); when(terraformModuleRepository.findById(any())).thenReturn(Optional.of(module)); - var result = controller.applyStack("test_stack", model, user); + var result = controller.startJob("test_stack", "apply", model, user); assertEquals("job", result); @@ -127,17 +126,16 @@ void applyStack_shouldConfigureAndLaunchTheJob() { void previewStack_shouldReturnTheView() { when(stackRepository.findById(anyString())).thenReturn(Optional.of(new Stack())); when(terraformModuleRepository.findById(any())).thenReturn(Optional.of(new TerraformModule())); - var result = controller.previewStack("test_stack", model, user); + var result = controller.startJob("test_stack", "preview", model, user); assertEquals("job", result); } @Test void previewStack_shouldSetModelIfStackExists() { - when(stackRepository.existsById(anyString())).thenReturn(true); when(stackRepository.findById(anyString())).thenReturn(Optional.of(new Stack())); when(terraformModuleRepository.findById(any())).thenReturn(Optional.of(new TerraformModule())); - var result = controller.previewStack("test_stack", model, user); + var result = controller.startJob("test_stack", "preview", model, user); assertEquals("job", result); verify(model).addAttribute("stackId", "test_stack"); @@ -150,7 +148,7 @@ void previewStack_shouldConfigureAndLaunchTheJob() { when(stackRepository.findById(anyString())).thenReturn(Optional.of(stack)); when(terraformModuleRepository.findById(any())).thenReturn(Optional.of(module)); - var result = controller.previewStack("test_stack", model, user); + var result = controller.startJob("test_stack", "preview", model, user); assertEquals("job", result); @@ -168,17 +166,16 @@ void previewStack_shouldConfigureAndLaunchTheJob() { void stopStack_shouldReturnTheView() { when(stackRepository.findById(anyString())).thenReturn(Optional.of(new Stack())); when(terraformModuleRepository.findById(any())).thenReturn(Optional.of(new TerraformModule())); - var result = controller.stopStack("test_stack", model, user); + var result = controller.startJob("test_stack", "stop", model, user); assertEquals("job", result); } @Test void stopStack_shouldSetModelIfStackExists() { - when(stackRepository.existsById(anyString())).thenReturn(true); when(stackRepository.findById(anyString())).thenReturn(Optional.of(new Stack())); when(terraformModuleRepository.findById(any())).thenReturn(Optional.of(new TerraformModule())); - var result = controller.stopStack("test_stack", model, user); + var result = controller.startJob("test_stack", "stop", model, user); assertEquals("job", result); verify(model).addAttribute("stackId", "test_stack"); @@ -191,7 +188,7 @@ void stopStack_shouldConfigureAndLaunchTheJob() { when(stackRepository.findById(anyString())).thenReturn(Optional.of(stack)); when(terraformModuleRepository.findById(any())).thenReturn(Optional.of(module)); - var result = controller.stopStack("test_stack", model, user); + var result = controller.startJob("test_stack", "stop", model, user); assertEquals("job", result);