From 40b7fee4cb7a207ed703af3785e5e8110d134239 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Mon, 16 Mar 2026 15:51:03 -0400 Subject: [PATCH 01/41] remove confd --- opennms-container/minion/Dockerfile | 5 ---- .../minion/container-fs/entrypoint.sh | 29 ++----------------- 2 files changed, 2 insertions(+), 32 deletions(-) diff --git a/opennms-container/minion/Dockerfile b/opennms-container/minion/Dockerfile index cf3cc4796e94..a6d57f215ae5 100644 --- a/opennms-container/minion/Dockerfile +++ b/opennms-container/minion/Dockerfile @@ -97,11 +97,6 @@ COPY container-fs/prom-jmx-default-config.yaml /opt/prom-jmx-exporter/config.yam COPY --chown=10001:0 --from=minion-base /opt /opt COPY --chown=10001:0 --from=minion-plugins /opt/usr-plugins /opt/minion/deploy -# Install confd.io configuration files and scripts and ensure they are executable -COPY ./container-fs/confd/ /opt/minion/confd/ -RUN chmod +x /opt/minion/confd/scripts/* -COPY ./minion-config-schema.yml /opt/minion/confd/ - # Create the directory for server certificates RUN install -d -m 750 /opt/minion/server-certs diff --git a/opennms-container/minion/container-fs/entrypoint.sh b/opennms-container/minion/container-fs/entrypoint.sh index cddfe6dae48e..3aaaaa8ddf77 100755 --- a/opennms-container/minion/container-fs/entrypoint.sh +++ b/opennms-container/minion/container-fs/entrypoint.sh @@ -16,10 +16,6 @@ MINION_CONFIG="${MINION_HOME}/etc/org.opennms.minion.controller.cfg" MINION_PROCESS_ENV_CFG="${MINION_HOME}/etc/minion-process.env" MINION_SERVER_CERTS_CFG="${MINION_HOME}/etc/minion-server-certs.env" MINION_OVERLAY_ETC="/opt/minion-etc-overlay" -CONFD_KEY_STORE="${MINION_HOME}/minion-config.yaml" -CONFD_CONFIG_DIR="${MINION_HOME}/confd" -CONFD_BIN="/usr/bin/confd" -CONFD_CONFIG_FILE="${CONFD_CONFIG_DIR}/confd.toml" CACERTS="${MINION_HOME}/cacerts" export JAVA_OPTS="${JAVA_OPTS} -Xms${JAVA_MIN_MEM:-2g} -Xmx${JAVA_MAX_MEM:-2g}" @@ -33,7 +29,7 @@ export JAVA_OPTS="${JAVA_OPTS} -Xms${JAVA_MIN_MEM:-2g} -Xmx${JAVA_MAX_MEM:-2g}" # - All other settings are optional and have sensible defaults # # Default behavior: -# - Configuration is managed via confd templates +# - Configuration is managed via environment variables, which can be set in the Dockerfile, via docker run -e, or in a docker-compose file. # - Template uses key/values from /java/agent/prom-jmx-exporter PROM_JMX_EXPORTER_ENABLED="${PROM_JMX_EXPORTER_ENABLED:-false}" # required PROM_JMX_EXPORTER_JAR="${PROM_JMX_EXPORTER_JAR:-/opt/prom-jmx-exporter/jmx_prometheus_javaagent.jar}" @@ -186,15 +182,6 @@ applyOverlayConfig() { fi } -applyConfd() { - if [ -f "${CONFD_KEY_STORE}" ]; then - echo "Found a configuration key store, applying configuration via confd." - runConfd - else - echo "No configuration key store present, skipping confd configuration." - fi -} - applyOpennmsPropertiesD() { find "${MINION_HOME}/etc/opennms.properties.d" -name '*.properties' | while IFS= read -r filename; do echo "appending to custom.system.properties: $filename" @@ -209,24 +196,12 @@ start() { exec ./karaf server } -runConfd() { - # Create any directories that confd might write to - while IFS= read -r dir; do - local dirToCreate="$MINION_HOME"/"$dir" - echo "Creating $dirToCreate so confd can write to it" - mkdir -p "$dirToCreate" - done < "$CONFD_CONFIG_DIR"/directories - - "$CONFD_BIN" -onetime -config-file "$CONFD_CONFIG_FILE" -} - # Order of precedence is (later overwrites former): # 1. Config set via environment variable -# 2. Config set via overlayed keystore (confd) +# 2. Config set via overlayed keystore file # 3. Config set via direct file overlay configure() { initConfig - applyConfd applyOpennmsPropertiesD applyOverlayConfig if [[ "$JACOCO_AGENT_ENABLED" -gt 0 ]]; then From 985ed10b36607815b9e7aa880426c978521ff6aa Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Tue, 17 Mar 2026 09:26:17 -0400 Subject: [PATCH 02/41] use predefined cfg files --- .../minion/container-fs/entrypoint.sh | 48 ++++++-- .../container-fs/etc/custom.system.properties | 40 +++++++ .../featuresBoot.d/templates/disable-jms.boot | 2 + .../templates/dominion-scv.boot | 2 + .../etc/featuresBoot.d/templates/grpc.boot | 3 + .../etc/featuresBoot.d/templates/jaeger.boot | 1 + .../featuresBoot.d/templates/kafka-ipc.boot | 3 + .../featuresBoot.d/templates/kafka-rpc.boot | 2 + .../featuresBoot.d/templates/kafka-sink.boot | 2 + .../featuresBoot.d/templates/kafka-twin.boot | 2 + .../instance-id.properties | 1 + .../etc/org.apache.karaf.management.cfg | 106 ++++++++++++++++++ .../etc/org.apache.karaf.shell.cfg | 8 ++ .../etc/org.opennms.core.ipc.grpc.client.cfg | 2 + .../etc/org.opennms.core.ipc.kafka.cfg | 1 + .../etc/org.opennms.core.ipc.rpc.kafka.cfg | 2 + .../etc/org.opennms.core.ipc.sink.kafka.cfg | 2 + .../etc/org.opennms.core.ipc.sink.offheap.cfg | 0 .../etc/org.opennms.core.ipc.twin.kafka.cfg | 2 + ....opennms.features.minion.dominion.grpc.cfg | 3 + .../etc/org.opennms.minion.controller.cfg | 3 + .../etc/org.opennms.netmgt.syslog.cfg | 2 + .../etc/org.opennms.netmgt.trapd.cfg | 2 + .../container-fs/etc/org.ops4j.pax.web.cfg | 7 ++ .../smoketest/containers/MinionContainer.java | 23 ++++ 25 files changed, 259 insertions(+), 10 deletions(-) create mode 100644 opennms-container/minion/container-fs/etc/custom.system.properties create mode 100644 opennms-container/minion/container-fs/etc/featuresBoot.d/templates/disable-jms.boot create mode 100644 opennms-container/minion/container-fs/etc/featuresBoot.d/templates/dominion-scv.boot create mode 100644 opennms-container/minion/container-fs/etc/featuresBoot.d/templates/grpc.boot create mode 100644 opennms-container/minion/container-fs/etc/featuresBoot.d/templates/jaeger.boot create mode 100644 opennms-container/minion/container-fs/etc/featuresBoot.d/templates/kafka-ipc.boot create mode 100644 opennms-container/minion/container-fs/etc/featuresBoot.d/templates/kafka-rpc.boot create mode 100644 opennms-container/minion/container-fs/etc/featuresBoot.d/templates/kafka-sink.boot create mode 100644 opennms-container/minion/container-fs/etc/featuresBoot.d/templates/kafka-twin.boot create mode 100644 opennms-container/minion/container-fs/etc/opennms.properties.d/instance-id.properties create mode 100644 opennms-container/minion/container-fs/etc/org.apache.karaf.management.cfg create mode 100644 opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg create mode 100644 opennms-container/minion/container-fs/etc/org.opennms.core.ipc.grpc.client.cfg create mode 100644 opennms-container/minion/container-fs/etc/org.opennms.core.ipc.kafka.cfg create mode 100644 opennms-container/minion/container-fs/etc/org.opennms.core.ipc.rpc.kafka.cfg create mode 100644 opennms-container/minion/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg create mode 100644 opennms-container/minion/container-fs/etc/org.opennms.core.ipc.sink.offheap.cfg create mode 100644 opennms-container/minion/container-fs/etc/org.opennms.core.ipc.twin.kafka.cfg create mode 100644 opennms-container/minion/container-fs/etc/org.opennms.features.minion.dominion.grpc.cfg create mode 100644 opennms-container/minion/container-fs/etc/org.opennms.minion.controller.cfg create mode 100644 opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg create mode 100644 opennms-container/minion/container-fs/etc/org.opennms.netmgt.trapd.cfg create mode 100644 opennms-container/minion/container-fs/etc/org.ops4j.pax.web.cfg diff --git a/opennms-container/minion/container-fs/entrypoint.sh b/opennms-container/minion/container-fs/entrypoint.sh index 3aaaaa8ddf77..133aef2953f6 100755 --- a/opennms-container/minion/container-fs/entrypoint.sh +++ b/opennms-container/minion/container-fs/entrypoint.sh @@ -12,11 +12,12 @@ umask 002 export MINION_HOME="/opt/minion" export KARAF_HOME="${MINION_HOME}" -MINION_CONFIG="${MINION_HOME}/etc/org.opennms.minion.controller.cfg" MINION_PROCESS_ENV_CFG="${MINION_HOME}/etc/minion-process.env" MINION_SERVER_CERTS_CFG="${MINION_HOME}/etc/minion-server-certs.env" MINION_OVERLAY_ETC="/opt/minion-etc-overlay" CACERTS="${MINION_HOME}/cacerts" +FEATURES_BOOT_DIR="${MINION_HOME}/etc/featuresBoot.d" +FEATURES_BOOT_TEMPLATES_DIR="${FEATURES_BOOT_DIR}/templates" export JAVA_OPTS="${JAVA_OPTS} -Xms${JAVA_MIN_MEM:-2g} -Xmx${JAVA_MAX_MEM:-2g}" # Prometheus JMX Exporter Configuration @@ -109,6 +110,39 @@ function updateConfig() { fi } +function applyFeatureBootTemplates() { + # Clean any previously generated boot files; leave templates directory untouched + find "${FEATURES_BOOT_DIR}" -maxdepth 1 -name "*.boot" -delete + + apply_template() { + local name="$1" + envsubst < "${FEATURES_BOOT_TEMPLATES_DIR}/${name}" > "${FEATURES_BOOT_DIR}/${name}" + echo "[Features] Enabled: ${name}" + } + + # IPC strategy — kafka or grpc + case "${MINION_IPC:-}" in + kafka) + apply_template "kafka-ipc.boot" + apply_template "kafka-rpc.boot" + apply_template "kafka-sink.boot" + apply_template "kafka-twin.boot" + apply_template "disable-jms.boot" + ;; + grpc) + apply_template "grpc.boot" + apply_template "disable-jms.boot" + ;; + *) + echo "[Features] No IPC strategy set via MINION_IPC, using defaults." + ;; + esac + + # Standalone optional features + [[ "${JAEGER_ENABLED:-false}" == "true" ]] && apply_template "jaeger.boot" + [[ "${DOMINION_SCV_ENABLED:-false}" == "true" ]] && apply_template "dominion-scv.boot" +} + function parseEnvironment() { # Configure additional features IFS=$'\n' @@ -128,11 +162,6 @@ function parseEnvironment() { if [[ $env_var =~ ^KAFKA_IPC_ ]]; then ipc_name=$(echo "$env_var" | cut -d_ -f3- | tr '[:upper:]' '[:lower:]' | tr _ .) updateConfig "$ipc_name" "${!env_var}" "${MINION_HOME}/etc/org.opennms.core.ipc.kafka.cfg" - if [[ "$ipc_name" == "bootstrap.servers" ]]; then - echo "opennms-core-ipc-kafka" > ${MINION_HOME}/etc/featuresBoot.d/kafka.boot - echo "!minion-jms" > ${MINION_HOME}/etc/featuresBoot.d/disable-activemq.boot - echo "!opennms-core-ipc-jms" >> ${MINION_HOME}/etc/featuresBoot.d/disable-activemq.boot - fi fi done } @@ -159,12 +188,11 @@ initConfig() { sed -i "/^rmiRegistryHost/s/=.*/= 0.0.0.0/" ${MINION_HOME}/etc/org.apache.karaf.management.cfg sed -i "/^rmiServerHost/s/=.*/= 0.0.0.0/" ${MINION_HOME}/etc/org.apache.karaf.management.cfg - # Set Minion location and connection to OpenNMS instance - echo "location = ${MINION_LOCATION}" > ${MINION_CONFIG} - echo "id = ${MINION_ID}" >> ${MINION_CONFIG} - echo "broker-url = ${OPENNMS_BROKER_URL}" >> ${MINION_CONFIG} + # Preserve org.opennms.minion.controller.cfg as provided by the image/overlay. + # This allows Karaf/OpenNMS variable interpolation (for example ${env:...}) in that file. parseEnvironment + applyFeatureBootTemplates echo "Configured $(date)" > ${MINION_HOME}/etc/configured else diff --git a/opennms-container/minion/container-fs/etc/custom.system.properties b/opennms-container/minion/container-fs/etc/custom.system.properties new file mode 100644 index 000000000000..669cc6a0a9c2 --- /dev/null +++ b/opennms-container/minion/container-fs/etc/custom.system.properties @@ -0,0 +1,40 @@ +################################################################################ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +################################################################################ + +# +# topic prefix for OpenNMS events +# +org.opennms.instance.id=${env:OPENNMS_INSTANCE_ID:-OpenNMS} + +# +# All the values specified here will override the default values given +# in config.properties. +# + +karaf.systemBundlesStartLevel=50 + +# +# You can place any customized configuration here. +# +org.osgi.framework.system.packages.extra=sun.nio.ch, \ + sun.misc, \ + sun.net.dns, \ + sun.reflect, \ + sun.security.ssl, \ + sun.security.x509 diff --git a/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/disable-jms.boot b/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/disable-jms.boot new file mode 100644 index 000000000000..224b6359bced --- /dev/null +++ b/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/disable-jms.boot @@ -0,0 +1,2 @@ +!minion-jms +!opennms-core-ipc-jms diff --git a/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/dominion-scv.boot b/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/dominion-scv.boot new file mode 100644 index 000000000000..d7cf7ddabca4 --- /dev/null +++ b/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/dominion-scv.boot @@ -0,0 +1,2 @@ +!scv-jceks-impl +dominion-secure-credentials-vault \ No newline at end of file diff --git a/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/grpc.boot b/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/grpc.boot new file mode 100644 index 000000000000..500a0e6f6c22 --- /dev/null +++ b/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/grpc.boot @@ -0,0 +1,3 @@ +!opennms-core-ipc-jms +!minion-jms +opennms-core-ipc-grpc-client diff --git a/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/jaeger.boot b/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/jaeger.boot new file mode 100644 index 000000000000..9bb3287b6b65 --- /dev/null +++ b/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/jaeger.boot @@ -0,0 +1 @@ +opennms-core-tracing-jaeger diff --git a/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/kafka-ipc.boot b/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/kafka-ipc.boot new file mode 100644 index 000000000000..4ba4a4664aef --- /dev/null +++ b/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/kafka-ipc.boot @@ -0,0 +1,3 @@ +!minion-jms +!opennms-core-ipc-jms +opennms-core-ipc-kafka \ No newline at end of file diff --git a/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/kafka-rpc.boot b/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/kafka-rpc.boot new file mode 100644 index 000000000000..3e60771f8eb1 --- /dev/null +++ b/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/kafka-rpc.boot @@ -0,0 +1,2 @@ +!opennms-core-ipc-rpc-jms +opennms-core-ipc-rpc-kafka diff --git a/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/kafka-sink.boot b/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/kafka-sink.boot new file mode 100644 index 000000000000..f2f4cc854b53 --- /dev/null +++ b/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/kafka-sink.boot @@ -0,0 +1,2 @@ +!opennms-core-ipc-sink-camel +opennms-core-ipc-sink-kafka diff --git a/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/kafka-twin.boot b/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/kafka-twin.boot new file mode 100644 index 000000000000..8e46f5f0a356 --- /dev/null +++ b/opennms-container/minion/container-fs/etc/featuresBoot.d/templates/kafka-twin.boot @@ -0,0 +1,2 @@ +!opennms-core-ipc-twin-jms +opennms-core-ipc-twin-kafka diff --git a/opennms-container/minion/container-fs/etc/opennms.properties.d/instance-id.properties b/opennms-container/minion/container-fs/etc/opennms.properties.d/instance-id.properties new file mode 100644 index 000000000000..04f4b2a11a5d --- /dev/null +++ b/opennms-container/minion/container-fs/etc/opennms.properties.d/instance-id.properties @@ -0,0 +1 @@ +org.opennms.instance.id=${env:OPENNMS_INSTANCE_ID:-default} diff --git a/opennms-container/minion/container-fs/etc/org.apache.karaf.management.cfg b/opennms-container/minion/container-fs/etc/org.apache.karaf.management.cfg new file mode 100644 index 000000000000..cc73e28dcba0 --- /dev/null +++ b/opennms-container/minion/container-fs/etc/org.apache.karaf.management.cfg @@ -0,0 +1,106 @@ +# +# DON'T EDIT THIS FILE :: GENERATED WITH CONFD +# + +# +# The properties in this file define the configuration of Apache Karaf's JMX Management +# +# +# Port number for RMI registry connection +# +rmiRegistryPort = 1299 + +# +# Host for RMI registry +# +rmiRegistryHost = 127.0.0.1 + +# +# Port number for RMI server connection +# +rmiServerPort = 45444 + +# +# Host for RMI server +# +rmiServerHost = 127.0.0.1 + +# +# Name of the JAAS realm used for authentication +# +jmxRealm = karaf + +# +# The service URL for the JMXConnectorServer +# +serviceUrl = service:jmx:rmi://${rmiServerHost}:${rmiServerPort}/jndi/rmi://${rmiRegistryHost}:${rmiRegistryPort}/karaf-${karaf.name} + +# +# Whether any threads started for the JMXConnectorServer should be started as daemon threads +# +daemon = true + +# +# Whether the JMXConnectorServer should be started in a separate thread +# +threaded = true + +# +# The ObjectName used to register the JMXConnectorServer +# +objectName = connector:name=rmi + +# +# Timeout to lookup for the keystore in case of SSL authentication usage +# +#keyStoreAvailabilityTimeout = 5000 + +# +# The type of authentication +# +#authenticatorType = password + +# +# Enable or not SSL/TLS +# +#secured = false + +# +# Secure algorithm to use +# +#secureAlgorithm = default + +# +# Secure protocol to use +# +#secureProtocol = TLS + +# +# Keystore to use for secure mode +# +#keyStore = karaf.ks + +# +# Alias of the key to use in the keystore +# +#keyAlias = karaf + +# +# Truststore to use for secure mode +# +#trustStore = karaf.ts + +# +# Create the JMX RMI registry +# +#createRmiRegistry = true + +# +# Locate the JMX RMI registry +# +#locateRmiRegistry = true + +# +# Locate an existing MBean server if possible (usefull when Karaf is embedded) +# +#locateExistingMBeanServerIfPossible = true diff --git a/opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg b/opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg new file mode 100644 index 000000000000..1623847e339c --- /dev/null +++ b/opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg @@ -0,0 +1,8 @@ +# +# DON'T EDIT THIS FILE :: GENERATED WITH CONFD +# +sshPort=${SSH_PORT:-8101} +sshHost=${SSH_HOST:-127.0.0.1} +hostKeyFormat=PEM +sshRealm=karaf +hostKey=${karaf.etc}/host.key diff --git a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.grpc.client.cfg b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.grpc.client.cfg new file mode 100644 index 000000000000..7a0f265968c6 --- /dev/null +++ b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.grpc.client.cfg @@ -0,0 +1,2 @@ +host = ${GRPC_CLIENT_HOST:-horizon} +port = ${GRPC_CLIENT_PORT:-8990} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.kafka.cfg b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.kafka.cfg new file mode 100644 index 000000000000..24f38c030b34 --- /dev/null +++ b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.kafka.cfg @@ -0,0 +1 @@ +bootstrap.servers=${KAFKA_BOOTSTRAP_SERVERS:-my-kafka-ip-1:9092} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.rpc.kafka.cfg b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.rpc.kafka.cfg new file mode 100644 index 000000000000..de05f26721da --- /dev/null +++ b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.rpc.kafka.cfg @@ -0,0 +1,2 @@ +acks = ${KAFKA_ACKS:-1} +bootstrap.servers = ${KAFKA_BOOTSTRAP_SERVERS:-kafka:29092} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg new file mode 100644 index 000000000000..de05f26721da --- /dev/null +++ b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg @@ -0,0 +1,2 @@ +acks = ${KAFKA_ACKS:-1} +bootstrap.servers = ${KAFKA_BOOTSTRAP_SERVERS:-kafka:29092} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.sink.offheap.cfg b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.sink.offheap.cfg new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.twin.kafka.cfg b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.twin.kafka.cfg new file mode 100644 index 000000000000..de05f26721da --- /dev/null +++ b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.twin.kafka.cfg @@ -0,0 +1,2 @@ +acks = ${KAFKA_ACKS:-1} +bootstrap.servers = ${KAFKA_BOOTSTRAP_SERVERS:-kafka:29092} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.features.minion.dominion.grpc.cfg b/opennms-container/minion/container-fs/etc/org.opennms.features.minion.dominion.grpc.cfg new file mode 100644 index 000000000000..d6e7ce5e0d2d --- /dev/null +++ b/opennms-container/minion/container-fs/etc/org.opennms.features.minion.dominion.grpc.cfg @@ -0,0 +1,3 @@ +host = ${DOMINION_GRPC_HOST:-horizon} +port = ${DOMINION_GRPC_PORT:-8990} +clientSecret = ${DOMINION_GRPC_CLIENT_SECRET:-} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.minion.controller.cfg b/opennms-container/minion/container-fs/etc/org.opennms.minion.controller.cfg new file mode 100644 index 000000000000..84909ade6ff6 --- /dev/null +++ b/opennms-container/minion/container-fs/etc/org.opennms.minion.controller.cfg @@ -0,0 +1,3 @@ +location = ${env:MINION_LOCATION:-minion-location} +id = ${env:MINION_ID:-minion-01} +broker-url = ${env:OPENNMS_BROKER_URL:-failover:tcp://horizon:61616} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg b/opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg new file mode 100644 index 000000000000..c6c4c0945a32 --- /dev/null +++ b/opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg @@ -0,0 +1,2 @@ +syslog.listen.interface = ${SYSLOG_INTERFACE:-0.0.0.0} +syslog.listen.port = ${SYSLOG_PORT:-1514} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.netmgt.trapd.cfg b/opennms-container/minion/container-fs/etc/org.opennms.netmgt.trapd.cfg new file mode 100644 index 000000000000..771d4323600b --- /dev/null +++ b/opennms-container/minion/container-fs/etc/org.opennms.netmgt.trapd.cfg @@ -0,0 +1,2 @@ +trapd.listen.interface = ${TRAPD_INTERFACE:-0.0.0.0} +trapd.listen.port = ${TRAPD_PORT:-1162} diff --git a/opennms-container/minion/container-fs/etc/org.ops4j.pax.web.cfg b/opennms-container/minion/container-fs/etc/org.ops4j.pax.web.cfg new file mode 100644 index 000000000000..f14f5b0dd673 --- /dev/null +++ b/opennms-container/minion/container-fs/etc/org.ops4j.pax.web.cfg @@ -0,0 +1,7 @@ +# +# DON'T EDIT THIS FILE :: GENERATED WITH CONFD +# +org.osgi.service.http.port=8181 +org.ops4j.pax.web.listening.addresses=0.0.0.0 +javax.servlet.context.tempdir=${karaf.data}/pax-web-jsp +org.ops4j.pax.web.config.file=${karaf.etc}/jetty.xml diff --git a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java index fe0b67b9a76c..90281c0c832f 100644 --- a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java +++ b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java @@ -147,6 +147,29 @@ public MinionContainer(final StackModel model, final MinionProfile profile) { withEnv("KARAF_DEBUG", "true"); withEnv("JAVA_DEBUG_PORT", "" + MINION_DEBUG_PORT); } + + withEnv("OPENNMS_BROKER_URL", "failover:tcp://" + OpenNMSContainer.ALIAS + ":61616"); + + if (IpcStrategy.KAFKA.equals(model.getIpcStrategy())) { + withEnv("MINION_IPC", "kafka"); + withEnv("KAFKA_BOOTSTRAP_SERVERS", OpenNMSContainer.KAFKA_ALIAS + ":9092"); + } else if (IpcStrategy.GRPC.equals(model.getIpcStrategy())) { + withEnv("MINION_IPC", "grpc"); + withEnv("GRPC_CLIENT_HOST", OpenNMSContainer.ALIAS); + withEnv("GRPC_CLIENT_PORT", "8990"); + } + + if (model.isJaegerEnabled()) { + withEnv("JAEGER_ENABLED", "true"); + withEnv("JAEGER_ENDPOINT", JaegerContainer.getThriftHttpURL()); + } + + if (!Strings.isNullOrEmpty(profile.getDominionGrpcScvClientSecret())) { + withEnv("DOMINION_SCV_ENABLED", "true"); + withEnv("DOMINION_GRPC_HOST", OpenNMSContainer.ALIAS); + withEnv("DOMINION_GRPC_PORT", "8990"); + withEnv("DOMINION_GRPC_CLIENT_SECRET", profile.getDominionGrpcScvClientSecret()); + } } private Path writeMinionConfig(MinionProfile profile) { From e6af89296bd72779a6b96aadf3b2abdff7619948 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Tue, 17 Mar 2026 10:17:09 -0400 Subject: [PATCH 03/41] fix minor mistakes --- .../etc/opennms.properties.d/instance-id.properties | 2 +- .../container-fs/etc/org.apache.karaf.management.cfg | 4 ---- .../minion/container-fs/etc/org.apache.karaf.shell.cfg | 7 ++----- .../container-fs/etc/org.opennms.core.ipc.grpc.client.cfg | 4 ++-- .../minion/container-fs/etc/org.opennms.core.ipc.kafka.cfg | 2 +- .../container-fs/etc/org.opennms.core.ipc.rpc.kafka.cfg | 4 ++-- .../container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg | 4 ++-- .../container-fs/etc/org.opennms.core.ipc.twin.kafka.cfg | 4 ++-- .../etc/org.opennms.features.minion.dominion.grpc.cfg | 6 +++--- .../container-fs/etc/org.opennms.minion.controller.cfg | 4 ++-- .../minion/container-fs/etc/org.opennms.netmgt.syslog.cfg | 4 ++-- .../minion/container-fs/etc/org.opennms.netmgt.trapd.cfg | 4 ++-- .../minion/container-fs/etc/org.ops4j.pax.web.cfg | 3 --- .../org/opennms/smoketest/containers/MinionContainer.java | 5 ++--- 14 files changed, 23 insertions(+), 34 deletions(-) diff --git a/opennms-container/minion/container-fs/etc/opennms.properties.d/instance-id.properties b/opennms-container/minion/container-fs/etc/opennms.properties.d/instance-id.properties index 04f4b2a11a5d..f35fba9129e8 100644 --- a/opennms-container/minion/container-fs/etc/opennms.properties.d/instance-id.properties +++ b/opennms-container/minion/container-fs/etc/opennms.properties.d/instance-id.properties @@ -1 +1 @@ -org.opennms.instance.id=${env:OPENNMS_INSTANCE_ID:-default} +org.opennms.instance.id=${env:OPENNMS_INSTANCE_ID:-OpenNMS} diff --git a/opennms-container/minion/container-fs/etc/org.apache.karaf.management.cfg b/opennms-container/minion/container-fs/etc/org.apache.karaf.management.cfg index cc73e28dcba0..6f36c5992d28 100644 --- a/opennms-container/minion/container-fs/etc/org.apache.karaf.management.cfg +++ b/opennms-container/minion/container-fs/etc/org.apache.karaf.management.cfg @@ -1,7 +1,3 @@ -# -# DON'T EDIT THIS FILE :: GENERATED WITH CONFD -# - # # The properties in this file define the configuration of Apache Karaf's JMX Management # diff --git a/opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg b/opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg index 1623847e339c..8a4f651e7d67 100644 --- a/opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg +++ b/opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg @@ -1,8 +1,5 @@ -# -# DON'T EDIT THIS FILE :: GENERATED WITH CONFD -# -sshPort=${SSH_PORT:-8101} -sshHost=${SSH_HOST:-127.0.0.1} +sshPort=${env:SSH_PORT:-8101} +sshHost=${env:SSH_HOST:-127.0.0.1} hostKeyFormat=PEM sshRealm=karaf hostKey=${karaf.etc}/host.key diff --git a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.grpc.client.cfg b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.grpc.client.cfg index 7a0f265968c6..2caa3da44bea 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.grpc.client.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.grpc.client.cfg @@ -1,2 +1,2 @@ -host = ${GRPC_CLIENT_HOST:-horizon} -port = ${GRPC_CLIENT_PORT:-8990} +host = ${env:GRPC_CLIENT_HOST:-horizon} +port = ${env:GRPC_CLIENT_PORT:-8990} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.kafka.cfg b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.kafka.cfg index 24f38c030b34..2d97677d76b4 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.kafka.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.kafka.cfg @@ -1 +1 @@ -bootstrap.servers=${KAFKA_BOOTSTRAP_SERVERS:-my-kafka-ip-1:9092} +bootstrap.servers=${env:KAFKA_BOOTSTRAP_SERVERS:-kafka:29092} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.rpc.kafka.cfg b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.rpc.kafka.cfg index de05f26721da..0ef300141ed4 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.rpc.kafka.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.rpc.kafka.cfg @@ -1,2 +1,2 @@ -acks = ${KAFKA_ACKS:-1} -bootstrap.servers = ${KAFKA_BOOTSTRAP_SERVERS:-kafka:29092} +acks = ${env:KAFKA_ACKS:-1} +bootstrap.servers = ${env:KAFKA_BOOTSTRAP_SERVERS:-kafka:29092} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg index de05f26721da..0ef300141ed4 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg @@ -1,2 +1,2 @@ -acks = ${KAFKA_ACKS:-1} -bootstrap.servers = ${KAFKA_BOOTSTRAP_SERVERS:-kafka:29092} +acks = ${env:KAFKA_ACKS:-1} +bootstrap.servers = ${env:KAFKA_BOOTSTRAP_SERVERS:-kafka:29092} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.twin.kafka.cfg b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.twin.kafka.cfg index de05f26721da..0ef300141ed4 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.twin.kafka.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.twin.kafka.cfg @@ -1,2 +1,2 @@ -acks = ${KAFKA_ACKS:-1} -bootstrap.servers = ${KAFKA_BOOTSTRAP_SERVERS:-kafka:29092} +acks = ${env:KAFKA_ACKS:-1} +bootstrap.servers = ${env:KAFKA_BOOTSTRAP_SERVERS:-kafka:29092} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.features.minion.dominion.grpc.cfg b/opennms-container/minion/container-fs/etc/org.opennms.features.minion.dominion.grpc.cfg index d6e7ce5e0d2d..1545dec9f8d0 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.features.minion.dominion.grpc.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.features.minion.dominion.grpc.cfg @@ -1,3 +1,3 @@ -host = ${DOMINION_GRPC_HOST:-horizon} -port = ${DOMINION_GRPC_PORT:-8990} -clientSecret = ${DOMINION_GRPC_CLIENT_SECRET:-} +host = ${env:DOMINION_GRPC_HOST:-horizon} +port = ${env:DOMINION_GRPC_PORT:-8990} +clientSecret = ${env:DOMINION_GRPC_CLIENT_SECRET:-} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.minion.controller.cfg b/opennms-container/minion/container-fs/etc/org.opennms.minion.controller.cfg index 84909ade6ff6..a7881cf31e53 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.minion.controller.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.minion.controller.cfg @@ -1,3 +1,3 @@ -location = ${env:MINION_LOCATION:-minion-location} -id = ${env:MINION_ID:-minion-01} +location = ${env:MINION_LOCATION:-MINION} +id = ${env:MINION_ID:-MINION-01} broker-url = ${env:OPENNMS_BROKER_URL:-failover:tcp://horizon:61616} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg b/opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg index c6c4c0945a32..c16b1e6ac031 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg @@ -1,2 +1,2 @@ -syslog.listen.interface = ${SYSLOG_INTERFACE:-0.0.0.0} -syslog.listen.port = ${SYSLOG_PORT:-1514} +syslog.listen.interface = ${env:SYSLOG_INTERFACE:-0.0.0.0} +syslog.listen.port = ${env:SYSLOG_PORT:-1514} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.netmgt.trapd.cfg b/opennms-container/minion/container-fs/etc/org.opennms.netmgt.trapd.cfg index 771d4323600b..c064b0fe41cb 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.netmgt.trapd.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.netmgt.trapd.cfg @@ -1,2 +1,2 @@ -trapd.listen.interface = ${TRAPD_INTERFACE:-0.0.0.0} -trapd.listen.port = ${TRAPD_PORT:-1162} +trapd.listen.interface = ${env:TRAPD_INTERFACE:-0.0.0.0} +trapd.listen.port = ${env:TRAPD_PORT:-1162} diff --git a/opennms-container/minion/container-fs/etc/org.ops4j.pax.web.cfg b/opennms-container/minion/container-fs/etc/org.ops4j.pax.web.cfg index f14f5b0dd673..8deb6a2d7530 100644 --- a/opennms-container/minion/container-fs/etc/org.ops4j.pax.web.cfg +++ b/opennms-container/minion/container-fs/etc/org.ops4j.pax.web.cfg @@ -1,6 +1,3 @@ -# -# DON'T EDIT THIS FILE :: GENERATED WITH CONFD -# org.osgi.service.http.port=8181 org.ops4j.pax.web.listening.addresses=0.0.0.0 javax.servlet.context.tempdir=${karaf.data}/pax-web-jsp diff --git a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java index 90281c0c832f..f88752e7c4a2 100644 --- a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java +++ b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java @@ -123,6 +123,8 @@ public MinionContainer(final StackModel model, final MinionProfile profile) { .withEnv("OPENNMS_BROKER_USER", "admin") .withEnv("OPENNMS_BROKER_PASS", "admin") .withEnv("JACOCO_AGENT_ENABLED", "1") + .withEnv("MINION_LOCATION", profile.getLocation()); + .withEnv("MINION_ID", profile.getId()); .withEnv("JAVA_OPTS", "-Xms2g -Xmx2g -Djava.security.egd=file:/dev/./urandom") .withNetwork(Network.SHARED) .withNetworkAliases(ALIAS) @@ -138,9 +140,6 @@ public MinionContainer(final StackModel model, final MinionProfile profile) { for (final Map.Entry entry : profile.getLegacyConfiguration().entrySet()) { addEnv(entry.getKey(), entry.getValue()); } - } else { - addFileSystemBind(writeMinionConfig(profile).toString(), - "/opt/minion/minion-config.yaml", BindMode.READ_ONLY, SelinuxContext.SINGLE); } if (profile.isJvmDebuggingEnabled()) { From b377bd831419a1d60729b8d88bd3a4d52217fd1b Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Tue, 17 Mar 2026 10:33:20 -0400 Subject: [PATCH 04/41] fix the Container --- .../org/opennms/smoketest/containers/MinionContainer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java index f88752e7c4a2..7442d18c3d20 100644 --- a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java +++ b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java @@ -123,8 +123,8 @@ public MinionContainer(final StackModel model, final MinionProfile profile) { .withEnv("OPENNMS_BROKER_USER", "admin") .withEnv("OPENNMS_BROKER_PASS", "admin") .withEnv("JACOCO_AGENT_ENABLED", "1") - .withEnv("MINION_LOCATION", profile.getLocation()); - .withEnv("MINION_ID", profile.getId()); + .withEnv("MINION_LOCATION", profile.getLocation()) + .withEnv("MINION_ID", profile.getId()) .withEnv("JAVA_OPTS", "-Xms2g -Xmx2g -Djava.security.egd=file:/dev/./urandom") .withNetwork(Network.SHARED) .withNetworkAliases(ALIAS) From d708b799addf33ab3c2dd8d67e02a30575513140 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Tue, 17 Mar 2026 12:33:32 -0400 Subject: [PATCH 05/41] copy the etc files --- opennms-container/minion/Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/opennms-container/minion/Dockerfile b/opennms-container/minion/Dockerfile index a6d57f215ae5..f2d7938635c3 100644 --- a/opennms-container/minion/Dockerfile +++ b/opennms-container/minion/Dockerfile @@ -95,6 +95,9 @@ COPY container-fs/prom-jmx-default-config.yaml /opt/prom-jmx-exporter/config.yam # If you copy from /opt/minion to /opt/minion the permissions are not preserved # We would have 755 for minion:root instead of 775 and prevents writing lock files in /opt/minion COPY --chown=10001:0 --from=minion-base /opt /opt + +# Overlay container-specific etc files (config files and featuresBoot templates) +COPY --chown=10001:0 container-fs/etc/ /opt/minion/etc/ COPY --chown=10001:0 --from=minion-plugins /opt/usr-plugins /opt/minion/deploy # Create the directory for server certificates From be21a60fd59d2a0e9172e5e8a908a2be0a69b00e Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Tue, 17 Mar 2026 13:51:11 -0400 Subject: [PATCH 06/41] test by setting IPC strategy --- .../java/org/opennms/smoketest/containers/MinionContainer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java index 7442d18c3d20..f636c151abb6 100644 --- a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java +++ b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java @@ -148,6 +148,7 @@ public MinionContainer(final StackModel model, final MinionProfile profile) { } withEnv("OPENNMS_BROKER_URL", "failover:tcp://" + OpenNMSContainer.ALIAS + ":61616"); + withEnv("MINION_IPC", "kafka"); if (IpcStrategy.KAFKA.equals(model.getIpcStrategy())) { withEnv("MINION_IPC", "kafka"); From 431357dac2da36d81d0ebadaa153470e6b4b8608 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Tue, 17 Mar 2026 13:53:31 -0400 Subject: [PATCH 07/41] fix the ssh port --- .../minion/container-fs/etc/org.apache.karaf.shell.cfg | 2 +- .../java/org/opennms/smoketest/containers/MinionContainer.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg b/opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg index 8a4f651e7d67..def80e928982 100644 --- a/opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg +++ b/opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg @@ -1,4 +1,4 @@ -sshPort=${env:SSH_PORT:-8101} +sshPort=${env:SSH_PORT:-8201} sshHost=${env:SSH_HOST:-127.0.0.1} hostKeyFormat=PEM sshRealm=karaf diff --git a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java index f636c151abb6..7442d18c3d20 100644 --- a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java +++ b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java @@ -148,7 +148,6 @@ public MinionContainer(final StackModel model, final MinionProfile profile) { } withEnv("OPENNMS_BROKER_URL", "failover:tcp://" + OpenNMSContainer.ALIAS + ":61616"); - withEnv("MINION_IPC", "kafka"); if (IpcStrategy.KAFKA.equals(model.getIpcStrategy())) { withEnv("MINION_IPC", "kafka"); From 25ef1c21a7e1de85da3277460d52a61f7ebba408 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Tue, 17 Mar 2026 14:57:08 -0400 Subject: [PATCH 08/41] add missing envsubst --- opennms-container/minion/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opennms-container/minion/Dockerfile b/opennms-container/minion/Dockerfile index f2d7938635c3..d48680b3da1f 100644 --- a/opennms-container/minion/Dockerfile +++ b/opennms-container/minion/Dockerfile @@ -59,7 +59,7 @@ RUN chmod +x /tmp/plugins.sh && cd /tmp && ./plugins.sh && rm ./plugins.sh ## FROM ${BASE_IMAGE} -ARG REQUIRED_RPMS="hostname uuid" +ARG REQUIRED_RPMS="hostname uuid gettext" # Collect generic steps in a layer for caching From a35760539e0bf5e7bbe2d7251286271e20a03fd7 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Tue, 17 Mar 2026 16:22:14 -0400 Subject: [PATCH 09/41] fix the logic automatically set the fallback strategy --- opennms-container/minion/container-fs/entrypoint.sh | 5 ++++- .../org/opennms/smoketest/containers/MinionContainer.java | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/opennms-container/minion/container-fs/entrypoint.sh b/opennms-container/minion/container-fs/entrypoint.sh index 133aef2953f6..9cd40b05a1b6 100755 --- a/opennms-container/minion/container-fs/entrypoint.sh +++ b/opennms-container/minion/container-fs/entrypoint.sh @@ -120,8 +120,11 @@ function applyFeatureBootTemplates() { echo "[Features] Enabled: ${name}" } - # IPC strategy — kafka or grpc + # IPC strategy — jms, kafka, or grpc case "${MINION_IPC:-}" in + jms) + echo "[Features] IPC strategy set to JMS." + ;; kafka) apply_template "kafka-ipc.boot" apply_template "kafka-rpc.boot" diff --git a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java index 7442d18c3d20..0534ca5cff09 100644 --- a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java +++ b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java @@ -156,6 +156,8 @@ public MinionContainer(final StackModel model, final MinionProfile profile) { withEnv("MINION_IPC", "grpc"); withEnv("GRPC_CLIENT_HOST", OpenNMSContainer.ALIAS); withEnv("GRPC_CLIENT_PORT", "8990"); + } else if (IpcStrategy.JMS.equals(model.getIpcStrategy())) { + withEnv("MINION_IPC", "jms"); } if (model.isJaegerEnabled()) { From 2c913ffa5e804cdd4abf0b4bee6df373ce5fbc3d Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Wed, 18 Mar 2026 09:39:00 -0400 Subject: [PATCH 10/41] update the logic to startup boot files --- .../minion/container-fs/entrypoint.sh | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/opennms-container/minion/container-fs/entrypoint.sh b/opennms-container/minion/container-fs/entrypoint.sh index 9cd40b05a1b6..cac5d169f4bd 100755 --- a/opennms-container/minion/container-fs/entrypoint.sh +++ b/opennms-container/minion/container-fs/entrypoint.sh @@ -111,8 +111,21 @@ function updateConfig() { } function applyFeatureBootTemplates() { - # Clean any previously generated boot files; leave templates directory untouched - find "${FEATURES_BOOT_DIR}" -maxdepth 1 -name "*.boot" -delete + # Clean only files managed by this script; keep baseline boot files from the image/package. + local managed_boot_files=( + "kafka-ipc.boot" + "kafka-rpc.boot" + "kafka-sink.boot" + "kafka-twin.boot" + "grpc.boot" + "disable-jms.boot" + "jaeger.boot" + "dominion-scv.boot" + ) + local boot_file + for boot_file in "${managed_boot_files[@]}"; do + rm -f "${FEATURES_BOOT_DIR}/${boot_file}" + done apply_template() { local name="$1" From 8cb20ab9367949e799bd43a646267669717bcc6d Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Wed, 18 Mar 2026 10:48:00 -0400 Subject: [PATCH 11/41] avoid relying on OSGI env --- .../minion/container-fs/entrypoint.sh | 53 ++++++++++++++++++- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/opennms-container/minion/container-fs/entrypoint.sh b/opennms-container/minion/container-fs/entrypoint.sh index cac5d169f4bd..40f71a3ec7b4 100755 --- a/opennms-container/minion/container-fs/entrypoint.sh +++ b/opennms-container/minion/container-fs/entrypoint.sh @@ -182,6 +182,54 @@ function parseEnvironment() { done } +function materializeEnvBackedConfigs() { + cat > "${MINION_HOME}/etc/org.opennms.minion.controller.cfg" < "${MINION_HOME}/etc/org.opennms.core.ipc.grpc.client.cfg" < "${MINION_HOME}/etc/org.opennms.features.minion.dominion.grpc.cfg" < "${MINION_HOME}/etc/org.opennms.netmgt.syslog.cfg" < "${MINION_HOME}/etc/org.opennms.netmgt.trapd.cfg" < "${MINION_HOME}/etc/org.opennms.core.ipc.kafka.cfg" < "${MINION_HOME}/etc/org.opennms.core.ipc.rpc.kafka.cfg" < "${MINION_HOME}/etc/org.opennms.core.ipc.sink.kafka.cfg" < "${MINION_HOME}/etc/org.opennms.core.ipc.twin.kafka.cfg" < Date: Wed, 18 Mar 2026 11:57:21 -0400 Subject: [PATCH 12/41] print the active boot file,add auto recovery to book files --- .../minion/container-fs/entrypoint.sh | 126 +++++++++++------- 1 file changed, 75 insertions(+), 51 deletions(-) diff --git a/opennms-container/minion/container-fs/entrypoint.sh b/opennms-container/minion/container-fs/entrypoint.sh index 40f71a3ec7b4..a63b950b976d 100755 --- a/opennms-container/minion/container-fs/entrypoint.sh +++ b/opennms-container/minion/container-fs/entrypoint.sh @@ -182,54 +182,6 @@ function parseEnvironment() { done } -function materializeEnvBackedConfigs() { - cat > "${MINION_HOME}/etc/org.opennms.minion.controller.cfg" < "${MINION_HOME}/etc/org.opennms.core.ipc.grpc.client.cfg" < "${MINION_HOME}/etc/org.opennms.features.minion.dominion.grpc.cfg" < "${MINION_HOME}/etc/org.opennms.netmgt.syslog.cfg" < "${MINION_HOME}/etc/org.opennms.netmgt.trapd.cfg" < "${MINION_HOME}/etc/org.opennms.core.ipc.kafka.cfg" < "${MINION_HOME}/etc/org.opennms.core.ipc.rpc.kafka.cfg" < "${MINION_HOME}/etc/org.opennms.core.ipc.sink.kafka.cfg" < "${MINION_HOME}/etc/org.opennms.core.ipc.twin.kafka.cfg" < /dev/null; then + find "${FEATURES_BOOT_DIR}" -maxdepth 1 -name "*.boot" -type f | sort | sed "s#^${FEATURES_BOOT_DIR}/# - #" + else + echo " - (none)" + fi +} + +validateFeatureBootComposition() { + local strict_validation="${MINION_VALIDATE_FEATURES_BOOT:-true}" + local repair_missing="${MINION_REPAIR_FEATURES_BOOT:-true}" + local missing=0 + + require_boot_file() { + local name="$1" + if [[ ! -f "${FEATURES_BOOT_DIR}/${name}" ]]; then + echo "[Features][ERROR] Missing required boot file: ${name}" + missing=1 + fi + } + + check_required_boot_files() { + missing=0 + + case "${MINION_IPC:-}" in + kafka) + require_boot_file "kafka-ipc.boot" + require_boot_file "kafka-rpc.boot" + require_boot_file "kafka-sink.boot" + require_boot_file "kafka-twin.boot" + require_boot_file "disable-jms.boot" + ;; + grpc) + require_boot_file "grpc.boot" + require_boot_file "disable-jms.boot" + ;; + jms|"") + # Default/package-provided feature boots are expected to cover JMS. + ;; + *) + echo "[Features][WARN] Unknown MINION_IPC='${MINION_IPC}', skipping strategy-specific checks." + ;; + esac + + [[ "${JAEGER_ENABLED:-false}" == "true" ]] && require_boot_file "jaeger.boot" + [[ "${DOMINION_SCV_ENABLED:-false}" == "true" ]] && require_boot_file "dominion-scv.boot" + } + + printFeatureBootInventory + + if [[ "${strict_validation}" != "true" ]]; then + echo "[Features] MINION_VALIDATE_FEATURES_BOOT=${strict_validation}; skipping strict validation." + return 0 + fi + + check_required_boot_files + + if [[ "$missing" -ne 0 && "${repair_missing}" == "true" ]]; then + echo "[Features][WARN] Missing boot files detected; attempting auto-repair from templates." + applyFeatureBootTemplates + printFeatureBootInventory + check_required_boot_files + fi + + if [[ "$missing" -ne 0 ]]; then + echo "[Features][ERROR] Boot file validation failed; refusing to start with incomplete feature composition." + return 1 + fi + + echo "[Features] Boot file validation passed." +} + start() { export KARAF_EXEC="exec" cd ${MINION_HOME}/bin @@ -297,6 +320,7 @@ configure() { initConfig applyOpennmsPropertiesD applyOverlayConfig + validateFeatureBootComposition if [[ "$JACOCO_AGENT_ENABLED" -gt 0 ]]; then export JAVA_OPTS="$JAVA_OPTS -javaagent:${MINION_HOME}/agent/jacoco-agent.jar=output=none,jmx=true,excludes=org.drools.*" fi From 8e73b8492bd672bc3bb8873f37463b9b35d6e99c Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Wed, 18 Mar 2026 13:09:32 -0400 Subject: [PATCH 13/41] add debugging --- .../minion/container-fs/entrypoint.sh | 41 +++++++++++++++---- .../smoketest/containers/MinionContainer.java | 2 + 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/opennms-container/minion/container-fs/entrypoint.sh b/opennms-container/minion/container-fs/entrypoint.sh index a63b950b976d..60e2b3671874 100755 --- a/opennms-container/minion/container-fs/entrypoint.sh +++ b/opennms-container/minion/container-fs/entrypoint.sh @@ -242,8 +242,35 @@ printFeatureBootInventory() { fi } +printStartupDiagnostics() { + echo "[Startup] Effective minion mode and toggles:" + echo " MINION_IPC=${MINION_IPC:-}" + echo " MINION_VALIDATE_FEATURES_BOOT=${MINION_VALIDATE_FEATURES_BOOT:-false}" + echo " MINION_REPAIR_FEATURES_BOOT=${MINION_REPAIR_FEATURES_BOOT:-true}" + echo " JAEGER_ENABLED=${JAEGER_ENABLED:-false}" + echo " DOMINION_SCV_ENABLED=${DOMINION_SCV_ENABLED:-false}" + echo " GRPC_CLIENT_HOST=${GRPC_CLIENT_HOST:-}" + echo " GRPC_CLIENT_PORT=${GRPC_CLIENT_PORT:-}" + echo " KAFKA_BOOTSTRAP_SERVERS=${KAFKA_BOOTSTRAP_SERVERS:-}" + + print_cfg() { + local cfg="$1" + local path="${MINION_HOME}/etc/${cfg}" + echo "[Startup] ${cfg}:" + if [[ -f "${path}" ]]; then + sed -n '1,120p' "${path}" | sed 's/^/ /' + else + echo " (missing)" + fi + } + + print_cfg "org.opennms.minion.controller.cfg" + print_cfg "org.opennms.core.ipc.grpc.client.cfg" + print_cfg "org.opennms.core.ipc.kafka.cfg" +} + validateFeatureBootComposition() { - local strict_validation="${MINION_VALIDATE_FEATURES_BOOT:-true}" + local strict_validation="${MINION_VALIDATE_FEATURES_BOOT:-false}" local repair_missing="${MINION_REPAIR_FEATURES_BOOT:-true}" local missing=0 @@ -284,11 +311,6 @@ validateFeatureBootComposition() { printFeatureBootInventory - if [[ "${strict_validation}" != "true" ]]; then - echo "[Features] MINION_VALIDATE_FEATURES_BOOT=${strict_validation}; skipping strict validation." - return 0 - fi - check_required_boot_files if [[ "$missing" -ne 0 && "${repair_missing}" == "true" ]]; then @@ -299,6 +321,10 @@ validateFeatureBootComposition() { fi if [[ "$missing" -ne 0 ]]; then + if [[ "${strict_validation}" != "true" ]]; then + echo "[Features][WARN] Boot file validation found missing files; continuing because MINION_VALIDATE_FEATURES_BOOT=${strict_validation}." + return 0 + fi echo "[Features][ERROR] Boot file validation failed; refusing to start with incomplete feature composition." return 1 fi @@ -320,7 +346,6 @@ configure() { initConfig applyOpennmsPropertiesD applyOverlayConfig - validateFeatureBootComposition if [[ "$JACOCO_AGENT_ENABLED" -gt 0 ]]; then export JAVA_OPTS="$JAVA_OPTS -javaagent:${MINION_HOME}/agent/jacoco-agent.jar=output=none,jmx=true,excludes=org.drools.*" fi @@ -331,6 +356,8 @@ configure() { done < "$MINION_PROCESS_ENV_CFG" export JAVA_OPTS="$CUSTOM_JAVA_OPTS $JAVA_OPTS" fi + printStartupDiagnostics + validateFeatureBootComposition if [[ -f "$MINION_SERVER_CERTS_CFG" ]]; then # cacerts is a symlink to a file, so *do not* put /. on the target rsync --out-format="%n %C" "$JAVA_HOME/lib/security/cacerts" "$CACERTS" diff --git a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java index 0534ca5cff09..6bab617d752c 100644 --- a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java +++ b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java @@ -123,6 +123,8 @@ public MinionContainer(final StackModel model, final MinionProfile profile) { .withEnv("OPENNMS_BROKER_USER", "admin") .withEnv("OPENNMS_BROKER_PASS", "admin") .withEnv("JACOCO_AGENT_ENABLED", "1") + .withEnv("MINION_VALIDATE_FEATURES_BOOT", "false") + .withEnv("MINION_REPAIR_FEATURES_BOOT", "true") .withEnv("MINION_LOCATION", profile.getLocation()) .withEnv("MINION_ID", profile.getId()) .withEnv("JAVA_OPTS", "-Xms2g -Xmx2g -Djava.security.egd=file:/dev/./urandom") From abc67180453017fe93ca0c655b07b10db840c86d Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Wed, 18 Mar 2026 14:42:20 -0400 Subject: [PATCH 14/41] debug as to why karaf feature is missing from minion --- .../minion/container-fs/entrypoint.sh | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/opennms-container/minion/container-fs/entrypoint.sh b/opennms-container/minion/container-fs/entrypoint.sh index 60e2b3671874..2e7cb6e135ae 100755 --- a/opennms-container/minion/container-fs/entrypoint.sh +++ b/opennms-container/minion/container-fs/entrypoint.sh @@ -6,7 +6,9 @@ # Cause false/positives # shellcheck disable=SC2086 -set -e +set -eE + +trap 'rc=$?; echo "[Startup][ERROR] entrypoint failed at line ${LINENO}: ${BASH_COMMAND} (exit=${rc})"; exit ${rc}' ERR umask 002 export MINION_HOME="/opt/minion" @@ -269,6 +271,32 @@ printStartupDiagnostics() { print_cfg "org.opennms.core.ipc.kafka.cfg" } +printKarafResolutionDiagnostics() { + local ver + local root="${MINION_HOME}/system/org/opennms/karaf/opennms" + + ver="$(grep -E 'mvn:org\.opennms\.karaf/opennms/.*/xml/features' "${MINION_HOME}/etc/org.apache.karaf.features.cfg" \ + | sed -E 's#.*mvn:org\.opennms\.karaf/opennms/([^/]+)/xml/features.*#\1#' \ + | head -n1)" + + echo "[Karaf] Repository diagnostics:" + echo " configured-opennms-features-version=${ver:-}" + + if [[ -n "${ver}" && -d "${root}/${ver}" ]]; then + echo " local-repo-path=${root}/${ver}" + find "${root}/${ver}" -maxdepth 1 -type f -name "*features*.xml" | sed 's/^/ found-feature-xml=/' || true + else + echo " local-repo-path=${root}/${ver} (missing)" + fi + + echo "[Karaf] org.ops4j.pax.url.mvn.cfg:" + if [[ -f "${MINION_HOME}/etc/org.ops4j.pax.url.mvn.cfg" ]]; then + sed -n '1,200p' "${MINION_HOME}/etc/org.ops4j.pax.url.mvn.cfg" | sed 's/^/ /' + else + echo " (missing)" + fi +} + validateFeatureBootComposition() { local strict_validation="${MINION_VALIDATE_FEATURES_BOOT:-false}" local repair_missing="${MINION_REPAIR_FEATURES_BOOT:-true}" @@ -357,6 +385,7 @@ configure() { export JAVA_OPTS="$CUSTOM_JAVA_OPTS $JAVA_OPTS" fi printStartupDiagnostics + printKarafResolutionDiagnostics validateFeatureBootComposition if [[ -f "$MINION_SERVER_CERTS_CFG" ]]; then # cacerts is a symlink to a file, so *do not* put /. on the target From 895d64487e0b1a8e652b367c7d70c4d7ce36d42e Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Wed, 18 Mar 2026 15:42:39 -0400 Subject: [PATCH 15/41] allow the script to run even if Jaeger and dominion is disabled --- opennms-container/minion/container-fs/entrypoint.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/opennms-container/minion/container-fs/entrypoint.sh b/opennms-container/minion/container-fs/entrypoint.sh index 2e7cb6e135ae..868feebdc771 100755 --- a/opennms-container/minion/container-fs/entrypoint.sh +++ b/opennms-container/minion/container-fs/entrypoint.sh @@ -157,8 +157,8 @@ function applyFeatureBootTemplates() { esac # Standalone optional features - [[ "${JAEGER_ENABLED:-false}" == "true" ]] && apply_template "jaeger.boot" - [[ "${DOMINION_SCV_ENABLED:-false}" == "true" ]] && apply_template "dominion-scv.boot" + [[ "${JAEGER_ENABLED:-false}" == "true" ]] && apply_template "jaeger.boot" || true + [[ "${DOMINION_SCV_ENABLED:-false}" == "true" ]] && apply_template "dominion-scv.boot" || true } function parseEnvironment() { @@ -333,8 +333,8 @@ validateFeatureBootComposition() { ;; esac - [[ "${JAEGER_ENABLED:-false}" == "true" ]] && require_boot_file "jaeger.boot" - [[ "${DOMINION_SCV_ENABLED:-false}" == "true" ]] && require_boot_file "dominion-scv.boot" + [[ "${JAEGER_ENABLED:-false}" == "true" ]] && require_boot_file "jaeger.boot" || true + [[ "${DOMINION_SCV_ENABLED:-false}" == "true" ]] && require_boot_file "dominion-scv.boot" || true } printFeatureBootInventory From da579370e2938bccf095c89d32db1ea560e8ff2a Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Wed, 18 Mar 2026 17:06:55 -0400 Subject: [PATCH 16/41] remove hardcoded rmiServerHost --- .../minion/container-fs/etc/org.apache.karaf.management.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opennms-container/minion/container-fs/etc/org.apache.karaf.management.cfg b/opennms-container/minion/container-fs/etc/org.apache.karaf.management.cfg index 6f36c5992d28..81e4f82de510 100644 --- a/opennms-container/minion/container-fs/etc/org.apache.karaf.management.cfg +++ b/opennms-container/minion/container-fs/etc/org.apache.karaf.management.cfg @@ -9,7 +9,7 @@ rmiRegistryPort = 1299 # # Host for RMI registry # -rmiRegistryHost = 127.0.0.1 +rmiRegistryHost = ${env:RMI_REGISTRY_HOST:-0.0.0.0} # # Port number for RMI server connection @@ -19,7 +19,7 @@ rmiServerPort = 45444 # # Host for RMI server # -rmiServerHost = 127.0.0.1 +rmiServerHost = ${env:RMI_SERVER_HOST:-0.0.0.0} # # Name of the JAAS realm used for authentication From 91cf19294efd11ee8ac3f30ce9ef4b5f9776eeb2 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Thu, 19 Mar 2026 10:20:08 -0400 Subject: [PATCH 17/41] don't use localhost by default, set it to OpenNMS Container --- .../smoketest/minion/AbstractKafkaCompressionRpcIT.java | 9 +++++---- .../opennms/smoketest/minion/DetectorsOnMinionIT.java | 3 ++- .../java/org/opennms/smoketest/minion/IpcOverGrpcIT.java | 5 +++-- .../org/opennms/smoketest/minion/RpcOverKafkaIT.java | 8 ++++---- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/smoke-test/src/test/java/org/opennms/smoketest/minion/AbstractKafkaCompressionRpcIT.java b/smoke-test/src/test/java/org/opennms/smoketest/minion/AbstractKafkaCompressionRpcIT.java index 418e4294cf3d..f9e475d18761 100644 --- a/smoke-test/src/test/java/org/opennms/smoketest/minion/AbstractKafkaCompressionRpcIT.java +++ b/smoke-test/src/test/java/org/opennms/smoketest/minion/AbstractKafkaCompressionRpcIT.java @@ -36,6 +36,7 @@ import org.opennms.netmgt.provision.persist.requisition.Requisition; import org.opennms.netmgt.provision.persist.requisition.RequisitionInterface; import org.opennms.netmgt.provision.persist.requisition.RequisitionNode; +import org.opennms.smoketest.containers.MinionContainer; import org.opennms.smoketest.containers.OpenNMSContainer; import org.opennms.smoketest.stacks.OpenNMSStack; import org.opennms.smoketest.utils.CommandTestUtils; @@ -54,15 +55,15 @@ public abstract class AbstractKafkaCompressionRpcIT { @Test public void verifyKafkaRpcWithTcpServiceDetection() { - addRequisition(stack().opennms().getRestClient(), stack().minion().getLocation(), LOCALHOST); + addRequisition(stack().opennms().getRestClient(), stack().minion().getLocation(), OpenNMSContainer.ALIAS); await().atMost(3, MINUTES).pollInterval(15, SECONDS) - .until(() -> detectTcpAtLocationMinion(stack()), containsString("'TCP' WAS detected on 127.0.0.1")); + .until(() -> detectTcpAtLocationMinion(stack()), containsString(String.format("'TCP' WAS detected on %s", OpenNMSContainer.ALIAS))); } static String detectTcpAtLocationMinion(OpenNMSStack stack) throws Exception { try (final SshClient sshClient = new SshClient(stack.opennms().getSshAddress(), "admin", "admin")) { PrintStream pipe = sshClient.openShell(); - pipe.println(String.format("detect -l %s TCP 127.0.0.1 port=8201", stack.minion().getLocation())); + pipe.println(String.format("detect -l %s TCP %s port=8201", stack.minion().getLocation(), OpenNMSContainer.ALIAS)); pipe.println("logout"); await().atMost(90, SECONDS).until(sshClient.isShellClosedCallable()); String shellOutput = CommandTestUtils.stripAnsiCodes(sshClient.getStdout()); @@ -84,7 +85,7 @@ private String detectJdbcAtLocationMinion() throws Exception { try (final SshClient sshClient = stack().opennms().ssh()) { // Perform JDBC service detection on Minion final PrintStream pipe = sshClient.openShell(); - pipe.println(String.format("detect -l %s JDBC 127.0.0.1 url=%s user=opennms password=opennms", stack().minion().getLocation(), jdbcUrl)); + pipe.println(String.format("detect -l %s JDBC %s url=%s user=opennms password=opennms", stack().minion().getLocation(), OpenNMSContainer.DB_ALIAS, jdbcUrl)); pipe.println("logout"); await().atMost(1, MINUTES).until(sshClient.isShellClosedCallable()); // Sanitize the output diff --git a/smoke-test/src/test/java/org/opennms/smoketest/minion/DetectorsOnMinionIT.java b/smoke-test/src/test/java/org/opennms/smoketest/minion/DetectorsOnMinionIT.java index 093b7ce1ae44..6c78e054cf03 100644 --- a/smoke-test/src/test/java/org/opennms/smoketest/minion/DetectorsOnMinionIT.java +++ b/smoke-test/src/test/java/org/opennms/smoketest/minion/DetectorsOnMinionIT.java @@ -43,6 +43,7 @@ import org.opennms.netmgt.provision.persist.requisition.Requisition; import org.opennms.netmgt.provision.persist.requisition.RequisitionInterface; import org.opennms.netmgt.provision.persist.requisition.RequisitionNode; +import org.opennms.smoketest.containers.OpenNMSContainer; import org.opennms.smoketest.junit.MinionTests; import org.opennms.smoketest.stacks.OpenNMSStack; import org.opennms.smoketest.utils.RestClient; @@ -62,7 +63,7 @@ public class DetectorsOnMinionIT { @Test public void checkServicesDetectedOnMinion() throws ClientProtocolException, IOException, InterruptedException { RestClient client = stack.opennms().getRestClient(); - addRequisition(client, "MINION", LOCALHOST); + addRequisition(client, "MINION", OpenNMSContainer.ALIAS); await().atMost(5, MINUTES).pollDelay(0, SECONDS).pollInterval(30, SECONDS) .until(getnumberOfServicesDetected(client), greaterThan(0)); } diff --git a/smoke-test/src/test/java/org/opennms/smoketest/minion/IpcOverGrpcIT.java b/smoke-test/src/test/java/org/opennms/smoketest/minion/IpcOverGrpcIT.java index 6832db4902ec..34c4fd2e65ad 100644 --- a/smoke-test/src/test/java/org/opennms/smoketest/minion/IpcOverGrpcIT.java +++ b/smoke-test/src/test/java/org/opennms/smoketest/minion/IpcOverGrpcIT.java @@ -30,6 +30,7 @@ import org.junit.ClassRule; import org.junit.Test; import org.junit.experimental.categories.Category; +import org.opennms.smoketest.containers.OpenNMSContainer; import org.opennms.smoketest.junit.MinionTests; import org.opennms.smoketest.stacks.IpcStrategy; import org.opennms.smoketest.stacks.OpenNMSStack; @@ -53,9 +54,9 @@ public class IpcOverGrpcIT { @Test public void verifyGrpcRpcWithTcpServiceDetection() { // Add node and interface with minion location. - addRequisition(stack.opennms().getRestClient(), stack.minion().getLocation(), LOCALHOST); + addRequisition(stack.opennms().getRestClient(), stack.minion().getLocation(), OpenNMSContainer.ALIAS); await().atMost(3, MINUTES).pollInterval(15, SECONDS) - .until(() -> RpcOverKafkaIT.detectTcpAtLocationMinion(stack), containsString("'TCP' WAS detected on 127.0.0.1")); + .until(() -> RpcOverKafkaIT.detectTcpAtLocationMinion(stack), containsString(String.format("'TCP' WAS detected on %s", OpenNMSContainer.ALIAS))); } } diff --git a/smoke-test/src/test/java/org/opennms/smoketest/minion/RpcOverKafkaIT.java b/smoke-test/src/test/java/org/opennms/smoketest/minion/RpcOverKafkaIT.java index cb89c467ea56..a6eda5354554 100644 --- a/smoke-test/src/test/java/org/opennms/smoketest/minion/RpcOverKafkaIT.java +++ b/smoke-test/src/test/java/org/opennms/smoketest/minion/RpcOverKafkaIT.java @@ -64,15 +64,15 @@ public class RpcOverKafkaIT { @Test public void verifyKafkaRpcWithTcpServiceDetection() { // Add node and interface with minion location. - addRequisition(stack.opennms().getRestClient(), stack.minion().getLocation(), LOCALHOST); + addRequisition(stack.opennms().getRestClient(), stack.minion().getLocation(), OpenNMSContainer.ALIAS); await().atMost(3, MINUTES).pollInterval(15, SECONDS) - .until(() -> detectTcpAtLocationMinion(stack), containsString("'TCP' WAS detected on 127.0.0.1")); + .until(() -> detectTcpAtLocationMinion(stack), containsString(String.format("'TCP' WAS detected on %s", OpenNMSContainer.ALIAS))); } static String detectTcpAtLocationMinion(OpenNMSStack stack) throws Exception { try (final SshClient sshClient = new SshClient(stack.opennms().getSshAddress(), "admin", "admin")) { PrintStream pipe = sshClient.openShell(); - pipe.println(String.format("detect -l %s TCP 127.0.0.1 port=8201", stack.minion().getLocation())); + pipe.println(String.format("detect -l %s TCP %s port=8201", stack.minion().getLocation(), OpenNMSContainer.ALIAS)); pipe.println("logout"); await().atMost(90, SECONDS).until(sshClient.isShellClosedCallable()); String shellOutput = CommandTestUtils.stripAnsiCodes(sshClient.getStdout()); @@ -94,7 +94,7 @@ private String detectJdbcAtLocationMinion() throws Exception { try (final SshClient sshClient = stack.opennms().ssh()) { // Perform JDBC service detection on Minion final PrintStream pipe = sshClient.openShell(); - pipe.println(String.format("detect -l %s JDBC 127.0.0.1 url=%s user=opennms password=opennms", stack.minion().getLocation(), jdbcUrl)); + pipe.println(String.format("detect -l %s JDBC %s url=%s user=opennms password=opennms", stack.minion().getLocation(), OpenNMSContainer.DB_ALIAS, jdbcUrl)); pipe.println("logout"); await().atMost(1, MINUTES).until(sshClient.isShellClosedCallable()); // Sanitize the output From 97b43699748e5e14fc9fbf3d3b50f9fbc5c1cd34 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Thu, 19 Mar 2026 11:55:45 -0400 Subject: [PATCH 18/41] Revert "don't use localhost by default, set it to OpenNMS Container" This reverts commit 91cf19294efd11ee8ac3f30ce9ef4b5f9776eeb2. --- .../smoketest/minion/AbstractKafkaCompressionRpcIT.java | 9 ++++----- .../opennms/smoketest/minion/DetectorsOnMinionIT.java | 3 +-- .../java/org/opennms/smoketest/minion/IpcOverGrpcIT.java | 5 ++--- .../org/opennms/smoketest/minion/RpcOverKafkaIT.java | 8 ++++---- 4 files changed, 11 insertions(+), 14 deletions(-) diff --git a/smoke-test/src/test/java/org/opennms/smoketest/minion/AbstractKafkaCompressionRpcIT.java b/smoke-test/src/test/java/org/opennms/smoketest/minion/AbstractKafkaCompressionRpcIT.java index f9e475d18761..418e4294cf3d 100644 --- a/smoke-test/src/test/java/org/opennms/smoketest/minion/AbstractKafkaCompressionRpcIT.java +++ b/smoke-test/src/test/java/org/opennms/smoketest/minion/AbstractKafkaCompressionRpcIT.java @@ -36,7 +36,6 @@ import org.opennms.netmgt.provision.persist.requisition.Requisition; import org.opennms.netmgt.provision.persist.requisition.RequisitionInterface; import org.opennms.netmgt.provision.persist.requisition.RequisitionNode; -import org.opennms.smoketest.containers.MinionContainer; import org.opennms.smoketest.containers.OpenNMSContainer; import org.opennms.smoketest.stacks.OpenNMSStack; import org.opennms.smoketest.utils.CommandTestUtils; @@ -55,15 +54,15 @@ public abstract class AbstractKafkaCompressionRpcIT { @Test public void verifyKafkaRpcWithTcpServiceDetection() { - addRequisition(stack().opennms().getRestClient(), stack().minion().getLocation(), OpenNMSContainer.ALIAS); + addRequisition(stack().opennms().getRestClient(), stack().minion().getLocation(), LOCALHOST); await().atMost(3, MINUTES).pollInterval(15, SECONDS) - .until(() -> detectTcpAtLocationMinion(stack()), containsString(String.format("'TCP' WAS detected on %s", OpenNMSContainer.ALIAS))); + .until(() -> detectTcpAtLocationMinion(stack()), containsString("'TCP' WAS detected on 127.0.0.1")); } static String detectTcpAtLocationMinion(OpenNMSStack stack) throws Exception { try (final SshClient sshClient = new SshClient(stack.opennms().getSshAddress(), "admin", "admin")) { PrintStream pipe = sshClient.openShell(); - pipe.println(String.format("detect -l %s TCP %s port=8201", stack.minion().getLocation(), OpenNMSContainer.ALIAS)); + pipe.println(String.format("detect -l %s TCP 127.0.0.1 port=8201", stack.minion().getLocation())); pipe.println("logout"); await().atMost(90, SECONDS).until(sshClient.isShellClosedCallable()); String shellOutput = CommandTestUtils.stripAnsiCodes(sshClient.getStdout()); @@ -85,7 +84,7 @@ private String detectJdbcAtLocationMinion() throws Exception { try (final SshClient sshClient = stack().opennms().ssh()) { // Perform JDBC service detection on Minion final PrintStream pipe = sshClient.openShell(); - pipe.println(String.format("detect -l %s JDBC %s url=%s user=opennms password=opennms", stack().minion().getLocation(), OpenNMSContainer.DB_ALIAS, jdbcUrl)); + pipe.println(String.format("detect -l %s JDBC 127.0.0.1 url=%s user=opennms password=opennms", stack().minion().getLocation(), jdbcUrl)); pipe.println("logout"); await().atMost(1, MINUTES).until(sshClient.isShellClosedCallable()); // Sanitize the output diff --git a/smoke-test/src/test/java/org/opennms/smoketest/minion/DetectorsOnMinionIT.java b/smoke-test/src/test/java/org/opennms/smoketest/minion/DetectorsOnMinionIT.java index 6c78e054cf03..093b7ce1ae44 100644 --- a/smoke-test/src/test/java/org/opennms/smoketest/minion/DetectorsOnMinionIT.java +++ b/smoke-test/src/test/java/org/opennms/smoketest/minion/DetectorsOnMinionIT.java @@ -43,7 +43,6 @@ import org.opennms.netmgt.provision.persist.requisition.Requisition; import org.opennms.netmgt.provision.persist.requisition.RequisitionInterface; import org.opennms.netmgt.provision.persist.requisition.RequisitionNode; -import org.opennms.smoketest.containers.OpenNMSContainer; import org.opennms.smoketest.junit.MinionTests; import org.opennms.smoketest.stacks.OpenNMSStack; import org.opennms.smoketest.utils.RestClient; @@ -63,7 +62,7 @@ public class DetectorsOnMinionIT { @Test public void checkServicesDetectedOnMinion() throws ClientProtocolException, IOException, InterruptedException { RestClient client = stack.opennms().getRestClient(); - addRequisition(client, "MINION", OpenNMSContainer.ALIAS); + addRequisition(client, "MINION", LOCALHOST); await().atMost(5, MINUTES).pollDelay(0, SECONDS).pollInterval(30, SECONDS) .until(getnumberOfServicesDetected(client), greaterThan(0)); } diff --git a/smoke-test/src/test/java/org/opennms/smoketest/minion/IpcOverGrpcIT.java b/smoke-test/src/test/java/org/opennms/smoketest/minion/IpcOverGrpcIT.java index 34c4fd2e65ad..6832db4902ec 100644 --- a/smoke-test/src/test/java/org/opennms/smoketest/minion/IpcOverGrpcIT.java +++ b/smoke-test/src/test/java/org/opennms/smoketest/minion/IpcOverGrpcIT.java @@ -30,7 +30,6 @@ import org.junit.ClassRule; import org.junit.Test; import org.junit.experimental.categories.Category; -import org.opennms.smoketest.containers.OpenNMSContainer; import org.opennms.smoketest.junit.MinionTests; import org.opennms.smoketest.stacks.IpcStrategy; import org.opennms.smoketest.stacks.OpenNMSStack; @@ -54,9 +53,9 @@ public class IpcOverGrpcIT { @Test public void verifyGrpcRpcWithTcpServiceDetection() { // Add node and interface with minion location. - addRequisition(stack.opennms().getRestClient(), stack.minion().getLocation(), OpenNMSContainer.ALIAS); + addRequisition(stack.opennms().getRestClient(), stack.minion().getLocation(), LOCALHOST); await().atMost(3, MINUTES).pollInterval(15, SECONDS) - .until(() -> RpcOverKafkaIT.detectTcpAtLocationMinion(stack), containsString(String.format("'TCP' WAS detected on %s", OpenNMSContainer.ALIAS))); + .until(() -> RpcOverKafkaIT.detectTcpAtLocationMinion(stack), containsString("'TCP' WAS detected on 127.0.0.1")); } } diff --git a/smoke-test/src/test/java/org/opennms/smoketest/minion/RpcOverKafkaIT.java b/smoke-test/src/test/java/org/opennms/smoketest/minion/RpcOverKafkaIT.java index a6eda5354554..cb89c467ea56 100644 --- a/smoke-test/src/test/java/org/opennms/smoketest/minion/RpcOverKafkaIT.java +++ b/smoke-test/src/test/java/org/opennms/smoketest/minion/RpcOverKafkaIT.java @@ -64,15 +64,15 @@ public class RpcOverKafkaIT { @Test public void verifyKafkaRpcWithTcpServiceDetection() { // Add node and interface with minion location. - addRequisition(stack.opennms().getRestClient(), stack.minion().getLocation(), OpenNMSContainer.ALIAS); + addRequisition(stack.opennms().getRestClient(), stack.minion().getLocation(), LOCALHOST); await().atMost(3, MINUTES).pollInterval(15, SECONDS) - .until(() -> detectTcpAtLocationMinion(stack), containsString(String.format("'TCP' WAS detected on %s", OpenNMSContainer.ALIAS))); + .until(() -> detectTcpAtLocationMinion(stack), containsString("'TCP' WAS detected on 127.0.0.1")); } static String detectTcpAtLocationMinion(OpenNMSStack stack) throws Exception { try (final SshClient sshClient = new SshClient(stack.opennms().getSshAddress(), "admin", "admin")) { PrintStream pipe = sshClient.openShell(); - pipe.println(String.format("detect -l %s TCP %s port=8201", stack.minion().getLocation(), OpenNMSContainer.ALIAS)); + pipe.println(String.format("detect -l %s TCP 127.0.0.1 port=8201", stack.minion().getLocation())); pipe.println("logout"); await().atMost(90, SECONDS).until(sshClient.isShellClosedCallable()); String shellOutput = CommandTestUtils.stripAnsiCodes(sshClient.getStdout()); @@ -94,7 +94,7 @@ private String detectJdbcAtLocationMinion() throws Exception { try (final SshClient sshClient = stack.opennms().ssh()) { // Perform JDBC service detection on Minion final PrintStream pipe = sshClient.openShell(); - pipe.println(String.format("detect -l %s JDBC %s url=%s user=opennms password=opennms", stack.minion().getLocation(), OpenNMSContainer.DB_ALIAS, jdbcUrl)); + pipe.println(String.format("detect -l %s JDBC 127.0.0.1 url=%s user=opennms password=opennms", stack.minion().getLocation(), jdbcUrl)); pipe.println("logout"); await().atMost(1, MINUTES).until(sshClient.isShellClosedCallable()); // Sanitize the output From 7ab5d5e0f770c21e4f4505c74593d88092ebb7fa Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Thu, 19 Mar 2026 12:13:21 -0400 Subject: [PATCH 19/41] enable `trapd.useAddressFromVarbind` --- .../minion/container-fs/etc/org.opennms.netmgt.trapd.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/opennms-container/minion/container-fs/etc/org.opennms.netmgt.trapd.cfg b/opennms-container/minion/container-fs/etc/org.opennms.netmgt.trapd.cfg index c064b0fe41cb..e02ac3715ca0 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.netmgt.trapd.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.netmgt.trapd.cfg @@ -1,2 +1,3 @@ trapd.listen.interface = ${env:TRAPD_INTERFACE:-0.0.0.0} trapd.listen.port = ${env:TRAPD_PORT:-1162} +trapd.useAddressFromVarbind = true From bc4c3e3726789549f34d33984c6b05941de43924 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Thu, 19 Mar 2026 14:35:33 -0400 Subject: [PATCH 20/41] override the etc cfg for trapd --- .../org/opennms/smoketest/containers/MinionContainer.java | 7 +++++++ .../resources/minion-overlay/org.opennms.netmgt.trapd.cfg | 3 +++ 2 files changed, 10 insertions(+) create mode 100644 smoke-test/src/main/resources/minion-overlay/org.opennms.netmgt.trapd.cfg diff --git a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java index 6bab617d752c..af10021d5fab 100644 --- a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java +++ b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java @@ -255,6 +255,13 @@ private void writeOverlay(Path home, MinionProfile profile) throws IOException { // Allow other users to read the folder OverlayUtils.setOverlayPermissions(home); + // Load classpath resources first (e.g., minion-overlay with trapd config) + try { + FileUtils.copyDirectory(MountableFile.forClasspathResource("minion-overlay").getResolvedPath().toFile(), home.toFile()); + } catch (Exception e) { + // Classpath resource may not exist, which is fine + } + // Copy the files from the profile *first* // If this test class writes something, we expect it to be there OverlayUtils.copyFiles(profile.getFiles(), home); diff --git a/smoke-test/src/main/resources/minion-overlay/org.opennms.netmgt.trapd.cfg b/smoke-test/src/main/resources/minion-overlay/org.opennms.netmgt.trapd.cfg new file mode 100644 index 000000000000..d6f922354e2d --- /dev/null +++ b/smoke-test/src/main/resources/minion-overlay/org.opennms.netmgt.trapd.cfg @@ -0,0 +1,3 @@ +trapd.listen.interface = 0.0.0.0 +trapd.listen.port = 1162 +trapd.useAddressFromVarbind = true From 1de04b325e65a8f9cd9e56c497acb470e294ea0b Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Thu, 19 Mar 2026 15:01:56 -0400 Subject: [PATCH 21/41] test --- .../minion/container-fs/etc/org.opennms.netmgt.syslog.cfg | 1 + .../org/opennms/smoketest/containers/MinionContainer.java | 7 +------ .../java/org/opennms/smoketest/minion/NxosTelemetryIT.java | 3 ++- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg b/opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg index c16b1e6ac031..fff158d613c7 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg @@ -1,2 +1,3 @@ syslog.listen.interface = ${env:SYSLOG_INTERFACE:-0.0.0.0} syslog.listen.port = ${env:SYSLOG_PORT:-1514} +syslog.useAddressFromVarbind = true \ No newline at end of file diff --git a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java index af10021d5fab..af197acae2ef 100644 --- a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java +++ b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java @@ -255,12 +255,7 @@ private void writeOverlay(Path home, MinionProfile profile) throws IOException { // Allow other users to read the folder OverlayUtils.setOverlayPermissions(home); - // Load classpath resources first (e.g., minion-overlay with trapd config) - try { - FileUtils.copyDirectory(MountableFile.forClasspathResource("minion-overlay").getResolvedPath().toFile(), home.toFile()); - } catch (Exception e) { - // Classpath resource may not exist, which is fine - } + // Copy the files from the profile *first* // If this test class writes something, we expect it to be there diff --git a/smoke-test/src/test/java/org/opennms/smoketest/minion/NxosTelemetryIT.java b/smoke-test/src/test/java/org/opennms/smoketest/minion/NxosTelemetryIT.java index d3be89daaf9c..1242b9d2af7e 100644 --- a/smoke-test/src/test/java/org/opennms/smoketest/minion/NxosTelemetryIT.java +++ b/smoke-test/src/test/java/org/opennms/smoketest/minion/NxosTelemetryIT.java @@ -45,6 +45,7 @@ import org.opennms.netmgt.provision.persist.requisition.Requisition; import org.opennms.netmgt.provision.persist.requisition.RequisitionInterface; import org.opennms.netmgt.provision.persist.requisition.RequisitionNode; +import org.opennms.smoketest.containers.OpenNMSContainer; import org.opennms.smoketest.stacks.OpenNMSStack; import org.opennms.smoketest.junit.MinionTests; import org.opennms.smoketest.stacks.NetworkProtocol; @@ -110,7 +111,7 @@ public static OnmsNode addRequisition(OpenNMSStack stack, boolean isMinion, Date Requisition requisition = new Requisition("telemetry"); List interfaces = new ArrayList<>(); RequisitionInterface requisitionInterface = new RequisitionInterface(); - requisitionInterface.setIpAddr("192.168.0.1"); + requisitionInterface.setIpAddr(OpenNMSContainer.ALIAS); requisitionInterface.setManaged(true); requisitionInterface.setSnmpPrimary(PrimaryType.PRIMARY); interfaces.add(requisitionInterface); From 8cb2c116baee7094d583fd296b4c9024bc163297 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Thu, 19 Mar 2026 17:07:15 -0400 Subject: [PATCH 22/41] remove deadcode and clean up --- ....telemetry.listeners-single-port-flows.cfg | 14 ++++ .../smoketest/containers/MinionContainer.java | 66 ------------------- 2 files changed, 14 insertions(+), 66 deletions(-) create mode 100644 opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg diff --git a/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg b/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg new file mode 100644 index 000000000000..0d6335a78d59 --- /dev/null +++ b/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg @@ -0,0 +1,14 @@ +name = Single-Port-Flow-Listener +class-name = org.opennms.netmgt.telemetry.listeners.UdpListener +parameters.port = ${env:FLOWS_PORT:-50000} +parsers.1.name = Netflow-5 +parsers.1.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.Netflow5UdpParser +parsers.1.parameters.maxClockSkew = 300 +parsers.2.name = Netflow-9 +parsers.2.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.Netflow9UdpParser +parsers.2.parameters.maxClockSkew = 300 +parsers.3.name = IPFIX +parsers.3.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.IpfixUdpParser +parsers.3.parameters.maxClockSkew = 300 +parsers.4.name = SFlow +parsers.4.class-name = org.opennms.netmgt.telemetry.protocols.sflow.parser.SFlowUdpParser diff --git a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java index af197acae2ef..485a51c46912 100644 --- a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java +++ b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java @@ -175,72 +175,6 @@ public MinionContainer(final StackModel model, final MinionProfile profile) { } } - private Path writeMinionConfig(MinionProfile profile) { - try { - final Path minionConfig = createTempDirectory(ALIAS).toAbsolutePath().resolve("minion-config.yaml"); - writeMinionConfigYaml(minionConfig, profile); - return minionConfig; - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - private void writeMinionConfigYaml(Path minionConfigYaml, MinionProfile profile) throws IOException { - // Copy over the default configuration from the class-path - FileUtils.copyFile(new File(MountableFile.forClasspathResource("minion-config/minion-config.yaml").getFilesystemPath()), minionConfigYaml.toFile()); - - // Allow other users to read the file - OverlayUtils.setOverlayPermissions(minionConfigYaml); - - String config = "{\n" + - "\t\"location\": \"" + profile.getLocation() + "\",\n" + - "\t\"id\": \"" + profile.getId() + "\",\n" + - "\t\"broker-url\": \"failover:tcp://" + OpenNMSContainer.ALIAS + ":61616\"\n" + - "}"; - OverlayUtils.writeYaml(minionConfigYaml, jsonMapper.readValue(config, Map.class)); - - if (!Strings.isNullOrEmpty(profile.getDominionGrpcScvClientSecret())) { - final String scvConfig = "{\"scv\": {\"provider\": \"dominion\"}}"; - OverlayUtils.writeYaml(minionConfigYaml, jsonMapper.readValue(scvConfig, Map.class)); - - final String gprcConfig = "{\"dominion\": { \"grpc\": { \"client-secret\":\"" + profile.getDominionGrpcScvClientSecret() + "\"}}}"; - OverlayUtils.writeYaml(minionConfigYaml, jsonMapper.readValue(gprcConfig, Map.class)); - } - - if (IpcStrategy.KAFKA.equals(model.getIpcStrategy())) { - String kafkaIpc = "{\n" + - "\t\"ipc\": {\n" + - "\t\t\"kafka\": {\n" + - "\t\t\t\"bootstrap.servers\": \""+ OpenNMSContainer.KAFKA_ALIAS +":9092\",\n" + - "\t\t\t\"compression.type\": \""+ model.getKafkaCompressionStrategy().getCodec() +"\"\n" + - "\t\t}\n" + - "\t}\n" + - "}"; - OverlayUtils.writeYaml(minionConfigYaml, jsonMapper.readValue(kafkaIpc, Map.class)); - } else if (IpcStrategy.GRPC.equals(model.getIpcStrategy())) { - String grpc = "{\n" + - "\t\"ipc\": {\n" + - "\t\t\"grpc\": {\n" + - "\t\t\t\"host\": \"" + OpenNMSContainer.ALIAS + "\",\n" + - "\t\t\t\"port\": 8990\n" + - "\t\t}\n" + - "\t}\n" + - "}"; - OverlayUtils.writeYaml(minionConfigYaml, jsonMapper.readValue(grpc, Map.class)); - } - - if (model.isJaegerEnabled()) { - String jaeger = "{\n" + - "\t\"system\": {\n" + - "\t\t\"properties\": {\n" + - "\t\t\t\"JAEGER_ENDPOINT\": \"" + JaegerContainer.getThriftHttpURL() + "\"\n" + - "\t\t}\n" + - "\t}\n" + - "}"; - OverlayUtils.writeYaml(minionConfigYaml, jsonMapper.readValue(jaeger, Map.class)); - } - } - private Path writeOverlay() { try { final Path home = Files.createTempDirectory(ALIAS).toAbsolutePath(); From 007c58f63e42bfec1eb2c195400255aa9eef4b11 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Fri, 20 Mar 2026 09:06:52 -0400 Subject: [PATCH 23/41] move properties.d for now --- .../etc => }/opennms.properties.d/instance-id.properties | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename opennms-container/minion/{container-fs/etc => }/opennms.properties.d/instance-id.properties (100%) diff --git a/opennms-container/minion/container-fs/etc/opennms.properties.d/instance-id.properties b/opennms-container/minion/opennms.properties.d/instance-id.properties similarity index 100% rename from opennms-container/minion/container-fs/etc/opennms.properties.d/instance-id.properties rename to opennms-container/minion/opennms.properties.d/instance-id.properties From c806491690277d378561a3538e127c7dc4257f05 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Fri, 20 Mar 2026 09:08:48 -0400 Subject: [PATCH 24/41] revert some changes --- .../java/org/opennms/smoketest/minion/NxosTelemetryIT.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/smoke-test/src/test/java/org/opennms/smoketest/minion/NxosTelemetryIT.java b/smoke-test/src/test/java/org/opennms/smoketest/minion/NxosTelemetryIT.java index 1242b9d2af7e..d3be89daaf9c 100644 --- a/smoke-test/src/test/java/org/opennms/smoketest/minion/NxosTelemetryIT.java +++ b/smoke-test/src/test/java/org/opennms/smoketest/minion/NxosTelemetryIT.java @@ -45,7 +45,6 @@ import org.opennms.netmgt.provision.persist.requisition.Requisition; import org.opennms.netmgt.provision.persist.requisition.RequisitionInterface; import org.opennms.netmgt.provision.persist.requisition.RequisitionNode; -import org.opennms.smoketest.containers.OpenNMSContainer; import org.opennms.smoketest.stacks.OpenNMSStack; import org.opennms.smoketest.junit.MinionTests; import org.opennms.smoketest.stacks.NetworkProtocol; @@ -111,7 +110,7 @@ public static OnmsNode addRequisition(OpenNMSStack stack, boolean isMinion, Date Requisition requisition = new Requisition("telemetry"); List interfaces = new ArrayList<>(); RequisitionInterface requisitionInterface = new RequisitionInterface(); - requisitionInterface.setIpAddr(OpenNMSContainer.ALIAS); + requisitionInterface.setIpAddr("192.168.0.1"); requisitionInterface.setManaged(true); requisitionInterface.setSnmpPrimary(PrimaryType.PRIMARY); interfaces.add(requisitionInterface); From cb8a1f861db0e361a0d7f33c8193022a4b737987 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Fri, 20 Mar 2026 11:11:19 -0400 Subject: [PATCH 25/41] add JTI and NXOS listeners --- ...rg.opennms.features.telemetry.listeners-udp-50001-jti.cfg | 5 +++++ ...g.opennms.features.telemetry.listeners-udp-50002-nxos.cfg | 5 +++++ 2 files changed, 10 insertions(+) create mode 100644 opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-udp-50001-jti.cfg create mode 100644 opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-udp-50002-nxos.cfg diff --git a/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-udp-50001-jti.cfg b/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-udp-50001-jti.cfg new file mode 100644 index 000000000000..a17e3f1e3895 --- /dev/null +++ b/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-udp-50001-jti.cfg @@ -0,0 +1,5 @@ +name = JTI-Listener +class-name = org.opennms.netmgt.telemetry.listeners.UdpListener +parameters.port = ${env:JTI_PORT:-50001} +parsers.0.name = JTI +parsers.0.class-name = org.opennms.netmgt.telemetry.protocols.common.parser.ForwardParser diff --git a/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-udp-50002-nxos.cfg b/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-udp-50002-nxos.cfg new file mode 100644 index 000000000000..9d19bd2b7b0b --- /dev/null +++ b/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-udp-50002-nxos.cfg @@ -0,0 +1,5 @@ +name = NXOS-Listener +class-name = org.opennms.netmgt.telemetry.listeners.UdpListener +parameters.port = ${env:NXOS_PORT:-50002} +parsers.0.name = NXOS +parsers.0.class-name = org.opennms.netmgt.telemetry.protocols.common.parser.ForwardParser From d6b8c9d918c06c00e7adc8bef8408b2b7d509627 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Fri, 20 Mar 2026 15:14:30 -0400 Subject: [PATCH 26/41] clean up, using flags for printKarafResolutionDiagnostics and printStartupDiagnostics --- .../minion/container-fs/entrypoint.sh | 19 +++++++++++-------- .../smoketest/containers/MinionContainer.java | 2 -- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/opennms-container/minion/container-fs/entrypoint.sh b/opennms-container/minion/container-fs/entrypoint.sh index 868feebdc771..3112369531fd 100755 --- a/opennms-container/minion/container-fs/entrypoint.sh +++ b/opennms-container/minion/container-fs/entrypoint.sh @@ -200,11 +200,11 @@ initConfig() { chmod 600 "${MINION_HOME}/.ssh/id_rsa" # Expose Karaf Shell - sed -i "/^sshHost/s/=.*/= 0.0.0.0/" ${MINION_HOME}/etc/org.apache.karaf.shell.cfg + # sed -i "/^sshHost/s/=.*/= 0.0.0.0/" ${MINION_HOME}/etc/org.apache.karaf.shell.cfg # Expose the RMI registry and server - sed -i "/^rmiRegistryHost/s/=.*/= 0.0.0.0/" ${MINION_HOME}/etc/org.apache.karaf.management.cfg - sed -i "/^rmiServerHost/s/=.*/= 0.0.0.0/" ${MINION_HOME}/etc/org.apache.karaf.management.cfg + # sed -i "/^rmiRegistryHost/s/=.*/= 0.0.0.0/" ${MINION_HOME}/etc/org.apache.karaf.management.cfg + # sed -i "/^rmiServerHost/s/=.*/= 0.0.0.0/" ${MINION_HOME}/etc/org.apache.karaf.management.cfg # Preserve env-based placeholders in cfg files (for example ${env:...}). @@ -333,8 +333,8 @@ validateFeatureBootComposition() { ;; esac - [[ "${JAEGER_ENABLED:-false}" == "true" ]] && require_boot_file "jaeger.boot" || true - [[ "${DOMINION_SCV_ENABLED:-false}" == "true" ]] && require_boot_file "dominion-scv.boot" || true + [[ "${JAEGER_ENABLED:-false}" == "true" ]] && require_boot_file "jaeger.boot" || echo "[Features][INFO] Jaeger boot file not required because JAEGER_ENABLED=${JAEGER_ENABLED:-false}." + [[ "${DOMINION_SCV_ENABLED:-false}" == "true" ]] && require_boot_file "dominion-scv.boot" || echo "[Features][INFO] Dominion SCV boot file not required because DOMINION_SCV_ENABLED=${DOMINION_SCV_ENABLED:-false}." } printFeatureBootInventory @@ -368,7 +368,6 @@ start() { # Order of precedence is (later overwrites former): # 1. Config set via environment variable -# 2. Config set via overlayed keystore file # 3. Config set via direct file overlay configure() { initConfig @@ -384,8 +383,12 @@ configure() { done < "$MINION_PROCESS_ENV_CFG" export JAVA_OPTS="$CUSTOM_JAVA_OPTS $JAVA_OPTS" fi - printStartupDiagnostics - printKarafResolutionDiagnostics + if [[ ${MINION_DEBUG_STARTUP_DIAGNOSTICS:-false} == "true" ]]; then + printStartupDiagnostics + fi + if [[ "${MINION_DEBUG_KARAF_RESOLUTION_DIAGNOSTICS:-false}" == "true" ]]; then + printKarafResolutionDiagnostics + fi validateFeatureBootComposition if [[ -f "$MINION_SERVER_CERTS_CFG" ]]; then # cacerts is a symlink to a file, so *do not* put /. on the target diff --git a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java index 485a51c46912..6795f8eaca94 100644 --- a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java +++ b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java @@ -189,8 +189,6 @@ private void writeOverlay(Path home, MinionProfile profile) throws IOException { // Allow other users to read the folder OverlayUtils.setOverlayPermissions(home); - - // Copy the files from the profile *first* // If this test class writes something, we expect it to be there OverlayUtils.copyFiles(profile.getFiles(), home); From 5e1419f292b6ec6cfb007b7c87423f1326217042 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Fri, 20 Mar 2026 17:01:09 -0400 Subject: [PATCH 27/41] a simple test --- opennms-container/minion/container-fs/entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opennms-container/minion/container-fs/entrypoint.sh b/opennms-container/minion/container-fs/entrypoint.sh index 3112369531fd..feeb9ed07a1a 100755 --- a/opennms-container/minion/container-fs/entrypoint.sh +++ b/opennms-container/minion/container-fs/entrypoint.sh @@ -200,7 +200,7 @@ initConfig() { chmod 600 "${MINION_HOME}/.ssh/id_rsa" # Expose Karaf Shell - # sed -i "/^sshHost/s/=.*/= 0.0.0.0/" ${MINION_HOME}/etc/org.apache.karaf.shell.cfg + sed -i "/^sshHost/s/=.*/= 0.0.0.0/" ${MINION_HOME}/etc/org.apache.karaf.shell.cfg # Expose the RMI registry and server # sed -i "/^rmiRegistryHost/s/=.*/= 0.0.0.0/" ${MINION_HOME}/etc/org.apache.karaf.management.cfg From 57d3d3d9d6b7ef8ae242cf272a92e02ddd9d991d Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Mon, 23 Mar 2026 09:27:42 -0400 Subject: [PATCH 28/41] expose the karaf shell by default --- opennms-container/minion/container-fs/entrypoint.sh | 2 +- .../minion/container-fs/etc/org.apache.karaf.shell.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/opennms-container/minion/container-fs/entrypoint.sh b/opennms-container/minion/container-fs/entrypoint.sh index feeb9ed07a1a..3112369531fd 100755 --- a/opennms-container/minion/container-fs/entrypoint.sh +++ b/opennms-container/minion/container-fs/entrypoint.sh @@ -200,7 +200,7 @@ initConfig() { chmod 600 "${MINION_HOME}/.ssh/id_rsa" # Expose Karaf Shell - sed -i "/^sshHost/s/=.*/= 0.0.0.0/" ${MINION_HOME}/etc/org.apache.karaf.shell.cfg + # sed -i "/^sshHost/s/=.*/= 0.0.0.0/" ${MINION_HOME}/etc/org.apache.karaf.shell.cfg # Expose the RMI registry and server # sed -i "/^rmiRegistryHost/s/=.*/= 0.0.0.0/" ${MINION_HOME}/etc/org.apache.karaf.management.cfg diff --git a/opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg b/opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg index def80e928982..3872bbcb628e 100644 --- a/opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg +++ b/opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg @@ -1,5 +1,5 @@ sshPort=${env:SSH_PORT:-8201} -sshHost=${env:SSH_HOST:-127.0.0.1} +sshHost=${env:SSH_HOST:-0.0.0.0} hostKeyFormat=PEM sshRealm=karaf hostKey=${karaf.etc}/host.key From d4c81913580ddc76b9d0bedf7b7b9004d73b4045 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Mon, 23 Mar 2026 11:09:36 -0400 Subject: [PATCH 29/41] clean up --- .../minion/container-fs/entrypoint.sh | 21 +++++++------------ .../instance-id.properties | 1 - 2 files changed, 8 insertions(+), 14 deletions(-) delete mode 100644 opennms-container/minion/opennms.properties.d/instance-id.properties diff --git a/opennms-container/minion/container-fs/entrypoint.sh b/opennms-container/minion/container-fs/entrypoint.sh index 3112369531fd..cd8603c80f30 100755 --- a/opennms-container/minion/container-fs/entrypoint.sh +++ b/opennms-container/minion/container-fs/entrypoint.sh @@ -199,15 +199,6 @@ initConfig() { echo "_g_\\:admingroup = group,admin,manager,viewer,systembundles,ssh" >> ${MINION_HOME}/etc/keys.properties && \ chmod 600 "${MINION_HOME}/.ssh/id_rsa" - # Expose Karaf Shell - # sed -i "/^sshHost/s/=.*/= 0.0.0.0/" ${MINION_HOME}/etc/org.apache.karaf.shell.cfg - - # Expose the RMI registry and server - # sed -i "/^rmiRegistryHost/s/=.*/= 0.0.0.0/" ${MINION_HOME}/etc/org.apache.karaf.management.cfg - # sed -i "/^rmiServerHost/s/=.*/= 0.0.0.0/" ${MINION_HOME}/etc/org.apache.karaf.management.cfg - - # Preserve env-based placeholders in cfg files (for example ${env:...}). - parseEnvironment applyFeatureBootTemplates @@ -290,10 +281,14 @@ printKarafResolutionDiagnostics() { fi echo "[Karaf] org.ops4j.pax.url.mvn.cfg:" - if [[ -f "${MINION_HOME}/etc/org.ops4j.pax.url.mvn.cfg" ]]; then - sed -n '1,200p' "${MINION_HOME}/etc/org.ops4j.pax.url.mvn.cfg" | sed 's/^/ /' - else - echo " (missing)" + if [[ "${MINION_DEBUG_KARAF_RESOLUTION_DIAGNOSTICS:-false}" == "true" ]]; then + if [[ -f "${MINION_HOME}/etc/org.ops4j.pax.url.mvn.cfg" ]]; then + sed -n '1,200p' "${MINION_HOME}/etc/org.ops4j.pax.url.mvn.cfg" | sed 's/^/ /' + else + echo " (missing)" + fi + else + echo " (redacted; set MINION_DEBUG_KARAF_RESOLUTION_DIAGNOSTICS=true to print contents)" fi } diff --git a/opennms-container/minion/opennms.properties.d/instance-id.properties b/opennms-container/minion/opennms.properties.d/instance-id.properties deleted file mode 100644 index f35fba9129e8..000000000000 --- a/opennms-container/minion/opennms.properties.d/instance-id.properties +++ /dev/null @@ -1 +0,0 @@ -org.opennms.instance.id=${env:OPENNMS_INSTANCE_ID:-OpenNMS} From 41efa7a612c14685c897ccf9b858eabeacdcca61 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Mon, 23 Mar 2026 12:59:45 -0400 Subject: [PATCH 30/41] fix the order of precedence --- opennms-container/minion/container-fs/entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opennms-container/minion/container-fs/entrypoint.sh b/opennms-container/minion/container-fs/entrypoint.sh index cd8603c80f30..ffd180a3006f 100755 --- a/opennms-container/minion/container-fs/entrypoint.sh +++ b/opennms-container/minion/container-fs/entrypoint.sh @@ -363,7 +363,7 @@ start() { # Order of precedence is (later overwrites former): # 1. Config set via environment variable -# 3. Config set via direct file overlay +# 2. Config set via direct file overlay configure() { initConfig applyOpennmsPropertiesD From c618541099299ea7d1561defcb59bc8f4c91d0cd Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Tue, 24 Mar 2026 12:51:32 -0400 Subject: [PATCH 31/41] align the environment variables with confd --- .../minion/container-fs/entrypoint.sh | 6 +++--- .../etc/org.apache.karaf.management.cfg | 8 ++++---- .../etc/org.apache.karaf.shell.cfg | 4 ++-- .../etc/org.opennms.core.ipc.grpc.client.cfg | 4 ++-- .../etc/org.opennms.core.ipc.kafka.cfg | 2 +- .../etc/org.opennms.core.ipc.rpc.kafka.cfg | 4 ++-- .../etc/org.opennms.core.ipc.sink.kafka.cfg | 4 ++-- .../etc/org.opennms.core.ipc.twin.kafka.cfg | 4 ++-- ....telemetry.listeners-single-port-flows.cfg | 19 ++++++++++--------- .../etc/org.opennms.netmgt.syslog.cfg | 4 ++-- .../etc/org.opennms.netmgt.trapd.cfg | 4 ++-- .../container-fs/etc/org.ops4j.pax.web.cfg | 4 ++-- .../smoketest/containers/MinionContainer.java | 6 +++--- 13 files changed, 37 insertions(+), 36 deletions(-) diff --git a/opennms-container/minion/container-fs/entrypoint.sh b/opennms-container/minion/container-fs/entrypoint.sh index ffd180a3006f..b0d592087406 100755 --- a/opennms-container/minion/container-fs/entrypoint.sh +++ b/opennms-container/minion/container-fs/entrypoint.sh @@ -242,9 +242,9 @@ printStartupDiagnostics() { echo " MINION_REPAIR_FEATURES_BOOT=${MINION_REPAIR_FEATURES_BOOT:-true}" echo " JAEGER_ENABLED=${JAEGER_ENABLED:-false}" echo " DOMINION_SCV_ENABLED=${DOMINION_SCV_ENABLED:-false}" - echo " GRPC_CLIENT_HOST=${GRPC_CLIENT_HOST:-}" - echo " GRPC_CLIENT_PORT=${GRPC_CLIENT_PORT:-}" - echo " KAFKA_BOOTSTRAP_SERVERS=${KAFKA_BOOTSTRAP_SERVERS:-}" + echo " GRPC_CLIENT_HOST=${IPC_GRPC_HOST:-}" + echo " GRPC_CLIENT_PORT=${IPC_GRPC_PORT:-}" + echo " KAFKA_BOOTSTRAP_SERVERS=${KAFKA_IPC_BOOTSTRAP_SERVERS:-}" print_cfg() { local cfg="$1" diff --git a/opennms-container/minion/container-fs/etc/org.apache.karaf.management.cfg b/opennms-container/minion/container-fs/etc/org.apache.karaf.management.cfg index 81e4f82de510..4cb8f83e5706 100644 --- a/opennms-container/minion/container-fs/etc/org.apache.karaf.management.cfg +++ b/opennms-container/minion/container-fs/etc/org.apache.karaf.management.cfg @@ -4,22 +4,22 @@ # # Port number for RMI registry connection # -rmiRegistryPort = 1299 +rmiRegistryPort = ${env:KARAF_MGMT_RMI_REGISTRY_PORT:-1299} # # Host for RMI registry # -rmiRegistryHost = ${env:RMI_REGISTRY_HOST:-0.0.0.0} +rmiRegistryHost = ${env:KARAF_MGMT_RMI_REGISTRY_HOST:-0.0.0.0} # # Port number for RMI server connection # -rmiServerPort = 45444 +rmiServerPort = ${env:KARAF_MGMT_RMI_SERVER_PORT:-45444} # # Host for RMI server # -rmiServerHost = ${env:RMI_SERVER_HOST:-0.0.0.0} +rmiServerHost = ${env:KARAF_MGMT_RMI_SERVER_HOST:-0.0.0.0} # # Name of the JAAS realm used for authentication diff --git a/opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg b/opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg index 3872bbcb628e..b64b053e8768 100644 --- a/opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg +++ b/opennms-container/minion/container-fs/etc/org.apache.karaf.shell.cfg @@ -1,5 +1,5 @@ -sshPort=${env:SSH_PORT:-8201} -sshHost=${env:SSH_HOST:-0.0.0.0} +sshPort=${env:KARAF_SSH_PORT:-8201} +sshHost=${env:KARAF_SSH_HOST:-0.0.0.0} hostKeyFormat=PEM sshRealm=karaf hostKey=${karaf.etc}/host.key diff --git a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.grpc.client.cfg b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.grpc.client.cfg index 2caa3da44bea..abef5035c011 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.grpc.client.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.grpc.client.cfg @@ -1,2 +1,2 @@ -host = ${env:GRPC_CLIENT_HOST:-horizon} -port = ${env:GRPC_CLIENT_PORT:-8990} +host = ${env:IPC_GRPC_HOST:-horizon} +port = ${env:IPC_GRPC_PORT:-8990} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.kafka.cfg b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.kafka.cfg index 2d97677d76b4..50d019d5fd18 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.kafka.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.kafka.cfg @@ -1 +1 @@ -bootstrap.servers=${env:KAFKA_BOOTSTRAP_SERVERS:-kafka:29092} +bootstrap.servers=${env:KAFKA_IPC_BOOTSTRAP_SERVERS:-kafka:29092} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.rpc.kafka.cfg b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.rpc.kafka.cfg index 0ef300141ed4..8eb700868612 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.rpc.kafka.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.rpc.kafka.cfg @@ -1,2 +1,2 @@ -acks = ${env:KAFKA_ACKS:-1} -bootstrap.servers = ${env:KAFKA_BOOTSTRAP_SERVERS:-kafka:29092} +acks = ${env:KAFKA_RPC_ACKS:-1} +bootstrap.servers = ${env:KAFKA_RPC_BOOTSTRAP_SERVERS:-kafka:29092} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg index 0ef300141ed4..17ffac29d23f 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg @@ -1,2 +1,2 @@ -acks = ${env:KAFKA_ACKS:-1} -bootstrap.servers = ${env:KAFKA_BOOTSTRAP_SERVERS:-kafka:29092} +acks = ${env:KAFKA_SINK_ACKS:-1} +bootstrap.servers = ${env:KAFKA_SINK_BOOTSTRAP_SERVERS:-kafka:29092} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.twin.kafka.cfg b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.twin.kafka.cfg index 0ef300141ed4..6c8b550f52b6 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.twin.kafka.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.core.ipc.twin.kafka.cfg @@ -1,2 +1,2 @@ -acks = ${env:KAFKA_ACKS:-1} -bootstrap.servers = ${env:KAFKA_BOOTSTRAP_SERVERS:-kafka:29092} +acks = ${env:KAFKA_TWIN_ACKS:-1} +bootstrap.servers = ${env:KAFKA_TWIN_BOOTSTRAP_SERVERS:-kafka:29092} diff --git a/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg b/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg index 0d6335a78d59..a0c94053608d 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg @@ -1,14 +1,15 @@ name = Single-Port-Flow-Listener class-name = org.opennms.netmgt.telemetry.listeners.UdpListener parameters.port = ${env:FLOWS_PORT:-50000} -parsers.1.name = Netflow-5 -parsers.1.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.Netflow5UdpParser +parsers.0.name = Netflow-5 +parsers.0.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.Netflow5UdpParser +parsers.0.parameters.maxClockSkew = 300 +parsers.1.name = Netflow-9 +parsers.1.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.Netflow9UdpParser parsers.1.parameters.maxClockSkew = 300 -parsers.2.name = Netflow-9 -parsers.2.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.Netflow9UdpParser +parsers.2.name = IPFIX +parsers.2.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.IpfixUdpParser parsers.2.parameters.maxClockSkew = 300 -parsers.3.name = IPFIX -parsers.3.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.IpfixUdpParser -parsers.3.parameters.maxClockSkew = 300 -parsers.4.name = SFlow -parsers.4.class-name = org.opennms.netmgt.telemetry.protocols.sflow.parser.SFlowUdpParser +parsers.3.name = SFlow +parsers.3.class-name = org.opennms.netmgt.telemetry.protocols.sflow.parser.SFlowUdpParser +parsers.3.parameters.maxClockSkew = 300 \ No newline at end of file diff --git a/opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg b/opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg index fff158d613c7..30a31c157f0a 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg @@ -1,3 +1,3 @@ -syslog.listen.interface = ${env:SYSLOG_INTERFACE:-0.0.0.0} -syslog.listen.port = ${env:SYSLOG_PORT:-1514} +syslog.listen.interface = ${env:SYSLOG_LISTEN_INTERFACE:-0.0.0.0} +syslog.listen.port = ${env:SYSLOG_LISTEN_PORT:-1514} syslog.useAddressFromVarbind = true \ No newline at end of file diff --git a/opennms-container/minion/container-fs/etc/org.opennms.netmgt.trapd.cfg b/opennms-container/minion/container-fs/etc/org.opennms.netmgt.trapd.cfg index e02ac3715ca0..64498e5e1f62 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.netmgt.trapd.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.netmgt.trapd.cfg @@ -1,3 +1,3 @@ -trapd.listen.interface = ${env:TRAPD_INTERFACE:-0.0.0.0} -trapd.listen.port = ${env:TRAPD_PORT:-1162} +trapd.listen.interface = ${env:MINION_TRAPD_LISTEN_INTERFACE:-0.0.0.0} +trapd.listen.port = ${env:MINION_TRAPD_LISTEN_PORT:-1162} trapd.useAddressFromVarbind = true diff --git a/opennms-container/minion/container-fs/etc/org.ops4j.pax.web.cfg b/opennms-container/minion/container-fs/etc/org.ops4j.pax.web.cfg index 8deb6a2d7530..f4ed213a4715 100644 --- a/opennms-container/minion/container-fs/etc/org.ops4j.pax.web.cfg +++ b/opennms-container/minion/container-fs/etc/org.ops4j.pax.web.cfg @@ -1,4 +1,4 @@ -org.osgi.service.http.port=8181 -org.ops4j.pax.web.listening.addresses=0.0.0.0 +org.osgi.service.http.port=${env:JETTY_PORT:-8181} +org.ops4j.pax.web.listening.addresses=${env:JETTY_HOST:-0.0.0.0} javax.servlet.context.tempdir=${karaf.data}/pax-web-jsp org.ops4j.pax.web.config.file=${karaf.etc}/jetty.xml diff --git a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java index 6795f8eaca94..64983bb99f9f 100644 --- a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java +++ b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java @@ -153,11 +153,11 @@ public MinionContainer(final StackModel model, final MinionProfile profile) { if (IpcStrategy.KAFKA.equals(model.getIpcStrategy())) { withEnv("MINION_IPC", "kafka"); - withEnv("KAFKA_BOOTSTRAP_SERVERS", OpenNMSContainer.KAFKA_ALIAS + ":9092"); + withEnv("KAFKA_IPC_BOOTSTRAP_SERVERS", OpenNMSContainer.KAFKA_ALIAS + ":9092"); } else if (IpcStrategy.GRPC.equals(model.getIpcStrategy())) { withEnv("MINION_IPC", "grpc"); - withEnv("GRPC_CLIENT_HOST", OpenNMSContainer.ALIAS); - withEnv("GRPC_CLIENT_PORT", "8990"); + withEnv("IPC_GRPC_HOST", OpenNMSContainer.ALIAS); + withEnv("IPC_GRPC_PORT", "8990"); } else if (IpcStrategy.JMS.equals(model.getIpcStrategy())) { withEnv("MINION_IPC", "jms"); } From 1db45dc1c16debade1af645244fe0aff7cd48630 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Tue, 24 Mar 2026 14:18:57 -0400 Subject: [PATCH 32/41] add missing Bootstraps env variables. --- .../java/org/opennms/smoketest/containers/MinionContainer.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java index 64983bb99f9f..8c0bac584a0b 100644 --- a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java +++ b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java @@ -154,6 +154,9 @@ public MinionContainer(final StackModel model, final MinionProfile profile) { if (IpcStrategy.KAFKA.equals(model.getIpcStrategy())) { withEnv("MINION_IPC", "kafka"); withEnv("KAFKA_IPC_BOOTSTRAP_SERVERS", OpenNMSContainer.KAFKA_ALIAS + ":9092"); + withEnv("KAFKA_RPC_BOOTSTRAP_SERVERS", OpenNMSContainer.KAFKA_ALIAS + ":9092"); + withEnv("KAFKA_SINK_BOOTSTRAP_SERVERS", OpenNMSContainer.KAFKA_ALIAS + ":9092"); + withEnv("KAFKA_TWIN_BOOTSTRAP_SERVERS", OpenNMSContainer.KAFKA_ALIAS + ":9092"); } else if (IpcStrategy.GRPC.equals(model.getIpcStrategy())) { withEnv("MINION_IPC", "grpc"); withEnv("IPC_GRPC_HOST", OpenNMSContainer.ALIAS); From 1bb0ae7f8ab509bd734fd1832ae3f05bf6c36585 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Tue, 24 Mar 2026 16:14:55 -0400 Subject: [PATCH 33/41] revert back the parsers index --- ....telemetry.listeners-single-port-flows.cfg | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg b/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg index a0c94053608d..e15d6ee15c56 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg @@ -1,15 +1,15 @@ name = Single-Port-Flow-Listener class-name = org.opennms.netmgt.telemetry.listeners.UdpListener parameters.port = ${env:FLOWS_PORT:-50000} -parsers.0.name = Netflow-5 -parsers.0.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.Netflow5UdpParser -parsers.0.parameters.maxClockSkew = 300 -parsers.1.name = Netflow-9 -parsers.1.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.Netflow9UdpParser +parsers.1.name = Netflow-5 +parsers.1.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.Netflow5UdpParser parsers.1.parameters.maxClockSkew = 300 -parsers.2.name = IPFIX -parsers.2.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.IpfixUdpParser +parsers.2.name = Netflow-9 +parsers.2.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.Netflow9UdpParser parsers.2.parameters.maxClockSkew = 300 -parsers.3.name = SFlow -parsers.3.class-name = org.opennms.netmgt.telemetry.protocols.sflow.parser.SFlowUdpParser -parsers.3.parameters.maxClockSkew = 300 \ No newline at end of file +parsers.3.name = IPFIX +parsers.3.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.IpfixUdpParser +parsers.3.parameters.maxClockSkew = 300 +parsers.4.name = SFlow +parsers.4.class-name = org.opennms.netmgt.telemetry.protocols.sflow.parser.SFlowUdpParser +parsers.4.parameters.maxClockSkew = 300 \ No newline at end of file From bf5d30a91bbe018bca1bde0c02d67498c989084b Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Tue, 24 Mar 2026 16:17:42 -0400 Subject: [PATCH 34/41] remove the maxClockSkew for SFlowUdpParser --- ....opennms.features.telemetry.listeners-single-port-flows.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg b/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg index e15d6ee15c56..dec0763d87c0 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg @@ -11,5 +11,4 @@ parsers.3.name = IPFIX parsers.3.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.IpfixUdpParser parsers.3.parameters.maxClockSkew = 300 parsers.4.name = SFlow -parsers.4.class-name = org.opennms.netmgt.telemetry.protocols.sflow.parser.SFlowUdpParser -parsers.4.parameters.maxClockSkew = 300 \ No newline at end of file +parsers.4.class-name = org.opennms.netmgt.telemetry.protocols.sflow.parser.SFlowUdpParser \ No newline at end of file From ce51bb25bbcb63dc0b1f3ea5af61b9218c89c35b Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Wed, 25 Mar 2026 09:58:53 -0400 Subject: [PATCH 35/41] Add a check for compression, extend entrypoint to support rpc,twin and sink --- opennms-container/minion/container-fs/entrypoint.sh | 13 +++++++++++++ .../smoketest/containers/MinionContainer.java | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/opennms-container/minion/container-fs/entrypoint.sh b/opennms-container/minion/container-fs/entrypoint.sh index b0d592087406..728b78ed49df 100755 --- a/opennms-container/minion/container-fs/entrypoint.sh +++ b/opennms-container/minion/container-fs/entrypoint.sh @@ -181,6 +181,19 @@ function parseEnvironment() { ipc_name=$(echo "$env_var" | cut -d_ -f3- | tr '[:upper:]' '[:lower:]' | tr _ .) updateConfig "$ipc_name" "${!env_var}" "${MINION_HOME}/etc/org.opennms.core.ipc.kafka.cfg" fi + if [[ $env_var =~ ^KAFKA_RPC_ ]]; then + ipc_name=$(echo "$env_var" | cut -d_ -f3- | tr '[:upper:]' '[:lower:]' | tr _ .) + updateConfig "$ipc_name" "${!env_var}" "${MINION_HOME}/etc/org.opennms.core.ipc.rpc.kafka.cfg" + fi + if [[ $env_var =~ ^KAFKA_SINK_ ]]; then + ipc_name=$(echo "$env_var" | cut -d_ -f3- | tr '[:upper:]' '[:lower:]' | tr _ .) + updateConfig "$ipc_name" "${!env_var}" "${MINION_HOME}/etc/org.opennms.core.ipc.sink.kafka.cfg" + fi + if [[ $env_var =~ ^KAFKA_TWIN_ ]]; then + ipc_name=$(echo "$env_var" | cut -d_ -f3- | tr '[:upper:]' '[:lower:]' | tr _ .) + updateConfig "$ipc_name" "${!env_var}" "${MINION_HOME}/etc/org.opennms.core.ipc.twin.kafka.cfg" + fi + done } diff --git a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java index 8c0bac584a0b..eb84ec68080f 100644 --- a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java +++ b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java @@ -157,6 +157,11 @@ public MinionContainer(final StackModel model, final MinionProfile profile) { withEnv("KAFKA_RPC_BOOTSTRAP_SERVERS", OpenNMSContainer.KAFKA_ALIAS + ":9092"); withEnv("KAFKA_SINK_BOOTSTRAP_SERVERS", OpenNMSContainer.KAFKA_ALIAS + ":9092"); withEnv("KAFKA_TWIN_BOOTSTRAP_SERVERS", OpenNMSContainer.KAFKA_ALIAS + ":9092"); + if (model.getKafkaCompressionType() != null) { + withEnv("KAFKA_IPC_COMPRESSION_TYPE", model.getKafkaCompressionType().getCodec()); + withEnv("KAFKA_SINK_COMPRESSION_TYPE", model.getKafkaCompressionType().getCodec()); + withEnv("KAFKA_TWIN_COMPRESSION_TYPE", model.getKafkaCompressionType().getCodec()); + } } else if (IpcStrategy.GRPC.equals(model.getIpcStrategy())) { withEnv("MINION_IPC", "grpc"); withEnv("IPC_GRPC_HOST", OpenNMSContainer.ALIAS); From c3f38656658a6743b896e0153b77878c57c74c8a Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Wed, 25 Mar 2026 10:26:19 -0400 Subject: [PATCH 36/41] change the parser --- ...s.telemetry.listeners-single-port-flows.cfg | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg b/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg index dec0763d87c0..dffc8de986e9 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.features.telemetry.listeners-single-port-flows.cfg @@ -1,14 +1,14 @@ name = Single-Port-Flow-Listener class-name = org.opennms.netmgt.telemetry.listeners.UdpListener parameters.port = ${env:FLOWS_PORT:-50000} -parsers.1.name = Netflow-5 -parsers.1.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.Netflow5UdpParser +parsers.0.name = Netflow-5 +parsers.0.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.Netflow5UdpParser +parsers.0.parameters.maxClockSkew = 300 +parsers.1.name = Netflow-9 +parsers.1.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.Netflow9UdpParser parsers.1.parameters.maxClockSkew = 300 -parsers.2.name = Netflow-9 -parsers.2.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.Netflow9UdpParser +parsers.2.name = IPFIX +parsers.2.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.IpfixUdpParser parsers.2.parameters.maxClockSkew = 300 -parsers.3.name = IPFIX -parsers.3.class-name = org.opennms.netmgt.telemetry.protocols.netflow.parser.IpfixUdpParser -parsers.3.parameters.maxClockSkew = 300 -parsers.4.name = SFlow -parsers.4.class-name = org.opennms.netmgt.telemetry.protocols.sflow.parser.SFlowUdpParser \ No newline at end of file +parsers.3.name = SFlow +parsers.3.class-name = org.opennms.netmgt.telemetry.protocols.sflow.parser.SFlowUdpParser \ No newline at end of file From 33ebebd3eb533353e4612a2c6e886fbf1ee119c5 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Wed, 25 Mar 2026 10:37:43 -0400 Subject: [PATCH 37/41] oops getKafkaCompressionType should be getKafkaCompressionStrategy --- .../org/opennms/smoketest/containers/MinionContainer.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java index eb84ec68080f..13f3afb03bb7 100644 --- a/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java +++ b/smoke-test/src/main/java/org/opennms/smoketest/containers/MinionContainer.java @@ -157,10 +157,10 @@ public MinionContainer(final StackModel model, final MinionProfile profile) { withEnv("KAFKA_RPC_BOOTSTRAP_SERVERS", OpenNMSContainer.KAFKA_ALIAS + ":9092"); withEnv("KAFKA_SINK_BOOTSTRAP_SERVERS", OpenNMSContainer.KAFKA_ALIAS + ":9092"); withEnv("KAFKA_TWIN_BOOTSTRAP_SERVERS", OpenNMSContainer.KAFKA_ALIAS + ":9092"); - if (model.getKafkaCompressionType() != null) { - withEnv("KAFKA_IPC_COMPRESSION_TYPE", model.getKafkaCompressionType().getCodec()); - withEnv("KAFKA_SINK_COMPRESSION_TYPE", model.getKafkaCompressionType().getCodec()); - withEnv("KAFKA_TWIN_COMPRESSION_TYPE", model.getKafkaCompressionType().getCodec()); + if (model.getKafkaCompressionStrategy() != null) { + withEnv("KAFKA_IPC_COMPRESSION_TYPE", model.getKafkaCompressionStrategy().getCodec()); + withEnv("KAFKA_SINK_COMPRESSION_TYPE", model.getKafkaCompressionStrategy().getCodec()); + withEnv("KAFKA_TWIN_COMPRESSION_TYPE", model.getKafkaCompressionStrategy().getCodec()); } } else if (IpcStrategy.GRPC.equals(model.getIpcStrategy())) { withEnv("MINION_IPC", "grpc"); From 8fbb543eddd2055a4f7498100345f6523aedb461 Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Wed, 25 Mar 2026 14:56:06 -0400 Subject: [PATCH 38/41] address few feedbacks --- opennms-container/minion/container-fs/entrypoint.sh | 13 +++++++------ .../container-fs/etc/org.opennms.netmgt.syslog.cfg | 4 ++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/opennms-container/minion/container-fs/entrypoint.sh b/opennms-container/minion/container-fs/entrypoint.sh index 728b78ed49df..5a4524ce7806 100755 --- a/opennms-container/minion/container-fs/entrypoint.sh +++ b/opennms-container/minion/container-fs/entrypoint.sh @@ -8,7 +8,8 @@ set -eE -trap 'rc=$?; echo "[Startup][ERROR] entrypoint failed at line ${LINENO}: ${BASH_COMMAND} (exit=${rc})"; exit ${rc}' ERR +trap 'rc=$?; echo "[Startup][ERROR] entrypoint failed at line ${LINENO} (exit=${rc})"; exit ${rc}' ERR + umask 002 export MINION_HOME="/opt/minion" @@ -96,7 +97,7 @@ function updateConfig() { value=$2 file=$3 - # Handling exceptions + # Handling exceptions for specific keys [ "$key" == "class.name" ] && key="class-name" [ "$key" == "max.packet.size" ] && key="maxPacketSize" [ "$key" == "template.timeout" ] && key="templateTimeout" @@ -105,8 +106,8 @@ function updateConfig() { echo "[Configuring] '$key' in '$file'" # If config exists in file, replace it. Otherwise, append to file. - if grep -E -q "^#?$key=" "$file"; then - sed -r -i "s@^#?$key=.*@$key=$value@g" "$file" #note that no config values may contain an '@' char + if grep -E -q "^#?\s*$key\s*=" "$file"; then + sed -r -i "s@^#?\s*$key\s*=.*@$key=$value@g" "$file" #note that no config values may contain an '@' char else echo "$key=$value" >> "$file" fi @@ -157,8 +158,8 @@ function applyFeatureBootTemplates() { esac # Standalone optional features - [[ "${JAEGER_ENABLED:-false}" == "true" ]] && apply_template "jaeger.boot" || true - [[ "${DOMINION_SCV_ENABLED:-false}" == "true" ]] && apply_template "dominion-scv.boot" || true + [[ "${JAEGER_ENABLED:-false}" == "true" ]] && apply_template "jaeger.boot" || echo "[Features] Jaeger boot file not applied because JAEGER_ENABLED=${JAEGER_ENABLED:-false}." + [[ "${DOMINION_SCV_ENABLED:-false}" == "true" ]] && apply_template "dominion-scv.boot" || echo "[Features] Dominion SCV boot file not applied because DOMINION_SCV_ENABLED=${DOMINION_SCV_ENABLED:-false}." } function parseEnvironment() { diff --git a/opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg b/opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg index 30a31c157f0a..8206ef6c1975 100644 --- a/opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg +++ b/opennms-container/minion/container-fs/etc/org.opennms.netmgt.syslog.cfg @@ -1,3 +1,3 @@ -syslog.listen.interface = ${env:SYSLOG_LISTEN_INTERFACE:-0.0.0.0} -syslog.listen.port = ${env:SYSLOG_LISTEN_PORT:-1514} +syslog.listen.interface = ${env:MINION_SYSLOG_LISTEN_INTERFACE:-0.0.0.0} +syslog.listen.port = ${env:MINION_SYSLOG_LISTEN_PORT:-1514} syslog.useAddressFromVarbind = true \ No newline at end of file From 5ddbe5342fa7345adee63559eb826dfc01fb692d Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Wed, 25 Mar 2026 15:54:42 -0400 Subject: [PATCH 39/41] lets remove confd folder ; what could go wrong --- .../conf.d/confd-telemetry-feature.xml.toml | 6 - .../conf.d/custom.system.properties.toml | 6 - .../confd/conf.d/disable-jms.boot.toml | 8 -- .../confd/conf.d/dominion-scv.boot.toml | 7 -- .../container-fs/confd/conf.d/grpc.boot.toml | 7 -- .../confd/conf.d/instance-id.properties.toml | 6 - .../confd/conf.d/jaeger.boot.toml | 8 -- .../confd/conf.d/kafka-ipc.boot.toml | 7 -- .../confd/conf.d/kafka-rpc.boot.toml | 7 -- .../confd/conf.d/kafka-sink.boot.toml | 7 -- .../confd/conf.d/kafka-twin.boot.toml | 7 -- .../org.apache.karaf.management.cfg.toml | 6 - .../conf.d/org.apache.karaf.shell.cfg.toml | 6 - .../org.opennms.core.ipc.grpc.client.cfg.toml | 7 -- .../org.opennms.core.ipc.kafka.cfg.toml | 7 -- .../org.opennms.core.ipc.rpc.kafka.cfg.toml | 7 -- .../org.opennms.core.ipc.sink.kafka.cfg.toml | 7 -- ...org.opennms.core.ipc.sink.offheap.cfg.toml | 7 -- .../org.opennms.core.ipc.twin.kafka.cfg.toml | 7 -- ...nms.features.minion.dominion.grpc.cfg.toml | 7 -- .../org.opennms.minion.controller.cfg.toml | 9 -- .../org.opennms.minion.process-env.toml | 7 -- ...rg.opennms.minion.server-certificates.toml | 7 -- .../conf.d/org.opennms.netmgt.syslog.cfg.toml | 7 -- .../conf.d/org.opennms.netmgt.trapd.cfg.toml | 7 -- .../confd/conf.d/org.ops4j.pax.web.cfg.toml | 6 - .../confd/conf.d/prom-jmx-exporter.toml | 6 - .../minion/container-fs/confd/confd.toml | 4 - .../minion/container-fs/confd/directories | 1 - .../container-fs/confd/scripts/confd_lib.sh | 19 --- .../confd/scripts/remove-if-empty | 6 - .../confd-telemetry-feature.xml.tmpl | 67 ----------- .../templates/custom.system.properties.tmpl | 5 - .../confd/templates/disable-jms.boot.tmpl | 6 - .../confd/templates/dominion-scv.boot.tmpl | 7 -- .../confd/templates/grpc.boot.tmpl | 7 -- .../templates/instance-id.properties.tmpl | 6 - .../confd/templates/jaeger.boot.tmpl | 5 - .../confd/templates/kafka-ipc.boot.tmpl | 7 -- .../confd/templates/kafka-rpc.boot.tmpl | 6 - .../confd/templates/kafka-sink.boot.tmpl | 6 - .../confd/templates/kafka-twin.boot.tmpl | 6 - .../org.apache.karaf.management.cfg.tmpl | 112 ------------------ .../templates/org.apache.karaf.shell.cfg.tmpl | 11 -- .../org.opennms.core.ipc.grpc.client.cfg.tmpl | 5 - .../org.opennms.core.ipc.kafka.cfg.tmpl | 5 - .../org.opennms.core.ipc.rpc.kafka.cfg.tmpl | 5 - .../org.opennms.core.ipc.sink.kafka.cfg.tmpl | 5 - ...org.opennms.core.ipc.sink.offheap.cfg.tmpl | 5 - .../org.opennms.core.ipc.twin.kafka.cfg.tmpl | 5 - ...nms.features.minion.dominion.grpc.cfg.tmpl | 12 -- .../org.opennms.minion.controller.cfg.tmpl | 11 -- .../org.opennms.minion.process-env.tmpl | 14 --- ...rg.opennms.minion.server-certificates.tmpl | 10 -- .../org.opennms.netmgt.syslog.cfg.tmpl | 5 - .../org.opennms.netmgt.trapd.cfg.tmpl | 5 - .../templates/org.ops4j.pax.web.cfg.tmpl | 10 -- .../templates/prom-jmx-exporter.yaml.tmpl | 48 -------- 58 files changed, 612 deletions(-) delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/confd-telemetry-feature.xml.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/custom.system.properties.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/disable-jms.boot.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/dominion-scv.boot.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/grpc.boot.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/instance-id.properties.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/jaeger.boot.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/kafka-ipc.boot.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/kafka-rpc.boot.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/kafka-sink.boot.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/kafka-twin.boot.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/org.apache.karaf.management.cfg.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/org.apache.karaf.shell.cfg.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.grpc.client.cfg.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.kafka.cfg.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.rpc.kafka.cfg.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.sink.kafka.cfg.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.sink.offheap.cfg.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.twin.kafka.cfg.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/org.opennms.features.minion.dominion.grpc.cfg.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/org.opennms.minion.controller.cfg.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/org.opennms.minion.process-env.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/org.opennms.minion.server-certificates.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/org.opennms.netmgt.syslog.cfg.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/org.opennms.netmgt.trapd.cfg.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/org.ops4j.pax.web.cfg.toml delete mode 100644 opennms-container/minion/container-fs/confd/conf.d/prom-jmx-exporter.toml delete mode 100644 opennms-container/minion/container-fs/confd/confd.toml delete mode 100644 opennms-container/minion/container-fs/confd/directories delete mode 100755 opennms-container/minion/container-fs/confd/scripts/confd_lib.sh delete mode 100755 opennms-container/minion/container-fs/confd/scripts/remove-if-empty delete mode 100644 opennms-container/minion/container-fs/confd/templates/confd-telemetry-feature.xml.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/custom.system.properties.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/disable-jms.boot.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/dominion-scv.boot.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/grpc.boot.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/instance-id.properties.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/jaeger.boot.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/kafka-ipc.boot.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/kafka-rpc.boot.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/kafka-sink.boot.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/kafka-twin.boot.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/org.apache.karaf.management.cfg.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/org.apache.karaf.shell.cfg.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.grpc.client.cfg.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.kafka.cfg.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.rpc.kafka.cfg.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.sink.kafka.cfg.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.sink.offheap.cfg.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.twin.kafka.cfg.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/org.opennms.features.minion.dominion.grpc.cfg.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/org.opennms.minion.controller.cfg.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/org.opennms.minion.process-env.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/org.opennms.minion.server-certificates.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/org.opennms.netmgt.syslog.cfg.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/org.opennms.netmgt.trapd.cfg.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/org.ops4j.pax.web.cfg.tmpl delete mode 100644 opennms-container/minion/container-fs/confd/templates/prom-jmx-exporter.yaml.tmpl diff --git a/opennms-container/minion/container-fs/confd/conf.d/confd-telemetry-feature.xml.toml b/opennms-container/minion/container-fs/confd/conf.d/confd-telemetry-feature.xml.toml deleted file mode 100644 index 64a65cbdfba5..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/confd-telemetry-feature.xml.toml +++ /dev/null @@ -1,6 +0,0 @@ -[template] -src = "confd-telemetry-feature.xml.tmpl" -dest = "/opt/minion/deploy/confd-telemetry-feature.xml" -keys = [ - "/telemetry/flows" -] diff --git a/opennms-container/minion/container-fs/confd/conf.d/custom.system.properties.toml b/opennms-container/minion/container-fs/confd/conf.d/custom.system.properties.toml deleted file mode 100644 index d5d5ba0f7746..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/custom.system.properties.toml +++ /dev/null @@ -1,6 +0,0 @@ -[template] -src = "custom.system.properties.tmpl" -dest = "/opt/minion/etc/custom.system.properties" -keys = [ - "/system/properties" -] diff --git a/opennms-container/minion/container-fs/confd/conf.d/disable-jms.boot.toml b/opennms-container/minion/container-fs/confd/conf.d/disable-jms.boot.toml deleted file mode 100644 index f49e92fd5d5f..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/disable-jms.boot.toml +++ /dev/null @@ -1,8 +0,0 @@ -[template] -src = "disable-jms.boot.tmpl" -dest = "/opt/minion/etc/featuresBoot.d/disable-jms.boot" -keys = [ - "/ipc/rpc/kafka", - "/ipc/sink/kafka" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/featuresBoot.d/disable-jms.boot" diff --git a/opennms-container/minion/container-fs/confd/conf.d/dominion-scv.boot.toml b/opennms-container/minion/container-fs/confd/conf.d/dominion-scv.boot.toml deleted file mode 100644 index 6c837b5e19ac..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/dominion-scv.boot.toml +++ /dev/null @@ -1,7 +0,0 @@ -[template] -src = "dominion-scv.boot.tmpl" -dest = "/opt/minion/etc/featuresBoot.d/dominion-scv.boot" -keys = [ - "/scv" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/featuresBoot.d/dominion-scv.boot" diff --git a/opennms-container/minion/container-fs/confd/conf.d/grpc.boot.toml b/opennms-container/minion/container-fs/confd/conf.d/grpc.boot.toml deleted file mode 100644 index aab9d134caef..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/grpc.boot.toml +++ /dev/null @@ -1,7 +0,0 @@ -[template] -src = "grpc.boot.tmpl" -dest = "/opt/minion/etc/featuresBoot.d/grpc.boot" -keys = [ - "/ipc/grpc" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/featuresBoot.d/grpc.boot" diff --git a/opennms-container/minion/container-fs/confd/conf.d/instance-id.properties.toml b/opennms-container/minion/container-fs/confd/conf.d/instance-id.properties.toml deleted file mode 100644 index a2d7c8d38815..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/instance-id.properties.toml +++ /dev/null @@ -1,6 +0,0 @@ -[template] -src = "instance-id.properties.tmpl" -dest = "/opt/minion/etc/opennms.properties.d/instance-id.properties" -keys = [ - "/org.opennms.instance.id" -] diff --git a/opennms-container/minion/container-fs/confd/conf.d/jaeger.boot.toml b/opennms-container/minion/container-fs/confd/conf.d/jaeger.boot.toml deleted file mode 100644 index ac4c827d9e35..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/jaeger.boot.toml +++ /dev/null @@ -1,8 +0,0 @@ -[template] -src = "jaeger.boot.tmpl" -dest = "/opt/minion/etc/featuresBoot.d/jaeger.boot" -keys = [ - "/system/properties/JAEGER_AGENT_HOST", - "/system/properties/JAEGER_ENDPOINT" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/featuresBoot.d/jaeger.boot" diff --git a/opennms-container/minion/container-fs/confd/conf.d/kafka-ipc.boot.toml b/opennms-container/minion/container-fs/confd/conf.d/kafka-ipc.boot.toml deleted file mode 100644 index d001621c8db7..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/kafka-ipc.boot.toml +++ /dev/null @@ -1,7 +0,0 @@ -[template] -src = "kafka-ipc.boot.tmpl" -dest = "/opt/minion/etc/featuresBoot.d/kafka-ipc.boot" -keys = [ - "/ipc/kafka" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/featuresBoot.d/kafka-ipc.boot" \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/conf.d/kafka-rpc.boot.toml b/opennms-container/minion/container-fs/confd/conf.d/kafka-rpc.boot.toml deleted file mode 100644 index a0f0fe06f704..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/kafka-rpc.boot.toml +++ /dev/null @@ -1,7 +0,0 @@ -[template] -src = "kafka-rpc.boot.tmpl" -dest = "/opt/minion/etc/featuresBoot.d/kafka-rpc.boot" -keys = [ - "/ipc/rpc/kafka" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/featuresBoot.d/kafka-rpc.boot" diff --git a/opennms-container/minion/container-fs/confd/conf.d/kafka-sink.boot.toml b/opennms-container/minion/container-fs/confd/conf.d/kafka-sink.boot.toml deleted file mode 100644 index 7ce294ef616f..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/kafka-sink.boot.toml +++ /dev/null @@ -1,7 +0,0 @@ -[template] -src = "kafka-sink.boot.tmpl" -dest = "/opt/minion/etc/featuresBoot.d/kafka-sink.boot" -keys = [ - "/ipc/sink/kafka" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/featuresBoot.d/kafka-sink.boot" diff --git a/opennms-container/minion/container-fs/confd/conf.d/kafka-twin.boot.toml b/opennms-container/minion/container-fs/confd/conf.d/kafka-twin.boot.toml deleted file mode 100644 index f89b2fdc05b3..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/kafka-twin.boot.toml +++ /dev/null @@ -1,7 +0,0 @@ -[template] -src = "kafka-twin.boot.tmpl" -dest = "/opt/minion/etc/featuresBoot.d/kafka-twin.boot" -keys = [ - "/ipc/twin/kafka" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/featuresBoot.d/kafka-twin.boot" \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/conf.d/org.apache.karaf.management.cfg.toml b/opennms-container/minion/container-fs/confd/conf.d/org.apache.karaf.management.cfg.toml deleted file mode 100644 index c3c2e62caed4..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/org.apache.karaf.management.cfg.toml +++ /dev/null @@ -1,6 +0,0 @@ -[template] -src = "org.apache.karaf.management.cfg.tmpl" -dest = "/opt/minion/etc/org.apache.karaf.management.cfg" -keys = [ - "/karaf/management/rmi" -] \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/conf.d/org.apache.karaf.shell.cfg.toml b/opennms-container/minion/container-fs/confd/conf.d/org.apache.karaf.shell.cfg.toml deleted file mode 100644 index 793f4176a3da..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/org.apache.karaf.shell.cfg.toml +++ /dev/null @@ -1,6 +0,0 @@ -[template] -src = "org.apache.karaf.shell.cfg.tmpl" -dest = "/opt/minion/etc/org.apache.karaf.shell.cfg" -keys = [ - "/karaf/shell/ssh" -] \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.grpc.client.cfg.toml b/opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.grpc.client.cfg.toml deleted file mode 100644 index ed943d436267..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.grpc.client.cfg.toml +++ /dev/null @@ -1,7 +0,0 @@ -[template] -src = "org.opennms.core.ipc.grpc.client.cfg.tmpl" -dest = "/opt/minion/etc/org.opennms.core.ipc.grpc.client.cfg" -keys = [ - "/ipc/grpc" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/org.opennms.core.ipc.grpc.client.cfg" diff --git a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.kafka.cfg.toml b/opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.kafka.cfg.toml deleted file mode 100644 index d2ea663bd1e7..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.kafka.cfg.toml +++ /dev/null @@ -1,7 +0,0 @@ -[template] -src = "org.opennms.core.ipc.kafka.cfg.tmpl" -dest = "/opt/minion/etc/org.opennms.core.ipc.kafka.cfg" -keys = [ - "/ipc/kafka" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/org.opennms.core.ipc.kafka.cfg" diff --git a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.rpc.kafka.cfg.toml b/opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.rpc.kafka.cfg.toml deleted file mode 100644 index a1da31892a88..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.rpc.kafka.cfg.toml +++ /dev/null @@ -1,7 +0,0 @@ -[template] -src = "org.opennms.core.ipc.rpc.kafka.cfg.tmpl" -dest = "/opt/minion/etc/org.opennms.core.ipc.rpc.kafka.cfg" -keys = [ - "/ipc/rpc/kafka" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/org.opennms.core.ipc.rpc.kafka.cfg" diff --git a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.sink.kafka.cfg.toml b/opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.sink.kafka.cfg.toml deleted file mode 100644 index 83d18dc472dc..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.sink.kafka.cfg.toml +++ /dev/null @@ -1,7 +0,0 @@ -[template] -src = "org.opennms.core.ipc.sink.kafka.cfg.tmpl" -dest = "/opt/minion/etc/org.opennms.core.ipc.sink.kafka.cfg" -keys = [ - "/ipc/sink/kafka" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/org.opennms.core.ipc.sink.kafka.cfg" diff --git a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.sink.offheap.cfg.toml b/opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.sink.offheap.cfg.toml deleted file mode 100644 index 761981366624..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.sink.offheap.cfg.toml +++ /dev/null @@ -1,7 +0,0 @@ -[template] -src = "org.opennms.core.ipc.sink.offheap.cfg.tmpl" -dest = "/opt/minion/etc/org.opennms.core.ipc.sink.offheap.cfg" -keys = [ - "/ipc/sink/offheap" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/org.opennms.core.ipc.sink.offheap.cfg" diff --git a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.twin.kafka.cfg.toml b/opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.twin.kafka.cfg.toml deleted file mode 100644 index ab9413c62eea..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.core.ipc.twin.kafka.cfg.toml +++ /dev/null @@ -1,7 +0,0 @@ -[template] -src = "org.opennms.core.ipc.twin.kafka.cfg.tmpl" -dest = "/opt/minion/etc/org.opennms.core.ipc.twin.kafka.cfg" -keys = [ - "/ipc/twin/kafka" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/org.opennms.core.ipc.twin.kafka.cfg" diff --git a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.features.minion.dominion.grpc.cfg.toml b/opennms-container/minion/container-fs/confd/conf.d/org.opennms.features.minion.dominion.grpc.cfg.toml deleted file mode 100644 index fc56588d243c..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.features.minion.dominion.grpc.cfg.toml +++ /dev/null @@ -1,7 +0,0 @@ -[template] -src = "org.opennms.features.minion.dominion.grpc.cfg.tmpl" -dest = "/opt/minion/etc/org.opennms.features.minion.dominion.grpc.cfg" -keys = [ - "/dominion/grpc" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/org.opennms.features.minion.dominion.grpc.cfg" diff --git a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.minion.controller.cfg.toml b/opennms-container/minion/container-fs/confd/conf.d/org.opennms.minion.controller.cfg.toml deleted file mode 100644 index 82bddd265c35..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.minion.controller.cfg.toml +++ /dev/null @@ -1,9 +0,0 @@ -[template] -src = "org.opennms.minion.controller.cfg.tmpl" -dest = "/opt/minion/etc/org.opennms.minion.controller.cfg" -keys = [ - "/location", - "/id", - "/broker-url" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/org.opennms.minion.controller.cfg" diff --git a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.minion.process-env.toml b/opennms-container/minion/container-fs/confd/conf.d/org.opennms.minion.process-env.toml deleted file mode 100644 index b145fab29bb3..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.minion.process-env.toml +++ /dev/null @@ -1,7 +0,0 @@ -[template] -src = "org.opennms.minion.process-env.tmpl" -dest = "/opt/minion/etc/minion-process.env" -keys = [ - "/process-env" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/minion-process.env" diff --git a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.minion.server-certificates.toml b/opennms-container/minion/container-fs/confd/conf.d/org.opennms.minion.server-certificates.toml deleted file mode 100644 index addceb3530d3..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.minion.server-certificates.toml +++ /dev/null @@ -1,7 +0,0 @@ -[template] -src = "org.opennms.minion.server-certificates.tmpl" -dest = "/opt/minion/etc/minion-server-certs.env" -keys = [ - "/server-certs" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/minion-server-certs.env" diff --git a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.netmgt.syslog.cfg.toml b/opennms-container/minion/container-fs/confd/conf.d/org.opennms.netmgt.syslog.cfg.toml deleted file mode 100644 index b21f2358be00..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.netmgt.syslog.cfg.toml +++ /dev/null @@ -1,7 +0,0 @@ -[template] -src = "org.opennms.netmgt.syslog.cfg.tmpl" -dest = "/opt/minion/etc/org.opennms.netmgt.syslog.cfg" -keys = [ - "/netmgt/syslog" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/org.opennms.netmgt.syslog.cfg" diff --git a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.netmgt.trapd.cfg.toml b/opennms-container/minion/container-fs/confd/conf.d/org.opennms.netmgt.trapd.cfg.toml deleted file mode 100644 index 75404132977b..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/org.opennms.netmgt.trapd.cfg.toml +++ /dev/null @@ -1,7 +0,0 @@ -[template] -src = "org.opennms.netmgt.trapd.cfg.tmpl" -dest = "/opt/minion/etc/org.opennms.netmgt.trapd.cfg" -keys = [ - "/netmgt/traps" -] -reload_cmd = "/opt/minion/confd/scripts/remove-if-empty /opt/minion/etc/org.opennms.netmgt.trapd.cfg" diff --git a/opennms-container/minion/container-fs/confd/conf.d/org.ops4j.pax.web.cfg.toml b/opennms-container/minion/container-fs/confd/conf.d/org.ops4j.pax.web.cfg.toml deleted file mode 100644 index b71b783ebc27..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/org.ops4j.pax.web.cfg.toml +++ /dev/null @@ -1,6 +0,0 @@ -[template] -src = "org.ops4j.pax.web.cfg.tmpl" -dest = "/opt/minion/etc/org.ops4j.pax.web.cfg" -keys = [ - "/jetty/web" -] \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/conf.d/prom-jmx-exporter.toml b/opennms-container/minion/container-fs/confd/conf.d/prom-jmx-exporter.toml deleted file mode 100644 index 3cde4f6b8efa..000000000000 --- a/opennms-container/minion/container-fs/confd/conf.d/prom-jmx-exporter.toml +++ /dev/null @@ -1,6 +0,0 @@ -[template] -src = "prom-jmx-exporter.yaml.tmpl" -dest = "/opt/prom-jmx-exporter/config.yaml" -keys = [ - "/java/agent/prom-jmx-exporter" -] diff --git a/opennms-container/minion/container-fs/confd/confd.toml b/opennms-container/minion/container-fs/confd/confd.toml deleted file mode 100644 index 89e0b3eba326..000000000000 --- a/opennms-container/minion/container-fs/confd/confd.toml +++ /dev/null @@ -1,4 +0,0 @@ -confdir = "/opt/minion/confd" -backend = "file" -file = [ "/opt/minion/minion-config.yaml" ] -log-level = "debug" diff --git a/opennms-container/minion/container-fs/confd/directories b/opennms-container/minion/container-fs/confd/directories deleted file mode 100644 index 04909d627773..000000000000 --- a/opennms-container/minion/container-fs/confd/directories +++ /dev/null @@ -1 +0,0 @@ -etc/opennms.properties.d diff --git a/opennms-container/minion/container-fs/confd/scripts/confd_lib.sh b/opennms-container/minion/container-fs/confd/scripts/confd_lib.sh deleted file mode 100755 index 73a3d5f6fa7d..000000000000 --- a/opennms-container/minion/container-fs/confd/scripts/confd_lib.sh +++ /dev/null @@ -1,19 +0,0 @@ -MINION_ETC_DIR="/opt/minion/etc" -STATIC_DIR="/opt/minion/confd/static" - -# Checks if the given file is empty and if so deletes it. -removeIfEmpty() { - local file="$1" - - if [ -z "$file" ]; then - echo "No rendered template was specified" - exit 1 - fi - - if [ -s "$file" ]; then - return 1 - fi - - rm "$file" - return 0 -} diff --git a/opennms-container/minion/container-fs/confd/scripts/remove-if-empty b/opennms-container/minion/container-fs/confd/scripts/remove-if-empty deleted file mode 100755 index 9adf03cf8c08..000000000000 --- a/opennms-container/minion/container-fs/confd/scripts/remove-if-empty +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash -. "/opt/minion/confd/scripts/confd_lib.sh" - -if removeIfEmpty "$1"; then - echo "Removed file '$1' since it was empty after rendering" -fi diff --git a/opennms-container/minion/container-fs/confd/templates/confd-telemetry-feature.xml.tmpl b/opennms-container/minion/container-fs/confd/templates/confd-telemetry-feature.xml.tmpl deleted file mode 100644 index e24857cb96fd..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/confd-telemetry-feature.xml.tmpl +++ /dev/null @@ -1,67 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} - - - - -{{$flowsPath := "/telemetry/flows" -}} -{{$singlePortPath := (print $flowsPath "/single-port-listener") -}} -{{if eq (getv (print $singlePortPath "/enabled") "false") "true" -}} - - name={{getv (print $singlePortPath "/name") "Single-Port-Flow-Listener"}} - class-name=org.opennms.netmgt.telemetry.listeners.UdpListener -{{if not (exists (print $singlePortPath "/parameters/port")) -}} - parameters.port=50000 -{{end -}} -{{range gets (print $singlePortPath "/parameters/*") -}} - parameters.{{base .Key}}={{.Value}} -{{end -}} - parsers.1.name=Netflow-5 - parsers.1.class-name=org.opennms.netmgt.telemetry.protocols.netflow.parser.Netflow5UdpParser - parsers.1.parameters.maxClockSkew=300 -{{range gets (print $singlePortPath "/parser-parameters/*") -}} - parsers.1.parameters.{{base .Key}}={{.Value}} -{{end -}} - parsers.2.name=Netflow-9 - parsers.2.class-name=org.opennms.netmgt.telemetry.protocols.netflow.parser.Netflow9UdpParser - parsers.2.parameters.maxClockSkew=300 -{{range gets (print $singlePortPath "/parser-parameters/*") -}} - parsers.2.parameters.{{base .Key}}={{.Value}} -{{end -}} - parsers.3.name=IPFIX - parsers.3.class-name=org.opennms.netmgt.telemetry.protocols.netflow.parser.IpfixUdpParser - parsers.3.parameters.maxClockSkew=300 -{{range gets (print $singlePortPath "/parser-parameters/*") -}} - parsers.3.parameters.{{base .Key}}={{.Value}} -{{end -}} - parsers.4.name=SFlow - parsers.4.class-name=org.opennms.netmgt.telemetry.protocols.sflow.parser.SFlowUdpParser -{{range gets (print $singlePortPath "/parser-parameters/*") -}} - parsers.4.parameters.{{base .Key}}={{.Value}} -{{end -}} - -{{end -}} -{{range lsdir (print $flowsPath "/listeners") -}} -{{$listenerPath := (print $flowsPath "/listeners/" .) -}} -{{$listenerName := base $listenerPath -}} - - name={{$listenerName}} - class-name={{getv (print $listenerPath "/class-name")}} -{{range gets (print $listenerPath "/parameters/*") -}} - parameters.{{base .Key}}={{.Value}} -{{end -}} -{{range $parserIndex, $element := lsdir (print $listenerPath "/parsers") -}} -{{$parserPath := (print $listenerPath "/parsers/" .) -}} -{{$parserName := base $parserPath -}} - parsers.{{$parserIndex}}.name={{$parserName}} - parsers.{{$parserIndex}}.class-name={{getv (print $parserPath "/class-name")}} -{{range gets (print $parserPath "/parameters/*") -}} - parsers.{{$parserIndex}}.parameters.{{base .Key}}={{.Value}} -{{end -}} -{{end -}} - -{{end -}} - - - \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/custom.system.properties.tmpl b/opennms-container/minion/container-fs/confd/templates/custom.system.properties.tmpl deleted file mode 100644 index 7d2c2a12f526..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/custom.system.properties.tmpl +++ /dev/null @@ -1,5 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{range gets "/system/properties/*" -}} -{{base .Key}} = {{.Value}} -{{end -}} \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/disable-jms.boot.tmpl b/opennms-container/minion/container-fs/confd/templates/disable-jms.boot.tmpl deleted file mode 100644 index 072d22db2f51..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/disable-jms.boot.tmpl +++ /dev/null @@ -1,6 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{if (and (exists "/ipc/rpc/kafka/bootstrap.servers") (exists "/ipc/sink/kafka/bootstrap.servers")) -}} -!minion-jms -!opennms-core-ipc-jms -{{end -}} diff --git a/opennms-container/minion/container-fs/confd/templates/dominion-scv.boot.tmpl b/opennms-container/minion/container-fs/confd/templates/dominion-scv.boot.tmpl deleted file mode 100644 index f52ca1db809d..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/dominion-scv.boot.tmpl +++ /dev/null @@ -1,7 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{$provider := (getv "/scv/provider" "") -}} -{{if eq $provider "dominion" -}} -!scv-jceks-impl -dominion-secure-credentials-vault -{{end -}} \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/grpc.boot.tmpl b/opennms-container/minion/container-fs/confd/templates/grpc.boot.tmpl deleted file mode 100644 index f59ccf6eb672..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/grpc.boot.tmpl +++ /dev/null @@ -1,7 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{if exists "/ipc/grpc/host" -}} -!opennms-core-ipc-jms -!minion-jms -opennms-core-ipc-grpc-client -{{end -}} \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/instance-id.properties.tmpl b/opennms-container/minion/container-fs/confd/templates/instance-id.properties.tmpl deleted file mode 100644 index dcf70077bc09..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/instance-id.properties.tmpl +++ /dev/null @@ -1,6 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{$instanceIdKey := "/org.opennms.instance.id" -}} -{{if exists $instanceIdKey -}} -org.opennms.instance.id={{getv $instanceIdKey}} -{{end -}} \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/jaeger.boot.tmpl b/opennms-container/minion/container-fs/confd/templates/jaeger.boot.tmpl deleted file mode 100644 index a3b0f4c7e6b0..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/jaeger.boot.tmpl +++ /dev/null @@ -1,5 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{if or (exists "/system/properties/JAEGER_AGENT_HOST") (exists "/system/properties/JAEGER_ENDPOINT") -}} -opennms-core-tracing-jaeger -{{end -}} diff --git a/opennms-container/minion/container-fs/confd/templates/kafka-ipc.boot.tmpl b/opennms-container/minion/container-fs/confd/templates/kafka-ipc.boot.tmpl deleted file mode 100644 index 2523f2f25eee..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/kafka-ipc.boot.tmpl +++ /dev/null @@ -1,7 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{if exists "/ipc/kafka/bootstrap.servers" -}} -!minion-jms -!opennms-core-ipc-jms -opennms-core-ipc-kafka -{{end -}} \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/kafka-rpc.boot.tmpl b/opennms-container/minion/container-fs/confd/templates/kafka-rpc.boot.tmpl deleted file mode 100644 index 3c808b5c8b3e..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/kafka-rpc.boot.tmpl +++ /dev/null @@ -1,6 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{if exists "/ipc/rpc/kafka/bootstrap.servers" -}} -!opennms-core-ipc-rpc-jms -opennms-core-ipc-rpc-kafka -{{end -}} \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/kafka-sink.boot.tmpl b/opennms-container/minion/container-fs/confd/templates/kafka-sink.boot.tmpl deleted file mode 100644 index f01a5558fa83..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/kafka-sink.boot.tmpl +++ /dev/null @@ -1,6 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{if exists "/ipc/sink/kafka/bootstrap.servers" -}} -!opennms-core-ipc-sink-camel -opennms-core-ipc-sink-kafka -{{end -}} \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/kafka-twin.boot.tmpl b/opennms-container/minion/container-fs/confd/templates/kafka-twin.boot.tmpl deleted file mode 100644 index 1df7e2bfe3be..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/kafka-twin.boot.tmpl +++ /dev/null @@ -1,6 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{if exists "/ipc/twin/kafka/bootstrap.servers" -}} -!opennms-core-ipc-twin-jms -opennms-core-ipc-twin-kafka -{{end -}} \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/org.apache.karaf.management.cfg.tmpl b/opennms-container/minion/container-fs/confd/templates/org.apache.karaf.management.cfg.tmpl deleted file mode 100644 index 422ca5cd5e3b..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/org.apache.karaf.management.cfg.tmpl +++ /dev/null @@ -1,112 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -# -# DON'T EDIT THIS FILE :: GENERATED WITH CONFD -# - -# -# The properties in this file define the configuration of Apache Karaf's JMX Management -# -{{$karafRmiPath := "/karaf/management/rmi" -}} -{{$karafRmiRegistryPath := (print $karafRmiPath "/registry") -}} -{{$karafRmiServerPath := (print $karafRmiPath "/server") -}} - -# -# Port number for RMI registry connection -# -rmiRegistryPort = {{getv (print $karafRmiRegistryPath "/port") "1299"}} - -# -# Host for RMI registry -# -rmiRegistryHost = {{getv (print $karafRmiRegistryPath "/host") "127.0.0.1"}} - -# -# Port number for RMI server connection -# -rmiServerPort = {{getv (print $karafRmiServerPath "/port") "45444"}} - -# -# Host for RMI server -# -rmiServerHost = {{getv (print $karafRmiServerPath "/host") "127.0.0.1"}} - -# -# Name of the JAAS realm used for authentication -# -jmxRealm = karaf - -# -# The service URL for the JMXConnectorServer -# -serviceUrl = service:jmx:rmi://${rmiServerHost}:${rmiServerPort}/jndi/rmi://${rmiRegistryHost}:${rmiRegistryPort}/karaf-${karaf.name} - -# -# Whether any threads started for the JMXConnectorServer should be started as daemon threads -# -daemon = true - -# -# Whether the JMXConnectorServer should be started in a separate thread -# -threaded = true - -# -# The ObjectName used to register the JMXConnectorServer -# -objectName = connector:name=rmi - -# -# Timeout to lookup for the keystore in case of SSL authentication usage -# -#keyStoreAvailabilityTimeout = 5000 - -# -# The type of authentication -# -#authenticatorType = password - -# -# Enable or not SSL/TLS -# -#secured = false - -# -# Secure algorithm to use -# -#secureAlgorithm = default - -# -# Secure protocol to use -# -#secureProtocol = TLS - -# -# Keystore to use for secure mode -# -#keyStore = karaf.ks - -# -# Alias of the key to use in the keystore -# -#keyAlias = karaf - -# -# Truststore to use for secure mode -# -#trustStore = karaf.ts - -# -# Create the JMX RMI registry -# -#createRmiRegistry = true - -# -# Locate the JMX RMI registry -# -#locateRmiRegistry = true - -# -# Locate an existing MBean server if possible (usefull when Karaf is embedded) -# -#locateExistingMBeanServerIfPossible = true \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/org.apache.karaf.shell.cfg.tmpl b/opennms-container/minion/container-fs/confd/templates/org.apache.karaf.shell.cfg.tmpl deleted file mode 100644 index ed18e9a7dd2d..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/org.apache.karaf.shell.cfg.tmpl +++ /dev/null @@ -1,11 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -# -# DON'T EDIT THIS FILE :: GENERATED WITH CONFD -# -{{$karafSshPath := "/karaf/shell/ssh" -}} -sshPort={{getv (print $karafSshPath "/port") "8201"}} -sshHost={{getv (print $karafSshPath "/host") "127.0.0.1"}} -hostKeyFormat=PEM -sshRealm=karaf -hostKey=${karaf.etc}/host.key \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.grpc.client.cfg.tmpl b/opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.grpc.client.cfg.tmpl deleted file mode 100644 index 45d52ff10060..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.grpc.client.cfg.tmpl +++ /dev/null @@ -1,5 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{range gets "/ipc/grpc/*" -}} -{{base .Key}} = {{.Value}} -{{end -}} \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.kafka.cfg.tmpl b/opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.kafka.cfg.tmpl deleted file mode 100644 index 6cf3d9966032..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.kafka.cfg.tmpl +++ /dev/null @@ -1,5 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{range gets "/ipc/kafka/*" -}} -{{base .Key}} = {{.Value}} -{{end -}} \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.rpc.kafka.cfg.tmpl b/opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.rpc.kafka.cfg.tmpl deleted file mode 100644 index 7ee576525e76..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.rpc.kafka.cfg.tmpl +++ /dev/null @@ -1,5 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{range gets "/ipc/rpc/kafka/*" -}} -{{base .Key}} = {{.Value}} -{{end -}} \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.sink.kafka.cfg.tmpl b/opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.sink.kafka.cfg.tmpl deleted file mode 100644 index d1cc1de1443e..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.sink.kafka.cfg.tmpl +++ /dev/null @@ -1,5 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{range gets "/ipc/sink/kafka/*" -}} -{{base .Key}} = {{.Value}} -{{end -}} \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.sink.offheap.cfg.tmpl b/opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.sink.offheap.cfg.tmpl deleted file mode 100644 index c7417c872958..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.sink.offheap.cfg.tmpl +++ /dev/null @@ -1,5 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{range gets "/ipc/sink/offheap/*" -}} -{{base .Key}} = {{.Value}} -{{end -}} \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.twin.kafka.cfg.tmpl b/opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.twin.kafka.cfg.tmpl deleted file mode 100644 index 6478aaed6be5..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/org.opennms.core.ipc.twin.kafka.cfg.tmpl +++ /dev/null @@ -1,5 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{range gets "/ipc/twin/kafka/*" -}} -{{base .Key}} = {{.Value}} -{{end -}} \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/org.opennms.features.minion.dominion.grpc.cfg.tmpl b/opennms-container/minion/container-fs/confd/templates/org.opennms.features.minion.dominion.grpc.cfg.tmpl deleted file mode 100644 index f59411603d55..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/org.opennms.features.minion.dominion.grpc.cfg.tmpl +++ /dev/null @@ -1,12 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{$grpcPath := "/dominion/grpc/" -}} -{{if exists (print $grpcPath "host") -}} -host = {{getv (print $grpcPath "host")}} -{{end -}} -{{if exists (print $grpcPath "port") -}} -port = {{getv (print $grpcPath "port")}} -{{end -}} -{{if exists (print $grpcPath "client-secret") -}} -clientSecret = {{getv (print $grpcPath "client-secret")}} -{{end -}} \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/org.opennms.minion.controller.cfg.tmpl b/opennms-container/minion/container-fs/confd/templates/org.opennms.minion.controller.cfg.tmpl deleted file mode 100644 index c5d006e6c66d..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/org.opennms.minion.controller.cfg.tmpl +++ /dev/null @@ -1,11 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{if exists "/location" -}} -location = {{getv "/location"}} -{{end -}} -{{if exists "/id" -}} -id = {{getv "/id"}} -{{end -}} -{{if exists "/broker-url" -}} -broker-url = {{getv "/broker-url"}} -{{end -}} \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/org.opennms.minion.process-env.tmpl b/opennms-container/minion/container-fs/confd/templates/org.opennms.minion.process-env.tmpl deleted file mode 100644 index 8d090807c85d..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/org.opennms.minion.process-env.tmpl +++ /dev/null @@ -1,14 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{range $idx, $elm := ls "/process-env/java-opts" -}} -{{if not $idx -}} -# -# DON'T EDIT THIS FILE :: GENERATED WITH CONFD -# -CUSTOM_JAVA_OPTS= - {{- range $index, $element := getvs "/process-env/java-opts/*" -}} - {{- if $index}} {{end -}} - {{- $element -}} - {{- end}} -{{end -}} -{{end -}} diff --git a/opennms-container/minion/container-fs/confd/templates/org.opennms.minion.server-certificates.tmpl b/opennms-container/minion/container-fs/confd/templates/org.opennms.minion.server-certificates.tmpl deleted file mode 100644 index 21563cb1e344..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/org.opennms.minion.server-certificates.tmpl +++ /dev/null @@ -1,10 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{range $idx, $elm := getvs "/server-certs/*" -}} -{{if not $idx -}} -# -# DON'T EDIT THIS FILE :: GENERATED WITH CONFD -# -{{end -}} -{{.}} -{{end -}} \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/org.opennms.netmgt.syslog.cfg.tmpl b/opennms-container/minion/container-fs/confd/templates/org.opennms.netmgt.syslog.cfg.tmpl deleted file mode 100644 index 3ef13aedc8bb..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/org.opennms.netmgt.syslog.cfg.tmpl +++ /dev/null @@ -1,5 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{range gets "/netmgt/syslog/*" -}} -{{base .Key}} = {{.Value}} -{{end -}} \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/org.opennms.netmgt.trapd.cfg.tmpl b/opennms-container/minion/container-fs/confd/templates/org.opennms.netmgt.trapd.cfg.tmpl deleted file mode 100644 index 5ad281ec63ce..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/org.opennms.netmgt.trapd.cfg.tmpl +++ /dev/null @@ -1,5 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -{{range gets "/netmgt/traps/*" -}} -{{base .Key}} = {{.Value}} -{{end -}} \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/org.ops4j.pax.web.cfg.tmpl b/opennms-container/minion/container-fs/confd/templates/org.ops4j.pax.web.cfg.tmpl deleted file mode 100644 index 6b7a5c51810c..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/org.ops4j.pax.web.cfg.tmpl +++ /dev/null @@ -1,10 +0,0 @@ -{{- /* Upon updating this file please ensure that the schema minion-config-schema.yml accurately reflects the keys that -are used by this template. */ -}} -# -# DON'T EDIT THIS FILE :: GENERATED WITH CONFD -# -{{$jettyWebPath := "/jetty/web" -}} -org.osgi.service.http.port={{getv (print $jettyWebPath "/port") "8181"}} -org.ops4j.pax.web.listening.addresses={{getv (print $jettyWebPath "/host") "0.0.0.0"}} -javax.servlet.context.tempdir=${karaf.data}/pax-web-jsp -org.ops4j.pax.web.config.file=${karaf.etc}/jetty.xml \ No newline at end of file diff --git a/opennms-container/minion/container-fs/confd/templates/prom-jmx-exporter.yaml.tmpl b/opennms-container/minion/container-fs/confd/templates/prom-jmx-exporter.yaml.tmpl deleted file mode 100644 index 194f11b217a5..000000000000 --- a/opennms-container/minion/container-fs/confd/templates/prom-jmx-exporter.yaml.tmpl +++ /dev/null @@ -1,48 +0,0 @@ -# -# DON'T EDIT THIS FILE :: GENERATED WITH CONFD -# -{{$promJmxPath := "/java/agent/prom-jmx-exporter" -}} -startDelaySeconds: {{getv (print $promJmxPath "/startDelaySeconds") "0"}} -lowercaseOutputName: {{getv (print $promJmxPath "/lowerCaseOutputName") "true"}} -lowercaseOutputLabelNames: {{getv (print $promJmxPath "/lowercaseOutputLabelNames") "true"}} -autoExcludeObjectNameAttributes: {{getv (print $promJmxPath "/autoExcludeObjectNameAttributes") "true"}} - -{{$woSize := len (getvs (print $promJmxPath "/includeObjectNames/*")) -}} -{{if gt $woSize 0 -}} -includeObjectNames: -{{range getvs (print $promJmxPath "/includeObjectNames/*") -}} -- "{{.}}" -{{end -}} -{{end -}} - -{{$boSize := len (getvs (print $promJmxPath "/excludeObjectNames/*")) -}} -{{if gt $boSize 0 -}} -excludeObjectNames: -{{range getvs (print $promJmxPath "/excludeObjectNames/*") -}} -- "{{.}}" -{{end -}} -{{end -}} - -rules: -- pattern: org\.opennms\..+\.(.+)<>Value - name: minion_$1_$2 - type: GAUGE - -- pattern: org\.opennms\..+\.(.+)<>Count - name: minion_$1_$2_count - type: COUNTER - -- pattern: org\.opennms\..+\.(.+)<>(\d+)thPercentile - name: minion_$1_$2 - type: GAUGE - labels: - quantile: "0.$3" - -# Per-device trapd metrics -- pattern: 'org\.opennms\.netmgt\.trapd\.device]+)><>(\w+)' - name: trapd_device_$4 - type: COUNTER - labels: - location: "$1" - ip: "$2" - type: "$3" From aea622145c36d8aa9c5bceff056a9aa176c7225a Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Thu, 26 Mar 2026 13:34:37 -0400 Subject: [PATCH 40/41] Sentinel, Initial Change --- opennms-container/sentinel/Dockerfile | 5 +- .../sentinel/container-fs/entrypoint.sh | 117 +++++++++++++----- .../templates/sentinel-ipc.boot | 2 + .../etc/org.opennms.core.ipc.sink.kafka.cfg | 1 + ...g.opennms.core.ipc.sink.kafka.consumer.cfg | 1 + ...nms.features.flows.persistence.elastic.cfg | 1 + 6 files changed, 94 insertions(+), 33 deletions(-) create mode 100644 opennms-container/sentinel/container-fs/etc/featuresBoot.d/templates/sentinel-ipc.boot create mode 100644 opennms-container/sentinel/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg create mode 100644 opennms-container/sentinel/container-fs/etc/org.opennms.core.ipc.sink.kafka.consumer.cfg create mode 100644 opennms-container/sentinel/container-fs/etc/org.opennms.features.flows.persistence.elastic.cfg diff --git a/opennms-container/sentinel/Dockerfile b/opennms-container/sentinel/Dockerfile index 873932d4e155..87f1d3099f90 100644 --- a/opennms-container/sentinel/Dockerfile +++ b/opennms-container/sentinel/Dockerfile @@ -98,9 +98,8 @@ COPY container-fs/health.sh / # Install a default JMX Prometheus configuration COPY container-fs/prom-jmx-default-config.yaml /opt/prom-jmx-exporter/config.yaml -# Install confd.io configuration files and scripts and ensure they are executable -COPY ./container-fs/confd/ /opt/sentinel/confd/ -RUN chmod +x /opt/sentinel/confd/scripts/* +# Overlay container-specific etc files (config files and featuresBoot templates) +COPY --chown=10001:0 container-fs/etc/ /opt/sentinel/etc/ VOLUME [ "/opt/sentinel/deploy", "/opt/sentinel/etc", "/opt/sentinel/data" ] diff --git a/opennms-container/sentinel/container-fs/entrypoint.sh b/opennms-container/sentinel/container-fs/entrypoint.sh index 36ad11209378..7aa5e5ba63d3 100755 --- a/opennms-container/sentinel/container-fs/entrypoint.sh +++ b/opennms-container/sentinel/container-fs/entrypoint.sh @@ -10,7 +10,10 @@ # Cause false/positives # shellcheck disable=SC2086 -set -e +set -eE + +# shellcheck disable=SC2064 +trap 'rc=$?; echo "[Startup][ERROR] entrypoint failed at line ${LINENO} (exit=${rc})"; exit ${rc}' ERR umask 002 export SENTINEL_HOME="/opt/sentinel" @@ -18,10 +21,8 @@ export KARAF_HOME="${SENTINEL_HOME}" SENTINEL_OVERLAY_ETC="/opt/sentinel-etc-overlay" SENTINEL_OVERLAY="/opt/sentinel-overlay" -CONFD_KEY_STORE="${SENTINEL_HOME}/sentinel-config.yaml" -CONFD_CONFIG_DIR="${SENTINEL_HOME}/confd" -CONFD_BIN="/usr/bin/confd" -CONFD_CONFIG_FILE="${CONFD_CONFIG_DIR}/confd.toml" +FEATURES_BOOT_DIR="${SENTINEL_HOME}/etc/featuresBoot.d" +FEATURES_BOOT_TEMPLATES_DIR="${FEATURES_BOOT_DIR}/templates" # Prometheus JMX Exporter Configuration # @@ -33,8 +34,7 @@ CONFD_CONFIG_FILE="${CONFD_CONFIG_DIR}/confd.toml" # - All other settings are optional and have sensible defaults # # Default behavior: -# - Configuration is managed via confd templates -# - Template uses key/values from /java/agent/prom-jmx-exporter +# - Configuration is managed via environment variables, which can be set in the Dockerfile, via docker run -e, or in a docker-compose file. PROM_JMX_EXPORTER_ENABLED="${PROM_JMX_EXPORTER_ENABLED:-false}" # required PROM_JMX_EXPORTER_JAR="${PROM_JMX_EXPORTER_JAR:-/opt/prom-jmx-exporter/jmx_prometheus_javaagent.jar}" PROM_JMX_EXPORTER_PORT="${PROM_JMX_EXPORTER_PORT:-9299}" @@ -93,6 +93,83 @@ setCredentials() { rsync --out-format="%n %C" ${SENTINEL_HOME}/etc/scv.jce /keystore/. } +function updateConfig() { + key=$1 + value=$2 + file=$3 + + # Omit $value here, in case there is sensitive information + echo "[Configuring] '$key' in '$file'" + + # If config exists in file, replace it. Otherwise, append to file. + if grep -E -q "^#?\s*$key\s*=" "$file"; then + sed -r -i "s@^#?\s*$key\s*=.*@$key=$value@g" "$file" #note that no config values may contain an '@' char + else + echo "$key=$value" >> "$file" + fi +} + +function parseEnvironment() { + IFS=$'\n' + + for VAR in $(env) + do + env_var=$(echo "$VAR" | cut -d= -f1) + + if [[ $env_var =~ ^KAFKA_IPC_ ]]; then + ipc_name=$(echo "$env_var" | cut -d_ -f3- | tr '[:upper:]' '[:lower:]' | tr _ .) + updateConfig "$ipc_name" "${!env_var}" "${SENTINEL_HOME}/etc/org.opennms.core.ipc.sink.kafka.cfg" + updateConfig "$ipc_name" "${!env_var}" "${SENTINEL_HOME}/etc/org.opennms.core.ipc.sink.kafka.consumer.cfg" + fi + + if [[ $env_var =~ ^ELASTICSEARCH_ ]]; then + es_name=$(echo "$env_var" | cut -d_ -f2- | tr '[:upper:]' '[:lower:]' | tr _ .) + case "$es_name" in + url) es_key="elasticUrl" ;; + index.strategy) es_key="elasticIndexStrategy" ;; + replicas) es_key="settings.index.number_of_replicas" ;; + conn.timeout) es_key="connTimeout" ;; + read.timeout) es_key="readTimeout" ;; + *) es_key="$es_name" ;; + esac + updateConfig "$es_key" "${!env_var}" "${SENTINEL_HOME}/etc/org.opennms.features.flows.persistence.elastic.cfg" + fi + + if [[ $env_var == "OPENNMS_INSTANCE_ID" ]]; then + updateConfig "org.opennms.instance.id" "${!env_var}" "${SENTINEL_HOME}/etc/custom.system.properties" + fi + done +} + +function applyFeatureBootTemplates() { + local managed_boot_files=( + "sentinel-ipc.boot" + ) + local boot_file + for boot_file in "${managed_boot_files[@]}"; do + rm -f "${FEATURES_BOOT_DIR}/${boot_file}" + done + + apply_template() { + local name="$1" + cp "${FEATURES_BOOT_TEMPLATES_DIR}/${name}" "${FEATURES_BOOT_DIR}/${name}" + echo "[Features] Enabled: ${name}" + } + + case "${SENTINEL_IPC:-}" in + kafka) + echo "[Features] IPC strategy set to Kafka." + apply_template "sentinel-ipc.boot" + ;; + jms|"") + echo "[Features] IPC strategy set to JMS (default)." + ;; + *) + echo "[Features] Unknown IPC strategy '${SENTINEL_IPC}', using defaults." + ;; + esac +} + initConfig() { if [ ! -d ${SENTINEL_HOME} ]; then echo "OpenNMS Sentinel home directory doesn't exist in ${SENTINEL_HOME}." @@ -128,6 +205,9 @@ initConfig() { echo "datasource.password = ${POSTGRES_PASSWORD}" >> ${DB_CONFIG} echo "datasource.databaseName = ${POSTGRES_DB}" >> ${DB_CONFIG} + parseEnvironment + applyFeatureBootTemplates + # Mark as configured echo "Configured $(date)" > ${SENTINEL_HOME}/etc/configured else @@ -149,15 +229,6 @@ applyOverlayConfig() { rsync -r --out-format="%n %C" ${SENTINEL_OVERLAY}/* ${SENTINEL_HOME}/. || exit ${E_INIT_CONFIG} else echo "No custom config found in ${SENTINEL_OVERLAY}. Use default configuration." - fi -} - -applyConfd() { - if [ -f "${CONFD_KEY_STORE}" ]; then - echo "Found a configuration key store, applying configuration via confd." - runConfd - else - echo "No configuration key store present, skipping confd configuration." fi } @@ -181,17 +252,6 @@ start() { exec ./karaf server ${SENTINEL_DEBUG} } -runConfd() { - # Create any directories that confd might write to - while IFS= read -r dir; do - local dirToCreate="$SENTINEL_HOME"/"$dir" - echo "Creating $dirToCreate so confd can write to it" - mkdir -p "$dirToCreate" - done < "$CONFD_CONFIG_DIR"/directories - - "$CONFD_BIN" -onetime -config-file "$CONFD_CONFIG_FILE" -} - # Evaluate arguments for build script. if [[ "${#}" == 0 ]]; then usage @@ -204,7 +264,6 @@ while getopts csdfh flag; do c) useEnvCredentials initConfig - applyConfd applyOverlayConfig applyKarafDebugLogging start @@ -215,14 +274,12 @@ while getopts csdfh flag; do d) SENTINEL_DEBUG="debug" initConfig - applyConfd applyOverlayConfig applyKarafDebugLogging start ;; f) initConfig - applyConfd applyOverlayConfig applyKarafDebugLogging start diff --git a/opennms-container/sentinel/container-fs/etc/featuresBoot.d/templates/sentinel-ipc.boot b/opennms-container/sentinel/container-fs/etc/featuresBoot.d/templates/sentinel-ipc.boot new file mode 100644 index 000000000000..ab3713a3eb46 --- /dev/null +++ b/opennms-container/sentinel/container-fs/etc/featuresBoot.d/templates/sentinel-ipc.boot @@ -0,0 +1,2 @@ +!sentinel-jms +sentinel-kafka diff --git a/opennms-container/sentinel/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg b/opennms-container/sentinel/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg new file mode 100644 index 000000000000..50d019d5fd18 --- /dev/null +++ b/opennms-container/sentinel/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg @@ -0,0 +1 @@ +bootstrap.servers=${env:KAFKA_IPC_BOOTSTRAP_SERVERS:-kafka:29092} diff --git a/opennms-container/sentinel/container-fs/etc/org.opennms.core.ipc.sink.kafka.consumer.cfg b/opennms-container/sentinel/container-fs/etc/org.opennms.core.ipc.sink.kafka.consumer.cfg new file mode 100644 index 000000000000..50d019d5fd18 --- /dev/null +++ b/opennms-container/sentinel/container-fs/etc/org.opennms.core.ipc.sink.kafka.consumer.cfg @@ -0,0 +1 @@ +bootstrap.servers=${env:KAFKA_IPC_BOOTSTRAP_SERVERS:-kafka:29092} diff --git a/opennms-container/sentinel/container-fs/etc/org.opennms.features.flows.persistence.elastic.cfg b/opennms-container/sentinel/container-fs/etc/org.opennms.features.flows.persistence.elastic.cfg new file mode 100644 index 000000000000..0f471871bf60 --- /dev/null +++ b/opennms-container/sentinel/container-fs/etc/org.opennms.features.flows.persistence.elastic.cfg @@ -0,0 +1 @@ +elasticUrl=${env:ELASTICSEARCH_URL:-http://elasticsearch:9200} From 2743b4d4f33c18b812e9cc73aa8e8ee0678450ac Mon Sep 17 00:00:00 2001 From: Morteza E <105240903+mershad-manesh@users.noreply.github.com> Date: Thu, 26 Mar 2026 14:53:37 -0400 Subject: [PATCH 41/41] Revert "Sentinel, Initial Change" This reverts commit aea622145c36d8aa9c5bceff056a9aa176c7225a. --- opennms-container/sentinel/Dockerfile | 5 +- .../sentinel/container-fs/entrypoint.sh | 117 +++++------------- .../templates/sentinel-ipc.boot | 2 - .../etc/org.opennms.core.ipc.sink.kafka.cfg | 1 - ...g.opennms.core.ipc.sink.kafka.consumer.cfg | 1 - ...nms.features.flows.persistence.elastic.cfg | 1 - 6 files changed, 33 insertions(+), 94 deletions(-) delete mode 100644 opennms-container/sentinel/container-fs/etc/featuresBoot.d/templates/sentinel-ipc.boot delete mode 100644 opennms-container/sentinel/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg delete mode 100644 opennms-container/sentinel/container-fs/etc/org.opennms.core.ipc.sink.kafka.consumer.cfg delete mode 100644 opennms-container/sentinel/container-fs/etc/org.opennms.features.flows.persistence.elastic.cfg diff --git a/opennms-container/sentinel/Dockerfile b/opennms-container/sentinel/Dockerfile index 87f1d3099f90..873932d4e155 100644 --- a/opennms-container/sentinel/Dockerfile +++ b/opennms-container/sentinel/Dockerfile @@ -98,8 +98,9 @@ COPY container-fs/health.sh / # Install a default JMX Prometheus configuration COPY container-fs/prom-jmx-default-config.yaml /opt/prom-jmx-exporter/config.yaml -# Overlay container-specific etc files (config files and featuresBoot templates) -COPY --chown=10001:0 container-fs/etc/ /opt/sentinel/etc/ +# Install confd.io configuration files and scripts and ensure they are executable +COPY ./container-fs/confd/ /opt/sentinel/confd/ +RUN chmod +x /opt/sentinel/confd/scripts/* VOLUME [ "/opt/sentinel/deploy", "/opt/sentinel/etc", "/opt/sentinel/data" ] diff --git a/opennms-container/sentinel/container-fs/entrypoint.sh b/opennms-container/sentinel/container-fs/entrypoint.sh index 7aa5e5ba63d3..36ad11209378 100755 --- a/opennms-container/sentinel/container-fs/entrypoint.sh +++ b/opennms-container/sentinel/container-fs/entrypoint.sh @@ -10,10 +10,7 @@ # Cause false/positives # shellcheck disable=SC2086 -set -eE - -# shellcheck disable=SC2064 -trap 'rc=$?; echo "[Startup][ERROR] entrypoint failed at line ${LINENO} (exit=${rc})"; exit ${rc}' ERR +set -e umask 002 export SENTINEL_HOME="/opt/sentinel" @@ -21,8 +18,10 @@ export KARAF_HOME="${SENTINEL_HOME}" SENTINEL_OVERLAY_ETC="/opt/sentinel-etc-overlay" SENTINEL_OVERLAY="/opt/sentinel-overlay" -FEATURES_BOOT_DIR="${SENTINEL_HOME}/etc/featuresBoot.d" -FEATURES_BOOT_TEMPLATES_DIR="${FEATURES_BOOT_DIR}/templates" +CONFD_KEY_STORE="${SENTINEL_HOME}/sentinel-config.yaml" +CONFD_CONFIG_DIR="${SENTINEL_HOME}/confd" +CONFD_BIN="/usr/bin/confd" +CONFD_CONFIG_FILE="${CONFD_CONFIG_DIR}/confd.toml" # Prometheus JMX Exporter Configuration # @@ -34,7 +33,8 @@ FEATURES_BOOT_TEMPLATES_DIR="${FEATURES_BOOT_DIR}/templates" # - All other settings are optional and have sensible defaults # # Default behavior: -# - Configuration is managed via environment variables, which can be set in the Dockerfile, via docker run -e, or in a docker-compose file. +# - Configuration is managed via confd templates +# - Template uses key/values from /java/agent/prom-jmx-exporter PROM_JMX_EXPORTER_ENABLED="${PROM_JMX_EXPORTER_ENABLED:-false}" # required PROM_JMX_EXPORTER_JAR="${PROM_JMX_EXPORTER_JAR:-/opt/prom-jmx-exporter/jmx_prometheus_javaagent.jar}" PROM_JMX_EXPORTER_PORT="${PROM_JMX_EXPORTER_PORT:-9299}" @@ -93,83 +93,6 @@ setCredentials() { rsync --out-format="%n %C" ${SENTINEL_HOME}/etc/scv.jce /keystore/. } -function updateConfig() { - key=$1 - value=$2 - file=$3 - - # Omit $value here, in case there is sensitive information - echo "[Configuring] '$key' in '$file'" - - # If config exists in file, replace it. Otherwise, append to file. - if grep -E -q "^#?\s*$key\s*=" "$file"; then - sed -r -i "s@^#?\s*$key\s*=.*@$key=$value@g" "$file" #note that no config values may contain an '@' char - else - echo "$key=$value" >> "$file" - fi -} - -function parseEnvironment() { - IFS=$'\n' - - for VAR in $(env) - do - env_var=$(echo "$VAR" | cut -d= -f1) - - if [[ $env_var =~ ^KAFKA_IPC_ ]]; then - ipc_name=$(echo "$env_var" | cut -d_ -f3- | tr '[:upper:]' '[:lower:]' | tr _ .) - updateConfig "$ipc_name" "${!env_var}" "${SENTINEL_HOME}/etc/org.opennms.core.ipc.sink.kafka.cfg" - updateConfig "$ipc_name" "${!env_var}" "${SENTINEL_HOME}/etc/org.opennms.core.ipc.sink.kafka.consumer.cfg" - fi - - if [[ $env_var =~ ^ELASTICSEARCH_ ]]; then - es_name=$(echo "$env_var" | cut -d_ -f2- | tr '[:upper:]' '[:lower:]' | tr _ .) - case "$es_name" in - url) es_key="elasticUrl" ;; - index.strategy) es_key="elasticIndexStrategy" ;; - replicas) es_key="settings.index.number_of_replicas" ;; - conn.timeout) es_key="connTimeout" ;; - read.timeout) es_key="readTimeout" ;; - *) es_key="$es_name" ;; - esac - updateConfig "$es_key" "${!env_var}" "${SENTINEL_HOME}/etc/org.opennms.features.flows.persistence.elastic.cfg" - fi - - if [[ $env_var == "OPENNMS_INSTANCE_ID" ]]; then - updateConfig "org.opennms.instance.id" "${!env_var}" "${SENTINEL_HOME}/etc/custom.system.properties" - fi - done -} - -function applyFeatureBootTemplates() { - local managed_boot_files=( - "sentinel-ipc.boot" - ) - local boot_file - for boot_file in "${managed_boot_files[@]}"; do - rm -f "${FEATURES_BOOT_DIR}/${boot_file}" - done - - apply_template() { - local name="$1" - cp "${FEATURES_BOOT_TEMPLATES_DIR}/${name}" "${FEATURES_BOOT_DIR}/${name}" - echo "[Features] Enabled: ${name}" - } - - case "${SENTINEL_IPC:-}" in - kafka) - echo "[Features] IPC strategy set to Kafka." - apply_template "sentinel-ipc.boot" - ;; - jms|"") - echo "[Features] IPC strategy set to JMS (default)." - ;; - *) - echo "[Features] Unknown IPC strategy '${SENTINEL_IPC}', using defaults." - ;; - esac -} - initConfig() { if [ ! -d ${SENTINEL_HOME} ]; then echo "OpenNMS Sentinel home directory doesn't exist in ${SENTINEL_HOME}." @@ -205,9 +128,6 @@ initConfig() { echo "datasource.password = ${POSTGRES_PASSWORD}" >> ${DB_CONFIG} echo "datasource.databaseName = ${POSTGRES_DB}" >> ${DB_CONFIG} - parseEnvironment - applyFeatureBootTemplates - # Mark as configured echo "Configured $(date)" > ${SENTINEL_HOME}/etc/configured else @@ -229,6 +149,15 @@ applyOverlayConfig() { rsync -r --out-format="%n %C" ${SENTINEL_OVERLAY}/* ${SENTINEL_HOME}/. || exit ${E_INIT_CONFIG} else echo "No custom config found in ${SENTINEL_OVERLAY}. Use default configuration." + fi +} + +applyConfd() { + if [ -f "${CONFD_KEY_STORE}" ]; then + echo "Found a configuration key store, applying configuration via confd." + runConfd + else + echo "No configuration key store present, skipping confd configuration." fi } @@ -252,6 +181,17 @@ start() { exec ./karaf server ${SENTINEL_DEBUG} } +runConfd() { + # Create any directories that confd might write to + while IFS= read -r dir; do + local dirToCreate="$SENTINEL_HOME"/"$dir" + echo "Creating $dirToCreate so confd can write to it" + mkdir -p "$dirToCreate" + done < "$CONFD_CONFIG_DIR"/directories + + "$CONFD_BIN" -onetime -config-file "$CONFD_CONFIG_FILE" +} + # Evaluate arguments for build script. if [[ "${#}" == 0 ]]; then usage @@ -264,6 +204,7 @@ while getopts csdfh flag; do c) useEnvCredentials initConfig + applyConfd applyOverlayConfig applyKarafDebugLogging start @@ -274,12 +215,14 @@ while getopts csdfh flag; do d) SENTINEL_DEBUG="debug" initConfig + applyConfd applyOverlayConfig applyKarafDebugLogging start ;; f) initConfig + applyConfd applyOverlayConfig applyKarafDebugLogging start diff --git a/opennms-container/sentinel/container-fs/etc/featuresBoot.d/templates/sentinel-ipc.boot b/opennms-container/sentinel/container-fs/etc/featuresBoot.d/templates/sentinel-ipc.boot deleted file mode 100644 index ab3713a3eb46..000000000000 --- a/opennms-container/sentinel/container-fs/etc/featuresBoot.d/templates/sentinel-ipc.boot +++ /dev/null @@ -1,2 +0,0 @@ -!sentinel-jms -sentinel-kafka diff --git a/opennms-container/sentinel/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg b/opennms-container/sentinel/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg deleted file mode 100644 index 50d019d5fd18..000000000000 --- a/opennms-container/sentinel/container-fs/etc/org.opennms.core.ipc.sink.kafka.cfg +++ /dev/null @@ -1 +0,0 @@ -bootstrap.servers=${env:KAFKA_IPC_BOOTSTRAP_SERVERS:-kafka:29092} diff --git a/opennms-container/sentinel/container-fs/etc/org.opennms.core.ipc.sink.kafka.consumer.cfg b/opennms-container/sentinel/container-fs/etc/org.opennms.core.ipc.sink.kafka.consumer.cfg deleted file mode 100644 index 50d019d5fd18..000000000000 --- a/opennms-container/sentinel/container-fs/etc/org.opennms.core.ipc.sink.kafka.consumer.cfg +++ /dev/null @@ -1 +0,0 @@ -bootstrap.servers=${env:KAFKA_IPC_BOOTSTRAP_SERVERS:-kafka:29092} diff --git a/opennms-container/sentinel/container-fs/etc/org.opennms.features.flows.persistence.elastic.cfg b/opennms-container/sentinel/container-fs/etc/org.opennms.features.flows.persistence.elastic.cfg deleted file mode 100644 index 0f471871bf60..000000000000 --- a/opennms-container/sentinel/container-fs/etc/org.opennms.features.flows.persistence.elastic.cfg +++ /dev/null @@ -1 +0,0 @@ -elasticUrl=${env:ELASTICSEARCH_URL:-http://elasticsearch:9200}