morpheus-cli 4.1.4 → 4.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/lib/morpheus.rb +5 -0
  3. data/lib/morpheus/api.rb +2 -2
  4. data/lib/morpheus/api/api_client.rb +47 -12
  5. data/lib/morpheus/api/appliance_settings_interface.rb +30 -0
  6. data/lib/morpheus/api/auth_interface.rb +14 -10
  7. data/lib/morpheus/api/clouds_interface.rb +7 -0
  8. data/lib/morpheus/api/clusters_interface.rb +17 -5
  9. data/lib/morpheus/api/custom_instance_types_interface.rb +2 -3
  10. data/lib/morpheus/api/deployments_interface.rb +7 -0
  11. data/lib/morpheus/api/execute_schedules_interface.rb +2 -3
  12. data/lib/morpheus/api/groups_interface.rb +7 -0
  13. data/lib/morpheus/api/license_interface.rb +9 -2
  14. data/lib/morpheus/api/load_balancers_interface.rb +7 -0
  15. data/lib/morpheus/api/logs_interface.rb +11 -2
  16. data/lib/morpheus/api/monitoring_alerts_interface.rb +45 -0
  17. data/lib/morpheus/api/monitoring_checks_interface.rb +2 -2
  18. data/lib/morpheus/api/monitoring_interface.rb +13 -8
  19. data/lib/morpheus/api/power_schedules_interface.rb +2 -3
  20. data/lib/morpheus/api/servers_interface.rb +5 -2
  21. data/lib/morpheus/api/setup_interface.rb +25 -7
  22. data/lib/morpheus/api/task_sets_interface.rb +7 -1
  23. data/lib/morpheus/api/tasks_interface.rb +7 -0
  24. data/lib/morpheus/api/virtual_images_interface.rb +2 -3
  25. data/lib/morpheus/api/whitelabel_settings_interface.rb +60 -0
  26. data/lib/morpheus/cli.rb +18 -14
  27. data/lib/morpheus/cli/access_token_command.rb +18 -2
  28. data/lib/morpheus/cli/appliance_settings_command.rb +303 -0
  29. data/lib/morpheus/cli/apps.rb +4 -3
  30. data/lib/morpheus/cli/archives_command.rb +0 -21
  31. data/lib/morpheus/cli/blueprints_command.rb +2 -2
  32. data/lib/morpheus/cli/cli_command.rb +32 -8
  33. data/lib/morpheus/cli/clouds.rb +6 -11
  34. data/lib/morpheus/cli/clusters.rb +346 -117
  35. data/lib/morpheus/cli/command_error.rb +4 -0
  36. data/lib/morpheus/cli/commands/standard/man_command.rb +1 -1
  37. data/lib/morpheus/cli/containers_command.rb +2 -1
  38. data/lib/morpheus/cli/credentials.rb +49 -4
  39. data/lib/morpheus/cli/deployments.rb +2 -2
  40. data/lib/morpheus/cli/dot_file.rb +2 -2
  41. data/lib/morpheus/cli/error_handler.rb +6 -3
  42. data/lib/morpheus/cli/execute_schedules_command.rb +1 -1
  43. data/lib/morpheus/cli/groups.rb +4 -4
  44. data/lib/morpheus/cli/hosts.rb +3 -2
  45. data/lib/morpheus/cli/image_builder_command.rb +0 -21
  46. data/lib/morpheus/cli/instances.rb +17 -4
  47. data/lib/morpheus/cli/library_container_types_command.rb +1 -1
  48. data/lib/morpheus/cli/library_layouts_command.rb +1 -1
  49. data/lib/morpheus/cli/library_upgrades_command.rb +1 -1
  50. data/lib/morpheus/cli/license.rb +185 -72
  51. data/lib/morpheus/cli/load_balancers.rb +4 -4
  52. data/lib/morpheus/cli/login.rb +4 -0
  53. data/lib/morpheus/cli/logs_command.rb +132 -0
  54. data/lib/morpheus/cli/mixins/infrastructure_helper.rb +2 -2
  55. data/lib/morpheus/cli/mixins/logs_helper.rb +65 -0
  56. data/lib/morpheus/cli/mixins/monitoring_helper.rb +410 -28
  57. data/lib/morpheus/cli/mixins/print_helper.rb +14 -4
  58. data/lib/morpheus/cli/monitoring_alerts_command.rb +800 -0
  59. data/lib/morpheus/cli/monitoring_apps_command.rb +85 -28
  60. data/lib/morpheus/cli/monitoring_checks_command.rb +60 -27
  61. data/lib/morpheus/cli/monitoring_contacts_command.rb +54 -79
  62. data/lib/morpheus/cli/monitoring_groups_command.rb +62 -23
  63. data/lib/morpheus/cli/monitoring_incidents_command.rb +91 -70
  64. data/lib/morpheus/cli/network_pools_command.rb +39 -23
  65. data/lib/morpheus/cli/power_schedules_command.rb +1 -1
  66. data/lib/morpheus/cli/remote.rb +834 -275
  67. data/lib/morpheus/cli/roles.rb +100 -38
  68. data/lib/morpheus/cli/tasks.rb +1 -1
  69. data/lib/morpheus/cli/user_settings_command.rb +20 -12
  70. data/lib/morpheus/cli/version.rb +1 -1
  71. data/lib/morpheus/cli/virtual_images.rb +1 -1
  72. data/lib/morpheus/cli/whitelabel_settings_command.rb +546 -0
  73. data/lib/morpheus/cli/whoami.rb +1 -1
  74. data/lib/morpheus/cli/workflows.rb +2 -2
  75. data/lib/morpheus/terminal.rb +22 -8
  76. metadata +11 -2
@@ -34,7 +34,8 @@ class Morpheus::Cli::MonitoringContactsCommand
34
34
  params = {}
35
35
  optparse = Morpheus::Cli::OptionParser.new do |opts|
36
36
  opts.banner = subcommand_usage()
37
- build_common_options(opts, options, [:list, :query, :json, :csv, :yaml, :fields, :json, :dry_run])
37
+ build_common_options(opts, options, [:list, :query, :json, :csv, :yaml, :fields, :json, :dry_run, :remote])
38
+ opts.footer = "List monitoring contacts."
38
39
  end
39
40
  optparse.parse!(args)
40
41
  connect(options)
@@ -79,7 +80,7 @@ class Morpheus::Cli::MonitoringContactsCommand
79
80
  def get(args)
80
81
  options = {}
81
82
  optparse = Morpheus::Cli::OptionParser.new do |opts|
82
- opts.banner = subcommand_usage("[id list]")
83
+ opts.banner = subcommand_usage("[contact]")
83
84
  opts.on(nil,'--history', "Display History") do |val|
84
85
  options[:show_history] = true
85
86
  end
@@ -87,11 +88,12 @@ class Morpheus::Cli::MonitoringContactsCommand
87
88
  options[:show_notifications] = true
88
89
  end
89
90
  build_common_options(opts, options, [:json, :csv, :fields, :dry_run, :remote])
91
+ opts.footer = "Get details about a monitoring contact." + "\n" +
92
+ "[contact] is required. This is the name or ID of the contact. Supports 1-N [contact] arguments."
90
93
  end
91
94
  optparse.parse!(args)
92
95
  if args.count < 1
93
- puts optparse
94
- exit 1
96
+ raise_command_error "wrong number of arguments, expected 1-N and got (#{args.count}) #{args.join(' ')}\n#{optparse}"
95
97
  end
96
98
  connect(options)
97
99
  id_list = parse_id_list(args)
@@ -109,8 +111,10 @@ class Morpheus::Cli::MonitoringContactsCommand
109
111
  print_dry_run @monitoring_contacts_interface.dry.get(contact['id'])
110
112
  return
111
113
  end
112
- json_response = @monitoring_contacts_interface.get(contact['id'])
113
- contact = json_response['contact']
114
+ # save a request
115
+ # json_response = @monitoring_contacts_interface.get(contact['id'])
116
+ # contact = json_response['contact']
117
+ json_response = {'contact' => contact}
114
118
 
115
119
  if options[:json]
116
120
  puts as_json(json_response, options, "contact")
@@ -130,16 +134,16 @@ class Morpheus::Cli::MonitoringContactsCommand
130
134
  "Name" => 'name',
131
135
  "Email" => 'emailAddress',
132
136
  "Mobile" => 'smsAddress',
133
- # "Slack Hook" => 'slackHook'
137
+ "Slack Hook" => 'slackHook'
134
138
  }
135
- description_cols["Slack Hook"] = 'slackHook' if !contact['slackHook'].empty?
139
+ description_cols.delete("Slack Hook") if contact['slackHook'].to_s.empty?
136
140
  puts as_description_list(contact, description_cols)
137
141
 
138
142
  ## Notifications
139
143
  # show notify events here...
140
144
 
141
- print reset,"\n"
142
-
145
+ print reset
146
+ return 0
143
147
  rescue RestClient::Exception => e
144
148
  print_rest_exception(e, options)
145
149
  exit 1
@@ -163,19 +167,36 @@ class Morpheus::Cli::MonitoringContactsCommand
163
167
  opts.on("--slackHook STRING", String, "Contact slack hook") do |val|
164
168
  params['slackHook'] = val == 'null' ? nil : val
165
169
  end
166
- build_common_options(opts, options, [:json, :dry_run, :quiet])
170
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :quiet, :remote])
171
+ opts.footer = "Create a monitoring contact." + "\n" +
172
+ "[name] is required. This is the name of the new contact."
167
173
  end
168
174
  optparse.parse!(args)
169
175
  connect(options)
170
-
176
+ if args.count > 1
177
+ raise_command_error "wrong number of arguments, expected 0-1 and got (#{args.count}) #{args.join(' ')}\n#{optparse}"
178
+ end
179
+ if args[0]
180
+ params['name'] = args[0]
181
+ end
171
182
  begin
172
-
173
- if !params["name"]
174
- print_red_alert "Name is required"
175
- puts optparse
176
- exit 1
183
+ params.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
184
+ if params['name'].nil?
185
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'type' => 'text', 'fieldLabel' => 'Name', 'required' => true, 'description' => 'The name of this contact.'}], options[:options])
186
+ params['name'] = v_prompt['name']
177
187
  end
178
-
188
+ if params['emailAddress'].nil?
189
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'emailAddress', 'type' => 'text', 'fieldLabel' => 'Email', 'required' => false, 'description' => 'Contact email address.'}], options[:options])
190
+ params['emailAddress'] = v_prompt['emailAddress'] unless v_prompt['emailAddress'].to_s.empty?
191
+ end
192
+ if params['smsAddress'].nil?
193
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'smsAddress', 'type' => 'text', 'fieldLabel' => 'Mobile', 'required' => false, 'description' => 'Contact sms address, or phone number.'}], options[:options])
194
+ params['smsAddress'] = v_prompt['smsAddress'] unless v_prompt['smsAddress'].to_s.empty?
195
+ end
196
+ # if params['slackHook'].nil?
197
+ # v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'slackHook', 'type' => 'text', 'fieldLabel' => 'Slack Hook', 'required' => false, 'description' => 'Contact slack hook.'}], options[:options])
198
+ # params['slackHook'] = v_prompt['slackHook'] unless v_prompt['slackHook'].to_s.empty?
199
+ # end
179
200
  payload = {
180
201
  'contact' => {}
181
202
  }
@@ -192,7 +213,7 @@ class Morpheus::Cli::MonitoringContactsCommand
192
213
  puts as_json(json_response, options)
193
214
  elsif !options[:quiet]
194
215
  print_green_success "Created contact (#{contact['id']}) #{contact['name']}"
195
- #_get(contact['id'], {})
216
+ #_get(contact['id'], options)
196
217
  end
197
218
 
198
219
  rescue RestClient::Exception => e
@@ -205,7 +226,7 @@ class Morpheus::Cli::MonitoringContactsCommand
205
226
  options = {}
206
227
  params = {}
207
228
  optparse = Morpheus::Cli::OptionParser.new do |opts|
208
- opts.banner = subcommand_usage("[id]")
229
+ opts.banner = subcommand_usage("[contact]")
209
230
  opts.on("--name STRING", String, "Contact name") do |val|
210
231
  params['name'] = val
211
232
  end
@@ -218,12 +239,13 @@ class Morpheus::Cli::MonitoringContactsCommand
218
239
  opts.on("--slackHook STRING", String, "Contact slack hook") do |val|
219
240
  params['slackHook'] = val == 'null' ? nil : val
220
241
  end
221
- build_common_options(opts, options, [:json, :dry_run, :quiet])
242
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :quiet, :remote])
243
+ opts.footer = "Update a monitoring contact." + "\n" +
244
+ "[contact] is required. This is the name or ID of the contact."
222
245
  end
223
246
  optparse.parse!(args)
224
- if args.count < 1
225
- puts optparse
226
- exit 1
247
+ if args.count != 1
248
+ raise_command_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args.join(' ')}\n#{optparse}"
227
249
  end
228
250
  connect(options)
229
251
 
@@ -247,11 +269,12 @@ class Morpheus::Cli::MonitoringContactsCommand
247
269
  end
248
270
 
249
271
  json_response = @monitoring_contacts_interface.update(contact["id"], payload)
272
+ contact = json_response['contact']
250
273
  if options[:json]
251
274
  puts as_json(json_response, options)
252
275
  elsif !options[:quiet]
253
- print_green_success "Updated contact #{contact['id']}"
254
- _get(contact['id'], {})
276
+ print_green_success "Updated contact (#{contact['id']}) #{contact['name']}"
277
+ _get(contact['id'], options)
255
278
  end
256
279
 
257
280
  rescue RestClient::Exception => e
@@ -264,17 +287,18 @@ class Morpheus::Cli::MonitoringContactsCommand
264
287
  def remove(args)
265
288
  options = {}
266
289
  optparse = Morpheus::Cli::OptionParser.new do |opts|
267
- opts.banner = subcommand_usage("[id list]")
290
+ opts.banner = subcommand_usage("[contact]")
268
291
  build_common_options(opts, options, [:auto_confirm, :quiet, :json, :dry_run, :remote])
292
+ opts.footer = "Delete a monitoring contact." + "\n" +
293
+ "[contact] is required. This is the name or ID of the contact. Supports 1-N [contact] arguments."
269
294
  end
270
295
  optparse.parse!(args)
271
296
  if args.count < 1
272
- puts optparse
273
- exit 1
297
+ raise_command_error "wrong number of arguments, expected 1-N and got (#{args.count}) #{args.join(' ')}\n#{optparse}"
274
298
  end
275
299
  connect(options)
276
300
  id_list = parse_id_list(args)
277
- unless options[:yes] || ::Morpheus::Cli::OptionTypes::confirm("Are you sure you would like to delete contact #{id_list.size == 1 ? 'contact' : 'contacts'} #{anded_list(id_list)}?", options)
301
+ unless options[:yes] || ::Morpheus::Cli::OptionTypes::confirm("Are you sure you would like to delete #{id_list.size == 1 ? 'contact' : 'contacts'} #{anded_list(id_list)}?", options)
278
302
  exit 1
279
303
  end
280
304
  return run_command_for_each_arg(id_list) do |arg|
@@ -303,55 +327,6 @@ class Morpheus::Cli::MonitoringContactsCommand
303
327
  end
304
328
  end
305
329
 
306
- def reopen(args)
307
- options = {}
308
- optparse = Morpheus::Cli::OptionParser.new do |opts|
309
- opts.banner = subcommand_usage("[id list]")
310
- build_common_options(opts, options, [:auto_confirm, :quiet, :json, :dry_run, :remote])
311
- end
312
- optparse.parse!(args)
313
- if args.count < 1
314
- puts optparse
315
- exit 1
316
- end
317
- connect(options)
318
- id_list = parse_id_list(args)
319
- unless options[:yes] || ::Morpheus::Cli::OptionTypes::confirm("Are you sure you would like to reopen #{id_list.size == 1 ? 'contact' : 'contacts'} #{anded_list(id_list)}?", options)
320
- exit 1
321
- end
322
- return run_command_for_each_arg(id_list) do |arg|
323
- _reopen(arg, options)
324
- end
325
- end
326
-
327
- def _reopen(id, options)
328
-
329
- begin
330
- contact = find_contact_by_name_or_id(id)
331
- already_open = contact['status'] == 'open'
332
- if already_open
333
- print bold,yellow,"contact #{contact['id']} is already open",reset,"\n"
334
- return false
335
- end
336
- @monitoring_contacts_interface.setopts(options)
337
- if options[:dry_run]
338
- print_dry_run @monitoring_contacts_interface.dry.reopen(contact['id'])
339
- return
340
- end
341
- json_response = @monitoring_contacts_interface.reopen(contact['id'])
342
- if options[:json]
343
- print JSON.pretty_generate(json_response)
344
- print "\n"
345
- elsif !options[:quiet]
346
- print_green_success json_response["msg"] || "contact #{contact['id']} is now open"
347
- # _get(contact['id'] {})
348
- end
349
- rescue RestClient::Exception => e
350
- print_rest_exception(e, options)
351
- exit 1
352
- end
353
- end
354
-
355
330
  private
356
331
 
357
332
  def print_contacts_table(contacts, opts={})
@@ -83,6 +83,11 @@ class Morpheus::Cli::MonitoringGroupsCommand
83
83
  # opts.on(nil,'--statistics', "Display Statistics") do |val|
84
84
  # options[:show_statistics] = true
85
85
  # end
86
+ opts.on('-a','--all', "Display All Details (History, Notifications)") do
87
+ options[:show_history] = true
88
+ options[:show_notifications] = true
89
+ options[:show_statistics] = true
90
+ end
86
91
  build_common_options(opts, options, [:json, :yaml, :csv, :fields, :dry_run, :remote])
87
92
  end
88
93
  optparse.parse!(args)
@@ -106,8 +111,10 @@ class Morpheus::Cli::MonitoringGroupsCommand
106
111
  print_dry_run @monitoring_groups_interface.dry.get(check_group['id'])
107
112
  return
108
113
  end
114
+ # get by ID to sideload associated checks
109
115
  json_response = @monitoring_groups_interface.get(check_group['id'])
110
116
  check_group = json_response['checkGroup']
117
+
111
118
  if options[:json]
112
119
  puts as_json(json_response, options, "checkGroup")
113
120
  return 0
@@ -145,8 +152,8 @@ class Morpheus::Cli::MonitoringGroupsCommand
145
152
  # print as_pretty_table(check_groups, [:id, {"Check Group" => :name}], options)
146
153
  print_checks_table(checks, options)
147
154
  else
148
- # print "\n"
149
- # puts "No checks found..."
155
+ print "\n", yellow
156
+ puts "No Checks"
150
157
  end
151
158
 
152
159
  ## Open Incidents
@@ -157,8 +164,8 @@ class Morpheus::Cli::MonitoringGroupsCommand
157
164
  print_incidents_table(open_incidents)
158
165
  # print_results_pagination(size: open_incidents.size, total: open_incidents.size)
159
166
  else
160
- print "\n", cyan
161
- puts "No open incidents for this check group"
167
+ # print "\n", cyan
168
+ # puts "No open incidents for this check group"
162
169
  end
163
170
 
164
171
  ## History (plain old Hash)
@@ -170,7 +177,7 @@ class Morpheus::Cli::MonitoringGroupsCommand
170
177
  issues = history_items
171
178
  if history_items && !history_items.empty?
172
179
  print_h2 "History"
173
- print_check_history_table(history_items, options)
180
+ print_check_group_history_table(history_items, options)
174
181
  print_results_pagination(history_json_response, {:label => "event", :n_label => "events"})
175
182
  else
176
183
  print "\n"
@@ -241,7 +248,7 @@ class Morpheus::Cli::MonitoringGroupsCommand
241
248
  if history_items.empty?
242
249
  print cyan,"No history found.",reset,"\n"
243
250
  else
244
- print_check_history_table(history_items, options)
251
+ print_check_group_history_table(history_items, options)
245
252
  print_results_pagination(json_response, {:label => "event", :n_label => "events"})
246
253
  end
247
254
  print reset,"\n"
@@ -253,7 +260,7 @@ class Morpheus::Cli::MonitoringGroupsCommand
253
260
 
254
261
  def add(args)
255
262
  options = {}
256
- params = {'inUptime' => true, 'severity' => 'critical'}
263
+ params = {}
257
264
  optparse = Morpheus::Cli::OptionParser.new do |opts|
258
265
  opts.banner = subcommand_usage("[name]")
259
266
  opts.on('--name VALUE', String, "Name") do |val|
@@ -266,13 +273,13 @@ class Morpheus::Cli::MonitoringGroupsCommand
266
273
  params['minHappy'] = val.to_i
267
274
  end
268
275
  opts.on('--severity VALUE', String, "Max Severity. Determines the maximum severity level this group can incur on an incident when failing. Default is critical") do |val|
269
- params['severity'] = val
276
+ params['severity'] = val.to_s.downcase
270
277
  end
271
278
  opts.on('--inUptime [on|off]', String, "Affects Availability. Default is on.") do |val|
272
279
  params['inUptime'] = val.nil? || val.to_s == 'on' || val.to_s == 'true'
273
280
  end
274
- opts.on('--checks LIST', Array, "Checks to include in this group, comma separated list of IDs") do |list|
275
- if list.size == 1 && list[0] == 'null' # hacky way to clear it
281
+ opts.on('--checks LIST', Array, "Checks to include in this group, comma separated list of names or IDs.") do |list|
282
+ if list.size == 1 && ('[]' == list[0]) # clear array
276
283
  params['checks'] = []
277
284
  else
278
285
  params['checks'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
@@ -301,9 +308,35 @@ class Morpheus::Cli::MonitoringGroupsCommand
301
308
  else
302
309
  # merge -O options into normally parsed options
303
310
  params.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
304
- if params['checks']
305
- params['checks'] = params['checks'].collect {|it| it.to_i }
311
+ if params['name'].nil?
312
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'type' => 'text', 'fieldLabel' => 'Name', 'required' => true, 'description' => 'The name of this contact.'}], options[:options])
313
+ params['name'] = v_prompt['name']
314
+ end
315
+ if params['description'].nil?
316
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'description', 'type' => 'text', 'fieldLabel' => 'Description', 'required' => false, 'description' => 'Contact email address.'}], options[:options])
317
+ params['description'] = v_prompt['description'] unless v_prompt['description'].to_s.empty?
318
+ end
319
+ if params['minHappy'].nil?
320
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'minHappy', 'type' => 'text', 'fieldLabel' => 'Min. Checks', 'required' => false, 'description' => 'Min Checks. This specifies the minimum number of checks within the group that must be happy to keep the group from becoming unhealthy.', 'defaultValue' => 1}], options[:options])
321
+ params['minHappy'] = v_prompt['minHappy'] unless v_prompt['minHappy'].to_s.empty?
322
+ end
323
+ if params['severity'].nil?
324
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'severity', 'type' => 'text', 'fieldLabel' => 'Severity', 'required' => false, 'description' => 'Max Severity. Determines the maximum severity level this group can incur on an incident when failing. Default is critical', 'defaultValue' => 'critical'}], options[:options])
325
+ params['severity'] = v_prompt['severity'] unless v_prompt['severity'].to_s.empty?
306
326
  end
327
+ if params['inUptime'].nil?
328
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'inUptime', 'type' => 'checkbox', 'fieldLabel' => 'Affects Availability', 'required' => false, 'description' => 'Affects Availability. Default is on.', 'defaultValue' => true}], options[:options])
329
+ params['inUptime'] = v_prompt['inUptime'] unless v_prompt['inUptime'].to_s.empty?
330
+ end
331
+
332
+ # Checks
333
+ prompt_results = prompt_for_checks(params, options, @api_client)
334
+ if prompt_results[:success]
335
+ params['checks'] = prompt_results[:data] unless prompt_results[:data].nil?
336
+ else
337
+ return 1
338
+ end
339
+
307
340
  # todo: prompt?
308
341
  payload = {'checkGroup' => params}
309
342
  end
@@ -318,7 +351,7 @@ class Morpheus::Cli::MonitoringGroupsCommand
318
351
  elsif !options[:quiet]
319
352
  check_group = json_response['checkGroup']
320
353
  print_green_success "Added check group #{check_group['name']}"
321
- _get(check_group['id'], {})
354
+ _get(check_group['id'], options)
322
355
  end
323
356
  return 0
324
357
  rescue RestClient::Exception => e
@@ -348,8 +381,8 @@ class Morpheus::Cli::MonitoringGroupsCommand
348
381
  opts.on('--inUptime [on|off]', String, "Affects Availability. Default is on.") do |val|
349
382
  params['inUptime'] = val.nil? || val.to_s == 'on' || val.to_s == 'true'
350
383
  end
351
- opts.on('--checks LIST', Array, "Checks to include in this group, comma separated list of IDs") do |list|
352
- if list.size == 1 && list[0] == 'null' # hacky way to clear it
384
+ opts.on('--checks LIST', Array, "Checks to include in this group, comma separated list of names or IDs.") do |list|
385
+ if list.size == 1 && ('[]' == list[0]) # clear array
353
386
  params['checks'] = []
354
387
  else
355
388
  params['checks'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
@@ -375,10 +408,15 @@ class Morpheus::Cli::MonitoringGroupsCommand
375
408
  else
376
409
  # merge -O options into normally parsed options
377
410
  params.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
411
+ # Checks
378
412
  if params['checks']
379
- params['checks'] = params['checks'].collect {|it| it.to_i }
413
+ prompt_results = prompt_for_checks(params, options, @api_client)
414
+ if prompt_results[:success]
415
+ params['checks'] = prompt_results[:data] unless prompt_results[:data].nil?
416
+ else
417
+ return 1
418
+ end
380
419
  end
381
- # todo: prompt?
382
420
  payload = {'checkGroup' => params}
383
421
  end
384
422
  @monitoring_groups_interface.setopts(options)
@@ -391,7 +429,7 @@ class Morpheus::Cli::MonitoringGroupsCommand
391
429
  puts as_json(json_response, options)
392
430
  elsif !options[:quiet]
393
431
  print_green_success "Updated check group #{check_group['name']}"
394
- _get(check_group['id'], {})
432
+ _get(check_group['id'], options)
395
433
  end
396
434
  return 0
397
435
  rescue RestClient::Exception => e
@@ -441,7 +479,7 @@ class Morpheus::Cli::MonitoringGroupsCommand
441
479
  else
442
480
  print_green_success "Unmuted group #{check_group['name']}"
443
481
  end
444
- _get(monitor_app['id'], {})
482
+ _get(check_group['id'], options)
445
483
  end
446
484
  return 0
447
485
  rescue RestClient::Exception => e
@@ -485,7 +523,7 @@ class Morpheus::Cli::MonitoringGroupsCommand
485
523
  puts as_json(json_response, options)
486
524
  elsif !options[:quiet]
487
525
  print_green_success "Unmuted group #{check_group['name']}"
488
- _get(check_group['id'], {})
526
+ _get(check_group['id'], options)
489
527
  end
490
528
  return 0
491
529
  rescue RestClient::Exception => e
@@ -496,10 +534,11 @@ class Morpheus::Cli::MonitoringGroupsCommand
496
534
 
497
535
  def mute_all(args)
498
536
  options = {}
499
- params = {'enabled' => true}
537
+ params = {}
500
538
  optparse = Morpheus::Cli::OptionParser.new do |opts|
501
539
  opts.banner = subcommand_usage()
502
540
  opts.on(nil, "--disable", "Disable mute, the same as unmute-all") do
541
+ params['muted'] = false
503
542
  params['enabled'] = false
504
543
  end
505
544
  build_common_options(opts, options, [:options, :payload, :json, :dry_run, :remote, :quiet])
@@ -544,7 +583,7 @@ class Morpheus::Cli::MonitoringGroupsCommand
544
583
 
545
584
  def unmute_all(args)
546
585
  options = {}
547
- params = {'enabled' => false}
586
+ params = {'muted' => false, 'enabled' => false}
548
587
  optparse = Morpheus::Cli::OptionParser.new do |opts|
549
588
  opts.banner = subcommand_usage()
550
589
  build_common_options(opts, options, [:payload, :json, :dry_run, :remote, :quiet])
@@ -589,7 +628,7 @@ class Morpheus::Cli::MonitoringGroupsCommand
589
628
  params = {}
590
629
  optparse = Morpheus::Cli::OptionParser.new do |opts|
591
630
  opts.banner = subcommand_usage("[name]")
592
- build_common_options(opts, options, [:json, :dry_run, :quiet])
631
+ build_common_options(opts, options, [:auto_confirm, :json, :dry_run, :quiet, :remote])
593
632
  end
594
633
  optparse.parse!(args)
595
634
  if args.count < 1