First blog post for a long time, let's try post interesting stuffs I find during my work as GNU/Linux system administrator at Inuits.
I was looking for a clean and easy way to manage network interface configuration on Debian-like system (the /etc/network/interfaces file) using Puppet.
Puppet currently doesn't have a resource type to handle network interfaces and unlike Redhat-like systems where the network configuration is split in a different file per interface, the interfaces configuration file under Debian is monolithic making it difficult to manage.
So here comes Augeas to the rescue. Augeas is a configuration file parser that map a configuration file into a tree. Puppet provides a native Resource type you can work with it in your puppet recipes.
Let's say you want to generate the following stanza in /etc/network/interfaces (this create a bond interface):
auto bond0
iface bond0 inet static
address 192.168.110.42
netmask 255.255.255.0
network 192.168.110.0
gateway 192.168.110.240
slaves eth0 eth1
bound_mode active-backup
bond_miimon 100
bond_downdelay 200
bond_updelay 200
You can define the following ressource:
augeas{ "bond_interface" :
context => "/files/etc/network/interfaces",
changes => [
"set auto[child::1 = 'bond0']/1 bond0",
"set iface[. = 'bond0'] bond0",
"set iface[. = 'bond0']/family inet",
"set iface[. = 'bond0']/method static",
"set iface[. = 'bond0']/address 192.168.110.42",
"set iface[. = 'bond0']/netmask 255.255.255.0",
"set iface[. = 'bond0']/network 192.168.110.0",
"set iface[. = 'bond0']/gateway 192.168.110.240",
"set iface[. = 'bond0']/slaves 'eth0 eth1'",
"set iface[. = 'bond0']/bound_mode active-backup",
"set iface[. = 'bond0']/bond_miimon 100",
"set iface[. = 'bond0']/bond_downdelay 200",
"set iface[. = 'bond0']/bond_updelay 200",
],
}
and Puppet will take care of creating the resource and updating it. Be aware that the interfaces and options not managed by puppet are left untouched.
The Belgian senator Philippe Monfils (MR) has presented a few weeks ago a 