Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

⚠️ Split ImageFilter into ImageParam #1970

Merged
merged 3 commits into from
Mar 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ modules: ## Runs go mod to ensure proper vendoring.
cd $(TOOLS_DIR); go mod tidy

.PHONY: generate
generate: generate-controller-gen generate-conversion-gen generate-go generate-manifests generate-api-docs ## Generate all generated code
generate: templates generate-controller-gen generate-conversion-gen generate-go generate-manifests generate-api-docs ## Generate all generated code

.PHONY: generate-go
generate-go: $(MOCKGEN)
Expand Down
99 changes: 50 additions & 49 deletions api/v1alpha5/conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -325,13 +325,8 @@ func Convert_v1beta1_PortOpts_To_v1alpha5_PortOpts(in *infrav1.PortOpts, out *Po
if len(in.SecurityGroups) > 0 {
out.SecurityGroupFilters = make([]SecurityGroupParam, len(in.SecurityGroups))
for i := range in.SecurityGroups {
securityGroupParam := &out.SecurityGroupFilters[i]
if in.SecurityGroups[i].ID != "" {
securityGroupParam.UUID = in.SecurityGroups[i].ID
} else {
if err := Convert_v1beta1_SecurityGroupFilter_To_v1alpha5_SecurityGroupFilter(&in.SecurityGroups[i], &securityGroupParam.Filter, s); err != nil {
return err
}
if err := Convert_v1beta1_SecurityGroupParam_To_v1alpha5_SecurityGroupParam(&in.SecurityGroups[i], &out.SecurityGroupFilters[i], s); err != nil {
return err
}
}
}
Expand Down Expand Up @@ -361,13 +356,13 @@ func Convert_v1alpha5_OpenStackMachineSpec_To_v1beta1_OpenStackMachineSpec(in *O
out.ServerGroup = &infrav1.ServerGroupFilter{}
}

imageFilter := infrav1.ImageFilter{}
imageParam := infrav1.ImageParam{}
if in.ImageUUID != "" {
imageFilter.ID = &in.ImageUUID
imageParam.ID = &in.ImageUUID
} else if in.Image != "" { // Only add name when ID is not set, in v1beta1 it's not possible to set both.
imageFilter.Name = &in.Image
imageParam.Filter = &infrav1.ImageFilter{Name: &in.Image}
}
out.Image = imageFilter
out.Image = imageParam

if in.IdentityRef != nil {
out.IdentityRef = &infrav1.OpenStackIdentityReference{Name: in.IdentityRef.Name}
Expand Down Expand Up @@ -395,46 +390,48 @@ func Convert_v1alpha5_PortOpts_To_v1beta1_PortOpts(in *PortOpts, out *infrav1.Po
}

if len(in.SecurityGroups) > 0 || len(in.SecurityGroupFilters) > 0 {
out.SecurityGroups = make([]infrav1.SecurityGroupFilter, 0, len(in.SecurityGroups)+len(in.SecurityGroupFilters))
out.SecurityGroups = make([]infrav1.SecurityGroupParam, 0, len(in.SecurityGroups)+len(in.SecurityGroupFilters))
for i := range in.SecurityGroupFilters {
sgParam := &in.SecurityGroupFilters[i]
switch {
case sgParam.UUID != "":
out.SecurityGroups = append(out.SecurityGroups, infrav1.SecurityGroupFilter{ID: sgParam.UUID})
out.SecurityGroups = append(out.SecurityGroups, infrav1.SecurityGroupParam{ID: &sgParam.UUID})
case sgParam.Name != "":
out.SecurityGroups = append(out.SecurityGroups, infrav1.SecurityGroupFilter{Name: sgParam.Name})
out.SecurityGroups = append(out.SecurityGroups, infrav1.SecurityGroupParam{Filter: &infrav1.SecurityGroupFilter{Name: sgParam.Name}})
case sgParam.Filter != (SecurityGroupFilter{}):
out.SecurityGroups = append(out.SecurityGroups, infrav1.SecurityGroupFilter{})
out.SecurityGroups = append(out.SecurityGroups, infrav1.SecurityGroupParam{})
outSG := &out.SecurityGroups[len(out.SecurityGroups)-1]
if err := Convert_v1alpha5_SecurityGroupFilter_To_v1beta1_SecurityGroupFilter(&sgParam.Filter, outSG, s); err != nil {
outSG.Filter = &infrav1.SecurityGroupFilter{}
if err := Convert_v1alpha5_SecurityGroupFilter_To_v1beta1_SecurityGroupFilter(&sgParam.Filter, outSG.Filter, s); err != nil {
return err
}
}
}
for _, id := range in.SecurityGroups {
out.SecurityGroups = append(out.SecurityGroups, infrav1.SecurityGroupFilter{ID: id})
for i := range in.SecurityGroups {
out.SecurityGroups = append(out.SecurityGroups, infrav1.SecurityGroupParam{ID: &in.SecurityGroups[i]})
}
}

if len(in.SecurityGroups) > 0 || len(in.SecurityGroupFilters) > 0 {
out.SecurityGroups = make([]infrav1.SecurityGroupFilter, 0, len(in.SecurityGroups)+len(in.SecurityGroupFilters))
out.SecurityGroups = make([]infrav1.SecurityGroupParam, 0, len(in.SecurityGroups)+len(in.SecurityGroupFilters))
for i := range in.SecurityGroupFilters {
sgParam := &in.SecurityGroupFilters[i]
switch {
case sgParam.UUID != "":
out.SecurityGroups = append(out.SecurityGroups, infrav1.SecurityGroupFilter{ID: sgParam.UUID})
out.SecurityGroups = append(out.SecurityGroups, infrav1.SecurityGroupParam{ID: &sgParam.UUID})
case sgParam.Name != "":
out.SecurityGroups = append(out.SecurityGroups, infrav1.SecurityGroupFilter{Name: sgParam.Name})
out.SecurityGroups = append(out.SecurityGroups, infrav1.SecurityGroupParam{Filter: &infrav1.SecurityGroupFilter{Name: sgParam.Name}})
case sgParam.Filter != (SecurityGroupFilter{}):
out.SecurityGroups = append(out.SecurityGroups, infrav1.SecurityGroupFilter{})
out.SecurityGroups = append(out.SecurityGroups, infrav1.SecurityGroupParam{})
outSG := &out.SecurityGroups[len(out.SecurityGroups)-1]
if err := Convert_v1alpha5_SecurityGroupFilter_To_v1beta1_SecurityGroupFilter(&sgParam.Filter, outSG, s); err != nil {
outSG.Filter = &infrav1.SecurityGroupFilter{}
if err := Convert_v1alpha5_SecurityGroupFilter_To_v1beta1_SecurityGroupFilter(&sgParam.Filter, outSG.Filter, s); err != nil {
return err
}
}
}
for _, id := range in.SecurityGroups {
out.SecurityGroups = append(out.SecurityGroups, infrav1.SecurityGroupFilter{ID: id})
for i := range in.SecurityGroups {
out.SecurityGroups = append(out.SecurityGroups, infrav1.SecurityGroupParam{ID: &in.SecurityGroups[i]})
}
}

Expand Down Expand Up @@ -521,34 +518,40 @@ func Convert_v1beta1_NetworkStatus_To_v1alpha5_Network(in *infrav1.NetworkStatus
return nil
}

func Convert_v1alpha5_SecurityGroupParam_To_v1beta1_SecurityGroupFilter(in *SecurityGroupParam, out *infrav1.SecurityGroupFilter, s conversion.Scope) error {
// SecurityGroupParam is replaced by its contained SecurityGroupFilter in v1beta1
err := Convert_v1alpha5_SecurityGroupFilter_To_v1beta1_SecurityGroupFilter(&in.Filter, out, s)
if err != nil {
return err
}

func Convert_v1alpha5_SecurityGroupParam_To_v1beta1_SecurityGroupParam(in *SecurityGroupParam, out *infrav1.SecurityGroupParam, s conversion.Scope) error {
if in.UUID != "" {
out.ID = in.UUID
out.ID = &in.UUID
return nil
}

outFilter := &infrav1.SecurityGroupFilter{}
if in.Name != "" {
out.Name = in.Name
outFilter.Name = in.Name
} else {
// SecurityGroupParam is replaced by its contained SecurityGroupFilter in v1beta1
err := Convert_v1alpha5_SecurityGroupFilter_To_v1beta1_SecurityGroupFilter(&in.Filter, outFilter, s)
if err != nil {
return err
}
}

if !outFilter.IsZero() {
out.Filter = outFilter
}
return nil
}

func Convert_v1beta1_SecurityGroupFilter_To_v1alpha5_SecurityGroupParam(in *infrav1.SecurityGroupFilter, out *SecurityGroupParam, s conversion.Scope) error {
// SecurityGroupParam is replaced by its contained SecurityGroupFilter in v1beta1
err := Convert_v1beta1_SecurityGroupFilter_To_v1alpha5_SecurityGroupFilter(in, &out.Filter, s)
if err != nil {
return err
func Convert_v1beta1_SecurityGroupParam_To_v1alpha5_SecurityGroupParam(in *infrav1.SecurityGroupParam, out *SecurityGroupParam, s conversion.Scope) error {
if in.ID != nil {
out.UUID = *in.ID
return nil
}

if in.ID != "" {
out.UUID = in.ID
}
if in.Name != "" {
out.Name = in.Name
if in.Filter != nil {
err := Convert_v1beta1_SecurityGroupFilter_To_v1alpha5_SecurityGroupFilter(in.Filter, &out.Filter, s)
if err != nil {
return err
}
}
return nil
}
Expand Down Expand Up @@ -683,12 +686,10 @@ func Convert_v1beta1_OpenStackMachineSpec_To_v1alpha5_OpenStackMachineSpec(in *i
out.ServerGroupID = in.ServerGroup.ID
}

if in.Image.Name != nil && *in.Image.Name != "" {
out.Image = *in.Image.Name
}

if in.Image.ID != nil && *in.Image.ID != "" {
if in.Image.ID != nil {
out.ImageUUID = *in.Image.ID
} else if in.Image.Filter != nil && in.Image.Filter.Name != nil {
out.Image = *in.Image.Filter.Name
}

if in.IdentityRef != nil {
Expand Down
36 changes: 24 additions & 12 deletions api/v1alpha5/zz_generated.conversion.go

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

16 changes: 8 additions & 8 deletions api/v1alpha6/conversion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -455,19 +455,19 @@ func TestPortOptsConvertTo(t *testing.T) {

// Variables used in the tests
uuids := []string{"abc123", "123abc"}
securityGroupsUuids := []infrav1.SecurityGroupFilter{
{ID: uuids[0]},
{ID: uuids[1]},
securityGroupsUuids := []infrav1.SecurityGroupParam{
{ID: &uuids[0]},
{ID: &uuids[1]},
}
securityGroupFilter := []SecurityGroupParam{
{Name: "one"},
{UUID: "654cba"},
}
securityGroupFilterMerged := []infrav1.SecurityGroupFilter{
{Name: "one"},
{ID: "654cba"},
{ID: uuids[0]},
{ID: uuids[1]},
securityGroupFilterMerged := []infrav1.SecurityGroupParam{
{Filter: &infrav1.SecurityGroupFilter{Name: "one"}},
{ID: pointer.String("654cba")},
{ID: &uuids[0]},
{ID: &uuids[1]},
}
legacyPortProfile := map[string]string{
"capabilities": "[\"switchdev\"]",
Expand Down
22 changes: 13 additions & 9 deletions api/v1alpha6/openstackmachine_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,12 @@ func restorev1beta1MachineSpec(previous *infrav1.OpenStackMachineSpec, dst *infr
dst.ServerGroup = previous.ServerGroup
dst.Image = previous.Image
dst.FloatingIPPoolRef = previous.FloatingIPPoolRef

if len(dst.SecurityGroups) == len(previous.SecurityGroups) {
for i := range dst.SecurityGroups {
restorev1beta1SecurityGroupParam(&previous.SecurityGroups[i], &dst.SecurityGroups[i])
}
}
}

func convertNetworksToPorts(networks []NetworkParam, s apiconversion.Scope) ([]infrav1.PortOpts, error) {
Expand Down Expand Up @@ -266,13 +272,13 @@ func Convert_v1alpha6_OpenStackMachineSpec_To_v1beta1_OpenStackMachineSpec(in *O
out.ServerGroup = nil
}

imageFilter := infrav1.ImageFilter{}
imageParam := infrav1.ImageParam{}
if in.ImageUUID != "" {
imageFilter.ID = &in.ImageUUID
imageParam.ID = &in.ImageUUID
} else if in.Image != "" { // Only add name when ID is not set, in v1beta1 it's not possible to set both.
imageFilter.Name = &in.Image
imageParam.Filter = &infrav1.ImageFilter{Name: &in.Image}
}
out.Image = imageFilter
out.Image = imageParam

if len(in.ServerMetadata) > 0 {
serverMetadata := make([]infrav1.ServerMetadata, 0, len(in.ServerMetadata))
Expand Down Expand Up @@ -314,12 +320,10 @@ func Convert_v1beta1_OpenStackMachineSpec_To_v1alpha6_OpenStackMachineSpec(in *i
out.ServerGroupID = in.ServerGroup.ID
}

if in.Image.Name != nil && *in.Image.Name != "" {
out.Image = *in.Image.Name
}

if in.Image.ID != nil && *in.Image.ID != "" {
if in.Image.ID != nil {
out.ImageUUID = *in.Image.ID
} else if in.Image.Filter != nil && in.Image.Filter.Name != nil {
out.Image = *in.Image.Filter.Name
}

if len(in.ServerMetadata) > 0 {
Expand Down
Loading