class DockerImageCreator
Constants
- DAEMON_OPTIONS
- DOCKER_DIR
- INTERACT_OPTIONS
- REMOVE_INTERMEDIATE_FLAG
Attributes
definition[R]
docker_host[RW]
docker_host_secure[RW]
image_name_forced[RW]
use_date_as_version[RW]
version_forced[RW]
Public Class Methods
new(definition)
click to toggle source
# File lib/support/docker_image_creator.rb, line 15 def initialize(definition) raise "Definition is nil" if definition == nil @definition = definition @home = FileUtils.pwd @version = nil @docker_host = nil @docker_host_secure = nil end
Public Instance Methods
add_it(host, host_ssl, run_instance_count, registry)
click to toggle source
# File lib/support/docker_image_creator.rb, line 176 def add_it(host, host_ssl, run_instance_count, registry) @docker_host = host @docker_host_secure = host_ssl number_added = 0 while (number_added < run_instance_count) run_def = @definition[:run] run_name = run_def[:name] extension = 1 run_with_extension(:next, registry, false, true) number_added += 1 end end
after_build(definition)
click to toggle source
# File lib/support/docker_image_creator.rb, line 225 def after_build(definition) delete_image_support_from_stage() end
api_image(registry, docker_connection)
click to toggle source
# File lib/support/docker_image_creator.rb, line 116 def api_image(registry, docker_connection) full_name = "#{registry}/#{image_name}" full_name += ":#{version()}" if (version() != nil) image = Docker::Image.get(full_name, {}, docker_connection) puts "Pushing Image: #{full_name} ..." return image end
before_build(definition)
click to toggle source
# File lib/support/docker_image_creator.rb, line 220 def before_build(definition) delete_image_support_from_stage() copy_image_support_to_stage() end
build_it()
click to toggle source
# File lib/support/docker_image_creator.rb, line 44 def build_it() docker_connection = docker_api.connection build_def = @definition[:build] if (build_def == nil) puts "Warning: build not defined for #{definition[:code]} - ignoring request" else begin before_build(@definition) remove_intermediate = REMOVE_INTERMEDIATE_FLAG volume_path = build_def[:volume_path] build_command = nil image_and_version = image_name() image_and_version += ":#{version()}" if (version() != nil) opts = build_def[:api_options] || {} opts[:t] = "#{image_and_version}" opts[:rm] = true Excon.defaults[:write_timeout] = 1000 Excon.defaults[:read_timeout] = 1000 puts "Building image. Docker dir: #{docker_dir} ..." image = Docker::Image.build_from_dir(docker_dir, opts, docker_connection) do |v| begin if (log = JSON.parse(v)) && log.has_key?("stream") $stdout.puts log["stream"] end rescue Exception => ex puts "#{v}" end end rescue Exception => ex puts"Exception: #{ex.message}" puts ex.backtrace debugger raise "Exception building image. #{ex.message}\nCheck connection to: #{docker_connection}" ensure after_build(@definition) end end end
copy_image_support_to_stage()
click to toggle source
# File lib/support/docker_image_creator.rb, line 237 def copy_image_support_to_stage raise "Definition nil" if @definition == nil raise "Build Definition nil" if @definition[:build] == nil image_support_dir = "#{FileUtils.pwd}/lib/support/image_support/" FileUtils.cp_r(image_support_dir, docker_dir()) end
delete_image_support_from_stage()
click to toggle source
# File lib/support/docker_image_creator.rb, line 229 def delete_image_support_from_stage() FileUtils.remove_dir("#{docker_dir}image_support", true) end
do_push(registry)
click to toggle source
# File lib/support/docker_image_creator.rb, line 124 def do_push(registry) if (registry) Excon.defaults[:write_timeout] = 1000 Excon.defaults[:read_timeout] = 1000 docker_connection = docker_api.connection image = api_image(registry, docker_connection) credentials = nil result = image.push(credentials, {tag: version, repo: registry}) puts "Done pushing Image: #{registry}/#{image_name}" the_registry = DockerRegistry.new(registry) if (the_registry.has_image_with_version?("#{image_name}", version) == false) raise "After push, image doesn't appear in registry. Image: #{image_name}:#{version}. Push result: #{result}" end else puts "No registry specified for pushing" end end
do_tag(registry)
click to toggle source
def do_tag
(image_name
, version, registry)
# File lib/support/docker_image_creator.rb, line 103 def do_tag(registry) docker_connection = docker_api.connection image = Docker::Image.get("#{image_name}:#{version}", {}, docker_connection) puts "Tagging image: #{image_name}" image.tag('repo' => "#{registry}/#{image_name()}", 'image' => 'unicorn', 'tag' => version(), force: true) end
docker_api()
click to toggle source
# File lib/support/docker_image_creator.rb, line 36 def docker_api @docker_host = @docker_host || ENV['DOCKER_HOST'] @docker_host_secure = @docker_host_secure || (ENV['DOCKER_TLS_VERIFY'].to_s == '1') raise "Need to define DOCKER_HOST env variable" if (!@docker_host) raise "Need to define DOCKER_TLS_VERIFY env variable" if (@docker_host_secure == nil) docker_api = DockerApi.new(@docker_host, @docker_host_secure) end
docker_dir()
click to toggle source
# File lib/support/docker_image_creator.rb, line 233 def docker_dir return @definition[:build][:docker_directory] + "/" end
image_name()
click to toggle source
# File lib/support/docker_image_creator.rb, line 28 def image_name return (@image_name_forced) if (@image_name_forced) build_def = @definition[:build] name = @definition[:run][:image_name] if (@definition[:run]) name = build_def[:name] if (build_def) return name end
kill_all(host, host_ssl)
click to toggle source
# File lib/support/docker_image_creator.rb, line 189 def kill_all(host, host_ssl) docker_runner = DockerRunner.new(self, nil) docker_runner.registry = nil docker_runner.use_extension = true docker_runner.interact = false docker_runner.remote_address = host docker_runner.secure_docker_api = host_ssl run_def = @definition[:run] run_name = run_def[:name] docker_runner.kill_all(run_name) end
openlogic_home()
click to toggle source
# File lib/support/docker_image_creator.rb, line 215 def openlogic_home() @openlogic_home = @openlogic_home[0..(@openlogic_home.length - 2)] if (@openlogic_home.end_with? "/") return @openlogic_home end
push_it(registry)
click to toggle source
# File lib/support/docker_image_creator.rb, line 110 def push_it(registry) raise "DOCKER_REGISTRY environment variable not defined for push operation" if registry == nil build_def = @definition[:build] do_push(registry) end
run_it(host, host_ssl, interact, run_instance_count, registry = nil)
click to toggle source
# File lib/support/docker_image_creator.rb, line 146 def run_it(host, host_ssl, interact, run_instance_count, registry = nil) @docker_host = host @docker_host_secure = host_ssl puts "Warning: registry not defined, assuming run is local" if registry == nil run_def = @definition[:run] build_def = @definition[:build] if (run_def == nil) puts "No run definition for: #{@definition[:code]}" else (1..run_instance_count).each do |instance_index| use_extension = (run_instance_count > 1) run_with_extension(:next, registry, interact, use_extension) end end end
run_with_extension(instance_index, registry, interact, use_extension)
click to toggle source
# File lib/support/docker_image_creator.rb, line 162 def run_with_extension(instance_index, registry, interact, use_extension) @docker_api = DockerApi.new(@docker_host) docker_runner = DockerRunner.new(self, nil) docker_runner.registry = registry docker_runner.instance_index = instance_index docker_runner.use_extension = use_extension docker_runner.interact = interact docker_runner.image_name = image_name docker_runner.code = @definition[:code] docker_runner.remote_address = @docker_host docker_runner.secure_docker_api = @docker_host_secure docker_runner.run_with_extension end
subtract(host, host_ssl, count)
click to toggle source
# File lib/support/docker_image_creator.rb, line 202 def subtract(host, host_ssl, count) docker_runner = DockerRunner.new(self, nil) docker_runner.registry = nil docker_runner.use_extension = true docker_runner.interact = false docker_runner.remote_address = host docker_runner.secure_docker_api = host_ssl run_def = @definition[:run] run_name = run_def[:name] docker_runner.kill(run_name, count) end
tag_it(registry)
click to toggle source
# File lib/support/docker_image_creator.rb, line 97 def tag_it(registry) raise "DOCKER_REGISTRY environment variable not defined for push operation" if registry == nil do_tag(registry) end
use_date_as_version?()
click to toggle source
# File lib/support/docker_image_creator.rb, line 24 def use_date_as_version? false end
version()
click to toggle source
# File lib/support/docker_image_creator.rb, line 88 def version return (@version_forced) if (@version_forced) build_def = @definition[:build] raise "No build definition for: #{@definition[:code]}" if (!build_def) version = 'latest' version = build_def[:version] if (build_def[:version] != nil) return version end