<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Redfish listener example on ZAPP</title><link>/datacenter/zapp/docs/examples/redfish-listener/</link><description>Recent content in Redfish listener example on ZAPP</description><generator>Hugo</generator><language>en-US</language><atom:link href="/datacenter/zapp/docs/examples/redfish-listener/index.xml" rel="self" type="application/rss+xml"/><item><title>Redfish listener architecture</title><link>/datacenter/zapp/docs/examples/redfish-listener/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/datacenter/zapp/docs/examples/redfish-listener/architecture/</guid><description>&lt;p&gt;The Redfish listener example combines Redfish sensor discovery, a ZAPP Listener pipeline, and ZAPP Aggregator forwarding.&lt;/p&gt;
&lt;p&gt;&lt;img src="/datacenter/zapp/images/docs/redfish-listener-architecture.png" alt="Redfish listener architecture showing baseboard management controller Redfish endpoints, sensor discovery, the listener pipeline, and the ZAPP Aggregator."&gt;
&lt;/p&gt;
&lt;p&gt;The Redfish listener discovers or collects telemetry from Redfish-enabled baseboard management controllers (BMCs) and forwards telemetry to the ZAPP Aggregator.&lt;/p&gt;
&lt;h2 id="main-components"&gt;Main components&lt;/h2&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;strong&gt;BMC Redfish endpoints&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;BMC Redfish endpoints provide sensor metadata and telemetry from managed infrastructure.&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;Sensor pipeline&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;The &lt;code&gt;envPlugins.sensorPipeline&lt;/code&gt; configuration runs before pipeline components start. It loads or discovers sensors and populates the listener sensor manifest.&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;Redfish listener pipeline&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;The listener pipeline runs inside the &lt;code&gt;zapp&lt;/code&gt; container. For Redfish deployments, the pipeline includes Redfish configuration and forwards telemetry to an &lt;code&gt;aggregatorStreamer&lt;/code&gt; component.&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;ZAPP Aggregator&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;The ZAPP Aggregator receives telemetry from the listener and exposes metrics, manifest data, and subscriber gRPC access.&lt;/dd&gt;
&lt;/dl&gt;
&lt;h2 id="data-flow"&gt;Data flow&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;The listener reads the pipeline file and expands environment and secret references.&lt;/li&gt;
&lt;li&gt;The sensor pipeline reads &lt;code&gt;envPlugins.sensorPipeline&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;ZAPP discovers or loads Redfish sensors into the manifest.&lt;/li&gt;
&lt;li&gt;Pipeline components start.&lt;/li&gt;
&lt;li&gt;The listener forwards telemetry to the ZAPP Aggregator.&lt;/li&gt;
&lt;li&gt;Operators inspect &lt;code&gt;/metrics&lt;/code&gt;, &lt;code&gt;/manifest&lt;/code&gt;, or &lt;code&gt;/manifest.json&lt;/code&gt; to validate deployment health.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The Helm chart mounts the pipeline at &lt;code&gt;/config/pipeline.yaml&lt;/code&gt;, mounts Redfish credential files as Kubernetes Secrets, and passes the ZAPP Aggregator address to the listener with &lt;code&gt;--aggregator&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Configure the pipeline</title><link>/datacenter/zapp/docs/examples/redfish-listener/configure-pipeline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/datacenter/zapp/docs/examples/redfish-listener/configure-pipeline/</guid><description>&lt;p&gt;The Redfish listener pipeline is embedded in the listener Helm values under &lt;code&gt;zapp.listeners[].config.pipeline&lt;/code&gt;. The chart mounts the content at &lt;code&gt;/config/pipeline.yaml&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="/datacenter/zapp/images/docs/redfish-pipeline-flow.png" alt="Redfish pipeline flow showing sensor pipeline configuration, pipeline components, and ZAPP Aggregator forwarding."&gt;
&lt;/p&gt;
&lt;p&gt;The Redfish pipeline discovers sensors before components start, then forwards telemetry to the ZAPP Aggregator.&lt;/p&gt;
&lt;h2 id="sensor-pipeline"&gt;Sensor pipeline&lt;/h2&gt;
&lt;p&gt;Configure Redfish endpoints under &lt;code&gt;envPlugins.sensorPipeline&lt;/code&gt;. This block runs before components start and populates the listener manifest.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;envPlugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sensorPipeline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;maxRedfishConnections&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;redfishDevices&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${secrets.redfish_endpoint}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${secrets.redfish_username}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${secrets.redfish_password}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1.11.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;manifest&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/data/redfish-sensor-manifest.yaml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;forceReload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Important fields:&lt;/p&gt;</description></item><item><title>Configure Redfish Secrets</title><link>/datacenter/zapp/docs/examples/redfish-listener/configure-secrets/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/datacenter/zapp/docs/examples/redfish-listener/configure-secrets/</guid><description>&lt;p&gt;Redfish endpoints and credentials should come from Kubernetes Secrets. The listener reads secret files and expands &lt;code&gt;${secrets.&amp;lt;name&amp;gt;}&lt;/code&gt; references before it parses the pipeline YAML.&lt;/p&gt;
&lt;h2 id="secret-keys"&gt;Secret keys&lt;/h2&gt;
&lt;p&gt;The default Redfish listener values use these keys:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;redfish_endpoint
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;redfish_username
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;redfish_password
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The pipeline references them like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;redfishDevices&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${secrets.redfish_endpoint}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${secrets.redfish_username}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${secrets.redfish_password}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="use-an-existing-secret"&gt;Use an existing Secret&lt;/h2&gt;
&lt;p&gt;Use &lt;code&gt;existingSecret&lt;/code&gt; when another system manages the Secret.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;zapp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;listeners&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;redfish&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;secrets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;redfish-credentials&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;existingSecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;redfish-credentials&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mountPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/secrets/redfish&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The Secret must contain a key named &lt;code&gt;redfish-credentials&lt;/code&gt;. The value should be dotenv-style content:&lt;/p&gt;</description></item><item><title>Monitor the Redfish listener</title><link>/datacenter/zapp/docs/examples/redfish-listener/monitor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/datacenter/zapp/docs/examples/redfish-listener/monitor/</guid><description>&lt;p&gt;The listener and ZAPP Aggregator expose HTTP monitoring endpoints when &lt;code&gt;metricsPort&lt;/code&gt; is greater than &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="http-endpoints"&gt;HTTP endpoints&lt;/h2&gt;
&lt;p&gt;Use these endpoints for health and telemetry inspection:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Endpoint&lt;/th&gt;
 &lt;th&gt;Purpose&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/metrics&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Prometheus metrics&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/manifest&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Sensor manifest web page&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/manifest.json&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Sensor manifest JSON&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;On the ZAPP Aggregator, the manifest page also shows connected listeners and sensor counts.&lt;/p&gt;
&lt;h2 id="port-forward-the-zapp-aggregator-manifest"&gt;Port-forward the ZAPP Aggregator manifest&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl --namespace &amp;lt;namespace&amp;gt; port-forward svc/zapp-aggregator-metrics 8888:8888
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Open the manifest page:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;http://localhost:8888/manifest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Request manifest JSON:&lt;/p&gt;</description></item><item><title>Troubleshoot the Redfish listener</title><link>/datacenter/zapp/docs/examples/redfish-listener/troubleshoot/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/datacenter/zapp/docs/examples/redfish-listener/troubleshoot/</guid><description>&lt;p&gt;Start with Kubernetes readiness, then check listener configuration, ZAPP Aggregator connectivity, Redfish access, and telemetry validation.&lt;/p&gt;
&lt;p&gt;&lt;img src="/datacenter/zapp/images/docs/troubleshooting-validation-path.png" alt="Troubleshooting validation path showing Kubernetes checks, manifest and metrics port-forwarding, and zest gRPC validation."&gt;
&lt;/p&gt;
&lt;p&gt;Use Kubernetes checks, HTTP monitoring endpoints, and &lt;code&gt;zest&lt;/code&gt; to isolate Redfish listener deployment problems.&lt;/p&gt;
&lt;h2 id="check-pods-and-releases"&gt;Check pods and releases&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm list --namespace &amp;lt;namespace&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods --namespace &amp;lt;namespace&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get statefulsets --namespace &amp;lt;namespace&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If a pod is not ready, describe it and inspect recent events:&lt;/p&gt;</description></item></channel></rss>