func()

in google_guest_agent/network/manager/network_manager_linux.go [349:390]


func (n *networkManager) rollbackConfigs(ctx context.Context, nics *Interfaces, removeVlan bool) error {
	ifaces, err := interfaceNames(nics.EthernetInterfaces)
	if err != nil {
		return fmt.Errorf("getting interfaces: %v", err)
	}

	reconnectPrimaryNic := false

	for i, iface := range ifaces {
		removed, err := n.removeInterface(iface)
		if err != nil {
			logger.Errorf("Failed to remove %q interface with error: %v", iface, err)
		}
		if i == 0 && removed {
			reconnectPrimaryNic = true
		}
	}

	if removeVlan {
		for _, vnic := range nics.VlanInterfaces {
			iface := n.vlanInterfaceName(vnic.ParentInterfaceID, vnic.Vlan)
			if _, err := n.removeInterface(iface); err != nil {
				logger.Errorf("Failed to remove %q interface with error: %v", iface, err)
			}
		}
	}

	if err := run.Quiet(ctx, "nmcli", "conn", "reload"); err != nil {
		return fmt.Errorf("error reloading NetworkManager config cache: %v", err)
	}

	// NetworkManager will not create a default connection if we are removing the one
	// we manage, in that case we need to force it to connect and then with that create
	// a default connection.
	if reconnectPrimaryNic {
		if err := run.Quiet(ctx, "nmcli", "device", "connect", ifaces[0]); err != nil {
			return fmt.Errorf("error connecting NetworkManager's managed interface: %s, %v", ifaces[0], err)
		}
	}

	return nil
}