use of com.github.dockerjava.core.LocalDirectorySSLConfig in project camel by apache.
the class DockerClientFactory method getDockerClient.
/**
* Produces a {@link DockerClient} to communicate with Docker
*/
@SuppressWarnings("resource")
public static DockerClient getDockerClient(DockerComponent dockerComponent, DockerConfiguration dockerConfiguration, Message message) throws DockerException {
ObjectHelper.notNull(dockerConfiguration, "dockerConfiguration");
Integer port = DockerHelper.getProperty(DockerConstants.DOCKER_PORT, dockerConfiguration, message, Integer.class, dockerConfiguration.getPort());
String host = DockerHelper.getProperty(DockerConstants.DOCKER_HOST, dockerConfiguration, message, String.class, dockerConfiguration.getHost());
Integer maxTotalConnections = DockerHelper.getProperty(DockerConstants.DOCKER_MAX_TOTAL_CONNECTIONS, dockerConfiguration, message, Integer.class, dockerConfiguration.getMaxTotalConnections());
Integer maxPerRouteConnections = DockerHelper.getProperty(DockerConstants.DOCKER_MAX_PER_ROUTE_CONNECTIONS, dockerConfiguration, message, Integer.class, dockerConfiguration.getMaxPerRouteConnections());
String username = DockerHelper.getProperty(DockerConstants.DOCKER_USERNAME, dockerConfiguration, message, String.class, dockerConfiguration.getUsername());
String password = DockerHelper.getProperty(DockerConstants.DOCKER_PASSWORD, dockerConfiguration, message, String.class, dockerConfiguration.getPassword());
String email = DockerHelper.getProperty(DockerConstants.DOCKER_EMAIL, dockerConfiguration, message, String.class, dockerConfiguration.getEmail());
Integer requestTimeout = DockerHelper.getProperty(DockerConstants.DOCKER_API_REQUEST_TIMEOUT, dockerConfiguration, message, Integer.class, dockerConfiguration.getRequestTimeout());
String serverAddress = DockerHelper.getProperty(DockerConstants.DOCKER_SERVER_ADDRESS, dockerConfiguration, message, String.class, dockerConfiguration.getServerAddress());
String certPath = DockerHelper.getProperty(DockerConstants.DOCKER_CERT_PATH, dockerConfiguration, message, String.class, dockerConfiguration.getCertPath());
Boolean secure = DockerHelper.getProperty(DockerConstants.DOCKER_SECURE, dockerConfiguration, message, Boolean.class, dockerConfiguration.isSecure());
Boolean tlsVerify = DockerHelper.getProperty(DockerConstants.DOCKER_TLSVERIFY, dockerConfiguration, message, Boolean.class, dockerConfiguration.isTlsVerify());
Boolean socket = DockerHelper.getProperty(DockerConstants.DOCKER_SOCKET_ENABLED, dockerConfiguration, message, Boolean.class, dockerConfiguration.isSocket());
String cmdExecFactory = DockerHelper.getProperty(DockerConstants.DOCKER_CMD_EXEC_FACTORY, dockerConfiguration, message, String.class, dockerConfiguration.getCmdExecFactory());
DockerClientProfile clientProfile = new DockerClientProfile();
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);
clientProfile.setTlsVerify(tlsVerify);
clientProfile.setSocket(socket);
clientProfile.setCmdExecFactory(cmdExecFactory);
DockerClient dockerClient = dockerComponent.getClient(clientProfile);
if (dockerClient != null) {
return dockerClient;
}
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();
}
DefaultDockerClientConfig.Builder configBuilder = DefaultDockerClientConfig.createDefaultConfigBuilder().withDockerHost(clientProfile.toUrl()).withDockerTlsVerify(clientProfile.isTlsVerify()).withRegistryUsername(clientProfile.getUsername()).withRegistryPassword(clientProfile.getPassword()).withRegistryEmail(clientProfile.getEmail()).withRegistryUrl(clientProfile.getServerAddress()).withCustomSslConfig(sslConfig);
if (clientProfile.getCertPath() != null) {
configBuilder.withDockerCertPath(clientProfile.getCertPath());
}
CamelContext camelContext = dockerComponent.getCamelContext();
try {
DockerCmdExecFactory factory = null;
if (cmdExecFactory.equals(JerseyDockerCmdExecFactory.class.getName())) {
factory = new JerseyDockerCmdExecFactory();
((JerseyDockerCmdExecFactory) factory).withReadTimeout(clientProfile.getRequestTimeout()).withConnectTimeout(clientProfile.getRequestTimeout()).withMaxTotalConnections(clientProfile.getMaxTotalConnections()).withMaxPerRouteConnections(clientProfile.getMaxPerRouteConnections());
} else if (cmdExecFactory.equals(NettyDockerCmdExecFactory.class.getName())) {
factory = new NettyDockerCmdExecFactory();
((NettyDockerCmdExecFactory) factory).withConnectTimeout(clientProfile.getRequestTimeout());
} else {
Class<DockerCmdExecFactory> clazz = camelContext.getClassResolver().resolveMandatoryClass(cmdExecFactory, DockerCmdExecFactory.class);
factory = ObjectHelper.newInstance(clazz);
}
dockerClient = DockerClientBuilder.getInstance(configBuilder).withDockerCmdExecFactory(factory).build();
dockerComponent.setClient(clientProfile, dockerClient);
return dockerClient;
} catch (ClassNotFoundException e) {
throw new IllegalStateException("Unable to resolve DockerCmdExecFactory class: " + cmdExecFactory, e);
}
}
Aggregations