fog-proxmox 0.15.2 → 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: 76ca5dd7645b67a287e1f668a536de1fcf180f4d363ba2472e03ad33fc1a5194
4
- data.tar.gz: 551e55a53ce2c316be4134f45251539209e90b6a87ad207653b17754653cfebc
3
+ metadata.gz: 9484bef489394b238790e49ebd6e4ca8faa2a43606c6dfcc24298ce7590d7eb1
4
+ data.tar.gz: 66950f4f17d62d9e05803fad7c7dbc971b64791aed8dd1a86bf9f753ce76dbca
5
5
  SHA512:
6
- metadata.gz: 7263bb9be5064c515fa658f284afbd696251dde07e2b74d86d61c3f367c19f3b3894b3ff2392fa275f258e5c4b5b640a66808d7c59405038d16c560424eb72a1
7
- data.tar.gz: b6a10b77669b5782e2ec2d8e4ab8a7ea6bcdd7a6af10abf8a271008f3db9f896e4dad07506d570d022a817a5ce9f908b8c05f9b17634809cffd9e1b872780683
6
+ metadata.gz: 437671da2ce7a9dd745673b5679f07adf6c12fbc6cdf9c98a16fca89ce348e0c15c8d958edf475cad6bd7a2975b11e5a11ba05c35fb715efc17484ae3c40fa0b
7
+ data.tar.gz: d85e62d58878800e640b4af5b9960adc28a050cf49f79931ea4d3e68110074f757e6d5dce1212a5bf7c7a042863118b8b7af08baff951699801000b1fbd9ceea
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
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
+
3
10
  ## [0.15.2](https://github.com/fog/fog-proxmox/compare/v0.15.1...v0.15.2) (2025-08-06)
4
11
 
5
12
 
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
@@ -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
@@ -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
@@ -19,6 +19,6 @@
19
19
 
20
20
  module Fog
21
21
  module Proxmox
22
- VERSION = '0.15.2'
22
+ VERSION = '0.15.3'
23
23
  end
24
24
  end
@@ -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.2
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-08-06 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