If the method signature was changed it could make possible a pattern (with the addition of plumbing in Puppet::Provider and Puppet::Provider::Command) such as

:commands => [ 'powershell.exe', [ ENV['PATH'], 'C:\Windows\System32\Powershell1.0' ] ]

BUT, and thanks to the powershell exec provider, I found a totally usable pattern:

  commands :powershell =>
if File.exists?("#{ENV['SYSTEMROOT']}\\sysnative\\WindowsPowershell\\v1.0\\powershell.exe")
"#{ENV['SYSTEMROOT']}\\sysnative\\WindowsPowershell\\v1.0\\powershell.exe"
elsif File.exists?("#{ENV['SYSTEMROOT']}\\system32\\WindowsPowershell\\v1.0\\powershell.exe")
"#{ENV['SYSTEMROOT']}\\system32\\WindowsPowershell\\v1.0\\powershell.exe"
    else
      'powershell.exe'
    end

That pattern will suffice perfectly well for me. Setting the puppet agent path is a pretty flexible technique (I didn't realize there was a puppet.conf knob for it until your responses) but as a module writer, I don't want to tell users they have to change their puppet.conf path for very common path cases.

Thanks for all of your responses, you definitely triggered me finding a way to help myself,

Jeff

On 12/12/2013 01:03 PM, Andy Parker wrote:
On Thu, Dec 12, 2013 at 8:31 AM, Jeff McCune <[email protected] <mailto:[email protected]>> wrote:

    On Thu, Dec 12, 2013 at 8:26 AM, Jeff Bachtel
    <[email protected]
    <mailto:[email protected]>> wrote:

        (repost from puppet-users)

        When creating a provider that uses a command not in PATH, what
        is the best-practice pattern for case'ing out different
        potential locations? As an example, the puppetlabs rabbitmq
        pupmod has a rabbitmqplugins provider that falls down on
        CentOS using the rabbitmq upstream package due to
        rabbitmq-plugins being in /usr/lib/rabbitmq/bin .

        As an aside (I don't know how often Puppet devs read this
        list), could the Puppet::Util::which method perhaps be
        extended to add a non-user PATH-like variable to the path
        search string? Something like PUPPET_PROVIDER_PATH, if it
        exists, being concatenated before PATH. I could then configure
        the system environment on weird hosts to provide that variable
        for puppet without mucking with user/system PATH.


    It seems reasonable to modify which() [1] to take an optional PATH
    instead of hard-coding it to ENV['PATH'].  The method depends on
    PATH, so it's probably a bit "better" to inject that dependency
    rather than hardcode it in the method body as it is now.

    Maybe def which(bin, path=ENV['PATH']) ?


I'm not sure if changing the method signature would achieve what Jeff B is asking for. If I'm understanding this right the problem is that the PATH doesn't contain the executables that the providers need and so `which` isn't finding the executables and the provider then isn't available on the platform. If that is the case, then trying to hardcode other paths in the provider implementation would be difficult to maintain since it could be very different on every platform, and so trying to specify a new argument to which won't solve this problem.

I think the suggestion is to create a PUPPET_PROVIDER_PATH that which (or at least the provider system) always uses to search, but at that point why not just modify the PATH environment variable that puppet is running with?

    
https://github.com/puppetlabs/puppet/blob/780ecb238d47f1ab5d6ce18fc8e38f98a12d66c0/lib/puppet/util.rb#L178

-- *Jeff McCune <http://jeffmccune.com/>* -- You received this message because you are subscribed to the Google
    Groups "Puppet Developers" group.
    To unsubscribe from this group and stop receiving emails from it,
    send an email to [email protected]
    <mailto:puppet-dev%[email protected]>.
    To view this discussion on the web visit
    
https://groups.google.com/d/msgid/puppet-dev/CAOXx1vG0cvcir-H93_icz54WzawsPwOGr0Mcb2%2BirA%3D_i%3D7bJA%40mail.gmail.com.


    For more options, visit https://groups.google.com/groups/opt_out.




--
Andrew Parker
[email protected] <mailto:[email protected]>
Freenode: zaphod42
Twitter: @aparker42
Software Developer

*Join us at PuppetConf 2014, September 23-24 in San Francisco*
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CANhgQXuQQK80Ju%2B0BDnzhoBOVmjER6XMNM2sWQZJw1DSYCkdpg%40mail.gmail.com.
For more options, visit https://groups.google.com/groups/opt_out.

--
You received this message because you are subscribed to the Google Groups "Puppet 
Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-dev/52AA09BB.3020900%40bericotechnologies.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to