class VagrantPlugins::DockerProvider::Action::Create

Public Class Methods

new(app, env) click to toggle source
# File lib/docker-provider/action/create.rb, line 5
def initialize(app, env)
  @app = app
  @@mutex ||= Mutex.new
end

Public Instance Methods

call(env) click to toggle source
# File lib/docker-provider/action/create.rb, line 10
def call(env)
  @env             = env
  @machine         = env[:machine]
  @provider_config = @machine.provider_config
  @machine_config  = @machine.config
  @driver          = @machine.provider.driver

  guard_cmd_configured!

  cid = ''
  @@mutex.synchronize do
    cid = @driver.create(create_params)
  end

  @machine.id = cid
  @app.call(env)
end
create_params() click to toggle source
# File lib/docker-provider/action/create.rb, line 28
def create_params
  container_name = "#{@env[:root_path].basename.to_s}_#{@machine.name}"
  container_name.gsub!(/[^-a-z0-9_]/i, "")
  container_name << "_#{Time.now.to_i}"

  {
    image:      @provider_config.image,
    cmd:        @provider_config.cmd,
    ports:      forwarded_ports,
    name:       container_name,
    hostname:   @machine_config.vm.hostname,
    volumes:    @provider_config.volumes,
    privileged: @provider_config.privileged
  }
end
forwarded_ports() click to toggle source
# File lib/docker-provider/action/create.rb, line 44
def forwarded_ports
  @env[:forwarded_ports].map do |fp|
    # TODO: Support for the protocol argument
    "#{fp[:host]}:#{fp[:guest]}"
  end.compact
end
guard_cmd_configured!() click to toggle source
# File lib/docker-provider/action/create.rb, line 51
def guard_cmd_configured!
  if ! @provider_config.image
    raise Errors::ImageNotConfiguredError, name: @machine.name
  end
end