From 4ee5e3664f40b485aa37c7cd9d60ad30e8b8ecf4 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Wed, 8 Jul 2015 11:03:40 +0100 Subject: [PATCH] bin/ansible-inventory: Make the script loadable into a Lisp system. --- bin/ansible-inventory | 72 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 29 deletions(-) diff --git a/bin/ansible-inventory b/bin/ansible-inventory index 7e950de..6ffb17a 100755 --- a/bin/ansible-inventory +++ b/bin/ansible-inventory @@ -2,8 +2,7 @@ ;;; -*-lisp-*- (cl:defpackage #:ansible-inventory - (:use #:common-lisp) - (:import-from #:cl-launch #:*arguments*)) + (:use #:common-lisp)) (in-package #:ansible-inventory) @@ -219,9 +218,15 @@ (defvar *progname* #.(or *compile-file-pathname* *load-pathname*)) -(let ((pkg (make-package "ANSIBLE-INVENTORY-USER" - :use '("CL" "ANSIBLE-INVENTORY"))) - (args *arguments*)) +(defvar *user-package* + (make-package "ANSIBLE-INVENTORY-USER" + :use '("CL" "ANSIBLE-INVENTORY"))) + +(defun load-input (file) + (let ((*package* *user-package*)) + (load file :verbose nil))) + +(defun parse-command-line (args) (loop (let* ((arg (pop args)) (len (length arg))) (cond ((string= arg "--") (return)) @@ -243,39 +248,48 @@ (pathname-name *progname*))) (t (error "unknown option `-~A'" (char arg i))))))) (t (push arg args) (return))))) - (dolist (arg args) - (let ((*package* pkg)) - (load arg :verbose nil)))) + (mapc #'load-input args)) ;;;-------------------------------------------------------------------------- ;;; Run the hooks. -(setf *hostproc-hooks* (sort *hostproc-hooks* #'< :key #'hook-entry-prio)) -(mapc (compose #'hook-entry-func #'funcall) *hostproc-hooks*) +(defun run-hooks () + (setf *hostproc-hooks* (sort *hostproc-hooks* #'< :key #'hook-entry-prio)) + (mapc (compose #'hook-entry-func #'funcall) *hostproc-hooks*)) ;;;-------------------------------------------------------------------------- ;;; Output the definitions. -(setf *print-right-margin* 77) -(print-json - (print-json-map - (print-json-mapping "all" - (print-json-list (maphosts #'print-json-simple))) - (dolist (assoc *groups*) - (print-json-mapping (car assoc) - (print-json-list - (mapc #'print-json-simple (cdr assoc))))) - (print-json-mapping "_meta" +(defun output () + (let ((*print-right-margin* 77)) + (print-json (print-json-map - (print-json-mapping "hostvars" + (print-json-mapping "all" + (print-json-list (maphosts #'print-json-simple))) + (dolist (assoc *groups*) + (print-json-mapping (car assoc) + (print-json-list + (mapc #'print-json-simple (cdr assoc))))) + (print-json-mapping "_meta" (print-json-map - (maphash (lambda (host plist) - (print-json-mapping host - (print-json-map - (do ((plist plist (cddr plist))) - ((endp plist)) - (print-json-mapping (car plist) - (print-json-simple (cadr plist))))))) - *hosts*))))))) + (print-json-mapping "hostvars" + (print-json-map + (maphash (lambda (host plist) + (print-json-mapping host + (print-json-map + (do ((plist plist (cddr plist))) + ((endp plist)) + (print-json-mapping (car plist) + (print-json-simple (cadr plist))))))) + *hosts*))))))))) + +;;;-------------------------------------------------------------------------- +;;; Main program. + +#+cl-launch +(progn + (parse-command-line cl-launch:*arguments*) + (run-hooks) + (output)) ;;;----- That's all, folks -------------------------------------------------- -- 2.11.0