ordo/modules/ordo/action/quadlet.scm

41 lines
1.9 KiB
Scheme

(define-module (ordo action quadlet)
#:use-module (ice-9 filesystem)
#:use-module (ini)
#:use-module (logging logger)
#:use-module (ordo connection)
#:use-module (ordo action filesystem)
#:export (create-network-quadlet))
(define quadlet-dir "/etc/containers/systemd")
(define default-install-options '(("WantedBy" . "multi-user.target default.target")))
(define (scm->ini-string data)
(with-output-to-string (lambda () (scm->ini data))))
(define (build-quadlet quadlet-type name description unit-options quadlet-options install-options)
(let* ((description (or description (string-append "Podman " (string-downcase quadlet-type) " " name)))
(data `(("Unit" ("Description" . ,description) ,@unit-options)
(,(string-titlecase quadlet-type) ,@quadlet-options)
("Install" ,@(or install-options default-install-options)))))
(scm->ini-string data)))
(define-syntax define-quadlet-type
(syntax-rules ()
((define-quadlet-type function-name quadlet-type suffix default-install-options)
(define* (function-name conn name #:key description (quadlet-options '()) (unit-options '()) (install-options default-install-options))
(fs:install-file conn
(file-name-join* quadlet-dir (string-append name suffix))
#:content (build-quadlet quadlet-type name description quadlet-options unit-options install-options))))))
(define-quadlet-type create-network-quadlet "Network" ".network" default-install-options)
(define-quadlet-type create-pod-quadlet "Pod" ".pod" default-install-options)
(define-quadlet-type create-container-quadlet "Container" ".container" default-install-options)
(define-quadlet-type create-volume-quadlet "Volume" ".volume" '())
(define-quadlet-type create-build-quadlet "Build" ".build" '())
(define-quadlet-type create-image-quadlet "Image" ".image" '())