Better, more unified logging for unison
This commit is contained in:
parent
f3c6c7320b
commit
97f82d7140
|
@ -31,6 +31,7 @@ Vagrant::Config.run do |config|
|
||||||
config.unison.script = "/tmp/vagrant-unison"
|
config.unison.script = "/tmp/vagrant-unison"
|
||||||
config.unison.options = "-terse -owner -group -batch"
|
config.unison.options = "-terse -owner -group -batch"
|
||||||
config.unison.crontab_entry_file = "/tmp/vagrant-unison-crontab"
|
config.unison.crontab_entry_file = "/tmp/vagrant-unison-crontab"
|
||||||
|
config.unison.log_file = "/tmp/v-unison-log-%s"
|
||||||
|
|
||||||
# TODO fix these
|
# TODO fix these
|
||||||
# config.vm.sync_opts = "-terse -group -owner -batch -silent"
|
# config.vm.sync_opts = "-terse -group -owner -batch -silent"
|
||||||
|
|
|
@ -82,6 +82,7 @@ module Vagrant
|
||||||
attr_accessor :script
|
attr_accessor :script
|
||||||
attr_accessor :options
|
attr_accessor :options
|
||||||
attr_accessor :crontab_entry_file
|
attr_accessor :crontab_entry_file
|
||||||
|
attr_accessor :log_file
|
||||||
end
|
end
|
||||||
|
|
||||||
class VMConfig < Base
|
class VMConfig < Base
|
||||||
|
|
|
@ -62,11 +62,13 @@ module Vagrant
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_unison(ssh, opts)
|
def create_unison(ssh, opts)
|
||||||
|
sanitized_string = opts[:original][:guestpath].gsub(/[^a-zA-Z0-9_-]/, '-')
|
||||||
crontab_entry = TemplateRenderer.render('/unison/crontab_entry',
|
crontab_entry = TemplateRenderer.render('/unison/crontab_entry',
|
||||||
:from => opts[:guestpath],
|
:from => opts[:guestpath],
|
||||||
:to => opts[:original][:guestpath],
|
:to => opts[:original][:guestpath],
|
||||||
:options => config.unison.options,
|
:options => config.unison.options,
|
||||||
:script => config.unison.script)
|
:script => config.unison.script,
|
||||||
|
:log_file => (config.unison.log_file % sanitized_string))
|
||||||
ssh.exec!("sudo echo \"#{crontab_entry}\" >> #{config.unison.crontab_entry_file}")
|
ssh.exec!("sudo echo \"#{crontab_entry}\" >> #{config.unison.crontab_entry_file}")
|
||||||
ssh.exec!("crontab #{config.unison.crontab_entry_file}")
|
ssh.exec!("crontab #{config.unison.crontab_entry_file}")
|
||||||
end
|
end
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
* * * * * <%= script %> '<%= from %>' '<%= to %>' '<%= options %>'
|
* * * * * <%= script %> '<%= from %>' '<%= to %>' '<%= options %>' > <%= log_file %> 2>&1
|
||||||
|
|
|
@ -30,7 +30,6 @@ FROM=$1
|
||||||
TO=$2
|
TO=$2
|
||||||
OPTIONS=$3
|
OPTIONS=$3
|
||||||
LOCK_FILE=`basename $0`-$(sanitize ${TO}).lck
|
LOCK_FILE=`basename $0`-$(sanitize ${TO}).lck
|
||||||
LOG_FILE=unison-$(sanitize ${TO}).log
|
|
||||||
|
|
||||||
#------------------------------------------------------------
|
#------------------------------------------------------------
|
||||||
# Am I Running?
|
# Am I Running?
|
||||||
|
@ -54,10 +53,14 @@ echo $$ > "${LOCK_FILE}"
|
||||||
#------------------------------------------------------------
|
#------------------------------------------------------------
|
||||||
# The Meat
|
# The Meat
|
||||||
#------------------------------------------------------------
|
#------------------------------------------------------------
|
||||||
|
echo "Beginning Sync:"
|
||||||
|
echo " -- From: ${FROM}"
|
||||||
|
echo " -- To: ${TO}"
|
||||||
|
echo " -- Options: ${OPTIONS}"
|
||||||
while [ 1 ]; do
|
while [ 1 ]; do
|
||||||
echo 'Syncing...'
|
echo "Syncing: $(date)"
|
||||||
# TODO check result and output log data... somewhere!
|
# TODO check result and output log data... somewhere!
|
||||||
sudo unison ${FROM} ${TO} ${OPTIONS} > ${LOG_FILE} 2>&1
|
sudo unison ${FROM} ${TO} ${OPTIONS}
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,7 @@ class Test::Unit::TestCase
|
||||||
|
|
||||||
# Unison
|
# Unison
|
||||||
config.unison.folder_suffix = ".sync"
|
config.unison.folder_suffix = ".sync"
|
||||||
|
config.unison.log_file = "foo-%s"
|
||||||
|
|
||||||
# Chef
|
# Chef
|
||||||
config.chef.chef_server_url = "http://localhost:4000"
|
config.chef.chef_server_url = "http://localhost:4000"
|
||||||
|
|
|
@ -75,11 +75,22 @@ class LinuxSystemTest < Test::Unit::TestCase
|
||||||
@ssh.stubs(:exec!)
|
@ssh.stubs(:exec!)
|
||||||
@options = {
|
@options = {
|
||||||
:guestpath => "foo",
|
:guestpath => "foo",
|
||||||
:original => { :guestpath => "bar" }
|
:original => { :guestpath => "bar!" }
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO Test crontab entry
|
should "render the crontab entry with proper variables" do
|
||||||
|
variables = {
|
||||||
|
:from => @options[:guestpath],
|
||||||
|
:to => @options[:original][:guestpath],
|
||||||
|
:options => @mock_env.config.unison.options,
|
||||||
|
:script => @mock_env.config.unison.script,
|
||||||
|
:log_file => @mock_env.config.unison.log_file % "bar-"
|
||||||
|
}
|
||||||
|
Vagrant::Util::TemplateRenderer.expects(:render).with('/unison/crontab_entry',
|
||||||
|
variables).once
|
||||||
|
@instance.create_unison(@ssh, @options)
|
||||||
|
end
|
||||||
|
|
||||||
should "enable the crontab file" do
|
should "enable the crontab file" do
|
||||||
@ssh.expects(:exec!).with("crontab #{@mock_env.config.unison.crontab_entry_file}")
|
@ssh.expects(:exec!).with("crontab #{@mock_env.config.unison.crontab_entry_file}")
|
||||||
|
|
|
@ -9,7 +9,7 @@ Gem::Specification.new do |s|
|
||||||
|
|
||||||
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
||||||
s.authors = ["Mitchell Hashimoto", "John Bender"]
|
s.authors = ["Mitchell Hashimoto", "John Bender"]
|
||||||
s.date = %q{2010-06-20}
|
s.date = %q{2010-06-22}
|
||||||
s.default_executable = %q{vagrant}
|
s.default_executable = %q{vagrant}
|
||||||
s.description = %q{Vagrant is a tool for building and distributing virtualized development environments.}
|
s.description = %q{Vagrant is a tool for building and distributing virtualized development environments.}
|
||||||
s.email = ["mitchell.hashimoto@gmail.com", "john.m.bender@gmail.com"]
|
s.email = ["mitchell.hashimoto@gmail.com", "john.m.bender@gmail.com"]
|
||||||
|
|
Loading…
Reference in New Issue