From 7d9a954b7280ca495c31e3f96668f0b352cf2ba9 Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Thu, 11 Apr 2024 16:12:14 -0700 Subject: [PATCH] fix: make cns.Client independent of vim25.Client --- cns/client.go | 22 +++++++++++++++++++--- cns/client_test.go | 2 -- govc/flags/client.go | 1 - 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/cns/client.go b/cns/client.go index a526ff46f..c69fcf09d 100644 --- a/cns/client.go +++ b/cns/client.go @@ -61,9 +61,25 @@ type Client struct { // NewClient creates a new CNS client func NewClient(ctx context.Context, c *vim25.Client) (*Client, error) { sc := c.Client.NewServiceClient(Path, Namespace) - sc.Namespace = c.Namespace - sc.Version = c.Version - return &Client{sc, sc, c}, nil + + // Use current vCenter vsan version by default + err := sc.UseServiceVersion(Namespace) + if err != nil { + return nil, err + } + + // PropertyCollector related methods (task.Wait) need to send requests to vim25.Path (/sdk). + // This vim25.Client shares the same http.Transport and Namespace/Version, but requests to '/sdk' + rt := sc.NewServiceClient(vim25.Path, Namespace) + rt.Version = sc.Version + + vc := &vim25.Client{ + ServiceContent: c.ServiceContent, + Client: rt, + RoundTripper: rt, + } + + return &Client{sc, sc, vc}, nil } // RoundTrip dispatches to the RoundTripper field. diff --git a/cns/client_test.go b/cns/client_test.go index bb72f4ee0..cbd3f8f26 100644 --- a/cns/client_test.go +++ b/cns/client_test.go @@ -561,8 +561,6 @@ func TestClient(t *testing.T) { if err != nil { t.Fatal(err) } - // UseServiceVersion sets soap.Client.Version to the current version of the service endpoint via /sdk/vsanServiceVersions.xml - remoteVcClient.UseServiceVersion("vsan") remoteCnsClient, err := NewClient(ctx, remoteVcClient.Client) if err != nil { t.Fatal(err) diff --git a/govc/flags/client.go b/govc/flags/client.go index 9b04882ca..b36ebdf90 100644 --- a/govc/flags/client.go +++ b/govc/flags/client.go @@ -430,7 +430,6 @@ func (flag *ClientFlag) CnsClient() (*cns.Client, error) { if err != nil { return nil, err } - _ = vc.UseServiceVersion("vsan") c, err := cns.NewClient(context.Background(), vc) if err != nil {