code: func (connection *VSphereConnection) NewClient(ctx context.Context) (*vim25.Client, error) {
  	url, err := soap.ParseURL(net.JoinHostPort(connection.Hostname, connection.Port))
  	if err != nil {
  		klog.Errorf("Failed to parse URL: %s. err: %+v", url, err)
  		return nil, err
  	}
  
  	sc := soap.NewClient(url, connection.Insecure)
  
  	if ca := connection.CACert; ca != "" {
  		if err := sc.SetRootCAs(ca); err != nil {
  			return nil, err
  		}
  	}
  
  	tpHost := connection.Hostname + ":" + connection.Port
  	sc.SetThumbprint(tpHost, connection.Thumbprint)
  
  	client, err := vim25.NewClient(ctx, sc)
  	if err != nil {
  		klog.Errorf("Failed to create new client. err: %+v", err)
  		return nil, err
  	}
  
  	k8sVersion := version.Get().GitVersion
  	client.UserAgent = fmt.Sprintf("kubernetes-cloudprovider/%s", k8sVersion)
  
  	err = connection.login(ctx, client)
  	if err != nil {
  		return nil, err
  	}
  	if klog.V(3) {
  		s, err := session.NewManager(client).UserSession(ctx)
  		if err == nil {
  			klog.Infof("New session ID for '%s' = %s", s.UserName, s.Key)
  		}
  	}
  
  	if connection.RoundTripperCount == 0 {
  		connection.RoundTripperCount = RoundTripperDefaultCount
  	}
  	client.RoundTripper = vim25.Retry(client.RoundTripper, vim25.TemporaryNetworkError(int(connection.RoundTripperCount)))
  	return client, nil
  }
docs: // NewClient creates a new govmomi client for the VSphereConnection obj