morpheus-cli 0.1.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/lib/morpheus/api/accounts_interface.rb +55 -0
  3. data/lib/morpheus/api/api_client.rb +48 -3
  4. data/lib/morpheus/api/apps_interface.rb +13 -13
  5. data/lib/morpheus/api/{zones_interface.rb → clouds_interface.rb} +10 -10
  6. data/lib/morpheus/api/deploy_interface.rb +4 -4
  7. data/lib/morpheus/api/groups_interface.rb +3 -3
  8. data/lib/morpheus/api/instance_types_interface.rb +2 -2
  9. data/lib/morpheus/api/instances_interface.rb +35 -19
  10. data/lib/morpheus/api/key_pairs_interface.rb +60 -0
  11. data/lib/morpheus/api/license_interface.rb +29 -0
  12. data/lib/morpheus/api/load_balancers_interface.rb +72 -0
  13. data/lib/morpheus/api/logs_interface.rb +37 -0
  14. data/lib/morpheus/api/options_interface.rb +20 -0
  15. data/lib/morpheus/api/provision_types_interface.rb +27 -0
  16. data/lib/morpheus/api/roles_interface.rb +73 -0
  17. data/lib/morpheus/api/security_group_rules_interface.rb +3 -3
  18. data/lib/morpheus/api/security_groups_interface.rb +5 -5
  19. data/lib/morpheus/api/servers_interface.rb +67 -3
  20. data/lib/morpheus/api/task_sets_interface.rb +46 -0
  21. data/lib/morpheus/api/tasks_interface.rb +72 -0
  22. data/lib/morpheus/api/users_interface.rb +72 -0
  23. data/lib/morpheus/cli.rb +27 -4
  24. data/lib/morpheus/cli/accounts.rb +306 -0
  25. data/lib/morpheus/cli/apps.rb +58 -1
  26. data/lib/morpheus/cli/cli_command.rb +87 -0
  27. data/lib/morpheus/cli/cli_registry.rb +6 -1
  28. data/lib/morpheus/cli/{zones.rb → clouds.rb} +99 -70
  29. data/lib/morpheus/cli/credentials.rb +23 -11
  30. data/lib/morpheus/cli/error_handler.rb +31 -11
  31. data/lib/morpheus/cli/groups.rb +1 -0
  32. data/lib/morpheus/cli/hosts.rb +567 -0
  33. data/lib/morpheus/cli/instances.rb +588 -292
  34. data/lib/morpheus/cli/key_pairs.rb +393 -0
  35. data/lib/morpheus/cli/license.rb +118 -0
  36. data/lib/morpheus/cli/load_balancers.rb +366 -0
  37. data/lib/morpheus/cli/mixins/accounts_helper.rb +193 -0
  38. data/lib/morpheus/cli/option_types.rb +260 -0
  39. data/lib/morpheus/cli/roles.rb +164 -0
  40. data/lib/morpheus/cli/security_group_rules.rb +4 -9
  41. data/lib/morpheus/cli/shell.rb +108 -0
  42. data/lib/morpheus/cli/tasks.rb +370 -0
  43. data/lib/morpheus/cli/users.rb +325 -0
  44. data/lib/morpheus/cli/version.rb +1 -1
  45. data/lib/morpheus/cli/workflows.rb +100 -0
  46. data/lib/morpheus/formatters.rb +43 -0
  47. data/morpheus-cli.gemspec +1 -1
  48. metadata +33 -10
  49. data/lib/morpheus/cli/servers.rb +0 -265
@@ -0,0 +1,46 @@
1
+ require 'json'
2
+ require 'rest-client'
3
+
4
+ class Morpheus::TaskSetsInterface < 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(options=nil)
13
+ url = "#{@base_url}/api/task-sets"
14
+ headers = { params: {}, authorization: "Bearer #{@access_token}" }
15
+
16
+ if options.is_a?(Hash)
17
+ headers[:params].merge!(options)
18
+ elsif options.is_a?(Numeric)
19
+ url = "#{@base_url}/api/tasks/#{options}"
20
+ elsif options.is_a?(String)
21
+ headers[:params]['name'] = options
22
+ end
23
+ response = Morpheus::RestClient.execute(method: :get, url: url,
24
+ timeout: 30, headers: headers, verify_ssl:false)
25
+ JSON.parse(response.to_s)
26
+ end
27
+
28
+
29
+ def create(options)
30
+ url = "#{@base_url}/api/task-sets"
31
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
32
+
33
+ payload = options
34
+ response = Morpheus::RestClient.execute(method: :post, url: url,
35
+ timeout: 30, headers: headers, verify_ssl:false, payload: payload.to_json)
36
+ JSON.parse(response.to_s)
37
+ end
38
+
39
+ def destroy(id)
40
+ url = "#{@base_url}/api/task-sets/#{id}"
41
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
42
+ response = Morpheus::RestClient.execute(method: :delete, url: url,
43
+ timeout: 30, headers: headers, verify_ssl:false)
44
+ JSON.parse(response.to_s)
45
+ end
46
+ end
@@ -0,0 +1,72 @@
1
+ require 'json'
2
+ require 'rest-client'
3
+
4
+ class Morpheus::TasksInterface < 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 task_types(options={})
13
+ url = "#{@base_url}/api/task-types"
14
+ headers = { params: {}, authorization: "Bearer #{@access_token}" }
15
+
16
+ if options.is_a?(Hash)
17
+ headers[:params].merge!(options)
18
+ elsif options.is_a?(Numeric)
19
+ url = "#{@base_url}/api/task-types/#{options}"
20
+ elsif options.is_a?(String)
21
+ headers[:params]['name'] = options
22
+ end
23
+ response = Morpheus::RestClient.execute(method: :get, url: url,
24
+ timeout: 30, headers: headers, verify_ssl:false)
25
+ JSON.parse(response.to_s)
26
+ end
27
+
28
+ def get(options=nil)
29
+ url = "#{@base_url}/api/tasks"
30
+ headers = { params: {}, authorization: "Bearer #{@access_token}" }
31
+
32
+ if options.is_a?(Hash)
33
+ headers[:params].merge!(options)
34
+ elsif options.is_a?(Numeric)
35
+ url = "#{@base_url}/api/tasks/#{options}"
36
+ elsif options.is_a?(String)
37
+ headers[:params]['name'] = options
38
+ end
39
+ response = Morpheus::RestClient.execute(method: :get, url: url,
40
+ timeout: 30, headers: headers, verify_ssl:false)
41
+ JSON.parse(response.to_s)
42
+ end
43
+
44
+ def update(id, options)
45
+ url = "#{@base_url}/api/tasks/#{id}"
46
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
47
+
48
+ payload = options
49
+ response = Morpheus::RestClient.execute(method: :put, url: url,
50
+ timeout: 10, headers: headers, payload: payload.to_json)
51
+ JSON.parse(response.to_s)
52
+ end
53
+
54
+
55
+ def create(options)
56
+ url = "#{@base_url}/api/tasks"
57
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
58
+
59
+ payload = options
60
+ response = Morpheus::RestClient.execute(method: :post, url: url,
61
+ timeout: 30, headers: headers, verify_ssl:false, payload: payload.to_json)
62
+ JSON.parse(response.to_s)
63
+ end
64
+
65
+ def destroy(id)
66
+ url = "#{@base_url}/api/tasks/#{id}"
67
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
68
+ response = Morpheus::RestClient.execute(method: :delete, url: url,
69
+ timeout: 30, headers: headers, verify_ssl:false)
70
+ JSON.parse(response.to_s)
71
+ end
72
+ end
@@ -0,0 +1,72 @@
1
+ require 'json'
2
+ require 'rest-client'
3
+
4
+ class Morpheus::UsersInterface < Morpheus::APIClient
5
+
6
+ def initialize(access_token, refresh_token, expires_at = nil, base_url=nil)
7
+ @access_token = access_token
8
+ @refresh_token = refresh_token
9
+ @base_url = base_url
10
+ @expires_at = expires_at
11
+ end
12
+
13
+ def get(account_id, id)
14
+ raise "#{self.class}.get() passed a blank id!" if id.to_s == ''
15
+ url = build_url(account_id, id)
16
+ headers = { params: {}, authorization: "Bearer #{@access_token}" }
17
+ response = Morpheus::RestClient.execute(method: :get, url: url,
18
+ timeout: 10, headers: headers)
19
+ JSON.parse(response.to_s)
20
+ end
21
+
22
+ def list(account_id, options={})
23
+ url = build_url(account_id)
24
+ headers = { params: {}, authorization: "Bearer #{@access_token}" }
25
+ headers[:params].merge!(options)
26
+ response = Morpheus::RestClient.execute(method: :get, url: url,
27
+ timeout: 10, headers: headers)
28
+ JSON.parse(response.to_s)
29
+ end
30
+
31
+ def create(account_id, options)
32
+ url = build_url(account_id)
33
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
34
+ payload = options
35
+ response = Morpheus::RestClient.execute(method: :post, url: url,
36
+ timeout: 10, headers: headers, payload: payload.to_json)
37
+ JSON.parse(response.to_s)
38
+ end
39
+
40
+ def update(account_id, id, options)
41
+ url = build_url(account_id, id)
42
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
43
+ payload = options
44
+ response = Morpheus::RestClient.execute(method: :put, url: url,
45
+ timeout: 10, headers: headers, payload: payload.to_json)
46
+ JSON.parse(response.to_s)
47
+ end
48
+
49
+ def destroy(account_id, id)
50
+ url = build_url(account_id, id)
51
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
52
+ response = Morpheus::RestClient.execute(method: :delete, url: url,
53
+ timeout: 10, headers: headers)
54
+ JSON.parse(response.to_s)
55
+ end
56
+
57
+ private
58
+
59
+ def build_url(account_id=nil, user_id=nil)
60
+ url = "#{@base_url}/api"
61
+ if account_id
62
+ url += "/accounts/#{account_id}/users"
63
+ else
64
+ url += "/users"
65
+ end
66
+ if user_id
67
+ url += "/#{user_id}"
68
+ end
69
+ url
70
+ end
71
+
72
+ end
@@ -1,30 +1,53 @@
1
1
  require "morpheus/cli/version"
2
2
  require "morpheus/rest_client"
3
+ require 'morpheus/formatters'
4
+ require 'term/ansicolor'
3
5
 
4
6
  module Morpheus
5
7
  module Cli
6
8
  require 'morpheus/api/api_client'
9
+ require 'morpheus/api/options_interface'
7
10
  require 'morpheus/api/groups_interface'
8
- require 'morpheus/api/zones_interface'
11
+ require 'morpheus/api/clouds_interface'
9
12
  require 'morpheus/api/servers_interface'
13
+ require 'morpheus/api/tasks_interface'
14
+ require 'morpheus/api/license_interface'
15
+ require 'morpheus/api/task_sets_interface'
16
+ require 'morpheus/api/load_balancers_interface'
10
17
  require 'morpheus/api/instances_interface'
11
18
  require 'morpheus/api/instance_types_interface'
19
+ require 'morpheus/api/provision_types_interface'
12
20
  require 'morpheus/api/apps_interface'
13
21
  require 'morpheus/api/deploy_interface'
14
22
  require 'morpheus/api/security_groups_interface'
15
23
  require 'morpheus/api/security_group_rules_interface'
16
- require 'morpheus/cli/credentials'
24
+ require 'morpheus/api/accounts_interface'
25
+ require 'morpheus/api/users_interface'
26
+ require 'morpheus/api/logs_interface'
27
+ require 'morpheus/api/roles_interface'
28
+ require 'morpheus/api/key_pairs_interface'
29
+
30
+ require 'morpheus/cli/credentials'
17
31
  require 'morpheus/cli/error_handler'
18
32
  require 'morpheus/cli/remote'
19
33
  require 'morpheus/cli/groups'
20
- require 'morpheus/cli/zones'
21
- require 'morpheus/cli/servers'
34
+ require 'morpheus/cli/clouds'
35
+ require 'morpheus/cli/hosts'
36
+ require 'morpheus/cli/load_balancers'
37
+ require 'morpheus/cli/shell'
38
+ require 'morpheus/cli/tasks'
39
+ require 'morpheus/cli/workflows'
22
40
  require 'morpheus/cli/instances'
23
41
  require 'morpheus/cli/apps'
24
42
  require 'morpheus/cli/deploys'
43
+ require 'morpheus/cli/license'
25
44
  require 'morpheus/cli/instance_types'
26
45
  require 'morpheus/cli/security_groups'
27
46
  require 'morpheus/cli/security_group_rules'
47
+ require 'morpheus/cli/accounts'
48
+ require 'morpheus/cli/users'
49
+ require 'morpheus/cli/roles'
50
+ require 'morpheus/cli/key_pairs'
28
51
  # Your code goes here...
29
52
  end
30
53
  end
@@ -0,0 +1,306 @@
1
+ # require 'yaml'
2
+ require 'io/console'
3
+ require 'rest_client'
4
+ require 'term/ansicolor'
5
+ require 'optparse'
6
+ require 'morpheus/cli/cli_command'
7
+ require 'morpheus/cli/option_types'
8
+ require 'morpheus/cli/mixins/accounts_helper'
9
+ require 'json'
10
+
11
+ class Morpheus::Cli::Accounts
12
+ include Term::ANSIColor
13
+ include Morpheus::Cli::CliCommand
14
+ include Morpheus::Cli::AccountsHelper
15
+
16
+ def initialize()
17
+ @appliance_name, @appliance_url = Morpheus::Cli::Remote.active_appliance
18
+ #@active_groups = ::Morpheus::Cli::Groups.load_group_file
19
+ end
20
+
21
+ def connect(opts)
22
+ @access_token = Morpheus::Cli::Credentials.new(@appliance_name,@appliance_url).request_credentials()
23
+ 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
25
+ exit 1
26
+ end
27
+ @api_client = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url)
28
+ @users_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).users
29
+ @accounts_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).accounts
30
+ @roles_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).roles
31
+ end
32
+
33
+ def handle(args)
34
+ usage = "Usage: morpheus accounts [list,details,add,update,remove] [name]"
35
+ if args.empty?
36
+ puts "\n#{usage}\n\n"
37
+ exit 1
38
+ end
39
+
40
+ case args[0]
41
+ when 'list'
42
+ list(args[1..-1])
43
+ when 'details'
44
+ details(args[1..-1])
45
+ when 'add'
46
+ add(args[1..-1])
47
+ when 'update'
48
+ update(args[1..-1])
49
+ when 'remove'
50
+ remove(args[1..-1])
51
+ else
52
+ puts "\n#{usage}\n\n"
53
+ exit 127
54
+ end
55
+ end
56
+
57
+ def list(args)
58
+ options = {}
59
+ params = {}
60
+ optparse = OptionParser.new do|opts|
61
+ Morpheus::Cli::CliCommand.genericOptions(opts,options)
62
+ end
63
+ optparse.parse(args)
64
+ connect(options)
65
+ begin
66
+ [:phrase, :offset, :max, :sort, :direction].each do |k|
67
+ params[k] = options[k] unless options[k].nil?
68
+ end
69
+
70
+ json_response = @accounts_interface.list(params)
71
+ accounts = json_response['accounts']
72
+ if options[:json]
73
+ print JSON.pretty_generate(json_response)
74
+ print "\n"
75
+ else
76
+ print "\n" ,cyan, bold, "Morpheus Accounts\n","==================", reset, "\n\n"
77
+ if accounts.empty?
78
+ puts yellow,"No accounts found.",reset
79
+ else
80
+ print_accounts_table(accounts)
81
+ end
82
+ print reset,"\n\n"
83
+ end
84
+ rescue RestClient::Exception => e
85
+ ::Morpheus::Cli::ErrorHandler.new.print_rest_exception(e)
86
+ exit 1
87
+ end
88
+ end
89
+
90
+ def details(args)
91
+ usage = "Usage: morpheus accounts details [name] [options]"
92
+ if args.count < 1
93
+ puts "\n#{usage}\n\n"
94
+ exit 1
95
+ end
96
+ name = args[0]
97
+ options = {}
98
+ params = {}
99
+ optparse = OptionParser.new do|opts|
100
+ opts.banner = usage
101
+
102
+ Morpheus::Cli::CliCommand.genericOptions(opts,options)
103
+ end
104
+ optparse.parse(args)
105
+ connect(options)
106
+ begin
107
+
108
+ # todo: accounts_response = @accounts_interface.list({name: name})
109
+ # there may be response data outside of account that needs to be displayed
110
+
111
+ account = nil
112
+ if name.to_s =~ /\Aid:/
113
+ id = name.sub('id:', '')
114
+ account = find_account_by_id(id)
115
+ else
116
+ account = find_account_by_name(name)
117
+ end
118
+ exit 1 if account.nil?
119
+
120
+ if options[:json]
121
+ print JSON.pretty_generate(account)
122
+ print "\n"
123
+ else
124
+ print "\n" ,cyan, bold, "Account Details\n","==================", reset, "\n\n"
125
+ print cyan
126
+ puts "ID: #{account['id']}"
127
+ puts "Name: #{account['name']}"
128
+ puts "Description: #{account['description']}"
129
+ puts "Currency: #{account['currency']}"
130
+ # puts "# Users: #{account['usersCount']}"
131
+ # puts "# Instances: #{account['instancesCount']}"
132
+ puts "Date Created: #{format_local_dt(account['dateCreated'])}"
133
+ puts "Last Updated: #{format_local_dt(account['lastUpdated'])}"
134
+ status_state = nil
135
+ if account['active']
136
+ status_state = "#{green}ACTIVE#{cyan}"
137
+ else
138
+ status_state = "#{red}INACTIVE#{cyan}"
139
+ end
140
+ puts "Status: #{status_state}"
141
+ print "\n" ,cyan, bold, "Account Instance Limits\n","==================", reset, "\n\n"
142
+ print cyan
143
+ puts "Max Storage (bytes): #{account['instanceLimits'] ? account['instanceLimits']['maxStorage'] : 0}"
144
+ puts "Max Memory (bytes): #{account['instanceLimits'] ? account['instanceLimits']['maxMemory'] : 0}"
145
+ puts "CPU Count: #{account['instanceLimits'] ? account['instanceLimits']['maxCpu'] : 0}"
146
+ print cyan
147
+ print reset,"\n\n"
148
+ end
149
+ rescue RestClient::Exception => e
150
+ ::Morpheus::Cli::ErrorHandler.new.print_rest_exception(e)
151
+ exit 1
152
+ end
153
+ end
154
+
155
+ def add(args)
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
+ options = {}
162
+ optparse = OptionParser.new do|opts|
163
+ opts.banner = usage
164
+ Morpheus::Cli::CliCommand.genericOptions(opts,options)
165
+ end
166
+ optparse.parse(args)
167
+
168
+ connect(options)
169
+
170
+ begin
171
+
172
+ params = Morpheus::Cli::OptionTypes.prompt(add_account_option_types, options[:options], @api_client, options[:params]) # options[:params] is mysterious
173
+
174
+ #puts "parsed params is : #{params.inspect}"
175
+ account_keys = ['name', 'description', 'currency']
176
+ account_payload = params.select {|k,v| account_keys.include?(k) }
177
+ 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 != ''
182
+ if params['role'].to_s != ''
183
+ role = find_role_by_name(nil, params['role'])
184
+ exit 1 if role.nil?
185
+ account_payload['role'] = {id: role['id']}
186
+ end
187
+ request_payload = {account: account_payload}
188
+ response = @accounts_interface.create(request_payload)
189
+
190
+ print_green_success "Account #{account_payload['name']} added"
191
+
192
+ details([account_payload["name"]])
193
+
194
+ rescue RestClient::Exception => e
195
+ ::Morpheus::Cli::ErrorHandler.new.print_rest_exception(e)
196
+ exit 1
197
+ end
198
+ end
199
+
200
+ def update(args)
201
+ 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
+ options = {}
208
+ optparse = OptionParser.new do|opts|
209
+ opts.banner = usage
210
+ Morpheus::Cli::CliCommand.genericOptions(opts,options)
211
+ end
212
+ optparse.parse(args)
213
+
214
+ connect(options)
215
+
216
+ begin
217
+
218
+ account = nil
219
+ if name.to_s =~ /\Aid:/
220
+ id = name.sub('id:', '')
221
+ account = find_account_by_id(id)
222
+ else
223
+ find_account_by_name(name)
224
+ end
225
+ exit 1 if account.nil?
226
+
227
+ #params = Morpheus::Cli::OptionTypes.prompt(update_account_option_types, options[:options], @api_client, options[:params]) # options[:params] is mysterious
228
+ params = options[:options] || {}
229
+
230
+ if params.empty?
231
+ puts "\n#{usage}\n\n"
232
+ option_lines = update_account_option_types.collect {|it| "\t-O #{it['fieldName']}=\"value\"" }.join("\n")
233
+ puts "\nAvailable Options:\n#{option_lines}\n\n"
234
+ exit 1
235
+ end
236
+
237
+ #puts "parsed params is : #{params.inspect}"
238
+ account_keys = ['name', 'description', 'currency']
239
+ account_payload = params.select {|k,v| account_keys.include?(k) }
240
+ 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 != ''
245
+ if params['role'].to_s != ''
246
+ role = find_role_by_name(nil, params['role'])
247
+ exit 1 if role.nil?
248
+ account_payload['role'] = {id: role['id']}
249
+ end
250
+ 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"
253
+ rescue RestClient::Exception => e
254
+ ::Morpheus::Cli::ErrorHandler.new.print_rest_exception(e)
255
+ exit 1
256
+ end
257
+ end
258
+
259
+ def remove(args)
260
+ 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
+ options = {}
267
+ optparse = OptionParser.new do|opts|
268
+ opts.banner = usage
269
+ Morpheus::Cli::CliCommand.genericOptions(opts,options)
270
+ end
271
+ optparse.parse(args)
272
+ connect(options)
273
+ begin
274
+ # allow finding by ID since name is not unique!
275
+ account = ((name.to_s =~ /\A\d{1,}\Z/) ? find_account_by_id(name) : find_account_by_name(name) )
276
+ 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"
281
+ rescue RestClient::Exception => e
282
+ ::Morpheus::Cli::ErrorHandler.new.print_rest_exception(e)
283
+ exit 1
284
+ end
285
+ end
286
+
287
+ private
288
+
289
+
290
+ def add_account_option_types
291
+ [
292
+ {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'displayOrder' => 1},
293
+ {'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text', 'displayOrder' => 2},
294
+ {'fieldName' => 'role', 'fieldLabel' => 'Base Role', 'type' => 'text', 'displayOrder' => 3},
295
+ {'fieldName' => 'currency', 'fieldLabel' => 'Currency', 'type' => 'text', 'displayOrder' => 4},
296
+ {'fieldName' => 'instanceLimits.maxStorage', 'fieldLabel' => 'Max Storage (bytes)', 'type' => 'text', 'displayOrder' => 5},
297
+ {'fieldName' => 'instanceLimits.maxMemory', 'fieldLabel' => 'Max Memory (bytes)', 'type' => 'text', 'displayOrder' => 6},
298
+ {'fieldName' => 'instanceLimits.maxCpu', 'fieldLabel' => 'CPU Count', 'type' => 'text', 'displayOrder' => 7},
299
+ ]
300
+ end
301
+
302
+ def update_account_option_types
303
+ add_account_option_types
304
+ end
305
+
306
+ end