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