use of io.fabric8.maven.docker.service.ServiceHub in project docker-maven-plugin by fabric8io.
the class RunService method createVolumesAsPerVolumeBinds.
/**
* Creates a Volume if a volume is referred to during startup in bind mount mapping and
* a VolumeConfiguration exists
*
* @param hub Service hub
* @param binds volume binds present in ImageConfiguration
* @param volumes VolumeConfigs present
* @return List of volumes created
* @throws DockerAccessException
*/
public List<String> createVolumesAsPerVolumeBinds(ServiceHub hub, List<String> binds, List<VolumeConfiguration> volumes) throws DockerAccessException {
Map<String, Integer> indexMap = new HashMap<>();
List<String> volumesCreated = new ArrayList<>();
for (int index = 0; index < volumes.size(); index++) {
indexMap.put(volumes.get(index).getName(), index);
}
for (String bind : binds) {
if (bind.contains(":")) {
String name = bind.substring(0, bind.indexOf(':'));
Integer volumeConfigIndex = indexMap.get(name);
if (volumeConfigIndex != null) {
VolumeConfiguration volumeConfig = volumes.get(volumeConfigIndex);
hub.getVolumeService().createVolume(volumeConfig);
volumesCreated.add(volumeConfig.getName());
}
}
}
return volumesCreated;
}
use of io.fabric8.maven.docker.service.ServiceHub in project docker-maven-plugin by fabric8io.
the class StartMojo method startImage.
private void startImage(final ImageConfiguration imageConfig, final ServiceHub hub, final ExecutorCompletionService<StartedContainer> startingContainers, final PortMapping.PropertyWriteHelper portMappingPropertyWriteHelper) throws IOException {
final RunService runService = hub.getRunService();
final Properties projProperties = project.getProperties();
final RunImageConfiguration runConfig = imageConfig.getRunConfiguration();
final PortMapping portMapping = runService.createPortMapping(runConfig, projProperties);
final LogDispatcher dispatcher = getLogDispatcher(hub);
StartContainerExecutor startExecutor = new StartContainerExecutor.Builder().exposeContainerProps(exposeContainerProps).dispatcher(dispatcher).follow(follow).log(log).portMapping(portMapping).gavLabel(getGavLabel()).projectProperties(project.getProperties()).basedir(project.getBasedir()).imageConfig(imageConfig).serviceHub(hub).logOutputSpecFactory(serviceHubFactory.getLogOutputSpecFactory()).showLogs(showLogs).containerNamePattern(containerNamePattern).buildTimestamp(getBuildTimestamp()).build();
startingContainers.submit(() -> {
String containerId = startExecutor.startContainer();
// Update port-mapping writer
portMappingPropertyWriteHelper.add(portMapping, runConfig.getPortPropertyFile());
return new StartedContainer(imageConfig, containerId);
});
}
use of io.fabric8.maven.docker.service.ServiceHub in project docker-maven-plugin by fabric8io.
the class StartMojo method executeInternal.
/**
* {@inheritDoc}
*/
@Override
public synchronized void executeInternal(final ServiceHub hub) throws DockerAccessException, ExecException, MojoExecutionException {
if (skipRun) {
return;
}
getPluginContext().put(CONTEXT_KEY_START_CALLED, true);
this.follow = followLogs();
QueryService queryService = hub.getQueryService();
final RunService runService = hub.getRunService();
PortMapping.PropertyWriteHelper portMappingPropertyWriteHelper = new PortMapping.PropertyWriteHelper(portPropertyFile);
boolean success = false;
final ExecutorService executorService = getExecutorService();
final ExecutorCompletionService<StartedContainer> containerStartupService = new ExecutorCompletionService<>(executorService);
try {
// All aliases which are provided in the image configuration:
final Set<String> imageAliases = new HashSet<>();
// Remember all aliases which has been started
final Set<String> startedContainerAliases = new HashSet<>();
// All images to to start
Queue<ImageConfiguration> imagesWaitingToStart = prepareStart(hub, queryService, runService, imageAliases);
// Queue of images to start as containers
final Queue<ImageConfiguration> imagesStarting = new ArrayDeque<>();
// of the containers so that partial or aborted starts will behave the same as fully-successful ones.
if (follow) {
runService.addShutdownHookForStoppingContainers(keepContainer, removeVolumes, autoCreateCustomNetworks);
}
// Loop until every image has been started and the start of all images has been completed
while (!hasBeenAllImagesStarted(imagesWaitingToStart, imagesStarting)) {
final List<ImageConfiguration> imagesReadyToStart = getImagesWhoseDependenciesHasStarted(imagesWaitingToStart, startedContainerAliases, imageAliases);
for (final ImageConfiguration image : imagesReadyToStart) {
startImage(image, hub, containerStartupService, portMappingPropertyWriteHelper);
// Move from waiting to starting status
imagesStarting.add(image);
imagesWaitingToStart.remove(image);
if (!startParallel) {
waitForStartedContainer(containerStartupService, startedContainerAliases, imagesStarting);
}
}
if (startParallel) {
waitForStartedContainer(containerStartupService, startedContainerAliases, imagesStarting);
}
}
portMappingPropertyWriteHelper.write();
if (follow) {
wait();
}
success = true;
} catch (InterruptedException e) {
log.warn("Interrupted");
Thread.currentThread().interrupt();
throw new MojoExecutionException("interrupted", e);
} catch (IOException e) {
throw new MojoExecutionException("I/O Error", e);
} finally {
shutdownExecutorService(executorService);
// Rollback if not all could be started
if (!success) {
log.error("Error occurred during container startup, shutting down...");
runService.stopStartedContainers(keepContainer, removeVolumes, autoCreateCustomNetworks, getGavLabel());
}
}
}
use of io.fabric8.maven.docker.service.ServiceHub in project docker-maven-plugin by fabric8io.
the class TagMojo method executeInternal.
@Override
public void executeInternal(ServiceHub hub) throws DockerAccessException, MojoExecutionException {
if (skipTag) {
return;
}
List<ImageConfiguration> imageConfigs = getResolvedImages();
for (ImageConfiguration imageConfig : imageConfigs) {
BuildImageConfiguration buildConfig = imageConfig.getBuildConfiguration();
hub.getBuildService().tagImage(imageConfig.getName(), tagName, repo, buildConfig.cleanupMode());
}
}
use of io.fabric8.maven.docker.service.ServiceHub in project docker-maven-plugin by fabric8io.
the class PushMojo method executeJibPush.
private void executeJibPush(ServiceHub hub) throws MojoExecutionException {
log.info("Pushing Container image with [[B]]JIB(Java Image Builder)[[B]] mode");
JibBuildService jibBuildService = new JibBuildService(hub, new MojoParameters(session, project, null, null, null, settings, sourceDirectory, outputDirectory, null), log);
jibBuildService.push(getResolvedImages(), retries, getRegistryConfig(pushRegistry), skipTag);
}
Aggregations