From 8b6b0e48362753b45b034394021119e88ac95131 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Sat, 9 Mar 2019 16:48:21 -0500 Subject: Take another stab at this whole guix deploy thing. --- gnu/machine.scm | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 gnu/machine.scm (limited to 'gnu/machine.scm') diff --git a/gnu/machine.scm b/gnu/machine.scm new file mode 100644 index 0000000000..4fde7d5c01 --- /dev/null +++ b/gnu/machine.scm @@ -0,0 +1,59 @@ +(define-module (gnu machine) + #:use-module ((gnu packages package-management) #:select (guix)) + #:use-module (gnu system) + #:use-module (guix derivations) + #:use-module (guix inferior) + #:use-module (guix packages) + #:use-module (guix ssh) + #:use-module (guix store) + #:use-module (oop goops) + #:use-module (ssh session) + #:export ( + system + display-name + build-os + deploy-os + remote-eval + + + host-name + ssh-port + ssh-user)) + +(define-class () + (system #:getter system #:init-keyword #:system)) + +(define-method (display-name (machine )) + (operating-system-host-name (system machine))) + +(define-method (build-os (machine ) store) + (let* ((guixdrv (run-with-store store (package->derivation guix))) + (guixdir (and (build-derivations store (list guixdrv)) + (derivation->output-path guixdrv))) + (osdrv (run-with-store store (operating-system-derivation + (system machine))))) + (and (build-derivations store (list osdrv)) + (list (derivation-file-name osdrv) + (derivation->output-path osdrv))))) + +(define-method (deploy-os (machine ) store osdrv) + (error "not implemented")) + +(define-method (remote-eval (machine ) exp) + (error "not implemented")) + +(define-class () + (host-name #:getter host-name #:init-keyword #:host-name) + (ssh-port #:getter ssh-port #:init-keyword #:ssh-port #:init-form 22) + (ssh-user #:getter ssh-user #:init-keyword #:ssh-user #:init-form "root") + ;; ??? - SSH key config? + ) + +(define-method (deploy-os (machine ) store osdrvs) + (let ((session (open-ssh-session (host-name machine) + #:user (ssh-user machine) + #:port (ssh-port machine)))) + (with-store store (send-files store osdrvs + (connect-to-remote-daemon session) + #:recursive? #t)) + #t)) -- cgit 1.4.1