diff --git a/demos/airflow-scheduled-job/03-enable-and-run-spark-dag.yaml b/demos/airflow-scheduled-job/03-enable-and-run-spark-dag.yaml index f61a9aad..88dbc834 100644 --- a/demos/airflow-scheduled-job/03-enable-and-run-spark-dag.yaml +++ b/demos/airflow-scheduled-job/03-enable-and-run-spark-dag.yaml @@ -8,7 +8,7 @@ spec: spec: containers: - name: start-pyspark-job - image: oci.stackable.tech/sdp/tools:1.0.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/tools:1.0.0-stackable25.3.0 # N.B. it is possible for the scheduler to report that a DAG exists, only for the worker task to fail if a pod is unexpectedly # restarted. Additionally, the db-init job takes a few minutes to complete before the cluster is deployed. The wait/watch steps # below are not "water-tight" but add a layer of stability by at least ensuring that the db is initialized and ready and that diff --git a/demos/airflow-scheduled-job/04-enable-and-run-date-dag.yaml b/demos/airflow-scheduled-job/04-enable-and-run-date-dag.yaml index d72fe62c..17329793 100644 --- a/demos/airflow-scheduled-job/04-enable-and-run-date-dag.yaml +++ b/demos/airflow-scheduled-job/04-enable-and-run-date-dag.yaml @@ -8,7 +8,7 @@ spec: spec: containers: - name: start-date-job - image: oci.stackable.tech/sdp/tools:1.0.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/tools:1.0.0-stackable25.3.0 # N.B. it is possible for the scheduler to report that a DAG exists, only for the worker task to fail if a pod is unexpectedly # restarted. Additionally, the db-init job takes a few minutes to complete before the cluster is deployed. The wait/watch steps # below are not "water-tight" but add a layer of stability by at least ensuring that the db is initialized and ready and that diff --git a/demos/data-lakehouse-iceberg-trino-spark/create-nifi-ingestion-job.yaml b/demos/data-lakehouse-iceberg-trino-spark/create-nifi-ingestion-job.yaml index baea7957..4a5d79b2 100644 --- a/demos/data-lakehouse-iceberg-trino-spark/create-nifi-ingestion-job.yaml +++ b/demos/data-lakehouse-iceberg-trino-spark/create-nifi-ingestion-job.yaml @@ -9,11 +9,11 @@ spec: serviceAccountName: demo-serviceaccount initContainers: - name: wait-for-kafka - image: oci.stackable.tech/sdp/tools:1.0.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/tools:1.0.0-stackable25.3.0 command: ["bash", "-c", "echo 'Waiting for all kafka brokers to be ready' && kubectl wait --for=condition=ready --timeout=30m pod -l app.kubernetes.io/instance=kafka -l app.kubernetes.io/name=kafka"] containers: - name: create-nifi-ingestion-job - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: - bash - -euo @@ -50,6 +50,7 @@ data: from nipyapi.security import service_login import nipyapi import os + import requests import urllib3 # As of 2022-08-29 we cant use "https://nifi:8443" here because

The request contained an invalid host header [nifi:8443] in the request [/nifi-api]. Check for request manipulation or third-party intercept.

@@ -66,70 +67,36 @@ data: service_login(username=USERNAME, password=PASSWORD) print("Logged in") - organization = "stackabletech" - repository = "demos" - branch = "main" - version = "main" - directory = "demos/data-lakehouse-iceberg-trino-spark" - flow_name = "LakehouseKafkaIngest" + response = requests.get("https://raw.githubusercontent.com/stackabletech/demos/refs/heads/main/demos/data-lakehouse-iceberg-trino-spark/LakehouseKafkaIngest.json") - # Check if the GitHub flow registry client already exists - flow_registry_clients = nipyapi.nifi.ControllerApi().get_flow_registry_clients().registries + filename = "/tmp/LakehouseKafkaIngest.json" + with open(filename, "wb") as f: + f.write(response.content) - github_client = None - for client in flow_registry_clients: - if client.component.name == "GitHubFlowRegistryClient": - github_client = client - print("Found existing GitHub flow registry client") - break + pg_id = get_root_pg_id() - if not github_client: - print("Creating new GitHub flow registry client") - github_client = nipyapi.nifi.ControllerApi().create_flow_registry_client( - body={ - "revision": {"version": 0}, - "component": { - "name": "GitHubFlowRegistryClient", - "type": "org.apache.nifi.github.GitHubFlowRegistryClient", - "properties": { - "Repository Owner": organization, - "Repository Name": repository, - }, - "bundle": { - "group": "org.apache.nifi", - "artifact": "nifi-github-nar", - "version": "2.2.0", - }, - }, - } - ) + if not nipyapi.config.nifi_config.api_client: + nipyapi.config.nifi_config.api_client = ApiClient() - pg_id = get_root_pg_id() + header_params = {} + header_params['Accept'] = nipyapi.config.nifi_config.api_client.select_header_accept(['application/json']) + header_params['Content-Type'] = nipyapi.config.nifi_config.api_client.select_header_content_type(['multipart/form-data']) - try: - # Create process group from the file in the Git repo - nipyapi.nifi.ProcessGroupsApi().create_process_group( - id=pg_id, - body={ - "revision": {"version": 0}, - "component": { - "position": {"x": 300, "y": 10}, - "versionControlInformation": { - "registryId": github_client.component.id, - "flowId": flow_name, - "bucketId": directory, - "branch": branch, - "version": version, - }, - }, - }, - ) - except ValueError as e: - # Ignore, because nipyapi can't handle non-int versions yet - if "invalid literal for int() with base 10" in str(e): - print("Ignoring ValueError") - else: - raise e + nipyapi.config.nifi_config.api_client.call_api('/process-groups/{pg_id}/process-groups/upload', 'POST', + path_params={'pg_id': pg_id}, + header_params=header_params, + _return_http_data_only=True, + post_params=[ + ('id', pg_id), + ('groupName', 'LakehouseKafkaIngest'), + ('positionX', 100), + ('positionY', 10), + ('clientId', nipyapi.nifi.FlowApi().generate_client_id()), + ], + files={ + 'file': filename + }, + auth_settings=['tokenAuth']) # Scheduling the `Kafka3ConnectionService` fails, if it is started before `StandardRestrictedSSLContextService`, since it depends on it # To work around this, we try to schedule the controllers multiple times diff --git a/demos/data-lakehouse-iceberg-trino-spark/create-spark-ingestion-job.yaml b/demos/data-lakehouse-iceberg-trino-spark/create-spark-ingestion-job.yaml index 50e1d820..6838d7ba 100644 --- a/demos/data-lakehouse-iceberg-trino-spark/create-spark-ingestion-job.yaml +++ b/demos/data-lakehouse-iceberg-trino-spark/create-spark-ingestion-job.yaml @@ -11,12 +11,88 @@ spec: spec: serviceAccountName: demo-serviceaccount initContainers: - - name: wait-for-kafka - image: oci.stackable.tech/sdp/tools:1.0.0-stackable0.0.0-dev - command: ["bash", "-c", "echo 'Waiting for all kafka brokers to be ready' && kubectl wait --for=condition=ready --timeout=30m pod -l app.kubernetes.io/name=kafka -l app.kubernetes.io/instance=kafka"] + - name: wait-for-resources + image: oci.stackable.tech/sdp/tools:1.0.0-stackable25.3.0 + command: + - bash + - -euo + - pipefail + - -c + - | + echo 'Waiting for all minio instances to be ready' + kubectl wait --for=condition=ready --timeout=30m pod -l app=minio,release=minio,stackable.tech/vendor=Stackable + echo 'Waiting for all kafka brokers to be ready' + kubectl wait --for=condition=ready --timeout=30m pod -l app.kubernetes.io/name=kafka,app.kubernetes.io/instance=kafka + echo 'Waiting for all nifi instances to be ready' + kubectl wait --for=condition=ready --timeout=30m pod -l app.kubernetes.io/name=nifi,app.kubernetes.io/instance=nifi + - name: wait-for-kafka-topics + image: oci.stackable.tech/sdp/kafka:3.9.0-stackable25.3.0 + command: + - bash + - -euo + - pipefail + - -c + - | + #!/usr/bin/bash + # + # Wait for Kafka topics created by the Nifi workflows to be ready. + # Also wait for all topic partitions to have a leader. + # This is required for the Spark streaming job to be able to read from the topics. + # Without this check, the Spark job might hang indefinitely without processing any events. + + BROKER="${BROKER:-kafka-broker-default:9093}" + + log() { + level="$1" + shift + echo "[$level] $*" + } + + check_leaders() { + local topic=$1 + local failed=0 + + log INFO "Starting leader check on Kafka broker: $BROKER for topic: $topic" + metadata=$(kcat -b "$BROKER" -X security.protocol=SSL -X ssl.key.location=/stackable/tls-kcat/tls.key -X ssl.certificate.location=/stackable/tls-kcat/tls.crt -X ssl.ca.location=/stackable/tls-kcat/ca.crt -L -t "$topic" 2>/dev/null) + + if [[ -z "$metadata" ]]; then + log ERROR "Failed to retrieve metadata for topic: $topic" + return 1 + fi + + log DEBUG "Metadata for $topic:" + echo "$metadata" + + if echo "$metadata" | grep -q 'leader: -1'; then + log ERROR "Found 'leader: -1' in topic '$topic'; topic not ready yet!" + return 1 + fi + + if echo "$metadata" | grep -q 'Broker: Leader not available'; then + log ERROR "Topic '$topic' not available yet" + return 1 + fi + + log INFO "Check topic '$topic' was successful" + return 0 + } + + for topic in "shared_bikes_bike_status" "shared_bikes_station_status" "shared_bikes_station_information" "water_levels_measurements" "water_levels_stations" + do + result=$(check_leaders "$topic") + echo "$result" + if [ "$result" == "1" ] + then + exit 1 + fi + done + exit 0 + volumeMounts: + - name: tls-kcat + mountPath: /stackable/tls-kcat containers: - name: create-spark-ingestion-job - image: oci.stackable.tech/sdp/tools:1.0.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/tools:1.0.0-stackable25.3.0 command: ["bash", "-c", "echo 'Submitting Spark job' && kubectl apply -f /tmp/manifest/spark-ingestion-job.yaml"] volumeMounts: - name: manifest @@ -25,7 +101,26 @@ spec: - name: manifest configMap: name: create-spark-ingestion-job-manifest + - name: tls-kcat + ephemeral: + volumeClaimTemplate: + metadata: + annotations: + secrets.stackable.tech/backend.autotls.cert.lifetime: "1d" + secrets.stackable.tech/class: "tls" + secrets.stackable.tech/format: "tls-pem" + secrets.stackable.tech/scope: "pod" + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: "1" + storageClassName: secrets.stackable.tech + volumeMode: Filesystem restartPolicy: OnFailure + securityContext: + fsGroup: 1000 backoffLimit: 50 --- apiVersion: v1 diff --git a/demos/data-lakehouse-iceberg-trino-spark/create-trino-tables.yaml b/demos/data-lakehouse-iceberg-trino-spark/create-trino-tables.yaml index 5a0f5ae9..a5dbec69 100644 --- a/demos/data-lakehouse-iceberg-trino-spark/create-trino-tables.yaml +++ b/demos/data-lakehouse-iceberg-trino-spark/create-trino-tables.yaml @@ -9,11 +9,11 @@ spec: serviceAccountName: demo-serviceaccount initContainers: - name: wait-for-testdata - image: oci.stackable.tech/sdp/tools:1.0.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/tools:1.0.0-stackable25.3.0 command: ["bash", "-c", "echo 'Waiting for job load-test-data to finish' && kubectl wait --for=condition=complete --timeout=30m job/load-test-data"] containers: - name: create-tables-in-trino - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: ["bash", "-c", "python -u /tmp/script/script.py"] volumeMounts: - name: script diff --git a/demos/data-lakehouse-iceberg-trino-spark/setup-superset.yaml b/demos/data-lakehouse-iceberg-trino-spark/setup-superset.yaml index 3275c927..6483db6e 100644 --- a/demos/data-lakehouse-iceberg-trino-spark/setup-superset.yaml +++ b/demos/data-lakehouse-iceberg-trino-spark/setup-superset.yaml @@ -8,8 +8,8 @@ spec: spec: containers: - name: setup-superset - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev - command: ["bash", "-c", "curl -o superset-assets.zip https://raw.githubusercontent.com/stackabletech/demos/main/demos/data-lakehouse-iceberg-trino-spark/superset-assets.zip && python -u /tmp/script/script.py"] + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 + command: ["bash", "-c", "curl -o superset-assets.zip https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/data-lakehouse-iceberg-trino-spark/superset-assets.zip && python -u /tmp/script/script.py"] volumeMounts: - name: script mountPath: /tmp/script diff --git a/demos/demos-v2.yaml b/demos/demos-v2.yaml index 44aa520a..da5076c7 100644 --- a/demos/demos-v2.yaml +++ b/demos/demos-v2.yaml @@ -7,10 +7,10 @@ demos: - airflow - job-scheduling manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/airflow-scheduled-job/01-airflow-spark-clusterrole.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/airflow-scheduled-job/02-airflow-spark-clusterrolebinding.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/airflow-scheduled-job/03-enable-and-run-spark-dag.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/airflow-scheduled-job/04-enable-and-run-date-dag.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/airflow-scheduled-job/01-airflow-spark-clusterrole.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/airflow-scheduled-job/02-airflow-spark-clusterrolebinding.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/airflow-scheduled-job/03-enable-and-run-spark-dag.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/airflow-scheduled-job/04-enable-and-run-date-dag.yaml supportedNamespaces: [] resourceRequests: cpu: 2401m @@ -24,8 +24,8 @@ demos: - hdfs - cycling-tripdata manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/hbase-hdfs-load-cycling-data/distcp-cycling-data.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/hbase-hdfs-load-cycling-data/create-hfile-and-import-to-hbase.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/hbase-hdfs-load-cycling-data/distcp-cycling-data.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/hbase-hdfs-load-cycling-data/create-hfile-and-import-to-hbase.yaml supportedNamespaces: [] resourceRequests: cpu: "3" @@ -43,9 +43,9 @@ demos: - opa - keycloak manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/end-to-end-security/create-trino-tables.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/end-to-end-security/serviceaccount.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/end-to-end-security/create-spark-report.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/end-to-end-security/create-trino-tables.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/end-to-end-security/serviceaccount.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/end-to-end-security/create-spark-report.yaml supportedNamespaces: [] resourceRequests: cpu: 9000m @@ -64,10 +64,10 @@ demos: - s3 - earthquakes manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/nifi-kafka-druid-earthquake-data/serviceaccount.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/nifi-kafka-druid-earthquake-data/create-nifi-ingestion-job.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/nifi-kafka-druid-earthquake-data/create-druid-ingestion-job.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/nifi-kafka-druid-earthquake-data/setup-superset.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/nifi-kafka-druid-earthquake-data/serviceaccount.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/nifi-kafka-druid-earthquake-data/create-nifi-ingestion-job.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/nifi-kafka-druid-earthquake-data/create-druid-ingestion-job.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/nifi-kafka-druid-earthquake-data/setup-superset.yaml supportedNamespaces: ["default"] resourceRequests: cpu: 8700m @@ -86,10 +86,10 @@ demos: - s3 - water-levels manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/nifi-kafka-druid-water-level-data/serviceaccount.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/nifi-kafka-druid-water-level-data/create-nifi-ingestion-job.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/nifi-kafka-druid-water-level-data/create-druid-ingestion-job.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/nifi-kafka-druid-water-level-data/setup-superset.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/nifi-kafka-druid-water-level-data/serviceaccount.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/nifi-kafka-druid-water-level-data/create-nifi-ingestion-job.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/nifi-kafka-druid-water-level-data/create-druid-ingestion-job.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/nifi-kafka-druid-water-level-data/setup-superset.yaml supportedNamespaces: ["default"] resourceRequests: cpu: 8900m @@ -106,10 +106,10 @@ demos: - s3 - ny-taxi-data manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/spark-k8s-anomaly-detection-taxi-data/serviceaccount.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/spark-k8s-anomaly-detection-taxi-data/load-test-data.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/spark-k8s-anomaly-detection-taxi-data/create-spark-anomaly-detection-job.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/spark-k8s-anomaly-detection-taxi-data/setup-superset.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/spark-k8s-anomaly-detection-taxi-data/serviceaccount.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/spark-k8s-anomaly-detection-taxi-data/load-test-data.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/spark-k8s-anomaly-detection-taxi-data/create-spark-anomaly-detection-job.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/spark-k8s-anomaly-detection-taxi-data/setup-superset.yaml supportedNamespaces: [] resourceRequests: cpu: 6400m @@ -141,9 +141,9 @@ demos: - s3 - ny-taxi-data manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/trino-taxi-data/load-test-data.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/trino-taxi-data/create-table-in-trino.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/trino-taxi-data/setup-superset.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/trino-taxi-data/load-test-data.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/trino-taxi-data/create-table-in-trino.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/trino-taxi-data/setup-superset.yaml supportedNamespaces: [] resourceRequests: cpu: 6800m @@ -166,12 +166,12 @@ demos: - water-levels - earthquakes manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/data-lakehouse-iceberg-trino-spark/serviceaccount.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/data-lakehouse-iceberg-trino-spark/load-test-data.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/data-lakehouse-iceberg-trino-spark/create-trino-tables.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/data-lakehouse-iceberg-trino-spark/create-nifi-ingestion-job.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/data-lakehouse-iceberg-trino-spark/create-spark-ingestion-job.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/data-lakehouse-iceberg-trino-spark/setup-superset.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/data-lakehouse-iceberg-trino-spark/serviceaccount.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/data-lakehouse-iceberg-trino-spark/load-test-data.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/data-lakehouse-iceberg-trino-spark/create-trino-tables.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/data-lakehouse-iceberg-trino-spark/create-nifi-ingestion-job.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/data-lakehouse-iceberg-trino-spark/create-spark-ingestion-job.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/data-lakehouse-iceberg-trino-spark/setup-superset.yaml supportedNamespaces: ["default"] resourceRequests: cpu: "80" @@ -187,7 +187,7 @@ demos: - pyspark - ny-taxi-data manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/jupyterhub-pyspark-hdfs-anomaly-detection-taxi-data/load-test-data.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/jupyterhub-pyspark-hdfs-anomaly-detection-taxi-data/load-test-data.yaml supportedNamespaces: [] resourceRequests: cpu: 3350m @@ -204,7 +204,7 @@ demos: - vector - zookeeper manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/logging/zookeeper.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/logging/zookeeper.yaml supportedNamespaces: [] resourceRequests: cpu: 6500m @@ -220,9 +220,9 @@ demos: - grafana-dashboards - zookeeper manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/signal-processing/serviceaccount.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/signal-processing/create-timescale-tables.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/signal-processing/create-nifi-ingestion-job.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/signal-processing/serviceaccount.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/signal-processing/create-timescale-tables.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/signal-processing/create-nifi-ingestion-job.yaml supportedNamespaces: [] resourceRequests: cpu: "3" @@ -238,7 +238,7 @@ demos: - spark - S3 manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/demos/jupyterhub-keycloak/load-gas-data.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/jupyterhub-keycloak/load-gas-data.yaml supportedNamespaces: [] resourceRequests: cpu: 6400m diff --git a/demos/end-to-end-security/create-spark-report.yaml b/demos/end-to-end-security/create-spark-report.yaml index c3b1245f..bfccb3aa 100644 --- a/demos/end-to-end-security/create-spark-report.yaml +++ b/demos/end-to-end-security/create-spark-report.yaml @@ -12,7 +12,7 @@ spec: serviceAccountName: demo-serviceaccount initContainers: - name: wait-for-trino-tables - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: - bash - -euo @@ -23,7 +23,7 @@ spec: kubectl wait --timeout=30m --for=condition=complete job/create-tables-in-trino containers: - name: create-spark-report - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: - bash - -euo diff --git a/demos/end-to-end-security/create-trino-tables.yaml b/demos/end-to-end-security/create-trino-tables.yaml index 8778acb5..0b10a66d 100644 --- a/demos/end-to-end-security/create-trino-tables.yaml +++ b/demos/end-to-end-security/create-trino-tables.yaml @@ -8,7 +8,7 @@ spec: spec: containers: - name: create-tables-in-trino - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: ["bash", "-c", "python -u /tmp/script/script.py"] volumeMounts: - name: script diff --git a/demos/hbase-hdfs-load-cycling-data/create-hfile-and-import-to-hbase.yaml b/demos/hbase-hdfs-load-cycling-data/create-hfile-and-import-to-hbase.yaml index ddc7aa86..8757d7d4 100644 --- a/demos/hbase-hdfs-load-cycling-data/create-hfile-and-import-to-hbase.yaml +++ b/demos/hbase-hdfs-load-cycling-data/create-hfile-and-import-to-hbase.yaml @@ -9,7 +9,7 @@ spec: spec: containers: - name: create-hfile-and-import-to-hbase - image: oci.stackable.tech/sdp/hbase:2.6.1-stackable0.0.0-dev + image: oci.stackable.tech/sdp/hbase:2.6.1-stackable25.3.0 env: - name: HADOOP_USER_NAME value: stackable diff --git a/demos/jupyterhub-pyspark-hdfs-anomaly-detection-taxi-data/load-test-data.yaml b/demos/jupyterhub-pyspark-hdfs-anomaly-detection-taxi-data/load-test-data.yaml index 800dd9c5..c7e3887e 100644 --- a/demos/jupyterhub-pyspark-hdfs-anomaly-detection-taxi-data/load-test-data.yaml +++ b/demos/jupyterhub-pyspark-hdfs-anomaly-detection-taxi-data/load-test-data.yaml @@ -8,7 +8,7 @@ spec: spec: containers: - name: load-ny-taxi-data - image: oci.stackable.tech/sdp/hadoop:3.4.1-stackable0.0.0-dev + image: oci.stackable.tech/sdp/hadoop:3.4.1-stackable25.3.0 # yamllint disable rule:line-length command: ["bash", "-c", "/stackable/hadoop/bin/hdfs dfs -mkdir -p /ny-taxi-data/raw \ && cd /tmp \ diff --git a/demos/nifi-kafka-druid-earthquake-data/create-druid-ingestion-job.yaml b/demos/nifi-kafka-druid-earthquake-data/create-druid-ingestion-job.yaml index 2c25c32c..1c91aca1 100644 --- a/demos/nifi-kafka-druid-earthquake-data/create-druid-ingestion-job.yaml +++ b/demos/nifi-kafka-druid-earthquake-data/create-druid-ingestion-job.yaml @@ -9,7 +9,7 @@ spec: serviceAccountName: demo-serviceaccount initContainers: - name: wait-for-druid-coordinator - image: oci.stackable.tech/sdp/tools:1.0.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/tools:1.0.0-stackable25.3.0 command: - bash - -euo @@ -22,7 +22,7 @@ spec: kubectl wait --for=condition=Ready pod/druid-coordinator-default-0 --timeout=30m containers: - name: create-druid-ingestion-job - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: - bash - -euo diff --git a/demos/nifi-kafka-druid-earthquake-data/create-nifi-ingestion-job.yaml b/demos/nifi-kafka-druid-earthquake-data/create-nifi-ingestion-job.yaml index 82005839..f80e7a00 100644 --- a/demos/nifi-kafka-druid-earthquake-data/create-nifi-ingestion-job.yaml +++ b/demos/nifi-kafka-druid-earthquake-data/create-nifi-ingestion-job.yaml @@ -9,7 +9,7 @@ spec: serviceAccountName: demo-serviceaccount initContainers: - name: wait-for-nifi - image: oci.stackable.tech/sdp/tools:1.0.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/tools:1.0.0-stackable25.3.0 command: - bash - -euo @@ -22,7 +22,7 @@ spec: kubectl wait --for=condition=Ready pod/nifi-node-default-0 --timeout=30m containers: - name: create-nifi-ingestion-job - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: - bash - -euo @@ -59,6 +59,7 @@ data: from nipyapi.security import service_login import nipyapi import os + import requests import urllib3 # As of 2022-08-29 we cant use "https://nifi:8443" here because

The request contained an invalid host header [nifi:8443] in the request [/nifi-api]. Check for request manipulation or third-party intercept.

@@ -75,70 +76,35 @@ data: service_login(username=USERNAME, password=PASSWORD) print("Logged in") - organization = "stackabletech" - repository = "demos" - branch = "main" - version = "main" - directory = "demos/nifi-kafka-druid-earthquake-data" - flow_name = "IngestEarthquakesToKafka" + response = requests.get("https://raw.githubusercontent.com/stackabletech/demos/refs/heads/main/demos/nifi-kafka-druid-earthquake-data/IngestEarthquakesToKafka.json") + filename = "/tmp/IngestEarthquakesToKafka.json" + with open(filename, "wb") as f: + f.write(response.content) - # Check if the GitHub flow registry client already exists - flow_registry_clients = nipyapi.nifi.ControllerApi().get_flow_registry_clients().registries - - github_client = None - for client in flow_registry_clients: - if client.component.name == "GitHubFlowRegistryClient": - github_client = client - print("Found existing GitHub flow registry client") - break + pg_id = get_root_pg_id() - if not github_client: - print("Creating new GitHub flow registry client") - github_client = nipyapi.nifi.ControllerApi().create_flow_registry_client( - body={ - "revision": {"version": 0}, - "component": { - "name": "GitHubFlowRegistryClient", - "type": "org.apache.nifi.github.GitHubFlowRegistryClient", - "properties": { - "Repository Owner": organization, - "Repository Name": repository, - }, - "bundle": { - "group": "org.apache.nifi", - "artifact": "nifi-github-nar", - "version": "2.2.0", - }, - }, - } - ) + if not nipyapi.config.nifi_config.api_client: + nipyapi.config.nifi_config.api_client = ApiClient() - pg_id = get_root_pg_id() + header_params = {} + header_params['Accept'] = nipyapi.config.nifi_config.api_client.select_header_accept(['application/json']) + header_params['Content-Type'] = nipyapi.config.nifi_config.api_client.select_header_content_type(['multipart/form-data']) - try: - # Create process group from the file in the Git repo - nipyapi.nifi.ProcessGroupsApi().create_process_group( - id=pg_id, - body={ - "revision": {"version": 0}, - "component": { - "position": {"x": 300, "y": 10}, - "versionControlInformation": { - "registryId": github_client.component.id, - "flowId": flow_name, - "bucketId": directory, - "branch": branch, - "version": version, - }, - }, - }, - ) - except ValueError as e: - # Ignore, because nipyapi can't handle non-int versions yet - if "invalid literal for int() with base 10" in str(e): - print("Ignoring ValueError") - else: - raise e + nipyapi.config.nifi_config.api_client.call_api('/process-groups/{pg_id}/process-groups/upload', 'POST', + path_params={'pg_id': pg_id}, + header_params=header_params, + _return_http_data_only=True, + post_params=[ + ('id', pg_id), + ('groupName', 'IngestEarthquakesToKafka'), + ('positionX', 100), + ('positionY', 10), + ('clientId', nipyapi.nifi.FlowApi().generate_client_id()), + ], + files={ + 'file': filename + }, + auth_settings=['tokenAuth']) # Scheduling the `Kafka3ConnectionService` fails, if it is started before `StandardRestrictedSSLContextService`, since it depends on it # To work around this, we try to schedule the controllers multiple times diff --git a/demos/nifi-kafka-druid-earthquake-data/setup-superset.yaml b/demos/nifi-kafka-druid-earthquake-data/setup-superset.yaml index 9be84027..02f7e37c 100644 --- a/demos/nifi-kafka-druid-earthquake-data/setup-superset.yaml +++ b/demos/nifi-kafka-druid-earthquake-data/setup-superset.yaml @@ -9,7 +9,7 @@ spec: serviceAccountName: demo-serviceaccount initContainers: - name: wait-for-superset - image: oci.stackable.tech/sdp/tools:1.0.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/tools:1.0.0-stackable25.3.0 command: - bash - -euo @@ -22,14 +22,14 @@ spec: kubectl wait --for=condition=Ready pod/superset-node-default-0 --timeout=30m containers: - name: setup-superset - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: - bash - -euo - pipefail - -c - | - curl -o superset-assets.zip https://raw.githubusercontent.com/stackabletech/demos/main/demos/nifi-kafka-druid-earthquake-data/superset-assets.zip + curl -o superset-assets.zip https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/nifi-kafka-druid-earthquake-data/superset-assets.zip python -u /tmp/script/script.py volumeMounts: - name: script diff --git a/demos/nifi-kafka-druid-water-level-data/create-druid-ingestion-job.yaml b/demos/nifi-kafka-druid-water-level-data/create-druid-ingestion-job.yaml index 3ce637dc..692ad2ed 100644 --- a/demos/nifi-kafka-druid-water-level-data/create-druid-ingestion-job.yaml +++ b/demos/nifi-kafka-druid-water-level-data/create-druid-ingestion-job.yaml @@ -9,7 +9,7 @@ spec: serviceAccountName: demo-serviceaccount initContainers: - name: wait-for-druid-coordinator - image: oci.stackable.tech/sdp/tools:1.0.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/tools:1.0.0-stackable25.3.0 command: - bash - -euo @@ -22,7 +22,7 @@ spec: kubectl wait --for=condition=Ready pod/druid-coordinator-default-0 --timeout=30m containers: - name: create-druid-ingestion-job - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: - bash - -euo diff --git a/demos/nifi-kafka-druid-water-level-data/create-nifi-ingestion-job.yaml b/demos/nifi-kafka-druid-water-level-data/create-nifi-ingestion-job.yaml index ac5961f1..ba0cea4a 100644 --- a/demos/nifi-kafka-druid-water-level-data/create-nifi-ingestion-job.yaml +++ b/demos/nifi-kafka-druid-water-level-data/create-nifi-ingestion-job.yaml @@ -9,7 +9,7 @@ spec: serviceAccountName: demo-serviceaccount initContainers: - name: wait-for-nifi - image: oci.stackable.tech/sdp/tools:1.0.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/tools:1.0.0-stackable25.3.0 command: - bash - -euo @@ -22,7 +22,7 @@ spec: kubectl wait --for=condition=Ready pod/nifi-node-default-0 --timeout=30m containers: - name: create-nifi-ingestion-job - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: - bash - -euo @@ -59,6 +59,7 @@ data: from nipyapi.security import service_login import nipyapi import os + import requests import urllib3 # As of 2022-08-29 we cant use "https://nifi:8443" here because

The request contained an invalid host header [nifi:8443] in the request [/nifi-api]. Check for request manipulation or third-party intercept.

@@ -75,70 +76,36 @@ data: service_login(username=USERNAME, password=PASSWORD) print("Logged in") - organization = "stackabletech" - repository = "demos" - branch = "main" - version = "main" - directory = "demos/nifi-kafka-druid-water-level-data" - flow_name = "IngestWaterLevelsToKafka" + response = requests.get("https://raw.githubusercontent.com/stackabletech/demos/refs/heads/main/demos/nifi-kafka-druid-water-level-data/IngestWaterLevelsToKafka.json") - # Check if the GitHub flow registry client already exists - flow_registry_clients = nipyapi.nifi.ControllerApi().get_flow_registry_clients().registries + filename = "/tmp/IngestWaterLevelsToKafka.json" + with open(filename, "wb") as f: + f.write(response.content) - github_client = None - for client in flow_registry_clients: - if client.component.name == "GitHubFlowRegistryClient": - github_client = client - print("Found existing GitHub flow registry client") - break + pg_id = get_root_pg_id() - if not github_client: - print("Creating new GitHub flow registry client") - github_client = nipyapi.nifi.ControllerApi().create_flow_registry_client( - body={ - "revision": {"version": 0}, - "component": { - "name": "GitHubFlowRegistryClient", - "type": "org.apache.nifi.github.GitHubFlowRegistryClient", - "properties": { - "Repository Owner": organization, - "Repository Name": repository, - }, - "bundle": { - "group": "org.apache.nifi", - "artifact": "nifi-github-nar", - "version": "2.2.0", - }, - }, - } - ) + if not nipyapi.config.nifi_config.api_client: + nipyapi.config.nifi_config.api_client = ApiClient() - pg_id = get_root_pg_id() + header_params = {} + header_params['Accept'] = nipyapi.config.nifi_config.api_client.select_header_accept(['application/json']) + header_params['Content-Type'] = nipyapi.config.nifi_config.api_client.select_header_content_type(['multipart/form-data']) - try: - # Create process group from the file in the Git repo - nipyapi.nifi.ProcessGroupsApi().create_process_group( - id=pg_id, - body={ - "revision": {"version": 0}, - "component": { - "position": {"x": 300, "y": 10}, - "versionControlInformation": { - "registryId": github_client.component.id, - "flowId": flow_name, - "bucketId": directory, - "branch": branch, - "version": version, - }, - }, - }, - ) - except ValueError as e: - # Ignore, because nipyapi can't handle non-int versions yet - if "invalid literal for int() with base 10" in str(e): - print("Ignoring ValueError") - else: - raise e + nipyapi.config.nifi_config.api_client.call_api('/process-groups/{pg_id}/process-groups/upload', 'POST', + path_params={'pg_id': pg_id}, + header_params=header_params, + _return_http_data_only=True, + post_params=[ + ('id', pg_id), + ('groupName', 'IngestWaterLevelsToKafka'), + ('positionX', 100), + ('positionY', 10), + ('clientId', nipyapi.nifi.FlowApi().generate_client_id()), + ], + files={ + 'file': filename + }, + auth_settings=['tokenAuth']) # Scheduling the `Kafka3ConnectionService` fails, if it is started before `StandardRestrictedSSLContextService`, since it depends on it # To work around this, we try to schedule the controllers multiple times diff --git a/demos/nifi-kafka-druid-water-level-data/setup-superset.yaml b/demos/nifi-kafka-druid-water-level-data/setup-superset.yaml index 0d85b0b0..baab0639 100644 --- a/demos/nifi-kafka-druid-water-level-data/setup-superset.yaml +++ b/demos/nifi-kafka-druid-water-level-data/setup-superset.yaml @@ -9,7 +9,7 @@ spec: serviceAccountName: demo-serviceaccount initContainers: - name: wait-for-superset - image: oci.stackable.tech/sdp/tools:1.0.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/tools:1.0.0-stackable25.3.0 command: - bash - -euo @@ -22,14 +22,14 @@ spec: kubectl wait --for=condition=Ready pod/superset-node-default-0 --timeout=30m containers: - name: setup-superset - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: - bash - -euo - pipefail - -c - | - curl -o superset-assets.zip https://raw.githubusercontent.com/stackabletech/demos/main/demos/nifi-kafka-druid-water-level-data/superset-assets.zip + curl -o superset-assets.zip https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/nifi-kafka-druid-water-level-data/superset-assets.zip python -u /tmp/script/script.py volumeMounts: - name: script diff --git a/demos/signal-processing/Dockerfile-nifi b/demos/signal-processing/Dockerfile-nifi index f39a639a..e220d3a0 100644 --- a/demos/signal-processing/Dockerfile-nifi +++ b/demos/signal-processing/Dockerfile-nifi @@ -1,4 +1,4 @@ -FROM oci.stackable.tech/sdp/nifi:2.2.0-stackable0.0.0-dev +FROM oci.stackable.tech/sdp/nifi:2.2.0-stackable25.3.0 # This is the postgresql JDBC driver from https://jdbc.postgresql.org/download/ # There appear to be no signatures to validate against 😬 diff --git a/demos/signal-processing/create-nifi-ingestion-job.yaml b/demos/signal-processing/create-nifi-ingestion-job.yaml index 1a858678..1cbaa6c9 100644 --- a/demos/signal-processing/create-nifi-ingestion-job.yaml +++ b/demos/signal-processing/create-nifi-ingestion-job.yaml @@ -9,7 +9,7 @@ spec: serviceAccountName: demo-serviceaccount initContainers: - name: wait-for-timescale-job-and-nifi - image: oci.stackable.tech/sdp/tools:1.0.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/tools:1.0.0-stackable25.3.0 command: - bash - -euo @@ -28,7 +28,7 @@ spec: kubectl wait --for=condition=Ready pod/nifi-node-default-0 --timeout=30m containers: - name: create-nifi-ingestion-job - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: - bash - -euo @@ -70,6 +70,7 @@ data: from nipyapi.security import service_login import nipyapi import os + import requests import urllib3 # As of 2022-08-29 we cant use "https://nifi:8443" here because

The request contained an invalid host header [nifi:8443] in the request [/nifi-api]. Check for request manipulation or third-party intercept.

@@ -86,60 +87,36 @@ data: service_login(username=USERNAME, password=PASSWORD) print("Logged in") - organization = "stackabletech" - repository = "demos" - branch = "main" - version = "main" - directory = "demos/signal-processing" - flow_name = "DownloadAndWriteToDB" + response = requests.get("https://raw.githubusercontent.com/stackabletech/demos/refs/heads/main/demos/signal-processing/DownloadAndWriteToDB.json") - # Register the flow registry client - response = nipyapi.nifi.ControllerApi().create_flow_registry_client( - body={ - "revision": {"version": 0}, - "component": { - "name": "GitHubFlowRegistryClient", - "type": "org.apache.nifi.github.GitHubFlowRegistryClient", - "properties": { - "Repository Owner": organization, - "Repository Name": repository, - }, - "bundle": { - "group": "org.apache.nifi", - "artifact": "nifi-github-nar", - "version": "2.2.0", - }, - }, - } - ) + filename = "/tmp/DownloadAndWriteToDB.json" + with open(filename, "wb") as f: + f.write(response.content) pg_id = get_root_pg_id() - print(f"pgid={pg_id}") - try: - # Create process group from the file in the Git repo - nipyapi.nifi.ProcessGroupsApi().create_process_group( - id=pg_id, - body={ - "revision": {"version": 0}, - "component": { - "position": {"x": 300, "y": 10}, - "versionControlInformation": { - "registryId": response.component.id, - "flowId": flow_name, - "bucketId": directory, - "branch": branch, - "version": version, - }, - }, - }, - ) - except ValueError as e: - # Ignore, because nipyapi can't handle non-int versions yet - if "invalid literal for int() with base 10" in str(e): - print("Ignoring ValueError") - else: - raise e + if not nipyapi.config.nifi_config.api_client: + nipyapi.config.nifi_config.api_client = ApiClient() + + header_params = {} + header_params['Accept'] = nipyapi.config.nifi_config.api_client.select_header_accept(['application/json']) + header_params['Content-Type'] = nipyapi.config.nifi_config.api_client.select_header_content_type(['multipart/form-data']) + + nipyapi.config.nifi_config.api_client.call_api('/process-groups/{pg_id}/process-groups/upload', 'POST', + path_params={'pg_id': pg_id}, + header_params=header_params, + _return_http_data_only=True, + post_params=[ + ('id', pg_id), + ('groupName', 'DownloadAndWriteToDB'), + ('positionX', 100), + ('positionY', 10), + ('clientId', nipyapi.nifi.FlowApi().generate_client_id()), + ], + files={ + 'file': filename + }, + auth_settings=['tokenAuth']) # Update the controller services with the correct password for controller in list_all_controllers(pg_id): diff --git a/demos/signal-processing/create-timescale-tables.yaml b/demos/signal-processing/create-timescale-tables.yaml index efa8c7d6..a0a8c0bc 100644 --- a/demos/signal-processing/create-timescale-tables.yaml +++ b/demos/signal-processing/create-timescale-tables.yaml @@ -9,7 +9,7 @@ spec: serviceAccountName: demo-serviceaccount initContainers: - name: wait-for-timescale - image: oci.stackable.tech/sdp/tools:1.0.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/tools:1.0.0-stackable25.3.0 command: - bash - -euo diff --git a/demos/spark-k8s-anomaly-detection-taxi-data/create-spark-anomaly-detection-job.yaml b/demos/spark-k8s-anomaly-detection-taxi-data/create-spark-anomaly-detection-job.yaml index 3623b9e7..17f47500 100644 --- a/demos/spark-k8s-anomaly-detection-taxi-data/create-spark-anomaly-detection-job.yaml +++ b/demos/spark-k8s-anomaly-detection-taxi-data/create-spark-anomaly-detection-job.yaml @@ -8,11 +8,11 @@ spec: spec: initContainers: - name: wait-for-testdata - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: ["bash", "-c", "echo 'Waiting for job load-ny-taxi-data to finish' && kubectl wait --for=condition=complete --timeout=30m job/load-ny-taxi-data"] containers: - name: create-spark-anomaly-detection-job - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: ["bash", "-c", "echo 'Submitting Spark job' && kubectl apply -f /tmp/manifest/spark-ad-job.yaml"] volumeMounts: - name: manifest diff --git a/demos/spark-k8s-anomaly-detection-taxi-data/setup-superset.yaml b/demos/spark-k8s-anomaly-detection-taxi-data/setup-superset.yaml index 56f8d5a3..c7d81cc0 100644 --- a/demos/spark-k8s-anomaly-detection-taxi-data/setup-superset.yaml +++ b/demos/spark-k8s-anomaly-detection-taxi-data/setup-superset.yaml @@ -8,8 +8,8 @@ spec: spec: containers: - name: setup-superset - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev - command: ["bash", "-c", "curl -o superset-assets.zip https://raw.githubusercontent.com/stackabletech/demos/main/demos/spark-k8s-anomaly-detection-taxi-data/superset-assets.zip && python -u /tmp/script/script.py"] + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 + command: ["bash", "-c", "curl -o superset-assets.zip https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/spark-k8s-anomaly-detection-taxi-data/superset-assets.zip && python -u /tmp/script/script.py"] volumeMounts: - name: script mountPath: /tmp/script diff --git a/demos/trino-taxi-data/create-table-in-trino.yaml b/demos/trino-taxi-data/create-table-in-trino.yaml index de3fc97e..0e79f7ba 100644 --- a/demos/trino-taxi-data/create-table-in-trino.yaml +++ b/demos/trino-taxi-data/create-table-in-trino.yaml @@ -8,7 +8,7 @@ spec: spec: containers: - name: create-ny-taxi-data-table-in-trino - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: ["bash", "-c", "python -u /tmp/script/script.py"] volumeMounts: - name: script diff --git a/demos/trino-taxi-data/setup-superset.yaml b/demos/trino-taxi-data/setup-superset.yaml index cb613aec..1de648ff 100644 --- a/demos/trino-taxi-data/setup-superset.yaml +++ b/demos/trino-taxi-data/setup-superset.yaml @@ -8,8 +8,8 @@ spec: spec: containers: - name: setup-superset - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev - command: ["bash", "-c", "curl -o superset-assets.zip https://raw.githubusercontent.com/stackabletech/demos/main/demos/trino-taxi-data/superset-assets.zip && python -u /tmp/script/script.py"] + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 + command: ["bash", "-c", "curl -o superset-assets.zip https://raw.githubusercontent.com/stackabletech/demos/release-25.3/demos/trino-taxi-data/superset-assets.zip && python -u /tmp/script/script.py"] volumeMounts: - name: script mountPath: /tmp/script diff --git a/docs/antora.yml b/docs/antora.yml index 189f7d75..16df3633 100644 --- a/docs/antora.yml +++ b/docs/antora.yml @@ -2,4 +2,4 @@ # Use 'home' here so that the versioning is picked up automatically based # on SDP releases name: home -version: "nightly" +version: "25.3" diff --git a/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/druid_3.png b/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/druid_3.png index f4589843..92a38b95 100644 Binary files a/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/druid_3.png and b/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/druid_3.png differ diff --git a/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_1.png b/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_1.png index 9882ed17..e2691d94 100644 Binary files a/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_1.png and b/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_1.png differ diff --git a/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_2.png b/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_2.png index 36a8ac12..9d61afa5 100644 Binary files a/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_2.png and b/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_2.png differ diff --git a/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_3.png b/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_3.png index eaaf98ef..f4036d9b 100644 Binary files a/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_3.png and b/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_3.png differ diff --git a/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_4.png b/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_4.png index 967e7303..d427b42a 100644 Binary files a/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_4.png and b/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_4.png differ diff --git a/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_5.png b/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_5.png index b4c4bdea..5de84725 100644 Binary files a/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_5.png and b/docs/modules/demos/images/nifi-kafka-druid-earthquake-data/nifi_5.png differ diff --git a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/druid_3.png b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/druid_3.png index 67518895..bd47ae9d 100644 Binary files a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/druid_3.png and b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/druid_3.png differ diff --git a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_10.png b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_10.png index d4bf96f1..7cb69d7a 100644 Binary files a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_10.png and b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_10.png differ diff --git a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_11.png b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_11.png index ae53f980..10d5ea7c 100644 Binary files a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_11.png and b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_11.png differ diff --git a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_12.png b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_12.png index 6ebabb21..af3e0090 100644 Binary files a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_12.png and b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_12.png differ diff --git a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_13.png b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_13.png new file mode 100644 index 00000000..507fca20 Binary files /dev/null and b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_13.png differ diff --git a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_2.png b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_2.png index 4e3b86f1..a15c6bfc 100644 Binary files a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_2.png and b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_2.png differ diff --git a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_3.png b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_3.png index b41bf6bb..a133deb7 100644 Binary files a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_3.png and b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_3.png differ diff --git a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_4.png b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_4.png index 7e7c41c1..016f2dc9 100644 Binary files a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_4.png and b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_4.png differ diff --git a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_5.png b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_5.png index 2943b603..85457447 100644 Binary files a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_5.png and b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_5.png differ diff --git a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_6.png b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_6.png index baa00472..2b35368a 100644 Binary files a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_6.png and b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_6.png differ diff --git a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_7.png b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_7.png index c33b8bd5..b06b25ae 100644 Binary files a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_7.png and b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_7.png differ diff --git a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_8.png b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_8.png index cedf8721..97961e95 100644 Binary files a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_8.png and b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_8.png differ diff --git a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_9.png b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_9.png index e2d3d418..042a90b1 100644 Binary files a/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_9.png and b/docs/modules/demos/images/nifi-kafka-druid-water-level-data/nifi_9.png differ diff --git a/docs/modules/demos/pages/nifi-kafka-druid-earthquake-data.adoc b/docs/modules/demos/pages/nifi-kafka-druid-earthquake-data.adoc index f49a40c8..9fd42157 100644 --- a/docs/modules/demos/pages/nifi-kafka-druid-earthquake-data.adoc +++ b/docs/modules/demos/pages/nifi-kafka-druid-earthquake-data.adoc @@ -209,25 +209,26 @@ Log in with the username `admin` and password `adminadmin`. image::nifi-kafka-druid-earthquake-data/nifi_2.png[] -You can see the started ProcessGroup consisting of two processors. +You can see the started ProcessGroup consisting of three processors. The first one - `InvokeHTTP`, fetches the CSV file from the Internet and puts it into the queue of the next processor. -The second processor - `PublishKafkaRecord_2_6`, parses the CSV file, converts it to JSON records and writes them out into Kafka. +The second processor - `SplitRecords`, takes the single FlowFile (NiFi Record) which contains all CSV records and splits it into chunks of 2000 records, which are then separately put into the queue of the next processor. +The third one - `PublishKafkaRecord`, parses the CSV chunk, converts it to JSON records and writes them out into Kafka. Double-click on the `InvokeHTTP` processor to show the processor details. image::nifi-kafka-druid-earthquake-data/nifi_3.png[] -Head over to the tab `PROPERTIES`. +Head over to the `Properties` tab. image::nifi-kafka-druid-earthquake-data/nifi_4.png[] Here, you can see the setting `HTTP URL`, which specifies the download URL from where the CSV file is retrieved. -Close the processor details popup by clicking `OK`. -Afterwards, double-click on the processor `PublishKafkaRecord_2_6`. +Close the processor details popup by clicking `Close`. +Afterwards, double-click on the processor `PublishKafkaRecord`. image::nifi-kafka-druid-earthquake-data/nifi_5.png[] -The Kafka connection details within this processor - like broker addresses and topic names - are specified. +The Kafka connection service, which contains the connection details, and the topic name is specified. It uses the `CSVReader` to parse the downloaded CSV and the `JsonRecordSetWriter` to split it into individual JSON records before writing it out. == Druid @@ -247,12 +248,13 @@ By clicking on `Supervisors` at the top, you can see the running ingestion jobs. image::nifi-kafka-druid-earthquake-data/druid_2.png[] You can see additional information after clicking on the magnification glass to the right side of the `RUNNING` supervisor. -On the tab `Statistics` on the left, you can see the number of processed records as well as the number of errors. +On the tab `Task stats` on the left, you can see the number of processed records as well as the number of errors. image::nifi-kafka-druid-earthquake-data/druid_3.png[] -The statistics show that Druid ingested `5074` records during the last minute and has ingested 3 million records already. -All entries have been consumed successfully, indicated by having no `processWithError`, `thrownAway` or `unparseable` records. +The statistics show that Druid ingested `13279` records per second within the last minute and has ingested around 600,000 records already. +All entries have been consumed successfully, indicated by having no `processWithError`, `thrownAway` or `unparseable` records in the output of the `View raw` +button at the top right. === Query the Data Source diff --git a/docs/modules/demos/pages/nifi-kafka-druid-water-level-data.adoc b/docs/modules/demos/pages/nifi-kafka-druid-water-level-data.adoc index 090ea66c..b7267171 100644 --- a/docs/modules/demos/pages/nifi-kafka-druid-water-level-data.adoc +++ b/docs/modules/demos/pages/nifi-kafka-druid-water-level-data.adoc @@ -292,9 +292,14 @@ image::nifi-kafka-druid-water-level-data/nifi_1.png[] Log in with the username `admin` and password `adminadmin`. +image::nifi-kafka-druid-water-level-data/nifi_13.png[] + +The NiFi workflow contains the `IngestWaterLevelsToKafka` Process Group. Enter the Process Group by double-clicking on it or +right-clicking and selecting `Enter Group`. + image::nifi-kafka-druid-water-level-data/nifi_2.png[] -As you can see, the NiFi workflow consists of lots of components. It is split into three main components: +As you can see, the Process Group consists of lots of components. It is split into three main components: . On the left is the first part bulk-loading all the known stations . In the middle is the second part bulk-loading the historical data for the last 30 days @@ -318,19 +323,19 @@ The left workflows works as follows: measurements of the last 30 days. . `Add station_uuid` will add the attribute `station_uuid` to the JSON list of measurements returned from the {pegelonline}[PEGELONLINE web service], which is missing. -. `PublishKafkaRecord_2_6` finally emits every measurement as a Kafka record to the topic `measurements`. +. `PublishKafka` finally emits every measurement as a Kafka record to the topic `measurements`. The right side works similarly but is executed in an endless loop to stream the data in near-realtime. Double-click on the `Get station list` processor to show the processor details. image::nifi-kafka-druid-water-level-data/nifi_5.png[] -Head over to the tab `PROPERTIES`. +Head over to the `Properties` tab. image::nifi-kafka-druid-water-level-data/nifi_6.png[] Here, you can see the setting `HTTP URL`, which specifies the download URL from where the JSON file containing the -stations is retrieved. Close the processor details popup by clicking `OK`. You can also have a detailed view of the +stations is retrieved. Close the processor details popup by clicking `Close`. You can also have a detailed view of the `Produce station records` processor by double-clicking it. image::nifi-kafka-druid-water-level-data/nifi_7.png[] @@ -347,11 +352,11 @@ image::nifi-kafka-druid-water-level-data/nifi_9.png[] The `HTTP URL` does contain the `$\{station_uuid\}` placeholder, which gets replaced for every station. -Double-click the `PublishKafkaRecord_2_6` processor. +Double-click the `PublishKafka` processor. image::nifi-kafka-druid-water-level-data/nifi_10.png[] -You can also see the number of produced records by right-clicking on `PublishKafkaRecord_2_6` and selecting +You can also see the number of produced records by right-clicking on `PublishKafka` and selecting `View status history`. image::nifi-kafka-druid-water-level-data/nifi_11.png[] @@ -385,13 +390,14 @@ By clicking on `Supervisors` at the top you can see the running ingestion jobs. image::nifi-kafka-druid-water-level-data/druid_2.png[] After clicking on the magnification glass to the right side of the `RUNNING` supervisor, you can see additional -information (here, the supervisor `measurements` was chosen). On the tab `Statistics` on the left, you can see the +information (here, the supervisor `measurements` was chosen). On the tab `Task stats` on the left, you can see the number of processed records as well as the number of errors. image::nifi-kafka-druid-water-level-data/druid_3.png[] -The statistics show that Druid ingested `2435` records during the last minute and has already ingested ~30 million records in total. All records -have been ingested successfully, indicated by having no `processWithError`, `thrownAway` or `unparseable` records. +The statistics show that Druid ingested `594` records during the last minute and has already ingested ~1,3 million records in total. All records +have been ingested successfully, indicated by having no `processWithError`, `thrownAway` or `unparseable` records in the output of the `View raw` +button at the top right. === Query the Data Source diff --git a/docs/modules/demos/pages/spark-k8s-anomaly-detection-taxi-data.adoc b/docs/modules/demos/pages/spark-k8s-anomaly-detection-taxi-data.adoc index fcd12656..4406aaa1 100644 --- a/docs/modules/demos/pages/spark-k8s-anomaly-detection-taxi-data.adoc +++ b/docs/modules/demos/pages/spark-k8s-anomaly-detection-taxi-data.adoc @@ -3,7 +3,6 @@ :scikit-lib: https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html :k8s-cpu: https://kubernetes.io/docs/tasks/debug/debug-cluster/resource-metrics-pipeline/#cpu -:forest-article: https://towardsdatascience.com/isolation-forest-and-spark-b88ade6c63ff :forest-algo: https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/icdm08b.pdf Install this demo on an existing Kubernetes cluster: @@ -63,22 +62,22 @@ To list the installed Stackable services run the following command: ---- $ stackablectl stacklet list -┌──────────┬───────────────┬───────────┬───────────────────────────────────────────────┬─────────────────────────────────┐ -│ PRODUCT ┆ NAME ┆ NAMESPACE ┆ ENDPOINTS ┆ CONDITIONS │ -╞══════════╪═══════════════╪═══════════╪═══════════════════════════════════════════════╪═════════════════════════════════╡ -│ hive ┆ hive ┆ default ┆ ┆ Available, Reconciling, Running │ -├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ -│ hive ┆ hive-iceberg ┆ default ┆ ┆ Available, Reconciling, Running │ -├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ -│ opa ┆ opa ┆ default ┆ ┆ Available, Reconciling, Running │ -├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ -│ superset ┆ superset ┆ default ┆ external-http http://172.18.0.2:30562 ┆ Available, Reconciling, Running │ -├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ -│ trino ┆ trino ┆ default ┆ coordinator-metrics 172.18.0.2:31980 ┆ Available, Reconciling, Running │ -│ ┆ ┆ ┆ coordinator-https https://172.18.0.2:32186 ┆ │ -├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ -│ minio ┆ minio-console ┆ default ┆ http http://172.18.0.2:32276 ┆ │ -└──────────┴───────────────┴───────────┴───────────────────────────────────────────────┴─────────────────────────────────┘ +┌──────────┬───────────────┬───────────┬──────────────────────────────────────────────┬─────────────────────────────────┐ +│ PRODUCT ┆ NAME ┆ NAMESPACE ┆ ENDPOINTS ┆ CONDITIONS │ +╞══════════╪═══════════════╪═══════════╪══════════════════════════════════════════════╪═════════════════════════════════╡ +│ hive ┆ hive ┆ default ┆ ┆ Available, Reconciling, Running │ +├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ +│ hive ┆ hive-iceberg ┆ default ┆ ┆ Available, Reconciling, Running │ +├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ +│ opa ┆ opa ┆ default ┆ ┆ Available, Reconciling, Running │ +├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ +│ superset ┆ superset ┆ default ┆ external-http http://10.0.0.12:30171 ┆ Available, Reconciling, Running │ +├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ +│ trino ┆ trino ┆ default ┆ coordinator-metrics 10.0.0.12:30334 ┆ Available, Reconciling, Running │ +│ ┆ ┆ ┆ coordinator-https https://10.0.0.12:32663 ┆ │ +├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ +│ minio ┆ minio-console ┆ default ┆ https https://10.0.0.11:31142 ┆ │ +└──────────┴───────────────┴───────────┴──────────────────────────────────────────────┴─────────────────────────────────┘ ---- include::partial$instance-hint.adoc[] @@ -88,7 +87,14 @@ include::partial$instance-hint.adoc[] === List Buckets The S3 provided by MinIO is used as persistent storage to store all the data used. -Open the endpoint `http` retrieved by `stackablectl stacklet list` in your browser (http://172.18.0.2:32276 in this case). +Open the endpoint `https` retrieved by `stackablectl stacklet list` in your browser (https://10.0.0.11:31142 in this case). +You need to accept the self-signed certificate in your browser before you can access the MinIO console. +If the console is not reachable, you can forward the port used by the MinIO console and use https://localhost:9001 instead. + +[source,console] +---- +$ kubectl port-forward service/minio-console 9001:https +---- image::spark-k8s-anomaly-detection-taxi-data/minio_0.png[] @@ -124,7 +130,7 @@ This is a much smaller file, as it only contains scores for each aggregated peri The Spark job ingests the raw data and performs straightforward data wrangling and feature engineering. Any windowing features designed to capture the time-series nature of the data - such as lags or rolling averages - need to use evenly distributed partitions so that Spark can execute these tasks in parallel. The job uses an implementation of the Isolation Forest {forest-algo}[algorithm] provided by the scikit-learn {scikit-lib}[library]: -the model is trained in a single task but is then distributed to each executor from where a user-defined function invokes it (see {forest-article}[this article] for how to call the sklearn library with a pyspark UDF). +the model is trained in a single task and distributed among executors with the help of a PySpark user defined function. The Isolation Forest algorithm is used for unsupervised model training, meaning that a labelled set of data - against which the model is trained - is unnecessary. This makes model preparation easier as we do not have to divide the data set into training and validation datasets. @@ -142,6 +148,13 @@ image::spark-k8s-anomaly-detection-taxi-data/spark_job.png[] == Dashboard Open the `external-http` Superset endpoint found in the output of the `stackablectl stacklet list` command. +Alternatively, create a port-forward to the Superset service and point your browser to http://localhost:8088: + +[source,console] +---- +$ kubectl port-forward service/superset-external 8088:http +---- + The anomaly detection dashboard is pre-defined and accessible under the `Dashboards` tab when logged in to Superset using the username `admin` password `adminadmin`: image::spark-k8s-anomaly-detection-taxi-data/superset_anomaly_scores.png[] diff --git a/stacks/_templates/jupyterhub.yaml b/stacks/_templates/jupyterhub.yaml index d0ef489d..53e8d198 100644 --- a/stacks/_templates/jupyterhub.yaml +++ b/stacks/_templates/jupyterhub.yaml @@ -50,8 +50,8 @@ options: HADOOP_CONF_DIR: "/home/jovyan/hdfs" initContainers: - name: download-notebook - image: oci.stackable.tech/sdp/tools:1.0.0-stackable0.0.0-dev - command: ['sh', '-c', 'curl https://raw.githubusercontent.com/stackabletech/demos/main/stacks/jupyterhub-pyspark-hdfs/notebook.ipynb -o /notebook/notebook.ipynb'] + image: oci.stackable.tech/sdp/tools:1.0.0-stackable25.3.0 + command: ['sh', '-c', 'curl https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/jupyterhub-pyspark-hdfs/notebook.ipynb -o /notebook/notebook.ipynb'] volumeMounts: - mountPath: /notebook name: notebook diff --git a/stacks/_templates/keycloak.yaml b/stacks/_templates/keycloak.yaml index dee91706..58177993 100644 --- a/stacks/_templates/keycloak.yaml +++ b/stacks/_templates/keycloak.yaml @@ -48,7 +48,7 @@ spec: - name: tls mountPath: /tls/ - name: create-auth-class - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: ["/bin/bash", "-c"] args: - | diff --git a/stacks/end-to-end-security/hive-metastore.yaml b/stacks/end-to-end-security/hive-metastore.yaml index c64a5786..e1c08899 100644 --- a/stacks/end-to-end-security/hive-metastore.yaml +++ b/stacks/end-to-end-security/hive-metastore.yaml @@ -5,7 +5,7 @@ metadata: name: hive-iceberg spec: image: - productVersion: 4.0.1 + productVersion: 4.0.0 clusterConfig: database: connString: jdbc:postgresql://postgresql-hive-iceberg:5432/hive diff --git a/stacks/end-to-end-security/krb5.yaml b/stacks/end-to-end-security/krb5.yaml index e92aa69f..353b8fe9 100644 --- a/stacks/end-to-end-security/krb5.yaml +++ b/stacks/end-to-end-security/krb5.yaml @@ -14,7 +14,7 @@ spec: spec: initContainers: - name: init - image: oci.stackable.tech/sdp/krb5:1.21.1-stackable0.0.0-dev + image: oci.stackable.tech/sdp/krb5:1.21.1-stackable25.3.0 args: - sh - -euo @@ -35,7 +35,7 @@ spec: name: data containers: - name: kdc - image: oci.stackable.tech/sdp/krb5:1.21.1-stackable0.0.0-dev + image: oci.stackable.tech/sdp/krb5:1.21.1-stackable25.3.0 args: - krb5kdc - -n @@ -48,7 +48,7 @@ spec: - mountPath: /var/kerberos/krb5kdc name: data - name: kadmind - image: oci.stackable.tech/sdp/krb5:1.21.1-stackable0.0.0-dev + image: oci.stackable.tech/sdp/krb5:1.21.1-stackable25.3.0 args: - kadmind - -nofork @@ -61,7 +61,7 @@ spec: - mountPath: /var/kerberos/krb5kdc name: data - name: client - image: oci.stackable.tech/sdp/krb5:1.21.1-stackable0.0.0-dev + image: oci.stackable.tech/sdp/krb5:1.21.1-stackable25.3.0 tty: true stdin: true env: diff --git a/stacks/end-to-end-security/setup-postgresql.yaml b/stacks/end-to-end-security/setup-postgresql.yaml index 64e45ffb..9cc31af7 100644 --- a/stacks/end-to-end-security/setup-postgresql.yaml +++ b/stacks/end-to-end-security/setup-postgresql.yaml @@ -9,14 +9,14 @@ spec: initContainers: # The postgres image does not contain curl or wget... - name: download-dump - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: - bash - -c - | kubectl rollout status --watch statefulset/postgresql-superset cd /tmp - curl --fail -O https://raw.githubusercontent.com/stackabletech/demos/main/stacks/end-to-end-security/postgres_superset_dump.sql.gz + curl --fail -O https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/end-to-end-security/postgres_superset_dump.sql.gz gunzip postgres_superset_dump.sql.gz # We need to omit changing the users password, as otherwise the content in the Secrets does not match diff --git a/stacks/end-to-end-security/superset.yaml b/stacks/end-to-end-security/superset.yaml index a35afa19..4a7c9635 100644 --- a/stacks/end-to-end-security/superset.yaml +++ b/stacks/end-to-end-security/superset.yaml @@ -23,7 +23,7 @@ spec: spec: initContainers: - name: wait-for-setup-db-job - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: - bash - -c diff --git a/stacks/jupyterhub-keycloak/jupyterhub.yaml b/stacks/jupyterhub-keycloak/jupyterhub.yaml index 375763e1..5489c1aa 100644 --- a/stacks/jupyterhub-keycloak/jupyterhub.yaml +++ b/stacks/jupyterhub-keycloak/jupyterhub.yaml @@ -148,8 +148,8 @@ options: stackable.tech/vendor: Stackable initContainers: - name: download-notebook - image: oci.stackable.tech/sdp/tools:1.0.0-stackable0.0.0-dev - command: ['sh', '-c', 'curl https://raw.githubusercontent.com/stackabletech/demos/main/stacks/jupyterhub-keycloak/process-s3.ipynb -o /notebook/process-s3.ipynb'] + image: oci.stackable.tech/sdp/tools:1.0.0-stackable25.3.0 + command: ['sh', '-c', 'curl https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/jupyterhub-keycloak/process-s3.ipynb -o /notebook/process-s3.ipynb'] volumeMounts: - mountPath: /notebook name: notebook diff --git a/stacks/jupyterhub-keycloak/keycloak.yaml b/stacks/jupyterhub-keycloak/keycloak.yaml index eb625208..b18a4893 100644 --- a/stacks/jupyterhub-keycloak/keycloak.yaml +++ b/stacks/jupyterhub-keycloak/keycloak.yaml @@ -50,7 +50,7 @@ spec: mountPath: /tls/ - name: create-configmap resources: {} - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: ["/bin/bash", "-c"] args: - | diff --git a/stacks/keycloak-opa-poc/keycloak.yaml b/stacks/keycloak-opa-poc/keycloak.yaml index a5d64637..4ad1b099 100644 --- a/stacks/keycloak-opa-poc/keycloak.yaml +++ b/stacks/keycloak-opa-poc/keycloak.yaml @@ -70,7 +70,7 @@ spec: spec: containers: - name: propagate-keycloak-address - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 command: - bash - -x diff --git a/stacks/keycloak-opa-poc/setup-keycloak.yaml b/stacks/keycloak-opa-poc/setup-keycloak.yaml index fca8cdd5..b81934aa 100644 --- a/stacks/keycloak-opa-poc/setup-keycloak.yaml +++ b/stacks/keycloak-opa-poc/setup-keycloak.yaml @@ -29,7 +29,7 @@ spec: spec: containers: - name: setup-keycloak - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 env: - name: KEYCLOAK_ADMIN_PASSWORD valueFrom: diff --git a/stacks/logging/setup-opensearch-dashboards.yaml b/stacks/logging/setup-opensearch-dashboards.yaml index bf707449..43653fba 100644 --- a/stacks/logging/setup-opensearch-dashboards.yaml +++ b/stacks/logging/setup-opensearch-dashboards.yaml @@ -8,7 +8,7 @@ spec: spec: containers: - name: setup-opensearch-dashboards - image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable25.3.0 env: - name: OPEN_SEARCH_ADMIN_PASSWORD valueFrom: diff --git a/stacks/signal-processing/jupyterhub.yaml b/stacks/signal-processing/jupyterhub.yaml index 7bec554e..6e28af01 100644 --- a/stacks/signal-processing/jupyterhub.yaml +++ b/stacks/signal-processing/jupyterhub.yaml @@ -30,7 +30,7 @@ options: singleuser: cmd: null image: - # TODO (@NickLarsenNZ): Use a versioned image with stackable0.0.0-dev or stackableXX.X.X so that + # TODO (@NickLarsenNZ): Use a versioned image with stackable25.3.0 or stackableXX.X.X so that # the demo is reproducable for the release and it will be automatically replaced for the release branch. name: oci.stackable.tech/stackable/jupyter-pyspark-with-alibi-detect tag: python-3.9 @@ -41,8 +41,8 @@ options: stackable.tech/vendor: Stackable initContainers: - name: download-notebook - image: oci.stackable.tech/sdp/tools:1.0.0-stackable0.0.0-dev - command: ['sh', '-c', 'curl https://raw.githubusercontent.com/stackabletech/demos/main/stacks/signal-processing/tsdb.ipynb -o /notebook/tsdb.ipynb'] + image: oci.stackable.tech/sdp/tools:1.0.0-stackable25.3.0 + command: ['sh', '-c', 'curl https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/signal-processing/tsdb.ipynb -o /notebook/tsdb.ipynb'] volumeMounts: - mountPath: /notebook name: notebook diff --git a/stacks/signal-processing/nifi.yaml b/stacks/signal-processing/nifi.yaml index 62231374..22f4415f 100644 --- a/stacks/signal-processing/nifi.yaml +++ b/stacks/signal-processing/nifi.yaml @@ -6,7 +6,7 @@ metadata: spec: image: productVersion: 2.2.0 - # TODO (@NickLarsenNZ): Use a versioned image with stackable0.0.0-dev or stackableXX.X.X so that + # TODO (@NickLarsenNZ): Use a versioned image with stackable25.3.0 or stackableXX.X.X so that # the demo is reproducable for the release and it will be automatically replaced for the release branch. custom: oci.stackable.tech/stackable/nifi:2.2.0-postgresql # pullPolicy: IfNotPresent diff --git a/stacks/spark-trino-superset-s3/s3-connection.yaml b/stacks/spark-trino-superset-s3/s3-connection.yaml index 55ae8400..980a3626 100644 --- a/stacks/spark-trino-superset-s3/s3-connection.yaml +++ b/stacks/spark-trino-superset-s3/s3-connection.yaml @@ -10,6 +10,11 @@ spec: accessStyle: Path credentials: secretClass: minio-s3-credentials + tls: + verification: + server: + caCert: + secretClass: tls --- apiVersion: secrets.stackable.tech/v1alpha1 kind: SecretClass diff --git a/stacks/stacks-v2.yaml b/stacks/stacks-v2.yaml index d013c95f..17c058ee 100644 --- a/stacks/stacks-v2.yaml +++ b/stacks/stacks-v2.yaml @@ -2,7 +2,7 @@ stacks: monitoring: description: Stack containing Prometheus and Grafana - stackableRelease: dev + stackableRelease: 25.3 stackableOperators: - commons - listener @@ -11,9 +11,9 @@ stacks: - prometheus - grafana manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/monitoring/grafana-dashboards.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/prometheus.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/prometheus-service-monitor.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/monitoring/grafana-dashboards.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/prometheus.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/prometheus-service-monitor.yaml supportedNamespaces: [] resourceRequests: cpu: 1750m @@ -25,7 +25,7 @@ stacks: default: adminadmin logging: description: Stack containing OpenSearch, OpenSearch Dashboards (Kibana) and Vector aggregator - stackableRelease: dev + stackableRelease: 25.3 stackableOperators: - commons - listener @@ -37,11 +37,11 @@ stacks: - opensearch-dashboards - vector manifests: - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/opensearch.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/opensearch-dashboards.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/logging/setup-opensearch-dashboards.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/vector-aggregator.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/vector-aggregator-discovery.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/opensearch.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/opensearch-dashboards.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/logging/setup-opensearch-dashboards.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/vector-aggregator.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/vector-aggregator-discovery.yaml supportedNamespaces: [] resourceRequests: cpu: 5150m @@ -60,7 +60,7 @@ stacks: observability: description: >- An observability stack with auto-injection of the opentelemetry-collector sidecar to receive traces/logs/metrics via OTLP, and send them to Jaeger/Tempo/Loki. - stackableRelease: dev + stackableRelease: 25.3 stackableOperators: - commons - listener @@ -71,21 +71,21 @@ stacks: - observability - tracing manifests: - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/observability/jaeger.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/observability/opentelemetry-operator.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/observability/grafana-admin-credentials.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/observability/grafana.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/observability/grafana-tempo.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/observability/grafana-loki.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/observability/opentelemetry-collector-sidecar.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/observability/opentelemetry-collector-deployment.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/observability/jaeger.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/observability/opentelemetry-operator.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/observability/grafana-admin-credentials.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/observability/grafana.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/observability/grafana-tempo.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/observability/grafana-loki.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/observability/opentelemetry-collector-sidecar.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/observability/opentelemetry-collector-deployment.yaml parameters: - name: grafanaAdminPassword description: Password of the Grafana admin user default: adminadmin airflow: description: Stack containing Airflow scheduling platform - stackableRelease: dev + stackableRelease: 25.3 stackableOperators: - commons - listener @@ -95,9 +95,9 @@ stacks: labels: - airflow manifests: - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/postgresql-airflow.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/redis-airflow.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/airflow/airflow.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/postgresql-airflow.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/redis-airflow.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/airflow/airflow.yaml supportedNamespaces: [] resourceRequests: cpu: 3400m @@ -112,7 +112,7 @@ stacks: default: airflowSecretKey data-lakehouse-iceberg-trino-spark: description: Data lakehouse using Iceberg lakehouse on S3, Trino as query engine, Spark for streaming ingest and Superset for data visualization - stackableRelease: dev + stackableRelease: 25.3 stackableOperators: - commons - listener @@ -135,17 +135,17 @@ stacks: - minio - s3 manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/minio-distributed-tls/rendered-chart.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/postgresql-hive.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/postgresql-hive-iceberg.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/postgresql-superset.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/data-lakehouse-iceberg-trino-spark/s3-connection.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/data-lakehouse-iceberg-trino-spark/hive-metastores.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/data-lakehouse-iceberg-trino-spark/trino.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/data-lakehouse-iceberg-trino-spark/zookeeper.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/data-lakehouse-iceberg-trino-spark/kafka.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/data-lakehouse-iceberg-trino-spark/nifi.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/nifi-kafka-druid-superset-s3/superset.yaml # Reuse + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/minio-distributed-tls/rendered-chart.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/postgresql-hive.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/postgresql-hive-iceberg.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/postgresql-superset.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/data-lakehouse-iceberg-trino-spark/s3-connection.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/data-lakehouse-iceberg-trino-spark/hive-metastores.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/data-lakehouse-iceberg-trino-spark/trino.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/data-lakehouse-iceberg-trino-spark/zookeeper.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/data-lakehouse-iceberg-trino-spark/kafka.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/data-lakehouse-iceberg-trino-spark/nifi.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/nifi-kafka-druid-superset-s3/superset.yaml # Reuse supportedNamespaces: ["default"] # until namespace can be templates, the minio FQDN hard-codes the namespace resourceRequests: cpu: "71" @@ -169,7 +169,7 @@ stacks: default: supersetSecretKey hdfs-hbase: description: HBase cluster using HDFS as underlying storage - stackableRelease: dev + stackableRelease: 25.3 stackableOperators: - commons - listener @@ -181,9 +181,9 @@ stacks: - hbase - hdfs manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/hdfs-hbase/zookeeper.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/hdfs-hbase/hdfs.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/hdfs-hbase/hbase.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/hdfs-hbase/zookeeper.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/hdfs-hbase/hdfs.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/hdfs-hbase/hbase.yaml supportedNamespaces: [] resourceRequests: cpu: 4200m @@ -192,7 +192,7 @@ stacks: parameters: [] nifi-kafka-druid-superset-s3: description: Stack containing NiFi, Kafka, Druid, MinIO and Superset for data visualization - stackableRelease: dev + stackableRelease: 25.3 stackableOperators: - commons - listener @@ -210,14 +210,14 @@ stacks: - minio - s3 manifests: - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/minio.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/postgresql-druid.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/postgresql-superset.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/nifi-kafka-druid-superset-s3/zookeeper.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/nifi-kafka-druid-superset-s3/kafka.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/nifi-kafka-druid-superset-s3/druid.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/nifi-kafka-druid-superset-s3/superset.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/nifi-kafka-druid-superset-s3/nifi.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/minio.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/postgresql-druid.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/postgresql-superset.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/nifi-kafka-druid-superset-s3/zookeeper.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/nifi-kafka-druid-superset-s3/kafka.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/nifi-kafka-druid-superset-s3/druid.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/nifi-kafka-druid-superset-s3/superset.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/nifi-kafka-druid-superset-s3/nifi.yaml supportedNamespaces: [] resourceRequests: cpu: 8900m @@ -238,7 +238,7 @@ stacks: default: adminadmin spark-trino-superset-s3: description: Stack containing MinIO, Trino and Superset for data visualization - stackableRelease: dev + stackableRelease: 25.3 stackableOperators: - commons - listener @@ -254,15 +254,15 @@ stacks: - minio - s3 manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/minio-tls/rendered-chart.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/postgresql-hive.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/postgresql-hive-iceberg.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/postgresql-superset.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/spark-trino-superset-s3/s3-connection.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/spark-trino-superset-s3/hive-metastore.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/trino-superset-s3/trino.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/spark-trino-superset-s3/trino-prediction-catalog.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/trino-superset-s3/superset.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/minio-tls/rendered-chart.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/postgresql-hive.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/postgresql-hive-iceberg.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/postgresql-superset.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/spark-trino-superset-s3/s3-connection.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/spark-trino-superset-s3/hive-metastore.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/trino-superset-s3/trino.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/spark-trino-superset-s3/trino-prediction-catalog.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/trino-superset-s3/superset.yaml supportedNamespaces: [] resourceRequests: cpu: 7100m @@ -283,7 +283,7 @@ stacks: default: supersetSecretKey trino-superset-s3: description: Stack containing MinIO, Trino and Superset for data visualization - stackableRelease: dev + stackableRelease: 25.3 stackableOperators: - commons - listener @@ -298,13 +298,13 @@ stacks: - minio - s3 manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/minio-tls/rendered-chart.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/postgresql-hive.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/postgresql-superset.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/trino-superset-s3/s3-connection.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/trino-superset-s3/hive-metastore.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/trino-superset-s3/trino.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/trino-superset-s3/superset.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/minio-tls/rendered-chart.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/postgresql-hive.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/postgresql-superset.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/trino-superset-s3/s3-connection.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/trino-superset-s3/hive-metastore.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/trino-superset-s3/trino.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/trino-superset-s3/superset.yaml supportedNamespaces: [default] # until namespace can be templates, the minio FQDN hard-codes the namespace resourceRequests: cpu: 6800m @@ -325,7 +325,7 @@ stacks: default: supersetSecretKey trino-iceberg: description: Stack containing Trino using Apache Iceberg as a S3 data lakehouse - stackableRelease: dev + stackableRelease: 25.3 stackableOperators: - commons - listener @@ -340,11 +340,11 @@ stacks: - minio - s3 manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/minio-distributed-small-tls/rendered-chart.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/postgresql-hive-iceberg.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/trino-iceberg/s3-connection.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/trino-iceberg/hive-metastores.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/trino-iceberg/trino.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/minio-distributed-small-tls/rendered-chart.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/postgresql-hive-iceberg.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/trino-iceberg/s3-connection.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/trino-iceberg/hive-metastores.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/trino-iceberg/trino.yaml supportedNamespaces: ["default"] # until namespace can be templates, the minio FQDN hard-codes the namespace resourceRequests: cpu: 6000m # Measured 5600m @@ -359,7 +359,7 @@ stacks: default: adminadmin jupyterhub-pyspark-hdfs: description: Jupyterhub with PySpark and HDFS integration - stackableRelease: dev + stackableRelease: 25.3 stackableOperators: - commons - listener @@ -372,12 +372,12 @@ stacks: - hdfs - pyspark manifests: - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/jupyterhub.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/jupyterhub-pyspark-hdfs/zookeeper.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/jupyterhub-pyspark-hdfs/hdfs.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/jupyterhub-pyspark-hdfs/serviceaccount.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/jupyterhub.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/jupyterhub-pyspark-hdfs/zookeeper.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/jupyterhub-pyspark-hdfs/hdfs.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/jupyterhub-pyspark-hdfs/serviceaccount.yaml # TODO Use patched JHub that created service for us from customer setup (ask Sebastian) - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/jupyterhub-pyspark-hdfs/spark_driver_service.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/jupyterhub-pyspark-hdfs/spark_driver_service.yaml supportedNamespaces: [] resourceRequests: cpu: 3350m @@ -389,7 +389,7 @@ stacks: default: adminadmin dual-hive-hdfs-s3: description: Dual stack Hive on HDFS and S3 for Hadoop/Hive to Trino migration - stackableRelease: dev + stackableRelease: 25.3 stackableOperators: - commons - listener @@ -405,12 +405,12 @@ stacks: - hdfs - s3 manifests: - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/postgresql-hivehdfs.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/postgresql-hives3.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/minio.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/dual-hive-hdfs-s3/hdfs.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/dual-hive-hdfs-s3/hive.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/dual-hive-hdfs-s3/trino.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/postgresql-hivehdfs.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/postgresql-hives3.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/minio.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/dual-hive-hdfs-s3/hdfs.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/dual-hive-hdfs-s3/hive.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/dual-hive-hdfs-s3/trino.yaml supportedNamespaces: [] resourceRequests: cpu: 7750m @@ -426,7 +426,7 @@ stacks: The bind user credentials are: ldapadmin:ldapadminpassword. No AuthenticationClass is configured, The AuthenticationClass is created manually in the tutorial. Use the 'openldap' Stack for an OpenLDAD with an AuthenticationClass already installed. - stackableRelease: dev + stackableRelease: 25.3 stackableOperators: - commons - listener @@ -435,7 +435,7 @@ stacks: - authentication - ldap manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/authentication/openldap-tls.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/authentication/openldap-tls.yaml supportedNamespaces: ["default"] resourceRequests: cpu: 1950m @@ -449,7 +449,7 @@ stacks: The bind user credentials are: ldapadmin:ldapadminpassword. The LDAP AuthenticationClass is called 'ldap' and the SecretClass for the bind credentials is called 'ldap-bind-credentials'. The stack already creates an appropriate Secret, so referring to the 'ldap' AuthenticationClass in your ProductCluster should be enough. - stackableRelease: dev + stackableRelease: 25.3 stackableOperators: - commons - listener @@ -458,8 +458,8 @@ stacks: - authentication - ldap manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/authentication/openldap-tls.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/authentication/openldap-tls-authenticationclass.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/authentication/openldap-tls.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/authentication/openldap-tls-authenticationclass.yaml supportedNamespaces: [] resourceRequests: cpu: 1950m @@ -475,7 +475,7 @@ stacks: 3 users are created in Keycloak: admin:adminadmin, alice:alicealice, bob:bobbob. admin and alice are admins with full authorization in Druid and Trino, bob is not authorized. This is a proof-of-concept and the mechanisms used here are subject to change. - stackableRelease: dev + stackableRelease: 25.3 stackableOperators: - commons - listener @@ -490,18 +490,18 @@ stacks: - authentication - sso manifests: - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/postgresql-superset.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/postgresql-druid.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/keycloak-opa-poc/serviceaccount.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/keycloak-opa-poc/keycloak.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/keycloak-opa-poc/setup-keycloak.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/keycloak-opa-poc/opa.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/keycloak-opa-poc/policies.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/keycloak-opa-poc/zookeeper.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/keycloak-opa-poc/hdfs.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/keycloak-opa-poc/druid.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/keycloak-opa-poc/trino.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/keycloak-opa-poc/superset.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/postgresql-superset.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/postgresql-druid.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/keycloak-opa-poc/serviceaccount.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/keycloak-opa-poc/keycloak.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/keycloak-opa-poc/setup-keycloak.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/keycloak-opa-poc/opa.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/keycloak-opa-poc/policies.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/keycloak-opa-poc/zookeeper.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/keycloak-opa-poc/hdfs.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/keycloak-opa-poc/druid.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/keycloak-opa-poc/trino.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/keycloak-opa-poc/superset.yaml supportedNamespaces: ["default"] # ClusterRoleBinding needs explicit namespace resourceRequests: cpu: 7850m @@ -541,7 +541,7 @@ stacks: Note that this stack is tightly coupled with the demo. So if you install the stack you will get demo-specific parts (such as Keycloak users or regorules). - stackableRelease: dev + stackableRelease: 25.3 stackableOperators: - commons - listener @@ -567,24 +567,24 @@ stacks: memory: 19586Mi pvc: 40Gi manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/keycloak-serviceaccount.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/end-to-end-security/keycloak-realm-config.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/keycloak.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/postgresql-hive-iceberg.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/postgresql-superset.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/end-to-end-security/krb5.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/end-to-end-security/kerberos-secretclass.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/end-to-end-security/opa.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/end-to-end-security/zookeeper.yaml # TODO: Add authentication - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/end-to-end-security/hdfs.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/end-to-end-security/hdfs-regorules.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/end-to-end-security/hive-metastore.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/end-to-end-security/trino.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/end-to-end-security/trino-regorules.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/end-to-end-security/trino-policies.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/end-to-end-security/rbac.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/end-to-end-security/setup-postgresql.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/end-to-end-security/superset.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/keycloak-serviceaccount.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/end-to-end-security/keycloak-realm-config.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/keycloak.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/postgresql-hive-iceberg.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/postgresql-superset.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/end-to-end-security/krb5.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/end-to-end-security/kerberos-secretclass.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/end-to-end-security/opa.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/end-to-end-security/zookeeper.yaml # TODO: Add authentication + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/end-to-end-security/hdfs.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/end-to-end-security/hdfs-regorules.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/end-to-end-security/hive-metastore.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/end-to-end-security/trino.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/end-to-end-security/trino-regorules.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/end-to-end-security/trino-policies.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/end-to-end-security/rbac.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/end-to-end-security/setup-postgresql.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/end-to-end-security/superset.yaml parameters: - name: keycloakAdminPassword description: Password of the Keycloak admin user @@ -613,7 +613,7 @@ stacks: signal-processing: description: >- A stack used for creating, streaming and processing in-flight data and persisting it to TimescaleDB before it is displayed in Grafana - stackableRelease: dev + stackableRelease: 25.3 stackableOperators: - commons - listener @@ -626,15 +626,15 @@ stacks: - jupyterhub - grafana manifests: - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/signal-processing/secrets.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/signal-processing/grafana-dashboards.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/signal-processing/grafana.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/postgresql-timescaledb.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/nifi-kafka-druid-superset-s3/zookeeper.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/signal-processing/nifi.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/jupyterhub-pyspark-hdfs/serviceaccount.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/jupyterhub-pyspark-hdfs/spark_driver_service.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/signal-processing/jupyterhub.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/signal-processing/secrets.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/signal-processing/grafana-dashboards.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/signal-processing/grafana.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/postgresql-timescaledb.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/nifi-kafka-druid-superset-s3/zookeeper.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/signal-processing/nifi.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/jupyterhub-pyspark-hdfs/serviceaccount.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/jupyterhub-pyspark-hdfs/spark_driver_service.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/signal-processing/jupyterhub.yaml parameters: - name: nifiAdminPassword description: Password of the NiFI admin user @@ -651,7 +651,7 @@ stacks: jupyterhub-keycloak: description: >- A stack used to demonstrate JupyterHub and Keycloak, using parts of the end-to-end security demo. - stackableRelease: dev + stackableRelease: 25.3 stackableOperators: - commons - listener @@ -666,13 +666,13 @@ stacks: memory: 9010Mi pvc: 24Gi manifests: - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/_templates/minio.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/jupyterhub-keycloak/keycloak-serviceaccount.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/jupyterhub-keycloak/keycloak-realm-config.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/jupyterhub-keycloak/keycloak.yaml - - helmChart: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/jupyterhub-keycloak/jupyterhub.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/jupyterhub-keycloak/serviceaccount.yaml - - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/main/stacks/jupyterhub-keycloak/s3-connection.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/_templates/minio.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/jupyterhub-keycloak/keycloak-serviceaccount.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/jupyterhub-keycloak/keycloak-realm-config.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/jupyterhub-keycloak/keycloak.yaml + - helmChart: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/jupyterhub-keycloak/jupyterhub.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/jupyterhub-keycloak/serviceaccount.yaml + - plainYaml: https://raw.githubusercontent.com/stackabletech/demos/release-25.3/stacks/jupyterhub-keycloak/s3-connection.yaml parameters: - name: keycloakAdminPassword description: Password of the Keycloak admin user