private String getPipelineGroup() { if (group == null) { this.group = goConfigService.findGroupNameByPipeline(pipelineConfig.name()); } return group; }
protected final CruiseConfig configForEditing() { CruiseConfig config = getConfigForEditing(); this.md5 = config.getMd5(); return config; }
@Deprecated() public CruiseConfig currentCruiseConfig() { return getCurrentConfig(); }
public PipelineConfigDependencyGraph upstreamDependencyGraphOf(String pipelineName) { CruiseConfig currentConfig = getCurrentConfig(); return upstreamDependencyGraphOf(pipelineName, currentConfig); }
public String xml() { return configAsXml(getConfigForEditing()); }
public boolean isUserAdminOfGroup(final CaseInsensitiveString userName, String groupName) { if (!isSecurityEnabled()) { return true; } PipelineConfigs group = null; if (groupName != null) { group = getCurrentConfig().findGroup(groupName); } return isUserAdmin(new Username(userName)) || isUserAdminOfGroup(userName, group); }
public boolean hasOperatePermissionForStage(String pipelineName, String stageName, String username) { if (!goConfigService.isSecurityEnabled()) { return true; } if (!goConfigService.hasStageConfigNamed(pipelineName, stageName)) { return false; } StageConfig stage = goConfigService.stageConfigNamed(pipelineName, stageName); CaseInsensitiveString userName = new CaseInsensitiveString(username); //TODO - #2517 - stage not exist if (stage.hasOperatePermissionDefined()) { CruiseConfig cruiseConfig = goConfigService.getCurrentConfig(); String groupName = goConfigService.findGroupNameByPipeline(new CaseInsensitiveString(pipelineName)); PipelineConfigs group = goConfigService.getCurrentConfig().findGroup(groupName); if (isUserAdmin(new Username(userName)) || isUserAdminOfGroup(userName, group)) { return true; } return goConfigService.readAclBy(pipelineName, stageName).isGranted(userName); } return hasOperatePermissionForPipeline(new CaseInsensitiveString(username), pipelineName); }
@Override public Map<String, Object> asJson() { LinkedHashMap<String, Object> json = new LinkedHashMap<>(); CruiseConfig currentConfig = goConfigService.getCurrentConfig(); LinkedHashMap<String, Object> validConfig = new LinkedHashMap<>(); validConfig.put("Number of pipelines", goConfigService.getAllPipelineConfigs().size()); validConfig.put("Number of agents", goConfigService.agents().size()); validConfig.put("Number of environments", currentConfig.getEnvironments().size()); validConfig.put("Number of unique materials", currentConfig.getAllUniqueMaterials().size()); validConfig.put("Number of schedulable materials", goConfigService.getSchedulableMaterials().size()); json.put("Valid Config", validConfig); json.put("Security", securityInformation()); return json; }
public boolean canEditPipeline(String pipelineName, Username username) { PipelineConfig pipelineConfig; try { pipelineConfig = pipelineConfigNamed(new CaseInsensitiveString(pipelineName)); } catch (PipelineNotFoundException e) { return false; } return pipelineConfig != null && pipelineConfig.isLocal() && isUserAdminOfGroup(username.getUsername(), findGroupNameByPipeline(pipelineConfig.name())); }
@Override public boolean canContinue(CruiseConfig cruiseConfig) { String groupName = goConfigService.findGroupNameByPipeline(pipelineConfig.name()); if (goConfigService.groups().hasGroup(groupName) && !goConfigService.isUserAdminOfGroup(currentUser.getUsername(), groupName)) { result.forbidden(LocalizedMessage.forbiddenToDelete("Pipeline", pipelineConfig.getName()), HealthStateType.forbidden()); return false; } return true; } }
@Override public void onEntityConfigChange(PipelineConfig pipelineConfig) { LOGGER.info("[Configuration Changed] Removing deleted jobs for pipeline {}.", pipelineConfig.name()); synchronized (BuildAssignmentService.this) { List<JobPlan> jobsToRemove; if (goConfigService.hasPipelineNamed(pipelineConfig.name())) { jobsToRemove = getMismatchingJobPlansFromUpdatedPipeline(pipelineConfig, jobPlans); } else { jobsToRemove = getAllJobPlansFromDeletedPipeline(pipelineConfig, jobPlans); } IterableUtils.forEach(jobsToRemove, o -> removeJob(o)); } } };
public PipelineModel latestPipelineModel(Username username, String pipelineName) { PipelineInstanceModel instanceModel = latest(pipelineName, username); if (instanceModel != null) { boolean canForce = schedulingCheckerService.canManuallyTrigger(pipelineName, username); PipelinePauseInfo pauseInfo = pipelinePauseService.pipelinePauseInfo(pipelineName); PipelineModel pipelineModel = new PipelineModel(pipelineName, canForce, securityService.hasOperatePermissionForPipeline( username.getUsername(), pipelineName ), pauseInfo); populateLockStatus(instanceModel.getName(), username, instanceModel); pipelineModel.addPipelineInstance(instanceModel); String groupName = goConfigService.findGroupNameByPipeline(new CaseInsensitiveString(pipelineName)); if (goConfigService.isPipelineEditable(pipelineName)) pipelineModel.updateAdministrability(goConfigService.isUserAdminOfGroup(username.getUsername(), groupName)); else pipelineModel.updateAdministrability(false); return pipelineModel; } return null; }
private boolean canEditPipeline(String pipelineName, Username username, LocalizedOperationResult result) { return canEditPipeline(pipelineName, username, result, findGroupNameByPipeline(new CaseInsensitiveString(pipelineName))); }
public List<PipelineConfig> getAllPipelineConfigsForEditForUser(Username username) { ArrayList<PipelineConfig> pipelineConfigs = new ArrayList<>(); List<String> groupsForUser = getConfigForEditing().getGroupsForUser(username.getUsername(), rolesForUser(username.getUsername())); for (String groupName : groupsForUser) { pipelineConfigs.addAll(getAllPipelinesForEditInGroup(groupName).getPipelines()); } return pipelineConfigs; }
@Override public StageNotificationData notificationDataFor(Stage stage) { String pipelineName = stage.getIdentifier().getPipelineName(); String pipelineGroup = goConfigService.findGroupNameByPipeline(new CaseInsensitiveString(pipelineName)); BuildCause buildCause = pipelineSqlMapDao.findBuildCauseOfPipelineByNameAndCounter(pipelineName, stage.getIdentifier().getPipelineCounter()); if (goConfigService.hasPreviousStage(pipelineName, stage.getName())) { stage.setPreviousStage(previousStage(stage)); } return new StageNotificationData(stage, buildCause, pipelineGroup); } }
private PipelineConfigDependencyGraph findUpstream(PipelineConfig currentPipeline) { List<PipelineConfigDependencyGraph> graphs = new ArrayList<>(); for (CaseInsensitiveString name : currentPipeline.upstreamPipelines()) { PipelineConfig pipelineConfig = getCurrentConfig().pipelineConfigByName(name); graphs.add(findUpstream(pipelineConfig)); } return new PipelineConfigDependencyGraph(currentPipeline, graphs.toArray(new PipelineConfigDependencyGraph[0])); }
private boolean isUserTemplateAdmin(Username username) { return getCurrentConfig().getTemplates().canViewAndEditTemplate(username.getUsername(), rolesForUser(username.getUsername())); }
private ArtifactStore getArtifactStoreFor(FetchPluggableArtifactTask task, JobIdentifier fetchFrom) { final JobConfig job = goConfigService.getCurrentConfig().findJob(fetchFrom.getPipelineName(), fetchFrom.getStageName(), fetchFrom.getBuildName()); final PluggableArtifactConfig artifactConfig = job.artifactConfigs().findByArtifactId(task.getArtifactId()); if (artifactConfig == null) { throw new RuntimeException(format("Pluggable artifact with id `%s` does not exist.", task.getArtifactId())); } final ArtifactStore artifactStore = goConfigService.artifactStores().find(artifactConfig.getStoreId()); if (artifactStore == null) { throw new RuntimeException(format("Artifact store with id `%s` does not exist.", task.getArtifactId())); } return artifactStore; }
private void removeRevisionsBasedOnPermissionAndCurrentConfig(ValueStreamMap valueStreamMap, Username username) { for (Node node : valueStreamMap.allNodes()) { if (node instanceof PipelineDependencyNode) { String pipelineName = node.getName(); PipelineDependencyNode pipelineDependencyNode = (PipelineDependencyNode) node; if (!goConfigService.hasPipelineNamed(new CaseInsensitiveString(pipelineName))) { pipelineDependencyNode.setDeleted(); } else if (!securityService.hasViewPermissionForPipeline(username, pipelineName)) { pipelineDependencyNode.setNoPermission(); } pipelineDependencyNode.setCanEdit(goConfigService.canEditPipeline(pipelineName, username)); } } }
} else { PartialConfig partialConfig = plugin.parseContent(contents, context); CruiseConfig config = partialConfigService.merge(partialConfig, context.configMaterial().getFingerprint(), CLONER.deepClone(gcs.getConfigForEditing())); gcs.validateCruiseConfig(config); result.update(Collections.emptyList(), true);