veewee 0.3.0.alpha6 → 0.3.0.alpha7
Sign up to get free protection for your applications and to get access to all the features.
- 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
|