class Armada::Container
Attributes
container[R]
id[R]
name[R]
Public Class Methods
create_container_config(image_id, container_name, host, options = {})
click to toggle source
# File lib/armada/docker/container.rb, line 71 def self.create_container_config(image_id, container_name, host, options = {}) container_config = options[:container_config] || {} options[:env_vars][:HOST] = host container_config['Image'] = image_id || options[:image] container_config['Hostname'] = options[:hostname] || host if options[:port_bindings] container_config['ExposedPorts'] ||= {} options[:port_bindings].keys.each do |port| container_config['ExposedPorts'][port] = {} end end if container_name container_config['name'] = container_name options[:env_vars][:SERVICE_NAME] = container_name #should we do soemthing if container name isnt set? end if options[:env_vars] container_config['Env'] = options[:env_vars].map { |k,v| "#{k}=#{v}" } end if options[:binds] container_config['Volumes'] = options[:binds].inject({}) do |memo, v| memo[v.split(/:/).last] = {} memo end end container_config end
create_host_config(options)
click to toggle source
# File lib/armada/docker/container.rb, line 60 def self.create_host_config(options) host_config = options[:host_config] || {} host_config['Binds'] = options[:binds] if options[:binds] && !options[:binds].empty? host_config['PortBindings'] = options[:port_bindings] if options[:port_bindings] host_config['PublishAllPorts'] = true host_config['Privileged'] = options[:privileged] || false host_config["RestartPolicy"] = options[:restart_policy] || nil host_config end
new(image, docker_host, options)
click to toggle source
# File lib/armada/docker/container.rb, line 5 def initialize(image, docker_host, options) @docker_host = docker_host @id = nil @image = image @name = options[:container_name] @container = docker_host.get_container(@name) @options = options now_in_ns = Integer(Time.now.to_f * 1000000.0) @options[:binds] ||= [] end
Public Instance Methods
create(container_config)
click to toggle source
# File lib/armada/docker/container.rb, line 40 def create(container_config) ::Docker::Container.create(container_config, @docker_host.connection) end
kill()
click to toggle source
# File lib/armada/docker/container.rb, line 44 def kill return if @container.nil? info "Stopping old container #{@container.id[0..7]} (#{@name})" @container.kill :v => @options[:volumes] end
ports()
click to toggle source
# File lib/armada/docker/container.rb, line 105 def ports return @container.json["NetworkSettings"]["Ports"] end
remove()
click to toggle source
# File lib/armada/docker/container.rb, line 50 def remove return if @container.nil? info "Deleting old container #{@container.id[0..7]} (#{@name})" begin @container.remove rescue Exception => e error "Could not remove container #{@container.id[0..7]} (#{@name}).\nException was: #{e.message}" end end
start()
click to toggle source
# File lib/armada/docker/container.rb, line 27 def start info "Creating new container for image - #{@image.name}:#{@image.tag} with image id (#{@image.id}) with container name #{@name}" container_config = Armada::Container.create_container_config("#{@image.name}:#{@image.tag}", @name, @docker_host.host, @options) begin @container = create(container_config) @id = @container.id info "Starting new container #{@id[0..11]}" @container.start!(Armada::Container.create_host_config(@options)) rescue Exception => e raise "Error occured on #{@docker_host.host}:#{@docker_host.port}: #{e.message}" end end
stop()
click to toggle source
# File lib/armada/docker/container.rb, line 17 def stop if @container info "Stopping the running container named - #{@name}" kill remove else warn "No container found with the name #{@name}" end end
Private Instance Methods
error(message)
click to toggle source
# File lib/armada/docker/container.rb, line 119 def error(message) Armada.ui.error "#{@docker_host.host} -- #{message}" end
info(message)
click to toggle source
# File lib/armada/docker/container.rb, line 111 def info(message) Armada.ui.info "#{@docker_host.host} -- #{message}" end
warn(message)
click to toggle source
# File lib/armada/docker/container.rb, line 115 def warn(message) Armada.ui.warn "#{@docker_host.host} -- #{message}" end