nex_client 0.14.0 → 0.15.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -2
- data/lib/nex_client.rb +1 -0
- data/lib/nex_client/cli.rb +54 -3
- data/lib/nex_client/commands/apps.rb +2 -1
- data/lib/nex_client/commands/cube_instances.rb +24 -5
- data/lib/nex_client/commands/helpers.rb +18 -0
- data/lib/nex_client/cube_instance.rb +6 -3
- data/lib/nex_client/event.rb +7 -0
- data/lib/nex_client/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e6596e2a8eccfe2e5d1a0054ecf642bca67d6d56
|
4
|
+
data.tar.gz: bbf86956bcc6faac34a728b6db4278de2d93b213
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e868e2ddcd3176f509aacfd58902ca31273ba97c998603242fff6875eff33d234abb4f177e93aeeefe2f574035023631c42ab2aa7b71aaa6b0e7638a6545775
|
7
|
+
data.tar.gz: 079862bc6e1112454e209b589fdb4ae167e5658bd381656a8e2551d644a531b84ad83aab4ce4c4c2e3ddb7bc8f465423011d8f89a5de48c7ecf59b8702d003a7
|
data/README.md
CHANGED
@@ -24,9 +24,13 @@ gem update nex_client
|
|
24
24
|
|
25
25
|
Configure your environment and get started with the tool
|
26
26
|
```bash
|
27
|
-
#
|
28
|
-
export NEX_API_KEY=my-nex-key
|
27
|
+
# Setup environment
|
29
28
|
export NEX_ENV=<development|uat|production> # optional - defaulting to 'uat' at the moment
|
29
|
+
# OR
|
30
|
+
export NEX_ENDPOINT=https://api.somenexhost.com
|
31
|
+
|
32
|
+
# Set authentication
|
33
|
+
export NEX_API_KEY=my-nex-key
|
30
34
|
|
31
35
|
# Display all available commands
|
32
36
|
nex-cli --help
|
data/lib/nex_client.rb
CHANGED
@@ -11,6 +11,7 @@ module NexClient
|
|
11
11
|
autoload :CubeInstance, 'nex_client/cube_instance'
|
12
12
|
autoload :CubeTemplate, 'nex_client/cube_template'
|
13
13
|
autoload :Domain, 'nex_client/domain'
|
14
|
+
autoload :Event, 'nex_client/event'
|
14
15
|
autoload :GatewayRack, 'nex_client/gateway_rack'
|
15
16
|
autoload :Me, 'nex_client/me'
|
16
17
|
autoload :Organization, 'nex_client/organization'
|
data/lib/nex_client/cli.rb
CHANGED
@@ -65,6 +65,19 @@ module NexClient
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
+
command :'addons:events' do |c|
|
69
|
+
c.syntax = 'nex-cli addons:events APP_NAME [options]'
|
70
|
+
c.summary = 'Gather system events'
|
71
|
+
c.description = 'Gather system events for a given addon'
|
72
|
+
c.example 'display events for myaddon', 'nex-cli addons:events myaddon'
|
73
|
+
c.example 'display 100 events for myaddon', 'nex-cli addons:events --tail 100 myaddon'
|
74
|
+
c.option '--tail NUMBER', String, 'number of events to retrieve (default: 50)'
|
75
|
+
c.option '--type TYPE', String, 'filter events on type (e.g. status, container)'
|
76
|
+
c.action do |args, options|
|
77
|
+
NexClient::Commands::Addons.events(args,options)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
68
81
|
command :'addons:info' do |c|
|
69
82
|
c.syntax = 'nex-cli addons:info ADDON_NAME [options]'
|
70
83
|
c.summary = 'Show information about an addon'
|
@@ -134,7 +147,7 @@ module NexClient
|
|
134
147
|
c.option '--status <active|terminated>', String, 'list all apps in a given status'
|
135
148
|
c.option '--ssl', 'list all apps with SSL enabled'
|
136
149
|
c.option '--storage', 'list all apps with persistent storage'
|
137
|
-
c.option '--owner HANDLE', 'list all apps for the specified owner'
|
150
|
+
c.option '--owner HANDLE', 'list all apps for the specified owner. Use "@self" to display your apps including any organization you are part of'
|
138
151
|
c.option '--image IMAGE', 'list the app with this image'
|
139
152
|
c.option '--tags TAG_LIST', Array, 'comma separated list of tags to filter on'
|
140
153
|
c.action do |args, options|
|
@@ -184,6 +197,19 @@ module NexClient
|
|
184
197
|
end
|
185
198
|
end
|
186
199
|
|
200
|
+
command :'apps:events' do |c|
|
201
|
+
c.syntax = 'nex-cli apps:events APP_NAME [options]'
|
202
|
+
c.summary = 'Gather system events'
|
203
|
+
c.description = 'Gather system events for a given app'
|
204
|
+
c.example 'display events for myapp', 'nex-cli apps:events myapp'
|
205
|
+
c.example 'display 100 events for myapp', 'nex-cli apps:events --tail 100 myapp'
|
206
|
+
c.option '--tail NUMBER', String, 'number of events to retrieve (default: 50)'
|
207
|
+
c.option '--type TYPE', String, 'filter events on type (e.g. status, container)'
|
208
|
+
c.action do |args, options|
|
209
|
+
NexClient::Commands::Apps.events(args,options)
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
187
213
|
command :'apps:info' do |c|
|
188
214
|
c.syntax = 'nex-cli apps:info APP_NAME [options]'
|
189
215
|
c.summary = 'Show information about an app'
|
@@ -336,8 +362,8 @@ module NexClient
|
|
336
362
|
c.syntax = 'nex-cli cubes [options]'
|
337
363
|
c.summary = 'Manage cubes [platform admin]'
|
338
364
|
c.description = 'List, create, manage, scale and delete cubes'
|
339
|
-
c.example 'list all
|
340
|
-
c.example 'list all
|
365
|
+
c.example 'list all cubes', 'nex-cli cubes'
|
366
|
+
c.example 'list all cubes for owner myorg', 'nex-cli cubes --owner myorg'
|
341
367
|
c.example 'list all terminated cubes', 'nex-cli cubes --status terminated'
|
342
368
|
c.example 'list all terminated cubes for owner myorg', 'nex-cli cubes --status terminated --owner myorg'
|
343
369
|
c.example 'list cube xyz.domain.co', 'nex-cli cubes --name xyz.domain.co'
|
@@ -356,6 +382,31 @@ module NexClient
|
|
356
382
|
end
|
357
383
|
end
|
358
384
|
|
385
|
+
command :'cubes:events' do |c|
|
386
|
+
c.syntax = 'nex-cli cubes:events APP_NAME [options]'
|
387
|
+
c.summary = 'Gather system events'
|
388
|
+
c.description = 'Gather system events for a given cube'
|
389
|
+
c.example 'display events for mycube', 'nex-cli cubes:events mycube'
|
390
|
+
c.example 'display 100 events for mycube', 'nex-cli cubes:events --tail 100 mycube'
|
391
|
+
c.option '--tail NUMBER', String, 'number of events to retrieve (default: 50)'
|
392
|
+
c.option '--type TYPE', String, 'filter events on type (e.g. status, container)'
|
393
|
+
c.action do |args, options|
|
394
|
+
NexClient::Commands::CubeInstances.events(args,options)
|
395
|
+
end
|
396
|
+
end
|
397
|
+
|
398
|
+
command :'cubes:logs' do |c|
|
399
|
+
c.syntax = 'nex-cli cubes:logs APP_NAME [options]'
|
400
|
+
c.summary = 'Gather cube logs'
|
401
|
+
c.description = 'Gather container logs for a given cube'
|
402
|
+
c.example 'gather logs for mycube', 'nex-cli cubes:logs mycube'
|
403
|
+
c.example 'gather logs for mycube with a tail of 50', 'nex-cli cubes:logs --tail 50 mycube'
|
404
|
+
c.option '--tail NUMBER', String, 'number of lines to retrieve (default: 30)'
|
405
|
+
c.action do |args, options|
|
406
|
+
NexClient::Commands::CubeInstances.logs(args,options)
|
407
|
+
end
|
408
|
+
end
|
409
|
+
|
359
410
|
command :'cubes:restart' do |c|
|
360
411
|
c.syntax = 'nex-cli cubes:restart CUBE_ID'
|
361
412
|
c.summary = 'Restart a cube'
|
@@ -24,7 +24,7 @@ module NexClient
|
|
24
24
|
filters[:status] = opts.status || ['active','restarting']
|
25
25
|
filters[:ssl_enabled] = opts.ssl if opts.ssl.present?
|
26
26
|
filters[:persistent_storage] = opts.storage if opts.storage.present?
|
27
|
-
filters[:'owner.handle'] = opts.owner
|
27
|
+
filters[:'owner.handle'] = opts.owner if opts.owner.present?
|
28
28
|
filters[:image] = opts.image if opts.image.present?
|
29
29
|
filters[:tags] = opts.tags if opts.tags.present?
|
30
30
|
|
@@ -78,6 +78,7 @@ module NexClient
|
|
78
78
|
Addons.display_addons(e.addons.select { |a| a.status == 'active'})
|
79
79
|
end
|
80
80
|
|
81
|
+
# Retrieve application logs from all containers
|
81
82
|
def self.logs(args,opts)
|
82
83
|
name = args.first
|
83
84
|
e = NexClient::App.find(name: name).first
|
@@ -5,11 +5,11 @@ module NexClient
|
|
5
5
|
extend Helpers
|
6
6
|
|
7
7
|
CUBES_TITLE = "Cube Instances".colorize(:blue)
|
8
|
-
CUBES_HEADERS = ['id','status','
|
8
|
+
CUBES_HEADERS = ['id','status','container','region','storage','ip','port','cluster'].map(&:upcase)
|
9
9
|
|
10
10
|
def self.list(args,opts)
|
11
11
|
filters = {}
|
12
|
-
filters[:status] = opts.status
|
12
|
+
filters[:status] = opts.status if opts.status.present?
|
13
13
|
filters[:soa_enabled] = opts.soa if opts.soa.present?
|
14
14
|
filters[:ssl_enabled] = opts.ssl if opts.ssl.present?
|
15
15
|
filters[:persistent_storage] = opts.storage if opts.storage.present?
|
@@ -34,6 +34,22 @@ module NexClient
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
+
# Retrieve application logs from all containers
|
38
|
+
def self.logs(args,opts)
|
39
|
+
name = args.first
|
40
|
+
e = NexClient::CubeInstance.find(uuid: name).first
|
41
|
+
|
42
|
+
# Display error
|
43
|
+
unless e
|
44
|
+
error("Error! Could not find cube: #{name}")
|
45
|
+
return false
|
46
|
+
end
|
47
|
+
|
48
|
+
# Retrieve logs and display them
|
49
|
+
logs = e.logs(tail: opts.tail).first
|
50
|
+
self.display_logs(logs.log_ret)
|
51
|
+
end
|
52
|
+
|
37
53
|
def self.trigger_action(action,args,opts)
|
38
54
|
id = args.first
|
39
55
|
e = NexClient::CubeInstance.find(uuid: id).first
|
@@ -87,13 +103,11 @@ module NexClient
|
|
87
103
|
[
|
88
104
|
record.uuid,
|
89
105
|
record.status,
|
106
|
+
record.container_status,
|
90
107
|
record.region,
|
91
|
-
record.ssl_enabled,
|
92
108
|
record.persistent_storage,
|
93
|
-
record.soa_enabled,
|
94
109
|
record.ip_address || '-',
|
95
110
|
record.port || '-',
|
96
|
-
dns,
|
97
111
|
cluster
|
98
112
|
]
|
99
113
|
end
|
@@ -106,6 +120,11 @@ module NexClient
|
|
106
120
|
return '-' unless o = record.cluster
|
107
121
|
"#{o.type.singularize}:#{o.name}"
|
108
122
|
end
|
123
|
+
|
124
|
+
def self.display_logs(logs)
|
125
|
+
puts logs
|
126
|
+
puts "\n"
|
127
|
+
end
|
109
128
|
end
|
110
129
|
end
|
111
130
|
end
|
@@ -31,6 +31,24 @@ module NexClient
|
|
31
31
|
puts "\n"
|
32
32
|
end
|
33
33
|
|
34
|
+
# Retrieve resource events
|
35
|
+
def events(args,opts)
|
36
|
+
filters = {}
|
37
|
+
filters[:'source.name'] = args.first
|
38
|
+
filters[:event] = opts.type if opts.type
|
39
|
+
|
40
|
+
events = NexClient::Event.paginate(per_page: opts.tail || 50).where(filters).order(created_at: :desc)
|
41
|
+
self.display_events(events.to_a)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Display a list of events
|
45
|
+
def display_events(events)
|
46
|
+
events.sort_by { |e| e.id }.each do |e|
|
47
|
+
puts [e.created_at,e.event.ljust(12,' '),e.level.ljust(6,' '),e.message].join(" | ")
|
48
|
+
end
|
49
|
+
puts "\n"
|
50
|
+
end
|
51
|
+
|
34
52
|
# Perform an SSH command based on a template
|
35
53
|
# Fetch current user key and username
|
36
54
|
def perform_ssh_cmd(ssh_cmd_template)
|
@@ -9,13 +9,16 @@ module NexClient
|
|
9
9
|
property :persistent_storage, type: :boolean
|
10
10
|
property :port, type: :int
|
11
11
|
|
12
|
-
#
|
12
|
+
# GET <api_root>/cube_instances/:id/logs
|
13
|
+
custom_endpoint :logs, on: :member, request_method: :get
|
14
|
+
|
15
|
+
# PATCH <api_root>/cube_instances/:id/restart
|
13
16
|
custom_endpoint :restart, on: :member, request_method: :patch
|
14
17
|
|
15
|
-
# PATCH <api_root>/
|
18
|
+
# PATCH <api_root>/cube_instances/:id/start
|
16
19
|
custom_endpoint :start, on: :member, request_method: :patch
|
17
20
|
|
18
|
-
# PATCH <api_root>/
|
21
|
+
# PATCH <api_root>/cube_instances/:id/stop
|
19
22
|
custom_endpoint :stop, on: :member, request_method: :patch
|
20
23
|
end
|
21
24
|
end
|
data/lib/nex_client/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nex_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.15.0.pre1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arnaud Lachaume
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json_api_client
|
@@ -139,6 +139,7 @@ files:
|
|
139
139
|
- lib/nex_client/cube_instance.rb
|
140
140
|
- lib/nex_client/cube_template.rb
|
141
141
|
- lib/nex_client/domain.rb
|
142
|
+
- lib/nex_client/event.rb
|
142
143
|
- lib/nex_client/gateway_rack.rb
|
143
144
|
- lib/nex_client/me.rb
|
144
145
|
- lib/nex_client/organization.rb
|
@@ -166,9 +167,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
166
167
|
version: '0'
|
167
168
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
169
|
requirements:
|
169
|
-
- - "
|
170
|
+
- - ">"
|
170
171
|
- !ruby/object:Gem::Version
|
171
|
-
version:
|
172
|
+
version: 1.3.1
|
172
173
|
requirements: []
|
173
174
|
rubyforge_project:
|
174
175
|
rubygems_version: 2.5.1
|