Skip to content

Commit 14fe5d4

Browse files
committed
NetworkFilter to NetworkParam
1 parent 59689c9 commit 14fe5d4

31 files changed

+1331
-896
lines changed

api/v1alpha1/openstackfloatingippool_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ type OpenStackFloatingIPPoolSpec struct {
6363

6464
// FloatingIPNetwork is the external network to use for floating ips, if there's only one external network it will be used by default
6565
// +optional
66-
FloatingIPNetwork infrav1.NetworkFilter `json:"floatingIPNetwork"`
66+
FloatingIPNetwork infrav1.NetworkParam `json:"floatingIPNetwork"`
6767

6868
// The stratergy to use for reclaiming floating ips when they are released from a machine
6969
// +kubebuilder:validation:Optional

api/v1alpha5/conversion.go

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

1919
import (
20+
"errors"
2021
"strings"
2122

2223
conversion "k8s.io/apimachinery/pkg/conversion"
@@ -205,8 +206,8 @@ func Convert_v1beta1_OpenStackClusterSpec_To_v1alpha5_OpenStackClusterSpec(in *i
205206
return err
206207
}
207208

208-
if in.ExternalNetwork != nil && in.ExternalNetwork.ID != "" {
209-
out.ExternalNetworkID = in.ExternalNetwork.ID
209+
if in.ExternalNetwork != nil && in.ExternalNetwork.ID != nil {
210+
out.ExternalNetworkID = *in.ExternalNetwork.ID
210211
}
211212

212213
if len(in.ManagedSubnets) > 0 {
@@ -246,8 +247,8 @@ func Convert_v1alpha5_OpenStackClusterSpec_To_v1beta1_OpenStackClusterSpec(in *O
246247
}
247248

248249
if in.ExternalNetworkID != "" {
249-
out.ExternalNetwork = &infrav1.NetworkFilter{
250-
ID: in.ExternalNetworkID,
250+
out.ExternalNetwork = &infrav1.NetworkParam{
251+
ID: &in.ExternalNetworkID,
251252
}
252253
}
253254

@@ -746,18 +747,49 @@ func Convert_v1beta1_SecurityGroupFilter_To_v1alpha5_SecurityGroupFilter(in *inf
746747
return nil
747748
}
748749

749-
func Convert_v1alpha5_NetworkFilter_To_v1beta1_NetworkFilter(in *NetworkFilter, out *infrav1.NetworkFilter, s conversion.Scope) error {
750-
if err := autoConvert_v1alpha5_NetworkFilter_To_v1beta1_NetworkFilter(in, out, s); err != nil {
750+
func Convert_v1alpha5_NetworkFilter_To_v1beta1_NetworkParam(in *NetworkFilter, out *infrav1.NetworkParam, s conversion.Scope) error {
751+
if in.ID != "" {
752+
out.ID = &in.ID
753+
return nil
754+
}
755+
outFilter := &infrav1.NetworkFilter{}
756+
if err := autoConvert_v1alpha5_NetworkFilter_To_v1beta1_NetworkFilter(in, outFilter, s); err != nil {
751757
return err
752758
}
753-
infrav1.ConvertAllTagsTo(in.Tags, in.TagsAny, in.NotTags, in.NotTagsAny, &out.FilterByNeutronTags)
759+
infrav1.ConvertAllTagsTo(in.Tags, in.TagsAny, in.NotTags, in.NotTagsAny, &outFilter.FilterByNeutronTags)
760+
if !outFilter.IsZero() {
761+
out.Filter = outFilter
762+
}
754763
return nil
755764
}
756765

757-
func Convert_v1beta1_NetworkFilter_To_v1alpha5_NetworkFilter(in *infrav1.NetworkFilter, out *NetworkFilter, s conversion.Scope) error {
758-
if err := autoConvert_v1beta1_NetworkFilter_To_v1alpha5_NetworkFilter(in, out, s); err != nil {
759-
return err
766+
func Convert_v1beta1_NetworkParam_To_v1alpha5_NetworkFilter(in *infrav1.NetworkParam, out *NetworkFilter, s conversion.Scope) error {
767+
if in.ID != nil {
768+
out.ID = *in.ID
769+
return nil
770+
}
771+
if in.Filter != nil {
772+
if err := autoConvert_v1beta1_NetworkFilter_To_v1alpha5_NetworkFilter(in.Filter, out, s); err != nil {
773+
return err
774+
}
775+
infrav1.ConvertAllTagsFrom(&in.Filter.FilterByNeutronTags, &out.Tags, &out.TagsAny, &out.NotTags, &out.NotTagsAny)
760776
}
761-
infrav1.ConvertAllTagsFrom(&in.FilterByNeutronTags, &out.Tags, &out.TagsAny, &out.NotTags, &out.NotTagsAny)
762777
return nil
763778
}
779+
780+
// conversion-gen registers the following functions so we have to define them, but nothing should ever call them.
781+
func Convert_v1alpha5_NetworkFilter_To_v1beta1_NetworkFilter(_ *NetworkFilter, _ *infrav1.NetworkFilter, _ conversion.Scope) error {
782+
return errors.New("Convert_v1alpha6_NetworkFilter_To_v1beta1_NetworkFilter should not be called")
783+
}
784+
785+
func Convert_v1beta1_NetworkFilter_To_v1alpha5_NetworkFilter(_ *infrav1.NetworkFilter, _ *NetworkFilter, _ conversion.Scope) error {
786+
return errors.New("Convert_v1beta1_NetworkFilter_To_v1alpha6_NetworkFilter should not be called")
787+
}
788+
789+
func Convert_v1alpha5_NetworkParam_To_v1beta1_NetworkParam(_ *NetworkParam, _ *infrav1.NetworkParam, _ conversion.Scope) error {
790+
return errors.New("Convert_v1alpha6_NetworkParam_To_v1beta1_NetworkParam should not be called")
791+
}
792+
793+
func Convert_v1beta1_NetworkParam_To_v1alpha5_NetworkParam(_ *infrav1.NetworkParam, _ *NetworkParam, _ conversion.Scope) error {
794+
return errors.New("Convert_v1beta1_NetworkParam_To_v1alpha6_NetworkParam should not be called")
795+
}

api/v1alpha5/zz_generated.conversion.go

Lines changed: 40 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/v1alpha6/conversion_test.go

Lines changed: 45 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,14 @@ func TestFuzzyConversion(t *testing.T) {
6868
return ret
6969
}
7070

71+
nonEmptyString := func(c fuzz.Continue) string {
72+
for {
73+
if s := c.RandString(); s != "" {
74+
return s
75+
}
76+
}
77+
}
78+
7179
fuzzerFuncs := func(_ runtimeserializer.CodecFactory) []interface{} {
7280
return []interface{}{
7381
func(instance *Instance, c fuzz.Continue) {
@@ -206,6 +214,22 @@ func TestFuzzyConversion(t *testing.T) {
206214
filter.NotTags = filterInvalidTags(filter.NotTags)
207215
filter.NotTagsAny = filterInvalidTags(filter.NotTagsAny)
208216
},
217+
218+
// v1beta1 network param contains exactly one of ID or filter
219+
func(param *infrav1.NetworkParam, c fuzz.Continue) {
220+
if c.RandBool() {
221+
id := nonEmptyString(c)
222+
param.ID = &id
223+
param.Filter = nil
224+
} else {
225+
filter := infrav1.NetworkFilter{}
226+
for filter.IsZero() {
227+
c.FuzzNoCustom(&filter)
228+
}
229+
param.Filter = &filter
230+
param.ID = nil
231+
}
232+
},
209233
}
210234
}
211235

@@ -303,8 +327,8 @@ func TestNetworksToPorts(t *testing.T) {
303327
afterMachineSpec: infrav1.OpenStackMachineSpec{
304328
Ports: []infrav1.PortOpts{
305329
{
306-
Network: &infrav1.NetworkFilter{
307-
ID: networkuuid,
330+
Network: &infrav1.NetworkParam{
331+
ID: pointer.String(networkuuid),
308332
},
309333
},
310334
},
@@ -330,15 +354,17 @@ func TestNetworksToPorts(t *testing.T) {
330354
afterMachineSpec: infrav1.OpenStackMachineSpec{
331355
Ports: []infrav1.PortOpts{
332356
{
333-
Network: &infrav1.NetworkFilter{
334-
Name: "network-name",
335-
Description: "network-description",
336-
ProjectID: "project-id",
337-
FilterByNeutronTags: infrav1.FilterByNeutronTags{
338-
Tags: []infrav1.NeutronTag{"tags"},
339-
TagsAny: []infrav1.NeutronTag{"tags-any"},
340-
NotTags: []infrav1.NeutronTag{"not-tags"},
341-
NotTagsAny: []infrav1.NeutronTag{"not-tags-any"},
357+
Network: &infrav1.NetworkParam{
358+
Filter: &infrav1.NetworkFilter{
359+
Name: "network-name",
360+
Description: "network-description",
361+
ProjectID: "project-id",
362+
FilterByNeutronTags: infrav1.FilterByNeutronTags{
363+
Tags: []infrav1.NeutronTag{"tags"},
364+
TagsAny: []infrav1.NeutronTag{"tags-any"},
365+
NotTags: []infrav1.NeutronTag{"not-tags"},
366+
NotTagsAny: []infrav1.NeutronTag{"not-tags-any"},
367+
},
342368
},
343369
},
344370
},
@@ -362,8 +388,8 @@ func TestNetworksToPorts(t *testing.T) {
362388
afterMachineSpec: infrav1.OpenStackMachineSpec{
363389
Ports: []infrav1.PortOpts{
364390
{
365-
Network: &infrav1.NetworkFilter{
366-
ID: networkuuid,
391+
Network: &infrav1.NetworkParam{
392+
ID: pointer.String(networkuuid),
367393
},
368394
FixedIPs: []infrav1.FixedIP{
369395
{
@@ -406,8 +432,8 @@ func TestNetworksToPorts(t *testing.T) {
406432
afterMachineSpec: infrav1.OpenStackMachineSpec{
407433
Ports: []infrav1.PortOpts{
408434
{
409-
Network: &infrav1.NetworkFilter{
410-
ID: networkuuid,
435+
Network: &infrav1.NetworkParam{
436+
ID: pointer.String(networkuuid),
411437
},
412438
FixedIPs: []infrav1.FixedIP{
413439
{
@@ -466,8 +492,8 @@ func TestNetworksToPorts(t *testing.T) {
466492
afterMachineSpec: infrav1.OpenStackMachineSpec{
467493
Ports: []infrav1.PortOpts{
468494
{
469-
Network: &infrav1.NetworkFilter{
470-
ID: networkuuid,
495+
Network: &infrav1.NetworkParam{
496+
ID: pointer.String(networkuuid),
471497
},
472498
FixedIPs: []infrav1.FixedIP{
473499
{
@@ -478,8 +504,8 @@ func TestNetworksToPorts(t *testing.T) {
478504
},
479505
},
480506
{
481-
Network: &infrav1.NetworkFilter{
482-
ID: networkuuid,
507+
Network: &infrav1.NetworkParam{
508+
ID: pointer.String(networkuuid),
483509
},
484510
FixedIPs: []infrav1.FixedIP{
485511
{

api/v1alpha6/openstackcluster_conversion.go

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -164,23 +164,14 @@ func restorev1alpha6ClusterSpec(previous *OpenStackClusterSpec, dst *OpenStackCl
164164
func restorev1beta1ClusterSpec(previous *infrav1.OpenStackClusterSpec, dst *infrav1.OpenStackClusterSpec) {
165165
// Bastion is restored separately
166166

167-
if dst.Network.IsEmpty() {
168-
dst.Network = previous.Network
169-
}
167+
restorev1beta1NetworkParam(previous.Network, dst.Network)
170168

171-
// Restore all fields except ID, which should have been copied over in conversion
169+
// ExternalNetwork by filter will be been lost in down-conversion
172170
if previous.ExternalNetwork != nil {
173171
if dst.ExternalNetwork == nil {
174-
dst.ExternalNetwork = &infrav1.NetworkFilter{}
172+
dst.ExternalNetwork = &infrav1.NetworkParam{}
175173
}
176-
177-
dst.ExternalNetwork.Name = previous.ExternalNetwork.Name
178-
dst.ExternalNetwork.Description = previous.ExternalNetwork.Description
179-
dst.ExternalNetwork.ProjectID = previous.ExternalNetwork.ProjectID
180-
dst.ExternalNetwork.Tags = previous.ExternalNetwork.Tags
181-
dst.ExternalNetwork.TagsAny = previous.ExternalNetwork.TagsAny
182-
dst.ExternalNetwork.NotTags = previous.ExternalNetwork.NotTags
183-
dst.ExternalNetwork.NotTagsAny = previous.ExternalNetwork.NotTagsAny
174+
dst.ExternalNetwork.Filter = previous.ExternalNetwork.Filter
184175
}
185176

186177
// Restore fields not present in v1alpha6
@@ -227,15 +218,15 @@ func Convert_v1alpha6_OpenStackClusterSpec_To_v1beta1_OpenStackClusterSpec(in *O
227218
}
228219

229220
if in.Network != (NetworkFilter{}) {
230-
out.Network = &infrav1.NetworkFilter{}
231-
if err := Convert_v1alpha6_NetworkFilter_To_v1beta1_NetworkFilter(&in.Network, out.Network, s); err != nil {
221+
out.Network = &infrav1.NetworkParam{}
222+
if err := Convert_v1alpha6_NetworkFilter_To_v1beta1_NetworkParam(&in.Network, out.Network, s); err != nil {
232223
return err
233224
}
234225
}
235226

236227
if in.ExternalNetworkID != "" {
237-
out.ExternalNetwork = &infrav1.NetworkFilter{
238-
ID: in.ExternalNetworkID,
228+
out.ExternalNetwork = &infrav1.NetworkParam{
229+
ID: &in.ExternalNetworkID,
239230
}
240231
}
241232

@@ -294,13 +285,13 @@ func Convert_v1beta1_OpenStackClusterSpec_To_v1alpha6_OpenStackClusterSpec(in *i
294285
}
295286

296287
if in.Network != nil {
297-
if err := Convert_v1beta1_NetworkFilter_To_v1alpha6_NetworkFilter(in.Network, &out.Network, s); err != nil {
288+
if err := Convert_v1beta1_NetworkParam_To_v1alpha6_NetworkFilter(in.Network, &out.Network, s); err != nil {
298289
return err
299290
}
300291
}
301292

302-
if in.ExternalNetwork != nil && in.ExternalNetwork.ID != "" {
303-
out.ExternalNetworkID = in.ExternalNetwork.ID
293+
if in.ExternalNetwork != nil && in.ExternalNetwork.ID != nil {
294+
out.ExternalNetworkID = *in.ExternalNetwork.ID
304295
}
305296

306297
if len(in.Subnets) >= 1 {

0 commit comments

Comments
 (0)