41 lines
1.9 KiB
Scheme
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" '())
|