Release v0.0.3 (Alpha)
⚠️ ALPHA RELEASE ⚠️ All 0.0.x releases are considered alpha. Future 0.0.x releases will likely contain backwards incompatible changes which may require resetting your network. Expect bugs and missing features.
This is an exciting release! There are a handful of major changes, and of course a lot of things on the underside of Isle have been rewritten and improved.
This release is backwards compatible with v0.0.2; you can safely upgrade without any migration steps or downtime.
Downloads
Isle is still Linux-only as of this release. Sorry!
64-bit Intel/AMD:
64-bit ARM:
For Raspberry Pi (2 and older) and other 32-bit ARM devices:
32-bit Intel/AMD (untested):
Release Notes
All documentation related to the following changes has been updated accordingly in the Isle repo.
Allow Joining Multiple Networks
This is the major improvement around which this release revolves. It is now possible to join multiple networks on the same host. Each network is managed independently of the others by the Isle daemon, such that no resources are ever shared between them. Implementing this required significant refactoring of how sub-processes are managed, as well as how networks are configured and how the configuration is propagated to them.
CLI-Based Network Configuration
Previously it was required to use the `daemon.yml` file to configure resources like the VPN public address and storage allocations on a host. It is now possible to configure these on the command-line instead. The user can decide if they wish to use the configuration file or the command-line on a network-by-network basis.
With this change in place it is now possible to implement a GUI on top of Isle, where this wasn't previously worthwhile. If the configuration file was the only way to make changes the GUI wouldn't be able to do much except view the current configuration. Now it will be able to also make changes, removing the need for the user to make any actions outside the GUI at all.
New Testing Framework (Again!)
The previous testing framework based on shell scripts wasn't cutting it. The new framework is based out of Go's normal testing framework, which brings to the table niceities like parallel tests, better logging management, and improving iteration time by removing the need to recompile the AppImage for every run.
The motivation for a new testing framework came primarily while implement the CLI-based network configuration feature described above. This feature required significant refactors and new code around checking for configuration changes and propagating them to sub-processes in a sane way. These changes were quite tricky, and it was necessary to add far more testing than was previously implemented. At this point there is very little of Isle which is not covered by tests.
Testing is one of those things that has a high up-front cost but pays dividends down the road. A strong testing foundation eventually speeds up the development of new features by giving the developer a more convenient way to set up scenarios and inspect the behavior of the feature in them. And as more functionality is developed the tests will help give confidence that changes aren't breaking existing functionality. So while user-facing features are always the highlight of a release, this is the part of this release I am personally most excited about.
Other Minor Improvements
- Only restart sub-processes when their configuration has changed from either a local configuration change or an action by other hosts in the network. Previously the sub-processes were restarted in all cases where the configuration _might_ have been changed.
- Automatically choose an IP address for a host when it is created. An IP address may still be manually provided if desired.
- Allow some sub-command groups to be optionally pluralized. For example `isle host` can now also be `isle hosts`, which makes sub-commands like `isle hosts list` make more sense.
- Refactor how sub-process logging is handled. It is now hidden by default, but it's possible to output it by passing a log level of "CHILD" to the daemon.
- Allow for removing a host's storage allocations from the network. This applies also when removing a host from the network entirely. This is still a bit flimsy, as there's not a mechanism to determine if the garage cluster is rebalancing at the moment or not, so if multiple allocations are removed too quickly in a short timeframe it's possible for there to be data-loss.
- Allow outputting the result of CLI commands in either JSON or YAML. Default is YAML, as it's more human-readable.
- A portion of the network ID is now included in the TUN interface name. Since there can be multiple TUNs, one for each joined network, this makes it possible to know which is doing what based on OS network analysis tools.
- `isle nebula show` has been removed, the information it used to output is included as part of `isle network(s) list`.
- `isle nebula create-cert` has been moved to `isle vpn create-cert`.
Bug Fixes
- Explicitly set write permissions on the daemon unix socket.
- Fix a panic which could happen on startup if a bootstrap file was already present.
- Fix how default values were being rendered on the command-line.
- Delete previous daemon socket files before creating a new one.
- Fix bug caused by garage buckets not immediately syncing to newly added garage instanstances. Isle will now wait for the bucket list to be synced before considering a garage instance "online".
- The nix flake was previously broken, it now works again.