From d92849d0c1679da87a05ece35318dd9a83f7c614 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Ninivin?= <cedric.leninivin@tiolive.com> Date: Fri, 8 Aug 2014 14:27:42 +0200 Subject: [PATCH] apache-frontend: add support for default certificate in replicate --- software/apache-frontend/common.cfg | 6 +- .../instance-apache-frontend.cfg | 9 +++ .../instance-apache-replicate.cfg.in | 55 +++++++++++-------- .../apache-frontend/templates/apache.conf.in | 3 + 4 files changed, 47 insertions(+), 26 deletions(-) diff --git a/software/apache-frontend/common.cfg b/software/apache-frontend/common.cfg index 550308586..7a1ea0026 100644 --- a/software/apache-frontend/common.cfg +++ b/software/apache-frontend/common.cfg @@ -67,14 +67,14 @@ mode = 0644 [template-apache-frontend] recipe = slapos.recipe.template url = ${:_profile_base_location_}/instance-apache-frontend.cfg -md5sum = 66a4c824a9f9a9995e1699549b941656 +md5sum = 53de57ef78345cedd3c715a105539ca3 output = ${buildout:directory}/template-apache-frontend.cfg mode = 0644 [template-apache-replicate] recipe = slapos.recipe.build:download url = ${:_profile_base_location_}/instance-apache-replicate.cfg.in -md5sum = 4a386500c21d0b59ce9a679c6110d375 +md5sum = da22cc3b2095766c5e14b29afab2b760 mode = 0644 [template-slave-list] @@ -98,7 +98,7 @@ mode = 640 [template-apache-frontend-configuration] recipe = slapos.recipe.build:download url = ${:_profile_base_location_}/templates/apache.conf.in -md5sum = 72922908c1f4e72c92bb03e072660c7c +md5sum = e68401762b25b7a462ba5df187e003e8 mode = 640 [template-apache-cached-configuration] diff --git a/software/apache-frontend/instance-apache-frontend.cfg b/software/apache-frontend/instance-apache-frontend.cfg index 5dc4fc580..38a69717f 100644 --- a/software/apache-frontend/instance-apache-frontend.cfg +++ b/software/apache-frontend/instance-apache-frontend.cfg @@ -118,6 +118,7 @@ configuration.apache_custom_https = "" configuration.apache_custom_http = "" configuration.apache-key = configuration.apache-certificate = +configuration.apache-ca-certificate = configuration.open-port = 80 443 configuration.extra_slave_instance_list = configuration.disk-cache-size = 8G @@ -256,6 +257,7 @@ extra-context = key access_control_string apache-configuration:access-control-string key login_certificate ca-frontend:cert-file key login_key ca-frontend:key-file + key login_ca_crt ca-custom-frontend:rendered key ca_dir certificate-authority:ca-dir key ca_crl certificate-authority:ca-crl key access_log apache-configuration:access-log @@ -380,6 +382,13 @@ cert-content = $${instance-parameter:configuration.apache-certificate} # Put domain name name = $${instance-parameter:configuration.domain} +[ca-custom-frontend] +< = jinja2-template-base +template = ${template-empty:target} +rendered = $${cadirectory:certs}/apache_frontend.ca.crt +extra-context = + key content instance-parameter:configuration.apache-ca-certificate + [cron] recipe = slapos.cookbook:cron dcrond-binary = ${dcron:location}/sbin/crond diff --git a/software/apache-frontend/instance-apache-replicate.cfg.in b/software/apache-frontend/instance-apache-replicate.cfg.in index d1b352630..c611e7774 100644 --- a/software/apache-frontend/instance-apache-replicate.cfg.in +++ b/software/apache-frontend/instance-apache-replicate.cfg.in @@ -23,6 +23,7 @@ context = {% 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' -%} @@ -37,13 +38,13 @@ context = {% set request_section_title = 'request-%s' % frontend_name -%} {% set sla_key = "-sla-%s-" % i -%} {% set sla_key_length = sla_key | length %} -{% set sla_parameters = [] %} +{% 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_parameters.append(key[sla_key_length:]) %} +{% 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)) %} @@ -52,23 +53,15 @@ context = {% do frontend_list.append(frontend_name) -%} {% do frontend_section_list.append(request_section_title) -%} {% do part_list.append(request_section_title) -%} -[{{request_section_title}}] -<= replicate -name = {{frontend_name}} +# Filling request dict for slave {% set state_key = "-frontend-%s-state" % i %} -{% if slapparameter_dict.has_key(state_key) %} -state = {{ slapparameter_dict.pop(state_key) }} -{% endif%} -extra-config = {{ ' '.join(config_dict.keys()) }} -{% for key, value in config_dict.iteritems() -%} -config-{{ key }} = {{ value }} -{% endfor -%} -{% if sla_parameters %} -sla = {{ ' '.join(sla_parameters) }} -{% for parameter in sla_parameters -%} -sla-{{ parameter }} = {{ slapparameter_dict.pop( sla_key + parameter ) }} -{% endfor -%} -{% endif -%} +{% 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', '') -%} @@ -93,13 +86,29 @@ software-url = ${slap-connection:software-release-url} {% endif %} software-type = {{frontend_type}} return = private-ipv4 public-ipv4 slave-instance-information-list monitor_url -config = {{ ' '.join(slapparameter_dict.keys()) + ' ${:extra-config} ' + slave_list_name }} -{% for parameter, value in slapparameter_dict.iteritems() -%} -config-{{parameter}} = {{ value }} -{% endfor -%} -config-{{ slave_list_name }} = {{ json_module.dumps(authorized_slave_list) }} +config = _ connection-monitor_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)) %} +config-_ = {{ json_module.dumps(slave_configuration_dict) }} +{% if frontend_request.get('sla') %} +sla = {{ ' '.join(frontend_request.get('sla').keys()) }} +{% 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') }} diff --git a/software/apache-frontend/templates/apache.conf.in b/software/apache-frontend/templates/apache.conf.in index 03a1d68d3..07d8cd24a 100644 --- a/software/apache-frontend/templates/apache.conf.in +++ b/software/apache-frontend/templates/apache.conf.in @@ -114,6 +114,9 @@ BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # SSL Configuration SSLCertificateFile {{ login_certificate }} SSLCertificateKeyFile {{ login_key }} +{% if slapparameter_dict.get('apache-ca-certificate') %} +SSLCACertificateFile {{ login_ca_crt }} +{% endif %} SSLRandomSeed startup builtin SSLRandomSeed connect builtin SSLSessionCache shmcb:/{{ httpd_mod_ssl_cache_directory }}/ssl_scache(512000) -- 2.30.9