Resolving Out-of-Sync App Connect Resources in OpenShift GitOps
When managing IBM App Connect in containers (part of IBM Integration Software, formerly Cloud Pak for Integration) with OpenShift GitOps (Argo CD), newly deployed IntegrationRuntime and Configuration resources can immediately appear OutOfSync.
This occurs because the App Connect operator automatically mutates live Custom Resources (CRs) after creation by injecting default configurations and migrating inline data to secrets.
Note on Naming: Cloud Pak for Integration has been renamed to IBM Integration Software. While operator license annotations and fields (such as
use: CloudPakForIntegrationNonProductionFREE) may still carry the legacy identifiers for backward compatibility, the platform itself is now IBM Integration Software.
Issue 1: IntegrationRuntime Auto-Injected Configurations
By default, an IntegrationRuntime enables both the admin REST interface and the MCP (Model Context Protocol) server. If you do not specify configuration objects for these features, the operator automatically provisions them and appends two entries to spec.configurations on the live cluster:
<runtime-name>-mcp-ba-creds<runtime-name>-ir-adminssl
Example
You declare this resource in your Git repository:
apiVersion: appconnect.ibm.com/v1beta1
kind: IntegrationRuntime
metadata:
name: greetingapi1
spec:
license:
accept: true
license: L-RJGW-BUAA2R
use: CloudPakForIntegrationNonProductionFREE
barURL:
- https://gitea.example.com/barfiles/raw/branch/main/greetingapiv1.bar
configurations:
- barauth-empty
logFormat: basic
version: "13.0.8"
The operator mutates the live resource on the cluster:
spec:
configurations:
- barauth-empty
- greetingapi1-mcp-ba-creds
- greetingapi1-ir-adminssl
Because Git only contains barauth-empty, Argo CD reports the resource as OutOfSync.
Solutions
-
Disable MCP if unused (Recommended for MCP): If you are not using the MCP server, disable it explicitly in Git under
spec.mcp.runtime.disabled:spec: mcp: runtime: disabled: trueThis prevents the operator from injecting
<name>-mcp-ba-creds. -
Handle the Admin SSL Configuration: For
*-ir-adminssl, you can either pre-create and declare your own admin SSLConfigurationobject in Git (recommended), or configure Argo CD to ignore the generated configuration in its diff calculation.To ignore the generated SSL configuration across all
IntegrationRuntimeresources, add aresourceIgnoreDifferencesentry to yourArgoCDcustom resource:spec: resourceIgnoreDifferences: resourceIdentifiers: - group: appconnect.ibm.com kind: IntegrationRuntime customization: jqPathExpressions: - '.spec.configurations[] | select(endswith("-ir-adminssl"))'You can use similar configuration in a GitOps
Applicationif you don’t control the whole GitOps installation. Use the same block, but underspec.ignoreDifferences.
Issue 2: Configuration Resources Mutating spec.data
When you create a Configuration resource that defines inline base64 data using spec.data, the operator extracts the payload into an automatically generated Secret, removes spec.data from the CR on the cluster, and sets spec.secretName and spec.version.
Example
You declare this in Git:
apiVersion: appconnect.ibm.com/v1beta1
kind: Configuration
metadata:
name: barauth-empty
spec:
type: barauth
description: Empty BarAuth file for git access.
data: eyJhdXRoVHlwZSI6IkJBU0lDX0FVVEgiLCJjcmVkZW50aWFscyI6eyJ1c2VybmFtZSI6IiIsInBhc3N3b3JkIjoiIn19Cg==
On the cluster, the operator updates it to:
spec:
type: barauth
description: Empty BarAuth file for git access.
secretName: barauth-empty-bpq5l
version: 13.0.8.2-r1
Argo CD flags the missing spec.data as a live diff.
Solutions
-
Create the Secret directly (Recommended): Instead of embedding
spec.datadirectly in theConfigurationCR, manage the KubernetesSecretexplicitly with GitOps (leveraging Sealed Secrets, External Secrets, or SOPS for sensitive values) and reference it withspec.secretName:apiVersion: v1 kind: Secret metadata: name: barauth-empty-secret type: Opaque data: configuration: eyJhdXRoVHlwZSI6IkJBU0lDX0FVVEgiLCJjcmVkZW50aWFscyI6eyJ1c2VybmFtZSI6IiIsInBhc3N3b3JkIjoiIn19Cg== --- apiVersion: appconnect.ibm.com/v1beta1 kind: Configuration metadata: name: barauth-empty spec: type: barauth description: Empty BarAuth file for git access. secretName: barauth-empty-secret -
Ignore
spec.datadifferences in Argo CD: If you want to keep inlinespec.datain Git, configure theArgoCDCR to ignore.spec.datadifferences onConfigurationresources:spec: resourceIgnoreDifferences: resourceIdentifiers: - group: appconnect.ibm.com kind: Configuration customization: jqPathExpressions: - .spec.data