Search in sources :

Example 6 with ExecException

use of io.fabric8.maven.docker.access.ExecException 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);
            }
            // Wait for the next container to finish startup
            final Future<StartedContainer> startedContainerFuture = containerStartupService.take();
            try {
                final StartedContainer startedContainer = startedContainerFuture.get();
                final ImageConfiguration imageConfig = startedContainer.imageConfig;
                updateAliasesSet(startedContainerAliases, imageConfig.getAlias());
                exposeContainerProps(hub.getQueryService(), startedContainer);
                // All done with this image
                imagesStarting.remove(imageConfig);
            } catch (ExecutionException e) {
                rethrowCause(e);
            }
        }
        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, getPomLabel());
        }
    }
}
Also used : MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) IOException(java.io.IOException) PortMapping(io.fabric8.maven.docker.access.PortMapping) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException)

Example 7 with ExecException

use of io.fabric8.maven.docker.access.ExecException in project docker-maven-plugin by fabric8io.

the class StopMojo method stopContainers.

private void stopContainers(QueryService queryService, RunService runService, PomLabel pomLabel) throws DockerAccessException, ExecException {
    Collection<Network> networksToRemove = getNetworksToRemove(queryService, pomLabel);
    for (ImageConfiguration image : getResolvedImages()) {
        for (Container container : getContainersToStop(queryService, image)) {
            if (shouldStopContainer(container, pomLabel, image)) {
                runService.stopContainer(container.getId(), image, keepContainer, removeVolumes);
            }
        }
    }
    runService.removeCustomNetworks(networksToRemove);
}
Also used : Container(io.fabric8.maven.docker.model.Container) ImageConfiguration(io.fabric8.maven.docker.config.ImageConfiguration) RunImageConfiguration(io.fabric8.maven.docker.config.RunImageConfiguration) Network(io.fabric8.maven.docker.model.Network)

Aggregations

ExecException (io.fabric8.maven.docker.access.ExecException)4 MojoExecutionException (org.apache.maven.plugin.MojoExecutionException)4 IOException (java.io.IOException)3 DockerAccessException (io.fabric8.maven.docker.access.DockerAccessException)2 PortMapping (io.fabric8.maven.docker.access.PortMapping)2 ImageConfiguration (io.fabric8.maven.docker.config.ImageConfiguration)2 LogDispatcher (io.fabric8.maven.docker.log.LogDispatcher)2 DockerAccess (io.fabric8.maven.docker.access.DockerAccess)1 AssemblyFiles (io.fabric8.maven.docker.assembly.AssemblyFiles)1 RunImageConfiguration (io.fabric8.maven.docker.config.RunImageConfiguration)1 WatchImageConfiguration (io.fabric8.maven.docker.config.WatchImageConfiguration)1 LogOutputSpecFactory (io.fabric8.maven.docker.log.LogOutputSpecFactory)1 Container (io.fabric8.maven.docker.model.Container)1 ContainerDetails (io.fabric8.maven.docker.model.ContainerDetails)1 ExecDetails (io.fabric8.maven.docker.model.ExecDetails)1 Network (io.fabric8.maven.docker.model.Network)1 DockerAccessFactory (io.fabric8.maven.docker.service.DockerAccessFactory)1 QueryService (io.fabric8.maven.docker.service.QueryService)1 RunService (io.fabric8.maven.docker.service.RunService)1 ServiceHub (io.fabric8.maven.docker.service.ServiceHub)1