Class: VagrantPlugins::DockerProvider::Driver
- Inherits:
-
Object
- Object
- VagrantPlugins::DockerProvider::Driver
- Includes:
- Vagrant::Util::Retryable
- Defined in:
- lib/docker-provider/driver.rb
Instance Method Summary collapse
- #all_containers ⇒ Object
- #create(params) ⇒ Object
- #created?(cid) ⇒ Boolean
- #docker_bridge_ip ⇒ Object
-
#initialize ⇒ Driver
constructor
A new instance of Driver.
- #inspect_container(cid) ⇒ Object
- #privileged?(cid) ⇒ Boolean
- #rm(cid) ⇒ Object
- #running?(cid) ⇒ Boolean
- #start(cid) ⇒ Object
- #state(cid) ⇒ Object
- #stop(cid) ⇒ Object
Constructor Details
#initialize ⇒ Driver
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
#all_containers ⇒ Object
89 90 91 |
# File 'lib/docker-provider/driver.rb', line 89 def all_containers execute('docker', 'ps', '-a', '-q', '-notrunc').to_s.split end |
#create(params) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# 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(-privileged) if params[:privileged] 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
47 48 49 50 |
# File 'lib/docker-provider/driver.rb', line 47 def created?(cid) result = execute('docker', 'ps', '-a', '-q', '-notrunc').to_s result =~ /^#{Regexp.escape cid}$/ end |
#docker_bridge_ip ⇒ Object
93 94 95 96 97 98 99 100 101 |
# File 'lib/docker-provider/driver.rb', line 93 def docker_bridge_ip output = execute('/sbin/ip', '-4', 'addr', 'show', 'scope', 'global', 'docker0') if output =~ /^\s+inet ([0-9.]+)\/[0-9]+\s+/ return $1.to_s else # TODO: Raise an user friendly message raise 'Unable to fetch docker bridge IP!' end end |
#inspect_container(cid) ⇒ Object
83 84 85 86 87 |
# File 'lib/docker-provider/driver.rb', line 83 def inspect_container(cid) # DISCUSS: Is there a chance that this json will change after the container # has been brought up? @data ||= JSON.parse(execute('docker', 'inspect', cid)).first end |
#privileged?(cid) ⇒ Boolean
57 58 59 |
# File 'lib/docker-provider/driver.rb', line 57 def privileged?(cid) inspect_container(cid)['HostConfig']['Privileged'] end |
#rm(cid) ⇒ Object
77 78 79 80 81 |
# File 'lib/docker-provider/driver.rb', line 77 def rm(cid) if created?(cid) execute('docker', 'rm', '-v', cid) end end |
#running?(cid) ⇒ Boolean
52 53 54 55 |
# File 'lib/docker-provider/driver.rb', line 52 def running?(cid) result = execute('docker', 'ps', '-q', '-notrunc') result =~ /^#{Regexp.escape cid}$/m end |
#start(cid) ⇒ Object
61 62 63 64 65 66 67 68 69 |
# File 'lib/docker-provider/driver.rb', line 61 def start(cid) unless running?(cid) execute('docker', 'start', cid) # This resets the cached information we have around, allowing `vagrant reload`s # to work properly # TODO: Add spec to verify this behavior @data = nil end end |
#state(cid) ⇒ Object
36 37 38 39 40 41 42 43 44 45 |
# File 'lib/docker-provider/driver.rb', line 36 def state(cid) case when running?(cid) :running when created?(cid) :stopped else :not_created end end |
#stop(cid) ⇒ Object
71 72 73 74 75 |
# File 'lib/docker-provider/driver.rb', line 71 def stop(cid) if running?(cid) execute('docker', 'stop', '-t', '1', cid) end end |