// AsciiDoc settings
:data-uri!:
:doctype: book
:experimental:
:idprefix:
:imagesdir: images
:numbered:
:sectanchors!:
:sectnums:
:source-highlighter: highlightjs
:toc: left
:linkattrs:
:toclevels: 3

//Latest Strimzi version
:ProductVersion: 0.24.0
//Strimzi versions used in upgrades sections for API conversions
:ConvertAfterProductVersion: 0.22.0
:ConvertBeforeProductVersion: 0.23.0

// Kubernetes and OpenShift versions
:OpenShiftVersion: 4.3 and later
:KubernetesVersion: 1.16 and later

// Kafka upgrade attributes used in kafka upgrades section
:DefaultKafkaVersion: 2.8.0
:KafkaVersionLower: 2.7.0
:KafkaVersionHigher: 2.8.0
:ExampleImageTagUpgrades: quay.io/strimzi/kafka:{ProductVersion}-kafka-{KafkaVersionHigher}

//log message format version and inter-broker protocol version
:LogMsgVersLower: 2.7
:LogMsgVersHigher: 2.8
:InterBrokVersLower: 2.7
:InterBrokVersHigher: 2.8

// Source and download links
:ReleaseDownload: https://github.com/strimzi/strimzi-kafka-operator/releases[GitHub^]

//Monitoring links
:GrafanaHome: link:https://grafana.com/[Grafana Labs^]
:JMXExporter: link:https://github.com/prometheus/jmx_exporter[JMX Exporter documentation^]
:PrometheusHome: link:https://github.com/prometheus[Prometheus^]
:PrometheusConfig: link:https://prometheus.io/docs/prometheus/latest/configuration/configuration[Configuration^]
:kafka-exporter-project: link:https://github.com/danielqsj/kafka_exporter[Kafka Exporter^]

//OAuth attributes and links
:oauth2-site: link:https://oauth.net/2/[OAuth 2.0 site^]
:keycloak-server-doc: link:https://www.keycloak.org/documentation.html[Keycloak documentation^]
:keycloak-server-install-doc: link:https://www.keycloak.org/docs/latest/server_installation/index.html#_operator[Installing the Keycloak Operator^]
:keycloak-authorization-services: link:https://www.keycloak.org/docs/latest/authorization_services/index.html[Keycloak Authorization Services^]
:oauth-blog: link:https://strimzi.io/2019/10/25/kafka-authentication-using-oauth-2.0.html[Kafka authentication using OAuth 2.0^]
:OAuthVersion: 0.7.2
:oauth-demo-keycloak: link:https://github.com/strimzi/strimzi-kafka-oauth/tree/{OAuthVersion}/examples[Using Keycloak as the OAuth 2.0 authorization server^]
:oauth-demo-hydra: link:https://github.com/strimzi/strimzi-kafka-oauth/tree/{OAuthVersion}/examples/docker#running-with-hydra-using-ssl-and-opaque-tokens[Using Hydra as the OAuth 2.0 authorization server^]

// External links
:aws-ebs: link:https://aws.amazon.com/ebs/[Amazon Elastic Block Store (EBS)^]
:docs-okd: link:https://docs.okd.io/3.11/dev_guide/builds/index.html[builds^]
:docs-okd-s2i: link:https://docs.okd.io/3.11/creating_images/s2i.html[Source-to-Image (S2I)^]
:kafkaDoc: link:https://kafka.apache.org/documentation/[Apache Kafka documentation^]
:KafkaRacks: link:https://kafka.apache.org/documentation/#basic_ops_racks[Kafka racks documentation^]
:K8sAffinity: link:https://kubernetes.io/docs/concepts/configuration/assign-pod-node/[Kubernetes node and pod affinity documentation^]
:K8sTolerations: link:https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/[Kubernetes taints and tolerations^]
:K8sTopologySpreadConstraints: link:https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/[Kubernetes Topology Spread Constraints^]
:K8sEmptyDir: link:https://kubernetes.io/docs/concepts/storage/volumes/#emptydir[emptyDir^]
:K8sPersistentVolumeClaims: link:https://kubernetes.io/docs/concepts/storage/dynamic-provisioning/[Persistent Volume Claims^]
:K8sLocalPersistentVolumes: link:https://kubernetes.io/docs/concepts/storage/volumes/#local[Local persistent volumes^]
:K8SStorageClass: link:https://kubernetes.io/docs/concepts/storage/storage-classes/[Storage Class^]
:K8SJsonPath: link:https://kubernetes.io/docs/reference/kubectl/jsonpath/[JSONPath support^]
:K8sMeaningOfCpu: link:https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-cpu[Meaning of CPU^]
:K8sMeaningOfMemory: link:https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-memory[Meaning of memory^]
:K8sManagingComputingResources: link:https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/[Managing Compute Resources for Containers^]
:K8sLivenessReadinessProbes: link:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/[Configure Liveness and Readiness Probes^]
:K8sPullingImagesFromPrivateRegistries: link:https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/[Pull an Image from a Private Registry^]
:K8sConfigureSecurityContext: link:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/[Configure a Security Context for a Pod or Container^]
:K8sNetworkPolicyPeerAPI: link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#networkpolicypeer-v1-networking-k8s-io[NetworkPolicyPeer API reference^]
:K8sResourceRequirementsAPI: link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#resourcerequirements-v1-core[ResourceRequirements API reference^]
:K8sPodDisruptionBudgets: link:https://kubernetes.io/docs/concepts/workloads/pods/disruptions/[Disruptions^]
:K8sImagePullPolicies: link:https://kubernetes.io/docs/concepts/containers/images/#updating-images[Disruptions^]
:K8sCRDs: link:https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/[Extend the Kubernetes API with CustomResourceDefinitions^]
:K8sResizingPersistentVolumesUsingKubernetes: link:https://kubernetes.io/blog/2018/07/12/resizing-persistent-volumes-using-kubernetes/[Resizing Persistent Volumes using Kubernetes^]
:K8sPriorityClass: link:https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption[Pod Priority and Preemption^]
:K8sServiceDiscovery: https://kubernetes.io/docs/concepts/services-networking/service/#discovering-services[Discovering services^]
:K8sWellKnownLabelsAnnotationsAndTaints: link:https://kubernetes.io/docs/reference/kubernetes-api/labels-annotations-taints/[Well-Known Labels, Annotations and Taints^]
:K8sDockerSecret: link:https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#registry-secret-existing-credentials[Create a Secret based on existing Docker credentials^]
:Minikube: link:https://kubernetes.io/docs/tasks/tools/install-minikube/[Install and start Minikube]
:NginxIngressController: link:https://github.com/kubernetes/ingress-nginx[NGINX Ingress Controller for Kubernetes^]
:NginxIngressControllerTLSPassthrough: link:https://kubernetes.github.io/ingress-nginx/user-guide/tls/#ssl-passthrough[TLS passthrough documentation]
:KubernetesExternalDNS: link:https://github.com/kubernetes-incubator/external-dns[External DNS^]
:ApacheKafkaBrokerConfig: link:http://kafka.apache.org/documentation/#brokerconfigs[Apache Kafka documentation^]
:ApacheKafkaConnectConfig: link:http://kafka.apache.org/documentation/#connectconfigs[Apache Kafka documentation^]
:ApacheZookeeperConfig: link:https://zookeeper.apache.org/doc/r3.5.8/zookeeperAdmin.html[ZooKeeper documentation^]
:ApacheKafkaConsumerConfig: link:http://kafka.apache.org/documentation/#consumerconfigs[Apache Kafka configuration documentation for consumers^]
:ApacheKafkaProducerConfig: link:http://kafka.apache.org/documentation/#producerconfigs[Apache Kafka configuration documentation for producers^]
:ApacheKafkaDownload: link:http://kafka.apache.org/[Apache Kafka download^]
:ApacheLoggers: link:https://logging.apache.org/[Apache logging services^]
:CruiseControlProject: https://github.com/linkedin/cruise-control[Cruise Control^]
:CruiseControlConfigDocs: link:https://github.com/linkedin/cruise-control/wiki/Configurations[Cruise Control documentation]
:CruiseControlApiDocs: https://github.com/linkedin/cruise-control/wiki/REST-APIs[REST APIs in the Cruise Control Wiki]
:JMXExporter: link:https://github.com/prometheus/jmx_exporter[JMX Exporter documentation^]
:CronExpression: link:http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/tutorial-lesson-06.html[cron expression^]
:ExternalListeners: link:https://strimzi.io/2019/04/17/accessing-kafka-part-1.html[Accessing Apache Kafka in Strimzi^]
:OperatorHub: link:https://operatorhub.io/[OperatorHub.io^]
:OperatorLifecycleManager: link:https://github.com/operator-framework/operator-lifecycle-manager[Operator Lifecycle Manager^]
:OLMOperatorDocs: link:https://olm.operatorframework.io/docs/[Operator Lifecycle Manager documentation^]
:OpenTracingHome: link:https://opentracing.io/[OpenTracing^]
:OpenTelemetryHome: link:https://opentelemetry.io/[OpenTelemetry^]
:JaegerHome: link:https://www.jaegertracing.io/[Jaeger^]
:JaegerArch: link:https://www.jaegertracing.io/docs/1.18/architecture/[Jaeger architecure^]
:OpenTracingDocs: link:https://opentracing.io/docs/overview/[OpenTracing documentation^]
:LatestBridgeAPIDocs: link:https://strimzi.io/docs/bridge/latest/[Kafka Bridge API reference^]
:external-cors-link: https://www.w3.org/TR/cors/
:HelmCustomResourceDefinitions: link:https://helm.sh/docs/chart_best_practices/custom_resource_definitions/[Custom Resource Definitions for Helm^]

// Container image names and repositories
:DockerOrg: quay.io/strimzi
:DockerTag: {ProductVersion}
:BridgeDockerTag: {BridgeVersion}
:DockerRepository: https://quay.io/organization/strimzi[Container Registry^]
:DockerZookeeper: quay.io/strimzi/kafka:{DockerTag}-kafka-{DefaultKafkaVersion}
:DockerKafkaImageCurrent: quay.io/strimzi/kafka:{DockerTag}-kafka-{KafkaVersionHigher}
:DockerKafkaImagePrevious: quay.io/strimzi/kafka:{DockerTag}-kafka-{KafkaVersionLower}
:DockerKafka: quay.io/strimzi/kafka:{DockerTag}-kafka-{DefaultKafkaVersion}
:DockerKafkaConnect: quay.io/strimzi/kafka:{DockerTag}-kafka-{DefaultKafkaVersion}
:DockerKafkaConnectS2I: quay.io/strimzi/kafka:{DockerTag}-kafka-{DefaultKafkaVersion}
:DockerClusterOperator: quay.io/strimzi/operator:{DockerTag}
:DockerKafkaInit: quay.io/strimzi/operator:{DockerTag}
:DockerJmxtrans: quay.io/strimzi/jmxtrans:{DockerTag}
:DockerTopicOperator: quay.io/strimzi/operator:{DockerTag}
:DockerUserOperator: quay.io/strimzi/operator:{DockerTag}
:DockerEntityOperatorStunnel: quay.io/strimzi/kafka:{DockerTag}-kafka-{DefaultKafkaVersion}
:DockerKafkaBridge: quay.io/strimzi/kafka-bridge:{BridgeDockerTag}
:DockerImageUser: 1001

// API Versions current
:ApiVersion: v1beta2
:KafkaApiVersion: kafka.strimzi.io/v1beta2
:KafkaConnectApiVersion: kafka.strimzi.io/v1beta2
:KafkaConnectS2IApiVersion: kafka.strimzi.io/v1beta2
:KafkaConnectorApiVersion: kafka.strimzi.io/v1beta2
:KafkaTopicApiVersion: kafka.strimzi.io/v1beta2
:KafkaUserApiVersion: kafka.strimzi.io/v1beta2
:KafkaMirrorMakerApiVersion: kafka.strimzi.io/v1beta2
:KafkaMirrorMaker2ApiVersion: kafka.strimzi.io/v1beta2
:KafkaRebalanceApiVersion: kafka.strimzi.io/v1beta2
:KafkaBridgeApiVersion: kafka.strimzi.io/v1beta2

// API Versions previous
:KafkaApiVersionPrev: kafka.strimzi.io/v1beta1
:KafkaConnectApiVersionPrev: kafka.strimzi.io/v1beta1
:KafkaConnectS2IApiVersionPrev: kafka.strimzi.io/v1beta1
:KafkaTopicApiVersionPrev: kafka.strimzi.io/v1beta1
:KafkaUserApiVersionPrev: kafka.strimzi.io/v1beta1
:KafkaMirrorMakerApiVersionPrev: kafka.strimzi.io/v1beta1
:KafkaConnectorApiVersionPrev: kafka.strimzi.io/v1alpha1
:KafkaMirrorMaker2ApiVersionPrev: kafka.strimzi.io/v1alpha1
:KafkaRebalanceApiVersionPrev: kafka.strimzi.io/v1alpha1
:KafkaBridgeApiVersionPrev: kafka.strimzi.io/v1alpha1

// Tracing versions
:JaegerClientVersion: 1.3.2
:OpenTracingKafkaClient: 0.1.15

// Section enablers
:Helm:
:OperatorHubio:
:StrimziUpgrades:
:InstallationAppendix:
:Metrics:
:Downloading:

//EXCLUSIVE TO STRIMZI
:sectlinks:

// Helm Chart - deploy cluster operator
:ChartName: strimzi-kafka-operator
:ChartReleaseCoordinate: strimzi/strimzi-kafka-operator
:ChartRepositoryUrl: https://strimzi.io/charts/

// Links to other Strimzi documentation books
:BookURLDeploying: ./deploying.html
:BookURLUsing: ./using.html
:BookURLUsingPrevious: https://strimzi.io/docs/operators/0.19.0/using.html

// Link to resource on https://github.com/strimzi/strimzi-kafka-operator
// Default `main`, specific version overriden when building the docs by `make`
:GithubVersion: main
