{%- if slap_software_type == software_type %}

[jinja2-template-base]
recipe = slapos.recipe.template:jinja2
rendered = ${buildout:directory}/${:filename}
extra-context =
context =
    import json_module json
    ${:extra-context}

[slave-test-configuration]
<=jinja2-template-base
template = {{ template_json_edgetest_test }}
filename = srv/monitor/private/test.json
extensions = jinja2.ext.do 
extra-context = 
  section slave_information slap-configuration

{% set part_list = [] -%}
# Publish information for each slave
{%- set edgebot_software_type = 'edgebot' %}
{%- set edgebot_quantity = slapparameter_dict.pop('edgebot-quantity', '1') | int %}
{%- set edgebot_list = [] %}
{%- set edgebot_section_list = [] %}
{%- set slave_list_name = 'extra_slave_instance_list' %}
{%- set request_dict = {} %}
{%- set namebase = "edgebot" %}
{%- set authorized_slave_list = [] %}
{%- set monitor_base_url_dict = {} -%}
{%- for slave in sorted(slave_instance_list) %}
{%-   do authorized_slave_list.append(slave) %}
{%- endfor %}
{%- set monitor_base_port = int(slap_configuration['configuration.monitor-base-port']) %}
{%- for i in range(1, edgebot_quantity + 1) %}
{%-   set edgebot_name = "%s-%s" % (namebase, i) %}
{%-   set request_section_title = 'request-%s' % edgebot_name %}
{%-   do edgebot_list.append(edgebot_name) %}
{%-   do edgebot_section_list.append(request_section_title) %}
{%-   do part_list.append(request_section_title) %}
{%-   do request_dict.__setitem__(request_section_title,
                                  {
                                  'config': {'monitor-httpd-port': monitor_base_port + i},
                                  'name': edgebot_name,
                                  'sla': {},
                                  'state': 'started', 
                                  }) %}
{%- endfor %}

[replicate]
<= slap-connection
recipe = slapos.cookbook:request.serialised
config-monitor-cors-domains = {{ slapparameter_dict.get('monitor-cors-domains', 'monitor.app.officejs.com') }}
config-monitor-username = ${monitor-instance-parameter:username}
config-monitor-password = ${monitor-htpasswd:passwd}
software-url = ${slap-connection:software-release-url}
software-type = {{edgebot_software_type}}
return = monitor-base-url

{% for section, edgebot_request in request_dict.iteritems() %}
[{{section}}]
<= replicate
name = {{ edgebot_request.get('name') }}
{%-   if edgebot_request.get('state') %}
state = {{ edgebot_request.get('state') }}
{%-   endif%}
{%-   set slave_configuration_dict = slapparameter_dict %}
{%-   do slave_configuration_dict.update(edgebot_request.get('config')) %}
{%-   do slave_configuration_dict.__setitem__(slave_list_name, json_module.dumps(authorized_slave_list)) %}
{%-   for config_key, config_value in slave_configuration_dict.iteritems() %}
config-{{ config_key }} = {{ dumps(config_value) }}
{%   endfor -%}
{%-   if edgebot_request.get('sla') %}
{%-     for parameter, value in edgebot_request.get('sla').iteritems() %}
sla-{{ parameter }} = {{ value }}
{%-     endfor %}
{%-   else %}
# As no SLA was provided, by default it is requested on the same computer
sla-computer_guid = ${slap-connection:computer-id}
{%   endif %}
{%-  do monitor_base_url_dict.__setitem__(section, '${' ~ section ~ ':connection-monitor-base-url}') -%}
{%- endfor %}
{%- set directory_list = [] -%}
{%- for slave_instance in slave_instance_list -%}
{%-   set publish_section_title = 'publish-%s' % slave_instance.get('slave_reference')  -%}
{%-   do part_list.append(publish_section_title) %}
[{{ publish_section_title }}]
recipe = slapos.cookbook:publish
-slave-reference = {{ slave_instance.get('slave_reference') }}
{% endfor %}

[monitor-conf-parameters]
monitor-title = Monitor
password = ${monitor-htpasswd:passwd}

[monitor-base-url-dict]
{% for key, value in monitor_base_url_dict.items() -%}
{{ key }} = {{ value }}
{% endfor %}

[buildout]
extends = {{ instance_base_monitor }}
parts +=
  slave-test-configuration
{% for part in part_list %}
{{ '  %s' % part }}
{%- endfor %}
{%- endif %}
