// Module included in the following assemblies:
//
// * service_mesh/v2x/customizing-installation-ossm.adoc

:_mod-docs-content-type: REFERENCE
[id="ossm-cr-example_{context}"]
= {SMProductShortName} Control plane parameters

The following table lists the top-level parameters for the `ServiceMeshControlPlane` resource.

.`ServiceMeshControlPlane` resource parameters
|===
|Name |Description |Type

|`apiVersion`
|APIVersion defines the versioned schema of this representation of an object. Servers convert recognized schemas to the latest internal value, and may reject unrecognized values. The value for the `ServiceMeshControlPlane` version 2.0 is `maistra.io/v2`.
|The value for `ServiceMeshControlPlane` version 2.0 is `maistra.io/v2`.

|`kind`
|Kind is a string value that represents the REST resource this object represents.
|`ServiceMeshControlPlane` is the only valid value for a ServiceMeshControlPlane.

|`metadata`
|Metadata about this `ServiceMeshControlPlane` instance. You can provide a name for your {SMProductShortName} control plane installation to keep track of your work, for example, `basic`.
|string

|`spec`
|The specification of the desired state of this `ServiceMeshControlPlane`. This includes the configuration options for all components that comprise the {SMProductShortName} control plane.
|For more information, see Table 2.

|`status`
|The current status of this `ServiceMeshControlPlane` and the components that comprise the {SMProductShortName} control plane.
|For more information, see Table 3.
|===

The following table lists the specifications for the `ServiceMeshControlPlane` resource. Changing these parameters configures {SMProductName} components.

.`ServiceMeshControlPlane` resource spec
|===
|Name |Description |Configurable parameters

|`addons`
| The `addons` parameter configures additional features beyond core {SMProductShortName} control plane components, such as visualization, or metric storage.
|`3scale`, `grafana`, `jaeger`, `kiali`, and `prometheus`.

|`cluster`
|The `cluster` parameter sets the general configuration of the cluster (cluster name, network name, multi-cluster, mesh expansion, etc.)
|`meshExpansion`, `multiCluster`, `name`, and `network`

|`gateways`
| You use the `gateways` parameter to configure ingress and egress gateways for the mesh.
|`enabled`, `additionalEgress`, `additionalIngress`, `egress`, `ingress`, and  `openshiftRoute`

|`general`
|The `general` parameter represents general {SMProductShortName} control plane configuration that does not fit anywhere else.
|`logging` and `validationMessages`

|`policy`
|You use the `policy` parameter to configure policy checking for the {SMProductShortName} control plane. Policy checking can be enabled by setting `spec.policy.enabled` to `true`.
|`mixer` `remote`, or `type`. `type` can be set to `Istiod`, `Mixer` or `None`.

|`profiles`
|You select the `ServiceMeshControlPlane` profile to use for default values using the `profiles` parameter.
|`default`

|`proxy`
| You use the `proxy` parameter to configure the default behavior for sidecars.
|`accessLogging`, `adminPort`, `concurrency`, and `envoyMetricsService`

|`runtime`
| You use the `runtime` parameter to configure the {SMProductShortName} control plane components.
|`components`, and `defaults`

|`security`
| The `security` parameter allows you to configure aspects of security for the {SMProductShortName} control plane.
|`certificateAuthority`, `controlPlane`, `identity`, `dataPlane` and `trust`

|`techPreview`
|The `techPreview` parameter enables early access to features that are in technology preview.
|N/A

|`telemetry`
|If `spec.mixer.telemetry.enabled` is set to `true`, telemetry is enabled.
|`mixer`, `remote`, and `type`. `type` can be set to `Istiod`, `Mixer` or `None`.

|`tracing`
|You use the `tracing` parameter to enables distributed tracing for the mesh.
|`sampling`, `type`. `type` can be set to `Jaeger` or `None`.

|`version`
|You use the `version` parameter to specify what Maistra version of the {SMProductShortName} control plane to install. When creating a `ServiceMeshControlPlane` with an empty version, the admission webhook sets the version to the current version. New `ServiceMeshControlPlanes` with an empty version are set to `v2.0`. Existing `ServiceMeshControlPlanes` with an empty version keep their setting.
|string
|===

`ControlPlaneStatus` represents the current state of your service mesh.

.`ServiceMeshControlPlane` resource `ControlPlaneStatus`
|===
|Name |Description |Type

|`annotations`
|The `annotations` parameter stores additional, usually redundant status information, such as the number of components deployed by the `ServiceMeshControlPlane`. These statuses are used by the command-line tool, `oc`, which does not yet allow counting objects in JSONPath expressions.
|Not configurable

|`conditions`
|Represents the latest available observations of the object's current state. `Reconciled` indicates whether the operator has finished reconciling the actual state of deployed components with the configuration in the `ServiceMeshControlPlane` resource. `Installed` indicates whether the {SMProductShortName} control plane has been installed. `Ready` indicates whether all {SMProductShortName} control plane components are ready.
|string

|`components`
|Shows the status of each deployed {SMProductShortName} control plane component.
|string

|`appliedSpec`
|The resulting specification of the configuration options after all profiles have been applied.
|`ControlPlaneSpec`

|`appliedValues`
|The resulting values.yaml used to generate the charts.
|`ControlPlaneSpec`

|`chartVersion`
|The version of the charts that were last processed for this resource.
|string

|`observedGeneration`
|The generation observed by the controller during the most recent reconciliation. The information in the status pertains to this particular generation of the object. The `status.conditions` are not up-to-date if the `status.observedGeneration` field does not match `metadata.generation`.
|integer

|`operatorVersion`
|The version of the operator that last processed this resource.
|string

|`readiness`
|The readiness status of components & owned resources.
|string
|===


This example `ServiceMeshControlPlane` definition contains all of the supported parameters.

.Example `ServiceMeshControlPlane` resource
[source,yaml, subs="attributes,verbatim"]
----
apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
  name: basic
spec:
  version: v{MaistraVersion}
  proxy:
    runtime:
      container:
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 500m
            memory: 128Mi
  tracing:
    type: Jaeger
  gateways:
    ingress: # istio-ingressgateway
      service:
        type: ClusterIP
        ports:
        - name: status-port
          port: 15020
        - name: http2
          port: 80
          targetPort: 8080
        - name: https
          port: 443
          targetPort: 8443
      meshExpansionPorts: []
    egress: # istio-egressgateway
      service:
        type: ClusterIP
        ports:
        - name: status-port
          port: 15020
        - name: http2
          port: 80
          targetPort: 8080
        - name: https
          port: 443
          targetPort: 8443
    additionalIngress:
      some-other-ingress-gateway: {}
    additionalEgress:
      some-other-egress-gateway: {}

  policy:
    type: Mixer
    mixer: # only applies if policy.type: Mixer
      enableChecks: true
      failOpen: false

  telemetry:
    type: Istiod # or Mixer
    mixer: # only applies if telemetry.type: Mixer, for v1 telemetry
      sessionAffinity: false
      batching:
        maxEntries: 100
        maxTime: 1s
      adapters:
        kubernetesenv: true
        stdio:
          enabled: true
          outputAsJSON: true
  addons:
    grafana:
      enabled: true
      install:
        config:
          env: {}
          envSecrets: {}
        persistence:
          enabled: true
          storageClassName: ""
          accessMode: ReadWriteOnce
          capacity:
            requests:
              storage: 5Gi
        service:
          ingress:
            contextPath: /grafana
            tls:
              termination: reencrypt
    kiali:
      name: kiali
      enabled: true
      install: # install kiali CR if not present
        dashboard:
          viewOnly: false
          enableGrafana: true
          enableTracing: true
          enablePrometheus: true
      service:
        ingress:
          contextPath: /kiali
    jaeger:
      name: jaeger
      install:
        storage:
          type: Elasticsearch # or Memory
          memory:
            maxTraces: 100000
          elasticsearch:
            nodeCount: 3
            storage: {}
            redundancyPolicy: SingleRedundancy
            indexCleaner: {}
        ingress: {} # jaeger ingress configuration
  runtime:
    components:
      pilot:
        deployment:
          replicas: 2
        pod:
          affinity: {}
        container:
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 500m
              memory: 128Mi
      grafana:
        deployment: {}
        pod: {}
      kiali:
        deployment: {}
        pod: {}
----
