nixVersions.stable: 2.15 -> 2.17
[NixPkgs.git] / nixos / tests / openstack-image.nix
blob0b57dfb8e7eb55d01bfa7a4c7c175c63385edeaa
1 { system ? builtins.currentSystem,
2   config ? {},
3   pkgs ? import ../.. { inherit system config; }
4 }:
6 with import ../lib/testing-python.nix { inherit system pkgs; };
7 with pkgs.lib;
9 with import common/ec2.nix { inherit makeTest pkgs; };
11 let
12   image = (import ../lib/eval-config.nix {
13     inherit system;
14     modules = [
15       ../maintainers/scripts/openstack/openstack-image.nix
16       ../modules/testing/test-instrumentation.nix
17       ../modules/profiles/qemu-guest.nix
18       {
19         # Needed by nixos-rebuild due to lack of network access.
20         system.extraDependencies = with pkgs; [
21           stdenv
22         ];
23       }
24     ];
25   }).config.system.build.openstackImage + "/nixos.qcow2";
27   sshKeys = import ./ssh-keys.nix pkgs;
28   snakeOilPrivateKey = sshKeys.snakeOilPrivateKey.text;
29   snakeOilPrivateKeyFile = pkgs.writeText "private-key" snakeOilPrivateKey;
30   snakeOilPublicKey = sshKeys.snakeOilPublicKey;
32 in {
33   metadata = makeEc2Test {
34     name = "openstack-ec2-metadata";
35     inherit image;
36     sshPublicKey = snakeOilPublicKey;
37     userData = ''
38       SSH_HOST_ED25519_KEY_PUB:${snakeOilPublicKey}
39       SSH_HOST_ED25519_KEY:${replaceStrings ["\n"] ["|"] snakeOilPrivateKey}
40     '';
41     script = ''
42       machine.start()
43       machine.wait_for_file("/etc/ec2-metadata/user-data")
44       machine.wait_for_unit("sshd.service")
46       machine.succeed("grep unknown /etc/ec2-metadata/ami-manifest-path")
48       # We have no keys configured on the client side yet, so this should fail
49       machine.fail("ssh -o BatchMode=yes localhost exit")
51       # Let's install our client private key
52       machine.succeed("mkdir -p ~/.ssh")
54       machine.copy_from_host_via_shell(
55           "${snakeOilPrivateKeyFile}", "~/.ssh/id_ed25519"
56       )
57       machine.succeed("chmod 600 ~/.ssh/id_ed25519")
59       # We haven't configured the host key yet, so this should still fail
60       machine.fail("ssh -o BatchMode=yes localhost exit")
62       # Add the host key; ssh should finally succeed
63       machine.succeed(
64           "echo localhost,127.0.0.1 ${snakeOilPublicKey} > ~/.ssh/known_hosts"
65       )
66       machine.succeed("ssh -o BatchMode=yes localhost exit")
68       # Just to make sure resizing is idempotent.
69       machine.shutdown()
70       machine.start()
71       machine.wait_for_file("/etc/ec2-metadata/user-data")
72     '';
73   };
75   userdata = makeEc2Test {
76     name = "openstack-ec2-metadata";
77     inherit image;
78     sshPublicKey = snakeOilPublicKey;
79     userData = ''
80       { pkgs, ... }:
81       {
82         imports = [
83           <nixpkgs/nixos/modules/virtualisation/openstack-config.nix>
84           <nixpkgs/nixos/modules/testing/test-instrumentation.nix>
85           <nixpkgs/nixos/modules/profiles/qemu-guest.nix>
86         ];
87         environment.etc.testFile = {
88           text = "whoa";
89         };
90       }
91     '';
92     script = ''
93       machine.start()
94       machine.wait_for_file("/etc/testFile")
95       assert "whoa" in machine.succeed("cat /etc/testFile")
96     '';
97   };