@@ -17,33 +17,30 @@ limitations under the License.
17
17
package v1beta1
18
18
19
19
import (
20
+ "fmt"
20
21
"github.com/pkg/errors"
21
22
corev1 "k8s.io/api/core/v1"
22
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
23
23
conv "k8s.io/apimachinery/pkg/conversion"
24
24
"sigs.k8s.io/cluster-api-provider-cloudstack/api/v1beta2"
25
- "strings"
26
25
)
27
26
28
27
//nolint:golint,revive,stylecheck
29
28
func Convert_v1beta1_CloudStackCluster_To_v1beta2_CloudStackCluster (in * CloudStackCluster , out * v1beta2.CloudStackCluster , s conv.Scope ) error {
30
- out .Kind = in .Kind
31
- out .APIVersion = strings .ReplaceAll (in .APIVersion , "v1beta1" , "v1beta2" )
32
- out .Finalizers = in .Finalizers
33
- out .Labels = in .Labels
34
- out .Name = in .Name
35
- out .Namespace = in .Namespace
36
- out .OwnerReferences = in .OwnerReferences
37
-
29
+ out .ObjectMeta = in .ObjectMeta
30
+ var identifyRef * v1beta2.CloudStackIdentityReference
31
+ if in .Spec .IdentityRef != nil {
32
+ identifyRef = & v1beta2.CloudStackIdentityReference {}
33
+ err := Convert_v1beta1_CloudStackIdentityReference_To_v1beta2_CloudStackIdentityReference (in .Spec .IdentityRef , identifyRef , nil )
34
+ if err != nil {
35
+ return err
36
+ }
37
+ }
38
38
out .Spec = v1beta2.CloudStackClusterSpec {
39
39
ControlPlaneEndpoint : in .Spec .ControlPlaneEndpoint ,
40
40
FailureDomains : getFailureDomains (in ),
41
41
Account : in .Spec .Account ,
42
42
Domain : in .Spec .Domain ,
43
- IdentityRef : & v1beta2.CloudStackIdentityReference {
44
- Kind : in .Spec .IdentityRef .Kind ,
45
- Name : in .Spec .IdentityRef .Name ,
46
- },
43
+ IdentityRef : identifyRef ,
47
44
}
48
45
49
46
out .Status = v1beta2.CloudStackClusterStatus {
@@ -59,63 +56,64 @@ func Convert_v1beta1_CloudStackCluster_To_v1beta2_CloudStackCluster(in *CloudSta
59
56
60
57
//nolint:golint,revive,stylecheck
61
58
func Convert_v1beta2_CloudStackCluster_To_v1beta1_CloudStackCluster (in * v1beta2.CloudStackCluster , out * CloudStackCluster , scope conv.Scope ) error {
62
- out .Kind = in .Kind
63
- out .APIVersion = strings .ReplaceAll (in .APIVersion , "v1beta2" , "v1beta1" )
64
- out .Finalizers = in .Finalizers
65
- out .Labels = in .Labels
66
- out .Name = in .Name
67
- out .Namespace = in .Namespace
68
- out .OwnerReferences = in .OwnerReferences
69
-
70
- if len (in .Spec .FailureDomains ) > 0 {
71
- var zones []Zone
72
- for _ , failureDomains := range in .Spec .FailureDomains {
73
- zones = append (zones , Zone {
74
- Name : failureDomains .Spec .Zone .Name ,
75
- ID : failureDomains .Spec .Zone .ID ,
76
- Network : Network {
77
- Name : failureDomains .Spec .Zone .Network .Name ,
78
- ID : failureDomains .Spec .Zone .Network .ID ,
79
- Type : failureDomains .Spec .Zone .Network .Type ,
80
- },
81
- })
82
- }
83
- out .Spec = CloudStackClusterSpec {
84
- zones ,
85
- in .Spec .ControlPlaneEndpoint ,
86
- in .Spec .FailureDomains [0 ].Spec .Account ,
87
- in .Spec .FailureDomains [0 ].Spec .Domain ,
88
- & CloudStackIdentityReference {
89
- Kind : in .Spec .FailureDomains [0 ].Spec .CredentialsRef .Kind ,
90
- Name : in .Spec .FailureDomains [0 ].Spec .CredentialsRef .Name ,
91
- },
92
- }
93
- zoneMap , err := getZoneMap (in )
94
- if err != nil {
95
- return err
96
- }
97
- domainId , err := getDomainID (in )
59
+ out .ObjectMeta = in .ObjectMeta
60
+ var identifyRef * CloudStackIdentityReference
61
+ if in .Spec .IdentityRef != nil {
62
+ identifyRef = & CloudStackIdentityReference {}
63
+ err := Convert_v1beta2_CloudStackIdentityReference_To_v1beta1_CloudStackIdentityReference (in .Spec .IdentityRef , identifyRef , nil )
98
64
if err != nil {
99
65
return err
100
66
}
101
- out .Status = CloudStackClusterStatus {
102
- zoneMap ,
103
- in .Status .FailureDomains ,
104
- in .Status .Ready ,
105
- domainId ,
106
- in .Status .PublicIPID ,
107
- in .Status .PublicIPNetworkID ,
108
- in .Status .LBRuleID ,
109
- }
110
67
}
111
-
68
+ out .Spec = CloudStackClusterSpec {
69
+ getZones (in ),
70
+ in .Spec .ControlPlaneEndpoint ,
71
+ in .Spec .Account ,
72
+ in .Spec .Domain ,
73
+ identifyRef ,
74
+ }
75
+ zoneMap , err := getZoneMap (in )
76
+ if err != nil {
77
+ return err
78
+ }
79
+ domainId , err := getDomainID (in )
80
+ if err != nil {
81
+ return err
82
+ }
83
+ out .Status = CloudStackClusterStatus {
84
+ zoneMap ,
85
+ in .Status .FailureDomains ,
86
+ in .Status .Ready ,
87
+ domainId ,
88
+ in .Status .PublicIPID ,
89
+ in .Status .PublicIPNetworkID ,
90
+ in .Status .LBRuleID ,
91
+ }
112
92
return nil
113
93
}
114
94
115
- func getZoneMap (src * v1beta2.CloudStackCluster ) (map [string ]Zone , error ) {
95
+ // getZones maps failure domains to zones
96
+ func getZones (csCluster * v1beta2.CloudStackCluster ) []Zone {
97
+ var zones []Zone
98
+ for _ , failureDomain := range csCluster .Spec .FailureDomains {
99
+ zone := failureDomain .Zone
100
+ zones = append (zones , Zone {
101
+ Name : zone .Name ,
102
+ ID : zone .ID ,
103
+ Network : Network {
104
+ Name : zone .Network .Name ,
105
+ ID : zone .Network .ID ,
106
+ Type : zone .Network .Type ,
107
+ },
108
+ })
109
+ }
110
+ return zones
111
+ }
112
+
113
+ func getZoneMap (csCluster * v1beta2.CloudStackCluster ) (map [string ]Zone , error ) {
116
114
zoneMap := map [string ]Zone {}
117
- for key := range src .Status .CloudStackFailureDomainStatusMap {
118
- zone , err := getZoneByMetaName (src , key )
115
+ for key := range csCluster .Status .CloudStackFailureDomainStatusMap {
116
+ zone , err := getZoneByMetaName (csCluster , key )
119
117
if err != nil {
120
118
return nil , err
121
119
}
@@ -124,9 +122,9 @@ func getZoneMap(src *v1beta2.CloudStackCluster) (map[string]Zone, error) {
124
122
return zoneMap , nil
125
123
}
126
124
127
- func getDomainID (src * v1beta2.CloudStackCluster ) (string , error ) {
125
+ func getDomainID (csCluster * v1beta2.CloudStackCluster ) (string , error ) {
128
126
var domainID string
129
- for _ , value := range src .Status .CloudStackFailureDomainStatusMap {
127
+ for _ , value := range csCluster .Status .CloudStackFailureDomainStatusMap {
130
128
if domainID == "" {
131
129
domainID = value .DomainID
132
130
} else if domainID != value .DomainID {
@@ -136,75 +134,99 @@ func getDomainID(src *v1beta2.CloudStackCluster) (string, error) {
136
134
return domainID , nil
137
135
}
138
136
139
- func getZoneByMetaName (src * v1beta2.CloudStackCluster , metaName string ) (Zone , error ) {
137
+ func getZoneByMetaName (csCluster * v1beta2.CloudStackCluster , metaName string ) (Zone , error ) {
140
138
var zone Zone
141
139
err := errors .Errorf ("zone with meta %s not found" , metaName )
142
- for _ , failureDomains := range src .Spec .FailureDomains {
143
- if failureDomains . Spec .Zone .MetaName () == metaName {
140
+ for _ , failureDomain := range csCluster .Spec .FailureDomains {
141
+ if failureDomain .Zone .MetaName () == metaName {
144
142
err = nil
145
143
zone = Zone {
146
- ID : failureDomains . Spec .Zone .ID ,
147
- Name : failureDomains . Spec .Zone .Name ,
144
+ ID : failureDomain .Zone .ID ,
145
+ Name : failureDomain .Zone .Name ,
148
146
Network : Network {
149
- ID : failureDomains . Spec .Zone .Network .ID ,
150
- Name : failureDomains . Spec .Zone .Network .Name ,
151
- Type : failureDomains . Spec .Zone .Network .Type ,
147
+ ID : failureDomain .Zone .Network .ID ,
148
+ Name : failureDomain .Zone .Network .Name ,
149
+ Type : failureDomain .Zone .Network .Type ,
152
150
},
153
151
}
154
152
}
155
153
}
156
154
return zone , err
157
155
}
158
156
159
- func getFailureDomains (src * CloudStackCluster ) []v1beta2.CloudStackFailureDomain {
160
- failureDomains := make ([]v1beta2.CloudStackFailureDomain , len (src .Spec .Zones ))
161
- for _ , zone := range src .Spec .Zones {
162
- typeMeta := metav1.TypeMeta {
163
- Kind : src .Kind ,
164
- APIVersion : strings .ReplaceAll (src .APIVersion , "v1beta1" , "v1beta2" ),
165
- }
166
- objectMeta := metav1.ObjectMeta {
167
- Finalizers : src .Finalizers ,
168
- Labels : src .Labels ,
169
- Name : src .Name ,
170
- Namespace : src .Namespace ,
171
- OwnerReferences : src .OwnerReferences ,
172
- }
173
- failureDomains = append (failureDomains , v1beta2.CloudStackFailureDomain {
174
- TypeMeta : typeMeta ,
175
- ObjectMeta : objectMeta ,
176
- Spec : v1beta2.CloudStackFailureDomainSpec {
177
- Zone : v1beta2.Zone {
178
- Name : zone .Name ,
179
- ID : zone .ID ,
180
- Network : v1beta2.Network {
181
- ID : zone .Network .ID ,
182
- Name : zone .Network .Name ,
183
- Type : zone .Network .Type ,
184
- },
185
- },
186
- Account : src .Spec .Account ,
187
- Domain : src .Spec .Domain ,
188
- CredentialsRef : & corev1.ObjectReference {
189
- Kind : src .Spec .IdentityRef .Kind ,
190
- Name : src .Spec .IdentityRef .Name ,
157
+ // getFailureDomains maps v1beta1 zones to v1beta2 failure domains
158
+ func getFailureDomains (csCluster * CloudStackCluster ) []v1beta2.FailureDomain {
159
+ var failureDomains []v1beta2.FailureDomain
160
+ index := 0
161
+ for _ , zone := range csCluster .Spec .Zones {
162
+ index = index + 1
163
+ name := fmt .Sprintf ("%s-%s-%d" , csCluster .Name , "failuredomain" , index )
164
+ //objectMeta := metav1.ObjectMeta{
165
+ // Finalizers: []string{v1beta2.FailureDomainFinalizer},
166
+ // Labels: map[string]string{
167
+ // "cloudstackcluster.infrastructure.cluster.x-k8s.io/name": csCluster.Name,
168
+ // "cluster.x-k8s.io/cluster-name": csCluster.Name,
169
+ // },
170
+ // Name: fmt.Sprintf("%s-%s-%d", csCluster.Name, "failuredomain", index),
171
+ // Namespace: csCluster.Namespace,
172
+ // OwnerReferences: []metav1.OwnerReference{
173
+ // {
174
+ // APIVersion: "infrastructure.cluster.x-k8s.io/v1beta2",
175
+ // BlockOwnerDeletion: func(b bool) *bool { return &b }(true),
176
+ // Controller: func(b bool) *bool { return &b }(true),
177
+ // Kind: "CloudStackCluster",
178
+ // Name: csCluster.Name,
179
+ // },
180
+ // },
181
+ //}
182
+ failureDomains = append (failureDomains , v1beta2.FailureDomain {
183
+ Zone : v1beta2.Zone {
184
+ ID : zone .ID ,
185
+ Name : zone .Name ,
186
+ Network : v1beta2.Network {
187
+ ID : zone .Network .ID ,
188
+ Name : zone .Network .Name ,
189
+ Type : zone .Network .Type ,
191
190
},
192
191
},
193
- Status : v1beta2.CloudStackFailureDomainStatus {
194
- DomainID : src .Status .DomainID ,
195
- Ready : src .Status .Ready ,
192
+ Domain : csCluster .Spec .Domain ,
193
+ Account : csCluster .Spec .Account ,
194
+ CredentialsRef : & corev1.ObjectReference {
195
+ Kind : DefaultIdentityRefKind ,
196
+ Name : name ,
196
197
},
198
+ //Spec: v1beta2.CloudStackFailureDomainSpec{
199
+ // Zone: v1beta2.Zone{
200
+ // Name: zone.Name,
201
+ // ID: zone.ID,
202
+ // Network: v1beta2.Network{
203
+ // ID: zone.Network.ID,
204
+ // Name: zone.Network.Name,
205
+ // Type: zone.Network.Type,
206
+ // },
207
+ // },
208
+ // Account: csCluster.Spec.Account,
209
+ // Domain: csCluster.Spec.Domain,
210
+ // CredentialsRef: &corev1.ObjectReference{
211
+ // Kind: DefaultIdentityRefKind,
212
+ // Name: objectMeta.Name,
213
+ // },
214
+ //},
215
+ //Status: v1beta2.CloudStackFailureDomainStatus{
216
+ // DomainID: csCluster.Status.DomainID,
217
+ // Ready: csCluster.Status.Ready,
218
+ //},
197
219
})
198
220
}
199
221
return failureDomains
200
222
}
201
223
202
- func getFailureDomainsStatusMap (src * CloudStackCluster ) map [string ]v1beta2.CloudStackFailureDomainStatus {
224
+ func getFailureDomainsStatusMap (csCluster * CloudStackCluster ) map [string ]v1beta2.CloudStackFailureDomainStatus {
203
225
failureDomainsStatusMap := map [string ]v1beta2.CloudStackFailureDomainStatus {}
204
- for _ , zone := range src .Spec .Zones {
226
+ for _ , zone := range csCluster .Spec .Zones {
205
227
failureDomainsStatusMap [zone .MetaName ()] = v1beta2.CloudStackFailureDomainStatus {
206
- DomainID : src .Status .DomainID ,
207
- Ready : src .Status .Ready ,
228
+ DomainID : csCluster .Status .DomainID ,
229
+ Ready : csCluster .Status .Ready ,
208
230
}
209
231
}
210
232
return failureDomainsStatusMap
0 commit comments