diff options
author | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2023-05-18 20:21:35 -0400 |
---|---|---|
committer | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2023-07-21 11:58:44 -0400 |
commit | f15c5edb1a2423402b32a5262627eb2141becf65 (patch) | |
tree | d545f303915427e4aa40f8f4872c824cb76cecd2 /gnu | |
parent | c4713ad89d186ad51a439193d8cc775b4aef06d8 (diff) | |
download | guix-f15c5edb1a2423402b32a5262627eb2141becf65.tar.gz |
services: herd: Add a new 'current-service' procedure.
* gnu/services/herd.scm (current-service): New procedure, mostly reusing the existing current-services. (current-services): Implement in terms of the above procedure.
Diffstat (limited to 'gnu')
-rw-r--r-- | gnu/services/herd.scm | 52 |
1 files changed, 33 insertions, 19 deletions
diff --git a/gnu/services/herd.scm b/gnu/services/herd.scm index c24a403935..4b47acf72a 100644 --- a/gnu/services/herd.scm +++ b/gnu/services/herd.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2016-2019, 2022-2023 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2017, 2020 Mathieu Othacehe <m.othacehe@gmail.com> +;;; Copyright © 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -51,6 +52,7 @@ live-service-canonical-name with-shepherd-action + current-service current-services unload-services unload-service @@ -208,31 +210,43 @@ of pairs." "Return the 'canonical name' of SERVICE." (first (live-service-provision service))) -(define (current-services) - "Return the list of currently defined Shepherd services, represented as -<live-service> objects. Return #f if the list of services could not be -obtained." - (with-shepherd-action 'root ('status) results - ;; We get a list of results, one for each service with the name 'root'. +(define (current-service name) + "Return the currently defined Shepherd service NAME, as a <live-service> +object. Return #f if the service could not be obtained. As a special case, +@code{(current-service 'root)} returns all the current services." + (define (process-services services) + (resolve-transients + (map (lambda (service) + (alist-let* service (provides requires running transient?) + ;; The Shepherd 0.9.0 would not provide 'transient?' in + ;; its status sexp. Thus, when it's missing, query it + ;; via an "eval" request. + (live-service provides requires + (if (sloppy-assq 'transient? service) + transient? + (and running *unspecified*)) + running))) + services))) + + (with-shepherd-action name ('status) results + ;; We get a list of results, one for each service with the name NAME. ;; In practice there's only one such service though. (match results ((services _ ...) (match services ((('service ('version 0 _ ...) _ ...) ...) - (resolve-transients - (map (lambda (service) - (alist-let* service (provides requires running transient?) - ;; The Shepherd 0.9.0 would not provide 'transient?' in its - ;; status sexp. Thus, when it's missing, query it via an - ;; "eval" request. - (live-service provides requires - (if (sloppy-assq 'transient? service) - transient? - (and running *unspecified*)) - running))) - services))) + ;; Summary of all services (when NAME is 'root or 'shepherd). + (process-services services)) + (('service ('version 0 _ ...) _ ...) ;single service + (first (process-services (list services)))) (x - #f)))))) + #f)))))) ;singleton + +(define (current-services) + "Return the list of currently defined Shepherd services, represented as +<live-service> objects. Return #f if the list of services could not be +obtained." + (current-service 'root)) (define (resolve-transients services) "Resolve the subset of SERVICES whose 'transient?' field is undefined. This |