From 286ad1e5f6b1fd89c25d2a862abf359f002c092b Mon Sep 17 00:00:00 2001 From: Ronny Trommer Date: Thu, 30 Oct 2025 10:53:49 +0100 Subject: [PATCH 1/3] fix: Unify formatting --- horizon/README.md | 4 +- horizon/values.schema.json | 1710 ++++++++++++++++++------------------ horizon/values.yaml | 418 ++++----- 3 files changed, 1066 insertions(+), 1066 deletions(-) diff --git a/horizon/README.md b/horizon/README.md index 81d8363..d838fa3 100644 --- a/horizon/README.md +++ b/horizon/README.md @@ -22,8 +22,8 @@ helm install monms opennms/horizon --set domain=domain1.com --create-namespace ## Version compatibility | Helm chart version | Horizon version(s) | Meridian version(s) | -| ----------- | ----------- | ----------- | -| 1.x | Horizon 32.x | Meridian 2023.x | +|--------------------|--------------------|---------------------| +| 1.x | Horizon 32.x | Meridian 2023.x | ## Overlay ConfigMaps diff --git a/horizon/values.schema.json b/horizon/values.schema.json index a3278c8..f096cc3 100644 --- a/horizon/values.schema.json +++ b/horizon/values.schema.json @@ -1,904 +1,904 @@ { - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "core": { - "type": "object", - "title": "Core container", - "description": "Settings related to OpenNMS core container", - "form": true, - "properties": { - "inspector": { - "type": "object", - "form": true, - "enabled": { - "type": "boolean" - }, - "description": "inspector pod allows the user to verify and inspect OpenNMS configuration. Note: Core container is disabled if we enable inspector pod." - }, - "terminationGracePeriodSeconds": { - "type": "integer", - "description": "How fast we should kill the pod" - }, - "image": { - "type": "object", - "title": "Base Image", - "form": true, - "properties": { - "repository": { - "type": "string", - "default": "opennms/horizon" - }, - "pullPolicy": { - "enum": [ - "IfNotPresent", - "Always", - "Never" - ] - }, - "tag": { - "type": "string" - } - } - }, - "resources": { - "type": "object", - "title": "Container resources", - "description": "Configure the container resource limits and requests", - "form": true, - "properties": { - "limits": { - "type": "object", - "form": true, - "title": "Limits", - "properties": { - "cpu": { - "type": "string", - "form": true, - "title": "CPU" - }, - "memory": { - "type": "string", - "form": true, - "title": "Memory" - } - } - }, - "requests": { - "type": "object", - "form": true, - "title": "Requests", - "properties": { - "cpu": { - "type": "string", - "form": true, - "title": "CPU", - "default": "2" - }, - "memory": { - "type": "string", - "title": "Memory", - "default": "8Gi" - } - } - } - } - }, - "configuration": { - "type": "object", - "title": "Configuration", - "form": true, - "properties": { - "alwaysRollDeployment": { - "type": "boolean" - }, - "timeSeriesStrategy": { - "type": "string" - }, - "enableAlec": { - "type": "boolean" - }, - "enableCortex": { - "type": "boolean" - }, - "enableTssDualWrite": { - "type": "boolean" - }, - "enableAcls": { - "type": "boolean" - }, - "rras": { - "type": "array", - "items": { - "type": "string", - "default": [ - "RRA:AVERAGE:0.5:1:2016", - "RRA:AVERAGE:0.5:12:1488", - "RRA:AVERAGE:0.5:288:366", - "RRA:MAX:0.5:288:366", - "RRA:MIN:0.5:288:366" - ] - } - }, - "alecImage": { - "type": "object", - "properties": {} - }, - "cortexTssImage": { - "type": "object", - "properties": {} - }, - "database": { - "type": "object", - "properties": { - "username": { - "type": "string", - "default": "opennms" - }, - "password": { - "type": "string", - "default": "" - }, - "poolSize": { - "type": "integer", - "default": 50 - } - } - }, - "storage": { - "type": "object", - "properties": { - "etc": { - "type": "string", - "default": "1Gi" - }, - "rrd": { - "type": "string", - "default": "1Gi" - }, - "mibs": { - "type": [ - "string", - "null" - ], - "default": null - } - } - }, - "http": { - "type": "object", - "properties": { - "restUsername": { - "type": "string", - "default": "opennms" - }, - "restPassword": { - "type": "string", - "default": "" - }, - "adminPassword": { - "type": "string", - "default": "" - } - } - }, - "etcUpdatePolicy": { - "enum": [ - "never", - "new", - "newer" - ], - "default": "newer" - }, - "nodeSelector": { - "type": [ - "string", - "null" - ], - "default": null - }, - "affinity": { - "type": [ - "string", - "null" - ], - "default": null - }, - "tolerations": { - "type": [ - "string", - "null" - ], - "default": null - }, - "ports": { - "type": "object", - "properties": { - "trapd": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "default": false - }, - "externalPort": { - "type": "integer", - "default": 1162 - } - } - }, - "syslog": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "default": false - }, - "externalPort": { - "type": "integer", - "default": 10514 - } - } - }, - "karaf": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "default": false - }, - "externalPort": { - "type": "integer", - "default": 8101 - } - } - } - } - } - }, - "postConfigJob": { - "type": "object", - "properties": { - "ttlSecondsAfterFinished": { - "type": "integer", - "default": 300 - } - } - } - }, - "env": { - "type": "object", - "default": "{}", - "description": "Environment variables to set on the onms container." - } - } - }, - "timezone": { - "type": "string", - "title": "Timezone", - "description": "Timezone used inside the containers" - }, - "domain": { - "type": "string", - "title": "Domain" - }, - "createNamespace": { - "type": "boolean", - "title": "Whether to create the namespace when releaseNamespace=true", - "default": false - }, - "releaseNamespace": { - "type": "boolean", - "title": "Install resource objects into namespace named for the Helm release", - "default": false + "$schema": "http://json-schema.org/schema#", + "type": "object", + "properties": { + "core": { + "type": "object", + "title": "Core container", + "description": "Settings related to OpenNMS core container", + "form": true, + "properties": { + "inspector": { + "type": "object", + "form": true, + "enabled": { + "type": "boolean" + }, + "description": "inspector pod allows the user to verify and inspect OpenNMS configuration. Note: Core container is disabled if we enable inspector pod." }, - "multiTenant": { - "type": "boolean", - "title": "Enable multi-tenant mode", - "default": false + "terminationGracePeriodSeconds": { + "type": "integer", + "description": "How fast we should kill the pod" }, - "imagePullSecrets": { - "type": "array", - "title": "Image Pull Secrets", - "items": { - "type": "object", - "default": [] + "image": { + "type": "object", + "title": "Base Image", + "form": true, + "properties": { + "repository": { + "type": "string", + "default": "opennms/horizon" + }, + "pullPolicy": { + "enum": [ + "IfNotPresent", + "Always", + "Never" + ] + }, + "tag": { + "type": "string" } + } }, - "dependencies": { - "type": "object", - "form": true, - "title": "Dependencies", - "properties": { - "clusterRole": { - "type": "boolean", - "title": "Create cluster role", - "default": true + "resources": { + "type": "object", + "title": "Container resources", + "description": "Configure the container resource limits and requests", + "form": true, + "properties": { + "limits": { + "type": "object", + "form": true, + "title": "Limits", + "properties": { + "cpu": { + "type": "string", + "form": true, + "title": "CPU" }, - "clusterRoleBinding": { - "type": "boolean", - "title": "Create cluster role binding", - "default": true + "memory": { + "type": "string", + "form": true, + "title": "Memory" + } + } + }, + "requests": { + "type": "object", + "form": true, + "title": "Requests", + "properties": { + "cpu": { + "type": "string", + "form": true, + "title": "CPU", + "default": "2" }, - "securitycontext": { - "type": "object", - "form": true, - "title": "Security Context", - "properties": { - "allowedCapabilities": { - "type": "array", - "description": "(Red Hat OpenShift only) Capabilities a container is allowed to use ", - "items": { - "type": "string", - "default": [ - "NET_BIND_SERVICE", - "CAP_NET_RAW" - ] - } - }, - "allowPrivilegeEscalation": { - "type": "boolean", - "default": true, - "description": "(Red Hat OpenShift only) Controls whether a process can gain more privileges than its parent process " - }, - "securitycontextconstraints": { - "type": "object", - "title": "Constraints", - "properties": { - "enabled": { - "type": "boolean", - "default": true - }, - "name": { - "type": "string", - "default": "opennms-scc" - } - } - }, - "serviceaccount": { - "type": "object", - "title": "Service Account", - "properties": { - "enabled": { - "type": "boolean", - "default": true - }, - "name": { - "type": "string", - "default": "opennms-sa" - } - } - } - } + "memory": { + "type": "string", + "title": "Memory", + "default": "8Gi" + } + } + } + } + }, + "configuration": { + "type": "object", + "title": "Configuration", + "form": true, + "properties": { + "alwaysRollDeployment": { + "type": "boolean" + }, + "timeSeriesStrategy": { + "type": "string" + }, + "enableAlec": { + "type": "boolean" + }, + "enableCortex": { + "type": "boolean" + }, + "enableTssDualWrite": { + "type": "boolean" + }, + "enableAcls": { + "type": "boolean" + }, + "rras": { + "type": "array", + "items": { + "type": "string", + "default": [ + "RRA:AVERAGE:0.5:1:2016", + "RRA:AVERAGE:0.5:12:1488", + "RRA:AVERAGE:0.5:288:366", + "RRA:MAX:0.5:288:366", + "RRA:MIN:0.5:288:366" + ] + } + }, + "alecImage": { + "type": "object", + "properties": {} + }, + "cortexTssImage": { + "type": "object", + "properties": {} + }, + "database": { + "type": "object", + "properties": { + "username": { + "type": "string", + "default": "opennms" }, - "route": { - "type": "boolean", - "default": true + "password": { + "type": "string", + "default": "" }, - "truststore": { - "type": "object", - "form": true, - "properties": { - "content": { - "type": "string" - }, - "password": { - "type": "string", - "default": "" - } - } + "poolSize": { + "type": "integer", + "default": 50 + } + } + }, + "storage": { + "type": "object", + "properties": { + "etc": { + "type": "string", + "default": "1Gi" }, - "postgresql": { - "type": "object", - "form": true, - "properties": { - "hostname": { - "type": "string", - "default": "192.168.1.142" - }, - "port": { - "type": "integer", - "default": "5432" - }, - "username": { - "type": "string", - "default": "postgres" - }, - "password": { - "type": "string", - "default": "" - }, - "sslmode": { - "enum": [ - "disable", - "allow", - "prefer", - "require", - "verify-ca", - "verify-full" - ], - "default": "disable" - }, - "sslfactory": { - "enum": [ - "org.postgresql.ssl.LibPQFactory", - "LibPQFactory", - "DefaultJavaSSLFactory", - "NonValidatingFactory" - ], - "default": "org.postgresql.ssl.LibPQFactory" - }, - "caCert": { - "type": "string", - "default": "" - }, - "idleTimeout": { - "type": "integer", - "default": 600 - }, - "loginTimeout": { - "type": "integer", - "default": 3 - }, - "minPool": { - "type": "integer", - "default": 25 - }, - "maxPool": { - "type": "integer", - "default": 50 - } - } + "rrd": { + "type": "string", + "default": "1Gi" }, - "kafka": { - "type": "object", - "form": true, - "properties": { - "hostname": { - "type": "string", - "default": "" - }, - "port": { - "type": "integer", - "default": 9093 - }, - "username": { - "type": "string", - "default": "opennms" - }, - "password": { - "type": "string", - "default": "" - }, - "configuration": { - "type": "object", - "form": true, - "properties": { - "saslMechanism": { - "type": "string", - "default": "SCRAM-SHA-512" - }, - "securityProtocol": { - "type": "string", - "default": "SASL_SSL" - } - } - } - } + "mibs": { + "type": [ + "string", + "null" + ], + "default": null + } + } + }, + "http": { + "type": "object", + "properties": { + "restUsername": { + "type": "string", + "default": "opennms" + }, + "restPassword": { + "type": "string", + "default": "" }, - "elasticsearch": { - "type": "object", - "form": true, - "properties": { - "hostname": { - "type": "string", - "default": "" - }, - "port": { - "type": "integer", - "default": 9200 - }, - "username": { - "type": "string", - "default": "elastic" - }, - "password": { - "type": "string", - "default": "" - }, - "configuration": { - "type": "object", - "form": true, - "properties": { - "flows": { - "type": "object", - "form": true, - "properties": { - "indexStrategy": { - "type": "string", - "default": "daily" - }, - "replicationFactor": { - "type": "integer", - "default": 0 - }, - "numShards": { - "type": "integer", - "default": 1 - } - } - } - } - } + "adminPassword": { + "type": "string", + "default": "" + } + } + }, + "etcUpdatePolicy": { + "enum": [ + "never", + "new", + "newer" + ], + "default": "newer" + }, + "nodeSelector": { + "type": [ + "string", + "null" + ], + "default": null + }, + "affinity": { + "type": [ + "string", + "null" + ], + "default": null + }, + "tolerations": { + "type": [ + "string", + "null" + ], + "default": null + }, + "ports": { + "type": "object", + "properties": { + "trapd": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "default": false + }, + "externalPort": { + "type": "integer", + "default": 1162 } + } }, - "loki": { - "type": "object", - "form": true, - "properties": { - "hostname": { - "type": "string", - "default": "" - }, - "username": { - "type": "string", - "default": "" - }, - "password": { - "type": "string", - "default": "" - }, - "caCert": { - "type": "string", - "default": "" - }, - "port": { - "type": "integer", - "default": 3100 - } + "syslog": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "default": false + }, + "externalPort": { + "type": "integer", + "default": 10514 } + } }, - "cortex": { - "type": "object", - "form": true, - "properties": { - "writeUrl": { - "type": "string", - "default": "http://cortex-distributor.shared.svc.cluster.local:8080/api/v1/push" - }, - "readUrl": { - "type": "string", - "default": "http://cortex-query-frontend.shared.svc.cluster.local:8080/prometheus/api/v1" - }, - "maxConcurrentHttpConnections": { - "type": "integer", - "default": 100 - }, - "writeTimeoutInMs": { - "type": "integer", - "default": 1000 - }, - "readTimeoutInMs": { - "type": "integer", - "default": 1000 - }, - "metricCacheSize": { - "type": "integer", - "default": 1000 - }, - "externalTagsCacheSize": { - "type": "integer", - "default": 1000 - }, - "bulkheadMaxWaitDuration": { - "type": "string", - "default": "9223372036854775807" - }, - "organizationId": { - "type": "string", - "default": "", - "description": "Specify the `X-Scope-OrgID` header. This will override the tenant name when multiTenant=true." - } + "karaf": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "default": false + }, + "externalPort": { + "type": "integer", + "default": 8101 } + } } + } } - }, - "ingress": { + }, + "postConfigJob": { "type": "object", - "form": true, - "title": "Ingress", "properties": { - "className": { - "type": "string", - "default": "nginx" + "ttlSecondsAfterFinished": { + "type": "integer", + "default": 300 + } + } + } + }, + "env": { + "type": "object", + "default": "{}", + "description": "Environment variables to set on the onms container." + } + } + }, + "timezone": { + "type": "string", + "title": "Timezone", + "description": "Timezone used inside the containers" + }, + "domain": { + "type": "string", + "title": "Domain" + }, + "createNamespace": { + "type": "boolean", + "title": "Whether to create the namespace when releaseNamespace=true", + "default": false + }, + "releaseNamespace": { + "type": "boolean", + "title": "Install resource objects into namespace named for the Helm release", + "default": false + }, + "multiTenant": { + "type": "boolean", + "title": "Enable multi-tenant mode", + "default": false + }, + "imagePullSecrets": { + "type": "array", + "title": "Image Pull Secrets", + "items": { + "type": "object", + "default": [] + } + }, + "dependencies": { + "type": "object", + "form": true, + "title": "Dependencies", + "properties": { + "clusterRole": { + "type": "boolean", + "title": "Create cluster role", + "default": true + }, + "clusterRoleBinding": { + "type": "boolean", + "title": "Create cluster role binding", + "default": true + }, + "securitycontext": { + "type": "object", + "form": true, + "title": "Security Context", + "properties": { + "allowedCapabilities": { + "type": "array", + "description": "(Red Hat OpenShift only) Capabilities a container is allowed to use ", + "items": { + "type": "string", + "default": [ + "NET_BIND_SERVICE", + "CAP_NET_RAW" + ] + } + }, + "allowPrivilegeEscalation": { + "type": "boolean", + "default": true, + "description": "(Red Hat OpenShift only) Controls whether a process can gain more privileges than its parent process " + }, + "securitycontextconstraints": { + "type": "object", + "title": "Constraints", + "properties": { + "enabled": { + "type": "boolean", + "default": true }, - "annotations": { - "type": "object", - "default": {} + "name": { + "type": "string", + "default": "opennms-scc" + } + } + }, + "serviceaccount": { + "type": "object", + "title": "Service Account", + "properties": { + "enabled": { + "type": "boolean", + "default": true + }, + "name": { + "type": "string", + "default": "opennms-sa" + } + } + } + } + }, + "route": { + "type": "boolean", + "default": true + }, + "truststore": { + "type": "object", + "form": true, + "properties": { + "content": { + "type": "string" + }, + "password": { + "type": "string", + "default": "" + } + } + }, + "postgresql": { + "type": "object", + "form": true, + "properties": { + "hostname": { + "type": "string", + "default": "192.168.1.142" + }, + "port": { + "type": "integer", + "default": "5432" + }, + "username": { + "type": "string", + "default": "postgres" + }, + "password": { + "type": "string", + "default": "" + }, + "sslmode": { + "enum": [ + "disable", + "allow", + "prefer", + "require", + "verify-ca", + "verify-full" + ], + "default": "disable" + }, + "sslfactory": { + "enum": [ + "org.postgresql.ssl.LibPQFactory", + "LibPQFactory", + "DefaultJavaSSLFactory", + "NonValidatingFactory" + ], + "default": "org.postgresql.ssl.LibPQFactory" + }, + "caCert": { + "type": "string", + "default": "" + }, + "idleTimeout": { + "type": "integer", + "default": 600 + }, + "loginTimeout": { + "type": "integer", + "default": 3 + }, + "minPool": { + "type": "integer", + "default": 25 + }, + "maxPool": { + "type": "integer", + "default": 50 + } + } + }, + "kafka": { + "type": "object", + "form": true, + "properties": { + "hostname": { + "type": "string", + "default": "" + }, + "port": { + "type": "integer", + "default": 9093 + }, + "username": { + "type": "string", + "default": "opennms" + }, + "password": { + "type": "string", + "default": "" + }, + "configuration": { + "type": "object", + "form": true, + "properties": { + "saslMechanism": { + "type": "string", + "default": "SCRAM-SHA-512" }, - "certManager": { - "type": "object", - "form": true, - "properties": { - "clusterIssuer": { - "type": "string", - "default": "opennms-issuer" - } + "securityProtocol": { + "type": "string", + "default": "SASL_SSL" + } + } + } + } + }, + "elasticsearch": { + "type": "object", + "form": true, + "properties": { + "hostname": { + "type": "string", + "default": "" + }, + "port": { + "type": "integer", + "default": 9200 + }, + "username": { + "type": "string", + "default": "elastic" + }, + "password": { + "type": "string", + "default": "" + }, + "configuration": { + "type": "object", + "form": true, + "properties": { + "flows": { + "type": "object", + "form": true, + "properties": { + "indexStrategy": { + "type": "string", + "default": "daily" + }, + "replicationFactor": { + "type": "integer", + "default": 0 + }, + "numShards": { + "type": "integer", + "default": 1 } + } } + } } + } }, - "sentinel": { - "type": "object", - "form": true, - "title": "Sentinel", - "properties": { - "replicaCount": { - "type": "integer", - "default": 0 + "loki": { + "type": "object", + "form": true, + "properties": { + "hostname": { + "type": "string", + "default": "" + }, + "username": { + "type": "string", + "default": "" + }, + "password": { + "type": "string", + "default": "" + }, + "caCert": { + "type": "string", + "default": "" + }, + "port": { + "type": "integer", + "default": 3100 + } + } + }, + "cortex": { + "type": "object", + "form": true, + "properties": { + "writeUrl": { + "type": "string", + "default": "http://cortex-distributor.shared.svc.cluster.local:8080/api/v1/push" + }, + "readUrl": { + "type": "string", + "default": "http://cortex-query-frontend.shared.svc.cluster.local:8080/prometheus/api/v1" + }, + "maxConcurrentHttpConnections": { + "type": "integer", + "default": 100 + }, + "writeTimeoutInMs": { + "type": "integer", + "default": 1000 + }, + "readTimeoutInMs": { + "type": "integer", + "default": 1000 + }, + "metricCacheSize": { + "type": "integer", + "default": 1000 + }, + "externalTagsCacheSize": { + "type": "integer", + "default": 1000 + }, + "bulkheadMaxWaitDuration": { + "type": "string", + "default": "9223372036854775807" + }, + "organizationId": { + "type": "string", + "default": "", + "description": "Specify the `X-Scope-OrgID` header. This will override the tenant name when multiTenant=true." + } + } + } + } + }, + "ingress": { + "type": "object", + "form": true, + "title": "Ingress", + "properties": { + "className": { + "type": "string", + "default": "nginx" + }, + "annotations": { + "type": "object", + "default": {} + }, + "certManager": { + "type": "object", + "form": true, + "properties": { + "clusterIssuer": { + "type": "string", + "default": "opennms-issuer" + } + } + } + } + }, + "sentinel": { + "type": "object", + "form": true, + "title": "Sentinel", + "properties": { + "replicaCount": { + "type": "integer", + "default": 0 + }, + "terminationGracePeriodSeconds": { + "type": "integer", + "default": 60 + }, + "image": { + "type": "object", + "form": true, + "properties": { + "repository": { + "type": "string", + "default": "opennms/sentinel" + }, + "pullPolicy": { + "enum": [ + "IfNotPresent", + "Always", + "Never" + ], + "default": "IfNotPresent" + }, + "tag": { + "type": "string", + "default": "" + } + } + }, + "resources": { + "type": "object", + "form": true, + "properties": { + "limits": { + "type": "object", + "form": true, + "properties": { + "cpu": { + "type": "string", + "default": "2" }, - "terminationGracePeriodSeconds": { - "type": "integer", - "default": 60 + "memory": { + "type": "string", + "default": "4Gi" + } + } + }, + "requests": { + "type": "object", + "form": true, + "properties": { + "cpu": { + "type": "string", + "default": "2" }, - "image": { - "type": "object", - "form": true, - "properties": { - "repository": { - "type": "string", - "default": "opennms/sentinel" - }, - "pullPolicy": { - "enum": [ - "IfNotPresent", - "Always", - "Never" - ], - "default": "IfNotPresent" - }, - "tag": { - "type": "string", - "default": "" - } - } + "memory": { + "type": "string", + "default": "2Gi" + } + } + } + } + }, + "configuration": { + "type": "object", + "form": true, + "properties": { + "database": { + "type": "object", + "form": true, + "properties": { + "poolSize": { + "type": "integer", + "default": 25 + } + } + } + } + } + } + }, + "grafana": { + "type": "object", + "form": true, + "title": "Grafana", + "properties": { + "replicaCount": { + "type": "integer", + "default": 0 + }, + "image": { + "repository": { + "type": "string", + "default": "opennms/helm" + }, + "pullPolicy": { + "enum": [ + "IfNotPresent", + "Always", + "Never" + ] + }, + "tag": { + "type": "string", + "default": "9.0.9" + } + }, + "resources": { + "type": "object", + "form": true, + "properties": { + "limits": { + "type": "object", + "form": true, + "properties": { + "cpu": { + "type": "string", + "default": "1Gi" }, - "resources": { - "type": "object", - "form": true, - "properties": { - "limits": { - "type": "object", - "form": true, - "properties": { - "cpu": { - "type": "string", - "default": "2" - }, - "memory": { - "type": "string", - "default": "4Gi" - } - } - }, - "requests": { - "type": "object", - "form": true, - "properties": { - "cpu": { - "type": "string", - "default": "2" - }, - "memory": { - "type": "string", - "default": "2Gi" - } - } - } - } + "memory": { + "type": "string", + "default": "1Gi" + } + } + }, + "requests": { + "type": "object", + "form": true, + "properties": { + "cpu": { + "type": "string", + "default": "1Gi" }, - "configuration": { - "type": "object", - "form": true, - "properties": { - "database": { - "type": "object", - "form": true, - "properties": { - "poolSize": { - "type": "integer", - "default": 25 - } - } - } - } + "memory": { + "type": "string", + "default": "1Gi" } + } } + } }, - "grafana": { - "type": "object", - "form": true, - "title": "Grafana", - "properties": { - "replicaCount": { - "type": "integer", - "default": 0 + "configuration": { + "type": "object", + "form": true, + "properties": { + "ui": { + "type": "object", + "properties": { + "adminPassword": { + "type": "string" + } + } + }, + "database": { + "type": "object", + "form": true, + "properties": { + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "sslmode": { + "enum": [ + "require", + "disable", + "verify-full" + ], + "default": "require" }, "image": { + "type": "object", + "form": true, + "properties": { "repository": { - "type": "string", - "default": "opennms/helm" + "type": "string", + "default": "postgres" }, "pullPolicy": { - "enum": [ - "IfNotPresent", - "Always", - "Never" - ] + "enum": [ + "IfNotPresent", + "Always", + "Never" + ] }, "tag": { - "type": "string", - "default": "9.0.9" - } - }, - "resources": { - "type": "object", - "form": true, - "properties": { - "limits": { - "type": "object", - "form": true, - "properties": { - "cpu": { - "type": "string", - "default": "1Gi" - }, - "memory": { - "type": "string", - "default": "1Gi" - } - } - }, - "requests": { - "type": "object", - "form": true, - "properties": { - "cpu": { - "type": "string", - "default": "1Gi" - }, - "memory": { - "type": "string", - "default": "1Gi" - } - } - } - } - }, - "configuration": { - "type": "object", - "form": true, - "properties": { - "ui": { - "type": "object", - "properties": { - "adminPassword": { - "type": "string" - } - } - }, - "database": { - "type": "object", - "form": true, - "properties": { - "username": { - "type": "string" - }, - "password": { - "type": "string" - }, - "sslmode": { - "enum": [ - "require", - "disable", - "verify-full" - ], - "default": "require" - }, - "image": { - "type": "object", - "form": true, - "properties": { - "repository": { - "type": "string", - "default": "postgres" - }, - "pullPolicy": { - "enum": [ - "IfNotPresent", - "Always", - "Never" - ] - }, - "tag": { - "type": "string", - "default": "13" - } - } - } - } - } - } - }, - "imageRenderer": { - "replicaCount": 2, - "image": { - "repository": "grafana/grafana-image-renderer", - "pullPolicy": { - "enum": [ - "IfNotPresent", - "Always", - "Never" - ] - }, - "tag": "latest" - }, - "resources": { - "limits": { - "cpu": "200m", - "memory": "256Mi" - }, - "requests": { - "cpu": "100m", - "memory": "128Mi" - } + "type": "string", + "default": "13" } + } } + } } + } }, - "promtail": { - "title": "Promtail", - "type": "object", - "form": true, - "properties": { - "image": { - "type": "object", - "form": true, - "properties": { - "repository": { - "type": "string", - "default": "grafana/promtail" - }, - "pullPolicy": { - "enum": [ - "IfNotPresent", - "Always", - "Never" - ] - }, - "tag": { - "type": "string", - "default": "latest" - } - } - }, - "resources": { - "type": "object", - "form": true, - "properties": { - "limits": { - "cpu": { - "type": "string", - "default": "50m" - }, - "memory": { - "type": "string", - "default": "64Mi" - } - } - } - } + "imageRenderer": { + "replicaCount": 2, + "image": { + "repository": "grafana/grafana-image-renderer", + "pullPolicy": { + "enum": [ + "IfNotPresent", + "Always", + "Never" + ] + }, + "tag": "latest" + }, + "resources": { + "limits": { + "cpu": "200m", + "memory": "256Mi" + }, + "requests": { + "cpu": "100m", + "memory": "128Mi" + } + } + } + } + }, + "promtail": { + "title": "Promtail", + "type": "object", + "form": true, + "properties": { + "image": { + "type": "object", + "form": true, + "properties": { + "repository": { + "type": "string", + "default": "grafana/promtail" + }, + "pullPolicy": { + "enum": [ + "IfNotPresent", + "Always", + "Never" + ] + }, + "tag": { + "type": "string", + "default": "latest" + } + } + }, + "resources": { + "type": "object", + "form": true, + "properties": { + "limits": { + "cpu": { + "type": "string", + "default": "50m" + }, + "memory": { + "type": "string", + "default": "64Mi" + } } + } } + } } + } } diff --git a/horizon/values.yaml b/horizon/values.yaml index f888779..8e5453c 100644 --- a/horizon/values.yaml +++ b/horizon/values.yaml @@ -16,7 +16,7 @@ createNamespace: false # Optionally specify an array of imagePullSecrets. # Secrets are created by templates/docker.secret.yaml -imagePullSecrets: [] +imagePullSecrets: [ ] # Example: # - name: customerRegistry # dockerServer: registry.example.com @@ -25,237 +25,237 @@ imagePullSecrets: [] # dockerEmail: admin@example.com dependencies: - # Red Hat OpenShift related settings for creating Cluster Role and Binding - clusterRole: true - clusterRoleBinding: true + # Red Hat OpenShift related settings for creating Cluster Role and Binding + clusterRole: true + clusterRoleBinding: true - # Red Hat OpenShift related settings for creating the required security context for OpenNMS Core - securitycontext: - allowedCapabilities: - - NET_BIND_SERVICE - - CAP_NET_RAW - allowPrivilegeEscalation: true - securitycontextconstraints: - enabled: true - name: opennms-scc - serviceaccount: - enabled: true - name: opennms-sa + # Red Hat OpenShift related settings for creating the required security context for OpenNMS Core + securitycontext: + allowedCapabilities: + - NET_BIND_SERVICE + - CAP_NET_RAW + allowPrivilegeEscalation: true + securitycontextconstraints: + enabled: true + name: opennms-scc + serviceaccount: + enabled: true + name: opennms-sa - # Red Hat OpenShift related settings for creating a route to OpenNMS Core pod - route: true + # Red Hat OpenShift related settings for creating a route to OpenNMS Core pod + route: true - # A common JKS to white-list all CA certificates for all the dependencies OpenNMS or Sentinel uses. - truststore: - content: '' # A base64 encoded content of the JKS Truststore file. - password: '0p3nNM5' + # A common JKS to white-list all CA certificates for all the dependencies OpenNMS or Sentinel uses. + truststore: + content: '' # A base64 encoded content of the JKS Truststore file. + password: '0p3nNM5' - # The main OpenNMS database requires PostgreSQL (this is mandatory). - postgresql: - hostname: onms-db.shared.svc # IP or FQDN of the external PostgreSQL server - port: 5432 - username: postgres - password: P0stgr3s - sslmode: require # disable, allow, prefer, require, verify-ca, verify-full - sslfactory: org.postgresql.ssl.LibPQFactory # LibPQFactory, DefaultJavaSSLFactory, NonValidatingFactory - caCert: '' # A base64 encoded content of the CA Certificate + # The main OpenNMS database requires PostgreSQL (this is mandatory). + postgresql: + hostname: onms-db.shared.svc # IP or FQDN of the external PostgreSQL server + port: 5432 + username: postgres + password: P0stgr3s + sslmode: require # disable, allow, prefer, require, verify-ca, verify-full + sslfactory: org.postgresql.ssl.LibPQFactory # LibPQFactory, DefaultJavaSSLFactory, NonValidatingFactory + caCert: '' # A base64 encoded content of the CA Certificate - # The chosen broker technology for the Minion-to-OpenNMS communication (this is mandatory). - # For TLS with private CA, use the common Truststore. - kafka: - hostname: '' # IP or FQDN of the external Kafka server (Example: onms-kafka-bootstrap.shared.svc) - port: 9093 - username: opennms # Pass empty username when using saslMechanism=PLAIN - password: 0p3nNM5 # Pass empty password when using saslMechanism=PLAIN - configuration: - saslMechanism: SCRAM-SHA-512 # PLAIN, SCRAM-SHA-512 - securityProtocol: SASL_SSL # PLAINTEXT, SSL, SASL_PLAINTEXT, SASL_SSL + # The chosen broker technology for the Minion-to-OpenNMS communication (this is mandatory). + # For TLS with private CA, use the common Truststore. + kafka: + hostname: '' # IP or FQDN of the external Kafka server (Example: onms-kafka-bootstrap.shared.svc) + port: 9093 + username: opennms # Pass empty username when using saslMechanism=PLAIN + password: 0p3nNM5 # Pass empty password when using saslMechanism=PLAIN + configuration: + saslMechanism: SCRAM-SHA-512 # PLAIN, SCRAM-SHA-512 + securityProtocol: SASL_SSL # PLAINTEXT, SSL, SASL_PLAINTEXT, SASL_SSL - # Persisting flows requires Elasticsearch - # For TLS with private CA, use the common Truststore. - elasticsearch: - hostname: '' # IP or FQDN of the external Elasticsearch server (Example: onms-es-http.shared.svc) - port: 9200 - username: elastic - password: 31@st1c - configuration: - flows: - indexStrategy: daily - replicationFactor: 0 - numShards: 1 + # Persisting flows requires Elasticsearch + # For TLS with private CA, use the common Truststore. + elasticsearch: + hostname: '' # IP or FQDN of the external Elasticsearch server (Example: onms-es-http.shared.svc) + port: 9200 + username: elastic + password: 31@st1c + configuration: + flows: + indexStrategy: daily + replicationFactor: 0 + numShards: 1 - # The chosen solution for log aggregation (OpenNMS and Sentinel will forward logs to it via Promtail) - loki: - hostname: '' # IP or FQDN of the external Loki server (Example: loki.shared.svc); '' to disable - username: '' - password: '' - caCert: '' # A base64 encoded content of the CA Certificate (assumes HTTPS for Loki's URL) - port: 3100 + # The chosen solution for log aggregation (OpenNMS and Sentinel will forward logs to it via Promtail) + loki: + hostname: '' # IP or FQDN of the external Loki server (Example: loki.shared.svc); '' to disable + username: '' + password: '' + caCert: '' # A base64 encoded content of the CA Certificate (assumes HTTPS for Loki's URL) + port: 3100 - # The metrics persistence layer as an alternative to RRDtool. - cortex: - # Used only when opennms.configuration.enableCortex=true - # See: https://github.com/OpenNMS/opennms-cortex-tss-plugin/blob/master/plugin/src/main/resources/OSGI-INF/blueprint/blueprint.xml - writeUrl: http://cortex-distributor.shared.svc.cluster.local:8080/api/v1/push - readUrl: http://cortex-query-frontend.shared.svc.cluster.local:8080/prometheus/api/v1 - maxConcurrentHttpConnections: 100 - writeTimeoutInMs: 1000 - readTimeoutInMs: 1000 - metricCacheSize: 1000 - externalTagsCacheSize: 1000 - bulkheadMaxWaitDuration: '9223372036854775807' # this is set as a string so it doesn't end up in scientific notation along the way which causes problems later - # -- Specify the `X-Scope-OrgID` header. This will override the tenant name when multiTenant=true. - organizationId: '' + # The metrics persistence layer as an alternative to RRDtool. + cortex: + # Used only when opennms.configuration.enableCortex=true + # See: https://github.com/OpenNMS/opennms-cortex-tss-plugin/blob/master/plugin/src/main/resources/OSGI-INF/blueprint/blueprint.xml + writeUrl: http://cortex-distributor.shared.svc.cluster.local:8080/api/v1/push + readUrl: http://cortex-query-frontend.shared.svc.cluster.local:8080/prometheus/api/v1 + maxConcurrentHttpConnections: 100 + writeTimeoutInMs: 1000 + readTimeoutInMs: 1000 + metricCacheSize: 1000 + externalTagsCacheSize: 1000 + bulkheadMaxWaitDuration: '9223372036854775807' # this is set as a string so it doesn't end up in scientific notation along the way which causes problems later + # -- Specify the `X-Scope-OrgID` header. This will override the tenant name when multiTenant=true. + organizationId: '' # The Ingress to expose the OpenNMS and Grafana. ingress: - className: nginx - annotations: {} - certManager: - clusterIssuer: opennms-issuer + className: nginx + annotations: { } + certManager: + clusterIssuer: opennms-issuer # OpenNMS Core Instance. core: - inspector: - enabled: false - overlayConfigMaps: [] - terminationGracePeriodSeconds: 120 - image: - repository: opennms/horizon - pullPolicy: IfNotPresent - tag: '' # Defaults to the chart appVersion - resources: - limits: - cpu: '2' - memory: 8Gi - requests: - cpu: '2' - memory: 4Gi - configuration: - alwaysRollDeployment: true - timeSeriesStrategy: rrd - enableAlec: false # See alecImage below for how the KAR is retrieved - enableCortex: false # See cortexTssImage below for how the KAR is retrieved - enableTssDualWrite: false - enableAcls: false - rras: # To optionally replace the RRDtool aggregations (pass [] to keep defaults). Affects Pollerd and Collectd - - RRA:AVERAGE:0.5:1:2016 - - RRA:AVERAGE:0.5:12:1488 - - RRA:AVERAGE:0.5:288:366 - - RRA:MAX:0.5:288:366 - - RRA:MIN:0.5:288:366 - # If alecImage is specified, the KAR is retrieved from the specified Docker image used as an initContainer, otherwise the latest release in GitHub is retrieved - alecImage: {} - # repository: opennms/alec - # pullPolicy: IfNotPresent - # tag: v2.0.0 - # If cortexTssImage is specified, the KAR is retrieved from the specified Docker image used as an initContainer, otherwise the latest release in GitHub is retrieved - cortexTssImage: {} - # repository: opennms/opennms-cortex-tss-plugin - # pullPolicy: IfNotPresent - # tag: v2.0.1 - database: # Access to the OpenNMS database - username: opennms - password: 0p3nNM5 - idleTimeout: 600 - loginTimeout: 3 - minPool: 25 - maxPool: 50 - storage: # Sizes for RRDs and configuration - etc: 1Gi # Warning Google Filestore enforces 1TB at a minimum - rrd: 1000Gi # Depends on how many files you are planning to have (each installation is different) - mibs: null # Expects a size, e.g.: 1Gi - http: # Credentials to access the WebUI - restUsername: opennms # ReST user for Grafana/Helm, Sentinel and Minions (when Twin API is not available) - restPassword: admin - adminPassword: admin # Password for the default admin account - etcUpdatePolicy: never # Experimental: options: never (don't update any files), newer (only newer timestamps), new (only brand new files) - nodeSelector: null - affinity: null - tolerations: null - ports: - trapd: - enabled: true - externalPort: 1162 - syslog: - enabled: true - externalPort: 10514 - karaf: - enabled: true - externalPort: 8101 - postConfigJob: - ttlSecondsAfterFinished: 300 - # -- Experimental: a list of additional init containers - initContainers: [] - # -- Environment variables to set on the onms container. - env: {} + inspector: + enabled: false + overlayConfigMaps: [ ] + terminationGracePeriodSeconds: 120 + image: + repository: opennms/horizon + pullPolicy: IfNotPresent + tag: '' # Defaults to the chart appVersion + resources: + limits: + cpu: '2' + memory: 8Gi + requests: + cpu: '2' + memory: 4Gi + configuration: + alwaysRollDeployment: true + timeSeriesStrategy: rrd + enableAlec: false # See alecImage below for how the KAR is retrieved + enableCortex: false # See cortexTssImage below for how the KAR is retrieved + enableTssDualWrite: false + enableAcls: false + rras: # To optionally replace the RRDtool aggregations (pass [] to keep defaults). Affects Pollerd and Collectd + - RRA:AVERAGE:0.5:1:2016 + - RRA:AVERAGE:0.5:12:1488 + - RRA:AVERAGE:0.5:288:366 + - RRA:MAX:0.5:288:366 + - RRA:MIN:0.5:288:366 + # If alecImage is specified, the KAR is retrieved from the specified Docker image used as an initContainer, otherwise the latest release in GitHub is retrieved + alecImage: { } + # repository: opennms/alec + # pullPolicy: IfNotPresent + # tag: v2.0.0 + # If cortexTssImage is specified, the KAR is retrieved from the specified Docker image used as an initContainer, otherwise the latest release in GitHub is retrieved + cortexTssImage: { } + # repository: opennms/opennms-cortex-tss-plugin + # pullPolicy: IfNotPresent + # tag: v2.0.1 + database: # Access to the OpenNMS database + username: opennms + password: 0p3nNM5 + idleTimeout: 600 + loginTimeout: 3 + minPool: 25 + maxPool: 50 + storage: # Sizes for RRDs and configuration + etc: 1Gi # Warning Google Filestore enforces 1TB at a minimum + rrd: 1000Gi # Depends on how many files you are planning to have (each installation is different) + mibs: null # Expects a size, e.g.: 1Gi + http: # Credentials to access the WebUI + restUsername: opennms # ReST user for Grafana/Helm, Sentinel and Minions (when Twin API is not available) + restPassword: admin + adminPassword: admin # Password for the default admin account + etcUpdatePolicy: never # Experimental: options: never (don't update any files), newer (only newer timestamps), new (only brand new files) + nodeSelector: null + affinity: null + tolerations: null + ports: + trapd: + enabled: true + externalPort: 1162 + syslog: + enabled: true + externalPort: 10514 + karaf: + enabled: true + externalPort: 8101 + postConfigJob: + ttlSecondsAfterFinished: 300 + # -- Experimental: a list of additional init containers + initContainers: [ ] + # -- Environment variables to set on the onms container. + env: { } # OpenNMS Sentinel for flow processing (Optional) sentinel: - replicaCount: 0 # Use 0 to disable - terminationGracePeriodSeconds: 60 - image: - repository: opennms/sentinel - pullPolicy: IfNotPresent - tag: '' # Defaults to the chart appVersion - resources: - limits: - cpu: '2' - memory: 4Gi - requests: - cpu: '2' - memory: 2Gi - configuration: - database: - maxPool: 50 + replicaCount: 0 # Use 0 to disable + terminationGracePeriodSeconds: 60 + image: + repository: opennms/sentinel + pullPolicy: IfNotPresent + tag: '' # Defaults to the chart appVersion + resources: + limits: + cpu: '2' + memory: 4Gi + requests: + cpu: '2' + memory: 2Gi + configuration: + database: + maxPool: 50 # OpenNMS Plugin for Grafana # Do not use Grafana images, or you'd have to manually install the OpenNMS Plugin for Grafana from Github every time the container starts. grafana: - replicaCount: 0 - image: - repository: opennms/helm - pullPolicy: IfNotPresent - tag: '9.0.10' - resources: - limits: - cpu: 200m - memory: 1Gi - requests: - cpu: 100m - memory: 1Gi - configuration: - ui: - adminPassword: admin # Default password for the admin account - database: # Assumes PostgreSQL - username: grafana - password: Gr@f@n@ - sslmode: require # disable, require, verify-full - image: # For the initialization container to create the database - repository: postgres - pullPolicy: IfNotPresent - tag: '13' - imageRenderer: # Required to generate PDF reports from OpenNMS - replicaCount: 2 + replicaCount: 0 image: - repository: grafana/grafana-image-renderer - pullPolicy: IfNotPresent - tag: latest + repository: opennms/helm + pullPolicy: IfNotPresent + tag: '9.0.10' resources: - limits: - cpu: 200m - memory: 256Mi - requests: - cpu: 100m - memory: 128Mi + limits: + cpu: 200m + memory: 1Gi + requests: + cpu: 100m + memory: 1Gi + configuration: + ui: + adminPassword: admin # Default password for the admin account + database: # Assumes PostgreSQL + username: grafana + password: Gr@f@n@ + sslmode: require # disable, require, verify-full + image: # For the initialization container to create the database + repository: postgres + pullPolicy: IfNotPresent + tag: '13' + imageRenderer: # Required to generate PDF reports from OpenNMS + replicaCount: 2 + image: + repository: grafana/grafana-image-renderer + pullPolicy: IfNotPresent + tag: latest + resources: + limits: + cpu: 200m + memory: 256Mi + requests: + cpu: 100m + memory: 128Mi # Log aggregator configured as a sidecar for OpenNMS and Sentinel promtail: - image: - repository: grafana/promtail - pullPolicy: IfNotPresent - tag: latest - resources: - limits: - cpu: 50m - memory: 64Mi + image: + repository: grafana/promtail + pullPolicy: IfNotPresent + tag: latest + resources: + limits: + cpu: 50m + memory: 64Mi From d77fff3c3be4d28f373eb4ee5d1541f7e4f18a71 Mon Sep 17 00:00:00 2001 From: Ronny Trommer Date: Thu, 30 Oct 2025 11:35:21 +0100 Subject: [PATCH 2/3] feat: Allow users to control daemons with environment variables Create configuration parameters for each service and allow enable or disable service daemons with a boolean true/false. The default configuration is the same as with a shipped Meridian 2024.x service-configuration.xml to provide maximum compatibility. Resolves: #68 Signed-off-by: Ronny Trommer --- horizon/Chart.yaml | 4 +- horizon/README.md | 29 ++ horizon/scripts/onms-core-init.sh | 7 +- horizon/templates/app-settings.configmap.yaml | 29 ++ horizon/values.schema.json | 297 ++++++++++++++++++ horizon/values.yaml | 87 ++++- 6 files changed, 431 insertions(+), 22 deletions(-) diff --git a/horizon/Chart.yaml b/horizon/Chart.yaml index 6e7c431..381a0a7 100644 --- a/horizon/Chart.yaml +++ b/horizon/Chart.yaml @@ -17,13 +17,13 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 1.1.15 +version: 1.1.16 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "34.0.1" +appVersion: "34.0.2" maintainers: - name: The OpenNMS Group Inc. diff --git a/horizon/README.md b/horizon/README.md index d838fa3..dca1c51 100644 --- a/horizon/README.md +++ b/horizon/README.md @@ -124,6 +124,35 @@ kubectl create configmap -n $instance $configmap --from-file=lots-of-zeros.zip | core.configuration.rras[2] | string | `"RRA:AVERAGE:0.5:288:366"` | | | core.configuration.rras[3] | string | `"RRA:MAX:0.5:288:366"` | | | core.configuration.rras[4] | string | `"RRA:MIN:0.5:288:366"` | | +| core.configuration.services.ackd.enabled | bool | `true` | | +| core.configuration.services.actiond.enabled | bool | `true` | | +| core.configuration.services.alarmd.enabled | bool | `true` | | +| core.configuration.services.asteriskGateway.enabled | bool | `false` | | +| core.configuration.services.bsmd.enabled | bool | `true` | | +| core.configuration.services.collectd.enabled | bool | `true` | | +| core.configuration.services.correlator.enabled | bool | `false` | | +| core.configuration.services.discovery.enabled | bool | `true` | | +| core.configuration.services.enhancedLinkd.enabled | bool | `true` | | +| core.configuration.services.eventTranslator.enabled | bool | `true` | | +| core.configuration.services.jettyServer.enabled | bool | `true` | | +| core.configuration.services.karafStartupMonitor.enabled | bool | `true` | | +| core.configuration.services.notifd.enabled | bool | `true` | | +| core.configuration.services.passiveStatusd.enabled | bool | `true` | | +| core.configuration.services.perspectivePoller.enabled | bool | `true` | | +| core.configuration.services.pollerd.enabled | bool | `true` | | +| core.configuration.services.provisiond.enabled | bool | `true` | | +| core.configuration.services.queued.enabled | bool | `true` | | +| core.configuration.services.reportd.enabled | bool | `true` | | +| core.configuration.services.rtcd.enabled | bool | `true` | | +| core.configuration.services.scriptd.enabled | bool | `true` | | +| core.configuration.services.snmpPoller.enabled | bool | `false` | | +| core.configuration.services.statsd.enabled | bool | `true` | | +| core.configuration.services.syslogd.enabled | bool | `false` | | +| core.configuration.services.telemetryd.enabled | bool | `true` | | +| core.configuration.services.ticketer.enabled | bool | `true` | | +| core.configuration.services.tl1d.enabled | bool | `false` | | +| core.configuration.services.trapd.enabled | bool | `true` | | +| core.configuration.services.vacuumd.enabled | bool | `true` | | | core.configuration.storage.etc | string | `"1Gi"` | | | core.configuration.storage.mibs | string | `nil` | | | core.configuration.storage.rrd | string | `"1000Gi"` | | diff --git a/horizon/scripts/onms-core-init.sh b/horizon/scripts/onms-core-init.sh index f499405..0d06604 100644 --- a/horizon/scripts/onms-core-init.sh +++ b/horizon/scripts/onms-core-init.sh @@ -594,15 +594,10 @@ if [[ -v OPENNMS_RRAS ]]; then done fi -# Enable Syslogd -echo "Enabling syslogd in ${CONFIG_DIR}/service-configuration.xml" -sed -r -i '/enabled="false"/{$!{N;s/ enabled="false"[>]\n(.*OpenNMS:Name=Syslogd.*)/>\n\1/}}' ${CONFIG_DIR}/service-configuration.xml - # Disable Telemetryd if [[ ${ENABLE_TELEMETRYD} == "false" ]]; then - echo "Enabling telemetryd in ${CONFIG_DIR}/service-configuration.xml and ${CONFIG_DIR}/org.apache.karaf.features.cfg" + echo "Disable telemetryd in ${CONFIG_DIR}/org.apache.karaf.features.cfg" sed -i -r '/opennms-flows/d' ${CONFIG_DIR}/org.apache.karaf.features.cfg - sed -i 'N;s/service.*\n\(.*Telemetryd\)/service enabled="false">\n\1/;P;D' ${CONFIG_DIR}/service-configuration.xml fi # Cleanup temporary requisition files diff --git a/horizon/templates/app-settings.configmap.yaml b/horizon/templates/app-settings.configmap.yaml index d8cc2a3..940bf69 100644 --- a/horizon/templates/app-settings.configmap.yaml +++ b/horizon/templates/app-settings.configmap.yaml @@ -19,6 +19,35 @@ data: OPENNMS_DATABASE_CONNECTION_MAXPOOL: {{ .Values.core.configuration.database.maxPool | default "50" | quote }} ENABLE_ALEC: {{ ((.Values.core).configuration).enableAlec | default "false" | quote }} ENABLE_ACLS: {{ ((.Values.core).configuration).enableAcls | default "false" | quote }} + CORE_SERVICE_ALARMD_ENABLED: {{ .Values.core.configuration.services.alarmd.enabled | quote }} + CORE_SERVICE_BSMD_ENABLED: {{ .Values.core.configuration.services.bsmd.enabled | quote }} + CORE_SERVICE_TICKETER_ENABLED: {{ .Values.core.configuration.services.ticketer.enabled | quote }} + CORE_SERVICE_CORRELATOR_ENABLED: {{ .Values.core.configuration.services.correlator.enabled | quote }} + CORE_SERVICE_QUEUED_ENABLED: {{ .Values.core.configuration.services.queued.enabled | quote }} + CORE_SERVICE_ACTIOND_ENABLED: {{ .Values.core.configuration.services.actiond.enabled | quote }} + CORE_SERVICE_NOTIFD_ENABLED: {{ .Values.core.configuration.services.notifd.enabled | quote }} + CORE_SERVICE_SCRIPTD_ENABLED: {{ .Values.core.configuration.services.scriptd.enabled | quote }} + CORE_SERVICE_RTCD_ENABLED: {{ .Values.core.configuration.services.rtcd.enabled | quote }} + CORE_SERVICE_POLLERD_ENABLED: {{ .Values.core.configuration.services.pollerd.enabled | quote }} + CORE_SERVICE_SNMPPOLLER_ENABLED: {{ .Values.core.configuration.services.snmpPoller.enabled | quote }} + CORE_SERVICE_ENHANCEDLINKD_ENABLED: {{ .Values.core.configuration.services.enhancedLinkd.enabled | quote }} + CORE_SERVICE_COLLECTD_ENABLED: {{ .Values.core.configuration.services.collectd.enabled | quote }} + CORE_SERVICE_DISCOVERY_ENABLED: {{ .Values.core.configuration.services.discovery.enabled | quote }} + CORE_SERVICE_VACUUMD_ENABLED: {{ .Values.core.configuration.services.vacuumd.enabled | quote }} + CORE_SERVICE_EVENTTRANSLATOR_ENABLED: {{ .Values.core.configuration.services.eventTranslator.enabled | quote }} + CORE_SERVICE_PASSIVESTATUSD_ENABLED: {{ .Values.core.configuration.services.passiveStatusd.enabled | quote }} + CORE_SERVICE_STATSD_ENABLED: {{ .Values.core.configuration.services.statsd.enabled | quote }} + CORE_SERVICE_PROVISIOND_ENABLED: {{ .Values.core.configuration.services.provisiond.enabled | quote }} + CORE_SERVICE_REPORTD_ENABLED: {{ .Values.core.configuration.services.reportd.enabled | quote }} + CORE_SERVICE_ACKD_ENABLED: {{ .Values.core.configuration.services.ackd.enabled | quote }} + CORE_SERVICE_JETTYSERVER_ENABLED: {{ .Values.core.configuration.services.jettyServer.enabled | quote }} + CORE_SERVICE_KARAFSTARTUPMONITOR_ENABLED: {{ .Values.core.configuration.services.karafStartupMonitor.enabled | quote }} + CORE_SERVICE_TL1D_ENABLED: {{ .Values.core.configuration.services.tl1d.enabled | quote }} + CORE_SERVICE_SYSLOGD_ENABLED: {{ .Values.core.configuration.services.syslogd.enabled | quote }} + CORE_SERVICE_ASTERISKGATEWAY_ENABLED: {{ .Values.core.configuration.services.asteriskGateway.enabled | quote }} + CORE_SERVICE_TELEMETRYD_ENABLED: {{ .Values.core.configuration.services.telemetryd.enabled | quote }} + CORE_SERVICE_TRAPD_ENABLED: {{ .Values.core.configuration.services.trapd.enabled | quote }} + CORE_SERVICE_PERSPECTIVEPOLLER_ENABLED: {{ .Values.core.configuration.services.perspectivePoller.enabled | quote }} ENABLE_TELEMETRYD: {{ if gt ((.Values.sentinel).replicaCount|int) 0 }}"true"{{ else }}"false"{{ end }} ENABLE_CORTEX: {{ ((.Values.core).configuration).enableCortex | quote }} ENABLE_TSS_DUAL_WRITE: {{ ((.Values.core).configuration).enableTssDualWrite | quote }} diff --git a/horizon/values.schema.json b/horizon/values.schema.json index f096cc3..c18ea8a 100644 --- a/horizon/values.schema.json +++ b/horizon/values.schema.json @@ -107,6 +107,303 @@ "enableAcls": { "type": "boolean" }, + "services": { + "type": "object", + "title": "Services", + "form": true, + "properties": { + "alarmd": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "bsmd": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "ticketer": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "correlator": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": false + } + } + }, + "queued": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "actiond": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "notifd": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "scriptd": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "rtcd": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "pollerd": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "snmpPoller": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": false + } + } + }, + "enhancedLinkd": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "collectd": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "discovery": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "vacuumd": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "eventTranslator": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "passiveStatusd": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "statsd": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "provisiond": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "reportd": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "ackd": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "jettyServer": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "karafStartupMonitor": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "tl1d": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": false + } + } + }, + "syslogd": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": false + } + } + }, + "asteriskGateway": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": false + } + } + }, + "telemetryd": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "trapd": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "perspectivePoller": { + "type": "object", + "form": true, + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + } + } + }, "rras": { "type": "array", "items": { diff --git a/horizon/values.yaml b/horizon/values.yaml index 8e5453c..588535f 100644 --- a/horizon/values.yaml +++ b/horizon/values.yaml @@ -16,7 +16,7 @@ createNamespace: false # Optionally specify an array of imagePullSecrets. # Secrets are created by templates/docker.secret.yaml -imagePullSecrets: [ ] +imagePullSecrets: [] # Example: # - name: customerRegistry # dockerServer: registry.example.com @@ -110,7 +110,7 @@ dependencies: # The Ingress to expose the OpenNMS and Grafana. ingress: className: nginx - annotations: { } + annotations: {} certManager: clusterIssuer: opennms-issuer @@ -118,7 +118,7 @@ ingress: core: inspector: enabled: false - overlayConfigMaps: [ ] + overlayConfigMaps: [] terminationGracePeriodSeconds: 120 image: repository: opennms/horizon @@ -138,34 +138,93 @@ core: enableCortex: false # See cortexTssImage below for how the KAR is retrieved enableTssDualWrite: false enableAcls: false - rras: # To optionally replace the RRDtool aggregations (pass [] to keep defaults). Affects Pollerd and Collectd + services: + alarmd: + enabled: true + bsmd: + enabled: true + ticketer: + enabled: true + correlator: + enabled: false + queued: + enabled: true + actiond: + enabled: true + notifd: + enabled: true + scriptd: + enabled: true + rtcd: + enabled: true + pollerd: + enabled: true + snmpPoller: + enabled: false + enhancedLinkd: + enabled: true + collectd: + enabled: true + discovery: + enabled: true + vacuumd: + enabled: true + eventTranslator: + enabled: true + passiveStatusd: + enabled: true + statsd: + enabled: true + provisiond: + enabled: true + reportd: + enabled: true + ackd: + enabled: true + jettyServer: + enabled: true + karafStartupMonitor: + enabled: true + tl1d: + enabled: false + syslogd: + enabled: false + asteriskGateway: + enabled: false + telemetryd: + enabled: true + trapd: + enabled: true + perspectivePoller: + enabled: true + rras: # To optionally replace the RRDtool aggregations (pass [] to keep defaults). Affects Pollerd and Collectd - RRA:AVERAGE:0.5:1:2016 - RRA:AVERAGE:0.5:12:1488 - RRA:AVERAGE:0.5:288:366 - RRA:MAX:0.5:288:366 - RRA:MIN:0.5:288:366 # If alecImage is specified, the KAR is retrieved from the specified Docker image used as an initContainer, otherwise the latest release in GitHub is retrieved - alecImage: { } + alecImage: {} # repository: opennms/alec # pullPolicy: IfNotPresent # tag: v2.0.0 # If cortexTssImage is specified, the KAR is retrieved from the specified Docker image used as an initContainer, otherwise the latest release in GitHub is retrieved - cortexTssImage: { } + cortexTssImage: {} # repository: opennms/opennms-cortex-tss-plugin # pullPolicy: IfNotPresent # tag: v2.0.1 - database: # Access to the OpenNMS database + database: # Access to the OpenNMS database username: opennms password: 0p3nNM5 idleTimeout: 600 loginTimeout: 3 minPool: 25 maxPool: 50 - storage: # Sizes for RRDs and configuration + storage: # Sizes for RRDs and configuration etc: 1Gi # Warning Google Filestore enforces 1TB at a minimum rrd: 1000Gi # Depends on how many files you are planning to have (each installation is different) mibs: null # Expects a size, e.g.: 1Gi - http: # Credentials to access the WebUI + http: # Credentials to access the WebUI restUsername: opennms # ReST user for Grafana/Helm, Sentinel and Minions (when Twin API is not available) restPassword: admin adminPassword: admin # Password for the default admin account @@ -186,9 +245,9 @@ core: postConfigJob: ttlSecondsAfterFinished: 300 # -- Experimental: a list of additional init containers - initContainers: [ ] + initContainers: [] # -- Environment variables to set on the onms container. - env: { } + env: {} # OpenNMS Sentinel for flow processing (Optional) sentinel: @@ -227,15 +286,15 @@ grafana: configuration: ui: adminPassword: admin # Default password for the admin account - database: # Assumes PostgreSQL + database: # Assumes PostgreSQL username: grafana password: Gr@f@n@ sslmode: require # disable, require, verify-full - image: # For the initialization container to create the database + image: # For the initialization container to create the database repository: postgres pullPolicy: IfNotPresent tag: '13' - imageRenderer: # Required to generate PDF reports from OpenNMS + imageRenderer: # Required to generate PDF reports from OpenNMS replicaCount: 2 image: repository: grafana/grafana-image-renderer From a5cf29aeafdbc141ce0b77219cae52ca7cca5937 Mon Sep 17 00:00:00 2001 From: Ronny Trommer Date: Thu, 30 Oct 2025 11:52:06 +0100 Subject: [PATCH 3/3] fix: Allow manual run of linting Signed-off-by: Ronny Trommer --- .github/workflows/lint-test.yml | 6 ++-- .github/workflows/main.yml | 8 ++--- .github/workflows/readme.yml | 62 ++++++++++++++++----------------- horizon/README.md | 5 ++- horizon/values.schema.json | 5 --- horizon/values.yaml | 2 -- 6 files changed, 41 insertions(+), 47 deletions(-) diff --git a/.github/workflows/lint-test.yml b/.github/workflows/lint-test.yml index 90b48a8..93e8996 100644 --- a/.github/workflows/lint-test.yml +++ b/.github/workflows/lint-test.yml @@ -1,6 +1,8 @@ name: Lint and Test Charts -on: pull_request +on: + pull_request: + workflow_dispatch: jobs: lint-test: @@ -48,7 +50,7 @@ jobs: - name: Setup dependencies if: steps.list-changed.outputs.changed == 'true' run: scripts/start-dependencies.sh - + - name: Run chart-testing (install) if: steps.list-changed.outputs.changed == 'true' run: ct install --chart-dirs . --charts "horizon" --target-branch ${{ github.event.repository.default_branch }} --helm-extra-set-args "--set createNamespace=false -f examples/minimal-resources.yaml" diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6840671..eacd0ac 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,9 +1,9 @@ name: Release Helm Charts on: - push: - branches: - - main + push: + branches: + - main # Make sure only one copy of this workflow can run at a time. concurrency: ${{ github.workflow }} @@ -16,7 +16,7 @@ jobs: uses: actions/checkout@v3 with: fetch-depth: 0 - + - name: Configure Git run: | git config user.name "$GITHUB_ACTOR" diff --git a/.github/workflows/readme.yml b/.github/workflows/readme.yml index 75d931e..09fa593 100644 --- a/.github/workflows/readme.yml +++ b/.github/workflows/readme.yml @@ -1,34 +1,34 @@ name: Sync README file on: - push: - branches: - - main - paths: - - 'README.md' - - 'minion/README.md' - - 'horizon/README.md' + push: + branches: + - main + paths: + - 'README.md' + - 'minion/README.md' + - 'horizon/README.md' jobs: - build: - permissions: - contents: write - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - run: | - cp -f README.md ${{ runner.temp }}/README.md - mkdir ${{ runner.temp }}/minion - cp -f minion/README.md ${{ runner.temp }}/minion/README.md - mkdir ${{ runner.temp }}/horizon - cp -f horizon/README.md ${{ runner.temp }}/horizon/README.md - - uses: actions/checkout@v2 - with: - ref: gh-pages - - run: | - cp -f ${{ runner.temp }}/README.md . - cp -f ${{ runner.temp }}/minion/README.md ./minion/README.md - cp -f ${{ runner.temp }}/horizon/README.md ./horizon/README.md - git config user.name "$GITHUB_ACTOR" - git config user.email "$GITHUB_ACTOR@users.noreply.github.com" - git add -A - git commit -m "Sync README from main" - git push + build: + permissions: + contents: write + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - run: | + cp -f README.md ${{ runner.temp }}/README.md + mkdir ${{ runner.temp }}/minion + cp -f minion/README.md ${{ runner.temp }}/minion/README.md + mkdir ${{ runner.temp }}/horizon + cp -f horizon/README.md ${{ runner.temp }}/horizon/README.md + - uses: actions/checkout@v2 + with: + ref: gh-pages + - run: | + cp -f ${{ runner.temp }}/README.md . + cp -f ${{ runner.temp }}/minion/README.md ./minion/README.md + cp -f ${{ runner.temp }}/horizon/README.md ./horizon/README.md + git config user.name "$GITHUB_ACTOR" + git config user.email "$GITHUB_ACTOR@users.noreply.github.com" + git add -A + git commit -m "Sync README from main" + git push diff --git a/horizon/README.md b/horizon/README.md index dca1c51..62361cd 100644 --- a/horizon/README.md +++ b/horizon/README.md @@ -22,8 +22,8 @@ helm install monms opennms/horizon --set domain=domain1.com --create-namespace ## Version compatibility | Helm chart version | Horizon version(s) | Meridian version(s) | -|--------------------|--------------------|---------------------| -| 1.x | Horizon 32.x | Meridian 2023.x | +| ----------- | ----------- | ----------- | +| 1.x | Horizon 32.x | Meridian 2023.x | ## Overlay ConfigMaps @@ -158,7 +158,6 @@ kubectl create configmap -n $instance $configmap --from-file=lots-of-zeros.zip | core.configuration.storage.rrd | string | `"1000Gi"` | | | core.configuration.timeSeriesStrategy | string | `"rrd"` | | | core.configuration.tolerations | string | `nil` | | -| core.env | object | `{}` | Environment variables to set on the onms container. | | core.image.pullPolicy | string | `"IfNotPresent"` | | | core.image.repository | string | `"opennms/horizon"` | | | core.image.tag | string | `""` | | diff --git a/horizon/values.schema.json b/horizon/values.schema.json index c18ea8a..ab79543 100644 --- a/horizon/values.schema.json +++ b/horizon/values.schema.json @@ -562,11 +562,6 @@ } } } - }, - "env": { - "type": "object", - "default": "{}", - "description": "Environment variables to set on the onms container." } } }, diff --git a/horizon/values.yaml b/horizon/values.yaml index 588535f..5c732cf 100644 --- a/horizon/values.yaml +++ b/horizon/values.yaml @@ -246,8 +246,6 @@ core: ttlSecondsAfterFinished: 300 # -- Experimental: a list of additional init containers initContainers: [] - # -- Environment variables to set on the onms container. - env: {} # OpenNMS Sentinel for flow processing (Optional) sentinel: