Commit 1caa4cd4 authored by Jérome Perrin's avatar Jérome Perrin

standalone/core: wip shared parts

parent 5994d7f2
......@@ -8,6 +8,7 @@ cert_file = /etc/opt/slapos/ssl/computer.crt
certificate_repository_path = /etc/opt/slapos/ssl/partition_pki
software_root = /opt/slapgrid
instance_root = /srv/slapgrid
shared_parts_root = /opt/slapgrid/shared
[slapformat]
# Replace by your network interface providing IPv6 if you don't use re6st
......
......@@ -112,7 +112,8 @@ class Software(object):
download_from_binary_cache_url_blacklist=None,
upload_to_binary_cache_url_blacklist=None,
software_min_free_space=None,
buildout_debug=False,):
buildout_debug=False,
shared_parts_root=None):
"""Initialisation of class parameters
"""
......@@ -127,6 +128,7 @@ class Software(object):
self.software_url_hash = md5digest(self.url)
self.software_path = os.path.join(self.software_root,
self.software_url_hash)
self.shared_parts_root = shared_parts_root
self.buildout = buildout
self.buildout_debug = buildout_debug
self.logger = logger
......@@ -264,6 +266,11 @@ class Software(object):
additional_parameters = list(self._additional_buildout_parameters(extends_cache))
additional_parameters.extend(['-c', buildout_cfg])
if self.shared_parts_root:
# XXX
additional_parameters.append('buildout:abi-tag-eggs=true')
additional_parameters.append('buildout:shared-parts=%s' %
self.shared_parts_root)
buildout_binary = os.path.join(self.software_path, 'bin', 'buildout')
buildout_marker = buildout_binary + "-bootstrap-skipped"
......
......@@ -241,6 +241,7 @@ def create_slapgrid_object(options, logger):
return Slapgrid(software_root=op['software_root'],
instance_root=op['instance_root'],
shared_parts_root=op.get('shared_parts_root'),
master_url=op['master_url'],
computer_id=op['computer_id'],
buildout=op.get('buildout'),
......@@ -340,6 +341,7 @@ class Slapgrid(object):
firewall_conf={},
config=None,
buildout_debug=False,
shared_parts_root=None
):
"""Makes easy initialisation of class parameters"""
# Parses arguments
......@@ -405,6 +407,7 @@ class Slapgrid(object):
self.firewall_conf = firewall_conf
self.config = config
self._manager_list = slapmanager.from_config(config)
self.shared_parts_root = shared_parts_root
def _getWatchdogLine(self):
invocation_list = [WATCHDOG_PATH]
......@@ -562,7 +565,8 @@ stderr_logfile_backups=1
shadir_ca_file=self.shadir_ca_file,
shadir_cert_file=self.shadir_cert_file,
shadir_key_file=self.shadir_key_file,
software_min_free_space=self.software_min_free_space)
software_min_free_space=self.software_min_free_space,
shared_parts_root=self.shared_parts_root)
# call manager for every software release
for manager in self._manager_list:
......
......@@ -162,6 +162,7 @@ class SlapOSConfigWriter(ConfigWriter):
[slapos]
software_root = {standalone_slapos._software_root}
instance_root = {standalone_slapos._instance_root}
shared_parts_root = {standalone_slapos._shared_parts_root}
master_url = {standalone_slapos._master_url}
computer_id = {standalone_slapos._computer_id}
root_check = False
......@@ -206,14 +207,16 @@ class StandaloneSlapOS(object):
"""
def __init__(
self, base_directory, server_ip, server_port, computer_id='local'):
self, base_directory, server_ip, server_port, computer_id='local', shared_path_list=()):
"""Constructor, creates a standalone slapos in `base_directory`.
Arguments:
* `base_directory` -- the directory which will contain softwares and instances.
* `server_ip`, `server_port` -- the address this SlapOS proxy will listen to.
* `computer_id` -- the id of this computer.
* `shared_path_list` -- paths to use XXX set ${buildout:shared-parts}.
TODO set to a list, the first one is read-write, others are read only.
no ... not here.
Error cases:
* `PathTooDeepError` when `base_directory` is too deep. Because of limitation
with the length of paths of UNIX sockets, too deep paths cannot be used.
......@@ -278,11 +281,11 @@ class StandaloneSlapOS(object):
os.mkdir(d)
self._software_root = os.path.join(base_directory, 'soft')
ensureDirectoryExists(self._software_root)
os.chmod(self._software_root, 0o750)
self._instance_root = os.path.join(base_directory, 'inst')
ensureDirectoryExists(self._instance_root)
os.chmod(self._instance_root, 0o750)
self._shared_parts_root = os.path.join(base_directory, 'shared')
for d in (self._software_root, self._instance_root, self._shared_parts_root):
ensureDirectoryExists(d)
os.chmod(d, 0o750)
etc_directory = os.path.join(base_directory, 'etc')
ensureDirectoryExists(etc_directory)
......@@ -331,6 +334,13 @@ class StandaloneSlapOS(object):
"""
return self._software_root
@property
def shared_directory(self):
# type: () -> str
"""Path to shared parts directory
"""
return self._shared_parts_root
@property
def instance_directory(self):
# type: () -> str
......@@ -380,6 +390,7 @@ class StandaloneSlapOS(object):
"""
for path in (
self._software_root,
self._shared_parts_root,
self._instance_root,
):
if not os.path.exists(path):
......
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