gaptool-client 0.8.0.pre.alpha9 → 0.8.0.pre.alpha10
Sign up to get free protection for your applications and to get access to all the features.
- 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
|