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.