First off, thanks for taking the time to write and share your smf
property provider. I've list of some comments/suggestions below.

On Sun, May 6, 2012 at 8:06 AM, Philip Brown <[email protected]> wrote:
> Here is a tool that lets Solaris sysadmins ensure that a particular SMF /
> svc property is set in a particular fashion.
> In particular, I'm going to be using it to make sure that
> /network/smtp:sendmail  config/local_only = true
> I've tried to code it so that it can handle all sorts of properties though.
>
>
> I looked at the "forge" thing, and the "puppet-module" tool.
> Sad to say, I did not like it, for this purpose. It seems too complex
> compared to the alternatives.
> For the record, I deploy puppet by downloading the tarfiles, and running
> ruby install.rb
>
> So.. I'm going to publicly release my sysprop type here for now.
> Future versions may probably be found on my website,
> http://www.bolthole.com, but I cant give a specific url for now, because I'm
> not sure whether I'm going to make a puppet/ subsection or not
> Depends on whether or not I write more providers.
> Since I'm not sure how  google groups, or the actual mailing list, handles
> attachments, I'm going old school and using shar for this :)
> If you have "unshar", just run it on this post. If you dont, then hand-trim
> out the top part and feed it directly to 'sh'.
> If you like, (and you're very trusting :) you should be able to extract
> directly in the "puppet" dir, and the two files will go to where they
> belong.
>
>
> # This is a shell archive.  Save it in a file, remove anything before
> # this line, and then unpack it by entering "sh file".  Note, it may
> # create directories; files and directories will be owned by you and
> # have default permissions.
> #
> # This archive contains:
> #
> #       provider/sysprop/solaris.rb
> #       type/sysprop.rb
> #
> echo x - provider/sysprop/solaris.rb
> mkdir -p provider/sysprop 2>/dev/null
> sed 's/^X//' >provider/sysprop/solaris.rb <<
> 'END-of-provider/sysprop/solaris.rb'
> XPuppet::Type.type(:sysprop).provide(:solaris) do
> X  desc "Solaris provider for svcprop type"
> X  defaultfor :operatingsystem => :solaris

Maybe confine to solaris as well?

> X  commands :svccfg => "/usr/sbin/svccfg"
> X  commands :svcprop => "/usr/bin/svcprop"
> X  commands :svcadm => "/usr/sbin/svcadm"

You don't have to supply the fully qualified path to the command.

> X  def create
> X
>  svccfg("-s",resource[:fmri],"setprop",resource[:property],"=",resource[:value])
> X    refresh="/usr/sbin/svcadm refresh #{@resource[:fmri]}"
> X    execute(refresh)

Any reason not using?

svcadm('refresh', @resource[:frmri])

> X  end
> X  def destroy
> X    raise ArgumentError, "sysprop cant really destroy a property. Define a
> value for it instead"
> X  end
> X
> X  def exists?
> X    if ("#{@resource[:property]}" == "")
> X      raise ArgumentError, "sysprop requires 'property' to be defined"
> X    end
> X    if ("#{@resource[:value]}" == "")
> X      raise ArgumentError, "sysprop requires 'value' to be defined"
> X    end
> X
> X    output = svcprop("-p", @resource[:property], @resource[:fmri]).strip
> X    #Puppet.debug "svcprop return value is '#{output}'"
> X
> X    if output == "#{@resource[:value]}"
> X      return true
> X    end
> X
> X    return false
> X  end
> X
> Xend
> X
> X
> END-of-provider/sysprop/solaris.rb
> echo x - type/sysprop.rb
> mkdir type 2>/dev/null
> sed 's/^X//' >type/sysprop.rb << 'END-of-type/sysprop.rb'
> Xmodule Puppet
> X  newtype(:sysprop) do
> X    @doc = "Handle `system properties`. Inspired by solaris svcprop, and
> X      primarily implemented for that purpose, although could theoretically
> have
> X      providers for other systems as well
> X
> X
> X      Sample usage:
> X        sysprop {
> X         "solaris-localvar":
> X         ensure=>present,
> X         fmri=>"network/smtp:sendmail",
> X         property=>"config/local_only",
> X         value=>true,
> X       }
> X
> X      Note:
> X       - You must have "ensure=>present" for it to work.
> X"

You can add defaultto :present in ensurable to avoid requiring users
specify ensure => present.

> X    ensurable do
> X      defaultvalues
> X      def change_to_s(oldstate,newstate)
> X        if ( oldstate == :absent && newstate == :present )
> X          return "set #{@resource[:property]} = #{@resource[:value]}"
> X        end
> X      end
> X    end
> X
> X    newparam(:name) do
> X      desc "Label for this resource"
> X      isnamevar
> X    end
> X    newparam(:fmri) do
> X      # Do NOT make this 'namevar'. This way, it allows the
> X      # setting of multiple properties for a single fmri
> X      desc "FMRI that the property is associated with"
> X    end
> X    newparam(:property) do
> X      desc "Specific name of the property to be set or checked for the
> FMRI"
> X    end
> X    newparam(:value) do
> X      desc "Value to set/check for the named property"
> X    end
> X
> X  end
> Xend
> END-of-type/sysprop.rb
> exit

If you are looking for an example an a puppet type/provider installed
via a module, you can check out:
https://github.com/puppetlabs/puppetlabs-firewall

Thanks,

Nan

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