summary refs log tree commit diff
path: root/nixos/modules/tasks
diff options
context:
space:
mode:
authorFrederik Rietdijk <freddyrietdijk@fridh.nl>2018-03-05 17:31:22 +0000
committerGitHub <noreply@github.com>2018-03-05 17:31:22 +0000
commit8bcdb39a271b53fc38ce577d509b453fbb2889a8 (patch)
tree50b2dc684ece5e2b5e0513e6d5e1b2396bde6d22 /nixos/modules/tasks
parent4ff4ef51b77ef06ca8a9a00ee28bcd6447033680 (diff)
parente123631ed3e9466147dce40a376a8b9355cc00c5 (diff)
downloadnixlib-8bcdb39a271b53fc38ce577d509b453fbb2889a8.tar
nixlib-8bcdb39a271b53fc38ce577d509b453fbb2889a8.tar.gz
nixlib-8bcdb39a271b53fc38ce577d509b453fbb2889a8.tar.bz2
nixlib-8bcdb39a271b53fc38ce577d509b453fbb2889a8.tar.lz
nixlib-8bcdb39a271b53fc38ce577d509b453fbb2889a8.tar.xz
nixlib-8bcdb39a271b53fc38ce577d509b453fbb2889a8.tar.zst
nixlib-8bcdb39a271b53fc38ce577d509b453fbb2889a8.zip
Merge pull request #27678 from volth/restore-bridge-slaves-dynamically-added-by-libvirt
nixos/networking-scripted: restore bridge slaves dynamically added by…
Diffstat (limited to 'nixos/modules/tasks')
-rw-r--r--nixos/modules/tasks/network-interfaces-scripted.nix11
1 files changed, 11 insertions, 0 deletions
diff --git a/nixos/modules/tasks/network-interfaces-scripted.nix b/nixos/modules/tasks/network-interfaces-scripted.nix
index 8aa5163ce229..630fe6d114ce 100644
--- a/nixos/modules/tasks/network-interfaces-scripted.nix
+++ b/nixos/modules/tasks/network-interfaces-scripted.nix
@@ -288,6 +288,17 @@ let
                 ${i}
               '')}" > /run/${n}.interfaces
 
+              ${optionalString config.virtualisation.libvirtd.enable ''
+                  # Enslave dynamically added interfaces which may be lost on nixos-rebuild
+                  for uri in qemu:///system lxc:///; do
+                    for dom in $(${pkgs.libvirt}/bin/virsh -c $uri list --name); do
+                      ${pkgs.libvirt}/bin/virsh -c $uri dumpxml "$dom" | \
+                      ${pkgs.xmlstarlet}/bin/xmlstarlet sel -t -m "//domain/devices/interface[@type='bridge'][source/@bridge='${n}'][target/@dev]" -v "concat('ip link set ',target/@dev,' master ',source/@bridge,';')" | \
+                      ${pkgs.bash}/bin/bash
+                    done
+                  done
+                ''}
+
               # Enable stp on the interface
               ${optionalString v.rstp ''
                 echo 2 >/sys/class/net/${n}/bridge/stp_state