Hello, I'm trying to make a set of functions to simulate an array with which I would be able to append value in the same scope.
The first function is called "array_append" which take 2 arguments: the variable name and the value to append. The function then iterates through variables "#{name}_#{i}" (with incrementing i from 0) until the variable does not exists and then set the value of this variable. This way I'm using one variable for each element of my array and I can simulate a real array from the puppet DSL. Here's the function I've made: module Puppet::Parser::Functions newfunction(:array_append) do |args| i = 0 i += 1 while lookupvar("#{args[0]}_#{i}") puts "I've set #{args[0]}_#{i} to #{args[1]}" setvar("#{args[0]}_#{i}", args[1]) end end If I'm calling this function from a manifest it works as expected: test.pp array_append("toto", "prout0") array_append("toto", "prout1") array_append("toto", "prout2") #puppet agent test.pp I've set toto_0 to prout0 I've set toto_1 to prout1 I've set toto_2 to prout2 Finished catalog run in 0.02 seconds But if I want to set a global variable it does not work anymore and I've errors. It seams that test2.pp: array_append("::toto", "prout0") array_append("::toto", "prout1") array_append("::toto", "prout2") #puppet agent test2.pp I've set ::toto_0 to prout0 I've set ::toto_0 to prout1 Error: Cannot reassign variable ::toto_0 at /root/puppet/manifests/test.pp:9 on node www1.egasys.com Error: Cannot reassign variable ::toto_0 at /root/puppet/manifests/test.pp:9 on node www1.egasys.com Then if I'm calling array_append from a module defined resource: test3.pp network::route::add_net {"42.42.42.0/24": gw => "192.168.0.1"} network::route::add_net {"54.54.54.0/24": gw => "192.168.0.1"} modules/network/manifests/route/add_net.pp define network::route::add_net($gw) { array_append("::routes_net", {name => $name, gw => $gw}) } #puppet agent test3.pp I've set ::routes_net_0 to name42.42.42.0/24gw192.168.0.1 I've set ::routes_net_0 to name54.54.54.0/24gw192.168.0.1 this time: no errors but setvar is not working: it's like setvar does nothing I can't understand why case #2 and #3 are not working and if it's a normal behaviour or a bug. if you have any ideas ? thx for your help ++ Jerome -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To view this discussion on the web visit https://groups.google.com/d/msg/puppet-users/-/A1UbbmkIMyQJ. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.