Hi all.
I''m newbie.
Help me, please.
I write Puppet function
Piece of code :
n_if={}
over_if = arguments[1]
over_if.each do |kk,vv|
weth={}
puts kk,vv,weth
weth = arguments[0]
weth[''in_vlan''] = vv[''in_vlan'']
weth[''options''][''MTU''] =
vv[''mtu'']
n_if[''eth''+ kk.to_s]=weth
end
Data gotten from 2 files with Hiera, and passed into arguments[0] and
arguments[1] respectively:
# template of ethernet interfaces
eth_:
method: "static"
family: "inet"
ip: ""
netmask: "255.255.0.0"
onboot: true
options:
MTU: ""
in_vlan: ""
# values for include into ethernet interfaces
eth_values:
0:
mtu: 1500
in_vlan: 15
1:
mtu: 9000
in_vlan: 125
I expect get hash with keys ''eth0'' and
''eth1'' as follow:
eth1methodstaticfamilyinetin_vlan125ipnetmask255.255.0.0onboottrueoptionsMTU9000
eth0methodstaticfamilyinetin_vlan15ipnetmask255.255.0.0onboottrueoptionsMTU1500
But I get :
eth1methodstaticfamilyinetin_vlan125ipnetmask255.255.0.0onboottrueoptionsMTU9000
eth0methodstaticfamilyinetin_vlan125ipnetmask255.255.0.0onboottrueoptionsMTU9000
I use:
Puppet 3.1.1
Hiera 1.6.17
Ruby 1.8.7
What is my mistake?
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to puppet-users+unsubscribe@googlegroups.com.
To post to this group, send email to puppet-users@googlegroups.com.
Visit this group at http://groups.google.com/group/puppet-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.
Hi, On 03/25/2013 03:53 PM, Andrew E. wrote:> What is my mistake?Speficially, you are probably looking for the each_pair method: http://ruby-doc.org/core-1.8.7/Hash.html#method-i-each_pair Also, I''d advice to never use generic variable names like kk or vv. Your hash is "index => options"? Why not name the variables thus. HTH, Felix -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to puppet-users+unsubscribe@googlegroups.com. To post to this group, send email to puppet-users@googlegroups.com. Visit this group at http://groups.google.com/group/puppet-users?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
On 03/25/2013 04:06 PM, Felix Frank wrote:> Speficially, you are probably looking for the each_pair method:Scratch that - just noticed it''s synonymous with each. That''s fine then. -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to puppet-users+unsubscribe@googlegroups.com. To post to this group, send email to puppet-users@googlegroups.com. Visit this group at http://groups.google.com/group/puppet-users?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
On Monday, March 25, 2013 9:53:50 AM UTC-5, Andrew E. wrote:> > Hi all. > I''m newbie. > Help me, please. > I write Puppet function > Piece of code : > > > n_if={} > over_if = arguments[1] > > over_if.each do |kk,vv| > weth={} > puts kk,vv,weth > weth = arguments[0] > weth[''in_vlan''] = vv[''in_vlan''] > weth[''options''][''MTU''] = vv[''mtu''] > n_if[''eth''+ kk.to_s]=weth > end > > Data gotten from 2 files with Hiera, and passed into arguments[0] and > arguments[1] respectively: > > # template of ethernet interfaces > eth_: > method: "static" > family: "inet" > ip: "" > netmask: "255.255.0.0" > onboot: true > options: > MTU: "" > in_vlan: "" > > # values for include into ethernet interfaces > eth_values: > 0: > mtu: 1500 > in_vlan: 15 > 1: > mtu: 9000 > in_vlan: 125 > > > I expect get hash with keys ''eth0'' and ''eth1'' as follow: > > eth1methodstaticfamilyinetin_vlan125ipnetmask255.255.0.0onboottrueoptionsMTU9000 > > eth0methodstaticfamilyinetin_vlan15ipnetmask255.255.0.0onboottrueoptionsMTU1500 > But I get : > > eth1methodstaticfamilyinetin_vlan125ipnetmask255.255.0.0onboottrueoptionsMTU9000 > > eth0methodstaticfamilyinetin_vlan125ipnetmask255.255.0.0onboottrueoptionsMTU9000 > > I use: > Puppet 3.1.1 > Hiera 1.6.17 > Ruby 1.8.7 > > What is my mistake? > >I had to rename your variables to follow your code, but it looks like your mistake is at this line (translating back): weth = arguments[0] That sets variable ''weth'' to be a reference to the *same object* that that is referenced as arguments[0]. You then proceed to modify that object in each iteration of the loop, and assign other references to it to your result variable, but in the end it''s still only one object. Here''s a version that I think will do what you want: template = arguments[0] param_groups = arguments[1] results = {} param_groups.each_pair do |ifc_num, params| # key difference: result = template.clone # no need to clone other objects: result[''in_vlan''] = params[''in_vlan''] result[''options''][''MTU''] = params[''mtu''] # especially here: results[''eth'' + ifc_num.to_s] = result end John -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to puppet-users+unsubscribe@googlegroups.com. To post to this group, send email to puppet-users@googlegroups.com. Visit this group at http://groups.google.com/group/puppet-users?hl=en. For more options, visit https://groups.google.com/groups/opt_out.