fog-proxmox 0.15.1 → 0.15.3

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: b8570832df51a02eaf643d8ff711aded5ed8f664168eb2c1e0e8b3dec1f4b309
4
- data.tar.gz: c162e5cddd1f8c809310d95b82bce305e2a48c19dad469c432ffd77f8f733723
3
+ metadata.gz: 9484bef489394b238790e49ebd6e4ca8faa2a43606c6dfcc24298ce7590d7eb1
4
+ data.tar.gz: 66950f4f17d62d9e05803fad7c7dbc971b64791aed8dd1a86bf9f753ce76dbca
5
5
  SHA512:
6
- metadata.gz: caa4247e9c6f778ad157ba72561f04da0876a6e2d5acd185c93dc84c5ecba5168f1fb3ae3d6a87ddb803d26271963e101f51b8aef5955877ee2f3434cb8de60a
7
- data.tar.gz: 8dee3cdb18fe8c1e6ec5103adfb311d6d5d946b44cf3b73acba3b66808321306ea0542c7d40111f53d2b681a1d39b87b2fd43949d5fd15468fd496b66e704184
6
+ metadata.gz: 437671da2ce7a9dd745673b5679f07adf6c12fbc6cdf9c98a16fca89ce348e0c15c8d958edf475cad6bd7a2975b11e5a11ba05c35fb715efc17484ae3c40fa0b
7
+ data.tar.gz: d85e62d58878800e640b4af5b9960adc28a050cf49f79931ea4d3e68110074f757e6d5dce1212a5bf7c7a042863118b8b7af08baff951699801000b1fbd9ceea
data/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.15.3](https://github.com/fog/fog-proxmox/compare/v0.15.2...v0.15.3) (2026-01-22)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * Add query params instead of body params to support purge option ([dca9c29](https://github.com/fog/fog-proxmox/commit/dca9c294a64d68598436c53172860b72afd3eb89)), closes [#119](https://github.com/fog/fog-proxmox/issues/119)
9
+
10
+ ## [0.15.2](https://github.com/fog/fog-proxmox/compare/v0.15.1...v0.15.2) (2025-08-06)
11
+
12
+
13
+ ### Miscellaneous Chores
14
+
15
+ * release 0.15.2 ([#116](https://github.com/fog/fog-proxmox/issues/116)) ([d460740](https://github.com/fog/fog-proxmox/commit/d46074059cc48e0951109850904b8bc6a030da81))
16
+
3
17
  ## [0.15.1](https://github.com/fog/fog-proxmox/compare/v0.15.0...v0.15.1) (2025-02-25)
4
18
 
5
19
 
data/examples/compute.rb CHANGED
@@ -34,7 +34,8 @@ proxmox_password = 'proxmox01'
34
34
  compute = Fog::Proxmox::Compute.new(
35
35
  proxmox_url: proxmox_url,
36
36
  proxmox_username: proxmox_username,
37
- proxmox_password: proxmox_password
37
+ proxmox_password: proxmox_password,
38
+ proxmox_auth_method: 'access_ticket'
38
39
  )
39
40
 
40
41
  # Create pools
@@ -48,11 +48,11 @@ module Fog
48
48
  def auth_body(params = {})
49
49
  raise URIError, 'URI params is required' if params.nil? || params.empty?
50
50
 
51
- if params[:proxmox_username].nil? || params[:proxmox_username].empty?
51
+ if params[:proxmox_username].nil? || params[:proxmox_username].to_s.strip.empty?
52
52
  raise URIError,
53
53
  'proxmox_username is required'
54
54
  end
55
- if params[:proxmox_password].nil? || params[:proxmox_password].empty?
55
+ if params[:proxmox_password].nil? || params[:proxmox_password].to_s.strip.empty?
56
56
  raise URIError,
57
57
  'proxmox_password is required'
58
58
  end
@@ -0,0 +1,46 @@
1
+ # Copyright 2026 ATIX AG
2
+
3
+ # This file is part of Fog::Proxmox.
4
+
5
+ # Fog::Proxmox is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+
10
+ # Fog::Proxmox is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+
15
+ # You should have received a copy of the GNU General Public License
16
+ # along with Fog::Proxmox. If not, see <http://www.gnu.org/licenses/>.
17
+
18
+ # frozen_string_literal: true
19
+
20
+ require 'fog/proxmox/helpers/efidisk_helper'
21
+
22
+ module Fog
23
+ module Proxmox
24
+ class Compute
25
+ # class Efidisk model: https://pve.proxmox.com/pve-docs/api-viewer/index.html#/nodes/{node}/{qemu|lxc}/{vmid}/config
26
+ # size is in Gb
27
+ class Efidisk < Fog::Model
28
+ identity :id
29
+ attribute :volid
30
+ attribute :size
31
+ attribute :format
32
+ attribute :storage
33
+ attribute :efitype
34
+ attribute :pre_enrolled_keys
35
+
36
+ def flatten
37
+ Fog::Proxmox::EfidiskHelper.flatten(attributes)
38
+ end
39
+
40
+ def to_s
41
+ Fog::Proxmox::Hash.flatten(flatten)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -116,8 +116,8 @@ module Fog
116
116
  reload
117
117
  end
118
118
 
119
- def destroy(options = {})
120
- request(:delete_server, options, vmid: vmid)
119
+ def destroy(options = {}, query: nil)
120
+ request(:delete_server, options, vmid: vmid, query: query)
121
121
  end
122
122
 
123
123
  def action(action, options = {})
@@ -20,6 +20,7 @@
20
20
  require 'fog/proxmox/attributes'
21
21
  require 'fog/proxmox/helpers/nic_helper'
22
22
  require 'fog/proxmox/helpers/controller_helper'
23
+ require 'fog/proxmox/helpers/efidisk_helper'
23
24
 
24
25
  module Fog
25
26
  module Proxmox
@@ -78,6 +79,7 @@ module Fog
78
79
  attribute :sshkeys
79
80
  attribute :searchdomain
80
81
  attribute :nameserver
82
+ attribute :efidisk
81
83
 
82
84
  def initialize(new_attributes = {})
83
85
  prepare_service_value(new_attributes)
@@ -85,6 +87,7 @@ module Fog
85
87
  requires :vmid
86
88
  initialize_interfaces(new_attributes)
87
89
  initialize_disks(new_attributes)
90
+ initialize_efidisk(new_attributes)
88
91
  super(new_attributes)
89
92
  end
90
93
 
@@ -155,6 +158,14 @@ module Fog
155
158
  attributes[:disks] << Fog::Proxmox::Compute::Disk.new(disk_hash)
156
159
  end
157
160
  end
161
+
162
+ def initialize_efidisk(new_attributes)
163
+ efidisk = new_attributes['efidisk0']
164
+ return if efidisk.nil?
165
+
166
+ efidisk_hash = Fog::Proxmox::EfidiskHelper.extract(efidisk)
167
+ attributes[:efidisk] = Fog::Proxmox::Compute::Efidisk.new(efidisk_hash)
168
+ end
158
169
  end
159
170
  end
160
171
  end
@@ -23,22 +23,26 @@ module Fog
23
23
  class Compute
24
24
  # class Real delete_server request
25
25
  class Real
26
- def delete_server(path_params, body_params)
26
+ def delete_server(path_params, body_params, query: nil)
27
27
  node = path_params[:node]
28
28
  type = path_params[:type]
29
29
  vmid = path_params[:vmid]
30
- request(
30
+ options = {
31
31
  expects: [200],
32
32
  method: 'DELETE',
33
33
  path: "nodes/#{node}/#{type}/#{vmid}",
34
34
  body: URI.encode_www_form(body_params)
35
- )
35
+ }
36
+
37
+ options[:query] = query if query&.any?
38
+
39
+ request(options)
36
40
  end
37
41
  end
38
42
 
39
43
  # class Mock delete_server request
40
44
  class Mock
41
- def delete_server(_path_params, _body_params); end
45
+ def delete_server(_path_params, _body_params, query: nil); end
42
46
  end
43
47
  end
44
48
  end
@@ -36,6 +36,7 @@ module Fog
36
36
  collection :interfaces
37
37
  model :disk
38
38
  collection :disks
39
+ model :efidisk
39
40
  model :server_config
40
41
  model :volume
41
42
  collection :volumes
@@ -136,28 +136,28 @@ module Fog
136
136
 
137
137
  def self.extract_size(disk_value)
138
138
  size = extract_option('size', disk_value)
139
- size = to_int_gb(to_bytes(size)).to_s if size.match?(/\d+(G)/)
139
+ size = to_int_gb(to_bytes(size)).to_s if size&.match?(/\d+(G)/)
140
140
  size
141
141
  end
142
142
 
143
143
  def self.disk?(id)
144
- DISKS_REGEXP.match(id) ? true : false
144
+ DISKS_REGEXP.match(id) || false
145
145
  end
146
146
 
147
147
  def self.cdrom?(value)
148
- CDROM_REGEXP.match(value) ? true : false
148
+ CDROM_REGEXP.match(value) || false
149
149
  end
150
150
 
151
151
  def self.server_disk?(id)
152
- SERVER_DISK_REGEXP.match(id) ? true : false
152
+ SERVER_DISK_REGEXP.match(id) || false
153
153
  end
154
154
 
155
155
  def self.rootfs?(id)
156
- ROOTFS_REGEXP.match(id) ? true : false
156
+ ROOTFS_REGEXP.match(id) || false
157
157
  end
158
158
 
159
159
  def self.mount_point?(id)
160
- MOUNT_POINT_REGEXP.match(id) ? true : false
160
+ MOUNT_POINT_REGEXP.match(id) || false
161
161
  end
162
162
 
163
163
  def self.container_disk?(id)
@@ -165,11 +165,11 @@ module Fog
165
165
  end
166
166
 
167
167
  def self.template?(volid)
168
- TEMPLATE_REGEXP.match(volid) ? true : false
168
+ TEMPLATE_REGEXP.match(volid) || false
169
169
  end
170
170
 
171
171
  def self.cloud_init?(volid)
172
- CLOUD_INIT_REGEXP.match(volid) ? true : false
172
+ CLOUD_INIT_REGEXP.match(volid) || false
173
173
  end
174
174
 
175
175
  def self.of_type?(disk_h, vm_type)
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2026 ATIX AG
4
+
5
+ # This file is part of Fog::Proxmox.
6
+
7
+ # Fog::Proxmox is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+
12
+ # Fog::Proxmox is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with Fog::Proxmox. If not, see <http://www.gnu.org/licenses/>.
19
+
20
+ module Fog
21
+ module Proxmox
22
+ # module EfidiskHelper mixins
23
+ module EfidiskHelper
24
+ def self.flatten(efidisk)
25
+ return '' if efidisk.nil?
26
+
27
+ volume = efidisk[:volid]
28
+ options = []
29
+
30
+ if efidisk.key?(:efitype)
31
+ options.push("efitype=#{efidisk[:efitype]}")
32
+ else
33
+ options.push('efitype=4m') # default efitype
34
+ end
35
+
36
+ options.push("size=#{efidisk[:size]}") if efidisk.key?(:size)
37
+
38
+ if efidisk.key?(:pre_enrolled_keys)
39
+ options.push("pre-enrolled-keys=#{efidisk[:pre_enrolled_keys]}")
40
+ else
41
+ options.push('pre-enrolled-keys=0') # Use 0=disabled if not given
42
+ end
43
+
44
+ { "efidisk#{efidisk[:id]}": "#{volume},#{options.join(',')}" }
45
+ end
46
+
47
+ def self.extract_key(name, efidisk)
48
+ matches = efidisk.match(%r{,{0,1}#{name}={1}(?<name_value>[\w/.:]+)})
49
+ matches ? matches[:name_value] : matches
50
+ end
51
+
52
+ def self.extract_storage(key)
53
+ values_a = key.scan(%r{^(([\w-]+):{0,1}([\w/.-]+))})
54
+ values = values_a.first if values_a
55
+ values[1]
56
+ end
57
+
58
+ def self.extract(efidisk_key)
59
+ efidisk = efidisk_key.dup
60
+ # convert "-" to "_" in 'local:110/vm-110-disk-0.qcow2,efitype=4m,pre-enrolled-keys=1,size=528K'
61
+ efidisk&.gsub!('pre-enrolled-keys', 'pre_enrolled_keys')
62
+
63
+ names = %i[efitype pre_enrolled_keys size]
64
+ efidisk_hash = {
65
+ id: 0,
66
+ volid: efidisk.split(',')[0],
67
+ storage: extract_storage(efidisk)
68
+ }
69
+ names.each do |name|
70
+ efidisk_hash.store(name.to_sym, extract_key(name, efidisk))
71
+ end
72
+ efidisk_hash
73
+ end
74
+ end
75
+ end
76
+ end
@@ -119,7 +119,7 @@ module Fog
119
119
  end
120
120
 
121
121
  def self.nic?(id)
122
- NICS_REGEXP.match(id) ? true : false
122
+ NICS_REGEXP.match(id) || false
123
123
  end
124
124
 
125
125
  def self.extract_ip(nic_value)
@@ -28,7 +28,7 @@ module Fog
28
28
  attribute :members
29
29
 
30
30
  def save(options = {})
31
- service.create_group((attributes.reject { |attribute| %i[users members].include? attribute }).merge(options))
31
+ service.create_group(attributes.reject { |attribute| %i[users members].include? attribute }.merge(options))
32
32
  reload
33
33
  end
34
34
 
@@ -42,7 +42,7 @@ module Fog
42
42
 
43
43
  def save(options = {})
44
44
  requires :tokenid, :userid
45
- token_hash = (attributes.reject { |attribute| %i[userid tokenid info].include? attribute }).merge(options)
45
+ token_hash = attributes.reject { |attribute| %i[userid tokenid info].include? attribute }.merge(options)
46
46
  service.create_token(userid, tokenid, token_hash)
47
47
  reload
48
48
  end
@@ -45,7 +45,7 @@ module Fog
45
45
  end
46
46
 
47
47
  def save(options = {})
48
- service.create_user((attributes.reject { |attribute| [:tokens].include? attribute }).merge(options))
48
+ service.create_user(attributes.reject { |attribute| [:tokens].include? attribute }.merge(options))
49
49
  reload
50
50
  end
51
51
 
@@ -22,8 +22,8 @@ module Fog
22
22
  # module String mixins
23
23
  module String
24
24
  def self.to_boolean(text)
25
- return true if text == true || text =~ (/(true|t|yes|y|1)$/i)
26
- return false if text == false || text.empty? || text =~ (/(false|f|no|n|0)$/i)
25
+ return true if text == true || text =~ /(true|t|yes|y|1)$/i
26
+ return false if text == false || text.empty? || text =~ /(false|f|no|n|0)$/i
27
27
 
28
28
  raise ArgumentError, "invalid value for Boolean: \"#{text}\""
29
29
  end
@@ -19,6 +19,6 @@
19
19
 
20
20
  module Fog
21
21
  module Proxmox
22
- VERSION = '0.15.1'
22
+ VERSION = '0.15.3'
23
23
  end
24
24
  end
@@ -39,7 +39,7 @@ http_interactions:
39
39
  recorded_at: Wed, 10 May 2023 11:52:43 GMT
40
40
  - request:
41
41
  method: get
42
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes
42
+ uri: https://192.168.56.101:8006/api2/json/nodes
43
43
  body:
44
44
  encoding: US-ASCII
45
45
  string: ''
@@ -76,7 +76,7 @@ http_interactions:
76
76
  recorded_at: Thu, 11 May 2023 13:03:10 GMT
77
77
  - request:
78
78
  method: get
79
- uri: https://proxmox-noris.corp.atix.de/api2/json/cluster/nextid
79
+ uri: https://192.168.56.101:8006/api2/json/cluster/nextid
80
80
  body:
81
81
  encoding: US-ASCII
82
82
  string: ''
@@ -113,7 +113,7 @@ http_interactions:
113
113
  recorded_at: Thu, 11 May 2023 13:03:10 GMT
114
114
  - request:
115
115
  method: get
116
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks
116
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks
117
117
  body:
118
118
  encoding: US-ASCII
119
119
  string: ''
@@ -155,7 +155,7 @@ http_interactions:
155
155
  recorded_at: Thu, 11 May 2023 13:03:10 GMT
156
156
  - request:
157
157
  method: get
158
- uri: https://proxmox-noris.corp.atix.de/api2/json/cluster/nextid?vmid=101
158
+ uri: https://192.168.56.101:8006/api2/json/cluster/nextid?vmid=101
159
159
  body:
160
160
  encoding: US-ASCII
161
161
  string: ''
@@ -192,7 +192,7 @@ http_interactions:
192
192
  recorded_at: Thu, 11 May 2023 13:03:10 GMT
193
193
  - request:
194
194
  method: post
195
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/qemu
195
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/qemu
196
196
  body:
197
197
  encoding: US-ASCII
198
198
  string: vmid=101
@@ -231,7 +231,7 @@ http_interactions:
231
231
  recorded_at: Thu, 11 May 2023 13:03:10 GMT
232
232
  - request:
233
233
  method: get
234
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE0:0022900B:645CE78E:qmcreate:101:root@pam:/status
234
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE0:0022900B:645CE78E:qmcreate:101:root@pam:/status
235
235
  body:
236
236
  encoding: US-ASCII
237
237
  string: ''
@@ -268,7 +268,7 @@ http_interactions:
268
268
  recorded_at: Thu, 11 May 2023 13:03:10 GMT
269
269
  - request:
270
270
  method: get
271
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE0:0022900B:645CE78E:qmcreate:101:root@pam:/log
271
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE0:0022900B:645CE78E:qmcreate:101:root@pam:/log
272
272
  body:
273
273
  encoding: US-ASCII
274
274
  string: ''
@@ -305,7 +305,7 @@ http_interactions:
305
305
  recorded_at: Thu, 11 May 2023 13:03:10 GMT
306
306
  - request:
307
307
  method: get
308
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE0:0022900B:645CE78E:qmcreate:101:root@pam:/status
308
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE0:0022900B:645CE78E:qmcreate:101:root@pam:/status
309
309
  body:
310
310
  encoding: US-ASCII
311
311
  string: ''
@@ -342,7 +342,7 @@ http_interactions:
342
342
  recorded_at: Thu, 11 May 2023 13:03:10 GMT
343
343
  - request:
344
344
  method: get
345
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE0:0022900B:645CE78E:qmcreate:101:root@pam:/log
345
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE0:0022900B:645CE78E:qmcreate:101:root@pam:/log
346
346
  body:
347
347
  encoding: US-ASCII
348
348
  string: ''
@@ -379,7 +379,7 @@ http_interactions:
379
379
  recorded_at: Thu, 11 May 2023 13:03:10 GMT
380
380
  - request:
381
381
  method: get
382
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/qemu/101/status/current
382
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/qemu/101/status/current
383
383
  body:
384
384
  encoding: US-ASCII
385
385
  string: ''
@@ -417,7 +417,7 @@ http_interactions:
417
417
  recorded_at: Thu, 11 May 2023 13:03:10 GMT
418
418
  - request:
419
419
  method: get
420
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/qemu/101/config
420
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/qemu/101/config
421
421
  body:
422
422
  encoding: US-ASCII
423
423
  string: ''
@@ -455,7 +455,7 @@ http_interactions:
455
455
  recorded_at: Thu, 11 May 2023 13:03:10 GMT
456
456
  - request:
457
457
  method: get
458
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks
458
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks
459
459
  body:
460
460
  encoding: US-ASCII
461
461
  string: ''
@@ -497,7 +497,7 @@ http_interactions:
497
497
  recorded_at: Thu, 11 May 2023 13:03:10 GMT
498
498
  - request:
499
499
  method: get
500
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/qemu/101/status/current
500
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/qemu/101/status/current
501
501
  body:
502
502
  encoding: US-ASCII
503
503
  string: ''
@@ -535,7 +535,7 @@ http_interactions:
535
535
  recorded_at: Thu, 11 May 2023 13:03:10 GMT
536
536
  - request:
537
537
  method: get
538
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/qemu/101/config
538
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/qemu/101/config
539
539
  body:
540
540
  encoding: US-ASCII
541
541
  string: ''
@@ -573,7 +573,7 @@ http_interactions:
573
573
  recorded_at: Thu, 11 May 2023 13:03:10 GMT
574
574
  - request:
575
575
  method: get
576
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks
576
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks
577
577
  body:
578
578
  encoding: US-ASCII
579
579
  string: ''
@@ -615,7 +615,7 @@ http_interactions:
615
615
  recorded_at: Thu, 11 May 2023 13:03:10 GMT
616
616
  - request:
617
617
  method: get
618
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks
618
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks
619
619
  body:
620
620
  encoding: US-ASCII
621
621
  string: ''
@@ -657,7 +657,7 @@ http_interactions:
657
657
  recorded_at: Thu, 11 May 2023 13:03:11 GMT
658
658
  - request:
659
659
  method: post
660
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/qemu/101/snapshot
660
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/qemu/101/snapshot
661
661
  body:
662
662
  encoding: US-ASCII
663
663
  string: snapname=snapshot1&vmstate=0
@@ -696,7 +696,7 @@ http_interactions:
696
696
  recorded_at: Thu, 11 May 2023 13:03:11 GMT
697
697
  - request:
698
698
  method: get
699
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE4:00229055:645CE78F:qmsnapshot:101:root@pam:/status
699
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE4:00229055:645CE78F:qmsnapshot:101:root@pam:/status
700
700
  body:
701
701
  encoding: US-ASCII
702
702
  string: ''
@@ -733,7 +733,7 @@ http_interactions:
733
733
  recorded_at: Thu, 11 May 2023 13:03:11 GMT
734
734
  - request:
735
735
  method: get
736
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE4:00229055:645CE78F:qmsnapshot:101:root@pam:/log
736
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE4:00229055:645CE78F:qmsnapshot:101:root@pam:/log
737
737
  body:
738
738
  encoding: US-ASCII
739
739
  string: ''
@@ -770,7 +770,7 @@ http_interactions:
770
770
  recorded_at: Thu, 11 May 2023 13:03:11 GMT
771
771
  - request:
772
772
  method: get
773
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE4:00229055:645CE78F:qmsnapshot:101:root@pam:/status
773
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE4:00229055:645CE78F:qmsnapshot:101:root@pam:/status
774
774
  body:
775
775
  encoding: US-ASCII
776
776
  string: ''
@@ -807,7 +807,7 @@ http_interactions:
807
807
  recorded_at: Thu, 11 May 2023 13:03:11 GMT
808
808
  - request:
809
809
  method: get
810
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE4:00229055:645CE78F:qmsnapshot:101:root@pam:/log
810
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE4:00229055:645CE78F:qmsnapshot:101:root@pam:/log
811
811
  body:
812
812
  encoding: US-ASCII
813
813
  string: ''
@@ -844,7 +844,7 @@ http_interactions:
844
844
  recorded_at: Thu, 11 May 2023 13:03:11 GMT
845
845
  - request:
846
846
  method: get
847
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/qemu/101/snapshot
847
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/qemu/101/snapshot
848
848
  body:
849
849
  encoding: US-ASCII
850
850
  string: ''
@@ -882,7 +882,7 @@ http_interactions:
882
882
  recorded_at: Thu, 11 May 2023 13:03:11 GMT
883
883
  - request:
884
884
  method: put
885
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/qemu/101/snapshot/snapshot1/config
885
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/qemu/101/snapshot/snapshot1/config
886
886
  body:
887
887
  encoding: US-ASCII
888
888
  string: description=Snapshot+1
@@ -921,7 +921,7 @@ http_interactions:
921
921
  recorded_at: Thu, 11 May 2023 13:03:11 GMT
922
922
  - request:
923
923
  method: get
924
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/qemu/101/snapshot
924
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/qemu/101/snapshot
925
925
  body:
926
926
  encoding: US-ASCII
927
927
  string: ''
@@ -959,7 +959,7 @@ http_interactions:
959
959
  recorded_at: Thu, 11 May 2023 13:03:11 GMT
960
960
  - request:
961
961
  method: get
962
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks
962
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks
963
963
  body:
964
964
  encoding: US-ASCII
965
965
  string: ''
@@ -1001,7 +1001,7 @@ http_interactions:
1001
1001
  recorded_at: Thu, 11 May 2023 13:03:11 GMT
1002
1002
  - request:
1003
1003
  method: delete
1004
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/qemu/101/snapshot/snapshot1?force=0
1004
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/qemu/101/snapshot/snapshot1?force=0
1005
1005
  body:
1006
1006
  encoding: US-ASCII
1007
1007
  string: ''
@@ -1040,7 +1040,7 @@ http_interactions:
1040
1040
  recorded_at: Thu, 11 May 2023 13:03:11 GMT
1041
1041
  - request:
1042
1042
  method: get
1043
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE5:00229093:645CE78F:qmdelsnapshot:101:root@pam:/status
1043
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE5:00229093:645CE78F:qmdelsnapshot:101:root@pam:/status
1044
1044
  body:
1045
1045
  encoding: US-ASCII
1046
1046
  string: ''
@@ -1077,7 +1077,7 @@ http_interactions:
1077
1077
  recorded_at: Thu, 11 May 2023 13:03:11 GMT
1078
1078
  - request:
1079
1079
  method: get
1080
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE5:00229093:645CE78F:qmdelsnapshot:101:root@pam:/log
1080
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE5:00229093:645CE78F:qmdelsnapshot:101:root@pam:/log
1081
1081
  body:
1082
1082
  encoding: US-ASCII
1083
1083
  string: ''
@@ -1114,7 +1114,7 @@ http_interactions:
1114
1114
  recorded_at: Thu, 11 May 2023 13:03:11 GMT
1115
1115
  - request:
1116
1116
  method: get
1117
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE5:00229093:645CE78F:qmdelsnapshot:101:root@pam:/status
1117
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE5:00229093:645CE78F:qmdelsnapshot:101:root@pam:/status
1118
1118
  body:
1119
1119
  encoding: US-ASCII
1120
1120
  string: ''
@@ -1151,7 +1151,7 @@ http_interactions:
1151
1151
  recorded_at: Thu, 11 May 2023 13:03:11 GMT
1152
1152
  - request:
1153
1153
  method: get
1154
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE5:00229093:645CE78F:qmdelsnapshot:101:root@pam:/log
1154
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE5:00229093:645CE78F:qmdelsnapshot:101:root@pam:/log
1155
1155
  body:
1156
1156
  encoding: US-ASCII
1157
1157
  string: ''
@@ -1188,7 +1188,7 @@ http_interactions:
1188
1188
  recorded_at: Thu, 11 May 2023 13:03:11 GMT
1189
1189
  - request:
1190
1190
  method: delete
1191
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/qemu/101
1191
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/qemu/101
1192
1192
  body:
1193
1193
  encoding: US-ASCII
1194
1194
  string: ''
@@ -1227,7 +1227,7 @@ http_interactions:
1227
1227
  recorded_at: Thu, 11 May 2023 13:03:12 GMT
1228
1228
  - request:
1229
1229
  method: get
1230
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE6:002290AF:645CE790:qmdestroy:101:root@pam:/status
1230
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE6:002290AF:645CE790:qmdestroy:101:root@pam:/status
1231
1231
  body:
1232
1232
  encoding: US-ASCII
1233
1233
  string: ''
@@ -1264,7 +1264,7 @@ http_interactions:
1264
1264
  recorded_at: Thu, 11 May 2023 13:03:12 GMT
1265
1265
  - request:
1266
1266
  method: get
1267
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE6:002290AF:645CE790:qmdestroy:101:root@pam:/log
1267
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE6:002290AF:645CE790:qmdestroy:101:root@pam:/log
1268
1268
  body:
1269
1269
  encoding: US-ASCII
1270
1270
  string: ''
@@ -1301,7 +1301,7 @@ http_interactions:
1301
1301
  recorded_at: Thu, 11 May 2023 13:03:12 GMT
1302
1302
  - request:
1303
1303
  method: get
1304
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE6:002290AF:645CE790:qmdestroy:101:root@pam:/status
1304
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE6:002290AF:645CE790:qmdestroy:101:root@pam:/status
1305
1305
  body:
1306
1306
  encoding: US-ASCII
1307
1307
  string: ''
@@ -1338,7 +1338,7 @@ http_interactions:
1338
1338
  recorded_at: Thu, 11 May 2023 13:03:12 GMT
1339
1339
  - request:
1340
1340
  method: get
1341
- uri: https://proxmox-noris.corp.atix.de/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE6:002290AF:645CE790:qmdestroy:101:root@pam:/log
1341
+ uri: https://192.168.56.101:8006/api2/json/nodes/proxmox-noris/tasks/UPID:proxmox-noris:00011DE6:002290AF:645CE790:qmdestroy:101:root@pam:/log
1342
1342
  body:
1343
1343
  encoding: US-ASCII
1344
1344
  string: ''
@@ -30,7 +30,7 @@ describe Fog::Proxmox::DiskHelper do
30
30
  end
31
31
 
32
32
  let(:scsi) do
33
- { scsi0: 'local-lvm:vm-100-disk-1,size=8,cache=none' }
33
+ { scsi0: 'local-lvm:vm-100-disk-1,size=8,cache=none', scsi1: 'zdata:vm-221-disk-0' }
34
34
  end
35
35
 
36
36
  let(:virtio1) do
@@ -118,6 +118,13 @@ describe Fog::Proxmox::DiskHelper do
118
118
  assert_equal('8', size)
119
119
  end
120
120
 
121
+ it 'returns scsi get zdata storage and volid with no size' do
122
+ storage, volid, size = Fog::Proxmox::DiskHelper.extract_storage_volid_size(scsi[:scsi1])
123
+ assert_equal('zdata', storage)
124
+ assert_equal('zdata:vm-221-disk-0', volid)
125
+ assert_nil size
126
+ end
127
+
121
128
  it 'returns virtio get local storage volid and size' do
122
129
  storage, volid, size = Fog::Proxmox::DiskHelper.extract_storage_volid_size(virtio[:virtio1])
123
130
  assert_equal('local', storage)
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2026 ATIX AG
4
+
5
+ # This file is part of Fog::Proxmox.
6
+
7
+ # Fog::Proxmox is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+
12
+ # Fog::Proxmox is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with Fog::Proxmox. If not, see <http://www.gnu.org/licenses/>.
19
+
20
+ require 'spec_helper'
21
+ require 'fog/proxmox/helpers/efidisk_helper'
22
+
23
+ describe Fog::Proxmox::EfidiskHelper do
24
+ let(:efidisk0_full) do
25
+ { id: 0, volid: 'local:110/vm-110-disk-0.qcow2,efitype=4m,size=528K,pre-enrolled-keys=1' }
26
+ end
27
+
28
+ let(:efidisk0_full_flatten) do
29
+ { id: 0, volid: 'local:110/vm-110-disk-0.qcow2', efitype: '4m', pre_enrolled_keys: '1', size: '528K' }
30
+ end
31
+
32
+ let(:efidisk0_min) do
33
+ { id: 0, volid: 'local:110/vm-110-disk-0.qcow2,size=528K' }
34
+ end
35
+
36
+ describe '#flatten' do
37
+ it 'returns full efidisk hash' do
38
+ efidisk = Fog::Proxmox::EfidiskHelper.flatten(efidisk0_full_flatten)
39
+ assert_equal(efidisk, { "efidisk0": efidisk0_full[:volid] })
40
+ end
41
+ end
42
+
43
+ describe '#extract' do
44
+ it 'returns full efidisk hash' do
45
+ efidisk = Fog::Proxmox::EfidiskHelper.extract(efidisk0_full[:volid])
46
+ assert_equal({
47
+ id: 0,
48
+ volid: 'local:110/vm-110-disk-0.qcow2',
49
+ storage: 'local',
50
+ efitype: '4m',
51
+ pre_enrolled_keys: '1',
52
+ size: '528K'
53
+ }, efidisk)
54
+ end
55
+
56
+ it 'returns full efidisk min' do
57
+ efidisk = Fog::Proxmox::EfidiskHelper.extract(efidisk0_min[:volid])
58
+ assert_equal({
59
+ id: 0,
60
+ volid: 'local:110/vm-110-disk-0.qcow2',
61
+ storage: 'local',
62
+ efitype: nil,
63
+ pre_enrolled_keys: nil,
64
+ size: '528K'
65
+ }, efidisk)
66
+ end
67
+ end
68
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fog-proxmox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.1
4
+ version: 0.15.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tristan Robert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-02-25 00:00:00.000000000 Z
11
+ date: 2026-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,62 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.6'
41
- - !ruby/object:Gem::Dependency
42
- name: debase
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: 0.2.2
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: 0.2.2
55
- - !ruby/object:Gem::Dependency
56
- name: debride
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '1.8'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '1.8'
69
- - !ruby/object:Gem::Dependency
70
- name: fasterer
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '0.3'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '0.3'
83
- - !ruby/object:Gem::Dependency
84
- name: fastri
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '0.3'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '0.3'
97
41
  - !ruby/object:Gem::Dependency
98
42
  name: minitest
99
43
  requirement: !ruby/object:Gem::Requirement
@@ -136,34 +80,6 @@ dependencies:
136
80
  - - "~>"
137
81
  - !ruby/object:Gem::Version
138
82
  version: '12.3'
139
- - !ruby/object:Gem::Dependency
140
- name: rcodetools
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: '0.3'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: '0.3'
153
- - !ruby/object:Gem::Dependency
154
- name: reek
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - "~>"
158
- - !ruby/object:Gem::Version
159
- version: '6.1'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - "~>"
165
- - !ruby/object:Gem::Version
166
- version: '6.1'
167
83
  - !ruby/object:Gem::Dependency
168
84
  name: rspec
169
85
  requirement: !ruby/object:Gem::Requirement
@@ -262,20 +178,6 @@ dependencies:
262
178
  - - "<"
263
179
  - !ruby/object:Gem::Version
264
180
  version: 2.29.0
265
- - !ruby/object:Gem::Dependency
266
- name: ruby-debug-ide
267
- requirement: !ruby/object:Gem::Requirement
268
- requirements:
269
- - - "~>"
270
- - !ruby/object:Gem::Version
271
- version: '0.6'
272
- type: :development
273
- prerelease: false
274
- version_requirements: !ruby/object:Gem::Requirement
275
- requirements:
276
- - - "~>"
277
- - !ruby/object:Gem::Version
278
- version: '0.6'
279
181
  - !ruby/object:Gem::Dependency
280
182
  name: simplecov
281
183
  requirement: !ruby/object:Gem::Requirement
@@ -370,6 +272,7 @@ files:
370
272
  - lib/fog/proxmox/compute.rb
371
273
  - lib/fog/proxmox/compute/models/disk.rb
372
274
  - lib/fog/proxmox/compute/models/disks.rb
275
+ - lib/fog/proxmox/compute/models/efidisk.rb
373
276
  - lib/fog/proxmox/compute/models/interface.rb
374
277
  - lib/fog/proxmox/compute/models/interfaces.rb
375
278
  - lib/fog/proxmox/compute/models/node.rb
@@ -428,6 +331,7 @@ files:
428
331
  - lib/fog/proxmox/helpers/controller_helper.rb
429
332
  - lib/fog/proxmox/helpers/cpu_helper.rb
430
333
  - lib/fog/proxmox/helpers/disk_helper.rb
334
+ - lib/fog/proxmox/helpers/efidisk_helper.rb
431
335
  - lib/fog/proxmox/helpers/ip_helper.rb
432
336
  - lib/fog/proxmox/helpers/nic_helper.rb
433
337
  - lib/fog/proxmox/identity.rb
@@ -529,6 +433,7 @@ files:
529
433
  - spec/helpers/controller_helper_spec.rb
530
434
  - spec/helpers/cpu_helper_spec.rb
531
435
  - spec/helpers/disk_helper_spec.rb
436
+ - spec/helpers/efidisk_helper_spec.rb
532
437
  - spec/helpers/ip_helper_spec.rb
533
438
  - spec/helpers/nic_helper_spec.rb
534
439
  - spec/identity_spec.rb