diff options
author | Evan Stoll <evanjsx@gmail.com> | 2020-05-21 09:35:22 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-21 13:35:22 +0000 |
commit | 3f18ba78e406c2643e49b9c9e9212d4fee98cd39 (patch) | |
tree | eed9975cd4ece351ec65cf6523ee56f1c168c20b | |
parent | 198cd3a157e1788556715ab8e01f324e5094ca39 (diff) | |
download | nixpkgs-3f18ba78e406c2643e49b9c9e9212d4fee98cd39.tar nixpkgs-3f18ba78e406c2643e49b9c9e9212d4fee98cd39.tar.gz nixpkgs-3f18ba78e406c2643e49b9c9e9212d4fee98cd39.tar.bz2 nixpkgs-3f18ba78e406c2643e49b9c9e9212d4fee98cd39.tar.lz nixpkgs-3f18ba78e406c2643e49b9c9e9212d4fee98cd39.tar.xz nixpkgs-3f18ba78e406c2643e49b9c9e9212d4fee98cd39.tar.zst nixpkgs-3f18ba78e406c2643e49b9c9e9212d4fee98cd39.zip |
virtualisation: add vmware-image (#88474)
-rw-r--r-- | nixos/modules/module-list.nix | 1 | ||||
-rw-r--r-- | nixos/modules/virtualisation/vmware-image.nix | 90 |
2 files changed, 91 insertions, 0 deletions
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 89677970dd9..771009221fa 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -1005,6 +1005,7 @@ ./virtualisation/virtualbox-guest.nix ./virtualisation/virtualbox-host.nix ./virtualisation/vmware-guest.nix + ./virtualisation/vmware-image.nix ./virtualisation/xen-dom0.nix ./virtualisation/xe-guest-utilities.nix ] diff --git a/nixos/modules/virtualisation/vmware-image.nix b/nixos/modules/virtualisation/vmware-image.nix new file mode 100644 index 00000000000..9da9e145f7a --- /dev/null +++ b/nixos/modules/virtualisation/vmware-image.nix @@ -0,0 +1,90 @@ +{ config, pkgs, lib, ... }: + +with lib; + +let + boolToStr = value: if value then "on" else "off"; + cfg = config.vmware; + + subformats = [ + "monolithicSparse" + "monolithicFlat" + "twoGbMaxExtentSparse" + "twoGbMaxExtentFlat" + "streamOptimized" + ]; + +in { + options = { + vmware = { + baseImageSize = mkOption { + type = types.int; + default = 2048; + description = '' + The size of the VMWare base image in MiB. + ''; + }; + vmDerivationName = mkOption { + type = types.str; + default = "nixos-vmware-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}"; + description = '' + The name of the derivation for the VMWare appliance. + ''; + }; + vmFileName = mkOption { + type = types.str; + default = "nixos-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}.vmdk"; + description = '' + The file name of the VMWare appliance. + ''; + }; + vmSubformat = mkOption { + type = types.enum subformats; + default = "monolithicSparse"; + description = "Specifies which VMDK subformat to use."; + }; + vmCompat6 = mkOption { + type = types.bool; + default = false; + example = true; + description = "Create a VMDK version 6 image (instead of version 4)."; + }; + }; + }; + + config = { + system.build.vmwareImage = import ../../lib/make-disk-image.nix { + name = cfg.vmDerivationName; + postVM = '' + ${pkgs.vmTools.qemu}/bin/qemu-img convert -f raw -o compat6=${boolToStr cfg.vmCompat6},subformat=${cfg.vmSubformat} -O vmdk $diskImage $out/${cfg.vmFileName} + rm $diskImage + ''; + format = "raw"; + diskSize = cfg.baseImageSize; + partitionTableType = "efi"; + inherit config lib pkgs; + }; + + fileSystems."/" = { + device = "/dev/disk/by-label/nixos"; + autoResize = true; + fsType = "ext4"; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-label/ESP"; + fsType = "vfat"; + }; + + boot.growPartition = true; + + boot.loader.grub = { + version = 2; + device = "nodev"; + efiSupport = true; + efiInstallAsRemovable = true; + }; + + virtualisation.vmware.guest.enable = true; + }; +} |