#!/bin/bash cat <. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% <%= def wrap(s, width=78) #s.gsub(/(.{1,#{width}})(\s+|\Z)/, "\\1\n ") s.split("\n").map{ |x| if (x.length > width) then #x.gsub!(/(.{1,#{width}}) +(?=\S)/, "\\1\n ") x.gsub!(/(.{1,#{width}})( +|\Z)/, "\\1\n ") end x }.join("\n")+"\n" end def markup(l) l = l.gsub(/\[\[(.*?)\|(.*?)\]\]/, '\2') l = l.gsub(/\[\[(\*|-)?(.*?)\]\]/, '\2') return l end if scope.lookupvar('site::nodeinfo')['ldap'].has_key?('architecture') arch = scope.lookupvar('site::nodeinfo')['ldap']['architecture'][0] else arch = 'unknown' end purp = '' if scope.lookupvar('site::nodeinfo').has_key?('nameinfo') purp += " " + wrap(scope.lookupvar('site::nodeinfo')['nameinfo']) + "\n" end ninfo = scope.lookupvar('site::nodeinfo') extra = 'Welcome to ' + @fqdn if (scope.lookupvar('site::nodeinfo')['ldap'].has_key?('purpose')) p = scope.lookupvar('site::nodeinfo')['ldap']['purpose'].clone() entries = "" if p.delete('buildd') entries += ", the Debian #{arch} build daemon" end if p.delete('porterbox') or classes.include?("porterbox") entries += ", the Debian #{arch} porterbox" end if p.size() > 0 entries += (entries == "") ? ", " : ". Also" entries +="used for the following services:\n" scope.lookupvar('site::nodeinfo')['ldap']['purpose'].sort.each do |l| l = markup(l) entries += "\t#{l}\n" end else entries += ".\n" end extra += entries else extra += "." end purp += " " + wrap(extra) + "\n" if (scope.lookupvar('site::nodeinfo')['ldap'].has_key?('physicalHost')) if ninfo['ldap']['physicalHost'][0] =~ /ganeti/ phys_host = 'cluster' else phys_host = 'physical host' end purp += wrap(" This virtual server runs on the #{phys_host} #{ninfo['ldap']['physicalHost'][0]}, " + "which is hosted at #{ninfo['hoster']['longname']}." ) elsif scope.lookupvar('site::nodeinfo')['hoster']['name'] purp += wrap(" This server is hosted at #{ninfo['hoster']['longname']}.") end vms = [] scope.lookupvar('site::allnodeinfo').keys.sort.each do |node| if scope.lookupvar('site::allnodeinfo')[node]['physicalHost'] and scope.lookupvar('site::allnodeinfo')[node]['physicalHost'].include?(@fqdn) vms << node end end unless vms.empty? purp += "\nThe following virtual machines run on this system:\n" vms.each do |node| purp += "\t- #{node}" if scope.lookupvar('site::allnodeinfo')[node]['purpose'] purp += ":\n" scope.lookupvar('site::allnodeinfo')[node]['purpose'].sort.each do |l| l = markup(l) purp += "\t " + l + "\n" end else purp += "\n" end end end if scope.lookupvar('::cluster') purp += "\n This server is a node in ganeti cluster: " purp += scope.lookupvar('::cluster').to_s + ":\n" purp += "\t" + scope.lookupvar('::cluster_nodes').split.sort.map{ |x| x.split('.')[0] }.join(", ") + ".\n" purp += "" purp += "\tCurrently the master node is $(cat /var/lib/ganeti/ssconf_master_node).\n" #nodes = scope.lookupvar('::cluster_nodes').sort #nodes.each do |node| # purp += "\t" + node + "\n" #end #nodes.reject{|node| node.eql?(fqdn)}.each do |node| # purp += "\t" + node + "\n" # scope.lookupvar('site::allnodeinfo')[node]['ipHostNumber'].each do |ip| # purp += "\t\t" + ip + "\n" # end #end end if classes.include?("porterbox") purp += "\n " + wrap("Disk space on porter boxes is often limited. Please respect your fellow porters by cleaning up after yourself and deleting schroots and source/build trees in your ~ as soon as feasible. DSA reserves the right to recover disk space as necessary. See for a brief tutorial on using schroot. There may be chroots for architectures other than #{arch} available, please list available chroots to check.") end if ninfo['not-bacula-client'] then purp += "\n " + wrap("Note that this host is _NOT_ being backed up. If you care about your data, run your own backups.") end if scope.lookupvar('site::nodeinfo').has_key?('footer') purp += "\n" + wrap(scope.lookupvar('site::nodeinfo')['footer']) end purp -%> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% EOD <% # vim:set et: # vim:set sts=2 ts=2: # vim:set shiftwidth=2: -%>