All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.j5ik2o.dockerController.DockerMachineEnv.scala Maven / Gradle / Ivy

package com.github.j5ik2o.dockerController

import org.slf4j.LoggerFactory

import scala.sys.process._
import scala.util.Try
import scala.util.matching.Regex

case class DockerMachineEnv(tlsVerify: Boolean, dockerHost: String, dockerCertPath: String) {
  require(dockerHost != null)
  require(dockerCertPath != null)
}

object DockerMachineEnv {
  LoggerFactory.getLogger(getClass)

  private val tlsVerifyRegex: Regex = """export DOCKER_TLS_VERIFY="(.*)"""".r

  private val hostRegex: Regex = """export DOCKER_HOST="(.*)"""".r

  private val certPathRegex: Regex = """export DOCKER_CERT_PATH="(.*)"""".r

  private def getDockerMachineCmd = Try {
    Seq("which", "docker-machine").!!.stripSuffix("\n")
  }

  def isSupportDockerMachine: Boolean = getDockerMachineCmd.isSuccess

  private def getDockerMachineEnv(name: String): Try[Vector[String]] = {
    for {
      cmd <- getDockerMachineCmd
      result <- Try {
        Seq(cmd, "env", name).!!.split("\n").toVector
      }
    } yield result
  }

  private def getDockerTlsVerify(env: Vector[String]): Boolean = {
    env
      .map {
        case tlsVerifyRegex(bs) if bs == "1" => Some(true)
        case tlsVerifyRegex(bs) if bs == "0" => Some(false)
        case _                               => None
      }.find(_.nonEmpty).flatten.get
  }

  private def getDockerHost(env: Vector[String]): String = {
    env
      .map {
        case hostRegex(v) => Some(v)
        case _            => None
      }.find(_.nonEmpty).flatten.get
  }

  private def getDockerCertPath(env: Vector[String]): String = {
    env
      .map {
        case certPathRegex(v) => Some(v)
        case _                => None
      }.find(_.nonEmpty).flatten.get
  }

  def load(name: String): Try[DockerMachineEnv] = {
    val envTry = getDockerMachineEnv(name)
    val result = envTry.map { env =>
      val tlsVerify = getDockerTlsVerify(env)
      val host      = getDockerHost(env)
      val certPath  = getDockerCertPath(env)
      DockerMachineEnv(tlsVerify, host, certPath)
    }
    result
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy