dockage 0.1.2 → 0.1.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 040dcb61ff6449c12748a15c4b33b37a0c71058f
4
- data.tar.gz: 0bb254266945f5090087164aaaaf629a3ee78713
3
+ metadata.gz: 6dc0cb297821ddb14ff45a2aa8a4b6c4e5a5fd8e
4
+ data.tar.gz: 18bf46721239cafe327ac3a229c5d6bfe6a55727
5
5
  SHA512:
6
- metadata.gz: 295e000c84cf10c1ea530a494ebf3de0960922acbf333b6d9edc6a9b846a0b0c49c02a14be578cf2ca93f9422396c2af2e97163dc17ad1755f13df33034ba642
7
- data.tar.gz: f4d7b4edd1011caece5c0f2c8fb5c19239434207a68d18c8bc613a87cac0829f6be3bd062f5da027e08aa09a17c2219ed16232e76977e97702794c9e17fdba88
6
+ metadata.gz: 2959957dbefb1bb07c0d2b7e3807ead30bc43cf4d60accded74597400c0b78cb9397104f8922a5ce4faf812a4ff0e0725feebb9fb38cd8092349a41eea4049ee
7
+ data.tar.gz: efb59423192b688de2fbc130ae026c7da9a499e4e5d48a90f4da1c2f19f51fbd1a4dd72e6120e800af5a65a9c0e85b185a69d000275d86e716c4cb1f453e8abe
@@ -31,7 +31,6 @@ module Dockage
31
31
  desc 'up [CONTAINER]', 'Create and run specified [CONTAINER] or all configured containers'
32
32
  def up(name = nil)
33
33
  find_containers(name).each do |container|
34
- Dockage.logger("Bringing up #{container[:name].yellow.bold}")
35
34
  Dockage::Docker.shell.up(container)
36
35
  end
37
36
  end
@@ -59,6 +58,13 @@ module Dockage
59
58
  end
60
59
  end
61
60
 
61
+ desc 'stop [CONTAINER]', 'Stop specified [CONTAINER] or all configured containers'
62
+ def stop(name = nil)
63
+ find_containers(name).each do |container|
64
+ Dockage::Docker.shell.stop(container[:name])
65
+ end
66
+ end
67
+
62
68
  desc 'ssh CONTAINER', 'SSH login to CONTAINER'
63
69
  def ssh(name)
64
70
  container = find_container(name)
@@ -17,13 +17,12 @@ module Dockage
17
17
  end
18
18
 
19
19
  string.map do |container_string|
20
- container = Hash[keys.map { |k, v| [k, container_string[v[:start]..v[:stop]].strip] }]
21
- container[:name] = container[:names].to_s
22
- .split(',')
23
- .reject{ |v| v.include?('/') }
24
- .first
25
- container[:running] = container[:status].downcase
26
- .include?('up') ? true : false
20
+ container = Hash[keys.map { |k, v| [k, container_string[v[:start]..v[:stop]].strip] }]
21
+ container[:names] = container[:names].to_s.split(',')
22
+ container[:name] = container[:names].reject{ |v| v.include?('/') }.first
23
+ container[:linked_with] = container[:names].map{ |name| name.split('/')[0] }.compact
24
+ container[:running] = container[:status].downcase
25
+ .include?('up') ? true : false
27
26
  container
28
27
  end
29
28
  end
@@ -5,7 +5,7 @@ module Dockage
5
5
  DOCKER_DEFAULT_HOST = 'unix:///var/run/docker.sock'
6
6
 
7
7
  def initialize
8
- @env = "DOCKER_HOST=#{Dockage.settings[:docker_host] || DOCKER_DEFAULT_HOST}"
8
+ @env = "export DOCKER_HOST=#{Dockage.settings[:docker_host] || DOCKER_DEFAULT_HOST}"
9
9
  end
10
10
 
11
11
  def pull(image)
@@ -22,9 +22,10 @@ module Dockage
22
22
 
23
23
  def stop(name)
24
24
  unless container_running?(name)
25
- Dockage.logger("Container #{name.bold.yellow} is not running")
25
+ Dockage.logger("Container #{name.bold.yellow} is not running. Nothing to do")
26
26
  return
27
27
  end
28
+ Dockage.logger("Stopping container #{name.bold.yellow}")
28
29
  invoke("stop #{name}", catch_errors: true)
29
30
  end
30
31
 
@@ -59,6 +60,8 @@ module Dockage
59
60
  end
60
61
 
61
62
  def up(container)
63
+ Dockage.logger("Bringing up #{container[:name].yellow.bold}")
64
+ return reload(container) if should_be_reload?(container)
62
65
  if container_running?(container[:name])
63
66
  Dockage.logger("Container #{container[:name].bold} is already up. Nothing to do")
64
67
  return
@@ -69,6 +72,7 @@ module Dockage
69
72
  end
70
73
 
71
74
  def reload(container)
75
+ return unless dependences_satisfied?(container)
72
76
  stop(container[:name]) if container_running?(container[:name])
73
77
  destroy(container[:name]) if container_exists?(container[:name])
74
78
  up(container)
@@ -113,20 +117,51 @@ module Dockage
113
117
 
114
118
  def run(image, opts = {})
115
119
  command = "run" \
116
- "#{opts[:detach] == false || ' -d'}" \
120
+ "#{opts[:detach] == false || ' -d'}" \
117
121
  "#{opts[:links] && opts[:links].map { |link| " --link #{link}" }.join}" \
118
122
  "#{opts[:volumes] && opts[:volumes].map { |volume| " -v #{volume}" }.join}" \
119
123
  "#{opts[:ports] && opts[:ports].map { |port| " -p #{port}" }.join}" \
120
124
  "#{opts[:name] && " --name #{opts[:name]}"}" \
121
125
  " #{image}" \
122
- "#{opts[:cmd] && " /bin/sh -c '#{opts[:cmd]}'"}"
126
+ "#{opts[:cmd] && " /bin/sh -c '#{opts[:cmd]}'"}"
123
127
  invoke(command)
124
128
  end
125
129
 
126
130
  private
127
131
 
132
+ def dependences_satisfied?(container)
133
+ return true unless container[:links] && container[:links].any?
134
+ active_containers = ps
135
+ container[:links].each do |link|
136
+ dependency_name = link.split(':').first
137
+ next if active_containers.select { |con| con[:name] == dependency_name }.any?
138
+ dependency_container = Dockage.settings.containers.select { |con| con[:name] == dependency_name }.first
139
+ unless dependency_container
140
+ Dockage.error("#{dependency_name.bold} is required for " \
141
+ "#{container[:name]} but does not specified " \
142
+ "in config file")
143
+ end
144
+ up(dependency_container)
145
+ end
146
+ end
147
+
148
+ def should_be_reload?(container)
149
+ return false unless container[:links]
150
+ containers = ps(nil, true)
151
+ return false unless containers.select { |con| con[:name] == container[:name] }.any?
152
+ links = container[:links].map { |link| link.split(':').first }
153
+ dependency_containers = containers.select { |con| links.include?(con[:name]) }
154
+ dependency_containers.each do |dep_con|
155
+ unless dep_con[:linked_with].include?(container[:name])
156
+ Dockage.logger("Container #{container[:name].bold} has missing links and should be reloaded")
157
+ return true
158
+ end
159
+ end
160
+ false
161
+ end
162
+
128
163
  def invoke(cmd, opts = {})
129
- command = "#{@env} docker #{cmd}"
164
+ command = "#{@env} && docker #{cmd}"
130
165
  Dockage.verbose(command)
131
166
  if opts[:attach_std]
132
167
  output = sys_exec(command, opts[:catch_errors])
@@ -1,3 +1,3 @@
1
1
  module Dockage
2
- VERSION = '0.1.2'
2
+ VERSION = '0.1.3'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dockage
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Besedin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-09 00:00:00.000000000 Z
11
+ date: 2014-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor