Search in sources :

Example 6 with QueryService

use of io.fabric8.maven.docker.service.QueryService in project docker-maven-plugin by fabric8io.

the class WatchService method watch.

public synchronized void watch(WatchContext context, BuildService.BuildContext buildContext, List<ImageConfiguration> images) throws DockerAccessException, MojoExecutionException {
    // Important to be be a single threaded scheduler since watch jobs must run serialized
    ScheduledExecutorService executor = null;
    try {
        executor = Executors.newSingleThreadScheduledExecutor();
        for (StartOrderResolver.Resolvable resolvable : runService.getImagesConfigsInOrder(queryService, images)) {
            final ImageConfiguration imageConfig = (ImageConfiguration) resolvable;
            String imageId = queryService.getImageId(imageConfig.getName());
            String containerId = runService.lookupContainer(imageConfig.getName());
            ImageWatcher watcher = new ImageWatcher(imageConfig, context, imageId, containerId);
            long interval = watcher.getInterval();
            WatchMode watchMode = watcher.getWatchMode(imageConfig);
            log.info("Watching " + imageConfig.getName() + (watchMode != null ? " using " + watchMode.getDescription() : ""));
            ArrayList<String> tasks = new ArrayList<>();
            if (imageConfig.getBuildConfiguration() != null && imageConfig.getBuildConfiguration().getAssemblyConfiguration() != null) {
                if (watcher.isCopy()) {
                    String containerBaseDir = imageConfig.getBuildConfiguration().getAssemblyConfiguration().getTargetDir();
                    schedule(executor, createCopyWatchTask(watcher, context.getMojoParameters(), containerBaseDir), interval);
                    tasks.add("copying artifacts");
                }
                if (watcher.isBuild()) {
                    schedule(executor, createBuildWatchTask(watcher, context.getMojoParameters(), watchMode == WatchMode.both, buildContext), interval);
                    tasks.add("rebuilding");
                }
            }
            if (watcher.isRun() && watcher.getContainerId() != null) {
                schedule(executor, createRestartWatchTask(watcher), interval);
                tasks.add("restarting");
            }
            if (tasks.size() > 0) {
                log.info("%s: Watch for %s", imageConfig.getDescription(), StringUtils.join(tasks.toArray(), " and "));
            }
        }
        log.info("Waiting ...");
        if (!context.isKeepRunning()) {
            runService.addShutdownHookForStoppingContainers(context.isKeepContainer(), context.isRemoveVolumes(), context.isAutoCreateCustomNetworks());
        }
        wait();
    } catch (InterruptedException e) {
        log.warn("Interrupted");
    } finally {
        if (executor != null) {
            executor.shutdownNow();
        }
    }
}
Also used : ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) StartOrderResolver(io.fabric8.maven.docker.util.StartOrderResolver) ImageConfiguration(io.fabric8.maven.docker.config.ImageConfiguration) WatchImageConfiguration(io.fabric8.maven.docker.config.WatchImageConfiguration) WatchMode(io.fabric8.maven.docker.config.WatchMode) ArrayList(java.util.ArrayList)

Example 7 with QueryService

use of io.fabric8.maven.docker.service.QueryService in project docker-maven-plugin by fabric8io.

the class LogsMojo method executeInternal.

@Override
protected void executeInternal(ServiceHub hub) throws MojoExecutionException, DockerAccessException {
    QueryService queryService = hub.getQueryService();
    LogDispatcher logDispatcher = getLogDispatcher(hub);
    for (ImageConfiguration image : getResolvedImages()) {
        String imageName = image.getName();
        if (logAll) {
            for (Container container : queryService.getContainersForImage(imageName)) {
                doLogging(logDispatcher, image, container.getId());
            }
        } else {
            Container container = queryService.getLatestContainerForImage(imageName);
            if (container != null) {
                doLogging(logDispatcher, image, container.getId());
            }
        }
    }
    if (follow) {
        // Block forever ....
        waitForEver();
    }
}
Also used : Container(io.fabric8.maven.docker.model.Container) QueryService(io.fabric8.maven.docker.service.QueryService) ImageConfiguration(io.fabric8.maven.docker.config.ImageConfiguration) LogDispatcher(io.fabric8.maven.docker.log.LogDispatcher)

Example 8 with QueryService

use of io.fabric8.maven.docker.service.QueryService in project docker-maven-plugin by fabric8io.

the class StartMojo method exposeContainerProps.

// Expose ports as project properties
private void exposeContainerProps(QueryService queryService, StartedContainer startedContainer) throws DockerAccessException {
    String propKey = getExposedPropertyKeyPart(startedContainer.imageConfig);
    if (StringUtils.isNotEmpty(exposeContainerProps) && StringUtils.isNotEmpty(propKey)) {
        Container container = queryService.getMandatoryContainer(startedContainer.containerId);
        Properties props = project.getProperties();
        String prefix = addDot(exposeContainerProps) + addDot(propKey);
        props.put(prefix + "id", startedContainer.containerId);
        String ip = container.getIPAddress();
        if (StringUtils.isNotEmpty(ip)) {
            props.put(prefix + "ip", ip);
        }
        Map<String, String> nets = container.getCustomNetworkIpAddresses();
        if (nets != null) {
            for (Map.Entry<String, String> entry : nets.entrySet()) {
                props.put(prefix + addDot("net") + addDot(entry.getKey()) + "ip", entry.getValue());
            }
        }
    }
}
Also used : Container(io.fabric8.maven.docker.model.Container)

Example 9 with QueryService

use of io.fabric8.maven.docker.service.QueryService 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 10 with QueryService

use of io.fabric8.maven.docker.service.QueryService 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

Container (io.fabric8.maven.docker.model.Container)5 ImageConfiguration (io.fabric8.maven.docker.config.ImageConfiguration)4 DockerAccessException (io.fabric8.maven.docker.access.DockerAccessException)2 RunImageConfiguration (io.fabric8.maven.docker.config.RunImageConfiguration)2 LogDispatcher (io.fabric8.maven.docker.log.LogDispatcher)2 Network (io.fabric8.maven.docker.model.Network)2 QueryService (io.fabric8.maven.docker.service.QueryService)2 MojoExecutionException (org.apache.maven.plugin.MojoExecutionException)2 PortMapping (io.fabric8.maven.docker.access.PortMapping)1 NetworkConfig (io.fabric8.maven.docker.config.NetworkConfig)1 WaitConfiguration (io.fabric8.maven.docker.config.WaitConfiguration)1 WatchImageConfiguration (io.fabric8.maven.docker.config.WatchImageConfiguration)1 WatchMode (io.fabric8.maven.docker.config.WatchMode)1 LogOutputSpecFactory (io.fabric8.maven.docker.log.LogOutputSpecFactory)1 RunService (io.fabric8.maven.docker.service.RunService)1 PomLabel (io.fabric8.maven.docker.util.PomLabel)1 StartOrderResolver (io.fabric8.maven.docker.util.StartOrderResolver)1 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1