2010-07-11 05:07:10 +00:00
|
|
|
module Vagrant
|
|
|
|
module Hosts
|
|
|
|
# Represents a BSD host, such as FreeBSD and Darwin (Mac OS X).
|
|
|
|
class BSD < Base
|
2010-07-13 05:10:17 +00:00
|
|
|
include Util
|
2010-09-09 07:37:54 +00:00
|
|
|
include Util::Retryable
|
2010-09-28 01:19:19 +00:00
|
|
|
include Util::Sh
|
2010-07-13 05:10:17 +00:00
|
|
|
|
2010-07-12 04:33:49 +00:00
|
|
|
def nfs?
|
2010-09-09 07:37:54 +00:00
|
|
|
retryable(:tries => 10, :on => TypeError) do
|
2010-09-28 01:19:19 +00:00
|
|
|
_, status = sh("which nfsd")
|
|
|
|
|
|
|
|
# Sometimes the status is nil for some reason. In that case, force a retry
|
|
|
|
raise TypeError.new("Bad status code") if !status
|
|
|
|
status.success?
|
2010-07-17 05:00:49 +00:00
|
|
|
end
|
2010-07-12 04:33:49 +00:00
|
|
|
end
|
2010-07-13 05:10:17 +00:00
|
|
|
|
|
|
|
def nfs_export(ip, folders)
|
|
|
|
output = TemplateRenderer.render('nfs/exports',
|
|
|
|
:uuid => env.vm.uuid,
|
|
|
|
:ip => ip,
|
|
|
|
:folders => folders)
|
|
|
|
|
2010-07-24 07:29:46 +00:00
|
|
|
# The sleep ensures that the output is truly flushed before any `sudo`
|
|
|
|
# commands are issued.
|
2010-09-22 00:10:46 +00:00
|
|
|
env.ui.info I18n.t("vagrant.hosts.bsd.nfs_export.prepare")
|
2010-07-24 07:29:46 +00:00
|
|
|
sleep 0.5
|
|
|
|
|
2010-07-13 05:10:17 +00:00
|
|
|
output.split("\n").each do |line|
|
|
|
|
# This should only ask for administrative permission once, even
|
|
|
|
# though its executed in multiple subshells.
|
2010-09-28 01:19:19 +00:00
|
|
|
sh(%Q[sudo su root -c "echo '#{line}' >> /etc/exports"])
|
2010-07-13 05:10:17 +00:00
|
|
|
end
|
2010-07-13 05:37:24 +00:00
|
|
|
|
|
|
|
# We run restart here instead of "update" just in case nfsd
|
|
|
|
# is not starting
|
2010-09-28 01:19:19 +00:00
|
|
|
sh("sudo nfsd restart")
|
2010-07-13 05:10:17 +00:00
|
|
|
end
|
2010-07-14 05:30:54 +00:00
|
|
|
|
|
|
|
def nfs_cleanup
|
2010-07-30 16:38:45 +00:00
|
|
|
return if !File.exist?("/etc/exports")
|
2010-09-28 01:19:19 +00:00
|
|
|
_, status = sh("cat /etc/exports | grep 'VAGRANT-BEGIN: #{env.vm.uuid}'")
|
2010-07-14 05:30:54 +00:00
|
|
|
|
2010-09-28 01:19:19 +00:00
|
|
|
if status.success?
|
2010-07-14 05:30:54 +00:00
|
|
|
# Use sed to just strip out the block of code which was inserted
|
|
|
|
# by Vagrant
|
2010-09-28 01:19:19 +00:00
|
|
|
sh("sudo sed -e '/^# VAGRANT-BEGIN: #{env.vm.uuid}/,/^# VAGRANT-END: #{env.vm.uuid}/ d' -i bak /etc/exports")
|
2010-07-14 05:30:54 +00:00
|
|
|
end
|
|
|
|
end
|
2010-07-11 05:07:10 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|