Skip to content

Commit 23e8a39

Browse files
committed
HIVE-2391: vSphere zonal support
1 parent 4929f16 commit 23e8a39

33 files changed

+3000
-262
lines changed

apis/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ require (
1313

1414
require (
1515
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
16-
github.com/go-logr/logr v1.4.2 // indirect
16+
github.com/go-logr/logr v1.4.2
1717
github.com/gogo/protobuf v1.3.2 // indirect
1818
github.com/google/gofuzz v1.2.0 // indirect
1919
github.com/json-iterator/go v1.1.12 // indirect

apis/hive/v1/clusterdeprovision_types.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,10 @@ type VSphereClusterDeprovision struct {
131131
// necessary for communicating with the VCenter.
132132
CertificatesSecretRef corev1.LocalObjectReference `json:"certificatesSecretRef"`
133133
// VCenter is the vSphere vCenter hostname.
134+
// Deprecated: use VCenters instead
134135
VCenter string `json:"vCenter"`
136+
// VCenters are potentially multiple vCenter hostnames. Prefer this field over VCenter.
137+
VCenters []string `json:"vCenters"`
135138
}
136139

137140
// OvirtClusterDeprovision contains oVirt-specific configuration for a ClusterDeprovision

apis/hive/v1/vsphere/platform.go

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
package vsphere
22

33
import (
4+
"fmt"
5+
"github.com/go-logr/logr"
6+
configv1 "github.com/openshift/api/config/v1"
47
corev1 "k8s.io/api/core/v1"
8+
"strings"
59
)
610

711
// Platform stores any global configuration used for vSphere platforms.
812
type Platform struct {
913
// VCenter is the domain name or IP address of the vCenter.
14+
// Deprecated: Please use Platform.VSphere instead
15+
// See also: Platform.ConvertDeprecatedFields
1016
VCenter string `json:"vCenter"`
1117

1218
// CredentialsSecretRef refers to a secret that contains the vSphere account access
@@ -18,18 +24,90 @@ type Platform struct {
1824
CertificatesSecretRef corev1.LocalObjectReference `json:"certificatesSecretRef"`
1925

2026
// Datacenter is the name of the datacenter to use in the vCenter.
27+
// Deprecated: Please use Platform.VSphere instead
28+
// See also: Platform.ConvertDeprecatedFields
2129
Datacenter string `json:"datacenter"`
2230

2331
// DefaultDatastore is the default datastore to use for provisioning volumes.
32+
// Deprecated: Please use Platform.VSphere instead
33+
// See also: Platform.ConvertDeprecatedFields
2434
DefaultDatastore string `json:"defaultDatastore"`
2535

2636
// Folder is the name of the folder that will be used and/or created for
2737
// virtual machines.
38+
// Deprecated: Please use Platform.VSphere instead
39+
// See also: Platform.ConvertDeprecatedFields
2840
Folder string `json:"folder,omitempty"`
2941

3042
// Cluster is the name of the cluster virtual machines will be cloned into.
43+
// Deprecated: Please use Platform.VSphere instead
44+
// See also: Platform.ConvertDeprecatedFields
3145
Cluster string `json:"cluster,omitempty"`
3246

3347
// Network specifies the name of the network to be used by the cluster.
48+
// Deprecated: Please use Platform.VSphere instead
49+
// See also: Platform.ConvertDeprecatedFields
3450
Network string `json:"network,omitempty"`
51+
52+
// VSphere is the full spec of the vSphere platform.
53+
VSphere *configv1.VSpherePlatformSpec `json:"vSphere,omitempty"`
54+
}
55+
56+
func (p *Platform) ConvertDeprecatedFields(logger logr.Logger) {
57+
if p.VSphere != nil {
58+
return
59+
}
60+
61+
p.VSphere = &configv1.VSpherePlatformSpec{
62+
VCenters: []configv1.VSpherePlatformVCenterSpec{
63+
{
64+
Server: p.VCenter,
65+
Port: 443,
66+
Datacenters: []string{p.Datacenter},
67+
},
68+
},
69+
FailureDomains: []configv1.VSpherePlatformFailureDomainSpec{
70+
{
71+
// names from https://github.com/openshift/installer/blob/f7731922a0f17a8339a3e837f72898ac77643611/pkg/types/vsphere/conversion/installconfig.go#L58-L61
72+
Name: "generated-failure-domain",
73+
Region: "generated-region",
74+
Zone: "generated-zone",
75+
Server: p.VCenter,
76+
Topology: configv1.VSpherePlatformTopology{
77+
Datacenter: p.Datacenter,
78+
Datastore: setDatastorePath(p.DefaultDatastore, p.Datacenter, logger),
79+
Folder: setFolderPath(p.Folder, p.Datacenter, logger),
80+
ComputeCluster: setComputeClusterPath(p.Cluster, p.Datacenter, logger),
81+
Networks: []string{p.Network},
82+
},
83+
},
84+
},
85+
}
86+
87+
}
88+
89+
// Copied (and slightly modified) from https://github.com/openshift/installer/blob/f7731922a0f17a8339a3e837f72898ac77643611/pkg/types/vsphere/conversion/installconfig.go#L75-L97
90+
91+
func setComputeClusterPath(cluster, datacenter string, logger logr.Logger) string {
92+
if cluster != "" && !strings.HasPrefix(cluster, "/") {
93+
logger.V(1).Info(fmt.Sprintf("computeCluster as a non-path is now depreciated please use the form: /%s/host/%s", datacenter, cluster))
94+
return fmt.Sprintf("/%s/host/%s", datacenter, cluster)
95+
}
96+
return cluster
97+
}
98+
99+
func setDatastorePath(datastore, datacenter string, logger logr.Logger) string {
100+
if datastore != "" && !strings.HasPrefix(datastore, "/") {
101+
logger.V(1).Info(fmt.Sprintf("datastore as a non-path is now depreciated please use the form: /%s/datastore/%s", datacenter, datastore))
102+
return fmt.Sprintf("/%s/datastore/%s", datacenter, datastore)
103+
}
104+
return datastore
105+
}
106+
107+
func setFolderPath(folder, datacenter string, logger logr.Logger) string {
108+
if folder != "" && !strings.HasPrefix(folder, "/") {
109+
logger.V(1).Info(fmt.Sprintf("folder as a non-path is now depreciated please use the form: /%s/vm/%s", datacenter, folder))
110+
return fmt.Sprintf("/%s/vm/%s", datacenter, folder)
111+
}
112+
return folder
35113
}

apis/hive/v1/vsphere/zz_generated.deepcopy.go

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apis/hive/v1/zz_generated.deepcopy.go

Lines changed: 7 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)