From aa7bf02e6b5de8141d9bdc5555a8a7b46184fbd6 Mon Sep 17 00:00:00 2001
From: rferraz <RogerioOliveira.Ferraz@windriver.com>
Date: Tue, 9 Nov 2021 05:02:58 -0300
Subject: [PATCH] PCI IRQ affinity mask metadata

This patch introduces the hw:pci_irq_affinity_mask metadata.

The metadata hw:pci_irq_affinity_mask specifies which CPU cores are
interrupted due to PCI IRQ requests. It can be set as a compute flavor
extra spec, as well as a compute image or volume metadata.

Test Plan                                                         Status
1. New metadata is added to the supported metadata list           PASSED
   on compute flavor, compute image and volume metadata
2. New metadata can be set to a value                             PASSED
   on compute flavor, compute image and/or volume metadata
3. New metadata can be changed value and/or deleted               PASSED
   on compute flavor, compute image and/or volume metadata
4. New metadata persists when re-applying OpenStack               PASSED

Regression
1. New metadata is added to the supported metadata list           PASSED
   on compute flavor, compute image and volume metadata
2. New metadata can be set a value, changed valued and deleted    PASSED
   on compute flavor, compute image and volume metadata

Story: 2009299
Task: 43861

Signed-off-by: rferraz <RogerioOliveira.Ferraz@windriver.com>
Change-Id: I0f94e8cddcff744306a01ce275c697cb39f8c5e7
---
 openstack-helm/centos/openstack-helm.spec     |  2 +
 ...-extra-spec-hw-pci_irq_affinity_mask.patch | 75 +++++++++++++++++++
 .../manifests/manifest.yaml                   | 20 +++++
 3 files changed, 97 insertions(+)
 create mode 100644 openstack-helm/files/0010-Add-flavor-extra-spec-hw-pci_irq_affinity_mask.patch

diff --git a/openstack-helm/centos/openstack-helm.spec b/openstack-helm/centos/openstack-helm.spec
index 8d08003d..47f5cdf1 100644
--- a/openstack-helm/centos/openstack-helm.spec
+++ b/openstack-helm/centos/openstack-helm.spec
@@ -28,6 +28,7 @@ Patch06: 0006-Allow-set-public-endpoint-url-for-keystone-endpoints.patch
 Patch07: 0007-Wrong-usage-of-rbd_store_chunk_size.patch
 Patch08: 0008-Add-stx_admin-account.patch
 Patch09: 0009-Disabling-helm3_hook.patch
+Patch10: 0010-Add-flavor-extra-spec-hw-pci_irq_affinity_mask.patch
 
 BuildRequires: helm
 BuildRequires: openstack-helm-infra
@@ -48,6 +49,7 @@ Openstack Helm charts
 %patch07 -p1
 %patch08 -p1
 %patch09 -p1
+%patch10 -p1
 
 %build
 # Stage helm-toolkit in the local repo
diff --git a/openstack-helm/files/0010-Add-flavor-extra-spec-hw-pci_irq_affinity_mask.patch b/openstack-helm/files/0010-Add-flavor-extra-spec-hw-pci_irq_affinity_mask.patch
new file mode 100644
index 00000000..4d0673c9
--- /dev/null
+++ b/openstack-helm/files/0010-Add-flavor-extra-spec-hw-pci_irq_affinity_mask.patch
@@ -0,0 +1,75 @@
+From 6d54af3aa180b3b82614ebc0cedd8b4d7d9f5db6 Mon Sep 17 00:00:00 2001
+From: rferraz <RogerioOliveira.Ferraz@windriver.com>
+Date: Wed, 17 Nov 2021 11:32:23 -0300
+Subject: [PATCH] Add-flavor-extra-spec-hw-pci_irq_affinity_mask
+
+---
+ glance/templates/configmap-etc.yaml     | 3 +++
+ glance/templates/deployment-api.yaml    | 6 ++++++
+ glance/templates/job-metadefs-load.yaml | 6 ++++++
+ glance/values.yaml                      | 1 +
+ 4 files changed, 16 insertions(+)
+
+diff --git a/glance/templates/configmap-etc.yaml b/glance/templates/configmap-etc.yaml
+index 97f19fbc..f9be6bfb 100644
+--- a/glance/templates/configmap-etc.yaml
++++ b/glance/templates/configmap-etc.yaml
+@@ -195,6 +195,9 @@ data:
+   glance-api-paste.ini: {{ include "helm-toolkit.utils.to_ini" .Values.conf.paste | b64enc }}
+   glance-registry.conf: {{ include "helm-toolkit.utils.to_oslo_conf" .Values.conf.glance_registry | b64enc }}
+   glance-registry-paste.ini: {{ include "helm-toolkit.utils.to_ini" .Values.conf.paste_registry | b64enc }}
++{{- range $key, $val := .Values.conf.extra_metadata }}
++  compute_{{ $key }}.json: {{ toJson $val | b64enc }}
++{{- end }}
+   policy.yaml: {{ toYaml .Values.conf.policy | b64enc }}
+   api_audit_map.conf: {{ include "helm-toolkit.utils.to_oslo_conf" .Values.conf.api_audit_map | b64enc }}
+ {{- include "helm-toolkit.snippets.values_template_renderer" ( dict "envAll" $envAll "template" .Values.conf.swift_store "key" "swift-store.conf" "format" "Secret" ) | indent 2 }}
+diff --git a/glance/templates/deployment-api.yaml b/glance/templates/deployment-api.yaml
+index 78e16715..81711967 100644
+--- a/glance/templates/deployment-api.yaml
++++ b/glance/templates/deployment-api.yaml
+@@ -183,6 +183,12 @@ spec:
+               mountPath: /etc/glance/glance-api.conf
+               subPath: glance-api.conf
+               readOnly: true
++            {{- range $key, $val := .Values.conf.extra_metadata }}
++            - name: glance-etc
++              mountPath: /var/lib/openstack/etc/glance/metadefs/compute_{{ $key }}.json
++              subPath: compute_{{ $key }}.json
++              readOnly: true
++            {{- end }}
+             {{- if .Values.conf.glance.DEFAULT.log_config_append }}
+             - name: glance-etc
+               mountPath: {{ .Values.conf.glance.DEFAULT.log_config_append }}
+diff --git a/glance/templates/job-metadefs-load.yaml b/glance/templates/job-metadefs-load.yaml
+index 5c162a5f..47c4286a 100644
+--- a/glance/templates/job-metadefs-load.yaml
++++ b/glance/templates/job-metadefs-load.yaml
+@@ -64,6 +64,12 @@ spec:
+               mountPath: /tmp/metadefs-load.sh
+               subPath: metadefs-load.sh
+               readOnly: true
++            {{- range $key, $val := .Values.conf.extra_metadata }}
++            - name: glance-etc
++              mountPath: /var/lib/openstack/etc/glance/metadefs/compute_{{ $key }}.json
++              subPath: compute_{{ $key }}.json
++              readOnly: true
++            {{- end }}
+             - name: etcglance
+               mountPath: /etc/glance
+             - name: glance-etc
+diff --git a/glance/values.yaml b/glance/values.yaml
+index 459f04bc..0d1c2fdb 100644
+--- a/glance/values.yaml
++++ b/glance/values.yaml
+@@ -193,6 +193,7 @@ conf:
+       oslo_config_program: glance-api
+     filter:http_proxy_to_wsgi:
+       paste.filter_factory: oslo_middleware:HTTPProxyToWSGI.factory
++  extra_metadata: {}
+   policy:
+     metadef_default: ''
+     metadef_admin: 'role:admin'
+-- 
+2.17.1
+
diff --git a/stx-openstack-helm/stx-openstack-helm/manifests/manifest.yaml b/stx-openstack-helm/stx-openstack-helm/manifests/manifest.yaml
index 02f6af20..10afc8bc 100644
--- a/stx-openstack-helm/stx-openstack-helm/manifests/manifest.yaml
+++ b/stx-openstack-helm/stx-openstack-helm/manifests/manifest.yaml
@@ -765,6 +765,26 @@ data:
       identity:
         force_public_endpoint: true
     conf:
+      extra_metadata:
+        pci_irq_affinity:
+          description: Properties for the handling of PCI IRQ Affinity. These properties may be specified to flavor, image and/or volume (refer to metadata description).
+          display_name: PCI IRQ Affinity
+          namespace: OS::Compute::PCIIRQAffinity
+          properties:
+            pci_irq_affinity_mask:
+              description: The metadata hw:pci_irq_affinity_mask specifies which CPU cores are interrupted due to PCI IRQ requests. It can be set as a compute flavor extra spec.
+              title: PCI IRQ Affinity Mask
+              type: string
+          protected: true
+          resource_type_associations:
+            - name: OS::Nova::Flavor
+              prefix: 'hw:'
+            - name: OS::Glance::Image
+              prefix: 'hw_'
+            - name: OS::Cinder::Volume
+              prefix: 'hw_'
+              properties_target: image
+          visibility: public
       glance:
         DEFAULT:
           bind_host: "::"