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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 81e39fa94b02bf61d5ddfe5ebc3576d16fa997d7
4
- data.tar.gz: 981ebad358ce8c793b30e6b93d6e58a0fe354593
3
+ metadata.gz: 798a771286c34b95adbba75636c14ec38e7bc639
4
+ data.tar.gz: 472275ac590b8eab6d01f12e4a23d0f2c1a193bb
5
5
  SHA512:
6
- metadata.gz: 1f2f6671e0d59fe84696a5d51ee18d555f5c2bd65900c81a20a1c7016962aae968dd7825831b998045b1631462e72824e218bcfcd6738e6d4a0219732a0229eb
7
- data.tar.gz: 4bbd8ceb51f5c6b4ea8fb4724dcdf9408d7a7587eeea70936dc7ed069cddf6620840305f20f9b70447752d0feca918110ce90aa20710d1a72b828baf06954f40
6
+ metadata.gz: e532d69c2de6b5266ba035aa77a35014ce95e2351f651744129c9b461d6d76f0a23e68c2cbc4218bc61744bcb3a68e7bd999e3fdb29c493c2056cfef97bd69d1
7
+ data.tar.gz: 24d5cc0027b41f1b3100d76cc07c6bd6a759a6d1ac3f58664e0981a72175d101e62da3a650d837835633bee41bb7a9b510b3ee7e3e5c1cb57a17607a90aa7ad3
@@ -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? && stdout_str.chomp
22
+ status.success? ? stdout_str.chomp : nil
23
23
  end
24
24
 
25
25
  def self.run *args, stdout: false, stderr: true
@@ -1,3 +1,3 @@
1
1
  module Nutkins
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
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 not prev_image_id.nil? and image_id != prev_image_id
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
- unless existing
195
- Docker.run 'create', '--name', name, '-p', '4001:4001', 'microbox/etcd:latest', '-name', name
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
- if Docker.run 'stop', name
209
- puts 'stopped etcd container'
210
- else
211
- puts 'failed to stop etcd container'
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.3.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-07-03 00:00:00.000000000 Z
11
+ date: 2016-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler