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
-~----------~----~----~----~------~----~------~--~---

Reply via email to