diff --git a/pkg/controller/vsphere/session/session.go b/pkg/controller/vsphere/session/session.go index 69584e3f9ae0589a1d5f027302899d7f301081e8..497e2cf98885733a1ce1180e7fb35eba25346182 100644 --- a/pkg/controller/vsphere/session/session.go +++ b/pkg/controller/vsphere/session/session.go @@ -67,6 +67,7 @@ func GetOrCreate( return &session, nil } } + klog.Infof("No existing vCenter session found, creating new session") soapURL, err := soap.ParseURL(server) if err != nil { @@ -76,20 +77,26 @@ func GetOrCreate( return nil, fmt.Errorf("error parsing vSphere URL %q", server) } - soapURL.User = url.UserPassword(username, password) - + // Set user to nil there for prevent login during client creation. + // See https://github.com/vmware/govmomi/blob/master/client.go#L91 + soapURL.User = nil client, err := govmomi.NewClient(ctx, soapURL, insecure) if err != nil { return nil, fmt.Errorf("error setting up new vSphere SOAP client: %w", err) } + // Set up user agent before login for being able to track mapi component in vcenter sessions list + client.UserAgent = "machineAPIvSphereProvider" + if err := client.Login(ctx, url.UserPassword(username, password)); err != nil { + return nil, fmt.Errorf("unable to login to vCenter: %w", err) + } + session := Session{ Client: client, username: username, password: password, } - session.UserAgent = "machineAPIvSphereProvider" session.Finder = find.NewFinder(session.Client.Client, false) dc, err := session.Finder.DatacenterOrDefault(ctx, datacenter)