class Train::Transports::Docker::Connection

Public Class Methods

new(conf) click to toggle source
Calls superclass method
# File lib/train/docker.rb, line 70
def initialize(conf)
  super(conf)
  @id = options[:host]
  @container = ::Docker::Container.get(@id) ||
              fail("Can't find Docker container #{@id}")
  @cmd_wrapper = nil
  @cmd_wrapper = CommandWrapper.load(self, @options)
  self
end

Public Instance Methods

uri() click to toggle source
# File lib/train/docker.rb, line 80
def uri
  if @container.nil?
    "docker://#{@id}"
  else
    "docker://#{@container.id}"
  end
end

Private Instance Methods

file_via_connection(path) click to toggle source
# File lib/train/docker.rb, line 90
def file_via_connection(path)
  if os.aix?
    Train::File::Remote::Aix.new(self, path)
  elsif os.solaris?
    Train::File::Remote::Unix.new(self, path)
  elsif os.windows?
    Train::File::Remote::Windows.new(self, path)
  else
    Train::File::Remote::Linux.new(self, path)
  end
end
platform_specific_cmd(cmd) click to toggle source
# File lib/train/docker.rb, line 102
def platform_specific_cmd(cmd)
  return cmd if @container.info.nil?
  if @container.info['Platform'] == 'windows'
    return ['cmd.exe', '/c', cmd]
  else
    return ['/bin/sh', '-c', cmd]
  end
end
run_command_via_connection(cmd, &_data_handler) click to toggle source
# File lib/train/docker.rb, line 111
def run_command_via_connection(cmd, &_data_handler)
  cmd = @cmd_wrapper.run(cmd) unless @cmd_wrapper.nil?
  stdout, stderr, exit_status = @container.exec(platform_specific_cmd(cmd))
  CommandResult.new(stdout.join, stderr.join, exit_status)
rescue ::Docker::Error::DockerError => _
  raise
rescue => _
  # @TODO: differentiate any other error
  raise
end