public List<CaseInsensitiveString> names() { ArrayList<CaseInsensitiveString> names = new ArrayList<>(); for (EnvironmentConfig environment : this) { names.add(environment.name()); } return names; }
public MergeEnvironmentConfig(List<EnvironmentConfig> configs) { CaseInsensitiveString name = configs.get(0).name(); for (EnvironmentConfig part : configs) { if (!part.name().equals(name)) throw new IllegalArgumentException( "partial environment configs must all have the same name"); this.add(part); } }
public EnvironmentConfig find(CaseInsensitiveString envName) { for (EnvironmentConfig environmentConfig : this) { if(environmentConfig.name().equals(envName)) { return environmentConfig; } } return null; }
private void haltIfEntityWithSameNameExists(EnvironmentConfig environmentConfig) { HttpLocalizedOperationResult result = new HttpLocalizedOperationResult(); ConfigElementForEdit<EnvironmentConfig> existingEnvironmentConfig = environmentConfigService.getMergedEnvironmentforDisplay(environmentConfig.name().toString(), result); if (existingEnvironmentConfig == null) { return; } environmentConfig.addError("name", format("Environment name should be unique. Environment with name '%s' already exists.", environmentConfig.name().toString())); throw haltBecauseEntityAlreadyExists(jsonWriter(environmentConfig), "environment", environmentConfig.name().toString()); }
public TreeSet<String> environmentsForAgent(String agentUuid) { TreeSet<String> environmentNames = new TreeSet<>(new AlphaAsciiComparator()); for (EnvironmentConfig config : this) { if (config.hasAgent(agentUuid)) { environmentNames.add(CaseInsensitiveString.str(config.name())); } } return environmentNames; }
private boolean validateRemovalOfInvalidPipelines() { EnvironmentConfig environmentConfig = this.environmentConfig; for (String pipelineToRemove : pipelinesToRemove) { if (!environmentConfig.containsPipeline(new CaseInsensitiveString(pipelineToRemove))) { String message = String.format("Pipeline '%s' does not exist in environment '%s'", pipelineToRemove, environmentConfig.name()); result.unprocessableEntity(LocalizedMessage.composite(actionFailed, message)); return false; } } return true; }
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; }
private boolean doesEnvironmentAlreadyExist() { CaseInsensitiveString environmentName = environmentConfig.name(); if (goConfigService.hasEnvironmentNamed(environmentName)) { result.conflict(LocalizedMessage.resourceAlreadyExists("environment", environmentName)); return true; } return false; } }
public List<EnvironmentPipelineModel> getAllRemotePipelinesForUserInEnvironment(Username user, EnvironmentConfig environment) { List<EnvironmentPipelineModel> pipelines = new ArrayList<>(); for (EnvironmentPipelineConfig pipelineConfig : environment.getRemotePipelines()) { String pipelineName = CaseInsensitiveString.str(pipelineConfig.getName()); if (securityService.hasViewPermissionForPipeline(user, pipelineName)) { pipelines.add(new EnvironmentPipelineModel(pipelineName, CaseInsensitiveString.str(environment.name()))); } } Collections.sort(pipelines); return pipelines; }
private void update(EntityConfigUpdateCommand command, EnvironmentConfig config, Username currentUser, HttpLocalizedOperationResult result, String actionFailed) { try { goConfigService.updateConfig(command, currentUser); } catch (Exception e) { if ((e instanceof GoConfigInvalidException) && !result.hasMessage()) { result.unprocessableEntity(entityConfigValidationFailed(config.getClass().getAnnotation(ConfigTag.class).value(), config.name(), e.getMessage())); } else if (!result.hasMessage()) { result.badRequest(LocalizedMessage.composite(actionFailed, e.getMessage())); } } } }
private boolean validateRemovalOfRemoteAgents(EnvironmentConfig preprocessedEnvironmentConfig) { for (String agentToRemove : agentsToRemove) { if (preprocessedEnvironmentConfig.containsAgentRemotely(agentToRemove)) { String origin = ((MergeEnvironmentConfig) preprocessedEnvironmentConfig).getOriginForAgent(agentToRemove).displayName(); String message = String.format("Agent with uuid '%s' cannot be removed from environment '%s' as the association has been defined remotely in [%s]", agentToRemove, environmentConfig.name(), origin); result.unprocessableEntity(LocalizedMessage.composite(actionFailed, message)); return false; } } return true; }
private boolean validateRemovalOfEnvironmentVariables(EnvironmentConfig preprocessedEnvironmentConfig) { for (String variableName : envVarsToRemove) { if (preprocessedEnvironmentConfig.containsEnvironmentVariableRemotely(variableName)) { String origin = ((MergeEnvironmentConfig) preprocessedEnvironmentConfig).getOriginForEnvironmentVariable(variableName).displayName(); String message = String.format("Environment variable with name '%s' cannot be removed from environment '%s' as the association has been defined remotely in [%s]", variableName, environmentConfig.name(), origin); result.unprocessableEntity(LocalizedMessage.composite(actionFailed, message)); return false; } } return true; }
private boolean validateRemovalOfRemotePipelines(EnvironmentConfig preprocessedEnvironmentConfig) { for (String pipelineToRemove : pipelinesToRemove) { if (preprocessedEnvironmentConfig.containsPipelineRemotely(new CaseInsensitiveString(pipelineToRemove))) { String origin = ((MergeEnvironmentConfig) preprocessedEnvironmentConfig).getOriginForPipeline(new CaseInsensitiveString(pipelineToRemove)).displayName(); String message = String.format("Pipeline '%s' cannot be removed from environment '%s' as the association has been defined remotely in [%s]", pipelineToRemove, environmentConfig.name(), origin); result.unprocessableEntity(LocalizedMessage.composite(actionFailed, message)); return false; } } return true; }
@Override public boolean isValid(CruiseConfig preprocessedConfig) { EnvironmentConfig preprocessedEnvironmentConfig = preprocessedConfig.getEnvironments().find(environmentConfig.name()); boolean isValid = validateRemovalOfInvalidEntities(); if (preprocessedEnvironmentConfig instanceof MergeEnvironmentConfig) { isValid = validateRemovalOfRemoteEntities(preprocessedEnvironmentConfig); } return isValid && super.isValid(preprocessedConfig); }
@Override public boolean canContinue(CruiseConfig cruiseConfig) { if (!goConfigService.isAdministrator(username.getUsername())) { result.forbidden(LocalizedMessage.forbiddenToEditResource("environment", environmentConfig.name(), username.getDisplayName()), HealthStateType.forbidden()); return false; } return true; }
@Test public void shouldUpdateName() { environmentConfig.setConfigAttributes(Collections.singletonMap(BasicEnvironmentConfig.NAME_FIELD, "PROD")); assertThat(environmentConfig.name(), is(new CaseInsensitiveString("PROD"))); }
public boolean isValid(CruiseConfig preprocessedConfig) { EnvironmentConfig config = preprocessedConfig.getEnvironments().find(this.environmentConfig.name()); boolean isValid = config.validateTree(ConfigSaveValidationContext.forChain(preprocessedConfig), preprocessedConfig); if (!isValid) { String allErrors = new AllConfigErrors(preprocessedConfig.getAllErrors()).asString(); result.unprocessableEntity(LocalizedMessage.composite(actionFailed, allErrors)); } return isValid; }
@Test public void shouldNotCreateMergeEnvironmentConfig_WhenFileHasNoEnvironment_AndNotForEdit() { BasicCruiseConfig mainCruiseConfig = new BasicCruiseConfig(pipelines); PartialConfig partialConfig = PartialConfigMother.withEnvironment("remoteEnv"); partialConfig.setOrigins(new RepoConfigOrigin()); cruiseConfig = new BasicCruiseConfig(mainCruiseConfig, false, partialConfig); assertThat(cruiseConfig.getEnvironments().size(), is(1)); assertThat(cruiseConfig.getEnvironments().get(0) instanceof MergeEnvironmentConfig, is(false)); assertThat(cruiseConfig.getEnvironments().get(0).name(), is(new CaseInsensitiveString("remoteEnv"))); assertThat(cruiseConfig.getEnvironments().get(0).isLocal(), is(false)); }
@Test public void shouldCreateEmptyEnvironmentConfigForEditsWithUIOrigin_WhenFileHasNoEnvironment_AndForEdit() { BasicCruiseConfig mainCruiseConfig = new BasicCruiseConfig(pipelines); PartialConfig partialConfig = PartialConfigMother.withEnvironment("remoteEnv"); partialConfig.setOrigins(new RepoConfigOrigin()); cruiseConfig = new BasicCruiseConfig(mainCruiseConfig, true, partialConfig); assertThat(cruiseConfig.getEnvironments().size(), is(1)); assertThat(cruiseConfig.getEnvironments().get(0) instanceof MergeEnvironmentConfig, is(true)); assertThat(cruiseConfig.getEnvironments().get(0).name(), is(new CaseInsensitiveString("remoteEnv"))); MergeEnvironmentConfig mergedEnv = (MergeEnvironmentConfig) cruiseConfig.getEnvironments().get(0); assertThat(mergedEnv.size(), is(2)); }