nutkins 0.3.0 → 0.4.0
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/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
|