[buildout]
parts =
  switch-softwaretype

eggs-directory = {{ eggs_directory }}
develop-eggs-directory = {{ develop_eggs_directory }}

[slap-configuration]
recipe = slapos.cookbook:slapconfiguration.serialised
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
rendered = ${buildout:parts-directory}/${:_buildout_section_name_}/${:filename}
extra-context =
context =
    key ipv4_set slap-configuration:ipv4
    key ipv6_set slap-configuration:ipv6
    key eggs_directory buildout:eggs-directory
    key develop_eggs_directory buildout:develop-eggs-directory
    key slap_software_type slap-configuration:slap-software-type
    key slapparameter_dict slap-configuration:configuration
    key computer_id slap-configuration:computer
    raw slapos_core_version {{ slapos_core_version }}
    ${:extra-context}

[dynamic-template-cloudooo-parameters]
cups = {{ cups_location }}
dbus = {{ dbus_location }}
dbus-glib = {{ dbus_glib_location }}
file = {{ file_location }}
fontconfig = {{ fontconfig_location }}
freetype = {{ freetype_location }}
glib = {{ glib_location }}
libffi = {{ libffi_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 }}
6tunnel = {{ sixtunnel_location }}
dash = {{ dash_location }}

[dynamic-template-cloudooo]
< = jinja2-template-base
template = {{ template_cloudooo }}
filename = instance-cloudoo.cfg
extra-context =
    section parameter_dict dynamic-template-cloudooo-parameters
# Must match the key id in [switch-softwaretype] which uses this section.
    raw software_type cloudooo
[dynamic-template-erp5-parameters]
local-bt5-repository = {{ local_bt5_repository }}

[dynamic-template-erp5]
< = jinja2-template-base
template = {{ template_erp5 }}
filename = instance-erp5.cfg
extensions = jinja2.ext.do
extra-context =
    key local_bt5_repository dynamic-template-erp5-parameters:local-bt5-repository
# Must match the key id in [switch-softwaretype] which uses this section.
    key software_type :software-type
software-type = default

[dynamic-template-erp5-cluster]
< = dynamic-template-erp5
software-type = cluster

[dynamic-template-erp5-RootSoftwareInstance]
< = dynamic-template-erp5
software-type = RootSoftwareInstance

[dynamic-template-erp5-create-erp5-site]
< = dynamic-template-erp5
software-type = create-erp5-site

[dynamic-template-balancer-parameters]
apache = {{ apache_location }}
openssl = {{ openssl_location }}
haproxy = {{ haproxy_location }}
instance-logrotate-cfg = {{ template_logrotate_base }}
bin-directory = {{ bin_directory }}
6tunnel = {{ sixtunnel_location }}
dash = {{ dash_location }}
template-haproxy-cfg = {{ template_haproxy_cfg }}

[dynamic-template-balancer]
< = jinja2-template-base
template = {{ template_balancer }}
extensions = jinja2.ext.do
filename = instance-balancer.cfg
extra-context =
    section parameter_dict dynamic-template-balancer-parameters
# Must match the key id in [switch-softwaretype] which uses this section.
    raw software_type balancer

[dynamic-template-neo]
< = jinja2-template-base
template = {{ template_neo }}
filename = instance-neo.cfg
extensions = jinja2.ext.do
extra-context =
# Must match the key id in [switch-softwaretype] which uses this section.
    raw software_type zodb-neo

[dynamic-template-zeo-parameters]
buildout-bin-directory = {{ buildout_bin_directory }}
instance-logrotate-cfg = {{ template_logrotate_base }}
6tunnel = {{ sixtunnel_location }}
dash = {{ dash_location }}
findutils-location = {{ findutils_location }}

[dynamic-template-zeo]
< = jinja2-template-base
template = {{ template_zeo }}
filename = instance-zeo.cfg
extensions = jinja2.ext.do
extra-context =
    key buildout_directory buildout:directory
    section parameter_dict dynamic-template-zeo-parameters
    import json_module json
# Must match the key id in [switch-softwaretype] which uses this section.
    raw software_type zodb-zeo

[dynamic-template-zope-parameters]
bin-directory = {{ bin_directory }}
zope-conf-template = {{ template_zope_conf }}
instance-logrotate-cfg = {{ template_logrotate_base }}
buildout-bin-directory = {{ buildout_bin_directory }}
6tunnel = {{ sixtunnel_location }}
dash = {{ dash_location }}
jsl = {{ jsl_location }}
link-binary = {{ dumps(zope_link_binary) }}

[dynamic-template-zope]
< = jinja2-template-base
template = {{ template_zope }}
filename = instance-zope.cfg
extensions = jinja2.ext.do
extra-context =
    key buildout_directory buildout:directory
    section parameter_dict dynamic-template-zope-parameters
# Must match the key id in [switch-softwaretype] which uses this section.
    key software_type :software-type
software-type = zope

[dynamic-template-cluster-zope]
< = dynamic-template-zope
software-type = cluster-zope

[dynamic-template-kumofs-parameters]
dash-location = {{ dash_location }}
dcron-location = {{ dcron_location }}
gzip-location = {{ gzip_location }}
kumo-location = {{ kumo_location }}
logrotate-location = {{ logrotate_location }}

[dynamic-template-kumofs]
< = jinja2-template-base
template = {{ template_kumofs }}
filename = instance-kumofs.cfg
extra-context =
    section parameter_dict dynamic-template-kumofs-parameters
# Must match the key id in [switch-softwaretype] which uses this section.
    raw software_type kumofs

[dynamic-template-mariadb-parameters]
coreutils-location = {{ coreutils_location }}
dcron-location = {{ dcron_location }}
findutils-location = {{ findutils_location }}
gzip-location = {{ gzip_location }}
logrotate-location = {{ logrotate_location }}
mariadb-location = {{ mariadb_location }}
template-my-cnf = {{ template_my_cnf }}
template-mariadb-initial-setup = {{ template_mariadb_initial_setup }}
link-binary = {{ dumps(mariadb_link_binary) }}
instance-logrotate-cfg = {{ template_logrotate_base }}

[dynamic-template-mariadb]
< = jinja2-template-base
template = {{ template_mariadb }}
filename = instance-mariadb.cfg
extensions = jinja2.ext.do
extra-context =
    section parameter_dict dynamic-template-mariadb-parameters
# Must match the key id in [switch-softwaretype] which uses this section.
    raw software_type mariadb

[dynamic-template-create-erp5-site-parameters]
instance-erp5 = ${dynamic-template-erp5-create-erp5-site:rendered}
template-create-erp5-site-real = {{ template_create_erp5_site_real }}
dash-location = {{ dash_location }}
curl-location = {{ curl_location }}

[dynamic-template-create-erp5-site]
< = jinja2-template-base
template = {{ template_create_erp5_site }}
filename = instance-create-erp5-site.cfg
extra-context =
    section parameter_dict dynamic-template-create-erp5-site-parameters
# Must match the key id in [switch-softwaretype] which uses this section.
    raw software_type create-erp5-site

[switch-softwaretype]
recipe = slapos.recipe.build
script =
  import subprocess, sys
  software_type = self.buildout["slap-configuration"]["slap-software-type"]
  # XXX-Antoine: We gotta find a better way to do this. I tried to check
  # out how slapgrid-cp was running buildout. But it is worse than that.
  args = sys.argv[:]
  args += map("slap-connection:%%s=%%s".__mod__,
              self.buildout["slap-connection"].iteritems())
  args += ("buildout:directory=${buildout:directory}",
           "buildout:installed=.installed-${:_buildout_section_name_}.cfg")
  buildout = self.options[software_type]
  # Options.get (from zc.buildout) should deserialize.
  try: override = open(self.options["override"][software_type]).read()
  except (KeyError, TypeError): pass
  else: \
    override = "[buildout]\nextends = %%s\n\n" %% buildout + override; \
    buildout = "${buildout:parts-directory}/${:_buildout_section_name_}.cfg"; \
    open(buildout, "w", 0).write(override)
  subprocess.check_call(args + ["-oc", buildout])
update_script = ${:script}
slapos_promise =
slapos_update_promise = ${:slapos_promise}
override = {{ dumps(override_switch_softwaretype |default) }}

# Public software types
default = ${dynamic-template-erp5:rendered}
create-erp5-site = ${dynamic-template-create-erp5-site:rendered}
# Internal software types
kumofs = ${dynamic-template-kumofs:rendered}
cloudooo = ${dynamic-template-cloudooo:rendered}
mariadb = ${dynamic-template-mariadb:rendered}
balancer = ${dynamic-template-balancer:rendered}
zodb-neo = ${dynamic-template-neo:rendered}
zodb-zeo = ${dynamic-template-zeo:rendered}
zope = ${dynamic-template-zope:rendered}