Looking for alternative to NixOps

As development of NixOps seems to have been abandoned, I’m looking to switch to an actively maintained tool.

Krops doesn’t work for me as it builds the machine configuration on the remote host and I deploy to hosts which are unable to build their own configuration.

Are there any other tools in this space?

What are you looking for specifically? NixOps was kinda a strange beast that tried to manage cloud infra APIs for you (similar to terraform), and also managed deployments and updates. Do you just need deployments? If so I think colmena is a nice option at this point.

If you do need the cloud infra features as well, you might also give terranix a go, but personally I still just use terraform for this.

3 Likes

yes there is a lot:

as already mentioned there is:

  • krops
  • colmena
  • nixops (“on life support”)
    and a lot more:
  • deploy-rs
  • bento
  • morph
  • nixus
  • lollypops
  • nixinate
  • just plain nixos-rebuild supports --target-host
  • inv
  • and maybe nixos-anywhere

and probably a ton more that’s just a few I know

2 Likes

I recently tried switching to this from NixOps for my use case (extremely simple, one pre-provisioned VPS), and ran into trouble during deployment with some sort of signature mismatch; I hadn’t updated this host in a while and I think the Nix versions on the source and target had gotten too far apart, maybe. So this may not be a viable alternative at the moment.

I went back to NixOps, which worked fine, but I’d like to get off of it.

So in short, I share the OP’s curiosity, and maybe someone could add a little more detail about the pros and cons of this wide array of alternatives?

As the author of Nixus, I wouldn’t recommend anybody to use it. It’s not maintained, it’s hacky, and it’s experimental. Nevertheless, its does have one distinguishing feature that I’m loving, and I haven’t seen it in any other deployment tool: Multi-host modules. That’s one of the main reasons why I wrote it originally and am still using it today.

2 Likes

uh multi host modules seem awesome :slight_smile:
currently I use stuff like this:

        static_configs = [{
          targets = (lib.mapAttrsToList (name: host: "prometheus.${host.config.networking.hostName}.${host.config.networking.domain}") (
            lib.filterAttrs (name: host: host.config.services.prometheus.exporters.node.enable) inputs.self.nixosConfigurations
          ));
        }];

in some places to get values from other hosts which works but can take a long time to eval