morpheus-cli 5.5.3 → 5.5.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +1 -1
  3. data/lib/morpheus/api/api_client.rb +12 -0
  4. data/lib/morpheus/api/appliance_settings_interface.rb +15 -0
  5. data/lib/morpheus/api/cypher_interface.rb +1 -2
  6. data/lib/morpheus/api/guidance_settings_interface.rb +17 -0
  7. data/lib/morpheus/api/monitoring_settings_interface.rb +25 -0
  8. data/lib/morpheus/api/network_server_groups_interface.rb +7 -0
  9. data/lib/morpheus/cli/cli_command.rb +10 -1
  10. data/lib/morpheus/cli/commands/appliance_settings_command.rb +57 -2
  11. data/lib/morpheus/cli/commands/backup_settings_command.rb +1 -1
  12. data/lib/morpheus/cli/commands/catalog_item_types_command.rb +6 -1
  13. data/lib/morpheus/cli/commands/cypher_command.rb +3 -0
  14. data/lib/morpheus/cli/commands/guidance_command.rb +2 -2
  15. data/lib/morpheus/cli/commands/guidance_settings.rb +148 -0
  16. data/lib/morpheus/cli/commands/log_settings_command.rb +1 -1
  17. data/lib/morpheus/cli/commands/monitoring_settings.rb +228 -0
  18. data/lib/morpheus/cli/commands/network_server_groups_command.rb +222 -0
  19. data/lib/morpheus/cli/commands/provisioning_settings_command.rb +1 -1
  20. data/lib/morpheus/cli/commands/reports_command.rb +10 -0
  21. data/lib/morpheus/cli/commands/whitelabel_settings_command.rb +1 -1
  22. data/lib/morpheus/cli/mixins/provisioning_helper.rb +14 -12
  23. data/lib/morpheus/cli/mixins/rest_command.rb +5 -1
  24. data/lib/morpheus/cli/mixins/secondary_rest_command.rb +35 -12
  25. data/lib/morpheus/cli/version.rb +1 -1
  26. data/lib/morpheus/ext/string.rb +6 -4
  27. data/lib/morpheus/routes.rb +39 -7
  28. metadata +8 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 52fcaca1c4feaa6a3b07b3ed8772a6765cac55ccbac1b8d79eba9525a859829a
4
- data.tar.gz: 868ccdde25b11e328c5c275ed61374922f5a287a5d662e5d3901c0218c863808
3
+ metadata.gz: 1a66b8b7fa9512d6f649a5c369b2a5da24efe9e551b48cce4fe551bc68f9f842
4
+ data.tar.gz: 285fb4339cbf1c2ea71539d1bff2e8bed75ec6be097cffdaeda751ed49b59b6b
5
5
  SHA512:
6
- metadata.gz: 1bff4307ff46a0940add6895b3fa16ac23da050e60ddc9d200d3c1d196eb29d1a3aa82025f203abb12b9f1950dd9fe7e7bf082bc13c797c91494bcf5092990ed
7
- data.tar.gz: 874cfa21f6d6af7360c13dc504a453f3f7fb1539120c0b91af13a640727b6a19418b7c80912eb18b22dff4b4c94f8dea6f4372ba382ec7153c8936481de1131c
6
+ metadata.gz: 7fc26b54a4a2d2dfb83429e769acbc730a1f61ff1023468e49b17e056fdfc510d7f5cbb642d07cc76d26e46b1aa8cc7b631e8f658fe7f133c5c7c67301d026e6
7
+ data.tar.gz: c52f8eb39797f15a3ab811ff9f42557f879d9ef13269c633cee2f99cfce9ec2b51ab9f67ce8998ad68416b3cd94d5b5c44a642ea71167aeb93640e2baed65d82
data/Dockerfile CHANGED
@@ -1,5 +1,5 @@
1
1
  FROM ruby:2.7.5
2
2
 
3
- RUN gem install morpheus-cli -v 5.5.3
3
+ RUN gem install morpheus-cli -v 5.5.3.1
4
4
 
5
5
  ENTRYPOINT ["morpheus"]
@@ -798,10 +798,18 @@ class Morpheus::APIClient
798
798
  Morpheus::BackupSettingsInterface.new(common_interface_options).setopts(@options)
799
799
  end
800
800
 
801
+ def guidance_settings
802
+ Morpheus::GuidanceSettingsInterface.new(common_interface_options).setopts(@options)
803
+ end
804
+
801
805
  def log_settings
802
806
  Morpheus::LogSettingsInterface.new(common_interface_options).setopts(@options)
803
807
  end
804
808
 
809
+ def monitoring_settings
810
+ Morpheus::MonitoringSettingsInterface.new(common_interface_options).setopts(@options)
811
+ end
812
+
805
813
  def whitelabel_settings
806
814
  Morpheus::WhitelabelSettingsInterface.new(common_interface_options).setopts(@options)
807
815
  end
@@ -894,6 +902,10 @@ class Morpheus::APIClient
894
902
  Morpheus::NetworkServersInterface.new(common_interface_options).setopts(@options)
895
903
  end
896
904
 
905
+ def network_server_groups
906
+ Morpheus::NetworkServerGroupsInterface.new(common_interface_options).setopts(@options)
907
+ end
908
+
897
909
  def network_edge_clusters
898
910
  Morpheus::NetworkEdgeClustersInterface.new(common_interface_options).setopts(@options)
899
911
  end
@@ -24,4 +24,19 @@ class Morpheus::ApplianceSettingsInterface < Morpheus::APIClient
24
24
  opts = {method: :get, url: url, headers: headers}
25
25
  execute(opts)
26
26
  end
27
+
28
+ def maintenance(params={}, payload={})
29
+ url = "#{base_path}/maintenance"
30
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
31
+ opts = {method: :post, url: url, headers: headers, payload: payload}
32
+ execute(opts)
33
+ end
34
+
35
+ def reindex(params={}, payload={})
36
+ url = "#{base_path}/reindex"
37
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
38
+ opts = {method: :post, url: url, headers: headers, payload: payload}
39
+ execute(opts)
40
+ end
41
+
27
42
  end
@@ -4,8 +4,7 @@ require 'uri'
4
4
  class Morpheus::CypherInterface < Morpheus::APIClient
5
5
 
6
6
  def base_path
7
- # can use just "/api/cypher" in 4.1.2
8
- "/api/cypher/v1"
7
+ "/api/cypher"
9
8
  end
10
9
 
11
10
  def get(item_key, params={})
@@ -0,0 +1,17 @@
1
+ require 'morpheus/api/api_client'
2
+
3
+ class Morpheus::GuidanceSettingsInterface < Morpheus::APIClient
4
+
5
+ def base_path
6
+ "/api/guidance-settings"
7
+ end
8
+
9
+ def get(params={}, headers={})
10
+ execute(method: :get, url: "#{base_path}", params: params, headers: headers)
11
+ end
12
+
13
+ def update(payload, params={}, headers={})
14
+ execute(method: :put, url: "#{base_path}", payload: payload, params: params, headers: headers)
15
+ end
16
+
17
+ end
@@ -0,0 +1,25 @@
1
+ require 'morpheus/api/api_client'
2
+
3
+ class Morpheus::MonitoringSettingsInterface < Morpheus::APIClient
4
+
5
+ def base_path
6
+ "/api/monitoring-settings"
7
+ end
8
+
9
+ def get(params={}, headers={})
10
+ execute(method: :get, url: "#{base_path}", params: params, headers: headers)
11
+ end
12
+
13
+ def update(payload, params={}, headers={})
14
+ execute(method: :put, url: "#{base_path}", payload: payload, params: params, headers: headers)
15
+ end
16
+
17
+ def update_service_now(payload, params={}, headers={})
18
+ execute(method: :put, url: "#{base_path}/service-now", payload: payload, params: params, headers: headers)
19
+ end
20
+
21
+ def update_new_relic(payload, params={}, headers={})
22
+ execute(method: :put, url: "#{base_path}/new-relic", payload: payload, params: params, headers: headers)
23
+ end
24
+
25
+ end
@@ -0,0 +1,7 @@
1
+ require 'morpheus/api/secondary_rest_interface'
2
+
3
+ class Morpheus::NetworkServerGroupsInterface < Morpheus::SecondaryRestInterface
4
+ def base_path(network_server_id)
5
+ "/api/networks/servers/#{network_server_id}/groups"
6
+ end
7
+ end
@@ -1614,7 +1614,16 @@ module Morpheus
1614
1614
  interface_name = "@#{type.pluralize}_interface"
1615
1615
  interface = instance_variable_get(interface_name)
1616
1616
  if interface.nil?
1617
- raise "#{self.class} has not defined interface #{interface_name}"
1617
+ api_client = instance_variable_get("@api_client")
1618
+ if api_client
1619
+ if api_client.respond_to?(type.pluralize)
1620
+ interface = api_client.send(type.pluralize)
1621
+ else
1622
+ raise "@api_client.#{type.pluralize} is not a recognized interface"
1623
+ end
1624
+ else
1625
+ raise "#{self.class} has not defined interface #{interface_name} or @api_client"
1626
+ end
1618
1627
  end
1619
1628
  begin
1620
1629
  json_response = interface.get(*ids)
@@ -6,7 +6,7 @@ class Morpheus::Cli::ApplianceSettingsCommand
6
6
 
7
7
  set_command_name :'appliance-settings'
8
8
 
9
- register_subcommands :get, :update
9
+ register_subcommands :get, :update, :toggle_maintenance, :'reindex'
10
10
 
11
11
  set_default_subcommand :get
12
12
 
@@ -103,7 +103,7 @@ class Morpheus::Cli::ApplianceSettingsCommand
103
103
  print cyan
104
104
  print enabled_zone_types.collect {|it| it['name']}.join(', ')
105
105
  end
106
- print reset "\n"
106
+ print reset, "\n"
107
107
  return 0
108
108
  rescue RestClient::Exception => e
109
109
  print_rest_exception(e, options)
@@ -307,6 +307,61 @@ class Morpheus::Cli::ApplianceSettingsCommand
307
307
  end
308
308
  end
309
309
 
310
+ def toggle_maintenance(args)
311
+ params = {}
312
+ options = {}
313
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
314
+ opts.banner = opts.banner = subcommand_usage()
315
+ opts.on("--enabled [on|off]", String, "Enabled (on) or Disabled (off)") do |val|
316
+ params['enabled'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == ''
317
+ end
318
+ build_standard_update_options(opts, options, [:auto_confirm], [:payload, :options])
319
+ opts.footer = "Toggle maintenance mode."
320
+ end
321
+ optparse.parse!(args)
322
+ connect(options)
323
+ verify_args!(args:args, optparse:optparse, count:0)
324
+ if params['enabled'].nil?
325
+ confirm!("Are you sure you would like to toggle maintenance mode?", options)
326
+ else
327
+ confirm!("Are you sure you would like to toggle maintenance mode: #{params['enabled'] ? 'on' : 'off'}?", options)
328
+ end
329
+ @appliance_settings_interface.setopts(options)
330
+ if options[:dry_run]
331
+ print_dry_run @appliance_settings_interface.dry.maintenance(params)
332
+ return
333
+ end
334
+ json_response = @appliance_settings_interface.maintenance(params)
335
+ render_response(json_response, options) do
336
+ print_green_success "Toggled maintenance mode: '#{params['enabled'] ? 'on' : 'off'}'"
337
+ end
338
+ return 0, nil
339
+ end
340
+
341
+ def reindex(args)
342
+ params = {}
343
+ options = {}
344
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
345
+ opts.banner = opts.banner = subcommand_usage()
346
+ build_standard_update_options(opts, options, [:auto_confirm], [:payload, :options])
347
+ opts.footer = "Reindex all search data."
348
+ end
349
+ optparse.parse!(args)
350
+ connect(options)
351
+ verify_args!(args:args, optparse:optparse, count:0)
352
+ confirm!("Are you sure you would like reindex all search data?", options)
353
+ @appliance_settings_interface.setopts(options)
354
+ if options[:dry_run]
355
+ print_dry_run @appliance_settings_interface.dry.reindex(params)
356
+ return
357
+ end
358
+ json_response = @appliance_settings_interface.reindex(params)
359
+ render_response(json_response, options) do
360
+ print_green_success "Reindexing all search data..."
361
+ end
362
+ return 0, nil
363
+ end
364
+
310
365
  private
311
366
 
312
367
  def format_days(days)
@@ -66,7 +66,7 @@ class Morpheus::Cli::BackupSettingsCommand
66
66
  "Backup Retention Count" => lambda {|it| it['retentionCount'] }
67
67
  }
68
68
  print_description_list(description_cols, backup_settings)
69
- print reset "\n"
69
+ print reset, "\n"
70
70
  return 0
71
71
  rescue RestClient::Exception => e
72
72
  print_rest_exception(e, options)
@@ -660,6 +660,8 @@ EOT
660
660
  "Labels" => lambda {|it| format_list(it['labels'], '', 3) },
661
661
  "Description" => 'description',
662
662
  "Type" => lambda {|it| format_catalog_type(it) },
663
+ "Visibility" => 'visibility',
664
+ "Layout Code" => 'layoutCode',
663
665
  "Blueprint" => lambda {|it| it['blueprint'] ? it['blueprint']['name'] : nil },
664
666
  "Workflow" => lambda {|it| it['workflow'] ? it['workflow']['name'] : nil },
665
667
  "Context" => lambda {|it| it['context'] },
@@ -679,6 +681,8 @@ EOT
679
681
  "Labels" => lambda {|it| format_list(it['labels']) },
680
682
  "Description" => 'description',
681
683
  "Type" => lambda {|it| format_catalog_type(it) },
684
+ "Visibility" => 'visibility',
685
+ "Layout Code" => 'layoutCode',
682
686
  "Blueprint" => lambda {|it| it['blueprint'] ? it['blueprint']['name'] : nil },
683
687
  "Workflow" => lambda {|it| it['workflow'] ? it['workflow']['name'] : nil },
684
688
  "Context" => lambda {|it| it['context'] },
@@ -725,7 +729,8 @@ EOT
725
729
  {'fieldName' => 'enabled', 'fieldLabel' => 'Enabled', 'type' => 'checkbox', 'defaultValue' => true, 'displayOrder' => 4},
726
730
  {'fieldName' => 'featured', 'fieldLabel' => 'Featured', 'type' => 'checkbox', 'defaultValue' => false, 'displayOrder' => 5},
727
731
  {'fieldName' => 'visibility', 'fieldLabel' => 'Visibility', 'type' => 'select', 'selectOptions' => [{'name' => 'Private', 'value' => 'private'}, {'name' => 'Public', 'value' => 'public'}], 'defaultValue' => 'private', 'required' => true, 'displayOrder' => 6},
728
- {'fieldName' => 'iconPath', 'fieldLabel' => 'Logo', 'type' => 'select', 'optionSource' => 'iconList', 'displayOrder' => 7},
732
+ {'fieldName' => 'layoutCode', 'fieldLabel' => 'Layout Code', 'type' => 'text', 'required' => false, 'displayOrder' => 7},
733
+ {'fieldName' => 'iconPath', 'fieldLabel' => 'Logo', 'type' => 'select', 'optionSource' => 'iconList', 'displayOrder' => 8},
729
734
  #{'fieldName' => 'optionTypes', 'fieldLabel' => 'Option Types', 'type' => 'text', 'description' => 'Option Types to include, comma separated list of names or IDs.', 'displayOrder' => 8},
730
735
  {'dependsOnCode' => 'catalogItemType.type:instance', 'fieldName' => 'config', 'fieldLabel' => 'Config', 'type' => 'code-editor', 'description' => 'JSON or YAML', 'required' => true, 'displayOrder' => 9},
731
736
  {'dependsOnCode' => 'catalogItemType.type:blueprint', 'fieldName' => 'blueprint', 'fieldLabel' => 'Blueprint', 'type' => 'select', 'optionSource' => 'blueprints', 'description' => 'Choose a blueprint to apply to the catalog item.', 'required' => true, 'noParams' => true, 'displayOrder' => 10},
@@ -274,6 +274,9 @@ EOT
274
274
  ttl = val
275
275
  end
276
276
  end
277
+ opts.on( '--type string|object', "The type of data being stored: string or object." ) do |val|
278
+ params['type'] = val
279
+ end
277
280
  # opts.on( '--no-overwrite', '--no-overwrite', "Do not overwrite existing keys. Existing keys are overwritten by default." ) do
278
281
  # params['overwrite'] = false
279
282
  # end
@@ -73,7 +73,7 @@ class Morpheus::Cli::GuidanceCommand
73
73
  print "#{cyan}#{level.capitalize}".rjust(14, ' ') + ": " + stats['type'][level].to_s.ljust(10, ' ')
74
74
  println generate_usage_bar(stats['type'][level], stats['type'].collect{|k, v| v}.reduce(:+), {:max_bars => 20, :bar_color => color})
75
75
  end
76
- print reset "\n"
76
+ print reset, "\n"
77
77
  return 0
78
78
  rescue RestClient::Exception => e
79
79
  print_rest_exception(e, options)
@@ -126,7 +126,7 @@ class Morpheus::Cli::GuidanceCommand
126
126
  {"CODE" => lambda {|it| it['code']}}
127
127
  ];
128
128
  print as_pretty_table(types, cols, options)
129
- print reset "\n"
129
+ print reset, "\n"
130
130
  return 0
131
131
  rescue RestClient::Exception => e
132
132
  print_rest_exception(e, options)
@@ -0,0 +1,148 @@
1
+ require 'morpheus/cli/cli_command'
2
+
3
+ class Morpheus::Cli::GuidanceSettings
4
+ include Morpheus::Cli::CliCommand
5
+ include Morpheus::Cli::AccountsHelper
6
+
7
+ set_command_name :'guidance-settings'
8
+ set_command_description "View and manage guidance settings"
9
+ register_subcommands :get, :update
10
+
11
+ def connect(opts)
12
+ @api_client = establish_remote_appliance_connection(opts)
13
+ @guidance_settings_interface = @api_client.guidance_settings
14
+ @options_interface = @api_client.options
15
+ end
16
+
17
+ def handle(args)
18
+ handle_subcommand(args)
19
+ end
20
+
21
+ def get(args)
22
+ params = {}
23
+ options = {}
24
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
25
+ opts.banner = subcommand_usage()
26
+ build_standard_get_options(opts, options)
27
+ opts.footer = "Get guidance settings."
28
+ end
29
+ optparse.parse!(args)
30
+ connect(options)
31
+ verify_args!(args:args, optparse:optparse, count:0)
32
+ params.merge!(parse_query_options(options))
33
+ @guidance_settings_interface.setopts(options)
34
+ if options[:dry_run]
35
+ print_dry_run @guidance_settings_interface.dry.get(options)
36
+ return
37
+ end
38
+ json_response = @guidance_settings_interface.get(options)
39
+ render_response(json_response, options, object_key) do
40
+ guidance_settings = json_response[object_key]
41
+ print_h1 "Guidance Settings", options
42
+ print_h2 "Power Settings", options.merge(:border_style => :thin)
43
+ #Power shutdown will be suggested when all of the following baseline thresholds are exceeded for a resource
44
+ print_description_list({
45
+ "Average CPU (%)" => lambda {|it| it['cpuAvgCutoffPower'] }, # #Lower limit for average CPU usage
46
+ "Maximum CPU (%)" => lambda {|it| it['cpuMaxCutoffPower'] }, #Lower limit for peak CPU usage
47
+ "Network threshold (bytes)" => lambda {|it| it['networkCutoffPower'] }, #Lower limit for average network bandwidth
48
+ }, guidance_settings, options)
49
+ #print reset, "\n"
50
+
51
+ print_h2 "CPU Up-size Settings", options.merge(:border_style => :thin)
52
+ #Up-size will be suggested when all of the following baseline thresholds are exceeded for a resource
53
+ print_description_list({
54
+ "Average CPU (%)" => lambda {|it| it['cpuUpAvgStandardCutoffRightSize'] }, #Upper limit for CPU usage
55
+ "Maximum CPU (%)" => lambda {|it| it['cpuUpMaxStandardCutoffRightSize'] }, #Upper limit for peak CPU usage
56
+ }, guidance_settings, options)
57
+ #print reset, "\n"
58
+
59
+ print_h2 "Memory Up-size Settings", options.merge(:border_style => :thin)
60
+ #Up-size is suggested when all of the following baseline thresholds are exceeded for a resource
61
+ print_description_list({
62
+ "Minimum Free Memory (%)" => lambda {|it| it['memoryUpAvgStandardCutoffRightSize'] }, #Lower limit for average free memory usage
63
+ }, guidance_settings, options)
64
+ #print reset, "\n"
65
+
66
+ print_h2 "Memory Down-size Settings", options.merge(:border_style => :thin)
67
+ #Down-size is suggested when all of the following baseline thresholds are exceeded for a resource
68
+ print_description_list({
69
+ #Upper limit for average free memory
70
+ "Average Free Memory (%)" => lambda {|it| it['memoryDownAvgStandardCutoffRightSize'] },
71
+ #Upper limit for peak memory usage
72
+ "Maximum Free Memory (%)" => lambda {|it| it['memoryDownMaxStandardCutoffRightSize'] },
73
+ }, guidance_settings, options)
74
+ print reset, "\n"
75
+ end
76
+ return 0, nil
77
+ end
78
+
79
+ def update(args)
80
+ params = {}
81
+ options = {}
82
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
83
+ opts.banner = opts.banner = subcommand_usage()
84
+ opts.on('--power-cpu-avg PERCENT', String, "Power Shutdown Average CPU (%). Lower limit for average CPU usage") do |val|
85
+ params['cpuAvgCutoffPower'] = val.to_i
86
+ end
87
+ opts.on('--power-cpu-max PERCENT', String, "Power Shutdown Maximum CPU (%). Lower limit for peak CPU usage") do |val|
88
+ params['cpuMaxCutoffPower'] = val.to_i
89
+ end
90
+ opts.on('--power-network BYTES', String, "Power Shutdown Network threshold (bytes). Lower limit for average network bandwidth") do |val|
91
+ params['networkCutoffPower'] = val.to_i
92
+ end
93
+ opts.on('--cpu-up-avg PERCENT', String, "CPU Up-size Average CPU (%). Upper limit for CPU usage") do |val|
94
+ params['cpuUpAvgStandardCutoffRightSize'] = val.to_i
95
+ end
96
+ opts.on('--cpu-up-max PERCENT', String, "CPU Up-size Maximum CPU (%). Upper limit for peak CPU usage") do |val|
97
+ params['cpuUpMaxStandardCutoffRightSize'] = val.to_i
98
+ end
99
+ opts.on('--memory-up-avg PERCENT', String, "Memory Up-size Minimum Free Memory (%). Lower limit for average free memory usage") do |val|
100
+ params['memoryUpAvgStandardCutoffRightSize'] = val.to_i
101
+ end
102
+ opts.on('--memory-down-avg PERCENT', String, "Memory Down-size Maximum Free Memory (%). Upper limit for average free memory") do |val|
103
+ params['memoryDownAvgStandardCutoffRightSize'] = val.to_i
104
+ end
105
+ opts.on('--memory-down-max PERCENT', String, "Memory Down-size Maximum Free Memory (%). Upper limit for peak memory usage") do |val|
106
+ params['memoryDownMaxStandardCutoffRightSize'] = val.to_i
107
+ end
108
+ build_standard_update_options(opts, options)
109
+ opts.footer = "Update guidance settings."
110
+ end
111
+ optparse.parse!(args)
112
+ connect(options)
113
+ verify_args!(args:args, optparse:optparse, count:0)
114
+ payload = parse_payload(options)
115
+ if !payload
116
+ payload = {}
117
+ payload.deep_merge!({object_key => parse_passed_options(options)}) # inject options passed with -O foo=bar
118
+ payload.deep_merge!({object_key => params}) # inject options --foo bar
119
+ end
120
+ if payload[object_key].empty?
121
+ raise_command_error "Specify at least one option to update.\n#{optparse}"
122
+ end
123
+ @guidance_settings_interface.setopts(options)
124
+ if options[:dry_run]
125
+ print_dry_run @guidance_settings_interface.dry.update(payload)
126
+ return
127
+ end
128
+ json_response = @guidance_settings_interface.update(payload)
129
+ exit_code, err = 0, nil
130
+ render_response(json_response, options, object_key) do
131
+ if json_response['success']
132
+ print_green_success "Updated guidance settings"
133
+ get([] + (options[:remote] ? ["-r",options[:remote]] : []))
134
+ else
135
+ exit_code, err = 1, "Error updating guidance settings: #{json_response['msg'] || json_response['errors']}"
136
+ print_rest_errors(json_response)
137
+ end
138
+ end
139
+ return exit_code, err
140
+ end
141
+
142
+ private
143
+
144
+ def object_key
145
+ 'guidanceSettings'
146
+ end
147
+
148
+ end
@@ -78,7 +78,7 @@ class Morpheus::Cli::LogSettingsCommand
78
78
  print cyan
79
79
  print as_pretty_table(log_settings['integrations'], [:name, :enabled, :host, :port])
80
80
  end
81
- print reset "\n"
81
+ print reset, "\n"
82
82
  return 0
83
83
  rescue RestClient::Exception => e
84
84
  print_rest_exception(e, options)