Note that if you do that, you might want to add the default absent/present 
values, using something like the 'defaultvalues' method or whatever it's called.

On Oct 15, 2010, at 10:40 AM, Carl Caum wrote:

> I'm going to answer my own question.  Someone on IRC pointed me in the right 
> direction.  To override the ensurable, you have to do it in the type you're 
> creating.  So you would do 
> 
> Puppet::Type.newtype(:mytype) do
>         //code
> 
>       ensurable do
>               //code
>       end
> 
>         //code
> end
> 
> On Oct 15, 2010, at 12:17 PM, Carl Caum wrote:
> 
>> Hello all.  I'm trying to implement my own ensurable method to extend the 
>> ensure parameter with my own possible values.  I've used 
>> puppet/type/file/ensure.rb as my example on how to do this.  However, puppet 
>> doesn't seem to be using my plugin's ensurable method since it throws this 
>> error:
>> 
>> err: Could not run Puppet configuration client: Parameter ensure failed: 
>> Invalid value "latest". Valid values are present, absent.
>> 
>> 
>> Here's my code:
>> 
>> ====svn_deploy/lib/puppet/type/svn_deploy/ensure.rb====
>> 
>> module Puppet
>>     Puppet::Type.type(:svn_deploy).ensurable do
>>         require 'etc'
>>         desc "Whether to check out or update subversion repositories on the 
>> local system.
>>             Possible values are *present*, *absent*, *installed*, and 
>> *latest*."
>> 
>>         newvalue(:absent) do
>>             if @resource.provider.exists?
>>                 @resource.provider.destroy
>>             end 
>>         end 
>> 
>>         newvalue(:present) do
>>             unless @resource.provider.exists?
>>                 @resource.provider.create
>>             end 
>>         end 
>>         aliasvalue(:installed, :present)
>> 
>>         newvalue(:latest) do
>>             unless @resource.provider.latest?
>>                 @resource.provider.update
>>             end 
>>         end 
>>     end 
>> end
>> 
>> 
>> 
>> ====svn_deploy/lib/puppet/type/svn_deploy.rb====
>> 
>> Puppet::Type.newtype(:svn_deploy) do
>>     @doc = "Deploy a subversion project."
>> 
>>     ensurable
>> 
>>     #If we have a subversion package resource, require it
>>     autorequire(:package) do
>>         "subverson"
>>     end
>> 
>>     newproperty(:source) do
>>         desc "The URL for the source to check out."
>> 
>>         validate do |value|
>>             unless value =~ /^(http[s]*|svn):\/\//
>>                 raise ArgumentError, "%s is not a valid URL" % value
>>             end
>>         end
>>     end
>> 
>>     newparam(:destination) do
>>         desc "The file path location to check the source out to."
>> 
>>         validate do |value|
>>             unless value =~ /^(http[s]*|svn):\/\//
>>                 raise ArgumentError, "%s is not a valid URL" % value
>>             end
>>         end
>>     end
>> 
>>     newparam(:destination) do
>>         desc "The file path location to check the source out to."
>> 
>>         validate do |value|
>>             unless value =~ /^\/[a-z0-9]+/
>>                 raise ArgumentError, "%s is not a valid file path" % value
>>             end
>>         end
>>     end
>> 
>>     newparam(:name) do
>>         desc "The name of the subversion project."
>>     end
>> 
>>     newparam(:user) do
>>         defaultto ''
>> 
>>         desc "The username to use to authenticate to the repository."
>>     end
>> 
>>     newparam(:password) do
>>         defaultto ''
>> 
>>         desc "The password for the username specified by the user parameter."
>>     end
>> 
>>     newparam(:autorevert) do
>>         defaultto false
>> 
>>         desc "Revert local modifications if they exist."
>> 
>>         validate do |value|
>>             if value == true and @resource[:ensure] != 'latest'
>>                 warnonce "Cannot autorevert unless ensure is 'latest'"
>>             end
>>         end
>>     end
>> 
>>     newparam(:destroy_local_mods) do
>>         defaultto false
>> 
>>         desc "Destroy the check out if there are local mods present. Unlike 
>> autorevert, this allows the entire check out to be deleted or replaced."
>>     end
>> end
>> 
> 
> 
> -- 
> 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.


-- 
Meeting, n.:
        An assembly of people coming together to decide what person or
        department not represented in the room must solve a problem.
---------------------------------------------------------------------
Luke Kanies  -|-   http://puppetlabs.com   -|-   +1(615)594-8199



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