dockage 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
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