]> git.donarmstrong.com Git - dsa-puppet.git/commitdiff
first stab at plugins-in-modules style
authorStephen Gran <steve@lobefin.net>
Sat, 5 Feb 2011 11:00:10 +0000 (11:00 +0000)
committerStephen Gran <steve@lobefin.net>
Sat, 5 Feb 2011 11:00:10 +0000 (11:00 +0000)
Signed-off-by: Stephen Gran <steve@lobefin.net>
34 files changed:
facts/architecture.rb [deleted file]
facts/hosts.rb [deleted file]
facts/ipaddresses.rb [deleted file]
facts/mounts.rb [deleted file]
facts/mta.rb [deleted file]
facts/portforwarder.rb [deleted file]
facts/raidarray.rb [deleted file]
facts/servertype.rb [deleted file]
facts/services.rb [deleted file]
facts/software.rb [deleted file]
files/etc/puppet/lib/puppet/parser/functions/allnodeinfo.rb [deleted file]
files/etc/puppet/lib/puppet/parser/functions/extractnodeinfo.rb [deleted file]
files/etc/puppet/lib/puppet/parser/functions/ldapinfo.rb [deleted file]
files/etc/puppet/lib/puppet/parser/functions/nodeinfo.rb [deleted file]
files/etc/puppet/lib/puppet/parser/functions/whohosts.rb [deleted file]
files/etc/puppet/lib/puppet/parser/functions/yamlinfo.rb [deleted file]
manifests/site.pp
modules/debian-org/lib/facter/architecture.rb [new file with mode: 0644]
modules/debian-org/lib/facter/hosts.rb [new file with mode: 0644]
modules/debian-org/lib/facter/ipaddresses.rb [new file with mode: 0644]
modules/debian-org/lib/facter/mounts.rb [new file with mode: 0644]
modules/debian-org/lib/facter/mta.rb [new file with mode: 0644]
modules/debian-org/lib/facter/portforwarder.rb [new file with mode: 0644]
modules/debian-org/lib/facter/raidarray.rb [new file with mode: 0644]
modules/debian-org/lib/facter/servertype.rb [new file with mode: 0644]
modules/debian-org/lib/facter/services.rb [new file with mode: 0644]
modules/debian-org/lib/facter/software.rb [new file with mode: 0644]
modules/puppetmaster/lib/puppet/parser/functions/allnodeinfo.rb [new file with mode: 0644]
modules/puppetmaster/lib/puppet/parser/functions/extractnodeinfo.rb [new file with mode: 0644]
modules/puppetmaster/lib/puppet/parser/functions/ldapinfo.rb [new file with mode: 0644]
modules/puppetmaster/lib/puppet/parser/functions/nodeinfo.rb [new file with mode: 0644]
modules/puppetmaster/lib/puppet/parser/functions/whohosts.rb [new file with mode: 0644]
modules/puppetmaster/lib/puppet/parser/functions/yamlinfo.rb [new file with mode: 0644]
modules/puppetmaster/manifests/init.pp [new file with mode: 0644]

diff --git a/facts/architecture.rb b/facts/architecture.rb
deleted file mode 100644 (file)
index 894c82c..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Facter.add(:architecture) do
-    confine :kernel => 'GNU/kFreeBSD'
-    setcode do
-        model = Facter.value(:hardwaremodel)
-        case model
-        when 'x86_64': "amd64" 
-        when /(i[3456]86|pentium)/: "i386"
-        else
-            model
-        end
-    end
-end
-
-Facter.add(:debarchitecture) do
-    setcode do
-        %x{/usr/bin/dpkg --print-architecture}.chomp
-    end
-end
-
diff --git a/facts/hosts.rb b/facts/hosts.rb
deleted file mode 100644 (file)
index b55c43b..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-Facter.add("brokenhosts") do
-       brokenhosts = "true"
-       if FileTest.exist?("/etc/hosts")
-               IO.foreach("/etc/hosts") do |x|
-                       x.split.each do |y|
-                               if y == Facter.value("fqdn")
-                                       brokenhosts = "false"
-                                       break
-                               end
-                       end
-               end
-       end
-       setcode do
-               brokenhosts == "true"
-       end
-end
-
-
diff --git a/facts/ipaddresses.rb b/facts/ipaddresses.rb
deleted file mode 100644 (file)
index 05e3e90..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-Facter.add("v4ips") do
-        confine :kernel => :linux
-        addrs = []
-        if FileTest.exist?("/bin/ip")
-                %x{ip addr list}.each do |line|
-                        next unless line =~ /\s+inet/
-                        next if line =~ /scope (link|host)/
-                        if line =~ /\s+inet\s+(\S+)\/\d{1,2} .*/
-                                addrs << $1
-                        end
-                end
-        end
-        ret = addrs.join(",")
-        if ret.empty?
-          ret = 'no'
-        end
-        setcode do
-          ret
-        end
-end
-
-Facter.add("v4ips") do
-       confine :kernel => 'GNU/kFreeBSD'
-       setcode do
-               addrs = []
-               output = %x{/sbin/ifconfig}
-
-               output.split(/^\S/).each { |str|
-                       if str =~ /inet ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/
-                               tmp = $1
-                               unless tmp =~ /127\./
-                                       addrs << tmp
-                                       break
-                               end
-                       end
-               }
-
-               ret = addrs.join(",")
-               if ret.empty?
-                       ret = 'no'
-               end
-               ret
-       end
-end
-
-Facter.add("v6ips") do
-        confine :kernel => :linux
-        addrs = []
-        if FileTest.exist?("/bin/ip")
-                %x{ip addr list}.each do |line|
-                        next unless line =~ /\s+inet/
-                        next if line =~ /scope (link|host)/
-                        if line =~ /\s+inet6\s+(\S+)\/\d{1,3} .*/
-                                addrs << $1
-                        end
-                end
-        end
-        ret = addrs.join(",")
-        if ret.empty?
-          ret = 'no'
-        end
-        setcode do
-          ret
-        end
-end
-
diff --git a/facts/mounts.rb b/facts/mounts.rb
deleted file mode 100644 (file)
index 2a075cc..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-begin
-  require 'filesystem'
-
-       Facter.add("mounts") do
-               ignorefs = ["NFS", "nfs", "nfs4", "nfsd", "afs", "binfmt_misc", "proc", "smbfs", 
-                           "autofs", "iso9660", "ncpfs", "coda", "devpts", "ftpfs", "devfs", 
-                           "mfs", "shfs", "sysfs", "cifs", "lustre_lite", "tmpfs", "usbfs", "udf",
-                           "fusectl", "fuse.snapshotfs", "rpc_pipefs"]
-               mountpoints = []
-               FileSystem.mounts.each do |m|
-                       if ((not ignorefs.include?(m.fstype)) && (m.options !~ /bind/))
-                               mountpoints << m.mount
-                       end
-               end
-               setcode do
-                       mountpoints.join(',')
-               end
-       end
-
-rescue Exception => e
-end
diff --git a/facts/mta.rb b/facts/mta.rb
deleted file mode 100644 (file)
index 98ed433..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Facter.add("mta") do
-       setcode do
-               mta = "exim4"
-               if FileTest.exist?("/usr/sbin/postfix")
-                       mta = "postfix"
-               end
-               mta
-       end
-end
-
-Facter.add("exim_ssl_certs") do
-       setcode do
-               FileTest.exist?("/etc/exim4/ssl/") &&
-               FileTest.exist?("/etc/exim4/ssl/ca.crl") &&
-               FileTest.exist?("/etc/exim4/ssl/thishost.crt") &&
-               FileTest.exist?("/etc/exim4/ssl/ca.crt") &&
-               FileTest.exist?("/etc/exim4/ssl/thishost.key")
-       end
-end
diff --git a/facts/portforwarder.rb b/facts/portforwarder.rb
deleted file mode 100644 (file)
index fe3cebd..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-begin
-    require 'etc'
-
-    Facter.add("portforwarder_key") do
-        setcode do
-            key = nil
-            keyfile = '/home/portforwarder/.ssh/id_rsa.pub'
-            if FileTest.exist?(keyfile)
-                key = File.open(keyfile).read.chomp
-            end
-            key
-        end
-    end
-
-    Facter.add("portforwarder_user_exists") do
-        setcode do
-            result = false
-            begin
-                if Etc.getpwnam('portforwarder')
-                    result = true
-                end
-            rescue ArgumentError
-            end
-            result
-        end
-    end
-
-rescue Exception => e
-end
-# vim:set et:
-# vim:set ts=4:
-# vim:set shiftwidth=4:
diff --git a/facts/raidarray.rb b/facts/raidarray.rb
deleted file mode 100644 (file)
index 997bf14..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-Facter.add("smartarraycontroller") do
-       confine :kernel => :linux
-       setcode do
-               FileTest.exist?("/dev/cciss/")
-       end
-end
-
-Facter.add("ThreeWarecontroller") do
-       confine :kernel => :linux
-       setcode do
-               is3w = "false"
-               if FileTest.exist?("/proc/scsi/scsi")
-                       IO.foreach("/proc/scsi/scsi") { |x|
-                               is3w = "true" if x =~ /Vendor: 3ware/
-                       }
-               end
-               is3w == "true"
-       end
-end
-
-Facter.add("megaraid") do
-       confine :kernel => :linux
-       setcode do
-               FileTest.exist?("/dev/megadev0")
-       end
-end
-
-Facter.add("mptraid") do
-       setcode do
-               FileTest.exist?("/dev/mptctl") or FileTest.exist?("/dev/mpt0") or FileTest.exist?("/proc/mpt/summary")
-       end
-end
-
-Facter.add("aacraid") do
-       confine :kernel => :linux
-       setcode do
-               FileTest.exist?("/dev/aac0")
-       end
-end
-
-Facter.add("swraid") do
-       confine :kernel => :linux
-       setcode do
-                swraid = "false"
-               if FileTest.exist?("/proc/mdstat") && FileTest.exist?("/sbin/mdadm")
-                        IO.foreach("/proc/mdstat") { |x|
-                                swraid = "true" if x =~ /md[0-9]+ : active/
-                        }
-                end
-                swraid == "true"
-       end
-end
-
diff --git a/facts/servertype.rb b/facts/servertype.rb
deleted file mode 100644 (file)
index fa2f35e..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-Facter.add("kvmdomain") do
-       setcode do
-               if File.new('/proc/cpuinfo').read().index('QEMU Virtual CPU')
-                       result = true
-               else
-                       result = false
-               end
-       end
-end
diff --git a/facts/services.rb b/facts/services.rb
deleted file mode 100644 (file)
index 4e84174..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-["bugs","qa"].each do |service|
-       Facter.add(service + "_host") do
-                confine :kernel => :linux
-               service_name = "#{service}." + Facter.domain
-               active = false
-
-               setcode do
-                       if FileTest.exist?("/usr/bin/dig")
-                               %x{/usr/bin/dig +short -t a #{service_name}}.chomp.each do |service_ip|
-                                       Facter.interfaces.split(',').each do |my_interface|
-                                               my_ip = Facter.value("ipaddress_" + my_interface)
-                                               if my_ip == service_ip
-                                                       active = "true"
-                                               end
-                                       end
-                               end
-                       end
-                       active
-               end
-       end
-end
diff --git a/facts/software.rb b/facts/software.rb
deleted file mode 100644 (file)
index 3a0fefc..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-Facter.add("apache2") do
-       setcode do
-               FileTest.exist?("/usr/sbin/apache2")
-       end
-end
-Facter.add("clamd") do
-       setcode do
-               FileTest.exist?("/usr/sbin/clamd")
-       end
-end
-Facter.add("exim4") do
-       setcode do
-               FileTest.exist?("/usr/sbin/exim4")
-       end
-end
-Facter.add("postfix") do
-       setcode do
-               FileTest.exist?("/usr/sbin/postfix")
-       end
-end
-Facter.add("postgres81") do
-       setcode do
-               FileTest.exist?("/usr/lib/postgresql/8.1/bin/postgres")
-       end
-end
-Facter.add("postgres83") do
-       setcode do
-               FileTest.exist?("/usr/lib/postgresql/8.3/bin/postgres")
-       end
-end
-Facter.add("postgrey") do
-       setcode do
-               FileTest.exist?("/usr/sbin/postgrey")
-       end
-end
-Facter.add("greylistd") do
-       setcode do
-               FileTest.exist?("/usr/sbin/greylistd")
-       end
-end
-Facter.add("policydweight") do
-       setcode do
-               FileTest.exist?("/usr/sbin/policyd-weight")
-       end
-end
-Facter.add("vsftpd") do
-       setcode do
-               FileTest.exist?("/usr/sbin/vsftpd")
-       end
-end
-Facter.add("spamd") do
-       setcode do
-               FileTest.exist?("/usr/sbin/spamd")
-       end
-end
-Facter.add("php5") do
-       setcode do
-               FileTest.exist?("/usr/lib/apache2/modules/libphp5.so") or
-               FileTest.exist?("/usr/bin/php5") or
-               FileTest.exist?("/usr/bin/php5-cgi") or
-               FileTest.exist?("/usr/lib/cgi-bin/php5")
-       end
-end
-Facter.add("php5suhosin") do
-       setcode do
-               FileTest.exist?("/usr/lib/php5/20060613/suhosin.so") or
-               FileTest.exist?("/usr/lib/php5/20060613+lfs/suhosin.so")
-       end
-end
-Facter.add("syslogversion") do
-       setcode do
-               %x{dpkg-query -W -f='${Version}\n' syslog-ng | cut -b1}.chomp
-       end
-end
-Facter.add("rsyncd") do
-       setcode do
-               FileTest.exist?("/etc/rsyncd.conf")
-       end
-end
diff --git a/files/etc/puppet/lib/puppet/parser/functions/allnodeinfo.rb b/files/etc/puppet/lib/puppet/parser/functions/allnodeinfo.rb
deleted file mode 100644 (file)
index 47450d5..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-module Puppet::Parser::Functions
-  newfunction(:allnodeinfo, :type => :rvalue) do |attributes|
-    attributes.unshift('*')
-    return (function_ldapinfo(attributes))
-  end
-end
diff --git a/files/etc/puppet/lib/puppet/parser/functions/extractnodeinfo.rb b/files/etc/puppet/lib/puppet/parser/functions/extractnodeinfo.rb
deleted file mode 100644 (file)
index 19f0ca8..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-module Puppet::Parser::Functions
-  newfunction(:extractnodeinfo, :type => :rvalue) do |args|
-
-    nodeinfo = args.shift
-
-    ni = nodeinfo
-    keys_done = []
-
-    args.each do |key|
-      raise Puppet::ParseError, "nodeinfo is not a hash at #{keys_done.join('->')}" unless ni.kind_of?(Hash)
-      unless ni.has_key?(key)
-        ni = false
-        break
-      end
-      ni = ni[key]
-      keys_done << key
-    end
-    return ni
-  end
-end
-# vim:set et:
-# vim:set sts=2 ts=2:
-# vim:set shiftwidth=2:
diff --git a/files/etc/puppet/lib/puppet/parser/functions/ldapinfo.rb b/files/etc/puppet/lib/puppet/parser/functions/ldapinfo.rb
deleted file mode 100644 (file)
index 3a68722..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-module Puppet::Parser::Functions
-  newfunction(:ldapinfo, :type => :rvalue) do |attributes|
-
-    host = attributes.shift
-
-    unless attributes.include?("*") or attributes.include?('hostname')
-      attributes << 'hostname'
-    end
-
-    require 'ldap'
-    ldap = LDAP::SSLConn.new('db.debian.org', 636)
-
-    results = {}
-    filter = '(hostname=' + host + ')'
-    begin
-      ldap.search2('ou=hosts,dc=debian,dc=org', LDAP::LDAP_SCOPE_SUBTREE, filter, attrs=attributes, false, 0, 0, s_attr="hostname").each do |x|
-        # If a returned value doesn't have all the attributes we're searching for, skip
-        # We'll skip if the array is empty, but we also seem to get back a nil object for empty attributes sometimes
-        unless attributes.include?("*")
-          next if attributes.any?{ |a|  not x[a] or x[a].empty? }
-        end
-        results[x['hostname'][0]] = x
-      end
-    rescue LDAP::ResultError
-      raise Puppet::ParseError, "LDAP error"
-    rescue RuntimeError
-      raise Puppet::ParseError, "No data returned from search"
-    ensure
-      ldap.unbind
-    end
-    if host == '*'
-      return(results)
-    else
-      return(results[host])
-    end
-  end
-end
diff --git a/files/etc/puppet/lib/puppet/parser/functions/nodeinfo.rb b/files/etc/puppet/lib/puppet/parser/functions/nodeinfo.rb
deleted file mode 100644 (file)
index 2cdfab9..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-module Puppet::Parser::Functions
-  newfunction(:nodeinfo, :type => :rvalue) do |args|
-
-    host = args[0]
-    yamlfile = args[1]
-
-    require '/etc/puppet/lib/puppet/parser/functions/ldapinfo.rb'
-
-    results         = function_yamlinfo(host, yamlfile)
-    results['ldap'] = function_ldapinfo(host, '*')
-
-    results['misc'] = {}
-    fqdn = lookupvar('fqdn')
-    if fqdn and fqdn == host
-      v4ips = lookupvar('v4ips')
-      if v4ips
-        # find out if we are behind nat
-        v4addrs = v4ips.split(',')
-        intersection = v4addrs & results['ldap']['ipHostNumber']
-        results['misc']['natted'] = intersection.empty?
-      end
-    end
-
-    return(results)
-  end
-end
-
-# vim: set fdm=marker ts=2 sw=2 et:
diff --git a/files/etc/puppet/lib/puppet/parser/functions/whohosts.rb b/files/etc/puppet/lib/puppet/parser/functions/whohosts.rb
deleted file mode 100644 (file)
index c2bda8c..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-module Puppet::Parser::Functions
-  newfunction(:whohosts, :type => :rvalue) do |args|
-    require 'ipaddr'
-    require 'yaml'
-
-    nodeinfo = args[0]
-    yamlfile = args[1]
-    parser.watch_file(yamlfile)
-
-    $KCODE = 'utf-8'
-
-    ans = "unknown"
-    yaml = YAML.load_file(yamlfile)
-
-    if (nodeinfo['ldap'].has_key?('ipHostNumber'))
-      nodeinfo['ldap']['ipHostNumber'].each do |addr|
-        yaml.keys.each do |hoster|
-          yaml[hoster].each do |net|
-            if IPAddr.new(net).include?(addr)
-              ans = hoster
-            end
-          end
-        end
-      end
-    end
-    return ans
-  end
-end
diff --git a/files/etc/puppet/lib/puppet/parser/functions/yamlinfo.rb b/files/etc/puppet/lib/puppet/parser/functions/yamlinfo.rb
deleted file mode 100644 (file)
index 4cc88f0..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-module Puppet::Parser::Functions
-  newfunction(:yamlinfo, :type => :rvalue) do |args|
-
-    host = args[0]
-    yamlfile = args[1]
-    parser.watch_file(yamlfile)
-
-    def read_yaml(yaml, host)
-      results = {}
-
-      ['nameinfo', 'footer'].each do |detail|
-        if yaml.has_key?(detail)
-          if yaml[detail].has_key?(host)
-            results[detail] = yaml[detail][host]
-          end
-        end
-      end
-      
-      if yaml.has_key?('services')
-        yaml['services'].each_pair do |service, hostlist|
-          hostlist=[hostlist] unless hostlist.kind_of?(Array)
-          results[service] = hostlist.include?(host)
-        end
-      end
-
-      results['mail_port']      = ''
-      results['smarthost']      = ''
-      results['heavy_exim']     = ''
-      results['smarthost_port'] = 587
-      results['reservedaddrs']  = '0.0.0.0/8 : 127.0.0.0/8 : 10.0.0.0/8 : 169.254.0.0/16 : 172.16.0.0/12 : 192.0.0.0/17 : 192.168.0.0/16 : 224.0.0.0/4 : 240.0.0.0/5 : 248.0.0.0/5'
-    
-      if yaml['host_settings'].kind_of?(Hash)
-        yaml['host_settings'].each_pair do |property, values|
-          if values.kind_of?(Hash)
-            results[property] = values[host] if values.has_key?(host)
-          elsif values.kind_of?(Array)
-            results[property] = values.include?(host)
-          end
-        end
-      end
-      return(results)
-    end
-
-    require 'yaml'
-    $KCODE = 'utf-8'
-
-    yaml = YAML.load_file(yamlfile)
-    ret = {}
-
-    if host == '*'
-      Dir.entries('/var/lib/puppet/yaml/node/').each do |fname|
-        next unless fname =~ /(.*)\.yaml$/
-        host_name = $1
-        ret[host_name] = read_yaml(yaml, host_name)
-      end
-    else
-      ret = read_yaml(yaml, host)
-    end
-
-    return(ret)
-  end
-end
-
index 8788574f8fe137228d60e7a6e2b5be0ec3934d96..363d0fc5f6144e8b47ad5c2a64c6fe03bffbc690 100644 (file)
@@ -61,6 +61,10 @@ node default {
         }
     }
 
+    case extractnodeinfo($nodeinfo, 'puppetmaster') {
+        true: { include puppetmaster }
+    }
+
     case extractnodeinfo($nodeinfo, 'muninmaster') {
         true: { include munin-node::master }
     }
diff --git a/modules/debian-org/lib/facter/architecture.rb b/modules/debian-org/lib/facter/architecture.rb
new file mode 100644 (file)
index 0000000..894c82c
--- /dev/null
@@ -0,0 +1,19 @@
+Facter.add(:architecture) do
+    confine :kernel => 'GNU/kFreeBSD'
+    setcode do
+        model = Facter.value(:hardwaremodel)
+        case model
+        when 'x86_64': "amd64" 
+        when /(i[3456]86|pentium)/: "i386"
+        else
+            model
+        end
+    end
+end
+
+Facter.add(:debarchitecture) do
+    setcode do
+        %x{/usr/bin/dpkg --print-architecture}.chomp
+    end
+end
+
diff --git a/modules/debian-org/lib/facter/hosts.rb b/modules/debian-org/lib/facter/hosts.rb
new file mode 100644 (file)
index 0000000..b55c43b
--- /dev/null
@@ -0,0 +1,18 @@
+Facter.add("brokenhosts") do
+       brokenhosts = "true"
+       if FileTest.exist?("/etc/hosts")
+               IO.foreach("/etc/hosts") do |x|
+                       x.split.each do |y|
+                               if y == Facter.value("fqdn")
+                                       brokenhosts = "false"
+                                       break
+                               end
+                       end
+               end
+       end
+       setcode do
+               brokenhosts == "true"
+       end
+end
+
+
diff --git a/modules/debian-org/lib/facter/ipaddresses.rb b/modules/debian-org/lib/facter/ipaddresses.rb
new file mode 100644 (file)
index 0000000..05e3e90
--- /dev/null
@@ -0,0 +1,66 @@
+Facter.add("v4ips") do
+        confine :kernel => :linux
+        addrs = []
+        if FileTest.exist?("/bin/ip")
+                %x{ip addr list}.each do |line|
+                        next unless line =~ /\s+inet/
+                        next if line =~ /scope (link|host)/
+                        if line =~ /\s+inet\s+(\S+)\/\d{1,2} .*/
+                                addrs << $1
+                        end
+                end
+        end
+        ret = addrs.join(",")
+        if ret.empty?
+          ret = 'no'
+        end
+        setcode do
+          ret
+        end
+end
+
+Facter.add("v4ips") do
+       confine :kernel => 'GNU/kFreeBSD'
+       setcode do
+               addrs = []
+               output = %x{/sbin/ifconfig}
+
+               output.split(/^\S/).each { |str|
+                       if str =~ /inet ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/
+                               tmp = $1
+                               unless tmp =~ /127\./
+                                       addrs << tmp
+                                       break
+                               end
+                       end
+               }
+
+               ret = addrs.join(",")
+               if ret.empty?
+                       ret = 'no'
+               end
+               ret
+       end
+end
+
+Facter.add("v6ips") do
+        confine :kernel => :linux
+        addrs = []
+        if FileTest.exist?("/bin/ip")
+                %x{ip addr list}.each do |line|
+                        next unless line =~ /\s+inet/
+                        next if line =~ /scope (link|host)/
+                        if line =~ /\s+inet6\s+(\S+)\/\d{1,3} .*/
+                                addrs << $1
+                        end
+                end
+        end
+        ret = addrs.join(",")
+        if ret.empty?
+          ret = 'no'
+        end
+        setcode do
+          ret
+        end
+end
+
diff --git a/modules/debian-org/lib/facter/mounts.rb b/modules/debian-org/lib/facter/mounts.rb
new file mode 100644 (file)
index 0000000..2a075cc
--- /dev/null
@@ -0,0 +1,21 @@
+begin
+  require 'filesystem'
+
+       Facter.add("mounts") do
+               ignorefs = ["NFS", "nfs", "nfs4", "nfsd", "afs", "binfmt_misc", "proc", "smbfs", 
+                           "autofs", "iso9660", "ncpfs", "coda", "devpts", "ftpfs", "devfs", 
+                           "mfs", "shfs", "sysfs", "cifs", "lustre_lite", "tmpfs", "usbfs", "udf",
+                           "fusectl", "fuse.snapshotfs", "rpc_pipefs"]
+               mountpoints = []
+               FileSystem.mounts.each do |m|
+                       if ((not ignorefs.include?(m.fstype)) && (m.options !~ /bind/))
+                               mountpoints << m.mount
+                       end
+               end
+               setcode do
+                       mountpoints.join(',')
+               end
+       end
+
+rescue Exception => e
+end
diff --git a/modules/debian-org/lib/facter/mta.rb b/modules/debian-org/lib/facter/mta.rb
new file mode 100644 (file)
index 0000000..98ed433
--- /dev/null
@@ -0,0 +1,19 @@
+Facter.add("mta") do
+       setcode do
+               mta = "exim4"
+               if FileTest.exist?("/usr/sbin/postfix")
+                       mta = "postfix"
+               end
+               mta
+       end
+end
+
+Facter.add("exim_ssl_certs") do
+       setcode do
+               FileTest.exist?("/etc/exim4/ssl/") &&
+               FileTest.exist?("/etc/exim4/ssl/ca.crl") &&
+               FileTest.exist?("/etc/exim4/ssl/thishost.crt") &&
+               FileTest.exist?("/etc/exim4/ssl/ca.crt") &&
+               FileTest.exist?("/etc/exim4/ssl/thishost.key")
+       end
+end
diff --git a/modules/debian-org/lib/facter/portforwarder.rb b/modules/debian-org/lib/facter/portforwarder.rb
new file mode 100644 (file)
index 0000000..fe3cebd
--- /dev/null
@@ -0,0 +1,32 @@
+begin
+    require 'etc'
+
+    Facter.add("portforwarder_key") do
+        setcode do
+            key = nil
+            keyfile = '/home/portforwarder/.ssh/id_rsa.pub'
+            if FileTest.exist?(keyfile)
+                key = File.open(keyfile).read.chomp
+            end
+            key
+        end
+    end
+
+    Facter.add("portforwarder_user_exists") do
+        setcode do
+            result = false
+            begin
+                if Etc.getpwnam('portforwarder')
+                    result = true
+                end
+            rescue ArgumentError
+            end
+            result
+        end
+    end
+
+rescue Exception => e
+end
+# vim:set et:
+# vim:set ts=4:
+# vim:set shiftwidth=4:
diff --git a/modules/debian-org/lib/facter/raidarray.rb b/modules/debian-org/lib/facter/raidarray.rb
new file mode 100644 (file)
index 0000000..997bf14
--- /dev/null
@@ -0,0 +1,53 @@
+Facter.add("smartarraycontroller") do
+       confine :kernel => :linux
+       setcode do
+               FileTest.exist?("/dev/cciss/")
+       end
+end
+
+Facter.add("ThreeWarecontroller") do
+       confine :kernel => :linux
+       setcode do
+               is3w = "false"
+               if FileTest.exist?("/proc/scsi/scsi")
+                       IO.foreach("/proc/scsi/scsi") { |x|
+                               is3w = "true" if x =~ /Vendor: 3ware/
+                       }
+               end
+               is3w == "true"
+       end
+end
+
+Facter.add("megaraid") do
+       confine :kernel => :linux
+       setcode do
+               FileTest.exist?("/dev/megadev0")
+       end
+end
+
+Facter.add("mptraid") do
+       setcode do
+               FileTest.exist?("/dev/mptctl") or FileTest.exist?("/dev/mpt0") or FileTest.exist?("/proc/mpt/summary")
+       end
+end
+
+Facter.add("aacraid") do
+       confine :kernel => :linux
+       setcode do
+               FileTest.exist?("/dev/aac0")
+       end
+end
+
+Facter.add("swraid") do
+       confine :kernel => :linux
+       setcode do
+                swraid = "false"
+               if FileTest.exist?("/proc/mdstat") && FileTest.exist?("/sbin/mdadm")
+                        IO.foreach("/proc/mdstat") { |x|
+                                swraid = "true" if x =~ /md[0-9]+ : active/
+                        }
+                end
+                swraid == "true"
+       end
+end
+
diff --git a/modules/debian-org/lib/facter/servertype.rb b/modules/debian-org/lib/facter/servertype.rb
new file mode 100644 (file)
index 0000000..fa2f35e
--- /dev/null
@@ -0,0 +1,9 @@
+Facter.add("kvmdomain") do
+       setcode do
+               if File.new('/proc/cpuinfo').read().index('QEMU Virtual CPU')
+                       result = true
+               else
+                       result = false
+               end
+       end
+end
diff --git a/modules/debian-org/lib/facter/services.rb b/modules/debian-org/lib/facter/services.rb
new file mode 100644 (file)
index 0000000..4e84174
--- /dev/null
@@ -0,0 +1,21 @@
+["bugs","qa"].each do |service|
+       Facter.add(service + "_host") do
+                confine :kernel => :linux
+               service_name = "#{service}." + Facter.domain
+               active = false
+
+               setcode do
+                       if FileTest.exist?("/usr/bin/dig")
+                               %x{/usr/bin/dig +short -t a #{service_name}}.chomp.each do |service_ip|
+                                       Facter.interfaces.split(',').each do |my_interface|
+                                               my_ip = Facter.value("ipaddress_" + my_interface)
+                                               if my_ip == service_ip
+                                                       active = "true"
+                                               end
+                                       end
+                               end
+                       end
+                       active
+               end
+       end
+end
diff --git a/modules/debian-org/lib/facter/software.rb b/modules/debian-org/lib/facter/software.rb
new file mode 100644 (file)
index 0000000..3a0fefc
--- /dev/null
@@ -0,0 +1,79 @@
+Facter.add("apache2") do
+       setcode do
+               FileTest.exist?("/usr/sbin/apache2")
+       end
+end
+Facter.add("clamd") do
+       setcode do
+               FileTest.exist?("/usr/sbin/clamd")
+       end
+end
+Facter.add("exim4") do
+       setcode do
+               FileTest.exist?("/usr/sbin/exim4")
+       end
+end
+Facter.add("postfix") do
+       setcode do
+               FileTest.exist?("/usr/sbin/postfix")
+       end
+end
+Facter.add("postgres81") do
+       setcode do
+               FileTest.exist?("/usr/lib/postgresql/8.1/bin/postgres")
+       end
+end
+Facter.add("postgres83") do
+       setcode do
+               FileTest.exist?("/usr/lib/postgresql/8.3/bin/postgres")
+       end
+end
+Facter.add("postgrey") do
+       setcode do
+               FileTest.exist?("/usr/sbin/postgrey")
+       end
+end
+Facter.add("greylistd") do
+       setcode do
+               FileTest.exist?("/usr/sbin/greylistd")
+       end
+end
+Facter.add("policydweight") do
+       setcode do
+               FileTest.exist?("/usr/sbin/policyd-weight")
+       end
+end
+Facter.add("vsftpd") do
+       setcode do
+               FileTest.exist?("/usr/sbin/vsftpd")
+       end
+end
+Facter.add("spamd") do
+       setcode do
+               FileTest.exist?("/usr/sbin/spamd")
+       end
+end
+Facter.add("php5") do
+       setcode do
+               FileTest.exist?("/usr/lib/apache2/modules/libphp5.so") or
+               FileTest.exist?("/usr/bin/php5") or
+               FileTest.exist?("/usr/bin/php5-cgi") or
+               FileTest.exist?("/usr/lib/cgi-bin/php5")
+       end
+end
+Facter.add("php5suhosin") do
+       setcode do
+               FileTest.exist?("/usr/lib/php5/20060613/suhosin.so") or
+               FileTest.exist?("/usr/lib/php5/20060613+lfs/suhosin.so")
+       end
+end
+Facter.add("syslogversion") do
+       setcode do
+               %x{dpkg-query -W -f='${Version}\n' syslog-ng | cut -b1}.chomp
+       end
+end
+Facter.add("rsyncd") do
+       setcode do
+               FileTest.exist?("/etc/rsyncd.conf")
+       end
+end
diff --git a/modules/puppetmaster/lib/puppet/parser/functions/allnodeinfo.rb b/modules/puppetmaster/lib/puppet/parser/functions/allnodeinfo.rb
new file mode 100644 (file)
index 0000000..47450d5
--- /dev/null
@@ -0,0 +1,6 @@
+module Puppet::Parser::Functions
+  newfunction(:allnodeinfo, :type => :rvalue) do |attributes|
+    attributes.unshift('*')
+    return (function_ldapinfo(attributes))
+  end
+end
diff --git a/modules/puppetmaster/lib/puppet/parser/functions/extractnodeinfo.rb b/modules/puppetmaster/lib/puppet/parser/functions/extractnodeinfo.rb
new file mode 100644 (file)
index 0000000..19f0ca8
--- /dev/null
@@ -0,0 +1,23 @@
+module Puppet::Parser::Functions
+  newfunction(:extractnodeinfo, :type => :rvalue) do |args|
+
+    nodeinfo = args.shift
+
+    ni = nodeinfo
+    keys_done = []
+
+    args.each do |key|
+      raise Puppet::ParseError, "nodeinfo is not a hash at #{keys_done.join('->')}" unless ni.kind_of?(Hash)
+      unless ni.has_key?(key)
+        ni = false
+        break
+      end
+      ni = ni[key]
+      keys_done << key
+    end
+    return ni
+  end
+end
+# vim:set et:
+# vim:set sts=2 ts=2:
+# vim:set shiftwidth=2:
diff --git a/modules/puppetmaster/lib/puppet/parser/functions/ldapinfo.rb b/modules/puppetmaster/lib/puppet/parser/functions/ldapinfo.rb
new file mode 100644 (file)
index 0000000..3a68722
--- /dev/null
@@ -0,0 +1,37 @@
+module Puppet::Parser::Functions
+  newfunction(:ldapinfo, :type => :rvalue) do |attributes|
+
+    host = attributes.shift
+
+    unless attributes.include?("*") or attributes.include?('hostname')
+      attributes << 'hostname'
+    end
+
+    require 'ldap'
+    ldap = LDAP::SSLConn.new('db.debian.org', 636)
+
+    results = {}
+    filter = '(hostname=' + host + ')'
+    begin
+      ldap.search2('ou=hosts,dc=debian,dc=org', LDAP::LDAP_SCOPE_SUBTREE, filter, attrs=attributes, false, 0, 0, s_attr="hostname").each do |x|
+        # If a returned value doesn't have all the attributes we're searching for, skip
+        # We'll skip if the array is empty, but we also seem to get back a nil object for empty attributes sometimes
+        unless attributes.include?("*")
+          next if attributes.any?{ |a|  not x[a] or x[a].empty? }
+        end
+        results[x['hostname'][0]] = x
+      end
+    rescue LDAP::ResultError
+      raise Puppet::ParseError, "LDAP error"
+    rescue RuntimeError
+      raise Puppet::ParseError, "No data returned from search"
+    ensure
+      ldap.unbind
+    end
+    if host == '*'
+      return(results)
+    else
+      return(results[host])
+    end
+  end
+end
diff --git a/modules/puppetmaster/lib/puppet/parser/functions/nodeinfo.rb b/modules/puppetmaster/lib/puppet/parser/functions/nodeinfo.rb
new file mode 100644 (file)
index 0000000..2cdfab9
--- /dev/null
@@ -0,0 +1,28 @@
+module Puppet::Parser::Functions
+  newfunction(:nodeinfo, :type => :rvalue) do |args|
+
+    host = args[0]
+    yamlfile = args[1]
+
+    require '/etc/puppet/lib/puppet/parser/functions/ldapinfo.rb'
+
+    results         = function_yamlinfo(host, yamlfile)
+    results['ldap'] = function_ldapinfo(host, '*')
+
+    results['misc'] = {}
+    fqdn = lookupvar('fqdn')
+    if fqdn and fqdn == host
+      v4ips = lookupvar('v4ips')
+      if v4ips
+        # find out if we are behind nat
+        v4addrs = v4ips.split(',')
+        intersection = v4addrs & results['ldap']['ipHostNumber']
+        results['misc']['natted'] = intersection.empty?
+      end
+    end
+
+    return(results)
+  end
+end
+
+# vim: set fdm=marker ts=2 sw=2 et:
diff --git a/modules/puppetmaster/lib/puppet/parser/functions/whohosts.rb b/modules/puppetmaster/lib/puppet/parser/functions/whohosts.rb
new file mode 100644 (file)
index 0000000..c2bda8c
--- /dev/null
@@ -0,0 +1,28 @@
+module Puppet::Parser::Functions
+  newfunction(:whohosts, :type => :rvalue) do |args|
+    require 'ipaddr'
+    require 'yaml'
+
+    nodeinfo = args[0]
+    yamlfile = args[1]
+    parser.watch_file(yamlfile)
+
+    $KCODE = 'utf-8'
+
+    ans = "unknown"
+    yaml = YAML.load_file(yamlfile)
+
+    if (nodeinfo['ldap'].has_key?('ipHostNumber'))
+      nodeinfo['ldap']['ipHostNumber'].each do |addr|
+        yaml.keys.each do |hoster|
+          yaml[hoster].each do |net|
+            if IPAddr.new(net).include?(addr)
+              ans = hoster
+            end
+          end
+        end
+      end
+    end
+    return ans
+  end
+end
diff --git a/modules/puppetmaster/lib/puppet/parser/functions/yamlinfo.rb b/modules/puppetmaster/lib/puppet/parser/functions/yamlinfo.rb
new file mode 100644 (file)
index 0000000..4cc88f0
--- /dev/null
@@ -0,0 +1,63 @@
+module Puppet::Parser::Functions
+  newfunction(:yamlinfo, :type => :rvalue) do |args|
+
+    host = args[0]
+    yamlfile = args[1]
+    parser.watch_file(yamlfile)
+
+    def read_yaml(yaml, host)
+      results = {}
+
+      ['nameinfo', 'footer'].each do |detail|
+        if yaml.has_key?(detail)
+          if yaml[detail].has_key?(host)
+            results[detail] = yaml[detail][host]
+          end
+        end
+      end
+      
+      if yaml.has_key?('services')
+        yaml['services'].each_pair do |service, hostlist|
+          hostlist=[hostlist] unless hostlist.kind_of?(Array)
+          results[service] = hostlist.include?(host)
+        end
+      end
+
+      results['mail_port']      = ''
+      results['smarthost']      = ''
+      results['heavy_exim']     = ''
+      results['smarthost_port'] = 587
+      results['reservedaddrs']  = '0.0.0.0/8 : 127.0.0.0/8 : 10.0.0.0/8 : 169.254.0.0/16 : 172.16.0.0/12 : 192.0.0.0/17 : 192.168.0.0/16 : 224.0.0.0/4 : 240.0.0.0/5 : 248.0.0.0/5'
+    
+      if yaml['host_settings'].kind_of?(Hash)
+        yaml['host_settings'].each_pair do |property, values|
+          if values.kind_of?(Hash)
+            results[property] = values[host] if values.has_key?(host)
+          elsif values.kind_of?(Array)
+            results[property] = values.include?(host)
+          end
+        end
+      end
+      return(results)
+    end
+
+    require 'yaml'
+    $KCODE = 'utf-8'
+
+    yaml = YAML.load_file(yamlfile)
+    ret = {}
+
+    if host == '*'
+      Dir.entries('/var/lib/puppet/yaml/node/').each do |fname|
+        next unless fname =~ /(.*)\.yaml$/
+        host_name = $1
+        ret[host_name] = read_yaml(yaml, host_name)
+      end
+    else
+      ret = read_yaml(yaml, host)
+    end
+
+    return(ret)
+  end
+end
+
diff --git a/modules/puppetmaster/manifests/init.pp b/modules/puppetmaster/manifests/init.pp
new file mode 100644 (file)
index 0000000..b702a15
--- /dev/null
@@ -0,0 +1,5 @@
+class puppetmaster {
+}
+# vim:set et:
+# vim:set sts=4 ts=4:
+# vim:set shiftwidth=4: