Unverified Commit 9c762805 authored by Christian Kögler's avatar Christian Kögler Committed by GitHub
Browse files

nixos/tests/machinectl: re-org configs into profiles (#509693)

parents 2ec56a15 d7f265e0
Loading
Loading
Loading
Loading
+75 −46
Original line number Diff line number Diff line
@@ -15,14 +15,20 @@ let
      system.stateVersion = config.system.nixos.release;

      nixpkgs.pkgs = pkgs;
    };

  profile-host-nspawn = {
    # use networkd to obtain systemd network setup
    networking.useNetworkd = true;
    };

  container = {
    imports = [ common ];
    networking.firewall.extraCommands = ''
      # open DHCP for nspawn interfaces
      ${pkgs.iptables}/bin/iptables -A nixos-fw -i ve-+ -p udp -m udp --dport 67 -j nixos-fw-accept
    '';
  };

  # improvement: move following profile to ../modules/profiles/nspawn-guest.nix
  profile-guest-nspawn = {
    # We re-use the NixOS container option ...
    boot.isNspawnContainer = true;
    # ... and revert unwanted defaults
@@ -30,6 +36,65 @@ let

    # systemd-nspawn expects /sbin/init
    boot.loader.initScript.enable = true;

    # use networkd to obtain systemd network setup
    networking.useNetworkd = true;
  };

  profile-host-vmspawn =
    { config, pkgs, ... }:
    {
      # use networkd to obtain systemd network setup
      networking.useNetworkd = true;

      networking.firewall.extraCommands = ''
        # open DHCP for vmspawn interfaces
        ${pkgs.iptables}/bin/iptables -A nixos-fw -i vt-+ -p udp -m udp --dport 67 -j nixos-fw-accept
      '';

      environment.systemPackages =
        let
          # improvement: following wrapper should be moved to pkgs
          vmspawn-wrapped =
            pkgs.runCommand "systemd-vmspawn-wrapped" { nativeBuildInputs = [ pkgs.makeWrapper ]; }
              ''
                makeWrapper ${config.systemd.package}/bin/systemd-vmspawn $out/bin/systemd-vmspawn-wrapped \
                  --prefix PATH : ${
                    lib.makeBinPath [
                      pkgs.qemu
                      pkgs.virtiofsd
                      pkgs.openssh # ssh-keygen
                    ]
                  } \
                  --prefix XDG_CONFIG_HOME : ${pkgs.qemu}/share
              '';
        in
        [ vmspawn-wrapped ];
    };

  # improvement: move following profile to ../modules/profiles/vmspawn-guest.nix
  profile-guest-vmspawn = {
    imports = [ ../modules/profiles/qemu-guest.nix ];
    # improvement: move following configuration to qemu-guest.nix
    boot.initrd.availableKernelModules = [
      "virtiofs"
    ];

    boot.initrd.systemd.enable = true;
    # root is defined by systemd-vmspawn
    boot.initrd.systemd.root = null;

    boot.loader.grub.enable = false;

    # use networkd to obtain systemd network setup
    networking.useNetworkd = true;
  };

  container = {
    imports = [
      common
      profile-guest-nspawn
    ];
  };

  containerSystem = evalConfig container;
@@ -60,18 +125,8 @@ let
  vm = {
    imports = [
      common
      ../modules/profiles/qemu-guest.nix
      profile-guest-vmspawn
    ];
    # improvement: move following configuration to qemu-guest.nix
    boot.initrd.availableKernelModules = [
      "virtiofs"
    ];

    boot.initrd.systemd.enable = true;
    # root is defined by systemd-vmspawn
    boot.initrd.systemd.root = null;

    boot.loader.grub.enable = false;

    services.openssh.enable = true;
  };
@@ -94,14 +149,14 @@ in

  nodes.machine =
    {
      config,
      lib,
      pkgs,
      ...
    }:
    {
      # use networkd to obtain systemd network setup
      networking.useNetworkd = true;
      imports = [
        profile-host-nspawn
        profile-host-vmspawn
      ];

      # do not try to access cache.nixos.org
      nix.settings.substituters = lib.mkForce [ ];
@@ -146,32 +201,6 @@ in
        ];
        overrideStrategy = "asDropin";
      };

      networking.firewall.extraCommands = ''
        # open DHCP for nspawn interfaces
        ${pkgs.iptables}/bin/iptables -A nixos-fw -i ve-+ -p udp -m udp --dport 67 -j nixos-fw-accept
        # open DHCP for vmspawn interfaces
        ${pkgs.iptables}/bin/iptables -A nixos-fw -i vt-+ -p udp -m udp --dport 67 -j nixos-fw-accept
      '';

      environment.systemPackages =
        let
          # improvement: following wrapper should be moved to pkgs
          vmspawn-wrapped =
            pkgs.runCommand "systemd-vmspawn-wrapped" { nativeBuildInputs = [ pkgs.makeWrapper ]; }
              ''
                makeWrapper ${config.systemd.package}/bin/systemd-vmspawn $out/bin/systemd-vmspawn-wrapped \
                  --prefix PATH : ${
                    lib.makeBinPath [
                      pkgs.qemu
                      pkgs.virtiofsd
                      pkgs.openssh # ssh-keygen
                    ]
                  } \
                  --prefix XDG_CONFIG_HOME : ${pkgs.qemu}/share
              '';
        in
        [ vmspawn-wrapped ];
    };

  testScript = ''