public ScheduleOptions(GoCipher goCipher, Map<String, String> specifiedRevisions, Map<String, String> variables, Map<String, String> secureVariables) { this.specifiedRevisions = specifiedRevisions; this.variables = new EnvironmentVariablesConfig(); for (Map.Entry<String, String> nameValue : variables.entrySet()) { this.variables.add(new EnvironmentVariableConfig(nameValue.getKey(), nameValue.getValue())); } for (Map.Entry<String, String> nameValue : secureVariables.entrySet()) { this.variables.add(new EnvironmentVariableConfig(goCipher,nameValue.getKey(), nameValue.getValue(), true)); } }
public SchedulingContext rerunContext() { DefaultSchedulingContext context = new DefaultSchedulingContext(approvedBy, agents, profiles); context.variables = variables.overrideWith(new EnvironmentVariablesConfig()); context.rerun = true; return context; }
public EnvironmentVariablesConfig getSecureVariables() { EnvironmentVariablesConfig result = new EnvironmentVariablesConfig(); for (EnvironmentVariableConfig environmentVariableConfig : this) { if (environmentVariableConfig.isSecure()) { result.add(environmentVariableConfig); } } return result; }
@Override public EnvironmentVariablesConfig getVariables() { EnvironmentVariablesConfig allVariables = new EnvironmentVariablesConfig(); for (EnvironmentConfig part : this) { for (EnvironmentVariableConfig partVariable : part.getVariables()) { if (!allVariables.contains(partVariable)) allVariables.add(partVariable); } } return allVariables; }
@Override public EnvironmentVariablesConfig getPlainTextVariables() { EnvironmentVariablesConfig allVariables = new EnvironmentVariablesConfig(); for (EnvironmentConfig part : this) { for (EnvironmentVariableConfig partVariable : part.getPlainTextVariables()) { if (!allVariables.contains(partVariable)) allVariables.add(partVariable); } } return allVariables; }
@Override public EnvironmentVariablesConfig getSecureVariables() { EnvironmentVariablesConfig allVariables = new EnvironmentVariablesConfig(); for (EnvironmentConfig part : this) { for (EnvironmentVariableConfig partVariable : part.getSecureVariables()) { if (!allVariables.contains(partVariable)) allVariables.add(partVariable); } } return allVariables; }
public static EnvironmentVariablesConfig fromJSONArray(JsonReader jsonReader) { EnvironmentVariablesConfig variables = new EnvironmentVariablesConfig(); jsonReader.readArrayIfPresent("environment_variables", environmentVariables -> { environmentVariables.forEach(variable -> variables.add(EnvironmentVariableRepresenter.fromJSON(new JsonReader(variable.getAsJsonObject())))); }); return variables; }
public static EnvironmentVariablesConfig fromJSONArray(JsonReader jsonReader) { EnvironmentVariablesConfig variables = new EnvironmentVariablesConfig(); jsonReader.readArrayIfPresent("environment_variables", environmentVariables -> { environmentVariables.forEach(variable -> variables.add(EnvironmentVariableRepresenter.fromJSON(new JsonReader(variable.getAsJsonObject())))); }); return variables; }
public SchedulingContext permittedAgent(String permittedAgentUuid) { Agents permitted = new Agents(); for (AgentConfig agent : agents) { if (agent.getUuid().equals(permittedAgentUuid)) { permitted.add(agent); } } DefaultSchedulingContext context = new DefaultSchedulingContext(approvedBy, permitted, profiles); context.variables = variables.overrideWith(new EnvironmentVariablesConfig()); context.rerun = rerun; return context; }
public EnvironmentVariablesConfig overrideWith(EnvironmentVariablesConfig environmentVariablesConfig) { EnvironmentVariablesConfig variablesConfig = new EnvironmentVariablesConfig(); variablesConfig.addAll(this); for (EnvironmentVariableConfig environmentVariableConfig : environmentVariablesConfig) { variablesConfig.removeIfExists(environmentVariableConfig.getName()); variablesConfig.add(environmentVariableConfig); } return variablesConfig; }
private SchedulingContext setEnvironmentVariables(SchedulingContext context, JobConfig config, String jobName, int counter) { EnvironmentVariablesConfig environmentVariablesConfig = new EnvironmentVariablesConfig(); int index = context.isRerun() ? getOldJobIndex(jobName) : counter; environmentVariablesConfig.add(new EnvironmentVariableConfig("GO_JOB_RUN_INDEX", Integer.toString(index))); environmentVariablesConfig.add(new EnvironmentVariableConfig("GO_JOB_RUN_COUNT", Integer.toString(config.getRunInstanceCountValue()))); context = context.overrideEnvironmentVariables(environmentVariablesConfig); return context; }
public static StageConfig stageConfigWithParams(String stageName, String paramName) { StageConfig stageConfig = StageConfigMother.stageConfig(stageName); ArrayList<EnvironmentVariableConfig> environmentVariableConfigs = new ArrayList<>(); environmentVariableConfigs.add(new EnvironmentVariableConfig("env1", "#{" + paramName + "}")); stageConfig.setVariables(new EnvironmentVariablesConfig(environmentVariableConfigs)); stageConfig.getJobs().add(JobConfigMother.jobConfig()); return stageConfig; }
@Test public void shouldClearEnvironmentVariablesWhenTheMapIsNull() { environmentVariablesConfig = new EnvironmentVariablesConfig(); EnvironmentVariableConfig one = new EnvironmentVariableConfig("FOO", "BAR"); environmentVariablesConfig.add(one); environmentVariablesConfig.setConfigAttributes(null); assertThat(environmentVariablesConfig.size(), is(0)); }
@Test public void shouldGetSecureVariables() throws CryptoException { EnvironmentVariablesConfig environmentVariablesConfig = new EnvironmentVariablesConfig(); GoCipher mockGoCipher = mock(GoCipher.class); EnvironmentVariableConfig plainVar1 = new EnvironmentVariableConfig("var1", "var1_value"); EnvironmentVariableConfig var1 = secureVariable(mockGoCipher, "foo1", "bar1", "encryptedBar1"); EnvironmentVariableConfig var2 = secureVariable(mockGoCipher, "foo2", "bar2", "encryptedBar2"); EnvironmentVariableConfig var3 = secureVariable(mockGoCipher, "foo3", "bar3", "encryptedBar3"); environmentVariablesConfig.addAll(Arrays.asList(var1, var2, var3, plainVar1)); List<EnvironmentVariableConfig> variables = environmentVariablesConfig.getSecureVariables(); assertThat(variables.size(), is(3)); assertThat(variables, hasItems(var1, var2, var3)); }
@Test public void shouldGetOnlyPlainTextVariables() throws CryptoException { EnvironmentVariablesConfig environmentVariablesConfig = new EnvironmentVariablesConfig(); EnvironmentVariableConfig plainVar1 = new EnvironmentVariableConfig("var1", "var1_value"); EnvironmentVariableConfig plainVar2 = new EnvironmentVariableConfig("var2", "var2_value"); EnvironmentVariableConfig var1 = secureVariable(goCipher, "foo1", "bar1", "encryptedBar1"); EnvironmentVariableConfig var2 = secureVariable(goCipher, "foo2", "bar2", "encryptedBar2"); environmentVariablesConfig.addAll(Arrays.asList(var1, var2, plainVar1, plainVar2)); List<EnvironmentVariableConfig> variables = environmentVariablesConfig.getPlainTextVariables(); assertThat(variables.size(), is(2)); assertThat(variables, hasItems(plainVar1, plainVar2)); }
@Test public void shouldCreateASingleJobIfRunOnAllAgentsIsFalse() throws Exception { JobConfig jobConfig = new JobConfig("foo"); SchedulingContext context = mock(SchedulingContext.class); when(context.getEnvironmentVariablesConfig()).thenReturn(new EnvironmentVariablesConfig()); when(context.overrideEnvironmentVariables(any(EnvironmentVariablesConfig.class))).thenReturn(context); RunOnAllAgents.CounterBasedJobNameGenerator jobNameGenerator = new RunOnAllAgents.CounterBasedJobNameGenerator(CaseInsensitiveString.str(jobConfig.name())); JobInstances jobs = instanceFactory.createJobInstance(new CaseInsensitiveString("someStage"), jobConfig, new DefaultSchedulingContext(), new TimeProvider(), jobNameGenerator); assertThat(jobs.toArray(), hasItemInArray(hasProperty("name", is("foo")))); assertThat(jobs.toArray(), hasItemInArray(hasProperty("agentUuid", nullValue()))); assertThat(jobs.toArray(), hasItemInArray(hasProperty("runOnAllAgents", is(false)))); assertThat(jobs.size(), is(1)); }
@Test public void shouldAddEnvironmentVariablesToJobPlan() { EnvironmentVariablesConfig variablesConfig = new EnvironmentVariablesConfig(); variablesConfig.add("blahVar", "blahVal"); JobConfig jobConfig = new JobConfig("foo"); jobConfig.setVariables(variablesConfig); SchedulingContext context = new DefaultSchedulingContext(); JobPlan plan = instanceFactory.createJobPlan(jobConfig, context); assertThat(plan.getVariables(), hasItem(new EnvironmentVariable("blahVar", "blahVal"))); }
@Test public void shouldPopulateErrorWhenVariableNameStartsWithSpace() { environmentVariablesConfig = new EnvironmentVariablesConfig(); EnvironmentVariableConfig one = new EnvironmentVariableConfig(" foo", "BAR"); environmentVariablesConfig.add(one); environmentVariablesConfig.validate(context); assertThat(one.errors().isEmpty(), is(false)); assertThat(one.errors().on(EnvironmentVariableConfig.NAME), contains("Environment Variable cannot start or end with spaces for pipeline 'some-pipeline'.")); }
@Test public void shouldPopulateErrorWhenVariableNameIsEmpty() { environmentVariablesConfig = new EnvironmentVariablesConfig(); EnvironmentVariableConfig one = new EnvironmentVariableConfig("", "BAR"); environmentVariablesConfig.add(one); environmentVariablesConfig.validate(context); assertThat(one.errors().isEmpty(), is(false)); assertThat(one.errors().on(EnvironmentVariableConfig.NAME), contains("Environment Variable cannot have an empty name for pipeline 'some-pipeline'.")); }
@Test public void shouldPopulateErrorWhenVariableNameContainsLeadingAndTrailingSpaces() { environmentVariablesConfig = new EnvironmentVariablesConfig(); EnvironmentVariableConfig one = new EnvironmentVariableConfig(" FOO ", "BAR"); environmentVariablesConfig.add(one); environmentVariablesConfig.validate(context); assertThat(one.errors().isEmpty(), is(false)); assertThat(one.errors().on(EnvironmentVariableConfig.NAME), contains("Environment Variable cannot start or end with spaces for pipeline 'some-pipeline'.")); }