nutkins 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/nutkins/docker.rb +1 -1
- data/lib/nutkins/version.rb +1 -1
- data/lib/nutkins.rb +51 -7
- 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: 798a771286c34b95adbba75636c14ec38e7bc639
|
4
|
+
data.tar.gz: 472275ac590b8eab6d01f12e4a23d0f2c1a193bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e532d69c2de6b5266ba035aa77a35014ce95e2351f651744129c9b461d6d76f0a23e68c2cbc4218bc61744bcb3a68e7bd999e3fdb29c493c2056cfef97bd69d1
|
7
|
+
data.tar.gz: 24d5cc0027b41f1b3100d76cc07c6bd6a759a6d1ac3f58664e0981a72175d101e62da3a650d837835633bee41bb7a9b510b3ee7e3e5c1cb57a17607a90aa7ad3
|
data/lib/nutkins/docker.rb
CHANGED
@@ -19,7 +19,7 @@ module Nutkins::Docker
|
|
19
19
|
|
20
20
|
def self.run_get_stdout *args
|
21
21
|
stdout_str, stderr_str, status = Open3.capture3 'docker', *args
|
22
|
-
status.success?
|
22
|
+
status.success? ? stdout_str.chomp : nil
|
23
23
|
end
|
24
24
|
|
25
25
|
def self.run *args, stdout: false, stderr: true
|
data/lib/nutkins/version.rb
CHANGED
data/lib/nutkins.rb
CHANGED
@@ -4,6 +4,7 @@ require "net/http"
|
|
4
4
|
require "uri"
|
5
5
|
require "fileutils"
|
6
6
|
require "json"
|
7
|
+
require "net/http"
|
7
8
|
|
8
9
|
module Nutkins ; end
|
9
10
|
|
@@ -16,6 +17,7 @@ module Nutkins
|
|
16
17
|
CONFIG_FILE_NAME = 'nutkins.yaml'
|
17
18
|
IMG_CONFIG_FILE_NAME = 'nutkin.yaml'
|
18
19
|
VOLUMES_PATH = 'volumes'
|
20
|
+
ETCD_PORT = 2379
|
19
21
|
|
20
22
|
class CloudManager
|
21
23
|
def initialize(project_dir: nil)
|
@@ -45,7 +47,7 @@ module Nutkins
|
|
45
47
|
|
46
48
|
if Docker.run 'build', '-t', cfg['latest_tag'], '-t', tag, img_dir, stdout: true
|
47
49
|
image_id = Docker.image_id_for_tag tag
|
48
|
-
if
|
50
|
+
if prev_image_id and image_id != prev_image_id
|
49
51
|
puts "deleting previous image #{prev_image_id}"
|
50
52
|
Docker.run "rmi", prev_image_id
|
51
53
|
end
|
@@ -190,13 +192,45 @@ module Nutkins
|
|
190
192
|
def start_etcd_container
|
191
193
|
name = get_etcd_container_name
|
192
194
|
return unless name
|
195
|
+
|
193
196
|
existing = Docker.container_id_for_name name
|
194
|
-
|
195
|
-
Docker.run '
|
197
|
+
if existing
|
198
|
+
Docker.run 'stop', name
|
199
|
+
rm_etcd_docker_container existing
|
200
|
+
end
|
201
|
+
|
202
|
+
Docker.run 'create', '--name', name, '-p', "#{ETCD_PORT}:#{ETCD_PORT}",
|
203
|
+
'quay.io/coreos/etcd',
|
204
|
+
'etcd', '-name', name,
|
205
|
+
'-advertise-client-urls', "http://0.0.0.0:#{ETCD_PORT}",
|
206
|
+
'-listen-client-urls', "http://0.0.0.0:#{ETCD_PORT}"
|
207
|
+
|
208
|
+
img_names = get_all_img_names(img_names)
|
209
|
+
configs = img_names.map &method(:get_image_config)
|
210
|
+
etcd_store = {}
|
211
|
+
configs.each do |config|
|
212
|
+
etcd_store.merge! config['etcd']['data'] if config.dig('etcd', 'data')
|
196
213
|
end
|
197
214
|
|
198
215
|
if Docker.run 'start', name
|
199
216
|
puts 'started etcd container'
|
217
|
+
# even after port is open it still refuses http requests for a while
|
218
|
+
# so just sleep until it is ready... ideally test for working HTTP
|
219
|
+
sleep 1
|
220
|
+
|
221
|
+
etcd_store.each do |key, val|
|
222
|
+
uri = URI("http://127.0.0.1:#{ETCD_PORT}/v2/keys/#{key}")
|
223
|
+
req = Net::HTTP::Put.new(uri)
|
224
|
+
req.body = 'value=' + val
|
225
|
+
res = Net::HTTP.start(uri.hostname, uri.port) do |http|
|
226
|
+
http.request(req)
|
227
|
+
end
|
228
|
+
|
229
|
+
if not res.is_a? Net::HTTPCreated
|
230
|
+
puts "etcd: failed to set #{key} to #{val}"
|
231
|
+
puts res
|
232
|
+
end
|
233
|
+
end
|
200
234
|
else
|
201
235
|
puts 'failed to start etcd container'
|
202
236
|
end
|
@@ -205,10 +239,15 @@ module Nutkins
|
|
205
239
|
def stop_etcd_container
|
206
240
|
name = get_etcd_container_name
|
207
241
|
return unless name
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
242
|
+
|
243
|
+
existing = Docker.container_id_for_name name
|
244
|
+
if existing
|
245
|
+
if Docker.run 'stop', name
|
246
|
+
puts 'stopped etcd container'
|
247
|
+
rm_etcd_docker_container existing
|
248
|
+
else
|
249
|
+
puts 'failed to stop etcd container'
|
250
|
+
end
|
212
251
|
end
|
213
252
|
end
|
214
253
|
|
@@ -257,5 +296,10 @@ module Nutkins
|
|
257
296
|
img_dir = get_project_dir img_name
|
258
297
|
Dir.glob("#{img_dir}/{volumes,secrets}/*.gpg")
|
259
298
|
end
|
299
|
+
|
300
|
+
private
|
301
|
+
def rm_etcd_docker_container existing
|
302
|
+
raise 'could not delete existing container' unless Docker.run 'rm', existing if existing
|
303
|
+
end
|
260
304
|
end
|
261
305
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nutkins
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Pike
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|