Commit 1062993d authored by Łukasz Nowak's avatar Łukasz Nowak

Merge branch 'external_buildout'

parents 3f32cfa9 0089b24a
0.4 (unreleased) 0.4 (unreleased)
================ ================
* No changes yet. * Do not use buildout internally, but rather call bootstrap command of any
provided buildout binary. [Łukasz Nowak]
0.3 (2011-06-14) 0.3 (2011-06-14)
================ ================
......
...@@ -20,6 +20,7 @@ eggs = ...@@ -20,6 +20,7 @@ eggs =
[slapos] [slapos]
recipe = z3c.recipe.scripts recipe = z3c.recipe.scripts
eggs = eggs =
zc.buildout
slapos.core slapos.core
ipython ipython
ipdb ipdb
......
...@@ -39,8 +39,6 @@ setup(name=name, ...@@ -39,8 +39,6 @@ setup(name=name,
'supervisor', # slapgrid uses supervisor to manage processes 'supervisor', # slapgrid uses supervisor to manage processes
'xml_marshaller>=0.9.3', # to unmarshall/marshall python objects to/from 'xml_marshaller>=0.9.3', # to unmarshall/marshall python objects to/from
# XML # XML
'zc.buildout>=1.5.0', # slapgrid uses buildout as its backend to do the
# job
'zope.interface', # slap library implementes interfaces 'zope.interface', # slap library implementes interfaces
] + additional_install_requires, ] + additional_install_requires,
zip_safe=False, # proxy depends on Flask, which has issues with zip_safe=False, # proxy depends on Flask, which has issues with
......
...@@ -3,6 +3,7 @@ software_root = /opt/slapgrid ...@@ -3,6 +3,7 @@ software_root = /opt/slapgrid
instance_root = /srv/slapgrid instance_root = /srv/slapgrid
master_url = http://www.vifib.com/ master_url = http://www.vifib.com/
computer_id = your computer id computer_id = your computer id
buildout = /path/to/buildout/binary
[slapformat] [slapformat]
computer_xml = /opt/slapos/slapos.xml computer_xml = /opt/slapos/slapos.xml
......
...@@ -45,13 +45,14 @@ REQUIRED_COMPUTER_PARTITION_PERMISSION = '0750' ...@@ -45,13 +45,14 @@ REQUIRED_COMPUTER_PARTITION_PERMISSION = '0750'
class Software(object): class Software(object):
"""This class is responsible of installing a software release""" """This class is responsible of installing a software release"""
def __init__(self, url, software_root, console): def __init__(self, url, software_root, console, buildout):
"""Initialisation of class parameters """Initialisation of class parameters
""" """
self.url = url self.url = url
self.software_root = software_root self.software_root = software_root
self.software_path = os.path.join(self.software_root, self.software_path = os.path.join(self.software_root,
getSoftwareUrlHash(self.url)) getSoftwareUrlHash(self.url))
self.buildout = buildout
self.logger = logging.getLogger('BuildoutManager') self.logger = logging.getLogger('BuildoutManager')
self.console = console self.console = console
...@@ -74,7 +75,7 @@ class Software(object): ...@@ -74,7 +75,7 @@ class Software(object):
buildout_parameter_list = [ buildout_parameter_list = [
'buildout:directory=%s' % self.software_path, 'buildout:directory=%s' % self.software_path,
'-c', self.url] '-c', self.url]
bootstrapBuildout(self.software_path, bootstrapBuildout(self.software_path, self.buildout,
additional_buildout_parametr_list=buildout_parameter_list, additional_buildout_parametr_list=buildout_parameter_list,
console=self.console) console=self.console)
launchBuildout(self.software_path, launchBuildout(self.software_path,
...@@ -106,10 +107,12 @@ class Partition(object): ...@@ -106,10 +107,12 @@ class Partition(object):
partition_id, partition_id,
server_url, server_url,
software_release_url, software_release_url,
buildout,
certificate_repository_path=None, certificate_repository_path=None,
console=False console=False
): ):
"""Initialisation of class parameters""" """Initialisation of class parameters"""
self.buildout = buildout
self.software_path = software_path self.software_path = software_path
self.instance_path = instance_path self.instance_path = instance_path
self.run_path = os.path.join(self.instance_path, 'etc', 'run') self.run_path = os.path.join(self.instance_path, 'etc', 'run')
...@@ -241,8 +244,9 @@ class Partition(object): ...@@ -241,8 +244,9 @@ class Partition(object):
if not os.path.exists(buildout_binary): if not os.path.exists(buildout_binary):
# use own buildout generation # use own buildout generation
bootstrapBuildout(self.instance_path, ['buildout:bin-directory=%s' % bootstrapBuildout(self.instance_path, self.buildout,
os.path.join(self.instance_path, 'sbin')], console=self.console) ['buildout:bin-directory=%s'% os.path.join(self.instance_path,
'sbin')], console=self.console)
buildout_binary = os.path.join(self.instance_path, 'sbin', 'buildout') buildout_binary = os.path.join(self.instance_path, 'sbin', 'buildout')
# Launches buildout # Launches buildout
launchBuildout(self.instance_path, launchBuildout(self.instance_path,
......
...@@ -87,6 +87,8 @@ def parseArgumentTupleAndReturnSlapgridObject(*argument_tuple): ...@@ -87,6 +87,8 @@ def parseArgumentTupleAndReturnSlapgridObject(*argument_tuple):
parser.add_argument("--usage-report-periodicity", parser.add_argument("--usage-report-periodicity",
type=int, default="24", type=int, default="24",
help="The periodicity of usage report sends, in hours.") help="The periodicity of usage report sends, in hours.")
parser.add_argument("--buildout", help="Location of buildout binary.",
default=None)
parser.add_argument("--pidfile", parser.add_argument("--pidfile",
help="The location where pidfile will be created.") help="The location where pidfile will be created.")
parser.add_argument("--logfile", parser.add_argument("--logfile",
...@@ -195,7 +197,8 @@ def parseArgumentTupleAndReturnSlapgridObject(*argument_tuple): ...@@ -195,7 +197,8 @@ def parseArgumentTupleAndReturnSlapgridObject(*argument_tuple):
cert_file=cert_file, cert_file=cert_file,
master_ca_file=master_ca_file, master_ca_file=master_ca_file,
certificate_repository_path=certificate_repository_path, certificate_repository_path=certificate_repository_path,
console=option_dict['console']), console=option_dict['console'],
buildout=option_dict.get('buildout')),
option_dict]) option_dict])
...@@ -259,6 +262,7 @@ class Slapgrid(object): ...@@ -259,6 +262,7 @@ class Slapgrid(object):
supervisord_socket, supervisord_socket,
supervisord_configuration_path, supervisord_configuration_path,
usage_report_periodicity, usage_report_periodicity,
buildout,
key_file=None, key_file=None,
cert_file=None, cert_file=None,
master_ca_file=None, master_ca_file=None,
...@@ -289,6 +293,7 @@ class Slapgrid(object): ...@@ -289,6 +293,7 @@ class Slapgrid(object):
self.supervisord_configuration_directory = \ self.supervisord_configuration_directory = \
os.path.join(self.instance_etc_directory, 'supervisord.conf.d') os.path.join(self.instance_etc_directory, 'supervisord.conf.d')
self.console = console self.console = console
self.buildout = buildout
def checkEnvironmentAndCreateStructure(self): def checkEnvironmentAndCreateStructure(self):
"""Checks for software_root and instance_root existence, then creates """Checks for software_root and instance_root existence, then creates
...@@ -347,8 +352,7 @@ class Slapgrid(object): ...@@ -347,8 +352,7 @@ class Slapgrid(object):
software_release.building() software_release.building()
software_release_uri = software_release.getURI() software_release_uri = software_release.getURI()
Software(url=software_release_uri, software_root=self.software_root, Software(url=software_release_uri, software_root=self.software_root,
console=self.console console=self.console, buildout=self.buildout).install()
).install()
except (SystemExit, KeyboardInterrupt): except (SystemExit, KeyboardInterrupt):
exception = traceback.format_exc() exception = traceback.format_exc()
software_release.error(exception) software_release.error(exception)
...@@ -399,8 +403,7 @@ class Slapgrid(object): ...@@ -399,8 +403,7 @@ class Slapgrid(object):
server_url=self.master_url, server_url=self.master_url,
software_release_url=software_url, software_release_url=software_url,
certificate_repository_path=self.certificate_repository_path, certificate_repository_path=self.certificate_repository_path,
console=self.console console=self.console, buildout=self.buildout)
)
# There are no conditions to try to instanciate partition # There are no conditions to try to instanciate partition
try: try:
computer_partition_state = computer_partition.getState() computer_partition_state = computer_partition.getState()
......
...@@ -217,8 +217,8 @@ def dropPrivileges(uid, gid): ...@@ -217,8 +217,8 @@ def dropPrivileges(uid, gid):
logger.info('Succesfully dropped privileges to uid=%r gid=%r' % (uid, gid)) logger.info('Succesfully dropped privileges to uid=%r gid=%r' % (uid, gid))
def bootstrapBuildout(path, additional_buildout_parametr_list=None, def bootstrapBuildout(path, buildout=None,
console=False): additional_buildout_parametr_list=None, console=False):
if additional_buildout_parametr_list is None: if additional_buildout_parametr_list is None:
additional_buildout_parametr_list = [] additional_buildout_parametr_list = []
logger = logging.getLogger('BuildoutManager') logger = logging.getLogger('BuildoutManager')
...@@ -228,9 +228,15 @@ def bootstrapBuildout(path, additional_buildout_parametr_list=None, ...@@ -228,9 +228,15 @@ def bootstrapBuildout(path, additional_buildout_parametr_list=None,
gid = stat_info.st_gid gid = stat_info.st_gid
invocation_list = [sys.executable, '-S'] invocation_list = [sys.executable, '-S']
invocation_list.append(pkg_resources.resource_filename(__name__, if buildout is not None:
'zc.buildout-bootstap.py')) invocation_list.append(buildout)
else:
logger.warning('Using old style bootstrap of included bootstrap file. '
'Consider setting buildout binary location.')
invocation_list.append(pkg_resources.resource_filename(__name__,
'zc.buildout-bootstap.py'))
invocation_list.extend(additional_buildout_parametr_list) invocation_list.extend(additional_buildout_parametr_list)
invocation_list.append('bootstrap')
try: try:
umask = os.umask(SAFE_UMASK) umask = os.umask(SAFE_UMASK)
logger.debug('Set umask from %03o to %03o' % (umask, SAFE_UMASK)) logger.debug('Set umask from %03o to %03o' % (umask, SAFE_UMASK))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment