morpheus-cli 0.9.9 → 0.9.10

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 (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