module AppRb::Util::Docker

Public Class Methods

add_cron(user, host, image, env, app, crons) click to toggle source
# File lib/app-rb/util/docker.rb, line 77
def self.add_cron(user, host, image, env, app, crons)
  echos = crons.map { |cron|
    %(echo "#{cron["at"]} __APP=#{app}; start=\\\\\\$(date); (docker run --rm #{env.map { |k, v| "-e #{k}='#{v}' " }.join}#{image} #{cron["cmd"]}; echo start \\\\\\$start, finish \\\\\\$(date)) >> /home/#{user}/crontab__#{app}__#{cron["key"]}.log 2>&1")
  }
  AppRb::Util.do_it %(ssh #{user}@#{host} bash <<EOF
    (crontab -l | grep -v -F '__APP=#{app};'; #{echos.join("; ")}) | crontab -
    \nEOF)
end
create_one_time_script(user, host, image, env, app) click to toggle source
# File lib/app-rb/util/docker.rb, line 63
def self.create_one_time_script(user, host, image, env, app)
  AppRb::Util.do_it "ssh #{user}@#{host} bash <<EOF
    echo '#/bin/bash' > ~/run_#{app}.sh
    echo 'docker run -it --rm #{env.map { |k, v| "-e #{k}='#{v}' " }.join} #{image} \"\\$@\"' >> ~/run_#{app}.sh
    chmod +x ~/run_#{app}.sh
    \nEOF"
end
ids(user, host, labels = {}) click to toggle source
# File lib/app-rb/util/docker.rb, line 33
def self.ids(user, host, labels = {})
  filters = labels.map { |k, v| "-f label=#{k}=#{v} " }.join("")
  AppRb::Util.just_cmd("ssh #{user}@#{host} docker ps -q #{filters}").split("\n")
end
pull(user, host, image) click to toggle source
# File lib/app-rb/util/docker.rb, line 4
def self.pull(user, host, image)
  Open3.popen2e("ssh #{user}@#{host} docker pull #{image}") { |i,o,w|
    while line = o.gets do 
      puts "[#{host}] " + line
    end
    raise "FATAL" unless w.value.success?
  }
end
remove_images(user, host, image_name, keep_tags = []) click to toggle source
# File lib/app-rb/util/docker.rb, line 47
def self.remove_images(user, host, image_name, keep_tags = [])
  all_ids = AppRb::Util.just_cmd("ssh #{user}@#{host} docker images #{image_name} -q").split("\n")
  keep_ids = keep_tags.map { |tag|
    AppRb::Util.just_cmd("ssh #{user}@#{host} docker images #{image_name}:#{tag} -q")
  }
  if (all_ids - keep_ids).length > 0
    AppRb::Util.do_it("ssh #{user}@#{host} 'docker rmi #{(all_ids - keep_ids).join(" ")}'; echo ok")
  end
end
remove_one_time_script(user, host, app) click to toggle source
# File lib/app-rb/util/docker.rb, line 71
def self.remove_one_time_script(user, host, app)
  AppRb::Util.do_it "ssh #{user}@#{host} bash <<EOF
    rm -f ~/run_#{app}.sh
    \nEOF"
end
run(user, host, image, env, cmd) click to toggle source
# File lib/app-rb/util/docker.rb, line 57
def self.run(user, host, image, env, cmd)
  AppRb::Util.do_it "ssh -t #{user}@#{host} docker run --rm -it " +
    env.map { |k, v| "-e #{k}='#{v}' " }.join +
    "#{image} #{cmd}"
end
run_batch(user, host, name, image, cmd, labels = {}, env = {}, opts = []) click to toggle source
# File lib/app-rb/util/docker.rb, line 13
def self.run_batch(user, host, name, image, cmd, labels = {}, env = {}, opts = [])
  AppRb::Util.do_it "ssh #{user}@#{host} docker run --rm " +
    labels.map { |k, v| "--label #{k}=#{v} " }.join +
    "--name #{name} " +
    opts.join(" ") + " " + 
    env.map { |k, v| "-e #{k}='#{v}' " }.join +
    "#{image} #{cmd}"
end
run_daemon(user, host, name, image, cmd, labels = {}, env = {}, opts = [], ports = {}) click to toggle source
# File lib/app-rb/util/docker.rb, line 22
def self.run_daemon(user, host, name, image, cmd, labels = {}, env = {}, opts = [], ports = {})
  AppRb::Util.do_it "ssh #{user}@#{host} docker run -d " +
    "--restart unless-stopped " +
    labels.map { |k, v| "--label #{k}=#{v} " }.join +
    "--name #{name} " +
    opts.join(" ") + " " + 
    env.map { |k, v| "-e #{k}='#{v}' " }.join +
    ports.map { |k, v| "-p #{k}:#{v} " }.join +
    "#{image} #{cmd}"
end
stop(user, host, labels = {}, except = nil) click to toggle source
# File lib/app-rb/util/docker.rb, line 38
def self.stop(user, host, labels = {}, except = nil)
  keep_ids = except ? ids(user, host, labels.merge(except)) : []
  all_ids = ids(user, host, labels)
  if (all_ids - keep_ids).length > 0
    AppRb::Util.do_it("ssh #{user}@#{host} docker stop #{(all_ids - keep_ids).join(" ")}")
    AppRb::Util.do_it("ssh #{user}@#{host} docker rm #{(all_ids - keep_ids).join(" ")}")
  end
end