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

Merge branch 'external_buildout'

parents 3f32cfa9 0089b24a
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)
================
......
......@@ -20,6 +20,7 @@ eggs =
[slapos]
recipe = z3c.recipe.scripts
eggs =
zc.buildout
slapos.core
ipython
ipdb
......
......@@ -39,8 +39,6 @@ setup(name=name,
'supervisor', # slapgrid uses supervisor to manage processes
'xml_marshaller>=0.9.3', # to unmarshall/marshall python objects to/from
# XML
'zc.buildout>=1.5.0', # slapgrid uses buildout as its backend to do the
# job
'zope.interface', # slap library implementes interfaces
] + additional_install_requires,
zip_safe=False, # proxy depends on Flask, which has issues with
......
......@@ -3,6 +3,7 @@ software_root = /opt/slapgrid
instance_root = /srv/slapgrid
master_url = http://www.vifib.com/
computer_id = your computer id
buildout = /path/to/buildout/binary
[slapformat]
computer_xml = /opt/slapos/slapos.xml
......
......@@ -45,13 +45,14 @@ REQUIRED_COMPUTER_PARTITION_PERMISSION = '0750'
class Software(object):
"""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
"""
self.url = url
self.software_root = software_root
self.software_path = os.path.join(self.software_root,
getSoftwareUrlHash(self.url))
self.buildout = buildout
self.logger = logging.getLogger('BuildoutManager')
self.console = console
......@@ -74,7 +75,7 @@ class Software(object):
buildout_parameter_list = [
'buildout:directory=%s' % self.software_path,
'-c', self.url]
bootstrapBuildout(self.software_path,
bootstrapBuildout(self.software_path, self.buildout,
additional_buildout_parametr_list=buildout_parameter_list,
console=self.console)
launchBuildout(self.software_path,
......@@ -106,10 +107,12 @@ class Partition(object):
partition_id,
server_url,
software_release_url,
buildout,
certificate_repository_path=None,
console=False
):
"""Initialisation of class parameters"""
self.buildout = buildout
self.software_path = software_path
self.instance_path = instance_path
self.run_path = os.path.join(self.instance_path, 'etc', 'run')
......@@ -241,8 +244,9 @@ class Partition(object):
if not os.path.exists(buildout_binary):
# use own buildout generation
bootstrapBuildout(self.instance_path, ['buildout:bin-directory=%s' %
os.path.join(self.instance_path, 'sbin')], console=self.console)
bootstrapBuildout(self.instance_path, self.buildout,
['buildout:bin-directory=%s'% os.path.join(self.instance_path,
'sbin')], console=self.console)
buildout_binary = os.path.join(self.instance_path, 'sbin', 'buildout')
# Launches buildout
launchBuildout(self.instance_path,
......
......@@ -87,6 +87,8 @@ def parseArgumentTupleAndReturnSlapgridObject(*argument_tuple):
parser.add_argument("--usage-report-periodicity",
type=int, default="24",
help="The periodicity of usage report sends, in hours.")
parser.add_argument("--buildout", help="Location of buildout binary.",
default=None)
parser.add_argument("--pidfile",
help="The location where pidfile will be created.")
parser.add_argument("--logfile",
......@@ -195,7 +197,8 @@ def parseArgumentTupleAndReturnSlapgridObject(*argument_tuple):
cert_file=cert_file,
master_ca_file=master_ca_file,
certificate_repository_path=certificate_repository_path,
console=option_dict['console']),
console=option_dict['console'],
buildout=option_dict.get('buildout')),
option_dict])
......@@ -259,6 +262,7 @@ class Slapgrid(object):
supervisord_socket,
supervisord_configuration_path,
usage_report_periodicity,
buildout,
key_file=None,
cert_file=None,
master_ca_file=None,
......@@ -289,6 +293,7 @@ class Slapgrid(object):
self.supervisord_configuration_directory = \
os.path.join(self.instance_etc_directory, 'supervisord.conf.d')
self.console = console
self.buildout = buildout
def checkEnvironmentAndCreateStructure(self):
"""Checks for software_root and instance_root existence, then creates
......@@ -347,8 +352,7 @@ class Slapgrid(object):
software_release.building()
software_release_uri = software_release.getURI()
Software(url=software_release_uri, software_root=self.software_root,
console=self.console
).install()
console=self.console, buildout=self.buildout).install()
except (SystemExit, KeyboardInterrupt):
exception = traceback.format_exc()
software_release.error(exception)
......@@ -399,8 +403,7 @@ class Slapgrid(object):
server_url=self.master_url,
software_release_url=software_url,
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
try:
computer_partition_state = computer_partition.getState()
......
......@@ -217,8 +217,8 @@ def dropPrivileges(uid, gid):
logger.info('Succesfully dropped privileges to uid=%r gid=%r' % (uid, gid))
def bootstrapBuildout(path, additional_buildout_parametr_list=None,
console=False):
def bootstrapBuildout(path, buildout=None,
additional_buildout_parametr_list=None, console=False):
if additional_buildout_parametr_list is None:
additional_buildout_parametr_list = []
logger = logging.getLogger('BuildoutManager')
......@@ -228,9 +228,15 @@ def bootstrapBuildout(path, additional_buildout_parametr_list=None,
gid = stat_info.st_gid
invocation_list = [sys.executable, '-S']
invocation_list.append(pkg_resources.resource_filename(__name__,
'zc.buildout-bootstap.py'))
if buildout is not None:
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.append('bootstrap')
try:
umask = os.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