gaptool-client 0.7.1 → 0.7.2

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/lib/gaptool-client.rb +36 -8
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 608c2613b46db592bb9a82751766202e2910de78
4
- data.tar.gz: a60442bdb7c46051498b0d087e35cc907d814df7
3
+ metadata.gz: 983e7534410d558b995cd4b04dbfdf5d1e8a70de
4
+ data.tar.gz: 9dd849f4d95fe5ee23dd659a4d39437815abd82b
5
5
  SHA512:
6
- metadata.gz: 246fda59b54dca5a2b88881f00a28f89d32b01c561b71b936d5636c8e9d182eb35cd6e706c3318d1beb2a6ba9d7c5fc4a8f1ea14ce62c81df0d75e2819fc108d
7
- data.tar.gz: 5ff68d290e765c70a619600559b0f64675ec83a352c1fd7989f25d153e8ff61b51d60bf50b90cf42da6e658b989f6eb80af9dda678f68f805621a519a361d5dd
6
+ metadata.gz: 3e005e45f247c949e9bb47dcdf7f73ade739b5f08d7358f9b57752bc5b9e817eb723391e1d9eb4d688d1a022f72b5cb300696a705ff3aeeb67f351f16ff03bde
7
+ data.tar.gz: 42a72d4765e4f368c54b4e74dbfcc7e3937679e6c8f861ab83e333234cd144f56e0c3063c39a1d61be248d92f0a8778803006cd62ee8f29e1fd7e007d11b429a
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.1
1
+ 0.7.2
@@ -6,6 +6,7 @@ require 'json'
6
6
  require 'clamp'
7
7
  require 'net/ssh'
8
8
  require 'net/scp'
9
+ require 'set'
9
10
 
10
11
  def infohelper(nodes, parseable, grepable)
11
12
  if parseable
@@ -314,12 +315,12 @@ module Gaptool
314
315
  end
315
316
 
316
317
  class DeployCommand < Clamp::Command
317
- option ["-a", "--app"], "APP", "Application to deploy", :required => true
318
+ option ["-a", "--app"], "APP", "Application(s) to deploy (can be set multiple times)", :required => true, :multivalued => true
318
319
  option ["-m", "--migrate"], :flag, "Toggle running migrations"
319
320
  option ["-e", "--environment"], "ENVIRONMENT", "Which environment, e.g. production", :required => true
320
321
  option ["-b", "--branch"], "BRANCH", "Git branch to deploy, default is master", :required => false
321
322
  option ["-r", "--rollback"], :flag, "Toggle this to rollback last deploy"
322
- option ["-i", "--instance"], "INSTANCE", "Instance ID, e.g. i-12345678", :required => false
323
+ option ["-i", "--instance"], "INSTANCE", "Instance ID, e.g. i-12345678. If set, all applications MUST be hosted on this node.", :required => false
323
324
  option ["-A", "--attribute"], "ATTRIBUTE", "Pass one or more parameters to the deploy recipe in recipe.attr=value format", :multivalued => true
324
325
  option ['-H', '--hidden'], :flag, 'Display hidden hosts'
325
326
 
@@ -329,15 +330,43 @@ module Gaptool
329
330
  n = $api.getonenode(instance)
330
331
  if n['environment'] != environment
331
332
  abort "Instance #{instance} is not in environment #{environment}"
332
- elsif !n['apps'].include?(app)
333
- abort "Instance #{instance} does not host #{app} in env #{environment}"
333
+ else
334
+ app_list.each do |app|
335
+ if !n['apps'].include?(app)
336
+ abort "Instance #{instance} does not host #{app} in env #{environment}"
337
+ end
338
+ end
334
339
  end
335
340
  nodes = [n]
341
+
336
342
  else
337
343
  params = hidden? ? {hidden: true} : {}
338
- nodes = $api.getappnodes(app, environment, params)
344
+ nodes = []
345
+ app_list.each do |app|
346
+ nodes.concat($api.getappnodes(app, environment, params))
347
+ end
348
+ end
349
+
350
+ # dedup nodes
351
+ seen = Set.new
352
+ app_set = Set.new(app_list)
353
+ nodes = nodes.select do |x|
354
+ res = !seen.include?(x['instance']);
355
+ seen << x['instance'];
356
+ res
357
+ end.map do |x|
358
+ x['apps'] = eval(x['apps'])
359
+ x['apps_to_deploy'] = (Set.new(x['apps']) & app_set).to_a
360
+ x
339
361
  end
362
+
340
363
  nodes.peach do |node|
364
+ host = "#{node['role']}:#{node['environment']}:#{node['instance']}"
365
+ puts "#{Rainbow("Deploying apps").cyan} '" + \
366
+ Rainbow(node['apps_to_deploy'].join(" ")).green + \
367
+ "' #{Rainbow("on").cyan} " + \
368
+ Rainbow(host).green
369
+
341
370
  if node['chef_runlist'].nil?
342
371
  runlist = ['recipe[deploy]']
343
372
  elsif node['chef_runlist'].is_a? Array
@@ -355,9 +384,8 @@ module Gaptool
355
384
  'instance' => node['instance'],
356
385
  'zone' => node['zone'],
357
386
  'itype' => node['itype'],
358
- 'apps' => eval(node['apps']),
359
- 'app_name' => app,
360
- 'app' => app,
387
+ 'apps' => node['apps'],
388
+ 'deploy_apps' => node['apps_to_deploy'],
361
389
  'rollback' => rollback?,
362
390
  'branch' => branch || 'master',
363
391
  'migrate' => migrate?
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.7.1
4
+ version: 0.7.2
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: 2015-06-03 00:00:00.000000000 Z
13
+ date: 2015-06-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: json