* Move remote-cmd from connection to an action module. * Inventory now populates a global variable instead of returning a list. * Added a `describe` method to connections. * Cleaned up execute/continue-on-error etc. * Removed workflow class.
56 lines
1.8 KiB
Scheme
56 lines
1.8 KiB
Scheme
#|
|
|
This file is part of Ordo.
|
|
|
|
Copyright (C) 2025 Ray Miller
|
|
|
|
This program is free software: you can redistribute it and/or modify it under
|
|
the terms of the GNU General Public License as published by the Free Software
|
|
Foundation, version 3.
|
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along with
|
|
this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|#
|
|
|
|
(define-module (ordo connection)
|
|
#:use-module (ice-9 exceptions)
|
|
#:use-module (oop goops)
|
|
#:use-module (ordo connection base)
|
|
#:use-module (ordo connection local)
|
|
#:use-module (ordo connection ssh)
|
|
#:use-module (ordo connection sudo)
|
|
#:use-module (ordo logger)
|
|
#:use-module (srfi srfi-1)
|
|
#:export (connection?
|
|
local-connection
|
|
ssh-connection
|
|
call-with-connection))
|
|
|
|
(define (connection? c)
|
|
(is-a? c <connection>))
|
|
|
|
(define (local-connection . args)
|
|
(apply make <local-connection> args))
|
|
|
|
(define (ssh-connection . args)
|
|
(apply make <ssh-connection> args))
|
|
|
|
(define* (call-with-connection conn proc #:key sudo? sudo-user sudo-password)
|
|
(log-msg 'DEBUG "call-with-connection " (describe conn))
|
|
(let ((conn (deep-clone conn)))
|
|
(when sudo?
|
|
(unless (is-a? conn <sudo-connection>)
|
|
(raise-exception
|
|
(make-exception
|
|
(make-programming-error)
|
|
(make-exception-with-message (format #f "connection ~a does not support sudo" conn)))))
|
|
(set! (become? conn) sudo?)
|
|
(set! (become-user conn) sudo-user)
|
|
(set! (become-password conn) sudo-password))
|
|
(dynamic-wind
|
|
(lambda () (setup conn))
|
|
(lambda () (proc conn))
|
|
(lambda () (teardown conn)))))
|