Hi all,
This little exercise is pointing out huge gaps in my Puppet/Ruby
knowledge and I'm not sure how to get around it.  I'm working on a
module for writing interface files and everything works fine except
for my "vlan" interface creation.  Here's the snippet that's passed to
my definition:

        vlan: {
            network::interface::nic { $name:
                my_type     => "vlan_primary",
                nic_type    => $nic_type,
            }
            network::interface::nic { $vlans:
                my_type    => "vlan_secondary",
                master      => $name,
                ip          => $ip,
                netmask     => $netmask,
                gateway     => $gateway,
                nic_type    => $nic_type,
            }

$name is the name of the parent nic (eth6 for an eth6.101 tagged
vlan).  $vlans is an array with one or more vlan tags
([ "100","101","200"]), and $ip is an array with the associated ip
addresses ["1.2.3.7","1.2.3.8","1.2.3.9"].

network::interface::nic is defined as

define network::interface::nic($my_type, $ip = "", $netmask = "",
$master = "", $nic_type = "Ethernet", $gateway = "",$vlan = ""){
    file { $name:
        path    => $my_type ? {
                        "vlan_secondary"    => "/etc/sysconfig/network-
scripts/ifcfg-$master.$name",
                        default             => "/etc/sysconfig/network-
scripts/ifcfg-$name",
                    },
        owner   => root,
        group   => root,
        mode    => 755,
        content => template("network/ifcfg"),
    }

The relevant part of the ifcfg template is this:

# Puppet managed.
DEVICE=<%=name %>
<% if ip != "" %>IPADDR=<%=ip %>

Now, when I call this definition:

    network::interface::setup { "eth6":
        ensure      => "present",
        ip          => ["1.2.3.7","1.2.3.8","1.2.3.9"],
        netmask     => "255.255.255.0",
        config_type => "vlan",
        nic_type    => "Ethernet",
        vlans       => [ "100","101","200"],
    }

as I hope, I get the correct 4 separate files:

[r...@buildtest network-scripts]# ls -l ifcfg-eth6*
-rwxr-xr-x 1 root root  83 Jul  9 11:06 ifcfg-eth6
-rwxr-xr-x 1 root root 141 Jul  9 11:06 ifcfg-eth6.100
-rwxr-xr-x 1 root root 141 Jul  9 11:06 ifcfg-eth6.101
-rwxr-xr-x 1 root root 141 Jul  9 11:06 ifcfg-eth6.200
[r...@buildtest network-scripts]#

The device name is not what I want, but with that template code it's
what I expect:

[r...@buildtest network-scripts]# grep DEVICE ifcfg-eth6*
ifcfg-eth6:DEVICE=eth6
ifcfg-eth6.100:DEVICE=100
ifcfg-eth6.101:DEVICE=101
ifcfg-eth6.200:DEVICE=200
[r...@buildtest network-scripts]#

And I think I understand why the IP addresses are mangled:

[r...@buildtest network-scripts]# grep IPADDR ifcfg-eth6*
ifcfg-eth6.100:IPADDR=1.2.3.71.2.3.81.2.3.9
ifcfg-eth6.101:IPADDR=1.2.3.71.2.3.81.2.3.9
ifcfg-eth6.200:IPADDR=1.2.3.71.2.3.81.2.3.9
[r...@buildtest network-scripts]#

However, here's what I don't get.  I want device name to be DEVICE=
$master.$name.  However, adding the code

<% if my_type == "vlan_secondary" then
    name = master.concat('.'.concat(name))
end %>

to my template gives me an error "Failed to parse template network/
ifcfg: can't convert nil into String"

Changing the code to

<% if my_type == "vlan_secondary" then
        myname = master
        myname.concat('.'.concat(name))
end %>

gives me the even more bizarre error:

err: Could not create eth6.101.100.200: 200 already exists with name /
etc/sysconfig/network-scripts/ifcfg-eth6.101.100.200

It's as if some times name equals one slice of an array and other
times its the whole array.  How does puppet iterate over the arrays
passed to it?  Is the only one processed the name variable?  Is there
a way to get an argument and the name variable parsed at the same
index?

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to