]> gitweb.fluxo.info Git - puppet-common.git/commitdiff
common: add netmask fact for automatic syncing
authorroot <root@puppetmaster.black.co.at>
Mon, 1 Oct 2007 19:03:27 +0000 (21:03 +0200)
committerroot <root@puppetmaster.black.co.at>
Mon, 1 Oct 2007 19:03:27 +0000 (21:03 +0200)
plugins/facter/netmask.rb [new file with mode: 0644]

diff --git a/plugins/facter/netmask.rb b/plugins/facter/netmask.rb
new file mode 100644 (file)
index 0000000..3edf2b6
--- /dev/null
@@ -0,0 +1,47 @@
+# netmask.rb -- find the netmask of the primary ipaddress
+# Copyright (C) 2007 David Schmitt <david@schmitt.edv-bus.at>
+# Copyright (C) 2007 Mark 'phips' Phillips
+# See LICENSE for the full license granted to you.
+# idea and originial source by Mark 'phips' Phillips
+
+def get_netmask
+       netmask = nil;
+       ipregex = %r{(\d{1,3}\.){3}\d{1,3}}
+
+       ops = nil
+       case Facter.kernel 
+               when 'Linux'
+                       ops = {
+                               :ifconfig => '/sbin/ifconfig',
+                               :regex => %r{\s+ inet\saddr: #{Facter.ipaddress} .*? Mask: (#{ipregex})}x,
+                               :munge => nil,
+                       }
+               when 'SunOS'
+                       ops = {
+                               :ifconfig => '/usr/sbin/ifconfig -a',
+                               :regex => %r{\s+ inet\s+? #{Facter.ipaddress} \+? mask (\w{8})}x,
+                               :munge => Proc.new { |mask| mask.scan(/../).collect do |byte| byte.to_i(16) end.join('.') }
+                       }
+       end
+
+       %x{#{ops[:ifconfig]}}.split(/\n/).collect do |line|
+               matches = line.match(ops[:regex])
+               if !matches.nil?
+                       if ops[:munge].nil? 
+                               netmask = matches[1]
+                       else
+                               netmask = ops[:munge].call(matches[1])
+                       end
+               end
+       end
+       netmask
+end
+
+Facter.add("netmask") do
+       confine :kernel => [ :sunos, :linux ]
+       setcode do
+               get_netmask
+       end
+end
+
+