fog-libvirt 0.0.1 → 0.0.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 +4 -4
- data/Rakefile +8 -3
- data/fog-libvirt.gemspec +5 -2
- data/lib/fog/libvirt/compute.rb +1 -0
- data/lib/fog/libvirt/models/compute/server.rb +33 -0
- data/lib/fog/libvirt/models/compute/volume.rb +5 -0
- data/lib/fog/libvirt/requests/compute/upload_volume.rb +31 -0
- data/lib/fog/libvirt/version.rb +1 -1
- data/minitests/server/user_data_iso_test.rb +69 -0
- data/minitests/test_helper.rb +18 -0
- data/tests/libvirt/models/compute/server_tests.rb +0 -1
- metadata +10 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d00b54cddae7049cf3de22c6ba3b0b64b8a0a7f
|
4
|
+
data.tar.gz: a8c5e11a8d0e93f0f3a27141c4684d22f5e9fed2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 78b727f4016fcbf9d6794378298666d04495dd7477f475c7fda1b594eb28c3f68dd7b5299c9c67f7cc182d0762690eca55406d115d2cac1331f605d8b84d6a66
|
7
|
+
data.tar.gz: 55f21716980e467ce27c1518998665c80eb4afbd74c4b47acb8d6afc682f0dc0485680511505425ab3aa469e812e5840ef28ef7529ac1ae8a8f7bcf19385b0fb
|
data/Rakefile
CHANGED
@@ -34,9 +34,14 @@ end
|
|
34
34
|
#############################################################################
|
35
35
|
|
36
36
|
GEM_NAME = "#{name}"
|
37
|
-
task :default => :test
|
38
|
-
|
39
|
-
Rake::TestTask.new do |t|
|
37
|
+
task :default => [:test, :minitest]
|
38
|
+
|
39
|
+
Rake::TestTask.new(:minitest) do |t|
|
40
|
+
t.libs << '.'
|
41
|
+
t.libs << 'lib'
|
42
|
+
t.libs << 'minitests'
|
43
|
+
t.test_files = Dir.glob('minitests/**/*_test.rb')
|
44
|
+
t.verbose = true
|
40
45
|
end
|
41
46
|
|
42
47
|
desc 'Run tests'
|
data/fog-libvirt.gemspec
CHANGED
@@ -27,6 +27,10 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.add_dependency("fog-json")
|
28
28
|
s.add_dependency("fog-xml", "~> 0.1.1")
|
29
29
|
s.add_dependency('ruby-libvirt','~> 0.5.0')
|
30
|
+
s.add_dependency('mime-types','< 2.0') if RUBY_VERSION < '1.9'
|
31
|
+
s.add_dependency('nokogiri', '< 1.6') if RUBY_VERSION < '1.9'
|
32
|
+
s.add_dependency('octokit', '< 3.0') if RUBY_VERSION < '1.9'
|
33
|
+
s.add_dependency('rest-client', '<= 1.7.0') if RUBY_VERSION < '1.9'
|
30
34
|
|
31
35
|
# Fedora and derivates need explicit require
|
32
36
|
s.add_dependency("json")
|
@@ -38,9 +42,8 @@ Gem::Specification.new do |s|
|
|
38
42
|
s.add_development_dependency("rubocop") if RUBY_VERSION > "1.9"
|
39
43
|
s.add_development_dependency("shindo", "~> 0.3.4")
|
40
44
|
s.add_development_dependency("simplecov")
|
41
|
-
s.add_development_dependency("thor")
|
42
45
|
s.add_development_dependency("yard")
|
43
|
-
s.add_development_dependency("
|
46
|
+
s.add_development_dependency("mocha", "~> 1.1.0")
|
44
47
|
|
45
48
|
# Let's not ship dot files and gemfiles
|
46
49
|
git_files = `git ls-files`.split("\n")
|
data/lib/fog/libvirt/compute.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'fog/compute/models/server'
|
2
2
|
require 'fog/libvirt/models/compute/util/util'
|
3
3
|
require 'net/ssh/proxy/command'
|
4
|
+
require 'fileutils'
|
4
5
|
|
5
6
|
module Fog
|
6
7
|
module Compute
|
@@ -36,6 +37,7 @@ module Fog
|
|
36
37
|
attr_accessor :network_interface_type ,:network_nat_network, :network_bridge_name
|
37
38
|
attr_accessor :volume_format_type, :volume_allocation,:volume_capacity, :volume_name, :volume_pool_name, :volume_template_name, :volume_path
|
38
39
|
attr_accessor :password
|
40
|
+
attr_accessor :user_data
|
39
41
|
|
40
42
|
# Can be created by passing in :xml => "<xml to create domain/server>"
|
41
43
|
# or by providing :template_options => {
|
@@ -48,6 +50,7 @@ module Fog
|
|
48
50
|
super defaults.merge(attributes)
|
49
51
|
initialize_nics
|
50
52
|
initialize_volumes
|
53
|
+
@user_data = attributes.delete(:user_data)
|
51
54
|
end
|
52
55
|
|
53
56
|
def new?
|
@@ -57,6 +60,7 @@ module Fog
|
|
57
60
|
def save
|
58
61
|
raise Fog::Errors::Error.new('Saving an existing server may create a duplicate') unless new?
|
59
62
|
create_or_clone_volume unless xml or @volumes
|
63
|
+
create_user_data_iso if user_data
|
60
64
|
@xml ||= to_xml
|
61
65
|
self.id = (persistent ? service.define_domain(xml) : service.create_domain(xml)).uuid
|
62
66
|
reload
|
@@ -215,6 +219,35 @@ module Fog
|
|
215
219
|
display[:port]
|
216
220
|
end
|
217
221
|
|
222
|
+
def generate_config_iso(user_data, &blk)
|
223
|
+
Dir.mktmpdir('config') do |wd|
|
224
|
+
generate_config_iso_in_dir(wd, user_data, &blk)
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
def generate_config_iso_in_dir(dir_path, user_data, &blk)
|
229
|
+
FileUtils.touch(File.join(dir_path, "meta-data"))
|
230
|
+
File.open(File.join(dir_path, 'user-data'), 'w') { |f| f.write user_data }
|
231
|
+
|
232
|
+
isofile = Tempfile.new(['init', '.iso']).path
|
233
|
+
unless system("genisoimage -output #{isofile} -volid cidata -joliet -rock #{File.join(dir_path, 'user-data')} #{File.join(dir_path, 'meta-data')}")
|
234
|
+
raise Fog::Errors::Error("Couldn't generate cloud-init iso disk.")
|
235
|
+
end
|
236
|
+
blk.call(isofile)
|
237
|
+
end
|
238
|
+
|
239
|
+
def create_user_data_iso
|
240
|
+
generate_config_iso(user_data) do |iso|
|
241
|
+
vol = service.volumes.create(:name => cloud_init_volume_name, :capacity => "#{File.size(iso)}b", :allocation => "0G")
|
242
|
+
vol.upload_image(iso)
|
243
|
+
@iso_file = cloud_init_volume_name
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
def cloud_init_volume_name
|
248
|
+
"#{name}-cloud-init.iso"
|
249
|
+
end
|
250
|
+
|
218
251
|
private
|
219
252
|
attr_accessor :volumes_path
|
220
253
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Libvirt
|
4
|
+
class Real
|
5
|
+
def upload_volume(pool_name, volume_name, file_path)
|
6
|
+
volume = client.lookup_storage_pool_by_name(pool_name).lookup_volume_by_name(volume_name)
|
7
|
+
stream = client.stream
|
8
|
+
|
9
|
+
image_file = File.open(file_path, "rb")
|
10
|
+
volume.upload(stream, 0, image_file.size)
|
11
|
+
stream.sendall do |_opaque, n|
|
12
|
+
begin
|
13
|
+
r = image_file.read(n)
|
14
|
+
[r.length < n ? 0 : r.length, r]
|
15
|
+
rescue Exception => e
|
16
|
+
[-1, ""]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
stream.finish
|
20
|
+
ensure
|
21
|
+
image_file.close if image_file
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class Mock
|
26
|
+
def upload_volume(pool_name, volume_name, file_path)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/fog/libvirt/version.rb
CHANGED
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class UserDataIsoTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
@compute = Fog::Compute[:libvirt]
|
6
|
+
@server = @compute.servers.new(:name => "test")
|
7
|
+
@test_data = "test data"
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_contains_meta_data_file
|
11
|
+
@server.stubs(:system).returns(true)
|
12
|
+
in_a_temp_dir do |d|
|
13
|
+
@server.generate_config_iso_in_dir(d, @test_data) {|iso| assert File.exist?(File.join(d, 'meta-data')) }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_contains_user_data_file
|
18
|
+
@server.stubs(:system).returns(true)
|
19
|
+
in_a_temp_dir do |d|
|
20
|
+
@server.generate_config_iso_in_dir(d, @test_data) do |iso|
|
21
|
+
assert File.exist?(File.join(d, 'user-data'))
|
22
|
+
assert_equal @test_data, File.read(File.join(d, 'user-data'))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_iso_is_generated
|
28
|
+
in_a_temp_dir do |d|
|
29
|
+
@server.expects(:system).with(regexp_matches(/^genisoimage/)).returns(true)
|
30
|
+
@server.generate_config_iso_in_dir(d, @test_data) {|iso| }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_volume_is_created_during_user_data_iso_generation
|
35
|
+
iso_path = "iso_file_path"
|
36
|
+
@server.stubs(:system).returns(true)
|
37
|
+
Fog::Compute::Libvirt::Volumes.any_instance.expects(:create).
|
38
|
+
with(has_entries(:name => @server.cloud_init_volume_name)).
|
39
|
+
returns(@compute.volumes.new)
|
40
|
+
Fog::Compute::Libvirt::Volume.any_instance.stubs(:upload_image)
|
41
|
+
|
42
|
+
@server.create_user_data_iso
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_volume_is_uploaded_during_user_data_iso_generation
|
46
|
+
iso_path = "iso_file_path"
|
47
|
+
@server.stubs(:system).returns(true)
|
48
|
+
Fog::Compute::Libvirt::Volumes.any_instance.stubs(:create).returns(@compute.volumes.new)
|
49
|
+
Fog::Compute::Libvirt::Volume.any_instance.expects(:upload_image).returns(true)
|
50
|
+
|
51
|
+
@server.create_user_data_iso
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_iso_file_is_set_during_user_data_iso_generation
|
55
|
+
iso_path = "iso_file_path"
|
56
|
+
@server.stubs(:system).returns(true)
|
57
|
+
Fog::Compute::Libvirt::Volumes.any_instance.stubs(:create).returns(@compute.volumes.new)
|
58
|
+
Fog::Compute::Libvirt::Volume.any_instance.stubs(:upload_image)
|
59
|
+
|
60
|
+
@server.create_user_data_iso
|
61
|
+
assert_equal @server.cloud_init_volume_name, @server.iso_file
|
62
|
+
end
|
63
|
+
|
64
|
+
def in_a_temp_dir
|
65
|
+
Dir.mktmpdir('test-dir') do |d|
|
66
|
+
yield d
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'mocha/mini_test'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
$: << File.join(File.dirname(__FILE__), '..', 'lib')
|
6
|
+
|
7
|
+
logdir = File.join(File.dirname(__FILE__), '..', 'logs')
|
8
|
+
FileUtils.mkdir_p(logdir) unless File.exist?(logdir)
|
9
|
+
|
10
|
+
ENV['TMPDIR'] = 'test/tmp'
|
11
|
+
FileUtils.rm_f Dir.glob 'test/tmp/*.tmp'
|
12
|
+
|
13
|
+
require 'fog/libvirt'
|
14
|
+
|
15
|
+
Fog.mock!
|
16
|
+
Fog.credentials = {
|
17
|
+
:libvirt_uri => 'qemu://libvirt/system',
|
18
|
+
}.merge(Fog.credentials)
|
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.0.
|
4
|
+
version: 0.0.2
|
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: 2015-
|
11
|
+
date: 2015-06-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fog-core
|
@@ -184,20 +184,6 @@ dependencies:
|
|
184
184
|
- - ">="
|
185
185
|
- !ruby/object:Gem::Version
|
186
186
|
version: '0'
|
187
|
-
- !ruby/object:Gem::Dependency
|
188
|
-
name: thor
|
189
|
-
requirement: !ruby/object:Gem::Requirement
|
190
|
-
requirements:
|
191
|
-
- - ">="
|
192
|
-
- !ruby/object:Gem::Version
|
193
|
-
version: '0'
|
194
|
-
type: :development
|
195
|
-
prerelease: false
|
196
|
-
version_requirements: !ruby/object:Gem::Requirement
|
197
|
-
requirements:
|
198
|
-
- - ">="
|
199
|
-
- !ruby/object:Gem::Version
|
200
|
-
version: '0'
|
201
187
|
- !ruby/object:Gem::Dependency
|
202
188
|
name: yard
|
203
189
|
requirement: !ruby/object:Gem::Requirement
|
@@ -213,19 +199,19 @@ dependencies:
|
|
213
199
|
- !ruby/object:Gem::Version
|
214
200
|
version: '0'
|
215
201
|
- !ruby/object:Gem::Dependency
|
216
|
-
name:
|
202
|
+
name: mocha
|
217
203
|
requirement: !ruby/object:Gem::Requirement
|
218
204
|
requirements:
|
219
|
-
- - "
|
205
|
+
- - "~>"
|
220
206
|
- !ruby/object:Gem::Version
|
221
|
-
version:
|
207
|
+
version: 1.1.0
|
222
208
|
type: :development
|
223
209
|
prerelease: false
|
224
210
|
version_requirements: !ruby/object:Gem::Requirement
|
225
211
|
requirements:
|
226
|
-
- - "
|
212
|
+
- - "~>"
|
227
213
|
- !ruby/object:Gem::Version
|
228
|
-
version:
|
214
|
+
version: 1.1.0
|
229
215
|
description: This library can be used as a module for 'fog' or as standalone libvirt
|
230
216
|
provider.
|
231
217
|
email: geemus@gmail.com
|
@@ -281,9 +267,12 @@ files:
|
|
281
267
|
- lib/fog/libvirt/requests/compute/mock_files/domain.xml
|
282
268
|
- lib/fog/libvirt/requests/compute/pool_action.rb
|
283
269
|
- lib/fog/libvirt/requests/compute/update_display.rb
|
270
|
+
- lib/fog/libvirt/requests/compute/upload_volume.rb
|
284
271
|
- lib/fog/libvirt/requests/compute/vm_action.rb
|
285
272
|
- lib/fog/libvirt/requests/compute/volume_action.rb
|
286
273
|
- lib/fog/libvirt/version.rb
|
274
|
+
- minitests/server/user_data_iso_test.rb
|
275
|
+
- minitests/test_helper.rb
|
287
276
|
- tests/helper.rb
|
288
277
|
- tests/helpers/formats_helper.rb
|
289
278
|
- tests/helpers/formats_helper_tests.rb
|