;;; -*-lisp-*-
(cl:defpackage #:ansible-inventory
- (:use #:common-lisp)
- (:import-from #:cl-launch #:*arguments*))
+ (:use #:common-lisp))
(in-package #:ansible-inventory)
(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))
(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 --------------------------------------------------