/** * Copyright (c) 2015 INRIA. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * - Fawaz PARAISO */ package org.occiware.clouddesigner.occi.docker.connector.dockerjava; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.command.ConnectToNetworkCmd; import com.github.dockerjava.api.command.CreateContainerCmd; import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.command.CreateNetworkCmd; import com.github.dockerjava.api.command.CreateNetworkResponse; import com.github.dockerjava.api.command.EventsCmd; import com.github.dockerjava.api.command.InspectContainerCmd; import com.github.dockerjava.api.command.InspectContainerResponse; import com.github.dockerjava.api.command.InspectNetworkCmd; import com.github.dockerjava.api.command.ListContainersCmd; import com.github.dockerjava.api.command.PullImageCmd; import com.github.dockerjava.api.command.RemoveContainerCmd; import com.github.dockerjava.api.command.RenameContainerCmd; import com.github.dockerjava.api.command.StartContainerCmd; import com.github.dockerjava.api.command.StatsCmd; import com.github.dockerjava.api.command.StopContainerCmd; import com.github.dockerjava.api.command.WaitContainerCmd; import com.github.dockerjava.api.exception.InternalServerErrorException; import com.github.dockerjava.api.model.Bind; import com.github.dockerjava.api.model.ExposedPort; import com.github.dockerjava.api.model.Link; import com.github.dockerjava.api.model.LxcConf; import com.github.dockerjava.api.model.Ports; import com.github.dockerjava.api.model.RestartPolicy; import com.github.dockerjava.api.model.Volume; import com.github.dockerjava.api.model.VolumesFrom; import com.github.dockerjava.core.DefaultDockerClientConfig; import com.github.dockerjava.core.DockerClientBuilder; import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.core.command.PullImageResultCallback; import com.github.dockerjava.core.command.WaitContainerResultCallback; import com.google.common.base.Objects; import com.google.common.collect.Multimap; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.Session; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; import org.apache.commons.lang.StringUtils; import org.eclipse.emf.common.util.EList; import org.eclipse.xtext.xbase.lib.CollectionLiterals; import org.eclipse.xtext.xbase.lib.Conversions; import org.eclipse.xtext.xbase.lib.Exceptions; import org.eclipse.xtext.xbase.lib.InputOutput; import org.eclipse.xtext.xbase.lib.IterableExtensions; import org.occiware.clouddesigner.occi.Resource; import org.occiware.clouddesigner.occi.docker.Container; import org.occiware.clouddesigner.occi.docker.Machine; import org.occiware.clouddesigner.occi.docker.Network; import org.occiware.clouddesigner.occi.docker.NetworkLink; import org.occiware.clouddesigner.occi.docker.Volumesfrom; import org.occiware.clouddesigner.occi.docker.connector.EventCallBack; import org.occiware.clouddesigner.occi.docker.connector.StatsCallback; import org.occiware.clouddesigner.occi.docker.connector.dockermachine.manager.DockerMachineManager; import org.occiware.clouddesigner.occi.docker.connector.dockermachine.util.DockerConfig; import org.occiware.clouddesigner.occi.docker.connector.dockermachine.util.DockerUtil; import org.occiware.clouddesigner.occi.docker.preference.preferences.PreferenceValues; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @SuppressWarnings("all") public class DockerContainerManager { private static DockerClient dockerClient = null; private static String currentMachine = null; private Map<String, List<String>> images = new HashMap<String, List<String>>(); private static Logger LOGGER = LoggerFactory.getLogger(DockerContainerManager.class); private PreferenceValues properties = new PreferenceValues(); public DockerContainerManager() { } public DockerContainerManager(final Machine machine) { String _name = machine.getName(); DockerClient _setConfig = this.setConfig(_name, this.properties); DockerContainerManager.dockerClient = _setConfig; } public DockerContainerManager(final String machineName) { DockerClient _setConfig = this.setConfig(machineName, this.properties); DockerContainerManager.dockerClient = _setConfig; } public DockerContainerManager(final Machine machine, final EventCallBack event) { String _name = machine.getName(); DockerClient _setConfig = this.setConfig(_name, this.properties); DockerContainerManager.dockerClient = _setConfig; EventsCmd _eventsCmd = DockerContainerManager.dockerClient.eventsCmd(); _eventsCmd.<EventCallBack>exec(event); } public Map<DockerClient, CreateContainerResponse> createContainer(final Machine machine, final Container container) { boolean _equals = Objects.equal(DockerContainerManager.dockerClient, null); if (_equals) { String _name = machine.getName(); DockerClient _setConfig = this.setConfig(_name, this.properties); DockerContainerManager.dockerClient = _setConfig; } else { String _name_1 = machine.getName(); boolean _equalsIgnoreCase = DockerContainerManager.currentMachine.equalsIgnoreCase(_name_1); boolean _not = (!_equalsIgnoreCase); if (_not) { String _name_2 = machine.getName(); DockerClient _setConfig_1 = this.setConfig(_name_2, this.properties); DockerContainerManager.dockerClient = _setConfig_1; } } Map<DockerClient, CreateContainerResponse> result = new LinkedHashMap<DockerClient, CreateContainerResponse>(); final CreateContainerCmd create = this.containerFactory(container, DockerContainerManager.dockerClient); final CreateContainerResponse rcontainer = create.exec(); String _id = rcontainer.getId(); container.setContainerid(_id); String _containerid = container.getContainerid(); DockerContainerManager.LOGGER.info("Created container: {}", _containerid); result.put(DockerContainerManager.dockerClient, rcontainer); return result; } public Map<DockerClient, CreateContainerResponse> createContainer(final Machine machine, final Container container, final Multimap<String, String> containerDependency) { boolean _equals = Objects.equal(DockerContainerManager.dockerClient, null); if (_equals) { String _name = machine.getName(); DockerClient _setConfig = this.setConfig(_name, this.properties); DockerContainerManager.dockerClient = _setConfig; } else { String _name_1 = machine.getName(); boolean _equalsIgnoreCase = DockerContainerManager.currentMachine.equalsIgnoreCase(_name_1); boolean _not = (!_equalsIgnoreCase); if (_not) { String _name_2 = machine.getName(); DockerClient _setConfig_1 = this.setConfig(_name_2, this.properties); DockerContainerManager.dockerClient = _setConfig_1; } } Map<DockerClient, CreateContainerResponse> result = new LinkedHashMap<DockerClient, CreateContainerResponse>(); final CreateContainerCmd create = this.containerFactory(container, DockerContainerManager.dockerClient, containerDependency); final CreateContainerResponse rcontainer = create.exec(); String _id = rcontainer.getId(); container.setContainerid(_id); String _containerid = container.getContainerid(); DockerContainerManager.LOGGER.info("Created container: {}", _containerid); result.put(DockerContainerManager.dockerClient, rcontainer); return result; } public String createNetwork(final Machine machine, final Network network) { boolean _equals = Objects.equal(DockerContainerManager.dockerClient, null); if (_equals) { String _name = machine.getName(); DockerClient _setConfig = this.setConfig(_name, this.properties); DockerContainerManager.dockerClient = _setConfig; } else { String _name_1 = machine.getName(); boolean _equalsIgnoreCase = DockerContainerManager.currentMachine.equalsIgnoreCase(_name_1); boolean _not = (!_equalsIgnoreCase); if (_not) { String _name_2 = machine.getName(); DockerClient _setConfig_1 = this.setConfig(_name_2, this.properties); DockerContainerManager.dockerClient = _setConfig_1; } } List<com.github.dockerjava.api.model.Network.Ipam.Config> ipamConfigs = CollectionLiterals.<com.github.dockerjava.api.model.Network.Ipam.Config>newArrayList(); com.github.dockerjava.api.model.Network.Ipam ipam = null; String _subnet = network.getSubnet(); boolean _isNotBlank = StringUtils.isNotBlank(_subnet); if (_isNotBlank) { com.github.dockerjava.api.model.Network.Ipam.Config _config = new com.github.dockerjava.api.model.Network.Ipam.Config(); String _subnet_1 = network.getSubnet(); com.github.dockerjava.api.model.Network.Ipam.Config _withSubnet = _config.withSubnet(_subnet_1); ipamConfigs.add(_withSubnet); } else { com.github.dockerjava.api.model.Network.Ipam.Config _config_1 = new com.github.dockerjava.api.model.Network.Ipam.Config(); com.github.dockerjava.api.model.Network.Ipam.Config _withSubnet_1 = _config_1.withSubnet("10.67.79.0/24"); ipamConfigs.add(_withSubnet_1); } String _gateway = network.getGateway(); boolean _isNotBlank_1 = StringUtils.isNotBlank(_gateway); if (_isNotBlank_1) { com.github.dockerjava.api.model.Network.Ipam.Config _config_2 = new com.github.dockerjava.api.model.Network.Ipam.Config(); String _gateway_1 = network.getGateway(); com.github.dockerjava.api.model.Network.Ipam.Config _withGateway = _config_2.withGateway(_gateway_1); ipamConfigs.add(_withGateway); } String _ip_range = network.getIp_range(); boolean _isNotBlank_2 = StringUtils.isNotBlank(_ip_range); if (_isNotBlank_2) { com.github.dockerjava.api.model.Network.Ipam.Config _config_3 = new com.github.dockerjava.api.model.Network.Ipam.Config(); String _ip_range_1 = network.getIp_range(); com.github.dockerjava.api.model.Network.Ipam.Config _withIpRange = _config_3.withIpRange(_ip_range_1); ipamConfigs.add(_withIpRange); } try { com.github.dockerjava.api.model.Network _network = new com.github.dockerjava.api.model.Network(); com.github.dockerjava.api.model.Network.Ipam _ipam = _network.getIpam(); com.github.dockerjava.api.model.Network.Ipam _withConfig = _ipam.withConfig(ipamConfigs); ipam = _withConfig; } catch (final Throwable _t) { if (_t instanceof InvocationTargetException) { final InvocationTargetException exception = (InvocationTargetException)_t; Throwable _cause = exception.getCause(); String _message = _cause.getMessage(); String _plus = (" InvocationTargetException: " + _message); DockerContainerManager.LOGGER.error(_plus); } else if (_t instanceof Exception) { final Exception e = (Exception)_t; String _message_1 = e.getMessage(); String _plus_1 = ("Exception:" + _message_1); DockerContainerManager.LOGGER.error(_plus_1); } else { throw Exceptions.sneakyThrow(_t); } } CreateNetworkCmd _createNetworkCmd = DockerContainerManager.dockerClient.createNetworkCmd(); CreateNetworkCmd createNetworkCmd = _createNetworkCmd.withIpam(ipam); String _name_3 = network.getName(); boolean _isNotBlank_3 = StringUtils.isNotBlank(_name_3); if (_isNotBlank_3) { String _name_4 = network.getName(); CreateNetworkCmd _withName = createNetworkCmd.withName(_name_4); createNetworkCmd = _withName; } String _driver = network.getDriver(); boolean _isNotBlank_4 = StringUtils.isNotBlank(_driver); if (_isNotBlank_4) { String _driver_1 = network.getDriver(); CreateNetworkCmd _withDriver = createNetworkCmd.withDriver(_driver_1); createNetworkCmd = _withDriver; } CreateNetworkResponse createNetworkResponse = null; com.github.dockerjava.api.model.Network updateNetwork = null; try { CreateNetworkCmd _withCheckDuplicate = createNetworkCmd.withCheckDuplicate(true); CreateNetworkResponse _exec = _withCheckDuplicate.exec(); createNetworkResponse = _exec; } catch (final Throwable _t_1) { if (_t_1 instanceof InternalServerErrorException) { final InternalServerErrorException exception_1 = (InternalServerErrorException)_t_1; String _message_2 = exception_1.getMessage(); DockerContainerManager.LOGGER.error(_message_2); createNetworkResponse = null; InspectNetworkCmd _inspectNetworkCmd = DockerContainerManager.dockerClient.inspectNetworkCmd(); String _name_5 = network.getName(); InspectNetworkCmd _withNetworkId = _inspectNetworkCmd.withNetworkId(_name_5); com.github.dockerjava.api.model.Network _exec_1 = _withNetworkId.exec(); updateNetwork = _exec_1; updateNetwork.getId(); } else { throw Exceptions.sneakyThrow(_t_1); } } boolean _notEquals = (!Objects.equal(createNetworkResponse, null)); if (_notEquals) { return createNetworkResponse.getId(); } else { return updateNetwork.getId(); } } public void connectToNetwork(final Machine machine, final Map<Container, Set<NetworkLink>> networks) { boolean _equals = Objects.equal(DockerContainerManager.dockerClient, null); if (_equals) { String _name = machine.getName(); DockerClient _setConfig = this.setConfig(_name, this.properties); DockerContainerManager.dockerClient = _setConfig; } else { String _name_1 = machine.getName(); boolean _equalsIgnoreCase = DockerContainerManager.currentMachine.equalsIgnoreCase(_name_1); boolean _not = (!_equalsIgnoreCase); if (_not) { String _name_2 = machine.getName(); DockerClient _setConfig_1 = this.setConfig(_name_2, this.properties); DockerContainerManager.dockerClient = _setConfig_1; } } int _size = networks.size(); boolean _greaterThan = (_size > 0); if (_greaterThan) { Set<Map.Entry<Container, Set<NetworkLink>>> _entrySet = networks.entrySet(); for (final Map.Entry<Container, Set<NetworkLink>> entry : _entrySet) { Set<NetworkLink> _value = entry.getValue(); for (final NetworkLink netLink : _value) { try { ConnectToNetworkCmd _connectToNetworkCmd = DockerContainerManager.dockerClient.connectToNetworkCmd(); Resource _target = netLink.getTarget(); String _networkId = ((Network) _target).getNetworkId(); ConnectToNetworkCmd _withNetworkId = _connectToNetworkCmd.withNetworkId(_networkId); Container _key = entry.getKey(); String _containerid = _key.getContainerid(); ConnectToNetworkCmd _withContainerId = _withNetworkId.withContainerId(_containerid); _withContainerId.exec(); } catch (final Throwable _t) { if (_t instanceof InternalServerErrorException) { final InternalServerErrorException exception = (InternalServerErrorException)_t; String _message = exception.getMessage(); String _plus = ("InternalServerErrorException: " + _message); DockerContainerManager.LOGGER.error(_plus); } else { throw Exceptions.sneakyThrow(_t); } } } } } } public void removeContainer(final String machineName, final String containerId) { boolean _equals = Objects.equal(DockerContainerManager.dockerClient, null); if (_equals) { DockerClient _setConfig = this.setConfig(machineName, this.properties); DockerContainerManager.dockerClient = _setConfig; } else { boolean _equalsIgnoreCase = DockerContainerManager.currentMachine.equalsIgnoreCase(machineName); boolean _not = (!_equalsIgnoreCase); if (_not) { DockerClient _setConfig_1 = this.setConfig(machineName, this.properties); DockerContainerManager.dockerClient = _setConfig_1; } } RemoveContainerCmd _removeContainerCmd = DockerContainerManager.dockerClient.removeContainerCmd(containerId); _removeContainerCmd.exec(); } public CreateContainerCmd containerFactory(final Container container, final DockerClient dockerClient) { CreateContainerCmd create = null; String _image = container.getImage(); boolean _isNotBlank = StringUtils.isNotBlank(_image); if (_isNotBlank) { String _image_1 = container.getImage(); String _trim = _image_1.trim(); CreateContainerCmd _createContainerCmd = dockerClient.createContainerCmd(_trim); create = _createContainerCmd; } else { CreateContainerCmd _createContainerCmd_1 = dockerClient.createContainerCmd("busybox"); create = _createContainerCmd_1; } String _command = container.getCommand(); boolean _isNotBlank_1 = StringUtils.isNotBlank(_command); if (_isNotBlank_1) { String _command_1 = container.getCommand(); String _deleteWhitespace = StringUtils.deleteWhitespace(_command_1); String[] cmd = _deleteWhitespace.split(","); create.withCmd(cmd); } else { String _image_2 = container.getImage(); boolean _isNotBlank_2 = StringUtils.isNotBlank(_image_2); boolean _not = (!_isNotBlank_2); if (_not) { create.withCmd("sleep", "9999"); } } int _cpu_shares = container.getCpu_shares(); boolean _greaterThan = (_cpu_shares > 0); if (_greaterThan) { int _cpu_shares_1 = container.getCpu_shares(); create.withCpuShares(Integer.valueOf(_cpu_shares_1)); } String _add_host = container.getAdd_host(); boolean _isNotBlank_3 = StringUtils.isNotBlank(_add_host); if (_isNotBlank_3) { String _hostname = container.getHostname(); String _deleteWhitespace_1 = StringUtils.deleteWhitespace(_hostname); create.withHostName(_deleteWhitespace_1); } String _cpuset = container.getCpuset(); boolean _isNotBlank_4 = StringUtils.isNotBlank(_cpuset); if (_isNotBlank_4) { String _cpuset_1 = container.getCpuset(); String _deleteWhitespace_2 = StringUtils.deleteWhitespace(_cpuset_1); create.withCpusetCpus(_deleteWhitespace_2); } boolean _isPrivileged = container.isPrivileged(); if (_isPrivileged) { boolean _isPrivileged_1 = container.isPrivileged(); create.withPrivileged(Boolean.valueOf(_isPrivileged_1)); } String _dns = container.getDns(); boolean _isNotBlank_5 = StringUtils.isNotBlank(_dns); if (_isNotBlank_5) { String _dns_1 = container.getDns(); String _deleteWhitespace_3 = StringUtils.deleteWhitespace(_dns_1); create.withDns(_deleteWhitespace_3); } String _environment = container.getEnvironment(); boolean _isNotBlank_6 = StringUtils.isNotBlank(_environment); if (_isNotBlank_6) { String _environment_1 = container.getEnvironment(); String _deleteWhitespace_4 = StringUtils.deleteWhitespace(_environment_1); String[] env = _deleteWhitespace_4.split(","); create.withEnv(env); } String _ports = container.getPorts(); String _plus = ("Container ports = " + _ports); DockerContainerManager.LOGGER.info(_plus); String _ports_1 = container.getPorts(); boolean _isNotBlank_7 = StringUtils.isNotBlank(_ports_1); if (_isNotBlank_7) { String _ports_2 = container.getPorts(); final String[] l_r_ports = _ports_2.split(":"); String _get = l_r_ports[0]; int _parseInt = Integer.parseInt(_get); ExposedPort tcp = ExposedPort.tcp(_parseInt); final Ports portBindings = new Ports(); int _size = ((List<String>)Conversions.doWrapArray(l_r_ports)).size(); boolean _equals = (_size == 2); if (_equals) { String _get_1 = l_r_ports[1]; boolean _isNotBlank_8 = StringUtils.isNotBlank(_get_1); if (_isNotBlank_8) { String _get_2 = l_r_ports[1]; int _parseInt_1 = Integer.parseInt(_get_2); Ports.Binding _bindPort = Ports.Binding.bindPort(_parseInt_1); portBindings.bind(tcp, _bindPort); } else { Ports.Binding _bindPort_1 = Ports.Binding.bindPort(32768); portBindings.bind(tcp, _bindPort_1); } } CreateContainerCmd _withExposedPorts = create.withExposedPorts(tcp); _withExposedPorts.withPortBindings(portBindings); } String _name = container.getName(); boolean _isNotBlank_9 = StringUtils.isNotBlank(_name); if (_isNotBlank_9) { String _name_1 = container.getName(); String _deleteWhitespace_5 = StringUtils.deleteWhitespace(_name_1); create.withName(_deleteWhitespace_5); } String _hostname_1 = container.getHostname(); boolean _isNotBlank_10 = StringUtils.isNotBlank(_hostname_1); if (_isNotBlank_10) { String _hostname_2 = container.getHostname(); String _deleteWhitespace_6 = StringUtils.deleteWhitespace(_hostname_2); create.withHostName(_deleteWhitespace_6); } String _net = container.getNet(); boolean _isNotBlank_11 = StringUtils.isNotBlank(_net); if (_isNotBlank_11) { String _net_1 = container.getNet(); create.withNetworkMode(_net_1); } boolean _isPublish_all = container.isPublish_all(); if (_isPublish_all) { boolean _isPublish_all_1 = container.isPublish_all(); create.withPublishAllPorts(Boolean.valueOf(_isPublish_all_1)); } boolean _isStdin_open = container.isStdin_open(); if (_isStdin_open) { boolean _isStdin_open_1 = container.isStdin_open(); create.withStdInOnce(Boolean.valueOf(_isStdin_open_1)); } String _user = container.getUser(); boolean _isNotBlank_12 = StringUtils.isNotBlank(_user); if (_isNotBlank_12) { String _user_1 = container.getUser(); create.withUser(_user_1); } String _volumes = container.getVolumes(); boolean _isNotBlank_13 = StringUtils.isNotBlank(_volumes); if (_isNotBlank_13) { String _volumes_1 = container.getVolumes(); String _deleteWhitespace_7 = StringUtils.deleteWhitespace(_volumes_1); String[] volumes = _deleteWhitespace_7.split(","); List<Volume> vs = new ArrayList<Volume>(); for (final String v : volumes) { { Volume newVolume = new Volume(v); vs.add(newVolume); } } create.withVolumes(vs); } int _mem_limit = container.getMem_limit(); boolean _greaterThan_1 = (_mem_limit > 0); if (_greaterThan_1) { int _mem_limit_1 = container.getMem_limit(); Long _valueOf = Long.valueOf(_mem_limit_1); create.withMemory(_valueOf); } int _memory_swap = container.getMemory_swap(); boolean _greaterThan_2 = (_memory_swap > 0); if (_greaterThan_2) { int _memory_swap_1 = container.getMemory_swap(); Long _valueOf_1 = Long.valueOf(_memory_swap_1); create.withMemory(_valueOf_1); } String _lxc_conf = container.getLxc_conf(); boolean _isNotBlank_14 = StringUtils.isNotBlank(_lxc_conf); if (_isNotBlank_14) { final LxcConf lxcCon = new LxcConf("key", "value"); create.withLxcConf(lxcCon); } String _domainname = container.getDomainname(); boolean _isNotBlank_15 = StringUtils.isNotBlank(_domainname); if (_isNotBlank_15) { String _domainname_1 = container.getDomainname(); create.withDomainName(_domainname_1); } String _dns_search = container.getDns_search(); boolean _isNotBlank_16 = StringUtils.isNotBlank(_dns_search); if (_isNotBlank_16) { String _dns_search_1 = container.getDns_search(); String[] dnsSearch = _dns_search_1.split(","); create.withDnsSearch(dnsSearch); } String _entrypoint = container.getEntrypoint(); boolean _isNotBlank_17 = StringUtils.isNotBlank(_entrypoint); if (_isNotBlank_17) { String _entrypoint_1 = container.getEntrypoint(); String[] entrypoint = _entrypoint_1.split(","); create.withEntrypoint(entrypoint); } String _net_2 = container.getNet(); boolean _isNotBlank_18 = StringUtils.isNotBlank(_net_2); if (_isNotBlank_18) { String _net_3 = container.getNet(); String _deleteWhitespace_8 = StringUtils.deleteWhitespace(_net_3); create.withNetworkMode(_deleteWhitespace_8); } String _pid = container.getPid(); boolean _isNotBlank_19 = StringUtils.isNotBlank(_pid); if (_isNotBlank_19) { String _pid_1 = container.getPid(); String _deleteWhitespace_9 = StringUtils.deleteWhitespace(_pid_1); create.withPidMode(_deleteWhitespace_9); } boolean _isPrivileged_2 = container.isPrivileged(); if (_isPrivileged_2) { boolean _isPrivileged_3 = container.isPrivileged(); create.withPrivileged(Boolean.valueOf(_isPrivileged_3)); } boolean _isPublish_all_2 = container.isPublish_all(); if (_isPublish_all_2) { boolean _isPublish_all_3 = container.isPublish_all(); create.withPublishAllPorts(Boolean.valueOf(_isPublish_all_3)); } boolean _isRead_only = container.isRead_only(); if (_isRead_only) { boolean _isRead_only_1 = container.isRead_only(); create.withReadonlyRootfs(Boolean.valueOf(_isRead_only_1)); } boolean _isTty = container.isTty(); if (_isTty) { boolean _isTty_1 = container.isTty(); create.withTty(Boolean.valueOf(_isTty_1)); } String _restart = container.getRestart(); boolean _isNotBlank_20 = StringUtils.isNotBlank(_restart); if (_isNotBlank_20) { String _restart_1 = container.getRestart(); String _deleteWhitespace_10 = StringUtils.deleteWhitespace(_restart_1); RestartPolicy _parse = RestartPolicy.parse(_deleteWhitespace_10); create.withRestartPolicy(_parse); } String _working_dir = container.getWorking_dir(); boolean _isNotBlank_21 = StringUtils.isNotBlank(_working_dir); if (_isNotBlank_21) { String _working_dir_1 = container.getWorking_dir(); String _deleteWhitespace_11 = StringUtils.deleteWhitespace(_working_dir_1); create.withWorkingDir(_deleteWhitespace_11); create.getCpusetCpus(); } List<Container> containersWithVolumes = new ArrayList<Container>(); List<org.occiware.clouddesigner.occi.docker.Volume> volumesInsideHost = new ArrayList<org.occiware.clouddesigner.occi.docker.Volume>(); List<Resource> _containersWithVolumes = this.containersWithVolumes(container); for (final Resource r : _containersWithVolumes) { { if ((r instanceof Container)) { containersWithVolumes.add(((Container) r)); } if ((r instanceof org.occiware.clouddesigner.occi.docker.Volume)) { volumesInsideHost.add(((org.occiware.clouddesigner.occi.docker.Volume) r)); } } } boolean _isNullOrEmpty = IterableExtensions.isNullOrEmpty(containersWithVolumes); boolean _not_1 = (!_isNullOrEmpty); if (_not_1) { List<VolumesFrom> volumesFrom = new ArrayList<VolumesFrom>(); for (final Container c : containersWithVolumes) { { String _name_2 = c.getName(); VolumesFrom _volumesFrom = new VolumesFrom(_name_2); volumesFrom.add(_volumesFrom); String _name_3 = c.getName(); DockerContainerManager.LOGGER.info(_name_3); } } create.withVolumesFrom(volumesFrom); } boolean _isNullOrEmpty_1 = IterableExtensions.isNullOrEmpty(volumesInsideHost); boolean _not_2 = (!_isNullOrEmpty_1); if (_not_2) { List<Bind> volumesBind = new ArrayList<Bind>(); List<Volume> vs_1 = new ArrayList<Volume>(); for (final org.occiware.clouddesigner.occi.docker.Volume v_1 : volumesInsideHost) { { Volume newVolume = null; String _destination = v_1.getDestination(); boolean _isBlank = StringUtils.isBlank(_destination); boolean _not_3 = (!_isBlank); if (_not_3) { String _destination_1 = v_1.getDestination(); Volume _volume = new Volume(_destination_1); newVolume = _volume; vs_1.add(newVolume); } String _source = v_1.getSource(); boolean _isBlank_1 = StringUtils.isBlank(_source); boolean _not_4 = (!_isBlank_1); if (_not_4) { String _source_1 = v_1.getSource(); Bind newBind = new Bind(_source_1, newVolume); volumesBind.add(newBind); } } } create.withVolumes(vs_1); create.withBinds(volumesBind); } return create; } public CreateContainerCmd containerFactory(final Container container, final DockerClient dockerClient, final Multimap<String, String> containerDependency) { CreateContainerCmd create = null; String _image = container.getImage(); boolean _notEquals = (!Objects.equal(_image, null)); if (_notEquals) { String _image_1 = container.getImage(); String _trim = _image_1.trim(); CreateContainerCmd _createContainerCmd = dockerClient.createContainerCmd(_trim); create = _createContainerCmd; } else { String _image_2 = container.getImage(); boolean _equals = Objects.equal(_image_2, null); if (_equals) { CreateContainerCmd _createContainerCmd_1 = dockerClient.createContainerCmd("busybox"); create = _createContainerCmd_1; } } String _command = container.getCommand(); boolean _isNotBlank = StringUtils.isNotBlank(_command); if (_isNotBlank) { String _command_1 = container.getCommand(); String _deleteWhitespace = StringUtils.deleteWhitespace(_command_1); final String[] cmd = _deleteWhitespace.split(","); create.withCmd(cmd); } else { create.withCmd("sleep", "9999"); } int _cpu_shares = container.getCpu_shares(); boolean _greaterThan = (_cpu_shares > 0); if (_greaterThan) { int _cpu_shares_1 = container.getCpu_shares(); create.withCpuShares(Integer.valueOf(_cpu_shares_1)); } String _add_host = container.getAdd_host(); boolean _isNotBlank_1 = StringUtils.isNotBlank(_add_host); if (_isNotBlank_1) { String _hostname = container.getHostname(); String _deleteWhitespace_1 = StringUtils.deleteWhitespace(_hostname); create.withHostName(_deleteWhitespace_1); } String _cpuset = container.getCpuset(); boolean _isNotBlank_2 = StringUtils.isNotBlank(_cpuset); if (_isNotBlank_2) { String _cpuset_1 = container.getCpuset(); String _deleteWhitespace_2 = StringUtils.deleteWhitespace(_cpuset_1); create.withCpusetCpus(_deleteWhitespace_2); } boolean _isPrivileged = container.isPrivileged(); if (_isPrivileged) { boolean _isPrivileged_1 = container.isPrivileged(); create.withPrivileged(Boolean.valueOf(_isPrivileged_1)); } String _dns = container.getDns(); boolean _isBlank = StringUtils.isBlank(_dns); boolean _not = (!_isBlank); if (_not) { String _dns_1 = container.getDns(); String _deleteWhitespace_3 = StringUtils.deleteWhitespace(_dns_1); create.withDns(_deleteWhitespace_3); } String _environment = container.getEnvironment(); boolean _isBlank_1 = StringUtils.isBlank(_environment); boolean _not_1 = (!_isBlank_1); if (_not_1) { String _environment_1 = container.getEnvironment(); String _deleteWhitespace_4 = StringUtils.deleteWhitespace(_environment_1); create.withEnv(_deleteWhitespace_4); } String _ports = container.getPorts(); boolean _isBlank_2 = StringUtils.isBlank(_ports); boolean _not_2 = (!_isBlank_2); if (_not_2) { String _ports_1 = container.getPorts(); final String[] ports = _ports_1.split(":"); String _get = ports[0]; int _parseInt = Integer.parseInt(_get); ExposedPort port = ExposedPort.tcp(_parseInt); final Ports portBindings = new Ports(); int _size = ((List<String>)Conversions.doWrapArray(ports)).size(); boolean _equals_1 = (_size == 2); if (_equals_1) { String _get_1 = ports[1]; int _parseInt_1 = Integer.parseInt(_get_1); Ports.Binding _bindPort = Ports.Binding.bindPort(_parseInt_1); portBindings.bind(port, _bindPort); } else { int _size_1 = ((List<String>)Conversions.doWrapArray(ports)).size(); boolean _equals_2 = (_size_1 == 1); if (_equals_2) { String _get_2 = ports[0]; int _parseInt_2 = Integer.parseInt(_get_2); Ports.Binding _bindPort_1 = Ports.Binding.bindPort(_parseInt_2); portBindings.bind(port, _bindPort_1); } } create.withPortBindings(portBindings); } String _name = container.getName(); boolean _isBlank_3 = StringUtils.isBlank(_name); boolean _not_3 = (!_isBlank_3); if (_not_3) { String _name_1 = container.getName(); String _deleteWhitespace_5 = StringUtils.deleteWhitespace(_name_1); create.withName(_deleteWhitespace_5); } String _hostname_1 = container.getHostname(); boolean _isBlank_4 = StringUtils.isBlank(_hostname_1); boolean _not_4 = (!_isBlank_4); if (_not_4) { String _hostname_2 = container.getHostname(); String _deleteWhitespace_6 = StringUtils.deleteWhitespace(_hostname_2); create.withName(_deleteWhitespace_6); } String _net = container.getNet(); boolean _isBlank_5 = StringUtils.isBlank(_net); boolean _not_5 = (!_isBlank_5); if (_not_5) { String _net_1 = container.getNet(); String _deleteWhitespace_7 = StringUtils.deleteWhitespace(_net_1); create.withNetworkMode(_deleteWhitespace_7); } boolean _isPublish_all = container.isPublish_all(); if (_isPublish_all) { boolean _isPublish_all_1 = container.isPublish_all(); create.withPublishAllPorts(Boolean.valueOf(_isPublish_all_1)); } boolean _isTty = container.isTty(); if (_isTty) { boolean _isTty_1 = container.isTty(); create.withTty(Boolean.valueOf(_isTty_1)); } boolean _isStdin_open = container.isStdin_open(); if (_isStdin_open) { boolean _isStdin_open_1 = container.isStdin_open(); create.withStdInOnce(Boolean.valueOf(_isStdin_open_1)); } String _user = container.getUser(); boolean _isBlank_6 = StringUtils.isBlank(_user); boolean _not_6 = (!_isBlank_6); if (_not_6) { String _user_1 = container.getUser(); String _deleteWhitespace_8 = StringUtils.deleteWhitespace(_user_1); create.withUser(_deleteWhitespace_8); } String _volumes = container.getVolumes(); boolean _isBlank_7 = StringUtils.isBlank(_volumes); boolean _not_7 = (!_isBlank_7); if (_not_7) { String _volumes_1 = container.getVolumes(); String _deleteWhitespace_9 = StringUtils.deleteWhitespace(_volumes_1); String[] volumes = _deleteWhitespace_9.split(","); List<Volume> vs = new ArrayList<Volume>(); for (final String v : volumes) { { Volume newVolume = new Volume(v); vs.add(newVolume); } } create.withVolumes(vs); } int _mem_limit = container.getMem_limit(); boolean _greaterThan_1 = (_mem_limit > 0); if (_greaterThan_1) { int _mem_limit_1 = container.getMem_limit(); Long _valueOf = Long.valueOf(_mem_limit_1); create.withMemory(_valueOf); } int _memory_swap = container.getMemory_swap(); boolean _greaterThan_2 = (_memory_swap > 0); if (_greaterThan_2) { int _memory_swap_1 = container.getMemory_swap(); Long _valueOf_1 = Long.valueOf(_memory_swap_1); create.withMemorySwap(_valueOf_1); } String _lxc_conf = container.getLxc_conf(); boolean _isBlank_8 = StringUtils.isBlank(_lxc_conf); boolean _not_8 = (!_isBlank_8); if (_not_8) { final LxcConf lxcCon = new LxcConf("key", "value"); create.withLxcConf(lxcCon); } String _name_2 = container.getName(); boolean _containsKey = containerDependency.containsKey(_name_2); if (_containsKey) { String _name_3 = container.getName(); Collection<String> _get_3 = containerDependency.get(_name_3); LinkedHashSet<String> _linkedHashSet = new LinkedHashSet<String>(_get_3); final List<String> depdupeContainers = new ArrayList<String>(_linkedHashSet); List<Link> dockeClientlinks = new ArrayList<Link>(); Link dockeClientlink = null; for (final String entry : depdupeContainers) { { String _name_4 = container.getName(); String _plus = (_name_4 + "LinkTo"); String _plus_1 = (_plus + entry); Link _link = new Link(entry, _plus_1); dockeClientlink = _link; dockeClientlinks.add(dockeClientlink); } } int _size_2 = depdupeContainers.size(); boolean _greaterThan_3 = (_size_2 > 1); if (_greaterThan_3) { create.withLinks(dockeClientlinks); } else { int _size_3 = depdupeContainers.size(); boolean _equals_3 = (_size_3 == 1); if (_equals_3) { create.withLinks(dockeClientlink); } } } List<Container> containersWithVolumes = new ArrayList<Container>(); List<org.occiware.clouddesigner.occi.docker.Volume> volumesInsideHost = new ArrayList<org.occiware.clouddesigner.occi.docker.Volume>(); List<Resource> _containersWithVolumes = this.containersWithVolumes(container); for (final Resource r : _containersWithVolumes) { { if ((r instanceof Container)) { containersWithVolumes.add(((Container) r)); } if ((r instanceof org.occiware.clouddesigner.occi.docker.Volume)) { volumesInsideHost.add(((org.occiware.clouddesigner.occi.docker.Volume) r)); } } } boolean _isNullOrEmpty = IterableExtensions.isNullOrEmpty(containersWithVolumes); boolean _not_9 = (!_isNullOrEmpty); if (_not_9) { List<VolumesFrom> volumesFrom = new ArrayList<VolumesFrom>(); for (final Container c : containersWithVolumes) { { String _name_4 = c.getName(); VolumesFrom _volumesFrom = new VolumesFrom(_name_4); volumesFrom.add(_volumesFrom); String _name_5 = c.getName(); DockerContainerManager.LOGGER.info(_name_5); } } create.withVolumesFrom(volumesFrom); } boolean _isNullOrEmpty_1 = IterableExtensions.isNullOrEmpty(volumesInsideHost); boolean _not_10 = (!_isNullOrEmpty_1); if (_not_10) { List<Bind> volumesBind = new ArrayList<Bind>(); List<Volume> vs_1 = new ArrayList<Volume>(); for (final org.occiware.clouddesigner.occi.docker.Volume v_1 : volumesInsideHost) { { Volume newVolume = null; String _destination = v_1.getDestination(); boolean _isBlank_9 = StringUtils.isBlank(_destination); boolean _not_11 = (!_isBlank_9); if (_not_11) { String _destination_1 = v_1.getDestination(); Volume _volume = new Volume(_destination_1); newVolume = _volume; vs_1.add(newVolume); } String _source = v_1.getSource(); boolean _isBlank_10 = StringUtils.isBlank(_source); boolean _not_12 = (!_isBlank_10); if (_not_12) { String _source_1 = v_1.getSource(); Bind newBind = new Bind(_source_1, newVolume); volumesBind.add(newBind); } } } create.withVolumes(vs_1); create.withBinds(volumesBind); } return create; } public List<Resource> containersWithVolumes(final Container c) { ArrayList<Resource> containersFrom = new ArrayList<Resource>(); EList<org.occiware.clouddesigner.occi.Link> _links = c.getLinks(); for (final org.occiware.clouddesigner.occi.Link l : _links) { if ((l instanceof Volumesfrom)) { Resource _target = ((Volumesfrom)l).getTarget(); containersFrom.add(_target); } } return containersFrom; } public InspectContainerResponse inspectContainer(final Map<DockerClient, CreateContainerResponse> map) { Set<DockerClient> _keySet = map.keySet(); Iterator<DockerClient> _iterator = _keySet.iterator(); DockerClient _next = _iterator.next(); final DockerClient dockerClient = ((DockerClient) _next); CreateContainerResponse _get = map.get(dockerClient); final CreateContainerResponse createContainerResponse = ((CreateContainerResponse) _get); String _id = createContainerResponse.getId(); InspectContainerCmd _inspectContainerCmd = dockerClient.inspectContainerCmd(_id); final InspectContainerResponse inspectContainerResponse = _inspectContainerCmd.exec(); return inspectContainerResponse; } public InspectContainerResponse inspectContainer(final Machine machine, final String containerId) { boolean _equals = Objects.equal(DockerContainerManager.dockerClient, null); if (_equals) { String _name = machine.getName(); DockerClient _setConfig = this.setConfig(_name, this.properties); DockerContainerManager.dockerClient = _setConfig; } else { String _name_1 = machine.getName(); boolean _equalsIgnoreCase = DockerContainerManager.currentMachine.equalsIgnoreCase(_name_1); boolean _not = (!_equalsIgnoreCase); if (_not) { String _name_2 = machine.getName(); DockerClient _setConfig_1 = this.setConfig(_name_2, this.properties); DockerContainerManager.dockerClient = _setConfig_1; String _name_3 = machine.getName(); DockerContainerManager.currentMachine = _name_3; } } InspectContainerCmd _inspectContainerCmd = DockerContainerManager.dockerClient.inspectContainerCmd(containerId); final InspectContainerResponse inspectContainerResponse = _inspectContainerCmd.exec(); return inspectContainerResponse; } public StatsCallback startContainer(final Machine machine, final Container container) { StatsCallback _xblockexpression = null; { boolean _notEquals = (!Objects.equal(DockerContainerManager.dockerClient, null)); if (_notEquals) { DockerContainerManager.dockerClient = DockerContainerManager.dockerClient; } else { String _name = machine.getName(); boolean _equalsIgnoreCase = DockerContainerManager.currentMachine.equalsIgnoreCase(_name); boolean _not = (!_equalsIgnoreCase); if (_not) { String _name_1 = machine.getName(); DockerClient _setConfig = this.setConfig(_name_1, this.properties); DockerContainerManager.dockerClient = _setConfig; } } String _containerid = container.getContainerid(); StartContainerCmd _startContainerCmd = DockerContainerManager.dockerClient.startContainerCmd(_containerid); _startContainerCmd.exec(); StatsCallback _xifexpression = null; boolean _isMonitored = container.isMonitored(); if (_isMonitored) { StatsCallback _xblockexpression_1 = null; { DockerContainerManager.LOGGER.info("Starting metrics collection"); String _name_2 = machine.getName(); DockerClient _setConfig_1 = this.setConfig(_name_2, this.properties); DockerContainerManager.dockerClient = _setConfig_1; String _containerid_1 = container.getContainerid(); StatsCmd _statsCmd = DockerContainerManager.dockerClient.statsCmd(_containerid_1); StatsCallback _statsCallback = new StatsCallback(container); _xblockexpression_1 = _statsCmd.<StatsCallback>exec(_statsCallback); } _xifexpression = _xblockexpression_1; } _xblockexpression = _xifexpression; } return _xblockexpression; } public StatsCallback startContainer(final Machine machine, final String containerId) { StatsCallback _xblockexpression = null; { boolean _equals = Objects.equal(DockerContainerManager.dockerClient, null); if (_equals) { String _name = machine.getName(); DockerClient _setConfig = this.setConfig(_name, this.properties); DockerContainerManager.dockerClient = _setConfig; } else { String _name_1 = machine.getName(); boolean _equalsIgnoreCase = DockerContainerManager.currentMachine.equalsIgnoreCase(_name_1); boolean _not = (!_equalsIgnoreCase); if (_not) { String _name_2 = machine.getName(); DockerClient _setConfig_1 = this.setConfig(_name_2, this.properties); DockerContainerManager.dockerClient = _setConfig_1; } } StartContainerCmd _startContainerCmd = DockerContainerManager.dockerClient.startContainerCmd(containerId); _startContainerCmd.exec(); DockerContainerManager.LOGGER.info("Starting metrics collection"); String _name_3 = machine.getName(); DockerClient _setConfig_2 = this.setConfig(_name_3, this.properties); DockerContainerManager.dockerClient = _setConfig_2; StatsCmd _statsCmd = DockerContainerManager.dockerClient.statsCmd(containerId); StatsCallback _statsCallback = new StatsCallback(containerId); _xblockexpression = _statsCmd.<StatsCallback>exec(_statsCallback); } return _xblockexpression; } public Void stopContainer(final Machine machine, final Container container) { Void _xblockexpression = null; { boolean _equals = Objects.equal(DockerContainerManager.dockerClient, null); if (_equals) { String _name = machine.getName(); DockerClient _setConfig = this.setConfig(_name, this.properties); DockerContainerManager.dockerClient = _setConfig; } else { String _name_1 = machine.getName(); boolean _equalsIgnoreCase = DockerContainerManager.currentMachine.equalsIgnoreCase(_name_1); boolean _not = (!_equalsIgnoreCase); if (_not) { String _name_2 = machine.getName(); DockerClient _setConfig_1 = this.setConfig(_name_2, this.properties); DockerContainerManager.dockerClient = _setConfig_1; } } String _id = container.getId(); StopContainerCmd _stopContainerCmd = DockerContainerManager.dockerClient.stopContainerCmd(_id); _xblockexpression = _stopContainerCmd.exec(); } return _xblockexpression; } public Void stopContainer(final Machine machine, final String containerId) { Void _xblockexpression = null; { boolean _equals = Objects.equal(DockerContainerManager.dockerClient, null); if (_equals) { String _name = machine.getName(); DockerClient _setConfig = this.setConfig(_name, this.properties); DockerContainerManager.dockerClient = _setConfig; } else { String _name_1 = machine.getName(); boolean _equalsIgnoreCase = DockerContainerManager.currentMachine.equalsIgnoreCase(_name_1); boolean _not = (!_equalsIgnoreCase); if (_not) { String _name_2 = machine.getName(); DockerClient _setConfig_1 = this.setConfig(_name_2, this.properties); DockerContainerManager.dockerClient = _setConfig_1; } } StopContainerCmd _stopContainerCmd = DockerContainerManager.dockerClient.stopContainerCmd(containerId); _xblockexpression = _stopContainerCmd.exec(); } return _xblockexpression; } public Integer waitContainer(final Machine machine, final Container container) { Integer _xblockexpression = null; { boolean _equals = Objects.equal(DockerContainerManager.dockerClient, null); if (_equals) { String _name = machine.getName(); DockerClient _setConfig = this.setConfig(_name, this.properties); DockerContainerManager.dockerClient = _setConfig; } else { String _name_1 = machine.getName(); boolean _equalsIgnoreCase = DockerContainerManager.currentMachine.equalsIgnoreCase(_name_1); boolean _not = (!_equalsIgnoreCase); if (_not) { String _name_2 = machine.getName(); DockerClient _setConfig_1 = this.setConfig(_name_2, this.properties); DockerContainerManager.dockerClient = _setConfig_1; } } String _id = container.getId(); WaitContainerCmd _waitContainerCmd = DockerContainerManager.dockerClient.waitContainerCmd(_id); WaitContainerResultCallback _waitContainerResultCallback = new WaitContainerResultCallback(); WaitContainerResultCallback _exec = _waitContainerCmd.<WaitContainerResultCallback>exec(_waitContainerResultCallback); _xblockexpression = _exec.awaitStatusCode(); } return _xblockexpression; } public Void renameContainer(final Machine machine, final String containerId, final String newName) { Void _xblockexpression = null; { boolean _equals = Objects.equal(DockerContainerManager.dockerClient, null); if (_equals) { String _name = machine.getName(); DockerClient _setConfig = this.setConfig(_name, this.properties); DockerContainerManager.dockerClient = _setConfig; } else { String _name_1 = machine.getName(); boolean _equalsIgnoreCase = DockerContainerManager.currentMachine.equalsIgnoreCase(_name_1); boolean _not = (!_equalsIgnoreCase); if (_not) { String _name_2 = machine.getName(); DockerClient _setConfig_1 = this.setConfig(_name_2, this.properties); DockerContainerManager.dockerClient = _setConfig_1; } } RenameContainerCmd _renameContainerCmd = DockerContainerManager.dockerClient.renameContainerCmd(containerId); RenameContainerCmd _withName = _renameContainerCmd.withName(newName); _xblockexpression = _withName.exec(); } return _xblockexpression; } public void removeContainer(final Machine machine, final String containerId) { String _name = machine.getName(); this.removeContainer(_name, containerId); } public List<com.github.dockerjava.api.model.Container> listContainer(final String machineName) { boolean _equals = Objects.equal(DockerContainerManager.dockerClient, null); if (_equals) { DockerClient _setConfig = this.setConfig(machineName, this.properties); DockerContainerManager.dockerClient = _setConfig; } else { boolean _equalsIgnoreCase = DockerContainerManager.currentMachine.equalsIgnoreCase(machineName); boolean _not = (!_equalsIgnoreCase); if (_not) { DockerClient _setConfig_1 = this.setConfig(machineName, this.properties); DockerContainerManager.dockerClient = _setConfig_1; } } ListContainersCmd _listContainersCmd = DockerContainerManager.dockerClient.listContainersCmd(); ListContainersCmd _withShowAll = _listContainersCmd.withShowAll(Boolean.valueOf(true)); final List<com.github.dockerjava.api.model.Container> containers = _withShowAll.exec(); return containers; } public DockerClient pullImage(final Machine machine, final String image) { boolean _equals = Objects.equal(DockerContainerManager.dockerClient, null); if (_equals) { String _name = machine.getName(); DockerClient _setConfig = this.setConfig(_name, this.properties); DockerContainerManager.dockerClient = _setConfig; } else { String _name_1 = machine.getName(); boolean _equalsIgnoreCase = DockerContainerManager.currentMachine.equalsIgnoreCase(_name_1); boolean _not = (!_equalsIgnoreCase); if (_not) { String _name_2 = machine.getName(); DockerClient _setConfig_1 = this.setConfig(_name_2, this.properties); DockerContainerManager.dockerClient = _setConfig_1; } } String containerImage = image; boolean _isNotBlank = StringUtils.isNotBlank(containerImage); boolean _not_1 = (!_isNotBlank); if (_not_1) { containerImage = "busybox"; DockerContainerManager.LOGGER.info("Use the default Docker Image: {}", containerImage); } String output = null; DockerContainerManager.LOGGER.info(("Downloading image: ->" + containerImage)); try { PullImageCmd _pullImageCmd = DockerContainerManager.dockerClient.pullImageCmd(containerImage); PullImageCmd _withTag = _pullImageCmd.withTag("latest"); PullImageResultCallback _pullImageResultCallback = new PullImageResultCallback(); PullImageResultCallback _exec = _withTag.<PullImageResultCallback>exec(_pullImageResultCallback); _exec.awaitSuccess(); } catch (final Throwable _t) { if (_t instanceof Exception) { final Exception e = (Exception)_t; String _message = e.getMessage(); DockerContainerManager.LOGGER.error(_message); } else { throw Exceptions.sneakyThrow(_t); } } DockerContainerManager.LOGGER.info(output); DockerContainerManager.LOGGER.info("Download is finished"); return DockerContainerManager.dockerClient; } public boolean machineContainsImage(final String machine, final String image) { List<String> _get = this.images.get(machine); boolean _notEquals = (!Objects.equal(_get, null)); if (_notEquals) { List<String> _get_1 = this.images.get(machine); return _get_1.contains(image); } return false; } public void addImageToMachine(final String machine, final String image) { boolean _containsKey = this.images.containsKey(machine); boolean _not = (!_containsKey); if (_not) { ArrayList<String> tempList = new ArrayList<String>(); tempList.add(image); this.images.put(machine, tempList); } else { List<String> tempList_1 = this.images.get(machine); tempList_1.add(image); this.images.put(machine, tempList_1); } } public DockerClient setConfig(final String machine, final PreferenceValues properties) { DockerContainerManager.LOGGER.info(("Trying to connect inside machine ---> " + machine)); String port = null; Runtime _runtime = Runtime.getRuntime(); String ENDPOINT = DockerMachineManager.urlCmd(_runtime, machine); final String certPath = DockerUtil.getEnv(machine); DockerContainerManager.LOGGER.info(("DOCKER_CERT_PATH=" + certPath)); DockerClientConfig config = null; final DockerConfig lconfig = new DockerConfig(); Properties dockerProperties = lconfig.loadConfig(); port = ":2376"; DockerContainerManager.LOGGER.info(("ENDPOINT : " + ENDPOINT)); String _xifexpression = null; if ((Objects.equal(ENDPOINT, null) || (ENDPOINT.trim().length() == 0))) { _xifexpression = ("tcp://127.0.0.1" + port); } else { _xifexpression = ENDPOINT.trim(); } final String dockerHost = _xifexpression; String _string = dockerHost.toString(); String _plus = ((("Connection inside machine: " + machine) + " with uri: ") + _string); DockerContainerManager.LOGGER.info(_plus); String _property = System.getProperty("user.home"); String _plus_1 = (_property + File.separator); String dockerHome = (_plus_1 + ".docker"); try { String _version = properties.getVersion(); boolean _notEquals = (!Objects.equal(_version, null)); if (_notEquals) { DefaultDockerClientConfig.Builder _createDefaultConfigBuilder = DefaultDockerClientConfig.createDefaultConfigBuilder(); String _version_1 = properties.getVersion(); String _trim = _version_1.trim(); DefaultDockerClientConfig.Builder _withApiVersion = _createDefaultConfigBuilder.withApiVersion(_trim); DefaultDockerClientConfig.Builder _withDockerHost = _withApiVersion.withDockerHost(dockerHost); DefaultDockerClientConfig.Builder _withDockerTlsVerify = _withDockerHost.withDockerTlsVerify(Boolean.valueOf(true)); String _username = properties.getUsername(); String _trim_1 = _username.trim(); DefaultDockerClientConfig.Builder _withRegistryUsername = _withDockerTlsVerify.withRegistryUsername(_trim_1); String _password = properties.getPassword(); String _trim_2 = _password.trim(); DefaultDockerClientConfig.Builder _withRegistryPassword = _withRegistryUsername.withRegistryPassword(_trim_2); String _email = properties.getEmail(); String _trim_3 = _email.trim(); DefaultDockerClientConfig.Builder _withRegistryEmail = _withRegistryPassword.withRegistryEmail(_trim_3); String _url = properties.getUrl(); String _trim_4 = _url.trim(); DefaultDockerClientConfig.Builder _withRegistryUrl = _withRegistryEmail.withRegistryUrl(_trim_4); DefaultDockerClientConfig.Builder _withDockerCertPath = _withRegistryUrl.withDockerCertPath(certPath); DefaultDockerClientConfig.Builder _withDockerConfig = _withDockerCertPath.withDockerConfig(dockerHome); DefaultDockerClientConfig _build = _withDockerConfig.build(); config = _build; } } catch (final Throwable _t) { if (_t instanceof Exception) { final Exception exception = (Exception)_t; DockerContainerManager.LOGGER.error("Loading docker-java properties files ..."); DefaultDockerClientConfig.Builder _createDefaultConfigBuilder_1 = DefaultDockerClientConfig.createDefaultConfigBuilder(); Object _get = dockerProperties.get("api.version"); String _string_1 = _get.toString(); DefaultDockerClientConfig.Builder _withApiVersion_1 = _createDefaultConfigBuilder_1.withApiVersion(_string_1); DefaultDockerClientConfig.Builder _withDockerHost_1 = _withApiVersion_1.withDockerHost(dockerHost); DefaultDockerClientConfig.Builder _withDockerTlsVerify_1 = _withDockerHost_1.withDockerTlsVerify(Boolean.valueOf(true)); Object _get_1 = dockerProperties.get("docker.username"); String _string_2 = _get_1.toString(); DefaultDockerClientConfig.Builder _withRegistryUsername_1 = _withDockerTlsVerify_1.withRegistryUsername(_string_2); Object _get_2 = dockerProperties.get("docker.password"); String _string_3 = _get_2.toString(); DefaultDockerClientConfig.Builder _withRegistryPassword_1 = _withRegistryUsername_1.withRegistryPassword(_string_3); Object _get_3 = dockerProperties.get("docker.email"); String _string_4 = _get_3.toString(); DefaultDockerClientConfig.Builder _withRegistryEmail_1 = _withRegistryPassword_1.withRegistryEmail(_string_4); Object _get_4 = dockerProperties.get("docker.url"); String _string_5 = _get_4.toString(); DefaultDockerClientConfig.Builder _withRegistryUrl_1 = _withRegistryEmail_1.withRegistryUrl(_string_5); DefaultDockerClientConfig.Builder _withDockerCertPath_1 = _withRegistryUrl_1.withDockerCertPath(certPath); DefaultDockerClientConfig.Builder _withDockerConfig_1 = _withDockerCertPath_1.withDockerConfig(dockerHome); DefaultDockerClientConfig _build_1 = _withDockerConfig_1.build(); config = _build_1; } else { throw Exceptions.sneakyThrow(_t); } } DockerClientBuilder _instance = DockerClientBuilder.getInstance(config); final DockerClient dockerClient = _instance.build(); DockerContainerManager.currentMachine = machine; return dockerClient; } public void connect() { Session session = null; final File test = new File("test"); final String host = "192.168.99.100"; final String user = "docker"; final int port = 22; final String privatekey = "/Users/spirals/.docker/machine/machines/ghost/id_rsa"; try { final JSch jsc = new JSch(); jsc.setKnownHosts("/dev/null"); jsc.addIdentity(privatekey); jsc.setKnownHosts("/dev/null"); Properties config = new Properties(); config.put("StrictHostKeyChecking", "no"); Session _session = jsc.getSession(user, host, port); session = _session; session.setConfig(config); session.connect(); InputOutput.<String>println("Connection successfully ..."); } catch (final Throwable _t) { if (_t instanceof JSchException) { final JSchException e = (JSchException)_t; String _string = e.toString(); DockerContainerManager.LOGGER.info(_string); e.printStackTrace(); } else { throw Exceptions.sneakyThrow(_t); } } } public void connect(final String host, final String privateKey, final String command) { try { Session session = null; final String user = "docker"; final File tempDir = this.createTempDir("knowHosts"); String _plus = (tempDir + "/hosts"); final File test = new File(_plus); boolean _exists = test.exists(); boolean _not = (!_exists); if (_not) { test.createNewFile(); } try { final JSch jsc = new JSch(); jsc.setKnownHosts("/dev/null"); Properties config = new Properties(); config.put("StrictHostKeyChecking", "no"); jsc.setKnownHosts("/dev/null"); jsc.addIdentity(privateKey); DockerContainerManager.LOGGER.info("Identity added .."); final String exCommand = ((("sudo sh -c " + "\"") + command) + "\""); DockerContainerManager.LOGGER.info(exCommand); Session _session = jsc.getSession(user, host, 22); session = _session; DockerContainerManager.LOGGER.info("Session created .."); session.setConfig(config); DockerContainerManager.LOGGER.info("Session config .."); session.connect(); DockerContainerManager.LOGGER.info("Session connected .."); final Channel channel = session.openChannel("exec"); ((ChannelExec) channel).setCommand(exCommand); ((ChannelExec) channel).setErrStream(System.err); channel.connect(); } catch (final Throwable _t) { if (_t instanceof JSchException) { final JSchException e = (JSchException)_t; String _string = e.toString(); DockerContainerManager.LOGGER.info(_string); } else { throw Exceptions.sneakyThrow(_t); } } session.disconnect(); } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } } public void addHost(final String key, final String ip, final String knowHosts) { try { final FileWriter tmpwriter = new FileWriter(knowHosts, true); final String newLine = (((ip + " ssh-rsa ") + key) + "\n"); boolean _hostAlreadyExist = this.hostAlreadyExist(newLine, knowHosts); boolean _not = (!_hostAlreadyExist); if (_not) { tmpwriter.append(newLine); DockerContainerManager.LOGGER.info(((ip + " ssh-rsa ") + key)); tmpwriter.flush(); tmpwriter.close(); } } catch (final Throwable _t) { if (_t instanceof IOException) { final IOException e = (IOException)_t; e.printStackTrace(); } else { throw Exceptions.sneakyThrow(_t); } } } public boolean hostAlreadyExist(final String newLine, final String knowHosts) { try { final File hostFile = new File(knowHosts); FileReader _fileReader = new FileReader(hostFile); BufferedReader br = new BufferedReader(_fileReader); String line = null; while ((!Objects.equal((line = br.readLine()), null))) { String _trim = line.trim(); String _trim_1 = newLine.trim(); boolean _equalsIgnoreCase = _trim.equalsIgnoreCase(_trim_1); if (_equalsIgnoreCase) { return true; } } br.close(); return false; } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } } public File createTempDir(final String baseName) { String _property = System.getProperty("java.io.tmpdir"); final File baseDir = new File(_property); File tempDir = new File(baseDir, baseName); boolean _exists = tempDir.exists(); boolean _not = (!_exists); if (_not) { boolean _mkdir = tempDir.mkdir(); if (_mkdir) { return tempDir; } } else { return tempDir; } return null; } }