Subject: [bug#71676] [PATCH v2] services: nginx-upstream-configuration: Allow file-like objects

From: Tomas Volf <[email-masked]>
Date: Thu, 20 Jun 2024 22:23:04 +0200

* gnu/services/web.scm (emit-nginx-upstream-config): Support file-like
objects.
* doc/guix.texi (Web Services)[nginx-upstream-configuration]: Document it.

Change-Id: I49996e358174dc77b31e3c91b908a6a72f3eb705
---
v2: Keep support for plain string or file-like object.  I did not realize
    that flatten also accepts non-lists and wraps them in a list.

 doc/guix.texi        | 11 ++++++++++-
 gnu/services/web.scm |  6 ++++--
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 55710dc968..f6f2788ed2 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -32095,7 +32095,16 @@ Web Services
 explicitly.

 @item @code{extra-content}
-A string or list of strings to add to the upstream block.
+Additional content to be appended to the upstream block.  Can be a
+string or file-like object or list of thereof.  In case of list, each
+item is prefixed with indentation and suffixed with a new line.  Nested
+lists are flattened.
+
+@lisp
+(extra-content "include /etc/nginx/custom-config.conf;")
+(extra-content `("include /etc/nginx/custom-config.conf;"
+                 ("include " ,%custom-config.conf ";")))
+@end lisp

 @end table
 @end deftp
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 340988fdd8..8d81c926e8 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -701,8 +701,10 @@ (define (emit-nginx-upstream-config upstream)
          (cons
           "\n"
           (map (lambda (line)
-                 (simple-format #f "      ~A\n" line))
-               (flatten extra-content)))
+                 `("      " ,line "\n"))
+               (if (list? extra-content)
+                   extra-content
+                   (list extra-content))))
          '()))
    "    }\n"))

--
2.45.1