morpheus-cli 0.9.9 → 0.9.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/lib/morpheus/api/api_client.rb +4 -0
  3. data/lib/morpheus/api/app_templates_interface.rb +74 -0
  4. data/lib/morpheus/api/instance_types_interface.rb +9 -0
  5. data/lib/morpheus/api/instances_interface.rb +16 -0
  6. data/lib/morpheus/api/roles_interface.rb +37 -1
  7. data/lib/morpheus/cli.rb +4 -1
  8. data/lib/morpheus/cli/accounts.rb +82 -58
  9. data/lib/morpheus/cli/app_templates.rb +908 -0
  10. data/lib/morpheus/cli/apps.rb +226 -187
  11. data/lib/morpheus/cli/cli_command.rb +57 -30
  12. data/lib/morpheus/cli/clouds.rb +50 -65
  13. data/lib/morpheus/cli/deployments.rb +18 -33
  14. data/lib/morpheus/cli/deploys.rb +1 -3
  15. data/lib/morpheus/cli/groups.rb +54 -38
  16. data/lib/morpheus/cli/hosts.rb +86 -80
  17. data/lib/morpheus/cli/instance_types.rb +42 -29
  18. data/lib/morpheus/cli/instances.rb +192 -69
  19. data/lib/morpheus/cli/key_pairs.rb +70 -87
  20. data/lib/morpheus/cli/license.rb +7 -9
  21. data/lib/morpheus/cli/load_balancers.rb +23 -53
  22. data/lib/morpheus/cli/mixins/accounts_helper.rb +7 -8
  23. data/lib/morpheus/cli/mixins/print_helper.rb +67 -0
  24. data/lib/morpheus/cli/mixins/provisioning_helper.rb +461 -0
  25. data/lib/morpheus/cli/option_types.rb +71 -18
  26. data/lib/morpheus/cli/roles.rb +725 -34
  27. data/lib/morpheus/cli/security_group_rules.rb +50 -70
  28. data/lib/morpheus/cli/security_groups.rb +61 -48
  29. data/lib/morpheus/cli/shell.rb +123 -14
  30. data/lib/morpheus/cli/tasks.rb +24 -59
  31. data/lib/morpheus/cli/users.rb +86 -71
  32. data/lib/morpheus/cli/version.rb +1 -1
  33. data/lib/morpheus/cli/virtual_images.rb +21 -51
  34. data/lib/morpheus/cli/workflows.rb +14 -29
  35. data/lib/morpheus/ext/nil_class.rb +5 -0
  36. data/lib/morpheus/formatters.rb +1 -0
  37. metadata +7 -3
  38. data/lib/morpheus/cli/error_handler.rb +0 -44
@@ -1,5 +1,5 @@
1
1
  module Morpheus
2
2
  module Cli
3
- VERSION = "0.9.9"
3
+ VERSION = "0.9.10"
4
4
  end
5
5
  end
@@ -1,14 +1,13 @@
1
1
  # require 'yaml'
2
2
  require 'io/console'
3
3
  require 'rest_client'
4
- require 'term/ansicolor'
5
4
  require 'optparse'
6
5
  require 'table_print'
7
6
  require 'morpheus/cli/cli_command'
8
7
 
9
8
  class Morpheus::Cli::VirtualImages
10
9
  include Morpheus::Cli::CliCommand
11
- include Term::ANSIColor
10
+
12
11
  def initialize()
13
12
  @appliance_name, @appliance_url = Morpheus::Cli::Remote.active_appliance
14
13
  end
@@ -25,7 +24,7 @@ class Morpheus::Cli::VirtualImages
25
24
  @virtual_images_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).virtual_images
26
25
 
27
26
  if @access_token.empty?
28
- print red,bold, "\nInvalid Credentials. Unable to acquire access token. Please verify your credentials and try again.\n\n",reset
27
+ print_red_alert "Invalid Credentials. Unable to acquire access token. Please verify your credentials and try again."
29
28
  exit 1
30
29
  end
31
30
  end
@@ -73,20 +72,14 @@ class Morpheus::Cli::VirtualImages
73
72
  opts.on( '', '--system', "System Images" ) do |val|
74
73
  options[:filterType] = 'System'
75
74
  end
76
- Morpheus::Cli::CliCommand.genericOptions(opts,options)
75
+ build_common_options(opts, options, [:list, :json, :remote])
77
76
  end
78
77
  optparse.parse(args)
79
78
  connect(options)
80
79
  begin
81
80
  params = {}
82
- if options[:offset]
83
- params[:offset] = options[:offset]
84
- end
85
- if options[:max]
86
- params[:max] = options[:max]
87
- end
88
- if options[:phrase]
89
- params[:phrase] = options[:phrase]
81
+ [:phrase, :offset, :max, :sort, :direction].each do |k|
82
+ params[k] = options[k] unless options[k].nil?
90
83
  end
91
84
  if options[:imageType]
92
85
  params[:imageType] = options[:imageType]
@@ -114,12 +107,7 @@ class Morpheus::Cli::VirtualImages
114
107
 
115
108
 
116
109
  rescue RestClient::Exception => e
117
- if e.response.code == 400
118
- error = JSON.parse(e.response.to_s)
119
- ::Morpheus::Cli::ErrorHandler.new.print_errors(error,options)
120
- else
121
- puts "Error Communicating with the Appliance. Please try again later. #{e}"
122
- end
110
+ print_rest_exception(e, options)
123
111
  exit 1
124
112
  end
125
113
  end
@@ -129,7 +117,7 @@ class Morpheus::Cli::VirtualImages
129
117
  options = {}
130
118
  optparse = OptionParser.new do|opts|
131
119
  opts.banner = "Usage: morpheus virtual-images details [name]"
132
- Morpheus::Cli::CliCommand.genericOptions(opts,options)
120
+ build_common_options(opts, options, [:json, :remote])
133
121
  end
134
122
  if args.count < 1
135
123
  puts "\n#{optparse.banner}\n\n"
@@ -152,12 +140,7 @@ class Morpheus::Cli::VirtualImages
152
140
  print reset,"\n\n"
153
141
  end
154
142
  rescue RestClient::Exception => e
155
- if e.response.code == 400
156
- error = JSON.parse(e.response.to_s)
157
- ::Morpheus::Cli::ErrorHandler.new.print_errors(error,options)
158
- else
159
- puts "Error Communicating with the Appliance. Please try again later. #{e}"
160
- end
143
+ print_rest_exception(e, options)
161
144
  exit 1
162
145
  end
163
146
  end
@@ -168,7 +151,7 @@ class Morpheus::Cli::VirtualImages
168
151
  account_name = nil
169
152
  optparse = OptionParser.new do|opts|
170
153
  opts.banner = "Usage: morpheus tasks update [task] [options]"
171
- Morpheus::Cli::CliCommand.genericOptions(opts,options)
154
+ build_common_options(opts, options, [:options, :json, :remote])
172
155
  end
173
156
  if args.count < 1
174
157
  puts "\n#{optparse.banner}\n\n"
@@ -218,12 +201,7 @@ class Morpheus::Cli::VirtualImages
218
201
  print "\n", cyan, "Task #{response['task']['name']} updated", reset, "\n\n"
219
202
  end
220
203
  rescue RestClient::Exception => e
221
- if e.response.code == 400
222
- error = JSON.parse(e.response.to_s)
223
- ::Morpheus::Cli::ErrorHandler.new.print_errors(error)
224
- else
225
- puts "Error Communicating with the Appliance. Please try again later. #{e}"
226
- end
204
+ print_rest_exception(e, options)
227
205
  exit 1
228
206
  end
229
207
  end
@@ -233,7 +211,7 @@ class Morpheus::Cli::VirtualImages
233
211
  options = {}
234
212
  optparse = OptionParser.new do|opts|
235
213
  opts.banner = "Usage: morpheus virtual-images lb-types"
236
- Morpheus::Cli::CliCommand.genericOptions(opts,options)
214
+ build_common_options(opts, options, [:json, :remote])
237
215
  end
238
216
  optparse.parse(args)
239
217
  connect(options)
@@ -258,13 +236,8 @@ class Morpheus::Cli::VirtualImages
258
236
  end
259
237
 
260
238
 
261
- rescue => e
262
- if e.response.code == 400
263
- error = JSON.parse(e.response.to_s)
264
- ::Morpheus::Cli::ErrorHandler.new.print_errors(error,options)
265
- else
266
- puts "Error Communicating with the Appliance. Please try again later. #{e}"
267
- end
239
+ rescue RestClient::Exception => e
240
+ print_rest_exception(e, options)
268
241
  exit 1
269
242
  end
270
243
  end
@@ -278,7 +251,7 @@ class Morpheus::Cli::VirtualImages
278
251
  opts.on( '-t', '--type LB_TYPE', "Lb Type" ) do |val|
279
252
  lb_type_name = val
280
253
  end
281
- Morpheus::Cli::CliCommand.genericOptions(opts,options)
254
+ build_common_options(opts, options, [:options, :json, :remote])
282
255
  end
283
256
  if args.count < 1
284
257
  puts "\n#{optparse.banner}\n\n"
@@ -307,7 +280,7 @@ class Morpheus::Cli::VirtualImages
307
280
  print "\n", cyan, "LB #{json_response['virtualImage']['name']} created successfully", reset, "\n\n"
308
281
  end
309
282
  rescue RestClient::Exception => e
310
- ::Morpheus::Cli::ErrorHandler.new.print_rest_exception(e)
283
+ print_rest_exception(e, options)
311
284
  exit 1
312
285
  end
313
286
  end
@@ -317,7 +290,7 @@ class Morpheus::Cli::VirtualImages
317
290
  options = {}
318
291
  optparse = OptionParser.new do|opts|
319
292
  opts.banner = "Usage: morpheus virtual-images remove [name]"
320
- Morpheus::Cli::CliCommand.genericOptions(opts,options)
293
+ build_common_options(opts, options, [:auto_confirm, :json, :remote])
321
294
  end
322
295
  if args.count < 1
323
296
  puts "\n#{optparse.banner}\n\n"
@@ -328,7 +301,9 @@ class Morpheus::Cli::VirtualImages
328
301
  begin
329
302
  image = find_image_by_name(image_name)
330
303
  exit 1 if image.nil?
331
- exit unless Morpheus::Cli::OptionTypes.confirm("Are you sure you want to delete the virtual image #{image['name']}?")
304
+ unless options[:yes] || Morpheus::Cli::OptionTypes.confirm("Are you sure you want to delete the virtual image #{image['name']}?")
305
+ exit
306
+ end
332
307
  json_response = @virtual_images_interface.destroy(image['id'])
333
308
  if options[:json]
334
309
  print JSON.pretty_generate(json_response)
@@ -336,12 +311,7 @@ class Morpheus::Cli::VirtualImages
336
311
  print "\n", cyan, "Virtual Image #{image['name']} removed", reset, "\n\n"
337
312
  end
338
313
  rescue RestClient::Exception => e
339
- if e.response.code == 400
340
- error = JSON.parse(e.response.to_s)
341
- ::Morpheus::Cli::ErrorHandler.new.print_errors(error,options)
342
- else
343
- puts "Error Communicating with the Appliance. Please try again later. #{e}"
344
- end
314
+ print_rest_exception(e, options)
345
315
  exit 1
346
316
  end
347
317
  end
@@ -382,4 +352,4 @@ private
382
352
  return result
383
353
  end
384
354
 
385
- end
355
+ end
@@ -1,14 +1,13 @@
1
1
  # require 'yaml'
2
2
  require 'io/console'
3
3
  require 'rest_client'
4
- require 'term/ansicolor'
5
4
  require 'optparse'
6
5
  require 'table_print'
7
6
  require 'morpheus/cli/cli_command'
8
7
 
9
8
  class Morpheus::Cli::Workflows
10
9
  include Morpheus::Cli::CliCommand
11
- include Term::ANSIColor
10
+
12
11
  def initialize()
13
12
  @appliance_name, @appliance_url = Morpheus::Cli::Remote.active_appliance
14
13
  end
@@ -25,7 +24,7 @@ class Morpheus::Cli::Workflows
25
24
  @tasks_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).tasks
26
25
  @task_sets_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).task_sets
27
26
  if @access_token.empty?
28
- print red,bold, "\nInvalid Credentials. Unable to acquire access token. Please verify your credentials and try again.\n\n",reset
27
+ print_red_alert "Invalid Credentials. Unable to acquire access token. Please verify your credentials and try again."
29
28
  exit 1
30
29
  end
31
30
  end
@@ -56,20 +55,14 @@ class Morpheus::Cli::Workflows
56
55
  options = {}
57
56
  optparse = OptionParser.new do|opts|
58
57
  opts.banner = "Usage: morpheus workflows list [-s] [-o] [-m]"
59
- Morpheus::Cli::CliCommand.genericOptions(opts,options)
58
+ build_common_options(opts, options, [:list, :json, :remote])
60
59
  end
61
60
  optparse.parse(args)
62
61
  connect(options)
63
62
  begin
64
63
  params = {}
65
- if options[:offset]
66
- params[:offset] = options[:offset]
67
- end
68
- if options[:max]
69
- params[:max] = options[:max]
70
- end
71
- if options[:phrase]
72
- params[:phrase] = options[:phrase]
64
+ [:phrase, :offset, :max, :sort, :direction].each do |k|
65
+ params[k] = options[k] unless options[k].nil?
73
66
  end
74
67
  json_response = @task_sets_interface.get(params)
75
68
  if options[:json]
@@ -89,7 +82,7 @@ class Morpheus::Cli::Workflows
89
82
  print reset,"\n\n"
90
83
  end
91
84
  rescue RestClient::Exception => e
92
- ::Morpheus::Cli::ErrorHandler.new.print_rest_exception(e)
85
+ print_rest_exception(e, options)
93
86
  exit 1
94
87
  end
95
88
  end
@@ -102,7 +95,7 @@ class Morpheus::Cli::Workflows
102
95
  opts.on("--tasks x,y,z", Array, "List of tasks to run in order") do |list|
103
96
  options[:task_names]= list
104
97
  end
105
- Morpheus::Cli::CliCommand.genericOptions(opts,options)
98
+ build_common_options(opts, options, [:json, :remote])
106
99
  end
107
100
  if args.count < 1
108
101
  puts "\n#{optparse.banner}\n\n"
@@ -124,12 +117,7 @@ class Morpheus::Cli::Workflows
124
117
  print "\n", cyan, "Workflow #{json_response['taskSet']['name']} created successfully", reset, "\n\n"
125
118
  end
126
119
  rescue RestClient::Exception => e
127
- if e.response.code == 400
128
- error = JSON.parse(e.response.to_s)
129
- ::Morpheus::Cli::ErrorHandler.new.print_errors(error,options)
130
- else
131
- puts "Error Communicating with the Appliance. Please try again later. #{e}"
132
- end
120
+ print_rest_exception(e, options)
133
121
  exit 1
134
122
  end
135
123
  end
@@ -142,7 +130,7 @@ class Morpheus::Cli::Workflows
142
130
  options = {}
143
131
  optparse = OptionParser.new do|opts|
144
132
  opts.banner = "Usage: morpheus workflows remove [name]"
145
- Morpheus::Cli::CliCommand.genericOptions(opts,options)
133
+ build_common_options(opts, options, [:auto_confirm, :json, :remote])
146
134
  end
147
135
  if args.count < 1
148
136
  puts "\n#{optparse.banner}\n\n"
@@ -153,7 +141,9 @@ class Morpheus::Cli::Workflows
153
141
  begin
154
142
  workflow = find_workflow_by_name_or_code_or_id(workflow_name)
155
143
  exit 1 if workflow.nil?
156
- exit unless Morpheus::Cli::OptionTypes.confirm("Are you sure you want to delete the workflow #{workflow['name']}?")
144
+ unless options[:yes] || Morpheus::Cli::OptionTypes.confirm("Are you sure you want to delete the workflow #{workflow['name']}?")
145
+ exit 1
146
+ end
157
147
  json_response = @tasks_interface.destroy(task['id'])
158
148
  if options[:json]
159
149
  print JSON.pretty_generate(json_response)
@@ -161,12 +151,7 @@ class Morpheus::Cli::Workflows
161
151
  print "\n", cyan, "Workflow #{workflow['name']} removed", reset, "\n\n"
162
152
  end
163
153
  rescue RestClient::Exception => e
164
- if e.response.code == 400
165
- error = JSON.parse(e.response.to_s)
166
- ::Morpheus::Cli::ErrorHandler.new.print_errors(error,options)
167
- else
168
- puts "Error Communicating with the Appliance. Please try again later. #{e}"
169
- end
154
+ print_rest_exception(e, options)
170
155
  exit 1
171
156
  end
172
157
  end
@@ -206,4 +191,4 @@ private
206
191
  end
207
192
  return result
208
193
  end
209
- end
194
+ end
@@ -0,0 +1,5 @@
1
+ class NilClass
2
+ def empty?
3
+ true
4
+ end
5
+ end
@@ -17,6 +17,7 @@ end
17
17
 
18
18
  def format_dt(dt, options={})
19
19
  dt = parse_time(dt)
20
+ return "" if dt.nil?
20
21
  if options[:local]
21
22
  dt = dt.getlocal
22
23
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: morpheus-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.9
4
+ version: 0.9.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Estes
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-09-07 00:00:00.000000000 Z
13
+ date: 2016-11-11 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -141,6 +141,7 @@ files:
141
141
  - bin/morpheus
142
142
  - lib/morpheus/api/accounts_interface.rb
143
143
  - lib/morpheus/api/api_client.rb
144
+ - lib/morpheus/api/app_templates_interface.rb
144
145
  - lib/morpheus/api/apps_interface.rb
145
146
  - lib/morpheus/api/clouds_interface.rb
146
147
  - lib/morpheus/api/deploy_interface.rb
@@ -164,6 +165,7 @@ files:
164
165
  - lib/morpheus/api/virtual_images_interface.rb
165
166
  - lib/morpheus/cli.rb
166
167
  - lib/morpheus/cli/accounts.rb
168
+ - lib/morpheus/cli/app_templates.rb
167
169
  - lib/morpheus/cli/apps.rb
168
170
  - lib/morpheus/cli/cli_command.rb
169
171
  - lib/morpheus/cli/cli_registry.rb
@@ -171,7 +173,6 @@ files:
171
173
  - lib/morpheus/cli/credentials.rb
172
174
  - lib/morpheus/cli/deployments.rb
173
175
  - lib/morpheus/cli/deploys.rb
174
- - lib/morpheus/cli/error_handler.rb
175
176
  - lib/morpheus/cli/groups.rb
176
177
  - lib/morpheus/cli/hosts.rb
177
178
  - lib/morpheus/cli/instance_types.rb
@@ -180,6 +181,8 @@ files:
180
181
  - lib/morpheus/cli/license.rb
181
182
  - lib/morpheus/cli/load_balancers.rb
182
183
  - lib/morpheus/cli/mixins/accounts_helper.rb
184
+ - lib/morpheus/cli/mixins/print_helper.rb
185
+ - lib/morpheus/cli/mixins/provisioning_helper.rb
183
186
  - lib/morpheus/cli/option_types.rb
184
187
  - lib/morpheus/cli/remote.rb
185
188
  - lib/morpheus/cli/roles.rb
@@ -191,6 +194,7 @@ files:
191
194
  - lib/morpheus/cli/version.rb
192
195
  - lib/morpheus/cli/virtual_images.rb
193
196
  - lib/morpheus/cli/workflows.rb
197
+ - lib/morpheus/ext/nil_class.rb
194
198
  - lib/morpheus/formatters.rb
195
199
  - lib/morpheus/rest_client.rb
196
200
  - morpheus-cli.gemspec
@@ -1,44 +0,0 @@
1
- require 'yaml'
2
- require 'rest_client'
3
- require 'term/ansicolor'
4
- require 'optparse'
5
- require 'json'
6
-
7
-
8
- class Morpheus::Cli::ErrorHandler
9
- include Term::ANSIColor
10
-
11
- def print_errors(response, options = {})
12
- if options[:json]
13
- print JSON.pretty_generate(response)
14
- else
15
- if !response['success']
16
- print red,bold, "\n"
17
- if response['msg']
18
- puts response['msg']
19
- end
20
- if response['errors']
21
- response['errors'].each do |key, value|
22
- print "* #{key}: #{value}\n"
23
- end
24
- end
25
- print reset, "\n"
26
- end
27
- end
28
- end
29
-
30
- def print_rest_exception(e, options={})
31
- if e.response.code == 400
32
- json_response = JSON.parse(e.response.to_s)
33
- if options[:json]
34
- print JSON.pretty_generate(json_response)
35
- print "\n"
36
- else
37
- ::Morpheus::Cli::ErrorHandler.new.print_errors(json_response)
38
- end
39
- else
40
- puts "Error Communicating with the Appliance. Please try again later. #{e}"
41
- end
42
- end
43
-
44
- end