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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 37ad744bd14853ed09ab8a7b563c75fa952e1b8d
4
- data.tar.gz: e0fea0c877f8eab378652f69f22e9d9779e7cf36
3
+ metadata.gz: 1d8887267dd938f32dd8541223f21e0011b15f9f
4
+ data.tar.gz: 9654191eb9c4bf4162c42f3cad2955ff9502c79d
5
5
  SHA512:
6
- metadata.gz: 80f09808f4bc334d284dd8c8488046e6c1948511999e93325d7e46b8496eaf95819ad2e6b7e2dbe96f7066070afaff2598fa91eb003c8eb016dedcc317a1e72e
7
- data.tar.gz: c718702cb6de2fdc36b18276d22237b274c018dced4182cd075d7bc652418a37f5cef0984f9917dc85782357a11b203c1df200d23ad441417b496819d68f2887
6
+ metadata.gz: e3999564f5e8a363160a78f50e8b55ae27ca7835982eb777fa8645b573833231f23c5ffae9b444e5d4a494d5661376611542a8b40d96b5cdab000715c2463b21
7
+ data.tar.gz: 792e9432f9817331b73dceca9d476c763953b912b49d1253db36b715452d581e8cff554233c4c80a87d8e000167a458fb073d5aff2c0ebb12c3d2947653fc2be
@@ -59,6 +59,10 @@ class Morpheus::APIClient
59
59
  Morpheus::AppsInterface.new(@access_token, @refresh_token, @expires_at, @base_url)
60
60
  end
61
61
 
62
+ def app_templates
63
+ Morpheus::AppTemplatesInterface.new(@access_token, @refresh_token, @expires_at, @base_url)
64
+ end
65
+
62
66
  def deploy
63
67
  Morpheus::DeployInterface.new(@access_token, @refresh_token, @expires_at, @base_url)
64
68
  end
@@ -0,0 +1,74 @@
1
+ require 'json'
2
+ require 'rest-client'
3
+
4
+ class Morpheus::AppTemplatesInterface < Morpheus::APIClient
5
+ def initialize(access_token, refresh_token,expires_at = nil, base_url=nil)
6
+ @access_token = access_token
7
+ @refresh_token = refresh_token
8
+ @base_url = base_url
9
+ @expires_at = expires_at
10
+ end
11
+
12
+ def get(id)
13
+ raise "#{self.class}.get() passed a blank id!" if id.to_s == ''
14
+ url = "#{@base_url}/api/app-templates/#{id}"
15
+ headers = { params: {}, authorization: "Bearer #{@access_token}" }
16
+ response = Morpheus::RestClient.execute(method: :get, url: url,
17
+ timeout: 10, headers: headers)
18
+ JSON.parse(response.to_s)
19
+ end
20
+
21
+ def list(options={})
22
+ url = "#{@base_url}/api/app-templates"
23
+ headers = { params: {}, authorization: "Bearer #{@access_token}" }
24
+ headers[:params].merge!(options)
25
+ response = Morpheus::RestClient.execute(method: :get, url: url,
26
+ timeout: 10, headers: headers)
27
+ JSON.parse(response.to_s)
28
+ end
29
+
30
+ def create(options)
31
+ url = "#{@base_url}/api/app-templates"
32
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
33
+ payload = options
34
+ response = Morpheus::RestClient.execute(method: :post, url: url,
35
+ timeout: 10, headers: headers, payload: payload.to_json)
36
+ JSON.parse(response.to_s)
37
+ end
38
+
39
+ def update(id, options)
40
+ url = "#{@base_url}/api/app-templates/#{id}"
41
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
42
+ payload = options
43
+ response = Morpheus::RestClient.execute(method: :put, url: url,
44
+ timeout: 10, headers: headers, payload: payload.to_json)
45
+ JSON.parse(response.to_s)
46
+ end
47
+
48
+ def destroy(id)
49
+ url = "#{@base_url}/api/app-templates/#{id}"
50
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
51
+ response = Morpheus::RestClient.execute(method: :delete, url: url,
52
+ timeout: 10, headers: headers)
53
+ JSON.parse(response.to_s)
54
+ end
55
+
56
+ def list_tiers(options={})
57
+ url = "#{@base_url}/api/app-templates/tiers"
58
+ headers = { params: {}, authorization: "Bearer #{@access_token}" }
59
+ headers[:params].merge!(options)
60
+ response = Morpheus::RestClient.execute(method: :get, url: url,
61
+ timeout: 10, headers: headers)
62
+ JSON.parse(response.to_s)
63
+ end
64
+
65
+ def list_types(options={})
66
+ url = "#{@base_url}/api/app-templates/types"
67
+ headers = { params: {}, authorization: "Bearer #{@access_token}" }
68
+ headers[:params].merge!(options)
69
+ response = Morpheus::RestClient.execute(method: :get, url: url,
70
+ timeout: 10, headers: headers)
71
+ JSON.parse(response.to_s)
72
+ end
73
+
74
+ end
@@ -38,5 +38,14 @@ class Morpheus::InstanceTypesInterface < Morpheus::APIClient
38
38
  JSON.parse(response.to_s)
39
39
  end
40
40
 
41
+ def service_plan_options(service_plan_id, params)
42
+ url = "#{@base_url}/api/instance-types/service-plans/#{service_plan_id}/options"
43
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
44
+
45
+ response = Morpheus::RestClient.execute(method: :get, url: url,
46
+ timeout: 30, headers: headers, verify_ssl: false)
47
+ JSON.parse(response.to_s)
48
+ end
49
+
41
50
 
42
51
  end
@@ -95,6 +95,22 @@ class Morpheus::InstancesInterface < Morpheus::APIClient
95
95
  JSON.parse(response.to_s)
96
96
  end
97
97
 
98
+ def volumes(id)
99
+ url = "#{@base_url}/api/instances/#{id}/volumes"
100
+ headers = { :params => {},:authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
101
+ response = Morpheus::RestClient.execute(method: :get, url: url,
102
+ timeout: 30, headers: headers,verify_ssl: false)
103
+ JSON.parse(response.to_s)
104
+ end
105
+
106
+ def resize(id,payload)
107
+ url = "#{@base_url}/api/instances/#{id}/resize"
108
+ headers = { :params => {},:authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
109
+ response = Morpheus::RestClient.execute(method: :put, url: url,
110
+ timeout: 30, headers: headers,verify_ssl: false,payload: payload.to_json)
111
+ JSON.parse(response.to_s)
112
+ end
113
+
98
114
  def workflow(id,task_set_id,payload)
99
115
  url = "#{@base_url}/api/instances/#{id}/workflow"
100
116
  headers = { :params => {:taskSetId => task_set_id},:authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
@@ -41,7 +41,7 @@ class Morpheus::RolesInterface < Morpheus::APIClient
41
41
  url = build_url(account_id, id)
42
42
  headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
43
43
  payload = options
44
- response = Morpheus::RestClient.execute(method: :post, url: url,
44
+ response = Morpheus::RestClient.execute(method: :put, url: url,
45
45
  timeout: 10, headers: headers, payload: payload.to_json)
46
46
  JSON.parse(response.to_s)
47
47
  end
@@ -54,6 +54,42 @@ class Morpheus::RolesInterface < Morpheus::APIClient
54
54
  JSON.parse(response.to_s)
55
55
  end
56
56
 
57
+ def update_permission(account_id, id, options)
58
+ url = build_url(account_id, id) + "/update-permission"
59
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
60
+ payload = options
61
+ response = Morpheus::RestClient.execute(method: :put, url: url,
62
+ timeout: 10, headers: headers, payload: payload.to_json)
63
+ JSON.parse(response.to_s)
64
+ end
65
+
66
+ def update_instance_type(account_id, id, options)
67
+ url = build_url(account_id, id) + "/update-instance-type"
68
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
69
+ payload = options
70
+ response = Morpheus::RestClient.execute(method: :put, url: url,
71
+ timeout: 10, headers: headers, payload: payload.to_json)
72
+ JSON.parse(response.to_s)
73
+ end
74
+
75
+ def update_group(account_id, id, options)
76
+ url = build_url(account_id, id) + "/update-group"
77
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
78
+ payload = options
79
+ response = Morpheus::RestClient.execute(method: :put, url: url,
80
+ timeout: 10, headers: headers, payload: payload.to_json)
81
+ JSON.parse(response.to_s)
82
+ end
83
+
84
+ def update_cloud(account_id, id, options)
85
+ url = build_url(account_id, id) + "/update-cloud"
86
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
87
+ payload = options
88
+ response = Morpheus::RestClient.execute(method: :put, url: url,
89
+ timeout: 10, headers: headers, payload: payload.to_json)
90
+ JSON.parse(response.to_s)
91
+ end
92
+
57
93
  private
58
94
 
59
95
  def build_url(account_id=nil, role_id=nil)
data/lib/morpheus/cli.rb CHANGED
@@ -3,6 +3,8 @@ require "morpheus/rest_client"
3
3
  require 'morpheus/formatters'
4
4
  require 'term/ansicolor'
5
5
 
6
+ Dir[File.dirname(__FILE__) + "/ext/*.rb"].each {|file| require file }
7
+
6
8
  module Morpheus
7
9
  module Cli
8
10
  require 'morpheus/api/api_client'
@@ -20,6 +22,7 @@ module Morpheus
20
22
  require 'morpheus/api/instance_types_interface'
21
23
  require 'morpheus/api/provision_types_interface'
22
24
  require 'morpheus/api/apps_interface'
25
+ require 'morpheus/api/app_templates_interface'
23
26
  require 'morpheus/api/deploy_interface'
24
27
  require 'morpheus/api/security_groups_interface'
25
28
  require 'morpheus/api/security_group_rules_interface'
@@ -30,7 +33,6 @@ module Morpheus
30
33
  require 'morpheus/api/key_pairs_interface'
31
34
 
32
35
  require 'morpheus/cli/credentials'
33
- require 'morpheus/cli/error_handler'
34
36
  require 'morpheus/cli/remote'
35
37
  require 'morpheus/cli/groups'
36
38
  require 'morpheus/cli/clouds'
@@ -42,6 +44,7 @@ module Morpheus
42
44
  require 'morpheus/cli/deployments'
43
45
  require 'morpheus/cli/instances'
44
46
  require 'morpheus/cli/apps'
47
+ require 'morpheus/cli/app_templates'
45
48
  require 'morpheus/cli/deploys'
46
49
  require 'morpheus/cli/license'
47
50
  require 'morpheus/cli/instance_types'
@@ -1,7 +1,6 @@
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 'morpheus/cli/cli_command'
7
6
  require 'morpheus/cli/option_types'
@@ -9,7 +8,6 @@ require 'morpheus/cli/mixins/accounts_helper'
9
8
  require 'json'
10
9
 
11
10
  class Morpheus::Cli::Accounts
12
- include Term::ANSIColor
13
11
  include Morpheus::Cli::CliCommand
14
12
  include Morpheus::Cli::AccountsHelper
15
13
 
@@ -21,7 +19,7 @@ class Morpheus::Cli::Accounts
21
19
  def connect(opts)
22
20
  @access_token = Morpheus::Cli::Credentials.new(@appliance_name,@appliance_url).request_credentials()
23
21
  if @access_token.empty?
24
- print red,bold, "\nInvalid Credentials. Unable to acquire access token. Please verify your credentials and try again.\n\n",reset
22
+ print_red_alert "Invalid Credentials. Unable to acquire access token. Please verify your credentials and try again."
25
23
  exit 1
26
24
  end
27
25
  @api_client = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url)
@@ -55,14 +53,16 @@ class Morpheus::Cli::Accounts
55
53
  end
56
54
 
57
55
  def list(args)
56
+ usage = "Usage: morpheus accounts list"
58
57
  options = {}
59
- params = {}
60
58
  optparse = OptionParser.new do|opts|
61
- Morpheus::Cli::CliCommand.genericOptions(opts,options)
59
+ opts.banner = usage
60
+ build_common_options(opts, options, [:list, :json])
62
61
  end
63
62
  optparse.parse(args)
64
63
  connect(options)
65
64
  begin
65
+ params = {}
66
66
  [:phrase, :offset, :max, :sort, :direction].each do |k|
67
67
  params[k] = options[k] unless options[k].nil?
68
68
  end
@@ -82,26 +82,26 @@ class Morpheus::Cli::Accounts
82
82
  print reset,"\n\n"
83
83
  end
84
84
  rescue RestClient::Exception => e
85
- ::Morpheus::Cli::ErrorHandler.new.print_rest_exception(e)
85
+ print_rest_exception(e, options)
86
86
  exit 1
87
87
  end
88
88
  end
89
89
 
90
90
  def details(args)
91
91
  usage = "Usage: morpheus accounts details [name] [options]"
92
+ options = {}
93
+ optparse = OptionParser.new do|opts|
94
+ opts.banner = usage
95
+ build_common_options(opts, options, [:json])
96
+ end
97
+ optparse.parse(args)
98
+
92
99
  if args.count < 1
93
100
  puts "\n#{usage}\n\n"
94
101
  exit 1
95
102
  end
96
103
  name = args[0]
97
- options = {}
98
- params = {}
99
- optparse = OptionParser.new do|opts|
100
- opts.banner = usage
101
104
 
102
- Morpheus::Cli::CliCommand.genericOptions(opts,options)
103
- end
104
- optparse.parse(args)
105
105
  connect(options)
106
106
  begin
107
107
 
@@ -118,7 +118,7 @@ class Morpheus::Cli::Accounts
118
118
  exit 1 if account.nil?
119
119
 
120
120
  if options[:json]
121
- print JSON.pretty_generate(account)
121
+ print JSON.pretty_generate({account: account})
122
122
  print "\n"
123
123
  else
124
124
  print "\n" ,cyan, bold, "Account Details\n","==================", reset, "\n\n"
@@ -147,21 +147,17 @@ class Morpheus::Cli::Accounts
147
147
  print reset,"\n\n"
148
148
  end
149
149
  rescue RestClient::Exception => e
150
- ::Morpheus::Cli::ErrorHandler.new.print_rest_exception(e)
150
+ print_rest_exception(e, options)
151
151
  exit 1
152
152
  end
153
153
  end
154
154
 
155
155
  def add(args)
156
156
  usage = "Usage: morpheus accounts add [options]"
157
- # if args.count > 0
158
- # puts "\nUsage: morpheus accounts add [options]\n\n"
159
- # exit 1
160
- # end
161
157
  options = {}
162
158
  optparse = OptionParser.new do|opts|
163
159
  opts.banner = usage
164
- Morpheus::Cli::CliCommand.genericOptions(opts,options)
160
+ build_common_options(opts, options, [:options, :json])
165
161
  end
166
162
  optparse.parse(args)
167
163
 
@@ -169,62 +165,69 @@ class Morpheus::Cli::Accounts
169
165
 
170
166
  begin
171
167
 
172
- params = Morpheus::Cli::OptionTypes.prompt(add_account_option_types, options[:options], @api_client, options[:params]) # options[:params] is mysterious
168
+ params = Morpheus::Cli::OptionTypes.prompt(add_account_option_types, options[:options], @api_client, options[:params])
173
169
 
174
170
  #puts "parsed params is : #{params.inspect}"
175
171
  account_keys = ['name', 'description', 'currency']
176
172
  account_payload = params.select {|k,v| account_keys.include?(k) }
177
173
  account_payload['currency'] = account_payload['currency'].to_s.empty? ? "USD" : account_payload['currency'].upcase
178
- account_payload['instanceLimits'] = {}
179
- account_payload['instanceLimits']['maxStorage'] = params['instanceLimits.maxStorage'].to_i if params['instanceLimits.maxStorage'].to_s.strip != ''
180
- account_payload['instanceLimits']['maxMemory'] = params['instanceLimits.maxMemory'].to_i if params['instanceLimits.maxMemory'].to_s.strip != ''
181
- account_payload['instanceLimits']['maxCpu'] = params['instanceLimits.maxCpu'].to_i if params['instanceLimits.maxCpu'].to_s.strip != ''
174
+ if !account_payload['instanceLimits']
175
+ account_payload['instanceLimits'] = {}
176
+ account_payload['instanceLimits']['maxStorage'] = params['instanceLimits.maxStorage'].to_i if params['instanceLimits.maxStorage'].to_s.strip != ''
177
+ account_payload['instanceLimits']['maxMemory'] = params['instanceLimits.maxMemory'].to_i if params['instanceLimits.maxMemory'].to_s.strip != ''
178
+ account_payload['instanceLimits']['maxCpu'] = params['instanceLimits.maxCpu'].to_i if params['instanceLimits.maxCpu'].to_s.strip != ''
179
+ end
182
180
  if params['role'].to_s != ''
183
181
  role = find_role_by_name(nil, params['role'])
184
182
  exit 1 if role.nil?
185
183
  account_payload['role'] = {id: role['id']}
186
184
  end
187
185
  request_payload = {account: account_payload}
188
- response = @accounts_interface.create(request_payload)
189
-
190
- print_green_success "Account #{account_payload['name']} added"
186
+ json_response = @accounts_interface.create(request_payload)
191
187
 
192
- details([account_payload["name"]])
188
+ if options[:json]
189
+ print JSON.pretty_generate(json_response)
190
+ print "\n"
191
+ else
192
+ print_green_success "Account #{account_payload['name']} added"
193
+ details([account_payload["name"]])
194
+ end
193
195
 
194
196
  rescue RestClient::Exception => e
195
- ::Morpheus::Cli::ErrorHandler.new.print_rest_exception(e)
197
+ print_rest_exception(e, options)
196
198
  exit 1
197
199
  end
198
200
  end
199
201
 
200
202
  def update(args)
201
203
  usage = "Usage: morpheus accounts update [name] [options]"
202
- if args.count < 1
203
- puts "\n#{usage}\n\n"
204
- exit 1
205
- end
206
- name = args[0].strip
207
204
  options = {}
208
205
  optparse = OptionParser.new do|opts|
209
206
  opts.banner = usage
210
- Morpheus::Cli::CliCommand.genericOptions(opts,options)
207
+ build_common_options(opts, options, [:options, :json])
211
208
  end
212
209
  optparse.parse(args)
213
210
 
211
+ if args.count < 1
212
+ puts "\n#{usage}\n\n"
213
+ exit 1
214
+ end
215
+ name = args[0].strip
216
+
214
217
  connect(options)
215
218
 
216
219
  begin
217
220
 
218
221
  account = nil
219
222
  if name.to_s =~ /\Aid:/
220
- id = name.sub('id:', '')
223
+ id = name.sub('id:', '').strip
221
224
  account = find_account_by_id(id)
222
225
  else
223
- find_account_by_name(name)
226
+ account = find_account_by_name(name)
224
227
  end
225
228
  exit 1 if account.nil?
226
229
 
227
- #params = Morpheus::Cli::OptionTypes.prompt(update_account_option_types, options[:options], @api_client, options[:params]) # options[:params] is mysterious
230
+ #params = Morpheus::Cli::OptionTypes.prompt(update_account_option_types, options[:options], @api_client, options[:params])
228
231
  params = options[:options] || {}
229
232
 
230
233
  if params.empty?
@@ -235,51 +238,72 @@ class Morpheus::Cli::Accounts
235
238
  end
236
239
 
237
240
  #puts "parsed params is : #{params.inspect}"
238
- account_keys = ['name', 'description', 'currency']
241
+ account_keys = ['name', 'description', 'currency', 'instanceLimits']
239
242
  account_payload = params.select {|k,v| account_keys.include?(k) }
240
243
  account_payload['currency'] = account_payload['currency'].upcase unless account_payload['currency'].to_s.empty?
241
- account_payload['instanceLimits'] = {}
242
- account_payload['instanceLimits']['maxStorage'] = params['instanceLimits.maxStorage'].to_i if params['instanceLimits.maxStorage'].to_s.strip != ''
243
- account_payload['instanceLimits']['maxMemory'] = params['instanceLimits.maxMemory'].to_i if params['instanceLimits.maxMemory'].to_s.strip != ''
244
- account_payload['instanceLimits']['maxCpu'] = params['instanceLimits.maxCpu'].to_i if params['instanceLimits.maxCpu'].to_s.strip != ''
244
+ if !account_payload['instanceLimits']
245
+ account_payload['instanceLimits'] = {}
246
+ account_payload['instanceLimits']['maxStorage'] = params['instanceLimits.maxStorage'].to_i if params['instanceLimits.maxStorage'].to_s.strip != ''
247
+ account_payload['instanceLimits']['maxMemory'] = params['instanceLimits.maxMemory'].to_i if params['instanceLimits.maxMemory'].to_s.strip != ''
248
+ account_payload['instanceLimits']['maxCpu'] = params['instanceLimits.maxCpu'].to_i if params['instanceLimits.maxCpu'].to_s.strip != ''
249
+ end
245
250
  if params['role'].to_s != ''
246
251
  role = find_role_by_name(nil, params['role'])
247
252
  exit 1 if role.nil?
248
253
  account_payload['role'] = {id: role['id']}
249
254
  end
250
255
  request_payload = {account: account_payload}
251
- response = @accounts_interface.update(account['id'], request_payload)
252
- print "\n", cyan, "Account #{account_payload['name'] || account['name']} updated", reset, "\n\n"
256
+ json_response = @accounts_interface.update(account['id'], request_payload)
257
+
258
+ if options[:json]
259
+ print JSON.pretty_generate(json_response)
260
+ print "\n"
261
+ else
262
+ account_name = account_payload['name'] || account['name']
263
+ print_green_success "Account #{account_name} updated"
264
+ details([account_name])
265
+ end
266
+
253
267
  rescue RestClient::Exception => e
254
- ::Morpheus::Cli::ErrorHandler.new.print_rest_exception(e)
268
+ print_rest_exception(e, options)
255
269
  exit 1
256
270
  end
257
271
  end
258
272
 
259
273
  def remove(args)
260
274
  usage = "Usage: morpheus accounts remove [name]"
261
- if args.count < 1
262
- puts "\n#{usage}\n\n"
263
- exit 1
264
- end
265
- name = args[0]
266
275
  options = {}
267
276
  optparse = OptionParser.new do|opts|
268
277
  opts.banner = usage
269
- Morpheus::Cli::CliCommand.genericOptions(opts,options)
278
+ build_common_options(opts, options, [:auto_confirm, :json])
270
279
  end
271
280
  optparse.parse(args)
281
+
282
+ if args.count < 1
283
+ puts "\n#{usage}\n\n"
284
+ exit 1
285
+ end
286
+ name = args[0]
287
+
272
288
  connect(options)
273
289
  begin
274
290
  # allow finding by ID since name is not unique!
275
291
  account = ((name.to_s =~ /\A\d{1,}\Z/) ? find_account_by_id(name) : find_account_by_name(name) )
276
292
  exit 1 if account.nil?
277
- exit unless Morpheus::Cli::OptionTypes.confirm("Are you sure you want to delete the account #{account['name']}?")
278
- @accounts_interface.destroy(account['id'])
279
- # list([])
280
- print "\n", cyan, "Account #{account['name']} removed", reset, "\n\n"
293
+ unless options[:yes] || Morpheus::Cli::OptionTypes.confirm("Are you sure you want to delete the account #{account['name']}?")
294
+ exit
295
+ end
296
+ json_response = @accounts_interface.destroy(account['id'])
297
+
298
+ if options[:json]
299
+ print JSON.pretty_generate(json_response)
300
+ print "\n"
301
+ else
302
+ print_green_success "Account #{account['name']} removed"
303
+ end
304
+
281
305
  rescue RestClient::Exception => e
282
- ::Morpheus::Cli::ErrorHandler.new.print_rest_exception(e)
306
+ print_rest_exception(e, options)
283
307
  exit 1
284
308
  end
285
309
  end