{% if slap_software_type == software_type -%}
{% set part_list = [] -%}
{% macro section(name) %}{% do part_list.append(name) %}{{ name }}{% endmacro -%}
#############################
#
# Request erp5 production environnment
#
#############################
[request-common]
recipe = slapos.cookbook:request
software-url = ${slap-connection:software-release-url}
sla = computer_guid
return = url
server-url = ${slap-connection:server-url}
key-file = ${slap-connection:key-file}
cert-file = ${slap-connection:cert-file}
computer-id = ${slap-connection:computer-id}
partition-id = ${slap-connection:partition-id}

[request-sphinx]
<=request-common
name = Sphinx Search Engine
software-type = sphinx
sla-computer_guid = ${slap-parameter:sphinx-computer-guid}
return = url-sphinx url-sphinx-sql

[request-mariadb]
<=request-common
name = MariaDB DataBase
config = 
  test-database-amount
config-test-database-amount = ${slap-parameter:test-database-amount}
software-type = mariadb
sla-computer_guid = ${slap-parameter:mariadb-computer-guid}

[request-cloudooo]
<=request-common
name = Cloudooo
config = cloudooo-json
config-cloudooo-json = ${slap-parameter:cloudooo-json}
software-type = cloudooo
sla-computer_guid = ${slap-parameter:cloudooo-computer-guid}

[request-memcached]
<=request-common
name = Memcached
software-type = memcached
sla-computer_guid = ${slap-parameter:memcached-computer-guid}

[request-kumofs]
<=request-common
name = KumoFS
software-type = kumofs
sla-computer_guid = ${slap-parameter:kumofs-computer-guid}

[request-zodb]
< = request-common
name = zodb
return =
  zodb-list
# (dict)
# key (str)
#   (same as config-zodb-dict)
# value (dict)
#   Storage-type-specific parameters, suitable for zope.conf.
#   key & value: str
#   Ex: {'server': 'example.com:8100', 'storage': '1'}
  tidstorage-ip
# self-explaining
  tidstorage-port
# self-explaining
config =
  zodb-dict
# (dict)
# ZODBs to provide.
# key (str)
#   Zope internal name for this ZODB. Used to tell mountpoints apart.
# value (dict)
#   key (str)
#     Possible keys and associated value types:
#     "storage_ident" (str, optional)
#       Storage identifier. All zodbs requested with the same storage_ident value
#       are provided by the same service (ex: same ZEO process). Might not be
#       supported by all storage_types, silently ignored if so.
#       Defaults to "default" if not provided.
#     "storage_dict" (dict, optional)
#       Storage-type-specific parameters. For example, it can be used to tell where
#       a ZEO filestorage database is located.

{# TODO: make libslap able to generate nested, complex values without having to resort to SR-level parsing -#}
config-zodb-dict = {{ slapparameter_dict['zodb-dict'] }}
software-type = {{ slapparameter_dict['zodb-software-type'] }}
sla-computer_guid = ${slap-parameter:zodb-computer-guid}

[request-zope-base]
<=request-common
return =
  zope-address-list
config =
  mysql-url
  memcached-url
  cloudooo-url
  kumofs-url
  sphinx-url-sphinx
  sphinx-url-sphinx-sql
  smtp-url
  bt5
  bt5-repository-url
  zodb-list
  tidstorage-ip
  tidstorage-port
  instance-count
  thread-amount
  timerserver-interval
  timezone
  site-id
config-mysql-url = ${request-mariadb:connection-url}
config-memcached-url = ${request-memcached:connection-url}
config-cloudooo-url = ${request-cloudooo:connection-url}
config-kumofs-url = ${request-kumofs:connection-url}
config-sphinx-url-sphinx = ${request-sphinx:connection-url-sphinx}
config-sphinx-url-sphinx-sql = ${request-sphinx:connection-url-sphinx-sql}
config-bt5 = ${slap-parameter:bt5}
config-bt5-repository-url = ${slap-parameter:bt5-repository-url}
config-smtp-url = ${slap-parameter:smtp-url}
config-zodb-list = ${request-zodb:connection-zodb-list}
# config-zodb-dict = ${request-zodb:connection-zodb-dict}
# config-zodb-storage-type  = ${request-zodb:connection-zodb-storage-type}
config-tidstorage-ip = ${request-zodb:connection-tidstorage-ip}
config-tidstorage-port = ${request-zodb:connection-tidstorage-port}
config-timezone = ${slap-parameter:timezone}
config-site-id = ${slap-parameter:site-id}
software-type = production-zope

{% set zope_family_dict = {} -%}
{% for custom_name, zope_parameter_dict in json_module.loads(slapparameter_dict.get('zope-partition-dict', '{}')).items() -%}
{%   set name = 'zope-' ~ custom_name -%}
{%   do zope_family_dict.setdefault(zope_parameter_dict.get('family'), []).append('request-' ~ name) -%}
[{{ 'request-' ~ name }}]
< = request-zope-base
name = {{ name }}
config-instance-count = {{ zope_parameter_dict.get('instance-count', 1) }}
config-thread-amount = {{ zope_parameter_dict.get('thread-amount', 1) }}
config-timerserver-interval = {{ zope_parameter_dict.get('timerserver-interval', 0) }}
sla-computer_guid = {{ zope_parameter_dict.get('computer_guid', '${slap-connection:computer-id}') }}
{% endfor %}

[request-backend-base]
< = request-common
software-type = balancer
return = url
# XXX: should those really be same for all backends ?
config-haproxy-maxconn = {{ slapparameter_dict.get('haproxy-maxconn', 1) }}
config-haproxy-server-check-path = {{ slapparameter_dict.get('haproxy-server-check-path', '/') }}
config-apache-access-control-string = {{ slapparameter_dict.get('apache-access-control-string', '') }}
config-apache-ssl-authentication = {{ slapparameter_dict.get('apache-ssl-authentication', '0') }}
config-apache-backend-path = {{ slapparameter_dict.get('apache-backend-path', '/') % {'site_id': slapparameter_dict['site_id']} }}
config-ca = {{ slapparameter_dict['ca'] }}

{% for family_name, zope_section_id_list in zope_family_dict.items() -%}
{%   set backend_name = 'backend-' ~ family_name -%}
{%   set frontend_name = 'frontend-' ~ family_name -%}
[{{ section(backend_name) }}]
< = request-backend-base
config =
  zope-name-list
  haproxy-maxconn
  haproxy-server-check-path
  apache-access-control-string
  apache-ssl-authentication
  apache-backend-path
  ca
{% for zope_section_id in zope_section_id_list %}
  {{ 'zope-' ~ zope_section_id ~ '-address-list' }}
{% endfor %}
name = {{ backend_name }}
sla-computer_guid = ${slap-parameter:zodb-computer-guid}
config-zope-name-list = {{ json_module.dumps(zope_section_id_list) }}
{% for zope_section_id in zope_section_id_list %}
config-zope-{{ zope_section_id }}-address-list = {{ '${' ~ zope_section_id ~ ':connection-zope-address-list}' }}
{% endfor %}

{% endfor %}

#############################
#
# Global buildout parameters
#
#############################
[slap-parameter]
# Default value if no computer_guid is specified for each type
sphinx-computer-guid = ${slap-connection:computer-id}
mariadb-computer-guid = ${slap-connection:computer-id}
cloudooo-computer-guid = ${slap-connection:computer-id}
memcached-computer-guid = ${slap-connection:computer-id}
kumofs-computer-guid = ${slap-connection:computer-id}
zodb-computer-guid = ${slap-connection:computer-id}
cloudooo-json =
bt5 = erp5_full_text_myisam_catalog
  erp5_configurator_standard
  erp5_configurator_maxma_demo
  erp5_configurator_ung
  erp5_configurator_run_my_doc
bt5-repository-url = {{ local_bt5_repository }}
smtp-url = smtp://localhost:25/
timezone = Europe/Paris
site-id = erp5
test-database-amount = 0

[buildout]
parts =
  {{ part_list | join('\n  ') }}

eggs-directory = {{ eggs_directory }}
develop-eggs-directory = {{ develop_eggs_directory }}
offline = true
{% endif %}