Class: Minke::GoDocker
- Inherits:
-
Object
- Object
- Minke::GoDocker
- Defined in:
- lib/minke/go_docker.rb
Class Method Summary collapse
- .create_and_run_container(args, cmd) ⇒ Object
- .create_and_start_container(args) ⇒ Object
- .delete_container(container) ⇒ Object
- .find_image(image_name) ⇒ Object
- .find_running_container ⇒ Object
- .get_container(args) ⇒ Object
- .get_docker_ip_address ⇒ Object
- .pull_image(image_name) ⇒ Object
- .tag_and_push(args) ⇒ Object
Class Method Details
.create_and_run_container(args, cmd) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/minke/go_docker.rb', line 69 def self.create_and_run_container args, cmd # update the timeout for the Excon Http Client # set the chunk size to enable streaming of log files Docker. = {:chunk_size => 1, :read_timeout => 3600} container = Docker::Container.create( 'Image' => args['build_args']['image'], 'Cmd' => cmd, "Binds" => ["#{ENV['GOPATH']}/src:/go/src"], "Env" => args['build_args']['env'], 'WorkingDir' => args['build_args']['working_directory']) return_code = 0 thread = Thread.new { container.attach { |stream, chunk| puts "#{chunk}" if stream.to_s == "stdout" return_code = 0 else return_code = 1 end } } container.start thread.join return container, return_code end |
.create_and_start_container(args) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/minke/go_docker.rb', line 52 def self.create_and_start_container args # update the timeout for the Excon Http Client # set the chunk size to enable streaming of log files Docker. = {:chunk_size => 1, :read_timeout => 3600} container = Docker::Container.create( 'Image' => args['build_args']['image'], 'Cmd' => ['/bin/bash'], 'Tty' => true, "Binds" => ["#{ENV['GOPATH']}/src:/go/src"], "Env" => args['build_args']['env'], 'WorkingDir' => args['build_args']['working_directory']) container.start return container end |
.delete_container(container) ⇒ Object
99 100 101 102 103 104 105 106 107 |
# File 'lib/minke/go_docker.rb', line 99 def self.delete_container container if container != nil begin container.delete() rescue => e puts "Unable to delete container" end end end |
.find_image(image_name) ⇒ Object
16 17 18 19 20 21 22 23 |
# File 'lib/minke/go_docker.rb', line 16 def self.find_image image_name found = nil Docker::Image.all.each do | image | found = image if image.info["RepoTags"].include? image_name end return found end |
.find_running_container ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/minke/go_docker.rb', line 39 def self.find_running_container containers = Docker::Container.all(:all => true) found = nil containers.each do | container | if container.info["Image"] == "golang" && container.info["Status"].start_with?("Up") return container end end return nil end |
.get_container(args) ⇒ Object
30 31 32 33 34 35 36 37 |
# File 'lib/minke/go_docker.rb', line 30 def self.get_container args container = self.find_running_container if container != nil return container else return self.create_and_start_container(args) end end |
.get_docker_ip_address ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 |
# File 'lib/minke/go_docker.rb', line 3 def self.get_docker_ip_address if !ENV['DOCKER_HOST'] return "127.0.0.1" else # dockerhost set host = ENV['DOCKER_HOST'].dup host.gsub!(/tcp:\/\//, '') host.gsub!(/:\d+/,'') return host end end |
.pull_image(image_name) ⇒ Object
25 26 27 28 |
# File 'lib/minke/go_docker.rb', line 25 def self.pull_image image_name puts "Pulling Image: #{image_name}" puts `docker pull #{image_name}` end |
.tag_and_push(args) ⇒ Object
109 110 111 112 113 114 115 116 117 118 |
# File 'lib/minke/go_docker.rb', line 109 def self.tag_and_push args image = self.find_image "#{args['go']['application_name']}:latest" image.tag('repo' => "#{args['docker_registry']['namespace']}/#{args['go']['application_name']}", 'force' => true) unless image.info["RepoTags"].include? "#{args['docker_registry']['namespace']}/#{args['go']['application_name']}:latest" system("docker login -u #{args['docker_registry']['user']} -p #{args['docker_registry']['password']} -e #{args['docker_registry']['email']} #{args['docker_registry']['url']}") abort "Unable to login" unless $?.exitstatus == 0 system("docker push #{args['docker_registry']['namespace']}/#{args['go']['application_name']}:latest") abort "Unable to push to registry" unless $?.exitstatus == 0 end |