Skip to content

Commit 7f183b1

Browse files
committed
fixed vsphere ConvertInstallConfig to support multi vCenter
1 parent e165b8a commit 7f183b1

File tree

2 files changed

+38
-16
lines changed

2 files changed

+38
-16
lines changed

pkg/types/vsphere/conversion/installconfig.go

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package conversion
33
import (
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.
167181
func 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
}

pkg/types/vsphere/conversion/installconfig_test.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ func validIpiInstallConfig() *types.InstallConfig {
334334
Name: "region-2-zone-2a",
335335
Region: "region-2",
336336
Zone: "zone-2a",
337-
Server: "",
337+
Server: "test-server",
338338
Topology: vsphere.Topology{
339339
Datacenter: "DC1",
340340
ComputeCluster: "/DC1/host/DC1_C0",
@@ -348,7 +348,7 @@ func validIpiInstallConfig() *types.InstallConfig {
348348
Name: "region-3-zone-3a",
349349
Region: "region-3",
350350
Zone: "zone-3a",
351-
Server: "",
351+
Server: "test-server",
352352
Topology: vsphere.Topology{
353353
Datacenter: "DC2",
354354
ComputeCluster: "/DC2/host/test-computecluster3",
@@ -362,7 +362,7 @@ func validIpiInstallConfig() *types.InstallConfig {
362362
Name: "region-4-zone-4a",
363363
Region: "region-4",
364364
Zone: "zone-4a",
365-
Server: "",
365+
Server: "test-server",
366366
Topology: vsphere.Topology{
367367
Datacenter: "DC3",
368368
ComputeCluster: "/DC3/host/DC3_C0",
@@ -518,15 +518,18 @@ func TestConvertInstallConfig(t *testing.T) {
518518

519519
// This section is duplication from ConvertInstallConfig()
520520
// which makes it easier to deal with the simulator and finder object.
521+
finders := make(map[string]*find.Finder)
522+
521523
fixNoVCentersScenario(platform)
524+
finders[platform.VCenters[0].Server] = finder
522525
if err != nil {
523526
assert.NoError(t, err)
524527
}
525-
err = fixTechPreviewZonalFailureDomainsScenario(platform, finder)
528+
err = fixTechPreviewZonalFailureDomainsScenario(platform, finders)
526529
if err != nil {
527530
assert.NoError(t, err)
528531
}
529-
err = fixLegacyPlatformScenario(platform, finder)
532+
err = fixLegacyPlatformScenario(platform, finders)
530533
if err != nil {
531534
assert.NoError(t, err)
532535
}

0 commit comments

Comments
 (0)