morpheus-cli 7.0.6 → 8.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0cbee8120b32418f3b60a0b82950f9a3fc1eb2ad2101a905aea6ba6ca4cc67eb
4
- data.tar.gz: 98038ba726c03fa7aeb3af77efdedcb535e6f4506fb26f0ccd5cb70456dd55f2
3
+ metadata.gz: 49afeaaa11ed794659cc20a46d3fc145990269dc96f1394a1cd95160bbc2f786
4
+ data.tar.gz: cdcf88755b1638f3d1816dde28dcfea8f8c6be27b9300bdfc3c6e4798d3937dd
5
5
  SHA512:
6
- metadata.gz: 68c0c1c2c18173314f6d8fe73a184631609ad8b9a55d95bf35a2b797814ba5a65f2037b6638917c5c09640d7e91674a0356825849b04c375c4c88a35b715e5a3
7
- data.tar.gz: 776cc9c571fac5fec546836d4ff6fd06e55c7635c7c63f8ed529e0880c96efa21c2d087fa7baac1bdf90c16b40ef4eaa847c7bc3fcf13c5092d4ebe3afcec303
6
+ metadata.gz: 56f27f9ab0323061846e4b3df32d570efff1b944083fe27700a9d729540ad605a1a39a5c2005cc5a0e19880d5f039a7aa3dbc12ff2c31c9b511426ec736f83a7
7
+ data.tar.gz: 7d98ac1e35e7929f3f73ff3968d3a2d1221629d1a2c07d7cdd916b2aa184ca2d30041eaeaf2ac5d53c653650a0a36e0c39a33bebbb9bf02bdcf3e4f84e5173c8
data/Dockerfile CHANGED
@@ -1,5 +1,5 @@
1
1
  FROM ruby:2.7.5
2
2
 
3
- RUN gem install morpheus-cli -v 7.0.6
3
+ RUN gem install morpheus-cli -v 8.0.0
4
4
 
5
5
  ENTRYPOINT ["morpheus"]
@@ -950,6 +950,14 @@ class Morpheus::APIClient
950
950
  Morpheus::NetworkServerGroupsInterface.new(common_interface_options).setopts(@options)
951
951
  end
952
952
 
953
+ def network_server_services
954
+ Morpheus::NetworkServerServicesInterface.new(common_interface_options).setopts(@options)
955
+ end
956
+
957
+ def network_resource_types
958
+ Morpheus::NetworkResourceTypesInterface.new(common_interface_options).setopts(@options)
959
+ end
960
+
953
961
  def network_edge_clusters
954
962
  Morpheus::NetworkEdgeClustersInterface.new(common_interface_options).setopts(@options)
955
963
  end
@@ -1002,6 +1010,9 @@ class Morpheus::APIClient
1002
1010
  Morpheus::EmailTemplatesInterface.new(common_interface_options).setopts(@options)
1003
1011
  end
1004
1012
 
1013
+ def library_operating_systems
1014
+ Morpheus::LibraryOperatingSystemsInterface.new(common_interface_options).setopts(@options)
1015
+ end
1005
1016
 
1006
1017
  def rest(endpoint)
1007
1018
  Morpheus::RestInterface.new(common_interface_options).setopts(@options.merge({base_path: "#{@base_url}/api/#{endpoint}"}))
@@ -228,6 +228,12 @@ class Morpheus::ClustersInterface < Morpheus::APIClient
228
228
  execute(method: :get, url: url, headers: headers)
229
229
  end
230
230
 
231
+ def get_container_group(cluster_id, resource_type, id, params={})
232
+ url = "#{base_path}/#{cluster_id}/#{resource_type}s/#{id}"
233
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
234
+ execute(method: :get, url: url, headers: headers)
235
+ end
236
+
231
237
  def restart_container_group(id, container_group_id, resource_type, params={})
232
238
  url = "#{base_path}/#{id}/#{resource_type}s/#{container_group_id}/restart"
233
239
  headers = { params: params, authorization: "Bearer #{@access_token}" }
@@ -259,12 +265,24 @@ class Morpheus::ClustersInterface < Morpheus::APIClient
259
265
  execute(method: :get, url: url, headers: headers)
260
266
  end
261
267
 
268
+ def create_datastore(id, payload)
269
+ url = "#{base_path}/#{id}/data-stores"
270
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
271
+ execute(method: :post, url: url, headers: headers, payload: payload.to_json)
272
+ end
273
+
262
274
  def update_datastore(id, datastore_id, payload)
263
275
  url = "#{base_path}/#{id}/datastores/#{datastore_id}"
264
276
  headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
265
277
  execute(method: :put, url: url, headers: headers, payload: payload.to_json)
266
278
  end
267
279
 
280
+ def destroy_datastore(id, datastore_id, params={})
281
+ url = "#{base_path}/#{id}/datastores/#{datastore_id}"
282
+ headers = { :params => params, :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
283
+ execute(method: :delete, url: url, headers: headers)
284
+ end
285
+
268
286
  def wiki(id, params)
269
287
  url = "#{@base_url}/api/clusters/#{id}/wiki"
270
288
  headers = { params: params, authorization: "Bearer #{@access_token}" }
@@ -320,4 +338,11 @@ class Morpheus::ClustersInterface < Morpheus::APIClient
320
338
  opts = {method: :get, url: url, headers: headers}
321
339
  execute(opts)
322
340
  end
341
+
342
+ def list_resources(id, resources, params={})
343
+ url = "#{base_path}/#{id}/#{resources}"
344
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
345
+ execute(method: :get, url: url, headers: headers)
346
+ end
347
+
323
348
  end
@@ -12,4 +12,10 @@ class Morpheus::DatastoresInterface < Morpheus::APIClient
12
12
  execute(method: :get, url: url, headers: headers)
13
13
  end
14
14
 
15
+ def types(params={})
16
+ url = "/api/data-store-types"
17
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
18
+ opts = {method: :get, url: url, headers: headers}
19
+ execute(opts)
20
+ end
15
21
  end
@@ -0,0 +1,63 @@
1
+ require 'morpheus/api/api_client'
2
+
3
+ class Morpheus::LibraryOperatingSystemsInterface < Morpheus::APIClient
4
+
5
+ def list_os_types(params={})
6
+ url = "#{@base_url}/api/library/operating-systems/os-types"
7
+ params['pageConfig'] = { sort:'owner,name', order:'desc,asc' }
8
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
9
+ opts = {method: :get, url: url, headers: headers}
10
+ execute(opts)
11
+ end
12
+
13
+ def get(id, params={})
14
+ raise "#{self.class}.get() passed a blank id!" if id.to_s == ''
15
+ url = "#{@base_url}/api/library/operating-systems/os-types/#{id}"
16
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
17
+ opts = {method: :get, url: url, headers: headers}
18
+ execute(opts)
19
+ end
20
+
21
+ def update(id, payload)
22
+ url = "#{@base_url}/api/library/operating-systems/#{id}"
23
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
24
+ opts = {method: :put, url: url, headers: headers, payload: payload.to_json}
25
+ execute(opts)
26
+ end
27
+
28
+ def get_image(id, params={})
29
+ raise "#{self.class}.get() passed a blank id!" if id.to_s == ''
30
+ url = "#{@base_url}/api/library/operating-systems/os-types/images/#{id}"
31
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
32
+ opts = {method: :get, url: url, headers: headers}
33
+ execute(opts)
34
+ end
35
+
36
+ def create_image(payload)
37
+ url = "#{@base_url}/api/library/operating-systems/os-types/create-image"
38
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
39
+ opts = {method: :post, url: url, headers: headers, payload: payload.to_json}
40
+ execute(opts)
41
+ end
42
+
43
+ def create(payload)
44
+ url = "#{@base_url}/api/library/operating-systems"
45
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
46
+ opts = {method: :post, url: url, headers: headers, payload: payload.to_json}
47
+ execute(opts)
48
+ end
49
+
50
+ def destroy_image(id, payload={})
51
+ url = "#{@base_url}/api/library/operating-systems/os-types/images/#{id}"
52
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
53
+ opts = {method: :delete, url: url, headers: headers, payload: payload.to_json}
54
+ execute(opts)
55
+ end
56
+
57
+ def destroy(id, payload={})
58
+ url = "#{@base_url}/api/library/operating-systems/#{id}"
59
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
60
+ opts = {method: :delete, url: url, headers: headers, payload: payload.to_json}
61
+ execute(opts)
62
+ end
63
+ end
@@ -2,8 +2,12 @@ require 'morpheus/api/api_client'
2
2
 
3
3
  class Morpheus::ProcessesInterface < Morpheus::APIClient
4
4
 
5
+ def base_path
6
+ "/api/processes"
7
+ end
8
+
5
9
  def list(params={})
6
- url = "#{@base_url}/api/processes"
10
+ url = base_path
7
11
  headers = { params: params, authorization: "Bearer #{@access_token}" }
8
12
  opts = {method: :get, url: url, headers: headers}
9
13
  execute(opts)
@@ -11,18 +15,26 @@ class Morpheus::ProcessesInterface < Morpheus::APIClient
11
15
 
12
16
  def get(id, params={})
13
17
  raise "#{self.class}.get() passed a blank id!" if id.to_s == ''
14
- url = "#{@base_url}/api/processes/#{id}"
18
+ url = "#{base_path}/#{CGI::escape(id.to_s)}"
15
19
  headers = { params: params, authorization: "Bearer #{@access_token}" }
16
20
  opts = {method: :get, url: url, headers: headers}
17
21
  execute(opts)
18
22
  end
19
23
 
20
- def get_event(id, params={})
21
- raise "#{self.class}.get() passed a blank id!" if id.to_s == ''
22
- url = "#{@base_url}/api/processes/events/#{id}"
24
+ def get_event(event_id, params={})
25
+ raise "#{self.class}.get() passed a blank event id!" if event_id.to_s == ''
26
+ url = "#{base_path}/events/#{CGI::escape(event_id.to_s)}"
23
27
  headers = { params: params, authorization: "Bearer #{@access_token}" }
24
28
  opts = {method: :get, url: url, headers: headers}
25
29
  execute(opts)
26
30
  end
27
31
 
32
+ def retry(id, payload={}, params={}, headers={})
33
+ execute(method: :post, url: "#{base_path}/#{CGI::escape(id.to_s)}/retry", params: params, payload: payload, headers: headers)
34
+ end
35
+
36
+ def cancel(id, payload={}, params={}, headers={})
37
+ execute(method: :post, url: "#{base_path}/#{CGI::escape(id.to_s)}/cancel", params: params, payload: payload, headers: headers)
38
+ end
39
+
28
40
  end
@@ -16,6 +16,8 @@ class Morpheus::Cli::BackupJobsCommand
16
16
  @api_client = establish_remote_appliance_connection(opts)
17
17
  @backups_interface = @api_client.backups
18
18
  @backup_jobs_interface = @api_client.backup_jobs
19
+ @backup_settings_interface = @api_client.backup_settings
20
+ @options_interface = @api_client.options
19
21
  end
20
22
 
21
23
  def handle(args)
@@ -107,6 +109,9 @@ EOT
107
109
  columns = backup_job_column_definitions
108
110
  columns.delete("Provider") if backup_job['backupProvider'].nil?
109
111
  columns.delete("Repository") if backup_job['backupRepository'].nil?
112
+ columns.delete("Synthetic Full Enabled") if backup_job['syntheticFull'].nil?
113
+ columns.delete("Synthetic Full Schedule") if backup_job['syntheticFull'].nil?
114
+ columns.delete("Synthetic Full Next") if backup_job['syntheticFull'].nil?
110
115
  print_description_list(columns, backup_job)
111
116
  # print reset,"\n"
112
117
  print_h2 "Backups", options
@@ -123,10 +128,10 @@ EOT
123
128
  def add(args)
124
129
  options = {}
125
130
  params = {}
131
+
126
132
  optparse = Morpheus::Cli::OptionParser.new do |opts|
127
133
  opts.banner = "Usage: #{prog_name} backups add-job [name]"
128
134
  build_option_type_options(opts, options, add_backup_job_option_types)
129
- build_option_type_options(opts, options, add_backup_job_advanced_option_types)
130
135
  build_standard_add_options(opts, options)
131
136
  opts.footer = <<-EOT
132
137
  Create a new backup job
@@ -142,14 +147,23 @@ EOT
142
147
  payload.deep_merge!({'job' => parse_passed_options(options)})
143
148
  else
144
149
  payload.deep_merge!({'job' => parse_passed_options(options)})
145
- v_prompt = Morpheus::Cli::OptionTypes.prompt(add_backup_job_option_types(), options[:options], @api_client, options[:params])
150
+
151
+ avail_job_types = @options_interface.options_for_source('backupJobTypes',{})['data']
152
+ if avail_job_types.empty?
153
+ raise_command_error "No available backup job types found"
154
+ else
155
+ params["jobTypeId"] = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'jobTypeId', 'fieldLabel' => 'Type', 'type' => 'select', 'selectOptions' => avail_job_types, 'defaultValue' => avail_job_types[0] ? avail_job_types[0]['name'] : nil, 'required' => true}], options[:options], @api_client)["jobTypeId"]
156
+ end
157
+
158
+ v_prompt = Morpheus::Cli::OptionTypes.prompt(add_backup_job_option_types, options[:options], @api_client, options[:params])
146
159
  params.deep_merge!(v_prompt)
147
160
  if params['scheduleId'] == 'manual' || params['scheduleId'] == ''
148
161
  params['scheduleId'] = nil
149
162
  end
150
- advanced_config = Morpheus::Cli::OptionTypes.no_prompt(add_backup_job_advanced_option_types, options[:options], @api_client, options[:params])
151
- advanced_config.deep_compact!
152
- params.deep_merge!(advanced_config)
163
+
164
+ job_type_config = Morpheus::Cli::OptionTypes.prompt(add_backup_job_type_option_types("new", params["jobTypeId"], options), options[:options].deep_merge({ :context_map => { 'domain' => ''}}), @api_client, options[:params])
165
+ job_type_config.deep_compact!
166
+ params.deep_merge!(job_type_config)
153
167
  payload['job'].deep_merge!(params)
154
168
  end
155
169
  @backup_jobs_interface.setopts(options)
@@ -173,7 +187,6 @@ EOT
173
187
  optparse = Morpheus::Cli::OptionParser.new do |opts|
174
188
  opts.banner = "Usage: #{prog_name} backups update-job [job]"
175
189
  build_option_type_options(opts, options, update_backup_job_option_types)
176
- build_option_type_options(opts, options, update_backup_job_advanced_option_types)
177
190
  build_standard_update_options(opts, options)
178
191
  opts.footer = <<-EOT
179
192
  Update a backup job.
@@ -197,7 +210,7 @@ EOT
197
210
  v_prompt['scheduleId'] = nil
198
211
  end
199
212
  params.deep_merge!(v_prompt)
200
- advanced_config = Morpheus::Cli::OptionTypes.no_prompt(update_backup_job_advanced_option_types, options[:options], @api_client, options[:params])
213
+ advanced_config = Morpheus::Cli::OptionTypes.no_prompt(update_backup_job_type_option_types("new", get_object_value(backup_job, "jobType.id"), options[:params]), options[:options], @api_client, options[:params])
201
214
  advanced_config.deep_compact!
202
215
  params.deep_merge!(advanced_config)
203
216
  payload.deep_merge!({'job' => params})
@@ -278,6 +291,9 @@ EOT
278
291
  "Schedule" => lambda {|it| it['schedule']['name'] rescue '' },
279
292
  "Next" => lambda {|it| format_local_dt(it['nextFire']) },
280
293
  "Retention Count" => lambda {|it| it['retentionCount'] rescue '' },
294
+ "Synthetic Full Enabled" => lambda {|it| it['syntheticFull']['enabled'] rescue ''},
295
+ "Synthetic Full Schedule" => lambda {|it| it['syntheticFull']['schedule']['name'] rescue ''},
296
+ "Synthetic Full Next" => lambda {|it| format_local_dt(it['syntheticFull']['nextFire']) rescue ''},
281
297
  "Provider" => lambda {|it| it['backupProvider']['name'] rescue '' },
282
298
  "Repository" => lambda {|it| it['backupRepository']['name'] rescue '' },
283
299
  "Source" => lambda {|it| it['source'] },
@@ -301,17 +317,34 @@ EOT
301
317
  def add_backup_job_option_types
302
318
  [
303
319
  {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'displayOrder' => 1},
304
- {'fieldName' => 'code', 'fieldLabel' => 'Code', 'type' => 'text', 'required' => false, 'displayOrder' => 2},
305
- {'fieldName' => 'retentionCount', 'fieldLabel' => 'Retention Count', 'type' => 'number', 'displayOrder' => 3},
306
- {'fieldName' => 'scheduleId', 'fieldLabel' => 'Schedule', 'type' => 'select', 'optionSource' => lambda { |api_client, api_params|
307
- schedules = api_client.options.options_for_source('executeSchedules',{})['data']
308
- [{"name" => "Manual", "value" => "manual"}] + schedules
309
- }, 'displayOrder' => 4},
320
+ {'fieldName' => 'code', 'fieldLabel' => 'Code', 'type' => 'text', 'required' => false, 'displayOrder' => 2}
310
321
  ]
311
322
  end
312
323
 
313
- def add_backup_job_advanced_option_types
314
- []
324
+ def add_backup_job_type_option_types(job_action, backup_job_type, options)
325
+ backup_settings = @backup_settings_interface.get(options)["backupSettings"] || {}
326
+ # get job defaults
327
+ default_retention_count = options&.dig('backupJob', 'retentionCount') || get_object_value(backup_settings, "retentionCount")
328
+ default_schedule = options&.dig('backupJob', 'scheduleTypeId') || get_object_value(backup_settings, "defaultSchedule.id")
329
+ default_synthetic_enabled = options&.dig('backupJob', 'syntheticFullEnabled') || get_object_value(backup_settings, "defaultSyntheticFullBackupsEnabled")
330
+ default_synthetic_schedule = options&.dig('backupJob', 'syntheticFullSchedule') || get_object_value(backup_settings, "defaultSyntheticFullBackupSchedule.id")
331
+ job_input_params = {jobAction: job_action, id: backup_job_type}
332
+ job_inputs = @options_interface.options_for_source('backupJobOptionTypes', job_input_params)['data']['optionTypes']
333
+ job_inputs.each do | input |
334
+ # set input defaults from global settings
335
+ input['defaultValue'] = case input['fieldName']
336
+ when "retentionCount"
337
+ default_retention_count
338
+ when "scheduleTypeId"
339
+ default_schedule
340
+ when "syntheticFullEnabled"
341
+ default_synthetic_enabled
342
+ when "syntheticFullSchedule"
343
+ default_synthetic_schedule
344
+ end
345
+ end
346
+
347
+ job_inputs
315
348
  end
316
349
 
317
350
  def update_backup_job_option_types
@@ -322,8 +355,8 @@ EOT
322
355
  }
323
356
  end
324
357
 
325
- def update_backup_job_advanced_option_types
326
- add_backup_job_advanced_option_types.collect {|it|
358
+ def update_backup_job_type_option_types(job_action, backup_job_type, options)
359
+ add_backup_job_type_option_types(job_action, backup_job_type, options).collect {|it|
327
360
  it.delete('required')
328
361
  it.delete('defaultValue')
329
362
  it
@@ -22,6 +22,7 @@ class Morpheus::Cli::BackupsCommand
22
22
  @backup_restores_interface = @api_client.backup_restores
23
23
  @instances_interface = @api_client.instances
24
24
  @servers_interface = @api_client.servers
25
+ @options_interface = @api_client.options
25
26
  end
26
27
 
27
28
  def handle(args)
@@ -188,15 +189,6 @@ EOT
188
189
  params['jobAction'] = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'jobAction', 'fieldLabel' => 'Backup Job Type', 'type' => 'select', 'optionSource' => 'backupJobActions', 'required' => true, 'defaultValue' => 'new'}], options[:options], @api_client)['jobAction']
189
190
  if params['jobAction'] == 'new'
190
191
  params['jobName'] = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'jobName', 'fieldLabel' => 'Job Name', 'type' => 'text', 'required' => false, 'defaultValue' => nil}], options[:options], @api_client)['jobName']
191
- default_retention_count = (create_results['backup'] && create_results['backup']['retentionCount']) ? create_results['backup']['retentionCount'] : ((create_results['backupSettings'] && create_results['backupSettings']['retentionCount']) ? create_results['backupSettings']['retentionCount'] : nil)
192
- params['retentionCount'] = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'retentionCount', 'fieldLabel' => 'Retention Count', 'type' => 'number', 'required' => false, 'defaultValue' => default_retention_count}], options[:options], @api_client)['retentionCount']
193
- params['jobSchedule'] = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'jobSchedule', 'fieldLabel' => 'Backup Schedule', 'type' => 'select', 'optionSource' => lambda { |api_client, api_params|
194
- schedules = api_client.options.options_for_source('executeSchedules',{})['data']
195
- [{"name" => "Manual", "value" => "manual"}] + schedules
196
- }, 'required' => false}], options[:options], @api_client)['jobSchedule']
197
- if params['jobSchedule'] == 'manual' || params['jobSchedule'] == ''
198
- params.delete('jobSchedule')
199
- end
200
192
  elsif params['jobAction'] == 'clone'
201
193
  params['jobId'] = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'jobId', 'fieldLabel' => 'Backup Job', 'type' => 'select', 'optionSource' => lambda { |api_client, api_params|
202
194
  @backup_jobs_interface.list({max:10000})['jobs'].collect {|backup_job|
@@ -211,9 +203,20 @@ EOT
211
203
  }
212
204
  }, 'required' => true}], options[:options], @api_client)['jobId']
213
205
  end
206
+
207
+ # new job option types
208
+ job_inputs = build_backup_job_option_types(params['jobAction'], params['backupType'], create_results)
209
+ job_opt_parser = Morpheus::Cli::OptionParser.new do |opts|
210
+ build_option_type_options(opts, options, job_inputs)
211
+ end
212
+ job_opt_parser.parse!(args)
213
+ v_prompt = Morpheus::Cli::OptionTypes.prompt(job_inputs, options[:options].deep_merge({:context_map => {'domain' => 'backupJob'}}), @api_client)
214
+ v_prompt.deep_compact!.booleanize! # remove empty values and convert checkbox "on" and "off" to true and false
215
+ params.deep_merge!(v_prompt)
214
216
  end
215
217
  payload['backup'].deep_merge!(params)
216
218
  end
219
+ #options[:payload] = payload
217
220
  execute_api(@backups_interface, :create, [], options, 'backup') do |json_response|
218
221
  backup = json_response['backup']
219
222
  print_green_success "Added backup #{backup['name']}"
@@ -482,6 +485,30 @@ EOT
482
485
  private
483
486
 
484
487
  ## Backups
488
+ def build_backup_job_option_types(job_action, backup_type, config_opts)
489
+ # get job defaults
490
+ default_retention_count = config_opts.dig('backup', 'retentionCount') || config_opts.dig('backupSettings', 'retentionCount')
491
+ default_schedule = config_opts.dig('backup', 'scheduleTypeId') || config_opts.dig('backup', 'backupJob', 'scheduleTypeId') || config_opts.dig('backupSettings', 'defaultBackupSchedule')
492
+ default_synthetic_enabled = config_opts.dig('backup', 'backupJob', 'syntheticFullEnabled') || config_opts.dig('backupSettings', 'defaultSyntheticFullBackupsEnabled')
493
+ default_synthetic_schedule = config_opts.dig('backup', 'backupJob', 'syntheticFullSchedule') || config_opts.dig('backupSettings', 'defaultSyntheticFullBackupSchedule')
494
+ job_input_params = {jobAction: job_action, backupTypeCode: backup_type}
495
+ job_inputs = @options_interface.options_for_source('backupJobOptionTypes', job_input_params)['data']['optionTypes']
496
+ job_inputs.each do | input |
497
+ # set input defaults from global settings
498
+ input['defaultValue'] = case input['fieldName']
499
+ when "retentionCount"
500
+ default_retention_count
501
+ when "scheduleTypeId"
502
+ default_schedule
503
+ when "syntheticFullEnabled"
504
+ default_synthetic_enabled
505
+ when "syntheticFullSchedule"
506
+ default_synthetic_schedule
507
+ end
508
+ end
509
+
510
+ job_inputs
511
+ end
485
512
 
486
513
  def backup_list_column_definitions()
487
514
  {