Class: VagrantPlugins::DockerProvider::Driver

Inherits:
Object
  • Object
show all
Includes:
Vagrant::Util::Retryable
Defined in:
lib/docker-provider/driver.rb

Instance Method Summary collapse

Constructor Details

#initializeDriver

Returns a new instance of Driver.



13
14
15
# File 'lib/docker-provider/driver.rb', line 13

def initialize
  @logger = Log4r::Logger.new("vagrant::docker::driver")
end

Instance Method Details

#create(params) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/docker-provider/driver.rb', line 17

def create(params)
  image   = params.fetch(:image)
  ports   = Array(params[:ports])
  volumes = Array(params[:volumes])
  name    = params.fetch(:name)
  cmd     = Array(params.fetch(:cmd))

  run_cmd = %W(docker run -name #{name} -d)
  run_cmd += ports.map { |p| ['-p', p.to_s] }
  run_cmd += volumes.map { |v| ['-v', v.to_s] }
  run_cmd += %W(-h #{params[:hostname]}) if params[:hostname]
  run_cmd += [image, cmd]

  retryable(tries: 10, sleep: 1) do
    execute(*run_cmd.flatten).chomp
  end
end

#created?(cid) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
49
# File 'lib/docker-provider/driver.rb', line 46

def created?(cid)
  result = execute('docker', 'ps', '-a', '-q').to_s
  result =~ /^#{Regexp.escape cid}$/
end

#inspect(cid) ⇒ Object



74
75
76
77
# File 'lib/docker-provider/driver.rb', line 74

def inspect(cid)
  # DISCUSS: Is there a chance that this will change?
  @data ||= JSON.parse(execute('docker', 'inspect', cid)).first
end

#rm(cid) ⇒ Object



68
69
70
71
72
# File 'lib/docker-provider/driver.rb', line 68

def rm(cid)
  if created?(cid)
    execute('docker', 'rm', cid)
  end
end

#running?(cid) ⇒ Boolean

Returns:

  • (Boolean)


51
52
53
54
# File 'lib/docker-provider/driver.rb', line 51

def running?(cid)
  result = execute('docker', 'ps', '-q')
  result =~ /^#{Regexp.escape cid}$/m
end

#start(cid) ⇒ Object



56
57
58
59
60
# File 'lib/docker-provider/driver.rb', line 56

def start(cid)
  unless running?(cid)
    execute('docker', 'start', cid)
  end
end

#state(cid) ⇒ Object



35
36
37
38
39
40
41
42
43
44
# File 'lib/docker-provider/driver.rb', line 35

def state(cid)
  case
  when running?(cid)
    :running
  when created?(cid)
    :stopped
  else
    :not_created
  end
end

#stop(cid) ⇒ Object



62
63
64
65
66
# File 'lib/docker-provider/driver.rb', line 62

def stop(cid)
  if running?(cid)
    execute('docker', 'stop', cid)
  end
end