diff --git a/setup.py b/setup.py index dd8ebb64460b879c213cf08943817b925f4c3356..ee7523d52672dff85c181be7938df4214730fd10 100644 --- a/setup.py +++ b/setup.py @@ -111,8 +111,6 @@ setup(name=name, 'zabbixagent = slapos.recipe.zabbixagent:Recipe', 'generic.zope = slapos.recipe.generic_zope:Recipe', 'generic.zope.zeo.client = slapos.recipe.generic_zope_zeo_client:Recipe', - 'generate.erp5.tidstorage = slapos.recipe.generate_erp5_tidstorage:Recipe', - 'generate.cloudooo = slapos.recipe.generate_cloudooo:Recipe', 'zeo = slapos.recipe.zeo:Recipe', 'tidstorage = slapos.recipe.tidstorage:Recipe', 'erp5.bootstrap = slapos.recipe.erp5_bootstrap:Recipe', diff --git a/slapos/recipe/generate_cloudooo.py b/slapos/recipe/generate_cloudooo.py deleted file mode 100644 index 0a119a796df8790d63bc724222e9f7b34fd748ed..0000000000000000000000000000000000000000 --- a/slapos/recipe/generate_cloudooo.py +++ /dev/null @@ -1,60 +0,0 @@ -############################################################################## -# -# Copyright (c) 2011 Vifib SARL and Contributors. All Rights Reserved. -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsibility of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# guarantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 3 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## -from slapos.recipe.librecipe import GenericSlapRecipe -import os -import json -import traceback - - -class Recipe(GenericSlapRecipe): - def _options(self, options): - self.dirname = os.path.join(self.buildout['buildout']['parts-directory'], - self.name) - options['output'] = os.path.join(self.dirname, self.name + '.cfg') - - def _generateRealTemplate(self): - # TODO check json against schema - json_data = {} - if self.parameter_dict.get('cloudooo-json', None): - json_data = json.loads(self.parameter_dict['cloudooo-json']) - # dymanic fonts - font_url_list = json_data.get('font_url_list', []) - fontconfig_template = open(self.options['template']).read() - fontconfig = open(self.options['snippet-fontconfig']).read() - fontconfig_extension = fontconfig % dict(font_url_list=' '.join(font_url_list)) - with open(self.options['output'], 'w') as f: - f.write(fontconfig_template + fontconfig_extension) - - def _install(self): - if not os.path.exists(self.dirname): - os.mkdir(self.dirname) - try: - self._generateRealTemplate() - except Exception: - print 'Ignored issue during template generation:\n%s' % \ - traceback.format_exc() - return [self.dirname] diff --git a/slapos/recipe/generate_erp5_tidstorage.py b/slapos/recipe/generate_erp5_tidstorage.py deleted file mode 100644 index 8ab68ed8d47526352c49ad3d2e06822de9d99524..0000000000000000000000000000000000000000 --- a/slapos/recipe/generate_erp5_tidstorage.py +++ /dev/null @@ -1,242 +0,0 @@ -############################################################################## -# -# Copyright (c) 2011 Vifib SARL and Contributors. All Rights Reserved. -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsibility of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# guarantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 3 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## -from slapos.recipe.librecipe import GenericSlapRecipe -import os -import json -import traceback - -SECTION_BACKEND_PUBLISHER = """[publish-apache-backend-list] -recipe = slapos.cookbook:publish""" -ZOPE_PORT_BASE = 12000 -ZEO_PORT_BASE = 15000 -HAPROXY_PORT_BASE = 11000 -APACHE_PORT_BASE = 10000 - -class Recipe(GenericSlapRecipe): - def _options(self, options): - self.dirname = os.path.join(self.buildout['buildout']['parts-directory'], - self.name) - options['output'] = os.path.join(self.dirname, self.name + '.cfg') - - def _generateRealTemplate(self): - current_zeo_port = ZEO_PORT_BASE - current_zope_port = ZOPE_PORT_BASE - current_apache_port = APACHE_PORT_BASE - current_haproxy_port = HAPROXY_PORT_BASE - json_data = json.loads(self.parameter_dict['json']) - site_id = str(json_data['site-id']) - # prepare zeo - output = '' - part_list = [] - zope_dict = {} - zope_connection_dict = {} - known_tid_storage_identifier_dict = {} - snippet_zeo = open(self.options['snippet-zeo']).read() - for zeo_id, zeo_configuration_list in json_data['zeo'].iteritems(): - if not type(zeo_configuration_list) in (type([]), type(set()), type(())): - raise ValueError('%s passed in json is not a list, json: %s.' % ( - zeo_configuration_list, json_data)) - storage_list = [] - a = storage_list.append - for zeo_slave in zeo_configuration_list: - zope_connection_dict[zeo_slave['storage-name']] = { - 'zope-cache-size': zeo_slave['zope-cache-size'], - 'zeo-cache-size': zeo_slave['zeo-cache-size'], - 'mount-point': zeo_slave['mount-point'] % {'site-id': site_id}, - 'storage-name': zeo_slave['storage-name'], - 'server': '${zeo-instance-%(zeo-id)s:ip}:${zeo-instance-%(zeo-id)s:port}' % {'zeo-id': zeo_id} - } - zodb_path = os.path.join('${directory:zodb}', zeo_slave['storage-name'] + '.fs') - a(' storage-name=%(storage-name)s zodb-path=%(zodb-path)s' % {'zodb-path': zodb_path, 'storage-name': zeo_slave['storage-name']}) - known_tid_storage_identifier_dict[ - "((('%(ip)s', %(port)s),), '%(storage_name)s')" % dict( - ip='${zeo-instance-%s:ip}' % zeo_id, - port='${zeo-instance-%s:port}' % zeo_id, - storage_name=zeo_slave['storage-name'])] = (zodb_path, '${directory:zodb-backup}/%s/' % zeo_slave['storage-name'], zeo_slave['serialize-path'] % {'site-id': site_id}) - current_zeo_port += 1 - output += snippet_zeo % dict( - zeo_id=zeo_id, - zeo_port=current_zeo_port, - storage_list='\n'.join(storage_list) - ) - part_list.extend([ - "zeo-instance-%s" % zeo_id, - "logrotate-entry-zeo-%s" % zeo_id - ]) - - zeo_connection_list = [] - a = zeo_connection_list.append - for k, v in zope_connection_dict.iteritems(): - a(' zeo-cache-size=%(zeo-cache-size)s zope-cache-size=%(zope-cache-size)s server=%(server)s mount-point=%(mount-point)s storage-name=%(storage-name)s' % v) - zeo_connection_string = '\n'.join(zeo_connection_list) - zope_dict.update( - timezone=json_data['timezone'], - zeo_connection_string=zeo_connection_string, - site_id=site_id, - ) - # always one distribution node - current_zope_port += 1 - snippet_zope = open(self.options['snippet-zope']).read() - zope_id = 'zope-distribution' - part_list.append(zope_id) - part_list.append('logrotate-entry-%s' % zope_id) - output += snippet_zope % dict(zope_thread_amount=1, zope_id=zope_id, - zope_port=current_zope_port, zope_timeserver=True, - longrequest_logger_file='', longrequest_logger_timeout='', - longrequest_logger_interval='', **zope_dict) - # always one admin node - current_zope_port += 1 - zope_id = 'zope-admin' - part_list.append(zope_id) - part_list.append('logrotate-entry-%s' % zope_id) - output += snippet_zope % dict(zope_thread_amount=1, zope_id=zope_id, - zope_port=current_zope_port, zope_timeserver=False, - longrequest_logger_file='', longrequest_logger_timeout='', - longrequest_logger_interval='', **zope_dict) - # handle activity key - for q in range(1, json_data['activity']['zopecount'] + 1): - current_zope_port += 1 - part_name = 'zope-activity-%s' % q - part_list.append(part_name) - part_list.append('logrotate-entry-%s' % part_name) - output += snippet_zope % dict(zope_thread_amount=1, zope_id=part_name, - zope_port=current_zope_port, zope_timeserver=True, - longrequest_logger_file='', longrequest_logger_timeout='', - longrequest_logger_interval='', **zope_dict) - # handle backend key - snippet_backend = open(self.options['snippet-backend']).read() - publish_url_list = [] - for backend_name, backend_configuration in json_data['backend'].iteritems(): - haproxy_backend_list = [] - for q in range(1, backend_configuration['zopecount'] + 1): - current_zope_port += 1 - part_name = 'zope-%s-%s' % (backend_name, q) - part_list.append(part_name) - part_list.append('logrotate-entry-%s' % part_name) - longrequest_logger = backend_configuration.get("longrequest-logger", None) - if longrequest_logger is not None: - longrequest_part_name = '%s-longrequest' %part_name - longrequest_logger_file = '${basedirectory:log}/%s.log' \ - %longrequest_part_name - longrequest_logger_timeout = longrequest_logger.get('timeout', '4') - longrequest_logger_interval = longrequest_logger.get('interval', '2') - else: - longrequest_logger_file = longrequest_logger_timeout = \ - longrequest_logger_interval = '' - output += snippet_zope % dict( - zope_thread_amount=backend_configuration['thread-amount'], - zope_id=part_name, zope_port=current_zope_port, zope_timeserver=False, - longrequest_logger_file=longrequest_logger_file, - longrequest_logger_timeout=longrequest_logger_timeout, - longrequest_logger_interval=longrequest_logger_interval, - **zope_dict) - haproxy_backend_list.append('${%(part_name)s:ip}:${%(part_name)s:port}' % dict(part_name=part_name)) - - scheme = backend_configuration.get('scheme', ['https']) - - # now generate backend access - current_apache_port += 1 - current_haproxy_port += 1 - backend_dict = dict( - backend_name=backend_name, - apache_port=current_apache_port, - apache_public_port=current_apache_port+1, - haproxy_port=current_haproxy_port, - access_control_string=backend_configuration['access-control-string'], - maxconn=backend_configuration['maxconn'], - server_check_path='/%s/getId' % site_id, - haproxy_backend_list=' '.join(haproxy_backend_list), - ssl_authentication=backend_configuration.get('ssl-authentication', - False), - backend_path=backend_configuration.get('backend-path', '/') % { - 'site-id': site_id} - - ) - current_apache_port += 1 - output += snippet_backend % backend_dict - - if 'http' in scheme: - part_list.append('apache-public-%(backend_name)s logrotate-entry-apache-public-%(backend_name)s' % dict(backend_name=backend_name)) - publish_url_list.append('url-public-%(backend_name)s = http://[${apache-public-%(backend_name)s:ip}]:${apache-public-%(backend_name)s:port}' % dict( - backend_name=backend_name)) - if 'https' in scheme: - part_list.append('apache-%(backend_name)s ca-apache-%(backend_name)s logrotate-entry-apache-%(backend_name)s haproxy-%(backend_name)s' % dict(backend_name=backend_name)) - publish_url_list.append('url-%(backend_name)s = https://[${apache-%(backend_name)s:ip}]:${apache-%(backend_name)s:port}' % dict( - backend_name=backend_name)) - - output += SECTION_BACKEND_PUBLISHER + '\n' - output += '\n'.join(publish_url_list) - part_list.append('publish-apache-backend-list') - master_dict = self.parameter_dict.copy() - if 'erp5-ca' in json_data: - erp5_ca = json_data['erp5-ca'] - # Fetching exactly named parameters from json in order to raise proper - # error if required - master_dict.update( - erp5_ca_country_code = erp5_ca['country-code'], - erp5_ca_email = erp5_ca['email'], - erp5_ca_state = erp5_ca['state'], - erp5_ca_city = erp5_ca['city'], - erp5_ca_company = erp5_ca['company'] - ) - else: - master_dict.update(dict( - erp5_ca_country_code = 'XX', - erp5_ca_email = 'xx@example.com', - # XXX-BBB: State by mistake has been configured as string "('State',)" - # string, so keep this for backward compatibility of existing - # automatically setup CAs - erp5_ca_state = "('State',)", - erp5_ca_city = 'City', - erp5_ca_company = 'Company' - )) - prepend = open(self.options['snippet-master']).read() % dict( - part_list=' \n'.join([' '+q for q in part_list]), - known_tid_storage_identifier_dict=known_tid_storage_identifier_dict, - haproxy_section="haproxy-%s" % backend_name, - zope_section=zope_id, - site_id=site_id, - **master_dict - ) - output = prepend + output - with open(self.options['output'], 'w') as f: - f.write(output) - - def _install(self): - if not os.path.exists(self.dirname): - os.mkdir(self.dirname) - if not "json" in self.parameter_dict: - # no json transimtted, nothing to do - with open(self.options['output'], 'w') as f: - f.write("[buildout]\nparts =\n") - else: - try: - self._generateRealTemplate() - except Exception: - print 'Ignored issue during template generation:\n%s' % \ - traceback.format_exc() - return [self.dirname] diff --git a/software/erp5/instance-cloudoo.cfg.in b/software/erp5/instance-cloudoo.cfg.in new file mode 100644 index 0000000000000000000000000000000000000000..aa1c353b0a8484fd2e1e08ddecffb9c3f6cd231c --- /dev/null +++ b/software/erp5/instance-cloudoo.cfg.in @@ -0,0 +1,64 @@ +{% if software_type == slapparameter_dict['slap_software_type'] -%} +{% set json = json_module.loads(parameter_dict.get('cloudooo-json', '{}')) -%} +{% set bin_directory = parameter_dict['buildout-bin-directory'] -%} +[buildout] +parts = + publish-cloudooo-connection-information + cloudooo-instance +eggs-directory = {{ eggs_directory }} +develop-eggs-directory = {{ develop_eggs_directory }} +offline = true + +[publish-cloudooo-connection-information] +recipe = slapos.cookbook:publishurl +url = cloudooo://${cloudooo-instance:ip}:${cloudooo-instance:port}/ + +[cloudooo-instance] +recipe = slapos.cookbook:generic.cloudooo + +# Network options +ip = ${slap-network-information:local-ipv4} +port = 23000 +openoffice-port = 23060 + +# Paths +configuration-file = ${rootdirectory:etc}/cloudooo.cfg +wrapper = ${basedirectory:services}/cloudooo + +# Paths: Data +data-directory = ${directory:cloudooo-data} + +environment = + LD_LIBRARY_PATH = {{ parameter_dict['file'] }}/lib:{{ parameter_dict['fontconfig'] }}/lib:{{ parameter_dict['freetype'] }}/lib:{{ parameter_dict['libICE'] }}/lib:{{ parameter_dict['libpng12'] }}/lib:{{ parameter_dict['libSM'] }}/lib:{{ parameter_dict['libX11'] }}/lib:{{ parameter_dict['libXau'] }}/lib:{{ parameter_dict['libXdmcp'] }}/lib:{{ parameter_dict['libXext'] }}/lib:{{ parameter_dict['libxcb'] }}/lib:{{ parameter_dict['libXrender'] }}/lib:{{ parameter_dict['zlib'] }}/lib + FONTCONFIG_FILE = ${fontconfig-instance:conf-path} + +# Binary information +# cloudooo specific configuration +ooo-binary-path = {{ parameter_dict['libreoffice-bin'] }}/program +ooo-paster = {{ bin_directory }}/cloudooo_paster +ooo-uno-path = {{ parameter_dict['libreoffice-bin'] }}/basis-link/program + +[fontconfig-instance] +recipe = slapos.cookbook:fontconfig +conf-path = ${rootdirectory:etc}/font.conf +font-system-folder = {{ parameter_dict['fonts'] }} +font-folder = ${directory:font} +url-list = {{ json.get('font_url_list', []) | join(' ') }} +service-folder = ${basedirectory:services} +onetimedownload_path = {{ bin_directory }}/onetimedownload + +# rest of parts are candidates for some generic stuff +[basedirectory] +recipe = slapos.cookbook:mkdirectory +services = ${rootdirectory:etc}/run + +[directory] +recipe = slapos.cookbook:mkdirectory +cloudooo-data = ${rootdirectory:srv}/cloudooo +font = ${rootdirectory:srv}/font + +[rootdirectory] +recipe = slapos.cookbook:mkdirectory +etc = ${buildout:directory}/etc +srv = ${buildout:directory}/srv +{% endif %} diff --git a/software/erp5/instance-cloudooo.cfg b/software/erp5/instance-cloudooo.cfg deleted file mode 100644 index 3428ecd13a81c40fd81878813c547620369db93a..0000000000000000000000000000000000000000 --- a/software/erp5/instance-cloudooo.cfg +++ /dev/null @@ -1,61 +0,0 @@ -[buildout] -parts = - publish-cloudooo-connection-information - cloudooo-instance - -eggs-directory = ${buildout:eggs-directory} -develop-eggs-directory = ${buildout:develop-eggs-directory} -offline = true - -[publish-cloudooo-connection-information] -recipe = slapos.cookbook:publishurl -url = cloudooo://$${cloudooo-instance:ip}:$${cloudooo-instance:port}/ - -[cloudooo-instance] -recipe = slapos.cookbook:generic.cloudooo - -# Network options -ip = $${slap-network-information:local-ipv4} -port = 23000 -openoffice-port = 23060 - -# Paths -configuration-file = $${rootdirectory:etc}/cloudooo.cfg -wrapper = $${basedirectory:services}/cloudooo - -# Paths: Data -data-directory = $${directory:cloudooo-data} - -environment = - LD_LIBRARY_PATH = ${file:location}/lib:${fontconfig:location}/lib:${freetype:location}/lib:${libICE:location}/lib:${libpng12:location}/lib:${libSM:location}/lib:${libX11:location}/lib:${libXau:location}/lib:${libXdmcp:location}/lib:${libXext:location}/lib:${libxcb:location}/lib:${libXrender:location}/lib:${zlib:location}/lib - FONTCONFIG_FILE = $${fontconfig-instance:conf-path} - -# Binary information -# cloudooo specific configuration -ooo-binary-path = ${libreoffice-bin:location}/program -ooo-paster = ${buildout:bin-directory}/cloudooo_paster -ooo-uno-path = ${libreoffice-bin:location}/basis-link/program - -[fontconfig-instance] -recipe = slapos.cookbook:fontconfig -conf-path = $${rootdirectory:etc}/font.conf -font-system-folder = ${fonts:location} -font-folder = $${directory:font} -url-list = $${dynamic-fontconfig-instance:url-list} -service-folder = $${basedirectory:services} -onetimedownload_path = ${buildout:bin-directory}/onetimedownload - -# rest of parts are candidates for some generic stuff -[basedirectory] -recipe = slapos.cookbook:mkdirectory -services = $${rootdirectory:etc}/run - -[directory] -recipe = slapos.cookbook:mkdirectory -cloudooo-data = $${rootdirectory:srv}/cloudooo -font = $${rootdirectory:srv}/font - -[rootdirectory] -recipe = slapos.cookbook:mkdirectory -etc = $${buildout:directory}/etc -srv = $${buildout:directory}/srv diff --git a/software/erp5/instance-tidstorage.cfg.in b/software/erp5/instance-tidstorage.cfg.in new file mode 100644 index 0000000000000000000000000000000000000000..580c72303e69ed3d3e283facb67d49be40ff4e33 --- /dev/null +++ b/software/erp5/instance-tidstorage.cfg.in @@ -0,0 +1,518 @@ +{% if software_type == slapparameter_dict['slap_software_type'] -%} +{# +Note: all port counters are pre-incremented. No idea why base port is skipped. +-#} +{% set current_zeo_port = zeo_port_base | int -%} +{% set zope_port_base = zope_port_base | int -%} +{% set zope_dummy_list = [] %} +{% set current_apache_port = apache_port_base | int -%} +{% set current_haproxy_port = haproxy_port_base | int -%} +{% set json = json_module.loads(slapparameter_dict['json']) -%} +{% set bin_directory = parameter_dict['buildout-bin-directory'] -%} +{# +BBB: erp5-ca['state'] has been configured as string by mistake. Keep this for +backward compatibility with existing automatically setup CAs. +-#} +{% set erp5_ca = json.get('erp5-ca', { + 'country-code': 'ZZ', + 'email': 'nobody@example.com', + 'state': "('State',)", + 'city': 'City', + 'company': 'Company', +}) -%} +{% set site_id = json['site-id'] -%} +{% set part_list = [] -%} +{% set known_tid_storage_identifier_dict = {} -%} +{% set zodb_connection_list = [] -%} +{% macro section(name) %}{% do part_list.append(name) %}{{ name }}{% endmacro -%} +{% macro zope( + name, + thread_amount=1, + timeserver=False, + longrequest_logger_file='', + longrequest_logger_timeout='', + longrequest_logger_interval='' +) -%} +[{{ section(name) }}] +recipe = slapos.cookbook:generic.zope.zeo.client + +# XXX: products won't be needed as soon as all ERP5 (and products-deps) +# products will be eggified so then it will be possible to use them thanks to +# availability in software's eggs +products = {{ parameter_dict['products'] }} + +# Options +user = zope +{% do zope_dummy_list.append(None) %} +{% set offset = zope_dummy_list | length %} +port = {{ zope_port_base + offset }} +ip = ${slap-network-information:local-ipv4} +thread-amount = {{ thread_amount }} +deadlock-path = /manage_debug_threads +timezone = {{ json['timezone'] }} +zeo-connection-string = + {{ zodb_connection_string }} + +timeserver = {{ timeserver }} +tidstorage-ip = ${tidstorage:ip} +tidstorage-port = ${tidstorage:port} + +# long request +longrequest-logger-file = {{ longrequest_logger_file }} +longrequest-logger-timeout = {{ longrequest_logger_timeout }} +longrequest-logger-interval = {{ longrequest_logger_interval }} + +# Paths +wrapper = ${basedirectory:services}/{{ name }} +instance-path = ${directory:instance} +instance-etc = ${directory:instance-etc} +instance-products = ${directory:instance-products} +bt5-repository = ${rootdirectory:var}/bt5_repository +tmp-path = ${rootdirectory:tmp} +bin-path = ${rootdirectory:bin} +site-zcml = ${:instance-etc}/site.zcml +pid-file = ${basedirectory:run}/{{ name }}.pid +lock-file = ${basedirectory:run}/{{ name }}.lock +event-log = ${basedirectory:log}/{{ name }}-event.log +z2-log = ${basedirectory:log}/{{ name }}-Z2.log +configuration-file = ${rootdirectory:etc}/{{ name }}.conf +inituser = ${:instance-path}/inituser +# Binary information +runzope-binary = {{ bin_directory }}/runzope + +# BT5 Configuration +bt5-repository-list = + +promise-path = ${erp5-promise:promise-path} +site-id = {{ site_id }} + +[{{ section('logrotate-entry-' + name) }}] +< = logrotate-base +recipe = slapos.cookbook:logrotate.d +name = {{ name }} +log = {{ '${' + name + ':event-log}' }} {{ '${' + name + ':z2-log}' }} +post = {{ bin_directory }}/killpidfromfile {{ '${' + name + ':pid-file}' }} SIGUSR2 +{% endmacro -%} +############################# +# Directory creation +############################# +[rootdirectory] +recipe = slapos.cookbook:mkdirectory +etc = ${buildout:directory}/etc +var = ${buildout:directory}/var +srv = ${buildout:directory}/srv +bin = ${buildout:directory}/bin +tmp = ${buildout:directory}/tmp + +[basedirectory] +recipe = slapos.cookbook:mkdirectory +log = ${rootdirectory:var}/log +services = ${rootdirectory:etc}/run +run = ${rootdirectory:var}/run +backup = ${rootdirectory:srv}/backup + +[directory] +recipe = slapos.cookbook:mkdirectory +tidstorage = ${rootdirectory:srv}/tidstorage +zodb = ${rootdirectory:srv}/zodb +zodb-backup = ${basedirectory:backup}/zodb +instance = ${rootdirectory:srv}/erp5shared +instance-etc = ${:instance}/etc +apache-conf = ${rootdirectory:etc}/apache +instance-etc-package-include = ${:instance}/etc/package-include +instance-document = ${:instance}/Document +instance-propertysheet = ${:instance}/PropertySheet +instance-products = ${:instance}/Products +instance-extensions = ${:instance}/Extensions +instance-constraint = ${:instance}/Constraint +instance-import = ${:instance}/import +instance-lib = ${:instance}/lib +instance-tests = ${:instance}/tests +erp5-ca-dir = ${rootdirectory:srv}/erp5-ssl +ca-dir = ${rootdirectory:srv}/ssl +cron-entries = ${rootdirectory:etc}/cron.d +crontabs = ${rootdirectory:etc}/crontabs +cronstamps = ${rootdirectory:etc}/cronstamps +logrotate-backup = ${basedirectory:backup}/logrotate +logrotate-entries = ${rootdirectory:etc}/logrotate.d + +############################# +# Binary symlinking +############################# +[binary-link] +recipe = slapos.cookbook:symbolic.link +target-directory = ${rootdirectory:bin} +link-binary = + {{ parameter_dict['coreutils'] }}/bin/basename + {{ parameter_dict['coreutils'] }}/bin/cat + {{ parameter_dict['coreutils'] }}/bin/cp + {{ parameter_dict['coreutils'] }}/bin/ls + {{ parameter_dict['coreutils'] }}/bin/tr + {{ parameter_dict['coreutils'] }}/bin/uname + {{ parameter_dict['git'] }}/bin/git + {{ parameter_dict['graphviz'] }}/bin/dot + {{ parameter_dict['grep'] }}/bin/grep + {{ parameter_dict['imagemagick'] }}/bin/convert + {{ parameter_dict['imagemagick'] }}/bin/identify + {{ parameter_dict['mariadb'] }}/bin/mysql + {{ parameter_dict['mariadb'] }}/bin/mysqldump + {{ parameter_dict['pdftk'] }}/bin/pdftk + {{ parameter_dict['sed'] }}/bin/sed + {{ parameter_dict['tesseract'] }}/bin/tesseract + {{ parameter_dict['w3m'] }}/bin/w3m + {{ parameter_dict['poppler'] }}/bin/pdfinfo + {{ parameter_dict['poppler'] }}/bin/pdftotext + {{ parameter_dict['poppler'] }}/bin/pdftohtml + +############################# +# CA +############################# +[cadirectory] +recipe = slapos.cookbook:mkdirectory +requests = ${directory:ca-dir}/requests +private = ${directory:ca-dir}/private +certs = ${directory:ca-dir}/certs +newcerts = ${directory:ca-dir}/newcerts +crl = ${directory:ca-dir}/crl + +[certificate-authority] +recipe = slapos.cookbook:certificate_authority +openssl-binary = {{ parameter_dict['openssl'] }}/bin/openssl +ca-dir = ${directory:ca-dir} +requests-directory = ${cadirectory:requests} +wrapper = ${basedirectory:services}/ca +ca-private = ${cadirectory:private} +ca-certs = ${cadirectory:certs} +ca-newcerts = ${cadirectory:newcerts} +ca-crl = ${cadirectory:crl} + +############################# +# ERP5 CA +############################# +[erp5-cadirectory] +recipe = slapos.cookbook:mkdirectory +requests = ${directory:erp5-ca-dir}/requests +private = ${directory:erp5-ca-dir}/private +certs = ${directory:erp5-ca-dir}/certs +newcerts = ${directory:erp5-ca-dir}/newcerts +crl = ${directory:erp5-ca-dir}/crl + +[erp5-certificate-authority] +recipe = slapos.cookbook:certificate_authority +openssl-binary = {{ parameter_dict['openssl'] }}/bin/openssl +ca-dir = ${directory:erp5-ca-dir} +requests-directory = ${erp5-cadirectory:requests} +wrapper = ${basedirectory:services}/erp5-ca +ca-private = ${erp5-cadirectory:private} +ca-certs = ${erp5-cadirectory:certs} +ca-newcerts = ${erp5-cadirectory:newcerts} +ca-crl = ${erp5-cadirectory:crl} +country-code = {{ erp5_ca['country-code'] }} +email = {{ erp5_ca['email'] }} +state = {{ erp5_ca['state'] }} +city = {{ erp5_ca['city'] }} +company = {{ erp5_ca['company'] }} + +############################# +# CRON +############################# +[cron-base] +cron-entries = ${directory:cron-entries} + +[cron] +< = cron-base +recipe = slapos.cookbook:cron +dcrond-binary = {{ parameter_dict['dcron'] }}/sbin/crond +crontabs = ${directory:crontabs} +cronstamps = ${directory:cronstamps} +catcher = ${cron-simplelogger:wrapper} +binary = ${basedirectory:services}/crond + +[cron-simplelogger] +recipe = slapos.cookbook:simplelogger +wrapper = ${rootdirectory:bin}/cron_simplelogger +log = ${basedirectory:log}/cron.log + +############################# +# Logrotate +############################# +[logrotate-base] +logrotate-entries = ${directory:logrotate-entries} +backup = ${directory:logrotate-backup} + +[logrotate] +< = logrotate-base +recipe = slapos.cookbook:logrotate +# Binaries +logrotate-binary = {{ parameter_dict['logrotate'] }}/usr/sbin/logrotate +gzip-binary = {{ parameter_dict['gzip'] }}/bin/gzip +gunzip-binary = {{ parameter_dict['gzip'] }}/bin/gunzip +# Directories +wrapper = ${rootdirectory:bin}/logrotate +conf = ${rootdirectory:etc}/logrotate.conf +state-file = ${rootdirectory:srv}/logrotate.status + +[cron-entry-logrotate] +< = cron-base +recipe = slapos.cookbook:cron.d +name = logrotate +frequency = 0 0 * * * +command = ${logrotate:wrapper} + +############################# +# ERP5 bootstrap +############################# +[erp5-bootstrap] +recipe = slapos.cookbook:erp5.bootstrap +runner-path = ${basedirectory:services}/erp5-bootstrap +mysql-url = {{ slapparameter_dict['mysql-url'] }} +zope-url = http://${zope-admin:user}:${zope-admin:password}@${zope-admin:ip}:${zope-admin:port}/{{ site_id }} + +############################# +# ERP5 promise +############################# +[erp5-promise] +recipe = slapos.cookbook:erp5.promise +promise-path = ${rootdirectory:etc}/erp5promise.cfg +kumofs-url = {{ slapparameter_dict['kumofs-url'] }} +memcached-url = {{ slapparameter_dict['memcached-url'] }} +cloudooo-url = {{ slapparameter_dict['cloudooo-url'] }} +smtp-url = ${slap-parameter:smtp-url} +bt5 = ${slap-parameter:bt5} +bt5-repository-url = ${slap-parameter:bt5-repository-url} + +############################# +# ZEO +############################# +[zeo-instance-entry-common] +recipe = slapos.cookbook:zeo +ip = ${slap-network-information:local-ipv4} +binary-path = {{ bin_directory }}/runzeo + +{% for zeo_id, zeo_configuration_list in json['zeo'].iteritems() -%} +{% set storage_list = [] -%} +{% for zeo_slave in zeo_configuration_list -%} +{% do zodb_connection_list.append( + 'zeo-cache-size=%(zeo-cache-size)s zope-cache-size=%(zope-cache-size)s ' + 'server=%(server)s mount-point=%(mount-point)s storage-name=%(storage-name)s' % { + 'zope-cache-size': zeo_slave['zope-cache-size'], + 'zeo-cache-size': zeo_slave['zeo-cache-size'], + 'mount-point': zeo_slave['mount-point'] % {'site-id': site_id}, + 'storage-name': zeo_slave['storage-name'], + 'server': '${zeo-instance-%(zeo-id)s:ip}:${zeo-instance-%(zeo-id)s:port}' % {'zeo-id': zeo_id}, + }) -%} +{% set zodb_path = '${directory:zodb}/' + zeo_slave['storage-name'] + '.fs' -%} +{% do storage_list.append('storage-name=%(storage-name)s zodb-path=%(zodb-path)s' % {'zodb-path': zodb_path, 'storage-name': zeo_slave['storage-name']}) -%} +{% do known_tid_storage_identifier_dict.__setitem__("((('%(ip)s', %(port)s),), '%(storage_name)s')" % { + 'ip': '${zeo-instance-%s:ip}' % zeo_id, + 'port': '${zeo-instance-%s:port}' % zeo_id, + 'storage_name': zeo_slave['storage-name'] + }, (zodb_path, '${directory:zodb-backup}/%s/' % zeo_slave['storage-name'], zeo_slave['serialize-path'] % {'site-id': site_id})) -%} +{% endfor -%} +{% set current_zeo_port = current_zeo_port + 1 -%} +[{{ section('zeo-instance-%s' % zeo_id) }}] +< = zeo-instance-entry-common +log-path = ${basedirectory:log}/zeo-{{ zeo_id }}.log +pid-path = ${basedirectory:run}/zeo-{{ zeo_id }}.pid +conf-path = ${rootdirectory:etc}/zeo-{{ zeo_id }}.conf +port = {{ current_zeo_port }} +storage = + {{ storage_list | join('\n ') }} +wrapper-path = ${basedirectory:services}/zeo-{{ zeo_id }} + +[{{ section('logrotate-entry-zeo-%s' % zeo_id) }}] +< = logrotate-base +recipe = slapos.cookbook:logrotate.d +name = zeo-{{ zeo_id }} +log = ${zeo-instance-{{ zeo_id }}:log-path} +post = {{ bin_directory }}/killpidfromfile ${zeo-instance-{{ zeo_id }}:pid-path} SIGUSR2 +{% endfor %} +{% set zodb_connection_string = zodb_connection_list | join('\n ') -%} +############################# +# Zope +############################# +# Distribution node +{{ zope('zope-distribution', timeserver=True) }} +# Admin node +{{ zope('zope-admin') }} +# Activity nodes +{% for q in range(1, json['activity']['zopecount'] + 1) -%} +{{ zope('zope-activity-%s' % q, timeserver=True) }} +{% endfor %} +# Other zopes, apaches and haproxies +{% set publish_url_list = [] -%} +{% for backend_name, backend_configuration in json['backend'].iteritems() -%} +{% set haproxy_backend_list = [] -%} +{% set longrequest_logger = backend_configuration.get('longrequest-logger') -%} +{% for q in range(1, backend_configuration['zopecount'] + 1) -%} +{% set part_name = 'zope-%s-%s' % (backend_name, q) -%} +{% if longrequest_logger != None -%} +{% set longrequest_logger_file = '${basedirectory:log}/%s-longrequest.log' % (part_name, ) -%} +{% set longrequest_logger_timeout = longrequest_logger.get('timeout', '4') -%} +{% set longrequest_logger_interval = longrequest_logger.get('interval', '2') -%} +{% else -%} +{% set longrequest_logger_file = '' -%} +{% set longrequest_logger_timeout = '' -%} +{% set longrequest_logger_interval = '' -%} +{% endif -%} +{{ zope( + part_name, + thread_amount=backend_configuration['thread-amount'], + longrequest_logger_file=longrequest_logger_file, + longrequest_logger_timeout=longrequest_logger_timeout, + longrequest_logger_interval=longrequest_logger_interval, + ) }} +{% do haproxy_backend_list.append('${%(part_name)s:ip}:${%(part_name)s:port}' % {'part_name': part_name}) -%} +{% endfor %} +{% set scheme = backend_configuration.get('scheme', ['https']) -%} +{% set current_apache_port = current_apache_port + 2 -%} +{% set current_haproxy_port = current_haproxy_port + 1 -%} +{% if 'http' in scheme -%} +{% set section_name = 'apache-public-' ~ backend_name -%} +{% do publish_url_list.append( + 'url-public-%(backend_name)s = http://[${%(section_name)s:ip}]:${%(section_name)s:port}' % { + 'backend_name': backend_name, + 'section_name': section_name, + }) -%} +[{{ section(section_name) }}] +recipe = slapos.cookbook:apache.zope.backend +backend = http://${haproxy-{{ backend_name }}:ip}:${haproxy-{{ backend_name }}:port} +ip = ${slap-network-information:global-ipv6} +port = {{ current_apache_port }} +scheme = http +wrapper = ${basedirectory:services}/apache-public-{{ backend_name }} +configuration-file = ${directory:apache-conf}/apache-public-{{ backend_name }}.conf +access-control-string = {{ backend_configuration['access-control-string'] }} +pid-file = ${basedirectory:run}/apache-public-{{ backend_name }}.pid +lock-file = ${basedirectory:run}/apache-public-{{ backend_name }}.lock +error-log = ${basedirectory:log}/apache-public-{{ backend_name }}-error.log +access-log = ${basedirectory:log}/apache-public-{{ backend_name }}-access.log +apache-binary = {{ parameter_dict['apache'] }}/bin/httpd + +[{{ section('logrotate-entry-apache-public-' ~ backend_name) }}] +< = logrotate-base +recipe = slapos.cookbook:logrotate.d +name = apache-public-{{ backend_name }} +log = ${apache-public-{{ backend_name }}:error-log} ${apache-public-{{ backend_name }}:access-log} +post = {{ bin_directory }}/killpidfromfile ${apache-public-{{ backend_name }}:pid-file} SIGUSR1 +{% endif %} +{% if 'https' in scheme -%} +{% set section_name = 'apache-' ~ backend_name -%} +{% do publish_url_list.append( + 'url-%(backend_name)s = https://[${%(section_name)s:ip}]:${%(section_name)s:port}' % { + 'backend_name': backend_name, + 'section_name': section_name, + }) -%} +[{{ section(section_name) }}] +recipe = slapos.cookbook:apache.zope.backend +backend = http://${haproxy-{{ backend_name }}:ip}:${haproxy-{{ backend_name }}:port} +ip = ${slap-network-information:global-ipv6} +port = {{ current_apache_port - 1 }} +wrapper = ${rootdirectory:bin}/apache-{{ backend_name }} +scheme = https +key-file = ${directory:apache-conf}/apache-{{ backend_name }}.key +cert-file = ${directory:apache-conf}/apache-{{ backend_name }}.crt +configuration-file = ${directory:apache-conf}/apache-{{ backend_name }}.conf +access-control-string = {{ backend_configuration['access-control-string'] }} +pid-file = ${basedirectory:run}/apache-{{ backend_name }}.pid +lock-file = ${basedirectory:run}/apache-{{ backend_name }}.lock +ssl-session-cache = $${basedirectory:log}/apache-ssl-session-cache +error-log = ${basedirectory:log}/apache-{{ backend_name }}-error.log +access-log = ${basedirectory:log}/apache-{{ backend_name }}-access.log +apache-binary = {{ parameter_dict['apache'] }}/bin/httpd +ssl-authentication = {{ backend_configuration.get('ssl-authentication', False) }} +backend-path = {{ backend_configuration.get('backend-path', '/') % {'site-id': site_id} }} +# Note: Without erp5-certificate-authority main certificate have to be hardcoded +ssl-authentication-certificate = ${erp5-certificate-authority:ca-dir}/cacert.pem +ssl-authentication-crl = ${erp5-certificate-authority:ca-crl} + +[{{ section('ca-apache-' ~ backend_name) }}] +< = certificate-authority +recipe = slapos.cookbook:certificate_authority.request +key-file = ${apache-{{ backend_name }}:key-file} +cert-file = ${apache-{{ backend_name }}:cert-file} +executable = ${apache-{{ backend_name }}:wrapper} +wrapper = ${basedirectory:services}/apache-{{ backend_name }} + +[{{ section('logrotate-entry-apache-' ~ backend_name) }}] +< = logrotate-base +recipe = slapos.cookbook:logrotate.d +name = apache-{{ backend_name }} +log = ${apache-{{ backend_name }}:error-log} ${apache-{{ backend_name }}:access-log} +post = {{ bin_directory }}/killpidfromfile ${apache-{{ backend_name }}:pid-file} SIGUSR1 + +[{{ section('haproxy-' ~ backend_name) }}] +recipe = slapos.cookbook:haproxy +name = {{ backend_name }} +conf-path = ${rootdirectory:etc}/haproxy-{{ backend_name }}.cfg +ip = ${slap-network-information:local-ipv4} +port = {{ current_haproxy_port }} +maxconn = {{ backend_configuration['maxconn'] }} +server-check-path = /{{ site_id }}/getId +wrapper-path = ${basedirectory:services}/haproxy-{{ backend_name }} +binary-path = {{ parameter_dict['haproxy'] }}/sbin/haproxy +backend-list = {{ haproxy_backend_list | join(' ')}} +{% endif -%} +{% endfor %} + +[{{ section('publish-apache-backend-list') }}] +recipe = slapos.cookbook:publish +{{ publish_url_list | join('\n') }} + +############################# +# tidstorage +############################# +[tidstorage] +recipe = slapos.cookbook:tidstorage +known-tid-storage-identifier-dict = {{ known_tid_storage_identifier_dict }} +base-url = http://${zope-admin:ip}:${zope-admin:port}/%s/serialize +configuration-path = ${rootdirectory:etc}/tidstorage.py +ip = ${slap-network-information:local-ipv4} +port = 6001 +timestamp-file-path = ${directory:tidstorage}/repozo_tidstorage_timestamp.log +logfile-name = ${basedirectory:log}/tidstorage.log +pidfile-name = ${basedirectory:run}/tidstorage.pid +status-file = ${directory:tidstorage}/tidstorage.tid +tidstorage-repozo-binary = {{ bin_directory }}/tidstorage_repozo +tidstoraged-binary = {{ bin_directory }}/tidstoraged +repozo-binary = {{ bin_directory }}/repozo +tidstorage-wrapper = ${basedirectory:services}/tidstoraged +repozo-wrapper = ${buildout:bin-directory}/tidstorage-repozo + +[cron-entry-tidstorage-backup] +< = cron-base +recipe = slapos.cookbook:cron.d +name = tidstorage +frequency = 0 0 * * * +command = ${tidstorage:repozo-wrapper} + +[logrotate-entry-tidstorage] +< = logrotate-base +recipe = slapos.cookbook:logrotate.d +name = tidstorage +log = ${tidstorage:logfile-name} +post = {{ bin_directory }}/killpidfromfile ${tidstorage:pidfile-name} SIGHUP + +############################# +# buildout main section +############################# +[buildout] +parts = + logrotate + cron + cron-entry-logrotate + certificate-authority + erp5-certificate-authority + tidstorage + cron-entry-tidstorage-backup + logrotate-entry-tidstorage + binary-link + erp5-promise + erp5-bootstrap + {{ part_list | join('\n ') }} + +eggs-directory = {{ eggs_directory }} +develop-eggs-directory = {{ develop_eggs_directory }} +offline = true + +{% endif %} diff --git a/software/erp5/instance.cfg b/software/erp5/instance.cfg deleted file mode 100644 index f3dece0757f0f60341f51a552240f1b2ad6dbb34..0000000000000000000000000000000000000000 --- a/software/erp5/instance.cfg +++ /dev/null @@ -1,45 +0,0 @@ -[instance] -rdiff_backup_binary = ${buildout:bin-directory}/rdiff-backup - -[buildout] - -parts = - switch-softwaretype - -eggs-directory = ${buildout:eggs-directory} -develop-eggs-directory = ${buildout:develop-eggs-directory} -offline = true - -[dynamic-template-tidstorage] -recipe = slapos.cookbook:generate.erp5.tidstorage -snippet-zeo = ${template-snippet-zeo:output} -snippet-zope = ${template-snippet-zope:output} -snippet-master = ${template-snippet-master:output} -snippet-backend = ${template-snippet-backend:output} - -[dynamic-template-cloudooo] -recipe = slapos.cookbook:generate.cloudooo -template = ${template-cloudooo:output} -snippet-fontconfig = ${template-snippet-fontconfig:output} - -[switch-softwaretype] -recipe = slapos.cookbook:softwaretype -default = ${template-erp5-development:rendered} -production = ${template-erp5-production:rendered} -kumofs = ${template-kumofs:rendered} -memcached = ${template-memcached:rendered} -cloudooo = $${dynamic-template-cloudooo:output} -zope = ${template-zope:rendered} -mariadb = ${template-mariadb:rendered} -sphinx = ${template-sphinx:rendered} -tidstorage = $${dynamic-template-tidstorage:output} -varnish = ${template-varnish:rendered} - -[slap-connection] -# part to migrate to new - separated words -computer-id = $${slap_connection:computer_id} -partition-id = $${slap_connection:partition_id} -server-url = $${slap_connection:server_url} -software-release-url = $${slap_connection:software_release_url} -key-file = $${slap_connection:key_file} -cert-file = $${slap_connection:cert_file} diff --git a/software/erp5/instance.cfg.in b/software/erp5/instance.cfg.in new file mode 100644 index 0000000000000000000000000000000000000000..5a59fe3c1d9850541081a886ca8fa9a4fa187aa5 --- /dev/null +++ b/software/erp5/instance.cfg.in @@ -0,0 +1,112 @@ +[buildout] +parts = + switch-softwaretype + +eggs-directory = {{ eggs_directory }} +develop-eggs-directory = {{ develop_eggs_directory }} +offline = true + +[slap-parameters] +recipe = slapos.cookbook:slapparameters +computer = ${slap-connection:computer-id} +partition = ${slap-connection:partition-id} +url = ${slap-connection:server-url} +key = ${slap-connection:key-file} +cert = ${slap-connection:cert-file} + +[jinja2-template-base] +recipe = slapos.recipe.template:jinja2 +template = {{ profile_base_location }}/${:filename}.in +rendered = ${buildout:parts-directory}/${:_buildout_section_name_}/${:filename} +extra-context = +context = + key eggs_directory buildout:eggs-directory + key develop_eggs_directory buildout:develop-eggs-directory + jsonkey slapparameter_dict slap-parameters:json + ${:extra-context} + +[dynamic-template-tidstorage-parameters] +products = {{ product_list }} +apache = {{ apache_location }} +haproxy = {{ haproxy_location }} +dcron = {{ dcron_location }} +logrotate = {{ logrotate_location }} +gzip = {{ gzip_location }} +openssl = {{ openssl_location }} +coreutils = {{ coreutils_location }} +git = {{ git_location }} +graphviz = {{ graphviz_location }} +grep = {{ grep_location }} +imagemagick = {{ imagemagick_location }} +mariadb = {{ mariadb_location }} +pdftk = {{ pdftk_location }} +sed = {{ sed_location }} +tesseract = {{ tesseract_location }} +w3m = {{ w3m_location }} +poppler = {{ poppler_location }} +buildout-bin-directory = {{ buildout_bin_directory }} + +[dynamic-template-tidstorage] +< = jinja2-template-base +filename = instance-tidstorage.cfg +md5sum = 5c3e834bf60819cf52995630e563227c +extensions = jinja2.ext.do +extra-context = + section parameter_dict dynamic-template-tidstorage-parameters + import json_module json + raw zope_port_base 12000 + raw zeo_port_base 15000 + raw haproxy_port_base 11000 + raw apache_port_base 10000 +# Must match the key id in [switch-softwaretype] which uses this section. + raw software_type tidstorage + +[dynamic-template-cloudooo-parameters] +file = {{ file_location }} +fontconfig = {{ fontconfig_location }} +freetype = {{ freetype_location }} +libICE = {{ libICE_location }} +libpng12 = {{ libpng12_location }} +libSM = {{ libSM_location }} +libX11 = {{ libX11_location }} +libXau = {{ libXau_location }} +libXdmcp = {{ libXdmcp_location }} +libXext = {{ libXext_location }} +libxcb = {{ libxcb_location }} +libXrender = {{ libXrender_location }} +zlib = {{ zlib_location }} +libreoffice-bin = {{ libreoffice_bin_location }} +fonts = {{ fonts_location }} +buildout-bin-directory = {{ buildout_bin_directory }} + +[dynamic-template-cloudooo] +< = jinja2-template-base +filename = instance-cloudoo.cfg +md5sum = aea927d5d3363177fd1017c4b89838d7 +extra-context = + section parameter_dict dynamic-template-cloudooo-parameters + import json_module json +# Must match the key id in [switch-softwaretype] which uses this section. + raw software_type cloudooo + +[switch-softwaretype] +recipe = slapos.cookbook:softwaretype +default = {{ template_erp5_development }} +production = {{ template_erp5_production }} +kumofs = {{ template_kumofs }} +memcached = {{ template_memcached }} +cloudooo = ${dynamic-template-cloudooo:rendered} +zope = {{ template_zope }} +mariadb = {{ template_mariadb }} +sphinx = {{ template_sphinx }} +tidstorage = ${dynamic-template-tidstorage:rendered} +varnish = {{ template_varnish }} + +[slap-connection] +# part to migrate to new - separated words +computer-id = ${slap_connection:computer_id} +partition-id = ${slap_connection:partition_id} +server-url = ${slap_connection:server_url} +software-release-url = ${slap_connection:software_release_url} +key-file = ${slap_connection:key_file} +cert-file = ${slap_connection:cert_file} diff --git a/software/erp5/snippet-backend.cfg b/software/erp5/snippet-backend.cfg deleted file mode 100644 index 6effa6b4f55c83047d1db3b188a7c37e18b8c867..0000000000000000000000000000000000000000 --- a/software/erp5/snippet-backend.cfg +++ /dev/null @@ -1,71 +0,0 @@ -[apache-public-%(backend_name)s] -recipe = slapos.cookbook:apache.zope.backend -backend = http://$${haproxy-%(backend_name)s:ip}:$${haproxy-%(backend_name)s:port}/ -ip = $${slap-network-information:global-ipv6} -port = %(apache_public_port)s -scheme = http -wrapper = $${basedirectory:services}/apache-public-%(backend_name)s -configuration-file = $${directory:apache-conf}/apache-public-%(backend_name)s.conf -access-control-string = %(access_control_string)s -pid-file = $${basedirectory:run}/apache-public-%(backend_name)s.pid -lock-file = $${basedirectory:run}/apache-public-%(backend_name)s.lock -error-log = $${basedirectory:log}/apache-public-%(backend_name)s-error.log -access-log = $${basedirectory:log}/apache-public-%(backend_name)s-access.log -apache-binary = ${apache:location}/bin/httpd - -[apache-%(backend_name)s] -recipe = slapos.cookbook:apache.zope.backend -backend = http://$${haproxy-%(backend_name)s:ip}:$${haproxy-%(backend_name)s:port} -ip = $${slap-network-information:global-ipv6} -port = %(apache_port)s -wrapper = $${rootdirectory:bin}/apache-%(backend_name)s -scheme = https -key-file = $${directory:apache-conf}/apache-%(backend_name)s.key -cert-file = $${directory:apache-conf}/apache-%(backend_name)s.crt -configuration-file = $${directory:apache-conf}/apache-%(backend_name)s.conf -access-control-string = %(access_control_string)s -pid-file = $${basedirectory:run}/apache-%(backend_name)s.pid -lock-file = $${basedirectory:run}/apache-%(backend_name)s.lock -ssl-session-cache = $${basedirectory:log}/apache-ssl-session-cache -error-log = $${basedirectory:log}/apache-%(backend_name)s-error.log -access-log = $${basedirectory:log}/apache-%(backend_name)s-access.log -apache-binary = ${apache:location}/bin/httpd -ssl-authentication = %(ssl_authentication)s -backend-path = %(backend_path)s -# Note: Without erp5-certificate-authority main certificate have to be hardcoded -ssl-authentication-certificate = $${erp5-certificate-authority:ca-dir}/cacert.pem -ssl-authentication-crl = $${erp5-certificate-authority:ca-crl} - -[ca-apache-%(backend_name)s] -<= certificate-authority -recipe = slapos.cookbook:certificate_authority.request -key-file = $${apache-%(backend_name)s:key-file} -cert-file = $${apache-%(backend_name)s:cert-file} -executable = $${apache-%(backend_name)s:wrapper} -wrapper = $${basedirectory:services}/apache-%(backend_name)s - -[logrotate-entry-apache-public-%(backend_name)s] -<= logrotate -recipe = slapos.cookbook:logrotate.d -name = apache-public-%(backend_name)s -log = $${apache-public-%(backend_name)s:error-log} $${apache-public-%(backend_name)s:access-log} -post = ${buildout:bin-directory}/killpidfromfile $${apache-public-%(backend_name)s:pid-file} SIGUSR1 - -[logrotate-entry-apache-%(backend_name)s] -<= logrotate -recipe = slapos.cookbook:logrotate.d -name = apache-%(backend_name)s -log = $${apache-%(backend_name)s:error-log} $${apache-%(backend_name)s:access-log} -post = ${buildout:bin-directory}/killpidfromfile $${apache-%(backend_name)s:pid-file} SIGUSR1 - -[haproxy-%(backend_name)s] -recipe = slapos.cookbook:haproxy -name = %(backend_name)s -conf-path = $${rootdirectory:etc}/haproxy-%(backend_name)s.cfg -ip = $${slap-network-information:local-ipv4} -port = %(haproxy_port)s -maxconn = %(maxconn)s -server-check-path = %(server_check_path)s -wrapper-path = $${basedirectory:services}/haproxy-%(backend_name)s -binary-path = ${haproxy:location}/sbin/haproxy -backend-list = %(haproxy_backend_list)s diff --git a/software/erp5/snippet-fontconfig.cfg b/software/erp5/snippet-fontconfig.cfg deleted file mode 100644 index 7d99ce0c78835a234b7783d2541093f9b28caf58..0000000000000000000000000000000000000000 --- a/software/erp5/snippet-fontconfig.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[dynamic-fontconfig-instance] -url-list = %(font_url_list)s diff --git a/software/erp5/snippet-master.cfg b/software/erp5/snippet-master.cfg deleted file mode 100644 index e0d52fe50b3fdd4762fbf489e5366a1273cd2af3..0000000000000000000000000000000000000000 --- a/software/erp5/snippet-master.cfg +++ /dev/null @@ -1,214 +0,0 @@ -[buildout] -parts = - logrotate - cron - cron-entry-logrotate - certificate-authority - erp5-certificate-authority - tidstorage - cron-entry-tidstorage-backup - logrotate-entry-tidstorage - binary-link - erp5-promise - erp5-bootstrap - %(part_list)s - -eggs-directory = ${buildout:eggs-directory} -develop-eggs-directory = ${buildout:develop-eggs-directory} -offline = true - -[tidstorage] -recipe = slapos.cookbook:tidstorage -known-tid-storage-identifier-dict = %(known_tid_storage_identifier_dict)s -base-url = http://$${%(haproxy_section)s:ip}:$${%(haproxy_section)s:port}/%%s/serialize -configuration-path = $${rootdirectory:etc}/tidstorage.py -ip = $${slap-network-information:local-ipv4} -port = 6001 -timestamp-file-path = $${directory:tidstorage}/repozo_tidstorage_timestamp.log -logfile-name = $${basedirectory:log}/tidstorage.log -pidfile-name = $${basedirectory:run}/tidstorage.pid -status-file = $${directory:tidstorage}/tidstorage.tid -tidstorage-repozo-binary = ${buildout:bin-directory}/tidstorage_repozo -tidstoraged-binary = ${buildout:bin-directory}/tidstoraged -repozo-binary = ${buildout:bin-directory}/repozo -tidstorage-wrapper = $${basedirectory:services}/tidstoraged -repozo-wrapper = $${buildout:bin-directory}/tidstorage-repozo - -[cron-entry-tidstorage-backup] -<= cron -recipe = slapos.cookbook:cron.d -name = tidstorage -frequency = 0 0 * * * -command = $${tidstorage:repozo-wrapper} - -[logrotate-entry-tidstorage] -<= logrotate -recipe = slapos.cookbook:logrotate.d -name = tidstorage -log = $${tidstorage:logfile-name} -post = ${buildout:bin-directory}/killpidfromfile $${tidstorage:pidfile-name} SIGHUP - -[cron] -recipe = slapos.cookbook:cron -dcrond-binary = ${dcron:location}/sbin/crond -cron-entries = $${directory:cron-entries} -crontabs = $${directory:crontabs} -cronstamps = $${directory:cronstamps} -catcher = $${cron-simplelogger:wrapper} -binary = $${basedirectory:services}/crond - -[cron-simplelogger] -recipe = slapos.cookbook:simplelogger -wrapper = $${rootdirectory:bin}/cron_simplelogger -log = $${basedirectory:log}/cron.log - -[cron-entry-logrotate] -<= cron -recipe = slapos.cookbook:cron.d -name = logrotate -frequency = 0 0 * * * -command = $${logrotate:wrapper} - -[logrotate] -recipe = slapos.cookbook:logrotate -# Binaries -logrotate-binary = ${logrotate:location}/usr/sbin/logrotate -gzip-binary = ${gzip:location}/bin/gzip -gunzip-binary = ${gzip:location}/bin/gunzip -# Directories -wrapper = $${rootdirectory:bin}/logrotate -conf = $${rootdirectory:etc}/logrotate.conf -logrotate-entries = $${directory:logrotate-entries} -backup = $${directory:logrotate-backup} -state-file = $${rootdirectory:srv}/logrotate.status - -[zeo-instance-entry-common] -recipe = slapos.cookbook:zeo -ip = $${slap-network-information:local-ipv4} -binary-path = ${buildout:bin-directory}/runzeo - -[erp5-certificate-authority] -recipe = slapos.cookbook:certificate_authority -openssl-binary = ${openssl:location}/bin/openssl -ca-dir = $${directory:erp5-ca-dir} -requests-directory = $${erp5-cadirectory:requests} -wrapper = $${basedirectory:services}/erp5-ca -ca-private = $${erp5-cadirectory:private} -ca-certs = $${erp5-cadirectory:certs} -ca-newcerts = $${erp5-cadirectory:newcerts} -ca-crl = $${erp5-cadirectory:crl} -country-code = %(erp5_ca_country_code)s -email = %(erp5_ca_email)s -state = %(erp5_ca_state)s -city = %(erp5_ca_city)s -company = %(erp5_ca_company)s - -[erp5-cadirectory] -recipe = slapos.cookbook:mkdirectory -requests = $${directory:erp5-ca-dir}/requests -private = $${directory:erp5-ca-dir}/private -certs = $${directory:erp5-ca-dir}/certs -newcerts = $${directory:erp5-ca-dir}/newcerts -crl = $${directory:erp5-ca-dir}/crl - -[certificate-authority] -recipe = slapos.cookbook:certificate_authority -openssl-binary = ${openssl:location}/bin/openssl -ca-dir = $${directory:ca-dir} -requests-directory = $${cadirectory:requests} -wrapper = $${basedirectory:services}/ca -ca-private = $${cadirectory:private} -ca-certs = $${cadirectory:certs} -ca-newcerts = $${cadirectory:newcerts} -ca-crl = $${cadirectory:crl} - -[cadirectory] -recipe = slapos.cookbook:mkdirectory -requests = $${directory:ca-dir}/requests -private = $${directory:ca-dir}/private -certs = $${directory:ca-dir}/certs -newcerts = $${directory:ca-dir}/newcerts -crl = $${directory:ca-dir}/crl - -[rootdirectory] -recipe = slapos.cookbook:mkdirectory -etc = $${buildout:directory}/etc -var = $${buildout:directory}/var -srv = $${buildout:directory}/srv -bin = $${buildout:directory}/bin -tmp = $${buildout:directory}/tmp - -[basedirectory] -recipe = slapos.cookbook:mkdirectory -log = $${rootdirectory:var}/log -services = $${rootdirectory:etc}/run -run = $${rootdirectory:var}/run -backup = $${rootdirectory:srv}/backup - -[directory] -recipe = slapos.cookbook:mkdirectory -tidstorage = $${rootdirectory:srv}/tidstorage -zodb = $${rootdirectory:srv}/zodb -zodb-backup = $${basedirectory:backup}/zodb -instance = $${rootdirectory:srv}/erp5shared -instance-etc = $${:instance}/etc -apache-conf = $${rootdirectory:etc}/apache -instance-etc-package-include = $${:instance}/etc/package-include -# because of bug in slapos.recipe.template keys are lowercased -instance-document = $${:instance}/Document -instance-propertysheet = $${:instance}/PropertySheet -instance-products = $${:instance}/Products -instance-extensions = $${:instance}/Extensions -instance-constraint = $${:instance}/Constraint -instance-import = $${:instance}/import -instance-lib = $${:instance}/lib -instance-tests = $${:instance}/tests -erp5-ca-dir = $${rootdirectory:srv}/erp5-ssl -ca-dir = $${rootdirectory:srv}/ssl -cron-entries = $${rootdirectory:etc}/cron.d -crontabs = $${rootdirectory:etc}/crontabs -cronstamps = $${rootdirectory:etc}/cronstamps -logrotate-backup = $${basedirectory:backup}/logrotate -logrotate-entries = $${rootdirectory:etc}/logrotate.d - -[binary-link] -recipe = slapos.cookbook:symbolic.link -target-directory = $${rootdirectory:bin} -link-binary = - ${coreutils:location}/bin/basename - ${coreutils:location}/bin/cat - ${coreutils:location}/bin/cp - ${coreutils:location}/bin/ls - ${coreutils:location}/bin/tr - ${coreutils:location}/bin/uname - ${git:location}/bin/git - ${graphviz:location}/bin/dot - ${grep:location}/bin/grep - ${imagemagick:location}/bin/convert - ${imagemagick:location}/bin/identify - ${mariadb:location}/bin/mysql - ${mariadb:location}/bin/mysqldump - ${pdftk:location}/bin/pdftk - ${sed:location}/bin/sed - ${tesseract:location}/bin/tesseract - ${w3m:location}/bin/w3m - ${poppler:location}/bin/pdfinfo - ${poppler:location}/bin/pdftotext - ${poppler:location}/bin/pdftohtml - -[erp5-bootstrap] -recipe = slapos.cookbook:erp5.bootstrap -runner-path = $${basedirectory:services}/erp5-bootstrap -mysql-url = %(mysql-url)s -zope-url = http://$${%(zope_section)s:user}:$${%(zope_section)s:password}@$${%(zope_section)s:ip}:$${%(zope_section)s:port}/%(site_id)s - -[erp5-promise] -recipe = slapos.cookbook:erp5.promise -promise-path = $${rootdirectory:etc}/erp5promise.cfg -kumofs-url = %(kumofs-url)s -memcached-url = %(memcached-url)s -cloudooo-url = %(cloudooo-url)s -smtp-url = $${slap-parameter:smtp-url} -bt5 = $${slap-parameter:bt5} -bt5-repository-url = $${slap-parameter:bt5-repository-url} - diff --git a/software/erp5/snippet-zeo.cfg b/software/erp5/snippet-zeo.cfg deleted file mode 100644 index 2af5fd083a3a02379484ee251ea77718e2388b5d..0000000000000000000000000000000000000000 --- a/software/erp5/snippet-zeo.cfg +++ /dev/null @@ -1,16 +0,0 @@ -[zeo-instance-%(zeo_id)s] -<= zeo-instance-entry-common -log-path = $${basedirectory:log}/zeo-%(zeo_id)s.log -pid-path = $${basedirectory:run}/zeo-%(zeo_id)s.pid -conf-path = $${rootdirectory:etc}/zeo-%(zeo_id)s.conf -port = %(zeo_port)s -storage = - %(storage_list)s -wrapper-path = $${basedirectory:services}/zeo-%(zeo_id)s - -[logrotate-entry-zeo-%(zeo_id)s] -<= logrotate -recipe = slapos.cookbook:logrotate.d -name = zeo-%(zeo_id)s -log = $${zeo-instance-%(zeo_id)s:log-path} -post = ${buildout:bin-directory}/killpidfromfile $${zeo-instance-%(zeo_id)s:pid-path} SIGUSR2 diff --git a/software/erp5/snippet-zope.cfg b/software/erp5/snippet-zope.cfg deleted file mode 100644 index b65c773ae3a122e0855a21c7413f4d74af8ea4b2..0000000000000000000000000000000000000000 --- a/software/erp5/snippet-zope.cfg +++ /dev/null @@ -1,57 +0,0 @@ -[%(zope_id)s] -recipe = slapos.cookbook:generic.zope.zeo.client - -# XXX: products won't be needed as soon as all ERP5 (and products-deps) -# products will be eggified so then it will be possible to use them thanks to -# availability in software's eggs -products = ${products:list} - -# Options -user = zope -port = %(zope_port)s -ip = $${slap-network-information:local-ipv4} -thread-amount = %(zope_thread_amount)s -deadlock-path = /manage_debug_threads -timezone = %(timezone)s -zeo-connection-string = - %(zeo_connection_string)s - -timeserver = %(zope_timeserver)s -tidstorage-ip = $${tidstorage:ip} -tidstorage-port = $${tidstorage:port} - -# long request -longrequest-logger-file = %(longrequest_logger_file)s -longrequest-logger-timeout = %(longrequest_logger_timeout)s -longrequest-logger-interval = %(longrequest_logger_interval)s - -# Paths -wrapper = $${basedirectory:services}/%(zope_id)s -instance-path = $${directory:instance} -instance-etc = $${directory:instance-etc} -instance-products = $${directory:instance-products} -bt5-repository = $${rootdirectory:var}/bt5_repository -tmp-path = $${rootdirectory:tmp} -bin-path = $${rootdirectory:bin} -site-zcml = $${:instance-etc}/site.zcml -pid-file = $${basedirectory:run}/%(zope_id)s.pid -lock-file = $${basedirectory:run}/%(zope_id)s.lock -event-log = $${basedirectory:log}/%(zope_id)s-event.log -z2-log = $${basedirectory:log}/%(zope_id)s-Z2.log -configuration-file = $${rootdirectory:etc}/%(zope_id)s.conf -inituser = $${:instance-path}/inituser -# Binary information -runzope-binary = ${buildout:bin-directory}/runzope - -# BT5 Configuration -bt5-repository-list = - -promise-path = $${erp5-promise:promise-path} -site-id = %(site_id)s - -[logrotate-entry-%(zope_id)s] -<= logrotate -recipe = slapos.cookbook:logrotate.d -name = %(zope_id)s -log = $${%(zope_id)s:event-log} $${%(zope_id)s:z2-log} -post = ${buildout:bin-directory}/killpidfromfile $${%(zope_id)s:pid-file} SIGUSR2 diff --git a/software/erp5/software.cfg b/software/erp5/software.cfg index 31ffc63f44bf180c4a29caccb9b2c91777a0ad23..f7960496bdf6e3095755ea7bb1379fa87940c236 100644 --- a/software/erp5/software.cfg +++ b/software/erp5/software.cfg @@ -13,6 +13,7 @@ parts += slapos.cookbook-repository check-recipe slapos.cookbook-python2.6 + slapos.recipe.template-python2.6 # Create instance template template @@ -42,6 +43,12 @@ scripts = python = python2.6 ugly-depend-on = ${slapos.cookbook-repository:command} ${slapos.cookbook-repository:update-command} +[slapos.recipe.template-python2.6] +recipe = zc.recipe.egg +eggs = slapos.recipe.template +scripts = +python = python2.6 + [template-jinja2-base] recipe = slapos.recipe.template:jinja2 template = ${:_profile_base_location_}/${:filename}.in @@ -103,20 +110,6 @@ extra-context = key tesseract_location tesseract:location key w3m_location w3m:location -[template-cloudooo] -recipe = slapos.recipe.template -url = ${:_profile_base_location_}/instance-cloudooo.cfg -md5sum = e7698a0537785339e249bdc57f369e93 -output = ${buildout:directory}/template-cloudooo.cfg -mode = 0644 - -[template-snippet-fontconfig] -recipe = slapos.recipe.template -url = ${:_profile_base_location_}/snippet-fontconfig.cfg -md5sum = 76c5d4cd1c8d48648684d9873f1ffed3 -output = ${buildout:directory}/template-snippet-fontconfig.cfg -mode = 0644 - [template-kumofs] < = template-jinja2-base filename = instance-kumofs.cfg @@ -129,11 +122,55 @@ extra-context = key logrotate_location logrotate:location [template] -recipe = slapos.recipe.template -url = ${:_profile_base_location_}/instance.cfg -md5sum = f3443d071d8d7330b3453583e096fef0 -output = ${buildout:directory}/template.cfg -mode = 0644 +< = template-jinja2-base +# XXX: "template.cfg" is hardcoded in instanciation recipe +filename = template.cfg +template = ${:_profile_base_location_}/instance.cfg.in +md5sum = 29e6514746ec06708d1dd9fe600f653b +extra-context = + key apache_location apache:location + key buildout_bin_directory buildout:bin-directory + key coreutils_location coreutils:location + key dcron_location dcron:location + key file_location file:location + key fontconfig_location fontconfig:location + key fonts_location fonts:location + key freetype_location freetype:location + key git_location git:location + key graphviz_location graphviz:location + key grep_location grep:location + key gzip_location gzip:location + key haproxy_location haproxy:location + key imagemagick_location imagemagick:location + key libICE_location libICE:location + key libSM_location libSM:location + key libX11_location libX11:location + key libXau_location libXau:location + key libXdmcp_location libXdmcp:location + key libXext_location libXext:location + key libXrender_location libXrender:location + key libpng12_location libpng12:location + key libreoffice_bin_location libreoffice-bin:location + key libxcb_location libxcb:location + key logrotate_location logrotate:location + key mariadb_location mariadb:location + key openssl_location openssl:location + key pdftk_location pdftk:location + key poppler_location poppler:location + key product_list products:list + key profile_base_location :_profile_base_location_ + key sed_location sed:location + key template_erp5_development template-erp5-development:rendered + key template_erp5_production template-erp5-production:rendered + key template_kumofs template-kumofs:rendered + key template_mariadb template-mariadb:rendered + key template_memcached template-memcached:rendered + key template_sphinx template-sphinx:rendered + key template_varnish template-varnish:rendered + key template_zope template-zope:rendered + key tesseract_location tesseract:location + key w3m_location w3m:location + key zlib_location zlib:location [template-memcached] < = template-jinja2-base @@ -158,34 +195,6 @@ md5sum = 1b458ff6a9b82f24f29f71b58f559186 extra-context = key local_bt5_repository local-bt5-repository:list -[template-snippet-zeo] -recipe = slapos.recipe.template -url = ${:_profile_base_location_}/snippet-zeo.cfg -md5sum = ca9ee3825ff90c5c894ff1da8c601552 -output = ${buildout:directory}/template-snippet-zeo.cfg -mode = 0644 - -[template-snippet-master] -recipe = slapos.recipe.template -url = ${:_profile_base_location_}/snippet-master.cfg -md5sum = 14ffe48453a74190bdd289169220739f -output = ${buildout:directory}/template-snippet-master.cfg -mode = 0644 - -[template-snippet-zope] -recipe = slapos.recipe.template -url = ${:_profile_base_location_}/snippet-zope.cfg -md5sum = bcc68c31a16b35bee7111f9c6e02b781 -output = ${buildout:directory}/template-snippet-zope.cfg -mode = 0644 - -[template-snippet-backend] -recipe = slapos.recipe.template -url = ${:_profile_base_location_}/snippet-backend.cfg -md5sum = 3a1b359b57bf21a226bb96c0c18f1924 -output = ${buildout:directory}/template-snippet-backend.cfg -mode = 0644 - [template-varnish] < = template-jinja2-base filename = instance-varnish.cfg