ovirt 0.1.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 +15 -0
- data/.rspec +3 -0
- data/LICENSE.txt +13 -0
- data/README.md +35 -0
- data/lib/ovirt/api.rb +31 -0
- data/lib/ovirt/cdrom.rb +12 -0
- data/lib/ovirt/cluster.rb +27 -0
- data/lib/ovirt/data_center.rb +24 -0
- data/lib/ovirt/disk.rb +30 -0
- data/lib/ovirt/domain.rb +12 -0
- data/lib/ovirt/event.rb +492 -0
- data/lib/ovirt/event_monitor.rb +36 -0
- data/lib/ovirt/exception.rb +13 -0
- data/lib/ovirt/file.rb +13 -0
- data/lib/ovirt/group.rb +12 -0
- data/lib/ovirt/host.rb +44 -0
- data/lib/ovirt/host_nic.rb +38 -0
- data/lib/ovirt/inventory.rb +177 -0
- data/lib/ovirt/network.rb +16 -0
- data/lib/ovirt/nic.rb +31 -0
- data/lib/ovirt/object.rb +315 -0
- data/lib/ovirt/permission.rb +20 -0
- data/lib/ovirt/permit.rb +14 -0
- data/lib/ovirt/role.rb +13 -0
- data/lib/ovirt/service.rb +332 -0
- data/lib/ovirt/snapshot.rb +28 -0
- data/lib/ovirt/statistic.rb +37 -0
- data/lib/ovirt/storage.rb +14 -0
- data/lib/ovirt/storage_domain.rb +48 -0
- data/lib/ovirt/tag.rb +23 -0
- data/lib/ovirt/template.rb +185 -0
- data/lib/ovirt/user.rb +15 -0
- data/lib/ovirt/version.rb +3 -0
- data/lib/ovirt/vm.rb +327 -0
- data/lib/ovirt/vmpool.rb +14 -0
- data/lib/ovirt.rb +35 -0
- data/spec/event_spec.rb +26 -0
- data/spec/object_spec.rb +12 -0
- data/spec/service_spec.rb +30 -0
- data/spec/spec_helper.rb +24 -0
- data/spec/template_spec.rb +141 -0
- data/spec/vm_spec.rb +189 -0
- metadata +224 -0
data/spec/vm_spec.rb
ADDED
@@ -0,0 +1,189 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Ovirt::Vm do
|
4
|
+
before do
|
5
|
+
@service = Ovirt::Service.new({:server => "", :username => "", :password => ""})
|
6
|
+
@vm = Ovirt::Vm.new(@service, {
|
7
|
+
:actions => {:stop => '/api/vms/128f9ffd-b82c-41e4-8c00-9742ed173bac/stop'},
|
8
|
+
:id => "128f9ffd-b82c-41e4-8c00-9742ed173bac",
|
9
|
+
:href => "/api/vms/128f9ffd-b82c-41e4-8c00-9742ed173bac",
|
10
|
+
:cluster => {
|
11
|
+
:id => "5be5d08a-a60b-11e2-bee6-005056a217db",
|
12
|
+
:href => "/api/clusters/5be5d08a-a60b-11e2-bee6-005056a217db"},
|
13
|
+
:template => {
|
14
|
+
:id => "00000000-0000-0000-0000-000000000000",
|
15
|
+
:href => "/api/templates/00000000-0000-0000-0000-000000000000"},
|
16
|
+
:name => "bd-skeletal-clone-from-template",
|
17
|
+
:origin => "rhev",
|
18
|
+
:type => "server",
|
19
|
+
:memory => 536_870_912,
|
20
|
+
:stateless => false,
|
21
|
+
:creation_time => "2013-09-04 16:24:20 -0400",
|
22
|
+
:status => {:state => "down"},
|
23
|
+
:display => {:type => "spice", :monitors => 1},
|
24
|
+
:usb => {:enabled => false},
|
25
|
+
:cpu => {:sockets => 1, :cores => 1},
|
26
|
+
:high_availability => {:priority => 1, :enabled => false},
|
27
|
+
:os => {:type => "unassigned", :boot_order => [{:dev => "hd"}]},
|
28
|
+
:custom_attributes => [],
|
29
|
+
:placement_policy => {:affinity => "migratable", :host => {}},
|
30
|
+
:memory_policy => {:guaranteed => 536_870_912},
|
31
|
+
:guest_info => {}
|
32
|
+
})
|
33
|
+
end
|
34
|
+
|
35
|
+
context "#create_disk" do
|
36
|
+
before do
|
37
|
+
@resource_url = "#{@vm.attributes[:href]}/disks"
|
38
|
+
@base_options = {
|
39
|
+
:storage => "aa7e70e5-abcd-1234-a605-92ce6ba652a8",
|
40
|
+
:id => "01eae62b-90df-424d-978c-beaa7eb2f7f6",
|
41
|
+
:href => "/api/templates/54f1b9f4-0e89-4c72-9a26-f94dcb857264/disks/01eae62b-90df-424d-978c-beaa7eb2f7f6",
|
42
|
+
:name => "bd-clone_Disk1",
|
43
|
+
:interface => "virtio",
|
44
|
+
:format => "raw",
|
45
|
+
:image_id => "a791ba77-8cc1-44de-9945-69f0a291cc47",
|
46
|
+
:size => 10737418240,
|
47
|
+
:provisioned_size => 10737418240,
|
48
|
+
:actual_size => 1316855808,
|
49
|
+
:sparse => true,
|
50
|
+
:bootable => true,
|
51
|
+
:wipe_after_delete => true,
|
52
|
+
:propagate_errors => true,
|
53
|
+
:status => {:state => "ok"},
|
54
|
+
:storage_domains => [{:id => "aa7e70e5-40d0-43e2-a605-92ce6ba652a8"}],
|
55
|
+
:storage_domain_id => "aa7e70e5-40d0-43e2-a605-92ce6ba652a8"
|
56
|
+
}
|
57
|
+
@base_data = <<-EOX.chomp
|
58
|
+
<disk>
|
59
|
+
<name>bd-clone_Disk1</name>
|
60
|
+
<interface>virtio</interface>
|
61
|
+
<format>raw</format>
|
62
|
+
<size>10737418240</size>
|
63
|
+
<sparse>true</sparse>
|
64
|
+
<bootable>true</bootable>
|
65
|
+
<wipe_after_delete>true</wipe_after_delete>
|
66
|
+
<propagate_errors>true</propagate_errors>
|
67
|
+
<storage_domains>
|
68
|
+
<storage_domain id=\"aa7e70e5-abcd-1234-a605-92ce6ba652a8\"/>
|
69
|
+
</storage_domains>
|
70
|
+
</disk>
|
71
|
+
EOX
|
72
|
+
end
|
73
|
+
|
74
|
+
[:sparse, :bootable, :wipe_after_delete, :propagate_errors].each do |boolean_key|
|
75
|
+
context "xml #{boolean_key.to_s} value" do
|
76
|
+
it "set to true" do
|
77
|
+
expected_data = @base_data
|
78
|
+
options = @base_options.merge(boolean_key => true)
|
79
|
+
|
80
|
+
@service.should_receive(:resource_post).once.with(@resource_url, expected_data)
|
81
|
+
@vm.create_disk(options)
|
82
|
+
end
|
83
|
+
|
84
|
+
it "set to false" do
|
85
|
+
expected_data = @base_data.gsub("<#{boolean_key.to_s}>true</#{boolean_key.to_s}>", "<#{boolean_key.to_s}>false</#{boolean_key.to_s}>")
|
86
|
+
options = @base_options.merge(boolean_key => false)
|
87
|
+
|
88
|
+
@service.should_receive(:resource_post).once.with(@resource_url, expected_data)
|
89
|
+
@vm.create_disk(options)
|
90
|
+
end
|
91
|
+
|
92
|
+
it "unset" do
|
93
|
+
expected_data = @base_data.gsub(" <#{boolean_key.to_s}>true</#{boolean_key.to_s}>\n", "")
|
94
|
+
options = @base_options.dup
|
95
|
+
options.delete(boolean_key)
|
96
|
+
|
97
|
+
@service.should_receive(:resource_post).once.with(@resource_url, expected_data)
|
98
|
+
@vm.create_disk(options)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context "#create_nic" do
|
105
|
+
before do
|
106
|
+
@name = 'nic_name'
|
107
|
+
@resource_url = "#{@vm.attributes[:href]}/nics"
|
108
|
+
@base_options = {:name => @name}
|
109
|
+
end
|
110
|
+
|
111
|
+
def expected_data(element)
|
112
|
+
return <<-EOX.chomp
|
113
|
+
<nic>
|
114
|
+
<name>#{@name}</name>
|
115
|
+
#{element}
|
116
|
+
</nic>
|
117
|
+
EOX
|
118
|
+
end
|
119
|
+
|
120
|
+
it "populates the interface" do
|
121
|
+
interface = 'interface'
|
122
|
+
@service.should_receive(:resource_post).once.with(
|
123
|
+
@resource_url, expected_data("<interface>#{interface}</interface>"))
|
124
|
+
@vm.create_nic(@base_options.merge({:interface => interface}))
|
125
|
+
end
|
126
|
+
|
127
|
+
it "populates the network id" do
|
128
|
+
network_id = 'network_id'
|
129
|
+
@service.should_receive(:resource_post).once.with(
|
130
|
+
@resource_url, expected_data("<network id=\"#{network_id}\"/>"))
|
131
|
+
@vm.create_nic(@base_options.merge({:network_id => network_id}))
|
132
|
+
end
|
133
|
+
|
134
|
+
it "populates the MAC address" do
|
135
|
+
mac_address = 'mac_address'
|
136
|
+
@service.should_receive(:resource_post).once.with(
|
137
|
+
@resource_url, expected_data("<mac address=\"#{mac_address}\"/>"))
|
138
|
+
@vm.create_nic(@base_options.merge({:mac_address => mac_address}))
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
context "#memory_reserve" do
|
143
|
+
it "updates the memory policy guarantee" do
|
144
|
+
memory_reserve = 1.gigabyte
|
145
|
+
expected_data = <<-EOX.chomp
|
146
|
+
<vm>
|
147
|
+
<memory_policy>
|
148
|
+
<guaranteed>#{memory_reserve}</guaranteed>
|
149
|
+
</memory_policy>
|
150
|
+
</vm>
|
151
|
+
EOX
|
152
|
+
|
153
|
+
return_data = <<-EOX.chomp
|
154
|
+
<vm>
|
155
|
+
<os type='dummy'/>
|
156
|
+
<placement_policy>
|
157
|
+
<affinity>dummy</affinity>
|
158
|
+
</placement_policy>
|
159
|
+
</vm>
|
160
|
+
EOX
|
161
|
+
|
162
|
+
@service.should_receive(:resource_put).once.with(
|
163
|
+
@vm.attributes[:href],
|
164
|
+
expected_data).and_return(return_data)
|
165
|
+
@vm.memory_reserve = memory_reserve
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
context "#stop" do
|
170
|
+
it "should raise Ovirt::VmIsNotRunning if the VM is not running" do
|
171
|
+
return_data = <<-EOX.chomp
|
172
|
+
<action>
|
173
|
+
<fault>
|
174
|
+
<detail>[Cannot stop VM. VM is not running.]</detail>
|
175
|
+
</fault>
|
176
|
+
</action>
|
177
|
+
EOX
|
178
|
+
|
179
|
+
rest_client = double('rest_client').as_null_object
|
180
|
+
rest_client.should_receive(:post) do |&block|
|
181
|
+
return_data.stub(:code).and_return(409)
|
182
|
+
block.call(return_data)
|
183
|
+
end
|
184
|
+
|
185
|
+
@service.stub(:create_resource).and_return(rest_client)
|
186
|
+
expect { @vm.stop }.to raise_error Ovirt::VmIsNotRunning
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
metadata
ADDED
@@ -0,0 +1,224 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ovirt
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jason Frey
|
8
|
+
- Brandon Dunne
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-09-26 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ~>
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '1.3'
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ~>
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '1.3'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rake
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ! '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ! '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rspec
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ~>
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '2.13'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '2.13'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: coveralls
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: activesupport
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ! '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: more_core_extensions
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ! '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :runtime
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ! '>='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: nokogiri
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ! '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :runtime
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ! '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: parallel
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
type: :runtime
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: rest-client
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ~>
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: !binary |-
|
133
|
+
MS42Ljc=
|
134
|
+
type: :runtime
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - ~>
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: !binary |-
|
141
|
+
MS42Ljc=
|
142
|
+
description: Ovirt provides a simple Object Oriented interface to the REST API of
|
143
|
+
oVirt and RHEV-M servers.
|
144
|
+
email:
|
145
|
+
- jfrey@redhat.com
|
146
|
+
- bdunne@redhat.com
|
147
|
+
executables: []
|
148
|
+
extensions: []
|
149
|
+
extra_rdoc_files: []
|
150
|
+
files:
|
151
|
+
- .rspec
|
152
|
+
- LICENSE.txt
|
153
|
+
- README.md
|
154
|
+
- lib/ovirt.rb
|
155
|
+
- lib/ovirt/api.rb
|
156
|
+
- lib/ovirt/cdrom.rb
|
157
|
+
- lib/ovirt/cluster.rb
|
158
|
+
- lib/ovirt/data_center.rb
|
159
|
+
- lib/ovirt/disk.rb
|
160
|
+
- lib/ovirt/domain.rb
|
161
|
+
- lib/ovirt/event.rb
|
162
|
+
- lib/ovirt/event_monitor.rb
|
163
|
+
- lib/ovirt/exception.rb
|
164
|
+
- lib/ovirt/file.rb
|
165
|
+
- lib/ovirt/group.rb
|
166
|
+
- lib/ovirt/host.rb
|
167
|
+
- lib/ovirt/host_nic.rb
|
168
|
+
- lib/ovirt/inventory.rb
|
169
|
+
- lib/ovirt/network.rb
|
170
|
+
- lib/ovirt/nic.rb
|
171
|
+
- lib/ovirt/object.rb
|
172
|
+
- lib/ovirt/permission.rb
|
173
|
+
- lib/ovirt/permit.rb
|
174
|
+
- lib/ovirt/role.rb
|
175
|
+
- lib/ovirt/service.rb
|
176
|
+
- lib/ovirt/snapshot.rb
|
177
|
+
- lib/ovirt/statistic.rb
|
178
|
+
- lib/ovirt/storage.rb
|
179
|
+
- lib/ovirt/storage_domain.rb
|
180
|
+
- lib/ovirt/tag.rb
|
181
|
+
- lib/ovirt/template.rb
|
182
|
+
- lib/ovirt/user.rb
|
183
|
+
- lib/ovirt/version.rb
|
184
|
+
- lib/ovirt/vm.rb
|
185
|
+
- lib/ovirt/vmpool.rb
|
186
|
+
- spec/event_spec.rb
|
187
|
+
- spec/object_spec.rb
|
188
|
+
- spec/service_spec.rb
|
189
|
+
- spec/spec_helper.rb
|
190
|
+
- spec/template_spec.rb
|
191
|
+
- spec/vm_spec.rb
|
192
|
+
homepage: http://github.com/ManageIQ/ovirt
|
193
|
+
licenses:
|
194
|
+
- Apache
|
195
|
+
metadata: {}
|
196
|
+
post_install_message:
|
197
|
+
rdoc_options: []
|
198
|
+
require_paths:
|
199
|
+
- lib
|
200
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
201
|
+
requirements:
|
202
|
+
- - ! '>='
|
203
|
+
- !ruby/object:Gem::Version
|
204
|
+
version: '0'
|
205
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
206
|
+
requirements:
|
207
|
+
- - ! '>='
|
208
|
+
- !ruby/object:Gem::Version
|
209
|
+
version: '0'
|
210
|
+
requirements: []
|
211
|
+
rubyforge_project:
|
212
|
+
rubygems_version: 2.4.1
|
213
|
+
signing_key:
|
214
|
+
specification_version: 4
|
215
|
+
summary: Ovirt provides a simple Object Oriented interface to the REST API of oVirt
|
216
|
+
and RHEV-M servers.
|
217
|
+
test_files:
|
218
|
+
- spec/event_spec.rb
|
219
|
+
- spec/object_spec.rb
|
220
|
+
- spec/service_spec.rb
|
221
|
+
- spec/spec_helper.rb
|
222
|
+
- spec/template_spec.rb
|
223
|
+
- spec/vm_spec.rb
|
224
|
+
- .rspec
|