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
}