# return the set of active interfaces as an array
Facter.add("interfaces") do
   setcode do
      `ip -o link show`.split(/\n/).collect do |line|
         value = nil
         matches = line.match(/^\d*: ([^:]*): <(.*,)?UP(,.*)?>/)
         if !matches.nil?
            value = matches[1]
         end
         value
      end.compact.sort.join(" ")
   end
end

## root@junglist /var/lib/puppet/lib/facter# facter|grep ipaddress
## ipaddress => 123.100.70.1
## ipaddress_eth0 => 123.100.70.1
## ipaddress_eth0_0 => 123.100.70.2
## ipaddress_eth0_1 => 123.100.70.3
## ipaddress_eth0_2 => 123.100.70.4
## ipaddress_eth0_3 => 123.100.70.5