gaptool-client 0.8.0.pre.beta3 → 0.8.0.pre.beta4

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: 4fc4330da672fc107c70bda1d79f2cedb56e5263
4
- data.tar.gz: b4e11ee2bd119cb1bf4583c39dfbe2c384c8a999
3
+ metadata.gz: 5bd2601c8422b74e82e18cee613c05b4c5599435
4
+ data.tar.gz: 5b0ed9dee02fb9827122a5d196ab239f9beeaae4
5
5
  SHA512:
6
- metadata.gz: 860ffa9d687753c1e5d452a205d7db7ee317dbffed6037aa66b516fe4b665da07b52c369c7c6d02e729a716ff46a2d962b9582468ce042b86cb74d52e17c234c
7
- data.tar.gz: 753ab4bc8d11193c440f190743a1d46b49ce29ad55f0988ffd9b7c705ea169e5c3d94bcaec4fd9212050e283fb5e70a5cbfb08211f748f34e478df525a73bf95
6
+ metadata.gz: fe52635d7f258cc49b76cad3406ce54dee6c5a3fe963f25ad78d36101b95cdf3b4d8fde73afc6dbbef1a4b11b76c3f8a71a71cd586e5e4d2340d971bf032d2b3
7
+ data.tar.gz: 33160fa18acb2d8dfc66789906a7f038fea505a7fd47a8a72689c32546883415eb9a1727c97b04aae8d92e02a14e0e8955eb67c484ab8e076a136ef00cb67d30
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.0-beta3
1
+ 0.8.0-beta4
@@ -254,6 +254,7 @@ module Gaptool
254
254
  option ['-W', '--whyrun'], :flag, 'Whyrun, like dry-run but different.'
255
255
  option ['-c', '--continue-on-errors'], :flag, 'Continue execution even if one or more hosts fail'
256
256
  option ['-B', '--batch-size'], 'SIZE', "How many hosts to run in parallel (defaults to #{Gaptool::SSH::BATCH_SIZE})", default: Gaptool::SSH::BATCH_SIZE
257
+ option ['-v', '--verbose'], :flag, 'More verbose output'
257
258
 
258
259
  def execute
259
260
  attrs = Gaptool::Helpers.split_attrs(attribute_list)
@@ -261,40 +262,19 @@ module Gaptool
261
262
  role: role,
262
263
  instance: instance,
263
264
  environment: environment)
264
-
265
- nodes = nodes.map do |x|
266
- x['whyrun'] = whyrun?
267
- x['attrs'] = {
268
- 'chef_branch' => chef_branch
269
- }.merge(attrs)
270
- x
271
- end
272
-
265
+ nodes = nodes.map { |x| x.merge('attrs' => attrs) }
273
266
  pre_hook = proc do |node|
274
- cl = Gaptool::API.new
275
- json = cl.getnodeattrs(node['instance'], node['attrs'])
276
- json['run_list'] ||= node['chef_runlist'] || ['role[base]']
277
- git = 'sudo -u admin git'
278
- pull = "#{git} fetch --all; #{git} reset --hard origin/`#{git} rev-parse --abbrev-ref HEAD`"
279
- wopts = node['whyrun'] ? ' -W ' : ''
280
-
281
- unless node['attrs']['chef_branch'].nil?
282
- json['chefbranch'] = node['attrs']['chef_branch']
283
- pull = "#{git} checkout -fB #{node['attrs']['chef_branch']}; #{git} fetch --all; #{git} reset --hard origin/#{node['attrs']['chef_branch']}"
284
- end
285
- upload!(StringIO.new(json.to_json), '/tmp/chef.json')
286
- script = <<-EOS
287
- #!/bin/bash
288
- set -e
289
- cd /var/data/admin/ops
290
- #{pull}
291
- sudo chef-solo -c /var/data/admin/ops/cookbooks/solo.rb -j /tmp/chef.json -E #{node['environment']}#{wopts}
292
- rm -f /tmp/chef.json
293
- EOS
294
- upload!(StringIO.new(script), '/tmp/chef.sh')
267
+ upload!(StringIO.new(node['attrs'].merge(
268
+ 'run_list' => node['chef_runlist'] || ['role[base]']
269
+ ).to_json), '/tmp/chef.json')
295
270
  end
271
+
272
+ command = 'sudo gtrunchef -j /tmp/chef.json'
273
+ command = "#{command} -W" if whyrun?
274
+ command = "#{command} -B #{chef_branch}" if chef_branch
275
+ command = "#{command} -v" if verbose?
296
276
  res = Gaptool::SSH.exec(
297
- nodes, ['chmod +x /tmp/chef.sh', '/tmp/chef.sh', 'rm -f /tmp/chef.sh'],
277
+ nodes, [command],
298
278
  pre_hooks: [pre_hook], serial: serial?, continue_on_errors: continue_on_errors?,
299
279
  batch_size: batch_size
300
280
  )
@@ -308,6 +288,9 @@ EOS
308
288
  required: true, multivalued: true)
309
289
  option ['-m', '--migrate'], :flag, 'Toggle running migrations'
310
290
  option ['-e', '--environment'], 'ENVIRONMENT', 'Which environment, e.g. production', required: true
291
+ option(['-B', '--chef-branch'], 'BRANCH',
292
+ 'branch of the chef repository to use (defaults to last branch used during init/chefrun)',
293
+ default: nil)
311
294
  option ['-b', '--branch'], 'BRANCH', 'Git branch to deploy, default is master'
312
295
  option ['-r', '--rollback'], :flag, 'Toggle this to rollback last deploy'
313
296
  option ['-i', '--instance'], 'INSTANCE', 'Instance ID, e.g. i-12345678. If set, all applications MUST be hosted on this node.'
@@ -350,42 +333,32 @@ EOS
350
333
  end
351
334
 
352
335
  nodes = nodes.map do |x|
353
- x['verbose'] = verbose?
354
- x['attrs'] = {
355
- 'deploy_apps' => (Set.new(x['apps']) & app_set).to_a,
356
- 'rollback' => rollback?,
357
- 'branch' => branch,
358
- 'migrate' => migrate?
359
- }.merge(attrs)
360
- x
336
+ x.merge(
337
+ 'attrs' => attrs,
338
+ 'deploy_apps' => (Set.new(x['apps']) & app_set).to_a
339
+ )
361
340
  end
362
-
363
341
  pre_hook = proc do |node|
364
- client = Gaptool::API.new
365
- json = client.getnodeattrs(node['instance'], node['attrs'])
342
+ json = node['attrs']
366
343
  json['run_list'] = node['chef_runlist'] || ['recipe[deploy]']
344
+ json['deploy_apps'] = node['deploy_apps']
367
345
  host = "#{node['role']}:#{node['environment']}:#{node['instance']}"
368
346
  puts "#{Rainbow('Deploying apps').cyan} '" + \
369
- Rainbow(json['deploy_apps'].join(' ')).green + \
347
+ Rainbow(node['deploy_apps'].join(' ')).green + \
370
348
  "' #{Rainbow('on').cyan} " + \
371
349
  Rainbow(host).green
372
- puts "#{Rainbow(host).green}: #{JSON.pretty_generate(json)}" if node['verbose']
373
-
374
350
  upload!(StringIO.new(json.to_json), '/tmp/chef.json')
375
- script = <<-EOS
376
- #!/bin/bash
377
- set -e
378
- cd /var/data/admin/ops
379
- sudo -u admin git pull
380
- sudo chef-solo -c /var/data/admin/ops/cookbooks/solo.rb -j /tmp/chef.json -E #{node['environment']}
381
- rm -f /tmp/chef.json
382
- EOS
383
- upload!(StringIO.new(script), '/tmp/deploy.sh')
384
351
  end
385
352
 
353
+ command = 'sudo gtrunchef -j /tmp/chef.json'
354
+ command = "#{command} -v" if verbose?
355
+ command = "#{command} -b #{branch}" if branch
356
+ command = "#{command} -M" if migrate?
357
+ command = "#{command} -R" if rollback?
358
+ command = "#{commnad} -B #{chef_branch}" if chef_branch
359
+
386
360
  res = Gaptool::SSH.exec(
387
- nodes,
388
- ['chmod +x /tmp/deploy.sh', '/tmp/deploy.sh', 'rm -f /tmp/deploy.sh'],
361
+ nodes, [command],
389
362
  pre_hooks: [pre_hook], serial: serial?, continue_on_errors: continue_on_errors?,
390
363
  batch_size: batch_size
391
364
  )
@@ -13,6 +13,10 @@ module Gaptool
13
13
  STOP_MARKER = '###### END GAPTOOL ######'
14
14
 
15
15
  def self.config_for(node)
16
+ key = if ENV['GT_SSH_KEY']
17
+ path = File.realpath(File.expand_path(ENV['GT_SSH_KEY']))
18
+ "\n IdentityFile #{path}"
19
+ end
16
20
  host = Gaptool::API.get_host(node)
17
21
  <<-EOF
18
22
  # -- #{node['instance']}
@@ -23,7 +27,7 @@ Host #{host} #{node['instance']}
23
27
  PreferredAuthentications publickey
24
28
  CheckHostIP no
25
29
  StrictHostKeyChecking no
26
- UserKnownHostsFile /dev/null
30
+ UserKnownHostsFile /dev/null#{key}
27
31
  # -- end #{node['instance']}
28
32
  EOF
29
33
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gaptool-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0.pre.beta3
4
+ version: 0.8.0.pre.beta4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Francesco Laurita
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-01-07 00:00:00.000000000 Z
13
+ date: 2016-01-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: json