ordo/modules/ordo/task.scm

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)))))))