Hi John,
thanks for the pointer. That has gotten me a bit farther. I'm running into 
a new set of problems. The keys of a hash are frozen, so doing:

         munge do |value_hash|
            value_hash.inject(value_hash) do |memo,(key,value)|
                key.gsub!(/_/, '-')
                memo
            end
         end
Gives me:

Munging failed for value {...} in class properties: can't modify frozen 
String

I see you are setting a new key=>value pair (and I guess I'd delete the 
old), but when I try that I get:

Munging failed for value {...} in class properties: can't add a new key 
into hash during iteration

I can't imagine this is the first time somebody has tried this, but haven't 
found anything in the code base.

Geoffrey

On Wednesday, December 3, 2014 1:39:32 PM UTC-7, John Bollinger wrote:
>
>
>
> On Tuesday, December 2, 2014 4:53:42 PM UTC-6, Geoffrey Gardella wrote:
>>
>> Hey Josh, thanks for the reply.
>>
>> I'm still struggling with this. I have a hash of the values passed in 
>> from the manifest with the keys including '_' which need to be re-written.
>>
>>   properties => {'john_wayne' => '1', 'liberty_valance' => '0', ...}
>>
>> this needs to become:
>>
>>   properties => {'john-wayne' => '1', 'liberty-valance' => '0', ...}
>>
>> I believe this is where they are defined in my type:
>>
>> newproperty(:properties) do
>>    desc "A hash table of propname=propvalue entries to apply to the link"
>> end
>>
>> So, I should write a method in the type to re-write the keys? Something 
>> like (forgive my ruby too):
>>
>>        def modify_keys(h)
>>           h.keys.each do |k|
>>               if(k.include? '_') then
>>                 h[k.gsub(/_/, '-')] = h[k]
>>                 h.delete(k)
>>               end
>>           end 
>>        end
>>
>> Can I add a method like this to my property? How is such a method then 
>> called in the provider?
>>
>>
>
> It looks like you want to use the munge hook.  Though the docs 
> <https://docs.puppetlabs.com/guides/custom_types.html> are a bit unclear, 
> I think it works for property definitions (not just for parameter 
> definitions).  You would put something like this inside your property 
> definition:
>
>       munge do |value|
>         value.inject({}) do |xlated, kv|
>           k, v = kv
>           xlated[k.gsub(/_/, '-')] = v
>         end
>       end
>
>
> Note that that assumes the value is a hash; you may want to use the 
> validation hook as well to ensure that (or else munge more flexibly).
>
>
> John
>
>

-- 
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 puppet-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-dev/9c2e30f3-899b-4277-8b55-584d71b6dc49%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to