<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>User Guide on gNMIc Operator</title><link>https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/</link><description>Recent content in User Guide on gNMIc Operator</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/index.xml" rel="self" type="application/rss+xml"/><item><title>Cluster</title><link>https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/cluster/</guid><description>&lt;p>The &lt;code>Cluster&lt;/code> resource defines a gNMIc collector deployment. It creates a StatefulSet, headless Service, Certificates, and manages the initial configuration for the gNMIc pods.&lt;/p>
&lt;h2 id="basic-configuration">Basic Configuration&lt;/h2>
&lt;p>This CR creates a gNMIc cluster of 3 pods based on the referenced container image.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">apiVersion&lt;/span>: &lt;span style="color:#ae81ff">operator.gnmic.dev/v1alpha1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">kind&lt;/span>: &lt;span style="color:#ae81ff">Cluster&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">telemetry-cluster&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">replicas&lt;/span>: &lt;span style="color:#ae81ff">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">image&lt;/span>: &lt;span style="color:#ae81ff">ghcr.io/openconfig/gnmic:latest&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="spec-fields">Spec Fields&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Field&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Required&lt;/th>
 &lt;th>Default&lt;/th>
 &lt;th>Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>replicas&lt;/code>&lt;/td>
 &lt;td>int32&lt;/td>
 &lt;td>Yes&lt;/td>
 &lt;td>1&lt;/td>
 &lt;td>Number of gNMIc pods to run&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>image&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>Yes&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>Container image for gNMIc&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>API&lt;/strong>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>api&lt;/code>&lt;/td>
 &lt;td>APIConfig&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>REST API and gNMI server configurations&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>api.restPort&lt;/code>&lt;/td>
 &lt;td>int32&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>7890&lt;/td>
 &lt;td>Port for REST API&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>api.gnmiPort&lt;/code>&lt;/td>
 &lt;td>int32&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>Port for gNMI server (optional)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>api.tls&lt;/code>&lt;/td>
 &lt;td>ClusterTLSConfig&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>TLS for REST API (operator ↔ pods)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>api.tls.issuerRef&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>CertManager Issuer reference, used to sign the REST API certificates&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>api.tls.bundleRef&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>ConfigMap reference, used to add API server trust bundles to the POD (key=&lt;code>ca.crt&lt;/code>)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>api.tls.useCSIDriver&lt;/code>&lt;/td>
 &lt;td>bool&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>If true the API certificates are generated and mounted using CertManager CSI Driver&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>gNMI client TLS&lt;/strong>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>clientTLS&lt;/code>&lt;/td>
 &lt;td>ClusterTLSConfig&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>TLS for gNMI client (pods → targets)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>clientTLS.issuerRef&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>CertManager Issuer reference, used to sign the gNMI client certificates&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>clientTLS.bundleRef&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>ConfigMap reference, used to add gNMI client trust bundles to the POD (key=&lt;code>ca.crt&lt;/code>)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>clientTLS.useCSIDriver&lt;/code>&lt;/td>
 &lt;td>bool&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>If true the gNMI client certificates are generated and mounted using CertManager CSI Driver&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Target Distribution&lt;/strong>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>targetDistribution&lt;/code>&lt;/td>
 &lt;td>TargetDistributionConfig&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>Target distribution configuration&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>targetDistribution.perPodCapacity&lt;/code>&lt;/td>
 &lt;td>int&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>ceil(targets/pods)&lt;/td>
 &lt;td>Maximum number of targets assigned to a single pod&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="target-distribution">Target Distribution&lt;/h2>
&lt;p>By default, the operator distributes targets evenly across pods using bounded
load rendezvous hashing with an auto-calculated capacity of
&lt;code>ceil(totalTargets / replicas)&lt;/code>.&lt;/p></description></item><item><title>Pipeline</title><link>https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/pipeline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/pipeline/</guid><description>&lt;p>The &lt;code>Pipeline&lt;/code> resource connects targets, tunnelTargetPolicies, subscriptions, outputs, and inputs together. It defines the flow of telemetry data through the cluster.&lt;/p>
&lt;h2 id="basic-configuration">Basic Configuration&lt;/h2>
&lt;p>The simplest way to configure a &lt;code>Pipeline&lt;/code> is using direct references to &lt;code>tagets&lt;/code>,&lt;code>subscriptions&lt;/code> and &lt;code>outputs&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">apiVersion&lt;/span>: &lt;span style="color:#ae81ff">operator.gnmic.dev/v1alpha1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">kind&lt;/span>: &lt;span style="color:#ae81ff">Pipeline&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">core-telemetry&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">clusterRef&lt;/span>: &lt;span style="color:#ae81ff">telemetry-cluster&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">enabled&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">targetRefs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">router1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">router2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">subscriptionRefs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">interface-counters&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">outputs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">outputRefs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">prometheus-output&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>It can also be configured with &lt;code>labelSelectors&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">apiVersion&lt;/span>: &lt;span style="color:#ae81ff">operator.gnmic.dev/v1alpha1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">kind&lt;/span>: &lt;span style="color:#ae81ff">Pipeline&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">core-telemetry&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">clusterRef&lt;/span>: &lt;span style="color:#ae81ff">telemetry-cluster&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">enabled&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">targetSelectors&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">matchLabels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">role&lt;/span>: &lt;span style="color:#ae81ff">core&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">env&lt;/span>: &lt;span style="color:#ae81ff">prod&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">matchLabels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">role&lt;/span>: &lt;span style="color:#ae81ff">edge&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">env&lt;/span>: &lt;span style="color:#ae81ff">prod&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">subscriptionSelectors&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">matchLabels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">interface-stats&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">outputs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">outputSelectors&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">matchLabels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">prometheus&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">env&lt;/span>: &lt;span style="color:#ae81ff">prod&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The above example build a pipeline that includes:&lt;/p></description></item><item><title>Target &amp; TargetProfile</title><link>https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/target/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/target/</guid><description>&lt;h2 id="target">Target&lt;/h2>
&lt;p>The &lt;code>Target&lt;/code> resource represents a network device to collect telemetry from.
The target definition is kept as simple as possible to remain automation and scale friendly.&lt;/p>
&lt;h3 id="basic-configuration">Basic Configuration&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">apiVersion&lt;/span>: &lt;span style="color:#ae81ff">operator.gnmic.dev/v1alpha1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">kind&lt;/span>: &lt;span style="color:#ae81ff">Target&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">router1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">labels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">vendor&lt;/span>: &lt;span style="color:#ae81ff">vendorA&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">role&lt;/span>: &lt;span style="color:#ae81ff">core&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">site&lt;/span>: &lt;span style="color:#ae81ff">dc1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">address&lt;/span>: &lt;span style="color:#ae81ff">10.0.0.1&lt;/span>:&lt;span style="color:#ae81ff">57400&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">profile&lt;/span>: &lt;span style="color:#ae81ff">default-profile&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="spec-fields">Spec Fields&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Field&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Required&lt;/th>
 &lt;th>Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>address&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>Yes&lt;/td>
 &lt;td>Device address (host:port)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>profile&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>Yes&lt;/td>
 &lt;td>Reference to TargetProfile&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="using-labels">Using Labels&lt;/h3>
&lt;p>Labels are essential for pipeline selection.
Any label can be used but some obvious ones include:&lt;/p></description></item><item><title>TargetSource</title><link>https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/targetsource/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/targetsource/</guid><description>&lt;p>The &lt;code>TargetSource&lt;/code> resource enables dynamic discovery of network devices from external sources. The operator automatically creates, updates, and deletes &lt;code>Target&lt;/code> resources based on discovered devices.&lt;/p>
&lt;h2 id="discovery-sources">Discovery Sources&lt;/h2>
&lt;p>TargetSource supports multiple discovery backends:&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Source&lt;/th>
 &lt;th>Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>http&lt;/code>&lt;/td>
 &lt;td>Fetch targets from an HTTP endpoint&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>consul&lt;/code>&lt;/td>
 &lt;td>Discover targets from Consul service registry&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>configMap&lt;/code>&lt;/td>
 &lt;td>Read targets from a Kubernetes ConfigMap&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>podSelector&lt;/code>&lt;/td>
 &lt;td>Create targets from Kubernetes Pods&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>serviceSelector&lt;/code>&lt;/td>
 &lt;td>Create targets from Kubernetes Services&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="http-discovery">HTTP Discovery&lt;/h2>
&lt;p>Discover targets from an HTTP endpoint that returns a JSON list of targets:&lt;/p></description></item><item><title>Subscription</title><link>https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/subscription/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/subscription/</guid><description>&lt;p>The &lt;code>Subscription&lt;/code> resource defines what telemetry data to collect from targets.&lt;/p>
&lt;h2 id="basic-configuration">Basic Configuration&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">apiVersion&lt;/span>: &lt;span style="color:#ae81ff">operator.gnmic.dev/v1alpha1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">kind&lt;/span>: &lt;span style="color:#ae81ff">Subscription&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">interface-counters&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">labels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">interfaces&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">paths&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">/interfaces/interface/state/counters&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">mode&lt;/span>: &lt;span style="color:#ae81ff">STREAM/SAMPLE&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">sampleInterval&lt;/span>: &lt;span style="color:#ae81ff">10s&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="spec-fields">Spec Fields&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Field&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Required&lt;/th>
 &lt;th>Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>paths&lt;/code>&lt;/td>
 &lt;td>[]string&lt;/td>
 &lt;td>Yes&lt;/td>
 &lt;td>YANG paths to subscribe to&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>mode&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>Subscription mode: &lt;code>ONCE&lt;/code>, &lt;code>STREAM/SAMPLE&lt;/code>, &lt;code>STREAM/ON_CHANGE&lt;/code>, &lt;code>STREAM/TARGET_DEFINED&lt;/code>, &lt;code>POLL&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>sampleInterval&lt;/code>&lt;/td>
 &lt;td>duration&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>Sampling interval for &lt;code>STREAM/SAMPLE&lt;/code> mode&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>encoding&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>Data encoding: &lt;code>json&lt;/code>, &lt;code>json_ietf&lt;/code>, &lt;code>proto&lt;/code>, &lt;code>ascii&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>prefix&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>Common path prefix&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="subscription-modes">Subscription Modes&lt;/h2>
&lt;h3 id="stream-mode-default">Stream Mode (Default)&lt;/h3>
&lt;p>Continuous streaming of telemetry data:&lt;/p></description></item><item><title>Output</title><link>https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/output/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/output/</guid><description>&lt;p>The &lt;code>Output&lt;/code> resource defines where telemetry data is sent. gNMIc supports many output types including Prometheus, Kafka, InfluxDB, and more.&lt;/p>
&lt;h2 id="basic-configuration">Basic Configuration&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">apiVersion&lt;/span>: &lt;span style="color:#ae81ff">operator.gnmic.dev/v1alpha1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">kind&lt;/span>: &lt;span style="color:#ae81ff">Output&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">prometheus-output&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">prometheus &lt;/span> &lt;span style="color:#75715e"># The output type&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">config&lt;/span>: {} &lt;span style="color:#75715e"># Output specific config fields&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="spec-fields">Spec Fields&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Field&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Required&lt;/th>
 &lt;th>Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>type&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>Yes&lt;/td>
 &lt;td>Output type (prometheus, kafka, influxdb, etc.)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>config&lt;/code>&lt;/td>
 &lt;td>object&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>Type-specific configuration (schemaless)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>service&lt;/code>&lt;/td>
 &lt;td>OutputServiceSpec&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>Kubernetes Service configuration. This is the service exposing the output endpoint (Prometheus only).&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>serviceRef&lt;/code>&lt;/td>
 &lt;td>ServiceReference&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>Reference to a Kubernetes Service for address resolution&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>serviceSelector&lt;/code>&lt;/td>
 &lt;td>ServiceSelector&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>Label selector to discover Kubernetes Services&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="service">Service&lt;/h3>
&lt;p>Defines the Service type, labels and annotations that will be created when the output has &lt;code>type=prometheus&lt;/code>.&lt;/p></description></item><item><title>Input</title><link>https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/input/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/input/</guid><description>&lt;p>The &lt;code>Input&lt;/code> resource defines external data sources that feed telemetry data into the gNMIc cluster. This enables processing data from sources like Kafka, NATS, or other gNMIc instances.&lt;/p>
&lt;h2 id="basic-configuration">Basic Configuration&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">apiVersion&lt;/span>: &lt;span style="color:#ae81ff">operator.gnmic.dev/v1alpha1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">kind&lt;/span>: &lt;span style="color:#ae81ff">Input&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">kafka-input&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">kafka&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">brokers&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">kafka:9092&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">topics&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">telemetry-raw&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">group&lt;/span>: &lt;span style="color:#ae81ff">gnmic-processors&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="spec-fields">Spec Fields&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Field&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Required&lt;/th>
 &lt;th>Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>type&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>Yes&lt;/td>
 &lt;td>Input type (kafka, nats, etc.)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>config&lt;/code>&lt;/td>
 &lt;td>object&lt;/td>
 &lt;td>Yes&lt;/td>
 &lt;td>Type-specific configuration (schemaless)&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="kafka-input">Kafka Input&lt;/h2>
&lt;p>Consume telemetry from Kafka topics:&lt;/p></description></item><item><title>Processor</title><link>https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/processor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/processor/</guid><description>&lt;p>The &lt;code>Processor&lt;/code> resource defines event transformations applied to telemetry data. Processors can filter, enrich, transform, or drop events as they flow through the gNMIc cluster.&lt;/p>
&lt;h2 id="basic-configuration">Basic Configuration&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">apiVersion&lt;/span>: &lt;span style="color:#ae81ff">operator.gnmic.dev/v1alpha1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">kind&lt;/span>: &lt;span style="color:#ae81ff">Processor&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">add-cluster-tag&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">event-add-tag&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">add&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">cluster&lt;/span>: &lt;span style="color:#ae81ff">production&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">region&lt;/span>: &lt;span style="color:#ae81ff">us-east-1&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="spec-fields">Spec Fields&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Field&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Required&lt;/th>
 &lt;th>Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>type&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>Yes&lt;/td>
 &lt;td>Processor type (event-add-tag, event-drop, event-strings, etc.)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>config&lt;/code>&lt;/td>
 &lt;td>object&lt;/td>
 &lt;td>Yes&lt;/td>
 &lt;td>Type-specific configuration (schemaless)&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="processor-types">Processor Types&lt;/h2>
&lt;h3 id="event-add-tag">Event Add Tag&lt;/h3>
&lt;p>Add static tags to events:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">apiVersion&lt;/span>: &lt;span style="color:#ae81ff">operator.gnmic.dev/v1alpha1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">kind&lt;/span>: &lt;span style="color:#ae81ff">Processor&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">add-metadata&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#ae81ff">event-add-tag&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">add&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">environment&lt;/span>: &lt;span style="color:#ae81ff">production&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">datacenter&lt;/span>: &lt;span style="color:#ae81ff">dc1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">overwrite&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="event-drop">Event Drop&lt;/h3>
&lt;p>Drop events matching a condition:&lt;/p></description></item><item><title>TunnelTargetPolicy</title><link>https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/tunneltargetpolicy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://fbe70dc2.gnmic-operator2.pages.dev/docs/user-guide/tunneltargetpolicy/</guid><description>&lt;p>The &lt;code>TunnelTargetPolicy&lt;/code> resource defines rules for matching devices that connect via gRPC tunnel and associates them with configuration from a &lt;code>TargetProfile&lt;/code>.&lt;/p>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>In gRPC tunnel mode, network devices initiate connections to the gNMIc collector (reverse of traditional polling). When a device connects, it identifies itself with a &lt;strong>type&lt;/strong> and &lt;strong>ID&lt;/strong>. The &lt;code>TunnelTargetPolicy&lt;/code> defines matching rules to:&lt;/p>
&lt;ol>
&lt;li>Identify which tunnel-connected devices to accept&lt;/li>
&lt;li>Apply configuration (credentials, TLS settings) from a TargetProfile&lt;/li>
&lt;li>Enable subscription collection on matching devices&lt;/li>
&lt;/ol>
&lt;h2 id="basic-configuration">Basic Configuration&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">apiVersion&lt;/span>: &lt;span style="color:#ae81ff">operator.gnmic.dev/v1alpha1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">kind&lt;/span>: &lt;span style="color:#ae81ff">TunnelTargetPolicy&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">core-routers&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">match&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">type&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;router&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">id&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;^core-.*&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">profile&lt;/span>: &lt;span style="color:#ae81ff">router-profile&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="spec-fields">Spec Fields&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Field&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Required&lt;/th>
 &lt;th>Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>match&lt;/code>&lt;/td>
 &lt;td>TunnelTargetMatch&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>Match criteria (if not set, matches all targets)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>match.type&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>Regex pattern to match target type&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>match.id&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>No&lt;/td>
 &lt;td>Regex pattern to match target ID&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>profile&lt;/code>&lt;/td>
 &lt;td>string&lt;/td>
 &lt;td>Yes&lt;/td>
 &lt;td>Reference to a TargetProfile&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="match-patterns">Match Patterns&lt;/h2>
&lt;p>Both &lt;code>type&lt;/code> and &lt;code>id&lt;/code> fields support Go regular expressions.&lt;/p></description></item></channel></rss>