Some simplifications
This commit is contained in:
parent
e22e618142
commit
8a1e1b244f
8 changed files with 78 additions and 27 deletions
34
examples/basic.scm
Normal file
34
examples/basic.scm
Normal file
|
@ -0,0 +1,34 @@
|
|||
(use-modules
|
||||
(ice-9 filesystem)
|
||||
(ice-9 pretty-print)
|
||||
(logging logger)
|
||||
(ordo)
|
||||
(ordo action filesystem))
|
||||
|
||||
(playbook
|
||||
#:name "Basic filesystem operations"
|
||||
#:plays (list
|
||||
(play
|
||||
#:name "Temporary files on localhost"
|
||||
#:host "localhost"
|
||||
#:tasks (list
|
||||
(task #:name "Create temporary directory"
|
||||
#:action (lambda () (fs:create-tmp-dir (current-connection)))
|
||||
#:register-play-var #:tmp-dir)
|
||||
|
||||
(task #:name "Create hello.txt"
|
||||
#:action (lambda () (fs:install-file (current-connection)
|
||||
(file-name-join* ($ #:tmp-dir) "hello.txt")
|
||||
#:content "Hello, world!"))
|
||||
#:register-play-var #:hello)
|
||||
|
||||
(task #:name "Stat hello.txt"
|
||||
#:action (lambda () (fs:stat (current-connection) ($ #:hello)))
|
||||
#:register-play-var #:hello-stat)
|
||||
|
||||
(task #:name "Debug variables"
|
||||
#:action (lambda ()
|
||||
(pretty-print (list #:hello ($ #:hello) #:hello-stat ($ #:hello-stat)))))
|
||||
|
||||
(task #:name "Clean up tmp dir"
|
||||
#:action (lambda () (fs:remove (current-connection) ($ #:tmp-dir) #:recurse? #t #:verbose? #t)))))))
|
|
@ -19,10 +19,15 @@
|
|||
(lambda ()
|
||||
(run conn "rm" "-rf" tmp-dir)))))
|
||||
|
||||
(playbook "Test Playbook"
|
||||
(play "Test play"
|
||||
#:host "localhost"
|
||||
(task
|
||||
(install-aws-cli #:update? #t
|
||||
#:install-dir (file-name-join* ($ #:fact.home-dir) ".local" "aws-cli")
|
||||
#:bin-dir (file-name-join* ($ #:fact.home-dir) ".local" "bin")))))
|
||||
(playbook
|
||||
#:name "Test Playbook"
|
||||
#:plays (list
|
||||
(play
|
||||
#:name "Test play"
|
||||
#:host "localhost"
|
||||
#:tasks (list
|
||||
(task #:name "Install AWS CLI"
|
||||
#:action (lambda ()
|
||||
(install-aws-cli #:update? #t
|
||||
#:install-dir (file-name-join* ($ #:fact.home-dir) ".local" "aws-cli")
|
||||
#:bin-dir (file-name-join* ($ #:fact.home-dir) ".local" "bin"))))))))
|
||||
|
|
|
@ -36,13 +36,15 @@
|
|||
((string-contains (first result) "No such file or directory") #f)
|
||||
(else (error (format #f "stat ~a: ~a" path (first result)))))))
|
||||
|
||||
(define* (fs:remove conn path #:key (recurse? #f) (force? #f) (verbose? #t))
|
||||
(run conn "rm" (chain-when '()
|
||||
(verbose? (append _ '("-v")))
|
||||
(recurse? (append _ '("-r")))
|
||||
(force? (append _ '("-f")))
|
||||
(#t (append _ `(,path))))
|
||||
#:check? #t))
|
||||
(define* (fs:remove conn path #:key (recurse? #f) (force? #f) (verbose? #f))
|
||||
(let ((out (run conn "rm" (chain-when '()
|
||||
(verbose? (append _ '("-v")))
|
||||
(recurse? (append _ '("-r")))
|
||||
(force? (append _ '("-f")))
|
||||
(#t (append _ `(,path))))
|
||||
#:check? #t)))
|
||||
(when verbose?
|
||||
(for-each (cut log-msg 'INFO <>) out))))
|
||||
|
||||
(define* (fs:link conn target link-name #:key (symbolic? #f) (force? #f) (backup? #f))
|
||||
"Create a link to @code{target} with the name @code{link-name}."
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
(define-module (ordo cli)
|
||||
#:use-module (ice-9 match)
|
||||
#:use-module (logging logger)
|
||||
#:use-module (ordo logger)
|
||||
#:use-module (ordo context)
|
||||
#:use-module (ordo playbook)
|
||||
|
@ -9,8 +10,11 @@
|
|||
(define (main args)
|
||||
(match-let (((_ inventory-path playbook-path) args))
|
||||
(setup-logging #:level 'DEBUG)
|
||||
(log-msg 'DEBUG "Initializing context")
|
||||
(init-context!)
|
||||
(load inventory-path)
|
||||
(log-msg 'DEBUG "Loaded inventory: " inventory-path)
|
||||
(let ((playbook (load playbook-path)))
|
||||
(log-msg 'DEBUG "Loaded playbook: " playbook-path)
|
||||
(run-playbook playbook))
|
||||
(quit)))
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#:use-module (ice-9 match)
|
||||
#:use-module (logging logger)
|
||||
#:use-module (srfi srfi-1) ; list operations
|
||||
#:use-module (srfi srfi-26) ; cut
|
||||
#:use-module (srfi srfi-71) ; extended let
|
||||
#:use-module (ordo connection base)
|
||||
#:use-module (ordo connection local)
|
||||
|
|
|
@ -34,10 +34,9 @@
|
|||
(handlers play-handlers)
|
||||
(gather-facts play-gather-facts))
|
||||
|
||||
(define* (play name #:key host (sudo? #f) (sudo-user #f) (sudo-password #f) (vars '()) (gather-facts #t) . more)
|
||||
(let ((tasks (filter task? more))
|
||||
(handlers (filter handler? more)))
|
||||
(make-play name host sudo? sudo-user sudo-password vars gather-facts tasks handlers)))
|
||||
;; TODO: argument validation
|
||||
(define* (play #:key name host (sudo? #f) (sudo-user #f) (sudo-password #f) (vars '()) (gather-facts #t) tasks (handlers '()))
|
||||
(make-play name host sudo? sudo-user sudo-password vars gather-facts tasks handlers))
|
||||
|
||||
(define (run-play p)
|
||||
(log-msg 'NOTICE "Running play: " (play-name p))
|
||||
|
|
|
@ -17,7 +17,8 @@
|
|||
(vars playbook-vars)
|
||||
(plays playbook-plays))
|
||||
|
||||
(define* (playbook name #:key (vars '()) . plays)
|
||||
;; TODO: argument validation
|
||||
(define* (playbook #:key name (vars '()) plays)
|
||||
(make-playbook name vars plays))
|
||||
|
||||
(define (run-playbook pb)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
(define-module (ordo task)
|
||||
#:use-module (ice-9 exceptions)
|
||||
#:use-module (srfi srfi-9)
|
||||
#:use-module (logging logger)
|
||||
#:use-module (ordo context)
|
||||
|
@ -24,15 +25,19 @@
|
|||
(register-playbook-var task-register-playbook-var)
|
||||
(triggers task-triggers))
|
||||
|
||||
(define* (%task name action #:key (tags '()) (condition (const #t)) (register-play-var #f) (register-playbook-var #f) (triggers '()))
|
||||
(make-task name tags action condition register-play-var register-playbook-var triggers))
|
||||
|
||||
(define-syntax task
|
||||
(define-syntax assert
|
||||
(syntax-rules ()
|
||||
((task (f args ...) kwargs ...)
|
||||
(%task (symbol->string 'f) (lambda () (f args ...) kwargs ...)))
|
||||
((task name (f args ...) kwargs ...)
|
||||
(%task name (lambda () (f args ...)) kwargs ...))))
|
||||
((assert expr message irritant)
|
||||
(unless expr
|
||||
(raise-exception (make-exception
|
||||
(make-assertion-failure)
|
||||
(make-exception-with-message message)
|
||||
(make-exception-with-irritants irritant)))))))
|
||||
|
||||
(define* (task #:key name action (tags '()) (condition (const #t)) (register-play-var #f) (register-playbook-var #f) (triggers '()))
|
||||
(assert (and name (string? name)) "#:name is required and must be a string" name)
|
||||
(assert (and action (procedure? action)) "#:action is required and must be a procedure" action)
|
||||
(make-task name tags action condition register-play-var register-playbook-var triggers))
|
||||
|
||||
(define (run-task t)
|
||||
(when (check-filter-tags (task-tags t))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue