From a92835264100583903dc408abe43d461ff7d4dca Mon Sep 17 00:00:00 2001 From: Sergey Gulin Date: Wed, 27 Mar 2024 12:22:02 +0300 Subject: [OPS-1384] Introduce NixOS VM tests Problem: Currently, the only way to test deploy-rs deployments is to actually do a deployment to an existing NixOS instance (either in VM, or a real machine) manually. This is a bit inconvenient and one can forget to test changes when developing/reviewing deploy-rs changes. Solution: Add NixOS VM tests. --- nix/tests/deploy-flake.nix | 72 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 nix/tests/deploy-flake.nix (limited to 'nix/tests/deploy-flake.nix') diff --git a/nix/tests/deploy-flake.nix b/nix/tests/deploy-flake.nix new file mode 100644 index 0000000..3e1e426 --- /dev/null +++ b/nix/tests/deploy-flake.nix @@ -0,0 +1,72 @@ +# SPDX-FileCopyrightText: 2024 Serokell +# +# SPDX-License-Identifier: MPL-2.0 + +{ + inputs = { + # real inputs are substituted in ./default.nix +##inputs## + }; + + outputs = { self, nixpkgs, deploy-rs, ... }@inputs: let + system = "x86_64-linux"; + pkgs = inputs.nixpkgs.legacyPackages.${system}; + user = "deploy"; + in { + nixosConfigurations.server = nixpkgs.lib.nixosSystem { + inherit system pkgs; + specialArgs = { inherit inputs; }; + modules = [ + ./server.nix + ./common.nix + # Import the base config used by nixos tests + (pkgs.path + "/nixos/lib/testing/nixos-test-base.nix") + # Deployment breaks the network settings, so we need to restore them + (pkgs.lib.importJSON ./network.json) + # Deploy packages + { environment.systemPackages = [ pkgs.figlet pkgs.hello ]; } + ]; + }; + + deploy.nodes = { + server = { + hostname = "server"; + sshUser = "root"; + sshOpts = [ + "-o" "StrictHostKeyChecking=no" + "-o" "StrictHostKeyChecking=no" + ]; + profiles.system.path = deploy-rs.lib."${system}".activate.nixos self.nixosConfigurations.server; + }; + server-override = { + hostname = "override"; + sshUser = "override"; + user = "override"; + sudo = "override"; + sshOpts = [ ]; + confirmTimeout = 0; + activationTimeout = 0; + profiles.system.path = deploy-rs.lib."${system}".activate.nixos self.nixosConfigurations.server; + }; + profile = { + hostname = "server"; + sshUser = "${user}"; + sshOpts = [ + "-o" "UserKnownHostsFile=/dev/null" + "-o" "StrictHostKeyChecking=no" + ]; + profiles = { + "hello-world".path = let + activateProfile = pkgs.writeShellScriptBin "activate" '' + set -euo pipefail + mkdir -p /home/${user}/.nix-profile/bin + rm -f -- /home/${user}/.nix-profile/bin/hello /home/${user}/.nix-profile/bin/figlet + ln -s ${pkgs.hello}/bin/hello /home/${user}/.nix-profile/bin/hello + ln -s ${pkgs.figlet}/bin/figlet /home/${user}/.nix-profile/bin/figlet + ''; + in deploy-rs.lib.${system}.activate.custom activateProfile "$PROFILE/bin/activate"; + }; + }; + }; + }; +} -- cgit v1.2.3