Commit fb6c06c3 authored by Łukasz Nowak's avatar Łukasz Nowak Committed by Łukasz Nowak

caddy-frontend: Improve validate and graceful scripts

Validate only if interesting files are changed.

Simplify validation and graceful scripts, have one template for all cases.

Aviod needless repetition.

Note: There is limit of arguments to be passed to commands, see
https://www.in-ulm.de/~mascheck/various/argmax/, but we are safe for now:

  $ getconf ARG_MAX
  2097152

So we are keeping shell expansion instead of playing with find or other tools.
parent 494bf4d1
......@@ -22,7 +22,7 @@ md5sum = c801b7f9f11f0965677c22e6bbe9281b
[template-apache-frontend]
filename = instance-apache-frontend.cfg.in
md5sum = ba52505db78f11e15fd5f01d110a61f1
md5sum = a9be268aa485aa464cec25fea962faba
[template-apache-replicate]
filename = instance-apache-replicate.cfg.in
......@@ -104,13 +104,13 @@ md5sum = 2b765db72191197122554df17ad471d1
filename = templates/apache-lazy-script-call.sh.in
md5sum = ebe5d3d19923eb812a40019cb11276d8
[template-caddy-graceful-script]
filename = templates/caddy-graceful-script.sh.in
md5sum = 455f8765a3afd39fb78562fb9e326c42
[template-graceful-script]
filename = templates/graceful-script.sh.in
md5sum = 23fae618a0465b1e6bc46aefa79d9a7e
[template-nginx-graceful-script]
filename = templates/nginx-graceful-script.sh.in
md5sum = 43e8ca96f2e64d21c8fb1e96282c1469
[template-validate-script]
filename = templates/validate-script.sh.in
md5sum = 986681fce5f6dcaa1ee5a05bc55a7e4a
[caddyprofiledeps-setup]
filename = setup.py
......
......@@ -88,12 +88,13 @@ gzip = ${gzip:location}
logrotate = ${logrotate:location}
openssl = ${openssl:location}
trafficserver = ${trafficserver:location}
sha256sum = ${coreutils:location}/bin/sha256sum
monitor_template = ${monitor-template:output}
template_cached_slave_virtualhost = ${template-cached-slave-virtualhost:target}
template_caddy_frontend_configuration = ${template-caddy-frontend-configuration:target}
template_caddy_graceful_script = ${template-caddy-graceful-script:target}
template_nginx_graceful_script = ${template-nginx-graceful-script:target}
template_graceful_script = ${template-graceful-script:target}
template_validate_script = ${template-validate-script:target}
template_caddy_lazy_script_call = ${template-caddy-lazy-script-call:target}
template_default_slave_virtualhost = ${template-default-slave-virtualhost:target}
template_empty = ${template-empty:target}
......@@ -224,13 +225,13 @@ mode = 0644
<=download-template
filename = apache-lazy-script-call.sh.in
[template-caddy-graceful-script]
[template-graceful-script]
<=download-template
filename = caddy-graceful-script.sh.in
filename = graceful-script.sh.in
[template-nginx-graceful-script]
[template-validate-script]
<=download-template
filename = nginx-graceful-script.sh.in
filename = validate-script.sh.in
[template-nginx-eventsource-slave-virtualhost]
<=download-template
......
......@@ -272,7 +272,7 @@ frontend-configuration = ${directory:etc}/Caddyfile
access-log = ${directory:log}/frontend-access.log
error-log = ${directory:log}/frontend-error.log
pid-file = ${directory:run}/httpd.pid
frontend-configuration-verification = ${caddy-wrapper:wrapper-path} -validate > /dev/null
frontend-configuration-verification = ${frontend-caddy-validate:rendered}
frontend-graceful-command = ${:frontend-configuration-verification}; if [ $? -eq 0 ]; then kill -USR1 $(cat ${:pid-file}); fi
not-found-file = ${caddy-directory:document-root}/notfound.html
# Communication with ATS
......@@ -282,7 +282,7 @@ ssl-cache-through-port = 26012
[configtest]
recipe = slapos.cookbook:wrapper
command-line = ${caddy-wrapper:wrapper-path} -validate
command-line = ${frontend-caddy-validate:rendered}
wrapper-path = ${directory:bin}/caddy-configtest
[certificate-authority]
......@@ -508,25 +508,57 @@ mode = 700
### Caddy Graceful and promises
[frontend-caddy-graceful]
< = jinja2-template-base
template = {{ parameter_dict['template_caddy_graceful_script'] }}
template = {{ parameter_dict['template_graceful_script'] }}
rendered = ${directory:etc-run}/frontend-caddy-safe-graceful
mode = 0700
path_list = ${caddy-configuration:frontend-configuration} ${frontend-configuration:log-access-configuration} ${caddy-directory:slave-configuration}/*.conf ${caddy-directory:slave-with-cache-configuration}/*.conf ${caddy-directory:vh-ssl}/*.key ${caddy-directory:vh-ssl}/*.crt
sha256sum = {{ parameter_dict['sha256sum'] }}
signature_file = ${directory:run}/caddy_graceful_signature
extra-context =
key directory_run directory:run
key directory_etc directory:etc
key directory_bin directory:bin
key caddy_graceful_reload_command caddy-configuration:frontend-graceful-command
key graceful_reload_command caddy-configuration:frontend-graceful-command
key path_list :path_list
key sha256sum :sha256sum
key signature_file :signature_file
[frontend-nginx-graceful]
< = jinja2-template-base
template = {{ parameter_dict['template_nginx_graceful_script'] }}
template = {{ parameter_dict['template_graceful_script'] }}
rendered = ${directory:etc-run}/frontend-nginx-safe-graceful
mode = 0700
path_list = ${dynamic-nginx-frontend-template:rendered} ${caddy-directory:nginx-slave-configuration}/*.conf
sha256sum = {{ parameter_dict['sha256sum'] }}
signature_file = ${directory:run}/nginx_graceful_signature
extra-context =
key directory_run directory:run
key directory_etc directory:etc
key directory_bin directory:bin
key nginx_graceful_reload_command nginx-configuration:nginx-graceful-command
key graceful_reload_command nginx-configuration:nginx-graceful-command
key path_list :path_list
key sha256sum :sha256sum
key signature_file :signature_file
[frontend-caddy-validate]
< = jinja2-template-base
template = {{ parameter_dict['template_validate_script'] }}
rendered = ${directory:bin}/frontend-caddy-validate
mode = 0700
sha256sum = {{ parameter_dict['sha256sum'] }}
signature_file = ${directory:run}/caddy_validate_signature
extra-context =
key wrapper caddy-wrapper:wrapper-path
key path_list frontend-caddy-graceful:path_list
key sha256sum :sha256sum
key signature_file :signature_file
[frontend-nginx-validate]
< = jinja2-template-base
template = {{ parameter_dict['template_validate_script'] }}
rendered = ${directory:bin}/frontend-nginx-validate
mode = 0700
sha256sum = {{ parameter_dict['sha256sum'] }}
signature_file = ${directory:run}/nginx_validate_signature
extra-context =
key wrapper nginx-wrapper:wrapper-path
key path_list frontend-nginx-graceful:path_list
key sha256sum :sha256sum
key signature_file :signature_file
[frontend-caddy-lazy-graceful]
< = jinja2-template-base
......@@ -542,12 +574,9 @@ extra-context =
# Promises checking configuration:
[promise-frontend-caddy-configuration]
< = jinja2-template-base
template = {{ parameter_dict['template_wrapper'] }}
rendered = ${directory:promise}/frontend-caddy-configuration-promise
mode = 0700
extra-context =
key content caddy-configuration:frontend-configuration-verification
recipe = slapos.cookbook:wrapper
command-line = ${caddy-configuration:frontend-configuration-verification}
wrapper-path = ${directory:promise}/frontend-caddy-configuration-promise
[promise-caddy-frontend-v4-https]
recipe = slapos.cookbook:check_port_listening
......@@ -701,17 +730,14 @@ worker_connections = 1024
slave-configuration-directory = ${caddy-directory:nginx-slave-configuration}
pid-file = ${directory:run}/nginx.pid
nginx-graceful-command = ${:nginx-configuration-verification}; if [ $? -eq 0 ]; then kill -HUP $(cat ${:pid-file}); fi
nginx-configuration-verification = ${nginx-wrapper:wrapper-path} -validate
nginx-configuration-verification = ${frontend-nginx-validate:rendered}
ssl_certificate = ${ca-frontend:cert-file}
ssl_key = ${ca-frontend:key-file}
[promise-nginx-configuration]
< = jinja2-template-base
template = {{ parameter_dict['template_wrapper'] }}
rendered = ${directory:promise}/nginx-configuration-promise
mode = 0700
extra-context =
key content nginx-configuration:nginx-configuration-verification
recipe = slapos.cookbook:wrapper
command-line = ${nginx-configuration:nginx-configuration-verification}
wrapper-path = ${directory:promise}/nginx-configuration-promise
[promise-nginx-frontend-v4-https]
recipe = slapos.cookbook:check_port_listening
......
#!/bin/sh
RUN_DIR={{ directory_run }}
ETC_DIR={{ directory_etc }}
BIN_DIR={{ directory_bin }}
CADDY_SIGNATURE_FILE=$RUN_DIR/caddy_configuration.signature
NCADDY_SIGNATURE_FILE=$RUN_DIR/ncaddy_configuration.signature
touch $CADDY_SIGNATURE_FILE
sha256sum $ETC_DIR/Caddyfile $ETC_DIR/log-access.conf $ETC_DIR/caddy-*.d/*.conf $ETC_DIR/caddy-*.d/ssl/*.*key $ETC_DIR/caddy-*.d/ssl/*.*crt* | sort -k 66 > $NCADDY_SIGNATURE_FILE
# If no diff, no restart for now
if diff "$CADDY_SIGNATURE_FILE" "$NCADDY_SIGNATURE_FILE"; then
echo "Nothing Changed, so nothing to reload"
exit 0
fi
echo "Reloading caddy.."
{{ caddy_graceful_reload_command }}
mv "$NCADDY_SIGNATURE_FILE" "$CADDY_SIGNATURE_FILE"
#!/bin/sh
SIGNATURE_FILE={{ signature_file }}
NSIGNATURE_FILE={{ signature_file }}.tmp
touch $SIGNATURE_FILE
{{ sha256sum }} {{ path_list }} | sort -k 66 > $NSIGNATURE_FILE
# If no diff, no restart for now
if diff "$SIGNATURE_FILE" "$NSIGNATURE_FILE"; then
echo "Nothing changed, so nothing to reload"
exit 0
fi
echo "Reloading.."
{{ graceful_reload_command }}
mv "$NSIGNATURE_FILE" "$SIGNATURE_FILE"
#!/bin/sh
RUN_DIR={{ directory_run }}
ETC_DIR={{ directory_etc }}
BIN_DIR={{ directory_bin }}
NGINX_SIGNATURE_FILE=$RUN_DIR/nginx_configuration.signature
NNGINX_SIGNATURE_FILE=$RUN_DIR/nnginx_configuration.signature
touch $NGINX_SIGNATURE_FILE
sha256sum $ETC_DIR/nginx.cfg $ETC_DIR/nginx-slave-conf.d/*.conf | sort -k 66 > $NNGINX_SIGNATURE_FILE
# If no diff, no restart for now
if diff "$NGINX_SIGNATURE_FILE" "$NNGINX_SIGNATURE_FILE"; then
echo "Nothing Changed, so nothing to reload"
exit 0
fi
echo "Reloading nginx.."
{{ nginx_graceful_reload_command }}
mv "$NNGINX_SIGNATURE_FILE" "$NGINX_SIGNATURE_FILE"
#!/bin/sh
set -e
SIGNATURE_FILE={{ signature_file }}
NSIGNATURE_FILE={{ signature_file }}.tmp
SIGNATURE_STATUS={{ signature_file }}.status
touch $SIGNATURE_FILE
{{ sha256sum }} {{ path_list }} | sort -k 66 > $NSIGNATURE_FILE
if diff "$SIGNATURE_FILE" "$NSIGNATURE_FILE"; then
rm -f "$NSIGNATURE_FILE"
else
mv "$NSIGNATURE_FILE" "$SIGNATURE_FILE"
{{ wrapper }} -validate
echo $? > $SIGNATURE_STATUS
fi
exit `cat $SIGNATURE_STATUS`
TestDuplicateSiteKeyProtection-0/var/run/monitor-httpd.pid
TestDuplicateSiteKeyProtection-0/var/run/monitor/monitor-bootstrap.pid
TestDuplicateSiteKeyProtection-1/var/run/caddy_configuration.signature
TestDuplicateSiteKeyProtection-1/var/run/caddy_graceful_signature
TestDuplicateSiteKeyProtection-1/var/run/caddy_graceful_signature.tmp
TestDuplicateSiteKeyProtection-1/var/run/caddy_validate_signature
TestDuplicateSiteKeyProtection-1/var/run/caddy_validate_signature.status
TestDuplicateSiteKeyProtection-1/var/run/httpd.pid
TestDuplicateSiteKeyProtection-1/var/run/monitor-httpd.pid
TestDuplicateSiteKeyProtection-1/var/run/monitor/monitor-bootstrap.pid
TestDuplicateSiteKeyProtection-1/var/run/ncaddy_configuration.signature
TestDuplicateSiteKeyProtection-1/var/run/nginx.pid
TestDuplicateSiteKeyProtection-1/var/run/nginx_graceful_signature
TestDuplicateSiteKeyProtection-1/var/run/nginx_graceful_signature.tmp
TestDuplicateSiteKeyProtection-1/var/run/nginx_validate_signature
TestDuplicateSiteKeyProtection-1/var/run/nginx_validate_signature.status
\ No newline at end of file
TestEnableHttp2ByDefaultDefaultSlave-0/var/run/monitor-httpd.pid
TestEnableHttp2ByDefaultDefaultSlave-0/var/run/monitor/monitor-bootstrap.pid
TestEnableHttp2ByDefaultDefaultSlave-1/var/run/caddy_configuration.signature
TestEnableHttp2ByDefaultDefaultSlave-1/var/run/caddy_graceful_signature
TestEnableHttp2ByDefaultDefaultSlave-1/var/run/caddy_graceful_signature.tmp
TestEnableHttp2ByDefaultDefaultSlave-1/var/run/caddy_validate_signature
TestEnableHttp2ByDefaultDefaultSlave-1/var/run/caddy_validate_signature.status
TestEnableHttp2ByDefaultDefaultSlave-1/var/run/httpd.pid
TestEnableHttp2ByDefaultDefaultSlave-1/var/run/monitor-httpd.pid
TestEnableHttp2ByDefaultDefaultSlave-1/var/run/monitor/monitor-bootstrap.pid
TestEnableHttp2ByDefaultDefaultSlave-1/var/run/ncaddy_configuration.signature
TestEnableHttp2ByDefaultDefaultSlave-1/var/run/nginx.pid
TestEnableHttp2ByDefaultDefaultSlave-1/var/run/nginx_graceful_signature
TestEnableHttp2ByDefaultDefaultSlave-1/var/run/nginx_graceful_signature.tmp
TestEnableHttp2ByDefaultDefaultSlave-1/var/run/nginx_validate_signature
TestEnableHttp2ByDefaultDefaultSlave-1/var/run/nginx_validate_signature.status
\ No newline at end of file
TestEnableHttp2ByDefaultFalseSlave-0/var/run/monitor-httpd.pid
TestEnableHttp2ByDefaultFalseSlave-0/var/run/monitor/monitor-bootstrap.pid
TestEnableHttp2ByDefaultFalseSlave-1/var/run/caddy_configuration.signature
TestEnableHttp2ByDefaultFalseSlave-1/var/run/caddy_graceful_signature
TestEnableHttp2ByDefaultFalseSlave-1/var/run/caddy_graceful_signature.tmp
TestEnableHttp2ByDefaultFalseSlave-1/var/run/caddy_validate_signature
TestEnableHttp2ByDefaultFalseSlave-1/var/run/caddy_validate_signature.status
TestEnableHttp2ByDefaultFalseSlave-1/var/run/httpd.pid
TestEnableHttp2ByDefaultFalseSlave-1/var/run/monitor-httpd.pid
TestEnableHttp2ByDefaultFalseSlave-1/var/run/monitor/monitor-bootstrap.pid
TestEnableHttp2ByDefaultFalseSlave-1/var/run/ncaddy_configuration.signature
TestEnableHttp2ByDefaultFalseSlave-1/var/run/nginx.pid
TestEnableHttp2ByDefaultFalseSlave-1/var/run/nginx_graceful_signature
TestEnableHttp2ByDefaultFalseSlave-1/var/run/nginx_graceful_signature.tmp
TestEnableHttp2ByDefaultFalseSlave-1/var/run/nginx_validate_signature
TestEnableHttp2ByDefaultFalseSlave-1/var/run/nginx_validate_signature.status
\ No newline at end of file
TestMalformedBackenUrlSlave-0/var/run/monitor-httpd.pid
TestMalformedBackenUrlSlave-0/var/run/monitor/monitor-bootstrap.pid
TestMalformedBackenUrlSlave-1/var/run/caddy_configuration.signature
TestMalformedBackenUrlSlave-1/var/run/caddy_graceful_signature
TestMalformedBackenUrlSlave-1/var/run/caddy_graceful_signature.tmp
TestMalformedBackenUrlSlave-1/var/run/caddy_validate_signature
TestMalformedBackenUrlSlave-1/var/run/caddy_validate_signature.status
TestMalformedBackenUrlSlave-1/var/run/httpd.pid
TestMalformedBackenUrlSlave-1/var/run/monitor-httpd.pid
TestMalformedBackenUrlSlave-1/var/run/monitor/monitor-bootstrap.pid
TestMalformedBackenUrlSlave-1/var/run/ncaddy_configuration.signature
TestMalformedBackenUrlSlave-1/var/run/nginx.pid
TestMalformedBackenUrlSlave-1/var/run/nginx_graceful_signature
TestMalformedBackenUrlSlave-1/var/run/nginx_graceful_signature.tmp
TestMalformedBackenUrlSlave-1/var/run/nginx_validate_signature
TestMalformedBackenUrlSlave-1/var/run/nginx_validate_signature.status
\ No newline at end of file
TestQuicEnabled-0/var/run/monitor-httpd.pid
TestQuicEnabled-0/var/run/monitor/monitor-bootstrap.pid
TestQuicEnabled-1/var/run/caddy_configuration.signature
TestQuicEnabled-1/var/run/caddy_graceful_signature
TestQuicEnabled-1/var/run/caddy_graceful_signature.tmp
TestQuicEnabled-1/var/run/caddy_validate_signature
TestQuicEnabled-1/var/run/caddy_validate_signature.status
TestQuicEnabled-1/var/run/httpd.pid
TestQuicEnabled-1/var/run/monitor-httpd.pid
TestQuicEnabled-1/var/run/monitor/monitor-bootstrap.pid
TestQuicEnabled-1/var/run/ncaddy_configuration.signature
TestQuicEnabled-1/var/run/nginx.pid
TestQuicEnabled-1/var/run/nginx_graceful_signature
TestQuicEnabled-1/var/run/nginx_graceful_signature.tmp
TestQuicEnabled-1/var/run/nginx_validate_signature
TestQuicEnabled-1/var/run/nginx_validate_signature.status
\ No newline at end of file
TestRe6stVerificationUrlDefaultSlave-0/var/run/monitor-httpd.pid
TestRe6stVerificationUrlDefaultSlave-0/var/run/monitor/monitor-bootstrap.pid
TestRe6stVerificationUrlDefaultSlave-1/var/run/caddy_configuration.signature
TestRe6stVerificationUrlDefaultSlave-1/var/run/caddy_graceful_signature
TestRe6stVerificationUrlDefaultSlave-1/var/run/caddy_graceful_signature.tmp
TestRe6stVerificationUrlDefaultSlave-1/var/run/caddy_validate_signature
TestRe6stVerificationUrlDefaultSlave-1/var/run/httpd.pid
TestRe6stVerificationUrlDefaultSlave-1/var/run/monitor-httpd.pid
TestRe6stVerificationUrlDefaultSlave-1/var/run/monitor/monitor-bootstrap.pid
TestRe6stVerificationUrlDefaultSlave-1/var/run/ncaddy_configuration.signature
TestRe6stVerificationUrlDefaultSlave-1/var/run/nginx.pid
TestRe6stVerificationUrlDefaultSlave-1/var/run/nginx_graceful_signature
TestRe6stVerificationUrlDefaultSlave-1/var/run/nginx_graceful_signature.tmp
TestRe6stVerificationUrlDefaultSlave-1/var/run/nginx_validate_signature
\ No newline at end of file
TestRe6stVerificationUrlSlave-0/var/run/monitor-httpd.pid
TestRe6stVerificationUrlSlave-0/var/run/monitor/monitor-bootstrap.pid
TestRe6stVerificationUrlSlave-1/var/run/caddy_configuration.signature
TestRe6stVerificationUrlSlave-1/var/run/caddy_graceful_signature
TestRe6stVerificationUrlSlave-1/var/run/caddy_graceful_signature.tmp
TestRe6stVerificationUrlSlave-1/var/run/caddy_validate_signature
TestRe6stVerificationUrlSlave-1/var/run/httpd.pid
TestRe6stVerificationUrlSlave-1/var/run/monitor-httpd.pid
TestRe6stVerificationUrlSlave-1/var/run/monitor/monitor-bootstrap.pid
TestRe6stVerificationUrlSlave-1/var/run/ncaddy_configuration.signature
TestRe6stVerificationUrlSlave-1/var/run/nginx.pid
TestRe6stVerificationUrlSlave-1/var/run/nginx_graceful_signature
TestRe6stVerificationUrlSlave-1/var/run/nginx_graceful_signature.tmp
TestRe6stVerificationUrlSlave-1/var/run/nginx_validate_signature
\ No newline at end of file
TestReplicateSlave-0/var/run/monitor-httpd.pid
TestReplicateSlave-0/var/run/monitor/monitor-bootstrap.pid
TestReplicateSlave-1/var/run/caddy_configuration.signature
TestReplicateSlave-1/var/run/caddy_graceful_signature
TestReplicateSlave-1/var/run/caddy_graceful_signature.tmp
TestReplicateSlave-1/var/run/caddy_validate_signature
TestReplicateSlave-1/var/run/caddy_validate_signature.status
TestReplicateSlave-1/var/run/httpd.pid
TestReplicateSlave-1/var/run/monitor-httpd.pid
TestReplicateSlave-1/var/run/monitor/monitor-bootstrap.pid
TestReplicateSlave-1/var/run/ncaddy_configuration.signature
TestReplicateSlave-1/var/run/nginx.pid
TestReplicateSlave-1/var/run/nginx_graceful_signature
TestReplicateSlave-1/var/run/nginx_graceful_signature.tmp
TestReplicateSlave-1/var/run/nginx_validate_signature
TestReplicateSlave-1/var/run/nginx_validate_signature.status
\ No newline at end of file
TestSlave-0/var/run/monitor-httpd.pid
TestSlave-0/var/run/monitor/monitor-bootstrap.pid
TestSlave-1/var/run/caddy_configuration.signature
TestSlave-1/var/run/caddy_graceful_signature
TestSlave-1/var/run/caddy_graceful_signature.tmp
TestSlave-1/var/run/caddy_validate_signature
TestSlave-1/var/run/caddy_validate_signature.status
TestSlave-1/var/run/httpd.pid
TestSlave-1/var/run/monitor-httpd.pid
TestSlave-1/var/run/monitor/monitor-bootstrap.pid
TestSlave-1/var/run/ncaddy_configuration.signature
TestSlave-1/var/run/nginx.pid
TestSlave-1/var/run/nginx_graceful_signature
TestSlave-1/var/run/nginx_graceful_signature.tmp
TestSlave-1/var/run/nginx_validate_signature
TestSlave-1/var/run/nginx_validate_signature.status
\ No newline at end of file
TestSlaveBadParameters-0/var/run/monitor-httpd.pid
TestSlaveBadParameters-0/var/run/monitor/monitor-bootstrap.pid
TestSlaveBadParameters-1/var/run/caddy_configuration.signature
TestSlaveBadParameters-1/var/run/caddy_graceful_signature
TestSlaveBadParameters-1/var/run/caddy_graceful_signature.tmp
TestSlaveBadParameters-1/var/run/caddy_validate_signature
TestSlaveBadParameters-1/var/run/caddy_validate_signature.status
TestSlaveBadParameters-1/var/run/httpd.pid
TestSlaveBadParameters-1/var/run/monitor-httpd.pid
TestSlaveBadParameters-1/var/run/monitor/monitor-bootstrap.pid
TestSlaveBadParameters-1/var/run/ncaddy_configuration.signature
TestSlaveBadParameters-1/var/run/nginx.pid
TestSlaveBadParameters-1/var/run/nginx_graceful_signature
TestSlaveBadParameters-1/var/run/nginx_graceful_signature.tmp
TestSlaveBadParameters-1/var/run/nginx_validate_signature
TestSlaveBadParameters-1/var/run/nginx_validate_signature.status
\ No newline at end of file
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