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