I recently had situation in work where I needed to update several of our Plone sites with few addon products. So far we haven't thought how we'll manage our sites update story as we've basically just recently entered to the amazing world of buildouts and several Plone-sites instead of one huge plone-site with zeo.
Gotta say I had few ideas popping in my head when I was manually running buildout scripts for each of our sites and stopping and restarting them after buildout was completed. My first though was to just simply write some script which does the job and then I was already imaging some web based service so we could manage our sites buildouts ttw. Well.. that might be a bit overkill.. at least for the starters, so I went back to roots and wrote a small python application which does the job. Basically it just takes the list of buildouts and runs buildout-script with -Nv parameters and restarts the site.
Source code is below and in the github.
Gotta say I had few ideas popping in my head when I was manually running buildout scripts for each of our sites and stopping and restarting them after buildout was completed. My first though was to just simply write some script which does the job and then I was already imaging some web based service so we could manage our sites buildouts ttw. Well.. that might be a bit overkill.. at least for the starters, so I went back to roots and wrote a small python application which does the job. Basically it just takes the list of buildouts and runs buildout-script with -Nv parameters and restarts the site.
Source code is below and in the github.
#!/usr/bin/python2.5
from subprocess import check_call
from subprocess import CalledProcessError
#BUILDOUT_LIST is a list of folders where you're sites are
BUILDOUT_LIST = ['Site1',
'Site2']
class Buildout:
"""Takes care of managing one buildout"""
def __init__(self, path):
self.path = path
self.dev_null = open('/dev/null','wb')
def instance_cmd(self, command):
try:
if command == 'start':
print "Starting %s instance..." % self.path
elif command == 'stop':
print "Stopping %s instance..." % self.path
check_call(['./' + self.path + '/bin/instance', command],)
except CalledProcessError, e:
print e.returncode
def run_buildout(self):
try:
print "Trying to run buildout for %s " % self.path
dev_null = open('/dev/null','wb')
check_call(['bin/buildout', '-Nv'],
cwd='./'+self.path,
stderr=dev_null, stdout=dev_null)
print "Buildout for %s completed succesfully" % self.path
except CalledProcessError, e:
print "Error while running buildout for %s: %s" % (self.path,
str(e))
class BOManager:
""" Launches buildout scripts """
def __init__(self, buildouts):
self.buildouts = buildouts
def giveitago(self):
for buildout in self.buildouts:
print "-"*40
bo = Buildout(buildout)
bo.run_buildout()
bo.instance_cmd('stop')
bo.instance_cmd('start')
print "-"*40+"\n"
if __name__ == '__main__':
buildout = BOManager(BUILDOUT_LIST)
buildout.giveitago()
Comments
Post a Comment