Warewulf 4.4 Cluster Management System Now Offers an API
The Warewulf community has released Warewulf 4.4, which adds significant features and fixes some notable bugs to the cluster management system.
First up is a change to the project as a whole: in the time since Warewulf 4.3, the online documentation for Warewulf has been merged into the source repository alongside the Warewulf code base. This enables better alignment of the documentation with the development of the Warewulf application.
You can find the current Warewulf documentation published on the Warewulf website. And if you’d like to try your hand at contributing to the docs, you can submit pull requests against the source.
New man pages have also been added for the warewulf.conf and nodes.conf configuration files, alongside existing man pages for the wwctl command.
Import and Export
If you’re coming from Warewulf 3, you might have a lot of nodes already defined. Migrating from Warewulf 3 to Warewulf 4 is likely to always be a manual process, but new import and export functionality in Warewulf 4.4 simplifies this process a bit, allowing you to import a CSV of node definitions. Or, if you’re moving nodes from one Warewulf 4 environment to another, simply export the node YAML and import it into the new environment.
Warewulf typically uses the wwctl command to configure node attributes, but sometimes it’s easier to edit the underlying YAML document that defines the nodes. You could always edit nodes.conf directly, but at the risk of a malformed YAML document causing an error in Warewulf, or of other parts of Warewulf not being updated to reflect the change.
Warewulf 4 adds a “node edit” feature that allows you to edit node definitions in an intermediate text editor, for the best of both worlds.
A number of improvements have been made to Warewulf’s support for configuring node network parameters. In particular:
- Network interfaces now accept an mtu (maximum transmission unit)
- The wwinit overlay now supplies a NetworkManager configuration alongside ifcfg-style configuration for Ethernet and InfiniBand interfaces.
Container Shell Detection
The wwctl container shell provides a standard shell interface inside of a traditional chroot view of a node image; but it can sometimes be difficult to keep track of what environment you’re in. A new environment variable, WW_CONTAINER_SHELL, identifies the current node image and, in so doing, also indicates that you’re in a container shell environment.
Default node attribute values (e.g., for kernel arguments) are now read in from a defaults.conf configuration file. If this file is not present, built-in default values are used.
This is technically a bugfix; but since the feature was broken before, and relatively unknown, it’s more like a new feature:
The wwctl container build reads /etc/warewulf/excludes from the node image. This file contains filepath.Match patterns to exclude files from being included in the final node image. This can be used for simple things, like excluding temporary files, or more complex use cases.
Warewulf 4.4 includes an initial release of an API to further automate Warewulf alongside the wwctl command-line interface. This work is mostly being included in this release as a preview of things to come, and represents a bunch of foundational work supporting future development. An API-driven Warewulf supports a number of potential use cases, from graphical user interfaces to IaaS-style orchestration.
Unification of Nodes and Profiles
Warewulf’s nodes and profiles are intrinsically linked; but, until now, they have been implemented separately and kept in sync only through manual developer effort. No more! In Warewulf 4.4 nodes and profiles are built reflectively from the same metadata, as are the commands that manipulate them. To accomplish this, however, several command-line arguments had to be updated to bring the divergent interfaces into alignment with each other. You can find a full list of such changes in the release notes.
A few other quick but notable changes:
- Overlay templates can now be rendered locally for inspection during development, without having to deploy them to a node first, using wwctl overlay show –render.
- The wwctl container list now shows the container creation date, modification date, and size.
- The wwctl ssh now includes configuration for Bash tab-completion.
Miscellaneous Bug Fixes
Of course, there are other bug fixes, too. Of particular note:
- System users are no longer prevented from logging into cluster nodes. Previously, this was broken due to a profile script exiting erroneously.)
- The wwctl overlay now correctly handles uid and gid arguments, and no longer sets gid to 0 when unspecified.
There’s a lot more in this release than what we’ve gone over here. If you’d like to know more about what went into the Warewulf 4.4, the official changelog is available, and the release nodes are included alongside the official release on GitHub. You can also look at all the conversations around its issues and pull requests in its GitHub milestone.