Debian 13+ no longer include isc-dhcp-server (or any DHCP client it
seems) in their default minimal stack. This can cause cloud-init to fail
early and render newly provsiioned VMs unbootable. We add it to the
example here for posterity. We also explicitly add ifupdown, which
provides the legacy Debian networking subsystem.
Finally we modify the cloud-init to ensure it does not attempt to
overwrite the networking provided by the system, and reduce timeouts to
avoid excessive delays.
Ensure we remove any existing leases for the MAC first, before adding a
new entry for that MAC. Otherwise what dnsmasq returns will not be valid
and this can cause CloudInit bootstrap errors.
The get_distribution load was very heavy, so follow the other parts and
just hardcode the version in. Also update bump-version to work with this
and with the new pyproject.toml configuration, and add a custom
user-agent to the API requests leveraging this version.
A missing snapshot could cause an exception here which would break the
entire autobackup run. Catch the exception and continue on as this
should never be a fatal situation.
used_bytes is a broken value since it does not take object replicas into
account, thus throwing off these calculations. Use stored_bytes instead
which properly represents this value.
Moves the age human conversion logic to the client so that this value
can be used by API consumers programatically.
Rounding ensures recent snapshots are not showing as "older" than they
actually are, which is important for accuracy especially with
automirror snapshots and ages above half the next rounding value.
Allows shipping snapshots automatically to remote clusters on a cron,
identically to how autobackup handles local snapshot exports.
VMs are selected based on configured tags, and individual destination
clusters can be specified based on a colon-separated suffix to the
tag(s).
Automirror snapshots use the prefix "am" (analogous to "ab" for
autobackups) to differentiate them from normal "mr" mirrors.