Class: Minke::GoDocker

Inherits:
Object
  • Object
show all
Defined in:
lib/minke/go_docker.rb

Class Method Summary collapse

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.options = {: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.options = {: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_containerObject



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_addressObject



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