func()

in google_guest_agent/network/manager/netplan_linux.go [735:794]


func (n *netplan) rollbackConfigs(ctx context.Context, nics *Interfaces, removeVlan bool) error {
	var reload bool
	interfaces, err := interfaceNames(nics.EthernetInterfaces)
	if err != nil {
		return fmt.Errorf("failed to get list of interface names: %v", err)
	}

	netplanEthernetDropinFile := n.dropinFile(netplanEthernetSuffix)
	existingEthernetCfgs := netplanDropin{}
	if utils.FileExists(netplanEthernetDropinFile, utils.TypeFile) {
		if err := readYamlFile(netplanEthernetDropinFile, &existingEthernetCfgs); err != nil {
			return fmt.Errorf("unable to read %q trying rollback configs: %w", netplanEthernetDropinFile, err)
		}
	}

	var deleteMe []string
	for _, iface := range interfaces {
		// Set networkd drop-in override file for removal.
		networkdDropinFile := n.networkdDropinFile(iface)
		deleteMe = append(deleteMe, networkdDropinFile)

		// Set netplan ethernet drop-in file for removal.
		if _, ok := existingEthernetCfgs.Network.Ethernets[iface]; ok {
			deleteMe = append(deleteMe, netplanEthernetDropinFile)
		}
	}

	if removeVlan {
		if done, err := n.rollbackVlanNics(ctx, nics); err != nil {
			logger.Debugf("Failed to remove vlan interfaces: %v", err)
		} else {
			if done {
				reload = true
			}
		}
	}

	for _, configFile := range deleteMe {
		logger.Debugf("Removing config file: %q", configFile)
		if err := os.Remove(configFile); err != nil {
			if !os.IsNotExist(err) {
				logger.Debugf("Failed to remove drop-in file(%s): %s", configFile, err)
			} else {
				logger.Debugf("No such drop-in file(%s), ignoring.", configFile)
			}
			continue
		}
		reload = true
	}

	if !reload {
		return nil
	}

	if err := n.reloadConfigs(ctx); err != nil {
		return fmt.Errorf("error reloading configs: %v", err)
	}

	return nil
}