11package vsphere
22
33import (
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.
812type 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}
0 commit comments