41 lines
1.5 KiB
Scheme
41 lines
1.5 KiB
Scheme
(define-module (ordo task)
|
|
#:use-module (srfi srfi-9)
|
|
#:use-module (logging logger)
|
|
#:use-module (ordo vars)
|
|
#:export (task
|
|
task?
|
|
task-name
|
|
task-tags
|
|
task-action
|
|
task-condition
|
|
task-register-play-var
|
|
task-register-playbook-var
|
|
task-triggers
|
|
run-task))
|
|
|
|
(define-record-type <task>
|
|
(make-task name tags action condition register-play-var register-playbook-var triggers)
|
|
task?
|
|
(name task-name)
|
|
(tags task-tags)
|
|
(action task-action)
|
|
(condition task-condition)
|
|
(register-play-var task-register-play-var)
|
|
(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 (run-task t c)
|
|
(when (check-filter-tags (task-tags t))
|
|
(if (not ((task-condition t) c))
|
|
(log-msg 'NOTICE "Skipping task: " (task-name t) " (precondition not met)")
|
|
(begin
|
|
(log-msg 'NOTICE "Running task: " (task-name t))
|
|
(let ((result ((task-action t) c)))
|
|
(when (task-register-play-var t)
|
|
(set-play-var! (task-register-play-var t) result))
|
|
(when (task-register-playbook-var t)
|
|
(set-playbook-var! (task-register-playbook-var t) result))
|
|
(add-play-triggers! (task-triggers t)))))))
|