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 +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
|