summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authorRickard Nilsson <rickynils@gmail.com>2016-06-27 13:10:05 +0200
committerRickard Nilsson <rickynils@gmail.com>2016-06-27 13:32:24 +0200
commita0c0f63811600e5cb714c2ddd5eadef916ff4f03 (patch)
tree534d22f65cba580a9b260f0c96c30bea72a22d8f /nixos
parent301b4e9018e8adcbc9009b28d491df22cced8d75 (diff)
downloadnixpkgs-a0c0f63811600e5cb714c2ddd5eadef916ff4f03.tar
nixpkgs-a0c0f63811600e5cb714c2ddd5eadef916ff4f03.tar.gz
nixpkgs-a0c0f63811600e5cb714c2ddd5eadef916ff4f03.tar.bz2
nixpkgs-a0c0f63811600e5cb714c2ddd5eadef916ff4f03.tar.lz
nixpkgs-a0c0f63811600e5cb714c2ddd5eadef916ff4f03.tar.xz
nixpkgs-a0c0f63811600e5cb714c2ddd5eadef916ff4f03.tar.zst
nixpkgs-a0c0f63811600e5cb714c2ddd5eadef916ff4f03.zip
nixos/libvirt: Syntactic-only refactoring
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/virtualisation/libvirtd.nix222
1 files changed, 103 insertions, 119 deletions
diff --git a/nixos/modules/virtualisation/libvirtd.nix b/nixos/modules/virtualisation/libvirtd.nix
index 748ef369bc1..9206f0daa75 100644
--- a/nixos/modules/virtualisation/libvirtd.nix
+++ b/nixos/modules/virtualisation/libvirtd.nix
@@ -1,5 +1,3 @@
-# Systemd services for libvirtd.
-
 { config, lib, pkgs, ... }:
 
 with lib;
@@ -16,71 +14,59 @@ let
     ${cfg.extraConfig}
   '';
 
-in
+in {
 
-{
   ###### interface
 
   options = {
 
-    virtualisation.libvirtd.enable =
-      mkOption {
-        type = types.bool;
-        default = false;
-        description =
-          ''
-            This option enables libvirtd, a daemon that manages
-            virtual machines. Users in the "libvirtd" group can interact with
-            the daemon (e.g. to start or stop VMs) using the
-            <command>virsh</command> command line tool, among others.
-          '';
-      };
-
-    virtualisation.libvirtd.enableKVM =
-      mkOption {
-        type = types.bool;
-        default = true;
-        description =
-          ''
-            This option enables support for QEMU/KVM in libvirtd.
-          '';
-      };
+    virtualisation.libvirtd.enable = mkOption {
+      type = types.bool;
+      default = false;
+      description = ''
+        This option enables libvirtd, a daemon that manages
+        virtual machines. Users in the "libvirtd" group can interact with
+        the daemon (e.g. to start or stop VMs) using the
+        <command>virsh</command> command line tool, among others.
+      '';
+    };
 
-    virtualisation.libvirtd.extraConfig =
-      mkOption {
-        type = types.lines;
-        default = "";
-        description =
-          ''
-            Extra contents appended to the libvirtd configuration file,
-            libvirtd.conf.
-          '';
-      };
+    virtualisation.libvirtd.enableKVM = mkOption {
+      type = types.bool;
+      default = true;
+      description = ''
+        This option enables support for QEMU/KVM in libvirtd.
+      '';
+    };
 
-    virtualisation.libvirtd.extraOptions =
-      mkOption {
-        type = types.listOf types.str;
-        default = [ ];
-        example = [ "--verbose" ];
-        description =
-          ''
-            Extra command line arguments passed to libvirtd on startup.
-          '';
-      };
+    virtualisation.libvirtd.extraConfig = mkOption {
+      type = types.lines;
+      default = "";
+      description = ''
+        Extra contents appended to the libvirtd configuration file,
+        libvirtd.conf.
+      '';
+    };
 
-    virtualisation.libvirtd.onShutdown =
-      mkOption {
-        type = types.enum ["shutdown" "suspend" ];
-        default = "suspend";
-        description =
-          ''
-            When shutting down / restarting the host what method should
-            be used to gracefully halt the guests. Setting to "shutdown"
-            will cause an ACPI shutdown of each guest. "suspend" will
-            attempt to save the state of the guests ready to restore on boot.
-          '';
-      };
+    virtualisation.libvirtd.extraOptions = mkOption {
+      type = types.listOf types.str;
+      default = [ ];
+      example = [ "--verbose" ];
+      description = ''
+        Extra command line arguments passed to libvirtd on startup.
+      '';
+    };
 
+    virtualisation.libvirtd.onShutdown = mkOption {
+      type = types.enum ["shutdown" "suspend" ];
+      default = "suspend";
+      description = ''
+        When shutting down / restarting the host what method should
+        be used to gracefully halt the guests. Setting to "shutdown"
+        will cause an ACPI shutdown of each guest. "suspend" will
+        attempt to save the state of the guests ready to restore on boot.
+      '';
+    };
 
   };
 
@@ -95,65 +81,66 @@ in
 
     boot.kernelModules = [ "tun" ];
 
-    systemd.services.libvirtd =
-      { description = "Libvirt Virtual Machine Management Daemon";
-
-        wantedBy = [ "multi-user.target" ];
-        after = [ "systemd-udev-settle.service" ]
-                ++ optional vswitch.enable "vswitchd.service";
-
-        path = [ 
-            pkgs.bridge-utils 
-            pkgs.dmidecode 
-            pkgs.dnsmasq
-            pkgs.ebtables
-          ] 
-          ++ optional cfg.enableKVM pkgs.qemu_kvm
-          ++ optional vswitch.enable vswitch.package;
-
-        preStart =
-          ''
-            mkdir -p /var/log/libvirt/qemu -m 755
-            rm -f /var/run/libvirtd.pid
-
-            mkdir -p /var/lib/libvirt
-            mkdir -p /var/lib/libvirt/dnsmasq
-
-            chmod 755 /var/lib/libvirt
-            chmod 755 /var/lib/libvirt/dnsmasq
-
-            # Copy default libvirt network config .xml files to /var/lib
-            # Files modified by the user will not be overwritten
-            for i in $(cd ${pkgs.libvirt}/var/lib && echo \
-                libvirt/qemu/networks/*.xml libvirt/qemu/networks/autostart/*.xml \
-                libvirt/nwfilter/*.xml );
-            do
-                mkdir -p /var/lib/$(dirname $i) -m 755
-                cp -npd ${pkgs.libvirt}/var/lib/$i /var/lib/$i
-            done
-
-            # libvirtd puts the full path of the emulator binary in the machine
-            # config file. But this path can unfortunately be garbage collected
-            # while still being used by the virtual machine. So update the
-            # emulator path on each startup to something valid (re-scan $PATH).
-            for file in /etc/libvirt/qemu/*.xml /etc/libvirt/lxc/*.xml; do
-                test -f "$file" || continue
-                # get (old) emulator path from config file
-                emulator=$(grep "^[[:space:]]*<emulator>" "$file" | sed 's,^[[:space:]]*<emulator>\(.*\)</emulator>.*,\1,')
-                # get a (definitely) working emulator path by re-scanning $PATH
-                new_emulator=$(PATH=${pkgs.libvirt}/libexec:$PATH command -v $(basename "$emulator"))
-                # write back
-                sed -i "s,^[[:space:]]*<emulator>.*,    <emulator>$new_emulator</emulator> <!-- WARNING: emulator dirname is auto-updated by the nixos libvirtd module -->," "$file"
-            done
-          ''; # */
-
-        serviceConfig = {
-          ExecStart = ''@${pkgs.libvirt}/sbin/libvirtd libvirtd --config "${configFile}" --daemon ${concatStringsSep " " cfg.extraOptions}'';
-          Type = "notify";
-          KillMode = "process"; # when stopping, leave the VMs alone
-          Restart = "on-failure";
-        };
+    users.extraGroups.libvirtd.gid = config.ids.gids.libvirtd;
+
+    systemd.services.libvirtd = {
+      description = "Libvirt Virtual Machine Management Daemon";
+
+      wantedBy = [ "multi-user.target" ];
+      after = [ "systemd-udev-settle.service" ]
+              ++ optional vswitch.enable "vswitchd.service";
+
+      path = [
+          pkgs.bridge-utils
+          pkgs.dmidecode
+          pkgs.dnsmasq
+          pkgs.ebtables
+        ]
+        ++ optional cfg.enableKVM pkgs.qemu_kvm
+        ++ optional vswitch.enable vswitch.package;
+
+      preStart = ''
+        mkdir -p /var/log/libvirt/qemu -m 755
+        rm -f /var/run/libvirtd.pid
+
+        mkdir -p /var/lib/libvirt
+        mkdir -p /var/lib/libvirt/dnsmasq
+
+        chmod 755 /var/lib/libvirt
+        chmod 755 /var/lib/libvirt/dnsmasq
+
+        # Copy default libvirt network config .xml files to /var/lib
+        # Files modified by the user will not be overwritten
+        for i in $(cd ${pkgs.libvirt}/var/lib && echo \
+            libvirt/qemu/networks/*.xml libvirt/qemu/networks/autostart/*.xml \
+            libvirt/nwfilter/*.xml );
+        do
+            mkdir -p /var/lib/$(dirname $i) -m 755
+            cp -npd ${pkgs.libvirt}/var/lib/$i /var/lib/$i
+        done
+
+        # libvirtd puts the full path of the emulator binary in the machine
+        # config file. But this path can unfortunately be garbage collected
+        # while still being used by the virtual machine. So update the
+        # emulator path on each startup to something valid (re-scan $PATH).
+        for file in /etc/libvirt/qemu/*.xml /etc/libvirt/lxc/*.xml; do
+            test -f "$file" || continue
+            # get (old) emulator path from config file
+            emulator=$(grep "^[[:space:]]*<emulator>" "$file" | sed 's,^[[:space:]]*<emulator>\(.*\)</emulator>.*,\1,')
+            # get a (definitely) working emulator path by re-scanning $PATH
+            new_emulator=$(PATH=${pkgs.libvirt}/libexec:$PATH command -v $(basename "$emulator"))
+            # write back
+            sed -i "s,^[[:space:]]*<emulator>.*,    <emulator>$new_emulator</emulator> <!-- WARNING: emulator dirname is auto-updated by the nixos libvirtd module -->," "$file"
+        done
+      ''; # */
+
+      serviceConfig = {
+        ExecStart = ''@${pkgs.libvirt}/sbin/libvirtd libvirtd --config "${configFile}" --daemon ${concatStringsSep " " cfg.extraOptions}'';
+        Type = "notify";
+        KillMode = "process"; # when stopping, leave the VMs alone
+        Restart = "on-failure";
       };
+    };
 
     systemd.sockets.virtlogd = {
       description = "Virtual machine log manager socket";
@@ -176,8 +163,5 @@ in
       description = "Virtual machine lock manager";
       serviceConfig.ExecStart = "@${pkgs.libvirt}/sbin/virtlockd virtlockd";
     };
-
-    users.extraGroups.libvirtd.gid = config.ids.gids.libvirtd;
-
   };
 }