#!/usr/bin/python #------------------------------------------- # Script Name: vhost.py # Script Version: 1.0 # Date: 20 July 2005 # Author: Scott R Behrens # Description: opens a request file, genereates a vhost httpd.conf file, and establishes symlinks # Revision History: # 1.0/<20-7-2005>: orignal version # 1.1/<20-7-2005>: now genreates multiple files based on XML document # 1.2/<20-14-2005>: generates one file encoded in base64 #------------------------------------------- import sys, re, os from getopt import getopt, GetoptError from elementtree.ElementTree import XML, Element from Bcfg2.Server.Generator import SingleXMLFileBacked from Bcfg2.Server.Structure import Structure # Global Variables for paths of apache sitesen = "/etc/apache2/sites-enabled/" sitesav = "/etc/apache2/sites-available/" class VhostFile(SingleXMLFileBacked): '''The Base file contains unstructured/independent configuration elements''' def Index(self): self.meta = XML(self.data) def Construct(self, metadata): self.output = Element("Bundle", name='apache-vhost', version='2.0') self.serverlist = [] for server in self.meta.findall("server"): self.serverlist.append(server.attrib['name']) if server.attrib['name'] in metadata.hostname: for vhost in server.findall("vhost"): name = vhost.get('name') email = vhost.get('email') root = vhost.get('root') opt = vhost.get('opt') self.output.append(XML("")) self.output.append(XML("")) self.output.append(XML("")) if [software for software in self.meta.findall('Software') if metadata.hostname in self.serverlist]: for child in software.getchildren(): self.output.append(child) return [self.output] class Vhost(Structure): '''This Structure is good for the pile of independent configs needed for most actual systems''' __name__ = 'Vhost' __version__ = '$Id: s.Vhost.py 1.15 04/12/03 10:23:33-06:00 desai@topaz.mcs.anl.gov $' '''Vhost creates independent clauses based on client metadata''' def __init__(self, core, datastore): Structure.__init__(self, core, datastore) self.Vhost = VhostFile("%s/Vhost/Vhost.xml"%(datastore), self.core.fam) self.Construct = self.Vhost.Construct