Skip to content

Commit 267a288

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 3ba23c4 commit 267a288

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.20250926121941-bcc2acaeaa8d
2424
github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20250925091727-a6113c8dcb73
2525
github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20250922184048-a329ec619422
26-
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250925115354-56c6fb542b58
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.20250926114242-6183563dfa1c
2828
github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20250926111633-01613c48d59a
2929
github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20250922191944-7d54e7c80282

apis/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,8 @@ github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20250925091727-a61
134134
github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20250925091727-a6113c8dcb73/go.mod h1:ev8kmHUsjB6HuYilRQpfQryRWFXRPASBCqKCa/FlTqU=
135135
github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20250922184048-a329ec619422 h1:+uBDR9sEvaF9mLFZuH7eaVoqPvuHaDN6w2QKy+Wffoc=
136136
github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20250922184048-a329ec619422/go.mod h1:/jIEvzabeyAvgiyi4AUDV/nLz/nje/pLyzrMVSYSnyM=
137-
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250925115354-56c6fb542b58 h1:0+XDTUa9d6dWGug+Xvcys8wqiQ11+BuMgP8nLOBrRdw=
138-
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250925115354-56c6fb542b58/go.mod h1:4wRS6rOgUTpx5Rf6nZ+jR5lzqqZUv3kDwecikFSZ4Rg=
137+
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250930082931-858d374dee9b h1:LGNSmkd/2BQ5RNTi/m5I/px4o6dudSfPuBpmH3Xwy98=
138+
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250930082931-858d374dee9b/go.mod h1:4wRS6rOgUTpx5Rf6nZ+jR5lzqqZUv3kDwecikFSZ4Rg=
139139
github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20250926114242-6183563dfa1c h1:q/0SonAarN0d8Osa1iO3YdZxQdJD/pMoj34FeWcOFW8=
140140
github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20250926114242-6183563dfa1c/go.mod h1:xT8Al+S2phSysByx8PLklgeLI9SVbNBoXqjL6NHEH+I=
141141
github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20250926111633-01613c48d59a h1:x3JivogJF/NaZVGulbccCYoYg9WcTrM3/D7vl9sqDvc=

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.20250926121941-bcc2acaeaa8d
3232
github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20250925091727-a6113c8dcb73
3333
github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20250922184048-a329ec619422
34-
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250925115354-56c6fb542b58
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.20250926114242-6183563dfa1c
3737
github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20250926111633-01613c48d59a

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,8 @@ github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20250925091727-a61
144144
github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20250925091727-a6113c8dcb73/go.mod h1:ev8kmHUsjB6HuYilRQpfQryRWFXRPASBCqKCa/FlTqU=
145145
github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20250922184048-a329ec619422 h1:+uBDR9sEvaF9mLFZuH7eaVoqPvuHaDN6w2QKy+Wffoc=
146146
github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20250922184048-a329ec619422/go.mod h1:/jIEvzabeyAvgiyi4AUDV/nLz/nje/pLyzrMVSYSnyM=
147-
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250925115354-56c6fb542b58 h1:0+XDTUa9d6dWGug+Xvcys8wqiQ11+BuMgP8nLOBrRdw=
148-
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250925115354-56c6fb542b58/go.mod h1:4wRS6rOgUTpx5Rf6nZ+jR5lzqqZUv3kDwecikFSZ4Rg=
147+
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250930082931-858d374dee9b h1:LGNSmkd/2BQ5RNTi/m5I/px4o6dudSfPuBpmH3Xwy98=
148+
github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250930082931-858d374dee9b/go.mod h1:4wRS6rOgUTpx5Rf6nZ+jR5lzqqZUv3kDwecikFSZ4Rg=
149149
github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20250926114242-6183563dfa1c h1:q/0SonAarN0d8Osa1iO3YdZxQdJD/pMoj34FeWcOFW8=
150150
github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20250926114242-6183563dfa1c/go.mod h1:xT8Al+S2phSysByx8PLklgeLI9SVbNBoXqjL6NHEH+I=
151151
github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20250926111633-01613c48d59a h1:x3JivogJF/NaZVGulbccCYoYg9WcTrM3/D7vl9sqDvc=

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)