Commit | Line | Data |
---|---|---|
3f6c5992 MW |
1 | ;;; -*-lisp-*- |
2 | ||
23ba7445 MW |
3 | (cl:in-package #:ansible-inventory-user) |
4 | ||
3f6c5992 MW |
5 | ;; Set `:vm-role' and `:guests' properties based on `:vm-host' backlinks from |
6 | ;; guests, and propagate `:location' and `:hypervisor' back to the guests. | |
7 | (defhook (prio-props) | |
8 | (dohosts (host) | |
9 | (multiple-value-bind (vmhost foundp) (hostprop host :vm-host) | |
10 | (when foundp | |
11 | (hostprop-default vmhost :vm-role :host) | |
12 | (hostprop-default host :vm-role :guest) | |
13 | (pushnew host (hostprop vmhost :guests)) | |
14 | (dolist (prop '(:location :hypervisor)) | |
15 | (multiple-value-bind (value foundp) (hostprop vmhost prop) | |
16 | (when foundp (hostprop-default host prop value)))))))) | |
17 | ||
18 | ;; Define groups for hosts, guests, clients, and servers. | |
19 | (defhook (prio-groups) | |
20 | (defgroup vm-hosts :predicate (host) (eq (hostprop host :vm-role) :host)) | |
21 | (defgroup vm-guests :predicate (host) (eq (hostprop host :vm-role) :guest)) | |
22 | (defgroup servers :predicate (host) (hostpropp host :server)) | |
23 | (defgroup clients :predicate (host) (hostpropp host :client))) | |
24 | ||
25 | ;; For each VM host, define a group for its guests. | |
26 | (defhook (prio-groups) | |
27 | (dohosts (host) | |
28 | (when (eq (hostprop host :vm-role) :host) | |
7be16879 | 29 | (add-group (intern (concatenate 'string (string host) "-GUESTS")) |
3f6c5992 MW |
30 | :predicate (lambda (h) (eql (hostprop h :vm-host) host)))))) |
31 | ||
32 | ;; For each `:os' flavour, define a group of hosts running it. | |
33 | (defhook (prio-groups) | |
34 | (let ((oses nil)) | |
35 | (dohosts (host) | |
36 | (multiple-value-bind (os foundp) (hostprop host :os) | |
37 | (when foundp (pushnew os oses)))) | |
38 | (dolist (os-mut oses) | |
39 | (let ((os os-mut)) | |
7be16879 | 40 | (add-group (intern (concatenate 'string (string os) "-HOSTS")) |
3f6c5992 MW |
41 | :predicate (lambda (h) (eql (hostprop h :os) os))))))) |
42 | ||
43 | ;; For each ROLE listed in a `:server' list, define a `ROLE-servers' group. | |
44 | (defhook (prio-groups) | |
45 | (let ((server-roles nil)) | |
46 | (dohosts (host) | |
47 | (dolist (role (hostprop host :server)) | |
48 | (pushnew role server-roles))) | |
49 | (dolist (r server-roles) | |
50 | (let ((role r)) | |
7be16879 | 51 | (add-group (intern (concatenate 'string (string role) "-SERVERS")) |
3f6c5992 MW |
52 | :predicate (lambda (h) |
53 | (member role (hostprop h :server)))))))) | |
54 | ||
55 | ;;;----- That's all, folks -------------------------------------------------- |