Skip to content

Commit 8c09d53

Browse files
committed
v1beta2 initial - 1
1 parent 9012d97 commit 8c09d53

16 files changed

+284
-282
lines changed

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ generate-deepcopy: $(DEEPCOPY_GEN_TARGETS) ## Generate code containing DeepCopy,
7373
api/%/zz_generated.deepcopy.go: bin/controller-gen $(DEEPCOPY_GEN_INPUTS)
7474
controller-gen object:headerFile="hack/boilerplate.go.txt" paths="./..."
7575

76-
CONVERSION_GEN_TARGET=$(shell find api -type d -name "v*" -exec echo {}\/zz_generated.conversion.go \;)
76+
CONVERSION_GEN_TARGET=$(shell find api -type d -name "v*1" -exec echo {}\/zz_generated.conversion.go \;)
7777
CONVERSION_GEN_INPUTS=$(shell find ./api -name "*test*" -prune -o -name "*zz_generated*" -prune -o -type f -print)
7878
.PHONY: generate-conversion
7979
generate-conversion: $(CONVERSION_GEN_TARGET) ## Generate code to convert api/v1beta1 to api/v1beta2
@@ -194,7 +194,7 @@ test: generate-mocks lint bin/ginkgo bin/kubectl bin/kube-apiserver bin/etcd ##
194194
./hack/testing_ginkgo_recover_statements.sh --remove; exit $$EXIT_STATUS
195195

196196
.PHONY: generate-mocks
197-
generate-mocks: bin/mockgen generate-deepcopy generate-conversion pkg/mocks/mock_client.go $(shell find ./pkg/mocks -type f -name "mock*.go") ## Generate mocks needed for testing. Primarily mocks of the cloud package.
197+
generate-mocks: bin/mockgen generate-deepcopy pkg/mocks/mock_client.go $(shell find ./pkg/mocks -type f -name "mock*.go") ## Generate mocks needed for testing. Primarily mocks of the cloud package.
198198
pkg/mocks/mock%.go: $(shell find ./pkg/cloud -type f -name "*test*" -prune -o -print)
199199
go generate ./...
200200

api/v1beta1/cloudstackcluster_types.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ import (
2424
)
2525

2626
const (
27-
ClusterFinalizer = "cloudstackcluster.infrastructure.cluster.x-k8s.io"
28-
//defaultIdentityRefKind = "Secret"
27+
ClusterFinalizer = "cloudstackcluster.infrastructure.cluster.x-k8s.io"
28+
DefaultIdentityRefKind = "Secret"
2929
CloudStackClusterLabelName = "cloudstackcluster.infrastructure.cluster.x-k8s.io/name"
3030
NetworkTypeIsolated = "Isolated"
31-
NetworkTypeShared = "Shared"
31+
// NetworkTypeShared = "Shared"
3232
)
3333

3434
// CloudStackIdentityReference is a reference to an infrastructure

api/v1beta1/conversion.go

Lines changed: 134 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -17,33 +17,30 @@ limitations under the License.
1717
package v1beta1
1818

1919
import (
20+
"fmt"
2021
"github.com/pkg/errors"
2122
corev1 "k8s.io/api/core/v1"
22-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2323
conv "k8s.io/apimachinery/pkg/conversion"
2424
"sigs.k8s.io/cluster-api-provider-cloudstack/api/v1beta2"
25-
"strings"
2625
)
2726

2827
//nolint:golint,revive,stylecheck
2928
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+
}
3838
out.Spec = v1beta2.CloudStackClusterSpec{
3939
ControlPlaneEndpoint: in.Spec.ControlPlaneEndpoint,
4040
FailureDomains: getFailureDomains(in),
4141
Account: in.Spec.Account,
4242
Domain: in.Spec.Domain,
43-
IdentityRef: &v1beta2.CloudStackIdentityReference{
44-
Kind: in.Spec.IdentityRef.Kind,
45-
Name: in.Spec.IdentityRef.Name,
46-
},
43+
IdentityRef: identifyRef,
4744
}
4845

4946
out.Status = v1beta2.CloudStackClusterStatus{
@@ -59,63 +56,64 @@ func Convert_v1beta1_CloudStackCluster_To_v1beta2_CloudStackCluster(in *CloudSta
5956

6057
//nolint:golint,revive,stylecheck
6158
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)
9864
if err != nil {
9965
return err
10066
}
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-
}
11067
}
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+
}
11292
return nil
11393
}
11494

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) {
116114
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)
119117
if err != nil {
120118
return nil, err
121119
}
@@ -124,9 +122,9 @@ func getZoneMap(src *v1beta2.CloudStackCluster) (map[string]Zone, error) {
124122
return zoneMap, nil
125123
}
126124

127-
func getDomainID(src *v1beta2.CloudStackCluster) (string, error) {
125+
func getDomainID(csCluster *v1beta2.CloudStackCluster) (string, error) {
128126
var domainID string
129-
for _, value := range src.Status.CloudStackFailureDomainStatusMap {
127+
for _, value := range csCluster.Status.CloudStackFailureDomainStatusMap {
130128
if domainID == "" {
131129
domainID = value.DomainID
132130
} else if domainID != value.DomainID {
@@ -136,75 +134,99 @@ func getDomainID(src *v1beta2.CloudStackCluster) (string, error) {
136134
return domainID, nil
137135
}
138136

139-
func getZoneByMetaName(src *v1beta2.CloudStackCluster, metaName string) (Zone, error) {
137+
func getZoneByMetaName(csCluster *v1beta2.CloudStackCluster, metaName string) (Zone, error) {
140138
var zone Zone
141139
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 {
144142
err = nil
145143
zone = Zone{
146-
ID: failureDomains.Spec.Zone.ID,
147-
Name: failureDomains.Spec.Zone.Name,
144+
ID: failureDomain.Zone.ID,
145+
Name: failureDomain.Zone.Name,
148146
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,
152150
},
153151
}
154152
}
155153
}
156154
return zone, err
157155
}
158156

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,
191190
},
192191
},
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,
196197
},
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+
//},
197219
})
198220
}
199221
return failureDomains
200222
}
201223

202-
func getFailureDomainsStatusMap(src *CloudStackCluster) map[string]v1beta2.CloudStackFailureDomainStatus {
224+
func getFailureDomainsStatusMap(csCluster *CloudStackCluster) map[string]v1beta2.CloudStackFailureDomainStatus {
203225
failureDomainsStatusMap := map[string]v1beta2.CloudStackFailureDomainStatus{}
204-
for _, zone := range src.Spec.Zones {
226+
for _, zone := range csCluster.Spec.Zones {
205227
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,
208230
}
209231
}
210232
return failureDomainsStatusMap

api/v1beta2/cloudstackcluster_types.go

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package v1beta2
1818

1919
import (
20+
corev1 "k8s.io/api/core/v1"
2021
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2122
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
2223
"strings"
@@ -81,9 +82,26 @@ func (z *Zone) MetaName() string {
8182
return strings.ToLower(s)
8283
}
8384

85+
type FailureDomain struct {
86+
87+
// The ACS Zone for this failure domain.
88+
Zone Zone `json:"zone"`
89+
90+
// CloudStack account.
91+
// +optional
92+
Account string `json:"account,omitempty"`
93+
94+
// CloudStack domain.
95+
// +optional
96+
Domain string `json:"domain,omitempty"`
97+
98+
// +k8s:conversion-gen=false
99+
CredentialsRef *corev1.ObjectReference `json:"credentialsRef"`
100+
}
101+
84102
// CloudStackClusterSpec defines the desired state of CloudStackCluster.
85103
type CloudStackClusterSpec struct {
86-
FailureDomains []CloudStackFailureDomain `json:"failureDomains"`
104+
FailureDomains []FailureDomain `json:"failureDomains"`
87105

88106
// The kubernetes control plane endpoint.
89107
ControlPlaneEndpoint clusterv1.APIEndpoint `json:"controlPlaneEndpoint"`
@@ -153,5 +171,5 @@ type CloudStackClusterList struct {
153171
}
154172

155173
func init() {
156-
SchemeBuilder.Register(&CloudStackFailureDomain{}, &CloudStackFailureDomainList{})
174+
SchemeBuilder.Register(&CloudStackCluster{}, &CloudStackClusterList{})
157175
}

0 commit comments

Comments
 (0)