David Schmitt wrote:
> Matt wrote:
>> According to the language tutorial I should be able to do:
>>
>> $ssh_users = [ 'myself', 'someone' ]
>>
>> class test {
>>    $ssh_users += ['someone_else']
>> }
>>
>> I'm trying to append to an array within a class, so i'm doing:
>>
>> class test {
>>   $metrics = ['a','b']
>>   $metrics += [''c]
>> }
>>
>> With the above I get the following:
>>
>> err: Could not retrieve catalog: Cannot append, variable metrics is
>> defined in this scope at
>> /etc/puppet/production/modules/mymodule/manifests/metrics.pp:132 on
>> node host.internal
>>
>> Can I only append to the variable once inside a class?  I'm not
>> worried about the order they get appended.
> 
> Hi Matt,
> 
> sorry for the late answer.
> 
> Yes, you cann assign/alter a variable only once within a scope.
> 
> A possible workaround would be a puppet function which takes any number 
> of arrays and returns their concatenation (or (distinct) union).

That'd look like this:


-- 8< ------------
# concat.rb
# concatenate the contents of arrays
module Puppet::Parser::Functions
         newfunction(:concat, :type => :rvalue) do |args|
                 result = []
                 args.each do |arg|
                         result = result.concat(arg)
                 end
                 result
         end
end
-- 8< ------------


Put this into a module at plugins/puppet/parser/functions/ und use it 
like this:

| $base_metrics = ['a', 'b']
| $extended_metrics = ['c']
| $metrics = concat($base_metrics, $extended_metrics)


I'll add the function to the common module, since I just needed similar 
functionality for a client of mine.




Regards, DavidS

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Puppet Users" 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-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to