From a39da189e55356323858e98efa746ccc0b953e9a 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 +++++++++++++++ api/core/v1beta1/openstackversion_types.go | 2 ++ api/core/v1beta1/zz_generated.deepcopy.go | 10 ++++++++++ bindata/crds/crds.yaml | 20 +++++++++++++++++++ ....openstack.org_openstackcontrolplanes.yaml | 4 ++++ .../core.openstack.org_openstackversions.yaml | 16 +++++++++++++++ internal/openstack/ironic.go | 8 ++++++++ internal/openstack/version.go | 2 ++ .../openstackversion_controller_test.go | 3 +++ 10 files changed, 85 insertions(+) diff --git a/api/bases/core.openstack.org_openstackcontrolplanes.yaml b/api/bases/core.openstack.org_openstackcontrolplanes.yaml index e0db23d0f..9f704a317 100644 --- a/api/bases/core.openstack.org_openstackcontrolplanes.yaml +++ b/api/bases/core.openstack.org_openstackcontrolplanes.yaml @@ -16565,10 +16565,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/api/bases/core.openstack.org_openstackversions.yaml b/api/bases/core.openstack.org_openstackversions.yaml index ae79d6c77..0458f24df 100644 --- a/api/bases/core.openstack.org_openstackversions.yaml +++ b/api/bases/core.openstack.org_openstackversions.yaml @@ -147,10 +147,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -383,10 +387,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -583,10 +591,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -795,10 +807,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/api/core/v1beta1/openstackversion_types.go b/api/core/v1beta1/openstackversion_types.go index 1f138156d..4288686e3 100644 --- a/api/core/v1beta1/openstackversion_types.go +++ b/api/core/v1beta1/openstackversion_types.go @@ -130,8 +130,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/api/core/v1beta1/zz_generated.deepcopy.go b/api/core/v1beta1/zz_generated.deepcopy.go index 2af599dd5..8188d776d 100644 --- a/api/core/v1beta1/zz_generated.deepcopy.go +++ b/api/core/v1beta1/zz_generated.deepcopy.go @@ -512,6 +512,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) @@ -522,6 +527,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 d116406b0..6a49e08a1 100644 --- a/bindata/crds/crds.yaml +++ b/bindata/crds/crds.yaml @@ -16731,10 +16731,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -18375,10 +18379,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -18611,10 +18619,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -18811,10 +18823,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -19023,10 +19039,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 e0db23d0f..9f704a317 100644 --- a/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml +++ b/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml @@ -16565,10 +16565,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 ae79d6c77..0458f24df 100644 --- a/config/crd/bases/core.openstack.org_openstackversions.yaml +++ b/config/crd/bases/core.openstack.org_openstackversions.yaml @@ -147,10 +147,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -383,10 +387,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -583,10 +591,14 @@ spec: type: string ironicConductorImage: type: string + ironicGraphicalConsoleImage: + type: string ironicInspectorImage: type: string ironicNeutronAgentImage: type: string + ironicNovncImage: + type: string ironicPxeImage: type: string ironicPythonAgentImage: @@ -795,10 +807,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/internal/openstack/ironic.go b/internal/openstack/ironic.go index b42bd6551..15c833566 100644 --- a/internal/openstack/ironic.go +++ b/internal/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/internal/openstack/version.go b/internal/openstack/version.go index f15e6c191..02cfe3907 100644 --- a/internal/openstack/version.go +++ b/internal/openstack/version.go @@ -163,8 +163,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/test/functional/ctlplane/openstackversion_controller_test.go b/test/functional/ctlplane/openstackversion_controller_test.go index 5902737c3..440023d96 100644 --- a/test/functional/ctlplane/openstackversion_controller_test.go +++ b/test/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())