vuls: init at 0.27.0
[NixPkgs.git] / nixos / maintainers / scripts / openstack / openstack-image-zfs.nix
blob9799f333aec061096ccb46643924073a2b525226
1 # nix-build '<nixpkgs/nixos>' -A config.system.build.openstackImage --arg configuration "{ imports = [ ./nixos/maintainers/scripts/openstack/openstack-image.nix ]; }"
3 { config, lib, pkgs, ... }:
4 let
5   inherit (lib) mkOption types;
6   copyChannel = true;
7   cfg = config.openstackImage;
8   imageBootMode = if config.openstack.efi then "uefi" else "legacy-bios";
9 in
11   imports = [
12     ../../../modules/virtualisation/openstack-config.nix
13   ] ++ (lib.optional copyChannel ../../../modules/installer/cd-dvd/channel.nix);
16   options.openstackImage = {
17     name = mkOption {
18       type = types.str;
19       description = "The name of the generated derivation";
20       default = "nixos-openstack-image-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}";
21     };
23     ramMB = mkOption {
24       type = types.int;
25       default = 1024;
26       description = "RAM allocation for build VM";
27     };
29     sizeMB = mkOption {
30       type = types.int;
31       default = 8192;
32       description = "The size in MB of the image";
33     };
35     format = mkOption {
36       type = types.enum [ "raw" "qcow2" ];
37       default = "qcow2";
38       description = "The image format to output";
39     };
40   };
42   config = {
43     documentation.enable = copyChannel;
44     openstack = {
45       efi = true;
46       zfs = {
47         enable = true;
48         datasets = {
49           "tank/system/root".mount = "/";
50           "tank/system/var".mount = "/var";
51           "tank/local/nix".mount = "/nix";
52           "tank/user/home".mount = "/home";
53         };
54       };
55     };
57     system.build.openstackImage = import ../../../lib/make-single-disk-zfs-image.nix {
58       inherit lib config;
59       inherit (cfg) contents format name;
60       pkgs = import ../../../.. { inherit (pkgs) system; }; # ensure we use the regular qemu-kvm package
62       configFile = pkgs.writeText "configuration.nix"
63         ''
64           { modulesPath, ... }: {
65             imports = [ "''${modulesPath}/virtualisation/openstack-config.nix" ];
66             openstack.zfs.enable = true;
67           }
68         '';
70       includeChannel = copyChannel;
72       bootSize = 1000;
73       memSize = cfg.ramMB;
74       rootSize = cfg.sizeMB;
75       rootPoolProperties = {
76         ashift = 12;
77         autoexpand = "on";
78       };
80       datasets = config.openstack.zfs.datasets;
82       postVM = ''
83          extension=''${rootDiskImage##*.}
84          friendlyName=$out/${cfg.name}
85          rootDisk="$friendlyName.root.$extension"
86          mv "$rootDiskImage" "$rootDisk"
88          mkdir -p $out/nix-support
89          echo "file ${cfg.format} $rootDisk" >> $out/nix-support/hydra-build-products
91         ${pkgs.jq}/bin/jq -n \
92           --arg system_label ${lib.escapeShellArg config.system.nixos.label} \
93           --arg system ${lib.escapeShellArg pkgs.stdenv.hostPlatform.system} \
94           --arg root_logical_bytes "$(${pkgs.qemu_kvm}/bin/qemu-img info --output json "$rootDisk" | ${pkgs.jq}/bin/jq '."virtual-size"')" \
95           --arg boot_mode "${imageBootMode}" \
96           --arg root "$rootDisk" \
97          '{}
98            | .label = $system_label
99            | .boot_mode = $boot_mode
100            | .system = $system
101            | .disks.root.logical_bytes = $root_logical_bytes
102            | .disks.root.file = $root
103            ' > $out/nix-support/image-info.json
104       '';
105     };
106   };