func()

in cmd/core_plugin/network/netplan/netplan_linux.go [171:220]


func (sn *serviceNetplan) writeVlanDropin(nics []*nic.Configuration) (bool, error) {
	galog.Debugf("Writing vlan drop-in configuration.")

	dropin := netplanDropin{
		Network: netplanNetwork{
			Version: netplanConfigVersion,
			Vlans:   make(map[string]netplanVlan),
		},
	}

	var vlanConfigured bool

	for _, nic := range nics {
		for _, vlan := range nic.VlanInterfaces {
			trueVal := true

			nv := netplanVlan{
				ID:     vlan.Vlan,
				Link:   nic.Interface.Name(),
				DHCPv4: &trueVal,
			}

			if len(vlan.IPv6Addresses) > 0 {
				nv.DHCPv6 = &trueVal
			}

			dropin.Network.Vlans[vlan.InterfaceName()] = nv
			vlanConfigured = true
		}
	}

	// If we don't have any vlan interfaces, remove the drop-in file.
	if !vlanConfigured {
		fPath := sn.vlanDropinFile()
		if !file.Exists(fPath, file.TypeFile) {
			return false, nil
		}

		if err := os.Remove(fPath); err != nil {
			return false, fmt.Errorf("error removing netplan vlan dropin: %w", err)
		}
		return true, nil
	}

	if err := sn.write(dropin, sn.vlanDropinFile()); err != nil {
		return false, fmt.Errorf("failed to write netplan vlan drop-in config: %+v", err)
	}

	return true, nil
}