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