Commit f78e438c authored by Guillaume Hervier's avatar Guillaume Hervier

software/re6stnet: auto-restart services on SR upgrade.

/reviewed-on nexedi/slapos!410
parents 2a01586b 508c6c0c
...@@ -58,7 +58,7 @@ port = 9026 ...@@ -58,7 +58,7 @@ port = 9026
error-log = ${directory:log}/apache-error.log error-log = ${directory:log}/apache-error.log
access-log = ${directory:log}/apache-access.log access-log = ${directory:log}/apache-access.log
pid-file = ${directory:run}/apache.pid pid-file = ${directory:run}/apache.pid
context = context =
key apache_port :port key apache_port :port
key re6st_ipv4 re6st-registry:ipv4 key re6st_ipv4 re6st-registry:ipv4
key re6st_port re6st-registry:port key re6st_port re6st-registry:port
...@@ -80,13 +80,19 @@ wrapper-path = {{ apache_wrapper }} ...@@ -80,13 +80,19 @@ wrapper-path = {{ apache_wrapper }}
command-line = "{{ parameter_dict['apache-location'] }}/bin/httpd" -f "${apache-conf:rendered}" -DFOREGROUND command-line = "{{ parameter_dict['apache-location'] }}/bin/httpd" -f "${apache-conf:rendered}" -DFOREGROUND
{% if uri_scheme == 'https' %} {% if uri_scheme == 'https' %}
[{{ section('apache-ca') }}] [apache-ca]
<= certificate-authority <= certificate-authority
recipe = slapos.cookbook:certificate_authority.request recipe = slapos.cookbook:certificate_authority.request
executable = ${apache-httpd:wrapper-path} executable = ${apache-httpd:wrapper-path}
wrapper = ${directory:services}/httpd wrapper = ${directory:bin}/httpd
key-file = ${certificate-authority:ca-private}/apache.key key-file = ${certificate-authority:ca-private}/apache.key
cert-file = ${certificate-authority:ca-certs}/apache.crt cert-file = ${certificate-authority:ca-certs}/apache.crt
[{{ section('apache-ca-service') }}]
recipe = slapos.cookbook:wrapper
command-line = ${apache-ca:wrapper}
wrapper-path = ${directory:services}/httpd
hash-files = ${buildout:directory}/software_release/buildout.cfg
{% endif %} {% endif %}
[apache-httpd-graceful] [apache-httpd-graceful]
...@@ -164,7 +170,7 @@ dh-file = ${re6st-registry-conf-dict:dh} ...@@ -164,7 +170,7 @@ dh-file = ${re6st-registry-conf-dict:dh}
slave-instance-list = ${slap-parameter:slave_instance_list} slave-instance-list = ${slap-parameter:slave_instance_list}
environment = environment =
PATH={{ openssl_bin }} PATH={{ openssl_bin }}
[re6stnet-manage] [re6stnet-manage]
...@@ -222,7 +228,7 @@ extends = ...@@ -222,7 +228,7 @@ extends =
{{ monitor2_template_rendered }} {{ monitor2_template_rendered }}
{{ logrotate_cfg }} {{ logrotate_cfg }}
parts = parts =
certificate-authority certificate-authority
logrotate-apache logrotate-apache
logrotate-entry-re6stnet logrotate-entry-re6stnet
......
...@@ -86,7 +86,7 @@ extra-context = ...@@ -86,7 +86,7 @@ extra-context =
[template-re6stnet] [template-re6stnet]
< = download-base < = download-base
filename = instance-re6stnet.cfg.in filename = instance-re6stnet.cfg.in
md5sum = 8c167f2adb2ed36aeaff773f59214981 md5sum = 09683c66c16361b77867d8f2e1140a35
[template-apache-conf] [template-apache-conf]
< = download-base < = download-base
......
...@@ -81,3 +81,41 @@ class TestPortRedirection(Re6stnetTestCase): ...@@ -81,3 +81,41 @@ class TestPortRedirection(Re6stnetTestCase):
'srcPort': 9201, 'srcPort': 9201,
'destPort': 9201, 'destPort': 9201,
}, portredir_config[0]) }, portredir_config[0])
class ServicesTestCase(Re6stnetTestCase):
@staticmethod
def generateHashFromFiles(file_list):
import hashlib
hasher = hashlib.md5()
for path in file_list:
with open(path, 'r') as afile:
buf = afile.read()
hasher.update("%s\n" % len(buf))
hasher.update(buf)
hash = hasher.hexdigest()
return hash
@classmethod
def getInstanceParameterDict(cls):
return {'uri-scheme': 'https'}
def test_hashes(self):
hash_files = [
'software_release/buildout.cfg',
]
expected_process_names = [
'httpd-{hash}-on-watch',
]
supervisor = self.getSupervisorRPCServer().supervisor
process_names = [process['name']
for process in supervisor.getAllProcessInfo()]
hash_files = [os.path.join(self.computer_partition_root_path, path)
for path in hash_files]
for name in expected_process_names:
h = ServicesTestCase.generateHashFromFiles(hash_files)
expected_process_name = name.format(hash=h)
self.assertIn(expected_process_name, process_names)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment