qemu 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.
@@ -1,8 +1,13 @@
1
- module QEMU
2
1
 
2
+ module QEMU
3
+ def self.sh!(command)
4
+ logger.debug "Execute '#{command}'"
5
+ system command or raise "Command failed: '#{command}'"
6
+ end
3
7
  end
4
8
 
5
9
  require 'qemu/version'
10
+ require 'qemu/logger'
6
11
 
7
12
  require 'qemu/image'
8
13
  require 'qemu/daemon'
@@ -25,7 +25,7 @@ module QEMU
25
25
  end
26
26
 
27
27
  class Disk
28
-
28
+
29
29
  attr_accessor :file, :options
30
30
 
31
31
  def initialize(file, options = {})
@@ -34,9 +34,10 @@ module QEMU
34
34
  end
35
35
 
36
36
  def qemu_drive(index)
37
- {
37
+ {
38
38
  :file => File.expand_path(file),
39
39
  :index => index,
40
+ :if => "virtio"
40
41
  }.merge(options).map { |k,v| "#{k}=#{v}" }.join(',')
41
42
  end
42
43
 
@@ -48,7 +49,7 @@ module QEMU
48
49
  def vde_options
49
50
  @vde_options ||= { :sock => "/var/run/vde2/tap0.ctl" }
50
51
  end
51
-
52
+
52
53
  attr_accessor :vnc
53
54
 
54
55
  attr_accessor :monitor
@@ -93,7 +94,7 @@ module QEMU
93
94
 
94
95
  def command_env
95
96
  {}.tap do |env|
96
- env["QEMU_AUDIO_DRV"] = audio_driver
97
+ env["QEMU_AUDIO_DRV"] = audio_driver
97
98
  env["QEMU_ALSA_DAC_DEV"] = alsa_dac_dev if alsa_dac_dev
98
99
  env["QEMU_ALSA_ADC_DEV"] = alsa_adc_dev if alsa_adc_dev
99
100
  end
@@ -1,21 +1,51 @@
1
1
  module QEMU
2
2
  class Image
3
3
 
4
- attr_accessor :file, :size, :format
4
+ attr_accessor :file, :size, :format, :options
5
5
 
6
6
  def initialize(file, options = {})
7
7
  self.file = file
8
- options = options.merge :format => "raw"
8
+ options = { :format => self.class.file_format(file) }.merge options
9
9
  options.each { |k,v| send "#{k}=", v }
10
10
  end
11
11
 
12
+ def self.file_format(file)
13
+ case `file #{file}`
14
+ when /qcow/
15
+ "qcow2"
16
+ when /x86 boot sector/
17
+ "raw"
18
+ else
19
+ QEMU.logger.info "Unknown file format : #{file}"
20
+ "raw"
21
+ end
22
+ end
23
+
24
+ def options_arguments
25
+ if options
26
+ options_value = options.map { |k,v| "#{k}=#{v}" }.join(",")
27
+ "-o #{options_value}"
28
+ end
29
+ end
30
+
12
31
  def create
13
- system "qemu-img create -f #{format} #{file} #{size}"
32
+ QEMU.sh! "qemu-img create -f #{format} #{options_arguments} #{file} #{size}"
33
+ end
34
+
35
+ def self.output_file(file, format)
36
+ unless file.to_s.end_with? ".#{format}"
37
+ "#{file}.#{format}"
38
+ else
39
+ file
40
+ end
14
41
  end
15
42
 
16
43
  def convert(format, output_file = nil)
17
- output_file ||= "#{file}.#{format}"
18
- system "qemu-img convert -O #{format} #{file} #{output_file}" and output_file
44
+ output_file ||= self.class.output_file file, format
45
+ unless self.format.to_s == format.to_s
46
+ QEMU.sh! "qemu-img convert -O #{format} #{file} #{output_file}"
47
+ end
48
+ output_file
19
49
  end
20
50
 
21
51
  end
@@ -0,0 +1,28 @@
1
+ require "logger"
2
+ require "singleton"
3
+
4
+ class NullLogger
5
+ include Singleton
6
+
7
+ # To get the Logger API you can run this:
8
+ # (Logger.instance_methods.sort - Logger.methods).sort
9
+ [ :<<, :add, :close, :datetime_format,
10
+ :datetime_format=, :debug, :debug?, :error, :error?, :fatal,
11
+ :fatal?, :formatter, :formatter=, :info, :info?, :level, :level=,
12
+ :log, :progname, :progname=, :sev_threshold, :sev_threshold=,
13
+ :unknown, :warn, :warn? ].each do |method_name|
14
+ define_method method_name do |*args| end
15
+ end
16
+ end
17
+
18
+ module QEMU
19
+
20
+ @@logger = NullLogger.instance
21
+ def self.logger
22
+ @@logger
23
+ end
24
+ def self.logger=(logger)
25
+ @@logger = logger
26
+ end
27
+
28
+ end
@@ -6,18 +6,21 @@ module QEMU
6
6
  attr_accessor :host, :port, :timeout
7
7
 
8
8
  def initialize(attributes = {})
9
- attributes = { :host => "localhost", :timeout => 5 }.merge(attributes)
9
+ attributes = { :host => "localhost", :timeout => 30 }.merge(attributes)
10
10
  attributes.each { |k,v| send "#{k}=", v }
11
11
  end
12
12
 
13
13
  def telnet
14
- @telnet ||= Net::Telnet::new "Host" => host, "Port" => port, "Timeout" => timeout, "Prompt" => /\(qemu\) /
14
+ Net::Telnet::new "Host" => host, "Port" => port, "Timeout" => timeout, "Prompt" => /\(qemu\) /
15
15
  end
16
16
 
17
17
  def command(command)
18
- telnet.cmd command
18
+ telnet.tap do |telnet|
19
+ telnet.cmd command
20
+ telnet.close
21
+ end
19
22
  end
20
-
23
+
21
24
  def reset
22
25
  command "system_reset"
23
26
  end
@@ -1,3 +1,3 @@
1
1
  module QEMU
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qemu
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Alban Peignier
@@ -16,11 +16,12 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2013-05-19 00:00:00 Z
19
+ date: 2014-02-04 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
+ prerelease: false
22
23
  type: :development
23
- version_requirements: &id001 !ruby/object:Gem::Requirement
24
+ requirement: &id001 !ruby/object:Gem::Requirement
24
25
  none: false
25
26
  requirements:
26
27
  - - ~>
@@ -30,12 +31,12 @@ dependencies:
30
31
  - 1
31
32
  - 3
32
33
  version: "1.3"
33
- requirement: *id001
34
- prerelease: false
35
34
  name: bundler
35
+ version_requirements: *id001
36
36
  - !ruby/object:Gem::Dependency
37
+ prerelease: false
37
38
  type: :development
38
- version_requirements: &id002 !ruby/object:Gem::Requirement
39
+ requirement: &id002 !ruby/object:Gem::Requirement
39
40
  none: false
40
41
  requirements:
41
42
  - - ">="
@@ -44,12 +45,12 @@ dependencies:
44
45
  segments:
45
46
  - 0
46
47
  version: "0"
47
- requirement: *id002
48
- prerelease: false
49
48
  name: rake
49
+ version_requirements: *id002
50
50
  - !ruby/object:Gem::Dependency
51
+ prerelease: false
51
52
  type: :development
52
- version_requirements: &id003 !ruby/object:Gem::Requirement
53
+ requirement: &id003 !ruby/object:Gem::Requirement
53
54
  none: false
54
55
  requirements:
55
56
  - - ">="
@@ -58,12 +59,12 @@ dependencies:
58
59
  segments:
59
60
  - 0
60
61
  version: "0"
61
- requirement: *id003
62
- prerelease: false
63
62
  name: simplecov
63
+ version_requirements: *id003
64
64
  - !ruby/object:Gem::Dependency
65
+ prerelease: false
65
66
  type: :development
66
- version_requirements: &id004 !ruby/object:Gem::Requirement
67
+ requirement: &id004 !ruby/object:Gem::Requirement
67
68
  none: false
68
69
  requirements:
69
70
  - - ">="
@@ -72,12 +73,12 @@ dependencies:
72
73
  segments:
73
74
  - 0
74
75
  version: "0"
75
- requirement: *id004
76
- prerelease: false
77
76
  name: rspec
77
+ version_requirements: *id004
78
78
  - !ruby/object:Gem::Dependency
79
+ prerelease: false
79
80
  type: :development
80
- version_requirements: &id005 !ruby/object:Gem::Requirement
81
+ requirement: &id005 !ruby/object:Gem::Requirement
81
82
  none: false
82
83
  requirements:
83
84
  - - ">="
@@ -86,12 +87,12 @@ dependencies:
86
87
  segments:
87
88
  - 0
88
89
  version: "0"
89
- requirement: *id005
90
- prerelease: false
91
90
  name: guard
91
+ version_requirements: *id005
92
92
  - !ruby/object:Gem::Dependency
93
+ prerelease: false
93
94
  type: :development
94
- version_requirements: &id006 !ruby/object:Gem::Requirement
95
+ requirement: &id006 !ruby/object:Gem::Requirement
95
96
  none: false
96
97
  requirements:
97
98
  - - ">="
@@ -100,12 +101,12 @@ dependencies:
100
101
  segments:
101
102
  - 0
102
103
  version: "0"
103
- requirement: *id006
104
- prerelease: false
105
104
  name: guard-rspec
105
+ version_requirements: *id006
106
106
  - !ruby/object:Gem::Dependency
107
+ prerelease: false
107
108
  type: :development
108
- version_requirements: &id007 !ruby/object:Gem::Requirement
109
+ requirement: &id007 !ruby/object:Gem::Requirement
109
110
  none: false
110
111
  requirements:
111
112
  - - ">="
@@ -114,12 +115,12 @@ dependencies:
114
115
  segments:
115
116
  - 0
116
117
  version: "0"
117
- requirement: *id007
118
- prerelease: false
119
118
  name: rdoc
119
+ version_requirements: *id007
120
120
  - !ruby/object:Gem::Dependency
121
+ prerelease: false
121
122
  type: :runtime
122
- version_requirements: &id008 !ruby/object:Gem::Requirement
123
+ requirement: &id008 !ruby/object:Gem::Requirement
123
124
  none: false
124
125
  requirements:
125
126
  - - ">="
@@ -128,9 +129,8 @@ dependencies:
128
129
  segments:
129
130
  - 0
130
131
  version: "0"
131
- requirement: *id008
132
- prerelease: false
133
132
  name: daemons
133
+ version_requirements: *id008
134
134
  description: Create QEMU command lines, start and stop daemon, send monitor commands to a qemu instances, create or convert QEMU disks, etc .. in Ruby
135
135
  email:
136
136
  - alban@tryphon.eu
@@ -151,6 +151,7 @@ files:
151
151
  - lib/qemu/command.rb
152
152
  - lib/qemu/daemon.rb
153
153
  - lib/qemu/image.rb
154
+ - lib/qemu/logger.rb
154
155
  - lib/qemu/monitor.rb
155
156
  - lib/qemu/version.rb
156
157
  - qemu.gemspec