public ConfigOrigin getOriginForEnvironmentVariable(String variableName) { for (EnvironmentConfig part : this) { if (part.getVariables().hasVariable(variableName)) { return part.getOrigin(); } } return null; }
private boolean validateRemovalOfInvalidEnvironmentVariable() { EnvironmentConfig environmentConfig = this.environmentConfig; for (String variableName : envVarsToRemove) { if (!environmentConfig.getVariables().hasVariable(variableName)) { String message = String.format("Environment variable with name '%s' does not exist in environment '%s'", variableName, environmentConfig.name()); result.unprocessableEntity(LocalizedMessage.composite(actionFailed, message)); return false; } } return true; }
@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; }
private void validateDuplicateEnvironmentVariables(ValidationContext validationContext) { EnvironmentVariablesConfig allVariables = new EnvironmentVariablesConfig(); for (EnvironmentConfig part : this) { for (EnvironmentVariableConfig partVariable : part.getVariables()) { if (!allVariables.hasVariable(partVariable.getName())) { allVariables.add(partVariable); } else { //then it must be equal if (!allVariables.contains(partVariable)) configErrors.add(CONSISTENT_KV, String.format( "Environment variable '%s' is defined more than once with different values", partVariable.getName())); } } } }
@Test public void shouldUpdateEnvironmentVariables() { environmentConfig.addEnvironmentVariable("hello", "world"); environmentConfig.setConfigAttributes(Collections.singletonMap(BasicEnvironmentConfig.VARIABLES_FIELD, Arrays.asList(envVar("foo", "bar"), envVar("baz", "quux")))); assertThat(environmentConfig.getVariables(), hasItem(new EnvironmentVariableConfig("foo", "bar"))); assertThat(environmentConfig.getVariables(), hasItem(new EnvironmentVariableConfig("baz", "quux"))); assertThat(environmentConfig.getVariables().size(), is(2)); }
@Override public EnvironmentVariablesConfig variablesFor(String pipelineName) { EnvironmentVariablesConfig pipelineVariables = pipelineConfigByName(new CaseInsensitiveString(pipelineName)).getVariables(); EnvironmentConfig environment = this.environments.findEnvironmentForPipeline(new CaseInsensitiveString(pipelineName)); return environment != null ? environment.getVariables().overrideWith(pipelineVariables) : pipelineVariables; }
@Test public void shouldNotSetEnvironmentVariableFromConfigAttributesIfNameAndValueIsEmpty() { environmentConfig.setConfigAttributes(Collections.singletonMap(BasicEnvironmentConfig.VARIABLES_FIELD, Arrays.asList(envVar("", "anything"), envVar("", "")))); assertThat(environmentConfig.errors().isEmpty(), is(true)); assertThat(environmentConfig.getVariables(), hasItem(new EnvironmentVariableConfig("", "anything"))); assertThat(environmentConfig.getVariables().size(), is(1)); }
@Override public boolean equals(Object o) { if (this == o) { return true; } EnvironmentConfig that = as(EnvironmentConfig.class, o); if (that == null) return false; if (agents != null ? !agents.equals(that.getAgents()) : that.getAgents() != null) { return false; } if (name != null ? !name.equals(that.name()) : that.name() != null) { return false; } if (pipelines != null ? !pipelines.equals(that.getPipelines()) : that.getPipelines() != null) { return false; } if (variables != null ? !variables.equals(that.getVariables()) : that.getVariables() != null) { return false; } return true; }
@Override public boolean equals(Object o) { if (this == o) { return true; } EnvironmentConfig that = as(EnvironmentConfig.class, o); if (that == null) return false; if (this.getAgents() != null ? !this.getAgents().equals(that.getAgents()) : that.getAgents() != null) { return false; } if (this.name() != null ? !this.name().equals(that.name()) : that.name() != null) { return false; } if (this.getPipelines() != null ? !this.getPipelines().equals(that.getPipelines()) : that.getPipelines() != null) { return false; } if (this.getVariables() != null ? !this.getVariables().equals(that.getVariables()) : that.getVariables() != null) { return false; } return true; }
@Test public void shouldUpdateEnvironmentVariablesWhenSourceIsEditable() { BasicEnvironmentConfig uatLocalPart = new BasicEnvironmentConfig(new CaseInsensitiveString("UAT")); uatLocalPart.setOrigins(new FileConfigOrigin()); BasicEnvironmentConfig uatRemotePart = new BasicEnvironmentConfig(new CaseInsensitiveString("UAT")); uatRemotePart.setOrigins(new RepoConfigOrigin()); uatLocalPart.addEnvironmentVariable("hello", "world"); environmentConfig = new MergeEnvironmentConfig(uatLocalPart, uatRemotePart); environmentConfig.setConfigAttributes(Collections.singletonMap(BasicEnvironmentConfig.VARIABLES_FIELD, Arrays.asList(envVar("foo", "bar"), envVar("baz", "quux"),envVar("hello", "you")))); assertThat(environmentConfig.getVariables(), hasItem(new EnvironmentVariableConfig("hello", "you"))); assertThat(environmentConfig.getVariables(), hasItem(new EnvironmentVariableConfig("foo", "bar"))); assertThat(environmentConfig.getVariables(), hasItem(new EnvironmentVariableConfig("baz", "quux"))); assertThat(environmentConfig.getVariables().size(), is(3)); assertThat("ChangesShouldBeInLocalConfig",uatLocalPart.getVariables(), hasItem(new EnvironmentVariableConfig("hello", "you"))); assertThat("ChangesShouldBeInLocalConfig",uatLocalPart.getVariables(), hasItem(new EnvironmentVariableConfig("foo", "bar"))); assertThat("ChangesShouldBeInLocalConfig",uatLocalPart.getVariables(), hasItem(new EnvironmentVariableConfig("baz", "quux"))); assertThat("ChangesShouldBeInLocalConfig",uatLocalPart.getVariables().size(), is(3)); }
@Override public void update(CruiseConfig configForEdit) throws Exception { EnvironmentConfig environmentConfig = configForEdit.getEnvironments().named(this.environmentConfig.name()); for (String uuid : agentsToAdd) { environmentConfig.addAgent(uuid); } for (String uuid : agentsToRemove) { environmentConfig.removeAgent(uuid); } for (String pipelineName : pipelinesToAdd) { environmentConfig.addPipeline(new CaseInsensitiveString(pipelineName)); } for (String pipelineName : pipelinesToRemove) { environmentConfig.removePipeline(new CaseInsensitiveString(pipelineName)); } for (EnvironmentVariableConfig variableConfig : envVarsToAdd) { environmentConfig.addEnvironmentVariable(variableConfig); } for (String variableName : envVarsToRemove) { environmentConfig.getVariables().removeIfExists(variableName); } }
public static void toJSON(OutputWriter outputWriter, EnvironmentConfig environmentViewModel) { String envName = environmentViewModel.name().toString(); EnvironmentPipelinesConfig pipelines = environmentViewModel.getPipelines(); EnvironmentAgentsConfig agentsViewModel = environmentViewModel.getAgents(); EnvironmentVariablesConfig environmentVariableConfigs = environmentViewModel.getVariables(); outputWriter .addLinks(linksWriter -> linksWriter .addLink("self", Routes.Environments.name(envName)) .addAbsoluteLink("doc", Routes.Environments.DOC) .addLink("find", Routes.Environments.find())) .add("name", envName) .addChildList("agents", agentListWriter -> agentsViewModel.forEach(agent -> agentListWriter.addChild(propertyWriter -> AgentRepresenter.toJSON(propertyWriter, agent)) ) ) .addChildList("pipelines", listWriter -> pipelines.forEach(pipelineConfig -> listWriter.addChild(propertyWriter -> PipelineRepresenter.toJSON(propertyWriter, pipelineConfig)))) .addChildList("environment_variables", environmentListWriter -> environmentVariableConfigs.forEach(environmentVariable -> environmentListWriter.addChild(propertyWriter -> EnvironmentVariableRepresenter.toJSON(propertyWriter, environmentVariable)) ) ); }