func()

in google_guest_agent/network/manager/systemd_networkd_linux.go [575:631]


func (n *systemdNetworkd) rollbackConfigs(ctx context.Context, nics *Interfaces, removeVlan bool) error {
	logger.Infof("rolling back changes for %s", n.Name())
	interfaces, err := interfaceNames(nics.EthernetInterfaces)
	if err != nil {
		return fmt.Errorf("failed to get list of interface names: %v", err)
	}

	ethernetRequiresRestart := false

	// Rollback ethernet interfaces.
	for _, iface := range interfaces {
		reqRestart1, err := n.rollbackNetwork(n.networkFile(iface))
		if err != nil {
			logger.Infof("Failed to rollback .network file: %v", err)
		}

		reqRestart2, err := n.rollbackNetdev(n.networkFile(iface))
		if err != nil {
			logger.Warningf("Failed to rollback .network file: %v", err)
		}

		reqRestart3, err := n.rollbackNetwork(n.deprecatedNetworkFile(iface))
		if err != nil {
			logger.Warningf("Failed to rollback .network file: %v", err)
		}

		reqRestart4, err := n.rollbackNetdev(n.deprecatedNetdevFile(iface))
		if err != nil {
			logger.Warningf("Failed to rollback .network file: %v", err)
		}

		if reqRestart1 || reqRestart2 || reqRestart3 || reqRestart4 {
			ethernetRequiresRestart = true
		}
	}

	vlanRequiresRestart := false
	// Rollback vlan interfaces.
	if removeVlan {
		vlanRequiresRestart, err = n.removeVlanInterfaces(ctx, nil)
		if err != nil {
			logger.Warningf("Failed to rollback vlan interfaces: %v", err)
		}
	}

	if !ethernetRequiresRestart && !vlanRequiresRestart {
		logger.Debugf("No systemd-networkd's configuration rolled back, skipping restart.")
		return nil
	}

	// Avoid restarting systemd-networkd.
	if err := run.Quiet(ctx, "networkctl", "reload"); err != nil {
		return fmt.Errorf("error reloading systemd-networkd network configs: %v", err)
	}

	return nil
}