fog-proxmox 0.8.1 → 0.8.2

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: 72c9c0184ad5eeb569e93c6c87efb86878b9dd1f9cf3b721366c29bd433a756a
4
- data.tar.gz: 99a1b6d7dc83eabb4ce9270bc8d059b24545de8ddecb4ecaf2b299ade4c1714b
3
+ metadata.gz: 3c327b80ae98f3f8868ad071d74ed181cc84817c049ad69fa244f7dea3fceb39
4
+ data.tar.gz: 748ec5a7786e00c3630a6efa54c4c0936a7ae93bb98b4160b45cad74233e0795
5
5
  SHA512:
6
- metadata.gz: '08a0bf25cec3bd9096edea232740dfc39552a1a89c0c4b63fb80392b96cb53fe601779faf956610d4107bf84093180c949c48ce868715135ab1aef0ca9bae49a'
7
- data.tar.gz: d073370e33a01afc0db3cb3d97309e7e30d914241bb61016a37fea371e9749d68213f64d188da46c15a91bcb69b8e0bbb666acc29dc9bd7fcc097d47a3f82819
6
+ metadata.gz: 9f13a62fb4343dfd8717e495452f6d5b628cf14ea757b961348e2447205baaa3db3e840347d7ce0af9c4c3119e571897e075f03dd96c9dfe23d51d1f3ef2e675
7
+ data.tar.gz: 8c4d8286d6cfed6839aedca88f9bca574c4983274ed4fade81a030eb243a0846a82ff5f725dc8ca4eca91e2331b477e62ee388f551ef067dd2ef128e84842cd4
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fog-proxmox (0.8.1)
4
+ fog-proxmox (0.8.2)
5
5
  fog-core (~> 2.1)
6
6
  fog-json (~> 1.2)
7
7
  ipaddress (~> 0.8)
data/README.md CHANGED
@@ -18,6 +18,7 @@ It is inspired by the great [fog-openstack](https://github.com/fog/fog-openstack
18
18
  |--|--|
19
19
  |<0.6|<5.3|
20
20
  |>=0.6|>=5.3|
21
+ |>=0.8|>=5.4|
21
22
 
22
23
  ## Installation
23
24
 
@@ -28,7 +28,7 @@ module Fog
28
28
  expects: [200],
29
29
  method: 'PUT',
30
30
  path: 'access/password',
31
- body: "userid=#{userid}&password=#{password}"
31
+ body: URI.encode_www_form(userid: userid, password: password)
32
32
  )
33
33
  end
34
34
  end
data/lib/fog/proxmox.rb CHANGED
@@ -47,6 +47,7 @@ module Fog
47
47
  attr_reader :credentials
48
48
  attr_reader :version
49
49
  attr_accessor :now # tests only
50
+ attr_accessor :ticket_lifetime # tests only
50
51
  end
51
52
 
52
53
  def self.clear_credentials
@@ -54,7 +55,7 @@ module Fog
54
55
  end
55
56
 
56
57
  def self.authenticate(options, connection_options = {})
57
- get_tokens(options, connection_options)
58
+ get_credentials(options, connection_options)
58
59
  self
59
60
  end
60
61
 
@@ -71,7 +72,7 @@ module Fog
71
72
  options[:pve_password] = ticket unless ticket
72
73
  end
73
74
 
74
- def self.get_tokens(options, connection_options = {})
75
+ def self.get_credentials(options, connection_options = {})
75
76
  username = options[:pve_username].to_s
76
77
  password = options[:pve_password].to_s
77
78
  url = options[:pve_url]
@@ -79,15 +80,15 @@ module Fog
79
80
  uri = URI.parse(url)
80
81
  @api_path = uri.path
81
82
  connection_options = connection_options.merge(path_prefix: @api_path)
82
- password = @credentials[:csrftoken] if credentials_has_expired?
83
- retrieve_tokens(uri, connection_options, username, password) unless authenticated? && !credentials_has_expired?
83
+ password = @credentials[:ticket] if credentials_has_expired?
84
+ request_credentials(uri, connection_options, username, password) unless authenticated? && !credentials_has_expired?
84
85
  end
85
86
 
86
- def self.retrieve_tokens(uri, connection_options, username, password)
87
+ def self.request_credentials(uri, connection_options, username, password)
87
88
  request = {
88
89
  expects: [200, 204],
89
90
  headers: { 'Accept' => 'application/json' },
90
- body: "username=#{username}&password=#{password}",
91
+ body: URI.encode_www_form(username: username, password: password),
91
92
  method: 'POST',
92
93
  path: 'access/ticket'
93
94
  }
@@ -102,10 +103,10 @@ module Fog
102
103
  username = data['username']
103
104
  csrftoken = data['CSRFPreventionToken']
104
105
  deadline = Time.at(@now.to_i + @ticket_lifetime)
105
- save_token(username, ticket, csrftoken, deadline)
106
+ save_credentials(username, ticket, csrftoken, deadline)
106
107
  end
107
108
 
108
- def self.save_token(username, ticket, csrftoken, deadline)
109
+ def self.save_credentials(username, ticket, csrftoken, deadline)
109
110
  @credentials = {
110
111
  username: username,
111
112
  ticket: ticket,
@@ -19,6 +19,6 @@
19
19
 
20
20
  module Fog
21
21
  module Proxmox
22
- VERSION = '0.8.1'
22
+ VERSION = '0.8.2'
23
23
  end
24
24
  end
data/spec/compute_spec.rb CHANGED
@@ -38,92 +38,92 @@ describe Fog::Proxmox::Compute do
38
38
  VCR.use_cassette('tasks') do
39
39
  # List all tasks
40
40
  filters = { limit: 1 }
41
- node_name = 'proxmox'
41
+ node_name = 'pve'
42
42
  node = @service.nodes.get node_name
43
43
  tasks = node.tasks.all(filters)
44
- tasks.wont_be_nil
45
- tasks.wont_be_empty
46
- tasks.size.must_equal 1
44
+ _(tasks).wont_be_nil
45
+ _(tasks).wont_be_empty
46
+ _(tasks.size).must_equal 1
47
47
  # Get task
48
48
  upid = tasks[0].upid
49
49
  task = node.tasks.get(upid)
50
- task.wont_be_nil
50
+ _(task).wont_be_nil
51
51
  # Stop task
52
52
  task.stop
53
53
  task.wait_for { finished? }
54
- task.finished?.must_equal true
54
+ _(task.finished?).must_equal true
55
55
  end
56
56
  end
57
57
 
58
58
  it 'Manage nodes' do
59
59
  VCR.use_cassette('nodes') do
60
60
  # Get node
61
- node_name = 'proxmox'
61
+ node_name = 'pve'
62
62
  node = @service.nodes.get node_name
63
63
  # Get statistics data
64
64
  data = node.statistics
65
- data.wont_be_nil
66
- data.wont_be_empty
65
+ _(data).wont_be_nil
66
+ _(data).wont_be_empty
67
67
  # Get statistics image
68
68
  data = node.statistics('rrd', { timeframe: 'hour', ds: 'cpu,memused', cf: 'AVERAGE' })
69
- data.wont_be_nil
70
- data['image'].wont_be_nil
69
+ _(data).wont_be_nil
70
+ _(data['image']).wont_be_nil
71
71
  end
72
72
  end
73
73
 
74
74
  it 'Manage storages' do
75
75
  VCR.use_cassette('storages') do
76
76
  # Get node
77
- node_name = 'proxmox'
77
+ node_name = 'pve'
78
78
  node = @service.nodes.get node_name
79
79
  # List all storages
80
80
  storages = node.storages.all
81
- storages.wont_be_nil
82
- storages.wont_be_empty
83
- storages.size.must_equal 2
81
+ _(storages).wont_be_nil
82
+ _(storages).wont_be_empty
83
+ _(storages.size).must_equal 2
84
84
  # List by content type
85
85
  storages = node.storages.list_by_content_type 'iso'
86
- storages.wont_be_nil
87
- storages.wont_be_empty
88
- storages.size.must_equal 1
86
+ _(storages).wont_be_nil
87
+ _(storages).wont_be_empty
88
+ _(storages.size).must_equal 1
89
89
  # Get storage
90
90
  storage = node.storages.get('local')
91
- storage.wont_be_nil
92
- storage.identity.must_equal 'local'
91
+ _(storage).wont_be_nil
92
+ _(storage.identity).must_equal 'local'
93
93
  end
94
94
  end
95
95
 
96
96
  it 'CRUD servers' do
97
97
  VCR.use_cassette('servers') do
98
- node_name = 'proxmox'
98
+ node_name = 'pve'
99
99
  node = @service.nodes.get node_name
100
100
  # Get next vmid
101
101
  vmid = node.servers.next_id
102
102
  server_hash = { vmid: vmid }
103
103
  # Check valid vmid
104
104
  valid = node.servers.id_valid? vmid
105
- valid.must_equal true
105
+ _(valid).must_equal true
106
106
  # Check not valid vmid
107
107
  valid = node.servers.id_valid? 99
108
- valid.must_equal false
108
+ _(valid).must_equal false
109
109
  # Create 1st time
110
110
  server = node.servers.create(server_hash)
111
111
  ok = server.persisted?
112
- ok.must_equal true
112
+ _(ok).must_equal true
113
113
  # Check already used vmid
114
114
  valid = node.servers.id_valid? vmid
115
- valid.must_equal false
115
+ _(valid).must_equal false
116
116
  # Clone server
117
117
  newid = node.servers.next_id
118
118
  # Get server
119
119
  server = node.servers.get vmid
120
- server.wont_be_nil
120
+ _(server).wont_be_nil
121
121
  # Backup it
122
122
  server.backup(compress: 'lzo')
123
123
  # Get this backup image
124
124
  # Find available backup volumes
125
125
  volume = server.backups.first
126
- volume.wont_be_nil
126
+ _(volume).wont_be_nil
127
127
  # Restore it
128
128
  server.restore(volume, storage: 'local')
129
129
  # Delete it
@@ -148,16 +148,16 @@ describe Fog::Proxmox::Compute do
148
148
  clone.create_template
149
149
  # Get clone disk image
150
150
  image = clone.images.first
151
- image.wont_be_nil
151
+ _(image).wont_be_nil
152
152
  # Delete clone
153
153
  clone.destroy
154
- proc do
154
+ _(proc do
155
155
  clone = node.servers.get newid
156
- end.must_raise Fog::Errors::NotFound
156
+ end).must_raise Fog::Errors::NotFound
157
157
  # Create 2nd time must fails
158
- proc do
158
+ _(proc do
159
159
  node.servers.create server_hash
160
- end.must_raise Excon::Errors::InternalServerError
160
+ end).must_raise Excon::Errors::InternalServerError
161
161
  # Update config server
162
162
  # Add empty cdrom
163
163
  config_hash = { ide2: 'none,media=cdrom' }
@@ -175,109 +175,109 @@ describe Fog::Proxmox::Compute do
175
175
  server.update(config_hash)
176
176
  # server config
177
177
  config = server.config
178
- config.identity.must_equal vmid
178
+ _(config.identity).must_equal vmid
179
179
  disks = server.config.disks
180
180
  interfaces = server.config.interfaces
181
- interfaces.wont_be_nil
182
- interfaces.wont_be_empty
181
+ _(interfaces).wont_be_nil
182
+ _(interfaces).wont_be_empty
183
183
  net0 = interfaces.get('net0')
184
- net0.wont_be_nil
185
- disks.wont_be_nil
186
- disks.wont_be_empty
184
+ _(net0).wont_be_nil
185
+ _(disks).wont_be_nil
186
+ _(disks).wont_be_empty
187
187
  virtio0 = disks.get('virtio0')
188
- virtio0.wont_be_nil
188
+ _(virtio0).wont_be_nil
189
189
  ide2 = disks.get('ide2')
190
- ide2.wont_be_nil
190
+ _(ide2).wont_be_nil
191
191
  # Get a mac adress
192
192
  mac_address = server.config.mac_addresses.first
193
- mac_address.wont_be_nil
193
+ _(mac_address).wont_be_nil
194
194
  # all servers
195
195
  servers_all = node.servers.all
196
- servers_all.wont_be_empty
197
- servers_all.must_include server
196
+ _(servers_all).wont_be_empty
197
+ _(servers_all).must_include server
198
198
  # server not running exception
199
- proc do
199
+ _(proc do
200
200
  server.start_console(websocket: 1)
201
- end.must_raise Fog::Proxmox::Errors::ServiceError
201
+ end).must_raise Fog::Proxmox::Errors::ServiceError
202
202
  # Start server
203
203
  server.action('start')
204
204
  server.wait_for { ready? }
205
205
  status = server.ready?
206
- status.must_equal true
206
+ _(status).must_equal true
207
207
  # server vga not set exception
208
- proc do
208
+ _(proc do
209
209
  server.start_console(websocket: 1)
210
- end.must_raise Fog::Proxmox::Errors::ServiceError
210
+ end).must_raise Fog::Proxmox::Errors::ServiceError
211
211
  # Stop server
212
212
  server.action('stop')
213
213
  server.wait_for { server.status == 'stopped' }
214
214
  status = server.status
215
- status.must_equal 'stopped'
215
+ _(status).must_equal 'stopped'
216
216
  server.update(vga: 'std')
217
217
  # Start server
218
218
  server.action('start')
219
219
  server.wait_for { ready? }
220
220
  status = server.ready?
221
- status.must_equal true
221
+ _(status).must_equal true
222
222
  vnc = server.start_console(websocket: 1)
223
- vnc['cert'].wont_be_nil
223
+ _(vnc['cert']).wont_be_nil
224
224
  port = server.connect_vnc(vnc)
225
- port.wont_be_nil
225
+ _(port).wont_be_nil
226
226
  # Stop server
227
227
  server.action('stop')
228
228
  server.wait_for { server.status == 'stopped' }
229
229
  status = server.status
230
- status.must_equal 'stopped'
230
+ _(status).must_equal 'stopped'
231
231
  server.update(serial0: 'socket', vga: 'serial0')
232
232
  # Start server
233
233
  server.action('start')
234
234
  server.wait_for { ready? }
235
235
  status = server.ready?
236
- status.must_equal true
236
+ _(status).must_equal true
237
237
  term = server.start_console
238
- term['ticket'].wont_be_nil
238
+ _(term['ticket']).wont_be_nil
239
239
  # Stop server
240
240
  server.action('stop')
241
241
  server.wait_for { server.status == 'stopped' }
242
242
  status = server.status
243
- status.must_equal 'stopped'
243
+ _(status).must_equal 'stopped'
244
244
  server.update(vga: 'qxl')
245
245
  # Start server
246
246
  server.action('start')
247
247
  server.wait_for { ready? }
248
248
  status = server.ready?
249
- status.must_equal true
249
+ _(status).must_equal true
250
250
  spice = server.start_console
251
- spice['password'].wont_be_nil
251
+ _(spice['password']).wont_be_nil
252
252
  # Suspend server
253
253
  server.action('suspend')
254
254
  server.wait_for { server.qmpstatus == 'paused' }
255
255
  qmpstatus = server.qmpstatus
256
- qmpstatus.must_equal 'paused'
256
+ _(qmpstatus).must_equal 'paused'
257
257
  # Resume server
258
258
  server.action('resume')
259
259
  server.wait_for { ready? }
260
260
  status = server.ready?
261
- status.must_equal true
261
+ _(status).must_equal true
262
262
  # Stop server
263
263
  server.action('stop')
264
264
  server.wait_for { server.status == 'stopped' }
265
265
  status = server.status
266
- status.must_equal 'stopped'
267
- proc do
266
+ _(status).must_equal 'stopped'
267
+ _(proc do
268
268
  server.action('hello')
269
- end.must_raise Fog::Errors::Error
269
+ end).must_raise Fog::Errors::Error
270
270
  # Delete
271
271
  server.destroy
272
- proc do
272
+ _(proc do
273
273
  node.servers.get vmid
274
- end.must_raise Fog::Errors::NotFound
274
+ end).must_raise Fog::Errors::NotFound
275
275
  end
276
276
  end
277
277
 
278
278
  it 'CRUD snapshots' do
279
279
  VCR.use_cassette('snapshots') do
280
- node_name = 'proxmox'
280
+ node_name = 'pve'
281
281
  node = @service.nodes.get node_name
282
282
  vmid = node.servers.next_id
283
283
  server_hash = { vmid: vmid }
@@ -289,15 +289,15 @@ describe Fog::Proxmox::Compute do
289
289
  server.snapshots.create(snapshot_hash)
290
290
  # Find by id
291
291
  snapshot = server.snapshots.get snapname
292
- snapshot.wont_be_nil
292
+ _(snapshot).wont_be_nil
293
293
  # Update
294
294
  snapshot.description = 'Snapshot 1'
295
295
  snapshot.update
296
296
  # all snapshots
297
297
  snapshots_all = server.snapshots.all
298
- snapshots_all.wont_be_nil
299
- snapshots_all.wont_be_empty
300
- snapshots_all.must_include snapshot
298
+ _(snapshots_all).wont_be_nil
299
+ _(snapshots_all).wont_be_empty
300
+ _(snapshots_all).must_include snapshot
301
301
  # Delete
302
302
  snapshot.destroy
303
303
  server.destroy
@@ -306,44 +306,44 @@ describe Fog::Proxmox::Compute do
306
306
 
307
307
  it 'CRUD containers' do
308
308
  VCR.use_cassette('containers') do
309
- node_name = 'proxmox'
309
+ node_name = 'pve'
310
310
  node = @service.nodes.get node_name
311
- node.wont_be_nil
311
+ _(node).wont_be_nil
312
312
  # Get next vmid
313
313
  vmid = node.containers.next_id
314
314
  ostemplate = 'local:vztmpl/alpine-3.8-default_20180913_amd64.tar.xz'
315
315
  container_hash = { ostemplate: ostemplate, storage: 'local-lvm', password: 'proxmox01', rootfs: 'local-lvm:1' }
316
316
  # Check valid vmid
317
317
  valid = node.containers.id_valid? vmid
318
- valid.must_equal true
318
+ _(valid).must_equal true
319
319
  # Check not valid vmid
320
320
  valid = node.containers.id_valid? 99
321
- valid.must_equal false
321
+ _(valid).must_equal false
322
322
  # Create 1st time
323
323
  node.containers.create(container_hash.merge(vmid: vmid))
324
324
  # Check already used vmid
325
325
  valid = node.containers.id_valid? vmid
326
- valid.must_equal false
326
+ _(valid).must_equal false
327
327
  # Clone container
328
328
  newid = node.containers.next_id
329
329
  # Get container
330
330
  container = node.containers.get vmid
331
- container.wont_be_nil
331
+ _(container).wont_be_nil
332
332
  rootfs_a = container.config.disks.select { |disk| disk.rootfs? }
333
- rootfs_a.wont_be_empty
333
+ _(rootfs_a).wont_be_empty
334
334
  rootfs = rootfs_a.first
335
- rootfs.wont_be_nil
335
+ _(rootfs).wont_be_nil
336
336
  # Backup it
337
337
  container.backup(compress: 'lzo')
338
338
  # Get this backup image
339
339
  # Find available backup volumes
340
340
  backup = container.backups.first
341
- container.wont_be_nil
341
+ _(container).wont_be_nil
342
342
  # Restore it
343
343
  container.restore(backup, storage: 'local-lvm')
344
344
  # Delete it
345
345
  backup.destroy
346
- container.backups.must_be_empty
346
+ _(container.backups).must_be_empty
347
347
  # Add mount points
348
348
  # Find available storages with images
349
349
  storages = node.storages.list_by_content_type 'images'
@@ -353,8 +353,8 @@ describe Fog::Proxmox::Compute do
353
353
  container.attach(mp0, options)
354
354
  # Fetch mount points
355
355
  mount_points = container.config.disks.select { |disk| disk.mount_point? }
356
- mount_points.wont_be_empty
357
- mount_points.get('mp0').wont_be_nil
356
+ _(mount_points).wont_be_empty
357
+ _(mount_points.get('mp0')).wont_be_nil
358
358
  # Remove mount points
359
359
  container.detach('mp0')
360
360
  container.detach('unused0')
@@ -367,16 +367,16 @@ describe Fog::Proxmox::Compute do
367
367
  clone.template
368
368
  # Get clone disk image
369
369
  image = clone.images.first
370
- image.wont_be_nil
370
+ _(image).wont_be_nil
371
371
  # Delete clone
372
372
  clone.destroy
373
- proc do
373
+ _(proc do
374
374
  node.containers.get newid
375
- end.must_raise Fog::Errors::NotFound
375
+ end).must_raise Fog::Errors::NotFound
376
376
  # Create 2nd time must fails
377
- proc do
377
+ _(proc do
378
378
  node.containers.create(container_hash.merge(vmid: vmid))
379
- end.must_raise Excon::Errors::InternalServerError
379
+ end).must_raise Excon::Errors::InternalServerError
380
380
  # Update config container
381
381
  # Resize rootfs container
382
382
  container.extend('rootfs', '+5M')
@@ -391,56 +391,56 @@ describe Fog::Proxmox::Compute do
391
391
  container.update(config_hash)
392
392
  # get container config
393
393
  config = container.config
394
- config.wont_be_nil
395
- config.identity.must_equal vmid
394
+ _(config).wont_be_nil
395
+ _(config.identity).must_equal vmid
396
396
  # Fetch nics
397
397
  interfaces = container.config.interfaces
398
- interfaces.wont_be_empty
399
- interfaces.get('net0').wont_be_nil
398
+ _(interfaces).wont_be_empty
399
+ _(interfaces.get('net0')).wont_be_nil
400
400
  # Get a mac address
401
401
  mac_address = container.config.mac_addresses.first
402
- mac_address.wont_be_nil
402
+ _(mac_address).wont_be_nil
403
403
  # all containers
404
404
  containers_all = node.containers.all
405
- containers_all.wont_be_nil
406
- containers_all.wont_be_empty
407
- containers_all.first.vmid.must_equal container.vmid.to_s
405
+ _(containers_all).wont_be_nil
406
+ _(containers_all).wont_be_empty
407
+ _(containers_all.first.vmid).must_equal container.vmid.to_s
408
408
  # Start container
409
409
  container.action('start')
410
410
  container.wait_for { ready? }
411
411
  status = container.ready?
412
- status.must_equal true
412
+ _(status).must_equal true
413
413
  # Start console
414
- proc do
414
+ _(proc do
415
415
  container.start_console
416
- end.must_raise Fog::Errors::Error
416
+ end).must_raise Fog::Errors::Error
417
417
  spice = container.start_console(console: 'spice')
418
- spice['password'].wont_be_nil
418
+ _(spice['password']).wont_be_nil
419
419
  # Suspend container (: command 'lxc-checkpoint -n 100 -s -D /var/lib/vz/dump' failed: exit code 1)
420
420
  # container.action('suspend')
421
421
  # container.wait_for { container.qmpstatus == 'paused' }
422
422
  # qmpstatus = container.qmpstatus
423
- # qmpstatus.must_equal 'paused'
423
+ # _(qmpstatus).must_equal 'paused'
424
424
  # Resume server
425
425
  # container.action('resume')
426
426
  # container.wait_for { ready? }
427
427
  # status = container.ready?
428
- # status.must_equal true
428
+ # _(status).must_equal true
429
429
  # Stop container
430
430
  container.action('stop')
431
431
  container.wait_for { container.status == 'stopped' }
432
432
  status = container.status
433
- status.must_equal 'stopped'
434
- proc do
433
+ _(status).must_equal 'stopped'
434
+ _(proc do
435
435
  container.action('hello')
436
- end.must_raise Fog::Errors::Error
436
+ end).must_raise Fog::Errors::Error
437
437
  # Delete
438
438
  container.destroy
439
439
  # Delete container does not delete images
440
440
  storage.volumes.each(&:destroy)
441
- proc do
441
+ _(proc do
442
442
  node.containers.get vmid
443
- end.must_raise Fog::Errors::NotFound
443
+ end).must_raise Fog::Errors::NotFound
444
444
  end
445
445
  end
446
446
  end