Commit d0054de1 authored by Vincent Pelletier's avatar Vincent Pelletier

Unhardcode ports.

Also, replace cloudooo-json by exposing its internals directly.
parent 246b7824
...@@ -14,6 +14,48 @@ Parameters are expected to be passed as of *.serialised recipes expect them:: ...@@ -14,6 +14,48 @@ Parameters are expected to be passed as of *.serialised recipes expect them::
where `...` is a json expression (typically a dict). where `...` is a json expression (typically a dict).
TCPv4 ports allocation
----------------------
Service listening ports are allocated in the following pattern.
Base port of each software can be overridden, those are the default values.
- kumofs (persistent)
2000: manager
2001: server port (?)
2002: server listen port (?)
2003: gateway port (?)
- kumofs (volatile)
2010: manager
2011: server port (?)
2012: server listen port (?)
2013: gateway port (?)
- cloudooo
2020: cloudooo
2021: openoffice
- mariadb
2099: mariadb
- zeo & tidstorage
2100: tidstorage
2101: first zeo
2102: second zeo
(etc)
- haproxy
2150: first haproxy
2151: first apache
2152: second haproxy
2153: second apache
(etc)
- cluster-zope
2200: first zope
2201: second zope
(etc)
Note: these are not applicable when (yet unsupported) ipv6 mode is enabled, as
stunnel (used to tunnel ipv4-only services over ipv6) needs its own listening
ports.
This pattern was chosen to make it possible to deploy this software release in
a setup where all partitions would share the same IPv4 without having to
provide many parameters.
Some ports are unused in the overall range to allow software types to grow.
common common
------ ------
Parameters which are available to all software types. Parameters which are available to all software types.
...@@ -24,6 +66,9 @@ MariaDB (used for catalog, activity tables and id generator) instance ...@@ -24,6 +66,9 @@ MariaDB (used for catalog, activity tables and id generator) instance
parameters. parameters.
Defaults to {}. Defaults to {}.
Possible keys and associated value types: Possible keys and associated value types:
'tcpv4-port' (int, optional)
TCPv4 port to listen on.
Defaults to 2099.
'database-list' (list, optional) 'database-list' (list, optional)
Define the list of databases mariadb must provide, and the user having entire Define the list of databases mariadb must provide, and the user having entire
access to each database. Each entry in the list is a dict, with these access to each database. Each entry in the list is a dict, with these
...@@ -122,6 +167,12 @@ Storage mechanism to use. To know the list of supported values, see all keys in ...@@ -122,6 +167,12 @@ Storage mechanism to use. To know the list of supported values, see all keys in
instance.cfg.in's section [switch-softwaretype] which start with "zodb-". instance.cfg.in's section [switch-softwaretype] which start with "zodb-".
Defaults to 'zeo'. Defaults to 'zeo'.
'zodb-tcpv4-port' (int, optional)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Base TCPv4 port for ZODB provider, if applicable (depends on chosen
software-type).
Defaults to 2100.
'zodb-dict' (dict, optional) 'zodb-dict' (dict, optional)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Describes ZODBs to create and use in the instance. At least one entry is Describes ZODBs to create and use in the instance. At least one entry is
...@@ -216,7 +267,7 @@ value (dict) ...@@ -216,7 +267,7 @@ value (dict)
Start allocating ports at this value. Useful if one needs to make several Start allocating ports at this value. Useful if one needs to make several
partitions share the same port range (ie, several partitions bound to a partitions share the same port range (ie, several partitions bound to a
single address). single address).
Defaults to 2000. Defaults to 2200.
'haproxy-maxconn' (int, optional) 'haproxy-maxconn' (int, optional)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...@@ -224,6 +275,11 @@ The number of connections haproxy accepts for a given backend. ...@@ -224,6 +275,11 @@ The number of connections haproxy accepts for a given backend.
See haproxy's "server maxconn" setting. See haproxy's "server maxconn" setting.
Defaults to 1 (correct for single-worker-threaded zopes). Defaults to 1 (correct for single-worker-threaded zopes).
'haproxy-tcpv4-port' (int, optional)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Base TCPv4 port for load-balancer (haproxy + backend apache).
Defaults to 2150.
'haproxy-server-check-path' (str, optional) 'haproxy-server-check-path' (str, optional)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The path haproxy accesses on a each backend to test their responsiveness. The path haproxy accesses on a each backend to test their responsiveness.
...@@ -266,26 +322,42 @@ Possible keys and associated value types: ...@@ -266,26 +322,42 @@ Possible keys and associated value types:
'company' (str, optional) 'company' (str, optional)
Company name. Defaults to 'Dummy Company'. Company name. Defaults to 'Dummy Company'.
'use-ipv6' (boolean, optional)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Use IPv6 to communicate between partitions.
Defaults to False.
'mariadb-computer-guid' (str, optional) 'mariadb-computer-guid' (str, optional)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Computer GUID identifying the partition mariadb is to be requested on. Computer GUID identifying the partition mariadb is to be requested on.
Defaults to "cluster" software type's partition's effective computer GUID. Defaults to "cluster" software type's partition's effective computer GUID.
'cloudooo-tcpv4-port' (int, optional)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Base TCPv4 port for cloudooo.
Defaults to 2020.
'cloudooo-computer-guid' (str, optional) 'cloudooo-computer-guid' (str, optional)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Computer GUID identifying the partition cloudooo is to be requested on. Computer GUID identifying the partition cloudooo is to be requested on.
Defaults to "cluster" software type's partition's effective computer GUID. Defaults to "cluster" software type's partition's effective computer GUID.
'memcached-size' (int, optional)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Megabytes of ram to allocate for volatile memcached use.
Defaults to 64.
Negative/zero values cause undefined behaviour which may change in the future.
'memcached-tcpv4-port'
~~~~~~~~~~~~~~~~~~~~~~
Base TCPv4 port for volatile memcached.
Defaults to 2010.
'memcached-computer-guid' (str, optional) 'memcached-computer-guid' (str, optional)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Computer GUID identifying the partition memcached is to be requested on. Computer GUID identifying the partition memcached is to be requested on.
Defaults to "cluster" software type's partition's effective computer GUID. Defaults to "cluster" software type's partition's effective computer GUID.
'kumofs-tcpv4-port'
~~~~~~~~~~~~~~~~~~~
Base TCPv4 port for persistent memcached.
Defaults to 2000.
'kumofs-computer-guid' (str, optional) 'kumofs-computer-guid' (str, optional)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Computer GUID identifying the partition kumofs is to be requested on. Computer GUID identifying the partition kumofs is to be requested on.
...@@ -302,10 +374,10 @@ Computer GUID identifying the partition balander (haproxy, apache, some HTTP ...@@ -302,10 +374,10 @@ Computer GUID identifying the partition balander (haproxy, apache, some HTTP
cache) is to be requested on. cache) is to be requested on.
Defaults to "cluster" software type's partition's effective computer GUID. Defaults to "cluster" software type's partition's effective computer GUID.
'cloudooo-json' (str, optional) 'font-url-list' (list of strings, optional)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
XXX: what is this ? List of extra fonts URLs to be used by cloudooo.
XXX: should not require serialising json by hand as parameter value Defaults to [].
'bt5' (str, optional) 'bt5' (str, optional)
~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
......
...@@ -188,7 +188,7 @@ context = ...@@ -188,7 +188,7 @@ context =
[template-mariadb] [template-mariadb]
< = download-base < = download-base
filename = instance-mariadb.cfg.in filename = instance-mariadb.cfg.in
md5sum = 7c494ffbf6f0ad584a8d2604d8bcf4e3 md5sum = 60f5e662d7301e3d56c51f934ea4a303
[template-zope] [template-zope]
< = download-base < = download-base
...@@ -198,12 +198,12 @@ md5sum = 2b68521ebde309d6453336f1a2e46381 ...@@ -198,12 +198,12 @@ md5sum = 2b68521ebde309d6453336f1a2e46381
[template-kumofs] [template-kumofs]
< = download-base < = download-base
filename = instance-kumofs.cfg.in filename = instance-kumofs.cfg.in
md5sum = 8e0a34a2b6cdd3d9092ee12211d706a4 md5sum = 2c403be4e1bc03fe98ee301877347584
[template-cloudooo] [template-cloudooo]
< = download-base < = download-base
filename = instance-cloudoo.cfg.in filename = instance-cloudoo.cfg.in
md5sum = 3bb277c9181210753fa3a09901cffc61 md5sum = 6660382993d14e1d538e737e881219ba
[template-zope-conf] [template-zope-conf]
< = download-base < = download-base
...@@ -225,7 +225,7 @@ md5sum = 564006953b7d7a12d40a14b6648b32f0 ...@@ -225,7 +225,7 @@ md5sum = 564006953b7d7a12d40a14b6648b32f0
# XXX: "template.cfg" is hardcoded in instanciation recipe # XXX: "template.cfg" is hardcoded in instanciation recipe
filename = template.cfg filename = template.cfg
template = ${:_profile_base_location_}/instance.cfg.in template = ${:_profile_base_location_}/instance.cfg.in
md5sum = 80f0ded87cad5bf50c25165f6a9d326f md5sum = 55a4a8957ac0cb9462fadafe9a2fe378
extra-context = extra-context =
key apache_location apache:location key apache_location apache:location
key aspell_location aspell:location key aspell_location aspell:location
...@@ -298,12 +298,12 @@ md5sum = 77ec4f095a22b5bd7dfea9dff63bade5 ...@@ -298,12 +298,12 @@ md5sum = 77ec4f095a22b5bd7dfea9dff63bade5
[template-erp5-cluster] [template-erp5-cluster]
< = download-base < = download-base
filename = instance-erp5-cluster.cfg.in filename = instance-erp5-cluster.cfg.in
md5sum = e789d0b91dd08c3077a5b33df4878e56 md5sum = 41a9ae2790acb79adb33985aec1abb8e
[template-zeo] [template-zeo]
< = download-base < = download-base
filename = instance-zeo.cfg.in filename = instance-zeo.cfg.in
md5sum = c90fbf25252638d6d764831a7999fb83 md5sum = 6d0bdee21ac4837f07852b98b6fcea36
[template-cluster-zope] [template-cluster-zope]
< = download-base < = download-base
...@@ -313,7 +313,7 @@ md5sum = 019f306860857e8536f26aba32101b30 ...@@ -313,7 +313,7 @@ md5sum = 019f306860857e8536f26aba32101b30
[template-balancer] [template-balancer]
< = download-base < = download-base
filename = instance-balancer.cfg.in filename = instance-balancer.cfg.in
md5sum = 896cfa69cf2529a3b64b7d783f73a447 md5sum = 9c9741c4db7e46f3cd13c0b2f392fd5d
[template-logrotate-base] [template-logrotate-base]
< = template-jinja2-base < = template-jinja2-base
......
...@@ -23,7 +23,7 @@ ipv4 = {{ ipv4 }} ...@@ -23,7 +23,7 @@ ipv4 = {{ ipv4 }}
{% endif -%} {% endif -%}
{% set haproxy_dict = {} -%} {% set haproxy_dict = {} -%}
{% set apache_dict = {} -%} {% set apache_dict = {} -%}
{% set next_port = 9000 -%} {% set next_port = slapparameter_dict['tcpv4-port'] -%}
{% for family_name, parameter_id_list in slapparameter_dict['zope-family-dict'].items() -%} {% for family_name, parameter_id_list in slapparameter_dict['zope-family-dict'].items() -%}
{% set zope_family_address_list = [] -%} {% set zope_family_address_list = [] -%}
{% for parameter_id in parameter_id_list -%} {% for parameter_id in parameter_id_list -%}
......
{% if software_type == slap_software_type -%} {% if software_type == slap_software_type -%}
{% set json = json_module.loads(parameter_dict.get('cloudooo-json', '{}')) -%}
{% set bin_directory = parameter_dict['buildout-bin-directory'] -%} {% set bin_directory = parameter_dict['buildout-bin-directory'] -%}
{% set use_ipv6 = slapparameter_dict.get('use-ipv6', False) -%} {% set use_ipv6 = slapparameter_dict.get('use-ipv6', False) -%}
[buildout] [buildout]
...@@ -26,8 +25,9 @@ recipe = slapos.cookbook:generic.cloudooo ...@@ -26,8 +25,9 @@ recipe = slapos.cookbook:generic.cloudooo
# Network options # Network options
ip = ${slap-network-information:local-ipv4} ip = ${slap-network-information:local-ipv4}
port = 23000 {% set tcpv4_port = slapparameter_dict['tcpv4-port'] -%}
openoffice-port = 23060 port = {{ tcpv4_port }}
openoffice-port = {{ tcpv4_port + 1 }}
# Paths # Paths
configuration-file = ${directory:etc}/cloudooo.cfg configuration-file = ${directory:etc}/cloudooo.cfg
...@@ -51,7 +51,7 @@ recipe = slapos.cookbook:fontconfig ...@@ -51,7 +51,7 @@ recipe = slapos.cookbook:fontconfig
conf-path = ${directory:etc}/font.conf conf-path = ${directory:etc}/font.conf
font-system-folder = {{ parameter_dict['fonts'] }} font-system-folder = {{ parameter_dict['fonts'] }}
font-folder = ${directory:font} font-folder = ${directory:font}
url-list = {{ json.get('font_url_list', []) | join(' ') }} url-list = {{ slapparameter_dict.get('font-url-list', []) | join(' ') }}
service-folder = ${directory:service} service-folder = ${directory:service}
onetimedownload_path = {{ bin_directory }}/onetimedownload onetimedownload_path = {{ bin_directory }}/onetimedownload
......
{% if slap_software_type == software_type -%} {% if slap_software_type == software_type -%}
{% set has_frontend = slapparameter_dict.get('frontend-software-url', '') != '' -%} {% set has_frontend = slapparameter_dict.get('frontend-software-url', '') != '' -%}
{% set port_base = 2000 -%}
{% set site_id = slapparameter_dict.get('site-id', 'erp5') -%} {% set site_id = slapparameter_dict.get('site-id', 'erp5') -%}
[request-common] [request-common]
recipe = slapos.cookbook:request.serialised recipe = slapos.cookbook:request.serialised
...@@ -32,8 +31,11 @@ extra-config = {{ ' '.join(mariadb_dict) }} ...@@ -32,8 +31,11 @@ extra-config = {{ ' '.join(mariadb_dict) }}
[request-cloudooo] [request-cloudooo]
<=request-common <=request-common
name = Cloudooo name = Cloudooo
extra-config = cloudooo-json extra-config =
config-cloudooo-json = {{ slapparameter_dict.get('cloudooo-json', '') }} font-url-list
tcpv4-port
config-font-url-list = {{ dumps(slapparameter_dict.get('font-url-list', [])) }}
tcpv4-port = {{ dumps(slapparameter_dict.get(cloudooo-tcpv4-port, 2020)) }}
software-type = cloudooo software-type = cloudooo
sla-computer_guid = {{ slapparameter_dict.get('cloudooo-computer-guid', computer_id) }} sla-computer_guid = {{ slapparameter_dict.get('cloudooo-computer-guid', computer_id) }}
...@@ -44,13 +46,18 @@ software-type = kumofs ...@@ -44,13 +46,18 @@ software-type = kumofs
sla-computer_guid = {{ slapparameter_dict.get('memcached-computer-guid', computer_id) }} sla-computer_guid = {{ slapparameter_dict.get('memcached-computer-guid', computer_id) }}
extra-config = extra-config =
ram-storage-size ram-storage-size
config-ram-storage-size = 64m tcpv4-port
config-ram-storage-size = {{ slapparameter_dict.get('memcached-size', 64) ~ 'm' }}
config-tcpv4-port = {{ dumps(slapparameter_dict.get('memcached-tcpv4-port', 2010)) }}
[request-kumofs] [request-kumofs]
<=request-common <=request-common
name = KumoFS name = KumoFS
software-type = kumofs software-type = kumofs
sla-computer_guid = {{ slapparameter_dict.get('kumofs-computer-guid', computer_id) }} sla-computer_guid = {{ slapparameter_dict.get('kumofs-computer-guid', computer_id) }}
extra-config =
tcpv4-port
config-tcpv4-port = {{ dumps(slapparameter_dict.get('kumofs-tcpv4-port', 2000)) }}
[request-zope-base] [request-zope-base]
<=request-common <=request-common
...@@ -102,6 +109,8 @@ return = ...@@ -102,6 +109,8 @@ return =
extra-config = extra-config =
zodb-dict zodb-dict
tidstorage-dict tidstorage-dict
tcpv4-port
config-tcpv4-port = {{ dumps(slapparameter_dict.get('zodb-tcpv4-port', 2100)) }}
config-zodb-dict = {{ dumps(slapparameter_dict.get('zodb-dict', {'root': {}})) }} config-zodb-dict = {{ dumps(slapparameter_dict.get('zodb-dict', {'root': {}})) }}
config-tidstorage-dict = {{ dumps(slapparameter_dict.get('tidstorage-dict')) }} config-tidstorage-dict = {{ dumps(slapparameter_dict.get('tidstorage-dict')) }}
software-type = zodb-{{ slapparameter_dict.get('zodb-software-type', 'zeo') }} software-type = zodb-{{ slapparameter_dict.get('zodb-software-type', 'zeo') }}
...@@ -120,7 +129,7 @@ config-thread-amount = {{ dumps(zope_parameter_dict.get('thread-amount', 1)) }} ...@@ -120,7 +129,7 @@ config-thread-amount = {{ dumps(zope_parameter_dict.get('thread-amount', 1)) }}
config-timerserver-interval = {{ dumps(zope_parameter_dict.get('timerserver-interval', 5)) }} config-timerserver-interval = {{ dumps(zope_parameter_dict.get('timerserver-interval', 5)) }}
config-longrequest-logger-interval = {{ dumps(zope_parameter_dict.get('longrequest-logger-interval', -1)) }} config-longrequest-logger-interval = {{ dumps(zope_parameter_dict.get('longrequest-logger-interval', -1)) }}
config-longrequest-logger-timeout = {{ dumps(zope_parameter_dict.get('longrequest-logger-timeout', 1)) }} config-longrequest-logger-timeout = {{ dumps(zope_parameter_dict.get('longrequest-logger-timeout', 1)) }}
config-port-base = {{ dumps(zope_parameter_dict.get('port-base', port_base)) }} config-port-base = {{ dumps(zope_parameter_dict.get('port-base', 2200)) }}
sla-computer_guid = {{ zope_parameter_dict.get('computer-guid', computer_id) }} sla-computer_guid = {{ zope_parameter_dict.get('computer-guid', computer_id) }}
{% endfor -%} {% endfor -%}
...@@ -153,6 +162,7 @@ name = balancer ...@@ -153,6 +162,7 @@ name = balancer
software-type = balancer software-type = balancer
sla-computer_guid = {{ slapparameter_dict.get('balancer-computer-guid', computer_id) }} sla-computer_guid = {{ slapparameter_dict.get('balancer-computer-guid', computer_id) }}
extra-config = extra-config =
tcpv4-port
haproxy-maxconn haproxy-maxconn
haproxy-server-check-path haproxy-server-check-path
apache-access-control-string apache-access-control-string
...@@ -164,6 +174,7 @@ extra-config = ...@@ -164,6 +174,7 @@ extra-config =
return = return =
{{ zope_family_dict.keys() | join(' ') }} {{ zope_family_dict.keys() | join(' ') }}
config-zope-family-dict = {{ dumps(zope_family_parameter_dict) }} config-zope-family-dict = {{ dumps(zope_family_parameter_dict) }}
config-tcpv4-port = {{ dumps(slapparameter_dict.get('', 2150)) }}
{% for zope_section_id, name in zope_address_list_id_dict.items() -%} {% for zope_section_id, name in zope_address_list_id_dict.items() -%}
config-{{ name }} = {{ ' ${' ~ zope_section_id ~ ':connection-zope-address-list}' }} config-{{ name }} = {{ ' ${' ~ zope_section_id ~ ':connection-zope-address-list}' }}
{% endfor -%} {% endfor -%}
......
...@@ -36,10 +36,11 @@ address-family = inet6 ...@@ -36,10 +36,11 @@ address-family = inet6
ip = ${slap-network-information:local-ipv4} ip = ${slap-network-information:local-ipv4}
address-family = inet4 address-family = inet4
{% endif -%} {% endif -%}
manager-port = 13101 {% set tcpv4_port = slapparameter_dict['tcpv4-port'] -%}
server-port = 13201 manager-port = {{ tcpv4_port }}
server-listen-port = 13202 server-port = {{ tcpv4_port + 1 }}
gateway-port = 13301 server-listen-port = {{ tcpv4_port + 2 }}
gateway-port = {{ tcpv4_port + 3 }}
# Paths: Data # Paths: Data
{% set ram_storage_size = slapparameter_dict.get('ram-storage-size') -%} {% set ram_storage_size = slapparameter_dict.get('ram-storage-size') -%}
{% if ram_storage_size -%} {% if ram_storage_size -%}
......
...@@ -54,7 +54,7 @@ ip = {{ (ipv6_set | list)[0] }} ...@@ -54,7 +54,7 @@ ip = {{ (ipv6_set | list)[0] }}
{% else -%} {% else -%}
ip = {{ (ipv4_set | list)[0] }} ip = {{ (ipv4_set | list)[0] }}
{% endif -%} {% endif -%}
port = 45678 port = {{ slapparameter_dict['tcpv4-port'] }}
socket = ${directory:run}/mariadb.sock socket = ${directory:run}/mariadb.sock
data-directory = ${directory:mariadb-data} data-directory = ${directory:mariadb-data}
pid-file = ${directory:run}/mariadb.pid pid-file = ${directory:run}/mariadb.pid
......
{% if software_type == slap_software_type -%} {% if software_type == slap_software_type -%}
{% set use_ipv6 = slapparameter_dict.get('use-ipv6', False) -%} {% set use_ipv6 = slapparameter_dict.get('use-ipv6', False) -%}
{% set next_port = 2000 -%} {% set next_port = slapparameter_dict['tcpv4-port'] -%}
{% set part_list = [] -%} {% set part_list = [] -%}
{% set storage_dict = {} -%} {% set storage_dict = {} -%}
{% set zodb_dict = {} -%} {% set zodb_dict = {} -%}
......
...@@ -54,7 +54,6 @@ template = {{ template_cloudooo }} ...@@ -54,7 +54,6 @@ template = {{ template_cloudooo }}
filename = instance-cloudoo.cfg filename = instance-cloudoo.cfg
extra-context = extra-context =
section parameter_dict dynamic-template-cloudooo-parameters section parameter_dict dynamic-template-cloudooo-parameters
import json_module json
# Must match the key id in [switch-softwaretype] which uses this section. # Must match the key id in [switch-softwaretype] which uses this section.
raw software_type cloudooo raw software_type cloudooo
......
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