morpheus-cli 5.4.3.1 → 5.4.4.2
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/Dockerfile +1 -1
- data/lib/morpheus/api/api_client.rb +8 -0
- data/lib/morpheus/api/catalog_item_types_interface.rb +9 -12
- data/lib/morpheus/api/clusters_interface.rb +12 -0
- data/lib/morpheus/api/credential_types_interface.rb +9 -0
- data/lib/morpheus/api/credentials_interface.rb +9 -0
- data/lib/morpheus/api/monitoring_apps_interface.rb +12 -4
- data/lib/morpheus/api/monitoring_checks_interface.rb +12 -4
- data/lib/morpheus/api/monitoring_groups_interface.rb +13 -5
- data/lib/morpheus/api/monitoring_incidents_interface.rb +12 -4
- data/lib/morpheus/api/options_interface.rb +8 -1
- data/lib/morpheus/api/power_schedules_interface.rb +2 -2
- data/lib/morpheus/api/service_plans_interface.rb +6 -0
- data/lib/morpheus/cli/cli_command.rb +10 -17
- data/lib/morpheus/cli/commands/catalog_item_types_command.rb +75 -8
- data/lib/morpheus/cli/commands/clusters.rb +119 -5
- data/lib/morpheus/cli/commands/credential_types_command.rb +36 -0
- data/lib/morpheus/cli/commands/credentials_command.rb +124 -0
- data/lib/morpheus/cli/commands/hosts.rb +20 -2
- data/lib/morpheus/cli/commands/instances.rb +19 -4
- data/lib/morpheus/cli/commands/monitoring_apps_command.rb +8 -8
- data/lib/morpheus/cli/commands/monitoring_checks_command.rb +8 -8
- data/lib/morpheus/cli/commands/monitoring_groups_command.rb +8 -8
- data/lib/morpheus/cli/commands/monitoring_incidents_command.rb +8 -8
- data/lib/morpheus/cli/commands/power_schedules_command.rb +189 -258
- data/lib/morpheus/cli/commands/service_plans_command.rb +51 -4
- data/lib/morpheus/cli/commands/storage_server_types.rb +0 -5
- data/lib/morpheus/cli/commands/storage_servers.rb +0 -6
- data/lib/morpheus/cli/commands/storage_volume_types.rb +0 -5
- data/lib/morpheus/cli/commands/storage_volumes.rb +0 -6
- data/lib/morpheus/cli/mixins/provisioning_helper.rb +37 -27
- data/lib/morpheus/cli/mixins/rest_command.rb +20 -4
- data/lib/morpheus/cli/mixins/secondary_rest_command.rb +10 -4
- data/lib/morpheus/cli/mixins/storage_servers_helper.rb +0 -63
- data/lib/morpheus/cli/mixins/storage_volumes_helper.rb +0 -43
- data/lib/morpheus/cli/option_types.rb +4 -3
- data/lib/morpheus/cli/version.rb +1 -1
- data/lib/morpheus/routes.rb +13 -3
- metadata +11 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 035407b70b8d466e8167c8c82dcc564c1b1ec3890411efc1f0cada46f29b5fb7
|
4
|
+
data.tar.gz: 1af6373e32fd55e17031919e958987c3928f3cc9dd1537bdd03fa245f5d41c63
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5635c593c0a181fab9635275458448336b593f87462e53586b5caf6d255710d3fcb2e749772b6a03ff68e3362a73c7e764e4df408dd3b8b7cd7a5bc0082e3e85
|
7
|
+
data.tar.gz: 10eb5b76228b348d8734c48014687a91adb2fece61d63905bdea17699b3d0a2751e3d509f12fe77e78871cf954c3bfe22443d48feb43d8af8da698d77a037f24
|
data/Dockerfile
CHANGED
@@ -892,6 +892,14 @@ class Morpheus::APIClient
|
|
892
892
|
Morpheus::SnapshotsInterface.new(common_interface_options).setopts(@options)
|
893
893
|
end
|
894
894
|
|
895
|
+
def credentials
|
896
|
+
Morpheus::CredentialsInterface.new(common_interface_options).setopts(@options)
|
897
|
+
end
|
898
|
+
|
899
|
+
def credential_types
|
900
|
+
Morpheus::CredentialTypesInterface.new(common_interface_options).setopts(@options)
|
901
|
+
end
|
902
|
+
|
895
903
|
def rest(endpoint)
|
896
904
|
Morpheus::RestInterface.new(common_interface_options).setopts(@options.merge({base_path: "#{@base_url}/api/#{endpoint}"}))
|
897
905
|
end
|
@@ -6,22 +6,19 @@ class Morpheus::CatalogItemTypesInterface < Morpheus::RestInterface
|
|
6
6
|
"/api/catalog-item-types"
|
7
7
|
end
|
8
8
|
|
9
|
-
# NOT json, multipart file upload
|
10
|
-
# def update_logo(id, logo_file)
|
11
|
-
# url = "#{base_path}/#{id}/update-logo"
|
12
|
-
# headers = { :params => {}, :authorization => "Bearer #{@access_token}"}
|
13
|
-
# payload = {}
|
14
|
-
# payload[:logo] = logo_file
|
15
|
-
# payload[:multipart] = true
|
16
|
-
# execute(method: :post, url: url, headers: headers, payload: payload)
|
17
|
-
# end
|
18
|
-
|
19
9
|
# NOT json, multipart file upload, uses PUT update endpoint
|
20
|
-
def update_logo(id, logo_file)
|
10
|
+
def update_logo(id, logo_file, dark_logo_file=nil)
|
11
|
+
#url = "#{base_path}/#{id}/update-logo"
|
21
12
|
url = "#{base_path}/#{id}"
|
22
13
|
headers = { :params => {}, :authorization => "Bearer #{@access_token}"}
|
23
14
|
payload = {}
|
24
|
-
payload["catalogItemType"] = {
|
15
|
+
payload["catalogItemType"] = {}
|
16
|
+
if logo_file
|
17
|
+
payload["catalogItemType"]["logo"] = logo_file
|
18
|
+
end
|
19
|
+
if dark_logo_file
|
20
|
+
payload["catalogItemType"]["darkLogo"] = dark_logo_file
|
21
|
+
end
|
25
22
|
payload[:multipart] = true
|
26
23
|
execute(method: :put, url: url, headers: headers, payload: payload)
|
27
24
|
end
|
@@ -91,6 +91,18 @@ class Morpheus::ClustersInterface < Morpheus::APIClient
|
|
91
91
|
execute(method: :get, url: url, headers: headers)
|
92
92
|
end
|
93
93
|
|
94
|
+
def destroy_worker(id, worker_id, params={})
|
95
|
+
url = "#{base_path}/#{id}/servers/#{worker_id}"
|
96
|
+
headers = { params: params, authorization: "Bearer #{@access_token}" }
|
97
|
+
execute(method: :delete, url: url, headers: headers)
|
98
|
+
end
|
99
|
+
|
100
|
+
def update_worker_count(id, params={})
|
101
|
+
url = "#{base_path}/#{id}/worker-count"
|
102
|
+
headers = { params: params, authorization: "Bearer #{@access_token}" }
|
103
|
+
execute(method: :put, url: url, headers: headers)
|
104
|
+
end
|
105
|
+
|
94
106
|
def list_services(id, params={})
|
95
107
|
url = "#{base_path}/#{id}/services"
|
96
108
|
headers = { params: params, authorization: "Bearer #{@access_token}" }
|
@@ -38,20 +38,28 @@ class Morpheus::MonitoringAppsInterface < Morpheus::APIClient
|
|
38
38
|
execute(opts)
|
39
39
|
end
|
40
40
|
|
41
|
-
def
|
42
|
-
url = "#{@base_url}/api/monitoring/apps/#{id}/
|
41
|
+
def mute(id, payload={})
|
42
|
+
url = "#{@base_url}/api/monitoring/apps/#{id}/mute"
|
43
43
|
headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
|
44
44
|
opts = {method: :put, url: url, headers: headers, payload: payload.to_json}
|
45
45
|
execute(opts)
|
46
46
|
end
|
47
47
|
|
48
|
-
def
|
49
|
-
url = "#{@base_url}/api/monitoring/apps/
|
48
|
+
def mute_all(payload={})
|
49
|
+
url = "#{@base_url}/api/monitoring/apps/mute-all"
|
50
50
|
headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
|
51
51
|
opts = {method: :put, url: url, headers: headers, payload: payload.to_json}
|
52
52
|
execute(opts)
|
53
53
|
end
|
54
54
|
|
55
|
+
def quarantine(id, payload={})
|
56
|
+
mute(id, payload)
|
57
|
+
end
|
58
|
+
|
59
|
+
def quarantine_all(payload={})
|
60
|
+
mute_all(payload)
|
61
|
+
end
|
62
|
+
|
55
63
|
def statistics(id, params={})
|
56
64
|
url = "#{@base_url}/api/monitoring/apps/#{id}/statistics"
|
57
65
|
headers = { params: params, authorization: "Bearer #{@access_token}" }
|
@@ -39,22 +39,30 @@ class Morpheus::MonitoringChecksInterface < Morpheus::APIClient
|
|
39
39
|
execute(opts)
|
40
40
|
end
|
41
41
|
|
42
|
-
def
|
43
|
-
url = "#{@base_url}/api/monitoring/checks/#{id}/
|
42
|
+
def mute(id, options={})
|
43
|
+
url = "#{@base_url}/api/monitoring/checks/#{id}/mute"
|
44
44
|
headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
|
45
45
|
payload = options
|
46
46
|
opts = {method: :put, url: url, headers: headers, payload: payload.to_json}
|
47
47
|
execute(opts)
|
48
48
|
end
|
49
49
|
|
50
|
-
def
|
51
|
-
url = "#{@base_url}/api/monitoring/checks/
|
50
|
+
def mute_all(options={})
|
51
|
+
url = "#{@base_url}/api/monitoring/checks/mute-all"
|
52
52
|
headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
|
53
53
|
payload = options
|
54
54
|
opts = {method: :put, url: url, headers: headers, payload: payload.to_json}
|
55
55
|
execute(opts)
|
56
56
|
end
|
57
57
|
|
58
|
+
def quarantine(id, payload={})
|
59
|
+
mute(id, payload)
|
60
|
+
end
|
61
|
+
|
62
|
+
def quarantine_all(payload={})
|
63
|
+
mute_all(payload)
|
64
|
+
end
|
65
|
+
|
58
66
|
def history(id, params={})
|
59
67
|
url = "#{@base_url}/api/monitoring/checks/#{id}/history"
|
60
68
|
headers = { params: params, authorization: "Bearer #{@access_token}" }
|
@@ -38,20 +38,28 @@ class Morpheus::MonitoringGroupsInterface < Morpheus::APIClient
|
|
38
38
|
execute(opts)
|
39
39
|
end
|
40
40
|
|
41
|
-
def
|
42
|
-
url = "#{@base_url}/api/monitoring/groups/#{id}/
|
41
|
+
def mute(id, payload={})
|
42
|
+
url = "#{@base_url}/api/monitoring/groups/#{id}/mute"
|
43
43
|
headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
|
44
44
|
opts = {method: :put, url: url, headers: headers, payload: payload.to_json}
|
45
45
|
execute(opts)
|
46
46
|
end
|
47
47
|
|
48
|
-
def
|
49
|
-
url = "#{@base_url}/api/monitoring/groups/
|
48
|
+
def mute_all(payload={})
|
49
|
+
url = "#{@base_url}/api/monitoring/groups/mute-all"
|
50
50
|
headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
|
51
51
|
opts = {method: :put, url: url, headers: headers, payload: payload.to_json}
|
52
52
|
execute(opts)
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
|
+
def quarantine(id, payload={})
|
56
|
+
mute(id, payload)
|
57
|
+
end
|
58
|
+
|
59
|
+
def quarantine_all(payload={})
|
60
|
+
mute_all(payload)
|
61
|
+
end
|
62
|
+
|
55
63
|
def history(id, params={})
|
56
64
|
url = "#{@base_url}/api/monitoring/groups/#{id}/history"
|
57
65
|
headers = { params: params, authorization: "Bearer #{@access_token}" }
|
@@ -58,21 +58,29 @@ class Morpheus::MonitoringIncidentsInterface < Morpheus::APIClient
|
|
58
58
|
execute(opts)
|
59
59
|
end
|
60
60
|
|
61
|
-
def
|
62
|
-
url = "#{@base_url}/api/monitoring/incidents/#{id}/
|
61
|
+
def mute(id, options={})
|
62
|
+
url = "#{@base_url}/api/monitoring/incidents/#{id}/mute"
|
63
63
|
headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
|
64
64
|
payload = options
|
65
65
|
opts = {method: :put, url: url, headers: headers, payload: payload.to_json}
|
66
66
|
execute(opts)
|
67
67
|
end
|
68
68
|
|
69
|
-
def
|
70
|
-
url = "#{@base_url}/api/monitoring/incidents/
|
69
|
+
def mute_all(payload={})
|
70
|
+
url = "#{@base_url}/api/monitoring/incidents/mute-all"
|
71
71
|
headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
|
72
72
|
opts = {method: :put, url: url, headers: headers, payload: payload.to_json}
|
73
73
|
execute(opts)
|
74
74
|
end
|
75
75
|
|
76
|
+
def quarantine(id, payload={})
|
77
|
+
mute(id, payload)
|
78
|
+
end
|
79
|
+
|
80
|
+
def quarantine_all(payload={})
|
81
|
+
mute_all(payload)
|
82
|
+
end
|
83
|
+
|
76
84
|
def history(id, params={})
|
77
85
|
url = "#{@base_url}/api/monitoring/incidents/#{id}/history"
|
78
86
|
headers = { params: params, authorization: "Bearer #{@access_token}" }
|
@@ -2,8 +2,15 @@ require 'morpheus/api/api_client'
|
|
2
2
|
|
3
3
|
class Morpheus::OptionsInterface < Morpheus::APIClient
|
4
4
|
|
5
|
-
def
|
5
|
+
def options_for_type(option_type, params={})
|
6
|
+
options_for_source(option_type['optionSource'], params, option_type['optionSourceType'])
|
7
|
+
end
|
8
|
+
|
9
|
+
def options_for_source(source,params = {}, option_source_type=nil)
|
6
10
|
url = "#{@base_url}/api/options/#{source}"
|
11
|
+
if option_source_type
|
12
|
+
url = "#{@base_url}/api/options/#{option_source_type}/#{source}"
|
13
|
+
end
|
7
14
|
headers = { params: params, authorization: "Bearer #{@access_token}" }
|
8
15
|
execute(method: :get, url: url, headers: headers)
|
9
16
|
end
|
@@ -2,10 +2,10 @@ require 'morpheus/api/api_client'
|
|
2
2
|
|
3
3
|
class Morpheus::PowerSchedulesInterface < Morpheus::APIClient
|
4
4
|
|
5
|
-
def get(id)
|
5
|
+
def get(id, params={})
|
6
6
|
raise "#{self.class}.get() passed a blank id!" if id.to_s == ''
|
7
7
|
url = "#{@base_url}/api/power-schedules/#{id}"
|
8
|
-
headers = { params:
|
8
|
+
headers = { params: params, authorization: "Bearer #{@access_token}" }
|
9
9
|
opts = {method: :get, url: url, timeout: 10, headers: headers}
|
10
10
|
execute(opts)
|
11
11
|
end
|
@@ -42,6 +42,12 @@ class Morpheus::ServicePlansInterface < Morpheus::APIClient
|
|
42
42
|
execute(method: :put, url: url, headers: headers)
|
43
43
|
end
|
44
44
|
|
45
|
+
def destroy(id, params={})
|
46
|
+
url = "#{base_path}/#{id}"
|
47
|
+
headers = { :params => params, :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
|
48
|
+
execute(method: :delete, url: url, headers: headers)
|
49
|
+
end
|
50
|
+
|
45
51
|
def provision_types(params={})
|
46
52
|
url = "#{base_path}/provision-types"
|
47
53
|
headers = { params: params, authorization: "Bearer #{@access_token}" }
|
@@ -151,23 +151,13 @@ module Morpheus
|
|
151
151
|
|
152
152
|
# add each one to the OptionParser
|
153
153
|
option_types.each do |option_type|
|
154
|
-
|
155
|
-
|
156
|
-
if field_name.empty?
|
157
|
-
puts "Missing fieldName for option type: #{option_type}" if Morpheus::Logging.debug?
|
154
|
+
if option_type['fieldName'].empty?
|
155
|
+
puts_error "Missing fieldName for option type: #{option_type}" if Morpheus::Logging.debug?
|
158
156
|
next
|
159
157
|
end
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
field_namespace << ns
|
164
|
-
end
|
165
|
-
end
|
166
|
-
|
167
|
-
full_field_name = field_name
|
168
|
-
if !field_namespace.empty?
|
169
|
-
full_field_name = "#{field_namespace.join('.')}.#{field_name}"
|
170
|
-
end
|
158
|
+
full_field_name = option_type['fieldContext'].to_s.empty? ? option_type['fieldName'] : "#{option_type['fieldContext']}.#{option_type['fieldName']}"
|
159
|
+
field_namespace = full_field_name.split(".")
|
160
|
+
field_name = field_namespace.pop
|
171
161
|
|
172
162
|
description = "#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? ('(' + option_type['fieldAddOn'] + ') ') : '' }#{!option_type['required'] ? ' (optional)' : ''}"
|
173
163
|
if option_type['description']
|
@@ -1507,8 +1497,11 @@ module Morpheus
|
|
1507
1497
|
type, *ids = args
|
1508
1498
|
type = type.to_s.singularize.underscore
|
1509
1499
|
# still relying on the command or helper to define these _label and _key methods
|
1510
|
-
label = send("#{type}_label")
|
1511
|
-
object_key = send("#{type}_object_key")
|
1500
|
+
# label = send("#{type}_label")
|
1501
|
+
# object_key = send("#{type}_object_key")
|
1502
|
+
# ^ nope, not for long!
|
1503
|
+
object_key = respond_to?("#{type}_object_key", true) ? send("#{type}_object_key") : type.camelcase.singularize
|
1504
|
+
label = respond_to?("#{type}_label", true) ? send("#{type}_label") : type.titleize
|
1512
1505
|
interface_name = "@#{type.pluralize}_interface"
|
1513
1506
|
interface = instance_variable_get(interface_name)
|
1514
1507
|
if interface.nil?
|
@@ -13,7 +13,7 @@ class Morpheus::Cli::CatalogItemTypesCommand
|
|
13
13
|
set_command_description "Self Service: View and manage catalog item types"
|
14
14
|
|
15
15
|
register_subcommands :list, :get, :add, :update, :remove
|
16
|
-
register_subcommands({:'update-logo' => :update_logo})
|
16
|
+
register_subcommands({:'update-logo' => :update_logo, :'update-dark-logo' => :update_dark_logo})
|
17
17
|
|
18
18
|
def connect(opts)
|
19
19
|
@api_client = establish_remote_appliance_connection(opts)
|
@@ -224,6 +224,7 @@ EOT
|
|
224
224
|
options = {}
|
225
225
|
params = {}
|
226
226
|
logo_file = nil
|
227
|
+
dark_logo_file = nil
|
227
228
|
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
228
229
|
opts.banner = subcommand_usage("[name] [options]")
|
229
230
|
# opts.on('-t', '--type [instance|blueprint|workflow]', "Item Type, default is instance.") do |val|
|
@@ -235,7 +236,7 @@ EOT
|
|
235
236
|
filename = val
|
236
237
|
logo_file = nil
|
237
238
|
if filename == 'null'
|
238
|
-
|
239
|
+
logo_file = 'null' # clear it
|
239
240
|
else
|
240
241
|
filename = File.expand_path(filename)
|
241
242
|
if !File.exists?(filename)
|
@@ -244,6 +245,19 @@ EOT
|
|
244
245
|
logo_file = File.new(filename, 'rb')
|
245
246
|
end
|
246
247
|
end
|
248
|
+
opts.on('--dark-logo FILE', String, "Upload a custom dark logo icon") do |val|
|
249
|
+
filename = val
|
250
|
+
dark_logo_file = nil
|
251
|
+
if filename == 'null'
|
252
|
+
dark_logo_file = 'null' # clear it
|
253
|
+
else
|
254
|
+
filename = File.expand_path(filename)
|
255
|
+
if !File.exists?(filename)
|
256
|
+
raise_command_error "File not found: #{filename}"
|
257
|
+
end
|
258
|
+
dark_logo_file = File.new(filename, 'rb')
|
259
|
+
end
|
260
|
+
end
|
247
261
|
opts.on('--config-file FILE', String, "Config from a local JSON or YAML file") do |val|
|
248
262
|
options[:config_file] = val.to_s
|
249
263
|
file_content = nil
|
@@ -346,9 +360,9 @@ EOT
|
|
346
360
|
end
|
347
361
|
json_response = @catalog_item_types_interface.create(payload)
|
348
362
|
if json_response['success']
|
349
|
-
if logo_file
|
363
|
+
if logo_file || dark_logo_file
|
350
364
|
begin
|
351
|
-
@catalog_item_types_interface.update_logo(json_response['catalogItemType']['id'], logo_file)
|
365
|
+
@catalog_item_types_interface.update_logo(json_response['catalogItemType']['id'], logo_file, dark_logo_file)
|
352
366
|
rescue RestClient::Exception => e
|
353
367
|
print_red_alert "Failed to save logo!"
|
354
368
|
print_rest_exception(e, options)
|
@@ -368,6 +382,7 @@ EOT
|
|
368
382
|
params = {}
|
369
383
|
payload = {}
|
370
384
|
logo_file = nil
|
385
|
+
dark_logo_file = nil
|
371
386
|
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
372
387
|
opts.banner = subcommand_usage("[type] [options]")
|
373
388
|
build_option_type_options(opts, options, update_catalog_item_type_option_types)
|
@@ -375,7 +390,7 @@ EOT
|
|
375
390
|
filename = val
|
376
391
|
logo_file = nil
|
377
392
|
if filename == 'null'
|
378
|
-
|
393
|
+
logo_file = 'null' # clear it
|
379
394
|
else
|
380
395
|
filename = File.expand_path(filename)
|
381
396
|
if !File.exists?(filename)
|
@@ -384,6 +399,19 @@ EOT
|
|
384
399
|
logo_file = File.new(filename, 'rb')
|
385
400
|
end
|
386
401
|
end
|
402
|
+
opts.on('--dark-logo FILE', String, "Upload a custom dark logo icon") do |val|
|
403
|
+
filename = val
|
404
|
+
dark_logo_file = nil
|
405
|
+
if filename == 'null'
|
406
|
+
dark_logo_file = 'null' # clear it
|
407
|
+
else
|
408
|
+
filename = File.expand_path(filename)
|
409
|
+
if !File.exists?(filename)
|
410
|
+
raise_command_error "File not found: #{filename}"
|
411
|
+
end
|
412
|
+
dark_logo_file = File.new(filename, 'rb')
|
413
|
+
end
|
414
|
+
end
|
387
415
|
opts.on('--config-file FILE', String, "Config from a local JSON or YAML file") do |val|
|
388
416
|
options[:config_file] = val.to_s
|
389
417
|
file_content = nil
|
@@ -474,7 +502,7 @@ EOT
|
|
474
502
|
params['workflow'] = {'id' => params['workflow']} if params['workflow'] && !params['workflow'].is_a?(Hash)
|
475
503
|
params['blueprint'] = {'id' => params['blueprint']} if params['blueprint'] && !params['blueprint'].is_a?(Hash)
|
476
504
|
payload.deep_merge!({catalog_item_type_object_key => params})
|
477
|
-
if payload[catalog_item_type_object_key].empty? # || options[:no_prompt]
|
505
|
+
if payload[catalog_item_type_object_key].empty? && (!logo_file && !dark_logo_file)# || options[:no_prompt]
|
478
506
|
raise_command_error "Specify at least one option to update.\n#{optparse}"
|
479
507
|
end
|
480
508
|
end
|
@@ -485,9 +513,9 @@ EOT
|
|
485
513
|
end
|
486
514
|
json_response = @catalog_item_types_interface.update(catalog_item_type['id'], payload)
|
487
515
|
if json_response['success']
|
488
|
-
if logo_file
|
516
|
+
if logo_file || dark_logo_file
|
489
517
|
begin
|
490
|
-
@catalog_item_types_interface.update_logo(json_response['catalogItemType']['id'], logo_file)
|
518
|
+
@catalog_item_types_interface.update_logo(json_response['catalogItemType']['id'], logo_file, dark_logo_file)
|
491
519
|
rescue RestClient::Exception => e
|
492
520
|
print_red_alert "Failed to save logo!"
|
493
521
|
print_rest_exception(e, options)
|
@@ -541,6 +569,45 @@ EOT
|
|
541
569
|
end
|
542
570
|
end
|
543
571
|
|
572
|
+
def update_dark_logo(args)
|
573
|
+
options = {}
|
574
|
+
params = {}
|
575
|
+
filename = nil
|
576
|
+
optparse = Morpheus::Cli::OptionParser.new do|opts|
|
577
|
+
opts.banner = subcommand_usage("[type] [file]")
|
578
|
+
build_common_options(opts, options, [:json, :dry_run, :remote])
|
579
|
+
opts.footer = "Update the dark logo for a catalog item type." + "\n" +
|
580
|
+
"[type] is required. This is the name or id of a catalog item type." + "\n" +
|
581
|
+
"[file] is required. This is the path of the dark logo file"
|
582
|
+
end
|
583
|
+
optparse.parse!(args)
|
584
|
+
verify_args!(args:args, optparse:optparse, count:2)
|
585
|
+
connect(options)
|
586
|
+
catalog_item_type = find_catalog_item_type_by_name_or_id(args[0])
|
587
|
+
return 1 if catalog_item_type.nil?
|
588
|
+
filename = args[1]
|
589
|
+
dark_logo_file = nil
|
590
|
+
if filename == 'null'
|
591
|
+
dark_logo_file = 'null' # clear it
|
592
|
+
else
|
593
|
+
filename = File.expand_path(filename)
|
594
|
+
if !File.exists?(filename)
|
595
|
+
raise_command_error "File not found: #{filename}"
|
596
|
+
end
|
597
|
+
dark_logo_file = File.new(filename, 'rb')
|
598
|
+
end
|
599
|
+
@catalog_item_types_interface.setopts(options)
|
600
|
+
if options[:dry_run]
|
601
|
+
print_dry_run @catalog_item_types_interface.dry.update_logo(catalog_item_type['id'], nil, dark_logo_file)
|
602
|
+
return
|
603
|
+
end
|
604
|
+
json_response = @catalog_item_types_interface.update_logo(catalog_item_type['id'], nil, dark_logo_file)
|
605
|
+
render_response(json_response, options, catalog_item_type_object_key) do
|
606
|
+
print_green_success "Updated catalog item type #{catalog_item_type['name']} logo"
|
607
|
+
return _get(catalog_item_type["id"], {}, options)
|
608
|
+
end
|
609
|
+
end
|
610
|
+
|
544
611
|
def remove(args)
|
545
612
|
options = {}
|
546
613
|
params = {}
|