Skip to content

Commit

Permalink
🐛 : fix job using module image instead of its own
Browse files Browse the repository at this point in the history
  • Loading branch information
cdubuisson committed Feb 3, 2020
1 parent 50b5d1e commit 137ffd9
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 48 deletions.
21 changes: 11 additions & 10 deletions src/main/java/io/codeka/gaia/runner/StackCommandBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import io.codeka.gaia.modules.bo.TerraformModule;
import io.codeka.gaia.registries.RegistryOAuth2Provider;
import io.codeka.gaia.settings.bo.Settings;
import io.codeka.gaia.stacks.bo.Job;
import io.codeka.gaia.stacks.bo.Stack;
import io.codeka.gaia.stacks.bo.mustache.TerraformScript;
import org.apache.commons.lang.StringUtils;
Expand Down Expand Up @@ -48,13 +49,13 @@ private String evalGitRepositoryUrl(TerraformModule module) {
.orElse(url);
}

private String buildScript(Stack stack, TerraformModule module,
private String buildScript(Job job, Stack stack, TerraformModule module,
BiFunction<Stack, TerraformModule, String> command) {
var script = new TerraformScript()
.setExternalUrl(settings.getExternalUrl())
.setStackId(stack.getId())
.setGitRepositoryUrl(evalGitRepositoryUrl(module))
.setTerraformImage(module.getTerraformImage().image());
.setTerraformImage(job.getTerraformImage().image());

if (StringUtils.isNotBlank(module.getDirectory())) {
script.setGitDirectory(module.getDirectory());
Expand Down Expand Up @@ -95,35 +96,35 @@ private String buildCommand(Stack stack, TerraformModule module, String command)
*
* @return
*/
String buildPlanScript(Stack stack, TerraformModule module) {
return buildScript(stack, module, this::buildPlanCommand);
String buildPlanScript(Job job, Stack stack, TerraformModule module) {
return buildScript(job, stack, module, this::buildPlanCommand);
}

/**
* builds the terraform apply script
*
* @return
*/
String buildApplyScript(Stack stack, TerraformModule module) {
return buildScript(stack, module, this::buildApplyCommand);
String buildApplyScript(Job job, Stack stack, TerraformModule module) {
return buildScript(job, stack, module, this::buildApplyCommand);
}

/**
* builds the terraform plan script
*
* @return
*/
String buildPlanDestroyScript(Stack stack, TerraformModule module) {
return buildScript(stack, module, this::buildPlanDestroyCommand);
String buildPlanDestroyScript(Job job, Stack stack, TerraformModule module) {
return buildScript(job, stack, module, this::buildPlanDestroyCommand);
}

/**
* builds the terraform destroy script
*
* @return
*/
String buildDestroyScript(Stack stack, TerraformModule module) {
return buildScript(stack, module, this::buildDestroyCommand);
String buildDestroyScript(Job job, Stack stack, TerraformModule module) {
return buildScript(job, stack, module, this::buildDestroyCommand);
}

/**
Expand Down
22 changes: 11 additions & 11 deletions src/main/java/io/codeka/gaia/runner/StackRunner.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,11 @@ public StackRunner(DockerRunner dockerRunner, StackCommandBuilder stackCommandBu
this.stepRepository = stepRepository;
}

private String managePlanScript(JobType jobType, Stack stack, TerraformModule module) {
if (jobType == JobType.RUN) {
return stackCommandBuilder.buildPlanScript(stack, module);
private String managePlanScript(Job job, Stack stack, TerraformModule module) {
if (JobType.RUN == job.getType()) {
return stackCommandBuilder.buildPlanScript(job, stack, module);
}
return stackCommandBuilder.buildPlanDestroyScript(stack, module);
return stackCommandBuilder.buildPlanDestroyScript(job, stack, module);
}

private void managePlanResult(Integer result, JobWorkflow jobWorkflow, Stack stack) {
Expand All @@ -67,11 +67,11 @@ private void managePlanResult(Integer result, JobWorkflow jobWorkflow, Stack sta
}
}

private String manageApplyScript(JobType jobType, Stack stack, TerraformModule module) {
if (jobType == JobType.RUN) {
return stackCommandBuilder.buildApplyScript(stack, module);
private String manageApplyScript(Job job, Stack stack, TerraformModule module) {
if (JobType.RUN == job.getType()) {
return stackCommandBuilder.buildApplyScript(job, stack, module);
}
return stackCommandBuilder.buildDestroyScript(stack, module);
return stackCommandBuilder.buildDestroyScript(job, stack, module);
}

private void manageApplyResult(Integer result, JobWorkflow jobWorkflow, Stack stack) {
Expand Down Expand Up @@ -121,7 +121,7 @@ public void plan(JobWorkflow jobWorkflow, TerraformModule module, Stack stack) {
treatJob(
jobWorkflow,
JobWorkflow::plan,
() -> managePlanScript(jobWorkflow.getJob().getType(), stack, module),
() -> managePlanScript(jobWorkflow.getJob(), stack, module),
result -> managePlanResult(result, jobWorkflow, stack)
);
}
Expand All @@ -131,7 +131,7 @@ public void apply(JobWorkflow jobWorkflow, TerraformModule module, Stack stack)
treatJob(
jobWorkflow,
JobWorkflow::apply,
() -> manageApplyScript(jobWorkflow.getJob().getType(), stack, module),
() -> manageApplyScript(jobWorkflow.getJob(), stack, module),
result -> manageApplyResult(result, jobWorkflow, stack)
);
}
Expand All @@ -142,7 +142,7 @@ public void retry(JobWorkflow jobWorkflow, TerraformModule module, Stack stack)
treatJob(
jobWorkflow,
JobWorkflow::retry,
() -> managePlanScript(jobWorkflow.getJob().getType(), stack, module),
() -> managePlanScript(jobWorkflow.getJob(), stack, module),
result -> managePlanResult(result, jobWorkflow, stack)
);
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/io/codeka/gaia/stacks/bo/Job.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class Job {
private LocalDateTime endDateTime;
private JobType type;
private JobStatus status;
private TerraformImage terraformImage;
private TerraformImage terraformImage = TerraformImage.Companion.defaultInstance();
@DBRef
private List<Step> steps = new ArrayList<>(2);
@DBRef
Expand Down
53 changes: 33 additions & 20 deletions src/test/java/io/codeka/gaia/runner/StackCommandBuilderTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import io.codeka.gaia.modules.bo.Variable;
import io.codeka.gaia.registries.RegistryOAuth2Provider;
import io.codeka.gaia.settings.bo.Settings;
import io.codeka.gaia.stacks.bo.Job;
import io.codeka.gaia.stacks.bo.Stack;
import io.codeka.gaia.teams.OAuth2User;
import io.codeka.gaia.teams.User;
Expand Down Expand Up @@ -96,9 +97,10 @@ void buildPlanCommand_shouldUseDefaultVariableValues() {
@Test
void buildPlanScript_shouldGenerateAFullScript() {
var module = moduleWithDirectory();

var stack = new Stack();
var script = stackCommandBuilder.buildPlanScript(stack, module);
var job = new Job();

var script = stackCommandBuilder.buildPlanScript(job, stack, module);

assertTrue(script.contains("echo 'using image hashicorp/terraform:latest'"));
assertTrue(script.contains("echo 'cloning git://test' | awk '{ sub(/oauth2:(.*)@/, \"oauth2:[MASKED]@\");}1'"));
Expand All @@ -114,9 +116,10 @@ void buildPlanScript_shouldGenerateAFullScript() {
@Test
void buildPlanScript_shouldGenerateAFullScript_forAModuleWithoutDirectory() {
var module = moduleWithoutDirectory();

var stack = new Stack();
var script = stackCommandBuilder.buildPlanScript(stack, module);
var job = new Job();

var script = stackCommandBuilder.buildPlanScript(job, stack, module);

assertTrue(script.contains("echo 'using image hashicorp/terraform:latest'"));
assertTrue(script.contains("echo 'cloning git://test' | awk '{ sub(/oauth2:(.*)@/, \"oauth2:[MASKED]@\");}1'"));
Expand All @@ -133,10 +136,11 @@ void buildPlanScript_shouldGenerateAFullScript_forAModuleWithoutDirectory() {
void buildPlanScript_shouldGenerateAFullScript_forAModuleWithAccessToken() {
var module = moduleWithAccessToken();
var stack = new Stack();
var job = new Job();

when(registryOAuth2Provider.isAssignableFor(anyString())).thenReturn(true);
when(registryOAuth2Provider.getOAuth2Url(anyString(), anyString())).thenReturn("url_with_token");
var script = stackCommandBuilder.buildPlanScript(stack, module);
var script = stackCommandBuilder.buildPlanScript(job, stack, module);

assertTrue(script.contains("echo 'using image hashicorp/terraform:latest'"));
assertTrue(script.contains("echo 'cloning url_with_token' | awk '{ sub(/oauth2:(.*)@/, \"oauth2:[MASKED]@\");}1'"));
Expand Down Expand Up @@ -208,9 +212,10 @@ void buildApplyCommand_shouldUseDefaultVariableValues() {
@Test
void buildApplyScript_shouldGenerateAFullScript() {
var module = moduleWithDirectory();

var stack = new Stack();
var script = stackCommandBuilder.buildApplyScript(stack, module);
var job = new Job();

var script = stackCommandBuilder.buildApplyScript(job, stack, module);

assertTrue(script.contains("echo 'using image hashicorp/terraform:latest'"));
assertTrue(script.contains("echo 'cloning git://test' | awk '{ sub(/oauth2:(.*)@/, \"oauth2:[MASKED]@\");}1'"));
Expand All @@ -226,9 +231,10 @@ void buildApplyScript_shouldGenerateAFullScript() {
@Test
void buildApplyScript_shouldGenerateAFullScript_forAModuleWithoutDirectory() {
var module = moduleWithoutDirectory();

var stack = new Stack();
var script = stackCommandBuilder.buildApplyScript(stack, module);
var job = new Job();

var script = stackCommandBuilder.buildApplyScript(job, stack, module);

assertTrue(script.contains("echo 'using image hashicorp/terraform:latest'"));
assertTrue(script.contains("echo 'cloning git://test' | awk '{ sub(/oauth2:(.*)@/, \"oauth2:[MASKED]@\");}1'"));
Expand All @@ -245,10 +251,11 @@ void buildApplyScript_shouldGenerateAFullScript_forAModuleWithoutDirectory() {
void buildApplyScript_shouldGenerateAFullScript_forAModuleWithAccessToken() {
var module = moduleWithAccessToken();
var stack = new Stack();
var job = new Job();

when(registryOAuth2Provider.isAssignableFor(anyString())).thenReturn(true);
when(registryOAuth2Provider.getOAuth2Url(anyString(), anyString())).thenReturn("url_with_token");
var script = stackCommandBuilder.buildApplyScript(stack, module);
var script = stackCommandBuilder.buildApplyScript(job, stack, module);

assertTrue(script.contains("echo 'using image hashicorp/terraform:latest'"));
assertTrue(script.contains("echo 'cloning url_with_token' | awk '{ sub(/oauth2:(.*)@/, \"oauth2:[MASKED]@\");}1'"));
Expand Down Expand Up @@ -320,9 +327,10 @@ void buildPlanDestroyCommand_shouldUseDefaultVariableValues() {
@Test
void buildPlanDestroyScript_shouldGenerateAFullScript() {
var module = moduleWithDirectory();

var stack = new Stack();
var script = stackCommandBuilder.buildPlanDestroyScript(stack, module);
var job = new Job();

var script = stackCommandBuilder.buildPlanDestroyScript(job, stack, module);

assertTrue(script.contains("echo 'using image hashicorp/terraform:latest'"));
assertTrue(script.contains("echo 'cloning git://test' | awk '{ sub(/oauth2:(.*)@/, \"oauth2:[MASKED]@\");}1'"));
Expand All @@ -338,9 +346,10 @@ void buildPlanDestroyScript_shouldGenerateAFullScript() {
@Test
void buildPlanDestroyScript_shouldGenerateAFullScript_forAModuleWithoutDirectory() {
var module = moduleWithoutDirectory();

var stack = new Stack();
var script = stackCommandBuilder.buildPlanDestroyScript(stack, module);
var job = new Job();

var script = stackCommandBuilder.buildPlanDestroyScript(job, stack, module);

assertTrue(script.contains("echo 'using image hashicorp/terraform:latest'"));
assertTrue(script.contains("echo 'cloning git://test' | awk '{ sub(/oauth2:(.*)@/, \"oauth2:[MASKED]@\");}1'"));
Expand All @@ -357,10 +366,11 @@ void buildPlanDestroyScript_shouldGenerateAFullScript_forAModuleWithoutDirectory
void buildPlanDestroyScript_shouldGenerateAFullScript_forAModuleWithAccessToken() {
var module = moduleWithAccessToken();
var stack = new Stack();
var job = new Job();

when(registryOAuth2Provider.isAssignableFor(anyString())).thenReturn(true);
when(registryOAuth2Provider.getOAuth2Url(anyString(), anyString())).thenReturn("url_with_token");
var script = stackCommandBuilder.buildPlanDestroyScript(stack, module);
var script = stackCommandBuilder.buildPlanDestroyScript(job, stack, module);

assertTrue(script.contains("echo 'using image hashicorp/terraform:latest'"));
assertTrue(script.contains("echo 'cloning url_with_token' | awk '{ sub(/oauth2:(.*)@/, \"oauth2:[MASKED]@\");}1'"));
Expand Down Expand Up @@ -432,9 +442,10 @@ void buildDestroyCommand_shouldUseDefaultVariableValues() {
@Test
void buildDestroyScript_shouldGenerateAFullScript() {
var module = moduleWithDirectory();

var stack = new Stack();
var script = stackCommandBuilder.buildDestroyScript(stack, module);
var job = new Job();

var script = stackCommandBuilder.buildDestroyScript(job, stack, module);

assertTrue(script.contains("echo 'using image hashicorp/terraform:latest'"));
assertTrue(script.contains("echo 'cloning git://test' | awk '{ sub(/oauth2:(.*)@/, \"oauth2:[MASKED]@\");}1'"));
Expand All @@ -450,9 +461,10 @@ void buildDestroyScript_shouldGenerateAFullScript() {
@Test
void buildDestroyScript_shouldGenerateAFullScript_forAModuleWithoutDirectory() {
var module = moduleWithoutDirectory();

var stack = new Stack();
var script = stackCommandBuilder.buildDestroyScript(stack, module);
var job = new Job();

var script = stackCommandBuilder.buildDestroyScript(job, stack, module);

assertTrue(script.contains("echo 'using image hashicorp/terraform:latest'"));
assertTrue(script.contains("echo 'cloning git://test' | awk '{ sub(/oauth2:(.*)@/, \"oauth2:[MASKED]@\");}1'"));
Expand All @@ -469,10 +481,11 @@ void buildDestroyScript_shouldGenerateAFullScript_forAModuleWithoutDirectory() {
void buildDestroyScript_shouldGenerateAFullScript_forAModuleWithAccessToken() {
var module = moduleWithAccessToken();
var stack = new Stack();
var job = new Job();

when(registryOAuth2Provider.isAssignableFor(anyString())).thenReturn(true);
when(registryOAuth2Provider.getOAuth2Url(anyString(), anyString())).thenReturn("url_with_token");
var script = stackCommandBuilder.buildDestroyScript(stack, module);
var script = stackCommandBuilder.buildDestroyScript(job, stack, module);

assertTrue(script.contains("echo 'using image hashicorp/terraform:latest'"));
assertTrue(script.contains("echo 'cloning url_with_token' | awk '{ sub(/oauth2:(.*)@/, \"oauth2:[MASKED]@\");}1'"));
Expand Down
12 changes: 6 additions & 6 deletions src/test/java/io/codeka/gaia/runner/StackRunnerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ void plan_shouldUsePlanScript_WhenJobIsRun() {
stackRunner.plan(jobWorkflow, module, stack);

// then
verify(stackCommandBuilder).buildPlanScript(stack, module);
verify(stackCommandBuilder).buildPlanScript(jobWorkflow.getJob(), stack, module);
}

@Test
Expand All @@ -89,7 +89,7 @@ void plan_shouldUsePlanDestroyScript_WhenJobIsStop() {
stackRunner.plan(jobWorkflow, module, stack);

// then
verify(stackCommandBuilder).buildPlanDestroyScript(stack, module);
verify(stackCommandBuilder).buildPlanDestroyScript(jobWorkflow.getJob(), stack, module);
}

@Test
Expand Down Expand Up @@ -192,7 +192,7 @@ void apply_shouldUseApplyScript_WhenJobIsRun() {
stackRunner.apply(jobWorkflow, module, stack);

// then
verify(stackCommandBuilder).buildApplyScript(stack, module);
verify(stackCommandBuilder).buildApplyScript(jobWorkflow.getJob(), stack, module);
}

@Test
Expand All @@ -205,7 +205,7 @@ void apply_shouldUseDestroyScript_WhenJobIsStop() {
stackRunner.apply(jobWorkflow, module, stack);

// then
verify(stackCommandBuilder).buildDestroyScript(stack, module);
verify(stackCommandBuilder).buildDestroyScript(jobWorkflow.getJob(), stack, module);
}

@Test
Expand Down Expand Up @@ -294,7 +294,7 @@ void retry_shouldUsePlanScript_WhenJobIsRun() {
stackRunner.retry(jobWorkflow, module, stack);

// then
verify(stackCommandBuilder).buildPlanScript(stack, module);
verify(stackCommandBuilder).buildPlanScript(jobWorkflow.getJob(), stack, module);
}

@Test
Expand All @@ -307,7 +307,7 @@ void retry_shouldUsePlanDestroyScript_WhenJobIsStop() {
stackRunner.retry(jobWorkflow, module, stack);

// then
verify(stackCommandBuilder).buildPlanDestroyScript(stack, module);
verify(stackCommandBuilder).buildPlanDestroyScript(jobWorkflow.getJob(), stack, module);
}

@Test
Expand Down

0 comments on commit 137ffd9

Please sign in to comment.