Looks like I may need to re-do the patch.. the patch below was for rc1, I directly applied the patch to rc2 thinking it should work, but it doesn't look like it.
Got to go, I'll be back to work on Monday. Regards, -Roy On Thu, Oct 22, 2009 at 5:43 PM, Roy Nielsen <[email protected]> wrote: > Hello Luke, > > I've updated the ticket with a link to the code (modified from 0.25.1rc2) > > code here: http://github.com/amrset/puppet/blob/master/lib/puppet/type.rb > > Regards, > -Roy > > > On Tue, Oct 20, 2009 at 11:17 PM, Luke Kanies <[email protected]> wrote: > >> >> Hi Roy, >> >> Sorry for the slow response on this one; it's a lot of code, and at >> some point email becomes not so awesome for code collaboration. >> >> There's a lot of desire for this fix, so I'd like to work with you >> more closely to get this in place. Do you have a git repository with >> your code? If so, can you update the ticket with a link to it? >> >> On Oct 15, 2009, at 1:51 PM, Roy Nielsen wrote: >> >> > Hello Luke, >> > >> > This is what I get on the client when it failed: >> > >> > info: Caching catalog for g8626796u39.lanl.gov >> > debug: /File[/tmp/garbageFound]: Executing check '/bin/ps -ef | /usr/ >> > bin/grep garbageProcess | grep -v grep' >> > debug: Executing '/bin/ps -ef | /usr/bin/grep garbageProcess | grep - >> > v grep' >> > debug: /File[/tmp/cronFound]: Executing check '/bin/ps -ef | /usr/ >> > bin/grep cron | grep -v grep' >> > debug: Executing '/bin/ps -ef | /usr/bin/grep cron | grep -v grep' >> > debug: Reraising Unless returned 0 with command: /bin/ps -ef | /usr/ >> > bin/grep cron | grep -v grep at /var/puppet/environments/development/ >> > modules/lanl-baseline/manifests/classes/testUnless.pp:31 >> > err: Could not run Puppet configuration client: Parameter unless >> > failed: Unless returned 0 with command: /bin/ps -ef | /usr/bin/grep >> > cron | grep -v grep at /var/puppet/environments/development/modules/ >> > lanl-baseline/manifests/classes/testUnless.pp:31 >> > >> > Thanks, >> > -Roy >> > >> > On Fri, Oct 9, 2009 at 4:30 PM, Luke Kanies <[email protected]> wrote: >> > >> > You're missing at least three pieces of functionality in this patch: >> > >> > * You need a 'check' method on the resource instance that actually >> > calls all of these checks to make sure they pass. You should be able >> > to essentially copy this from Exec. >> > * You need the Transaction class to skip resources that fail their >> > checks. >> > * You need to move all of the other checks from Exec to the main type >> > >> > Also, what's the stack trace you get when it failed? >> > >> > On Oct 8, 2009, at 5:04 PM, Roy Nielsen wrote: >> > >> > > Hello, >> > > >> > > I was able to do some basic testing for the patch below, when the >> > > unless metaparameter is used, the puppet run exits with an error >> > > (used self.fail). >> > > >> > > I'm not sure how to upload the tests, I watched James Turnbull's >> > > "Puppet Release Manager Developing for Puppet" talk on: >> http://coursestream.sfsu.edu/ess/feed?id=e723afa9-1748-43c7-8231-180d2a7f7d3e&type=MP3 >> > > , but the online slides didn't show the changing git part of the >> > > presentation (didn't show an automation?). >> > > >> > > I used the following resources (on a mac) to test: >> > > >> > > $cron_found = "Did not find the cron process" >> > > >> > > file { "/tmp/cronFound": >> > > unless => "/bin/ps -ef | /usr/bin/grep cron | grep -v grep", >> > > path => '/tmp/cronFound', >> > > content => $cron_found >> > > } >> > > >> > > The cron process is always running, so the command returns 0, so >> > > file should not be created, and the puppet process on the client >> > > will exit with an error. >> > > >> > > $garbage_found = "Did not find the garbageProcess process" >> > > >> > > file { "/tmp/garbageFound": >> > > unless => "/bin/ps -ef | /usr/bin/grep garbageProcess | grep -v >> > > grep", >> > > path => '/tmp/garbageFound', >> > > content => $garbage_found >> > > } >> > > >> > > There should be no garbageProcess running, so the command returns != >> > > 0, so file should be created. >> > > >> > > Thoughts? >> > > >> > > It would be nice to be able to "skip" a resource if the command >> > > returned 0, but I'm not sure how to do that (still working on >> > > understanding the code). >> > > >> > > Regards, >> > > -Roy >> > > >> > > --- a/lib/puppet/type.rb 2009-10-02 16:04:43.000000000 -0600 >> > > +++ b/lib/puppet/type.rb 2009-10-08 14:46:09.000000000 -0600 >> > > @@ -13,6 +13,7 @@ >> > > require 'puppet/util/cacher' >> > > require 'puppet/file_collection/lookup' >> > > require 'puppet/util/tagging' >> > > +require 'puppet/util/execution' >> > > >> > > # see the bottom of the file for the rest of the inclusions >> > > >> > > @@ -25,6 +26,7 @@ >> > > include Puppet::Util::Cacher >> > > include Puppet::FileCollection::Lookup >> > > include Puppet::Util::Tagging >> > > + include Puppet::Util::Execution >> > > >> > > ############################### >> > > # Code related to resource type attributes. >> > > @@ -1259,6 +1261,44 @@ >> > > end >> > > end >> > > >> > > + def self.newcheckme(myname, &block) >> > > + @checksme ||= {} >> > > + >> > > + check = newmetaparam(myname, &block) >> > > + @checksme[myname] = check >> > > + end >> > > + >> > > + def self.checks >> > > + @checksme.keys >> > > + end >> > > + >> > > + newcheckme(:unless) do >> > > + desc "If this parameter is set, then the type will run >> > unless >> > > + the command returns 0. For example:: >> > > + >> > > + exec { \"/bin/echo root >> /usr/lib/cron/cron.allow >> > > \": >> > > + unless => \"/usr/bin/grep root /usr/lib/cron/ >> > > cron.allow 2>/dev/null\" >> > > + } >> > > + >> > > + This would add ``root`` to the cron.allow file (on >> > > Solaris) unless >> > > + ``grep`` determines it's already there. >> > > + >> > > + Note that this metaparameter requires the full path to >> > > the command. >> > > + " >> > > + >> > > + munge do |cmds| >> > > + cmds = [cmds] unless cmds.is_a? Array >> > > + >> > > + cmds.each do |cmd| >> > > + @resource.validateexecmd(cmd) >> > > + output, status = @resource.runexec(cmd, true) >> > > + if status.exitstatus == 0 >> > > + self.fail("Unless returned 0 with command: %s" >> > > % [cmd]) >> > > + end >> > > + end >> > > + end >> > > + end >> > > + >> > > class RelationshipMetaparam < Puppet::Parameter >> > > class << self >> > > >> > attr_accessor :direction, :events, :callback, :subclasses >> > > @@ -1726,6 +1766,69 @@ >> > > end >> > > >> > > ############################### >> > > + # All of the unless code. >> > > + >> > > + def checkexec(cmd) >> > > + if cmd =~ /^\// >> > > + exe = cmd.split(/ /)[0] >> > > + unless FileTest.exists?(exe) >> > > + raise ArgumentError, "Could not find executable %s" >> > > % exe >> > > + end >> > > + unless FileTest.executable?(exe) >> > > + raise ArgumentError, >> > > + "%s is not executable" % exe >> > > + end >> > > + else >> > > + raise ArgumentError, >> > > + "is somehow not qualified with no search path" >> > > + end >> > > + end >> > > + >> > > + def runexec(command, check = false) >> > > + output = nil >> > > + status = nil >> > > + >> > > + dir = nil >> > > + >> > > + checkexec(command) >> > > + >> > > + dir ||= Dir.pwd >> > > + >> > > + if check >> > > + debug "Executing check '#{command}'" >> > > + else >> > > + debug "Executing '#{command}'" >> > > + end >> > > + begin >> > > + # Do our chdir >> > > + Dir.chdir(dir) do >> > > + environment = {} >> > > + >> > > + withenv environment do >> > > + output, status = >> > > Puppet::Util::SUIDManager.run_and_capture( >> > > + [command] >> > > + ) >> > > + # The shell returns 127 if the command is >> > > missing. >> > > + if status.exitstatus == 127 >> > > + raise ArgumentError, output >> > > + end >> > > + end >> > > + end >> > > + rescue Errno::ENOENT => detail >> > > + self.fail detail.to_s >> > > + end >> > > + >> > > + return output, status >> > > + end >> > > + >> > > + def validateexecmd(cmd) >> > > + # if we're not fully qualified, require a path >> > > + if cmd !~ /^\// >> > > + self.fail "'%s' is both unqualifed and specified no >> > > search path" % cmd >> > > + end >> > > + end >> > > + >> > > + ############################### >> > > # All of the scheduling code. >> > > >> > > # Look up the schedule and set it appropriately. This is done >> > > after >> > > >> > > >> > > >> > > > >> > >> > >> > -- >> > Reality is that which, when you stop believing in it, doesn't go >> > away. -- Philip K. Dick, "How to Build a Universe" >> > --------------------------------------------------------------------- >> > Luke Kanies | http://reductivelabs.com | http://madstop.com >> > >> > >> > >> > >> > >> > > >> >> >> -- >> The covers of this book are too far apart. -- Ambrose Bierce >> --------------------------------------------------------------------- >> Luke Kanies | http://reductivelabs.com | http://madstop.com >> >> >> >> >> > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en -~----------~----~----~----~------~----~------~--~---
