veewee 0.3.1 → 0.3.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.
- data/Gemfile +4 -0
- data/README.md +1 -1
- data/doc/definition.md +18 -0
- data/doc/kvm.md +28 -1
- data/doc/template.md +53 -2
- data/lib/veewee/command/fusion.rb +37 -3
- data/lib/veewee/command/vagrant/basebox.rb +2 -0
- data/lib/veewee/command/vagrant/winrm.rb +39 -0
- data/lib/veewee/command/vbox.rb +18 -0
- data/lib/veewee/definition.rb +13 -3
- data/lib/veewee/error.rb +3 -0
- data/lib/veewee/provider/core/box.rb +7 -0
- data/lib/veewee/provider/core/box/build.rb +34 -14
- data/lib/veewee/provider/core/box/copy.rb +17 -0
- data/lib/veewee/provider/core/box/exec.rb +31 -12
- data/lib/veewee/provider/core/box/floppy.rb +1 -0
- data/lib/veewee/provider/core/box/halt.rb +7 -3
- data/lib/veewee/provider/core/box/validate_tags.rb +8 -2
- data/lib/veewee/provider/core/box/wincp.rb +120 -0
- data/lib/veewee/provider/core/box/winrm.rb +59 -0
- data/lib/veewee/provider/core/helper/comm.rb +47 -0
- data/lib/veewee/provider/core/helper/web.rb +20 -9
- data/lib/veewee/provider/core/helper/winrm.rb +167 -0
- data/lib/veewee/provider/kvm/box/create.rb +59 -3
- data/lib/veewee/provider/kvm/provider.rb +6 -6
- data/lib/veewee/provider/parallels/box/helper/buildinfo.rb +1 -1
- data/lib/veewee/provider/virtualbox/box.rb +1 -0
- data/lib/veewee/provider/virtualbox/box/build.rb +4 -2
- data/lib/veewee/provider/virtualbox/box/create.rb +32 -12
- data/lib/veewee/provider/virtualbox/box/helper/buildinfo.rb +6 -3
- data/lib/veewee/provider/virtualbox/box/helper/create.rb +20 -5
- data/lib/veewee/provider/virtualbox/box/helper/winrm_options.rb +31 -0
- data/lib/veewee/provider/virtualbox/box/up.rb +33 -12
- data/lib/veewee/provider/virtualbox/box/winrm.rb +13 -0
- data/lib/veewee/provider/vmfusion/box.rb +2 -0
- data/lib/veewee/provider/vmfusion/box/add_share.rb +18 -0
- data/lib/veewee/provider/vmfusion/box/build.rb +3 -1
- data/lib/veewee/provider/vmfusion/box/create.rb +7 -2
- data/lib/veewee/provider/vmfusion/box/helper/buildinfo.rb +9 -6
- data/lib/veewee/provider/vmfusion/box/helper/ip.rb +1 -1
- data/lib/veewee/provider/vmfusion/box/helper/winrm_options.rb +21 -0
- data/lib/veewee/provider/vmfusion/box/template.rb +7 -3
- data/lib/veewee/provider/vmfusion/box/template.vmx.erb +6 -0
- data/lib/veewee/provider/vmfusion/box/winrm.rb +12 -0
- data/lib/veewee/provider/vmfusion/provider.rb +7 -1
- data/lib/veewee/version.rb +1 -1
- data/templates/CentOS-5.6-x86_64-netboot-packages/definition.rb +16 -0
- data/templates/CentOS-5.6-x86_64-netboot-packages/ks.cfg +47 -0
- data/templates/CentOS-5.6-x86_64-netboot-packages/postinstall.sh +61 -0
- data/templates/Debian-7.0-b3-amd64-netboot/base.sh +27 -0
- data/templates/Debian-7.0-b3-amd64-netboot/chef.sh +2 -0
- data/templates/Debian-7.0-b3-amd64-netboot/cleanup-virtualbox.sh +4 -0
- data/templates/Debian-7.0-b3-amd64-netboot/cleanup.sh +17 -0
- data/templates/Debian-7.0-b3-amd64-netboot/definition.rb +51 -0
- data/templates/Debian-7.0-b3-amd64-netboot/preseed.cfg +313 -0
- data/templates/Debian-7.0-b3-amd64-netboot/puppet.sh +2 -0
- data/templates/Debian-7.0-b3-amd64-netboot/ruby.sh +10 -0
- data/templates/Debian-7.0-b3-amd64-netboot/vagrant.sh +25 -0
- data/templates/Debian-7.0-b3-amd64-netboot/virtualbox.sh +13 -0
- data/templates/Debian-7.0-b3-amd64-netboot/zerodisk.sh +3 -0
- data/templates/Fedora-18-i386/definition.rb +17 -0
- data/templates/Fedora-18-i386/ks.cfg +75 -0
- data/templates/Fedora-18-i386/postinstall.sh +38 -0
- data/templates/Fedora-18-x86_64/definition.rb +17 -0
- data/templates/Fedora-18-x86_64/ks.cfg +75 -0
- data/templates/Fedora-18-x86_64/postinstall.sh +38 -0
- data/templates/OracleLinux-6.3-x86_64-DVD/base.sh +30 -0
- data/templates/OracleLinux-6.3-x86_64-DVD/chef.sh +3 -0
- data/templates/OracleLinux-6.3-x86_64-DVD/cleanup.sh +5 -0
- data/templates/OracleLinux-6.3-x86_64-DVD/definition.rb +40 -0
- data/templates/OracleLinux-6.3-x86_64-DVD/ks.cfg +42 -0
- data/templates/OracleLinux-6.3-x86_64-DVD/puppet.sh +12 -0
- data/templates/OracleLinux-6.3-x86_64-DVD/ruby.sh +3 -0
- data/templates/OracleLinux-6.3-x86_64-DVD/vagrant.sh +18 -0
- data/templates/OracleLinux-6.3-x86_64-DVD/virtualbox.sh +8 -0
- data/templates/OracleLinux-6.3-x86_64-DVD/zerodisk.sh +3 -0
- data/templates/funtoo-latest-x86_64/definition.rb +37 -0
- data/templates/funtoo-latest-x86_64/postinstall.sh +401 -0
- data/templates/openbsd50_amd64/definition.rb +3 -2
- data/templates/openbsd50_amd64/postinstall.sh +4 -4
- data/templates/openbsd50_i386/definition.rb +4 -4
- data/templates/openbsd52_amd64/README +28 -0
- data/templates/openbsd52_amd64/definition.rb +85 -0
- data/templates/openbsd52_amd64/postinstall.sh +81 -0
- data/templates/openbsd52_i386/README +28 -0
- data/templates/openbsd52_i386/definition.rb +85 -0
- data/templates/openbsd52_i386/postinstall.sh +81 -0
- data/templates/windows-2008R1-serverstandard-amd64/Autounattend.xml +6 -6
- data/templates/windows-2008R1-serverweb-amd64/install-winrm.bat +1 -1
- data/templates/windows-2008R2-serverstandard-amd64-winrm/Autounattend.xml +224 -0
- data/templates/windows-2008R2-serverstandard-amd64-winrm/README.md +87 -0
- data/templates/windows-2008R2-serverstandard-amd64-winrm/definition.rb +33 -0
- data/templates/windows-2008R2-serverstandard-amd64-winrm/install-chef.bat +2 -0
- data/templates/windows-2008R2-serverstandard-amd64-winrm/install-vbox.bat +4 -0
- data/templates/windows-2008R2-serverstandard-amd64-winrm/oracle-cert.cer +0 -0
- data/templates/windows-2008R2-serverstandard-amd64-winrm/postinstall.sh +74 -0
- data/templates/windows-7-enterprise-amd64-winrm/Autounattend.xml +227 -0
- data/templates/windows-7-enterprise-amd64-winrm/README.md +52 -0
- data/templates/windows-7-enterprise-amd64-winrm/definition.rb +27 -0
- data/templates/windows-7-enterprise-amd64-winrm/install-chef.bat +2 -0
- data/templates/windows-7-enterprise-amd64-winrm/install-fusion.bat +18 -0
- data/templates/windows-7-enterprise-amd64-winrm/install-puppet.bat +4 -0
- data/templates/windows-7-enterprise-amd64-winrm/install-vbox.bat +4 -0
- data/templates/windows-7-enterprise-amd64-winrm/oracle-cert.cer +0 -0
- data/templates/windows-7-enterprise-amd64-winrm/postinstall.bat +74 -0
- data/validation/veewee-windows.feature +34 -0
- data/veewee.gemspec +1 -1
- metadata +73 -7
|
@@ -9,13 +9,14 @@ module Veewee
|
|
|
9
9
|
|
|
10
10
|
class FileServlet < WEBrick::HTTPServlet::AbstractServlet
|
|
11
11
|
|
|
12
|
-
attr_reader :ui
|
|
12
|
+
attr_reader :ui, :threaded
|
|
13
13
|
|
|
14
|
-
def initialize(server,localfile,ui)
|
|
14
|
+
def initialize(server,localfile,ui,threaded)
|
|
15
15
|
super(server)
|
|
16
16
|
@server=server
|
|
17
17
|
@localfile=localfile
|
|
18
18
|
@ui=ui
|
|
19
|
+
@threaded=threaded
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
def do_GET(request,response)
|
|
@@ -30,18 +31,27 @@ module Veewee
|
|
|
30
31
|
ui.info "Serving file #{@localfile}"
|
|
31
32
|
content
|
|
32
33
|
end
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
if not @threaded
|
|
35
|
+
ui.info "Shutting down for #{@localfile}"
|
|
36
|
+
@server.shutdown
|
|
37
|
+
end
|
|
36
38
|
end
|
|
37
39
|
end
|
|
38
40
|
|
|
39
41
|
end
|
|
40
42
|
module Web
|
|
41
43
|
|
|
42
|
-
def wait_for_http_request(filename,options
|
|
44
|
+
def wait_for_http_request(filename,options) # original blocking
|
|
45
|
+
s = server_for_http_request(filename,options)
|
|
46
|
+
s.start
|
|
47
|
+
end
|
|
43
48
|
|
|
49
|
+
def allow_for_http_request(filename,options) # start in new thread
|
|
50
|
+
s = server_for_http_request(filename,options.merge({:threaded => true}))
|
|
51
|
+
Thread.new { s.start }
|
|
52
|
+
end
|
|
44
53
|
|
|
54
|
+
def server_for_http_request(filename,options={:timeout => 10, :web_dir => "", :port => 7125, :threaded => false})
|
|
45
55
|
# Calculate the OS equivalent of /dev/null , on windows this is NUL:
|
|
46
56
|
# http://www.ruby-forum.com/topic/115472
|
|
47
57
|
fn = test(?e, '/dev/null') ? '/dev/null' : 'NUL:'
|
|
@@ -55,14 +65,15 @@ module Veewee
|
|
|
55
65
|
:Logger => webrick_logger,
|
|
56
66
|
:AccessLog => webrick_logger
|
|
57
67
|
)
|
|
58
|
-
|
|
59
|
-
|
|
68
|
+
mount_filename = filename.start_with?('/') ? filename : "/#{filename}"
|
|
69
|
+
env.logger.debug("mounting file #{mount_filename}")
|
|
70
|
+
s.mount("#{mount_filename}", Veewee::Provider::Core::Helper::Servlet::FileServlet,File.join(web_dir,filename),ui,options[:threaded])
|
|
60
71
|
trap("INT"){
|
|
61
72
|
s.shutdown
|
|
62
73
|
ui.info "Stopping webserver"
|
|
63
74
|
exit
|
|
64
75
|
}
|
|
65
|
-
s
|
|
76
|
+
s
|
|
66
77
|
end
|
|
67
78
|
|
|
68
79
|
end #Class
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
module Veewee
|
|
2
|
+
module Provider
|
|
3
|
+
module Core
|
|
4
|
+
module Helper
|
|
5
|
+
|
|
6
|
+
class WinrmResult
|
|
7
|
+
attr_accessor :stdout
|
|
8
|
+
attr_accessor :stderr
|
|
9
|
+
attr_accessor :status
|
|
10
|
+
|
|
11
|
+
def initialize(stdout,stderr,status)
|
|
12
|
+
@stdout=stdout
|
|
13
|
+
@stderr=stderr
|
|
14
|
+
@status=status
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
module Winrm
|
|
19
|
+
|
|
20
|
+
require 'timeout'
|
|
21
|
+
require 'log4r'
|
|
22
|
+
require 'em-winrm'
|
|
23
|
+
require 'highline'
|
|
24
|
+
|
|
25
|
+
def winrm_up?(ip,options)
|
|
26
|
+
begin
|
|
27
|
+
if not @winrm_up
|
|
28
|
+
@httpcli = HTTPClient.new(:agent_name => 'Ruby WinRM Client')
|
|
29
|
+
@httpcli.receive_timeout = 10
|
|
30
|
+
@httpcli.set_auth(nil, options[:user], options[:pass])
|
|
31
|
+
@httpcli.get("http://#{ip}:#{options[:port]}/wsman")
|
|
32
|
+
@winrm_up = true
|
|
33
|
+
end
|
|
34
|
+
rescue HTTPClient::ReceiveTimeoutError,HTTPClient::ConnectTimeoutError
|
|
35
|
+
@winrm_up = false
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def when_winrm_login_works(ip="127.0.0.1", options = {}, &block)
|
|
41
|
+
|
|
42
|
+
#options=winrm_options.merge(options.merge({:operation_timeout => 5}))
|
|
43
|
+
options=winrm_options.merge(options)
|
|
44
|
+
@login_works ||= {}
|
|
45
|
+
begin
|
|
46
|
+
Timeout::timeout(options[:timeout]) do
|
|
47
|
+
if @login_works[ip]
|
|
48
|
+
block.call(ip);
|
|
49
|
+
else
|
|
50
|
+
env.ui.info "Waiting for winrm login on #{ip} with user #{options[:user]} to windows on port => #{options[:port]} to work, timeout=#{options[:timeout]} sec"
|
|
51
|
+
until @connected do
|
|
52
|
+
begin
|
|
53
|
+
sleep 1
|
|
54
|
+
env.ui.info ".",{:new_line => false}
|
|
55
|
+
next if not winrm_up?(ip, options)
|
|
56
|
+
winrm_execute(ip,"hostname",options.merge({:progress => nil}))
|
|
57
|
+
@login_works[ip]=true
|
|
58
|
+
env.ui.info "\n"
|
|
59
|
+
block.call(ip);
|
|
60
|
+
env.ui.info ""
|
|
61
|
+
sleep 1
|
|
62
|
+
@connected = true
|
|
63
|
+
return true
|
|
64
|
+
rescue Exception => e
|
|
65
|
+
puts e.inspect
|
|
66
|
+
puts e.message
|
|
67
|
+
puts e.backtrace.inspect
|
|
68
|
+
sleep 5
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
rescue Timeout::Error
|
|
74
|
+
env.ui.error "Winrm timeout #{options[:timeout]} sec has been reached."
|
|
75
|
+
exit -1
|
|
76
|
+
rescue WinRM::WinRMHTTPTransportError => e
|
|
77
|
+
if e.message =~ /401/
|
|
78
|
+
env.ui.error "Unable to authenticate as '#{options[:user]}' with password '#{options[:pass]}'"
|
|
79
|
+
else
|
|
80
|
+
raise e
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
return false
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def winrm_transfer_file(host,filename,destination = '.' , options = {})
|
|
88
|
+
options = winrm_options.merge(options.merge({:paranoid => false }))
|
|
89
|
+
# when_winrm_login_works
|
|
90
|
+
|
|
91
|
+
env.ui.info "FIXME: Transferring #{filename} to #{destination} "
|
|
92
|
+
# print these out while uploading:
|
|
93
|
+
env.ui.info ".",{:new_line => false}
|
|
94
|
+
# t::SSH.start( host,options[:user],options )
|
|
95
|
+
env.ui.info ""
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def new_session(host,options)
|
|
99
|
+
opts = winrm_options.merge(options)
|
|
100
|
+
# create a session
|
|
101
|
+
begin
|
|
102
|
+
endpoint = "http://#{host}:#{opts[:port]}/wsman"
|
|
103
|
+
client = ::WinRM::WinRMWebService.new(endpoint, :plaintext, opts)
|
|
104
|
+
if opts[:operation_timeout]
|
|
105
|
+
client.set_timeout(opts[:operation_timeout])
|
|
106
|
+
end
|
|
107
|
+
rescue ::WinRM::WinRMAuthorizationError => error
|
|
108
|
+
raise ::WinRM::WinRMAuthorizationError.new("#{error.message}@#{host}")
|
|
109
|
+
end
|
|
110
|
+
client
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def winrm_execute(host,command, options)
|
|
114
|
+
|
|
115
|
+
options = winrm_options.merge( # global default
|
|
116
|
+
{ # function defaults
|
|
117
|
+
:exitcode => "0",
|
|
118
|
+
:progress => "on"
|
|
119
|
+
}.merge(
|
|
120
|
+
options # calling override
|
|
121
|
+
))
|
|
122
|
+
stdout=""
|
|
123
|
+
stderr=""
|
|
124
|
+
status=-99999
|
|
125
|
+
|
|
126
|
+
@session ||= new_session(host, options)
|
|
127
|
+
|
|
128
|
+
env.ui.info "Executing winrm command: #{command}" if options[:progress]
|
|
129
|
+
|
|
130
|
+
@remote_id ||= @session.open_shell
|
|
131
|
+
command_id = @session.run_command(@remote_id, command)
|
|
132
|
+
output = @session.get_command_output(@remote_id, command_id) do |out,error|
|
|
133
|
+
if out
|
|
134
|
+
stdout += out
|
|
135
|
+
env.ui.info out,{:new_line => false} if options[:progress]
|
|
136
|
+
end
|
|
137
|
+
if error
|
|
138
|
+
stderr += error
|
|
139
|
+
env.ui.info error,{:new_line => false} if options[:progress]
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
status = output[:exitcode]
|
|
143
|
+
@session.close_shell(@remote_id)
|
|
144
|
+
@remote_id = nil
|
|
145
|
+
# env.ui.info "EXITCODE: #{status}" if status > 0
|
|
146
|
+
# @session.unbind
|
|
147
|
+
# FIXME: May want to look for a list of possible exitcodes
|
|
148
|
+
if (status.to_s != options[:exitcode] )
|
|
149
|
+
if (options[:exitcode]=="*")
|
|
150
|
+
#its a test so we don't need to worry
|
|
151
|
+
else
|
|
152
|
+
raise "Exitcode was not what we expected"
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
return Veewee::Provider::Core::Helper::WinrmResult.new(stdout,stderr,status)
|
|
158
|
+
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
end #Class
|
|
164
|
+
end #Module
|
|
165
|
+
end #Module
|
|
166
|
+
end #Module
|
|
167
|
+
end #Module
|
|
@@ -16,17 +16,73 @@ module Veewee
|
|
|
16
16
|
|
|
17
17
|
def create_server(options)
|
|
18
18
|
#memory_size,cpu_count, volume_size
|
|
19
|
-
|
|
19
|
+
# verify some stuff before trying to create the server
|
|
20
|
+
kvm_options = definition.kvm[:vm_options][0]
|
|
21
|
+
# Create the "server"
|
|
22
|
+
attributes = {
|
|
20
23
|
:name => name,
|
|
21
24
|
:memory_size => definition.memory_size.to_i*1024,
|
|
22
25
|
:cpus => definition.cpu_count.to_i,
|
|
23
26
|
:volume_capacity => "#{definition.disk_size}M",
|
|
24
27
|
:domain_type => options['use_emulation'] ? 'qemu': 'kvm',
|
|
25
|
-
:network_interface_type => "network",
|
|
26
28
|
:iso_file => definition.iso_file,
|
|
27
29
|
:arch => definition.os_type_id.end_with?("_64") ? "x86_64" : "i686",
|
|
28
30
|
:iso_dir => env.config.veewee.iso_dir
|
|
29
|
-
|
|
31
|
+
}
|
|
32
|
+
# Check for network stuff (default, bridge)
|
|
33
|
+
check_network(kvm_options, attributes)
|
|
34
|
+
# Check for pool (storage)
|
|
35
|
+
check_pool(kvm_options, attributes)
|
|
36
|
+
s=@connection.servers.create(attributes)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Check the network availability of the defined network for kvm
|
|
40
|
+
def check_network(options, attributes)
|
|
41
|
+
env.logger.info "Checking network"
|
|
42
|
+
if options.nil? or options.empty? or options["network_type"].nil? or options["network_type"] == "network"
|
|
43
|
+
check_default_network
|
|
44
|
+
attributes[:network_interface_type] = "network"
|
|
45
|
+
elsif options["network_type"] == "bridge"
|
|
46
|
+
options["network_bridge_name"].nil?
|
|
47
|
+
if options["network_bridge_name"].nil?
|
|
48
|
+
raise Veewee::Error, "You need to specify a 'network_bridge_name' if you plan to use 'bridge' as network type"
|
|
49
|
+
else
|
|
50
|
+
attributes[:network_interface_type] = "bridge"
|
|
51
|
+
attributes[:network_bridge_name] = "#{options["network_bridge_name"]}"
|
|
52
|
+
end
|
|
53
|
+
else
|
|
54
|
+
raise Veewee::Error, "You specified a 'network_type' that isn't known (#{options["network_type"]})"
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def check_default_network
|
|
59
|
+
# Nothing specified, we check for default network
|
|
60
|
+
conn = ::Libvirt::open("qemu:///system")
|
|
61
|
+
networks=conn.list_networks
|
|
62
|
+
if networks.count < 1
|
|
63
|
+
raise Veewee::Error, "You need at least one (active) network defined or customize your definition. This needs to be available if you connect to qemu:///system."
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Check the given pool and append to attributes
|
|
68
|
+
# Note: volume_pool_name is not working in fog library version 1.7.0.
|
|
69
|
+
# This should be fixed in the next release.
|
|
70
|
+
def check_pool(options, attributes)
|
|
71
|
+
env.logger.info "Checking pool storage"
|
|
72
|
+
if not options.nil? and not options.empty? and not options["pool_name"].nil?
|
|
73
|
+
conn = ::Libvirt::open("qemu:///system")
|
|
74
|
+
# Checking if the pool exists and if it is active
|
|
75
|
+
begin
|
|
76
|
+
storage = conn.lookup_storage_pool_by_name(options["pool_name"])
|
|
77
|
+
rescue Libvirt::RetrieveError
|
|
78
|
+
raise Veewee::Error, "You've specified an non-existent storage pool (#{options["pool_name"]})"
|
|
79
|
+
end
|
|
80
|
+
if storage.active?
|
|
81
|
+
attributes[:volume_pool_name] = options["pool_name"]
|
|
82
|
+
else
|
|
83
|
+
raise Veewee::Error, "The storage pool '#{options["pool_name"]}' is not started. Start it and restart the creation process"
|
|
84
|
+
end
|
|
85
|
+
end
|
|
30
86
|
end
|
|
31
87
|
|
|
32
88
|
# Create the volume of a new vm
|
|
@@ -32,12 +32,12 @@ module Veewee
|
|
|
32
32
|
raise Veewee::Error,"You need at least one (active) storage pool defined. This needs to be available if you connect to qemu:///system"
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
env.logger.info "Checking available networks"
|
|
36
|
-
networks=conn.list_networks
|
|
37
|
-
env.logger.info "Networks: #{networks.join(',')}"
|
|
38
|
-
if networks.count < 1
|
|
39
|
-
|
|
40
|
-
end
|
|
35
|
+
#env.logger.info "Checking available networks"
|
|
36
|
+
#networks=conn.list_networks
|
|
37
|
+
#env.logger.info "Networks: #{networks.join(',')}"
|
|
38
|
+
#if networks.count < 1
|
|
39
|
+
# raise Veewee::Error,"You need at least one (active) network defined. This needs to be available if you connect to qemu:///system"
|
|
40
|
+
#end
|
|
41
41
|
|
|
42
42
|
# http://www.libvirt.org/html/libvirt-libvirt.html#virGetVersion
|
|
43
43
|
# format major * 1,000,000 + minor * 1,000 + release
|
|
@@ -36,7 +36,7 @@ module Veewee
|
|
|
36
36
|
|
|
37
37
|
ui.info "About to transfer parallels tools iso buildinfo to the box #{name} - #{ip_address} - #{ssh_options}"
|
|
38
38
|
iso_image=guest_iso_path
|
|
39
|
-
self.
|
|
39
|
+
self.copy_to_box(iso_image,File.basename(iso_image))
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
end
|
|
@@ -14,6 +14,7 @@ require 'veewee/provider/virtualbox/box/helper/ip'
|
|
|
14
14
|
require 'veewee/provider/virtualbox/box/helper/forwarding'
|
|
15
15
|
require 'veewee/provider/virtualbox/box/helper/natinterface'
|
|
16
16
|
require 'veewee/provider/virtualbox/box/helper/ssh_options'
|
|
17
|
+
require 'veewee/provider/virtualbox/box/helper/winrm_options'
|
|
17
18
|
require 'veewee/provider/virtualbox/box/helper/guest_additions'
|
|
18
19
|
require 'veewee/provider/virtualbox/box/helper/status'
|
|
19
20
|
require 'veewee/provider/virtualbox/box/helper/version'
|
|
@@ -4,14 +4,16 @@ module Veewee
|
|
|
4
4
|
module BoxCommand
|
|
5
5
|
|
|
6
6
|
def build(options={})
|
|
7
|
-
|
|
7
|
+
|
|
8
|
+
super(options)
|
|
8
9
|
|
|
9
10
|
unless definition.floppy_files.nil?
|
|
10
11
|
unless self.shell_exec("java -version").status == 0
|
|
11
12
|
raise Veewee::Error,"This box contains floppyfiles, to create it you require to have java installed or have it in your path"
|
|
12
13
|
end
|
|
13
14
|
end
|
|
14
|
-
|
|
15
|
+
|
|
16
|
+
download_vbox_guest_additions_iso(options)
|
|
15
17
|
end
|
|
16
18
|
|
|
17
19
|
end
|
|
@@ -12,13 +12,6 @@ module Veewee
|
|
|
12
12
|
raise Veewee::Error,"To create the vm '#{name}' the directory '#{box_directory}' needs to be empty. \nThis could be caused by an badly closed vm.\nRemove it manually before you proceed."
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
guessed_port=guess_free_port(definition.ssh_host_port.to_i,definition.ssh_host_port.to_i+40).to_s
|
|
16
|
-
if guessed_port.to_s!=definition.ssh_host_port
|
|
17
|
-
env.ui.warn "Changing ssh port from #{definition.ssh_host_port} to #{guessed_port}"
|
|
18
|
-
definition.ssh_host_port=guessed_port.to_s
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
|
|
22
15
|
# Suppress those annoying virtualbox messages
|
|
23
16
|
self.suppress_messages
|
|
24
17
|
|
|
@@ -36,19 +29,46 @@ module Veewee
|
|
|
36
29
|
#Create a disk with the same name as the box_name
|
|
37
30
|
self.create_disk
|
|
38
31
|
|
|
32
|
+
use_sata = definition.use_sata
|
|
33
|
+
if use_sata
|
|
34
|
+
disk_device_number = 0
|
|
35
|
+
isofile_ide_device_number = 0
|
|
36
|
+
else
|
|
37
|
+
disk_device_number = 0
|
|
38
|
+
isofile_ide_device_number = 1
|
|
39
|
+
end
|
|
40
|
+
|
|
39
41
|
self.add_ide_controller
|
|
40
|
-
|
|
42
|
+
if use_sata
|
|
43
|
+
self.add_sata_controller
|
|
44
|
+
self.attach_disk_sata(disk_device_number)
|
|
45
|
+
else
|
|
46
|
+
self.attach_disk_ide(disk_device_number)
|
|
47
|
+
end
|
|
48
|
+
self.attach_isofile(isofile_ide_device_number)
|
|
41
49
|
self.attach_guest_additions
|
|
42
50
|
|
|
43
|
-
self.add_sata_controller
|
|
44
|
-
self.attach_disk
|
|
45
|
-
|
|
46
51
|
self.create_floppy("virtualfloppy.vfd")
|
|
47
52
|
|
|
48
53
|
self.add_floppy_controller
|
|
49
54
|
self.attach_floppy
|
|
50
55
|
|
|
51
|
-
|
|
56
|
+
if definition.winrm_user && definition.winrm_password # prefer winrm
|
|
57
|
+
env.ui.warn "Using winrm because winrm_user and winrm_password are both set"
|
|
58
|
+
guessed_port=guess_free_port(definition.winrm_host_port.to_i,definition.winrm_host_port.to_i+40).to_s
|
|
59
|
+
if guessed_port.to_s!=definition.winrm_host_port
|
|
60
|
+
env.ui.warn "Changing winrm port from #{definition.winrm_host_port} to #{guessed_port}"
|
|
61
|
+
definition.winrm_host_port=guessed_port.to_s
|
|
62
|
+
end
|
|
63
|
+
self.add_winrm_nat_mapping
|
|
64
|
+
else
|
|
65
|
+
guessed_port=guess_free_port(definition.ssh_host_port.to_i,definition.ssh_host_port.to_i+40).to_s
|
|
66
|
+
if guessed_port.to_s!=definition.ssh_host_port
|
|
67
|
+
env.ui.warn "Changing ssh port from #{definition.ssh_host_port} to #{guessed_port}"
|
|
68
|
+
definition.ssh_host_port=guessed_port.to_s
|
|
69
|
+
end
|
|
70
|
+
self.add_ssh_nat_mapping
|
|
71
|
+
end
|
|
52
72
|
|
|
53
73
|
end
|
|
54
74
|
|
|
@@ -14,9 +14,12 @@ module Veewee
|
|
|
14
14
|
#
|
|
15
15
|
def transfer_buildinfo(options)
|
|
16
16
|
super(options)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
# with windows, we just use the mounted volume
|
|
18
|
+
if not (definition.winrm_user && definition.winrm_password)
|
|
19
|
+
iso_image="VBoxGuestAdditions_#{self.vboxga_version}.iso"
|
|
20
|
+
env.logger.info "About to transfer virtualbox guest additions iso to the box #{name} - #{ip_address} - #{ssh_options}"
|
|
21
|
+
self.copy_to_box("#{File.join(env.config.veewee.iso_dir,iso_image)}",File.basename(iso_image))
|
|
22
|
+
end
|
|
20
23
|
end
|
|
21
24
|
|
|
22
25
|
end
|