From: Stephen Gran Date: Sat, 5 Feb 2011 11:00:10 +0000 (+0000) Subject: first stab at plugins-in-modules style X-Git-Url: https://git.adam-barratt.org.uk/?a=commitdiff_plain;h=e06b59cd9caf42918d3d1255b2ab3f7e209be0f9;p=mirror%2Fdsa-puppet.git first stab at plugins-in-modules style Signed-off-by: Stephen Gran --- diff --git a/facts/architecture.rb b/facts/architecture.rb deleted file mode 100644 index 894c82c0a..000000000 --- a/facts/architecture.rb +++ /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 index b55c43b1a..000000000 --- a/facts/hosts.rb +++ /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 index 05e3e9097..000000000 --- a/facts/ipaddresses.rb +++ /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 index 2a075ccba..000000000 --- a/facts/mounts.rb +++ /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 index 98ed4338c..000000000 --- a/facts/mta.rb +++ /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 index fe3cebdec..000000000 --- a/facts/portforwarder.rb +++ /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 index 997bf141f..000000000 --- a/facts/raidarray.rb +++ /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 index fa2f35ed6..000000000 --- a/facts/servertype.rb +++ /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 index 4e8417423..000000000 --- a/facts/services.rb +++ /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 index 3a0fefcd0..000000000 --- a/facts/software.rb +++ /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 index 47450d559..000000000 --- a/files/etc/puppet/lib/puppet/parser/functions/allnodeinfo.rb +++ /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 index 19f0ca827..000000000 --- a/files/etc/puppet/lib/puppet/parser/functions/extractnodeinfo.rb +++ /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 index 3a687224d..000000000 --- a/files/etc/puppet/lib/puppet/parser/functions/ldapinfo.rb +++ /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 index 2cdfab9a6..000000000 --- a/files/etc/puppet/lib/puppet/parser/functions/nodeinfo.rb +++ /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 index c2bda8c4a..000000000 --- a/files/etc/puppet/lib/puppet/parser/functions/whohosts.rb +++ /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 index 4cc88f0fd..000000000 --- a/files/etc/puppet/lib/puppet/parser/functions/yamlinfo.rb +++ /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 - diff --git a/manifests/site.pp b/manifests/site.pp index 8788574f8..363d0fc5f 100644 --- a/manifests/site.pp +++ b/manifests/site.pp @@ -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 index 000000000..894c82c0a --- /dev/null +++ b/modules/debian-org/lib/facter/architecture.rb @@ -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 index 000000000..b55c43b1a --- /dev/null +++ b/modules/debian-org/lib/facter/hosts.rb @@ -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 index 000000000..05e3e9097 --- /dev/null +++ b/modules/debian-org/lib/facter/ipaddresses.rb @@ -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 index 000000000..2a075ccba --- /dev/null +++ b/modules/debian-org/lib/facter/mounts.rb @@ -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 index 000000000..98ed4338c --- /dev/null +++ b/modules/debian-org/lib/facter/mta.rb @@ -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 index 000000000..fe3cebdec --- /dev/null +++ b/modules/debian-org/lib/facter/portforwarder.rb @@ -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 index 000000000..997bf141f --- /dev/null +++ b/modules/debian-org/lib/facter/raidarray.rb @@ -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 index 000000000..fa2f35ed6 --- /dev/null +++ b/modules/debian-org/lib/facter/servertype.rb @@ -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 index 000000000..4e8417423 --- /dev/null +++ b/modules/debian-org/lib/facter/services.rb @@ -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 index 000000000..3a0fefcd0 --- /dev/null +++ b/modules/debian-org/lib/facter/software.rb @@ -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 index 000000000..47450d559 --- /dev/null +++ b/modules/puppetmaster/lib/puppet/parser/functions/allnodeinfo.rb @@ -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 index 000000000..19f0ca827 --- /dev/null +++ b/modules/puppetmaster/lib/puppet/parser/functions/extractnodeinfo.rb @@ -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 index 000000000..3a687224d --- /dev/null +++ b/modules/puppetmaster/lib/puppet/parser/functions/ldapinfo.rb @@ -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 index 000000000..2cdfab9a6 --- /dev/null +++ b/modules/puppetmaster/lib/puppet/parser/functions/nodeinfo.rb @@ -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 index 000000000..c2bda8c4a --- /dev/null +++ b/modules/puppetmaster/lib/puppet/parser/functions/whohosts.rb @@ -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 index 000000000..4cc88f0fd --- /dev/null +++ b/modules/puppetmaster/lib/puppet/parser/functions/yamlinfo.rb @@ -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 index 000000000..b702a1580 --- /dev/null +++ b/modules/puppetmaster/manifests/init.pp @@ -0,0 +1,5 @@ +class puppetmaster { +} +# vim:set et: +# vim:set sts=4 ts=4: +# vim:set shiftwidth=4: