vsphere/internal/virtualdevice/virtual_machine_network_interface_subresource.go
func (r *NetworkInterfaceSubresource) Read(l object.VirtualDeviceList) error {
	log.Printf("[DEBUG] %s: Reading state", r)
	vd, err := r.FindVirtualDevice(l)
	if err != nil {
		return fmt.Errorf("cannot find network device: %s", err)
	}
	device, err := baseVirtualDeviceToBaseVirtualEthernetCard(vd)
	if err != nil {
		return err
	}

	// Determine the interface type, and set the field appropriately. As a fallback,
	// we actually set adapter_type here to "unknown" if we don't support the NIC
	// type, as we can determine all of the other settings without having to
	// worry about the adapter type, and on update, the adapter type will be
	// rectified by removing the existing NIC and replacing it with a new one.
	r.Set("adapter_type", virtualEthernetCardString(device))

	// The rest of the information we need to get by reading the attributes off
	// the base card object.
	card := device.GetVirtualEthernetCard()

	// Determine the network
	var netID string
	switch backing := card.Backing.(type) {
	case *types.VirtualEthernetCardNetworkBackingInfo:
		if backing.Network == nil {
			return fmt.Errorf("could not determine network information from NIC backing")
		}
		netID = backing.Network.Value
	case *types.VirtualEthernetCardOpaqueNetworkBackingInfo:
		onet, err := nsx.OpaqueNetworkFromNetworkID(r.client, backing.OpaqueNetworkId)
		if err != nil {
			return err
		}
		netID = onet.Reference().Value
	case *types.VirtualEthernetCardDistributedVirtualPortBackingInfo:
		pg, err := dvportgroup.FromKey(r.client, backing.Port.SwitchUuid, backing.Port.PortgroupKey)
		if err != nil {
			return err
		}
		netID = pg.Reference().Value
	default:
		return fmt.Errorf("unknown network interface backing %T", card.Backing)
	}
	r.Set("network_id", netID)

	r.Set("use_static_mac", card.AddressType == string(types.VirtualEthernetCardMacTypeManual))
	r.Set("mac_address", card.MacAddress)

	version := viapi.ParseVersionFromClient(r.client)
	if version.Newer(viapi.VSphereVersion{Product: version.Product, Major: 6}) {
		if card.ResourceAllocation != nil {
			r.Set("bandwidth_limit", card.ResourceAllocation.Limit)
			r.Set("bandwidth_reservation", card.ResourceAllocation.Reservation)
			r.Set("bandwidth_share_count", card.ResourceAllocation.Share.Shares)
			r.Set("bandwidth_share_level", card.ResourceAllocation.Share.Level)
		}
	}

	// Save the device key and address data
	ctlr, err := findControllerForDevice(l, vd)
	if err != nil {
		return err
	}
	if err := r.SaveDevIDs(vd, ctlr); err != nil {
		return err
	}
	log.Printf("[DEBUG] %s: Read finished (key and device address may have changed)", r)
	return nil
}
func (r *NetworkInterfaceSubresource) Read(l object.VirtualDeviceList) error {
	log.Printf("[DEBUG] %s: Reading state", r)
	vd, err := r.FindVirtualDevice(l)
	if err != nil {
		return fmt.Errorf("cannot find network device: %s", err)
	}
	device, err := baseVirtualDeviceToBaseVirtualEthernetCard(vd)
	if err != nil {
		return err
	}

	// Determine the interface type, and set the field appropriately. As a fallback,
	// we actually set adapter_type here to "unknown" if we don't support the NIC
	// type, as we can determine all of the other settings without having to
	// worry about the adapter type, and on update, the adapter type will be
	// rectified by removing the existing NIC and replacing it with a new one.
	r.Set("adapter_type", virtualEthernetCardString(device))

	// The rest of the information we need to get by reading the attributes off
	// the base card object.
	card := device.GetVirtualEthernetCard()

	// Determine the network
	var netID string
	switch backing := card.Backing.(type) {
	case *types.VirtualEthernetCardNetworkBackingInfo:
		if backing.Network == nil {
			return fmt.Errorf("could not determine network information from NIC backing")
		}
		netID = backing.Network.Value
	case *types.VirtualEthernetCardOpaqueNetworkBackingInfo:
		onet, err := nsx.OpaqueNetworkFromNetworkID(r.client, backing.OpaqueNetworkId)
		if err != nil {
			return err
		}
		netID = onet.Reference().Value
	case *types.VirtualEthernetCardDistributedVirtualPortBackingInfo:
		pg, err := dvportgroup.FromKey(r.client, backing.Port.SwitchUuid, backing.Port.PortgroupKey)
		if err != nil {
			return err
		}
		netID = pg.Reference().Value
	default:
		return fmt.Errorf("unknown network interface backing %T", card.Backing)
	}
	r.Set("network_id", netID)

	r.Set("use_static_mac", card.AddressType == string(types.VirtualEthernetCardMacTypeManual))
	r.Set("mac_address", card.MacAddress)

	version := viapi.ParseVersionFromClient(r.client)
	if version.Newer(viapi.VSphereVersion{Product: version.Product, Major: 6}) {
		if card.ResourceAllocation != nil {
			r.Set("bandwidth_limit", card.ResourceAllocation.Limit)
			r.Set("bandwidth_reservation", card.ResourceAllocation.Reservation)
			r.Set("bandwidth_share_count", card.ResourceAllocation.Share.Shares)
			r.Set("bandwidth_share_level", card.ResourceAllocation.Share.Level)
		}
	}

	// Save the device key and address data
	ctlr, err := findControllerForDevice(l, vd)
	if err != nil {
		return err
	}
	if err := r.SaveDevIDs(vd, ctlr); err != nil {
		return err
	}
	log.Printf("[DEBUG] %s: Read finished (key and device address may have changed)", r)
	return nil
}
func ( r * NetworkInterfaceSubresource ) Read ( l object . VirtualDeviceList ) error { log . Printf ( " " , r ) vd , err := r . FindVirtualDevice ( l ) if err != nil { return fmt . Errorf ( " " , err ) } device , err := baseVirtualDeviceToBaseVirtualEthernetCard ( vd ) if err != nil { return err } // Determine the interface type, and set the field appropriately. As a fallback, // we actually set adapter_type here to "unknown" if we don't support the NIC // type, as we can determine all of the other settings without having to // worry about the adapter type, and on update, the adapter type will be // rectified by removing the existing NIC and replacing it with a new one. r . Set ( " " , virtualEthernetCardString ( device ) ) // The rest of the information we need to get by reading the attributes off // the base card object. card := device . GetVirtualEthernetCard ( ) // Determine the network var netID string switch backing := card . Backing . ( type ) { case * types . VirtualEthernetCardNetworkBackingInfo : if backing . Network == nil { return fmt . Errorf ( " " ) } netID = backing . Network . Value case * types . VirtualEthernetCardOpaqueNetworkBackingInfo : onet , err := nsx . OpaqueNetworkFromNetworkID ( r . client , backing . OpaqueNetworkId ) if err != nil { return err } netID = onet . Reference ( ) . Value case * types . VirtualEthernetCardDistributedVirtualPortBackingInfo : pg , err := dvportgroup . FromKey ( r . client , backing . Port . SwitchUuid , backing . Port . PortgroupKey ) if err != nil { return err } netID = pg . Reference ( ) . Value default : return fmt . Errorf ( " " , card . Backing ) } r . Set ( " " , netID ) r . Set ( " " , card . AddressType == string ( types . VirtualEthernetCardMacTypeManual ) ) r . Set ( " " , card . MacAddress ) version := viapi . ParseVersionFromClient ( r . client ) if version . Newer ( viapi . VSphereVersion { Product : version . Product , Major : 6 } ) { if card . ResourceAllocation != nil { r . Set ( " " , card . ResourceAllocation . Limit ) r . Set ( " " , card . ResourceAllocation . Reservation ) r . Set ( " " , card . ResourceAllocation . Share . Shares ) r . Set ( " " , card . ResourceAllocation . Share . Level ) } } // Save the device key and address data ctlr , err := findControllerForDevice ( l , vd ) if err != nil { return err } if err := r . SaveDevIDs ( vd , ctlr ) ; err != nil { return err } log . Printf ( " " , r ) return nil }
// Read reads a vsphere_virtual_machine network_interface sub-resource.
Read reads a vsphere_virtual_machine network_interface sub - resource .