From 7a06940710eb27bbb615484a81b8ab4657a4fbfe Mon Sep 17 00:00:00 2001 From: Steve Baker Date: Fri, 10 Oct 2025 08:04:48 +1300 Subject: [PATCH] Add CSV entries for new graphical console images The GraphicalConsoles attribute is a feature flag and setting it to Enabled won't be supported in the RHOSO-18 timeframe, this means that there is not expected to be Antelope versions of the new images IronicGraphicalConsoleImage and IronicNovncImage. These images will not be pulled in the default case. This change is proposed now to support future feature development. Jira: OSPRH-20211 --- ....openstack.org_openstackcontrolplanes.yaml | 4 ++++ .../core.openstack.org_openstackversions.yaml | 16 +++++++++++++++ apis/core/v1beta1/openstackversion_types.go | 2 ++ apis/core/v1beta1/zz_generated.deepcopy.go | 10 ++++++++++ bindata/crds/crds.yaml | 20 +++++++++++++++++++ ....openstack.org_openstackcontrolplanes.yaml | 4 ++++ .../core.openstack.org_openstackversions.yaml | 16 +++++++++++++++ pkg/openstack/ironic.go | 8 ++++++++ pkg/openstack/version.go | 2 ++ .../openstackversion_controller_test.go | 3 +++ 10 files changed, 85 insertions(+) diff --git a/apis/bases/core.openstack.org_openstackcontrolplanes.yaml b/apis/bases/core.openstack.org_openstackcontrolplanes.yaml index 5d6086eb9..8da4d5d77 100644 --- a/apis/bases/core.openstack.org_openstackcontrolplanes.yaml +++ b/apis/bases/core.openstack.org_openstackcontrolplanes.yaml @@ -16071,10 +16071,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: diff --git a/apis/bases/core.openstack.org_openstackversions.yaml b/apis/bases/core.openstack.org_openstackversions.yaml index e288d3472..71edfc759 100644 --- a/apis/bases/core.openstack.org_openstackversions.yaml +++ b/apis/bases/core.openstack.org_openstackversions.yaml @@ -143,10 +143,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -375,10 +379,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -571,10 +579,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -779,10 +791,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: diff --git a/apis/core/v1beta1/openstackversion_types.go b/apis/core/v1beta1/openstackversion_types.go index 7c3f9a3b9..b1ef10865 100644 --- a/apis/core/v1beta1/openstackversion_types.go +++ b/apis/core/v1beta1/openstackversion_types.go @@ -128,8 +128,10 @@ type ContainerTemplate struct { InfraRedisImage *string `json:"infraRedisImage,omitempty"` IronicAPIImage *string `json:"ironicAPIImage,omitempty"` IronicConductorImage *string `json:"ironicConductorImage,omitempty"` + IronicGraphicalConsoleImage *string `json:"ironicGraphicalConsoleImage,omitempty"` IronicInspectorImage *string `json:"ironicInspectorImage,omitempty"` IronicNeutronAgentImage *string `json:"ironicNeutronAgentImage,omitempty"` + IronicNovncImage *string `json:"ironicNovncImage,omitempty"` IronicPxeImage *string `json:"ironicPxeImage,omitempty"` IronicPythonAgentImage *string `json:"ironicPythonAgentImage,omitempty"` KeystoneAPIImage *string `json:"keystoneAPIImage,omitempty"` diff --git a/apis/core/v1beta1/zz_generated.deepcopy.go b/apis/core/v1beta1/zz_generated.deepcopy.go index 7d3f8f17c..12df26db4 100644 --- a/apis/core/v1beta1/zz_generated.deepcopy.go +++ b/apis/core/v1beta1/zz_generated.deepcopy.go @@ -502,6 +502,11 @@ func (in *ContainerTemplate) DeepCopyInto(out *ContainerTemplate) { *out = new(string) **out = **in } + if in.IronicGraphicalConsoleImage != nil { + in, out := &in.IronicGraphicalConsoleImage, &out.IronicGraphicalConsoleImage + *out = new(string) + **out = **in + } if in.IronicInspectorImage != nil { in, out := &in.IronicInspectorImage, &out.IronicInspectorImage *out = new(string) @@ -512,6 +517,11 @@ func (in *ContainerTemplate) DeepCopyInto(out *ContainerTemplate) { *out = new(string) **out = **in } + if in.IronicNovncImage != nil { + in, out := &in.IronicNovncImage, &out.IronicNovncImage + *out = new(string) + **out = **in + } if in.IronicPxeImage != nil { in, out := &in.IronicPxeImage, &out.IronicPxeImage *out = new(string) diff --git a/bindata/crds/crds.yaml b/bindata/crds/crds.yaml index 97a0e7d41..278f5c898 100644 --- a/bindata/crds/crds.yaml +++ b/bindata/crds/crds.yaml @@ -16237,10 +16237,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -17860,10 +17864,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -18092,10 +18100,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -18288,10 +18300,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -18496,10 +18512,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: diff --git a/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml b/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml index 5d6086eb9..8da4d5d77 100644 --- a/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml +++ b/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml @@ -16071,10 +16071,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: diff --git a/config/crd/bases/core.openstack.org_openstackversions.yaml b/config/crd/bases/core.openstack.org_openstackversions.yaml index e288d3472..71edfc759 100644 --- a/config/crd/bases/core.openstack.org_openstackversions.yaml +++ b/config/crd/bases/core.openstack.org_openstackversions.yaml @@ -143,10 +143,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -375,10 +379,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -571,10 +579,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -779,10 +791,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: diff --git a/pkg/openstack/ironic.go b/pkg/openstack/ironic.go index 831bbf364..e44bfb7a3 100644 --- a/pkg/openstack/ironic.go +++ b/pkg/openstack/ironic.go @@ -36,8 +36,10 @@ func ReconcileIronic(ctx context.Context, instance *corev1beta1.OpenStackControl instance.Status.Conditions.Remove(corev1beta1.OpenStackControlPlaneExposeIronicReadyCondition) instance.Status.ContainerImages.IronicAPIImage = nil instance.Status.ContainerImages.IronicConductorImage = nil + instance.Status.ContainerImages.IronicGraphicalConsoleImage = nil instance.Status.ContainerImages.IronicInspectorImage = nil instance.Status.ContainerImages.IronicNeutronAgentImage = nil + instance.Status.ContainerImages.IronicNovncImage = nil instance.Status.ContainerImages.IronicPxeImage = nil instance.Status.ContainerImages.IronicPythonAgentImage = nil return ctrl.Result{}, nil @@ -173,8 +175,10 @@ func ReconcileIronic(ctx context.Context, instance *corev1beta1.OpenStackControl ironic.Spec.Images.API = *version.Status.ContainerImages.IronicAPIImage ironic.Spec.Images.Conductor = *version.Status.ContainerImages.IronicConductorImage + ironic.Spec.Images.GraphicalConsole = *version.Status.ContainerImages.IronicGraphicalConsoleImage ironic.Spec.Images.Inspector = *version.Status.ContainerImages.IronicInspectorImage ironic.Spec.Images.NeutronAgent = *version.Status.ContainerImages.IronicNeutronAgentImage + ironic.Spec.Images.NoVNCProxy = *version.Status.ContainerImages.IronicNovncImage ironic.Spec.Images.Pxe = *version.Status.ContainerImages.IronicPxeImage ironic.Spec.Images.IronicPythonAgent = *version.Status.ContainerImages.IronicPythonAgentImage @@ -206,8 +210,10 @@ func ReconcileIronic(ctx context.Context, instance *corev1beta1.OpenStackControl Log.Info("Ironic ready condition is true") instance.Status.ContainerImages.IronicAPIImage = version.Status.ContainerImages.IronicAPIImage instance.Status.ContainerImages.IronicConductorImage = version.Status.ContainerImages.IronicConductorImage + instance.Status.ContainerImages.IronicGraphicalConsoleImage = version.Status.ContainerImages.IronicGraphicalConsoleImage instance.Status.ContainerImages.IronicInspectorImage = version.Status.ContainerImages.IronicInspectorImage instance.Status.ContainerImages.IronicNeutronAgentImage = version.Status.ContainerImages.IronicNeutronAgentImage + instance.Status.ContainerImages.IronicNovncImage = version.Status.ContainerImages.IronicNovncImage instance.Status.ContainerImages.IronicPxeImage = version.Status.ContainerImages.IronicPxeImage instance.Status.ContainerImages.IronicPythonAgentImage = version.Status.ContainerImages.IronicPythonAgentImage instance.Status.Conditions.MarkTrue(corev1beta1.OpenStackControlPlaneIronicReadyCondition, corev1beta1.OpenStackControlPlaneIronicReadyMessage) @@ -241,8 +247,10 @@ func IronicImageMatch(ctx context.Context, controlPlane *corev1beta1.OpenStackCo if controlPlane.Spec.Ironic.Enabled { if !stringPointersEqual(controlPlane.Status.ContainerImages.IronicAPIImage, version.Status.ContainerImages.IronicAPIImage) || !stringPointersEqual(controlPlane.Status.ContainerImages.IronicConductorImage, version.Status.ContainerImages.IronicConductorImage) || + !stringPointersEqual(controlPlane.Status.ContainerImages.IronicGraphicalConsoleImage, version.Status.ContainerImages.IronicGraphicalConsoleImage) || !stringPointersEqual(controlPlane.Status.ContainerImages.IronicInspectorImage, version.Status.ContainerImages.IronicInspectorImage) || !stringPointersEqual(controlPlane.Status.ContainerImages.IronicNeutronAgentImage, version.Status.ContainerImages.IronicNeutronAgentImage) || + !stringPointersEqual(controlPlane.Status.ContainerImages.IronicNovncImage, version.Status.ContainerImages.IronicNovncImage) || !stringPointersEqual(controlPlane.Status.ContainerImages.IronicPxeImage, version.Status.ContainerImages.IronicPxeImage) || !stringPointersEqual(controlPlane.Status.ContainerImages.IronicPythonAgentImage, version.Status.ContainerImages.IronicPythonAgentImage) { Log.Info("Ironic images do not match") diff --git a/pkg/openstack/version.go b/pkg/openstack/version.go index d0a4e84eb..7d4fa363b 100644 --- a/pkg/openstack/version.go +++ b/pkg/openstack/version.go @@ -160,8 +160,10 @@ func GetContainerImages(defaults *corev1beta1.ContainerDefaults, instance corev1 InfraRedisImage: getImg(instance.Spec.CustomContainerImages.InfraRedisImage, defaults.InfraRedisImage), IronicAPIImage: getImg(instance.Spec.CustomContainerImages.IronicAPIImage, defaults.IronicAPIImage), IronicConductorImage: getImg(instance.Spec.CustomContainerImages.IronicConductorImage, defaults.IronicConductorImage), + IronicGraphicalConsoleImage: getImg(instance.Spec.CustomContainerImages.IronicGraphicalConsoleImage, defaults.IronicGraphicalConsoleImage), IronicInspectorImage: getImg(instance.Spec.CustomContainerImages.IronicInspectorImage, defaults.IronicInspectorImage), IronicNeutronAgentImage: getImg(instance.Spec.CustomContainerImages.IronicNeutronAgentImage, defaults.IronicNeutronAgentImage), + IronicNovncImage: getImg(instance.Spec.CustomContainerImages.IronicNovncImage, defaults.IronicNovncImage), IronicPxeImage: getImg(instance.Spec.CustomContainerImages.IronicPxeImage, defaults.IronicPxeImage), IronicPythonAgentImage: getImg(instance.Spec.CustomContainerImages.IronicPythonAgentImage, defaults.IronicPythonAgentImage), KeystoneAPIImage: getImg(instance.Spec.CustomContainerImages.KeystoneAPIImage, defaults.KeystoneAPIImage), diff --git a/tests/functional/ctlplane/openstackversion_controller_test.go b/tests/functional/ctlplane/openstackversion_controller_test.go index 2d647986d..1afdb7a5f 100644 --- a/tests/functional/ctlplane/openstackversion_controller_test.go +++ b/tests/functional/ctlplane/openstackversion_controller_test.go @@ -149,6 +149,9 @@ var _ = Describe("OpenStackOperator controller", func() { g.Expect(version.Status.ContainerImages.InfraRedisImage).ShouldNot(BeNil()) g.Expect(version.Status.ContainerImages.IronicAPIImage).ShouldNot(BeNil()) g.Expect(version.Status.ContainerImages.IronicConductorImage).ShouldNot(BeNil()) + //TODO(stevebaker) uncomment when these images are available + // g.Expect(version.Status.ContainerImages.IronicGraphicalConsoleImage).ShouldNot(BeNil()) + // g.Expect(version.Status.ContainerImages.IronicNovncImage).ShouldNot(BeNil()) g.Expect(version.Status.ContainerImages.IronicInspectorImage).ShouldNot(BeNil()) g.Expect(version.Status.ContainerImages.IronicNeutronAgentImage).ShouldNot(BeNil()) g.Expect(version.Status.ContainerImages.IronicPxeImage).ShouldNot(BeNil())