We have two repositories: a fork of the main clusto codebase and a new
project, python-llclusto-linden. You can find them here:
https://github.com/lindenlab/clusto
https://github.com/lindenlab/python-llclusto-linden
In each repository, we'll be doing our development work in the
"development" branch. When we have an RC ready, we merge the changes
into the "staging" branch, from which our internal build system
automatically pulls and produces a debian-based system image for us,
incorporating the new code (ask me for details if you're interested!).
There're a few more branches in the clusto repo that we'll use to manage
our contributions back to upstream. We'll send pull requests once we've
deployed our clusto changes internally and made sure everything works
nicely.
Python-llclusto-linden contains a set of Drivers we've been developing
over the past couple of weeks to model our infrastructure. We kept this
separate so that we wouldn't need to get a bunch of Linden-specific code
accepted into the main clusto project. Python-llclusto-linden parallels
a lot of the structure of clusto, with a driver heirarchy, a test
heirarchy, and module-level utility functions.
Especially of interest is our LindenEquipment class. We often find
ourselves in the position of needing to change the hostname of a system
to use it for a different purpose. Renaming entities in clusto is
possible, but it's kind of a violent proposition (the rename code
deletes the old entity, creates a new one, and copies over all
attributes). Instead, LindenEquipment automatically assigns an entity
name (using an internally managed instance of SimpleNameManager), and a
hostname can be assigned later on.
I also have "fixes" and "features" branches in my fork of clusto.
"fixes" is merged up to lindenlab/clusto's development branch, but
"features" contains a couple of new tidbits not yet merged in. We'll be
contributing these upstream in the coming months.
Let us know if you have any questions, comments, or contributions on our
code!
Yup, we saw that. We have more complicated needs around hostnames, so
we ended up not using the hostname functionality in Device at all and
implementing our own HostnameMixin to handle it.