// Module included in the following assemblies:
//
// *scalability_and_performance/cluster-compare/using-the-cluster-compare-plugin.adoc

:_mod-docs-content-type: PROCEDURE

[id="using-cluster-compare-telco_ref_{context}"]
= Example: Comparing a cluster with the telco core reference configuration

[role="_abstract"]
You can use the `cluster-compare` plugin to compare a reference configuration with a configuration from a live cluster or `must-gather` data.

This example compares a configuration from a live cluster with the telco core reference configuration. The telco core reference configuration is derived from the telco core reference design specifications (RDS). The telco core RDS is designed for clusters to support large scale telco applications including control plane and some centralized data plane functions.

The reference configuration is packaged in a container image with the telco core RDS.

For further examples of using the `cluster-compare` plugin with the telco core and telco RAN distributed unit (DU) profiles, see the "Additional resources" section.

.Prerequisites

* You have access to the cluster as a user with the `cluster-admin` role.

* You have credentials to access the `registry.redhat.io` container image registry.

* You installed the `cluster-compare` plugin.

.Procedure

. Log on to the container image registry with your credentials by running the following command:
+
[source,terminal]
----
$ podman login registry.redhat.io
----

. Extract the content from the `telco-core-rds-rhel9` container image by running the following commands:
+
[source,terminal]
----
$ mkdir -p ./out
----
+
[source,terminal]
----
$ podman run -it registry.redhat.io/openshift4/openshift-telco-core-rds-rhel9:v4.18 | base64 -d | tar xv -C out
----
+
You can view the reference configuration in the `reference-crs-kube-compare/` directory.
+
[source,text]
----
out/telco-core-rds/configuration/reference-crs-kube-compare/
├── metadata.yaml
├── optional
│   ├── logging
│   ├── networking
│   ├── other
│   └── tuning
└── required
    ├── networking
    ├── other
    ├── performance
    ├── scheduling
    └── storage
----
+
where:

`metadata.yaml`:: Configuration file for the reference configuration.
`optional`:: Directory for optional templates.
`required`:: Directory for required templates.

. Compare the configuration for your cluster to the telco core reference configuration by running the following command:
+
[source,terminal]
----
$ oc cluster-compare -r out/telco-core-rds/configuration/reference-crs-kube-compare/metadata.yaml
----
+
The following is example output:
+
[source,terminal]
----
W1212 14:13:06.281590   36629 compare.go:425] Reference Contains Templates With Types (kind) Not Supported By Cluster: BFDProfile, BGPAdvertisement, BGPPeer, ClusterLogForwarder, Community, IPAddressPool, MetalLB, MultiNetworkPolicy, NMState, NUMAResourcesOperator, NUMAResourcesScheduler, NodeNetworkConfigurationPolicy, SriovNetwork, SriovNetworkNodePolicy, SriovOperatorConfig, StorageCluster

...

**********************************

Cluster CR: config.openshift.io/v1_OperatorHub_cluster
Reference File: required/other/operator-hub.yaml
Diff Output: diff -u -N /tmp/MERGED-2801470219/config-openshift-io-v1_operatorhub_cluster /tmp/LIVE-2569768241/config-openshift-io-v1_operatorhub_cluster
--- /tmp/MERGED-2801470219/config-openshift-io-v1_operatorhub_cluster	2024-12-12 14:13:22.898756462 +0000
+++ /tmp/LIVE-2569768241/config-openshift-io-v1_operatorhub_cluster	2024-12-12 14:13:22.898756462 +0000
@@ -1,6 +1,6 @@
 apiVersion: config.openshift.io/v1
 kind: OperatorHub
 metadata:
+  annotations:
+    include.release.openshift.io/hypershift: "true"
   name: cluster
-spec:
-  disableAllDefaultSources: true

**********************************

Summary
CRs with diffs: 3/4
CRs in reference missing from the cluster: 22
other:
  other:
    Missing CRs:
    - optional/other/control-plane-load-kernel-modules.yaml
    - optional/other/worker-load-kernel-modules.yaml
required-networking:
  networking-root:
    Missing CRs:
    - required/networking/nodeNetworkConfigurationPolicy.yaml
  networking-sriov:
    Missing CRs:
    - required/networking/sriov/sriovNetwork.yaml
    - required/networking/sriov/sriovNetworkNodePolicy.yaml
    - required/networking/sriov/SriovOperatorConfig.yaml
    - required/networking/sriov/SriovSubscription.yaml
    - required/networking/sriov/SriovSubscriptionNS.yaml
    - required/networking/sriov/SriovSubscriptionOperGroup.yaml
required-other:
  scheduling:
    Missing CRs:
    - required/other/catalog-source.yaml
    - required/other/icsp.yaml
required-performance:
  performance:
    Missing CRs:
    - required/performance/PerformanceProfile.yaml
required-scheduling:
  scheduling:
    Missing CRs:
    - required/scheduling/nrop.yaml
    - required/scheduling/NROPSubscription.yaml
    - required/scheduling/NROPSubscriptionNS.yaml
    - required/scheduling/NROPSubscriptionOperGroup.yaml
    - required/scheduling/sched.yaml
required-storage:
  storage-odf:
    Missing CRs:
    - required/storage/odf-external/01-rook-ceph-external-cluster-details.secret.yaml
    - required/storage/odf-external/02-ocs-external-storagecluster.yaml
    - required/storage/odf-external/odfNS.yaml
    - required/storage/odf-external/odfOperGroup.yaml
    - required/storage/odf-external/odfSubscription.yaml
No CRs are unmatched to reference CRs
Metadata Hash: fe41066bac56517be02053d436c815661c9fa35eec5922af25a1be359818f297
No patched CRs
----
+
where:

`Cluster CR`:: The CR under comparison. The plugin displays each CR with a difference from the corresponding template.
`Reference File`:: The template matching with the CR for comparison.
`Diff Output`:: The output in Linux diff format shows the difference between the template and the cluster CR.
`Summary`:: After the plugin reports the line diffs for each CR, the summary of differences are reported.
`CRs with diffs`:: The number of CRs in the comparison with differences from the corresponding templates.
`CRs in reference missing from the cluster`:: The number of CRs represented in the reference configuration, but missing from the live cluster.
`Missing CRs`:: The list of CRs represented in the reference configuration, but missing from the live cluster.
`No CRs are unmatched to reference CRs`:: The CRs that did not match to a corresponding template in the reference configuration.
`Metadata Hash`:: The metadata hash identifies the reference configuration.
`No patched CRs`:: The list of patched CRs.

[NOTE]
====
Get the output in the `junit` format by adding `-o junit` to the command. For example:
[source,terminal]
----
$ oc cluster-compare -r out/telco-core-rds/configuration/reference-crs-kube-compare/metadata.yaml -o junit
----

The `junit` output includes the following result types:

* Passed results for each fully matched template.
* Failed results for differences found or missing required custom resources (CRs).
* Skipped results for differences patched using the user override mechanism.
====
