name – the DNS name of the domain
type – a string specifying the type of the domain ('default' by default)
config – the Config this domain is part of
hosts – list of hosts in this domain

And the hosts have:

role – type of this host; should encode the OS and installed packages
hostname – fully qualified hostname, usually reachable from other hosts
shortname – first component of hostname
external_hostname – hostname used to connect to this host
ip – IP address
domain – the Domain this host is part of
transport – allows operations like uploading and downloading files
run_command() – runs the given command on the host

For each object – Config, Domain, Host – one can provide subclasses
to modify the behavior (for example, FreeIPA would add Host methods
to run a LDAP query or to install an IPA server).
Each object has from_dict and to_dict methods, which can add additional
attributes – for example, Config.ntp_server.

To use the multihost plugin in tests, create a fixture listing the domains
and what number of which host role is needed:

If not enough hosts are available, all tests that use the fixture are skipped.

The object returned from make_multihost_fixture only has the “config”
attribute.
Users are expected to add convenience attributes.
For example, FreeIPA, which typically uses a single domain with one master,
several replicas and some clients, would do:

To release, update version in setup.py, add a Git tag like “v0.3”,
and run make tarball.
Running make upload will put the tarball to Fedora Hosted and PyPI,
and a SRPM on Fedorapeople, if you have the rights.
Running make release will upload and fire a COPR build.