Skip to content

Commit 4e2150f

Browse files
authored
Merge pull request kubernetes-sigs#1978 from shiftstack/routerparam
⚠️ RouterFilter to RouterParam
2 parents e32bcc2 + 5c3fe97 commit 4e2150f

File tree

15 files changed

+658
-191
lines changed

15 files changed

+658
-191
lines changed

api/v1alpha7/openstackcluster_conversion.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ func restorev1beta1ClusterSpec(previous *infrav1.OpenStackClusterSpec, dst *infr
189189

190190
dst.DisableExternalNetwork = previous.DisableExternalNetwork
191191

192+
restorev1beta1RouterParam(previous.Router, dst.Router)
192193
restorev1beta1NetworkParam(previous.Network, dst.Network)
193194

194195
if len(previous.Subnets) > 0 && len(dst.Subnets) > 0 {

api/v1alpha7/types_conversion.go

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -242,21 +242,55 @@ func restorev1alpha7RouterFilter(previous *RouterFilter, dst *RouterFilter) {
242242
dst.TagsAny = previous.TagsAny
243243
dst.NotTags = previous.NotTags
244244
dst.NotTagsAny = previous.NotTagsAny
245+
246+
// If ID was set we lost all other filter params
247+
if dst.ID != "" {
248+
dst.Name = previous.Name
249+
dst.Description = previous.Description
250+
dst.ProjectID = previous.ProjectID
251+
}
252+
}
253+
254+
func restorev1beta1RouterParam(previous *infrav1.RouterParam, dst *infrav1.RouterParam) {
255+
if previous == nil || dst == nil {
256+
return
257+
}
258+
259+
optional.RestoreString(&previous.ID, &dst.ID)
260+
if dst.Filter != nil {
261+
dst.Filter.FilterByNeutronTags = previous.Filter.FilterByNeutronTags
262+
}
245263
}
246264

247-
func Convert_v1alpha7_RouterFilter_To_v1beta1_RouterFilter(in *RouterFilter, out *infrav1.RouterFilter, s apiconversion.Scope) error {
248-
if err := autoConvert_v1alpha7_RouterFilter_To_v1beta1_RouterFilter(in, out, s); err != nil {
265+
func Convert_v1alpha7_RouterFilter_To_v1beta1_RouterParam(in *RouterFilter, out *infrav1.RouterParam, s apiconversion.Scope) error {
266+
if in.ID != "" {
267+
out.ID = &in.ID
268+
return nil
269+
}
270+
271+
filter := &infrav1.RouterFilter{}
272+
if err := autoConvert_v1alpha7_RouterFilter_To_v1beta1_RouterFilter(in, filter, s); err != nil {
249273
return err
250274
}
251-
infrav1.ConvertAllTagsTo(in.Tags, in.TagsAny, in.NotTags, in.NotTagsAny, &out.FilterByNeutronTags)
275+
infrav1.ConvertAllTagsTo(in.Tags, in.TagsAny, in.NotTags, in.NotTagsAny, &filter.FilterByNeutronTags)
276+
if !filter.IsZero() {
277+
out.Filter = filter
278+
}
252279
return nil
253280
}
254281

255-
func Convert_v1beta1_RouterFilter_To_v1alpha7_RouterFilter(in *infrav1.RouterFilter, out *RouterFilter, s apiconversion.Scope) error {
256-
if err := autoConvert_v1beta1_RouterFilter_To_v1alpha7_RouterFilter(in, out, s); err != nil {
257-
return err
282+
func Convert_v1beta1_RouterParam_To_v1alpha7_RouterFilter(in *infrav1.RouterParam, out *RouterFilter, s apiconversion.Scope) error {
283+
if in.ID != nil {
284+
out.ID = *in.ID
285+
return nil
286+
}
287+
288+
if in.Filter != nil {
289+
if err := autoConvert_v1beta1_RouterFilter_To_v1alpha7_RouterFilter(in.Filter, out, s); err != nil {
290+
return err
291+
}
292+
infrav1.ConvertAllTagsFrom(&in.Filter.FilterByNeutronTags, &out.Tags, &out.TagsAny, &out.NotTags, &out.NotTagsAny)
258293
}
259-
infrav1.ConvertAllTagsFrom(&in.FilterByNeutronTags, &out.Tags, &out.TagsAny, &out.NotTags, &out.NotTagsAny)
260294
return nil
261295
}
262296

@@ -504,3 +538,11 @@ func Convert_v1alpha7_SecurityGroupFilter_To_v1beta1_SecurityGroupFilter(_ *Secu
504538
func Convert_v1beta1_SecurityGroupFilter_To_v1alpha7_SecurityGroupFilter(_ *infrav1.SecurityGroupFilter, _ *SecurityGroupFilter, _ apiconversion.Scope) error {
505539
return errors.New("Convert_v1beta1_SecurityGroupFilter_To_v1alpha7_SecurityGroupFilter should not be called")
506540
}
541+
542+
func Convert_v1alpha7_RouterFilter_To_v1beta1_RouterFilter(_ *RouterFilter, _ *infrav1.RouterFilter, _ apiconversion.Scope) error {
543+
return errors.New("Convert_v1alpha7_RouterFilter_To_v1beta1_RouterFilter should not be called")
544+
}
545+
546+
func Convert_v1beta1_RouterFilter_To_v1alpha7_RouterFilter(_ *infrav1.RouterFilter, _ *RouterFilter, _ apiconversion.Scope) error {
547+
return errors.New("Convert_v1beta1_RouterFilter_To_v1alpha7_RouterFilter should not be called")
548+
}

api/v1alpha7/zz_generated.conversion.go

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

api/v1beta1/openstackcluster_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ type OpenStackClusterSpec struct {
4343
// Router specifies an existing router to be used if ManagedSubnets are
4444
// specified. If specified, no new router will be created.
4545
// +optional
46-
Router *RouterFilter `json:"router,omitempty"`
46+
Router *RouterParam `json:"router,omitempty"`
4747

4848
// Network specifies an existing network to use if no ManagedSubnets
4949
// are specified.

api/v1beta1/types.go

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,15 +220,39 @@ func (subnetFilter *SubnetFilter) IsZero() bool {
220220
subnetFilter.FilterByNeutronTags.IsZero()
221221
}
222222

223+
// RouterParam specifies an OpenStack router to use. It may be specified by either ID or filter, but not both.
224+
// +kubebuilder:validation:MaxProperties:=1
225+
// +kubebuilder:validation:MinProperties:=1
226+
type RouterParam struct {
227+
// ID is the ID of the router to use. If ID is provided, the other filters cannot be provided. Must be in UUID format.
228+
// +kubebuilder:validation:Format:=uuid
229+
// +optional
230+
ID optional.String `json:"id,omitempty"`
231+
232+
// Filter specifies a filter to select an OpenStack router. If provided, cannot be empty.
233+
Filter *RouterFilter `json:"filter,omitempty"`
234+
}
235+
236+
// RouterFilter specifies a query to select an OpenStack router. At least one property must be set.
237+
// +kubebuilder:validation:MinProperties:=1
223238
type RouterFilter struct {
224-
ID string `json:"id,omitempty"`
225239
Name string `json:"name,omitempty"`
226240
Description string `json:"description,omitempty"`
227241
ProjectID string `json:"projectID,omitempty"`
228242

229243
FilterByNeutronTags `json:",inline"`
230244
}
231245

246+
func (f *RouterFilter) IsZero() bool {
247+
if f == nil {
248+
return true
249+
}
250+
return f.Name == "" &&
251+
f.Description == "" &&
252+
f.ProjectID == "" &&
253+
f.FilterByNeutronTags.IsZero()
254+
}
255+
232256
type SubnetSpec struct {
233257
// CIDR is representing the IP address range used to create the subnet, e.g. 10.0.0.0/24.
234258
// This field is required when defining a subnet.

api/v1beta1/zz_generated.deepcopy.go

Lines changed: 26 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/bases/infrastructure.cluster.x-k8s.io_openstackclusters.yaml

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

0 commit comments

Comments
 (0)