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