The cluster config macro has had some problems, in that it can do one thing
(and one thing only), normally the name, numbered in the normal style.
So, in a fit of "let's make this better and trivially nestable", I cooked up a
new cluster macro. It's subtly different from the old one, but configs that
use the non-complicated version of the old one should work identically under
the new one.
(cluster (<fmt-string> <low> <high> &key c-fmt name counter)
<stanza to be repeated>)
:name <name> specifys a symbol to be replaced, instead of the default NAME
:c-fmt decides if a conversion from C-style format to lisp style format
should happen (still defaults to true, but by happy co-incidence, the
~-style lisp arguments are NOT mangled by the C-style conversion, strictly
speaking a bug, but maybe not worth fixing at the moment)
:counter is NEW, this specifies a counter to be sequentially set from low to
high in the expansion. This defaults to a gensym, so cannot be used without
specifying it.
(with-format ((sym1 fmt1 vars1... ) (sym2 fmt2 vars2 ...))
<config stanza>)
Like LET, only, eh, thing...
I also cooked up an example (in test-files/nested-cluster.cfg):
(cluster ("" 1 2 :counter a)
(cluster ("" 1 2 :counter b)
(with-format ((name "node~d-cpu~d" a b)
(ip-addr "172.23.~d.~d" a b))
(machine name linux-host
(user "testuser")
(ip ip-addr)))))
Somewhat annoyingly, when I test-ran this I noticed that our post-creation
clean-up for EQUIPMENT objects is a bit... aggressive. When created from a
config stanza, the ONLY thing specified is the name, all else is (eventually)
done with (setf *config-object* 'slot-to-set <value>) or pushing things onto
the monitor list, as it were.
While the clean-up done in the initialize-after method is good, I am wondering
if it may be worth creating a new "post-config-cleanup" GF and move the relevant
clean-up bits to there, as I actually had to re-define the :after method t do
nothing to be able to run my tests (it's vastly easier to use example names to
see if things work or not, when one doesn't actually have a cluster at hand).
//Ingvar