diff options
Diffstat (limited to 'sysutils/puppet/files')
| -rw-r--r-- | sysutils/puppet/files/patch-2385 | 203 | ||||
| -rw-r--r-- | sysutils/puppet/files/patch-define_batch | 13 | ||||
| -rw-r--r-- | sysutils/puppet/files/patch-package-name-with-dash | 13 | ||||
| -rw-r--r-- | sysutils/puppet/files/puppetmasterd.in | 18 |
4 files changed, 44 insertions, 203 deletions
diff --git a/sysutils/puppet/files/patch-2385 b/sysutils/puppet/files/patch-2385 deleted file mode 100644 index 7d33b2c1704a..000000000000 --- a/sysutils/puppet/files/patch-2385 +++ /dev/null @@ -1,203 +0,0 @@ -http://reductivelabs.com/trac/puppet/changeset/2385 -http://reductivelabs.com/trac/puppet/ticket/565 -Index: test/util/utiltest.rb -=================================================================== ---- test/util/utiltest.rb (revision 2377) -+++ test/util/utiltest.rb (revision 2385) -@@ -277,11 +277,15 @@ - # Now try it with a single quote - assert_nothing_raised do - output = Puppet::Util.execute([command, "yay'test", "funtest"]) -- # output = Puppet::Util.execute(command) -- - end - assert_equal("yay'test\nfuntest\n", output) - -+ # Now make sure we can squelch output (#565) -+ assert_nothing_raised do -+ output = Puppet::Util.execute([command, "yay'test", "funtest"], :squelch => true) -+ end -+ assert_equal(nil, output) -+ - # Now test that we correctly fail if the command returns non-zero - assert_raise(Puppet::ExecutionFailure) do - out = Puppet::Util.execute(["touch", "/no/such/file/could/exist"]) -@@ -289,7 +293,7 @@ - - # And that we can tell it not to fail - assert_nothing_raised() do -- out = Puppet::Util.execute(["touch", "/no/such/file/could/exist"], false) -+ out = Puppet::Util.execute(["touch", "/no/such/file/could/exist"], :failonfail => false) - end - - if Process.uid == 0 -@@ -298,7 +302,7 @@ - group = nonrootgroup - file = tempfile() - assert_nothing_raised do -- Puppet::Util.execute(["touch", file], true, user.name, group.name) -+ Puppet::Util.execute(["touch", file], :uid => user.name, :gid => group.name) - end - assert(FileTest.exists?(file), "file was not created") - assert_equal(user.uid, File.stat(file).uid, "uid was not set correctly") -@@ -308,6 +312,24 @@ - # assert_equal(group.gid, File.stat(file).gid, - # "gid was not set correctly") - end -+ -+ # (#565) Test the case of patricide. -+ patricidecommand = tempfile() -+ File.open(patricidecommand, "w") { |f| -+ f.puts %{#!/bin/bash\n/bin/bash -c 'kill -TERM \$PPID' &;\n while [ 1 ]; do echo -n ''; done;\n} -+ } -+ File.chmod(0755, patricidecommand) -+ assert_nothing_raised do -+ output = Puppet::Util.execute([patricidecommand], :squelch => true) -+ end -+ assert_equal(nil, output) -+ # See what happens if we try and read the pipe to the command... -+ assert_raise(Puppet::ExecutionFailure) do -+ output = Puppet::Util.execute([patricidecommand]) -+ end -+ assert_nothing_raised do -+ output = Puppet::Util.execute([patricidecommand], :failonfail => false) -+ end - end - - # Check whether execute() accepts strings in addition to arrays. -Index: lib/puppet/util.rb -=================================================================== ---- lib/puppet/util.rb (revision 2377) -+++ lib/puppet/util.rb (revision 2385) -@@ -267,7 +267,8 @@ - end - - # Execute the desired command, and return the status and output. -- def execute(command, failonfail = true, uid = nil, gid = nil) -+ # def execute(command, failonfail = true, uid = nil, gid = nil) -+ def execute(command, arguments = {:failonfail => true}) - if command.is_a?(Array) - command = command.flatten.collect { |i| i.to_s } - str = command.join(" ") -@@ -284,30 +285,35 @@ - Puppet.debug "Executing '%s'" % str - end - -- if uid -- uid = Puppet::Util::SUIDManager.convert_xid(:uid, uid) -+ if arguments[:uid] -+ arguments[:uid] = Puppet::Util::SUIDManager.convert_xid(:uid, arguments[:uid]) - end -- if gid -- gid = Puppet::Util::SUIDManager.convert_xid(:gid, gid) -+ if arguments[:gid] -+ arguments[:gid] = Puppet::Util::SUIDManager.convert_xid(:gid, arguments[:gid]) - end - - @@os ||= Facter.value(:operatingsystem) - output = nil -- IO.popen("-") do |f| -- if f -- output = f.read -+ child_pid, child_status = nil -+ # The idea here is to avoid IO#read whenever possible. -+ if arguments[:squelch] -+ child_pid = Kernel.fork -+ if child_pid -+ # Parent process executes this -+ child_status = Process.waitpid2(child_pid)[1] - else -+ # Child process executes this - begin - $stdin.reopen("/dev/null") -- $stderr.close -- $stderr = $stdout.dup -- if gid -- Process.egid = gid -- Process.gid = gid unless @@os == "Darwin" -+ $stdout.reopen("/dev/null") -+ $stderr.reopen("/dev/null") -+ if arguments[:gid] -+ Process.egid = arguments[:gid] -+ Process.gid = arguments[:gid] unless @@os == "Darwin" - end -- if uid -- Process.euid = uid -- Process.uid = uid unless @@os == "Darwin" -+ if arguments[:uid] -+ Process.euid = arguments[:uid] -+ Process.uid = arguments[:uid] unless @@os == "Darwin" - end - if command.is_a?(Array) - Kernel.exec(*command) -@@ -317,13 +323,44 @@ - rescue => detail - puts detail.to_s - exit!(1) -- end -- end -- end -+ end # begin; rescue -+ end # if child_pid; else -+ else -+ IO.popen("-") do |f| -+ if f -+ # Parent process executes this -+ output = f.read -+ else -+ # Parent process executes this -+ begin -+ $stdin.reopen("/dev/null") -+ $stderr.close -+ $stderr = $stdout.dup -+ if arguments[:gid] -+ Process.egid = arguments[:gid] -+ Process.gid = arguments[:gid] unless @@os == "Darwin" -+ end -+ if arguments[:uid] -+ Process.euid = arguments[:uid] -+ Process.uid = arguments[:uid] unless @@os == "Darwin" -+ end -+ if command.is_a?(Array) -+ Kernel.exec(*command) -+ else -+ Kernel.exec(command) -+ end -+ rescue => detail -+ puts detail.to_s -+ exit!(1) -+ end # begin; rescue -+ end # if f; else -+ end # IO.popen do |f| -+ child_status = $? -+ end # if arguments[:squelch]; else - -- if failonfail -- unless $? == 0 -- raise ExecutionFailure, "Execution of '%s' returned %s: %s" % [str, $?.exitstatus, output] -+ if arguments[:failonfail] -+ unless child_status == 0 -+ raise ExecutionFailure, "Execution of '%s' returned %s: %s" % [str, child_status.inspect, output] - end - end - -Index: lib/puppet/provider/service/base.rb -=================================================================== ---- lib/puppet/provider/service/base.rb (revision 2377) -+++ lib/puppet/provider/service/base.rb (revision 2385) -@@ -114,12 +114,12 @@ - # A simple wrapper so execution failures are a bit more informative. - def texecute(type, command, fof = true) - begin -- output = execute(command, fof) -+ # #565: Services generally produce no output, so squelch them. -+ execute(command, :failonfail => fof, :squelch => true) - rescue Puppet::ExecutionFailure => detail - @model.fail "Could not %s %s: %s" % [type, @model.ref, detail] - end -- -- return output -+ return nil - end - - # Use either a specified command or the default for our provider. diff --git a/sysutils/puppet/files/patch-define_batch b/sysutils/puppet/files/patch-define_batch new file mode 100644 index 000000000000..e97ffddaa161 --- /dev/null +++ b/sysutils/puppet/files/patch-define_batch @@ -0,0 +1,13 @@ +always define PATCH. without it, puppetd hangs when upgrading INTERACTIVE port. +http://reductivelabs.com/trac/puppet/ticket/624 +--- lib/puppet/provider/package/ports.rb.orig Tue May 8 14:55:34 2007 ++++ lib/puppet/provider/package/ports.rb Tue May 8 14:55:57 2007 +@@ -19,7 +19,7 @@ + # -p: create a package + # -N: install if the package is missing, otherwise upgrade + # -P: prefer binary packages +- cmd = %w{-p -N -P} << @model[:name] ++ cmd = %w{-p -N -P -M BATCH=yes} << @model[:name] + + output = portupgrade(*cmd) + if output =~ /\*\* No such / diff --git a/sysutils/puppet/files/patch-package-name-with-dash b/sysutils/puppet/files/patch-package-name-with-dash new file mode 100644 index 000000000000..93b60bc6dfa0 --- /dev/null +++ b/sysutils/puppet/files/patch-package-name-with-dash @@ -0,0 +1,13 @@ +support package that contains '-' in its name, like syslog-ng +http://reductivelabs.com/trac/puppet/ticket/628 +--- lib/puppet/provider/package/ports.rb.orig Wed May 9 17:12:39 2007 ++++ lib/puppet/provider/package/ports.rb Wed May 9 17:13:57 2007 +@@ -47,7 +47,7 @@ + match = $2 + info = $3 + +- unless pkgstuff =~ /^(\w+)-([0-9].+)$/ ++ unless pkgstuff =~ /^(\S+)-([^-\s]+)$/ + raise Puppet::PackageError, + "Could not match package info '%s'" % pkgstuff + end diff --git a/sysutils/puppet/files/puppetmasterd.in b/sysutils/puppet/files/puppetmasterd.in index bb8e7370c28f..cdb817faf448 100644 --- a/sysutils/puppet/files/puppetmasterd.in +++ b/sysutils/puppet/files/puppetmasterd.in @@ -8,6 +8,9 @@ # Add the following lines to /etc/rc.conf to enable puppetmasterd: # # puppetmasterd_enable="YES" +# puppetmasterd_confdir: Set to %%PREFIX%%/etc/puppet by default +# puppetmasterd_flags: Set to --confdir $puppetmasterd_confdir --rundir /var/run" by default +# . %%RC_SUBR%% @@ -16,6 +19,21 @@ rcvar=`set_rcvar` command="%%PREFIX%%/bin/${name}" command_interpreter="%%PREFIX%%/bin/ruby18" +start_precmd="puppetmasterd_checkconfig" +restart_precmd="puppetmasterd_checkconfig" + +puppetmasterd_checkconfig() { + echo -n "Performing sanity check of ${name} configuration: " + ${command} --parseonly ${puppetmasterd_flags} >/dev/null 2>&1 + rv=$? + if [ $rv != 0 ]; then + echo "FAILED, ${name} exited with status ${rv}" + ${command} --parseonly ${puppetmasterd_flags} + return 1 + else + echo "OK" + fi +} load_rc_config "$name" : ${puppetmasterd_enable="NO"} |
