fog-libvirt 0.9.0 → 0.10.0
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 +4 -4
- data/README.md +54 -0
- data/fog-libvirt.gemspec +1 -1
- data/lib/fog/libvirt/models/compute/server.rb +11 -9
- data/lib/fog/libvirt/models/compute/templates/volume.xml.erb +4 -0
- data/lib/fog/libvirt/requests/compute/list_domains.rb +1 -1
- data/lib/fog/libvirt/requests/compute/list_networks.rb +12 -2
- data/lib/fog/libvirt/requests/compute/list_pools.rb +12 -9
- data/lib/fog/libvirt/requests/compute/vm_action.rb +3 -3
- data/lib/fog/libvirt/version.rb +1 -1
- data/tests/libvirt/requests/compute/list_pools_tests.rb +71 -0
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7115a1bb2c554de544d464049d48c6a15f2b39499a729180ab0e37bab55d3f3
|
4
|
+
data.tar.gz: c38e323849b149376f72edacd821788aa9df923d7bd4ca334dd0792a1ade5fab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc0dd759cec37c6e89557dec04bc05a679150183474cf589509cf0a36d51a129bcfd521b0ecbb2682b8eb76ef1d2bd25f81bff8e3117ba35961fd8d8f2d1a285
|
7
|
+
data.tar.gz: f7f1661e4e48a4fdaa68475ca34eb6f35bd346981891ea7cdb49a4b05d236b2886bf125ffb51ec2538277d3b7fe7584f3338eea30e0c4011a4712290d7370533
|
data/README.md
CHANGED
@@ -18,6 +18,60 @@ $ sudo gem install fog-libvirt
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
+
Example REPL session:
|
22
|
+
|
23
|
+
```
|
24
|
+
>> require "fog/libvirt"
|
25
|
+
=> true
|
26
|
+
>> compute = Fog::Compute.new(provider: :libvirt, libvirt_uri: "qemu:///session")
|
27
|
+
=> #<Fog::Libvirt::Compute::Real:46980 @uri=#<Fog::Libvirt::Util::URI:0x0000000002def920 @parsed_uri=#<URI::Generic qemu:/session>, @uri="qemu:///session"...
|
28
|
+
>> server = compute.servers.create(name: "test")
|
29
|
+
=>
|
30
|
+
<Fog::Libvirt::Compute::Server
|
31
|
+
id="bbb663e4-723b-4165-bc29-c77b54b12bca",
|
32
|
+
cpus=1,
|
33
|
+
cputime=0,
|
34
|
+
os_type="hvm",
|
35
|
+
memory_size=262144,
|
36
|
+
max_memory_size=262144,
|
37
|
+
name="test",
|
38
|
+
arch="x86_64",
|
39
|
+
persistent=true,
|
40
|
+
domain_type="kvm",
|
41
|
+
uuid="bbb663e4-723b-4165-bc29-c77b54b12bca",
|
42
|
+
autostart=false,
|
43
|
+
nics=[ <Fog::Libvirt::Compute::Nic
|
44
|
+
mac="52:54:00:d1:18:23",
|
45
|
+
id=nil,
|
46
|
+
type="network",
|
47
|
+
network="default",
|
48
|
+
bridge=nil,
|
49
|
+
model="virtio"
|
50
|
+
>],
|
51
|
+
volumes=[ <Fog::Libvirt::Compute::Volume
|
52
|
+
id=nil,
|
53
|
+
pool_name="1Download",
|
54
|
+
key=nil,
|
55
|
+
name="test.img",
|
56
|
+
path="/home/lzap/1Download/test.img",
|
57
|
+
capacity="10G",
|
58
|
+
allocation="1G",
|
59
|
+
owner=nil,
|
60
|
+
group=nil,
|
61
|
+
format_type="raw",
|
62
|
+
backing_volume=nil
|
63
|
+
>],
|
64
|
+
active=false,
|
65
|
+
boot_order=["hd", "cdrom", "network"],
|
66
|
+
display={:type=>"vnc", :port=>"-1", :listen=>"127.0.0.1"},
|
67
|
+
cpu={},
|
68
|
+
hugepages=false,
|
69
|
+
guest_agent=true,
|
70
|
+
virtio_rng={},
|
71
|
+
state="shutoff"
|
72
|
+
>
|
73
|
+
```
|
74
|
+
|
21
75
|
See [README.md](https://github.com/fog/fog-libvirt/blob/master/lib/fog/libvirt/models/compute/README.md).
|
22
76
|
|
23
77
|
## Contributing
|
data/fog-libvirt.gemspec
CHANGED
@@ -40,7 +40,7 @@ Gem::Specification.new do |s|
|
|
40
40
|
s.add_development_dependency("shindo", "~> 0.3.4")
|
41
41
|
s.add_development_dependency("simplecov")
|
42
42
|
s.add_development_dependency("yard")
|
43
|
-
s.add_development_dependency("mocha", "~> 1.
|
43
|
+
s.add_development_dependency("mocha", "~> 1.15.0")
|
44
44
|
|
45
45
|
# Let's not ship dot files and gemfiles
|
46
46
|
git_files = `git ls-files`.split("\n")
|
@@ -90,9 +90,13 @@ module Fog
|
|
90
90
|
volumes.first.path if volumes and volumes.first
|
91
91
|
end
|
92
92
|
|
93
|
-
def destroy(options={ :destroy_volumes => false})
|
93
|
+
def destroy(options={ :destroy_volumes => false, :flags => 0 })
|
94
94
|
poweroff unless stopped?
|
95
|
-
|
95
|
+
if options[:flags].zero?
|
96
|
+
service.vm_action(uuid, :undefine)
|
97
|
+
else
|
98
|
+
service.vm_action(uuid, :undefine, options[:flags])
|
99
|
+
end
|
96
100
|
volumes.each { |vol| vol.destroy } if options[:destroy_volumes]
|
97
101
|
true
|
98
102
|
end
|
@@ -407,13 +411,11 @@ module Fog
|
|
407
411
|
ip_address = nil
|
408
412
|
nic = self.nics.find {|nic| nic.mac==mac}
|
409
413
|
if !nic.nil?
|
410
|
-
service.networks.all
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
break
|
416
|
-
end
|
414
|
+
net = service.networks.all(:name => nic.network).first
|
415
|
+
if !net.nil?
|
416
|
+
leases = net.dhcp_leases(mac, 0)
|
417
|
+
# Assume the lease expiring last is the current IP address
|
418
|
+
ip_address = leases.sort_by { |lse| lse["expirytime"] }.last["ipaddr"] if !leases.empty?
|
417
419
|
end
|
418
420
|
end
|
419
421
|
|
@@ -20,8 +20,12 @@
|
|
20
20
|
<path><%= backing_volume.path %></path>
|
21
21
|
<format type="<%= backing_volume.format_type %>"/>
|
22
22
|
<permissions>
|
23
|
+
<% if owner -%>
|
23
24
|
<owner><%= owner %></owner>
|
25
|
+
<% end -%>
|
26
|
+
<% if group -%>
|
24
27
|
<group><%= group %></group>
|
28
|
+
<% end -%>
|
25
29
|
<mode>0744</mode>
|
26
30
|
<label>virt_image_t</label>
|
27
31
|
</permissions>
|
@@ -44,8 +44,8 @@ module Fog
|
|
44
44
|
end
|
45
45
|
|
46
46
|
class Mock
|
47
|
-
def list_networks(
|
48
|
-
[ {
|
47
|
+
def list_networks(filter={ })
|
48
|
+
networks = [ {
|
49
49
|
:uuid => 'a29146ea-39b2-412d-8f53-239eef117a32',
|
50
50
|
:name => 'net1',
|
51
51
|
:bridge_name => 'virbr0'
|
@@ -56,6 +56,16 @@ module Fog
|
|
56
56
|
:bridge_name => 'virbr1'
|
57
57
|
}
|
58
58
|
]
|
59
|
+
return networks if filter.empty?
|
60
|
+
|
61
|
+
case filter.keys.first
|
62
|
+
when :uuid
|
63
|
+
[networks.find(:uuid => filter[:uuid]).first]
|
64
|
+
when :name
|
65
|
+
[networks.find(:name => filter[:name]).first]
|
66
|
+
else
|
67
|
+
networks
|
68
|
+
end
|
59
69
|
end
|
60
70
|
end
|
61
71
|
end
|
@@ -5,19 +5,22 @@ module Fog
|
|
5
5
|
def list_pools(filter = { })
|
6
6
|
data=[]
|
7
7
|
if filter.key?(:name)
|
8
|
-
data << find_pool_by_name(filter[:name])
|
8
|
+
data << find_pool_by_name(filter[:name], filter[:include_inactive])
|
9
9
|
elsif filter.key?(:uuid)
|
10
|
-
data << find_pool_by_uuid(filter[:uuid])
|
10
|
+
data << find_pool_by_uuid(filter[:uuid], filter[:include_inactive])
|
11
11
|
else
|
12
12
|
(client.list_storage_pools + client.list_defined_storage_pools).each do |name|
|
13
|
-
data << find_pool_by_name(name)
|
13
|
+
data << find_pool_by_name(name, filter[:include_inactive])
|
14
14
|
end
|
15
15
|
end
|
16
16
|
data.compact
|
17
17
|
end
|
18
18
|
|
19
19
|
private
|
20
|
-
|
20
|
+
|
21
|
+
private_class_method def self.pool_to_attributes(pool, include_inactive = nil)
|
22
|
+
return nil unless pool.active? || include_inactive
|
23
|
+
|
21
24
|
states=[:inactive, :building, :running, :degrated, :inaccessible]
|
22
25
|
{
|
23
26
|
:uuid => pool.uuid,
|
@@ -27,19 +30,19 @@ module Fog
|
|
27
30
|
:name => pool.name,
|
28
31
|
:allocation => pool.info.allocation,
|
29
32
|
:capacity => pool.info.capacity,
|
30
|
-
:num_of_volumes => pool.num_of_volumes,
|
33
|
+
:num_of_volumes => pool.active? ? pool.num_of_volumes : nil,
|
31
34
|
:state => states[pool.info.state]
|
32
35
|
}
|
33
36
|
end
|
34
37
|
|
35
|
-
def find_pool_by_name name
|
36
|
-
pool_to_attributes(client.lookup_storage_pool_by_name(name))
|
38
|
+
def find_pool_by_name name, include_inactive
|
39
|
+
pool_to_attributes(client.lookup_storage_pool_by_name(name), include_inactive)
|
37
40
|
rescue ::Libvirt::RetrieveError
|
38
41
|
nil
|
39
42
|
end
|
40
43
|
|
41
|
-
def find_pool_by_uuid uuid
|
42
|
-
pool_to_attributes(client.lookup_storage_pool_by_uuid(uuid))
|
44
|
+
def find_pool_by_uuid uuid, include_inactive
|
45
|
+
pool_to_attributes(client.lookup_storage_pool_by_uuid(uuid), include_inactive)
|
43
46
|
rescue ::Libvirt::RetrieveError
|
44
47
|
nil
|
45
48
|
end
|
@@ -2,15 +2,15 @@ module Fog
|
|
2
2
|
module Libvirt
|
3
3
|
class Compute
|
4
4
|
class Real
|
5
|
-
def vm_action(uuid, action)
|
5
|
+
def vm_action(uuid, action, *params)
|
6
6
|
domain = client.lookup_domain_by_uuid(uuid)
|
7
|
-
domain.send(action)
|
7
|
+
domain.send(action, *params)
|
8
8
|
true
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
12
|
class Mock
|
13
|
-
def vm_action(uuid, action)
|
13
|
+
def vm_action(uuid, action, *params)
|
14
14
|
true
|
15
15
|
end
|
16
16
|
end
|
data/lib/fog/libvirt/version.rb
CHANGED
@@ -0,0 +1,71 @@
|
|
1
|
+
class FakePool < Fog::Model
|
2
|
+
# Fake pool object to allow exercising the internal parsing of pools
|
3
|
+
# returned by the client queries
|
4
|
+
identity :uuid
|
5
|
+
|
6
|
+
attribute :persistent
|
7
|
+
attribute :autostart
|
8
|
+
attribute :active
|
9
|
+
attribute :name
|
10
|
+
attribute :num_of_volumes
|
11
|
+
attr_reader :info
|
12
|
+
|
13
|
+
class FakeInfo < Fog::Model
|
14
|
+
attribute :allocation
|
15
|
+
attribute :capacity
|
16
|
+
attribute :state
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize(attributes = {})
|
20
|
+
@info = FakeInfo.new(attributes.dup.delete(:info))
|
21
|
+
super(attributes)
|
22
|
+
end
|
23
|
+
|
24
|
+
def active?
|
25
|
+
active
|
26
|
+
end
|
27
|
+
|
28
|
+
def autostart?
|
29
|
+
autostart
|
30
|
+
end
|
31
|
+
|
32
|
+
def persistent?
|
33
|
+
persistent
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
Shindo.tests("Fog::Compute[:libvirt] | list_pools request", 'libvirt') do
|
38
|
+
|
39
|
+
compute = Fog::Compute[:libvirt]
|
40
|
+
|
41
|
+
tests("Lists Pools") do
|
42
|
+
response = compute.list_pools
|
43
|
+
test("should be an array") { response.kind_of? Array }
|
44
|
+
test("should have two pools") { response.length == 2 }
|
45
|
+
end
|
46
|
+
|
47
|
+
tests("Handle Inactive Pools") do
|
48
|
+
inactive_pool = {
|
49
|
+
:uuid => 'pool.uuid',
|
50
|
+
:persistent => true,
|
51
|
+
:autostart => true,
|
52
|
+
:active => false,
|
53
|
+
:name => 'inactive_pool1',
|
54
|
+
:info => {
|
55
|
+
:allocation => 123456789,
|
56
|
+
:capacity => 123456789,
|
57
|
+
:state => 2 # running
|
58
|
+
},
|
59
|
+
:num_of_volumes => 3
|
60
|
+
}
|
61
|
+
|
62
|
+
response = ::Fog::Libvirt::Compute::Real.send(:pool_to_attributes, FakePool.new(inactive_pool), true)
|
63
|
+
|
64
|
+
test("should be hash of attributes") { response.kind_of? Hash }
|
65
|
+
|
66
|
+
response = ::Fog::Libvirt::Compute::Real.send(:pool_to_attributes, FakePool.new(inactive_pool))
|
67
|
+
|
68
|
+
test("should be nil") { response.nil? }
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fog-libvirt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- geemus (Wesley Beary)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fog-core
|
@@ -212,14 +212,14 @@ dependencies:
|
|
212
212
|
requirements:
|
213
213
|
- - "~>"
|
214
214
|
- !ruby/object:Gem::Version
|
215
|
-
version: 1.
|
215
|
+
version: 1.15.0
|
216
216
|
type: :development
|
217
217
|
prerelease: false
|
218
218
|
version_requirements: !ruby/object:Gem::Requirement
|
219
219
|
requirements:
|
220
220
|
- - "~>"
|
221
221
|
- !ruby/object:Gem::Version
|
222
|
-
version: 1.
|
222
|
+
version: 1.15.0
|
223
223
|
description: This library can be used as a module for 'fog' or as standalone libvirt
|
224
224
|
provider.
|
225
225
|
email: geemus@gmail.com
|
@@ -306,6 +306,7 @@ files:
|
|
306
306
|
- tests/libvirt/requests/compute/create_domain_tests.rb
|
307
307
|
- tests/libvirt/requests/compute/define_domain_tests.rb
|
308
308
|
- tests/libvirt/requests/compute/dhcp_leases_tests.rb
|
309
|
+
- tests/libvirt/requests/compute/list_pools_tests.rb
|
309
310
|
- tests/libvirt/requests/compute/update_autostart_tests.rb
|
310
311
|
- tests/libvirt/requests/compute/update_display.rb
|
311
312
|
homepage: http://github.com/fog/fog-libvirt
|
@@ -328,7 +329,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
328
329
|
- !ruby/object:Gem::Version
|
329
330
|
version: '0'
|
330
331
|
requirements: []
|
331
|
-
rubygems_version: 3.
|
332
|
+
rubygems_version: 3.3.7
|
332
333
|
signing_key:
|
333
334
|
specification_version: 2
|
334
335
|
summary: Module for the 'fog' gem to support libvirt
|
@@ -354,5 +355,6 @@ test_files:
|
|
354
355
|
- tests/libvirt/requests/compute/create_domain_tests.rb
|
355
356
|
- tests/libvirt/requests/compute/define_domain_tests.rb
|
356
357
|
- tests/libvirt/requests/compute/dhcp_leases_tests.rb
|
358
|
+
- tests/libvirt/requests/compute/list_pools_tests.rb
|
357
359
|
- tests/libvirt/requests/compute/update_autostart_tests.rb
|
358
360
|
- tests/libvirt/requests/compute/update_display.rb
|