fog-ovirt 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +1 -1
- data/README.md +41 -0
- data/lib/fog/ovirt/compute/v4.rb +25 -5
- data/lib/fog/ovirt/compute.rb +4 -4
- data/lib/fog/ovirt/requests/compute/v4/create_vm.rb +15 -5
- data/lib/fog/ovirt/requests/compute/v4/update_vm.rb +56 -0
- data/lib/fog/ovirt/requests/compute/v4/vm_start_with_cloudinit.rb +23 -0
- data/lib/fog/ovirt/version.rb +1 -1
- data/lib/fog/ovirt.rb +1 -1
- data/tests/ovirt/compute_tests.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0db74060b4baf3e164228414dea50eee4b190456
|
4
|
+
data.tar.gz: 37ac7fce1061b02648cf17b1650f8266ab264a0f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc1bdbba0adf313e68d6e2278cb8d0bbe642f6ec5b708c7ed649e028c3202867394696418a36cee09958207d24c603765e91d40ab70cb1aac40c8bc2f659acf6
|
7
|
+
data.tar.gz: 9aa2938661ac3506c0f84e85de7fe1c1ca9914d5598dc85e7d2b32e3e1f6b2854a74e1313a400abf4f262a1dcb87bb1d9fff678acad3cf71f7bcfced78fdefb2
|
data/.rubocop_todo.yml
CHANGED
data/README.md
CHANGED
@@ -38,6 +38,47 @@ compute = Fog::Compute.new(
|
|
38
38
|
)
|
39
39
|
```
|
40
40
|
|
41
|
+
## API Support
|
42
|
+
|
43
|
+
This gem fully supports API v3 of oVirt.
|
44
|
+
|
45
|
+
Version 1.0.2 adds support API V4 as well.
|
46
|
+
The first version does not give full support.
|
47
|
+
The supported requests for API V4 are:
|
48
|
+
|
49
|
+
:vm_action, :destroy_vm, :create_vm
|
50
|
+
:datacenters
|
51
|
+
:storage_domains
|
52
|
+
:list_virtual_machines, :get_virtual_machine
|
53
|
+
:list_templates, :get_template
|
54
|
+
:list_instance_types, :get_instance_type
|
55
|
+
:list_clusters, :get_cluster
|
56
|
+
:add_interface, :destroy_interface, :update_interface, :list_vm_interfaces, :list_template_interfaces
|
57
|
+
:list_networks
|
58
|
+
:vm_ticket
|
59
|
+
:list_vm_volumes, :list_template_volumes, :list_volumes, :add_volume, :destroy_volume, :update_volume
|
60
|
+
:get_api_version
|
61
|
+
:list_quotas, :get_quota
|
62
|
+
:list_operating_systems
|
63
|
+
|
64
|
+
### Choosing api version
|
65
|
+
|
66
|
+
This example shows the usage as a fog provider:
|
67
|
+
|
68
|
+
client = Fog::Compute.new(
|
69
|
+
:provider => "ovirt",
|
70
|
+
:ovirt_username => user,
|
71
|
+
:ovirt_password => password,
|
72
|
+
:ovirt_url => url,
|
73
|
+
:ovirt_datacenter => datacenter,
|
74
|
+
:public_key => public_key,
|
75
|
+
:api_version => 'v4'
|
76
|
+
)
|
77
|
+
The :api_version can be sent 'v3' or 'v4' to determine which API version to use.
|
78
|
+
|
79
|
+
|
80
|
+
Feedback is welcome. Please feel free to open issues for the V4 support and contribute.
|
81
|
+
|
41
82
|
## Contributing
|
42
83
|
|
43
84
|
Please refer to [CONTRIBUTING.md](CONTRIBUTING.md).
|
data/lib/fog/ovirt/compute/v4.rb
CHANGED
@@ -8,8 +8,10 @@ module Fog
|
|
8
8
|
request_path "fog/ovirt/requests/compute/v4"
|
9
9
|
|
10
10
|
request :vm_action
|
11
|
+
request :vm_start_with_cloudinit
|
11
12
|
request :destroy_vm
|
12
13
|
request :create_vm
|
14
|
+
request :update_vm
|
13
15
|
request :datacenters
|
14
16
|
request :storage_domains
|
15
17
|
request :list_virtual_machines
|
@@ -71,11 +73,17 @@ module Fog
|
|
71
73
|
end
|
72
74
|
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
73
75
|
|
74
|
-
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
76
|
+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
|
75
77
|
def get_attr_value(value, opts)
|
76
78
|
case value
|
77
|
-
when OvirtSDK4::
|
79
|
+
when OvirtSDK4::List
|
80
|
+
value.to_a
|
81
|
+
when Array, Hash, DateTime
|
78
82
|
value
|
83
|
+
when OvirtSDK4::HighAvailability
|
84
|
+
opts[:ha] = value.enabled
|
85
|
+
when OvirtSDK4::TemplateVersion
|
86
|
+
OpenStruct.new(:version_name => value.version_name, :version_number => value.version_number)
|
79
87
|
when OvirtSDK4::Mac
|
80
88
|
value.address
|
81
89
|
when OvirtSDK4::Cpu
|
@@ -92,10 +100,14 @@ module Fog
|
|
92
100
|
:monitors => value.monitors
|
93
101
|
}
|
94
102
|
else
|
95
|
-
value.
|
103
|
+
if value.class.respond_to?(:parent) && value.class.parent == OvirtSDK4
|
104
|
+
value.id if value.respond_to?(:id)
|
105
|
+
else
|
106
|
+
value.to_s.strip
|
107
|
+
end
|
96
108
|
end
|
97
109
|
end
|
98
|
-
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
110
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
|
99
111
|
end
|
100
112
|
|
101
113
|
class Mock
|
@@ -151,7 +163,15 @@ module Fog
|
|
151
163
|
end
|
152
164
|
|
153
165
|
def datacenter
|
154
|
-
@datacenter ||=
|
166
|
+
@datacenter ||= datacenter_hash[:id]
|
167
|
+
end
|
168
|
+
|
169
|
+
def datacenter_hash
|
170
|
+
@datacenter_hash ||= datacenters.first
|
171
|
+
end
|
172
|
+
|
173
|
+
def blank_template
|
174
|
+
@blank_template ||= client.system_service.get.special_objects.blank_template
|
155
175
|
end
|
156
176
|
|
157
177
|
private
|
data/lib/fog/ovirt/compute.rb
CHANGED
@@ -31,8 +31,9 @@ module Fog
|
|
31
31
|
@client = client
|
32
32
|
end
|
33
33
|
|
34
|
-
# rubocop:disable Style/MethodMissingSuper, Style/MissingRespondToMissing
|
35
34
|
def method_missing(symbol, *args)
|
35
|
+
super unless @client.respond_to?(symbol)
|
36
|
+
|
36
37
|
if block_given?
|
37
38
|
@client.__send__(symbol, *args) do |*block_args|
|
38
39
|
yield(*block_args)
|
@@ -44,10 +45,9 @@ module Fog
|
|
44
45
|
raise ::Fog::Ovirt::Errors::OvirtEngineError, e
|
45
46
|
end
|
46
47
|
|
47
|
-
def
|
48
|
-
@client.respond_to?(symbol, include_all)
|
48
|
+
def respond_to_missing?(method_name, include_private = false)
|
49
|
+
@client.respond_to?(symbol, include_all) || super
|
49
50
|
end
|
50
|
-
# rubocop:enable Style/MethodMissingSuper, Style/MissingRespondToMissing
|
51
51
|
end
|
52
52
|
|
53
53
|
require "fog/ovirt/compute/v3"
|
@@ -27,9 +27,21 @@ module Fog
|
|
27
27
|
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
28
28
|
def create_vm(attrs)
|
29
29
|
attrs = attrs.dup
|
30
|
-
|
30
|
+
|
31
|
+
if attrs[:cluster].present?
|
32
|
+
attrs[:cluster] = client.system_service.clusters_service.cluster_service(attrs[:cluster]).get
|
33
|
+
else
|
34
|
+
if attrs[:cluster_name].present?
|
35
|
+
cluster = client.system_service.clusters_service.list(:search => "name=#{attrs[:cluster_name]}").first
|
36
|
+
else
|
37
|
+
cluster = client.system_service.clusters_service.list(:search => "datacenter=#{datacenter_hash[:name]}").first
|
38
|
+
attrs[:cluster_name] = cluster.name
|
39
|
+
end
|
40
|
+
|
41
|
+
attrs[:cluster] = cluster
|
42
|
+
end
|
43
|
+
|
31
44
|
vms_service = client.system_service.vms_service
|
32
|
-
attrs[:cluster] = client.system_service.clusters_service.cluster_service(attrs[:cluster]).get
|
33
45
|
attrs[:instance_type] = attrs[:instance_type].present? ? client.system_service.instance_types_service.instance_type_service(attrs[:instance_type]).get : nil
|
34
46
|
|
35
47
|
attrs[:template] = if attrs[:template].present?
|
@@ -45,9 +57,7 @@ module Fog
|
|
45
57
|
attrs[:cpu] = OvirtSDK4::Cpu.new(:topology => cpu_topology)
|
46
58
|
end
|
47
59
|
|
48
|
-
if attrs[:memory].to_i < Fog::Compute::Ovirt::DISK_SIZE_TO_GB
|
49
|
-
attrs[:memory_policy] = OvirtSDK4::MemoryPolicy.new(:guaranteed => attrs[:memory])
|
50
|
-
end
|
60
|
+
attrs[:memory_policy] = OvirtSDK4::MemoryPolicy.new(:guaranteed => attrs[:memory]) if attrs[:memory].to_i < Fog::Compute::Ovirt::DISK_SIZE_TO_GB
|
51
61
|
|
52
62
|
# TODO: handle cloning from template
|
53
63
|
process_vm_opts(attrs)
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Ovirt
|
4
|
+
class V4
|
5
|
+
class Real
|
6
|
+
# rubocop:disable Metrics/AbcSize
|
7
|
+
def update_vm(attrs)
|
8
|
+
attrs = attrs.dup
|
9
|
+
vm_service = client.system_service.vms_service.vm_service(attrs[:id])
|
10
|
+
|
11
|
+
if attrs[:cores].present?
|
12
|
+
cpu_topology = OvirtSDK4::CpuTopology.new(:cores => attrs[:cores], :sockets => "1")
|
13
|
+
attrs[:cpu] = OvirtSDK4::Cpu.new(:topology => cpu_topology)
|
14
|
+
end
|
15
|
+
wrap_attribute(attrs, :cluster, OvirtSDK4::Cluster)
|
16
|
+
attrs[:template] = if attrs[:template].present?
|
17
|
+
OvirtSDK4::Template.new(:id => attrs[:template])
|
18
|
+
else
|
19
|
+
blank_template
|
20
|
+
end
|
21
|
+
|
22
|
+
wrap_attribute(attrs, :large_icon, OvirtSDK4::Icon)
|
23
|
+
wrap_attribute(attrs, :small_icon, OvirtSDK4::Icon)
|
24
|
+
wrap_attribute(attrs, :cpu_profile, OvirtSDK4::CpuProfile)
|
25
|
+
wrap_attribute(attrs, :host, OvirtSDK4::Host)
|
26
|
+
wrap_attribute(attrs, :quota, OvirtSDK4::Quota)
|
27
|
+
wrap_attribute(attrs, :instance_type, OvirtSDK4::InstanceType)
|
28
|
+
attrs[:high_availability] = OvirtSDK4::HighAvailability.new(:enabled => attrs[:ha]) unless attrs[:ha].nil?
|
29
|
+
attrs[:original_template] = if attrs[:original_template].present?
|
30
|
+
OvirtSDK4::Template.new(:id => attrs[:original_template])
|
31
|
+
else
|
32
|
+
blank_template
|
33
|
+
end
|
34
|
+
vm_service.update(attrs)
|
35
|
+
end
|
36
|
+
# rubocop:enable Metrics/AbcSize
|
37
|
+
|
38
|
+
def wrap_attribute(attrs, attribute, klass)
|
39
|
+
if attrs[attribute].present?
|
40
|
+
attrs[attribute] = klass.new(:id => attrs[attribute])
|
41
|
+
else
|
42
|
+
attrs.delete(attribute)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class Mock
|
48
|
+
def update_vm(_attrs)
|
49
|
+
xml = read_xml("vm.xml")
|
50
|
+
OvirtSDK4::Reader.read(Nokogiri::XML(xml).root.to_s)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Ovirt
|
4
|
+
class V4
|
5
|
+
class Real
|
6
|
+
def vm_start_with_cloudinit(options = {})
|
7
|
+
raise ArgumentError, "instance id is a required parameter" unless options.key? :id
|
8
|
+
|
9
|
+
vm_service = client.system_service.vms_service.vm_service(options[:id])
|
10
|
+
vm_service.start(:use_cloud_init => true, :vm => { :initialization => options[:user_data] })
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Mock
|
15
|
+
def vm_start_with_cloudinit(options = {})
|
16
|
+
raise ArgumentError, "instance id is a required parameter" unless options.key? :id
|
17
|
+
true
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/fog/ovirt/version.rb
CHANGED
data/lib/fog/ovirt.rb
CHANGED
@@ -17,7 +17,7 @@ Shindo.tests("Fog::Compute[:ovirt]", ["ovirt"]) do
|
|
17
17
|
%w[ add_interface create_vm datacenters destroy_interface destroy_vm get_cluster get_template
|
18
18
|
get_virtual_machine list_clusters list_networks list_template_interfaces list_templates
|
19
19
|
list_virtual_machines list_vm_interfaces storage_domains update_interface update_vm vm_action
|
20
|
-
api_version update_volume].each do |collection|
|
20
|
+
vm_start_with_cloudinit api_version update_volume].each do |collection|
|
21
21
|
test("it should respond to #{collection}") { compute.respond_to? collection }
|
22
22
|
end
|
23
23
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fog-ovirt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ori Rabin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fog-core
|
@@ -297,8 +297,10 @@ files:
|
|
297
297
|
- lib/fog/ovirt/requests/compute/v4/mock_files/volumes.xml
|
298
298
|
- lib/fog/ovirt/requests/compute/v4/storage_domains.rb
|
299
299
|
- lib/fog/ovirt/requests/compute/v4/update_interface.rb
|
300
|
+
- lib/fog/ovirt/requests/compute/v4/update_vm.rb
|
300
301
|
- lib/fog/ovirt/requests/compute/v4/update_volume.rb
|
301
302
|
- lib/fog/ovirt/requests/compute/v4/vm_action.rb
|
303
|
+
- lib/fog/ovirt/requests/compute/v4/vm_start_with_cloudinit.rb
|
302
304
|
- lib/fog/ovirt/requests/compute/v4/vm_ticket.rb
|
303
305
|
- lib/fog/ovirt/version.rb
|
304
306
|
- spec/fog/bin/ovirt_spec.rb
|
@@ -352,7 +354,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
352
354
|
version: '0'
|
353
355
|
requirements: []
|
354
356
|
rubyforge_project:
|
355
|
-
rubygems_version: 2.6.
|
357
|
+
rubygems_version: 2.6.14
|
356
358
|
signing_key:
|
357
359
|
specification_version: 4
|
358
360
|
summary: Module for the 'fog' gem to support Ovirt.
|