Skip to content

Commit

Permalink
[CAFV-130] Upgrade API to v1beta2 (#374)
Browse files Browse the repository at this point in the history
* creation of v1beta2 files and conversions for v1beta1

* fix errors in manual conversions

* generate crds

* fix typos in comments for v1alpha4 conversion files

* refactor controllers to use v1beta2

* fix incorrect storageversion on v1beta1 objects

* update example cluster manifest

* update conversion funcs

* marshal and unmarshall pointer

* fixing issues introduced by additional api change occuring in the middle of an api upgrade

* remove dependent targets from vendor target

* fix missing marshal
  • Loading branch information
abaruni authored Feb 22, 2023
1 parent 4a81f44 commit 6efd28f
Show file tree
Hide file tree
Showing 52 changed files with 3,176 additions and 642 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
.idea/*
bin/*
out/*
tools/*
10 changes: 5 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ capi: generate fmt vet vendor
docker tag cluster-api-provider-cloud-director:$(version) $(IMG).$(GITCOMMIT)
docker push $(IMG)

vendor: generate fmt vet
vendor:
go mod edit -go=1.17
go mod tidy -compat=1.17
go mod vendor
Expand All @@ -168,13 +168,13 @@ release-manifests: $(KUSTOMIZE)
mkdir -p $(MANIFEST_DIR)
$(KUSTOMIZE) build config/default > $(MANIFEST_DIR)/infrastructure-components.yaml

autogen-files: manifests generate conversion release-manifests
autogen-files: manifests generate generate-conversions release-manifests

# Add a target to download and build conversion-gen; and then run it with the below params
generate_conversions: ## Runs Go related generate targets.
rm -f $(GITROOT)/api/v1alpha4/zz_generated.conversion.*
generate-conversions: ## Runs Go related generate targets.
rm -f $(GITROOT)/api/*/zz_generated.conversion.*
$(CONVERSION_GEN) \
--input-dirs=./api/v1alpha4 \
--input-dirs=./api/v1alpha4,./api/v1beta1 \
--build-tag=ignore_autogenerated_conversions \
--output-file-base=zz_generated.conversion \
--go-header-file=./boilerplate.go.txt
Expand Down
37 changes: 37 additions & 0 deletions PROJECT
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# Code generated by tool. DO NOT EDIT.
# This file is used to track the info used to scaffold your project
# and allow the plugins properly work.
# More info: https://book.kubebuilder.io/reference/project-config.html
domain: cluster.x-k8s.io
layout:
- go.kubebuilder.io/v3
Expand Down Expand Up @@ -65,4 +69,37 @@ resources:
webhooks:
conversion: true
webhookVersion: v1
- api:
crdVersion: v1
namespaced: true
domain: cluster.x-k8s.io
group: infrastructure
kind: VCDMachine
path: github.com/vmware/cluster-api-provider-cloud-director/api/v1beta2
version: v1beta2
webhooks:
conversion: true
webhookVersion: v1
- api:
crdVersion: v1
namespaced: true
domain: cluster.x-k8s.io
group: infrastructure
kind: VCDCluster
path: github.com/vmware/cluster-api-provider-cloud-director/api/v1beta2
version: v1beta2
webhooks:
conversion: true
webhookVersion: v1
- api:
crdVersion: v1
namespaced: true
domain: cluster.x-k8s.io
group: infrastructure
kind: VCDMachineTemplate
path: github.com/vmware/cluster-api-provider-cloud-director/api/v1beta2
version: v1beta2
webhooks:
conversion: true
webhookVersion: v1
version: "3"
30 changes: 15 additions & 15 deletions api/v1alpha4/conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,33 @@
package v1alpha4

import (
"github.com/vmware/cluster-api-provider-cloud-director/api/v1beta1"
"github.com/vmware/cluster-api-provider-cloud-director/api/v1beta2"
"k8s.io/apimachinery/pkg/conversion"
)

func Convert_v1beta1_VCDClusterSpec_To_v1alpha4_VCDClusterSpec(in *v1beta1.VCDClusterSpec, out *VCDClusterSpec, s conversion.Scope) error {
return autoConvert_v1beta1_VCDClusterSpec_To_v1alpha4_VCDClusterSpec(in, out, s)
func Convert_v1beta2_VCDClusterSpec_To_v1alpha4_VCDClusterSpec(in *v1beta2.VCDClusterSpec, out *VCDClusterSpec, s conversion.Scope) error {
return autoConvert_v1beta2_VCDClusterSpec_To_v1alpha4_VCDClusterSpec(in, out, s)
}

func Convert_v1alpha4_VCDMachineSpec_To_v1beta1_VCDMachineSpec(in *VCDMachineSpec, out *v1beta1.VCDMachineSpec, s conversion.Scope) error {
return autoConvert_v1alpha4_VCDMachineSpec_To_v1beta1_VCDMachineSpec(in, out, s)
func Convert_v1alpha4_VCDMachineSpec_To_v1beta2_VCDMachineSpec(in *VCDMachineSpec, out *v1beta2.VCDMachineSpec, s conversion.Scope) error {
return autoConvert_v1alpha4_VCDMachineSpec_To_v1beta2_VCDMachineSpec(in, out, s)
}

func Convert_v1beta1_VCDMachineSpec_To_v1alpha4_VCDMachineSpec(in *v1beta1.VCDMachineSpec, out *VCDMachineSpec, s conversion.Scope) error {
return autoConvert_v1beta1_VCDMachineSpec_To_v1alpha4_VCDMachineSpec(in, out, s)
func Convert_v1beta2_VCDMachineSpec_To_v1alpha4_VCDMachineSpec(in *v1beta2.VCDMachineSpec, out *VCDMachineSpec, s conversion.Scope) error {
return autoConvert_v1beta2_VCDMachineSpec_To_v1alpha4_VCDMachineSpec(in, out, s)
}
func Convert_v1beta1_VCDClusterStatus_To_v1alpha4_VCDClusterStatus(in *v1beta1.VCDClusterStatus, out *VCDClusterStatus, s conversion.Scope) error {
func Convert_v1beta2_VCDClusterStatus_To_v1alpha4_VCDClusterStatus(in *v1beta2.VCDClusterStatus, out *VCDClusterStatus, s conversion.Scope) error {
// Todo: check if VCDClusterStatus.vAppMetadata_Updated needs to be updated (VCDA-3532)
return autoConvert_v1beta1_VCDClusterStatus_To_v1alpha4_VCDClusterStatus(in, out, s)
return autoConvert_v1beta2_VCDClusterStatus_To_v1alpha4_VCDClusterStatus(in, out, s)
}

func Convert_v1alpha4_VCDClusterSpec_To_v1beta1_VCDClusterSpec(in *VCDClusterSpec, out *v1beta1.VCDClusterSpec, s conversion.Scope) error {
return autoConvert_v1alpha4_VCDClusterSpec_To_v1beta1_VCDClusterSpec(in, out, s)
func Convert_v1alpha4_VCDClusterSpec_To_v1beta2_VCDClusterSpec(in *VCDClusterSpec, out *v1beta2.VCDClusterSpec, s conversion.Scope) error {
return autoConvert_v1alpha4_VCDClusterSpec_To_v1beta2_VCDClusterSpec(in, out, s)
}

func Convert_v1beta1_VCDMachineStatus_To_v1alpha4_VCDMachineStatus(in *v1beta1.VCDMachineStatus, out *VCDMachineStatus, s conversion.Scope) error {
return autoConvert_v1beta1_VCDMachineStatus_To_v1alpha4_VCDMachineStatus(in, out, s)
func Convert_v1beta2_VCDMachineStatus_To_v1alpha4_VCDMachineStatus(in *v1beta2.VCDMachineStatus, out *VCDMachineStatus, s conversion.Scope) error {
return autoConvert_v1beta2_VCDMachineStatus_To_v1alpha4_VCDMachineStatus(in, out, s)
}
func Convert_v1beta1_UserCredentialsContext_To_v1alpha4_UserCredentialsContext(in *v1beta1.UserCredentialsContext, out *UserCredentialsContext, s conversion.Scope) error {
return autoConvert_v1beta1_UserCredentialsContext_To_v1alpha4_UserCredentialsContext(in, out, s)
func Convert_v1beta2_UserCredentialsContext_To_v1alpha4_UserCredentialsContext(in *v1beta2.UserCredentialsContext, out *UserCredentialsContext, s conversion.Scope) error {
return autoConvert_v1beta2_UserCredentialsContext_To_v1alpha4_UserCredentialsContext(in, out, s)
}
2 changes: 1 addition & 1 deletion api/v1alpha4/doc.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
// +groupName=infrastructure.cluster.x-k8s.io
// +k8s:conversion-gen=github.com/vmware/cluster-api-provider-cloud-director/api/v1beta1
// +k8s:conversion-gen=github.com/vmware/cluster-api-provider-cloud-director/api/v1beta2
package v1alpha4
4 changes: 2 additions & 2 deletions api/v1alpha4/groupversion_info.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
*/

// Package v1alpha4 contains API Schema definitions for the infrastructure v1alpha4 API group
//+kubebuilder:object:generate=true
//+groupName=infrastructure.cluster.x-k8s.io
// +kubebuilder:object:generate=true
// +groupName=infrastructure.cluster.x-k8s.io
package v1alpha4

import (
Expand Down
32 changes: 16 additions & 16 deletions api/v1alpha4/vcdcluster_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@ package v1alpha4

import (
"github.com/vmware/cloud-provider-for-cloud-director/pkg/vcdsdk"
"github.com/vmware/cluster-api-provider-cloud-director/api/v1beta1"
"github.com/vmware/cluster-api-provider-cloud-director/api/v1beta2"
utilconversion "sigs.k8s.io/cluster-api/util/conversion"
"sigs.k8s.io/controller-runtime/pkg/conversion"
"strings"
)

// ConvertTo converts this (v1alpha4)VCDCluster to the Hub version (v1beta1).
// ConvertTo converts this (v1alpha4) VCDCluster to the Hub version (v1beta2).
func (src *VCDCluster) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*v1beta1.VCDCluster)
if err := Convert_v1alpha4_VCDCluster_To_v1beta1_VCDCluster(src, dst, nil); err != nil {
dst := dstRaw.(*v1beta2.VCDCluster)
if err := Convert_v1alpha4_VCDCluster_To_v1beta2_VCDCluster(src, dst, nil); err != nil {
return err
}
// there is a possibility that the older version (v1alpha4) won't have the "cluster.x-k8s.io/conversion-data" annotation.
Expand All @@ -22,13 +22,13 @@ func (src *VCDCluster) ConvertTo(dstRaw conversion.Hub) error {
} else {
dst.Status.RdeVersionInUse = "1.0.0" // value will be checked by vcdcluster controller if RDE upgrade is necessary
}
// In v1alpha4 DNAT rules (and one-arm) are used by default. Therefore, use that in v1beta1
// In v1alpha4 DNAT rules (and one-arm) are used by default. Therefore, use that in v1beta2
dst.Spec.LoadBalancerConfigSpec.UseOneArm = true

// manually restore data
restored := v1beta1.VCDCluster{}
restored := &v1beta2.VCDCluster{}
if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok {
// in the case of missing v1beta1 annotation, the return value of UnmarshalData() would be (false, nil)
// in the case of missing v1beta2 annotation, the return value of UnmarshalData() would be (false, nil)
// so the return value would be nil NOT err
return err
}
Expand All @@ -46,24 +46,24 @@ func (src *VCDCluster) ConvertTo(dstRaw conversion.Hub) error {
return nil
}

// ConvertFrom converts from the Hub version (v1beta1) to this version (v1alpha4).
// ConvertFrom converts from the Hub version (v1beta2) to this version (v1alpha4).
func (dst *VCDCluster) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*v1beta1.VCDCluster)
if err := Convert_v1beta1_VCDCluster_To_v1alpha4_VCDCluster(src, dst, nil); err != nil {
src := srcRaw.(*v1beta2.VCDCluster)
if err := Convert_v1beta2_VCDCluster_To_v1alpha4_VCDCluster(src, dst, nil); err != nil {
return err
}
// add annotation "cluster.x-k8s.io/conversion-data" and return
return utilconversion.MarshalData(src, dst)
}

// ConvertTo converts this VCDClusterList to the Hub version (v1beta1).
// ConvertTo converts this VCDClusterList to the Hub version (v1beta2).
func (src *VCDClusterList) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*v1beta1.VCDClusterList)
return Convert_v1alpha4_VCDClusterList_To_v1beta1_VCDClusterList(src, dst, nil)
dst := dstRaw.(*v1beta2.VCDClusterList)
return Convert_v1alpha4_VCDClusterList_To_v1beta2_VCDClusterList(src, dst, nil)
}

// ConvertFrom converts from the Hub version (v1beta1) to this version (v1alpha4).
// ConvertFrom converts from the Hub version (v1beta2) to this version (v1alpha4).
func (dst *VCDClusterList) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*v1beta1.VCDClusterList)
return Convert_v1beta1_VCDClusterList_To_v1alpha4_VCDClusterList(src, dst, nil)
src := srcRaw.(*v1beta2.VCDClusterList)
return Convert_v1beta2_VCDClusterList_To_v1alpha4_VCDClusterList(src, dst, nil)
}
30 changes: 15 additions & 15 deletions api/v1alpha4/vcdmachine_conversion.go
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package v1alpha4

import (
"github.com/vmware/cluster-api-provider-cloud-director/api/v1beta1"
"github.com/vmware/cluster-api-provider-cloud-director/api/v1beta2"
utilconversion "sigs.k8s.io/cluster-api/util/conversion"
"sigs.k8s.io/controller-runtime/pkg/conversion"
)

// ConvertTo converts this (v1alpha4)VCDCluster to the Hub version (v1beta1).
// ConvertTo converts this (v1alpha4) VCDMachine to the Hub version (v1beta2).
func (src *VCDMachine) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*v1beta1.VCDMachine)
if err := Convert_v1alpha4_VCDMachine_To_v1beta1_VCDMachine(src, dst, nil); err != nil {
dst := dstRaw.(*v1beta2.VCDMachine)
if err := Convert_v1alpha4_VCDMachine_To_v1beta2_VCDMachine(src, dst, nil); err != nil {
return err
}

Expand All @@ -19,9 +19,9 @@ func (src *VCDMachine) ConvertTo(dstRaw conversion.Hub) error {
dst.Status.ProviderID = src.Spec.ProviderID

// manually restore data
restored := v1beta1.VCDMachine{}
restored := &v1beta2.VCDMachine{}
if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok {
// in the case of missing v1beta1 annotation, the return value of UnmarshalData() would be (false, nil)
// in the case of missing v1beta2 annotation, the return value of UnmarshalData() would be (false, nil)
// so the return value would be nil NOT err
return err
}
Expand All @@ -35,10 +35,10 @@ func (src *VCDMachine) ConvertTo(dstRaw conversion.Hub) error {
return nil
}

// ConvertFrom converts from the Hub version (v1beta1) to this version (v1alpha4).
// ConvertFrom converts from the Hub version (v1beta2) to this version (v1alpha4).
func (dst *VCDMachine) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*v1beta1.VCDMachine)
if err := Convert_v1beta1_VCDMachine_To_v1alpha4_VCDMachine(src, dst, nil); err != nil {
src := srcRaw.(*v1beta2.VCDMachine)
if err := Convert_v1beta2_VCDMachine_To_v1alpha4_VCDMachine(src, dst, nil); err != nil {
return err
}

Expand All @@ -47,14 +47,14 @@ func (dst *VCDMachine) ConvertFrom(srcRaw conversion.Hub) error {
return utilconversion.MarshalData(src, dst)
}

// ConvertTo converts this VCDMachineList to the Hub version (v1beta1).
// ConvertTo converts this VCDMachineList to the Hub version (v1beta2).
func (src *VCDMachineList) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*v1beta1.VCDMachineList)
return Convert_v1alpha4_VCDMachineList_To_v1beta1_VCDMachineList(src, dst, nil)
dst := dstRaw.(*v1beta2.VCDMachineList)
return Convert_v1alpha4_VCDMachineList_To_v1beta2_VCDMachineList(src, dst, nil)
}

// ConvertFrom converts from the Hub version (v1beta1) to this version (v1alpha4).
// ConvertFrom converts from the Hub version (v1beta2) to this version (v1alpha4).
func (dst *VCDMachineList) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*v1beta1.VCDMachineList)
return Convert_v1beta1_VCDMachineList_To_v1alpha4_VCDMachineList(src, dst, nil)
src := srcRaw.(*v1beta2.VCDMachineList)
return Convert_v1beta2_VCDMachineList_To_v1alpha4_VCDMachineList(src, dst, nil)
}
32 changes: 18 additions & 14 deletions api/v1alpha4/vcdmachinetemplate_conversion.go
Original file line number Diff line number Diff line change
@@ -1,40 +1,44 @@
package v1alpha4

import (
//"github.com/vmware/cluster-api-provider-cloud-director/api/v1beta1"
"github.com/vmware/cluster-api-provider-cloud-director/api/v1beta1"
"github.com/vmware/cluster-api-provider-cloud-director/api/v1beta2"
utilconversion "sigs.k8s.io/cluster-api/util/conversion"
"sigs.k8s.io/controller-runtime/pkg/conversion"
)

// ConvertTo converts this (v1alpha4)VCDCluster to the Hub version (v1beta1).
// ConvertTo converts this (v1alpha4) VCDMachineTemplate to the Hub version (v1beta2).
func (src *VCDMachineTemplate) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*v1beta1.VCDMachineTemplate)
dst := dstRaw.(*v1beta2.VCDMachineTemplate)
if err := Convert_v1alpha4_VCDMachineTemplate_To_v1beta2_VCDMachineTemplate(src, dst, nil); err != nil {
return err
}

if err := Convert_v1alpha4_VCDMachineTemplate_To_v1beta1_VCDMachineTemplate(src, dst, nil); err != nil {
restored := &v1beta2.VCDMachineTemplate{}
if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok {
return err
}

return nil
}

// ConvertFrom converts from the Hub version (v1beta1) to this version (v1alpha4).
// ConvertFrom converts from the Hub version (v1beta2) to this version (v1alpha4).
func (dst *VCDMachineTemplate) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*v1beta1.VCDMachineTemplate)
if err := Convert_v1beta1_VCDMachineTemplate_To_v1alpha4_VCDMachineTemplate(src, dst, nil); err != nil {
src := srcRaw.(*v1beta2.VCDMachineTemplate)
if err := Convert_v1beta2_VCDMachineTemplate_To_v1alpha4_VCDMachineTemplate(src, dst, nil); err != nil {
return err
}
// add annotation "cluster.x-k8s.io/conversion-data" and return
return utilconversion.MarshalData(src, dst)
}

// ConvertTo converts this VCDClusterList to the Hub version (v1beta1).
// ConvertTo converts this VCDMachineTemplateList to the Hub version (v1beta2).
func (src *VCDMachineTemplateList) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*v1beta1.VCDMachineTemplateList)
return Convert_v1alpha4_VCDMachineTemplateList_To_v1beta1_VCDMachineTemplateList(src, dst, nil)
dst := dstRaw.(*v1beta2.VCDMachineTemplateList)
return Convert_v1alpha4_VCDMachineTemplateList_To_v1beta2_VCDMachineTemplateList(src, dst, nil)
}

// ConvertFrom converts from the Hub version (v1beta1) to this version (v1alpha4).
// ConvertFrom converts from the Hub version (v1beta2) to this version (v1alpha4).
func (dst *VCDMachineTemplateList) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*v1beta1.VCDMachineTemplateList)
return Convert_v1beta1_VCDMachineTemplateList_To_v1alpha4_VCDMachineTemplateList(src, dst, nil)
src := srcRaw.(*v1beta2.VCDMachineTemplateList)
return Convert_v1beta2_VCDMachineTemplateList_To_v1alpha4_VCDMachineTemplateList(src, dst, nil)
}
Loading

0 comments on commit 6efd28f

Please sign in to comment.