/** * 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.dockermachine.util; import com.google.common.base.Objects; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.io.IOUtils; import org.apache.commons.io.LineIterator; import org.codehaus.jackson.JsonFactory; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.JsonParser; import org.codehaus.jackson.map.ObjectMapper; 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.Functions.Function2; import org.eclipse.xtext.xbase.lib.InputOutput; import org.eclipse.xtext.xbase.lib.IterableExtensions; import org.eclipse.xtext.xbase.lib.MapExtensions; import org.occiware.clouddesigner.occi.docker.connector.dockermachine.manager.DockerMachineManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @SuppressWarnings("all") public class DockerUtil { public final static String HOST_RUNNING = "Running"; protected static String OS = System.getProperty("os.name").toLowerCase(); private static Logger LOGGER = LoggerFactory.getLogger(DockerUtil.class); private static String DOCKER_MACHINE = "/usr/local/bin/docker-machine"; /** * Run the good docker-machine according to the OS. */ public static String getDockerMachineCmd() { String command = "docker-machine"; String _oS = DockerUtil.getOS(); boolean _equalsIgnoreCase = _oS.equalsIgnoreCase("osx"); if (_equalsIgnoreCase) { command = DockerUtil.DOCKER_MACHINE; String _oS_1 = DockerUtil.getOS(); DockerUtil.LOGGER.info("Machine OS={}", _oS_1); } return command; } /** * Parse String to Json data. */ public static JsonNode jsonify(final String jsonString) { try { if (((!Objects.equal(jsonString, null)) || Objects.equal(jsonString, ""))) { final ObjectMapper mapper = new ObjectMapper(); final JsonFactory factory = mapper.getJsonFactory(); final JsonParser parser = factory.createJsonParser(jsonString); final JsonNode node = mapper.readTree(parser); return node; } return null; } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } } /** * Parse `docker-machine ls` host from the running environment. */ public static Map<String, String> getHosts() { Runtime _runtime = Runtime.getRuntime(); final String data = DockerMachineManager.listHostCmd(_runtime); Map<String, String> hosts = new HashMap<String, String>(); boolean _notEquals = (!Objects.equal(data, null)); if (_notEquals) { String[] st = data.split("\\r?\\n"); int _length = st.length; final String[] list = Arrays.<String>copyOfRange(st, 1, _length); for (final String line : list) { { String l = line; String _replaceAll = l.replaceAll("\\*", ""); l = _replaceAll; final String[] lsCmd = l.split("\\s+"); if (((lsCmd.length >= 3) && (lsCmd.length < 5))) { String _get = lsCmd[0]; String _get_1 = lsCmd[2]; hosts.put(_get, _get_1); } else { int _length_1 = lsCmd.length; boolean _greaterEqualsThan = (_length_1 >= 5); if (_greaterEqualsThan) { boolean _contains = ((List<String>)Conversions.doWrapArray(lsCmd)).contains("(master)"); if (_contains) { String _get_2 = lsCmd[0]; String _get_3 = lsCmd[3]; hosts.put(_get_2, _get_3); } else { String _get_4 = lsCmd[0]; String _get_5 = lsCmd[3]; hosts.put(_get_4, _get_5); } } } } } } return hosts; } /** * Get all existing hosts. */ public static String getActiveHost() { final Map<String, String> hosts = DockerUtil.getHosts(); Set<Map.Entry<String, String>> _entrySet = hosts.entrySet(); for (final Map.Entry<String, String> entry : _entrySet) { String _value = entry.getValue(); boolean _equalsIgnoreCase = _value.equalsIgnoreCase(DockerUtil.HOST_RUNNING); if (_equalsIgnoreCase) { return entry.getKey(); } } Set<String> _keySet = hosts.keySet(); final String firstHost = ((String[])Conversions.unwrapArray(_keySet, String.class))[0]; InputOutput.<String>println(("first host" + firstHost)); Runtime _runtime = Runtime.getRuntime(); boolean _startCmd = DockerMachineManager.startCmd(_runtime, firstHost); if (_startCmd) { return firstHost; } return null; } /** * Get all active hosts. */ public static Map<String, String> getActiveHosts() { Map<String, String> hosts = new HashMap<String, String>(); Map<String, String> _hosts = DockerUtil.getHosts(); Set<Map.Entry<String, String>> _entrySet = _hosts.entrySet(); for (final Map.Entry<String, String> entry : _entrySet) { String _value = entry.getValue(); boolean _equalsIgnoreCase = _value.equalsIgnoreCase(DockerUtil.HOST_RUNNING); if (_equalsIgnoreCase) { String _key = entry.getKey(); String _value_1 = entry.getValue(); hosts.put(_key, _value_1); } } return hosts; } /** * Get all active ones from hosts, without calling Docker again */ public static Map<String, String> getActiveHosts(final Map<String, String> hosts) { final Function2<String, String, Boolean> _function = (String host, String status) -> { return Boolean.valueOf(DockerUtil.HOST_RUNNING.equalsIgnoreCase(status)); }; return MapExtensions.<String, String>filter(hosts, _function); } /** * Parse `docker-machine ls` command as table. */ public static String getEnv(final String machineName) { Runtime _runtime = Runtime.getRuntime(); final String data = DockerMachineManager.getEnvCmd(_runtime, machineName); List<String[]> hosts = new ArrayList<String[]>(); String[] result = null; final String charset = "DOCKER_CERT_PATH"; boolean _notEquals = (!Objects.equal(data, null)); if (_notEquals) { String[] st = data.split("\\r?\\n"); for (final String line : st) { if ((line.startsWith("export") && line.contains(charset))) { final String[] lsCmd = line.split("\\s+"); hosts.add(lsCmd); String currentLine = lsCmd[1]; String[] _split = currentLine.split("="); result = _split; String _get = result[1]; return _get.replaceAll("\"", ""); } } } String _property = System.getProperty("user.home"); final String defaultMachineCertPath = IterableExtensions.join(Collections.<String>unmodifiableList(CollectionLiterals.<String>newArrayList(_property, ".docker", "machine", "machines", machineName)), File.separator); File _file = new File(defaultMachineCertPath); boolean _canRead = _file.canRead(); if (_canRead) { return defaultMachineCertPath; } return null; } /** * Delete a model. */ public boolean deleteAllOldModels() { boolean _xblockexpression = false; { final File myFile = new File("Models"); boolean _xifexpression = false; boolean _isDirectory = myFile.isDirectory(); if (_isDirectory) { _xifexpression = myFile.delete(); } _xblockexpression = _xifexpression; } return _xblockexpression; } /** * Transform InputStream into String. */ public static String asString(final InputStream response) { final StringWriter logwriter = new StringWriter(); try { final LineIterator itr = IOUtils.lineIterator(response, "UTF-8"); while (itr.hasNext()) { { String line = itr.next(); boolean _hasNext = itr.hasNext(); if (_hasNext) { logwriter.write((line + "\n")); } else { logwriter.write((line + "")); } } } response.close(); return logwriter.toString(); } catch (final Throwable _t) { if (_t instanceof IOException) { final IOException e = (IOException)_t; throw new RuntimeException(e); } else { throw Exceptions.sneakyThrow(_t); } } finally { IOUtils.closeQuietly(response); } } /** * Parse String in order to detect if it is Integer. */ public static boolean isInteger(final String value) { try { Integer.parseInt(value); } catch (final Throwable _t) { if (_t instanceof NumberFormatException) { final NumberFormatException e = (NumberFormatException)_t; return false; } else { throw Exceptions.sneakyThrow(_t); } } return true; } /** * Get the OS. */ public static boolean isWindows() { int _indexOf = DockerUtil.OS.indexOf("win"); return (_indexOf >= 0); } public static boolean isMac() { int _indexOf = DockerUtil.OS.indexOf("mac"); return (_indexOf >= 0); } public static boolean isUnix() { return (((DockerUtil.OS.indexOf("nix") >= 0) || (DockerUtil.OS.indexOf("nux") >= 0)) || (DockerUtil.OS.indexOf("aix") > 0)); } public static boolean isSolaris() { int _indexOf = DockerUtil.OS.indexOf("sunos"); return (_indexOf >= 0); } public static String getOS() { boolean _isWindows = DockerUtil.isWindows(); if (_isWindows) { return "win"; } else { boolean _isMac = DockerUtil.isMac(); if (_isMac) { return "osx"; } else { boolean _isUnix = DockerUtil.isUnix(); if (_isUnix) { return "uni"; } else { boolean _isSolaris = DockerUtil.isSolaris(); if (_isSolaris) { return "sol"; } else { return "err"; } } } } } }