1{ lib, pkgs, ... }:
2let
3 # Hostname can also be set through "hostname" in user-data.
4 # This is how proxmox configures hostname through cloud-init.
5 metadataDrive = pkgs.stdenv.mkDerivation {
6 name = "metadata";
7 buildCommand = ''
8 mkdir -p $out/iso
9
10 cat << EOF > $out/iso/user-data
11 #cloud-config
12 hostname: testhostname
13 EOF
14
15 cat << EOF > $out/iso/meta-data
16 instance-id: iid-local02
17 EOF
18
19 ${pkgs.cdrkit}/bin/genisoimage -volid cidata -joliet -rock -o $out/metadata.iso $out/iso
20 '';
21 };
22in
23{
24 name = "cloud-init-hostname";
25 meta.maintainers = with lib.maintainers; [
26 lewo
27 illustris
28 ];
29
30 nodes.machine2 =
31 { ... }:
32 {
33 virtualisation.qemu.options = [
34 "-cdrom"
35 "${metadataDrive}/metadata.iso"
36 ];
37 services.cloud-init.enable = true;
38 networking.hostName = "";
39 };
40
41 testScript = ''
42 unnamed.wait_for_unit("cloud-final.service")
43 assert "testhostname" in unnamed.succeed("hostname")
44 '';
45}