class Capistrano::Container::Instance

Attributes

config[R]
dsl[W]
name[R]

Public Class Methods

new(name, config) click to toggle source
# File lib/capistrano/container/instance.rb, line 10
def initialize(name, config)
  @dsl    = nil
  @name   = name
  @config = {shared_on_host: '/tmp'}.merge(config)
end

Public Instance Methods

container_id() click to toggle source
# File lib/capistrano/container/instance.rb, line 24
def container_id
  return @name unless @config.key? :container_id

  @config[:container_id]
end
container_role() click to toggle source
# File lib/capistrano/container/instance.rb, line 30
def container_role
  "container_#{@name}".to_sym
end
cp(src, target) click to toggle source
# File lib/capistrano/container/instance.rb, line 70
def cp(src, target)
  command = "docker cp #{src} #{target}"

  @dsl.execute_local_or_remote(command)
end
download!(src, target) click to toggle source
# File lib/capistrano/container/instance.rb, line 49
def download!(src, target)
  if @dsl.local_stage?
    self.cp("#{container_id}:#{src}", target)
    return
  end

  tmp = "#{@config[:shared_on_host]}/capistrano-docker.#{SecureRandom.uuid}.tmp"

  self.cp("#{container_id}:#{src}", tmp)

  @dsl.download!(tmp, target)

  @dsl.execute("rm -rf #{tmp}")
end
execute(command) click to toggle source
# File lib/capistrano/container/instance.rb, line 64
def execute(command)
  command = "docker exec -i #{container_id} sh -c '#{command.gsub("'", "\'")}'"

  @dsl.execute_local_or_remote(command)
end
has_role?(role) click to toggle source
# File lib/capistrano/container/instance.rb, line 16
def has_role?(role)
  return false unless @config.key? :roles

  role = role.to_s if role.is_a? Symbol

  @config[:roles].include? role
end
invoke(task_name) click to toggle source
# File lib/capistrano/container/instance.rb, line 76
def invoke(task_name)
  @dsl.invoke "container:#{@name}:#{task_name}"
end
upload!(src, target) click to toggle source
# File lib/capistrano/container/instance.rb, line 34
def upload!(src, target)
  if @dsl.local_stage?
    self.cp(src, "#{container_id}:#{target}")
    return
  end

  tmp = "#{@config[:shared_on_host]}/capistrano-docker.#{SecureRandom.uuid}.tmp"

  @dsl.upload!(src, tmp)

  self.cp(tmp, "#{container_id}:#{target}")

  @dsl.execute("rm -rf #{tmp}")
end