provider/vsphere/vsphere_discover.go
func buildAndSelectGuestIPs(ctx context.Context, vm *object.VirtualMachine) ([]string, error) {
	logger.Printf("[DEBUG] Discovering addresses for virtual machine %q", vm.Name())
	var addrs []string

	props, err := virtualMachineProperties(ctx, vm, []string{"guest.net"})
	if err != nil {
		return nil, fmt.Errorf("cannot fetch properties for VM %q: %s", vm.Name(), err)
	}

	if props.Guest == nil || props.Guest.Net == nil {
		logger.Printf("[WARN] No networking stack information available for %q or VMware tools not running", vm.Name())
		return nil, nil
	}

	// Now fetch all IP addresses, checking at the same time to see if the IP
	// address is eligible to be a primary IP address.
	for _, n := range props.Guest.Net {
		if n.IpConfig != nil {
			for _, addr := range n.IpConfig.IpAddress {
				if skipIPAddr(net.ParseIP(addr.IpAddress)) {
					continue
				}
				addrs = append(addrs, addr.IpAddress)
			}
		}
	}

	logger.Printf("[INFO] Discovered IP addresses for virtual machine %q: %s", vm.Name(), strings.Join(addrs, ","))
	return addrs, nil
}
func buildAndSelectGuestIPs(ctx context.Context, vm *object.VirtualMachine) ([]string, error) {
	logger.Printf("[DEBUG] Discovering addresses for virtual machine %q", vm.Name())
	var addrs []string

	props, err := virtualMachineProperties(ctx, vm, []string{"guest.net"})
	if err != nil {
		return nil, fmt.Errorf("cannot fetch properties for VM %q: %s", vm.Name(), err)
	}

	if props.Guest == nil || props.Guest.Net == nil {
		logger.Printf("[WARN] No networking stack information available for %q or VMware tools not running", vm.Name())
		return nil, nil
	}

	// Now fetch all IP addresses, checking at the same time to see if the IP
	// address is eligible to be a primary IP address.
	for _, n := range props.Guest.Net {
		if n.IpConfig != nil {
			for _, addr := range n.IpConfig.IpAddress {
				if skipIPAddr(net.ParseIP(addr.IpAddress)) {
					continue
				}
				addrs = append(addrs, addr.IpAddress)
			}
		}
	}

	logger.Printf("[INFO] Discovered IP addresses for virtual machine %q: %s", vm.Name(), strings.Join(addrs, ","))
	return addrs, nil
}
func buildAndSelectGuestIPs ( ctx context . Context , vm * object . VirtualMachine ) ( [ ] string , error ) { logger . Printf ( " " , vm . Name ( ) ) var addrs [ ] string props , err := virtualMachineProperties ( ctx , vm , [ ] string { " " } ) if err != nil { return nil , fmt . Errorf ( " " , vm . Name ( ) , err ) } if props . Guest == nil || props . Guest . Net == nil { logger . Printf ( " " , vm . Name ( ) ) return nil , nil } // Now fetch all IP addresses, checking at the same time to see if the IP // address is eligible to be a primary IP address. for _ , n := range props . Guest . Net { if n . IpConfig != nil { for _ , addr := range n . IpConfig . IpAddress { if skipIPAddr ( net . ParseIP ( addr . IpAddress ) ) { continue } addrs = append ( addrs , addr . IpAddress ) } } } logger . Printf ( " " , vm . Name ( ) , strings . Join ( addrs , " " ) ) return addrs , nil }
// buildAndSelectGuestIPs builds a list of IP addresses known to VMware tools,
// skipping local and auto-configuration addresses.
//
// The builder is non-discriminate and is only deterministic to the order that
// it discovers addresses in VMware tools.
buildAndSelectGuestIPs builds a list of IP addresses known to VMware tools skipping local and auto - configuration addresses . The builder is non - discriminate and is only deterministic to the order that it discovers addresses in VMware tools .