docker_process 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []