Skip to content

Commit 2387629

Browse files
rabiabays
authored andcommitted
Convert baremetalSetTemplate field to pointer
As this field is optional we should make it a pointer which ensures proper optional validation i.e struct is optional, but if it is provided, some of its internal fields can be required. Depends-On: openstack-k8s-operators/openstack-baremetal-operator#328 Signed-off-by: rabi <ramishra@redhat.com>
1 parent 8fb6d05 commit 2387629

9 files changed

Lines changed: 48 additions & 31 deletions

File tree

apis/dataplane/v1beta1/openstackdataplanenodeset_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import (
3737
type OpenStackDataPlaneNodeSetSpec struct {
3838
// +kubebuilder:validation:Optional
3939
// BaremetalSetTemplate Template for BaremetalSet for the NodeSet
40-
BaremetalSetTemplate baremetalv1.OpenStackBaremetalSetTemplateSpec `json:"baremetalSetTemplate,omitempty"`
40+
BaremetalSetTemplate *baremetalv1.OpenStackBaremetalSetTemplateSpec `json:"baremetalSetTemplate,omitempty"`
4141

4242
// +kubebuilder:validation:Required
4343
// NodeTemplate - node attributes specific to nodes defined by this resource. These

apis/dataplane/v1beta1/openstackdataplanenodeset_webhook.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,11 @@ func (r *OpenStackDataPlaneNodeSet) Default() {
6868

6969
// Default - set defaults for this OpenStackDataPlaneNodeSet Spec
7070
func (spec *OpenStackDataPlaneNodeSetSpec) Default() {
71-
domain := spec.BaremetalSetTemplate.DomainName
71+
var domain string
72+
if spec.BaremetalSetTemplate != nil {
73+
domain = spec.BaremetalSetTemplate.DomainName
74+
}
75+
7276
for nodeName, node := range spec.Nodes {
7377
if node.HostName == "" {
7478
node.HostName = nodeName
@@ -82,7 +86,7 @@ func (spec *OpenStackDataPlaneNodeSetSpec) Default() {
8286
spec.Nodes[nodeName] = *node.DeepCopy()
8387
}
8488

85-
if !spec.PreProvisioned {
89+
if !spec.PreProvisioned && spec.BaremetalSetTemplate != nil {
8690
spec.NodeTemplate.Ansible.AnsibleUser = spec.BaremetalSetTemplate.CloudUserName
8791
if spec.BaremetalSetTemplate.DeploymentSSHSecret == "" {
8892
spec.BaremetalSetTemplate.DeploymentSSHSecret = spec.NodeTemplate.AnsibleSSHPrivateKeySecret
@@ -212,12 +216,14 @@ func (r *OpenStackDataPlaneNodeSetSpec) ValidateUpdate(oldSpec *OpenStackDataPla
212216
// to the openstack-baremetal-operator webhook to avoid duplicating logic.
213217
if !reflect.DeepEqual(r.BaremetalSetTemplate, oldSpec.BaremetalSetTemplate) {
214218
// Call openstack-baremetal-operator webhook Validate() to parse changes
215-
err := r.BaremetalSetTemplate.ValidateTemplate(
216-
len(oldSpec.Nodes), oldSpec.BaremetalSetTemplate)
217-
if err != nil {
218-
errors = append(errors, field.Forbidden(
219-
field.NewPath("spec.baremetalSetTemplate"),
220-
fmt.Sprintf("%s", err)))
219+
if r.BaremetalSetTemplate != nil && oldSpec.BaremetalSetTemplate != nil {
220+
err := r.BaremetalSetTemplate.ValidateTemplate(
221+
len(oldSpec.Nodes), *oldSpec.BaremetalSetTemplate)
222+
if err != nil {
223+
errors = append(errors, field.Forbidden(
224+
field.NewPath("spec.baremetalSetTemplate"),
225+
fmt.Sprintf("%s", err)))
226+
}
221227
}
222228
}
223229

apis/dataplane/v1beta1/zz_generated.deepcopy.go

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

apis/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ require (
2323
github.com/openstack-k8s-operators/neutron-operator/api v0.6.1-0.20250916093251-7cfe04efd126
2424
github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20250917121202-3d3857d13c4c
2525
github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20250916093536-0423d6aadfb4
26-
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250912113640-0e6ddd45ee52
26+
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250930082931-858d374dee9b
2727
github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20250918124008-71fb50adbeb5
2828
github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20250905081434-85ee919b626c
2929
github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20250909184158-7873da060764

apis/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,8 @@ github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20250917121202-3d3
127127
github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20250917121202-3d3857d13c4c/go.mod h1:TMosRCd2EszCD0kugIDUeXFymuZRnw+CicBwLmExYR4=
128128
github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20250916093536-0423d6aadfb4 h1:FGLm70RGFTHA9jAxf5M8ADDjGyWRl9QSHNLVN3uy+Og=
129129
github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20250916093536-0423d6aadfb4/go.mod h1:qFLvSjUjUAD5uS8m2yBhYO5X6ViIWxWF0qtYCaj+wo0=
130-
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250912113640-0e6ddd45ee52 h1:QuOy7xZzbIfPKDQ940r+z5fsqr3aTAdQFjDOXuFY2Gw=
131-
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250912113640-0e6ddd45ee52/go.mod h1:15x01xs3dolD9G/X+V3kW2EsE4a6/Z/hFgJHcN3Yg9Y=
130+
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250930082931-858d374dee9b h1:LGNSmkd/2BQ5RNTi/m5I/px4o6dudSfPuBpmH3Xwy98=
131+
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250930082931-858d374dee9b/go.mod h1:4wRS6rOgUTpx5Rf6nZ+jR5lzqqZUv3kDwecikFSZ4Rg=
132132
github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20250918124008-71fb50adbeb5 h1:kjCoac5RqGN2m3Iw0+XmaiEwo/FuGB9MfWAeHT+6caI=
133133
github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20250918124008-71fb50adbeb5/go.mod h1:gxQk8WOaA2lQ9oy4ZKXK35oKuD6pKo4Ce2XkUkFjkE4=
134134
github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20250905081434-85ee919b626c h1:thTQEtjo25kEYW+woLiPpvByMmWkI/jhh+sWokJtLN4=

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ require (
3131
github.com/openstack-k8s-operators/neutron-operator/api v0.6.1-0.20250916093251-7cfe04efd126
3232
github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20250917121202-3d3857d13c4c
3333
github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20250916093536-0423d6aadfb4
34-
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250912113640-0e6ddd45ee52
34+
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250930082931-858d374dee9b
3535
github.com/openstack-k8s-operators/openstack-operator/apis v0.0.0-20240531084739-3b4c0451297c
3636
github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20250918124008-71fb50adbeb5
3737
github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20250905081434-85ee919b626c

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,8 @@ github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20250917121202-3d3
137137
github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20250917121202-3d3857d13c4c/go.mod h1:TMosRCd2EszCD0kugIDUeXFymuZRnw+CicBwLmExYR4=
138138
github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20250916093536-0423d6aadfb4 h1:FGLm70RGFTHA9jAxf5M8ADDjGyWRl9QSHNLVN3uy+Og=
139139
github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20250916093536-0423d6aadfb4/go.mod h1:qFLvSjUjUAD5uS8m2yBhYO5X6ViIWxWF0qtYCaj+wo0=
140-
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250912113640-0e6ddd45ee52 h1:QuOy7xZzbIfPKDQ940r+z5fsqr3aTAdQFjDOXuFY2Gw=
141-
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250912113640-0e6ddd45ee52/go.mod h1:15x01xs3dolD9G/X+V3kW2EsE4a6/Z/hFgJHcN3Yg9Y=
140+
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250930082931-858d374dee9b h1:LGNSmkd/2BQ5RNTi/m5I/px4o6dudSfPuBpmH3Xwy98=
141+
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250930082931-858d374dee9b/go.mod h1:4wRS6rOgUTpx5Rf6nZ+jR5lzqqZUv3kDwecikFSZ4Rg=
142142
github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20250918124008-71fb50adbeb5 h1:kjCoac5RqGN2m3Iw0+XmaiEwo/FuGB9MfWAeHT+6caI=
143143
github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20250918124008-71fb50adbeb5/go.mod h1:gxQk8WOaA2lQ9oy4ZKXK35oKuD6pKo4Ce2XkUkFjkE4=
144144
github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20250905081434-85ee919b626c h1:thTQEtjo25kEYW+woLiPpvByMmWkI/jhh+sWokJtLN4=

pkg/dataplane/baremetal.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -61,16 +61,18 @@ func DeployBaremetalSet(
6161
ownerLabels := labels.GetLabels(instance, labels.GetGroupLabel(NodeSetLabel), map[string]string{})
6262
baremetalSet.Labels = utils.MergeStringMaps(baremetalSet.GetLabels(), ownerLabels)
6363
baremetalSet.Spec.BaremetalHosts = make(map[string]baremetalv1.InstanceSpec)
64-
instance.Spec.BaremetalSetTemplate.DeepCopyInto(&baremetalSet.Spec.OpenStackBaremetalSetTemplateSpec)
65-
// Set Images
66-
if containerImages.OsContainerImage != nil && instance.Spec.BaremetalSetTemplate.OSContainerImageURL == "" {
67-
baremetalSet.Spec.OSContainerImageURL = *containerImages.OsContainerImage
68-
}
69-
if containerImages.AgentImage != nil && instance.Spec.BaremetalSetTemplate.AgentImageURL == "" {
70-
baremetalSet.Spec.AgentImageURL = *containerImages.AgentImage
71-
}
72-
if containerImages.ApacheImage != nil && instance.Spec.BaremetalSetTemplate.ApacheImageURL == "" {
73-
baremetalSet.Spec.ApacheImageURL = *containerImages.ApacheImage
64+
if instance.Spec.BaremetalSetTemplate != nil {
65+
instance.Spec.BaremetalSetTemplate.DeepCopyInto(&baremetalSet.Spec.OpenStackBaremetalSetTemplateSpec)
66+
// Set Images
67+
if containerImages.OsContainerImage != nil && instance.Spec.BaremetalSetTemplate.OSContainerImageURL == "" {
68+
baremetalSet.Spec.OSContainerImageURL = *containerImages.OsContainerImage
69+
}
70+
if containerImages.AgentImage != nil && instance.Spec.BaremetalSetTemplate.AgentImageURL == "" {
71+
baremetalSet.Spec.AgentImageURL = *containerImages.AgentImage
72+
}
73+
if containerImages.ApacheImage != nil && instance.Spec.BaremetalSetTemplate.ApacheImageURL == "" {
74+
baremetalSet.Spec.ApacheImageURL = *containerImages.ApacheImage
75+
}
7476
}
7577

7678
for _, node := range instance.Spec.Nodes {

tests/functional/dataplane/openstackdataplanenodeset_webhook_test.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,10 @@ var _ = Describe("DataplaneNodeSet Webhook", func() {
5151
It("Should block changes to the BmhLabelSelector object in baremetalSetTemplate spec", func() {
5252
Eventually(func(_ Gomega) string {
5353
instance := GetDataplaneNodeSet(dataplaneNodeSetName)
54-
instance.Spec.BaremetalSetTemplate.BmhLabelSelector = map[string]string{
55-
"app": "openstack1",
54+
if instance.Spec.BaremetalSetTemplate != nil {
55+
instance.Spec.BaremetalSetTemplate.BmhLabelSelector = map[string]string{
56+
"app": "openstack1",
57+
}
5658
}
5759
err := th.K8sClient.Update(th.Ctx, instance)
5860
return fmt.Sprintf("%s", err)
@@ -80,9 +82,11 @@ var _ = Describe("DataplaneNodeSet Webhook", func() {
8082
It("Should allow changes to the CloudUserName", func() {
8183
Eventually(func(_ Gomega) error {
8284
instance := GetDataplaneNodeSet(dataplaneNodeSetName)
83-
instance.Spec.BaremetalSetTemplate.CloudUserName = "new-user"
84-
instance.Spec.BaremetalSetTemplate.BmhLabelSelector = map[string]string{
85-
"app": "test-openstack",
85+
if instance.Spec.BaremetalSetTemplate != nil {
86+
instance.Spec.BaremetalSetTemplate.CloudUserName = "new-user"
87+
instance.Spec.BaremetalSetTemplate.BmhLabelSelector = map[string]string{
88+
"app": "test-openstack",
89+
}
8690
}
8791

8892
return th.K8sClient.Update(th.Ctx, instance)

0 commit comments

Comments
 (0)