use of com.epam.pipeline.manager.docker.DockerClient in project cloud-pipeline by epam.
the class AggregatingToolScanManager method getActualScan.
private Optional<ToolVersionScanResult> getActualScan(Tool tool, String tag, DockerRegistry registry) {
Optional<ToolVersionScanResult> versionScanResult = toolManager.loadToolVersionScan(tool.getId(), tag);
if (versionScanResult.isPresent() && versionScanResult.get().getLastLayerRef() != null) {
ToolVersionScanResult vs = versionScanResult.get();
LOGGER.info(messageHelper.getMessage(MessageConstants.INFO_TOOL_SCAN_ALREADY_SCANNED, tool.getImage()));
DockerClient dockerClient = getDockerClient(tool.getImage(), registry);
String dockerRef = dockerClient.getVersionAttributes(registry, tool.getImage(), tag).getDigest();
boolean isActual = vs.getDigest() != null && dockerRef.equals(vs.getDigest());
if (isActual) {
vs.setScanDate(DateUtils.now());
return Optional.of(vs);
} else {
LOGGER.info(messageHelper.getMessage(MessageConstants.INFO_TOOL_SCAN_NEW_LAYERS, tool.getImage(), tag, vs.getDigest(), dockerRef));
}
}
return Optional.empty();
}
use of com.epam.pipeline.manager.docker.DockerClient in project cloud-pipeline by epam.
the class AggregatingToolScanManager method fetchLayers.
private List<String> fetchLayers(Tool tool, String tag, DockerRegistry registry) throws ToolScanExternalServiceException {
DockerClient dockerClient = getDockerClient(tool.getImage(), registry);
ManifestV2 manifest = dockerClient.getManifest(registry, tool.getImage(), tag).orElseThrow(() -> new ToolScanExternalServiceException(tool, messageHelper.getMessage(MessageConstants.ERROR_REGISTRY_COULD_NOT_GET_MANIFEST, tool.getImage())));
return manifest.getLayers().stream().map(c -> c.getDigest()).collect(Collectors.toList());
}
use of com.epam.pipeline.manager.docker.DockerClient in project cloud-pipeline by epam.
the class ToolScanScheduler method scheduledToolScan.
/**
* A scheduled scan, that runs for all the registries, all tools and all tool versions, sends them to Tool Scanning
* System and stores scanning results to the database.
*/
public void scheduledToolScan() {
if (!preferenceManager.getPreference(SystemPreferences.DOCKER_SECURITY_TOOL_SCAN_ENABLED)) {
LOGGER.info(messageHelper.getMessage(MessageConstants.ERROR_TOOL_SCAN_DISABLED));
return;
} else {
LOGGER.info(messageHelper.getMessage(MessageConstants.INFO_TOOL_SCAN_SCHEDULED_STARTED));
}
boolean scanAllRegistries = preferenceManager.getPreference(SystemPreferences.DOCKER_SECURITY_TOOL_SCAN_ALL_REGISTRIES);
List<DockerRegistry> registries = scanAllRegistries ? dockerRegistryDao.loadAllDockerRegistry() : dockerRegistryDao.loadDockerRegistriesWithSecurityScanEnabled();
for (DockerRegistry registry : registries) {
LOGGER.info(messageHelper.getMessage(MessageConstants.INFO_TOOL_SCAN_REGISTRY_STARTED, registry.getPath()));
for (Tool tool : registry.getTools()) {
DockerClient dockerClient = getDockerClient(registry, tool);
try {
List<String> versions = toolManager.loadTags(tool.getId());
for (String version : versions) {
try {
ToolVersionScanResult result = toolScanManager.scanTool(tool, version, false);
toolManager.updateToolVulnerabilities(result.getVulnerabilities(), tool.getId(), version);
toolManager.updateToolDependencies(result.getDependencies(), tool.getId(), version);
toolManager.updateToolVersionScanStatus(tool.getId(), ToolScanStatus.COMPLETED, new Date(), version, result.getLastLayerRef(), result.getDigest());
updateToolVersion(tool, version, registry, dockerClient);
} catch (ToolScanExternalServiceException e) {
LOGGER.error(messageHelper.getMessage(MessageConstants.ERROR_TOOL_SCAN_FAILED, tool.getImage(), version), e);
toolManager.updateToolVersionScanStatus(tool.getId(), ToolScanStatus.FAILED, new Date(), version, null, null);
}
}
} catch (Exception e) {
LOGGER.error(messageHelper.getMessage(MessageConstants.ERROR_TOOL_SCAN_FAILED, tool.getImage()), e);
toolManager.updateToolVersionScanStatus(tool.getId(), ToolScanStatus.FAILED, new Date(), "latest", null, null);
}
}
}
LOGGER.info(messageHelper.getMessage(MessageConstants.INFO_TOOL_SCAN_SCHEDULED_DONE));
}
use of com.epam.pipeline.manager.docker.DockerClient in project cloud-pipeline by epam.
the class ToolManager method getCurrentImageSize.
public long getCurrentImageSize(final String dockerImage) {
LOGGER.info("Getting size of image {}", dockerImage);
Tool tool = loadByNameOrId(dockerImage);
DockerRegistry dockerRegistry = dockerRegistryManager.load(tool.getRegistryId());
String imageWithoutTag = getImageWithoutTag(tool.getImage());
String tag = getTagFromImageName(dockerImage);
DockerClient dockerClient = dockerRegistryManager.getDockerClient(dockerRegistry, imageWithoutTag);
try {
ToolVersion toolVersion = dockerClient.getVersionAttributes(dockerRegistry, imageWithoutTag, tag);
if (Objects.isNull(toolVersion) || Objects.isNull(toolVersion.getSize())) {
LOGGER.warn(messageHelper.getMessage(MessageConstants.ERROR_TOOL_VERSION_INVALID_SIZE, dockerImage));
return 0;
}
return toolVersion.getSize();
} catch (IllegalArgumentException e) {
LOGGER.error("An error occurred while getting image size: {} ", e.getMessage());
return 0;
}
}
Aggregations