apache-custom-slave-list.cfg.in 8.16 KB
Newer Older
1 2
{% if software_type == slap_software_type -%}

3 4
{% set cached_server_dict = {} -%}
{% set part_list = [] -%}
5
{% set cache_access = "http://%s:%s" % (local_ipv4, cache_port) -%}
6
{% set generic_instance_parameter_dict = {'cache_access': cache_access,} -%}
7
{% set slave_log_dict = {} -%}
8
{% if extra_slave_instance_list -%}
9
{%   set slave_instance_information_list = [] -%}
10 11
{%   set slave_instance_list = slave_instance_list + json_module.loads(extra_slave_instance_list) -%}
{% endif -%}
12 13 14 15 16 17 18 19 20
[jinja2-template-base]
recipe = slapos.recipe.template:jinja2
rendered = {{ apache_configuration_directory }}/${:filename}
extra-context =
context =
    key eggs_directory buildout:eggs-directory
    key develop_eggs_directory buildout:develop-eggs-directory
    ${:extra-context}

21 22 23 24 25 26
{% do logrotate_dict.pop('recipe') %}
[logrotate]
{% for key, value in logrotate_dict.iteritems() -%}
{{ key }} = {{ value }}
{% endfor %}

27
# Loop trhought slave list to set up slaves
28 29 30
{% for slave_instance in slave_instance_list -%}
{%   set slave_reference = slave_instance.get('slave_reference') -%}
{%   set slave_section_title = 'dynamic-template-slave-instance-%s' % slave_reference -%}
31
{%   set slave_parameter_dict = generic_instance_parameter_dict.copy() -%}
32
{%   do part_list.append(slave_section_title) -%}
33 34 35 36 37 38 39 40


{%   set slave_directory_section = slave_reference + "-directory" -%}
{%   set slave_log_folder = logrotate_dict.get('backup') + '/' + slave_reference + "-logs" -%}
[{{slave_directory_section}}]
recipe = slapos.cookbook:mkdirectory
log-folder = {{slave_log_folder}}

41
# Set Up log files
42 43
{%   do slave_parameter_dict.__setitem__('access_log', '/'.join([apache_log_directory, '%s_access_log' % slave_reference])) -%}
{%   do slave_parameter_dict.__setitem__('error_log', '/'.join([apache_log_directory, '%s_error_log' % slave_reference])) -%}
44 45 46 47 48 49 50 51 52 53 54 55

# Set slave logrotate entry
{%   set slave_logrotate_section = slave_reference + "-logs" -%}
{%   do part_list.append(slave_logrotate_section) -%}
[{{slave_logrotate_section}}]
<= logrotate
recipe = slapos.cookbook:logrotate.d
name = ${:_buildout_section_name_}
log = {{slave_parameter_dict.get('access_log')}} {{slave_parameter_dict.get('error_log')}}
backup = {{ '${' + slave_directory_section + ':log-folder}' }}
frequency = daily
rotatep-num = 30
56
post = {{ apache_configuration.get('frontend-graceful-command') }}
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
sharedscripts = true
notifempty = true
create = true

# integrate current logs inside
{%   set slave_ln_section = slave_reference + "-ln" -%}
{%   do part_list.append(slave_ln_section) -%}
[{{slave_ln_section}}]
recipe = plone.recipe.command
stop-on-error = false
command = ln -s {{slave_parameter_dict.get('error_log')}} {{ '${' + slave_directory_section + ':log-folder}' }}/apache-error.log && ln -s {{slave_parameter_dict.get('access_log')}} {{ '${' + slave_directory_section + ':log-folder}' }}/apache-access.log

# Set password for slave
{%   set slave_password_section = slave_reference + "-password" -%}
[{{slave_password_section}}]
recipe = slapos.cookbook:generate.password
storage-path = {{apache_configuration_directory}}/.{{slave_reference}}.passwd
bytes = 8

# Set up htaccess file for slave
{%   set slave_htaccess_section = slave_reference + '-htaccess' %}
{%   do part_list.append(slave_htaccess_section) -%}
[{{slave_htaccess_section}}]
recipe = plone.recipe.command
stop-on-error = true
htaccess-path = {{apache_configuration_directory}}/.{{slave_reference}}.htaccess
command = {{frontend_configuration.get('apache-directory')}}/bin/htpasswd -cb ${:htaccess-path} {{ slave_reference }} {{ '${' + slave_password_section + ':passwd}' }}

# Add slave log directory to the slave log access dict
{%   do slave_log_dict.__setitem__(slave_reference, slave_log_folder) %}

88
# Set up apache configuration file for slave
89 90 91 92 93
[{{ slave_section_title }}]
< = jinja2-template-base
template = {{ template_slave_configuration }}
filename = {{ '%s.conf' % slave_reference }}
extra-context =
94 95
    key apache_custom_https {{ 'slave-instance-%s-configuration:apache_custom_https' % slave_reference }}
    key apache_custom_http {{ 'slave-instance-%s-configuration:apache_custom_http' % slave_reference }}
96 97 98 99
    raw https_port {{ https_port }}
    raw http_port {{ http_port }}
{{ '\n' }}

100 101 102 103 104 105
# Set ssl certificates for each slave
{%   for cert_name in ('ssl_key', 'ssl_crt', 'ssl_ca_crt', 'ssl_csr')-%}
{%     if cert_name in slave_instance -%}
{%       set cert_title = '%s-%s' % (slave_reference, cert_name.replace('ssl_', '')) -%}
{%       set cert_file = '/'.join([custom_ssl_directory, cert_title.replace('-','.')]) -%}
{%       do part_list.append(cert_title) -%}
106
{%       do slave_parameter_dict.__setitem__(cert_name, cert_file) -%}
107
# Store certificates on fs
108 109 110 111 112 113
[{{ cert_title }}]
< = jinja2-template-base
template = {{ empty_template }}
rendered = {{ cert_file }}
extra-context =
    key content {{ cert_title + '-config:value' }}
114
# Store certificate in config
115 116 117 118 119
[{{ cert_title + '-config' }}]
value = {{ dumps(slave_instance.get(cert_name)) }}
{%     endif -%}
{%   endfor -%}

120
# Set apache configuration value for slave
121
[{{ ('slave-instance-%s-configuration' % slave_reference) }}]
122 123
{% set apache_custom_http = ((slave_instance.get('apache_custom_http', '')) % slave_parameter_dict) -%}
{% set apache_custom_https = ((slave_instance.get('apache_custom_https', '')) % slave_parameter_dict) -%}
124 125
apache_custom_http = {{ dumps(apache_custom_http) }}
apache_custom_https = {{ dumps(apache_custom_https) }}
126 127
{{ '\n' }}

128
# The slave use cache
129 130
{%   if 'enable_cache' in slave_instance and 'url' in slave_instance and 'domain' in slave_instance -%}
{%     do cached_server_dict.__setitem__(slave_instance.get('domain'), slave_instance.get('url')) -%}
131 132
{%   endif -%}

133
# Publish slave information
134
{%   set slave_log_access_url = 'https://' + slave_reference + ':${'+ slave_password_section +':passwd}@[' + frontend_configuration.get('apache-ipv6') + ']:' + frontend_configuration.get('apache-https-port') + '/' + slave_reference.lower() + '/' %}
135 136 137
{%   if not extra_slave_instance_list -%}
{%     set publish_section_title = 'publish-%s-connection-information' % slave_instance.get('slave_reference') -%}
{%     do part_list.append(publish_section_title) -%}
138 139 140
[{{ publish_section_title }}]
recipe = slapos.cookbook:publish
public-ipv4 = {{ public_ipv4 }}
141
log-access = {{ slave_log_access_url }}
142
-slave-reference = {{ slave_instance.get('slave_reference') }}
143
{%   else -%}
144
{%     do slave_instance_information_list.append({'slave-reference':slave_instance.get('slave_reference'), 'public-ipv4':public_ipv4, 'log-access': slave_log_access_url}) -%}
145
{%   endif -%}
146 147
{% endfor -%}

148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
[slave-log-directories]
{% for key, value in slave_log_dict.iteritems() -%}
{{ key }} = {{ value }}
{% endfor %}

# Define log access
{% set log_access_section = "apache-log-access" %}
{% do part_list.append(log_access_section) -%}
[{{log_access_section}}]
< = jinja2-template-base
template = {{frontend_configuration.get('template-log-access')}}
rendered = {{frontend_configuration.get('log-access-configuration')}}
extra-context =
    section slave_log_directory slave-log-directories
    raw apache_log_directory {{apache_log_directory}}
    raw apache_configuration_directory {{apache_configuration_directory}}

165 166 167 168 169 170 171 172 173 174
# Publish information for the instance
{% set publish_section_title = 'publish-apache-information' -%}
{% do part_list.append(publish_section_title) -%}
[{{ publish_section_title }}]
recipe = slapos.cookbook:publish
public-ipv4 = {{ public_ipv4 }}
private-ipv4 = {{ local_ipv4 }}
{% if extra_slave_instance_list -%}
slave-instance-information-list = {{ json_module.dumps(slave_instance_information_list) }}
{% endif -%}
175 176 177 178
{% do connection_information_dict.pop('recipe') %}
{% for key, value in connection_information_dict.iteritems() -%}
{{ key }} = {{ value }}
{% endfor %}
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

{% do part_list.append('cached-rewrite-rules') -%}
[cached-rewrite-rules]
< = jinja2-template-base
template = {{ template_rewrite_cached }}
rendered = {{ rewrite_cached_configuration }}
extra-context =
    import json_module json
    key server_dict rewrite-rules:rules

[rewrite-rules]
rules = {{ dumps(cached_server_dict) }}

[buildout]
parts +=
{% for part in part_list -%}
{{ '    %s' % part }}
{% endfor -%}

eggs-directory = {{ eggs_directory }}
develop-eggs-directory = {{ develop_eggs_directory }}
offline = true
201 202 203
cache-access = {{ cache_access }}

{% endif -%}