Skip to content

Commit a1f0ffd

Browse files
committed
Split ImageFilter into ImageParam
This makes validation of the filter much simpler, because either ID or Filter must be specified.
1 parent 59689c9 commit a1f0ffd

28 files changed

+407
-197
lines changed

api/v1alpha5/conversion.go

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -360,13 +360,13 @@ func Convert_v1alpha5_OpenStackMachineSpec_To_v1beta1_OpenStackMachineSpec(in *O
360360
out.ServerGroup = &infrav1.ServerGroupFilter{}
361361
}
362362

363-
imageFilter := infrav1.ImageFilter{}
363+
imageParam := infrav1.ImageParam{}
364364
if in.ImageUUID != "" {
365-
imageFilter.ID = &in.ImageUUID
365+
imageParam.ID = &in.ImageUUID
366366
} else if in.Image != "" { // Only add name when ID is not set, in v1beta1 it's not possible to set both.
367-
imageFilter.Name = &in.Image
367+
imageParam.Filter = &infrav1.ImageFilter{Name: &in.Image}
368368
}
369-
out.Image = imageFilter
369+
out.Image = imageParam
370370

371371
if in.IdentityRef != nil {
372372
out.IdentityRef = &infrav1.OpenStackIdentityReference{Name: in.IdentityRef.Name}
@@ -645,12 +645,10 @@ func Convert_v1beta1_OpenStackMachineSpec_To_v1alpha5_OpenStackMachineSpec(in *i
645645
out.ServerGroupID = in.ServerGroup.ID
646646
}
647647

648-
if in.Image.Name != nil && *in.Image.Name != "" {
649-
out.Image = *in.Image.Name
650-
}
651-
652-
if in.Image.ID != nil && *in.Image.ID != "" {
648+
if in.Image.ID != nil {
653649
out.ImageUUID = *in.Image.ID
650+
} else if in.Image.Filter != nil && in.Image.Filter.Name != nil {
651+
out.Image = *in.Image.Filter.Name
654652
}
655653

656654
if in.IdentityRef != nil {

api/v1alpha5/zz_generated.conversion.go

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

api/v1alpha6/openstackmachine_conversion.go

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -266,13 +266,13 @@ func Convert_v1alpha6_OpenStackMachineSpec_To_v1beta1_OpenStackMachineSpec(in *O
266266
out.ServerGroup = nil
267267
}
268268

269-
imageFilter := infrav1.ImageFilter{}
269+
imageParam := infrav1.ImageParam{}
270270
if in.ImageUUID != "" {
271-
imageFilter.ID = &in.ImageUUID
271+
imageParam.ID = &in.ImageUUID
272272
} else if in.Image != "" { // Only add name when ID is not set, in v1beta1 it's not possible to set both.
273-
imageFilter.Name = &in.Image
273+
imageParam.Filter = &infrav1.ImageFilter{Name: &in.Image}
274274
}
275-
out.Image = imageFilter
275+
out.Image = imageParam
276276

277277
if len(in.ServerMetadata) > 0 {
278278
serverMetadata := make([]infrav1.ServerMetadata, 0, len(in.ServerMetadata))
@@ -314,12 +314,10 @@ func Convert_v1beta1_OpenStackMachineSpec_To_v1alpha6_OpenStackMachineSpec(in *i
314314
out.ServerGroupID = in.ServerGroup.ID
315315
}
316316

317-
if in.Image.Name != nil && *in.Image.Name != "" {
318-
out.Image = *in.Image.Name
319-
}
320-
321-
if in.Image.ID != nil && *in.Image.ID != "" {
317+
if in.Image.ID != nil {
322318
out.ImageUUID = *in.Image.ID
319+
} else if in.Image.Filter != nil && in.Image.Filter.Name != nil {
320+
out.Image = *in.Image.Filter.Name
323321
}
324322

325323
if len(in.ServerMetadata) > 0 {

api/v1alpha6/zz_generated.conversion.go

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

api/v1alpha7/openstackmachine_conversion.go

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -160,13 +160,13 @@ func Convert_v1alpha7_OpenStackMachineSpec_To_v1beta1_OpenStackMachineSpec(in *O
160160
out.ServerGroup = nil
161161
}
162162

163-
imageFilter := infrav1.ImageFilter{}
163+
imageParam := infrav1.ImageParam{}
164164
if in.ImageUUID != "" {
165-
imageFilter.ID = &in.ImageUUID
165+
imageParam.ID = &in.ImageUUID
166166
} else if in.Image != "" { // Only add name when ID is not set, in v1beta1 it's not possible to set both.
167-
imageFilter.Name = &in.Image
167+
imageParam.Filter = &infrav1.ImageFilter{Name: &in.Image}
168168
}
169-
out.Image = imageFilter
169+
out.Image = imageParam
170170

171171
if len(in.ServerMetadata) > 0 {
172172
serverMetadata := make([]infrav1.ServerMetadata, 0, len(in.ServerMetadata))
@@ -205,12 +205,10 @@ func Convert_v1beta1_OpenStackMachineSpec_To_v1alpha7_OpenStackMachineSpec(in *i
205205
out.ServerGroupID = in.ServerGroup.ID
206206
}
207207

208-
if in.Image.Name != nil && *in.Image.Name != "" {
209-
out.Image = *in.Image.Name
210-
}
211-
212-
if in.Image.ID != nil && *in.Image.ID != "" {
208+
if in.Image.ID != nil {
213209
out.ImageUUID = *in.Image.ID
210+
} else if in.Image.Filter != nil && in.Image.Filter.Name != nil {
211+
out.Image = *in.Image.Filter.Name
214212
}
215213

216214
if len(in.ServerMetadata) > 0 {

api/v1alpha7/zz_generated.conversion.go

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

api/v1beta1/openstackmachine_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ type OpenStackMachineSpec struct {
4545
// The image to use for your server instance.
4646
// If the rootVolume is specified, this will be used when creating the root volume.
4747
// +required
48-
Image ImageFilter `json:"image"`
48+
Image ImageParam `json:"image"`
4949

5050
// The ssh key to inject in the instance
5151
SSHKeyName string `json:"sshKeyName,omitempty"`

api/v1beta1/types.go

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,29 @@ type OpenStackMachineTemplateResource struct {
2828
Spec OpenStackMachineSpec `json:"spec"`
2929
}
3030

31-
// ImageFilter describes the data needed to identify which image to use. If ID is provided it is required that all other fields are unset.
32-
// +kubebuilder:validation:XValidation:rule="(has(self.id) && !has(self.name) && !has(self.tags)) || !has(self.id)",message="when ID is set you cannot set other options"
33-
type ImageFilter struct {
34-
// The ID of the desired image. If ID is provided, the other filters cannot be provided. Must be in UUID format.
31+
// ImageParam describes a glance image. It can be specified by ID or filter.
32+
// +kubebuilder:validation:MaxProperties:=1
33+
// +kubebuilder:validation:MinProperties:=1
34+
type ImageParam struct {
35+
// ID is the uuid of the image. ID will not be validated before use.
3536
// +kubebuilder:validation:Format:=uuid
3637
// +optional
3738
ID optional.String `json:"id,omitempty"`
39+
40+
// Filter describes a query for an image. If specified, the combination
41+
// of name and tags must return a single matching image or an error will
42+
// be raised.
43+
// +optional
44+
Filter *ImageFilter `json:"filter,omitempty"`
45+
}
46+
47+
// ImageFilter describes a query for an image.
48+
// +kubebuilder:validation:MinProperties:=1
49+
type ImageFilter struct {
3850
// The name of the desired image. If specified, the combination of name and tags must return a single matching image or an error will be raised.
3951
// +optional
4052
Name optional.String `json:"name,omitempty"`
53+
4154
// The tags associated with the desired image. If specified, the combination of name and tags must return a single matching image or an error will be raised.
4255
// +listType=set
4356
// +optional

api/v1beta1/zz_generated.deepcopy.go

Lines changed: 25 additions & 5 deletions
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: 26 additions & 20 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)