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 +4 -4
- data/lib/dockage/cli.rb +7 -1
- data/lib/dockage/docker/parse.rb +6 -7
- data/lib/dockage/docker/shell.rb +40 -5
- data/lib/dockage/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6dc0cb297821ddb14ff45a2aa8a4b6c4e5a5fd8e
|
4
|
+
data.tar.gz: 18bf46721239cafe327ac3a229c5d6bfe6a55727
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2959957dbefb1bb07c0d2b7e3807ead30bc43cf4d60accded74597400c0b78cb9397104f8922a5ce4faf812a4ff0e0725feebb9fb38cd8092349a41eea4049ee
|
7
|
+
data.tar.gz: efb59423192b688de2fbc130ae026c7da9a499e4e5d48a90f4da1c2f19f51fbd1a4dd72e6120e800af5a65a9c0e85b185a69d000275d86e716c4cb1f453e8abe
|
data/lib/dockage/cli.rb
CHANGED
@@ -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)
|
data/lib/dockage/docker/parse.rb
CHANGED
@@ -17,13 +17,12 @@ module Dockage
|
|
17
17
|
end
|
18
18
|
|
19
19
|
string.map do |container_string|
|
20
|
-
container
|
21
|
-
container[:
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
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
|
data/lib/dockage/docker/shell.rb
CHANGED
@@ -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]
|
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]
|
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])
|
data/lib/dockage/version.rb
CHANGED
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.
|
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-
|
11
|
+
date: 2014-10-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|