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.
- checksums.yaml +4 -4
- data/lib/morpheus/api/api_client.rb +4 -0
- data/lib/morpheus/api/app_templates_interface.rb +74 -0
- data/lib/morpheus/api/instance_types_interface.rb +9 -0
- data/lib/morpheus/api/instances_interface.rb +16 -0
- data/lib/morpheus/api/roles_interface.rb +37 -1
- data/lib/morpheus/cli.rb +4 -1
- data/lib/morpheus/cli/accounts.rb +82 -58
- data/lib/morpheus/cli/app_templates.rb +908 -0
- data/lib/morpheus/cli/apps.rb +226 -187
- data/lib/morpheus/cli/cli_command.rb +57 -30
- data/lib/morpheus/cli/clouds.rb +50 -65
- data/lib/morpheus/cli/deployments.rb +18 -33
- data/lib/morpheus/cli/deploys.rb +1 -3
- data/lib/morpheus/cli/groups.rb +54 -38
- data/lib/morpheus/cli/hosts.rb +86 -80
- data/lib/morpheus/cli/instance_types.rb +42 -29
- data/lib/morpheus/cli/instances.rb +192 -69
- data/lib/morpheus/cli/key_pairs.rb +70 -87
- data/lib/morpheus/cli/license.rb +7 -9
- data/lib/morpheus/cli/load_balancers.rb +23 -53
- data/lib/morpheus/cli/mixins/accounts_helper.rb +7 -8
- data/lib/morpheus/cli/mixins/print_helper.rb +67 -0
- data/lib/morpheus/cli/mixins/provisioning_helper.rb +461 -0
- data/lib/morpheus/cli/option_types.rb +71 -18
- data/lib/morpheus/cli/roles.rb +725 -34
- data/lib/morpheus/cli/security_group_rules.rb +50 -70
- data/lib/morpheus/cli/security_groups.rb +61 -48
- data/lib/morpheus/cli/shell.rb +123 -14
- data/lib/morpheus/cli/tasks.rb +24 -59
- data/lib/morpheus/cli/users.rb +86 -71
- data/lib/morpheus/cli/version.rb +1 -1
- data/lib/morpheus/cli/virtual_images.rb +21 -51
- data/lib/morpheus/cli/workflows.rb +14 -29
- data/lib/morpheus/ext/nil_class.rb +5 -0
- data/lib/morpheus/formatters.rb +1 -0
- metadata +7 -3
- data/lib/morpheus/cli/error_handler.rb +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1d8887267dd938f32dd8541223f21e0011b15f9f
|
4
|
+
data.tar.gz: 9654191eb9c4bf4162c42f3cad2955ff9502c79d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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: :
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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])
|
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
|
-
|
180
|
-
|
181
|
-
|
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
|
-
|
189
|
-
|
190
|
-
print_green_success "Account #{account_payload['name']} added"
|
186
|
+
json_response = @accounts_interface.create(request_payload)
|
191
187
|
|
192
|
-
|
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
|
-
|
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
|
-
|
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])
|
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
|
-
|
243
|
-
|
244
|
-
|
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
|
-
|
252
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
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
|
-
|
306
|
+
print_rest_exception(e, options)
|
283
307
|
exit 1
|
284
308
|
end
|
285
309
|
end
|