gaptool-client 0.8.0.pre.alpha9 → 0.8.0.pre.alpha10
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/VERSION +1 -1
- data/gaptool-client.gemspec +1 -1
- data/lib/gaptool_client/api.rb +11 -6
- data/lib/gaptool_client/commands.rb +39 -51
- data/lib/gaptool_client/ssh.rb +3 -3
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fa9dd20c5a3510871c8f608509468eecbe10af1d
|
4
|
+
data.tar.gz: 6b630911606322dcfe84c079d39ac1f84a3519d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e1a964392d1513c5d6737d74be6c80a4c1f7817c49aa41670fd6737a8253330b1410b5fdebee963567c8e6db5859635e8af716ca36a070415f6c9483628280d5
|
7
|
+
data.tar.gz: 97a514d92544ed74fe8be26135623f816d568cd42460a36717289369faf3f7f53feadb5ecf70f37e095e1a88b13a88cd66b326ee5651146a9f635ef6d319b315
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.8.0-
|
1
|
+
0.8.0-alpha10
|
data/gaptool-client.gemspec
CHANGED
@@ -18,6 +18,6 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.add_runtime_dependency 'json', '~> 1.8'
|
19
19
|
s.add_runtime_dependency 'rainbow', '~> 2.0'
|
20
20
|
s.add_runtime_dependency 'clamp', '~> 0.6'
|
21
|
-
s.add_runtime_dependency 'gaptool-api', '
|
21
|
+
s.add_runtime_dependency 'gaptool-api', '>= 0.8.1'
|
22
22
|
s.add_runtime_dependency 'sshkit', '~> 1.8', '>= 1.8.1'
|
23
23
|
end
|
data/lib/gaptool_client/api.rb
CHANGED
@@ -4,7 +4,11 @@ require 'gaptool-api'
|
|
4
4
|
module Gaptool
|
5
5
|
module API
|
6
6
|
def self.client
|
7
|
-
@client ||=
|
7
|
+
@client ||= new
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.new
|
11
|
+
GTAPI::GaptoolServer.new(
|
8
12
|
ENV['GT_USER'], ENV['GT_KEY'],
|
9
13
|
ENV['GT_URL'], ENV['GT_AWS_ZONE']
|
10
14
|
)
|
@@ -15,19 +19,20 @@ module Gaptool
|
|
15
19
|
role = opts[:role]
|
16
20
|
environment = opts[:environment]
|
17
21
|
params = opts[:params]
|
22
|
+
cl = opts[:client] || client
|
18
23
|
|
19
24
|
if instance
|
20
25
|
puts Rainbow('Ignoring role and environment as instance is set').red \
|
21
26
|
if role || environment
|
22
|
-
[
|
27
|
+
[cl.getonenode(instance)]
|
23
28
|
elsif role && environment
|
24
|
-
|
29
|
+
cl.getenvroles(role, environment, params)
|
25
30
|
elsif role
|
26
|
-
|
31
|
+
cl.getrolenodes(role, params)
|
27
32
|
elsif environment
|
28
|
-
|
33
|
+
cl.getenvnodes(environment, params)
|
29
34
|
else
|
30
|
-
|
35
|
+
cl.getallnodes(params)
|
31
36
|
end
|
32
37
|
end
|
33
38
|
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
# rubocop:disable Metrics/LineLength
|
3
|
-
#
|
4
3
|
require 'rainbow'
|
5
4
|
require 'json'
|
6
5
|
require 'clamp'
|
@@ -23,11 +22,21 @@ module Gaptool
|
|
23
22
|
'override chef run_list. recipe[cb::recipe] or role[myrole]. Can be specified multiple times',
|
24
23
|
multivalued: true, attribute_name: 'chef_runlist')
|
25
24
|
option ['--no-terminate'], :flag, 'Add terminate protection'
|
25
|
+
|
26
26
|
def execute
|
27
27
|
no_terminate = no_terminate? ? true : nil
|
28
|
-
Gaptool::API.client.addnode(zone, type, role, environment, nil, security_group,
|
29
|
-
|
30
|
-
|
28
|
+
res = Gaptool::API.client.addnode(zone, type, role, environment, nil, security_group,
|
29
|
+
ami, chef_repo, chef_branch, chef_runlist,
|
30
|
+
no_terminate)
|
31
|
+
if res['result'] == 'error'
|
32
|
+
puts Rainbow(res['message']).red
|
33
|
+
exit 1
|
34
|
+
end
|
35
|
+
|
36
|
+
puts "#{Rainbow('Successfully init instance').green} #{Rainbow(res['instance']).blue}:"
|
37
|
+
res.select { |k, _| k != 'instance' && k != 'secret' }.sort.each do |k, v|
|
38
|
+
puts "- #{k}: #{Rainbow(v).blue}"
|
39
|
+
end
|
31
40
|
end
|
32
41
|
end
|
33
42
|
|
@@ -214,28 +223,16 @@ module Gaptool
|
|
214
223
|
|
215
224
|
nodes = nodes.map do |x|
|
216
225
|
x['whyrun'] = whyrun?
|
217
|
-
x['
|
218
|
-
|
226
|
+
x['attrs'] = {
|
227
|
+
'chef_branch' => chef_branch
|
228
|
+
}.merge(attrs)
|
219
229
|
x
|
220
230
|
end
|
221
231
|
|
222
232
|
pre_hook = proc do |node|
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
runlist = node['chef_runlist']
|
227
|
-
end
|
228
|
-
json = {
|
229
|
-
'role' => node['role'],
|
230
|
-
'environment' => node['environment'],
|
231
|
-
'run_list' => runlist,
|
232
|
-
'apps' => node['apps'] || [],
|
233
|
-
'gaptool' => {
|
234
|
-
'user' => ENV['GT_USER'],
|
235
|
-
'key' => ENV['GT_KEY'],
|
236
|
-
'url' => ENV['GT_URL']
|
237
|
-
}
|
238
|
-
}.merge(node['attrs'])
|
233
|
+
cl = Gaptool::API.new
|
234
|
+
json = cl.getnodeattrs(node['instance'], node['attrs'])
|
235
|
+
json['run_list'] ||= node['chef_runlist'] || ['recipe[main]']
|
239
236
|
git = 'sudo -u admin git'
|
240
237
|
pull = "#{git} fetch --all; #{git} reset --hard origin/`#{git} rev-parse --abbrev-ref HEAD`"
|
241
238
|
wopts = node['whyrun'] ? ' -W ' : ''
|
@@ -246,6 +243,8 @@ module Gaptool
|
|
246
243
|
end
|
247
244
|
upload!(StringIO.new(json.to_json), '/tmp/chef.json')
|
248
245
|
script = <<-EOS
|
246
|
+
#!/bin/bash
|
247
|
+
set -e
|
249
248
|
cd /var/data/admin/ops
|
250
249
|
#{pull}
|
251
250
|
sudo chef-solo -c /var/data/admin/ops/cookbooks/solo.rb -j /tmp/chef.json -E #{node['environment']}#{wopts}
|
@@ -276,8 +275,9 @@ EOS
|
|
276
275
|
option ['-s', '--serial'], :flag, 'Run command serially. Order of execution is unknown.'
|
277
276
|
option ['-c', '--continue-on-errors'], :flag, 'Continue execution even if one or more hosts fail'
|
278
277
|
option ['-b', '--batch-size'], 'SIZE', "How many hosts to run in parallel (defaults to #{Gaptool::SSH::BATCH_SIZE})", default: Gaptool::SSH::BATCH_SIZE
|
278
|
+
option ['-v', '--verbose'], :flag, 'More verbose output'
|
279
279
|
|
280
|
-
def execute
|
280
|
+
def execute
|
281
281
|
attrs = Gaptool::Helpers.split_attrs(attribute_list)
|
282
282
|
if instance
|
283
283
|
n = Gaptool::API.client.getonenode(instance)
|
@@ -307,45 +307,33 @@ EOS
|
|
307
307
|
seen << x['instance']
|
308
308
|
res
|
309
309
|
end
|
310
|
+
|
310
311
|
nodes = nodes.map do |x|
|
311
|
-
x['
|
312
|
-
x['
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
312
|
+
x['verbose'] = verbose?
|
313
|
+
x['attrs'] = {
|
314
|
+
'deploy_apps' => (Set.new(x['apps']) & app_set).to_a,
|
315
|
+
'rollback' => rollback?,
|
316
|
+
'branch' => branch,
|
317
|
+
'migrate' => migrate?
|
318
|
+
}.merge(attrs)
|
317
319
|
x
|
318
320
|
end
|
319
321
|
|
320
322
|
pre_hook = proc do |node|
|
323
|
+
client = Gaptool::API.new
|
324
|
+
json = client.getnodeattrs(node['instance'], node['attrs'])
|
325
|
+
json['run_list'] = node['chef_runlist'] || ['recipe[deploy]']
|
321
326
|
host = "#{node['role']}:#{node['environment']}:#{node['instance']}"
|
322
327
|
puts "#{Rainbow('Deploying apps').cyan} '" + \
|
323
|
-
Rainbow(
|
328
|
+
Rainbow(json['deploy_apps'].join(' ')).green + \
|
324
329
|
"' #{Rainbow('on').cyan} " + \
|
325
330
|
Rainbow(host).green
|
331
|
+
puts "#{Rainbow(host).green}: #{JSON.pretty_generate(json)}" if node['verbose']
|
326
332
|
|
327
|
-
|
328
|
-
runlist = ['recipe[deploy]']
|
329
|
-
elsif node['chef_runlist'].is_a? Array
|
330
|
-
runlist = node['chef_runlist']
|
331
|
-
end
|
332
|
-
json = {
|
333
|
-
'role' => node['role'],
|
334
|
-
'environment' => node['environment'],
|
335
|
-
'run_list' => runlist,
|
336
|
-
'apps' => node['apps'],
|
337
|
-
'deploy_apps' => node['apps_to_deploy'],
|
338
|
-
'rollback' => node['rollback'],
|
339
|
-
'branch' => node['branch'],
|
340
|
-
'migrate' => node['migrate'],
|
341
|
-
'gaptool' => {
|
342
|
-
'user' => ENV['GT_USER'],
|
343
|
-
'key' => ENV['GT_KEY'],
|
344
|
-
'url' => ENV['GT_URL']
|
345
|
-
}
|
346
|
-
}.merge(node['attrs']).to_json
|
347
|
-
upload!(StringIO.new(json), '/tmp/chef.json')
|
333
|
+
upload!(StringIO.new(json.to_json), '/tmp/chef.json')
|
348
334
|
script = <<-EOS
|
335
|
+
#!/bin/bash
|
336
|
+
set -e
|
349
337
|
cd /var/data/admin/ops
|
350
338
|
sudo -u admin git pull
|
351
339
|
sudo chef-solo -c /var/data/admin/ops/cookbooks/solo.rb -j /tmp/chef.json -E #{node['environment']}
|
data/lib/gaptool_client/ssh.rb
CHANGED
@@ -58,14 +58,14 @@ Host #{host} #{node['instance']}
|
|
58
58
|
emark = "# -- end #{node['instance']}"
|
59
59
|
|
60
60
|
if Regexp.new(mark).match(content)
|
61
|
-
puts Rainbow("Updating ssh config for #{get_host(node)}").green if verbose
|
61
|
+
puts Rainbow("Updating ssh config for #{Gaptool::API.get_host(node)}").green if verbose
|
62
62
|
content.gsub!(/#{mark}.*?#{emark}/m, snip.strip)
|
63
63
|
elsif Regexp.new(STOP_MARKER).match(content)
|
64
|
-
puts Rainbow("Adding ssh config for #{get_host(node)}").green if verbose
|
64
|
+
puts Rainbow("Adding ssh config for #{Gaptool::API.get_host(node)}").green if verbose
|
65
65
|
content.gsub!(/#{STOP_MARKER}/m, snip + "\n" + STOP_MARKER)
|
66
66
|
else
|
67
67
|
puts Rainbow('No gt ssh config found: please run gt ssh-config').yellow
|
68
|
-
puts Rainbow("Adding ssh config for #{get_host(node)}").green if verbose
|
68
|
+
puts Rainbow("Adding ssh config for #{Gaptool::API.get_host(node)}").green if verbose
|
69
69
|
content = <<-EOF
|
70
70
|
#{content}
|
71
71
|
#{START_MARKER}
|
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.
|
4
|
+
version: 0.8.0.pre.alpha10
|
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-
|
13
|
+
date: 2016-01-04 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: json
|
@@ -58,16 +58,16 @@ dependencies:
|
|
58
58
|
name: gaptool-api
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- - "
|
61
|
+
- - ">="
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version:
|
63
|
+
version: 0.8.1
|
64
64
|
type: :runtime
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
|
-
- - "
|
68
|
+
- - ">="
|
69
69
|
- !ruby/object:Gem::Version
|
70
|
-
version:
|
70
|
+
version: 0.8.1
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: sshkit
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|