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 [email protected].
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.