diff --git a/slapos/recipe/erp5_test/__init__.py b/slapos/recipe/erp5_test/__init__.py index a9ed300a061cc56af6d710a9fc23b56aa771cf0a..567a5534894bf8ca830bece3d25cfbccfd1f59fb 100644 --- a/slapos/recipe/erp5_test/__init__.py +++ b/slapos/recipe/erp5_test/__init__.py @@ -38,12 +38,25 @@ class Recipe(GenericBaseRecipe): # XXX: assume existence of 100 test databases, because slaves are not # functional yet in slapos: testdb_0...testdb_100, with testuser_N mysql_template = "%s@%s:%s %s %s" - mysql_parsed = urlparse.urlparse(self.options['mysql-url']) - for i in range(0, 100): - mysql_connection_string_list.append(mysql_template % ('testdb_%s'% i, - mysql_parsed.hostname, mysql_parsed.port, 'testuser_%s'% i, mysql_parsed.password)) - mysql_connection_string = mysql_template % ('erp5_test', mysql_parsed.hostname, - mysql_parsed.port, 'erp5_test', mysql_parsed.password) + mysql_url_list = self.options.get('mysql-url-list') + if mysql_url_list is None: + mysql_parsed = urlparse.urlparse(self.options['mysql-url']) + for i in range(0, 100): + mysql_connection_string_list.append(mysql_template % ('testdb_%s'% i, + mysql_parsed.hostname, mysql_parsed.port, 'testuser_%s'% i, mysql_parsed.password)) + mysql_connection_string = mysql_template % ('erp5_test', mysql_parsed.hostname, + mysql_parsed.port, 'erp5_test', mysql_parsed.password) + else: + for mysql_url in mysql_url_list: + mysql_parsed = urlparse.urlparse(mysql_url) + mysql_connection_string_list.append(mysql_template % ( + mysql_parsed.path.lstrip('/'), + mysql_parsed.hostname, + mysql_parsed.port, + mysql_parsed.username, + mysql_parsed.password, + )) + mysql_connection_string = mysql_connection_string_list.pop() cloudooo_parsed = urlparse.urlparse(self.options['cloudooo-url']) memcached_parsed = urlparse.urlparse(self.options['memcached-url']) kumofs_parsed = urlparse.urlparse(self.options['kumofs-url']) diff --git a/stack/erp5/buildout.cfg b/stack/erp5/buildout.cfg index c4ce72763cb25991655860341d54fa22e0455f5c..fe062bc7b0a077b6100dd8ffedb84a51ad2e3578 100644 --- a/stack/erp5/buildout.cfg +++ b/stack/erp5/buildout.cfg @@ -171,7 +171,7 @@ context = [template-mariadb] < = download-base filename = instance-mariadb.cfg.in -md5sum = cc6469a092d0b09008dca6507ae4cb02 +md5sum = 917f3e96819193ac183c7ee84e650eba [template-kumofs] < = download-base @@ -269,7 +269,7 @@ extra-context = [template-erp5] < = download-base filename = instance-erp5.cfg.in -md5sum = 4a0cd404bed41a58512396af9f964c66 +md5sum = a24bd5283599807799adb2aeea1ad7ba [template-neo] < = download-base diff --git a/stack/erp5/instance-erp5.cfg.in b/stack/erp5/instance-erp5.cfg.in index 28ea473d2f9ab30d866c84e687183d117fa60bd3..545c5adce8a31787dd2f287598a25b8455952915 100644 --- a/stack/erp5/instance-erp5.cfg.in +++ b/stack/erp5/instance-erp5.cfg.in @@ -41,7 +41,7 @@ config-{{ option }} = {{ dumps(value) }} {{ request('memcached-persistent', 'kumofs', 'kumofs', {'tcpv4-port': 2000}) }} {{ request('memcached-volatile', 'kumofs', 'memcached', {'tcpv4-port': 2010, 'ram-storage-size': 64}) }} {{ request('cloudooo', 'cloudooo', 'cloudooo', {'tcpv4-port': 2020}) }} -{{ request('mariadb', 'mariadb', 'mariadb', {'tcpv4-port': 2099}) }} +{{ request('mariadb', 'mariadb', 'mariadb', {'tcpv4-port': 2099}, {'database-list': True, 'test-database-list': True}) }} {{ request('zodb', 'zodb-' ~ slapparameter_dict.get('zodb-software-type', 'zeo'), 'zodb', {'tcpv4-port': 2100, 'zodb-dict': {'root': {}}}, {'zodb-storage-type': False, 'zodb-dict': False, 'tidstorage-ip': False, 'tidstorage-port': False}) }} [request-zope-base] @@ -49,7 +49,7 @@ config-{{ option }} = {{ dumps(value) }} return = zope-address-list extra-config = - mysql-url + mysql-url-list memcached-url cloudooo-url kumofs-url @@ -68,7 +68,7 @@ extra-config = longrequest-logger-interval longrequest-logger-timeout port-base -config-mysql-url = ${request-mariadb:connection-url} +config-mysql-url-list = ${request-mariadb:connection-database-list} config-memcached-url = ${request-memcached-volatile:connection-url} config-cloudooo-url = ${request-cloudooo:connection-url} config-kumofs-url = ${request-memcached-persistent:connection-url} diff --git a/stack/erp5/instance-mariadb.cfg.in b/stack/erp5/instance-mariadb.cfg.in index 80358bf9c84892e00dedbe60b11a01d29f240283..0379e8b065b418a7806d913989565f98b3b96674 100644 --- a/stack/erp5/instance-mariadb.cfg.in +++ b/stack/erp5/instance-mariadb.cfg.in @@ -3,23 +3,31 @@ {% macro section(name) %}{% do part_list.append(name) %}{{ name }}{% endmacro -%} {% set use_ipv6 = slapparameter_dict.get('use-ipv6', False) -%} {% set database_list = slapparameter_dict.get('database-list', [{'name': 'erp5', 'user': 'user', 'password': 'insecure'}]) -%} +{% set test_database_list = [] %} {% for database_count in range(slapparameter_dict.get('test-database-amount', 30)) -%} -{% do database_list.append({'name': 'erp5_test_' ~ database_count, 'user': 'testuser_' ~ database_count, 'password': 'testpassword' ~ database_count}) -%} +{% do test_database_list.append({'name': 'erp5_test_' ~ database_count, 'user': 'testuser_' ~ database_count, 'password': 'testpassword' ~ database_count}) -%} {% endfor -%} {% set catalog_backup = slapparameter_dict.get('catalog-backup', {}) -%} {% set full_backup_retention_days = catalog_backup.get('full-retention-days', 7) -%} {% set incremental_backup_retention_days = catalog_backup.get('incremental-retention-days', full_backup_retention_days) -%} - -[publish-mariadb-url] -recipe = slapos.cookbook:publish.serialised +{% set port = slapparameter_dict['tcpv4-port'] %} {% if use_ipv6 -%} -{% set address = "[${my-cnf-parameters:ip}]" -%} +{% set ip = (ipv6_set | list)[0] -%} {% else -%} -{% set address = "${my-cnf-parameters:ip}" -%} +{% set ip = (ipv4_set | list)[0] -%} {% endif -%} -{# TODO: support any number of databases -#} -{% set database = database_list[0] %} -url = mysql://{{ database['user'] }}:{{ database['password'] }}@{{ address }}:${my-cnf-parameters:port}/{{ database['name'] }} + +[publish-mariadb-url] +recipe = slapos.cookbook:publish.serialised +{% macro render_database_list(database_list) -%} +{% set publish_database_list = [] -%} +{% for database in database_list -%} +{% do publish_database_list.append("mysql://" ~ database['user'] ~ ":" ~ database['password'] ~ "@" ~ ip ~ ":" ~ port ~ "/" ~ database['name']) -%} +{% endfor -%} +{{ dumps(publish_database_list) }} +{% endmacro -%} +database-list = {{ render_database_list(database_list) }} +test-database-list = {{ render_database_list(test_database_list) }} {% if full_backup_retention_days > -1 -%} [{{ section('cron-entry-mariadb-backup') }}] @@ -49,12 +57,8 @@ command = {{ parameter_dict['findutils-location'] }}/bin/find "${directory:maria {%- endif %} [my-cnf-parameters] -{% if use_ipv6 -%} -ip = {{ (ipv6_set | list)[0] }} -{% else -%} -ip = {{ (ipv4_set | list)[0] }} -{% endif -%} -port = {{ slapparameter_dict['tcpv4-port'] }} +ip = {{ ip }} +port = {{ port }} socket = ${directory:run}/mariadb.sock data-directory = ${directory:mariadb-data} pid-file = ${directory:run}/mariadb.pid @@ -79,7 +83,7 @@ template = {{ parameter_dict['template-my-cnf'] }} context = section parameter_dict my-cnf-parameters [init-script-parameters] -database-list = {{ dumps(database_list) }} +database-list = {{ dumps(database_list + test_database_list) }} [init-script] recipe = slapos.recipe.template:jinja2