hybrid_platforms_conductor 32.8.2 → 32.9.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: f190c223603682dd67a933cb989ef89858d71459ebb1d962bfffda9def7666f2
4
- data.tar.gz: 4fd85a4b961dc8ba8cc2c83b3f9749b49a021203c37afbe91db5123e54068007
3
+ metadata.gz: 378b6da76cab8e20f60c0517f7bbef90933b5d573069437ee16d913ca81c0689
4
+ data.tar.gz: 1924dd81e2740b50ee55758271282729d6df1fd6a45b555f96c321d1b40e54e3
5
5
  SHA512:
6
- metadata.gz: e77c67013ea488956dd55927a06b22733efc7f283aa234bd3527b02a8044517447177a686c4964e27c7ff62afd9513de34efe33321ee6fdb16f7e3d6cd0dd06c
7
- data.tar.gz: 0e041f3b998df727e83ec6580b09a02e4ee22c246e23a2f7ef5e3b64a3d60fd39745c1ed2241846467c14ba9d11b6dc8e8955929b6940f7ef87132369ecc9c80
6
+ metadata.gz: f8a72778375c154e42829a430bec151a7553b79874d1a878e129d80eed22b0f77f094751ee370c84441e7ed658d9e7b87e80c8f950ba64b491e1e62eec1f4a2f
7
+ data.tar.gz: e437a3f4871bde44d6bcbcd8a588dd83ff33c0374cee3769eada500a3acf04606e37144f98d2a49aaf69e0ff8cdd935d3eaa396fea5bb19ac485184df883db24
@@ -74,13 +74,13 @@ module HybridPlatformsConductor
74
74
  # First check if we already have a test container that corresponds to this node and environment
75
75
  @lxc_details = nil
76
76
  with_proxmox do |proxmox|
77
- proxmox.get('nodes').each do |node_info|
77
+ proxmox_get(proxmox, 'nodes').each do |node_info|
78
78
  if proxmox_test_info[:test_config][:pve_nodes].include?(node_info['node']) && node_info['status'] == 'online'
79
- proxmox.get("nodes/#{node_info['node']}/lxc").each do |lxc_info|
79
+ proxmox_get(proxmox, "nodes/#{node_info['node']}/lxc").each do |lxc_info|
80
80
  vm_id = Integer(lxc_info['vmid'])
81
81
  if vm_id.between?(*proxmox_test_info[:test_config][:vm_ids_range])
82
82
  # Check if the description contains our ID
83
- lxc_config = proxmox.get("nodes/#{node_info['node']}/lxc/#{vm_id}/config")
83
+ lxc_config = proxmox_get(proxmox, "nodes/#{node_info['node']}/lxc/#{vm_id}/config")
84
84
  vm_description_lines = (lxc_config['description'] || '').split("\n")
85
85
  hpc_marker_idx = vm_description_lines.index('===== HPC info =====')
86
86
  unless hpc_marker_idx.nil?
@@ -222,8 +222,8 @@ module HybridPlatformsConductor
222
222
  with_proxmox do |proxmox|
223
223
  vm_id_str = @lxc_details[:vm_id].to_s
224
224
  status =
225
- if proxmox.get("nodes/#{@lxc_details[:pve_node]}/lxc").any? { |data_info| data_info['vmid'] == vm_id_str }
226
- status_info = proxmox.get("nodes/#{@lxc_details[:pve_node]}/lxc/#{@lxc_details[:vm_id]}/status/current")
225
+ if proxmox_get(proxmox, "nodes/#{@lxc_details[:pve_node]}/lxc").any? { |data_info| data_info['vmid'] == vm_id_str }
226
+ status_info = proxmox_get(proxmox, "nodes/#{@lxc_details[:pve_node]}/lxc/#{@lxc_details[:vm_id]}/status/current")
227
227
  # Careful that it is possible that somebody destroyed the VM and so its status is missing
228
228
  status = status_info.key?('status') ? status_info['status'].to_sym : :missing
229
229
  status = :exited if status == :stopped
@@ -292,11 +292,27 @@ module HybridPlatformsConductor
292
292
  end
293
293
  end
294
294
 
295
- # Maximum number of retries to perform on the Proxmox API.
296
- NBR_RETRIES_MAX = 5
297
-
298
- # Minimum seconds to wait between retries
299
- RETRY_WAIT_TIME_SECS = 5
295
+ # Perform a get operation on the API
296
+ # Protect the get API methods with a retry mechanism in case of 5xx errors.
297
+ #
298
+ # Parameters::
299
+ # * *proxmox* (Proxmox): The Proxmox instance
300
+ # * *path* (String): Path to get
301
+ # Result::
302
+ # * Object: API response
303
+ def proxmox_get(proxmox, path)
304
+ response = nil
305
+ idx_try = 0
306
+ loop do
307
+ response = proxmox.get(path)
308
+ break if !(response.is_a?(String)) || !(response =~ /^NOK: error code = 5\d\d$/)
309
+ log_warn "[ #{@node}/#{@environment} ] - Proxmox API call get #{path} returned error #{response} (attempt ##{idx_try}/#{proxmox_test_info[:api_max_retries]})"
310
+ raise "[ #{@node}/#{@environment} ] - Proxmox API call get #{path} returns #{response} continuously (tried #{idx_try + 1} times)" if idx_try >= proxmox_test_info[:api_max_retries]
311
+ idx_try += 1
312
+ sleep proxmox_test_info[:api_wait_between_retries_secs] + rand(5)
313
+ end
314
+ response
315
+ end
300
316
 
301
317
  # Run a Proxmox task.
302
318
  # Handle a retry mechanism in case of 5xx errors.
@@ -313,11 +329,11 @@ module HybridPlatformsConductor
313
329
  while task.nil? do
314
330
  task = proxmox.send(http_method, "nodes/#{pve_node}/#{sub_path}", *args)
315
331
  if task =~ /^NOK: error code = 5\d\d$/
316
- log_warn "[ #{@node}/#{@environment} ] - Proxmox API call #{http_method} nodes/#{pve_node}/#{sub_path} #{args} returned error #{task} (attempt ##{idx_try}/#{NBR_RETRIES_MAX})"
332
+ log_warn "[ #{@node}/#{@environment} ] - Proxmox API call #{http_method} nodes/#{pve_node}/#{sub_path} #{args} returned error #{task} (attempt ##{idx_try}/#{proxmox_test_info[:api_max_retries]})"
317
333
  task = nil
334
+ break if idx_try >= proxmox_test_info[:api_max_retries]
318
335
  idx_try += 1
319
- break if idx_try == NBR_RETRIES_MAX
320
- sleep RETRY_WAIT_TIME_SECS + rand(5)
336
+ sleep proxmox_test_info[:api_wait_between_retries_secs] + rand(5)
321
337
  end
322
338
  end
323
339
  if task.nil?
@@ -358,7 +374,7 @@ module HybridPlatformsConductor
358
374
  # Result::
359
375
  # * String: The task status
360
376
  def task_status(proxmox, pve_node, task)
361
- status_info = proxmox.get("nodes/#{pve_node}/tasks/#{task}/status")
377
+ status_info = proxmox_get(proxmox, "nodes/#{pve_node}/tasks/#{task}/status")
362
378
  "#{status_info['status']}#{status_info['exitstatus'] ? ":#{status_info['exitstatus']}" : ''}"
363
379
  end
364
380
 
@@ -377,7 +393,9 @@ module HybridPlatformsConductor
377
393
  (proxmox_test_info[:test_config].merge(
378
394
  proxmox_api_url: proxmox_test_info[:api_url],
379
395
  futex_file: '/tmp/hpc_proxmox_allocations.futex',
380
- logs_dir: '/tmp/hpc_proxmox_waiter_logs'
396
+ logs_dir: '/tmp/hpc_proxmox_waiter_logs',
397
+ api_max_retries: proxmox_test_info[:api_max_retries],
398
+ api_wait_between_retries_secs: proxmox_test_info[:api_wait_between_retries_secs]
381
399
  )).to_json
382
400
  )
383
401
  result = nil
@@ -486,7 +504,7 @@ module HybridPlatformsConductor
486
504
  # So remaining length is 255 - 13 = 242 characters.
487
505
  MAX_FILE_ID_SIZE = 242
488
506
 
489
- # Get an ID unique for theis node/environment and that can be used in file names.
507
+ # Get an ID unique for this node/environment and that can be used in file names.
490
508
  #
491
509
  # Result::
492
510
  # * String: ID
@@ -506,6 +524,8 @@ module HybridPlatformsConductor
506
524
  # Result::
507
525
  # * Hash<Symbol,Object>: Configuration of the Proxmox instance to be used:
508
526
  # * *api_url* (String): The Proxmox API URL
527
+ # * *api_max_retries* (Integer): Max number of API retries
528
+ # * *api_wait_between_retries_secs* (Integer): Number of seconds to wait between API retries
509
529
  # * *sync_node* (String): Node to be used to synchronize Proxmox resources acquisition
510
530
  # * *test_config* (Hash<Symbol,Object>): The test configuration. Check ProxmoxWaiter#initialize (config_file structure) method to get details.
511
531
  # * *vm_config* (Hash<Symbol,Object>): Extra configuration of a created container. Check #request_lxc_creation_for results to get details.
@@ -26,6 +26,8 @@ class ProxmoxWaiter
26
26
  # * *proxmox_api_url* (String): Proxmox API URL.
27
27
  # * *futex_file* (String): Path to the file serving as a futex.
28
28
  # * *logs_dir* (String): Path to the directory containing logs [default: '.']
29
+ # * *api_max_retries* (Integer): Max number of API retries
30
+ # * *api_wait_between_retries_secs* (Integer): Number of seconds to wait between API retries
29
31
  # * *pve_nodes* (Array<String>): List of PVE nodes allowed to spawn new containers [default: all]
30
32
  # * *vm_ips_list* (Array<String>): The list of IPs that are available for the Proxomx containers.
31
33
  # * *vm_ids_range* ([Integer, Integer]): Minimum and maximum reservable VM ID
@@ -637,11 +639,23 @@ class ProxmoxWaiter
637
639
 
638
640
  # Get a path from the API it returns its JSON result.
639
641
  # Keep a cache of it, whose lifespan is this ProxmoxWaiter instance.
642
+ # Have a retry mechanism to make sure eventual non-deterministic 5xx errors are not an issue.
640
643
  #
641
644
  # Parameters::
642
645
  # * *path* (String): API path to query
643
- def api_get(path)
644
- @gets_cache[path] = @proxmox.get(path) unless @gets_cache.key?(path)
646
+ # Result::
647
+ # * Object: The API response
648
+ def api_get(path, nbr_retries: 3, wait_between_retry_secs: 10)
649
+ unless @gets_cache.key?(path)
650
+ idx_try = 0
651
+ loop do
652
+ @gets_cache[path] = @proxmox.get(path)
653
+ break unless @gets_cache[path].is_a?(String) && @gets_cache[path] =~ /^NOK: error code = 5\d\d$/
654
+ raise "Proxmox API get #{path} returns #{@gets_cache[path]} continuously (tried #{idx_try + 1} times)" if idx_try >= @config['api_max_retries']
655
+ idx_try += 1
656
+ sleep @config['api_wait_between_retries_secs']
657
+ end
658
+ end
645
659
  @gets_cache[path]
646
660
  end
647
661
 
@@ -1,5 +1,5 @@
1
1
  module HybridPlatformsConductor
2
2
 
3
- VERSION = '32.8.2'
3
+ VERSION = '32.9.0'
4
4
 
5
5
  end
@@ -28,6 +28,26 @@ describe HybridPlatformsConductor::HpcPlugins::Provisioner::Proxmox do
28
28
  end
29
29
  end
30
30
 
31
+ it 'retries a few times before ending in error for a 5xx API error' do
32
+ with_sync_node do
33
+ mock_proxmox(mocked_pve_nodes: [{ 'pve_node_name' => { error_strings: ['NOK: error code = 500'] * 5 } }])
34
+ result = call_reserve_proxmox_container(2, 1024, 4, config: { api_max_retries: 4 })
35
+ expect(result[:error]).not_to eq nil
36
+ expect(result[:error]).to match /Unhandled exception from reserve_proxmox_container: Proxmox API get nodes\/pve_node_name\/lxc returns NOK: error code = 500 continuously \(tried 5 times\)/
37
+ end
38
+ end
39
+
40
+ it 'retries API errors a few times until it gets resolved' do
41
+ with_sync_node do
42
+ mock_proxmox(mocked_pve_nodes: [{ 'pve_node_name' => { error_strings: ['NOK: error code = 500'] * 3 } }])
43
+ expect(call_reserve_proxmox_container(2, 1024, 4, config: { api_max_retries: 4 })).to eq(
44
+ pve_node: 'pve_node_name',
45
+ vm_id: 1000,
46
+ vm_ip: '192.168.0.100'
47
+ )
48
+ end
49
+ end
50
+
31
51
  end
32
52
 
33
53
  end
@@ -39,16 +39,7 @@ describe HybridPlatformsConductor::HpcPlugins::Provisioner::Proxmox do
39
39
  mock_proxmox_to_start_node(nbr_api_errors: 3)
40
40
  ]
41
41
  instance.create
42
- # To speed up the test, alter the wait time between retries.
43
- old_wait_secs = HybridPlatformsConductor::HpcPlugins::Provisioner::Proxmox.const_get(:RETRY_WAIT_TIME_SECS)
44
- begin
45
- HybridPlatformsConductor::HpcPlugins::Provisioner::Proxmox.send(:remove_const, :RETRY_WAIT_TIME_SECS)
46
- HybridPlatformsConductor::HpcPlugins::Provisioner::Proxmox.const_set(:RETRY_WAIT_TIME_SECS, 1)
47
- instance.start
48
- ensure
49
- HybridPlatformsConductor::HpcPlugins::Provisioner::Proxmox.send(:remove_const, :RETRY_WAIT_TIME_SECS)
50
- HybridPlatformsConductor::HpcPlugins::Provisioner::Proxmox.const_set(:RETRY_WAIT_TIME_SECS, old_wait_secs)
51
- end
42
+ instance.start
52
43
  end
53
44
  end
54
45
 
@@ -58,19 +49,10 @@ describe HybridPlatformsConductor::HpcPlugins::Provisioner::Proxmox do
58
49
  # 1 - The info on existing containers
59
50
  mock_proxmox_to_get_nodes_info,
60
51
  # 2 - The start of the container - fail too many times
61
- mock_proxmox_to_start_node(nbr_api_errors: HybridPlatformsConductor::HpcPlugins::Provisioner::Proxmox.const_get(:NBR_RETRIES_MAX), task_status: nil)
52
+ mock_proxmox_to_start_node(nbr_api_errors: 4, task_status: nil)
62
53
  ]
63
54
  instance.create
64
- # To speed up the test, alter the wait time between retries.
65
- old_wait_secs = HybridPlatformsConductor::HpcPlugins::Provisioner::Proxmox.const_get(:RETRY_WAIT_TIME_SECS)
66
- begin
67
- HybridPlatformsConductor::HpcPlugins::Provisioner::Proxmox.send(:remove_const, :RETRY_WAIT_TIME_SECS)
68
- HybridPlatformsConductor::HpcPlugins::Provisioner::Proxmox.const_set(:RETRY_WAIT_TIME_SECS, 1)
69
- expect { instance.start }.to raise_error '[ node/test ] - Proxmox API call post nodes/pve_node_name/lxc/1024/status/start [] is constantly failing. Giving up.'
70
- ensure
71
- HybridPlatformsConductor::HpcPlugins::Provisioner::Proxmox.send(:remove_const, :RETRY_WAIT_TIME_SECS)
72
- HybridPlatformsConductor::HpcPlugins::Provisioner::Proxmox.const_set(:RETRY_WAIT_TIME_SECS, old_wait_secs)
73
- end
55
+ expect { instance.start }.to raise_error '[ node/test ] - Proxmox API call post nodes/pve_node_name/lxc/1024/status/start [] is constantly failing. Giving up.'
74
56
  end
75
57
  end
76
58
 
@@ -23,6 +23,46 @@ describe HybridPlatformsConductor::HpcPlugins::Provisioner::Proxmox do
23
23
  end
24
24
  end
25
25
 
26
+
27
+ it '' do
28
+ with_test_proxmox_platform do |instance|
29
+ mock_proxmox_calls_with [
30
+ # 1 - The info on existing containers
31
+ mock_proxmox_to_get_nodes_info,
32
+ # 2 - The start of the container - fail a few times
33
+ mock_proxmox_to_start_node(nbr_api_errors: 2)
34
+ ]
35
+ instance.create
36
+ instance.start
37
+ end
38
+ end
39
+
40
+ it 'retries calls to the API when getting back errors 5xx' do
41
+ with_test_proxmox_platform do |instance|
42
+ mock_proxmox_calls_with [
43
+ # 1 - The info on existing containers
44
+ mock_proxmox_to_get_nodes_info,
45
+ # 2 - The status of the container
46
+ mock_proxmox_to_status_node(nbr_api_errors: 3)
47
+ ]
48
+ instance.create
49
+ expect(instance.state).to eq :created
50
+ end
51
+ end
52
+
53
+ it 'fails to get an instance\'s status when the Proxmox API fails too many times' do
54
+ with_test_proxmox_platform do |instance|
55
+ mock_proxmox_calls_with [
56
+ # 1 - The info on existing containers
57
+ mock_proxmox_to_get_nodes_info,
58
+ # 2 - The status of the container
59
+ mock_proxmox_to_status_node(nbr_api_errors: 4, status: nil)
60
+ ]
61
+ instance.create
62
+ expect { instance.state }.to raise_error '[ node/test ] - Proxmox API call get nodes/pve_node_name/lxc returns NOK: error code = 500 continuously (tried 4 times)'
63
+ end
64
+ end
65
+
26
66
  end
27
67
 
28
68
  end
@@ -23,6 +23,8 @@ module HybridPlatformsConductorTest
23
23
  test_platform path: '#{repository}'
24
24
  proxmox(
25
25
  api_url: 'https://my-proxmox.my-domain.com:8006',
26
+ api_max_retries: 3,
27
+ api_wait_between_retries_secs: 0,
26
28
  sync_node: 'node',
27
29
  test_config: {
28
30
  pve_nodes: ['pve_node_name'],
@@ -75,12 +77,20 @@ module HybridPlatformsConductorTest
75
77
  # * *proxmox_password* (String or nil): Proxmox password used to connect to Proxmox API [default: nil]
76
78
  # * *proxmox_realm* (String or nil): Proxmox realm used to connect to Proxmox API [default: 'pam']
77
79
  # * *nodes_info* (Array<Hash>): Nodes info returned by the Proxmox API [default: []]
80
+ # * *nbr_api_errors* (Integer): Number of API errors 500 to mock before getting a successful query [defaults: 0]
78
81
  # * *extra_expects* (Proc or nil): Code called for additional expectations on the proxmox instance, or nil if none [default: nil]
79
82
  # * Parameters::
80
83
  # * *proxmox* (Double): The mocked Proxmox instance
81
84
  # Result::
82
85
  # * Proc: Code called in place of Proxmox.new. Signature is the same as Proxmox.new.
83
- def mock_proxmox_to_get_nodes_info(proxmox_user: nil, proxmox_password: nil, proxmox_realm: 'pam', nodes_info: [], extra_expects: nil)
86
+ def mock_proxmox_to_get_nodes_info(
87
+ proxmox_user: nil,
88
+ proxmox_password: nil,
89
+ proxmox_realm: 'pam',
90
+ nodes_info: [],
91
+ nbr_api_errors: 0,
92
+ extra_expects: nil
93
+ )
84
94
  proc do |url, pve_node, user, password, realm, options|
85
95
  expect(url).to eq 'https://my-proxmox.my-domain.com:8006/api2/json/'
86
96
  expect(pve_node).to eq 'my-proxmox'
@@ -97,8 +107,10 @@ module HybridPlatformsConductorTest
97
107
  # Nothing
98
108
  end
99
109
  # Mock checking existing nodes
100
- expect(proxmox).to receive(:get).with('nodes') do
101
- nodes_info
110
+ idx_try = 0
111
+ expect(proxmox).to receive(:get).exactly(nbr_api_errors + 1).times.with('nodes') do
112
+ idx_try += 1
113
+ idx_try <= nbr_api_errors ? 'NOK: error code = 500' : nodes_info
102
114
  end
103
115
  extra_expects.call(proxmox) unless extra_expects.nil?
104
116
  proxmox
@@ -243,13 +255,15 @@ module HybridPlatformsConductorTest
243
255
  # Parameters::
244
256
  # * *proxmox_user* (String or nil): Proxmox user used to connect to Proxmox API [default: nil]
245
257
  # * *proxmox_password* (String or nil): Proxmox password used to connect to Proxmox API [default: nil]
246
- # * *status* (String): Mocked status [default: 'created']
258
+ # * *status* (String or nil): Mocked status, or nil if it should not be asked [default: 'created']
259
+ # * *nbr_api_errors* (Integer): Number of API errors 500 to mock before getting a successful query [defaults: 0]
247
260
  # Result::
248
261
  # * Proc: Code called in place of Proxmox.new. Signature is the same as Proxmox.new.
249
262
  def mock_proxmox_to_status_node(
250
263
  proxmox_user: nil,
251
264
  proxmox_password: nil,
252
- task_status: 'OK'
265
+ status: 'created',
266
+ nbr_api_errors: 0
253
267
  )
254
268
  proc do |url, pve_node, user, password, realm, options|
255
269
  expect(url).to eq 'https://my-proxmox.my-domain.com:8006/api2/json/'
@@ -267,17 +281,25 @@ module HybridPlatformsConductorTest
267
281
  # Nothing
268
282
  end
269
283
  # Mock getting status of a container
270
- expect(proxmox).to receive(:get).with('nodes/pve_node_name/lxc') do
271
- [
284
+ idx_try = 0
285
+ expect(proxmox).to receive(:get).exactly(nbr_api_errors + (status.nil? ? 0 : 1)).times.with('nodes/pve_node_name/lxc') do
286
+ idx_try += 1
287
+ if idx_try <= nbr_api_errors
288
+ 'NOK: error code = 500'
289
+ else
290
+ [
291
+ {
292
+ 'vmid' => '1024'
293
+ }
294
+ ]
295
+ end
296
+ end
297
+ unless status.nil?
298
+ expect(proxmox).to receive(:get).with('nodes/pve_node_name/lxc/1024/status/current') do
272
299
  {
273
- 'vmid' => '1024'
300
+ 'status' => status
274
301
  }
275
- ]
276
- end
277
- expect(proxmox).to receive(:get).with('nodes/pve_node_name/lxc/1024/status/current') do
278
- {
279
- 'status' => 'created'
280
- }
302
+ end
281
303
  end
282
304
  proxmox
283
305
  end
@@ -548,13 +570,17 @@ module HybridPlatformsConductorTest
548
570
  ]
549
571
  when /^nodes\/([^\/]+)\/lxc$/
550
572
  pve_node_name = $1
551
- pve_nodes[pve_node_name][:lxc_containers].map do |vm_id, vm_info|
552
- {
553
- 'vmid' => vm_id.to_s,
554
- 'maxdisk' => vm_info[:maxdisk],
555
- 'maxmem' => vm_info[:maxmem],
556
- 'cpus' => vm_info[:cpus]
557
- }
573
+ if pve_nodes[pve_node_name][:error_strings].nil? || pve_nodes[pve_node_name][:error_strings].empty?
574
+ pve_nodes[pve_node_name][:lxc_containers].map do |vm_id, vm_info|
575
+ {
576
+ 'vmid' => vm_id.to_s,
577
+ 'maxdisk' => vm_info[:maxdisk],
578
+ 'maxmem' => vm_info[:maxmem],
579
+ 'cpus' => vm_info[:cpus]
580
+ }
581
+ end
582
+ else
583
+ pve_nodes[pve_node_name][:error_strings].shift
558
584
  end
559
585
  when /^nodes\/([^\/]+)\/lxc\/([^\/]+)\/config$/
560
586
  pve_node_name = $1
@@ -642,14 +668,26 @@ module HybridPlatformsConductorTest
642
668
  # * *wait_before_retry* (Integer): Specify the number of seconds to wait before retry [default: 0]
643
669
  # * *create* (Hash or nil): Create file content, or nil if none [default: nil]
644
670
  # * *destroy* (Hash or nil): Destroy file content, or nil if none [default: nil]
671
+ # * *api_max_retries* (Integer): Max number of API retries [default: 3]
672
+ # * *api_wait_between_retries_secs* (Integer): Number of seconds to wait between API retries [default: 0]
645
673
  # Result::
646
674
  # * Hash: JSON result of the call
647
- def call_reserve_proxmox_container_with(config: {}, max_retries: 1, wait_before_retry: 0, create: nil, destroy: nil)
675
+ def call_reserve_proxmox_container_with(
676
+ config: {},
677
+ max_retries: 1,
678
+ wait_before_retry: 0,
679
+ create: nil,
680
+ destroy: nil,
681
+ api_max_retries: 3,
682
+ api_wait_between_retries_secs: 0
683
+ )
648
684
  # Make sure we set default values in the config
649
685
  config = {
650
686
  proxmox_api_url: 'https://my-proxmox.my-domain.com:8006',
651
687
  futex_file: "#{@repository}/proxmox/allocations.futex",
652
688
  logs_dir: "#{Dir.tmpdir}/hpc_test_proxmox_waiter_logs",
689
+ api_max_retries: api_max_retries,
690
+ api_wait_between_retries_secs: api_wait_between_retries_secs,
653
691
  pve_nodes: ['pve_node_name'],
654
692
  vm_ips_list: %w[
655
693
  192.168.0.100
@@ -716,7 +754,14 @@ module HybridPlatformsConductorTest
716
754
  # * *wait_before_retry* (Integer): Specify the number of seconds to wait before retry [default: 0]
717
755
  # Result::
718
756
  # * Hash: JSON result of the call
719
- def call_reserve_proxmox_container(cpus, ram_mb, disk_gb, config: {}, max_retries: 1, wait_before_retry: 0)
757
+ def call_reserve_proxmox_container(
758
+ cpus,
759
+ ram_mb,
760
+ disk_gb,
761
+ config: {},
762
+ max_retries: 1,
763
+ wait_before_retry: 0
764
+ )
720
765
  call_reserve_proxmox_container_with(
721
766
  config: config,
722
767
  max_retries: max_retries,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hybrid_platforms_conductor
3
3
  version: !ruby/object:Gem::Version
4
- version: 32.8.2
4
+ version: 32.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Muriel Salvan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-15 00:00:00.000000000 Z
11
+ date: 2021-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: range_operators