docker_process 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +15 -0
  4. data/lib/docker_process.rb +117 -0
  5. metadata +59 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a87ca2bb5b3f17eb380bcca03ffa348017631545
4
+ data.tar.gz: a59b2d9d472370b981e730b1fe03708a7522f52a
5
+ SHA512:
6
+ metadata.gz: 298694936a84e887f3a882521151e8d24a2e4fbfcfb220d5044a7d898c91a0d958e25a97401fd23c1d5579351336b92098efdaa0b812f438068f7775e8a82b32
7
+ data.tar.gz: 0331af2dc162d1a3f5b0ac7f13c0264d8d36186d6c0f227bab0438a7cec45d238ed798e76d37bf58baa0acd08d805bf66395ec3c2d69142a041de18bae972566
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gem 'docker'
data/Gemfile.lock ADDED
@@ -0,0 +1,15 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ backticks (0.5.0)
5
+ docker (0.3.1)
6
+ backticks (~> 0.3)
7
+
8
+ PLATFORMS
9
+ ruby
10
+
11
+ DEPENDENCIES
12
+ docker
13
+
14
+ BUNDLED WITH
15
+ 1.12.5
@@ -0,0 +1,117 @@
1
+ require 'docker'
2
+
3
+ ## GOAL:
4
+ # have object which is used to create and manage docker contains
5
+ # based around the idea that we treat them like procs
6
+
7
+ class DockerProcess
8
+
9
+ @@image_name = nil
10
+ @@properties = []
11
+
12
+ def self.set_image_name name
13
+ @@image_name = name
14
+ end
15
+
16
+ def self.set_properties *properties
17
+ raise 'can not reset properties' if !@@properties.empty?
18
+ @@properties.map(&:to_sym).each do |property|
19
+ @@properties << property
20
+ end
21
+ end
22
+
23
+ attr_reader :config
24
+
25
+ def initialize config
26
+ raise 'image not set' if @@image_name.nil?
27
+ raise 'properties not set' if @@properties.empty?
28
+ @config = config
29
+ end
30
+
31
+ def start
32
+ start_container
33
+ end
34
+
35
+ def stop
36
+ kill_and_delete_container
37
+ end
38
+
39
+ def is_running?
40
+ container = find_container
41
+ if container
42
+ container_is_running? container
43
+ else
44
+ false
45
+ end
46
+ end
47
+
48
+ def recent_logs
49
+ container_logs
50
+ end
51
+
52
+ private
53
+
54
+ def find_container
55
+ Docker::Container.all.each do |container|
56
+ container_labels = container.json["Config"]["Labels"]
57
+ if container_labels == labels
58
+ return container
59
+ end
60
+ end
61
+ nil
62
+ end
63
+
64
+ def start_container
65
+ image = Docker::Image.create('fromImage' => @@image_name)
66
+ log "creating container [#{@@image_name}] => #{self.config} with env #{env_vars}"
67
+ if is_running?
68
+ log "already running, not starting"
69
+ return false
70
+ end
71
+ container = Docker::Container.create({
72
+ 'RestartPolicy' => { 'Name': 'always' },
73
+ 'Image' => image.id,
74
+ 'Env' => env_vars,
75
+ 'Labels' => labels
76
+ })
77
+ log "created container: #{container.id}"
78
+ log "starting container"
79
+ container.start
80
+ log "container started"
81
+ true
82
+ end
83
+
84
+ def container_logs
85
+ container = find_container
86
+ return nil unless container
87
+ container.streaming_logs(stdout: 1, stderr: 1, tail: 100, follow: 0).to_s
88
+ end
89
+
90
+ def container_is_running? container
91
+ container.json["State"]["Running"]
92
+ end
93
+
94
+ def kill_and_delete_container
95
+ container = find_container
96
+ return false unless container
97
+ container.kill
98
+ container.delete
99
+ true
100
+ end
101
+
102
+ def labels
103
+ { 'app.name' => 'chatbridge_sender' }.tap do |l|
104
+ @config.each do |property, value|
105
+ l.merge!({ "config.#{property}" => value })
106
+ end
107
+ end
108
+ end
109
+
110
+ def env_vars
111
+ vars = []
112
+ @config.each do |property, value|
113
+ vars << "#{property.to_s.upcase}=#{value}"
114
+ end
115
+ return vars
116
+ end
117
+ end
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: docker_process
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Robby ranshous
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-07-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: docker
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: 'simple container management '
28
+ email: rranshous@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - Gemfile
34
+ - Gemfile.lock
35
+ - lib/docker_process.rb
36
+ homepage: http://github.com/rranshous/docker_process
37
+ licenses: []
38
+ metadata: {}
39
+ post_install_message:
40
+ rdoc_options: []
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ requirements: []
54
+ rubyforge_project:
55
+ rubygems_version: 2.5.1
56
+ signing_key:
57
+ specification_version: 4
58
+ summary: simple container management
59
+ test_files: []