hybrid_platforms_conductor 32.9.0 → 32.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 378b6da76cab8e20f60c0517f7bbef90933b5d573069437ee16d913ca81c0689
4
- data.tar.gz: 1924dd81e2740b50ee55758271282729d6df1fd6a45b555f96c321d1b40e54e3
3
+ metadata.gz: 4f1beb4de64ac4dcdc1de3e5063980ea4dab1b8ceef204baae0a9f4bf209f1f3
4
+ data.tar.gz: 0c5e65553da39646554d737c8a690939497a8c89f602a4eae01a4987fff994b7
5
5
  SHA512:
6
- metadata.gz: f8a72778375c154e42829a430bec151a7553b79874d1a878e129d80eed22b0f77f094751ee370c84441e7ed658d9e7b87e80c8f950ba64b491e1e62eec1f4a2f
7
- data.tar.gz: e437a3f4871bde44d6bcbcd8a588dd83ff33c0374cee3769eada500a3acf04606e37144f98d2a49aaf69e0ff8cdd935d3eaa396fea5bb19ac485184df883db24
6
+ metadata.gz: 3129d3b37140c6488b2b6a8b6c1c8cb22ce745181a643925d9bb2fdc77de97a331660c8d5193dde940535d58b545576796d22a29008d181c73bbf7bb384c2251
7
+ data.tar.gz: 187c6215c37e89b924693c1819fea12f8cc444858ac575f9445b535ae9866a396b01dbc5baaf85ca4e8163d60c8865c931eca319c4824148fdd06029920b9710
@@ -23,6 +23,13 @@ module HybridPlatformsConductor
23
23
  super
24
24
  end
25
25
 
26
+ # Re-authenticate the Proxmox instance
27
+ # This can be useful when the API returns errors due to invalidated tokens
28
+ def reauthenticate
29
+ log_info 'Force re-authentication to Proxmox'
30
+ @auth_params = create_ticket
31
+ end
32
+
26
33
  end
27
34
  ::Proxmox::Proxmox.prepend ProxmoxPatches
28
35
 
@@ -309,6 +316,8 @@ module HybridPlatformsConductor
309
316
  log_warn "[ #{@node}/#{@environment} ] - Proxmox API call get #{path} returned error #{response} (attempt ##{idx_try}/#{proxmox_test_info[:api_max_retries]})"
310
317
  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
318
  idx_try += 1
319
+ # We have to reauthenticate: error 500 raised by Proxmox are often due to token being invalidated wrongly
320
+ proxmox.reauthenticate
312
321
  sleep proxmox_test_info[:api_wait_between_retries_secs] + rand(5)
313
322
  end
314
323
  response
@@ -333,6 +342,8 @@ module HybridPlatformsConductor
333
342
  task = nil
334
343
  break if idx_try >= proxmox_test_info[:api_max_retries]
335
344
  idx_try += 1
345
+ # We have to reauthenticate: error 500 raised by Proxmox are often due to token being invalidated wrongly
346
+ proxmox.reauthenticate
336
347
  sleep proxmox_test_info[:api_wait_between_retries_secs] + rand(5)
337
348
  end
338
349
  end
@@ -653,6 +653,9 @@ class ProxmoxWaiter
653
653
  break unless @gets_cache[path].is_a?(String) && @gets_cache[path] =~ /^NOK: error code = 5\d\d$/
654
654
  raise "Proxmox API get #{path} returns #{@gets_cache[path]} continuously (tried #{idx_try + 1} times)" if idx_try >= @config['api_max_retries']
655
655
  idx_try += 1
656
+ # We have to reauthenticate: error 500 raised by Proxmox are often due to token being invalidated wrongly
657
+ # TODO: Provide a way to do it properly in the official gem
658
+ @proxmox.instance_variable_set(:@auth_params, @proxmox.send(:create_ticket))
656
659
  sleep @config['api_wait_between_retries_secs']
657
660
  end
658
661
  end
@@ -1,5 +1,5 @@
1
1
  module HybridPlatformsConductor
2
2
 
3
- VERSION = '32.9.0'
3
+ VERSION = '32.9.1'
4
4
 
5
5
  end
@@ -10,6 +10,7 @@ describe HybridPlatformsConductor::HpcPlugins::Provisioner::Proxmox do
10
10
  with_sync_node do
11
11
  mock_proxmox(mocked_pve_nodes: [{ 'pve_node_name' => {} }] * 5)
12
12
  expect(call_reserve_proxmox_container(2, 128 * 1024, 4, max_retries: 5)).to eq(error: 'not_enough_resources')
13
+ expect_proxmox_actions_to_be []
13
14
  end
14
15
  end
15
16
 
@@ -25,6 +26,23 @@ describe HybridPlatformsConductor::HpcPlugins::Provisioner::Proxmox do
25
26
  vm_id: 1000,
26
27
  vm_ip: '192.168.0.100'
27
28
  )
29
+ expect_proxmox_actions_to_be [
30
+ [
31
+ :post,
32
+ 'nodes/pve_node_name/lxc',
33
+ {
34
+ 'ostemplate' => 'test_template.iso',
35
+ 'hostname' => 'test.hostname.my-domain.com',
36
+ 'description' => /node: test_node\nenvironment: test_env/,
37
+ 'cores' => 2,
38
+ 'cpulimit' => 2,
39
+ 'memory' => 1024,
40
+ 'rootfs' => 'local-lvm:4',
41
+ 'net0' => 'name=eth0,bridge=vmbr0,gw=172.16.16.16,ip=192.168.0.100/32',
42
+ 'vmid' => 1000
43
+ }
44
+ ]
45
+ ]
28
46
  end
29
47
  end
30
48
 
@@ -34,6 +52,12 @@ describe HybridPlatformsConductor::HpcPlugins::Provisioner::Proxmox do
34
52
  result = call_reserve_proxmox_container(2, 1024, 4, config: { api_max_retries: 4 })
35
53
  expect(result[:error]).not_to eq nil
36
54
  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\)/
55
+ expect_proxmox_actions_to_be [
56
+ [:create_ticket],
57
+ [:create_ticket],
58
+ [:create_ticket],
59
+ [:create_ticket]
60
+ ]
37
61
  end
38
62
  end
39
63
 
@@ -45,6 +69,26 @@ describe HybridPlatformsConductor::HpcPlugins::Provisioner::Proxmox do
45
69
  vm_id: 1000,
46
70
  vm_ip: '192.168.0.100'
47
71
  )
72
+ expect_proxmox_actions_to_be [
73
+ [:create_ticket],
74
+ [:create_ticket],
75
+ [:create_ticket],
76
+ [
77
+ :post,
78
+ 'nodes/pve_node_name/lxc',
79
+ {
80
+ 'ostemplate' => 'test_template.iso',
81
+ 'hostname' => 'test.hostname.my-domain.com',
82
+ 'description' => /node: test_node\nenvironment: test_env/,
83
+ 'cores' => 2,
84
+ 'cpulimit' => 2,
85
+ 'memory' => 1024,
86
+ 'rootfs' => 'local-lvm:4',
87
+ 'net0' => 'name=eth0,bridge=vmbr0,gw=172.16.16.16,ip=192.168.0.100/32',
88
+ 'vmid' => 1000
89
+ }
90
+ ]
91
+ ]
48
92
  end
49
93
  end
50
94
 
@@ -23,20 +23,6 @@ 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
26
  it 'retries calls to the API when getting back errors 5xx' do
41
27
  with_test_proxmox_platform do |instance|
42
28
  mock_proxmox_calls_with [
@@ -156,6 +156,7 @@ module HybridPlatformsConductorTest
156
156
  idx_try += 1
157
157
  idx_try <= nbr_api_errors ? 'NOK: error code = 500' : task_name
158
158
  end
159
+ expect(proxmox).to receive(:reauthenticate).exactly(nbr_api_errors - (task_status.nil? ? 1 : 0)).times
159
160
  # Mock checking task status
160
161
  unless task_status.nil?
161
162
  # Mock checking task status
@@ -294,6 +295,7 @@ module HybridPlatformsConductorTest
294
295
  ]
295
296
  end
296
297
  end
298
+ expect(proxmox).to receive(:reauthenticate).exactly(nbr_api_errors - (status.nil? ? 1 : 0)).times
297
299
  unless status.nil?
298
300
  expect(proxmox).to receive(:get).with('nodes/pve_node_name/lxc/1024/status/current') do
299
301
  {
@@ -641,6 +643,10 @@ module HybridPlatformsConductorTest
641
643
  raise "Unknown Proxmox API post call: #{path}. Please adapt the test framework."
642
644
  end
643
645
  end
646
+ # Mock create_ticket
647
+ allow(proxmox).to receive(:create_ticket) do
648
+ @proxmox_actions << [:create_ticket]
649
+ end
644
650
  proxmox
645
651
  end
646
652
  end,
@@ -808,7 +814,13 @@ module HybridPlatformsConductorTest
808
814
  # Parameters::
809
815
  # * *expected_proxmox_actions* (Array<Array>): Expected Proxmox actions
810
816
  def expect_proxmox_actions_to_be(expected_proxmox_actions)
811
- expect(@proxmox_actions.size).to eq expected_proxmox_actions.size
817
+ expect(@proxmox_actions.size).to eq(expected_proxmox_actions.size), <<~EOS
818
+ Expected #{expected_proxmox_actions.size} Proxmox actions, but got #{@proxmox_actions.size} instead:
819
+ ----- Received:
820
+ #{@proxmox_actions.map(&:inspect).join("\n")}
821
+ ----- Expected:
822
+ #{expected_proxmox_actions.map(&:inspect).join("\n")}
823
+ EOS
812
824
  @proxmox_actions.zip(expected_proxmox_actions).each do |proxmox_action, expected_proxmox_action|
813
825
  expect(proxmox_action.size).to eq expected_proxmox_action.size
814
826
  expect(proxmox_action[0..1]).to eq expected_proxmox_action[0..1]
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.9.0
4
+ version: 32.9.1
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-22 00:00:00.000000000 Z
11
+ date: 2021-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: range_operators