Items marked [*] are breaking changes.
- Option to compile config into a Janet image, and to apply config from a Janet image. This means in client/server mode, the configuration is pulled from the server, but evaluated on the client, so you can write and trust code which behaves differently on client and server. The old JSON transfer still exists.
- Default to jimage in client/server mode. [*]
- Write a lock file (
/var/run/gurp.lock) when running inapplymode. - More detailed, more useful error messages.
- Improved client and server telemetry, and tidied metrics namespace. [*]
- New
/api/v1/gurp-binarypath serves up the currently-running Gurp binary, for easier client bootstrapping.
- Remove
showcommand. [*] - Remove
-Loption fromapplyandcompilecommands. [*] - Add
doerscommand, which dumps a list of doers to stdout. - Add
replcommand, which opens a Janet REPL with the Gurp library loaded into the root environment. - Add
--destroy-everything-you-touchtoapplycommand. - Add
--as-jsonoption toapplycommand, for old compile-on-server behaviour. - Add
--remove-firstoption toapply, to act on remove resources first. - Add
--only <REGEX>option toapply, to apply only resources whose IDs match the given Rust regex. - Add
--exectoapply, which compiles and applies a string of Janet config. - Add
--no-locktoapply, which stops Gurp checking, creating, or removing a lock file. describecommand gives more information, and its layout adjusts for the terminal width.describeanddoerswill not use ANSI colouring ifgurpis part of a pipeline, or if the user specifies-C.
- Replace
symlinkdoer withlink, which also handles hard links. [*] - Changed syntax of
ip-address/ensure,ip-properties/ensure, andip-interface/ensureto make them all consistent. [*] - Helpers like
zone-fsorsmf-methodare now referred to aszone/fsandsmf/method. [*] - Add
bridgedoer. - Add
ipfilterdoer. - Add
ipnatdoer. - Add
network-flowdoer. - Add
vlandoer. - Add
system-certdoer. - Add
limitpriv,hostid,ip-type,pool,acpiandboot-romtozonedoer. zonedoer now supports illumos branded zones.zonedoer supports ZST images for bhyve zones (and has been refactored).- All brands which require an image now use the top-level
:imagekey, rather than having their own. [*] - Add
force-linktolinkdoer, which can turn regular files into links. - Doer documentation is machine-generated from definition files.
- When running in client/server mode, the
filedoer is now able to ask the server for the Blake3 hash of a file, only retrieving it if needs to. This reduces memory usage on the client, and network traffic. fileanddirectorydoers now accept numeric IDs for:ownerand:group.- File backups now work, and the whole
filedoer has been refactored to make it easier to work on and expand. fileanddirectorydoers now error with a meaningful message if you try to ensure a path which already exists, but is of a different type.smfdoer now lets you set service properties.- Fix bug where removing a service property always produced an error.
- Fix bug where APK packages were never removed.
- Remove the
(hostname)function. Use(fact :hostname)instead. [*] - Change
run-cmdso it only allows execution of certain allowed commands [*] - Add
run-safe-cmdwhich allows execution of exactly specified commands. - Add
run-any-cmdwhich allows execution of any command in the compilation phase unless disallowed by sandboxing rules. - Add
factsfunction, which gives a small amount of system information. - Add
tabular-output->structfunction, which converts tabular command output such as that produced byzoneadm listoripadminto Janet structs.
- Huge refactor of the front-end Janet. The old single library file is now fully modular, with improved code clarity, better test coverage, and all knots untangled. [*]
indocis no longer a macro which binds a string to a name. It is now a function which returns a string. [*]- Run the embedded Janet interpreter with sandboxing. This severely limits the actions the Janet code can take when it is evaluated. [*]
- Doer parameters, types, and behaviour are now defined in separate definition files. These are used to check properties are valid and of the correct types, and to generate documentation.
- The front-end checks helper properties and their types.
- Various small bugfixes in front-end.
- Use OpenTelemetry for client and server metrics.
- Remove the internal concept of a "noop". Things either happen or they don't.
- Wherever possible, avoid loading files into memory. This improves client and server memory usage.
- Added context to errors throughout the codebase. As most errors end up being seen by the user, this is very helpful.
- Add
routedoer, which manages persistent routes. - Add
ip-propertiesdoer to manage top-level IP properties. - Add
(repeated-line-file)helper function. - Add
(smf-dependency)and(smf-dependent)to thesmfdoer, allowing the user to define dependencies beyond the hardcoded ones. - Show content of new files when using
--dump-diff. Useful for testing dynamically generated content. - When fetching config from a server, retry with an exponential backoff.
- Add
etherstubdoer. - Add
servermode which serves compiled (JSON) configurations. - Add
-s(--server) option toapplysubcommand to request a compiled configuration from a Gurp instance running inservermode. - When running as a server, push OpenTelemetry metrics.
- Smarter handling of conflicting options in
applysubcommand. - Improve
zonedoer's:copy-in. The target can now be a directory (add a trailing/; target directories are created as required. - Don't use colour in logs when not running with a tty.
- Refactor of code which builds lib / host config bundle.
- Fix bug which stopped
filedoer's:from-urlworking without:ignore-patternbeing set. - Fix bug which blocked downloading large files from server.
- Use canonical paths in Janet lib dyns, for more robust file-finding.
- Minor logging improvements.
- Add
vnicdoer, to add and remove VNICs. - Add
ip-interfacedoer, which adds, removes, and sets properties on network interfaces. - Add
ip-addressdoer, which allows setting of static and DHCP IP addresses. It also managesaddrpropsettings. - Translate Janet bools into
onandoffwhen defining ZFS properties.
- Add support for Bhyve zones.
- Add
--precompiled(-p) flag toapplycommand, which applies a pre-compiled JSON file. - Fix bug where
compilecommand would fail silently without an output format. - Add
:from-urland:with-checksumtofiledoer, to copy files from a remote origin.
First release. Covers the basic functionality laid down in the original design.