Skip to content

Latest commit

 

History

History
152 lines (132 loc) · 7.03 KB

File metadata and controls

152 lines (132 loc) · 7.03 KB

v 2.0.0

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 in apply mode.
  • More detailed, more useful error messages.
  • Improved client and server telemetry, and tidied metrics namespace. [*]
  • New /api/v1/gurp-binary path serves up the currently-running Gurp binary, for easier client bootstrapping.

Commands

  • Remove show command. [*]
  • Remove -L option from apply and compile commands. [*]
  • Add doers command, which dumps a list of doers to stdout.
  • Add repl command, which opens a Janet REPL with the Gurp library loaded into the root environment.
  • Add --destroy-everything-you-touch to apply command.
  • Add --as-json option to apply command, for old compile-on-server behaviour.
  • Add --remove-first option to apply, to act on remove resources first.
  • Add --only <REGEX> option to apply, to apply only resources whose IDs match the given Rust regex.
  • Add --exec to apply, which compiles and applies a string of Janet config.
  • Add --no-lock to apply, which stops Gurp checking, creating, or removing a lock file.
  • describe command gives more information, and its layout adjusts for the terminal width.
  • describe and doers will not use ANSI colouring if gurp is part of a pipeline, or if the user specifies -C.

Doers

  • Replace symlink doer with link, which also handles hard links. [*]
  • Changed syntax of ip-address/ensure, ip-properties/ensure, and ip-interface/ensure to make them all consistent. [*]
  • Helpers like zone-fs or smf-method are now referred to as zone/fs and smf/method. [*]
  • Add bridge doer.
  • Add ipfilter doer.
  • Add ipnat doer.
  • Add network-flow doer.
  • Add vlan doer.
  • Add system-cert doer.
  • Add limitpriv, hostid, ip-type, pool , acpi and boot-rom to zone doer.
  • zone doer now supports illumos branded zones.
  • zone doer supports ZST images for bhyve zones (and has been refactored).
  • All brands which require an image now use the top-level :image key, rather than having their own. [*]
  • Add force-link to link doer, which can turn regular files into links.
  • Doer documentation is machine-generated from definition files.
  • When running in client/server mode, the file doer 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.
  • file and directory doers now accept numeric IDs for :owner and :group.
  • File backups now work, and the whole file doer has been refactored to make it easier to work on and expand.
  • file and directory doers now error with a meaningful message if you try to ensure a path which already exists, but is of a different type.
  • smf doer 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.

DSL

  • Remove the (hostname) function. Use (fact :hostname) instead. [*]
  • Change run-cmd so it only allows execution of certain allowed commands [*]
  • Add run-safe-cmd which allows execution of exactly specified commands.
  • Add run-any-cmd which allows execution of any command in the compilation phase unless disallowed by sandboxing rules.
  • Add facts function, which gives a small amount of system information.
  • Add tabular-output->struct function, which converts tabular command output such as that produced by zoneadm list or ipadm into Janet structs.

Internals

  • 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. [*]
  • indoc is 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.

v 1.4.0 (2025-11-22)

  • Add route doer, which manages persistent routes.
  • Add ip-properties doer to manage top-level IP properties.
  • Add (repeated-line-file) helper function.
  • Add (smf-dependency) and (smf-dependent) to the smf doer, 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.

v 1.3.0 (2025-11-15)

  • Add etherstub doer.
  • Add server mode which serves compiled (JSON) configurations.
  • Add -s (--server) option to apply subcommand to request a compiled configuration from a Gurp instance running in server mode.
  • When running as a server, push OpenTelemetry metrics.
  • Smarter handling of conflicting options in apply subcommand.
  • Improve zone doer'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 file doer's :from-url working without :ignore-pattern being 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.

v1.2.0 (2025-10-12)

  • Add vnic doer, to add and remove VNICs.
  • Add ip-interface doer, which adds, removes, and sets properties on network interfaces.
  • Add ip-address doer, which allows setting of static and DHCP IP addresses. It also manages addrprop settings.
  • Translate Janet bools into on and off when defining ZFS properties.

v1.1.0 (2025-10-01)

  • Add support for Bhyve zones.
  • Add --precompiled (-p) flag to apply command, which applies a pre-compiled JSON file.
  • Fix bug where compile command would fail silently without an output format.
  • Add :from-url and :with-checksum to file doer, to copy files from a remote origin.

v1.0.0 (2025-09-13)

First release. Covers the basic functionality laid down in the original design.