NixOS / nixops

NixOps is a tool for deploying to NixOS machines in a network or cloud.
https://nixos.org/nixops
GNU Lesser General Public License v3.0
1.86k stars 365 forks source link

repl reflection #1543

Open cmm opened 2 years ago

cmm commented 2 years ago

Is there any way to make NixOps machine definitions inspectable using nix repl?

To illustrate where I'm coming from here: suppose you have a flake with NixOS definitions, i.e. there is a nixosConfigurations output. If you arrange to create a repl file that binds self like this: self = builtins.getFlake (toString ${inputs.self.outPath});, then you can reach inside self.outputs all the way down to nixosConfigurations.<machine>.config, and inspect those configs.

No such luck with a NixOps flake though, as the nixopsConfigurations output does not contain anything interesting (stands to reason, since its fields do not result from a function application, unlike your usual nixosConfigurations). NixOS machine definitions are obviously created when you deploy, however, but I don't see any way at all to reflect on their configs conveniently?

cmm commented 2 years ago

(I know about nixops show-option, but it's not terribly convenient. I guess I'm spoiled)

roberth commented 2 years ago

A NixOps network can not be evaluated without accessing or even creating some resources. Because of this, a normal nix repl will not be capable of doing this. In this regard, nixopsConfigurations is more like nixosModules than nixosConfigurations. NixOps itself can implement this feature by providing nix repl with the "physical" information of an existing deployment using the nix repl file argument and --argstr. (Not --expr for now because it doesn't support --argstr https://github.com/NixOS/nix/issues/2678)