summaryrefslogtreecommitdiffstats
path: root/src/lib/Server/Plugins/Vhost.py
diff options
context:
space:
mode:
authorNarayan Desai <desai@mcs.anl.gov>2005-09-07 19:16:34 +0000
committerNarayan Desai <desai@mcs.anl.gov>2005-09-07 19:16:34 +0000
commitedf54ee400545d8f1e8941c8c49849f495bde404 (patch)
tree3e7c775351e0ed6eb3b007921aff7bec8e9e2722 /src/lib/Server/Plugins/Vhost.py
parent890a0aad09918924c9927f34308cfadb1cb68220 (diff)
downloadbcfg2-edf54ee400545d8f1e8941c8c49849f495bde404.tar.gz
bcfg2-edf54ee400545d8f1e8941c8c49849f495bde404.tar.bz2
bcfg2-edf54ee400545d8f1e8941c8c49849f495bde404.zip
Include generator stuff
(Logical change 1.301) git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@1226 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'src/lib/Server/Plugins/Vhost.py')
-rw-r--r--src/lib/Server/Plugins/Vhost.py71
1 files changed, 62 insertions, 9 deletions
diff --git a/src/lib/Server/Plugins/Vhost.py b/src/lib/Server/Plugins/Vhost.py
index b0a8d3e0b..44a0bc16d 100644
--- a/src/lib/Server/Plugins/Vhost.py
+++ b/src/lib/Server/Plugins/Vhost.py
@@ -14,38 +14,90 @@
'''
__revision__ = '$Revision$'
+import base64
from copy import deepcopy
from elementtree.ElementTree import XML, Element, SubElement
+from socket import gethostbyname
from Bcfg2.Server.Generator import SingleXMLFileBacked
-from Bcfg2.Server.Plugin import Plugin
-
-# Global Variables for paths of apache
-sitesen = "/etc/apache2/sites-enabled/"
-sitesav = "/etc/apache2/sites-available/"
+from Bcfg2.Server.Plugin import Plugin, PluginExecutionError
class VhostFile(SingleXMLFileBacked):
'''The Vhost file contains webserver vhost configuration elements'''
+ sitesen = "/etc/apache2/sites-enabled/"
+ sitesav = "/etc/apache2/sites-available/"
+
+ def __init__(self, name, fam):
+ self.dispatch = {'ConfigFile':{'/etc/default/apache2':self.generateApacheDefault},
+ 'Service':{'apache2':self.generateApacheSvc}}
+ SingleXMLFileBacked.__init__(self, name, fam)
+ self.http = open('/disks/bcfg2/Vhost/default.httpd', 'r').readlines()
+ self.servers = []
+ self.vhosts = {}
def Index(self):
self.meta = XML(self.data)
+ self.servers = [serv.get('name') for serv in self.meta.findall('server')]
+ self.vhosts = {}
+ for server in self.meta.findall("server"):
+ for vhost in server.findall("vhost"):
+ name = vhost.get('name')
+ self.dispatch[self.sitesav + name] = self.generateSiteFile
+ self.vhosts[name] = vhost
def BuildStructures(self, metadata):
'''Build apache+vhost bundle'''
+ if metadata.hostname not in self.servers:
+ return []
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')
- SubElement(output, "SymLink", name=sitesen+name, to=sitesav+name)
+ SubElement(output, "SymLink", name=self.sitesen+name, to=self.sitesav+name)
SubElement(output, "ConfigFile", name="/etc/apache2/sites-available/" + name)
SubElement(output, "ConfigFile", name='/etc/default/apache2')
- if [software for software in self.meta.findall('Software') if metadata.hostname in self.serverlist]:
+ for software in self.meta.findall("Software"):
for child in software.getchildren():
output.append(deepcopy(child))
return [output]
+ def generateApacheDefault(self, entry, metadata):
+ '''Build /etc/default/apache2'''
+ if metadata.hostname in self.servers:
+ entry.text = 'NO_START=0\n'
+ else:
+ entry.text = 'NO_START=1\n'
+ entry.attrib.update({'owner':'root', 'group':'root', 'perms':'0644'})
+
+ def generateApacheSvc(self, entry, metadata):
+ '''Enable apache service on webservices, disable on others'''
+ if metadata.hostname in self.servers:
+ entry.set('status', 'on')
+ else:
+ entry.set('status', 'off')
+
+ def generateSiteFile(self, entry, metadata):
+ '''Build site-specific config file for vhost'''
+ if metadata.hostname not in self.servers:
+ raise PluginExecutionError
+ vhostname = entry.get('name')[len(self.sitesav):]
+ if not self.vhosts.has_key(vhostname):
+ raise PluginExecutionError
+
+ if self.vhosts[vhostname].get('root') == "Hostname":
+ choice = vhostname
+ else:
+ choice = gethostbyname(vhostname)
+
+ config = ""
+ for line in self.http:
+ line = line.replace("XXemailXX", self.vhosts[vhostname].get('email'))
+ line = line.replace("XXdomainXX", vhostname)
+ line = line.replace("XXchoiceXX", choice)
+ config += line
+ entry.text = base64.encodestring(config)
+ entry.attrib.update({'owner':'root', 'group':'root', 'perms':'0644', 'encoding':'base64'})
+
class Vhost(Plugin):
'''This Structure is good for the pile of independent configs needed for most actual systems'''
__name__ = 'Vhost'
@@ -57,3 +109,4 @@ class Vhost(Plugin):
Plugin.__init__(self, core, datastore)
self.Vhost = VhostFile("%s/Vhost/Vhost.xml"%(datastore), self.core.fam)
self.BuildStructures = self.Vhost.BuildStructures
+ self.Entries = self.Vhost.dispatch