/nits

Nix & NATS

Primary LanguageGoMIT LicenseMIT


logo
Nits — Nix & Nats

Status: highly experimental

Motivation

This project began as a directed learning exercise, taking everyday use cases and functionality from the world of Nix and seeing how to implement and integrate them with NATS.

Over time this has evolved towards a specific use case: pull-based orchestration of NixOS hosts.

Several options are already available for deploying NixOS across a series of hosts (Colmena, deploy-rs et al.). However, these tools are inherently push-based, supporting 'online' deployments that require hosts to be contactable during rollout.

In some cases, it is desirable to have more of a pull-based deployment, in which the system closure for a given host is updated ahead of time and applied when that host subsequently checks in. For example, you may have a series of devices deployed in an area with little network coverage.

We feel that NATS is a logical platform on top of which to build a pull-based deployment mechanism. As such, this project will work towards that goal, developing what is needed to meet it and see what valuable sub-components and side-projects may emerge along the way.

Usage

The project is currently in a state of rapid iteration. We will update this section and add more documentation when it has reached a steady state.

Preview

If an agent is connected, the deployment behaves much like a push-based system. Eventually, if the agent is not connected, we will schedule a deployment for later.

Agent logs are streamed into NATS and captured, allowing you to observe what the agent is doing in real-time or go back and have a look at the logs later.