veewee 0.3.0.alpha6 → 0.3.0.alpha7
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/lib/veewee/command/kvm.rb +1 -1
- data/lib/veewee/command/vagrant/basebox.rb +2 -0
- data/lib/veewee/command/vagrant/build.rb +1 -1
- data/lib/veewee/command/vagrant/define.rb +1 -1
- data/lib/veewee/command/vagrant/destroy.rb +1 -1
- data/lib/veewee/command/vagrant/export.rb +1 -1
- data/lib/veewee/command/vagrant/halt.rb +1 -1
- data/lib/veewee/command/vagrant/list.rb +2 -2
- data/lib/veewee/command/vagrant/ostypes.rb +2 -2
- data/lib/veewee/command/vagrant/ssh.rb +1 -2
- data/lib/veewee/command/vagrant/templates.rb +3 -3
- data/lib/veewee/command/vagrant/undefine.rb +2 -2
- data/lib/veewee/command/vagrant/up.rb +1 -1
- data/lib/veewee/command/vagrant/validate.rb +44 -0
- data/lib/veewee/command/virtualbox.rb +3 -3
- data/lib/veewee/config/definition.rb +4 -4
- data/lib/veewee/definition.rb +8 -0
- data/lib/veewee/provider/core/box.rb +7 -0
- data/lib/veewee/provider/core/box/build.rb +12 -12
- data/lib/veewee/provider/core/box/exec.rb +2 -2
- data/lib/veewee/provider/core/box/scp.rb +2 -2
- data/lib/veewee/provider/core/box/ssh.rb +1 -1
- data/lib/veewee/provider/core/box/vnc.rb +3 -3
- data/lib/veewee/provider/core/helper/iso.rb +30 -30
- data/lib/veewee/provider/core/helper/scancode.rb +1 -1
- data/lib/veewee/provider/core/helper/shell.rb +6 -6
- data/lib/veewee/provider/core/helper/ssh.rb +15 -17
- data/lib/veewee/provider/core/helper/tcp.rb +4 -4
- data/lib/veewee/provider/core/helper/web.rb +6 -6
- data/lib/veewee/provider/core/provider.rb +20 -13
- data/lib/veewee/provider/core/provider/tunnel.rb +8 -8
- data/lib/veewee/provider/kvm/box/helper/console_type.rb +1 -1
- data/lib/veewee/provider/kvm/box/validate_kvm.rb +2 -2
- data/lib/veewee/provider/parallels/box/create.rb +1 -1
- data/lib/veewee/provider/parallels/box/destroy.rb +1 -1
- data/lib/veewee/provider/parallels/box/helper/buildinfo.rb +1 -1
- data/lib/veewee/provider/parallels/box/helper/console_type.rb +5 -5
- data/lib/veewee/provider/parallels/box/validate_parallels.rb +2 -2
- data/lib/veewee/provider/virtualbox/box/destroy.rb +7 -7
- data/lib/veewee/provider/virtualbox/box/export_vagrant.rb +18 -18
- data/lib/veewee/provider/virtualbox/box/helper/console_type.rb +8 -8
- data/lib/veewee/provider/virtualbox/box/helper/create.rb +8 -8
- data/lib/veewee/provider/virtualbox/box/helper/guest_additions.rb +1 -1
- data/lib/veewee/provider/virtualbox/box/poweroff.rb +1 -1
- data/lib/veewee/provider/virtualbox/box/up.rb +2 -2
- data/lib/veewee/provider/virtualbox/box/validate_vagrant.rb +3 -3
- data/lib/veewee/providers.rb +1 -1
- data/lib/veewee/ui.rb +2 -0
- data/lib/veewee/version.rb +1 -1
- data/templates/CentOS-5.7-i386-netboot/definition.rb +1 -1
- data/templates/CentOS-5.7-i386-netboot/ks.cfg +1 -1
- data/templates/Debian-6.0.3-amd64-netboot/definition.rb +1 -1
- data/templates/Debian-6.0.3-i386-netboot/definition.rb +1 -1
- metadata +3 -2
@@ -98,7 +98,7 @@ module Veewee
|
|
98
98
|
if !code.nil?
|
99
99
|
keycodes=keycodes+code+' '
|
100
100
|
else
|
101
|
-
|
101
|
+
ui.error "no scan code for #{thestring.slice(0,1)}"
|
102
102
|
end
|
103
103
|
#pop one
|
104
104
|
thestring=thestring.slice(1,thestring.length-1)
|
@@ -24,7 +24,7 @@ module Veewee
|
|
24
24
|
defaults={:mute => true, :status => 0}
|
25
25
|
options=defaults.merge(options)
|
26
26
|
result=ShellResult.new("","",-1)
|
27
|
-
|
27
|
+
ui.info "Executing #{command}" unless options[:mute]
|
28
28
|
env.logger.debug "Command: \"#{command}\""
|
29
29
|
env.logger.debug "Output:"
|
30
30
|
env.logger.debug "-------"
|
@@ -32,15 +32,15 @@ module Veewee
|
|
32
32
|
IO.popen("#{escaped_command}"+ " 2>&1") { |p|
|
33
33
|
p.each_line{ |l|
|
34
34
|
result.stdout+=l
|
35
|
-
|
35
|
+
ui.info(l,{:new_line => false}) unless options[:mute]
|
36
36
|
env.logger.debug(l.chomp)
|
37
37
|
}
|
38
38
|
result.status=Process.waitpid2(p.pid)[1].exitstatus
|
39
39
|
if result.status.to_i!=options[:status]
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
40
|
+
ui.error "Error: We executed a shell command and the exit status was not #{options[:status]}"
|
41
|
+
ui.error "- Command :#{command}."
|
42
|
+
ui.error "- Exitcode :#{result.status}."
|
43
|
+
ui.error "- Output :\n#{result.stdout}"
|
44
44
|
raise Veewee::Error,"Wrong exit code for command #{command}"
|
45
45
|
end
|
46
46
|
}
|
@@ -26,19 +26,18 @@ module Veewee
|
|
26
26
|
|
27
27
|
options=defaults.merge(options)
|
28
28
|
|
29
|
-
|
29
|
+
ui.info "Waiting for ssh login on #{ip} with user #{options[:user]} to sshd on port => #{options[:port]} to work, timeout=#{options[:timeout]} sec"
|
30
30
|
|
31
31
|
begin
|
32
32
|
Timeout::timeout(options[:timeout]) do
|
33
33
|
connected=false
|
34
34
|
while !connected do
|
35
35
|
begin
|
36
|
-
env.ui.info ".",{:new_line => false}
|
36
|
+
env.ui.info ".",{:new_line => false , :prefix => false}
|
37
37
|
Net::SSH.start(ip, options[:user], { :port => options[:port] , :password => options[:password], :paranoid => false , :timeout => options[:timeout] }) do |ssh|
|
38
|
-
env.ui.info "\n"
|
39
38
|
|
39
|
+
ui.info "\n", {:prefix => false}
|
40
40
|
block.call(ip);
|
41
|
-
env.ui.info ""
|
42
41
|
return true
|
43
42
|
end
|
44
43
|
rescue Net::SSH::Disconnect,Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::ECONNABORTED, Errno::ECONNRESET, Errno::ENETUNREACH,Errno::ETIMEDOUT, Errno::ENETUNREACH
|
@@ -47,10 +46,10 @@ module Veewee
|
|
47
46
|
end
|
48
47
|
end
|
49
48
|
rescue Timeout::Error
|
50
|
-
|
49
|
+
ui.error "Ssh timeout #{options[:timeout]} sec has been reached."
|
51
50
|
exit -1
|
52
51
|
end
|
53
|
-
|
52
|
+
ui.info ""
|
54
53
|
return false
|
55
54
|
end
|
56
55
|
|
@@ -61,14 +60,13 @@ module Veewee
|
|
61
60
|
options=defaults.merge(options)
|
62
61
|
|
63
62
|
Net::SSH.start( host,options[:user],options ) do |ssh|
|
64
|
-
|
63
|
+
ui.info "Transferring #{filename} to #{destination} "
|
65
64
|
ssh.scp.upload!( filename, destination ) do |ch, name, sent, total|
|
66
65
|
# print "\r#{destination}: #{(sent.to_f * 100 / total.to_f).to_i}%"
|
67
|
-
env.ui.info ".",{:new_line => false}
|
68
|
-
|
66
|
+
env.ui.info ".",{:new_line => false , :prefix => false}
|
69
67
|
end
|
70
68
|
end
|
71
|
-
|
69
|
+
ui.info "", {:prefix => false}
|
72
70
|
end
|
73
71
|
|
74
72
|
|
@@ -81,7 +79,7 @@ module Veewee
|
|
81
79
|
stderr=""
|
82
80
|
status=-99999
|
83
81
|
|
84
|
-
|
82
|
+
ui.info "Executing command: #{command}"
|
85
83
|
|
86
84
|
Net::SSH.start(host, options[:user], { :port => options[:port], :password => options[:password], :paranoid => false }) do |ssh|
|
87
85
|
|
@@ -102,7 +100,7 @@ module Veewee
|
|
102
100
|
ch.on_data do |c, data|
|
103
101
|
stdout+=data
|
104
102
|
|
105
|
-
|
103
|
+
ui.info data
|
106
104
|
|
107
105
|
end
|
108
106
|
|
@@ -110,7 +108,7 @@ module Veewee
|
|
110
108
|
ch.on_extended_data do |c, type, data|
|
111
109
|
stderr+=data
|
112
110
|
|
113
|
-
|
111
|
+
ui.info data
|
114
112
|
|
115
113
|
end
|
116
114
|
|
@@ -120,18 +118,18 @@ module Veewee
|
|
120
118
|
exit_code = data.read_long
|
121
119
|
status=exit_code
|
122
120
|
if exit_code > 0
|
123
|
-
|
121
|
+
ui.info "ERROR: exit code #{exit_code}"
|
124
122
|
else
|
125
|
-
#
|
123
|
+
#ui.info "Successfully executed"
|
126
124
|
end
|
127
125
|
end
|
128
126
|
|
129
127
|
channel.on_request("exit-signal") do |ch, data|
|
130
|
-
|
128
|
+
ui.info "SIGNAL: #{data.read_long}"
|
131
129
|
end
|
132
130
|
|
133
131
|
ch.on_close {
|
134
|
-
#
|
132
|
+
#ui.info "done!"
|
135
133
|
}
|
136
134
|
#status=ch.exec "echo $?"
|
137
135
|
end
|
@@ -26,7 +26,7 @@ module Veewee
|
|
26
26
|
|
27
27
|
# This tries to guess a local free tcp port
|
28
28
|
def guess_free_port(min_port,max_port)
|
29
|
-
|
29
|
+
ui.info "Received port hint - #{min_port}"
|
30
30
|
|
31
31
|
guessed_port=nil
|
32
32
|
|
@@ -38,10 +38,10 @@ module Veewee
|
|
38
38
|
end
|
39
39
|
|
40
40
|
if guessed_port.nil?
|
41
|
-
|
41
|
+
ui.error "No free port available: tried #{min_port}..#{max_port}"
|
42
42
|
exit -1
|
43
43
|
else
|
44
|
-
|
44
|
+
ui.info "Found port #{guessed_port} available"
|
45
45
|
end
|
46
46
|
|
47
47
|
return guessed_port
|
@@ -58,7 +58,7 @@ module Veewee
|
|
58
58
|
connected=false
|
59
59
|
while !connected do
|
60
60
|
begin
|
61
|
-
|
61
|
+
ui.info "trying connection"
|
62
62
|
s = TCPSocket.new(ip, options[:port])
|
63
63
|
s.close
|
64
64
|
block.call(ip);
|
@@ -9,19 +9,19 @@ module Veewee
|
|
9
9
|
|
10
10
|
class FileServlet < WEBrick::HTTPServlet::AbstractServlet
|
11
11
|
|
12
|
-
attr_reader :
|
12
|
+
attr_reader :ui
|
13
13
|
|
14
|
-
def initialize(server,localfile,
|
14
|
+
def initialize(server,localfile,ui)
|
15
15
|
super(server)
|
16
16
|
@server=server
|
17
17
|
@localfile=localfile
|
18
|
-
@
|
18
|
+
@ui=ui
|
19
19
|
end
|
20
20
|
|
21
21
|
def do_GET(request,response)
|
22
22
|
response['Content-Type']='text/plain'
|
23
23
|
response.status = 200
|
24
|
-
|
24
|
+
ui.info "Serving file #{@localfile}"
|
25
25
|
displayfile=File.open(@localfile,'r')
|
26
26
|
content=displayfile.read()
|
27
27
|
response.body=content
|
@@ -51,10 +51,10 @@ module Veewee
|
|
51
51
|
:AccessLog => webrick_logger
|
52
52
|
)
|
53
53
|
env.logger.debug("mounting file /#{filename}")
|
54
|
-
s.mount("/#{filename}", Veewee::Provider::Core::Helper::Servlet::FileServlet,File.join(web_dir,filename),
|
54
|
+
s.mount("/#{filename}", Veewee::Provider::Core::Helper::Servlet::FileServlet,File.join(web_dir,filename),ui)
|
55
55
|
trap("INT"){
|
56
56
|
s.shutdown
|
57
|
-
|
57
|
+
ui.info "Stopping webserver"
|
58
58
|
exit
|
59
59
|
}
|
60
60
|
s.start
|
@@ -12,6 +12,13 @@ module Veewee
|
|
12
12
|
|
13
13
|
include ::Veewee::Provider::Core::Helper::Shell
|
14
14
|
|
15
|
+
def ui
|
16
|
+
return @_ui if defined?(@_ui)
|
17
|
+
@_ui = @env.ui.dup
|
18
|
+
@_ui.resource = @name
|
19
|
+
@_ui
|
20
|
+
end
|
21
|
+
|
15
22
|
def initialize(name,options,env)
|
16
23
|
|
17
24
|
@env=env
|
@@ -29,7 +36,7 @@ module Veewee
|
|
29
36
|
# Get a real box object from the Provider
|
30
37
|
box=Object.const_get("Veewee").const_get("Provider").const_get(type.to_s.capitalize).const_get("Box").new(name,env)
|
31
38
|
rescue Error => ex
|
32
|
-
|
39
|
+
ui.error "Could not instante the box #{name} with provider #{type} ,#{ex}"
|
33
40
|
raise
|
34
41
|
end
|
35
42
|
end
|
@@ -44,19 +51,19 @@ module Veewee
|
|
44
51
|
end
|
45
52
|
|
46
53
|
def gem_available?(gemname)
|
47
|
-
|
54
|
+
env.logger.info "Checking for gem #{gemname}"
|
55
|
+
available=false
|
56
|
+
begin
|
57
|
+
available=true unless Gem::Specification::find_by_name("#{gemname}").nil?
|
58
|
+
rescue Gem::LoadError
|
59
|
+
env.logger.info "Error loading gem #{gemname}"
|
48
60
|
available=false
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
env.logger.info "Falling back to old syntax for #{gemname}"
|
56
|
-
available=Gem.available?("#{gemname}")
|
57
|
-
env.logger.info "Old syntax #{gemname}.available? #{available}"
|
58
|
-
end
|
59
|
-
return available
|
61
|
+
rescue
|
62
|
+
env.logger.info "Falling back to old syntax for #{gemname}"
|
63
|
+
available=Gem.available?("#{gemname}")
|
64
|
+
env.logger.info "Old syntax #{gemname}.available? #{available}"
|
65
|
+
end
|
66
|
+
return available
|
60
67
|
end
|
61
68
|
|
62
69
|
def gems_available?(names)
|
@@ -13,27 +13,27 @@ module Veewee
|
|
13
13
|
host=@connection.uri.host
|
14
14
|
user=@connection.uri.user
|
15
15
|
|
16
|
-
|
16
|
+
ui.info "Enabling tunneling"
|
17
17
|
@forward_threads=Array.new
|
18
18
|
@forward_threads<< Thread.new {
|
19
19
|
Net::SSH.start(host, user, ssh_options) do |ssh_session|
|
20
20
|
forwardings.each do |forwarding|
|
21
21
|
begin
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
ui.info "Forwarding remote port #{forwarding[:remote_port]} from #{box_name} to local port #{forwarding[:local_port]}"
|
23
|
+
ui.info host
|
24
|
+
ui.info user
|
25
|
+
ui.info ""
|
26
26
|
ssh_session.forward.local(forwarding[:local_port], "127.0.0.1",forwarding[:remote_port])
|
27
27
|
rescue Errno::EACCES
|
28
|
-
|
28
|
+
ui.info " Error - Access denied to forward remote port #{forwarding[:remote_port]} from #{name} to local port #{forwarding[:local_port]}"
|
29
29
|
end
|
30
30
|
end
|
31
31
|
ssh_session.loop {true}
|
32
32
|
end
|
33
33
|
}
|
34
|
-
|
34
|
+
ui.info @forward_threads.first.status
|
35
35
|
@forward_threads.first.run
|
36
|
-
|
36
|
+
ui.info @forward_threads.first.status
|
37
37
|
|
38
38
|
end
|
39
39
|
|
@@ -10,7 +10,7 @@ module Veewee
|
|
10
10
|
def console_type(sequence,type_options={})
|
11
11
|
vnc_port=@connection.servers.all(:name => name).first.vnc_port
|
12
12
|
display_port=vnc_port.to_i - 5900
|
13
|
-
|
13
|
+
ui.success "Sending keystrokes to VNC port :#{display_port} - TCP port: #{vnc_port}"
|
14
14
|
vnc_type(sequence,"127.0.0.1",display_port)
|
15
15
|
end
|
16
16
|
|
@@ -34,8 +34,8 @@ module Veewee
|
|
34
34
|
rescue SystemExit => e
|
35
35
|
Kernel.exit(e.status)
|
36
36
|
rescue Exception => e
|
37
|
-
|
38
|
-
|
37
|
+
ui.error("#{e.message} (#{e.class})")
|
38
|
+
ui.error(e.backtrace.join("\n"))
|
39
39
|
Kernel.exit(1)
|
40
40
|
end
|
41
41
|
|
@@ -45,7 +45,7 @@ module Veewee
|
|
45
45
|
#
|
46
46
|
# Attach cdrom
|
47
47
|
full_iso_file=File.join(env.config.veewee.iso_dir,definition.iso_file)
|
48
|
-
|
48
|
+
ui.info "Mounting cdrom: #{full_iso_file}"
|
49
49
|
command ="prlctl set '#{self.name}' --device-add cdrom --enable --image '#{full_iso_file}'"
|
50
50
|
shell_exec("#{command}")
|
51
51
|
|
@@ -34,7 +34,7 @@ module Veewee
|
|
34
34
|
# When we get here, ssh is available and no postinstall scripts have been executed yet
|
35
35
|
# So we begin by transferring the ISO file of the vmware tools
|
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
39
|
self.scp(iso_image,File.basename(iso_image))
|
40
40
|
end
|
@@ -11,13 +11,13 @@ module Veewee
|
|
11
11
|
|
12
12
|
def send_sequence(sequence)
|
13
13
|
|
14
|
-
|
14
|
+
ui.info ""
|
15
15
|
|
16
16
|
counter=0
|
17
17
|
sequence.each { |s|
|
18
18
|
counter=counter+1
|
19
19
|
|
20
|
-
|
20
|
+
ui.info "Typing:[#{counter}]: "+s
|
21
21
|
|
22
22
|
keycodes=self.string_to_parallels_keycode(s)
|
23
23
|
|
@@ -33,8 +33,8 @@ module Veewee
|
|
33
33
|
#sleep after each sequence (needs to be param)
|
34
34
|
}
|
35
35
|
|
36
|
-
|
37
|
-
|
36
|
+
ui.info "Done typing."
|
37
|
+
ui.info ""
|
38
38
|
|
39
39
|
|
40
40
|
end
|
@@ -179,7 +179,7 @@ module Veewee
|
|
179
179
|
keycodes << c
|
180
180
|
end
|
181
181
|
else
|
182
|
-
|
182
|
+
ui.info "no scan code for #{thestring.slice(0,1)}"
|
183
183
|
end
|
184
184
|
#pop one
|
185
185
|
thestring=thestring.slice(1,thestring.length-1)
|
@@ -34,8 +34,8 @@ module Veewee
|
|
34
34
|
rescue SystemExit => e
|
35
35
|
Kernel.exit(e.status)
|
36
36
|
rescue Exception => e
|
37
|
-
|
38
|
-
|
37
|
+
ui.error("#{e.message} (#{e.class})")
|
38
|
+
ui.error(e.backtrace.join("\n"))
|
39
39
|
Kernel.exit(1)
|
40
40
|
end
|
41
41
|
|
@@ -6,7 +6,7 @@ module Veewee
|
|
6
6
|
def destroy(option={})
|
7
7
|
|
8
8
|
unless self.exists?
|
9
|
-
|
9
|
+
ui.error "Error:: You tried to destroy a non-existing box '#{name}'"
|
10
10
|
exit -1
|
11
11
|
end
|
12
12
|
|
@@ -20,8 +20,8 @@ module Veewee
|
|
20
20
|
end
|
21
21
|
|
22
22
|
command="#{@vboxcmd} unregistervm \"#{name}\" --delete"
|
23
|
-
|
24
|
-
|
23
|
+
ui.info command
|
24
|
+
ui.info "Deleting vm #{name}"
|
25
25
|
|
26
26
|
#Exec and system stop the execution here
|
27
27
|
shell_exec("#{command}",{:mute => true})
|
@@ -44,14 +44,14 @@ module Veewee
|
|
44
44
|
command="#{@vboxcmd} closemedium disk \"#{location}\""
|
45
45
|
end
|
46
46
|
|
47
|
-
|
48
|
-
|
47
|
+
ui.info "Deleting disk #{location}"
|
48
|
+
ui.info "#{command}"
|
49
49
|
|
50
50
|
shell_exec("#{command}",{:mute => true})
|
51
51
|
|
52
52
|
if File.exists?(location)
|
53
|
-
|
54
|
-
|
53
|
+
ui.info "We tried to delete the disk file via virtualbox '#{location} but failed"
|
54
|
+
ui.info "Removing it manually"
|
55
55
|
FileUtils.rm(location)
|
56
56
|
exit -1
|
57
57
|
end
|
@@ -10,7 +10,7 @@ module Veewee
|
|
10
10
|
|
11
11
|
# Check if box already exists
|
12
12
|
unless self.exists?
|
13
|
-
|
13
|
+
ui.info "#{name} is not found, maybe you need to build it first?"
|
14
14
|
exit
|
15
15
|
end
|
16
16
|
|
@@ -28,19 +28,19 @@ module Veewee
|
|
28
28
|
|
29
29
|
# We need to shutdown first
|
30
30
|
if self.running?
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
ui.info "Vagrant requires the box to be shutdown, before it can export"
|
32
|
+
ui.info "Sudo also needs to work for user #{definition.ssh_user}"
|
33
|
+
ui.info "Performing a clean shutdown now."
|
34
34
|
|
35
35
|
self.halt
|
36
36
|
|
37
37
|
#Wait for state poweroff
|
38
38
|
while (self.running?) do
|
39
|
-
|
39
|
+
ui.info ".",{:new_line => false}
|
40
40
|
sleep 1
|
41
41
|
end
|
42
|
-
|
43
|
-
|
42
|
+
ui.info ""
|
43
|
+
ui.info "Machine #{name} is powered off cleanly"
|
44
44
|
end
|
45
45
|
|
46
46
|
#Vagrant requires a relative path for output of boxes
|
@@ -54,28 +54,28 @@ module Veewee
|
|
54
54
|
box_path=path1.relative_path_from(path2).to_s
|
55
55
|
|
56
56
|
if File.exists?("#{box_path}")
|
57
|
-
|
57
|
+
ui.info "box #{name}.box already exists"
|
58
58
|
exit
|
59
59
|
end
|
60
60
|
|
61
|
-
|
61
|
+
ui.info "Executing vagrant voodoo:"
|
62
62
|
export_command="vagrant package --base '#{name}' --output '#{box_path}'"
|
63
|
-
|
63
|
+
ui.info "#{export_command}"
|
64
64
|
shell_exec("#{export_command}") #hmm, needs to get the gem_home set?
|
65
|
-
|
65
|
+
ui.info ""
|
66
66
|
|
67
67
|
#add_ssh_nat_mapping back!!!!
|
68
68
|
#vagrant removes the mapping
|
69
69
|
#we need to restore it in order to be able to login again
|
70
70
|
self.add_ssh_nat_mapping
|
71
71
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
72
|
+
ui.info "To import it into vagrant type:"
|
73
|
+
ui.info "vagrant box add '#{name}' '#{box_path}'"
|
74
|
+
ui.info ""
|
75
|
+
ui.info "To use it:"
|
76
|
+
ui.info "vagrant init '#{name}'"
|
77
|
+
ui.info "vagrant up"
|
78
|
+
ui.info "vagrant ssh"
|
79
79
|
end
|
80
80
|
|
81
81
|
end #Module
|