Skip to content

Commit

Permalink
Convert Image to use ImageFilfter instead of string
Browse files Browse the repository at this point in the history
Right now, the image for an OpenStackMachine can be defined either
its name via Spec.Image or via Spec.ImageUUID.

Now we will use a single parameter which would be of type ImageFilter.
  • Loading branch information
EmilienM committed Dec 18, 2023
1 parent 6df0da0 commit f880446
Show file tree
Hide file tree
Showing 35 changed files with 527 additions and 180 deletions.
31 changes: 29 additions & 2 deletions api/v1alpha5/conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,21 @@ func Convert_v1alpha8_PortOpts_To_v1alpha5_PortOpts(in *infrav1.PortOpts, out *P
}

func Convert_v1alpha5_OpenStackMachineSpec_To_v1alpha8_OpenStackMachineSpec(in *OpenStackMachineSpec, out *infrav1.OpenStackMachineSpec, s conversion.Scope) error {
return autoConvert_v1alpha5_OpenStackMachineSpec_To_v1alpha8_OpenStackMachineSpec(in, out, s)
err := autoConvert_v1alpha5_OpenStackMachineSpec_To_v1alpha8_OpenStackMachineSpec(in, out, s)
if err != nil {
return err
}

imageFilter := infrav1.ImageFilter{}
if in.Image != "" {
imageFilter.Name = in.Image
}
if in.ImageUUID != "" {
imageFilter.ID = in.ImageUUID
}
out.Image = imageFilter

return nil
}

func Convert_v1alpha8_APIServerLoadBalancer_To_v1alpha5_APIServerLoadBalancer(in *infrav1.APIServerLoadBalancer, out *APIServerLoadBalancer, s conversion.Scope) error {
Expand Down Expand Up @@ -435,5 +449,18 @@ func Convert_v1alpha5_OpenStackClusterStatus_To_v1alpha8_OpenStackClusterStatus(
}

func Convert_v1alpha8_OpenStackMachineSpec_To_v1alpha5_OpenStackMachineSpec(in *infrav1.OpenStackMachineSpec, out *OpenStackMachineSpec, s conversion.Scope) error {
return autoConvert_v1alpha8_OpenStackMachineSpec_To_v1alpha5_OpenStackMachineSpec(in, out, s)
err := autoConvert_v1alpha8_OpenStackMachineSpec_To_v1alpha5_OpenStackMachineSpec(in, out, s)
if err != nil {
return err
}

if in.Image.Name != "" {
out.Image = in.Image.Name
}

if in.Image.ID != "" {
out.ImageUUID = in.Image.ID
}

return nil
}
4 changes: 2 additions & 2 deletions api/v1alpha5/conversion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ func TestConvertFrom(t *testing.T) {
Spec: OpenStackMachineSpec{},
ObjectMeta: metav1.ObjectMeta{
Annotations: map[string]string{
"cluster.x-k8s.io/conversion-data": "{\"spec\":{\"cloudName\":\"\",\"flavor\":\"\"},\"status\":{\"ready\":false}}",
"cluster.x-k8s.io/conversion-data": "{\"spec\":{\"cloudName\":\"\",\"flavor\":\"\",\"image\":{}},\"status\":{\"ready\":false}}",
},
},
},
Expand All @@ -94,7 +94,7 @@ func TestConvertFrom(t *testing.T) {
Spec: OpenStackMachineTemplateSpec{},
ObjectMeta: metav1.ObjectMeta{
Annotations: map[string]string{
"cluster.x-k8s.io/conversion-data": "{\"spec\":{\"template\":{\"spec\":{\"cloudName\":\"\",\"flavor\":\"\"}}}}",
"cluster.x-k8s.io/conversion-data": "{\"spec\":{\"template\":{\"spec\":{\"cloudName\":\"\",\"flavor\":\"\",\"image\":{}}}}}",
},
},
},
Expand Down
7 changes: 3 additions & 4 deletions api/v1alpha5/zz_generated.conversion.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

31 changes: 27 additions & 4 deletions api/v1alpha6/conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,33 @@ func Convert_v1alpha6_OpenStackMachineSpec_To_v1alpha8_OpenStackMachineSpec(in *
// Networks were previously created first, so need to come before ports
out.Ports = append(ports, out.Ports...)
}

imageFilter := infrav1.ImageFilter{}
if in.Image != "" {
imageFilter.Name = in.Image
}
if in.ImageUUID != "" {
imageFilter.ID = in.ImageUUID
}
out.Image = imageFilter

return nil
}

func Convert_v1alpha8_OpenStackMachineSpec_To_v1alpha6_OpenStackMachineSpec(in *infrav1.OpenStackMachineSpec, out *OpenStackMachineSpec, s apiconversion.Scope) error {
err := autoConvert_v1alpha8_OpenStackMachineSpec_To_v1alpha6_OpenStackMachineSpec(in, out, s)
if err != nil {
return err
}

if in.Image.Name != "" {
out.Image = in.Image.Name
}

if in.Image.ID != "" {
out.ImageUUID = in.Image.ID
}

return nil
}

Expand Down Expand Up @@ -655,7 +682,3 @@ func Convert_v1alpha6_OpenStackClusterStatus_To_v1alpha8_OpenStackClusterStatus(

return nil
}

func Convert_v1alpha8_OpenStackMachineSpec_To_v1alpha6_OpenStackMachineSpec(in *infrav1.OpenStackMachineSpec, out *OpenStackMachineSpec, s apiconversion.Scope) error {
return autoConvert_v1alpha8_OpenStackMachineSpec_To_v1alpha6_OpenStackMachineSpec(in, out, s)
}
40 changes: 40 additions & 0 deletions api/v1alpha6/conversion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,38 @@ func TestFuzzyConversion(t *testing.T) {
status.ExternalNetwork.APIServerLoadBalancer = nil
}
},

func(v1alpha8Machine *infrav1.OpenStackMachine, c fuzz.Continue) {
c.FuzzNoCustom(v1alpha8Machine)

// None of the following fields have ever been set in v1alpha6
v1alpha8Machine.Spec.Image.Tags = []string{}
},

func(v1alpha8MachineTemplate *infrav1.OpenStackMachineTemplate, c fuzz.Continue) {
c.FuzzNoCustom(v1alpha8MachineTemplate)

// None of the following fields have ever been set in v1alpha6
v1alpha8MachineTemplate.Spec.Template.Spec.Image.Tags = []string{}
},

func(v1alpha8Cluster *infrav1.OpenStackCluster, c fuzz.Continue) {
c.FuzzNoCustom(v1alpha8Cluster)

// None of the following fields have ever been set in v1alpha6
if v1alpha8Cluster.Spec.Bastion != nil {
v1alpha8Cluster.Spec.Bastion.Instance.Image.Tags = []string{}
}
},

func(v1alpha8ClusterTemplate *infrav1.OpenStackClusterTemplate, c fuzz.Continue) {
c.FuzzNoCustom(v1alpha8ClusterTemplate)

// None of the following fields have ever been set in v1alpha6
if v1alpha8ClusterTemplate.Spec.Template.Spec.Bastion != nil {
v1alpha8ClusterTemplate.Spec.Template.Spec.Bastion.Instance.Image.Tags = []string{}
}
},
}
}

Expand All @@ -112,6 +144,7 @@ func TestFuzzyConversion(t *testing.T) {
Hub: &infrav1.OpenStackClusterTemplate{},
Spoke: &OpenStackClusterTemplate{},
HubAfterMutation: ignoreDataAnnotation,
FuzzerFuncs: []fuzzer.FuzzerFuncs{fuzzerFuncs},
})))

t.Run("for OpenStackClusterTemplate with mutate", runParallel(testhelpers.FuzzMutateTestFunc(testhelpers.FuzzMutateTestFuncInput{
Expand All @@ -120,34 +153,41 @@ func TestFuzzyConversion(t *testing.T) {
Spoke: &OpenStackClusterTemplate{},
HubAfterMutation: ignoreDataAnnotation,
},
MutateFuzzerFuncs: []fuzzer.FuzzerFuncs{fuzzerFuncs},
})))

t.Run("for OpenStackMachine", runParallel(utilconversion.FuzzTestFunc(utilconversion.FuzzTestFuncInput{
Hub: &infrav1.OpenStackMachine{},
Spoke: &OpenStackMachine{},
HubAfterMutation: ignoreDataAnnotation,
FuzzerFuncs: []fuzzer.FuzzerFuncs{fuzzerFuncs},
})))

t.Run("for OpenStackMachine with mutate", runParallel(testhelpers.FuzzMutateTestFunc(testhelpers.FuzzMutateTestFuncInput{
FuzzTestFuncInput: utilconversion.FuzzTestFuncInput{
Hub: &infrav1.OpenStackMachine{},
Spoke: &OpenStackMachine{},
HubAfterMutation: ignoreDataAnnotation,
FuzzerFuncs: []fuzzer.FuzzerFuncs{fuzzerFuncs},
},
MutateFuzzerFuncs: []fuzzer.FuzzerFuncs{fuzzerFuncs},
})))

t.Run("for OpenStackMachineTemplate", runParallel(utilconversion.FuzzTestFunc(utilconversion.FuzzTestFuncInput{
Hub: &infrav1.OpenStackMachineTemplate{},
Spoke: &OpenStackMachineTemplate{},
HubAfterMutation: ignoreDataAnnotation,
FuzzerFuncs: []fuzzer.FuzzerFuncs{fuzzerFuncs},
})))

t.Run("for OpenStackMachineTemplate with mutate", runParallel(testhelpers.FuzzMutateTestFunc(testhelpers.FuzzMutateTestFuncInput{
FuzzTestFuncInput: utilconversion.FuzzTestFuncInput{
Hub: &infrav1.OpenStackMachineTemplate{},
Spoke: &OpenStackMachineTemplate{},
HubAfterMutation: ignoreDataAnnotation,
FuzzerFuncs: []fuzzer.FuzzerFuncs{fuzzerFuncs},
},
MutateFuzzerFuncs: []fuzzer.FuzzerFuncs{fuzzerFuncs},
})))
}

Expand Down
7 changes: 3 additions & 4 deletions api/v1alpha6/zz_generated.conversion.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

42 changes: 42 additions & 0 deletions api/v1alpha7/conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ limitations under the License.
package v1alpha7

import (
apiconversion "k8s.io/apimachinery/pkg/conversion"
ctrlconversion "sigs.k8s.io/controller-runtime/pkg/conversion"

infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha8"
Expand All @@ -25,6 +26,10 @@ import (

var _ ctrlconversion.Convertible = &OpenStackCluster{}

func restorev1alpha8MachineSpec(previous *infrav1.OpenStackMachineSpec, dst *infrav1.OpenStackMachineSpec) {
dst.Image = previous.Image
}

var v1alpha7OpenStackClusterRestorer = conversion.RestorerFor[*OpenStackCluster]{
"spec": conversion.HashedFieldRestorer[*OpenStackCluster, OpenStackClusterSpec]{
GetField: func(c *OpenStackCluster) *OpenStackClusterSpec {
Expand Down Expand Up @@ -144,6 +149,7 @@ var v1alpha8OpenStackMachineRestorer = conversion.RestorerFor[*infrav1.OpenStack
GetField: func(c *infrav1.OpenStackMachine) *infrav1.OpenStackMachineSpec {
return &c.Spec
},
RestoreField: restorev1alpha8MachineSpec,
},
}

Expand Down Expand Up @@ -196,6 +202,7 @@ var v1alpha8OpenStackMachineTemplateRestorer = conversion.RestorerFor[*infrav1.O
GetField: func(c *infrav1.OpenStackMachineTemplate) *infrav1.OpenStackMachineSpec {
return &c.Spec.Template.Spec
},
RestoreField: restorev1alpha8MachineSpec,
},
}

Expand Down Expand Up @@ -232,3 +239,38 @@ func (r *OpenStackMachineTemplateList) ConvertFrom(srcRaw ctrlconversion.Hub) er
src := srcRaw.(*infrav1.OpenStackMachineTemplateList)
return Convert_v1alpha8_OpenStackMachineTemplateList_To_v1alpha7_OpenStackMachineTemplateList(src, r, nil)
}

func Convert_v1alpha7_OpenStackMachineSpec_To_v1alpha8_OpenStackMachineSpec(in *OpenStackMachineSpec, out *infrav1.OpenStackMachineSpec, s apiconversion.Scope) error {
err := autoConvert_v1alpha7_OpenStackMachineSpec_To_v1alpha8_OpenStackMachineSpec(in, out, s)
if err != nil {
return err
}

imageFilter := infrav1.ImageFilter{}
if in.Image != "" {
imageFilter.Name = in.Image
}
if in.ImageUUID != "" {
imageFilter.ID = in.ImageUUID
}
out.Image = imageFilter

return nil
}

func Convert_v1alpha8_OpenStackMachineSpec_To_v1alpha7_OpenStackMachineSpec(in *infrav1.OpenStackMachineSpec, out *OpenStackMachineSpec, s apiconversion.Scope) error {
err := autoConvert_v1alpha8_OpenStackMachineSpec_To_v1alpha7_OpenStackMachineSpec(in, out, s)
if err != nil {
return err
}

if in.Image.Name != "" {
out.Image = in.Image.Name
}

if in.Image.ID != "" {
out.ImageUUID = in.Image.ID
}

return nil
}
41 changes: 41 additions & 0 deletions api/v1alpha7/conversion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,38 @@ func TestFuzzyConversion(t *testing.T) {
func(status *OpenStackClusterStatus, c fuzz.Continue) {
c.FuzzNoCustom(status)
},

func(v1alpha8Machine *infrav1.OpenStackMachine, c fuzz.Continue) {
c.FuzzNoCustom(v1alpha8Machine)

// None of the following fields have ever been set in v1alpha7
v1alpha8Machine.Spec.Image.Tags = []string{}
},

func(v1alpha8MachineTemplate *infrav1.OpenStackMachineTemplate, c fuzz.Continue) {
c.FuzzNoCustom(v1alpha8MachineTemplate)

// None of the following fields have ever been set in v1alpha7
v1alpha8MachineTemplate.Spec.Template.Spec.Image.Tags = []string{}
},

func(v1alpha8Cluster *infrav1.OpenStackCluster, c fuzz.Continue) {
c.FuzzNoCustom(v1alpha8Cluster)

// None of the following fields have ever been set in v1alpha7
if v1alpha8Cluster.Spec.Bastion != nil {
v1alpha8Cluster.Spec.Bastion.Instance.Image.Tags = []string{}
}
},

func(v1alpha8ClusterTemplate *infrav1.OpenStackClusterTemplate, c fuzz.Continue) {
c.FuzzNoCustom(v1alpha8ClusterTemplate)

// None of the following fields have ever been set in v1alpha7
if v1alpha8ClusterTemplate.Spec.Template.Spec.Bastion != nil {
v1alpha8ClusterTemplate.Spec.Template.Spec.Bastion.Instance.Image.Tags = []string{}
}
},
}
}

Expand All @@ -84,42 +116,51 @@ func TestFuzzyConversion(t *testing.T) {
Hub: &infrav1.OpenStackClusterTemplate{},
Spoke: &OpenStackClusterTemplate{},
HubAfterMutation: ignoreDataAnnotation,
FuzzerFuncs: []fuzzer.FuzzerFuncs{fuzzerFuncs},
})))

t.Run("for OpenStackClusterTemplate with mutate", runParallel(testhelpers.FuzzMutateTestFunc(testhelpers.FuzzMutateTestFuncInput{
FuzzTestFuncInput: utilconversion.FuzzTestFuncInput{
Hub: &infrav1.OpenStackClusterTemplate{},
Spoke: &OpenStackClusterTemplate{},
HubAfterMutation: ignoreDataAnnotation,
FuzzerFuncs: []fuzzer.FuzzerFuncs{fuzzerFuncs},
},
MutateFuzzerFuncs: []fuzzer.FuzzerFuncs{fuzzerFuncs},
})))

t.Run("for OpenStackMachine", runParallel(utilconversion.FuzzTestFunc(utilconversion.FuzzTestFuncInput{
Hub: &infrav1.OpenStackMachine{},
Spoke: &OpenStackMachine{},
HubAfterMutation: ignoreDataAnnotation,
FuzzerFuncs: []fuzzer.FuzzerFuncs{fuzzerFuncs},
})))

t.Run("for OpenStackMachine with mutate", runParallel(testhelpers.FuzzMutateTestFunc(testhelpers.FuzzMutateTestFuncInput{
FuzzTestFuncInput: utilconversion.FuzzTestFuncInput{
Hub: &infrav1.OpenStackMachine{},
Spoke: &OpenStackMachine{},
HubAfterMutation: ignoreDataAnnotation,
FuzzerFuncs: []fuzzer.FuzzerFuncs{fuzzerFuncs},
},
MutateFuzzerFuncs: []fuzzer.FuzzerFuncs{fuzzerFuncs},
})))

t.Run("for OpenStackMachineTemplate", runParallel(utilconversion.FuzzTestFunc(utilconversion.FuzzTestFuncInput{
Hub: &infrav1.OpenStackMachineTemplate{},
Spoke: &OpenStackMachineTemplate{},
HubAfterMutation: ignoreDataAnnotation,
FuzzerFuncs: []fuzzer.FuzzerFuncs{fuzzerFuncs},
})))

t.Run("for OpenStackMachineTemplate with mutate", runParallel(testhelpers.FuzzMutateTestFunc(testhelpers.FuzzMutateTestFuncInput{
FuzzTestFuncInput: utilconversion.FuzzTestFuncInput{
Hub: &infrav1.OpenStackMachineTemplate{},
Spoke: &OpenStackMachineTemplate{},
HubAfterMutation: ignoreDataAnnotation,
FuzzerFuncs: []fuzzer.FuzzerFuncs{fuzzerFuncs},
},
MutateFuzzerFuncs: []fuzzer.FuzzerFuncs{fuzzerFuncs},
})))
}

Expand Down
Loading

0 comments on commit f880446

Please sign in to comment.