@@ -3,6 +3,7 @@ package conversion
33import (
44 "context"
55 "errors"
6+ "fmt"
67 "net/url"
78 "path"
89 "time"
@@ -100,7 +101,7 @@ func fixNoVCentersScenario(platform *vsphere.Platform) {
100101 }
101102}
102103
103- func fixTechPreviewZonalFailureDomainsScenario (platform * vsphere.Platform , finder * find.Finder ) error {
104+ func fixTechPreviewZonalFailureDomainsScenario (platform * vsphere.Platform , finders map [ string ] * find.Finder ) error {
104105 if len (platform .FailureDomains ) > 0 {
105106 var err error
106107
@@ -109,27 +110,36 @@ func fixTechPreviewZonalFailureDomainsScenario(platform *vsphere.Platform, finde
109110 datastore := platform .FailureDomains [i ].Topology .Datastore
110111 folder := platform .FailureDomains [i ].Topology .Folder
111112 datacenter := platform .FailureDomains [i ].Topology .Datacenter
112-
113+ vCenter := platform .FailureDomains [i ].Server
114+ fdName := platform .FailureDomains [i ].Name
115+
116+ finder , ok := finders [vCenter ]
117+ if ! ok {
118+ // This is when invalid config happens. There is a check later in cycle that will print it out. For now,
119+ // lets just log warning and return.
120+ localLogger .Warnf ("unable to find finder for vCenter %v in order to do upconvert" , vCenter )
121+ return nil
122+ }
113123 platform .FailureDomains [i ].Topology .ComputeCluster , err = SetObjectPath (finder , "host" , computeCluster , datacenter )
114124 if err != nil {
115- return err
125+ return fmt . Errorf ( "unable to SetObjectPath for compute cluster of failure domain %s: %w" , fdName , err )
116126 }
117127
118128 platform .FailureDomains [i ].Topology .Datastore , err = SetObjectPath (finder , "datastore" , datastore , datacenter )
119129 if err != nil {
120- return err
130+ return fmt . Errorf ( "unable to SetObjectPath for datastore of failure domain %s: %w" , fdName , err )
121131 }
122132
123133 platform .FailureDomains [i ].Topology .Folder , err = SetObjectPath (finder , "vm" , folder , datacenter )
124134 if err != nil {
125- return err
135+ return fmt . Errorf ( "unable to SetObjectPath for folder of failure domain %s: %w" , fdName , err )
126136 }
127137 }
128138 }
129139 return nil
130140}
131141
132- func fixLegacyPlatformScenario (platform * vsphere.Platform , finder * find.Finder ) error {
142+ func fixLegacyPlatformScenario (platform * vsphere.Platform , finders map [ string ] * find.Finder ) error {
133143 if len (platform .FailureDomains ) == 0 {
134144 var err error
135145 localLogger .Warn ("vsphere topology fields are now deprecated; please use failureDomains" )
@@ -145,6 +155,10 @@ func fixLegacyPlatformScenario(platform *vsphere.Platform, finder *find.Finder)
145155 platform .FailureDomains [0 ].Topology .Networks = make ([]string , 1 )
146156 platform .FailureDomains [0 ].Topology .Networks [0 ] = platform .DeprecatedNetwork
147157
158+ finder , ok := finders [platform .FailureDomains [0 ].Server ]
159+ if ! ok {
160+ return fmt .Errorf ("unable to find finder for vCenter %v" , platform .FailureDomains [0 ].Server )
161+ }
148162 platform .FailureDomains [0 ].Topology .ComputeCluster , err = SetObjectPath (finder , "host" , platform .DeprecatedCluster , platform .DeprecatedDatacenter )
149163 if err != nil {
150164 return err
@@ -165,18 +179,23 @@ func fixLegacyPlatformScenario(platform *vsphere.Platform, finder *find.Finder)
165179
166180// ConvertInstallConfig modifies a given platform spec for the new requirements.
167181func ConvertInstallConfig (config * types.InstallConfig ) error {
182+ var err error
168183 platform := config .Platform .VSphere
169184
170185 fixNoVCentersScenario (platform )
171- finder , err := GetFinder (platform .VCenters [0 ].Server , platform .VCenters [0 ].Username , platform .VCenters [0 ].Password )
172- if err != nil {
173- return err
186+ finders := make (map [string ]* find.Finder )
187+ for _ , vcenter := range platform .VCenters {
188+ finder , err := GetFinder (vcenter .Server , vcenter .Username , vcenter .Password )
189+ if err != nil {
190+ return err
191+ }
192+ finders [vcenter .Server ] = finder
174193 }
175- err = fixTechPreviewZonalFailureDomainsScenario (platform , finder )
194+ err = fixTechPreviewZonalFailureDomainsScenario (platform , finders )
176195 if err != nil {
177196 return err
178197 }
179- err = fixLegacyPlatformScenario (platform , finder )
198+ err = fixLegacyPlatformScenario (platform , finders )
180199 if err != nil {
181200 return err
182201 }
0 commit comments