module GV::Common::DockerHelper

Constants

SPAWN_TIMEOUT

Public Instance Methods

batch(pattern, method, wait = false) click to toggle source
# File lib/gv/common/docker_helper.rb, line 43
def batch pattern, method, wait = false
  sh "docker ps -a | grep #{pattern} | awk '{ print $1 }' | xargs docker #{method}", {err: "/dev/null"}, wait
end
cleanup() click to toggle source
# File lib/gv/common/docker_helper.rb, line 39
def cleanup
  batch "Exit", "rm", false
end
container_id(name) click to toggle source
# File lib/gv/common/docker_helper.rb, line 27
def container_id name 
  pipe "docker ps | grep #{name} | awk '{ print $1 }'"
end
container_port(name, ip, port) click to toggle source
# File lib/gv/common/docker_helper.rb, line 31
def container_port name, ip, port
  pipe "docker port #{container_id(name)} #{port} | sed 's/#{ip}://'"
end
info(container_id) click to toggle source
# File lib/gv/common/docker_helper.rb, line 15
def info container_id
  JSON.load(pipe("docker inspect #{container_id}")).first rescue nil
end
ps(name) click to toggle source
# File lib/gv/common/docker_helper.rb, line 19
def ps name
  pipe("docker ps | grep #{name}")
end
ps?(name) click to toggle source
# File lib/gv/common/docker_helper.rb, line 23
def ps? name
  pipe("docker ps | grep #{name}") =~ /#{name}/
end
pull_image_if_does_not_exists(name) click to toggle source
# File lib/gv/common/docker_helper.rb, line 35
def pull_image_if_does_not_exists name
  pipe("docker pull #{name}", &Blocks.stream) unless pipe("docker images") =~ /#{name}/
end
restart_docker!(container_id = nil, sec = 2) click to toggle source
# File lib/gv/common/docker_helper.rb, line 60
def restart_docker! container_id = nil, sec = 2
  pid, status = Process.wait2(spawn("service docker restart"))
  unless status.success?
    fatal "docker service cannot restarted, terminating..." 
    raise container_id if container_id
  else
    sleep sec  
  end
end
sh(cmd, options = {}) click to toggle source
# File lib/gv/common/docker_helper.rb, line 47
def sh cmd, options = {}, wait = true
  begin
    ::Timeout::timeout(SPAWN_TIMEOUT) {      
      debug "SH #{cmd}"
      pid = spawn cmd, options
      Process.public_send(wait ? :wait : :detach, pid)
    } 
  rescue ::Timeout::Error,::Timeout::TimeoutError,::Object::TimeoutError
    restart_docker!
    sh cmd, options, wait
  end
end