fog-libvirt 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|