{% if slap_software_type in software_type -%} [jinja2-template-base] recipe = slapos.recipe.template:jinja2 rendered = ${buildout:directory}/${:filename} extra-context = context = import json_module json key eggs_directory buildout:eggs-directory key develop_eggs_directory buildout:develop-eggs-directory key slap_software_type slap-parameter:slap_software_type key slave_instance_list slap-parameter:slave_instance_list ${:extra-context} {% set part_list = [] -%} {% set single_type_key = 'single-' %} {% if slap_software_type == "replicate" %} {% set frontend_type = slapparameter_dict.pop('-frontend-type', 'single-default') -%} {% elif slap_software_type in ['default', 'RootSoftwareInstance'] -%} {% set frontend_type = "%s%s" % (single_type_key, 'custom-personal') -%} {% else -%} {% set frontend_type = "%s%s" % (single_type_key, slap_software_type) -%} {% endif -%} {% set frontend_quantity = slapparameter_dict.pop('-frontend-quantity', '1') | int -%} {% set slave_list_name = 'extra_slave_instance_list' -%} {% set frontend_list = [] %} {% set frontend_section_list = [] %} {% set request_dict = {} %} {% set namebase = 'apache-frontend' -%} # XXX Dirty hack, not possible to define default value before {% set sla_computer_apache_1_key = '-sla-1-computer_guid' -%} {% if not sla_computer_apache_1_key in slapparameter_dict -%} {% do slapparameter_dict.__setitem__(sla_computer_apache_1_key, '${slap-connection:computer-id}') -%} {% endif -%} # Here we request individualy each frontend. # The presence of sla parameters is checked and added if found {% for i in range(1, frontend_quantity + 1) -%} {% set frontend_name = "%s-%s" % (namebase, i) -%} {% set request_section_title = 'request-%s' % frontend_name -%} {% set sla_key = "-sla-%s-" % i -%} {% set sla_key_length = sla_key | length %} {% set sla_dict = {} %} {% set config_key = "-frontend-config-%s-" % i %} {% set config_key_length = config_key | length %} {% set config_dict = {} %} {% for key in slapparameter_dict.keys() %} {% if key.startswith(sla_key) %} {% do sla_dict.__setitem__(key[sla_key_length:], slapparameter_dict.pop(key)) %} # We check for specific configuration regarding the frontend {% elif key.startswith(config_key) -%} {% do config_dict.__setitem__(key[config_key_length:], slapparameter_dict.pop(key)) %} {% endif -%} {% endfor -%} {% do frontend_list.append(frontend_name) -%} {% do frontend_section_list.append(request_section_title) -%} {% do part_list.append(request_section_title) -%} # Filling request dict for slave {% set state_key = "-frontend-%s-state" % i %} {% do request_dict.__setitem__(request_section_title, { 'config': config_dict, 'name': frontend_name, 'sla': sla_dict, 'state': slapparameter_dict.pop(state_key, None) }) %} {% endfor -%} {% set authorized_slave_string = slapparameter_dict.pop('-frontend-authorized-slave-string', '') -%} {% set authorized_slave_list = [] %} {% set rejected_slave_list = [] %} {% for slave in slave_instance_list %} {% if not (slave.has_key('apache_custom_http') and not slave.get('slave_reference') in authorized_slave_string) %} {% do authorized_slave_list.append(slave) %} {% else %} {% do rejected_slave_list.append(slave.get('slave_reference')) %} {% endif %} {% endfor -%} [replicate] <= slap-connection recipe = slapos.cookbook:requestoptional config-monitor-cors-domains = {{ slapparameter_dict.get('monitor-cors-domains', 'monitor.app.officejs.com') }} config-monitor-username = ${monitor-htpasswd:username} config-monitor-password = ${monitor-htpasswd:passwd} {% set frontend_software_url_key = "-frontend-software-release-url" %} {% if slapparameter_dict.has_key(frontend_software_url_key) %} software-url = {{ slapparameter_dict.pop(frontend_software_url_key) }} {% else %} software-url = ${slap-connection:software-release-url} {% endif %} software-type = {{frontend_type}} return = private-ipv4 public-ipv4 slave-instance-information-list monitor-base-url {% for section, frontend_request in request_dict.iteritems() %} [{{section}}] <= replicate name = {{ frontend_request.get('name') }} {% if frontend_request.get('state') %} state = {{ frontend_request.get('state') }} {% endif%} {% set slave_configuration_dict = frontend_request.get('config') %} {% do slave_configuration_dict.update(**slapparameter_dict) %} {% do slave_configuration_dict.__setitem__(slave_list_name, json_module.dumps(authorized_slave_list)) %} {% do slave_configuration_dict.__setitem__("frontend-name", frontend_request.get('name')) %} config-_ = {{ json_module.dumps(slave_configuration_dict) }} {% if frontend_request.get('sla') %} {% for parameter, value in frontend_request.get('sla').iteritems() -%} sla-{{ parameter }} = {{ value }} {% endfor -%} {% endif -%} {% endfor -%} [publish-information] recipe = slapos.cookbook:publish domain = {{ slapparameter_dict.get('domain') }} slave-amount = {{ slave_instance_list | length }} accepted-slave-amount = {{ authorized_slave_list | length }} rejected-slave-amount = {{ rejected_slave_list | length }} rejected-slave-list = {{ json_module.dumps(rejected_slave_list) }} monitor-base-url = ${monitor-conf-parameters:base-url} monitor-url = ${:monitor-base-url}/public/feeds monitor-user = ${monitor-instance-parameter:username} monitor-password = ${monitor-instance-parameter:password} {% set monitor_interface_url = slapparameter_dict.get('monitor-interface-url', 'https://monitor.app.officejs.com') -%} monitor-setup-url = {{ monitor_interface_url }}/#page=settings_configurator&url=${:monitor-url} #---------------------------- #-- #-- Publish slave information [publish-slave-information] recipe = slapos.cookbook:softwaretype default = ${dynamic-publish-slave-information:rendered} RootSoftwareInstance = ${dynamic-publish-slave-information:rendered} replicate = ${dynamic-publish-slave-information:rendered} custom-personal = ${dynamic-publish-slave-information:rendered} custom-group = ${dynamic-publish-slave-information:rendered} [slave-information] {% for frontend_section in frontend_section_list -%} {{ frontend_section }} = {{ "${%s:connection-slave-instance-information-list}" % frontend_section }} {% endfor -%} [dynamic-publish-slave-information] < = jinja2-template-base template = {{ template_publish_slave_information }} filename = dynamic-publish-slave-information.cfg extensions = jinja2.ext.do extra-context = section slave_information slave-information [monitor-conf-parameters] monitor-url-list += {% for frontend in frontend_section_list %} {{ ' ${' + frontend + ':connection-monitor-base-url}' }} {% endfor -%} [buildout] extends = {{ template_monitor }} parts = monitor-base publish-slave-information publish-information {% for part in part_list -%} {{ ' %s' % part }} {% endfor -%} # publish-information eggs-directory = {{ eggs_directory }} develop-eggs-directory = {{ develop_eggs_directory }} offline = true [slap_connection] # Kept for backward compatiblity computer_id = ${slap-connection:computer-id} partition_id = ${slap-connection:partition-id} server_url = ${slap-connection:server-url} software_release_url = ${slap-connection:software-release-url} key_file = ${slap-connection:key-file} cert_file = ${slap-connection:cert-file} [slap-parameter] slave_instance_list = -frontend-quantity = 1 -frontend-type = single-default {%- endif %}