[openstack-prometheus-exporter] OSH-I Chart Integration

The prometheus-openstack-exporter Helm Chart [1] is currently available
in the Openstack-Helm-Infra (OSH-I) repo but not yet integrated into the
stx-openstack application.

This change integrates the prometheus-openstack-exporter Helm Chart
into the openstack-armada-app repos. For this, this change:
- updates the OSH-I Debian package to include the chart
- creates the Helm chart's plugin without applying any overrides
- creates the FluxCD manifests by replicating the default configs
available in the values.yaml
- disables the Helm chart so it's not deployed by the app

Test Plan:
[PASS] build openstack packages and tarball
[PASS] upload and apply the app in a vbox AIO-SX system
[PASS] prometheus-openstack-exporter Helm chart included in starlingx
       chart repo (helm search repo starlingx)
[PASS] prometheus-openstack-exporter Helm Release not installed
       (helm list -n openstack)

[1]05f2f45971/prometheus-openstack-exporter

Story: 2011581
Task: 53013

Change-Id: I3ed19b00413e14ba56dd107fb85f85138d18c7e3
Signed-off-by: Alex Figueiredo <alex.fernandesfigueiredo@windriver.com>
This commit is contained in:
Alex Figueiredo
2025-10-31 17:15:08 -03:00
parent 97f808b7e0
commit ba5957850e
10 changed files with 343 additions and 0 deletions
@@ -17,6 +17,7 @@ override_dh_auto_build:
make openvswitch
make rabbitmq
make ceph-rgw
make prometheus-openstack-exporter
override_dh_auto_install:
# Install the chart tar files.
@@ -40,6 +40,7 @@ HELM_CHART_NGINX_PORTS_CONTROL = "nginx-ports-control"
HELM_CHART_NOVA = 'nova'
HELM_CHART_NOVA_API_PROXY = 'nova-api-proxy'
HELM_CHART_PCI_IRQ_AFFINITY_AGENT = 'pci-irq-affinity-agent'
HELM_CHART_PROMETHEUS_OPENSTACK_EXPORTER = 'prometheus-openstack-exporter'
HELM_CHART_OPENVSWITCH = 'openvswitch'
HELM_CHART_PLACEMENT = 'placement'
HELM_CHART_RABBITMQ = 'rabbitmq'
@@ -72,6 +73,7 @@ FLUXCD_HELMRELEASE_NGINX_PORTS_CONTROL = "nginx-ports-control"
FLUXCD_HELMRELEASE_NOVA = 'nova'
FLUXCD_HELMRELEASE_NOVA_API_PROXY = 'nova-api-proxy'
FLUXCD_HELMRELEASE_PCI_IRQ_AFFINITY_AGENT = 'pci-irq-affinity-agent'
FLUXCD_HELMRELEASE_PROMETHEUS_OPENSTACK_EXPORTER = 'prometheus-openstack-exporter'
FLUXCD_HELMRELEASE_OPENVSWITCH = 'openvswitch'
FLUXCD_HELMRELEASE_PLACEMENT = 'placement'
FLUXCD_HELMRELEASE_RABBITMQ = 'rabbitmq'
@@ -0,0 +1,34 @@
#
# Copyright (c) 2025 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
from sysinv.common import exception
from sysinv.helm import common
from k8sapp_openstack.common import constants as app_constants
from k8sapp_openstack.helm import openstack
class PrometheusOpenstackExporterHelm(openstack.OpenstackBaseHelm):
"""Class to encapsulate helm operations for the Openstack Exporter chart"""
CHART = app_constants.HELM_CHART_PROMETHEUS_OPENSTACK_EXPORTER
HELM_RELEASE = app_constants.FLUXCD_HELMRELEASE_PROMETHEUS_OPENSTACK_EXPORTER
def get_overrides(self, namespace=None):
overrides = {
common.HELM_NS_OPENSTACK: {
# TODO: add helm overrides
}
}
if namespace in self.SUPPORTED_NAMESPACES:
return overrides[namespace]
elif namespace:
raise exception.InvalidHelmNamespace(chart=self.CHART,
namespace=namespace)
else:
return overrides
@@ -62,6 +62,7 @@ systemconfig.helm_plugins.openstack =
027_dcdbsync = k8sapp_openstack.helm.dcdbsync:DcdbsyncHelm
028_pci-irq-affinity-agent = k8sapp_openstack.helm.pci_irq_affinity_agent:PciIrqAffinityAgentHelm
029_clients = k8sapp_openstack.helm.clients:ClientsHelm
030_prometheus-openstack-exporter = k8sapp_openstack.helm.prometheus_openstack_exporter:PrometheusOpenstackExporterHelm
systemconfig.fluxcd.kustomize_ops =
openstack = k8sapp_openstack.kustomize.kustomize_openstack:OpenstackFluxCDKustomizeOperator
@@ -11,6 +11,7 @@ disabled_charts:
- gnocchi
- ironic
- keystone-api-proxy
- prometheus-openstack-exporter
upgrades:
auto_update: true
@@ -38,4 +38,5 @@ resources:
- ceilometer
- gnocchi
- clients
- prometheus-openstack-exporter
...
@@ -0,0 +1,41 @@
#
# Copyright (c) 2025 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
---
apiVersion: "helm.toolkit.fluxcd.io/v2"
kind: HelmRelease
metadata:
name: prometheus-openstack-exporter
labels:
chart_group: prometheus-openstack-exporter
spec:
releaseName: osh-prometheus-openstack-exporter
chart:
spec:
chart: prometheus-openstack-exporter
version: 0.1.9
sourceRef:
kind: HelmRepository
name: starlingx
interval: 1m
timeout: 30m
test:
enable: false
install:
disableHooks: false
upgrade:
disableHooks: false
dependsOn:
- name: keystone
namespace: openstack
valuesFrom:
- kind: Secret
name: prometheus-openstack-exporter-static-overrides
valuesKey: prometheus-openstack-exporter-static-overrides.yaml
- kind: Secret
name: prometheus-openstack-exporter-system-overrides
valuesKey: prometheus-openstack-exporter-system-overrides.yaml
...
@@ -0,0 +1,22 @@
#
# Copyright (c) 2025 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
---
namespace: openstack
commonLabels:
chart_group: prometheus-openstack-exporter
resources:
- helmrelease.yaml
secretGenerator:
- name: prometheus-openstack-exporter-static-overrides
files:
- prometheus-openstack-exporter-static-overrides.yaml
- name: prometheus-openstack-exporter-system-overrides
files:
- prometheus-openstack-exporter-system-overrides.yaml
generatorOptions:
disableNameSuffixHash: true
...
@@ -0,0 +1,240 @@
#
# Copyright (c) 2023-2025 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
---
images:
tags:
prometheus_openstack_exporter: ghcr.io/openstack-exporter/openstack-exporter:1.7.0
dep_check: quay.io/airshipit/kubernetes-entrypoint:v1.0.0
image_repo_sync: null
ks_user: docker.io/starlingx/stx-heat:master-debian-stable-latest
pull_policy: IfNotPresent
local_registry:
active: false
exclude:
- dep_check
- image_repo_sync
labels:
isApplication: false
openstack_exporter:
node_selector_key: openstack-control-plane
node_selector_value: enabled
job:
node_selector_key: openstack-control-plane
node_selector_value: enabled
pod:
security_context:
exporter:
pod:
runAsUser: 65534
container:
openstack_metrics_exporter:
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
ks_user:
pod:
runAsUser: 65534
container:
prometheus_openstack_exporter_ks_user:
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
affinity:
anti:
type:
default: requiredDuringSchedulingIgnoredDuringExecution
topologyKey:
default: kubernetes.io/hostname
mounts:
prometheus_openstack_exporter:
prometheus_openstack_exporter:
init_container: null
replicas:
prometheus_openstack_exporter: 1
lifecycle:
upgrades:
deployments:
revision_history: 3
pod_replacement_strategy: RollingUpdate
rolling_update:
max_unavailable: 1
max_surge: 3
termination_grace_period:
prometheus_openstack_exporter:
timeout: 30
resources:
enabled: false
prometheus_openstack_exporter:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "1024Mi"
cpu: "2000m"
jobs:
image_repo_sync:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "1024Mi"
cpu: "2000m"
ks_user:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "1024Mi"
cpu: "2000m"
dependencies:
dynamic:
common:
local_image_registry:
jobs:
- prometheus-openstack-exporter-image-repo-sync
services:
- endpoint: node
service: local_image_registry
static:
image_repo_sync:
services:
- endpoint: internal
service: local_image_registry
ks_user:
services:
- endpoint: internal
service: identity
prometheus_openstack_exporter:
jobs:
- prometheus-openstack-exporter-ks-user
services:
- endpoint: internal
service: identity
conf:
prometheus_openstack_exporter:
OS_POLLING_INTERVAL: 30
TIMEOUT_SECONDS: 20
OS_RETRIES: 1
secrets:
identity:
admin: prometheus-openstack-exporter-keystone-admin
user: prometheus-openstack-exporter-keystone-user
oci_image_registry:
prometheus-openstack-exporter: prometheus-openstack-exporter-oci-image-registry-key
tls:
identity:
api:
# This name should be same as in keystone. Keystone
# secret will be used in these charts
#
internal: keystone-tls-api
endpoints:
cluster_domain_suffix: cluster.local
local_image_registry:
name: docker-registry
namespace: docker-registry
hosts:
default: localhost
internal: docker-registry
node: localhost
host_fqdn_override:
default: null
port:
registry:
node: 5000
oci_image_registry:
name: oci-image-registry
namespace: oci-image-registry
auth:
enabled: false
prometheus-openstack-exporter:
username: prometheus-openstack-exporter
password: password
hosts:
default: localhost
host_fqdn_override:
default: null
port:
registry:
default: null
prometheus_openstack_exporter:
namespace: openstack
hosts:
default: openstack-metrics
host_fqdn_override:
default: null
path:
default: null
scheme:
default: 'http'
port:
exporter:
default: 9103
identity:
name: keystone
auth:
admin:
region_name: RegionOne
username: admin
password: password
project_name: admin
user_domain_name: default
project_domain_name: default
user:
role: admin
region_name: RegionOne
username: prometheus-openstack-exporter
password: password
project_name: service
user_domain_name: default
project_domain_name: default
hosts:
default: keystone
internal: keystone-api
host_fqdn_override:
default: null
path:
default: /v3
scheme:
default: 'http'
port:
api:
default: 80
internal: 5000
monitoring:
prometheus:
enabled: true
openstack_exporter:
scrape: true
network:
openstack_metrics_exporter:
port: 9103
network_policy:
prometheus-openstack-exporter:
ingress:
- {}
egress:
- {}
manifests:
certificates: false
configmap_bin: true
deployment: true
job_image_repo_sync: true
job_ks_user: true
network_policy: false
secret_keystone: true
secret_registry: true
service: true
...