CAMEL-8371 Improvements and enhancements to camel-docker component and updated to support docker-java 0.10.5
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/fb9556df Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/fb9556df Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/fb9556df Branch: refs/heads/master Commit: fb9556df0b9cb188a45310c29e6fd275d87754aa Parents: eb86ec6 Author: Andrew Block <andy.bl...@gmail.com> Authored: Sun Feb 22 09:45:16 2015 -0600 Committer: Claus Ibsen <davscl...@apache.org> Committed: Mon Feb 23 08:03:40 2015 +0100 ---------------------------------------------------------------------- components/camel-docker/README.md | 92 +- .../component/docker/DockerClientFactory.java | 98 +- .../component/docker/DockerClientProfile.java | 118 +- .../camel/component/docker/DockerComponent.java | 5 +- .../component/docker/DockerConfiguration.java | 40 +- .../camel/component/docker/DockerConstants.java | 76 +- .../camel/component/docker/DockerHelper.java | 53 +- .../camel/component/docker/DockerOperation.java | 223 ++- .../docker/consumer/DockerEventsConsumer.java | 2 +- .../docker/producer/DockerProducer.java | 1701 ++++++++++-------- .../component/docker/ssl/NoImplSslConfig.java | 38 + .../docker/DockerClientProfileRegistryTest.java | 65 + .../headers/AttachContainerCmdHeaderTest.java | 2 +- .../docker/headers/AuthCmdHeaderTest.java | 3 +- .../docker/headers/BaseDockerHeaderTest.java | 12 + .../docker/headers/BuildImageCmdHeaderTest.java | 12 +- .../headers/CommitContainerCmdHeaderTest.java | 134 ++ .../headers/CopyFileContainerCmdHeaderTest.java | 2 +- .../headers/CreateContainerCmdHeaderTest.java | 91 +- .../headers/CreateImageCmdHeaderTest.java | 11 +- .../headers/DiffContainerCmdHeaderTest.java | 3 + .../docker/headers/ExecCreateCmdHeaderTest.java | 80 + .../docker/headers/ExecStartCmdHeaderTest.java | 65 + .../docker/headers/InfoCmdHeaderTest.java | 2 +- .../headers/InspectImageCmdHeaderTest.java | 1 - .../headers/KillContainerCmdHeaderTest.java | 1 - .../headers/ListContainersCmdHeaderTest.java | 9 +- .../docker/headers/ListImagesCmdHeaderTest.java | 2 +- .../headers/LogContainerCmdHeaderTest.java | 2 +- .../docker/headers/PushImageCmdHeaderTest.java | 4 + .../headers/RemoveContainerCmdHeaderTest.java | 2 +- .../headers/StartContainerCmdHeaderTest.java | 121 ++ .../docker/headers/TagImageCmdHeaderTest.java | 4 +- 33 files changed, 1985 insertions(+), 1089 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/fb9556df/components/camel-docker/README.md ---------------------------------------------------------------------- diff --git a/components/camel-docker/README.md b/components/camel-docker/README.md index b13c5d2..637b8aa 100644 --- a/components/camel-docker/README.md +++ b/components/camel-docker/README.md @@ -19,16 +19,16 @@ All URI option can be passed as Header properties. Values found in a message hea | ------------- | ---------------- | |containerId|CamelDockerContainerId | -## General Options +## Client Profile -The following parameters can be used with any invocation of the component +A client profile encapsulates the parameters necessary to communicate with docker. It is constructed into a *DockerClientProfile* object from the following uri or or header values as described below The following options are required | Option | Header | Description | Default Value | |-----------|-----------|-----------------|-------------------| | host | CamelDockerHost | Docker host | localhost | -| port | CamelDockerPort | Docker port | 5000 | +| port | CamelDockerPort | Docker port | 2375 | The following are additional optional parameters @@ -36,28 +36,51 @@ The following are additional optional parameters |-----------|-----------|-----------------|-------------------| | username | CamelDockerUserName | User name to authenticate with | | | password | CamelDockerPassword | Password to authenticate with | | -| email | CamelDockerEmail | Email address associated with the user | | | secure | CamelDockerSecure | Use HTTPS communication | false | -| requestTimeout | CamelDockerRequestTimeout | Request timeout for response (in seconds) | 30 | |certPath | CamelDockerCertPath | Location containing the SSL certificate chain | | +| email | CamelDockerEmail | Email address associated with the user | | +| requestTimeout | CamelDockerRequestTimeout | Request timeout for response (in seconds) | 30 | +|serverAddress | CamelDockerServerAddress | Address of the Docker registry server (If not specified, *host* will be used) | | +|maxTotalConnections | CamelDockerMaxTotalConnections | Maximum number of total connections | 100 | +|maxPerRouteConnections | CamelDockerMaxPerRouteConnections | Maximum number of connections per route | 100 | + +### Client Profile Bean + +Instead of leveraging uri or header parameters, a DockerClientProfile bean may be referenced using the *clientProfile* uri option which has been defined in the Camel Registry. This gives the user the option of defining a static configuration for docker connectivity without requiring the use of defining each parameter on the endpoint. + +The following illustrates how a DockerClientProfile can be defined in Spring DSL + + <bean id="devClientProfile" class="org.apache.camel.component.docker.DockerClientProfile"> + <property name="host" value="192.168.59.103" /> + <property name="port" value="2376" /> + <property name="secure" value="true" /> + <property name="certPath" value="/Users/cameluser/.boot2docker/certs/boot2docker-vm" + </bean> + + +Reference the bean in your Camel route +``` +<from uri="direct:in" /> +<to uri="docker://info?clientProfile=#devClientProfile" /> +``` ## Consumer Operations | Operation | Options | Description | Produces | | ------------- | ---------------- | ------------- | ---------------- | -|events| initialRange | Monitor Docker events (Streaming) | Event | +|events| initialRange | Amount of time in the past to begin receiving events (Long) | Event | ## Producer Operations The following producer operations are available -### Misc +### General | Operation | Options | Description | Returns | | ------------- | ---------------- | ------------- | ---------------- | -| auth | | Check auth configuration | | +| auth | Values obtained from the component general options| Validate auth configuration | AuthResponse | | info | | System wide information | Info | -| ping | | Ping the Docker server | | +| ping | | Ping the Docker server | | | version | | Show the docker version information | Version | @@ -65,37 +88,44 @@ The following producer operations are available | Operation | Options | Description | Body Content | Returns | | ------------- | ---------------- | ------------- | ---------------- | ---------------- | +| image/build | noCache, quiet, remove, tag | Build an image from Dockerfile via stdin | **InputStream** or **File** | InputStream | +| image/create | **repository** | Create an image | **InputStream** |CreateImageResponse | +| image/inspect | **imageId** | Inspect an image | | InspectImageResponse | | image/list | filter, showAll | List images | | List<Image> | -| image/create | **repository** | Create an image | InputStream |CreateImageResponse | -| image/build | noCache, quiet, remove, tag | Build an image from Dockerfile via stdin | InputStream or File | InputStream | | image/pull | **repository**, registry, tag | Pull an image from the registry | |InputStream | -| image/push | **name** | Push an image on the registry | InputStream | -| image/search | **term** | Search for images | | List<SearchItem> | +| image/push | **name**, tag | Push an image on the registry | | InputStream | | image/remove | **imageId**, force, noPrune | Remove an image | | | +| image/search | **term** | Search for images | | List<SearchItem> | | image/tag | **imageId**, **repository**, **tag**, **force** | Tag an image into a repository | | | -| image/inspect | **imageId** | Inspect an image | | InspectImageResponse | ### Containers -| Operation | Options | Description | Body Content | +| Operation | Options | Description | Body Content | Returns | | ------------- | ---------------- | ------------- | ---------------- | -| container/list | showSize, showAll, before, since, limit, List containers | initialRange | List<Container> | -| container/create | **imageId**, name, exposedPorts, workingDir, disableNetwork, hostname, user, tty, stdInOpen, stdInOnce, memoryLimit, memorySwap, cpuShares, attachStdIn, attachStdOut, attachStdErr, env, cmd, dns, image, volumes, volumesFrom | Create a container | CreateContainerResponse | -| container/start | **containerId**, binds, links, lxcConf, portBindings, privileged, publishAllPorts, dns, dnsSearch, volumesFrom, networkMode, devices, restartPolicy, capAdd, capDrop | Start a container | | -| container/inspect | **containerId** | Inspect a container | InspectContainerResponse | -| container/wait | **containerId** | Wait a container | Integer -| container/log | **containerId**, stdOut, stdErr, timestamps, followStream, tailAll, tail | Get container logs | InputStream | -| container/attach | **containerId**, stdOut, stdErr, timestamps, logs, followStream | Attach to a container | InputStream | -| container/stop | **containerId**, timeout | Stop a container | | +| container/attach | **containerId**, followStream, logs, stdErr, stdOut, timestamps | Attach to a container | | InputStream | +| container/commit | **containerId**, author, attachStdErr, attachStdIn, attachStdOut, cmd, disableNetwork, env, exposedPorts, hostname, memory, memorySwap, message, openStdIn, pause, portSpecs, repository, stdInOnce, tag, tty, user, volumes, workingDir | Create a new image from a container's changes | | String | +| container/copyfile | **containerId**, **resource**, hostPath | Copy files or folders from a container | | InputStream | +| container/create | **image**, attachStdErr, attachStdIn, attachStdOut, capAdd, capDrop, cmd, cpuShares, disableNetwork, dns, entrypoint, env, exposedPorts, hostConfig, hostname, memoryLimit, memorySwap, name, portSpecs, stdInOnce, stdInOpen, tty, user, volumes, volumesFrom, workingDir | Create a container | |CreateContainerResponse | +| container/diff | **containerId**, containerIdDiff | Differences on the container filesystem | | List<ChangeLog> | +| container/inspect | **containerId** | Inspect a container | | InspectContainerResponse | +| container/kill | **containerId**, signal | Kill a container | | | +| container/list | before, limit, showSize, showAll, since | List containers | | List<Container> | +| container/log | **containerId**, followStream, stdErr, stdOut, tail, tailAll, timestamps | Get container logs | | InputStream | +| container/pause | **containerId** | Pause a container | | | +| container/remove | **containerId**, force, removeVolumes | Remove a container | | | | container/restart | **containerId**, timeout | Restart a container | | -| container/diff | **containerId** | Inspect changes on a container | ChangeLog | -| container/kill | **containerId**, signal, | Kill a container | | -| container/top | **containerId**, psArgs | List processes running in a container | TopContainerResponse | -| container/pause | **containerId** | Pause a container | | -| container/unpause | **containerId** | Unpause a container | | -| container/commit | **containerId**, repository, message, tag, attachStdIn, attachStdOut, attachStdErr, cmd, disableNetwork, pause, env, exposedPorts, hostname, memory, memorySwap, openStdIn, portSpecs, stdInOnce, tty, user, volumes, hostname | Create a new image from a container's changes | String | -| container/copyfile | **containerId**, **resource**, hostPath | Copy files or folders from a container | InputStream | -| container/remove | **containerId**, force, removeVolumes | Remove a container | | +| container/start | **containerId**, binds, capAdd, capDrop, devices, dns, dnsSearch, links, lxcConf, networkMode, portBindings, privileged, publishAllPorts, restartPolicy, volumesFrom | Start a container | | | +| container/stop | **containerId**, timeout | Stop a container | | +| container/top | **containerId**, psArgs | List processes running in a container | |TopContainerResponse | +| container/unpause | **containerId** | Unpause a container | | | +| container/wait | **containerId** | Blocks until a container is stopped | | | + +### Exec + +| Operation | Options | Description | Body Content | Returns | +| ------------- | ---------------- | ------------- | ---------------- | +| exec/create | **containerId**, attachStdErr, attachStdIn, attachStdOut, cmd, tty | Setup an *exec* instance on a running container | | ExecCreateCmdResponse | +| exec/start | **containerId**, detach, execId, tty | Starts a previously created *exec* instance | |InputStream | ## Examples http://git-wip-us.apache.org/repos/asf/camel/blob/fb9556df/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientFactory.java b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientFactory.java index b1ac48b..2ec9929 100644 --- a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientFactory.java +++ b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientFactory.java @@ -20,9 +20,12 @@ import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.command.DockerCmdExecFactory; import com.github.dockerjava.core.DockerClientBuilder; import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.core.LocalDirectorySSLConfig; +import com.github.dockerjava.core.SSLConfig; import com.github.dockerjava.jaxrs.DockerCmdExecFactoryImpl; import org.apache.camel.Message; import org.apache.camel.component.docker.exception.DockerException; +import org.apache.camel.component.docker.ssl.NoImplSslConfig; import org.apache.camel.util.ObjectHelper; /** @@ -39,6 +42,7 @@ public final class DockerClientFactory { * Produces a {@link DockerClient} to communicate with Docker * * @param dockerConfiguration + * @param endpointClientProfile a {@link DockerClientProfile} specified on the Endpoint * @param message the Camel message * @return a DockerClient * @throws DockerException @@ -47,54 +51,84 @@ public final class DockerClientFactory { ObjectHelper.notNull(dockerConfiguration, "dockerConfiguration"); - Integer port = null; - String host = null; + DockerClientProfile endpointClientProfile = dockerConfiguration.getClientProfile(); + + DockerClientProfile clientProfile = null; DockerClient client = null; - + + // Check if profile is specified in configuration + if(endpointClientProfile != null) { + clientProfile = endpointClientProfile; + } + else { - port = DockerHelper.getProperty(DockerConstants.DOCKER_PORT, dockerConfiguration, message, Integer.class); - host = DockerHelper.getProperty(DockerConstants.DOCKER_HOST, dockerConfiguration, message, String.class); - - int uriPort = port != null ? port : dockerConfiguration.getDefaultPort(); - String uriHost = host != null ? host : dockerConfiguration.getDefaultHost(); - - String username = DockerHelper.getProperty(DockerConstants.DOCKER_USERNAME, dockerConfiguration, message, String.class); - String password = DockerHelper.getProperty(DockerConstants.DOCKER_PASSWORD, dockerConfiguration, message, String.class); - String email = DockerHelper.getProperty(DockerConstants.DOCKER_EMAIL, dockerConfiguration, message, String.class); - Integer requestTimeout = DockerHelper.getProperty(DockerConstants.DOCKER_API_REQUEST_TIMEOUT, dockerConfiguration, message, Integer.class); - String serverAddress = DockerHelper.getProperty(DockerConstants.DOCKER_SERVER_ADDRESS, dockerConfiguration, message, String.class); - Boolean secure = DockerHelper.getProperty(DockerConstants.DOCKER_SECURE, dockerConfiguration, message, Boolean.class); - String certPath = DockerHelper.getProperty(DockerConstants.DOCKER_CERT_PATH, dockerConfiguration, message, String.class); - - DockerClientProfile clientProfile = new DockerClientProfile(); - clientProfile.setHost(uriHost); - clientProfile.setPort(uriPort); - clientProfile.setEmail(email); - clientProfile.setUsername(username); - clientProfile.setPassword(password); - clientProfile.setRequestTimeout(requestTimeout); - clientProfile.setServerAddress(serverAddress); - clientProfile.setCertPath(certPath); + clientProfile = new DockerClientProfile(); - if (secure != null && secure) { + Integer port = DockerHelper.getProperty(DockerConstants.DOCKER_PORT, dockerConfiguration, message, Integer.class, clientProfile.getPort()); + String host = DockerHelper.getProperty(DockerConstants.DOCKER_HOST, dockerConfiguration, message, String.class, clientProfile.getHost()); + + Integer maxTotalConnections = DockerHelper.getProperty(DockerConstants.DOCKER_MAX_TOTAL_CONNECTIONS, dockerConfiguration, message, Integer.class, clientProfile.getMaxTotalConnections()); + Integer maxPerRouteConnections = DockerHelper.getProperty(DockerConstants.DOCKER_MAX_PER_ROUTE_CONNECTIONS, dockerConfiguration, message, Integer.class, clientProfile.getMaxPerRouteConnections()); + + String username = DockerHelper.getProperty(DockerConstants.DOCKER_USERNAME, dockerConfiguration, message, String.class, clientProfile.getUsername()); + String password = DockerHelper.getProperty(DockerConstants.DOCKER_PASSWORD, dockerConfiguration, message, String.class, clientProfile.getPassword()); + String email = DockerHelper.getProperty(DockerConstants.DOCKER_EMAIL, dockerConfiguration, message, String.class, clientProfile.getEmail()); + Integer requestTimeout = DockerHelper.getProperty(DockerConstants.DOCKER_API_REQUEST_TIMEOUT, dockerConfiguration, message, Integer.class, clientProfile.getRequestTimeout()); + String serverAddress = DockerHelper.getProperty(DockerConstants.DOCKER_SERVER_ADDRESS, dockerConfiguration, message, String.class, clientProfile.getServerAddress()); + String certPath = DockerHelper.getProperty(DockerConstants.DOCKER_CERT_PATH, dockerConfiguration, message, String.class, clientProfile.getCertPath()); + Boolean secure = DockerHelper.getProperty(DockerConstants.DOCKER_SECURE, dockerConfiguration, message, Boolean.class, clientProfile.isSecure()); + + clientProfile.setHost(host); + clientProfile.setPort(port); + clientProfile.setEmail(email); + clientProfile.setUsername(username); + clientProfile.setPassword(password); + clientProfile.setRequestTimeout(requestTimeout); + clientProfile.setServerAddress(serverAddress); + clientProfile.setCertPath(certPath); + clientProfile.setMaxTotalConnections(maxTotalConnections); + clientProfile.setMaxPerRouteConnections(maxPerRouteConnections); clientProfile.setSecure(secure); + } - + client = dockerConfiguration.getClient(clientProfile); - + if (client != null) { return client; } + + SSLConfig sslConfig; + if (clientProfile.isSecure() != null && clientProfile.isSecure()) { + + ObjectHelper.notNull(clientProfile.getCertPath(), "certPath must be specified in secure mode"); + + sslConfig = new LocalDirectorySSLConfig(clientProfile.getCertPath()); + } + else { + // docker-java requires an implementation of SslConfig interface + // to be available for DockerCmdExecFactoryImpl + sslConfig = new NoImplSslConfig(); + } DockerClientConfig.DockerClientConfigBuilder configBuilder = new DockerClientConfig.DockerClientConfigBuilder() - .withUsername(username).withPassword(password).withEmail(email).withReadTimeout(requestTimeout).withDockerCertPath(certPath) - .withUri(clientProfile.toUrl()); + .withUsername(clientProfile.getUsername()).withPassword(clientProfile.getPassword()).withEmail(clientProfile.getEmail()).withReadTimeout(clientProfile.getRequestTimeout()) + .withUri(clientProfile.toUrl()).withMaxPerRouteConnections(clientProfile.getMaxPerRouteConnections()).withMaxTotalConnections(clientProfile.getMaxTotalConnections()) + .withSSLConfig(sslConfig).withServerAddress(clientProfile.getServerAddress()); + if(clientProfile.getCertPath() != null) { + configBuilder.withDockerCertPath(clientProfile.getCertPath()); + } + DockerClientConfig config = configBuilder.build(); DockerCmdExecFactory dockerClientFactory = new DockerCmdExecFactoryImpl(); - return DockerClientBuilder.getInstance(config).withDockerCmdExecFactory(dockerClientFactory).build(); + client = DockerClientBuilder.getInstance(config).withDockerCmdExecFactory(dockerClientFactory).build(); + + dockerConfiguration.setClient(clientProfile, client); + + return client; } http://git-wip-us.apache.org/repos/asf/camel/blob/fb9556df/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientProfile.java ---------------------------------------------------------------------- diff --git a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientProfile.java b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientProfile.java index 62bf42e..7a53a08 100644 --- a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientProfile.java +++ b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientProfile.java @@ -20,6 +20,7 @@ import java.net.MalformedURLException; import java.net.URL; import org.apache.camel.component.docker.exception.DockerException; +import org.apache.camel.spi.UriParam; import org.apache.camel.util.ObjectHelper; /** @@ -27,16 +28,27 @@ import org.apache.camel.util.ObjectHelper; */ public class DockerClientProfile { - private String host; - private Integer port; + @UriParam(defaultValue = "localhost") + private String host = "localhost"; + + @UriParam(defaultValue = "2375") + private Integer port = 2375; + private String username; private String password; private String email; private String serverAddress; private Integer requestTimeout; - private boolean secure; + private Boolean secure; private String certPath; + @UriParam(defaultValue = "100") + private Integer maxTotalConnections = 100; + + @UriParam(defaultValue = "100") + private Integer maxPerRouteConnections = 100; + + public String getHost() { return host; } @@ -80,10 +92,10 @@ public class DockerClientProfile { public void setRequestTimeout(Integer requestTimeout) { this.requestTimeout = requestTimeout; } - public boolean isSecure() { + public Boolean isSecure() { return secure; } - public void setSecure(boolean secure) { + public void setSecure(Boolean secure) { this.secure = secure; } public String getCertPath() { @@ -92,12 +104,24 @@ public class DockerClientProfile { public void setCertPath(String certPath) { this.certPath = certPath; } + public Integer getMaxTotalConnections() { + return maxTotalConnections; + } + public void setMaxTotalConnections(Integer maxTotalConnections) { + this.maxTotalConnections = maxTotalConnections; + } + public Integer getMaxPerRouteConnections() { + return maxPerRouteConnections; + } + public void setMaxPerRouteConnections(Integer maxPerRouteConnections) { + this.maxPerRouteConnections = maxPerRouteConnections; + } public String toUrl() throws DockerException { ObjectHelper.notNull(this.host, "host"); ObjectHelper.notNull(this.port, "port"); URL uri; - String secure = this.secure ? "https" : "http"; + String secure = this.secure != null && this.secure ? "https" : "http"; try { uri = new URL(secure, this.host, this.port, ""); } catch (MalformedURLException e) { @@ -107,7 +131,6 @@ public class DockerClientProfile { return uri.toString(); } - @Override public int hashCode() { final int prime = 31; @@ -115,87 +138,82 @@ public class DockerClientProfile { result = prime * result + ((certPath == null) ? 0 : certPath.hashCode()); result = prime * result + ((email == null) ? 0 : email.hashCode()); result = prime * result + ((host == null) ? 0 : host.hashCode()); + result = prime * result + ((maxPerRouteConnections == null) ? 0 : maxPerRouteConnections.hashCode()); + result = prime * result + ((maxTotalConnections == null) ? 0 : maxTotalConnections.hashCode()); result = prime * result + ((password == null) ? 0 : password.hashCode()); result = prime * result + ((port == null) ? 0 : port.hashCode()); result = prime * result + ((requestTimeout == null) ? 0 : requestTimeout.hashCode()); - result = prime * result + (secure ? 1231 : 1237); + result = prime * result + ((secure == null) ? 0 : secure.hashCode()); result = prime * result + ((serverAddress == null) ? 0 : serverAddress.hashCode()); result = prime * result + ((username == null) ? 0 : username.hashCode()); return result; } - @Override public boolean equals(Object obj) { - if (this == obj) { + if (this == obj) return true; - } - if (obj == null) { + if (obj == null) return false; - } - if (getClass() != obj.getClass()) { + if (getClass() != obj.getClass()) return false; - } DockerClientProfile other = (DockerClientProfile)obj; if (certPath == null) { - if (other.certPath != null) { + if (other.certPath != null) return false; - } - } else if (!certPath.equals(other.certPath)) { + } else if (!certPath.equals(other.certPath)) return false; - } if (email == null) { - if (other.email != null) { + if (other.email != null) return false; - } - } else if (!email.equals(other.email)) { + } else if (!email.equals(other.email)) return false; - } if (host == null) { - if (other.host != null) { + if (other.host != null) return false; - } - } else if (!host.equals(other.host)) { + } else if (!host.equals(other.host)) + return false; + if (maxPerRouteConnections == null) { + if (other.maxPerRouteConnections != null) + return false; + } else if (!maxPerRouteConnections.equals(other.maxPerRouteConnections)) + return false; + if (maxTotalConnections == null) { + if (other.maxTotalConnections != null) + return false; + } else if (!maxTotalConnections.equals(other.maxTotalConnections)) return false; - } if (password == null) { - if (other.password != null) { + if (other.password != null) return false; - } - } else if (!password.equals(other.password)) { + } else if (!password.equals(other.password)) return false; - } if (port == null) { - if (other.port != null) { + if (other.port != null) return false; - } - } else if (!port.equals(other.port)) { + } else if (!port.equals(other.port)) return false; - } if (requestTimeout == null) { - if (other.requestTimeout != null) { + if (other.requestTimeout != null) return false; - } - } else if (!requestTimeout.equals(other.requestTimeout)) { + } else if (!requestTimeout.equals(other.requestTimeout)) return false; - } - if (secure != other.secure) { + if (secure == null) { + if (other.secure != null) + return false; + } else if (!secure.equals(other.secure)) return false; - } if (serverAddress == null) { - if (other.serverAddress != null) { + if (other.serverAddress != null) return false; - } - } else if (!serverAddress.equals(other.serverAddress)) { + } else if (!serverAddress.equals(other.serverAddress)) return false; - } if (username == null) { - if (other.username != null) { + if (other.username != null) return false; - } - } else if (!username.equals(other.username)) { + } else if (!username.equals(other.username)) return false; - } return true; } - + + } http://git-wip-us.apache.org/repos/asf/camel/blob/fb9556df/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerComponent.java b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerComponent.java index 9241fcb..261adf3 100644 --- a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerComponent.java +++ b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerComponent.java @@ -37,9 +37,12 @@ public class DockerComponent extends DefaultComponent { this.configuration = configuration; } + @Override protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { - DockerConfiguration configuration = getConfiguration(); + // Each endpoint can have its own configuration so make + // a copy of the configuration + DockerConfiguration configuration = getConfiguration().copy(); String normalizedRemaining = remaining.replaceAll("/", ""); http://git-wip-us.apache.org/repos/asf/camel/blob/fb9556df/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConfiguration.java b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConfiguration.java index 60c21de..9268a36 100644 --- a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConfiguration.java +++ b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConfiguration.java @@ -16,30 +16,27 @@ */ package org.apache.camel.component.docker; +import com.github.dockerjava.api.DockerClient; + import java.util.HashMap; import java.util.Map; -import com.github.dockerjava.api.DockerClient; - +import org.apache.camel.RuntimeCamelException; import org.apache.camel.component.docker.exception.DockerException; import org.apache.camel.spi.UriParams; import org.apache.camel.spi.UriPath; @UriParams -public class DockerConfiguration { - private static final String DEFAULT_DOCKER_HOST = "localhost"; - private static final int DEFAULT_DOCKER_PORT = 2375; +public class DockerConfiguration implements Cloneable { @UriPath private DockerOperation operation; + private DockerClientProfile clientProfile; + private Map<String, Object> parameters = new HashMap<String, Object>(); private Map<DockerClientProfile, DockerClient> clients = new HashMap<DockerClientProfile, DockerClient>(); - public void setClient(DockerClientProfile clientProfile, DockerClient client) { - clients.put(clientProfile, client); - } - public Map<String, Object> getParameters() { return parameters; } @@ -56,17 +53,30 @@ public class DockerConfiguration { this.operation = operation; } - public String getDefaultHost() { - return DEFAULT_DOCKER_HOST; + public DockerClient getClient(DockerClientProfile clientProfile) throws DockerException { + return clients.get(clientProfile); + } + + public void setClient(DockerClientProfile clientProfile, DockerClient client) { + clients.put(clientProfile, client); } - public Integer getDefaultPort() { - return DEFAULT_DOCKER_PORT; + public void setClientProfile(DockerClientProfile clientProfile) { + this.clientProfile = clientProfile; } - public DockerClient getClient(DockerClientProfile clientProfile) throws DockerException { - return clients.get(clientProfile); + public DockerClientProfile getClientProfile() { + return clientProfile; + } + public DockerConfiguration copy() { + try { + return (DockerConfiguration) clone(); + } catch (CloneNotSupportedException e) { + throw new RuntimeCamelException(e); + } } + + } http://git-wip-us.apache.org/repos/asf/camel/blob/fb9556df/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConstants.java ---------------------------------------------------------------------- diff --git a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConstants.java b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConstants.java index 6ade1d0..d70b6df 100644 --- a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConstants.java +++ b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConstants.java @@ -28,14 +28,17 @@ public final class DockerConstants { public static final Map<String, Class<?>> DOCKER_DEFAULT_PARAMETERS = new HashMap<String, Class<?>>(); + /** Connectivity **/ + public static final String DOCKER_CLIENT_PROFILE = "CamelDockerClientProfile"; /** Connectivity **/ + public static final String DOCKER_API_REQUEST_TIMEOUT = "CamelDockerRequestTimeout"; + public static final String DOCKER_CERT_PATH = "CamelDockerCertPath"; public static final String DOCKER_HOST = "CamelDockerHost"; public static final String DOCKER_PORT = "CamelDockerPort"; + public static final String DOCKER_MAX_PER_ROUTE_CONNECTIONS = "CamelDockerMaxPerRouteConnections"; + public static final String DOCKER_MAX_TOTAL_CONNECTIONS = "CamelDockerMaxTotalConnections"; public static final String DOCKER_SECURE = "CamelDockerSecure"; - public static final String DOCKER_API_REQUEST_TIMEOUT = "CamelDockerRequestTimeout"; - public static final String DOCKER_CERT_PATH = "CamelDockerCertPath"; - /** List Images **/ public static final String DOCKER_FILTER = "CamelDockerFilter"; @@ -46,15 +49,15 @@ public final class DockerConstants { public static final String DOCKER_IMAGE_ID = "CamelDockerImageId"; /** Auth **/ - public static final String DOCKER_USERNAME = "CamelDockerUsername"; - public static final String DOCKER_PASSWORD = "CamelDockerPassword"; public static final String DOCKER_EMAIL = "CamelDockerEmail"; + public static final String DOCKER_PASSWORD = "CamelDockerPassword"; public static final String DOCKER_SERVER_ADDRESS = "CamelDockerServerAddress"; + public static final String DOCKER_USERNAME = "CamelDockerUsername"; /** Pull **/ + public static final String DOCKER_REGISTRY = "CamelDockerRegistry"; public static final String DOCKER_REPOSITORY = "CamelDockerRepository"; public static final String DOCKER_TAG = "CamelDockerTag"; - public static final String DOCKER_REGISTRY = "CamelDockerRegistry"; /** Push **/ public static final String DOCKER_NAME = "CamelDockerName"; @@ -70,10 +73,10 @@ public final class DockerConstants { public static final String DOCKER_INITIAL_RANGE = "CamelDockerInitialRange"; /** List Container **/ + public static final String DOCKER_BEFORE = "CamelDockerBefore"; public static final String DOCKER_LIMIT = "CamelDockerLimit"; public static final String DOCKER_SHOW_SIZE = "CamelDockerShowSize"; public static final String DOCKER_SINCE = "CamelDockerSince"; - public static final String DOCKER_BEFORE = "CamelDockerBefore"; /** Remove Container **/ @@ -81,19 +84,22 @@ public final class DockerConstants { /** Attach Container **/ public static final String DOCKER_FOLLOW_STREAM = "CamelDockerFollowStream"; - public static final String DOCKER_STD_OUT = "CamelDockerStdOut"; + public static final String DOCKER_LOGS = "CamelDockerLogs"; public static final String DOCKER_STD_ERR = "CamelDockerStdErr"; + public static final String DOCKER_STD_OUT = "CamelDockerStdOut"; public static final String DOCKER_TIMESTAMPS = "CamelDockerTimestamps"; - public static final String DOCKER_LOGS = "CamelDockerLogs"; /** Logs **/ public static final String DOCKER_TAIL = "CamelDockerTail"; public static final String DOCKER_TAIL_ALL = "CamelDockerTailAll"; /** Copy **/ - public static final String DOCKER_RESOURCE = "CamelDockerResource"; public static final String DOCKER_HOST_PATH = "CamelDockerHostPath"; - + public static final String DOCKER_RESOURCE = "CamelDockerResource"; + + /** Diff Container **/ + public static final String DOCKER_CONTAINER_ID_DIFF = "CamelDockerContainerIdDiff"; + /** Stop Container **/ public static final String DOCKER_TIMEOUT = "CamelDockerTimeout"; @@ -107,23 +113,25 @@ public final class DockerConstants { public static final String DOCKER_NO_CACHE = "CamelDockerNoCache"; public static final String DOCKER_QUIET = "CamelDockerQuiet"; public static final String DOCKER_REMOVE = "CamelDockerRemove"; + public static final String DOCKER_TAR_INPUT_STREAM = "CamelDockerTarInputStream"; - /** Commit **/ - public static final String DOCKER_COMMENT = "CamelDockerComment"; - public static final String DOCKER_MESSAGE = "CamelDockerMessage"; - public static final String DOCKER_AUTHOR = "CamelDockerAuthor"; + + /** Commit Container **/ public static final String DOCKER_ATTACH_STD_ERR = "CamelDockerAttachStdErr"; public static final String DOCKER_ATTACH_STD_IN = "CamelDockerAttachStdIn"; public static final String DOCKER_ATTACH_STD_OUT = "CamelDockerAttachStdOut"; + public static final String DOCKER_AUTHOR = "CamelDockerAuthor"; public static final String DOCKER_CMD = "CamelDockerCmd"; + public static final String DOCKER_COMMENT = "CamelDockerComment"; public static final String DOCKER_DISABLE_NETWORK = "CamelDockerDisableNetwork"; public static final String DOCKER_ENV = "CamelDockerEnv"; - public static final String DOCKER_PAUSE = "CamelDockerPause"; public static final String DOCKER_EXPOSED_PORTS = "CamelDockerExposedPorts"; public static final String DOCKER_HOSTNAME = "CamelDockerHostname"; + public static final String DOCKER_MESSAGE = "CamelDockerMessage"; public static final String DOCKER_MEMORY = "CamelDockerMemory"; public static final String DOCKER_MEMORY_SWAP = "CamelDockerMemorySwap"; public static final String DOCKER_OPEN_STD_IN = "CamelDockerOpenStdIn"; + public static final String DOCKER_PAUSE = "CamelDockerPause"; public static final String DOCKER_PORT_SPECS = "CamelDockerPortSpecs"; public static final String DOCKER_STD_IN_ONCE = "CamelDockerStdInOnce"; public static final String DOCKER_TTY = "CamelDockerTty"; @@ -132,36 +140,46 @@ public final class DockerConstants { public static final String DOCKER_WORKING_DIR = "CamelDockerWorkingDir"; /** Create Container **/ - public static final String DOCKER_MEMORY_LIMIT = "CamelDockerMemoryLimit"; public static final String DOCKER_CPU_SHARES = "CamelDockerCpuShares"; public static final String DOCKER_DNS = "CamelDockerDns"; + public static final String DOCKER_ENTRYPOINT = "CamelDockerEntryPoint"; + public static final String DOCKER_HOST_CONFIG = "CamelDockerHostConfig"; public static final String DOCKER_IMAGE = "CamelDockerImage"; + public static final String DOCKER_MEMORY_LIMIT = "CamelDockerMemoryLimit"; public static final String DOCKER_STD_IN_OPEN = "CamelDockerStdInOpen"; public static final String DOCKER_VOLUMES_FROM = "CamelDockerVolumesFrom"; + /** Start Container **/ public static final String DOCKER_BINDS = "CamelDockerBinds"; + public static final String DOCKER_CAP_ADD = "CamelDockerCapAdd"; + public static final String DOCKER_CAP_DROP = "CamelDockerCapDrop"; + public static final String DOCKER_DEVICES = "CamelDockeDevices"; + public static final String DOCKER_DNS_SEARCH = "CamelDockerDnsSearch"; public static final String DOCKER_LINKS = "CamelDockerLinks"; public static final String DOCKER_LXC_CONF = "CamelDockerLxcConf"; - public static final String DOCKER_PUBLISH_ALL_PORTS = "CamelDockerPublishAllPorts"; - public static final String DOCKER_PORT_BINDINGS = "CamelDockerPortBindings"; - public static final String DOCKER_PRIVILEGED = "CamelDockerDnsSearch"; - public static final String DOCKER_DNS_SEARCH = "CamelDockerDnsSearch"; public static final String DOCKER_NETWORK_MODE = "CamelNetworkMode"; - public static final String DOCKER_DEVICES = "CamelDockeDevices"; + public static final String DOCKER_PORT_BINDINGS = "CamelDockerPortBinding"; + public static final String DOCKER_PORTS = "CamelDockerPorts"; + public static final String DOCKER_PRIVILEGED = "CamelDockerDnsPrivileged"; + public static final String DOCKER_PUBLISH_ALL_PORTS = "CamelDockerPublishAllPorts"; public static final String DOCKER_RESTART_POLICY = "CamelDockerRestartPolicy"; - public static final String DOCKER_CAP_ADD = "CamelDockerCapAdd"; - public static final String DOCKER_CAP_DROP = "CamelDockerCapDrop"; + /** Exec **/ + public static final String DOCKER_DETACH = "CamelDockerDetach"; + public static final String DOCKER_EXEC_ID = "CamelDockerExecId"; + + static { + DOCKER_DEFAULT_PARAMETERS.put(DOCKER_CERT_PATH, String.class); + DOCKER_DEFAULT_PARAMETERS.put(DOCKER_CLIENT_PROFILE, String.class); + DOCKER_DEFAULT_PARAMETERS.put(DOCKER_EMAIL, String.class); DOCKER_DEFAULT_PARAMETERS.put(DOCKER_HOST, String.class); - DOCKER_DEFAULT_PARAMETERS.put(DOCKER_PORT, Integer.class); - DOCKER_DEFAULT_PARAMETERS.put(DOCKER_USERNAME, String.class); DOCKER_DEFAULT_PARAMETERS.put(DOCKER_PASSWORD, String.class); - DOCKER_DEFAULT_PARAMETERS.put(DOCKER_EMAIL, String.class); - DOCKER_DEFAULT_PARAMETERS.put(DOCKER_SERVER_ADDRESS, String.class); + DOCKER_DEFAULT_PARAMETERS.put(DOCKER_PORT, Integer.class); DOCKER_DEFAULT_PARAMETERS.put(DOCKER_SECURE, Boolean.class); - DOCKER_DEFAULT_PARAMETERS.put(DOCKER_CERT_PATH, String.class); + DOCKER_DEFAULT_PARAMETERS.put(DOCKER_SERVER_ADDRESS, String.class); + DOCKER_DEFAULT_PARAMETERS.put(DOCKER_USERNAME, String.class); } private DockerConstants() { http://git-wip-us.apache.org/repos/asf/camel/blob/fb9556df/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerHelper.java ---------------------------------------------------------------------- diff --git a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerHelper.java b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerHelper.java index 7d7cef0..b7934ca 100644 --- a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerHelper.java +++ b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerHelper.java @@ -117,7 +117,7 @@ public final class DockerHelper { return formattedName.toString(); } - + /** * Attempts to locate a given property name within a URI parameter or the message header. * A found value in a message header takes precedence over a URI parameter. @@ -128,8 +128,24 @@ public final class DockerHelper { * @param clazz * @return */ - @SuppressWarnings("unchecked") public static <T> T getProperty(String name, DockerConfiguration configuration, Message message, Class<T> clazz) { + return getProperty(name, configuration, message, clazz, null); + } + + /** + * Attempts to locate a given property name within a URI parameter or the message header. + * A found value in a message header takes precedence over a URI parameter. Returns a + * default value if given + * + * @param name + * @param configuration + * @param message + * @param clazz + * @param defaultValue + * @return + */ + @SuppressWarnings("unchecked") + public static <T> T getProperty(String name, DockerConfiguration configuration, Message message, Class<T> clazz, T defaultValue) { // First attempt to locate property from Message Header, then fallback to Endpoint property if (message != null) { @@ -152,6 +168,9 @@ public final class DockerHelper { return (T)BooleanUtils.toBooleanObject((String)prop, "true", "false", "null"); } } + else if (defaultValue != null) { + return defaultValue; + } return null; @@ -181,9 +200,9 @@ public final class DockerHelper { return headerArray; } - + if (header.getClass().isArray()) { - if (header.getClass().getDeclaringClass().isAssignableFrom(clazz)) { + if (header.getClass().getComponentType().isAssignableFrom(clazz) || header.getClass().getDeclaringClass().isAssignableFrom(clazz)) { return (T[])header; } } @@ -194,27 +213,12 @@ public final class DockerHelper { return null; } - - public static AuthConfig getAuthConfig(DockerConfiguration configuration, Message message) { - String username = getProperty(DockerConstants.DOCKER_USERNAME, configuration, message, String.class); - String password = getProperty(DockerConstants.DOCKER_PASSWORD, configuration, message, String.class); - - ObjectHelper.notNull(username, "username"); - ObjectHelper.notNull(password, "password"); - - String email = getProperty(DockerConstants.DOCKER_EMAIL, configuration, message, String.class); - String serverAddress = getProperty(DockerConstants.DOCKER_SERVER_ADDRESS, configuration, message, String.class); - - - AuthConfig authConfig = new AuthConfig(); - authConfig.setUsername(username); - authConfig.setPassword(password); - authConfig.setEmail(email); - authConfig.setServerAddress(serverAddress); - return authConfig; - } - + /** + * @param headerName name of the header + * @param message the Camel message + * @return + */ public static String[] parseDelimitedStringHeader(String headerName, Message message) { Object header = message.getHeader(headerName); @@ -234,5 +238,4 @@ public final class DockerHelper { } - } http://git-wip-us.apache.org/repos/asf/camel/blob/fb9556df/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerOperation.java ---------------------------------------------------------------------- diff --git a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerOperation.java b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerOperation.java index 715f700..0fb15cb 100644 --- a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerOperation.java +++ b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerOperation.java @@ -25,8 +25,11 @@ import java.util.Map; */ public enum DockerOperation { + /** Events **/ EVENTS("events", false, true, - DockerConstants.DOCKER_INITIAL_RANGE, Long.class), + DockerConstants.DOCKER_INITIAL_RANGE, Long.class), + + /** General **/ AUTH("auth", false, true, DockerConstants.DOCKER_USERNAME, String.class, DockerConstants.DOCKER_PASSWORD, String.class, @@ -35,6 +38,18 @@ public enum DockerOperation { INFO("info", false, true), PING("ping", false, true), VERSION("version", false, true), + + /** Images **/ + BUILD_IMAGE("imagebuild", false, true, + DockerConstants.DOCKER_NO_CACHE, Boolean.class, + DockerConstants.DOCKER_REMOVE, Boolean.class, + DockerConstants.DOCKER_QUIET, Boolean.class), + CREATE_IMAGE("imagecreate", false, true, + DockerConstants.DOCKER_REPOSITORY, String.class), + INSPECT_IMAGE("imageinspect", false, true, + DockerConstants.DOCKER_IMAGE_ID, String.class, + DockerConstants.DOCKER_NO_PRUNE, Boolean.class, + DockerConstants.DOCKER_FORCE, Boolean.class), LIST_IMAGES("imagelist", false, true, DockerConstants.DOCKER_FILTER, String.class, DockerConstants.DOCKER_SHOW_ALL, Boolean.class), @@ -44,132 +59,148 @@ public enum DockerOperation { DockerConstants.DOCKER_REPOSITORY, String.class), PUSH_IMAGE("imagepush", false, true, DockerConstants.DOCKER_NAME, String.class, - DockerConstants.DOCKER_USERNAME, String.class, - DockerConstants.DOCKER_PASSWORD, String.class, - DockerConstants.DOCKER_EMAIL, String.class, - DockerConstants.DOCKER_SERVER_ADDRESS, String.class), - CREATE_IMAGE("imagecreate", false, true, - DockerConstants.DOCKER_REPOSITORY, String.class), - SEARCH_IMAGES("imagesearch", false, true, - DockerConstants.DOCKER_TERM, String.class), + DockerConstants.DOCKER_TAG, String.class), REMOVE_IMAGE("imageremove", false, true, DockerConstants.DOCKER_IMAGE_ID, String.class, DockerConstants.DOCKER_FORCE, Boolean.class, DockerConstants.DOCKER_NO_PRUNE, String.class), - INSPECT_IMAGE("imageinspect", false, true, - DockerConstants.DOCKER_IMAGE_ID, String.class, - DockerConstants.DOCKER_NO_PRUNE, Boolean.class, - DockerConstants.DOCKER_FORCE, Boolean.class), - LIST_CONTAINERS("containerlist", false, true, - DockerConstants.DOCKER_LIMIT, String.class, - DockerConstants.DOCKER_SHOW_ALL, Boolean.class, - DockerConstants.DOCKER_SHOW_SIZE, Boolean.class, - DockerConstants.DOCKER_BEFORE, String.class, - DockerConstants.DOCKER_SINCE, String.class), - WAIT_CONTAINER("containerwait", false, true, - DockerConstants.DOCKER_CONTAINER_ID, String.class), - INSPECT_CONTAINER("inspectcontainer", false, true, - DockerConstants.DOCKER_CONTAINER_ID, String.class), - REMOVE_CONTAINER("removecontainer", false, true, - DockerConstants.DOCKER_CONTAINER_ID, String.class, + SEARCH_IMAGES("imagesearch", false, true, + DockerConstants.DOCKER_TERM, String.class), + TAG_IMAGE("imagetag", false, true, DockerConstants.DOCKER_FORCE, Boolean.class, - DockerConstants.DOCKER_REMOVE_VOLUMES, Boolean.class), + DockerConstants.DOCKER_IMAGE_ID, String.class, + DockerConstants.DOCKER_REPOSITORY, String.class), + + /** Container **/ ATTACH_CONTAINER("containerattach", false, true, DockerConstants.DOCKER_CONTAINER_ID, String.class, DockerConstants.DOCKER_FOLLOW_STREAM, Boolean.class, - DockerConstants.DOCKER_TIMESTAMPS, Boolean.class, - DockerConstants.DOCKER_STD_OUT, Boolean.class, - DockerConstants.DOCKER_STD_ERR, Boolean.class, - DockerConstants.DOCKER_LOGS, Boolean.class), - LOG_CONTAINER("containerlog", false, true, - DockerConstants.DOCKER_CONTAINER_ID, String.class, - DockerConstants.DOCKER_FOLLOW_STREAM, Boolean.class, - DockerConstants.DOCKER_TIMESTAMPS, Boolean.class, + DockerConstants.DOCKER_LOGS, Boolean.class, DockerConstants.DOCKER_STD_OUT, Boolean.class, DockerConstants.DOCKER_STD_ERR, Boolean.class, - DockerConstants.DOCKER_TAIL, Integer.class, - DockerConstants.DOCKER_TAIL_ALL, Boolean.class), - CONTAINER_COPY_FILE("containercopyfile", false, true, - DockerConstants.DOCKER_CONTAINER_ID, String.class, - DockerConstants.DOCKER_RESOURCE, String.class, - DockerConstants.DOCKER_HOST_PATH, String.class), - DIFF_CONTAINER("containerdiff", false, true, - DockerConstants.DOCKER_CONTAINER_ID, String.class), - STOP_CONTAINER("containerstop", false, true, - DockerConstants.DOCKER_CONTAINER_ID, String.class, - DockerConstants.DOCKER_TIMEOUT, Integer.class), - KILL_CONTAINER("containerkill", false, true, - DockerConstants.DOCKER_CONTAINER_ID, String.class, - DockerConstants.DOCKER_SIGNAL, String.class), - RESTART_CONTAINER("containerrestart", false, true, - DockerConstants.DOCKER_CONTAINER_ID, String.class, - DockerConstants.DOCKER_TIMEOUT, Integer.class), - TOP_CONTAINER("containertop", false, true, - DockerConstants.DOCKER_CONTAINER_ID, String.class, - DockerConstants.DOCKER_TIMEOUT, Integer.class), - TAG_IMAGE("imagetag", false, true, - DockerConstants.DOCKER_IMAGE_ID, String.class, - DockerConstants.DOCKER_REPOSITORY, String.class, - DockerConstants.DOCKER_FORCE, Boolean.class), - PAUSE_CONTAINER("containerpause", false, true, - DockerConstants.DOCKER_CONTAINER_ID, String.class), - UNPAUSE_CONTAINER("containerunpause", false, true, - DockerConstants.DOCKER_CONTAINER_ID, String.class), - BUILD_IMAGE("imagebuild", false, true, - DockerConstants.DOCKER_NO_CACHE, Boolean.class, - DockerConstants.DOCKER_REMOVE, Boolean.class, - DockerConstants.DOCKER_QUIET, Boolean.class), + DockerConstants.DOCKER_TIMESTAMPS, Boolean.class), COMMIT_CONTAINER("containercommit", false, true, - DockerConstants.DOCKER_CONTAINER_ID, String.class, - DockerConstants.DOCKER_REPOSITORY, String.class, - DockerConstants.DOCKER_TAG, String.class, - DockerConstants.DOCKER_MESSAGE, String.class, - DockerConstants.DOCKER_AUTHOR, String.class, DockerConstants.DOCKER_ATTACH_STD_ERR, Boolean.class, DockerConstants.DOCKER_ATTACH_STD_IN, Boolean.class, DockerConstants.DOCKER_ATTACH_STD_OUT, Boolean.class, - DockerConstants.DOCKER_PAUSE, Boolean.class, + DockerConstants.DOCKER_AUTHOR, String.class, + DockerConstants.DOCKER_CMD, String.class, + DockerConstants.DOCKER_CONTAINER_ID, String.class, + DockerConstants.DOCKER_DISABLE_NETWORK, String.class, DockerConstants.DOCKER_ENV, String.class, + DockerConstants.DOCKER_EXPOSED_PORTS, String.class, DockerConstants.DOCKER_HOSTNAME, String.class, DockerConstants.DOCKER_MEMORY, Integer.class, DockerConstants.DOCKER_MEMORY_SWAP, Integer.class, + DockerConstants.DOCKER_MESSAGE, String.class, DockerConstants.DOCKER_OPEN_STD_IN, Boolean.class, + DockerConstants.DOCKER_PAUSE, Boolean.class, DockerConstants.DOCKER_PORT_SPECS, String.class, + DockerConstants.DOCKER_REPOSITORY, String.class, DockerConstants.DOCKER_STD_IN_ONCE, Boolean.class, + DockerConstants.DOCKER_TAG, String.class, DockerConstants.DOCKER_TTY, Boolean.class, - DockerConstants.DOCKER_WORKING_DIR, String.class), - CREATE_CONTAINER("containercreate", false, true, - DockerConstants.DOCKER_IMAGE_ID, String.class, - DockerConstants.DOCKER_NAME, String.class, - DockerConstants.DOCKER_WORKING_DIR, String.class, - DockerConstants.DOCKER_DISABLE_NETWORK, Boolean.class, - DockerConstants.DOCKER_HOSTNAME, String.class, - DockerConstants.DOCKER_PORT_SPECS, String.class, DockerConstants.DOCKER_USER, String.class, - DockerConstants.DOCKER_TTY, Boolean.class, - DockerConstants.DOCKER_STD_IN_OPEN, Boolean.class, - DockerConstants.DOCKER_STD_IN_ONCE, Boolean.class, - DockerConstants.DOCKER_MEMORY_LIMIT, Long.class, - DockerConstants.DOCKER_MEMORY_SWAP, Long.class, - DockerConstants.DOCKER_CPU_SHARES, Integer.class, + DockerConstants.DOCKER_VOLUMES, String.class, + DockerConstants.DOCKER_WORKING_DIR, String.class), + COPY_FILE_CONTAINER("containercopyfile", false, true, + DockerConstants.DOCKER_CONTAINER_ID, String.class, + DockerConstants.DOCKER_HOST_PATH, String.class, + DockerConstants.DOCKER_RESOURCE, String.class), + CREATE_CONTAINER("containercreate", false, true, + DockerConstants.DOCKER_ATTACH_STD_ERR, Boolean.class, DockerConstants.DOCKER_ATTACH_STD_IN, Boolean.class, DockerConstants.DOCKER_ATTACH_STD_OUT, Boolean.class, - DockerConstants.DOCKER_ATTACH_STD_ERR, Boolean.class, - DockerConstants.DOCKER_ENV, String.class, + DockerConstants.DOCKER_CAP_ADD, String.class, + DockerConstants.DOCKER_CAP_DROP, String.class, DockerConstants.DOCKER_CMD, String.class, + DockerConstants.DOCKER_CPU_SHARES, Integer.class, + DockerConstants.DOCKER_DISABLE_NETWORK, Boolean.class, DockerConstants.DOCKER_DNS, String.class, + DockerConstants.DOCKER_ENTRYPOINT, String.class, + DockerConstants.DOCKER_ENV, String.class, + DockerConstants.DOCKER_EXPOSED_PORTS, String.class, + DockerConstants.DOCKER_HOST_CONFIG, String.class, + DockerConstants.DOCKER_HOSTNAME, String.class, DockerConstants.DOCKER_IMAGE, String.class, - DockerConstants.DOCKER_VOLUMES_FROM, String.class), + DockerConstants.DOCKER_NAME, String.class, + DockerConstants.DOCKER_PORT_SPECS, String.class, + DockerConstants.DOCKER_STD_IN_OPEN, Boolean.class, + DockerConstants.DOCKER_STD_IN_ONCE, Boolean.class, + DockerConstants.DOCKER_TTY, Boolean.class, + DockerConstants.DOCKER_USER, String.class, + DockerConstants.DOCKER_VOLUMES, String.class, + DockerConstants.DOCKER_VOLUMES_FROM, String.class, + DockerConstants.DOCKER_WORKING_DIR, String.class), + DIFF_CONTAINER("containerdiff", false, true, + DockerConstants.DOCKER_CONTAINER_ID, String.class), + INSPECT_CONTAINER("inspectcontainer", false, true, + DockerConstants.DOCKER_CONTAINER_ID, String.class), + KILL_CONTAINER("containerkill", false, true, + DockerConstants.DOCKER_CONTAINER_ID, String.class, + DockerConstants.DOCKER_SIGNAL, String.class), + LIST_CONTAINERS("containerlist", false, true, + DockerConstants.DOCKER_BEFORE, String.class, + DockerConstants.DOCKER_LIMIT, String.class, + DockerConstants.DOCKER_SHOW_ALL, Boolean.class, + DockerConstants.DOCKER_SHOW_SIZE, Boolean.class, + DockerConstants.DOCKER_SINCE, String.class), + LOG_CONTAINER("containerlog", false, true, + DockerConstants.DOCKER_CONTAINER_ID, String.class, + DockerConstants.DOCKER_FOLLOW_STREAM, Boolean.class, + DockerConstants.DOCKER_STD_ERR, Boolean.class, + DockerConstants.DOCKER_STD_OUT, Boolean.class, + DockerConstants.DOCKER_TAIL, Integer.class, + DockerConstants.DOCKER_TAIL_ALL, Boolean.class, + DockerConstants.DOCKER_TIMESTAMPS, Boolean.class), + PAUSE_CONTAINER("containerpause", false, true, + DockerConstants.DOCKER_CONTAINER_ID, String.class), + RESTART_CONTAINER("containerrestart", false, true, + DockerConstants.DOCKER_CONTAINER_ID, String.class, + DockerConstants.DOCKER_TIMEOUT, Integer.class), + REMOVE_CONTAINER("containerremove", false, true, + DockerConstants.DOCKER_CONTAINER_ID, String.class, + DockerConstants.DOCKER_FORCE, Boolean.class, + DockerConstants.DOCKER_REMOVE_VOLUMES, Boolean.class), START_CONTAINER("containerstart", false, true, - DockerConstants.DOCKER_PUBLISH_ALL_PORTS, Boolean.class, - DockerConstants.DOCKER_PRIVILEGED, Boolean.class, - DockerConstants.DOCKER_DNS, String.class, - DockerConstants.DOCKER_DNS_SEARCH, String.class, + DockerConstants.DOCKER_BINDS, String.class, + DockerConstants.DOCKER_CAP_ADD, String.class, + DockerConstants.DOCKER_CAP_DROP, String.class, DockerConstants.DOCKER_CONTAINER_ID, String.class, - DockerConstants.DOCKER_VOLUMES_FROM, String.class, + DockerConstants.DOCKER_DEVICES, String.class, + DockerConstants.DOCKER_DNS_SEARCH, String.class, + DockerConstants.DOCKER_DNS, String.class, + DockerConstants.DOCKER_LINKS, String.class, + DockerConstants.DOCKER_LXC_CONF, String.class, DockerConstants.DOCKER_NETWORK_MODE, String.class, - DockerConstants.DOCKER_CAP_ADD, String.class, - DockerConstants.DOCKER_CAP_DROP, String.class); + DockerConstants.DOCKER_PORTS, String.class, + DockerConstants.DOCKER_PORT_BINDINGS, String.class, + DockerConstants.DOCKER_PRIVILEGED, Boolean.class, + DockerConstants.DOCKER_PUBLISH_ALL_PORTS, Boolean.class, + DockerConstants.DOCKER_RESTART_POLICY, String.class, + DockerConstants.DOCKER_VOLUMES_FROM, String.class), + STOP_CONTAINER("containerstop", false, true, + DockerConstants.DOCKER_CONTAINER_ID, String.class, + DockerConstants.DOCKER_TIMEOUT, Integer.class), + TOP_CONTAINER("containertop", false, true, + DockerConstants.DOCKER_CONTAINER_ID, String.class, + DockerConstants.DOCKER_PS_ARGS, String.class), + UNPAUSE_CONTAINER("containerunpause", false, true, + DockerConstants.DOCKER_CONTAINER_ID, String.class), + WAIT_CONTAINER("containerwait", false, true, + DockerConstants.DOCKER_CONTAINER_ID, String.class), + + + /** Exec **/ + EXEC_CREATE("execcreate", false, true, + DockerConstants.DOCKER_ATTACH_STD_ERR, Boolean.class, + DockerConstants.DOCKER_ATTACH_STD_IN, Boolean.class, + DockerConstants.DOCKER_ATTACH_STD_OUT, Boolean.class, + DockerConstants.DOCKER_TTY, Boolean.class), + EXEC_START("execstart", false, true, + DockerConstants.DOCKER_DETACH, Boolean.class, + DockerConstants.DOCKER_EXEC_ID, String.class, + DockerConstants.DOCKER_TTY, Boolean.class); private String text; http://git-wip-us.apache.org/repos/asf/camel/blob/fb9556df/components/camel-docker/src/main/java/org/apache/camel/component/docker/consumer/DockerEventsConsumer.java ---------------------------------------------------------------------- diff --git a/components/camel-docker/src/main/java/org/apache/camel/component/docker/consumer/DockerEventsConsumer.java b/components/camel-docker/src/main/java/org/apache/camel/component/docker/consumer/DockerEventsConsumer.java index bae90e7..49ae57a 100644 --- a/components/camel-docker/src/main/java/org/apache/camel/component/docker/consumer/DockerEventsConsumer.java +++ b/components/camel-docker/src/main/java/org/apache/camel/component/docker/consumer/DockerEventsConsumer.java @@ -80,7 +80,7 @@ public class DockerEventsConsumer extends DefaultConsumer implements EventCallba @Override protected void doStart() throws Exception { - eventsCmd = DockerClientFactory.getDockerClient(endpoint.getConfiguration(), null).eventsCmd(this); + eventsCmd = DockerClientFactory.getDockerClient(endpoint.getConfiguration(),null).eventsCmd(this); eventsCmd.withSince(String.valueOf(processInitialEvent())); eventsExecutorService = eventsCmd.exec();