unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
From: Christopher Baines <mail@cbaines.net>
To: 29466@debbugs.gnu.org
Subject: [bug#29466] [PATCH 2/2] WIP: Split the config file out of the <nginx-configuration> record.
Date: Sun, 10 Dec 2017 08:44:21 +0000	[thread overview]
Message-ID: <20171210084421.26404-2-mail@cbaines.net> (raw)
In-Reply-To: <20171210084421.26404-1-mail@cbaines.net>

---
 gnu/services/web.scm | 152 +++++++++++++++++++++++++++++++--------------------
 gnu/tests/web.scm    |   5 +-
 2 files changed, 95 insertions(+), 62 deletions(-)

diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 477e43e8d..f11ac6817 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -33,14 +33,21 @@
   #:export (<nginx-configuration>
             nginx-configuration
             nginx-configuration?
-            nginx-configuartion-nginx
+            nginx-configuration-nginx
             nginx-configuration-log-directory
             nginx-configuration-run-directory
-            nginx-configuration-server-blocks
-            nginx-configuration-upstream-blocks
-            nginx-configuration-server-names-hash-bucket-size
-            nginx-configuration-server-names-hash-bucket-max-size
-            nginx-configuration-file
+            nginx-configuration-config-file
+
+            <nginx-config-file>
+            nginx-config-file
+            nginx-config-file?
+            nginx-config-file-nginx
+            nginx-config-file-log-directory
+            nginx-config-file-run-directory
+            nginx-config-file-server-blocks
+            nginx-config-file-upstream-blocks
+            nginx-config-file-server-names-hash-bucket-size
+            nginx-config-file-server-names-hash-bucket-max-size
 
             <nginx-server-configuration>
             nginx-server-configuration
@@ -130,6 +137,24 @@
                        (default #f))
   (body                nginx-named-location-configuration-body))
 
+(define-record-type* <nginx-config-file>
+  nginx-config-file make-nginx-config-file
+  nginx-config-file?
+  (nginx         nginx-configuration-nginx          ;<package>
+                 (default nginx))
+  (log-directory nginx-config-file-log-directory  ;string
+                 (default "/var/log/nginx"))
+  (run-directory nginx-config-file-run-directory  ;string
+                 (default "/var/run/nginx"))
+  (server-blocks nginx-config-file-server-blocks
+                 (default '()))          ;list of <nginx-server-config-file>
+  (upstream-blocks nginx-config-file-upstream-blocks
+                   (default '()))      ;list of <nginx-upstream-config-file>
+  (server-names-hash-bucket-size nginx-config-file-server-names-hash-bucket-size
+                                 (default #f))
+  (server-names-hash-bucket-max-size nginx-config-file-server-names-hash-bucket-max-size
+                                     (default #f)))
+
 (define-record-type* <nginx-configuration>
   nginx-configuration make-nginx-configuration
   nginx-configuration?
@@ -139,16 +164,9 @@
                  (default "/var/log/nginx"))
   (run-directory nginx-configuration-run-directory  ;string
                  (default "/var/run/nginx"))
-  (server-blocks nginx-configuration-server-blocks
-                 (default '()))          ;list of <nginx-server-configuration>
-  (upstream-blocks nginx-configuration-upstream-blocks
-                   (default '()))      ;list of <nginx-upstream-configuration>
-  (server-names-hash-bucket-size nginx-configuration-server-names-hash-bucket-size
-                                 (default #f))
-  (server-names-hash-bucket-max-size nginx-configuration-server-names-hash-bucket-max-size
-                                     (default #f))
-  (file          nginx-configuration-file         ;#f | string | file-like
-                 (default #f)))
+  (config-file   nginx-configuration-config-file    ;string | file-like
+                 (default (nginx-config-file))))
+
 
 (define (config-domain-strings names)
  "Return a string denoting the nginx config representation of NAMES, a list
@@ -241,43 +259,49 @@ of index files."
         (cons head out)))
   (fold-right flatten1 '() lst))
 
-(define (default-nginx-config config)
+(define-gexp-compiler (nginx-config-file-compiler
+                       (config <nginx-config-file>) system target)
   (match-record config
-                <nginx-configuration>
+                <nginx-config-file>
                 (nginx log-directory run-directory
                  server-blocks upstream-blocks
                  server-names-hash-bucket-size
                  server-names-hash-bucket-max-size)
-   (apply mixed-text-file "nginx.conf"
-          (flatten
-           "user nginx nginx;\n"
-           "pid " run-directory "/pid;\n"
-           "error_log " log-directory "/error.log info;\n"
-           "http {\n"
-           "    client_body_temp_path " run-directory "/client_body_temp;\n"
-           "    proxy_temp_path " run-directory "/proxy_temp;\n"
-           "    fastcgi_temp_path " run-directory "/fastcgi_temp;\n"
-           "    uwsgi_temp_path " run-directory "/uwsgi_temp;\n"
-           "    scgi_temp_path " run-directory "/scgi_temp;\n"
-           "    access_log " log-directory "/access.log;\n"
-           "    include " nginx "/share/nginx/conf/mime.types;\n"
-           (if server-names-hash-bucket-size
-               (string-append
-                "    server_names_hash_bucket_size "
-                (number->string server-names-hash-bucket-size)
-                ";\n")
-               "")
-           (if server-names-hash-bucket-max-size
-               (string-append
-                "    server_names_hash_bucket_max_size "
-                (number->string server-names-hash-bucket-max-size)
-                ";\n")
-               "")
-           "\n"
-           (map emit-nginx-upstream-config upstream-blocks)
-           (map emit-nginx-server-config server-blocks)
+   (gexp->derivation
+    "nginx.conf"
+    #~(call-with-output-file (ungexp output "out")
+        (lambda (port)
+          (display
+           (string-append
+            "user nginx nginx;\n"
+            "pid " #$run-directory "/pid;\n"
+            "error_log " #$log-directory "/error.log info;\n"
+            "http {\n"
+            "    client_body_temp_path " #$run-directory "/client_body_temp;\n"
+            "    proxy_temp_path " #$run-directory "/proxy_temp;\n"
+            "    fastcgi_temp_path " #$run-directory "/fastcgi_temp;\n"
+            "    uwsgi_temp_path " #$run-directory "/uwsgi_temp;\n"
+            "    scgi_temp_path " #$run-directory "/scgi_temp;\n"
+            "    access_log " #$log-directory "/access.log;\n"
+            "    include " #$nginx "/share/nginx/conf/mime.types;\n"
+            #$(if server-names-hash-bucket-size
+                  (string-append
+                   "    server_names_hash_bucket_size "
+                   (number->string server-names-hash-bucket-size)
+                   ";\n")
+                  "")
+            #$(if server-names-hash-bucket-max-size
+                  (string-append
+                   "    server_names_hash_bucket_max_size "
+                   (number->string server-names-hash-bucket-max-size)
+                   ";\n")
+                  "")
+            "\n"
+           #$@(flatten (map emit-nginx-upstream-config upstream-blocks))
+           #$@(flatten (map emit-nginx-server-config server-blocks))
            "}\n"
-           "events {}\n"))))
+           "events {}\n")
+           port))))))
 
 (define %nginx-accounts
   (list (user-group (name "nginx") (system? #t))
@@ -292,7 +316,7 @@ of index files."
 (define (nginx-activation config)
   (match-record config
                 <nginx-configuration>
-                (nginx log-directory run-directory file)
+                (nginx log-directory run-directory config-file)
    #~(begin
        (use-modules (guix build utils))
 
@@ -311,22 +335,20 @@ of index files."
        (mkdir-p (string-append #$run-directory "/logs"))
        ;; Check configuration file syntax.
        (system* (string-append #$nginx "/sbin/nginx")
-                "-c" #$(or file
-                           (default-nginx-config config))
-                  "-t"))))
+                "-c" #$config-file
+                "-t"))))
 
 (define (nginx-shepherd-service config)
   (match-record config
                 <nginx-configuration>
-                (nginx file run-directory)
+                (nginx config-file run-directory)
    (let* ((nginx-binary (file-append nginx "/sbin/nginx"))
           (nginx-action
            (lambda args
              #~(lambda _
                  (zero?
-                  (system* #$nginx-binary "-c"
-                           #$(or file
-                                 (default-nginx-config config))
+                  (system* #$nginx-binary
+                           "-c" #$config-file
                            #$@args))))))
 
      ;; TODO: Add 'reload' action.
@@ -347,12 +369,22 @@ of index files."
                        (service-extension account-service-type
                                           (const %nginx-accounts))))
                 (compose concatenate)
-                (extend (lambda (config servers)
-                          (nginx-configuration
-                            (inherit config)
+                (extend
+                 (lambda (config servers)
+                   (let ((config-file
+                          (nginx-configuration-config-file config)))
+                     (if (nginx-config-file? config-file)
+                         (nginx-configuration
+                          (inherit config)
+                          (config-file
+                           (nginx-config-file
+                            (inherit config-file)
                             (server-blocks
-                              (append (nginx-configuration-server-blocks config)
-                              servers)))))
+                             (append (nginx-config-file-server-blocks config-file)
+                                     servers)))))
+                         (unless (null? servers)
+                           (display "warning: cannot extend nginx with a custom config file\n")
+                           config)))))
                 (default-value
                   (nginx-configuration))))
 
diff --git a/gnu/tests/web.scm b/gnu/tests/web.scm
index 3fa272c67..06776b2dd 100644
--- a/gnu/tests/web.scm
+++ b/gnu/tests/web.scm
@@ -56,8 +56,9 @@
    (dhcp-client-service)
    (service nginx-service-type
             (nginx-configuration
-             (log-directory "/var/log/nginx")
-             (server-blocks %nginx-servers)))
+             (config-file
+              (nginx-config-file
+               (server-blocks %nginx-servers)))))
    (simple-service 'make-http-root activation-service-type
                    %make-http-root)))
 
-- 
2.15.1

  reply	other threads:[~2017-12-10  8:45 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-27  8:23 [bug#29466] [PATCH] services: web: Add support for configuring the nginx server names hash Christopher Baines
2017-11-27 14:06 ` Ludovic Courtès
2017-12-10  8:44   ` [bug#29466] [PATCH 1/2] services: web: Switch nginx related functions to use match-record Christopher Baines
2017-12-10  8:44     ` Christopher Baines [this message]
2017-12-11 16:05     ` Ludovic Courtès
2017-12-11 21:01       ` bug#29466: " Christopher Baines
2017-12-10  9:00   ` [bug#29466] [PATCH] services: web: Add support for configuring the nginx server names hash Christopher Baines

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171210084421.26404-2-mail@cbaines.net \
    --to=mail@cbaines.net \
    --cc=29466@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).