private void validateDuplicateAgents(ValidationContext validationContext) { ArrayList<String> allAgents = new ArrayList<>(); for (EnvironmentConfig part : this) { for (EnvironmentAgentConfig agent : part.getAgents()) { if (allAgents.contains(agent.getUuid())) { String message = String.format("Environment agent '%s' is defined more than once.", agent.getUuid()); configErrors.add("agent", message); } else { allAgents.add(agent.getUuid()); } } } }
@Override public EnvironmentAgentsConfig getAgents() { EnvironmentAgentsConfig allAgents = new EnvironmentAgentsConfig(); for (EnvironmentConfig part : this) { for (EnvironmentAgentConfig partAgent : part.getAgents()) { if (!allAgents.contains(partAgent)) allAgents.add(partAgent); } } return allAgents; }
public List<ConfigErrors> validateConfig(CruiseConfig cruiseConfig) { List<ConfigErrors> errors = new ArrayList<>(); Set<String> uuids = cruiseConfig.agents().acceptedUuids(); if (!cruiseConfig.getEnvironments().validateContainOnlyUuids(uuids)) { for (EnvironmentConfig environmentConfig : cruiseConfig.getEnvironments()) { for (EnvironmentAgentConfig environmentAgentConfig : environmentConfig.getAgents()) { if (!environmentAgentConfig.errors().isEmpty()) { errors.add(environmentAgentConfig.errors()); } } } } return errors; } }
@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; }
@Test public void shouldUpdateAgents() { environmentConfig.addAgent("uuid-1"); environmentConfig.setConfigAttributes(Collections.singletonMap(BasicEnvironmentConfig.AGENTS_FIELD, Arrays.asList(Collections.singletonMap("uuid", "uuid-2"), Collections.singletonMap("uuid", "uuid-3")))); EnvironmentAgentsConfig expectedAgents = new EnvironmentAgentsConfig(); expectedAgents.add(new EnvironmentAgentConfig("uuid-2")); expectedAgents.add(new EnvironmentAgentConfig("uuid-3")); assertThat(environmentConfig.getAgents(), is(expectedAgents)); }
@Test public void shouldRemoveAgentFromEnvironment() throws Exception { environmentConfig.addAgent("uuid1"); environmentConfig.addAgent("uuid2"); assertThat(environmentConfig.getAgents().size(), is(2)); assertThat(environmentConfig.hasAgent("uuid1"), is(true)); assertThat(environmentConfig.hasAgent("uuid2"), is(true)); environmentConfig.removeAgent("uuid1"); assertThat(environmentConfig.getAgents().size(), is(1)); assertThat(environmentConfig.hasAgent("uuid1"), is(false)); assertThat(environmentConfig.hasAgent("uuid2"), is(true)); }
@Test public void shouldAddAgentToEnvironmentIfNotPresent() throws Exception { environmentConfig.addAgent("uuid"); environmentConfig.addAgentIfNew("uuid"); environmentConfig.addAgentIfNew("uuid1"); assertThat(environmentConfig.getAgents().size(), is(2)); assertThat(environmentConfig.hasAgent("uuid"), is(true)); assertThat(environmentConfig.hasAgent("uuid1"), is(true)); }
public Agents agentsForPipeline(final CaseInsensitiveString pipelineName) { Agents configs = new Agents(); if (environments.isPipelineAssociatedWithAnyEnvironment(pipelineName)) { EnvironmentConfig forPipeline = environments.findEnvironmentForPipeline(pipelineName); for (EnvironmentAgentConfig environmentAgentConfig : forPipeline.getAgents()) { configs.add(goConfigService.agentByUuid(environmentAgentConfig.getUuid())); } } else { for (AgentConfig agentConfig : goConfigService.agents()) { if (!environments.isAgentUnderEnvironment(agentConfig.getUuid())) { configs.add(agentConfig); } } } return configs; }
@Test public void shouldRemoveAgentFromAllEnvironments() throws Exception { BasicEnvironmentConfig env2 = new BasicEnvironmentConfig(new CaseInsensitiveString("prod")); env2.addPipeline(new CaseInsensitiveString("test")); env2.addAgent("agent-one"); env2.addAgent("agent-two"); configs.add(env2); BasicEnvironmentConfig env3 = new BasicEnvironmentConfig(new CaseInsensitiveString("dev")); env3.addPipeline(new CaseInsensitiveString("build")); env3.addAgent("agent-two"); env3.addAgent("agent-three"); configs.add(env3); assertThat(configs.get(0).getAgents().size(), is(1)); assertThat(configs.get(1).getAgents().size(), is(2)); assertThat(configs.environmentsForAgent("agent-one").size(), is(2)); configs.removeAgentFromAllEnvironments("agent-one"); assertThat(configs.get(0).getAgents().size(), is(0)); assertThat(configs.get(1).getAgents().size(), is(1)); assertThat(configs.get(2).getAgents().size(), is(2)); assertThat(configs.environmentsForAgent("agent-one").size(), is(0)); assertThat(configs.environmentsForAgent("agent-two").size(), is(2)); assertThat(configs.environmentsForAgent("agent-three").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 (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 shouldModifyEmptyEnvironmentConfigWithUIOrigin() { BasicCruiseConfig mainCruiseConfig = new BasicCruiseConfig(pipelines); PartialConfig partialConfig = PartialConfigMother.withEnvironment("remoteEnv"); partialConfig.setOrigins(new RepoConfigOrigin()); cruiseConfig = new BasicCruiseConfig(mainCruiseConfig, true, partialConfig); cruiseConfig.getEnvironments().get(0).addAgent("agent"); MergeEnvironmentConfig mergedEnv = (MergeEnvironmentConfig) cruiseConfig.getEnvironments().get(0); assertThat(mergedEnv.getFirstEditablePart().getAgents(), hasItem(new EnvironmentAgentConfig("agent"))); }
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)) ) ); }