From 461131b09737f5278fa9dc0c76f3e3d071766bd8 Mon Sep 17 00:00:00 2001 From: Patrik Pettersson Date: Mon, 9 Dec 2024 08:57:00 +0100 Subject: [PATCH] Release 2.5.0 --- README.md | 20 +- RELEASE-NOTES.md | 657 --------------- containers/Makefile | 61 +- containers/README.md | 9 - containers/build-files.mk | 1 + .../spotfire-automationservices/Dockerfile | 4 +- containers/images/spotfire-base/Dockerfile | 2 +- containers/images/spotfire-config/Dockerfile | 5 +- .../images/spotfire-deployment/Dockerfile | 5 +- .../images/spotfire-nodemanager/Dockerfile | 5 +- .../images/spotfire-pythonservice/Dockerfile | 5 +- .../images/spotfire-rservice/Dockerfile | 3 +- containers/images/spotfire-server/Dockerfile | 9 +- containers/images/spotfire-server/README.md | 5 - .../config/extended.accesslog.xml | 4 +- .../log4j2-is.xml.rolling.transformation.xml | 26 + ...4j2.xml.socket-appender.transformation.xml | 15 - .../spotfire-server/scripts/setup-logging.sh | 10 - .../images/spotfire-terrservice/Dockerfile | 3 +- .../images/spotfire-webplayer/Dockerfile | 3 +- .../images/spotfire-workerhost/Dockerfile | 1 + {helm => docs}/examples/README.md | 3 +- {helm => docs}/examples/aws/README.md | 0 docs/examples/aws/alb-ingress.md | 118 +++ {helm => docs}/examples/aws/rds.md | 12 +- {helm => docs}/examples/aws/s3.md | 31 +- .../database-values/aurora-postgres.yaml | 0 .../examples/database-values/aws-mssql.yaml | 0 .../examples/database-values/aws-oracle.yaml | 0 .../database-values/aws-postgres.yaml | 0 .../examples/database-values/azure-mssql.yaml | 0 .../database-values/azure-postgres.yaml | 0 .../examples/database-values/mssql.yaml | 0 .../examples/database-values/oracle.yaml | 0 .../examples/database-values/postgres.yaml | 0 docs/examples/gcp/README.md | 9 + docs/examples/gcp/gce-ingress.md | 135 ++++ .../examples/gcp/google-cloud-sql-postgres.md | 124 +++ docs/examples/gcp/google-cloud-storage.md | 94 +++ .../umbrella-values}/values-actionlogdb.yaml | 0 .../values-initial-setup.yaml | 0 .../values-keda-autoscaling.yaml | 4 +- ...multiple-services-and-webplayer-pools.yaml | 5 +- .../umbrella-values}/values-volumes.yaml | 0 .../webplayer-custom-modules/Dockerfile | 0 .../webplayer-custom-modules/README.md | 0 .../custom-modules/.gitignore | 0 .../unpack-modules-from-spk-sdn.sh | 0 .../unpack-modules-to-pvc.yaml | 0 helm/Makefile | 58 +- helm/README.md | 9 +- .../spotfire-automationservices/Chart.yaml | 6 +- .../spotfire-automationservices/README.md | 18 +- .../README.md.gotmpl | 2 +- .../spotfire-automationservices/values.yaml | 8 +- helm/charts/spotfire-common/Chart.yaml | 2 +- helm/charts/spotfire-common/README.md | 2 +- .../spotfire-common/templates/_logging.tpl | 28 - helm/charts/spotfire-platform/Chart.yaml | 34 + helm/charts/spotfire-platform/README.md | 751 ++++++++++++++++++ .../charts/spotfire-platform/README.md.gotmpl | 99 +++ .../spotfire-platform/templates/NOTES.txt | 9 + .../spotfire-platform/test/basic-values.yaml | 8 + helm/charts/spotfire-platform/values.yaml | 97 +++ helm/charts/spotfire-pythonservice/Chart.yaml | 6 +- helm/charts/spotfire-pythonservice/README.md | 22 +- .../spotfire-pythonservice/README.md.gotmpl | 4 +- .../deploy-packages-to-pv-with-job.yaml | 2 +- .../charts/spotfire-pythonservice/values.yaml | 8 +- helm/charts/spotfire-rservice/Chart.yaml | 6 +- helm/charts/spotfire-rservice/README.md | 18 +- helm/charts/spotfire-rservice/values.yaml | 8 +- helm/charts/spotfire-server/Chart.yaml | 10 +- helm/charts/spotfire-server/README.md | 41 +- helm/charts/spotfire-server/README.md.gotmpl | 13 +- .../config-job-scripts/main.sh | 3 + .../fluent-bit/tss.parsers.fluentbit.conf | 21 +- .../config/fluent-bit/tss.tail.fluentbit.conf | 51 +- .../spotfire-server/templates/NOTES.txt | 66 +- .../templates/config-job/_notes.tpl | 70 ++ .../templates/haproxy-config.tpl | 10 + helm/charts/spotfire-server/values.yaml | 20 +- helm/charts/spotfire-terrservice/Chart.yaml | 6 +- helm/charts/spotfire-terrservice/README.md | 20 +- .../spotfire-terrservice/README.md.gotmpl | 2 +- helm/charts/spotfire-terrservice/values.yaml | 8 +- helm/charts/spotfire-webplayer/Chart.yaml | 6 +- helm/charts/spotfire-webplayer/README.md | 18 +- .../spotfire-webplayer/README.md.gotmpl | 2 +- helm/charts/spotfire-webplayer/values.yaml | 8 +- helm/examples/aws/alb-ingress.md | 114 --- .../spotfire-umbrella-example/Chart.yaml | 40 - .../spotfire-umbrella-example/README.md | 59 -- .../spotfire-umbrella-example/values.yaml | 84 -- helm/test.mk | 27 - utilities/generate-troubleshooting-bundle.sh | 271 +++++++ versions.mk | 14 +- 97 files changed, 2215 insertions(+), 1362 deletions(-) delete mode 100644 RELEASE-NOTES.md create mode 100644 containers/images/spotfire-server/config/log4j2-is.xml.rolling.transformation.xml delete mode 100644 containers/images/spotfire-server/config/log4j2.xml.socket-appender.transformation.xml rename {helm => docs}/examples/README.md (64%) rename {helm => docs}/examples/aws/README.md (100%) create mode 100644 docs/examples/aws/alb-ingress.md rename {helm => docs}/examples/aws/rds.md (92%) rename {helm => docs}/examples/aws/s3.md (80%) rename {helm => docs}/examples/database-values/aurora-postgres.yaml (100%) rename {helm => docs}/examples/database-values/aws-mssql.yaml (100%) rename {helm => docs}/examples/database-values/aws-oracle.yaml (100%) rename {helm => docs}/examples/database-values/aws-postgres.yaml (100%) rename {helm => docs}/examples/database-values/azure-mssql.yaml (100%) rename {helm => docs}/examples/database-values/azure-postgres.yaml (100%) rename {helm => docs}/examples/database-values/mssql.yaml (100%) rename {helm => docs}/examples/database-values/oracle.yaml (100%) rename {helm => docs}/examples/database-values/postgres.yaml (100%) create mode 100644 docs/examples/gcp/README.md create mode 100644 docs/examples/gcp/gce-ingress.md create mode 100644 docs/examples/gcp/google-cloud-sql-postgres.md create mode 100644 docs/examples/gcp/google-cloud-storage.md rename {helm/examples/spotfire-umbrella-example => docs/examples/umbrella-values}/values-actionlogdb.yaml (100%) rename {helm/examples/spotfire-umbrella-example => docs/examples/umbrella-values}/values-initial-setup.yaml (100%) rename {helm/examples/spotfire-umbrella-example => docs/examples/umbrella-values}/values-keda-autoscaling.yaml (98%) rename {helm/examples/spotfire-umbrella-example => docs/examples/umbrella-values}/values-multiple-services-and-webplayer-pools.yaml (90%) rename {helm/examples/spotfire-umbrella-example => docs/examples/umbrella-values}/values-volumes.yaml (100%) rename {helm => docs}/examples/webplayer-custom-modules/Dockerfile (100%) rename {helm => docs}/examples/webplayer-custom-modules/README.md (100%) rename {helm => docs}/examples/webplayer-custom-modules/custom-modules/.gitignore (100%) rename {helm => docs}/examples/webplayer-custom-modules/unpack-modules-from-spk-sdn.sh (100%) mode change 100755 => 100644 rename {helm => docs}/examples/webplayer-custom-modules/unpack-modules-to-pvc.yaml (100%) create mode 100644 helm/charts/spotfire-platform/Chart.yaml create mode 100644 helm/charts/spotfire-platform/README.md create mode 100755 helm/charts/spotfire-platform/README.md.gotmpl create mode 100644 helm/charts/spotfire-platform/templates/NOTES.txt create mode 100644 helm/charts/spotfire-platform/test/basic-values.yaml create mode 100644 helm/charts/spotfire-platform/values.yaml create mode 100644 helm/charts/spotfire-server/templates/config-job/_notes.tpl delete mode 100644 helm/examples/aws/alb-ingress.md delete mode 100644 helm/examples/spotfire-umbrella-example/Chart.yaml delete mode 100644 helm/examples/spotfire-umbrella-example/README.md delete mode 100644 helm/examples/spotfire-umbrella-example/values.yaml delete mode 100644 helm/test.mk create mode 100755 utilities/generate-troubleshooting-bundle.sh diff --git a/README.md b/README.md index 75af4f5..0b7a033 100644 --- a/README.md +++ b/README.md @@ -21,10 +21,12 @@ Carefully review the [Cloud Computing Environment Licensing Policy (“CCEL Poli ## Prerequisites -- Required Spotfire installation packages. If you have a TIBCO account, you can download the packages from [TIBCO eDelivery](https://edelivery.tibco.com/storefront/index.ep). -- Kubernetes 1.24+, a working Kubernetes cluster from a [certified K8s distro](https://www.cncf.io/certification/software-conformance/). -- Helm 3+, for building and deploying the charts. -- An [OCI-compliant](https://opencontainers.org/) container image building tool (for example, `docker`, `podman`, or alternative), for building the container images. +- **Spotfire Installation Packages**: Required packages are listed in [containers/build-files.mk](containers/build-files.mk). You can download them from [TIBCO eDelivery](https://edelivery.tibco.com/storefront/index.ep). +- **Linux Host**: A Linux host with permissions to build and execute the containers. This can be a bare metal server, a virtual machine, or WSL on Windows. +- **OCI-Compliant Container Image Building Tool**: An OCI-compliant tool like `docker` or `podman` for building the container images. +- **GNU Make 3.82+**: Ensure `make` is installed on your system to use the provided Makefiles for building the images and charts. +- **Kubernetes 1.24+**: A working Kubernetes cluster from a [certified K8s distro](https://www.cncf.io/certification/software-conformance/) (required for deploying the charts and containers). +- **Helm 3+**: For building and deploying the charts (required for deploying the charts and containers). ## Components @@ -61,6 +63,16 @@ For issues related to the Spotfire products, use the [support channel](https://s For improvements related to the Spotfire products, use the [Ideas portal](https://spotfi.re/ideas). +When reporting issues or seeking help make sure to collect as much relevant information as possible. Example of such information include: + +- Description of the issue, including any error messages +- Steps to reproduce the issue, including commands and values used +- Time and date, identifiers such as usernames, file paths +- Helm, container and Kubernetes versions +- Any other relevant information + +The script [generate-troubleshooting-bundle.sh](utilities/generate-troubleshooting-bundle.sh) can be used as starting point when collecting information from a Spotfire Helm deployment. + For issues related to third party products, see their respective documentation. # Licenses diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md deleted file mode 100644 index f8d2fb0..0000000 --- a/RELEASE-NOTES.md +++ /dev/null @@ -1,657 +0,0 @@ -# Release v2.4.0 - -This release includes recipes for building container images and Helm charts for the following products. - -- Spotfire Server 14.4.0 -- Spotfire Web Player 14.4.0 -- Spotfire Automation Services 14.4.0 -- Spotfire Enterprise Runtime for R - Server Edition 1.21.0 -- Spotfire Service for R 1.21.0 -- Spotfire Service for Python 1.21.0 - -The recipes are validated with the listed Spotfire products and versions. They could work with other Spotfire versions with modifications. - -Version mapping table: - -| Chart name | Chart version | appVersion | Image tag | -| ---------- | ------------- | ---------- | --------- | -| spotfire-server | 0.2.4 | 14.4.0 | 14.4.0-1 | -| spotfire-webplayer | 0.2.4 | 14.4.0 | 14.4.0-1 | -| spotfire-automationservices | 0.2.4 | 14.4.0 | 14.4.0-1 | -| spotfire-terrservice | 0.2.4 | 1.21.0 | 1.21.0-1 | -| spotfire-rservice | 0.2.4 | 1.21.0 | 1.21.0-1 | -| spotfire-pythonservice | 0.2.4 | 1.21.0 | 1.21.0-1 | - -## Changes -- TSCDK-420 The config-job in the spotfire-server helm chart fails when using the values configuration.deployment.enabled=true and configuration.deployment.defaultDeployment.enabled=false. - -### General - -- Updated R to version 4.4 -- Added "ingressClassName" to Spotfire server values file. Reference: -https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/ - - -### spotfire-server chart - -| New key | Old key | Comment | -| - | - | - | -| ingressClassName | - | IngressClass that will be be used for the Ingress (Kubernetes 1.18+). | - - - -# Release v2.3.0 - -This release includes recipes for building container images and Helm charts for the following products. - -- Spotfire Server 14.3.0 -- Spotfire Web Player 14.3.0 -- Spotfire Automation Services 14.3.0 -- Spotfire Enterprise Runtime for R - Server Edition 1.20.0 -- Spotfire Service for R 1.20.0 -- Spotfire Service for Python 1.20.0 - -The recipes are validated with the listed Spotfire products and versions. They could work with other Spotfire versions with modifications. - -Version mapping table: - -| Chart name | Chart version | appVersion | Image tag | -| ---------- | ------------- | ---------- | --------- | -| spotfire-server | 0.2.3 | 14.3.0 | 14.3.0-1 | -| spotfire-webplayer | 0.2.3 | 14.3.0 | 14.3.0-1 | -| spotfire-automationservices | 0.2.3 | 14.3.0 | 14.3.0-1 | -| spotfire-terrservice | 0.2.3 | 1.20.0 | 1.20.0-1 | -| spotfire-rservice | 0.2.3 | 1.20.0 | 1.20.0-1 | -| spotfire-pythonservice | 0.2.3 | 1.20.0 | 1.20.0-1 | - -## Changes - -- TSCDK-372 Added support for adding extra sidecar containers in the charts. -- TSS-33916 Improvements to node-to-server trust exchange. - -### spotfire-server chart - -| New key | Old key | Comment | -| - | - | - | -| extraContainers | - | Additional sidecar containers to add to the server pod. | - -### spotfire-pythonservice chart - -| New key | Old key | Comment | -| - | - | - | -| extraContainers | - | Additional sidecar containers to add to the service pod. | - -### spotfire-terrservice chart - -| New key | Old key | Comment | -| - | - | - | -| extraContainers | - | Additional sidecar containers to add to the service pod. | - -### spotfire-webplayer chart - -| New key | Old key | Comment | -| - | - | - | -| extraContainers | - | Additional sidecar containers to add to the service pod. | - -### spotfire-automationservices chart - -| New key | Old key | Comment | -| - | - | - | -| extraContainers | - | Additional sidecar containers to add to the service pod. | - -### spotfire-rservice chart - -| New key | Old key | Comment | -| - | - | - | -| extraContainers | - | Additional sidecar containers to add to the service pod. | - -# Release v2.2.0 - -This release includes recipes for building container images and Helm charts for the following products. - -- Spotfire Server 14.2.0 -- Spotfire Service for Python 1.19.0 -- Spotfire Enterprise Runtime for R - Server Edition 1.19.0 -- Spotfire Web Player 14.2.0 -- Spotfire Automation Services 14.2.0 -- Spotfire Service for R 1.19.0 - -The recipes are validated with the listed Spotfire products and versions. They could work with other Spotfire versions with modifications. - -Version mapping table: - -| Chart name | Chart version | appVersion | Image tag | -| ---------- | ------------- | ---------- | --------- | -| spotfire-server | 0.2.2 | 14.2.0 | 14.2.0-1 | -| spotfire-webplayer | 0.2.2 | 14.2.0 | 14.2.0-1 | -| spotfire-automationservices | 0.2.2 | 14.2.0 | 14.2.0-1 | -| spotfire-terrservice | 0.2.2 | 1.19.0 | 1.19.0-1 | -| spotfire-rservice | 0.2.2 | 1.19.0 | 1.19.0-1 | -| spotfire-pythonservice | 0.2.2 | 1.19.0 | 1.19.0-1 | - -## Changes - -- Image tags generated by the build scripts have been updated to contain the application version, suffixed with an index. This allows for multiple image iterations using the same application version. -- Spotfire Server pods were regenerated on each Helm upgrade if no tool password was specified upon installation. The tool password is now maintained between Helm upgrades and stored in a Secret. - - -# Release v2.1.0 - -This release includes recipes for building container images and Helm charts for the following products. - -- Spotfire Server 14.1.0 -- Spotfire Web Player 14.1.0 -- TIBCO Enterprise Runtime for R - Server Edition 1.18.0 -- Spotfire Automation Services 14.1.0 -- Spotfire Service for Python 1.18.0 -- Spotfire Service for R 1.18.0 - -The recipes are validated with the listed Spotfire products and versions. They could work with other Spotfire versions with modifications. - -Version mapping table: - -| Chart name | Chart version | appVersion | Image tag | -| ---------- | ------------- | ---------- | --------- | -| spotfire-server | 0.2.1 | 14.1.0 | 14.1.0-2.1.0 | -| spotfire-webplayer | 0.2.1 | 14.1.0 | 14.1.0-2.1.0 | -| spotfire-automationservices | 0.2.1 | 14.1.0 | 14.1.0-2.1.0 | -| spotfire-terrservice | 0.2.1 | 1.18.0 | 1.18.0-2.1.0 | -| spotfire-pythonservice | 0.2.1 | 1.18.0 | 1.18.0-2.1.0 | -| spotfire-rservice | 0.2.1 | 1.18.0 | 1.18.0-2.1.0 | - -Note: The image tag format is \-\ - -## Changes - -### General -- Updated fluentbit chart and sidecar version - -### automation-services chart -- Fixed spotfire-automationservices KEDA autoscaling. Now automationservices pods are created to handle the queue. - -### spotfire-server chart - -| New key | Old key | Comment | -| - | - | - | -| service.clusterIP | | Added to allow setting clusterIP when haproxy is disabled. | - -# Release v2.0.0 - -This release includes recipes for building container images and Helm charts for the following products. - -- Spotfire® Server 14.0.0 LTS -- Spotfire® Service for Python 1.17.0 LTS -- Spotfire® Enterprise Runtime for R - Server Edition (a/k/a TERR™ service) 1.17.0 LTS -- Spotfire® Web Player 14.0.0 LTS -- Spotfire® Automation Services 14.0.0 LTS -- Spotfire® Service for R 1.17.0 LTS - -The recipes are validated with the listed Spotfire products and versions. - -Version mapping table: - -| Chart name | Chart version | appVersion | Image tag | -| ---------- | ------------- | ---------- | --------- | -| spotfire-server | 0.2.0 | 14.0.0 | 14.0.0-2.0.0 | -| spotfire-webplayer | 0.2.0 | 14.0.0 | 14.0.0-2.0.0 | -| spotfire-automationservices | 0.2.0 | 14.0.0 | 14.0.0-2.0.0 | -| spotfire-terrservice | 0.2.0 | 1.17.0 | 1.17.0-2.0.0 | -| spotfire-pythonservice | 0.2.0 | 1.17.0 | 1.17.0-2.0.0 | -| spotfire-rservice | 0.2.0 | 1.17.0 | 1.17.0-2.0.0 | - -Note: The image tag format is \-\ - -## Changes - -### General - -- A fix is provided for the issue "[Required installation files are not listed](https://github.com/spotfiresoftware/spotfire-cloud-deployment-kit/issues/18)". -- A fix is provided for the issue "[Spotfire-webplayer permission denied error](https://github.com/spotfiresoftware/spotfire-cloud-deployment-kit/issues/15)". -- Updated Debian 11 to Debian 12 as the base image layer for Spotfire containers. -- Licenses are provided for Spotfire images. - * Review the licenses as follows: From the containers folder, run the command `make licenses` to export PDF files that contain information about applicable license for the contained software. -- The tag `subpath` is added for `config-job` volumes. -- The default Promtheus query for automation-services KEDA autoscaling is corrected. -- The default metric used for spotfire-webplayer KEDA autoscaling has changed from `spotfire_TIBCO_Spotfire_Webplayer_Web_Player_health_status` to `spotfire_Spotfire_Webplayer_Web_Player_health_status`. -- The fluent-bit logging sidecar image has been upgraded to version 2.1.8. -- Various additional bug fixes. - -# Release v1.5.0 - -This release includes recipes for building container images and Helm charts for the following products. - -- TIBCO Spotfire Server 12.5.0 -- TIBCO Spotfire Web Player 12.5.0 -- TIBCO Spotfire Automation Services 12.5.0 -- TIBCO Enterprise Runtime for R - Server Edition 1.16.0 -- TIBCO Spotfire Service for Python 1.16.0 -- TIBCO Spotfire Service for R 1.16.0 - - -The recipes are validated with the listed Spotfire products and versions. They could work with other Spotfire versions with modifications. - -Version mapping table: - -| Chart name | Chart version | appVersion | Image tag | -| ---------- | ------------- | ---------- | --------- | -| spotfire-server | 0.1.7 | 12.5.0 | 12.5.0-1.5.0 | -| spotfire-webplayer | 0.1.7 | 12.5.0 | 12.5.0-1.5.0 | -| spotfire-automationservices | 0.1.7 | 12.5.0 | 12.5.0-1.5.0 | -| spotfire-terrservice | 0.1.7 | 1.16.0 | 1.16.0-1.5.0 | -| spotfire-pythonservice | 0.1.7 | 1.16.0 | 1.16.0-1.5.0 | -| spotfire-rservice | 0.1.7 | 1.16.0 | 1.16.0-1.5.0 | - -Note: The image tag format is \-\ - -## Changes - -### General - -- Volume mounts for charts now support specifying [subPath](https://kubernetes.io/docs/concepts/storage/volumes/#using-subpath). -- Added a chart to support deploying the new service TIBCO Spotfire Service for R. -- Fix provided for the issue "[Unable to build container image spotfire-base due to failure to install openjdk-17-jre-headless](https://github.com/spotfiresoftware/spotfire-cloud-deployment-kit/issues/14)." -- Minimum Kubernetes version required by charts updated to 1.24.0-0. -- Added custom configuration for action log database logging for the spotfire-server helm chart. An umbrella-example ( helm/examples/spotfire-umbrella-example/values-actionlogdb ) was added for testing and example purposes. Various configuration keys are included in under the Values.configuration section of the Values.yaml file. These keys provide the following capabilities: - * Configuring 'Categories and Web Categories'. - * Enabling or disabling logging to a database.  - * Enabling access and/or creating the action log database. -- Various other bug fixes and improvements. - -### spotfire-server chart 0.1.7 - -- Added the ability to configure action log settings in spotfire-server to log to a database. - -| New key | Old key | Comment | -| - | - | - | -| volumes.libraryImportExport.subPath | | Added | -| volumes.customExt.subPath | | Added | -| volumes.customExtInformationservices.subPath | | Added | -| volumes.certificates.subPath | | Added | -| volumes.deployments.subPath | | Added | -| configuration.actionLog.\* | | Added | - -### spotfire-pythonservice chart 0.1.7 - -| New key | Old key | Comment | -| - | - | - | -| volumes.packages.subPath | | Added | - - -### spotfire-terrservice chart 0.1.7 - -| New key | Old key | Comment | -| - | - | - | -| volumes.packages.subPath | | Added | - - -### spotfire-webplayer chart 0.1.7 - -| New key | Old key | Comment | -| - | - | - | -| volumes.customModules.subPath | | Added | - - -### spotfire-automationservices chart 0.1.7 - -| New key | Old key | Comment | -| - | - | - | -| volumes.customModules.subPath | | Added | - -### spotfire-rservice chart 0.1.7 - -- New. - - -# Release v1.4.0 - -This release includes recipes for building container images and Helm charts for the following products. - -- TIBCO Spotfire Server 12.4.0 -- TIBCO Spotfire Service for Python 1.15.0 -- TIBCO Enterprise Runtime for R - Server Edition 1.15.0 -- TIBCO Spotfire Web Player 12.4.0 -- TIBCO Spotfire Automation Services 12.4.0 - -The recipes are validated with the listed Spotfire products and versions. They could work with other Spotfire versions with modifications. - -Version mapping table: - -| Chart name | Chart version | appVersion | Image tag | -| ---------- | ------------- | ---------- | --------- | -| spotfire-server | 0.1.6 | 12.4.0 | 12.4.0-1.4.0 | -| spotfire-webplayer | 0.1.6 | 12.4.0 | 12.4.0-1.4.0 | -| spotfire-automationservices | 0.1.6 | 12.4.0 | 12.4.0-1.4.0 | -| spotfire-terrservice | 0.1.6 | 1.15.0 | 1.15.0-1.4.0 | -| spotfire-pythonservice | 0.1.6 | 1.15.0 | 1.15.0-1.4.0 | - -Note: The image tag format is \-\ - -## Changes - -### General - -- Bug fixes and improvements. - -### spotfire-server chart 0.1.6 - -- Added possibility to set spotfire-server in maintenance mode during the spotfire-server deployment will be inaccessible -- Spotfire server configuration properties are exposed in as values - -| New key | Old key | Comment | -| - | - | - | -| configuration.draining.publishNotReadyAddresses | | Added | -| configuration.properties.* | | Added | -| configuration.deployment.clear | | Added | -| haproxy.config | | Changed. If you have overridden this value, review changes in the chart. | -| haproxy.spotfireConfig.compression.* | | Added | -| haproxy.spotfireConfig.cache.* | | Added | -| haproxy.spotfireConfig.maintenance.* | | Added | -| haproxy.spotfireConfig.maintenancePage.* | | Added | -| haproxy.includesMountPath | | Added | - -### spotfire-pythonservice chart 0.1.6 - -| New key | Old key | Comment | -| - | - | - | -| | global.serviceName | Removed | - -### spotfire-terrservice chart 0.1.6 - -| New key | Old key | Comment | -| - | - | - | -| | global.serviceName | Removed | - -### spotfire-webplayer chart 0.1.6 - -- You can mount in a volume containing Spotfire modules to be loaded during startup. - -| New key | Old key | Comment | -| - | - | - | -| | global.serviceName | Removed | -| volumes.customModules.* | | Added | - -### spotfire-automationservices chart 0.1.6 - -- You can mount in a volume containing Spotfire modules to be loaded during startup. - -| New key | Old key | Comment | -| - | - | - | -| | global.serviceName | Removed | -| volumes.customModules.* | | Added | - - -# Release v1.3.1 - -Fixes the following issues: - -- Error when building containers `cp: cannot create regular file 'spotfire-deployment/build/Spotfire.Dxp.sdn': No such file or directory`. -- Missing executable attribute on some shell scripts, making it impossible to start some container images. - -# Release v1.3.0 - -This release includes recipes for building container images and Helm charts for the following products. - -- TIBCO Spotfire Server 12.3.0 -- TIBCO Spotfire Service for Python 1.15.0 -- TIBCO Enterprise Runtime for R - Server Edition 1.15.0 -- TIBCO Spotfire Web Player 12.3.0 -- TIBCO Spotfire Automation Services 12.3.0 - -The recipes are validated with the listed Spotfire products and versions. They could work with other Spotfire versions with modifications. - -Version mapping table: - -| Chart name | Chart version | appVersion | Image tag | -| ---------- | ------------- | ---------- | --------- | -| spotfire-server | 0.1.5 | 12.3.0 | 12.3.0-1.3.0 | -| spotfire-webplayer | 0.1.5 | 12.3.0 | 12.3.0-1.3.0 | -| spotfire-automationservices | 0.1.5 | 12.3.0 | 12.3.0-1.3.0 | -| spotfire-terrservice | 0.1.5 | 1.15.0 | 1.15.0-1.3.0 | -| spotfire-pythonservice | 0.1.5 | 1.15.0 | 1.15.0-1.3.0 | - -Note: The image tag format is \-\ - -## Changes - -### General - -- Various enhancements and bug fixes to the Helm charts and container images. -- All charts require you to accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting `acceptEUA` or `global.spotfire.acceptEUA` to **true**. -- All containers require you to accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the environment variable `ACCEPT_EUA` to **Y**. -- An example umbrella chart that can install an entire Spotfire system, including a database, a Spotfire Server, a Web Player with multiple resource pools, Automation Services, TIBCO Enterprise Runtime for R - Server Edition (a TERR service), and Spotfire Service for Python. See helm/examples/umbrella-chart/README.md for more information. - -### spotfire-server chart 0.1.5 - -- Language packs are automatically deployed when the `configuration.deployment.defaultDeployment.enabled` is set to **true**. Previously, the language packs were not deployed when using the default deployment. -- Haproxy chart upgraded from 1.17.3 to 1.18.\*. -- Fluentbit (log-forwarder) chart upgraded from 0.21.2 to 0.22.\*. - -Changes in values.yaml: - -| New key | Old key | Comment | -| ------- | ------- | ------- | -| `acceptEUA` | | Accept the End User Agreement by setting `acceptEUA` or `global.spotfire.acceptEUA` to **true**. If not set, the Helm release does not install. | -| `global.spotfire.acceptEUA` | | The same as `acceptEUA`, but as a global value. | -| `haproxy.spotfireConfig.captures.forwardedForLength` | | | - -### spotfire-pythonservice chart 0.1.5 - -- Now you can set individual service properties (in `custom.properties`) by adding the name of the property as a subkey to the `configuration` key in values.yaml. Previously, you had to set the entire `custom.properties` file as a string. -- Improved documentation for installing additional python packages, including an example. - -Changes in values.yaml: - -| New key | Old key | Comment | -| ------- | ------- | ------- | -| `acceptEUA` | | Accept the End User Agreement by setting `acceptEUA` or `global.spotfire.acceptEUA` to **true**. If not set, the Helm release does not install. | -| `global.spotfire.acceptEUA` | | The same as `acceptEUA`, but as a global value. | -| `configuration.*` | `config.conf/custom.properties` | A new key that exposes the service configuration 'custom.properties' as Helm values. | -| | `config.log4j2.xml`| You can no longer set the entire file contents from values, but the log level can be set with `logging.logLevel`. | -| | `volumes.packages.mountPath` | Removed. `mountPath` is now hardcoded to **/opt/packages**. | - -### spotfire-terrservice chart 0.1.5 - -- Now you can set individual service properties (in `custom.properties`) by adding the name of the property as a subkey to the `configuration` key in the file values.yaml. Previously, you had to set the entire `custom.properties` file as a string. - -Changes in values.yaml: - -| New key | Old key | Comment | -| ------- | ------- | ------- | -| `acceptEUA` | | Accept the End User Agreement by setting `acceptEUA` or `global.spotfire.acceptEUA` to **true**. If not set, the Helm release does not install. | -| `global.spotfire.acceptEUA` | | The same as `acceptEUA`, but as a global value. | -| `configuration.*` | `config.conf/custom.properties` | New key exposes the service configuration 'custom.properties' as Helm values. | -| | `config.log4j2.xml`| You can no longer set the entire file content from values, but log level can be set with `logging.logLevel`. | -| | `volumes.packages.mountPath` | Removed. `mountPath` is now hardcoded to **/opt/packages**. | - -### spotfire-webplayer chart 0.1.5 - -Changes in values.yaml: - -| New key | Old key | Comment | -| ------- | ------- | ------- | -| `acceptEUA` | | Accept the End User Agreement by setting `acceptEUA` or `global.spotfire.acceptEUA` to **true**. If not set, the Helm release does not install. | -| `global.spotfire.acceptEUA` | | The same as `acceptEUA`, but as a global value. | - -### spotfire-automationservices chart 0.1.5 - -Changes in values.yaml: - -| New key | Old key | Comment | -| ------- | ------- | ------- | -| `acceptEUA` | | Accept the End User Agreement by setting `acceptEUA` or `global.spotfire.acceptEUA` to **true**. If not set, the Helm release does not install. | -| `global.spotfire.acceptEUA` | | The same as `acceptEUA`, but as a global value. | - - -# Release v1.2.0 - -This release includes recipes for building container images and Helm charts for the following products. - -- TIBCO Spotfire Server 12.2.0 -- TIBCO Spotfire Service for Python 1.14.0 -- TIBCO Enterprise Runtime for R - Server Edition 1.14.0 -- TIBCO Spotfire Web Player 12.2.0 -- TIBCO Spotfire Automation Services 12.2.0 - -The recipes are validated with the listed Spotfire products and versions. They could work with other Spotfire versions with modifications. - -Version mapping table: - -| Chart name | Chart version | appVersion | Image tag | -| ---------- | ------------- | ---------- | --------- | -| spotfire-server | 0.1.4 | 12.2.0 | 12.2.0-1.2.0 | -| spotfire-webplayer | 0.1.4 | 12.2.0 | 12.2.0-1.2.0 | -| spotfire-automationservices | 0.1.4 | 12.2.0 | 12.2.0-1.2.0 | -| spotfire-terrservice | 0.1.4 | 1.14.0 | 1.14.0-1.2.0 | -| spotfire-pythonservice | 0.1.4 | 1.14.0 | 1.14.0-1.2.0 | - -Note: The image tag format is \-\ - -## Changes - -### General - -- Various improvements and bug fixes. - -### spotfire-server chart 0.1.4 - -- A client deployment (Spotfire.Dxp.sdn) can be added automatically to a deployment area during installation. See `configuration.deployment` in the chart's README.md. -- The password for creating and connecting to the Spotfire database, as well as the Spotfire admin password, can be read from an existing secret. See information about `*.ExistingSecret` in the chart's README.md. -- The encryptionPassword was not used during an upgrade to the Spotfire configuration. This issue is fixed. See information about `configuration.apply` in the chart's README.md. - -Updates to values.yaml - -| New key | Old key | Comment | -| - | - | - | -| `configuration.apply` | | Added | -| `configuration.deployment` | | Added. A spotfire deployment can be added automatically to the deployment area during installation. | -| `configuration.draining.*` | `draining.*` | Moved | -| `configuration.encryptionPassword` | `encryptionPassword` | Moved | -| `configuration.preferExistingConfig` | `configuration.useExisting` | Moved | -| `configuration.site.*` | `site.*` | Moved | -| `configuration.spotfireAdmin.*` | `spotfireAdmin.*` | Moved | -| `configuration.spotfireAdmin.passwordExistingSecret.{name,key}` | `spotfireAdmin.existingSecret` | Changed. Only the password and not the username is read from the existingSecret. | -| `database.bootstrap.passwordExistingSecret.{name,key}` | `database.bootstrap.existingSecret` | Changed. Only the password and not the username is read from the existingSecret. | -| `database.create-db.adminUsernameExistingSecret.*` | | Removed | -| `haproxy.spotfireConfig.serverTemplate.additionalParams` | | Added | -| `kedaAutoscaling.threshold` | | Added | -| | `configuration.applyKubernetesConfiguration` | Removed | - -### spotfire-pythonservice chart 0.1.4 - -Updates to values.yaml - -| New key | Old key | Comment | -| - | - | - | -| `kedaAutoscaling.threshold` | | Added | - -### spotfire-terrservice chart 0.1.4 - -Updates to values.yaml - -| New key | Old key | Comment | -| - | - | - | -| `kedaAutoscaling.threshold` | | Added | - -### spotfire-webplayer chart 0.1.4 - -Updates to values.yaml - -| New key | Old key | Comment | -| - | - | - | -| `kedaAutoscaling.threshold` | | Added | - -### spotfire-automationservices chart 0.1.4 - -Updates to values.yaml - -| New key | Old key | Comment | -| - | - | - | -| `kedaAutoscaling.threshold` | | Added | - -# Release v1.1.0 - -This release includes recipes for building container images and Helm charts for the following products. - -- TIBCO Spotfire Server 12.1.1 -- TIBCO Spotfire Service for Python 1.13.0 -- TIBCO Enterprise Runtime for R - Server Edition 1.13.0 -- TIBCO Spotfire Web Player 12.1.1 -- TIBCO Spotfire Automation Services 12.1.1 - -The recipes are validated with the listed Spotfire products and versions. They could work with other Spotfire versions with modifications. - -Version mapping table: - -| Chart name | Chart version | appVersion | Image tag | -|-----------------------------|---------------|------------|--------------| -| spotfire-server | 0.1.3 | 12.1.1 | 12.1.1-1.1.0 | -| spotfire-webplayer | 0.1.3 | 12.1.1 | 12.1.1-1.1.0 | -| spotfire-automationservices | 0.1.3 | 12.1.1 | 12.1.1-1.1.0 | -| spotifre-terrservice | 0.1.3 | 1.13.0 | 1.13.0-1.1.0 | -| spotfire-pythonservice | 0.1.3 | 1.13.0 | 1.13.0-1.1.0 | - -**Note**: Image tag format is `-` - -## Changes - -General: Various improvements and bug fixes. - -### spotfire-server chart 0.1.3 - -- You can use an existing Secret to specify usernames and passwords for the database connection and Spotfire admin user. Related values: `database.bootstrap.existingSecret`,` database.create-db.adminUsernameExistingSecret.name`, `database.create-db.adminUsernameExistingSecret.key`, `database.create-db.adminPasswordExistingSecret.name`, `database.create-db.adminPasswordExistingSecret.key`,`spotfireAdmin.existingSecret`. -- Information services runs as a separate process by default. You can use a separate mount path / volume to add jar-files that should be loaded for information services. Related values: `volumes.customExtInformationservices.existingClaim` - -#### Breaking changes - -For the spotfire-server chart, in `values.yaml`, the following keys have been renamed / restructured. - -| Old name | New Name | -| -------- | -------- | -| `spotfireAdminUsername` | `spotfireAdmin.username` | -| `spotfireAdminPassword` | `spotfireAdmin.password` | - -This code is provided as-is with no warranties. - -# Release v1.0.0 - -This release includes recipes for building container images and Helm charts for the following products. - -- TIBCO Spotfire Server 12.0.0 LTS -- TIBCO Spotfire Service for Python 1.12.0 -- TIBCO Enterprise Runtime for R - Server Edition 1.12.0 -- TIBCO Spotfire Web Player 12.0.0 LTS -- TIBCO Spotfire Automation Services 12.0.0 LTS - -The recipes are validated with the listed Spotfire products and versions. They could work with other Spotfire versions with modifications. - -This code is provided as-is with no warranties. - -# Release v0.2.0 - -Updated recipes for building container images and Helm charts for: - -* TIBCO Spotfire Server 12.0.0 LTS -* TIBCO Spotfire Service for Python 1.12.0 -* TIBCO Enterprise Runtime for R - Server Edition 1.12.0 - -Added recipes for building container images and Helm charts for: - -* TIBCO Spotfire Web Player 12.0.0 LTS -* TIBCO Spotfire Automation Services 12.0.0 LTS - -The recipes have been validated with the listed Spotfire products and versions. They could work for other Spotfire versions with some modifications. - -This functionality is a preview and is subject to change. The code is provided as-is with no warranties. - -# Cloud Deployment Kit for Spotfire v0.1.0 - -First release. - -Added recipes for building container images and helm charts for: -- TIBCO Spotfire Server 11.8.1 -- TIBCO Spotfire Service for Python 1.11.1 -- TIBCO Enterprise Runtime for R - Server Edition 1.11.1 - -The recipes have been validated with the listed Spotfire products and versions. They could work for other Spotfire versions with some modifications. - -This functionality is a preview and is subject to change. The code is provided as-is with no warranties. diff --git a/containers/Makefile b/containers/Makefile index c5cfbaa..386f857 100644 --- a/containers/Makefile +++ b/containers/Makefile @@ -13,6 +13,7 @@ DOCKER_CLI_BUILD_ARGS ?= # --no-cache IMAGE_REPOSITORY_PREFIX ?= spotfire DOWNLOADS_DIR ?= downloads IMAGES_DIR ?= images +ARCH_TARGET := linux/amd64 include ../versions.mk include build-files.mk @@ -23,9 +24,9 @@ include build-files.mk .SECONDEXPANSION : $(IMAGE_TARGETS) -IMAGE_TARGETS = spotfire-server spotfire-config spotfire-nodemanager spotfire-base spotfire-workerhost \ - spotfire-webplayer spotfire-automationservices spotfire-terrservice spotfire-pythonservice \ - spotfire-rservice spotfire-deployment +IMAGE_TARGETS += spotfire-server spotfire-config spotfire-nodemanager spotfire-base spotfire-workerhost \ + spotfire-webplayer spotfire-automationservices spotfire-terrservice spotfire-pythonservice \ + spotfire-rservice spotfire-deployment spotfire-server spotfire-config spotfire-nodemanager spotfire-deployment : spotfire-base spotfire-terrservice spotfire-pythonservice spotfire-rservice : spotfire-nodemanager @@ -65,7 +66,7 @@ build : $(IMAGE_TARGETS) $(IMAGE_TARGETS) : BUILD_TAG_ARGUMENT = $(IMAGE_REPOSITORY_PREFIX)/$(@):$(IMAGE_TAG) $(IMAGE_TARGETS) : BUILD_ARGS = $(DOCKER_CLI_BUILD_ARGS) $(addprefix --build-arg ,$(IMAGE_BUILD_ARGS)) $(IMAGE_TARGETS) : - $(DOCKER_CLI) build $(BUILD_ARGS) --tag $(BUILD_TAG_ARGUMENT) $(IMAGES_DIR)/$(@) + $(DOCKER_CLI) build --platform $(ARCH_TARGET) $(BUILD_ARGS) --tag $(BUILD_TAG_ARGUMENT) $(IMAGES_DIR)/$(@) # TAG_SUFFIX can be used to override *_CONTAINER_ITERATION TAG_SUFFIX ?= $(or $1,$(IMAGE_BUILD_ID)) @@ -73,6 +74,10 @@ TAG_SUFFIX ?= $(or $1,$(IMAGE_BUILD_ID)) SPOTFIRE_AUTOMATIONSERVICES_IMAGE_TAG = $(SPOTFIRE_NETCORE_VERSION)$(addprefix -,$(or $(TAG_SUFFIX),$(SPOTFIRE_AUTOMATIONSERVICES_CONTAINER_ITERATION))) SPOTFIRE_BASE_IMAGE_TAG = $(or $(IMAGE_BUILD_ID),base) SPOTFIRE_CONFIG_IMAGE_TAG = $(SPOTFIRE_SERVER_VERSION)$(addprefix -,$(or $(TAG_SUFFIX),$(SPOTFIRE_CONFIG_CONTAINER_ITERATION))) +SPOTFIRE_SERVER_VERSION ?= 1.0.0 +TAG_SUFFIX ?= +SPOTFIRE_SERVER_CONTAINER_ITERATION ?= 1 + SPOTFIRE_SERVER_IMAGE_TAG = $(SPOTFIRE_SERVER_VERSION)$(addprefix -,$(or $(TAG_SUFFIX),$(SPOTFIRE_SERVER_CONTAINER_ITERATION))) SPOTFIRE_NODEMANAGER_IMAGE_TAG = $(or $(IMAGE_BUILD_ID),nodemanager) SPOTFIRE_WORKERHOST_IMAGE_TAG = $(or $(IMAGE_BUILD_ID),workerhost) @@ -95,21 +100,21 @@ SPOTFIRE_DEPLOYMENT_IMAGE_TAG = $(SPOTFIRE_DEPLOYMENT_VERSION)$(addpre %potfire-deployment : IMAGE_TAG = $(SPOTFIRE_DEPLOYMENT_IMAGE_TAG) # --build-arg image tags -$(IMAGE_TARGETS) : IMAGE_BUILD_ARGS = -spotfire-base: IMAGE_BUILD_ARGS += $(addprefix DEBIAN_IMAGE_TAG=,$(DEBIAN_IMAGE_TAG)) -spotfire-server spotfire-config spotfire-nodemanager spotfire-deployment : IMAGE_BUILD_ARGS += "SPOTFIRE_BASE_IMAGE_TAG=$(SPOTFIRE_BASE_IMAGE_TAG)" -spotfire-pythonservice spotfire-terrservice spotfire-rservice : IMAGE_BUILD_ARGS += "SPOTFIRE_NODEMANAGER_IMAGE_TAG=$(SPOTFIRE_NODEMANAGER_IMAGE_TAG)" -spotfire-workerhost : IMAGE_BUILD_ARGS += "SPOTFIRE_NODEMANAGER_IMAGE_TAG=$(SPOTFIRE_NODEMANAGER_IMAGE_TAG)" -spotfire-webplayer spotfire-automationservices : IMAGE_BUILD_ARGS += "SPOTFIRE_WORKERHOST_IMAGE_TAG=$(SPOTFIRE_WORKERHOST_IMAGE_TAG)" +spotfire-base: private IMAGE_BUILD_ARGS += $(addprefix DEBIAN_IMAGE_TAG=,$(DEBIAN_IMAGE_TAG)) +spotfire-server spotfire-config spotfire-nodemanager spotfire-deployment : private IMAGE_BUILD_ARGS += "SPOTFIRE_BASE_IMAGE_TAG=$(SPOTFIRE_BASE_IMAGE_TAG)" +spotfire-pythonservice spotfire-terrservice spotfire-rservice : private IMAGE_BUILD_ARGS += "SPOTFIRE_NODEMANAGER_IMAGE_TAG=$(SPOTFIRE_NODEMANAGER_IMAGE_TAG)" +spotfire-workerhost : private IMAGE_BUILD_ARGS += "SPOTFIRE_NODEMANAGER_IMAGE_TAG=$(SPOTFIRE_NODEMANAGER_IMAGE_TAG)" +spotfire-webplayer spotfire-automationservices : private IMAGE_BUILD_ARGS += "SPOTFIRE_WORKERHOST_IMAGE_TAG=$(SPOTFIRE_WORKERHOST_IMAGE_TAG)" # --build-arg product versions -spotfire-nodemanager : IMAGE_BUILD_ARGS += "SPOTFIRE_NODEMANAGER_VERSION=$(SPOTFIRE_NODEMANAGER_VERSION)" -spotfire-server spotfire-config : IMAGE_BUILD_ARGS += "SPOTFIRE_SERVER_VERSION=$(SPOTFIRE_SERVER_VERSION)" -spotfire-webplayer spotfire-automationservices : IMAGE_BUILD_ARGS += "SPOTFIRE_NETCORE_VERSION=$(SPOTFIRE_NETCORE_VERSION)" -spotfire-webplayer spotfire-automationservices spotfire-deployment : IMAGE_BUILD_ARGS += "SPOTFIRE_NETCORE_LANGUAGEPACKS_VERSION=$(SPOTFIRE_NETCORE_LANGUAGEPACKS_VERSION)" -spotfire-terrservice : IMAGE_BUILD_ARGS += "SPOTFIRE_TERRSERVICE_VERSION=$(SPOTFIRE_TERRSERVICE_VERSION)" -spotfire-rservice : IMAGE_BUILD_ARGS += "SPOTFIRE_RSERVICE_VERSION=$(SPOTFIRE_RSERVICE_VERSION)" -spotfire-pythonservice : IMAGE_BUILD_ARGS += "SPOTFIRE_PYTHONSERVICE_VERSION=$(SPOTFIRE_PYTHONSERVICE_VERSION)" +spotfire-nodemanager : private IMAGE_BUILD_ARGS += "SPOTFIRE_NODEMANAGER_VERSION=$(SPOTFIRE_NODEMANAGER_VERSION)" +spotfire-server spotfire-config : private IMAGE_BUILD_ARGS += "SPOTFIRE_SERVER_VERSION=$(SPOTFIRE_SERVER_VERSION)" +spotfire-webplayer spotfire-automationservices : private IMAGE_BUILD_ARGS += "SPOTFIRE_NETCORE_VERSION=$(SPOTFIRE_NETCORE_VERSION)" +spotfire-webplayer spotfire-automationservices spotfire-deployment : private IMAGE_BUILD_ARGS += "SPOTFIRE_NETCORE_LANGUAGEPACKS_VERSION=$(SPOTFIRE_NETCORE_LANGUAGEPACKS_VERSION)" +spotfire-deployment : private IMAGE_BUILD_ARGS += "SPOTFIRE_DEPLOYMENT_VERSION=$(SPOTFIRE_DEPLOYMENT_VERSION)" +spotfire-terrservice : private IMAGE_BUILD_ARGS += "SPOTFIRE_TERRSERVICE_VERSION=$(SPOTFIRE_TERRSERVICE_VERSION)" +spotfire-rservice : private IMAGE_BUILD_ARGS += "SPOTFIRE_RSERVICE_VERSION=$(SPOTFIRE_RSERVICE_VERSION)" +spotfire-pythonservice : private IMAGE_BUILD_ARGS += "SPOTFIRE_PYTHONSERVICE_VERSION=$(SPOTFIRE_PYTHONSERVICE_VERSION)" # # tag, push, list @@ -118,7 +123,7 @@ spotfire-pythonservice : IMAGE # LOCAL_IMAGE_BUILD_ID: push this source build id REMOTE_IMAGE_REFERENCE = $(addsuffix /,$(CONTAINER_REGISTRY))$(IMAGE_REPOSITORY_PREFIX)/$(*):$(call IMAGE_TAG,$(REMOTE_IMAGE_BUILD_ID)) -LOCAL_IMAGE_REFERENCE = $(IMAGE_REPOSITORY_PREFIX)/$(*):$(call IMAGE_TAG,$(LOCAL_IMAGE_BUILD_ID)) +LOCAL_IMAGE_REFERENCE = $(addsuffix /,$(LOCAL_CONTAINER_REGISTRY))$(IMAGE_REPOSITORY_PREFIX)/$(*):$(call IMAGE_TAG,$(LOCAL_IMAGE_BUILD_ID)) push : $(addprefix push-,$(NONLOCAL_TARGETS)) push-% : CONTAINER_REGISTRY ?= $(error CONTAINER_REGISTRY is unset) @@ -129,7 +134,6 @@ push-% : # make CONTAINER_REGISTRY=registry.com list list-images : $(addprefix list-image-,$(NONLOCAL_TARGETS)) -list-images : $(if $(ALL),$(addprefix list-image-,$(IMAGE_TARGETS))) list-image-% : @echo $(REMOTE_IMAGE_REFERENCE) @@ -139,6 +143,13 @@ list-tags : $(addprefix list-tag-,$(NONLOCAL_TARGETS)) list-tag-% : @echo $(call create_var_assignment,IMAGE_TAG,$(IMAGE_TAG)) +# pull + push can be used to copy images from one place to the other +# 1. make pull --dry-run IMAGE_BUILD_ID= CONTAINER_REGISTRY= +# 2. LOCAL_IMAGE_BUILD_ID= IMAGE_BUILD_ID= make push --dry-run CONTAINER_REGISTRY= +pull : $(addprefix pull-,$(NONLOCAL_TARGETS)) +pull-% : + $(DOCKER_CLI) pull $(REMOTE_IMAGE_REFERENCE) + .PHONY : push push-% list list-% # @@ -157,14 +168,14 @@ licenses-% : # echos the value of given variable # make variable VAR=SPOTFIRE_DEPLOYMENT_VERSION variable : - @echo "$(value $(VAR))" + @echo "$($(VAR))" -clean : - for image in $$(make list-images ALL=true --silent); do \ - $(DOCKER_CLI) image inspect $$image >/dev/null 2>&1 && $(DOCKER_CLI) rmi $${image};\ - done || : +clean : $(addprefix clean-,$(NONLOCAL_TARGETS)) rm -f $(BUILD_FILES) rm -f $(IMAGES_DIR)/**/build/* rm -rf licenses/ -.PHONY : clean licenses licenses-% variable +clean-% : + $(DOCKER_CLI) rmi $(REMOTE_IMAGE_REFERENCE) 2>/dev/null || : + +.PHONY : clean clean-% licenses licenses-% variable diff --git a/containers/README.md b/containers/README.md index 5154245..33ce11f 100644 --- a/containers/README.md +++ b/containers/README.md @@ -6,15 +6,6 @@ This directory contains the recipes to build and examples to use the [**Spotfire **Note**: You can build each image on its own as described in their respective READMEs, or you can use the provided `Makefile` within this directory to build all the images with just one single command (this `Makefile` also takes care of their internal dependencies). -## Prerequisites - -- [Required **Spotfire** installation packages](build-files.mk). You can download them from [TIBCO eDelivery](https://edelivery.tibco.com/storefront/index.ep). -- A **Linux host** with admin permissions to build and execute the containers. - You can use a bare metal installed server, a virtual machine, or WSL on Windows. -- An [OCI-compliant](https://opencontainers.org/) container image building tool (for example, `docker`, `podman` or alternative), for building the container images. - -**Note**: Spotfire® is a commercial product. You must have a valid license for each of the Spotfire components you choose to build and run as containers. - ## Build the images 1. Copy the required files into the `/containers/downloads` directory. diff --git a/containers/build-files.mk b/containers/build-files.mk index e2ebe76..93fe54f 100644 --- a/containers/build-files.mk +++ b/containers/build-files.mk @@ -1,4 +1,5 @@ # Files needed in /build by the various targets +# Run "make downloads-list" in the containers/ directory to see the list of files that need to be downloaded BUILD_FILES = images/spotfire-automationservices/build/Spotfire.Dxp.netcore-linux.sdn \ images/spotfire-config/build/spotfireserver-$(SPOTFIRE_SERVER_VERSION).x86_64.tar.gz \ images/spotfire-deployment/build/Spotfire.Dxp.sdn \ diff --git a/containers/images/spotfire-automationservices/Dockerfile b/containers/images/spotfire-automationservices/Dockerfile index 4935e97..a180a69 100755 --- a/containers/images/spotfire-automationservices/Dockerfile +++ b/containers/images/spotfire-automationservices/Dockerfile @@ -1,10 +1,12 @@ +# check=skip=InvalidDefaultArgInFrom;error=true + ARG SPOTFIRE_WORKERHOST_IMAGE_TAG ARG SPOTFIRE_NETCORE_VERSION # # extract Spotfire Automation Services service from sdn distribution file # -FROM spotfire/spotfire-workerhost:${SPOTFIRE_WORKERHOST_IMAGE_TAG} as extract +FROM spotfire/spotfire-workerhost:${SPOTFIRE_WORKERHOST_IMAGE_TAG} AS extract RUN mkdir -p /tmp/nodemanager-packages diff --git a/containers/images/spotfire-base/Dockerfile b/containers/images/spotfire-base/Dockerfile index f6d08c8..66f0fa4 100755 --- a/containers/images/spotfire-base/Dockerfile +++ b/containers/images/spotfire-base/Dockerfile @@ -6,7 +6,7 @@ ARG DEBIAN_IMAGE_TAG=12-slim # # common java-base # -FROM debian:$DEBIAN_IMAGE_TAG as spotfire-base +FROM debian:${DEBIAN_IMAGE_TAG} AS spotfire-base LABEL org.opencontainers.image.title="spotfire/spotfire-base" \ org.opencontainers.image.description="Base image for Spotfire® container images" \ diff --git a/containers/images/spotfire-config/Dockerfile b/containers/images/spotfire-config/Dockerfile index b1337d9..cb61406 100755 --- a/containers/images/spotfire-config/Dockerfile +++ b/containers/images/spotfire-config/Dockerfile @@ -1,9 +1,10 @@ +# check=skip=InvalidDefaultArgInFrom;error=true ARG SPOTFIRE_BASE_IMAGE_TAG # # extract Spotfire config-tool from spotfireserver package # -FROM spotfire/spotfire-base:${SPOTFIRE_BASE_IMAGE_TAG} as extract +FROM spotfire/spotfire-base:${SPOTFIRE_BASE_IMAGE_TAG} AS extract ARG SPOTFIRE_SERVER_VERSION ADD build/spotfireserver-${SPOTFIRE_SERVER_VERSION}.x86_64.tar.gz /tmp @@ -12,7 +13,7 @@ RUN java -jar /tmp/spotfireserver-${SPOTFIRE_SERVER_VERSION}.x86_64/tomcat/webap # # spotfire-config specific # -FROM spotfire/spotfire-base:${SPOTFIRE_BASE_IMAGE_TAG} as spotfire-config +FROM spotfire/spotfire-base:${SPOTFIRE_BASE_IMAGE_TAG} AS spotfire-config ARG SPOTFIRE_SERVER_VERSION LABEL org.opencontainers.image.title="spotfire/spotfire-config" \ diff --git a/containers/images/spotfire-deployment/Dockerfile b/containers/images/spotfire-deployment/Dockerfile index 8c9cbfb..ee2aab6 100644 --- a/containers/images/spotfire-deployment/Dockerfile +++ b/containers/images/spotfire-deployment/Dockerfile @@ -1,8 +1,8 @@ +# check=skip=InvalidDefaultArgInFrom;error=true ARG SPOTFIRE_BASE_IMAGE_TAG -FROM spotfire/spotfire-base:${SPOTFIRE_BASE_IMAGE_TAG} as extract +FROM spotfire/spotfire-base:${SPOTFIRE_BASE_IMAGE_TAG} AS extract ARG SPOTFIRE_NETCORE_LANGUAGEPACKS_VERSION -ARG SPOTFIRE_DEPLOYMENT_VERSION RUN mkdir -p /tmp/deployment-files @@ -17,6 +17,7 @@ FROM spotfire/spotfire-base:${SPOTFIRE_BASE_IMAGE_TAG} WORKDIR /opt/spotfire/deployment-files/ COPY --chown=spotfire:spotfire --from=extract /tmp/deployment-files/ /opt/spotfire/deployment-files/ +ARG SPOTFIRE_DEPLOYMENT_VERSION LABEL org.opencontainers.image.title="spotfire/deployment" \ org.opencontainers.image.description="Spotfire® deployment packages helper." \ org.opencontainers.image.version="${SPOTFIRE_DEPLOYMENT_VERSION}" \ diff --git a/containers/images/spotfire-nodemanager/Dockerfile b/containers/images/spotfire-nodemanager/Dockerfile index 8462e9c..0a7ed86 100644 --- a/containers/images/spotfire-nodemanager/Dockerfile +++ b/containers/images/spotfire-nodemanager/Dockerfile @@ -1,10 +1,11 @@ +# check=skip=InvalidDefaultArgInFrom;error=true ARG SPOTFIRE_BASE_IMAGE_TAG ARG SPOTFIRE_NODEMANAGER_VERSION # # extract Spotfire node manager from nodemanager package # -FROM spotfire/spotfire-base:${SPOTFIRE_BASE_IMAGE_TAG} as extract +FROM spotfire/spotfire-base:${SPOTFIRE_BASE_IMAGE_TAG} AS extract ARG SPOTFIRE_NODEMANAGER_VERSION ADD build/spotfirenodemanager-${SPOTFIRE_NODEMANAGER_VERSION}.x86_64.tar.gz /tmp @@ -13,7 +14,7 @@ RUN rm -rf /tmp/nodemanager-*/jdk/ /tmp/nodemanager-*/nm/upgrade/ # # spotfire-nodemanager specific # -FROM spotfire/spotfire-base:${SPOTFIRE_BASE_IMAGE_TAG} as spotfire-nodemanager +FROM spotfire/spotfire-base:${SPOTFIRE_BASE_IMAGE_TAG} AS spotfire-nodemanager ARG SPOTFIRE_NODEMANAGER_VERSION LABEL org.opencontainers.image.title="spotfire/nodemanager" \ diff --git a/containers/images/spotfire-pythonservice/Dockerfile b/containers/images/spotfire-pythonservice/Dockerfile index 3e98819..095fcb0 100755 --- a/containers/images/spotfire-pythonservice/Dockerfile +++ b/containers/images/spotfire-pythonservice/Dockerfile @@ -1,11 +1,12 @@ -ARG SPOTFIRE_NODEMANAGER_IMAGE_TAG=1 +# check=skip=InvalidDefaultArgInFrom;error=true +ARG SPOTFIRE_NODEMANAGER_IMAGE_TAG ARG SPOTFIRE_PYTHONSERVICE_VERSION ARG PYTHON_VERSION=3.11 # # extract Spotfire Python service from sdn distribution file # -FROM spotfire/spotfire-nodemanager:${SPOTFIRE_NODEMANAGER_IMAGE_TAG} as extract +FROM spotfire/spotfire-nodemanager:${SPOTFIRE_NODEMANAGER_IMAGE_TAG} AS extract ENV TSNM_CAPABILITY=PYTHON diff --git a/containers/images/spotfire-rservice/Dockerfile b/containers/images/spotfire-rservice/Dockerfile index 3f65367..6151907 100755 --- a/containers/images/spotfire-rservice/Dockerfile +++ b/containers/images/spotfire-rservice/Dockerfile @@ -1,10 +1,11 @@ +# check=skip=InvalidDefaultArgInFrom;error=true ARG SPOTFIRE_NODEMANAGER_IMAGE_TAG ARG SPOTFIRE_RSERVICE_VERSION # # extract Spotfire R service from sdn distribution file # -FROM spotfire/spotfire-nodemanager:${SPOTFIRE_NODEMANAGER_IMAGE_TAG} as extract +FROM spotfire/spotfire-nodemanager:${SPOTFIRE_NODEMANAGER_IMAGE_TAG} AS extract ENV TSNM_CAPABILITY=R diff --git a/containers/images/spotfire-server/Dockerfile b/containers/images/spotfire-server/Dockerfile index b54956d..451c73a 100755 --- a/containers/images/spotfire-server/Dockerfile +++ b/containers/images/spotfire-server/Dockerfile @@ -1,9 +1,10 @@ +# check=skip=InvalidDefaultArgInFrom;error=true ARG SPOTFIRE_BASE_IMAGE_TAG # # extract Spotfire Server from tss package # -FROM spotfire/spotfire-base:${SPOTFIRE_BASE_IMAGE_TAG} as extract +FROM spotfire/spotfire-base:${SPOTFIRE_BASE_IMAGE_TAG} AS extract ARG SPOTFIRE_SERVER_VERSION ADD build/spotfireserver-${SPOTFIRE_SERVER_VERSION}.x86_64.tar.gz /tmp @@ -12,7 +13,7 @@ RUN rm -rf /tmp/spotfireserver-*.x86_64/jdk/ # # spotfire-server specific # -FROM spotfire/spotfire-base:${SPOTFIRE_BASE_IMAGE_TAG} as spotfire-server +FROM spotfire/spotfire-base:${SPOTFIRE_BASE_IMAGE_TAG} AS spotfire-server ARG SPOTFIRE_SERVER_VERSION LABEL org.opencontainers.image.title="spotfire/spotfire-server" \ @@ -57,5 +58,7 @@ EXPOSE 8080 9443 9080 9081 5701 5702 5703 USER spotfire # Logging -RUN config.sh apply-xdt-transformation --input-file=/opt/spotfire/spotfireserver/tomcat/spotfire-config/log4j2.xml --transformation-file=config/log4j2.xml.rolling.transformation.xml +RUN config.sh apply-xdt-transformation --input-file=/opt/spotfire/spotfireserver/tomcat/spotfire-config/log4j2.xml --transformation-file=config/log4j2.xml.rolling.transformation.xml \ + && config.sh apply-xdt-transformation --input-file=/opt/spotfire/spotfireserver/tomcat/spotfire-config/log4j2-is.xml --transformation-file=config/log4j2-is.xml.rolling.transformation.xml + CMD ["/opt/spotfire/entrypoint.sh", "/opt/spotfire/spotfireserver/tomcat/bin/catalina.sh", "run"] diff --git a/containers/images/spotfire-server/README.md b/containers/images/spotfire-server/README.md index e27ef61..fd1645d 100644 --- a/containers/images/spotfire-server/README.md +++ b/containers/images/spotfire-server/README.md @@ -116,8 +116,6 @@ documentation pages. The following variables define the default logging: -- `LOGGING_JSON_HOST` - Forward logs as json messages to this hostname. Default: *Unset* (disabled). -- `LOGGING_JSON_PORT` - Forward logs as json messages to this port. Default: `5170`. - `LOGGING_HTTPREQUESTS_ENABLED`- Logs information about each http request. Default: *Unset* (enabled) - `LOGGING_LOGLEVEL` - Set to `debug`, `minimal` or `trace` to adjust the logging level. Defaults to empty value meaning "info" level logging. @@ -135,9 +133,6 @@ configuration properties](https://docs.tibco.com/pub/spotfire_server/latest/doc/ - `LOGGING_TOMCATLOGS_DEFAULTROLLOVER` - See **tomcatLogsDefaultRollover** in the [Log4j2 configuration properties](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/node_log4j2_configuration_properties.html). Default `1d` - -If `LOGGING_JSON_HOST` is set, Spotfire will forward logs to a remote logging collector/forwarder (e.g. fluentbit, fluentd, etc.). - #### Other variables - `ACCEPT_EUA` - Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `Y`. Required. diff --git a/containers/images/spotfire-server/config/extended.accesslog.xml b/containers/images/spotfire-server/config/extended.accesslog.xml index 7525c2f..756ecbb 100755 --- a/containers/images/spotfire-server/config/extended.accesslog.xml +++ b/containers/images/spotfire-server/config/extended.accesslog.xml @@ -11,6 +11,6 @@ maxDays="1" suffix=".log" requestAttributesEnabled="true" - pattern="date time c-ip x-R(spotfire.user) x-S(spotfire.session-number) x-R(spotfire.request-id) cs-method cs-uri-stem cs-uri-query sc-status bytes time-taken x-H(protocol) x-H(scheme)" + pattern="date time c-ip x-R(spotfire.user) x-S(spotfire.session-number) x-R(spotfire.request-id) cs-method cs-uri-stem cs-uri-query sc-status bytes time-taken-fracsec x-H(protocol) x-H(scheme)" /> - \ No newline at end of file + diff --git a/containers/images/spotfire-server/config/log4j2-is.xml.rolling.transformation.xml b/containers/images/spotfire-server/config/log4j2-is.xml.rolling.transformation.xml new file mode 100644 index 0000000..9d9b74b --- /dev/null +++ b/containers/images/spotfire-server/config/log4j2-is.xml.rolling.transformation.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + diff --git a/containers/images/spotfire-server/config/log4j2.xml.socket-appender.transformation.xml b/containers/images/spotfire-server/config/log4j2.xml.socket-appender.transformation.xml deleted file mode 100644 index d7d7f4e..0000000 --- a/containers/images/spotfire-server/config/log4j2.xml.socket-appender.transformation.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/containers/images/spotfire-server/scripts/setup-logging.sh b/containers/images/spotfire-server/scripts/setup-logging.sh index 5cdacf4..a8be420 100755 --- a/containers/images/spotfire-server/scripts/setup-logging.sh +++ b/containers/images/spotfire-server/scripts/setup-logging.sh @@ -32,13 +32,3 @@ cat > /opt/spotfire/spotfireserver/tomcat/spotfire-config/log4j2-custom.xml << E EOF - -# Script to enable special logging config if LOGGING_JSON_HOST is set, before -# starting tomcat -if [ -z "${LOGGING_JSON_HOST}" ]; then - exit 0 -fi - -# Add the socket appender to log4j2.xml -echo "Enabling logging to ${LOGGING_JSON_HOST}:${LOGGING_JSON_PORT:-5170}" -config.sh apply-xdt-transformation --input-file=/opt/spotfire/spotfireserver/tomcat/spotfire-config/log4j2.xml --transformation-file=config/log4j2.xml.socket-appender.transformation.xml \ No newline at end of file diff --git a/containers/images/spotfire-terrservice/Dockerfile b/containers/images/spotfire-terrservice/Dockerfile index 671fa0f..314a0e0 100755 --- a/containers/images/spotfire-terrservice/Dockerfile +++ b/containers/images/spotfire-terrservice/Dockerfile @@ -1,10 +1,11 @@ +# check=skip=InvalidDefaultArgInFrom;error=true ARG SPOTFIRE_NODEMANAGER_IMAGE_TAG ARG SPOTFIRE_TERRSERVICE_VERSION # # extract Spotfire TERR service from sdn distribution file # -FROM spotfire/spotfire-nodemanager:${SPOTFIRE_NODEMANAGER_IMAGE_TAG} as extract +FROM spotfire/spotfire-nodemanager:${SPOTFIRE_NODEMANAGER_IMAGE_TAG} AS extract ENV TSNM_CAPABILITY=TERR diff --git a/containers/images/spotfire-webplayer/Dockerfile b/containers/images/spotfire-webplayer/Dockerfile index 148dbdc..6d72982 100755 --- a/containers/images/spotfire-webplayer/Dockerfile +++ b/containers/images/spotfire-webplayer/Dockerfile @@ -1,10 +1,11 @@ +# check=skip=InvalidDefaultArgInFrom;error=true ARG SPOTFIRE_WORKERHOST_IMAGE_TAG ARG SPOTFIRE_NETCORE_VERSION # # extract Spotfire Web Player service from sdn distribution file # -FROM spotfire/spotfire-workerhost:${SPOTFIRE_WORKERHOST_IMAGE_TAG} as extract +FROM spotfire/spotfire-workerhost:${SPOTFIRE_WORKERHOST_IMAGE_TAG} AS extract ARG SPOTFIRE_NETCORE_LANGUAGEPACKS_VERSION ENV TSNM_CAPABILITY=WEB_PLAYER RUN mkdir -p /tmp/nodemanager-packages diff --git a/containers/images/spotfire-workerhost/Dockerfile b/containers/images/spotfire-workerhost/Dockerfile index d8dae13..6cc145e 100755 --- a/containers/images/spotfire-workerhost/Dockerfile +++ b/containers/images/spotfire-workerhost/Dockerfile @@ -1,3 +1,4 @@ +# check=skip=InvalidDefaultArgInFrom;error=true ARG SPOTFIRE_NODEMANAGER_IMAGE_TAG ARG SPOTFIRE_NODEMANAGER_VERSION diff --git a/helm/examples/README.md b/docs/examples/README.md similarity index 64% rename from helm/examples/README.md rename to docs/examples/README.md index 0728ef4..15dc306 100644 --- a/helm/examples/README.md +++ b/docs/examples/README.md @@ -4,5 +4,4 @@ You can find examples on how to use the helm charts in this location. - [Using AWS EKS and other AWS supported services](./aws/README.md) - [Using custom modules with spotfire-webplayer (or spotfire-automationservices)](./webplayer-custom-modules/README.md) -- [Umbrella chart example to deploy a complete Spotfire® environment](./spotfire-umbrella-example/README.md) -- [Database examples](./database-values/) \ No newline at end of file +- [Database examples](./database-values/) diff --git a/helm/examples/aws/README.md b/docs/examples/aws/README.md similarity index 100% rename from helm/examples/aws/README.md rename to docs/examples/aws/README.md diff --git a/docs/examples/aws/alb-ingress.md b/docs/examples/aws/alb-ingress.md new file mode 100644 index 0000000..9d01f35 --- /dev/null +++ b/docs/examples/aws/alb-ingress.md @@ -0,0 +1,118 @@ + +# Configuring AWS Load Balancer Controller (as ingress) + +This document lists steps to configure the Spotfire CDK on an EKS cluster with an AWS load balancer ingress controller, along with Route 53 to access it from the internet. + +## Prerequisites +- Administrator access to the Amazon account where the EKS cluster is deployed. +- Access to EKS cluster. +- Kubectl. +- Helm 3+. +- A domain in Route 53 (If you do not have one, then for more information, see [Registring a new domain](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register.html).) +- A certificate for TLS configuration. For a new domain certificate, see [Request a public certificate using the console](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html). + + + +## Configuration with AWS load balancer controller (as ingress) + +- Install an AWS ALB ingress controller: Follow the steps listed at [AWS Load Balancer Controller installation](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/deploy/installation/). + +- As per [AWS Load balancer controller documentation](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/how-it-works/#instance-mode), by default `Instance mode` ingress traffic is used by the AWS Load Balancer controller. (For example, the annotation `alb.ingress.kubernetes.io/target-type` in the ingress class is set to `NodeType`.) In this case, it requires the service to be exposed as type `NodePort`.
+To fulfill this requirement, deploy the `spotfire-server` chart with `haproxy.service.type=NodePort`.

+Note: This setting is not needed when ingress traffic is set explicitly to `IP mode`, using the annotation `alb.ingress.kubernetes.io/target-type=IP` in the ingress resource.
+ +See the difference between these modes on the page AWS Load balancer controller [How it works](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/how-it-works/#instance-mode) and choose the configuration that best suits your use case. + + +### Option 1: Spotfire configuration with ingress traffic set to IP mode + +    Note: The page [EKS best practices guides](https://aws.github.io/aws-eks-best-practices/networking/loadbalancing/loadbalancing/#recommendations) recommends using this option. + +1. Create an ingress values file using the following template. (Replace the variables in "<>" with appropriate values.) + +    ingress-values.yaml +```yaml +spotfire-server: + ingress: + # -- Enables configuration of ingress to expose Spotfire Server. Requires ingress support in the Kubernetes cluster. + enabled: true + ingressClassName: alb + hosts: + - host: "" + paths: + - path: / + pathType: Prefix + # -- Annotations for the ingress object. For valid annotations, see the documentation for your ingress controller. + # -- Ingress annotations page (https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/ingress/annotations/#annotations). + # -- Note: The following annotations are referenced from version 2.2 of the AWS Load Balancer Controller documentation. They may change in the latest version. + annotations: + # -- Group annotations are optional. + alb.ingress.kubernetes.io/group.name: spotfire.web + alb.ingress.kubernetes.io/group.order: "10" + # -- + alb.ingress.kubernetes.io/scheme: internet-facing + alb.ingress.kubernetes.io/load-balancer-name: "" + alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]' + alb.ingress.kubernetes.io/inbound-cidrs: 0.0.0.0/0 + alb.ingress.kubernetes.io/ip-address-type: ipv4 + alb.ingress.kubernetes.io/target-type: ip + alb.ingress.kubernetes.io/certificate-arn: "" + alb.ingress.kubernetes.io/ssl-redirect: "443" + alb.ingress.kubernetes.io/success-codes: "200" + external-dns.alpha.kubernetes.io/hostname: "" + +``` + +2. Install the Spotfire Server helm chart with this additional values file. For example: +``` +helm install my-release . -f ingress-values.yaml ... +``` +For more information, see ["Installing" section of the Readme for the `spotfire-server` helm chart](../../../helm/charts/spotfire-server/README.md#installing). + + + +### Option 2: Spotfire configuration with ingress traffic set to instance mode + +1. Create an ingress values file using the following template. (Replace the variables in "<>" with appropriate values.) + +        ingress-values.yaml +```yaml +spotfire-server: + haproxy: + service: + type: NodePort + ingress: + # -- Enables configuration of ingress to expose Spotfire Server. Requires ingress support in the Kubernetes cluster. + enabled: true + ingressClassName: alb + hosts: + - host: "" + paths: + - path: / + pathType: Prefix + # -- Annotations for the ingress object. For valid annotations, see the documentation for your ingress controller. + # -- Ingress annotations page (https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/ingress/annotations/#annotations). + # -- Note: The following annotations are referenced from version 2.2 of the AWS Load Balancer Controller documentation. They may change in the latest version. + annotations: + # -- Group annotations are optional. + alb.ingress.kubernetes.io/group.name: spotfire.web + alb.ingress.kubernetes.io/group.order: "10" + # -- + alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]' + alb.ingress.kubernetes.io/load-balancer-name: "" + alb.ingress.kubernetes.io/scheme: internet-facing + alb.ingress.kubernetes.io/ssl-redirect: "443" + alb.ingress.kubernetes.io/success-codes: "200" + external-dns.alpha.kubernetes.io/hostname: "" + alb.ingress.kubernetes.io/certificate-arn: "" +``` + +2. Install the Spotfire Server helm chart with this additional values file. For example: +``` +helm install my-release . -f ingress-values.yaml ... +``` +For more information, see ["Installing" section in the Readme for the `spotfire-server` helm chart](../../../helm/charts/spotfire-server/README.md#installing). + +## Configuring Route 53 + +Add "A" record in the appropriate Route 53 hosted zone and point it to the load balancer. For more information, see [Creating records by using the Amazon Route 53 console](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html). diff --git a/helm/examples/aws/rds.md b/docs/examples/aws/rds.md similarity index 92% rename from helm/examples/aws/rds.md rename to docs/examples/aws/rds.md index d6955a9..d7802e5 100644 --- a/helm/examples/aws/rds.md +++ b/docs/examples/aws/rds.md @@ -48,17 +48,17 @@ kubectl create secret generic "" --from-literal=DBSERVER_ Replace the variables in "<>" with the appropriate values. ```bash helm install my-release . \ - --set database.bootstrap.databaseUrl="jdbc:postgresql:///spotfire" \ + --set database.bootstrap.databaseUrl="jdbc:postgresql://:/spotfire" \ --set database.create-db.adminUsername="" \ --set database.create-db.adminPasswordExistingSecret.name="" \ --set database.create-db.adminPasswordExistingSecret.key="DBSERVER_ADMIN_PASSWORD" \ - --set database.create-db.databaseUrl="jdbc:postgresql:///" \ + --set database.create-db.databaseUrl="jdbc:postgresql://:/" \ --set database.create-db.spotfiredbDbname=spotfire \ --set database.create-db.enabled= \ .... ``` -For more information, see the ["Installing" section in the Readme for the `spotfire-server` helm chart](./../../charts/spotfire-server/README.md#installing). +For more information, see the ["Installing" section in the Readme for the `spotfire-server` helm chart](../../../helm/charts/spotfire-server/README.md#installing). ### Option 2: Spotfire deployment with RDS secrets as helm values @@ -68,13 +68,13 @@ Install the `spotfire-server` helm chart with the following additional values. Replace the variables in "<>" with the appropriate values. ```bash helm install my-release . \ - --set database.bootstrap.databaseUrl="jdbc:postgresql:///spotfire" \ + --set database.bootstrap.databaseUrl="jdbc:postgresql://:/spotfire" \ --set database.create-db.adminUsername="" \ --set database.create-db.adminPassword="" \ - --set database.create-db.databaseUrl="jdbc:postgresql:///" \ + --set database.create-db.databaseUrl="jdbc:postgresql://:/" \ --set database.create-db.spotfiredbDbname=spotfire \ --set database.create-db.enabled= \ .... ``` -For more information, see the ["Installing" section in the Readme for the `spotfire-server` helm chart](./../../charts/spotfire-server/README.md#installing). \ No newline at end of file +For more information, see the ["Installing" section in the Readme for the `spotfire-server` helm chart](../../../helm/charts/spotfire-server/README.md#installing). diff --git a/helm/examples/aws/s3.md b/docs/examples/aws/s3.md similarity index 80% rename from helm/examples/aws/s3.md rename to docs/examples/aws/s3.md index 1fca3fd..d6eedae 100644 --- a/helm/examples/aws/s3.md +++ b/docs/examples/aws/s3.md @@ -20,7 +20,7 @@ Execute this step only if the Spotfire environment is already deployed on 1. Back up the Spotfire database.
In the cli pod, export the library contents and remove the content from the library. See [Configuring external library storage in AWS](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/configuring_external_library_storage_in_aws.html). -   Note: For large size library content, configure the [volume for library export and import](./../../charts/spotfire-server/README.md#volume-for-library-export-and-import). +   Note: For large size library content, configure the [volume for library export and import](../../../helm/charts/spotfire-server/README.md#volume-for-library-export-and-import). - If the volume mount is not configured, copy the exported library zip file to your local computer. For more information, see [kubectl cp command reference ](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#cp). @@ -73,19 +73,20 @@ Here is the sample assume role trust policy on the web identity role for the ser     s3-bucket-configuration.yaml ```yaml -serviceAccount: - annotations: - eks.amazonaws.com/role-arn: "" -configuration: - configurationScripts: - - name: config-library-external-s3-storage - # For more information, see https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/config-library-external-s3-storage.html. - script: | - config-library-external-s3-storage --region="" --bucket-name="" --key-prefix="spotfire-library/" --access-key="default" --secret-key="NONE" --bootstrap-config="${BOOTSTRAP_FILE}" - - name: config-library-external-data-storage - # For more information, see https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/config-library-external-data-storage.html. - script: | - config-library-external-data-storage --tool-password="${TOOL_PASSWORD}" --enabled=true --external-storage=AMAZON_S3 --bootstrap-config="${BOOTSTRAP_FILE}" +spotfire-server: + serviceAccount: + annotations: + eks.amazonaws.com/role-arn: "" + configuration: + configurationScripts: + - name: config-library-external-s3-storage + # For more information, see https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/config-library-external-s3-storage.html. + script: | + config-library-external-s3-storage --region="" --bucket-name="" --key-prefix="spotfire-library/" --access-key="default" --secret-key="NONE" --bootstrap-config="${BOOTSTRAP_FILE}" + - name: config-library-external-data-storage + # For more information, see https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/config-library-external-data-storage.html. + script: | + config-library-external-data-storage --tool-password="${TOOL_PASSWORD}" --enabled=true --external-storage=AMAZON_S3 --bootstrap-config="${BOOTSTRAP_FILE}" ``` 2. Install Spotfire with the s3-bucket-configuration.yaml. @@ -94,7 +95,7 @@ configuration: helm install my-release . -f s3-bucket-configuration.yaml .... ``` -For more information, see the ["Installing" section in the Readme for the `spotfire-server` helm chart](./../../charts/spotfire-server/README.md#installing). +For more information, see the ["Installing" section in the Readme for the `spotfire-server` helm chart](../../../helm/charts/spotfire-server/README.md#installing). If the release is already installed, then use the command `helm upgrade --install` in place of `helm install`, along with the following additional parameters:
diff --git a/helm/examples/database-values/aurora-postgres.yaml b/docs/examples/database-values/aurora-postgres.yaml similarity index 100% rename from helm/examples/database-values/aurora-postgres.yaml rename to docs/examples/database-values/aurora-postgres.yaml diff --git a/helm/examples/database-values/aws-mssql.yaml b/docs/examples/database-values/aws-mssql.yaml similarity index 100% rename from helm/examples/database-values/aws-mssql.yaml rename to docs/examples/database-values/aws-mssql.yaml diff --git a/helm/examples/database-values/aws-oracle.yaml b/docs/examples/database-values/aws-oracle.yaml similarity index 100% rename from helm/examples/database-values/aws-oracle.yaml rename to docs/examples/database-values/aws-oracle.yaml diff --git a/helm/examples/database-values/aws-postgres.yaml b/docs/examples/database-values/aws-postgres.yaml similarity index 100% rename from helm/examples/database-values/aws-postgres.yaml rename to docs/examples/database-values/aws-postgres.yaml diff --git a/helm/examples/database-values/azure-mssql.yaml b/docs/examples/database-values/azure-mssql.yaml similarity index 100% rename from helm/examples/database-values/azure-mssql.yaml rename to docs/examples/database-values/azure-mssql.yaml diff --git a/helm/examples/database-values/azure-postgres.yaml b/docs/examples/database-values/azure-postgres.yaml similarity index 100% rename from helm/examples/database-values/azure-postgres.yaml rename to docs/examples/database-values/azure-postgres.yaml diff --git a/helm/examples/database-values/mssql.yaml b/docs/examples/database-values/mssql.yaml similarity index 100% rename from helm/examples/database-values/mssql.yaml rename to docs/examples/database-values/mssql.yaml diff --git a/helm/examples/database-values/oracle.yaml b/docs/examples/database-values/oracle.yaml similarity index 100% rename from helm/examples/database-values/oracle.yaml rename to docs/examples/database-values/oracle.yaml diff --git a/helm/examples/database-values/postgres.yaml b/docs/examples/database-values/postgres.yaml similarity index 100% rename from helm/examples/database-values/postgres.yaml rename to docs/examples/database-values/postgres.yaml diff --git a/docs/examples/gcp/README.md b/docs/examples/gcp/README.md new file mode 100644 index 0000000..f4da9df --- /dev/null +++ b/docs/examples/gcp/README.md @@ -0,0 +1,9 @@ +# Spotfire Cloud Deployment Kit (CDK) deployment on Google Cloud Platform + +The following articles provide quick starts for deployment of the Spotfire CDK in [Google Kubernetes Engine (GKE)](https://cloud.google.com/kubernetes-engine) with various other on Google Cloud Platform supported services. + +- [Configuring a Google Cloud SQL database as the Spotfire database](google-cloud-sql-postgres.md) +- [Configuring a Google Application Load Balancer with the GKE Ingress controller](gce-ingress.md) +- [Configuring a Google Cloud Storage bucket as the Spotfire external library storage](google-cloud-storage.md) + + diff --git a/docs/examples/gcp/gce-ingress.md b/docs/examples/gcp/gce-ingress.md new file mode 100644 index 0000000..fa8cf63 --- /dev/null +++ b/docs/examples/gcp/gce-ingress.md @@ -0,0 +1,135 @@ +# Configuring a Google Application Load Balancer with the GKE Ingress controller + +## Overview + +This page provides an overview of the main steps to use a [Google Application Load Balancer](https://cloud.google.com/load-balancing/docs/application-load-balancer) with the [GKE Ingress](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress) controller, when deploying the [Spotfire Platform](https://www.spotfire.com/) on [Google Kubernetes Engine (GKE)](https://cloud.google.com/kubernetes-engine) using the [Spotfire CDK](https://github.com/spotfiresoftware/spotfire-cloud-deployment-kit). + +**Note**: This is a quick start guide. For more information, see the official documentation. + +**Note**: Remember to change the provided example values and extend the provided steps to adapt them to your specific needs and to align to the recommended best practices. + +## Prerequisites + +- An account in Google Cloud Platform with permissions for the required GCP services. +- [gcloud cli](https://cloud.google.com/sdk/docs/install-sdk). +- [Kubectl](https://kubernetes.io/docs/tasks/tools/). +- [Helm 3+](https://helm.sh/docs/intro/install/). + +**Note**: We use gcloud cli for the steps below, but you can use the Google Cloud web interface, REST API, libraries or any other available methods. + +## Steps + +### 1. Create a custom Backend health check + +When you expose one or more Services through an Ingress using the default Ingress controller, GKE creates a classic Application Load Balancer or an internal Application Load Balancer. Both of these load balancers support multiple backend services on a single URL map. Each of the backend services corresponds to a Kubernetes Service, and each backend service must reference a Google Cloud health check. + +The GKE Ingress creates a default health check for each backend service and the backend probes need to return an HTTP 200 (OK) status. It is not possible to change this expected response. + +1. To define custom health checks, you can define a custom `BackendConfig` object. + We create a custom backend health check using the `spotfire-server-haproxy` stats port (since it returns `200` status as needed). + + You can use the provided example `spotfire-server-haproxy-http-health-check.yaml`: + ```bash + apiVersion: cloud.google.com/v1 + kind: BackendConfig + metadata: + name: http-health-check-config + spec: + healthCheck: + checkIntervalSec: 10 + port: 1024 + type: HTTP + requestPath: /stats + ``` + + For more information, see [Health checks](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress#health_checks). + +2. Apply the custom backend health check configuration: + ```bash + kubectl apply \ + -n $NAMESPACE \ + -f spotfire-server-haproxy-http-health-check.yaml + ``` + +### 2. Deploy Spotfire + +We need to create an ingress with your domain. +We can do it from the `spotfire-server` Helm chart. +After that, we can associate your domain with the external IP address of the created Google Application Load Balancer. + +1. Create an Helm values file using the following `gce-ingress.yaml` example template: + ```yaml + configuration: + site: + publicAddress: + haproxy: + service: + type: NodePort + annotations: + cloud.google.com/neg: '{"ingress": true}' + cloud.google.com/backend-config: '{"default": "http-health-check-config"}' + ingress: + # -- Enables configuration of ingress to expose Spotfire Server. Requires ingress support in the Kubernetes cluster. + enabled: true + className: gce + hosts: + - host: "" + paths: + - path: / + pathType: Prefix + # -- Annotations for the ingress object. For valid annotations, see the documentation for your ingress controller. + # -- Ingress configuration on Google Cloud: https://cloud.google.com/kubernetes-engine/docs/how-to/ingress-configuration + # -- Ingress GCE FAQ: https://github.com/kubernetes/ingress-gce + annotations: + # This tells Google Cloud to create an External Load Balancer to realize this Ingress + kubernetes.io/ingress.class: gce + # This enables HTTP connections from Internet clients + kubernetes.io/ingress.allow-http: "true" + ``` + **Note**: We use the GCE annotation `cloud.google.com/backend-config` to point to our custom backend health check. + + For more information, see [GKE Ingress for Application Load Balancers](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress) and + [Ingress configuration on Google Cloud](https://cloud.google.com/kubernetes-engine/docs/how-to/ingress-configuration). + +2. Deploy the `spotfire-server` Helm chart using the `gce-ingress.yaml` additional values. + For example: + ```bash + helm upgrade --install my-spotfire-server-release \ + /spotfire-server \ + --set global.spotfire.acceptEUA=true \ + --set global.spotfire.image.registry= \ + --namespace=$NAMESPACE \ + -f gce-ingress.yaml \ + ... + ``` + **Note**: The associated Google Application Load Balancer creation takes some minutes. + +3. Show the created Spotfire ingress details: + ```bash + kubectl describe -n $NAMESPACE ingress spotfire-server + ``` + And take note of the created Application Load Balancer external IP address. + +4. Add a record for the IP address to your DNS matching your configured in your preferred DNS provider. + +5. Access the Spotfire UI using your domain: http://<your domain name>. + +Congratulations, you have deployed the Spotfire Platform on Google Cloud using +a Google Application Load Balancer with the GKE Ingress controller. + +You might continue with some additional steps: +- Check out the [Ingress user guide](https://kubernetes.io/docs/concepts/services-networking/ingress/) for details about Ingress features. +- Configure [static IP and a domain name](https://cloud.google.com/kubernetes-engine/docs/tutorials/configuring-domain-name-static-ip) for your Ingress application using Ingress. +- Using [Google-managed SSL certificates](https://cloud.google.com/kubernetes-engine/docs/how-to/managed-certs) + +You can also learn about reference architectures, diagrams, and best practices in Google Cloud in [Cloud Architecture Center](https://cloud.google.com/architecture) + +### 3. Cleanup + +- To avoid unneeded resource usage, and once you have completed this tutorial, delete any created resources: + ```bash + gcloud container clusters delete $CLUSTER_NAME --location $REGION + gcloud sql instances delete $DB_INSTANCE_NAME + ... + ``` + For more information, see [Delete instances](https://cloud.google.com/sql/docs/postgres/delete-instance#gcloud). \ No newline at end of file diff --git a/docs/examples/gcp/google-cloud-sql-postgres.md b/docs/examples/gcp/google-cloud-sql-postgres.md new file mode 100644 index 0000000..ff11754 --- /dev/null +++ b/docs/examples/gcp/google-cloud-sql-postgres.md @@ -0,0 +1,124 @@ +# Configuring a Google Cloud SQL database as the Spotfire database + +## Overview + +This page provides an overview of the main steps to use a [Google Cloud SQL PostgreSQL](https://cloud.google.com/sql/docs/postgres/) instance as the Spotfire database, when deploying the [Spotfire Platform](https://www.spotfire.com/) on [Google Kubernetes Engine (GKE)](https://cloud.google.com/kubernetes-engine) using the [Spotfire CDK](https://github.com/spotfiresoftware/spotfire-cloud-deployment-kit). + +**Note**: This is a quick start guide. For more information, see the official documentation. + +**Note**: Remember to change the provided example values and extend the provided steps to adapt them to your specific needs and to align to the recommended best practices. + +## Prerequisites + +- An account in Google Cloud Platform with permissions for the required GCP services. +- [gcloud cli](https://cloud.google.com/sdk/docs/install-sdk). +- [Kubectl](https://kubernetes.io/docs/tasks/tools/). +- [Helm 3+](https://helm.sh/docs/intro/install/). + +**Note**: We use gcloud cli for the steps below, but you can use the Google Cloud web interface, REST API, libraries or any other available methods. + +## Steps + +### 1. Create a Google Cloud SQL database + +First, we create a relational database instance in the Google account, choosing a network with connectivity to the GKE cluster. + +For more information, see [Cloud SQL PostgreSQL - Create instances](https://cloud.google.com/sql/docs/postgres/create-instance) and [Connect to Cloud SQL for PostgreSQL from Google Kubernetes Engine](https://cloud.google.com/sql/docs/postgres/connect-instance-kubernetes#expandable-2). + +**Note**: To migrate an existing PostgreSQL database to Google SQL, see +[Database Migration Service](https://cloud.google.com/database-migration?hl=en) and +[Migrate a database to Cloud SQL for PostgreSQL by using Database Migration Service](https://cloud.google.com/database-migration/docs/postgres/quickstart). + +**Note**: We create a Google SQL database instance with only a private IP address. This requires configuring private services access to enable connections from other Google Cloud services, such as GKE. + +**Note**: Replace the variables within "<>" with the appropriate values. + +1. Check out if you already have allocated an IP range for a private services access connection: + ```bash + gcloud compute addresses list --global --filter="purpose=VPC_PEERING" + ``` + If not, run the gcloud compute addresses create command to allocate an IP range for a private services access connection: + ```bash + gcloud compute addresses create google-managed-services-default \ + --global \ + --purpose=VPC_PEERING \ + --prefix-length=16 \ + --description="peering range for Google" \ + --network=default + ``` + For more information, see [Configure private services access](https://cloud.google.com/vpc/docs/configure-private-services-access#gcloud). + +2. Run the gcloud services `vpc-peerings connect` command to create the private services access connection: + ```bash + gcloud services vpc-peerings connect \ + --service=servicenetworking.googleapis.com \ + --ranges=google-managed-services-default \ + --network=default + ``` + +3. Create a Cloud SQL instance with a private IP address: + ```bash + export DB_INSTANCE_NAME= + export DB_ADMIN_PASSWORD= + gcloud services enable sqladmin.googleapis.com + gcloud sql instances create $DB_INSTANCE_NAME \ + --database-version=POSTGRES_15 \ + --cpu=1 \ + --memory=4GB \ + --region=$REGION \ + --root-password=$DB_ADMIN_PASSWORD \ + --no-assign-ip \ + --network=default + ``` + **Note**: It will take ~5 minutes to create the database instance. + + List your created instance and take note of its private IP address: + ```bash + gcloud sql instances list + ``` + +### 2 .Deploy Spotfire + +1. Create a helm values file using the following `google-cloud-sql-postgres.yaml` example template. + Replace the IP address with your database private IP address. + ```yaml + database: + bootstrap: + databaseUrl: "jdbc:postgresql://:5432/spotfiredb" + username: "postgres" + password: "" + create-db: + adminUsername: "postgres" + adminPassword: "" + databaseUrl: "jdbc:postgresql://:5432/postgres" + doNotCreateUser: true + spotfiredbDbname: spotfiredb + ``` + +2. Deploy the `spotfire-server` Helm chart using the `google-cloud-sql-postgres.yaml` additional values. + For example: + ```bash + helm upgrade --install \ + /spotfire-server \ + --set global.spotfire.acceptEUA=true \ + --set global.spotfire.image.registry= \ + --namespace=$NAMESPACE \ + --set configuration.site.publicAddress=http://spotfire.local \ + -f google-cloud-sql-postgres.yaml + ... + ``` + +Congratulations, you have deployed the Spotfire Platform on Google Cloud +using a Google Cloud SQL database as the Spotfire database. + +You can also learn about reference architectures, diagrams, and best practices in Google Cloud in [Cloud Architecture Center](https://cloud.google.com/architecture) + +### 3. Cleanup + +- To avoid unneeded resource usage, and once you have completed this tutorial, delete any created resources: + ```bash + gcloud container clusters delete $CLUSTER_NAME --location $REGION + gcloud sql instances delete $DB_INSTANCE_NAME + ... + ``` + For more information, see [Delete Google SQL instances](https://cloud.google.com/sql/docs/postgres/delete-instance#gcloud). diff --git a/docs/examples/gcp/google-cloud-storage.md b/docs/examples/gcp/google-cloud-storage.md new file mode 100644 index 0000000..464a9ee --- /dev/null +++ b/docs/examples/gcp/google-cloud-storage.md @@ -0,0 +1,94 @@ +# Configuring a Google Cloud Storage bucket as the Spotfire external library storage + +## Overview + +This page provides an overview of the main steps to use a [Google Storage](https://cloud.google.com/load-balancing/docs/application-load-balancer) when deploying the [Spotfire Platform](https://www.spotfire.com/) on [Google Kubernetes Engine (GKE)](https://cloud.google.com/kubernetes-engine) using the [Spotfire CDK](https://github.com/spotfiresoftware/spotfire-cloud-deployment-kit). + +**Note**: This is a quick start guide. For more information, see the official documentation. + +**Note**: Remember to change the provided example values and extend the provided steps to adapt them to your specific needs and to align to the recommended best practices. + +## Prerequisites + +- An account in Google Cloud Platform with permissions for the required GCP services. +- [gcloud cli](https://cloud.google.com/sdk/docs/install-sdk). +- [Kubectl](https://kubernetes.io/docs/tasks/tools/). +- [Helm 3+](https://helm.sh/docs/intro/install/). + +**Note**: We use gcloud cli for the steps below, but you can use the Google Cloud web interface, REST API, libraries or any other available methods. + +## Steps + +### 1. Create a Google Storage bucket + +1. Create a Google Storage bucket: + ```bash + export BUCKET_NAME= + gcloud storage buckets create gs:/$BUCKET_NAME \ + --location=$REGION + ``` + For more information, see [Create buckets](https://cloud.google.com/storage/docs/creating-buckets). + +2. Verify your bucket: + ```bash + gcloud storage ls + ``` + +### 2. Deploy Spotfire + +1. Create a Helm values file using the following `google-cloud-storage-bucket.yaml` example template: + ```yaml + configuration: + configurationScripts: + - name: config-library-external-google-storage-storage + # https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/config-library-external-google-cloud-storage.html + script: | + config-library-external-google-cloud-storage --bucket-name="" --key-prefix="spotfire-library/" --project-id="" --credential-file-path= --bootstrap-config="${BOOTSTRAP_FILE}" + - name: config-library-external-data-storage + # https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/config-library-external-s3-storage.html + script: | + config-library-external-data-storage --tool-password="${TOOL_PASSWORD}" --enabled=true --external-storage=GOOGLE_CLOUD_STORAGE --bootstrap-config="${BOOTSTRAP_FILE}" + ``` + + For more information, see the [config-library-external-data-storage](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/config-library-external-data-storage.html) and [config-library-external-google-cloud-storage](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/config-library-external-google-cloud-storage.html) documentation. + +2. Deploy the `spotfire-server` Helm chart using the `google-cloud-storage-bucket.yaml` additional values. + For example: + ```bash + helm upgrade --install my-spotfire-server-release \ + /spotfire-server \ + --set global.spotfire.acceptEUA=true \ + --set global.spotfire.image.registry= \ + --namespace=$NAMESPACE \ + -f google-cloud-storage-bucket.yaml \ + ... + ``` + + For more information, see the ["Installing" section in the Readme for the `spotfire-server` helm chart](../../../helm/charts/spotfire-server/README.md#installing). + + **Note**: If the release is already installed, then use: + ```bash + helm upgrade --install my-spotfire-server-release \ + /spotfire-server \ + --set configuration.apply=always \ + --set database.create-db.enabled=false \ + -f google-cloud-storage-bucket.yaml \ + ... + ``` + + **Note**: To reflect the service account annotation change on the pod, the existing `spotfire-server` and `spotfire-config` pods are re-created (either by deleting old pods or scale in/out respective replicaset). + +Congratulations, you have deployed the Spotfire Platform on Google Cloud using +a Google Cloud Storage bucket as the Spotfire external library storage. + +You can also learn about reference architectures, diagrams, and best practices in Google Cloud in [Cloud Architecture Center](https://cloud.google.com/architecture) + +### 3. Cleanup + +- To avoid unneeded resource usage, and once you have completed this tutorial, delete any created resources: + ```bash + gcloud container clusters delete $CLUSTER_NAME --location $REGION + gcloud storage rm --recursive gs://$BUCKET_NAME + ... + ``` + For more information, see [Delete Google Storage buckets](https://cloud.google.com/storage/docs/deleting-buckets#delete-bucket-cli). \ No newline at end of file diff --git a/helm/examples/spotfire-umbrella-example/values-actionlogdb.yaml b/docs/examples/umbrella-values/values-actionlogdb.yaml similarity index 100% rename from helm/examples/spotfire-umbrella-example/values-actionlogdb.yaml rename to docs/examples/umbrella-values/values-actionlogdb.yaml diff --git a/helm/examples/spotfire-umbrella-example/values-initial-setup.yaml b/docs/examples/umbrella-values/values-initial-setup.yaml similarity index 100% rename from helm/examples/spotfire-umbrella-example/values-initial-setup.yaml rename to docs/examples/umbrella-values/values-initial-setup.yaml diff --git a/helm/examples/spotfire-umbrella-example/values-keda-autoscaling.yaml b/docs/examples/umbrella-values/values-keda-autoscaling.yaml similarity index 98% rename from helm/examples/spotfire-umbrella-example/values-keda-autoscaling.yaml rename to docs/examples/umbrella-values/values-keda-autoscaling.yaml index 7fd364c..afa2cda 100644 --- a/helm/examples/spotfire-umbrella-example/values-keda-autoscaling.yaml +++ b/docs/examples/umbrella-values/values-keda-autoscaling.yaml @@ -1,4 +1,4 @@ -# This example enables autoscaling with keda for the spotfire-webplayer-pool1, +# This example enables autoscaling with keda for the spotfire-webplayer, # spotfire-automationservices, spotfire-rservice, spotfire-terrservice, and spotfire-pythonservice. # It requires keda and prometheus to be installed in your cluster, as well as a prometheus server. @@ -8,7 +8,7 @@ # See more information about keda autoscaling in the respecitve Helm chart documentation -spotfire-webplayer-pool1: +spotfire-webplayer: kedaAutoscaling: enabled: true advanced: diff --git a/helm/examples/spotfire-umbrella-example/values-multiple-services-and-webplayer-pools.yaml b/docs/examples/umbrella-values/values-multiple-services-and-webplayer-pools.yaml similarity index 90% rename from helm/examples/spotfire-umbrella-example/values-multiple-services-and-webplayer-pools.yaml rename to docs/examples/umbrella-values/values-multiple-services-and-webplayer-pools.yaml index f450d51..e805a5d 100644 --- a/helm/examples/spotfire-umbrella-example/values-multiple-services-and-webplayer-pools.yaml +++ b/docs/examples/umbrella-values/values-multiple-services-and-webplayer-pools.yaml @@ -5,10 +5,7 @@ # the name of the spotfire-server, for each service. This technique works because the # value is evaluated as a gotemplate string during helm installation or upgrade. -spotfire-webplayer-pool1: - enabled: true - -spotfire-webplayer-pool2: +spotfire-webplayer: enabled: true spotfire-automationservices: diff --git a/helm/examples/spotfire-umbrella-example/values-volumes.yaml b/docs/examples/umbrella-values/values-volumes.yaml similarity index 100% rename from helm/examples/spotfire-umbrella-example/values-volumes.yaml rename to docs/examples/umbrella-values/values-volumes.yaml diff --git a/helm/examples/webplayer-custom-modules/Dockerfile b/docs/examples/webplayer-custom-modules/Dockerfile similarity index 100% rename from helm/examples/webplayer-custom-modules/Dockerfile rename to docs/examples/webplayer-custom-modules/Dockerfile diff --git a/helm/examples/webplayer-custom-modules/README.md b/docs/examples/webplayer-custom-modules/README.md similarity index 100% rename from helm/examples/webplayer-custom-modules/README.md rename to docs/examples/webplayer-custom-modules/README.md diff --git a/helm/examples/webplayer-custom-modules/custom-modules/.gitignore b/docs/examples/webplayer-custom-modules/custom-modules/.gitignore similarity index 100% rename from helm/examples/webplayer-custom-modules/custom-modules/.gitignore rename to docs/examples/webplayer-custom-modules/custom-modules/.gitignore diff --git a/helm/examples/webplayer-custom-modules/unpack-modules-from-spk-sdn.sh b/docs/examples/webplayer-custom-modules/unpack-modules-from-spk-sdn.sh old mode 100755 new mode 100644 similarity index 100% rename from helm/examples/webplayer-custom-modules/unpack-modules-from-spk-sdn.sh rename to docs/examples/webplayer-custom-modules/unpack-modules-from-spk-sdn.sh diff --git a/helm/examples/webplayer-custom-modules/unpack-modules-to-pvc.yaml b/docs/examples/webplayer-custom-modules/unpack-modules-to-pvc.yaml similarity index 100% rename from helm/examples/webplayer-custom-modules/unpack-modules-to-pvc.yaml rename to docs/examples/webplayer-custom-modules/unpack-modules-to-pvc.yaml diff --git a/helm/Makefile b/helm/Makefile index 8054951..1b027b5 100644 --- a/helm/Makefile +++ b/helm/Makefile @@ -7,36 +7,36 @@ PACKAGE_DIR ?= packages REPO_URL ?= # http://example.com/helm-repo/ # Charts to package -CHARTS = spotfire-common spotfire-server spotfire-webplayer spotfire-automationservices spotfire-terrservice spotfire-pythonservice spotfire-rservice +CHARTS = spotfire-common spotfire-server spotfire-webplayer spotfire-automationservices spotfire-terrservice spotfire-pythonservice spotfire-rservice spotfire-platform +PUBLIC_CHARTS = $(filter-out spotfire-common,$(CHARTS)) -.PHONY: $(CHARTS) documentation package $(PACKAGE_DIR)/index.yaml clean +.PHONY: $(CHARTS) documentation package $(PACKAGE_DIR)/index.yaml clean list # Targets package : $(PACKAGE_DIR)/index.yaml -$(PACKAGE_DIR)/index.yaml : $(CHARTS) spotfire-umbrella-example +package-% : % + helm package charts/$* -d $(PACKAGE_DIR) +$(PACKAGE_DIR)/index.yaml : $(CHARTS) $(addprefix package-,$(PUBLIC_CHARTS)) helm repo index $(addprefix --url ,$(REPO_URL)) $(PACKAGE_DIR)/ $(CHARTS) : helm dependency update charts/$@ - helm package charts/$@ -d $(PACKAGE_DIR) -push : HELM_PUSH_REMOTE ?= $(error HELM_PUSH_REMOTE must be set e.g. oci://registry.example.com/) +push : HELM_OCI_REGISTRY ?= $(error HELM_OCI_REGISTRY must be set e.g. oci://registry.example.com/) push : $(PACKAGE_DIR)/*.tgz for chart in $^; do \ - helm push $${chart} $(HELM_PUSH_REMOTE) $(HELM_PUSH_FLAGS); \ + helm push $${chart} $(HELM_OCI_REGISTRY) $(HELM_PUSH_FLAGS); \ done - -spotfire-umbrella-example : - helm dependency update examples/$@ - helm package examples/$@ -d $(PACKAGE_DIR) +list : + @echo $(PUBLIC_CHARTS) all : package # Chart dependencies spotfire-server : spotfire-common spotfire-webplayer spotfire-automationservices spotfire-terrservice spotfire-pythonservice spotfire-rservice: spotfire-common -spotfire-umbrella-example : spotfire-webplayer spotfire-automationservices spotfire-terrservice spotfire-pythonservice spotfire-rservice spotfire-server +spotfire-platform : spotfire-webplayer spotfire-automationservices spotfire-terrservice spotfire-pythonservice spotfire-rservice spotfire-server clean : rm -rf -- $(PACKAGE_DIR)/ @@ -45,7 +45,37 @@ clean : find . -iname "*.lock" -type f -exec rm -rf -- {} \; documentation : - helm-docs --chart-search-root . + helm-docs --document-dependency-values --chart-search-root . + +test : $(addprefix test-,$(PUBLIC_CHARTS)) +test-% : lint-% template-% kubeconform-% + @echo Test of chart $* completed. + +lint : $(addprefix lint-,$(PUBLIC_CHARTS)) +lint-% : + $(foreach v, $(wildcard charts/$*/test/*-values.yaml), \ + helm lint charts/$* --values $(v); \ + ) + +# Set to VALIDATE=1 validate against running kubernetes cluster +templat% : VALIDATE ?= 1 +template : $(addprefix template-,$(PUBLIC_CHARTS)) +template-% : + $(foreach v, $(wildcard charts/$*/test/*-values.yaml), \ + helm template $(if $(filter 1,$(VALIDATE)),--validate,) charts/$* --values $(v); \ + ) + +kubeconform : $(addprefix kubeconform-,$(PUBLIC_CHARTS)) +kubeconform-% : + $(foreach v, $(wildcard charts/$*/test/*-values.yaml), \ + helm template charts/$* --values $(v) | kubeconform -summary -ignore-missing-schemas; \ + ) + +# Almost like template but renders notes +notes : $(addprefix notes-,$(TEST_CHARTS)) +notes-% : + $(foreach v, $(wildcard charts/$*/test/*-values.yaml), \ + helm install --generate-name --dry-run --render-subchart-notes charts/$* --values $(v); \ + ) -# Test targets -include test.mk +.PHONY: kubeconform kubeconform-% lint lint-% template template-% test test-% notes notes-% diff --git a/helm/README.md b/helm/README.md index d3337d9..7f1c450 100644 --- a/helm/README.md +++ b/helm/README.md @@ -5,6 +5,7 @@ This directory contains the recipes to build and examples to use the [**Spotfire®**](https://www.spotfire.com/) Helm charts: +- [spotfire-platform](charts/spotfire-platform/README.md): A complete Spotfire environment with a Spotfire server and optional Spotfire services listed below. - [spotfire-server](charts/spotfire-server/README.md): Spotfire Server helm chart. - [spotfire-webplayer](charts/spotfire-webplayer/README.md): Spotfire Web Player helm chart. - [spotfire-automationservices](charts/spotfire-automationservices/README.md): Spotfire Automation Services helm chart. @@ -12,16 +13,10 @@ This directory contains the recipes to build and examples to use the [**Spotfire - [spotfire-pythonservice](charts/spotfire-pythonservice/README.md): Spotfire Service for Python helm chart. - [spotfire-terrservice](charts/spotfire-terrservice/README.md): Spotfire Enterprise Runtime for R - Server Edition helm chart. -See the respective README files for details and usage examples. For specific examples see [examples](./examples/README.md) folder. +See the respective README files for details and usage examples. For more examples see the [examples](../docs/examples) folder. **Note**: There are other recipes in the `charts` directory not listed here. They are used internally for better template reusability, and they include common software requirements and functions. -## Prerequisites - -- You have built the [Spotfire container images](../containers/README.md) or have configured a container repository hosting those container images. -- Kubernetes 1.24+, a working kubernetes cluster from a ([certified k8s distro](https://www.cncf.io/certification/software-conformance/)). -- Helm 3+, for building and deploying the charts. - ## Building the charts You can build each chart on its own as described in the respective READMEs, or you can use the provided `Makefile` within this directory to build all the charts with just one single command. (This `Makefile` also takes care of their internal dependencies.) diff --git a/helm/charts/spotfire-automationservices/Chart.yaml b/helm/charts/spotfire-automationservices/Chart.yaml index 0790c78..283e35c 100755 --- a/helm/charts/spotfire-automationservices/Chart.yaml +++ b/helm/charts/spotfire-automationservices/Chart.yaml @@ -4,9 +4,9 @@ description: A Helm chart for Spotfire Automation Services. type: application -version: 0.2.4 +version: 0.3.0 -appVersion: "14.4.0" +appVersion: "14.4.1" kubeVersion: ">=1.24.0-0" @@ -24,7 +24,7 @@ keywords: dependencies: - name: spotfire-common repository: file://../spotfire-common - version: 0.2.4 + version: 0.3.0 annotations: license: Apache 2.0 diff --git a/helm/charts/spotfire-automationservices/README.md b/helm/charts/spotfire-automationservices/README.md index 5c2e162..a1d45b5 100644 --- a/helm/charts/spotfire-automationservices/README.md +++ b/helm/charts/spotfire-automationservices/README.md @@ -1,6 +1,6 @@ # spotfire-automationservices -![Version: 0.2.4](https://img.shields.io/badge/Version-0.2.4-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 14.4.0](https://img.shields.io/badge/AppVersion-14.4.0-informational?style=flat-square) +![Version: 0.3.0](https://img.shields.io/badge/Version-0.3.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 14.4.1](https://img.shields.io/badge/AppVersion-14.4.1-informational?style=flat-square) A Helm chart for Spotfire Automation Services. @@ -16,7 +16,7 @@ Kubernetes: `>=1.24.0-0` | Repository | Name | Version | |------------|------|---------| -| file://../spotfire-common | spotfire-common | 0.2.4 | +| file://../spotfire-common | spotfire-common | 0.3.0 | ## Overview @@ -173,12 +173,16 @@ See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command document When you upgrade to a newer Spotfire Server version and newer Spotfire services versions, upgrade the Spotfire Server first, and then upgrade the Spotfire services. -Some parameters might have been changed, moved or renamed and must be taken into consideration when upgrading the release. See [RELEASE-NOTES.md](../../../RELEASE-NOTES.md) for details. +Some parameters might have been changed, moved or renamed and must be taken into consideration when upgrading the release. See [release notes](https://github.com/spotfiresoftware/spotfire-cloud-deployment-kit/releases) for more information. ## Values | Key | Type | Default | Description | |-----|------|---------|-------------| +| global.spotfire.acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | +| global.spotfire.image.pullPolicy | string | `"IfNotPresent"` | The global container image pull policy. | +| global.spotfire.image.pullSecrets | list | `[]` | The global container image pull secrets. | +| global.spotfire.image.registry | string | `nil` | The global container image registry. Used for spotfire/ container images, unless it is overridden. | | acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | | affinity | object | `{}` | | | config."Spotfire.Dxp.Worker.Automation.config" | string | `""` | A custom [Spotfire.Dxp.Worker.Automation.config](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/spotfire.dxp.worker.automation.config_file.html). | @@ -194,18 +198,14 @@ Some parameters might have been changed, moved or renamed and must be taken into | extraVolumes | list | `[]` | Extra volumes for the service container. More info: `kubectl explain deployment.spec.template.spec.volumes`. | | fluentBitSidecar.image.pullPolicy | string | `"IfNotPresent"` | The image pull policy for the fluent-bit logging sidecar image. | | fluentBitSidecar.image.repository | string | `"fluent/fluent-bit"` | The image repository for fluent-bit logging sidecar. | -| fluentBitSidecar.image.tag | string | `"2.2.2"` | The image tag to use for fluent-bit logging sidecar. | +| fluentBitSidecar.image.tag | string | `"3.1.6"` | The image tag to use for fluent-bit logging sidecar. | | fluentBitSidecar.securityContext | object | `{}` | The securityContext setting for fluent-bit sidecar container. Overrides any securityContext setting on the Pod level. | | fullnameOverride | string | `""` | | -| global.spotfire.acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | -| global.spotfire.image.pullPolicy | string | `"IfNotPresent"` | The global container image pull policy. | -| global.spotfire.image.pullSecrets | list | `[]` | The global container image pull secrets. | -| global.spotfire.image.registry | string | `nil` | The global container image registry. Used for spotfire/ container images, unless it is overridden. | | image.pullPolicy | string | `nil` | The spotfire-server image pull policy. Overrides global.spotfire.image.pullPolicy. | | image.pullSecrets | list | `[]` | Image pull secrets. | | image.registry | string | `nil` | The image registry for spotfire-server. Overrides global.spotfire.image.registry value. | | image.repository | string | `"spotfire/spotfire-automationservices"` | The spotfire-server image repository. | -| image.tag | string | `"14.4.0-1"` | The container image tag to use. | +| image.tag | string | `"14.4.1-1"` | The container image tag to use. | | kedaAutoscaling | object | `{"advanced":{},"cooldownPeriod":300,"enabled":false,"fallback":{},"maxReplicas":4,"minReplicas":0,"pollingInterval":30,"spotfireConfig":{"prometheusServerAddress":"http://prometheus-server.monitor.svc.cluster.local","spotfireServerHelmRelease":null},"threshold":8,"triggers":[]}` | KEDA autoscaling configuration. See https://keda.sh/docs/latest/concepts/scaling-deployments for more details. | | kedaAutoscaling.cooldownPeriod | int | `300` | The period to wait after the last trigger reported active before scaling the resource back to 0. | | kedaAutoscaling.maxReplicas | int | `4` | This setting is passed to the HPA definition that KEDA creates for a given resource and holds the maximum number of replicas of the target resource. | diff --git a/helm/charts/spotfire-automationservices/README.md.gotmpl b/helm/charts/spotfire-automationservices/README.md.gotmpl index 6c7da16..fd584b6 100755 --- a/helm/charts/spotfire-automationservices/README.md.gotmpl +++ b/helm/charts/spotfire-automationservices/README.md.gotmpl @@ -169,6 +169,6 @@ See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command document When you upgrade to a newer Spotfire Server version and newer Spotfire services versions, upgrade the Spotfire Server first, and then upgrade the Spotfire services. -Some parameters might have been changed, moved or renamed and must be taken into consideration when upgrading the release. See [RELEASE-NOTES.md](../../../RELEASE-NOTES.md) for details. +Some parameters might have been changed, moved or renamed and must be taken into consideration when upgrading the release. See [release notes](https://github.com/spotfiresoftware/spotfire-cloud-deployment-kit/releases) for more information. {{ template "chart.valuesSection" . }} diff --git a/helm/charts/spotfire-automationservices/values.yaml b/helm/charts/spotfire-automationservices/values.yaml index d61b47a..5b5c631 100755 --- a/helm/charts/spotfire-automationservices/values.yaml +++ b/helm/charts/spotfire-automationservices/values.yaml @@ -11,10 +11,6 @@ global: # -- The global container image pull policy. pullPolicy: IfNotPresent # -- The global container image pull secrets. - ## E.g. - ## pullSecrets: - ## - myRegistryKeySecretName - ## pullSecrets: [] nodemanagerConfig: @@ -31,7 +27,7 @@ image: # -- The spotfire-server image repository. repository: spotfire/spotfire-automationservices # -- The container image tag to use. - tag: "14.4.0-1" + tag: "14.4.1-1" # -- The spotfire-server image pull policy. Overrides global.spotfire.image.pullPolicy. pullPolicy: # -- Image pull secrets. @@ -42,7 +38,7 @@ fluentBitSidecar: # -- The image repository for fluent-bit logging sidecar. repository: fluent/fluent-bit # -- The image tag to use for fluent-bit logging sidecar. - tag: "2.2.2" + tag: "3.1.6" # -- The image pull policy for the fluent-bit logging sidecar image. pullPolicy: IfNotPresent diff --git a/helm/charts/spotfire-common/Chart.yaml b/helm/charts/spotfire-common/Chart.yaml index c806b75..7f38703 100644 --- a/helm/charts/spotfire-common/Chart.yaml +++ b/helm/charts/spotfire-common/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: spotfire-common description: A Helm chart with common templates used in charts. type: library -version: 0.2.4 +version: 0.3.0 home: https://github.com/spotfiresoftware/spotfire-cloud-deployment-kit sources: diff --git a/helm/charts/spotfire-common/README.md b/helm/charts/spotfire-common/README.md index 0ffa32a..cf67cb4 100644 --- a/helm/charts/spotfire-common/README.md +++ b/helm/charts/spotfire-common/README.md @@ -1,6 +1,6 @@ # spotfire-common -![Version: 0.2.4](https://img.shields.io/badge/Version-0.2.4-informational?style=flat-square) ![Type: library](https://img.shields.io/badge/Type-library-informational?style=flat-square) +![Version: 0.3.0](https://img.shields.io/badge/Version-0.3.0-informational?style=flat-square) ![Type: library](https://img.shields.io/badge/Type-library-informational?style=flat-square) A Helm chart with common templates used in charts. diff --git a/helm/charts/spotfire-common/templates/_logging.tpl b/helm/charts/spotfire-common/templates/_logging.tpl index 1b6f280..7166abd 100644 --- a/helm/charts/spotfire-common/templates/_logging.tpl +++ b/helm/charts/spotfire-common/templates/_logging.tpl @@ -7,14 +7,6 @@ Logging environment environment variables needed by spotfire value: {{ $logLevel | quote }} - name: NM_LOG_LEVEL value: {{ $logLevel | quote }} -{{/* -{{- if (index .Values "log-forwarder").enabled }} -- name: LOGGING_JSON_HOST - value: {{ include "spotfire.log-forwarder.fullname" . | quote }} -- name: LOGGING_JSON_PORT - value: "5170" -{{- end }} -*/}} {{- end -}} {{/* Variables used by sidecar logging container to annotate log entries with POD information */}} @@ -32,23 +24,3 @@ Logging environment environment variables needed by spotfire fieldRef: fieldPath: metadata.uid {{- end -}} - -{{/* -Evaluates the name of the fluent-bit = log-forwarder name. Should evaluate -exactly as template "fluent-bit.fullname" but in the context of the -"spotfire" chart. -*/}} -{{- define "spotfire-common.spotfire-service.log-forwarder.fullname" -}} -{{- $values := (index .Values "log-forwarder") -}} -{{- $chartName := "log-forwarder" -}} -{{- if $values.fullnameOverride -}} -{{- $values.fullnameOverride | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- $name := default $chartName $values.nameOverride -}} -{{- if contains $name .Release.Name -}} -{{- .Release.Name | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} -{{- end -}} -{{- end -}} -{{- end -}} diff --git a/helm/charts/spotfire-platform/Chart.yaml b/helm/charts/spotfire-platform/Chart.yaml new file mode 100644 index 0000000..f60ad46 --- /dev/null +++ b/helm/charts/spotfire-platform/Chart.yaml @@ -0,0 +1,34 @@ +apiVersion: v2 +name: spotfire-platform +description: This is an umbrella chart for Spotfire, a chart that groups several Spotfire services together. It allows you to deploy, upgrade, and manage a Spotfire environment with optional Spotfire services. +type: application +version: 0.3.0 +kubeVersion: ">=1.24.0-0" +dependencies: + - name: spotfire-server + repository: file://../spotfire-server/ + version: 0.3.0 + - name: spotfire-webplayer + repository: file://../spotfire-webplayer/ + version: 0.3.0 + condition: spotfire-webplayer.enabled + - name: spotfire-automationservices + repository: file://../spotfire-automationservices/ + version: 0.3.0 + condition: spotfire-automationservices.enabled + - name: spotfire-terrservice + repository: file://../spotfire-terrservice/ + version: 0.3.0 + condition: spotfire-terrservice.enabled + - name: spotfire-rservice + repository: file://../spotfire-rservice/ + version: 0.3.0 + condition: spotfire-rservice.enabled + - name: spotfire-pythonservice + repository: file://../spotfire-pythonservice/ + version: 0.3.0 + condition: spotfire-pythonservice.enabled + - name: postgresql + condition: postgresql.enabled + repository: https://charts.bitnami.com/bitnami + version: 14.3.* diff --git a/helm/charts/spotfire-platform/README.md b/helm/charts/spotfire-platform/README.md new file mode 100644 index 0000000..8db2693 --- /dev/null +++ b/helm/charts/spotfire-platform/README.md @@ -0,0 +1,751 @@ +# spotfire-platform + +![Version: 0.3.0](https://img.shields.io/badge/Version-0.3.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) + +This is an umbrella chart for Spotfire, a chart that groups several Spotfire services together. It allows you to deploy, upgrade, and manage a Spotfire environment with optional Spotfire services. + +## Requirements + +Kubernetes: `>=1.24.0-0` + +| Repository | Name | Version | +|------------|------|---------| +| file://../spotfire-automationservices/ | spotfire-automationservices | 0.3.0 | +| file://../spotfire-pythonservice/ | spotfire-pythonservice | 0.3.0 | +| file://../spotfire-rservice/ | spotfire-rservice | 0.3.0 | +| file://../spotfire-server/ | spotfire-server | 0.3.0 | +| file://../spotfire-terrservice/ | spotfire-terrservice | 0.3.0 | +| file://../spotfire-webplayer/ | spotfire-webplayer | 0.3.0 | +| https://charts.bitnami.com/bitnami | postgresql | 14.3.* | + +## Overview + +The Spotfire Helm chart is an umbrella chart that includes multiple components for deploying a Spotfire analytics platform. It consists of the following components: + +- [spotfire-server](../spotfire-server/README.md) +- [spotfire-webplayer](../spotfire-webplayer/README.md) +- [spotfire-automationservices](../spotfire-automationservices/README.md) +- [spotfire-terrservice](../spotfire-terrservice/README.md) +- [spotfire-rservice](../spotfire-rservice/README.md) +- [spotfire-pythonservice](../spotfire-pythonservice/README.md) +- [PostgreSQL database](https://github.com/bitnami/charts/tree/main/bitnami/postgresql) ⚠️ + +Warning: The PostgreSQL chart is included as an example and is intended for demo and testing purposes only. It is important to note that the spotfire Helm chart does not take responsibility for data persistence in the Spotfire database. It is your responsibility to ensure that you have a proper data persistence strategy in place. Failure to do so may result in data loss. Please make sure you are familiar with the documentation of your chosen database (e.g., PostgreSQL, Oracle, SQL Server) and take appropriate measures to ensure data persistence. + +Note: For more advanced configurations, where you need multiple instances of a single chart, such as two web players with different configurations, you can either deploy the chart directly to add another instance or create new umbrella that suits your needs. The 'publicAddress' field is required. + +## Installation + +```bash +helm install my-release . --render-subchart-notes --set global.spotfire.acceptEUA=true \ + --set postgresql.enabled=true \ + --set spotfire-webplayer.enabled=true \ + --set spotfire-automationservices.enabled=true \ + --set spotfire-terrservice.enabled=true \ + --set spotfire-rservice.enabled=true \ + --set spotfire-pythonservice.enabled=true \ + --set spotfire-server.configuration.site.publicAddress=http://localhost/ +``` + +This will deploy the Spotfire platform with all components enabled using the embedded PostgreSQL database. + +### Using an external Spotfire database + +To use an external database, you need to provide the database connection details to the database. We will use a PostgreSQL database for this example but you can use any other database supported by Spotfire. + +First, install the [PostgreSQL](https://artifacthub.io/packages/helm/bitnami/postgresql) chart using Helm: + +```bash +helm repo add bitnami https://charts.bitnami.com/bitnami +helm install spotfiredatabase bitnami/postgresql \ + --version 15 \ + --set primary.persistence.enabled=false \ + --set primary.resourcesPreset=small \ + --set global.postgresql.auth.postgresPassword=PostgresAdminPassword +``` + +It will create a new non-persistent PostgreSQL database with the password `PostgresAdminPassword` and the service name `spotfiredatabase-postgresql`. + +Create a file named `spotfire-database.yaml` with the following content: + +```yaml +spotfire-server: + database: + bootstrap: + databaseUrl: "jdbc:postgresql://spotfiredatabase-postgresql/" + driverClass: "org.postgresql.Driver" + username: "spotfire" + password: "SpotfireDatabasePassword" + create-db: + enabled: true + adminUsername: "postgres" + adminPassword: "PostgresAdminPassword" + databaseUrl: "jdbc:postgresql://spotfiredatabase-postgresql/" + adminPasswordExistingSecret: + name: "" + key: "" +``` + +If needed, adjust the values in the file to match your database configuration. + +Then install the chart with the release name `my-release` using the database configuration: + +```bash +helm install my-release . --render-subchart-notes --set postgresql.enabled=false --set global.spotfire.acceptEUA=true --values spotfire-database.yaml +``` + +Note that the `postgresql.enabled` parameter is set to `false` to disable the embedded PostgreSQL database. + +## Usage + +For detailed usage instructions, please refer to the README.md files of the individual components. + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| global.spotfire.acceptEUA | string | `nil` | Set to `true` to accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms). | +| global.spotfire.image.pullPolicy | string | `"IfNotPresent"` | The global container image pull policy. | +| global.spotfire.image.pullSecrets | list | `[]` | The global container image pull secrets. | +| global.spotfire.image.registry | string | `nil` | The global container image registry. Used for spotfire/ container images, unless it is overridden. | +| postgresql | object | - | See [PostgreSQL Helm Chart](https://github.com/bitnami/charts/tree/main/bitnami/postgresql) documentation.

⚠️ Warning: The PostgreSQL chart is included as an example and is intended for demo and testing purposes only. It is important to note that the spotfire Helm chart does not take responsibility for data persistence in the Spotfire database. It is your responsibility to ensure that you have a proper data persistence strategy in place. Failure to do so may result in data loss. Please make sure you are familiar with the documentation of your chosen database (e.g., PostgreSQL, Oracle, SQL Server) and take appropriate measures to ensure data persistence. | +| postgresql.enabled | bool | `false` | Enable or disable the PostgreSQL database component | +| spotfire-automationservices | object | - | See [spotfire-automationservices README.md](../spotfire-automationservices/README.md) for configuration options | +| spotfire-automationservices.enabled | bool | `false` | Enable or disable the Spotfire Automation Services component | +| spotfire-pythonservice | object | - | See [spotfire-pythonservice README.md](../spotfire-pythonservice/README.md) for configuration options | +| spotfire-pythonservice.enabled | bool | `false` | Enable or disable the Spotfire Python Service component | +| spotfire-rservice | object | - | See [spotfire-rservice README.md](../spotfire-rservice/README.md) for configuration options | +| spotfire-rservice.enabled | bool | `false` | Enable or disable the Spotfire R Service component | +| spotfire-server | object | - | See [spotfire-server README.md](../spotfire-server/README.md) for configuration options | +| spotfire-server.configuration.site.publicAddress | string | `""` | - | +| spotfire-server.database | object | The default database values are intended for use with the included PostgreSQL chart, postgresql.enabled=true. | - | +| spotfire-terrservice | object | - | See [spotfire-terrservice README.md](../spotfire-terrservice/README.md) for configuration options | +| spotfire-terrservice.enabled | bool | `false` | Enable or disable the Spotfire TERR Service component | +| spotfire-webplayer | object | - | See [spotfire-webplayer README.md](../spotfire-webplayer/README.md) for configuration options | +| spotfire-webplayer.enabled | bool | `false` | Enable or disable the Spotfire Web Player component | +| spotfire-automationservices.acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | +| spotfire-automationservices.affinity | object | `{}` | | +| spotfire-automationservices.config."Spotfire.Dxp.Worker.Automation.config" | string | `""` | A custom [Spotfire.Dxp.Worker.Automation.config](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/spotfire.dxp.worker.automation.config_file.html). | +| spotfire-automationservices.config."Spotfire.Dxp.Worker.Core.config" | string | `""` | A custom [Spotfire.Dxp.Worker.Core.config](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/spotfire.dxp.worker.core.config_file.html). | +| spotfire-automationservices.config."Spotfire.Dxp.Worker.Host.dll.config" | string | `""` | A custom Spotfire.Dxp.Worker.Host.dll.config. See [Spotfire.Dxp.Worker.Host.exe.config](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/spotfire.dxp.worker.host.exe.config_file.html). | +| spotfire-automationservices.config."Spotfire.Dxp.Worker.Web.config" | string | `""` | A custom [Spotfire.Dxp.Worker.Web.config](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/spotfire.dxp.worker.web.config_file.html). | +| spotfire-automationservices.extraContainers | list | `[]` | Additional sidecar containers to add to the service pod. | +| spotfire-automationservices.extraEnvVars | list | `[]` | Additional environment variables. | +| spotfire-automationservices.extraEnvVarsCM | string | `""` | The name of the ConfigMap containing additional environment variables. | +| spotfire-automationservices.extraEnvVarsSecret | string | `""` | The name of the Secret containing extra additional environment variables. | +| spotfire-automationservices.extraInitContainers | list | `[]` | Additional init containers to add to the service pod. | +| spotfire-automationservices.extraVolumeMounts | list | `[]` | Extra volumeMounts for the service container. More info: `kubectl explain deployment.spec.template.spec.containers.volumeMounts`. | +| spotfire-automationservices.extraVolumes | list | `[]` | Extra volumes for the service container. More info: `kubectl explain deployment.spec.template.spec.volumes`. | +| spotfire-automationservices.fluentBitSidecar.image.pullPolicy | string | `"IfNotPresent"` | The image pull policy for the fluent-bit logging sidecar image. | +| spotfire-automationservices.fluentBitSidecar.image.repository | string | `"fluent/fluent-bit"` | The image repository for fluent-bit logging sidecar. | +| spotfire-automationservices.fluentBitSidecar.image.tag | string | `"3.1.6"` | The image tag to use for fluent-bit logging sidecar. | +| spotfire-automationservices.fluentBitSidecar.securityContext | object | `{}` | The securityContext setting for fluent-bit sidecar container. Overrides any securityContext setting on the Pod level. | +| spotfire-automationservices.fullnameOverride | string | `""` | | +| spotfire-automationservices.image.pullPolicy | string | `nil` | The spotfire-server image pull policy. Overrides global.spotfire.image.pullPolicy. | +| spotfire-automationservices.image.pullSecrets | list | `[]` | Image pull secrets. | +| spotfire-automationservices.image.registry | string | `nil` | The image registry for spotfire-server. Overrides global.spotfire.image.registry value. | +| spotfire-automationservices.image.repository | string | `"spotfire/spotfire-automationservices"` | The spotfire-server image repository. | +| spotfire-automationservices.image.tag | string | `"14.4.1-1"` | The container image tag to use. | +| spotfire-automationservices.kedaAutoscaling | object | `{"advanced":{},"cooldownPeriod":300,"enabled":false,"fallback":{},"maxReplicas":4,"minReplicas":0,"pollingInterval":30,"spotfireConfig":{"prometheusServerAddress":"http://prometheus-server.monitor.svc.cluster.local","spotfireServerHelmRelease":null},"threshold":8,"triggers":[]}` | KEDA autoscaling configuration. See https://keda.sh/docs/latest/concepts/scaling-deployments for more details. | +| spotfire-automationservices.kedaAutoscaling.cooldownPeriod | int | `300` | The period to wait after the last trigger reported active before scaling the resource back to 0. | +| spotfire-automationservices.kedaAutoscaling.maxReplicas | int | `4` | This setting is passed to the HPA definition that KEDA creates for a given resource and holds the maximum number of replicas of the target resource. | +| spotfire-automationservices.kedaAutoscaling.minReplicas | int | `0` | The minimum number of replicas KEDA scales the resource down to. | +| spotfire-automationservices.kedaAutoscaling.pollingInterval | int | `30` | The interval to check each trigger on. | +| spotfire-automationservices.kedaAutoscaling.spotfireConfig | object | `{"prometheusServerAddress":"http://prometheus-server.monitor.svc.cluster.local","spotfireServerHelmRelease":null}` | Spotfire specific settings. | +| spotfire-automationservices.kedaAutoscaling.spotfireConfig.prometheusServerAddress | string | `"http://prometheus-server.monitor.svc.cluster.local"` | REQUIRED. The URL for the Prometheus server from where metrics are fetched. | +| spotfire-automationservices.kedaAutoscaling.spotfireConfig.spotfireServerHelmRelease | string | `nil` | If more than one Spotfire Server release is installed in the same namespace, specify the release to get the correct metrics. | +| spotfire-automationservices.livenessProbe.enabled | bool | `true` | | +| spotfire-automationservices.livenessProbe.failureThreshold | int | `10` | | +| spotfire-automationservices.livenessProbe.httpGet.path | string | `"/spotfire/liveness"` | | +| spotfire-automationservices.livenessProbe.httpGet.port | string | `"registration"` | | +| spotfire-automationservices.livenessProbe.initialDelaySeconds | int | `60` | | +| spotfire-automationservices.livenessProbe.periodSeconds | int | `3` | | +| spotfire-automationservices.logging.logForwarderAddress | string | `""` | The spotfire-server log-forwarder name. Template. | +| spotfire-automationservices.logging.logLevel | string | `"debug"` | Set to `debug`, `trace`, `minimal`, or leave empty for info. This applies for both node manager and the service. | +| spotfire-automationservices.nameOverride | string | `""` | | +| spotfire-automationservices.nodeSelector | object | `{}` | | +| spotfire-automationservices.nodemanagerConfig.preStopDrainingTimeoutSeconds | int | `610` | The draining timeout after which the service is forcefully shut down. | +| spotfire-automationservices.nodemanagerConfig.serverBackendAddress | string | `""` | The spotfire-server service name. This value is evaluated as a helm template. | +| spotfire-automationservices.podAnnotations."prometheus.io/path" | string | `"/spotfire/metrics"` | | +| spotfire-automationservices.podAnnotations."prometheus.io/port" | string | `"9080"` | | +| spotfire-automationservices.podAnnotations."prometheus.io/scrape" | string | `"true"` | | +| spotfire-automationservices.podSecurityContext | object | `{}` | The Pod securityContext setting applies to all of the containers inside the Pod. | +| spotfire-automationservices.readinessProbe.enabled | bool | `false` | | +| spotfire-automationservices.readinessProbe.failureThreshold | int | `10` | | +| spotfire-automationservices.readinessProbe.httpGet.path | string | `"/spotfire/readiness"` | | +| spotfire-automationservices.readinessProbe.httpGet.port | string | `"registration"` | | +| spotfire-automationservices.readinessProbe.initialDelaySeconds | int | `60` | | +| spotfire-automationservices.readinessProbe.periodSeconds | int | `3` | | +| spotfire-automationservices.replicaCount | int | `1` | | +| spotfire-automationservices.resources | object | `{}` | | +| spotfire-automationservices.securityContext | object | `{}` | The securityContext setting for the service container. Overrides any securityContext setting on the Pod level. | +| spotfire-automationservices.service.port | int | `9501` | | +| spotfire-automationservices.service.type | string | `"ClusterIP"` | | +| spotfire-automationservices.serviceAccount.annotations | object | `{}` | | +| spotfire-automationservices.serviceAccount.create | bool | `false` | | +| spotfire-automationservices.serviceAccount.name | string | `""` | | +| spotfire-automationservices.startupProbe.enabled | bool | `true` | | +| spotfire-automationservices.startupProbe.failureThreshold | int | `20` | | +| spotfire-automationservices.startupProbe.httpGet.path | string | `"/spotfire/started"` | | +| spotfire-automationservices.startupProbe.httpGet.port | string | `"registration"` | | +| spotfire-automationservices.startupProbe.initialDelaySeconds | int | `60` | | +| spotfire-automationservices.startupProbe.periodSeconds | int | `3` | | +| spotfire-automationservices.tolerations | list | `[]` | | +| spotfire-automationservices.volumes.customModules.existingClaim | string | `""` | When 'persistentVolumeClaim.create' is 'false', then use this value to define an already existing persistent volume claim. | +| spotfire-automationservices.volumes.customModules.persistentVolumeClaim.create | bool | `false` | If 'true', then a 'PersistentVolumeClaim' is created. | +| spotfire-automationservices.volumes.customModules.persistentVolumeClaim.resources | object | `{"requests":{"storage":"2Gi"}}` | Specifies the standard Kubernetes resource requests and/or limits for the volumes.customModules claims. | +| spotfire-automationservices.volumes.customModules.persistentVolumeClaim.storageClassName | string | `""` | Specifies the name of the 'StorageClass' to use for the volumes.customModules-claim. | +| spotfire-automationservices.volumes.customModules.persistentVolumeClaim.volumeName | string | `nil` | Specifies the name of the persistent volume to use for the volumes.customModules-claim. | +| spotfire-automationservices.volumes.customModules.subPath | string | `""` | The subPath of the volume to be used for the volume mount | +| spotfire-automationservices.volumes.troubleshooting.existingClaim | string | `""` | When 'persistentVolumeClaim.create' is 'false', then use this value to define an already existing persistent volume claim. | +| spotfire-automationservices.volumes.troubleshooting.persistentVolumeClaim.create | bool | `false` | If 'true', then a 'PersistentVolumeClaim' will be created. | +| spotfire-automationservices.volumes.troubleshooting.persistentVolumeClaim.resources | object | `{"requests":{"storage":"2Gi"}}` | Specifies the standard Kubernetes resource requests and/or limits for the volumes.troubleshooting claims. | +| spotfire-automationservices.volumes.troubleshooting.persistentVolumeClaim.storageClassName | string | `""` | Specifies the name of the 'StorageClass' to use for the volumes.troubleshooting-claim. | +| spotfire-automationservices.volumes.troubleshooting.persistentVolumeClaim.volumeName | string | `nil` | Specifies the name of the persistent volume to use for the volumes.troubleshooting-claim. | +| spotfire-pythonservice.acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | +| spotfire-pythonservice.affinity | object | `{}` | | +| spotfire-pythonservice.configuration | object | `{}` | Add [Custom configuration properties](https://docs.tibco.com/pub/sf-pysrv/latest/doc/html/TIB_sf-pysrv_install/_shared/install/topics/custom_configuration_properties.html). Keys under configuration should be named the same as the configuration property, for example 'engine.execution.timeout'. | +| spotfire-pythonservice.extraContainers | list | `[]` | Additional sidecar containers to add to the service pod. | +| spotfire-pythonservice.extraEnvVars | list | `[]` | Additional environment variables. | +| spotfire-pythonservice.extraEnvVarsCM | string | `""` | The name of the ConfigMap containing additional environment variables. | +| spotfire-pythonservice.extraEnvVarsSecret | string | `""` | The name of the Secret containing extra additional environment variables. | +| spotfire-pythonservice.extraInitContainers | list | `[]` | Additional init containers to add to the service pod. | +| spotfire-pythonservice.extraVolumeMounts | list | `[]` | Extra volumeMounts for the service container. More info: `kubectl explain deployment.spec.template.spec.containers.volumeMounts`. | +| spotfire-pythonservice.extraVolumes | list | `[]` | Extra volumes for the service container. More info: `kubectl explain deployment.spec.template.spec.volumes`. | +| spotfire-pythonservice.fluentBitSidecar.image.pullPolicy | string | `"IfNotPresent"` | The image pull policy for the fluent-bit logging sidecar image. | +| spotfire-pythonservice.fluentBitSidecar.image.repository | string | `"fluent/fluent-bit"` | The image repository for fluent-bit logging sidecar. | +| spotfire-pythonservice.fluentBitSidecar.image.tag | string | `"3.1.6"` | The image tag to use for fluent-bit logging sidecar. | +| spotfire-pythonservice.fluentBitSidecar.securityContext | object | `{}` | The securityContext setting for fluent-bit sidecar container. Overrides any securityContext setting on the Pod level. | +| spotfire-pythonservice.fullnameOverride | string | `""` | | +| spotfire-pythonservice.image.pullPolicy | string | `nil` | The spotfire-server image pull policy. Overrides global.spotfire.image.pullPolicy. | +| spotfire-pythonservice.image.pullSecrets | list | `[]` | Image pull secrets. | +| spotfire-pythonservice.image.registry | string | `nil` | The image registry for spotfire-server. Overrides global.spotfire.image.registry value. | +| spotfire-pythonservice.image.repository | string | `"spotfire/spotfire-pythonservice"` | The spotfire-server image repository. | +| spotfire-pythonservice.image.tag | string | `"1.21.1-1"` | The container image tag to use. | +| spotfire-pythonservice.kedaAutoscaling | object | `{"advanced":{},"cooldownPeriod":300,"enabled":false,"fallback":{},"maxReplicas":4,"minReplicas":1,"pollingInterval":30,"spotfireConfig":{"prometheusServerAddress":"http://prometheus-server.monitor.svc.cluster.local"},"threshold":null,"triggers":[]}` | KEDA autoscaling configuration. See https://keda.sh/docs/latest/concepts/scaling-deployments for more details. | +| spotfire-pythonservice.kedaAutoscaling.cooldownPeriod | int | `300` | The period to wait after the last trigger reported active before scaling the resource back to 0. | +| spotfire-pythonservice.kedaAutoscaling.maxReplicas | int | `4` | This setting is passed to the HPA definition that KEDA creates for a given resource and holds the maximum number of replicas of the target resource. | +| spotfire-pythonservice.kedaAutoscaling.minReplicas | int | `1` | The minimum number of replicas KEDA scales the resource down to. | +| spotfire-pythonservice.kedaAutoscaling.pollingInterval | int | `30` | The interval to check each trigger on. | +| spotfire-pythonservice.kedaAutoscaling.spotfireConfig | object | `{"prometheusServerAddress":"http://prometheus-server.monitor.svc.cluster.local"}` | Spotfire specific settings. | +| spotfire-pythonservice.kedaAutoscaling.spotfireConfig.prometheusServerAddress | string | `"http://prometheus-server.monitor.svc.cluster.local"` | REQUIRED. The URL for the Prometheus server from where metrics are fetched. | +| spotfire-pythonservice.livenessProbe.enabled | bool | `true` | | +| spotfire-pythonservice.livenessProbe.failureThreshold | int | `10` | | +| spotfire-pythonservice.livenessProbe.httpGet.path | string | `"/spotfire/liveness"` | | +| spotfire-pythonservice.livenessProbe.httpGet.port | string | `"registration"` | | +| spotfire-pythonservice.livenessProbe.initialDelaySeconds | int | `60` | | +| spotfire-pythonservice.livenessProbe.periodSeconds | int | `3` | | +| spotfire-pythonservice.logging.logForwarderAddress | string | `""` | The spotfire-server log-forwarder name. Template. | +| spotfire-pythonservice.logging.logLevel | string | `"debug"` | Set to `debug`, `trace`, `minimal`, or leave empty for info. This applies for both node manager and the service. | +| spotfire-pythonservice.nameOverride | string | `""` | | +| spotfire-pythonservice.nodeSelector | object | `{}` | | +| spotfire-pythonservice.nodemanagerConfig.preStopDrainingTimeoutSeconds | int | `610` | The draining timeout after which the service is forcefully shut down. | +| spotfire-pythonservice.nodemanagerConfig.serverBackendAddress | string | `""` | The spotfire-server service name. This value is evaluated as a helm template. | +| spotfire-pythonservice.podAnnotations."prometheus.io/path" | string | `"/spotfire/metrics"` | | +| spotfire-pythonservice.podAnnotations."prometheus.io/port" | string | `"9080"` | | +| spotfire-pythonservice.podAnnotations."prometheus.io/scrape" | string | `"true"` | | +| spotfire-pythonservice.podSecurityContext | object | `{}` | The Pod securityContext setting applies to all of the containers inside the Pod. | +| spotfire-pythonservice.readinessProbe.enabled | bool | `false` | | +| spotfire-pythonservice.readinessProbe.failureThreshold | int | `10` | | +| spotfire-pythonservice.readinessProbe.httpGet.path | string | `"/spotfire/readiness"` | | +| spotfire-pythonservice.readinessProbe.httpGet.port | string | `"registration"` | | +| spotfire-pythonservice.readinessProbe.initialDelaySeconds | int | `60` | | +| spotfire-pythonservice.readinessProbe.periodSeconds | int | `3` | | +| spotfire-pythonservice.replicaCount | int | `1` | | +| spotfire-pythonservice.resources | object | `{}` | | +| spotfire-pythonservice.securityContext | object | `{}` | The securityContext setting for the service container. Overrides any securityContext setting on the Pod level. | +| spotfire-pythonservice.service.port | int | `9501` | | +| spotfire-pythonservice.service.type | string | `"ClusterIP"` | | +| spotfire-pythonservice.serviceAccount.annotations | object | `{}` | | +| spotfire-pythonservice.serviceAccount.create | bool | `false` | | +| spotfire-pythonservice.serviceAccount.name | string | `""` | | +| spotfire-pythonservice.startupProbe.enabled | bool | `true` | | +| spotfire-pythonservice.startupProbe.failureThreshold | int | `20` | | +| spotfire-pythonservice.startupProbe.httpGet.path | string | `"/spotfire/started"` | | +| spotfire-pythonservice.startupProbe.httpGet.port | string | `"registration"` | | +| spotfire-pythonservice.startupProbe.initialDelaySeconds | int | `60` | | +| spotfire-pythonservice.startupProbe.periodSeconds | int | `3` | | +| spotfire-pythonservice.tolerations | list | `[]` | | +| spotfire-pythonservice.volumes.packages.existingClaim | string | `""` | When 'persistentVolumeClaim.create' is 'false', then use this value to define an already existing persistent volume claim. | +| spotfire-pythonservice.volumes.packages.persistentVolumeClaim.create | bool | `false` | If 'true', then a 'PersistentVolumeClaim' is created. | +| spotfire-pythonservice.volumes.packages.persistentVolumeClaim.resources | object | `{"requests":{"storage":"1Gi"}}` | Specifies the standard Kubernetes resource requests and/or limits for the customExt volume claims. | +| spotfire-pythonservice.volumes.packages.persistentVolumeClaim.storageClassName | string | `""` | Specifies the name of the 'StorageClass' to use for the customExt volume-claim. | +| spotfire-pythonservice.volumes.packages.persistentVolumeClaim.volumeName | string | `nil` | Specifies the name of the persistent volume that should be used for the customExt volume-claim. | +| spotfire-pythonservice.volumes.packages.subPath | string | `""` | The subPath of the volume to be used for the volume mount | +| spotfire-pythonservice.volumes.troubleshooting.existingClaim | string | `""` | When 'persistentVolumeClaim.create' is 'false', then use this value to define an already existing persistent volume claim. | +| spotfire-pythonservice.volumes.troubleshooting.persistentVolumeClaim.create | bool | `false` | If 'true', then a 'PersistentVolumeClaim' will be created. | +| spotfire-pythonservice.volumes.troubleshooting.persistentVolumeClaim.resources | object | `{"requests":{"storage":"2Gi"}}` | Specifies the standard Kubernetes resource requests and/or limits for the volumes.troubleshooting claims. | +| spotfire-pythonservice.volumes.troubleshooting.persistentVolumeClaim.storageClassName | string | `""` | Specifies the name of the 'StorageClass' to use for the volumes.troubleshooting-claim. | +| spotfire-pythonservice.volumes.troubleshooting.persistentVolumeClaim.volumeName | string | `nil` | Specifies the name of the persistent volume to use for the volumes.troubleshooting-claim. | +| spotfire-rservice.acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | +| spotfire-rservice.affinity | object | `{}` | | +| spotfire-rservice.configuration | object | `{}` | Add [Custom configuration properties](https://docs.tibco.com/pub/sf-rsrv/latest/doc/html/TIB_sf-rsrv_install/_shared/install/topics/custom_configuration_properties.html). Keys under configuration should be named the same as the configuration property, for example 'engine.execution.timeout'. | +| spotfire-rservice.extraContainers | list | `[]` | Additional sidecar containers to add to the service pod. | +| spotfire-rservice.extraEnvVars | list | `[]` | Additional environment variables. | +| spotfire-rservice.extraEnvVarsCM | string | `""` | The name of the ConfigMap containing additional environment variables. | +| spotfire-rservice.extraEnvVarsSecret | string | `""` | The name of the Secret containing extra additional environment variables. | +| spotfire-rservice.extraInitContainers | list | `[]` | Additional init containers to add to the service pod. | +| spotfire-rservice.extraVolumeMounts | list | `[]` | Extra volumeMounts for the service container. More info: `kubectl explain deployment.spec.template.spec.containers.volumeMounts`. | +| spotfire-rservice.extraVolumes | list | `[]` | Extra volumes for the service container. More info: `kubectl explain deployment.spec.template.spec.volumes`. | +| spotfire-rservice.fluentBitSidecar.image.pullPolicy | string | `"IfNotPresent"` | The image pull policy for the fluent-bit logging sidecar image. | +| spotfire-rservice.fluentBitSidecar.image.repository | string | `"fluent/fluent-bit"` | The image repository for fluent-bit logging sidecar. | +| spotfire-rservice.fluentBitSidecar.image.tag | string | `"3.1.6"` | The image tag to use for fluent-bit logging sidecar. | +| spotfire-rservice.fluentBitSidecar.securityContext | object | `{}` | The securityContext setting for fluent-bit sidecar container. Overrides any securityContext setting on the Pod level. | +| spotfire-rservice.fullnameOverride | string | `""` | | +| spotfire-rservice.image.pullPolicy | string | `nil` | The spotfire-server image pull policy. Overrides global.spotfire.image.pullPolicy. | +| spotfire-rservice.image.pullSecrets | list | `[]` | Image pull secrets. | +| spotfire-rservice.image.registry | string | `nil` | The image registry for spotfire-server. Overrides the global.spotfire.image.registry value. | +| spotfire-rservice.image.repository | string | `"spotfire/spotfire-rservice"` | The spotfire-server image repository. | +| spotfire-rservice.image.tag | string | `"1.21.1-1"` | The container image tag to use. | +| spotfire-rservice.kedaAutoscaling | object | `{"advanced":{},"cooldownPeriod":300,"enabled":false,"fallback":{},"maxReplicas":4,"minReplicas":1,"pollingInterval":30,"spotfireConfig":{"prometheusServerAddress":"http://prometheus-server.monitor.svc.cluster.local"},"threshold":null,"triggers":[]}` | KEDA autoscaling configuration. See https://keda.sh/docs/latest/concepts/scaling-deployments/ for more details. | +| spotfire-rservice.kedaAutoscaling.cooldownPeriod | int | `300` | The period to wait after the last trigger reported active before scaling the resource back to 0. | +| spotfire-rservice.kedaAutoscaling.maxReplicas | int | `4` | This setting is passed to the HPA definition that KEDA creates for a given resource and holds the maximum number of replicas of the target resource. | +| spotfire-rservice.kedaAutoscaling.minReplicas | int | `1` | The minimum number of replicas KEDA scales the resource down to. | +| spotfire-rservice.kedaAutoscaling.pollingInterval | int | `30` | The interval to check each trigger on. | +| spotfire-rservice.kedaAutoscaling.spotfireConfig | object | `{"prometheusServerAddress":"http://prometheus-server.monitor.svc.cluster.local"}` | Spotfire specific settings. | +| spotfire-rservice.kedaAutoscaling.spotfireConfig.prometheusServerAddress | string | `"http://prometheus-server.monitor.svc.cluster.local"` | REQUIRED. The URL for the Prometheus server from where metrics are fetched. | +| spotfire-rservice.livenessProbe.enabled | bool | `true` | | +| spotfire-rservice.livenessProbe.failureThreshold | int | `10` | | +| spotfire-rservice.livenessProbe.httpGet.path | string | `"/spotfire/liveness"` | | +| spotfire-rservice.livenessProbe.httpGet.port | string | `"registration"` | | +| spotfire-rservice.livenessProbe.initialDelaySeconds | int | `60` | | +| spotfire-rservice.livenessProbe.periodSeconds | int | `3` | | +| spotfire-rservice.logging.logForwarderAddress | string | `""` | The spotfire-server log-forwarder name. Template. | +| spotfire-rservice.logging.logLevel | string | `"debug"` | Set to `debug`, `trace`, `minimal`, or leave empty for info. This applies for both node manager and the service. | +| spotfire-rservice.nameOverride | string | `""` | | +| spotfire-rservice.nodeSelector | object | `{}` | | +| spotfire-rservice.nodemanagerConfig.preStopDrainingTimeoutSeconds | int | `610` | The draining timeout after which the service is forcefully shut down. | +| spotfire-rservice.nodemanagerConfig.serverBackendAddress | string | `""` | The spotfire-server service name. This value is evaluated as a helm template. | +| spotfire-rservice.podAnnotations."prometheus.io/path" | string | `"/spotfire/metrics"` | | +| spotfire-rservice.podAnnotations."prometheus.io/port" | string | `"9080"` | | +| spotfire-rservice.podAnnotations."prometheus.io/scrape" | string | `"true"` | | +| spotfire-rservice.podSecurityContext | object | `{}` | The Pod securityContext setting applies to all of the containers inside the Pod. | +| spotfire-rservice.readinessProbe.enabled | bool | `false` | | +| spotfire-rservice.readinessProbe.failureThreshold | int | `10` | | +| spotfire-rservice.readinessProbe.httpGet.path | string | `"/spotfire/readiness"` | | +| spotfire-rservice.readinessProbe.httpGet.port | string | `"registration"` | | +| spotfire-rservice.readinessProbe.initialDelaySeconds | int | `60` | | +| spotfire-rservice.readinessProbe.periodSeconds | int | `3` | | +| spotfire-rservice.replicaCount | int | `1` | | +| spotfire-rservice.resources | object | `{}` | | +| spotfire-rservice.securityContext | object | `{}` | The securityContext setting for the service container. Overrides any securityContext setting on the Pod level. | +| spotfire-rservice.service.port | int | `9501` | | +| spotfire-rservice.service.type | string | `"ClusterIP"` | | +| spotfire-rservice.serviceAccount.annotations | object | `{}` | | +| spotfire-rservice.serviceAccount.create | bool | `false` | | +| spotfire-rservice.serviceAccount.name | string | `""` | | +| spotfire-rservice.startupProbe.enabled | bool | `true` | | +| spotfire-rservice.startupProbe.failureThreshold | int | `20` | | +| spotfire-rservice.startupProbe.httpGet.path | string | `"/spotfire/started"` | | +| spotfire-rservice.startupProbe.httpGet.port | string | `"registration"` | | +| spotfire-rservice.startupProbe.initialDelaySeconds | int | `60` | | +| spotfire-rservice.startupProbe.periodSeconds | int | `3` | | +| spotfire-rservice.tolerations | list | `[]` | | +| spotfire-rservice.volumes.packages.existingClaim | string | `""` | If 'persistentVolumeClaim.create' is 'false' (the default), then use this value to define an already existing persistent volume claim. | +| spotfire-rservice.volumes.packages.persistentVolumeClaim.create | bool | `false` | If 'true', then a 'PersistentVolumeClaim' is created. | +| spotfire-rservice.volumes.packages.persistentVolumeClaim.resources | object | `{"requests":{"storage":"1Gi"}}` | Specifies the standard Kubernetes resource requests and/or limits for the customExt volume claims. | +| spotfire-rservice.volumes.packages.persistentVolumeClaim.storageClassName | string | `""` | Specifies the name of the 'StorageClass' to use for the customExt volume-claim. | +| spotfire-rservice.volumes.packages.persistentVolumeClaim.volumeName | string | `nil` | Specifies the name of the persistent volume to use for the customExt volume-claim. | +| spotfire-rservice.volumes.packages.subPath | string | `""` | The subPath of the volume to use for the volume mount. | +| spotfire-rservice.volumes.troubleshooting.existingClaim | string | `""` | If 'persistentVolumeClaim.create' is 'false' (the default), then use this value to define an already existing persistent volume claim. | +| spotfire-rservice.volumes.troubleshooting.persistentVolumeClaim.create | bool | `false` | If 'true', then a 'PersistentVolumeClaim' is created. | +| spotfire-rservice.volumes.troubleshooting.persistentVolumeClaim.resources | object | `{"requests":{"storage":"2Gi"}}` | Specifies the standard Kubernetes resource requests and/or limits for the volumes.troubleshooting claims. | +| spotfire-rservice.volumes.troubleshooting.persistentVolumeClaim.storageClassName | string | `""` | Specifies the name of the 'StorageClass' to use for the volumes.troubleshooting-claim. | +| spotfire-rservice.volumes.troubleshooting.persistentVolumeClaim.volumeName | string | `nil` | Specifies the name of the persistent volume to use for the volumes.troubleshooting-claim. | +| spotfire-server.acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | +| spotfire-server.affinity | object | `{}` | | +| spotfire-server.cliPod.affinity | object | `{}` | | +| spotfire-server.cliPod.enabled | bool | `true` | | +| spotfire-server.cliPod.extraEnvVars | list | `[]` | Additional environment variables all spotfire-server pods use. - name: NAME value: value | +| spotfire-server.cliPod.extraEnvVarsCM | string | `""` | | +| spotfire-server.cliPod.extraEnvVarsSecret | string | `""` | | +| spotfire-server.cliPod.extraInitContainers | list | `[]` | Additional init containers to add to cli pod. More info: `kubectl explain deployment.spec.template.spec.initContainers` | +| spotfire-server.cliPod.extraVolumeMounts | list | `[]` | Extra volumeMounts for the configJob Job. More info: `kubectl explain deployment.spec.template.spec.containers.volumeMounts` | +| spotfire-server.cliPod.extraVolumes | list | `[]` | Extra volumes for the configJob Job. More info: `kubectl explain deployment.spec.template.spec.volumes` | +| spotfire-server.cliPod.image.pullPolicy | string | `nil` | The spotfireConfig image pull policy. Overrides global.spotfire.image.pullPolicy. | +| spotfire-server.cliPod.image.pullSecrets | list | `[]` | | +| spotfire-server.cliPod.image.registry | string | `nil` | The image registry for spotfireConfig. Overrides global.spotfire.image.registry value. | +| spotfire-server.cliPod.image.repository | string | `"spotfire/spotfire-config"` | The spotfireConfig image repository. | +| spotfire-server.cliPod.image.tag | string | `"14.4.1-1"` | The spotfireConfig container image tag to use. | +| spotfire-server.cliPod.logLevel | string | `""` | Set to DEBUG or TRACE to increase log level. Defaults to INFO if unset. | +| spotfire-server.cliPod.nodeSelector | object | `{}` | | +| spotfire-server.cliPod.podAnnotations | object | `{}` | Podannotations for cliPod | +| spotfire-server.cliPod.podSecurityContext | object | `{}` | The podSecurityContext setting for cliPod More info: `kubectl explain deployment.spec.template.spec.securityContext` | +| spotfire-server.cliPod.securityContext | object | `{}` | The securityContext setting for cliPod. More info: `kubectl explain deployment.spec.template.spec.containers.securityContext` | +| spotfire-server.cliPod.tolerations | list | `[]` | | +| spotfire-server.configJob.affinity | object | `{}` | | +| spotfire-server.configJob.extraEnvVars | list | `[]` | Additional environment variables for all spotfire-server pods to use. - name: NAME value: value | +| spotfire-server.configJob.extraEnvVarsCM | string | `""` | | +| spotfire-server.configJob.extraEnvVarsSecret | string | `""` | | +| spotfire-server.configJob.extraInitContainers | list | `[]` | Additional init containers to add to the Spotfire server configuration pod. More info: `kubectl explain job.spec.template.spec.initContainers` | +| spotfire-server.configJob.extraVolumeMounts | list | `[]` | Extra volumeMounts for the configJob Job. More info: `kubectl explain job.spec.template.spec.containers.volumeMounts` | +| spotfire-server.configJob.extraVolumes | list | `[]` | Extra volumes for the configJob Job. More info: `kubectl explain job.spec.template.spec.volumes` | +| spotfire-server.configJob.image.pullPolicy | string | `nil` | The spotfireConfig image pull policy. Overrides `global.spotfire.image.pullPolicy` value. | +| spotfire-server.configJob.image.pullSecrets | list | `[]` | | +| spotfire-server.configJob.image.registry | string | `nil` | The image registry for spotfireConfig. Overrides `global.spotfire.image.registry` value. | +| spotfire-server.configJob.image.repository | string | `"spotfire/spotfire-config"` | The spotfireConfig image repository. | +| spotfire-server.configJob.image.tag | string | `"14.4.1-1"` | The spotfireConfig container image tag to use. | +| spotfire-server.configJob.logLevel | string | `""` | Set to `DEBUG` or `TRACE` to increase log level. Defaults to `INFO` if unset. | +| spotfire-server.configJob.nodeSelector | object | `{}` | | +| spotfire-server.configJob.podAnnotations | object | `{}` | Podannotations for configJob | +| spotfire-server.configJob.podSecurityContext | object | `{}` | The podSecurityContext setting for configJob. More info: `kubectl explain job.spec.template.spec.securityContext` | +| spotfire-server.configJob.securityContext | object | `{}` | The securityContext setting for configJob. More info: `kubectl explain job.spec.template.spec.containers.securityContext` | +| spotfire-server.configJob.tolerations | list | `[]` | | +| spotfire-server.configJob.ttlSecondsAfterFinished | int | `7200` | Set the length of time in seconds to keep job and its logs until the job is removed. | +| spotfire-server.configuration.actionLog | object | File logging enabled, database logging disabled. | Action log settings. See [config-action-logger](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/config-action-logger.html) for more information. | +| spotfire-server.configuration.actionLog.categories | string | `""` | Action log categories and webCategories are a comma separated list of categories. See [config-action-logger](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/action_log_categories.html) for a list of possible categories. default value when empty is "all" | +| spotfire-server.configuration.actionLog.database.config-action-log-database-logger | object | Configuration of actionlog database settings is only applicable if configuration.actionLog.enabled is true | Configure actionlog database. See [config-action-log-database-logger](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/config-action-log-database-logger.html) for more information. | +| spotfire-server.configuration.actionLog.database.config-action-log-database-logger.additionalOptions | object | `{}` | Additional Options. See [config-action-log-database-logger - Options](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/config-action-log-database-logger.html) for more information. | +| spotfire-server.configuration.actionLog.database.config-action-log-database-logger.password | string | `""` | The password to be created for the Spotfire Actionlog database user. If not provided, this password is automatically generated. | +| spotfire-server.configuration.actionLog.database.config-action-log-database-logger.username | string | `"spotfire_actionlog"` | The user to create for actionlog database access | +| spotfire-server.configuration.actionLog.database.create-actionlogdb | object | Actionlog database is created only if configuration.actionLog.enabled is true | Create the actionlog database. See [create-actionlogdb](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/create-actionlogdb.html) for more information. | +| spotfire-server.configuration.actionLog.database.create-actionlogdb.actiondbDbname | string | `"spotfire_actionlog"` | Name for the Actionlog Database to be created to hold the Actionlog database table. | +| spotfire-server.configuration.actionLog.database.create-actionlogdb.adminPassword | string | `""` | Admin password for the actionlog database. | +| spotfire-server.configuration.actionLog.database.create-actionlogdb.adminPasswordExistingSecret | object | Not used unless .name is set | Read spotfire actionlog database password from an existing secret. If set, 'adminPassword' above is not used. | +| spotfire-server.configuration.actionLog.database.create-actionlogdb.adminUsername | string | `"postgres"` | Admin username for the actionlog database. | +| spotfire-server.configuration.actionLog.database.create-actionlogdb.databaseUrl | string | `"jdbc:postgresql://HOSTNAME/"` | Like `configuration.actionLog.database.config-action-log-database-logger.databaseUrl` but is used for the connection when creating the actionlog database. Evaluated as a template. | +| spotfire-server.configuration.actionLog.database.create-actionlogdb.doNotCreateUser | bool | `false` | Set this to true, in case supported databases (AWS Postgres, Aurora Postgres, Azure Postgres, Google Cloud Postgres) does not allow user creation or the actionlog records are being stored on the spotfire database. | +| spotfire-server.configuration.actionLog.database.create-actionlogdb.enabled | bool | `true` | if enabled is true, create the actionlog database | +| spotfire-server.configuration.actionLog.database.create-actionlogdb.oracleRootfolder | string | `""` | Specify the value in case of Oracle database, otherwise keep it blank. | +| spotfire-server.configuration.actionLog.database.create-actionlogdb.timeoutSeconds | string | `""` | Specifies the timeout, in seconds, for the operation. | +| spotfire-server.configuration.actionLog.database.create-actionlogdb.variant | string | `""` | For connecting to MS SQL or Oracle on Amazon RDS, specify `rds`, for MS SQL on Azure, specify `azure`, otherwise omit the option. | +| spotfire-server.configuration.apply | string | `"initialsetup"` | When to apply configurationScripts, commandScripts, admin user creation and action log settings. Possible values: * "always" = Apply on every `helm install` or `helm upgrade`. Note: Configuration made from other tools than helm might be overwritten when updating the helm release. * "initialsetup" = Only apply if Spotfire server database does not already have a configuration. It is suitable for setting up the initial configuration of the environment but where further configuration is done using the spotfire configuration tool. * "never" = Do not apply. Configuration must be configured using the spotfire configuration tool directly towards the database. | +| spotfire-server.configuration.commandScripts | list | `[]` | A list of command scripts to run during helm installation. These commands will run once only and not subsequent helm release upgrades. Each list item should have the keys `name` and `script`. See [config.sh run script](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/scripting_a_configuration.html). Commands in these scripts should NOT operate on `configuration.xml`. Operations such as adding/removing users and assigning licenses are typical administrative commands that can be specified here. | +| spotfire-server.configuration.configurationScripts | list | `[]` | A list of configuration scripts to apply during helm installation. Each list item should have the keys `name` and `script`. See [config.sh run script](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/scripting_a_configuration.html). Commands in these scripts should operate only on a local `configuration.xml`. Commands such as `set-config-prop` and `modify-ds-template` are examples of commands that can be used here. The local `configuration.xml` file is automatically imported after all configuration steps run in the order in which they are defined below. | +| spotfire-server.configuration.deployment.clear | bool | `false` | Clear existing packages before any new files are added. Setting it `true` can cause extra delay because packages need to be added again every time the config-job is run. | +| spotfire-server.configuration.deployment.defaultDeployment.deploymentAreaName | string | `"Production"` | The name of the deployment area to create or update | +| spotfire-server.configuration.deployment.defaultDeployment.enabled | bool | `true` | Create deployment area with default Spotfire.Dxp.sdn taken from spotfire-deployment image. *Warning*: If set to `true` and a deployment volume (see `volumes.deployments` key) is used, a folder with name `deploymentAreaName` will be created and potentially overwrite any existing deployment with the same name on the persistent volume. | +| spotfire-server.configuration.deployment.defaultDeployment.image.pullPolicy | string | `nil` | The spotfire-deployment image pull policy. Overrides `global.spotfire.image.pullPolicy`. | +| spotfire-server.configuration.deployment.defaultDeployment.image.pullSecrets | list | `[]` | | +| spotfire-server.configuration.deployment.defaultDeployment.image.registry | string | `nil` | The image registry for spotfire-deployment. Overrides `global.spotfire.image.registry` value. | +| spotfire-server.configuration.deployment.defaultDeployment.image.repository | string | `"spotfire/spotfire-deployment"` | The spotfire-deployment image repository. | +| spotfire-server.configuration.deployment.defaultDeployment.image.tag | string | `"14.4.1-1"` | The container image tag to use. | +| spotfire-server.configuration.deployment.enabled | bool | `true` | When enabled spotfire deployment areas will be created by the configuration job. See also `volumes.deployment`. | +| spotfire-server.configuration.draining | object | `{"enabled":true,"minimumSeconds":90,"publishNotReadyAddresses":true,"timeoutSeconds":180}` | Configuration of the Spotfire Server container lifecycle PreStop hook. | +| spotfire-server.configuration.draining.enabled | bool | `true` | Enables or disables the container lifecycle PreStop hook. | +| spotfire-server.configuration.draining.minimumSeconds | int | `90` | The minimum time in seconds that the server should be draining, even if it is considered idle. | +| spotfire-server.configuration.draining.publishNotReadyAddresses | bool | `true` | Makes sure that service SRV records are preserved while terminating pods, typically used with the spotfire haproxy deployment. | +| spotfire-server.configuration.draining.timeoutSeconds | int | `180` | The draining timeout in seconds after which the service is forcibly shut down. | +| spotfire-server.configuration.encryptionPassword | string | `""` | The password for encrypting passwords that are stored in the database. If you do not set this option, then a static password is used. See \-\-encryption-password for the [bootstrap](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/bootstrap.html) command. | +| spotfire-server.configuration.preConfigCommandScripts | list | `[]` | The same as `commandScripts` but these command will be run before the configuration is imported. On new installations the commands will be run before any spotfire servers are started, because spotfire server will not start before there is a configuration. | +| spotfire-server.configuration.preferExistingConfig | bool | `false` | Run the configuration job steps starting from the currently active configuration or from the Spotfire default config (created with `config.sh create-default-config`). If no current active configuration exists, the default config is used. Note: When set to false, all configuration done with external tools other than helm will be overwritten on an upgrade. | +| spotfire-server.configuration.properties | object | Default values for kubernetes, see values.yaml. | Configuration properties The key name is the name of the property to set. If the value is a scalar the configuration tool command `set-config-prop` is used. To set a list or map the value should have the keys `itemName` and `value`. If the value is a map or object the configuration tool command `set-config-map-prop` is used. If the value is a list the configuration tool command `set-config-list-prop` is used. | +| spotfire-server.configuration.site | object | Spotfire Server joins the Default site. | Site settings. See [sites](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/sites.html) for more information. | +| spotfire-server.configuration.site.name | string | `"Default"` | The name of the site that the Spotfire Server should belong to. The site must be created beforehand. See [create-site](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/create-site.html) for more information. | +| spotfire-server.configuration.site.publicAddress | string | `""` | The address that clients use for connecting to the system. It is also used for generating absolute URLs. | +| spotfire-server.configuration.spotfireAdmin.create | bool | `true` | Whether to create an admin user or not. | +| spotfire-server.configuration.spotfireAdmin.password | string | `""` | The password to create for the Spotfire admin. If not provided, this password is automatically generated. Although possible, it is not recommended to change the user's password directly in the Spotfire administrative user interface because the password is reset to this value on every helm installation or upgrade. | +| spotfire-server.configuration.spotfireAdmin.passwordExistingSecret | object | Not used unless .name is set | Read password from an existing secret instead of from values. If set, 'password' above is not used. | +| spotfire-server.configuration.spotfireAdmin.username | string | `"admin"` | The user to create for the Spotfire admin. | +| spotfire-server.database.bootstrap | object | - | For details related to bootstrap properties, visit the product documentation [here](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/bootstrap.html). | +| spotfire-server.database.bootstrap.databaseUrl | string | `"jdbc:postgresql://HOSTNAME/spotfire"` | The JDBC URL of the database to be used by Spotfire Server. Evaluated as a template. | +| spotfire-server.database.bootstrap.password | string | `""` | Password to be created for the Spotfire Server database. If not provided, this password is automatically generated. | +| spotfire-server.database.bootstrap.passwordExistingSecret | object | Not used unless .name is set | Read spotfire database password from an existing secret. If set, 'password' above is not used. | +| spotfire-server.database.bootstrap.username | string | `"spotfire"` | Username to be created for the Spotfire Server database. If unset, the default value `spotfire` is used. | +| spotfire-server.database.create-db | object | - | For details related to `create-db` cli properties, visit the product documentation [here](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/create-db.html). create-db cli also uses properties from database.bootstrap section. | +| spotfire-server.database.create-db.adminPassword | string | `""` | Admin password for the database server to be used as the Spotfire Server database. | +| spotfire-server.database.create-db.adminPasswordExistingSecret | object | Not used unless .name is set | Read admin password from an existing secret. If set, 'password' above is not used. | +| spotfire-server.database.create-db.adminUsername | string | `"postgres"` | Admin username for the database server to be used as the Spotfire Server database. | +| spotfire-server.database.create-db.databaseUrl | string | `"jdbc:postgresql://HOSTNAME/"` | Like `database.bootstrap.databaseUrl` but is used for the connection when creating the spotfire database. Evaluated as a template. | +| spotfire-server.database.create-db.doNotCreateUser | bool | `false` | Set this to true, in case supported databases (AWS Postgres, Aurora Postgres, Azure Postgres, Google Cloud Postgres) does not allow user creation | +| spotfire-server.database.create-db.enabled | bool | `true` | if set to true, Spotfire server schema will also get deployed with other installation. | +| spotfire-server.database.create-db.oracleRootfolder | string | `""` | Specify the value in case of Oracle database, otherwise keep it blank. | +| spotfire-server.database.create-db.oracleTablespacePrefix | string | `""` | Specify the value in case of Oracle database, otherwise keep it blank. | +| spotfire-server.database.create-db.spotfiredbDbname | string | `"spotfire"` | Database name to be created to hold the Spotfire Server database schemas. | +| spotfire-server.database.create-db.variant | string | `""` | For connecting to MS SQL or Oracle on Amazon RDS, specify `rds`, for MS SQL on Azure, specify `azure`, otherwise omit the option. | +| spotfire-server.database.upgrade | bool | `false` | Often new Spotfire server version requires an upgraded database. If true, the database will be upgrade to match the server version being deployed. | +| spotfire-server.extraContainers | list | `[]` | Additional sidecar containers to add to the Spotfire server pod. More info: `kubectl explain deployment.spec.template.spec.containers` | +| spotfire-server.extraEnvVars | list | `[]` | Additional environment variables that all spotfire-server pods use. | +| spotfire-server.extraEnvVarsCM | string | `""` | | +| spotfire-server.extraEnvVarsSecret | string | `""` | | +| spotfire-server.extraInitContainers | list | `[]` | Additional init containers to add to Spotfire server pod. More info: `kubectl explain deployment.spec.template.spec.initContainers` | +| spotfire-server.extraVolumeMounts | list | `[]` | Extra volumeMounts for the spotfire-server container. More info: `kubectl explain deployment.spec.template.spec.containers.volumeMounts` | +| spotfire-server.extraVolumes | list | `[]` | Extra volumes for the spotfire-server container. More info: `kubectl explain deployment.spec.template.spec.volumes` | +| spotfire-server.fluentBitSidecar.image.pullPolicy | string | `"IfNotPresent"` | The image pull policy for the fluent-bit logging sidecar image. | +| spotfire-server.fluentBitSidecar.image.repository | string | `"fluent/fluent-bit"` | The image repository for fluent-bit logging sidecar. | +| spotfire-server.fluentBitSidecar.image.tag | string | `"3.1.6"` | The image tag to use for fluent-bit logging sidecar. | +| spotfire-server.fluentBitSidecar.securityContext | object | `{}` | The securityContext setting for fluent-bit sidecar container. Overrides any securityContext setting on the Pod level. More info: `kubectl explain pod.spec.securityContext` | +| spotfire-server.haproxy.config | string | The chart creates a configuration automatically. | The haproxy configuration file template. For implementation details see templates/haproxy-config.tpl. | +| spotfire-server.haproxy.enabled | bool | `true` | | +| spotfire-server.haproxy.includes | object | `{}` | | +| spotfire-server.haproxy.includesMountPath | string | `"/etc/haproxy/includes"` | | +| spotfire-server.haproxy.kind | string | `"Deployment"` | | +| spotfire-server.haproxy.podAnnotations | object | `{"prometheus.io/path":"/metrics","prometheus.io/port":"1024","prometheus.io/scrape":"true"}` | Prometheus annotations. Should match the haproxy.config settings. | +| spotfire-server.haproxy.podLabels."app.kubernetes.io/component" | string | `"haproxy"` | | +| spotfire-server.haproxy.podLabels."app.kubernetes.io/part-of" | string | `"spotfire"` | | +| spotfire-server.haproxy.podSecurityPolicy.create | bool | `false` | | +| spotfire-server.haproxy.service.type | string | `"ClusterIP"` | Sets the service haproxy service proxies traffic to the spotfire-server service. ClusterIP or LoadBalancer. | +| spotfire-server.haproxy.spotfireConfig | object | Caching of static resource and debug response headers enabled. | Spotfire specific configuration related to haproxy. | +| spotfire-server.haproxy.spotfireConfig.agent.port | int | `9081` | Spotfire Server haproxy agent-port. | +| spotfire-server.haproxy.spotfireConfig.cache | object | enabled | Caching of static resources | +| spotfire-server.haproxy.spotfireConfig.captures.forwardedForLength | int | `36` | The maximum number of characters captured from the X-Forwarded-For request header | +| spotfire-server.haproxy.spotfireConfig.cleanup.sameSiteCookieAttributeForHttp | bool | `true` | If the SameSite cookie attribute should be removed for HTTP connections in Set-Cookie response headers, then it might be needed in cases where both HTTP and HTTPS are enabled, and upstream servers set this unconditionally. | +| spotfire-server.haproxy.spotfireConfig.cleanup.secureCookieAttributeForHttp | bool | `true` | If incorrect, then the secure cookie attribute should be removed for HTTP connections in the Set-Cookie response headers. | +| spotfire-server.haproxy.spotfireConfig.debug | bool | `false` | Specifies if debug response headers should be enabled. | +| spotfire-server.haproxy.spotfireConfig.loadBalancingCookie | object | stateless load balancing | Cookie-related configuration. | +| spotfire-server.haproxy.spotfireConfig.loadBalancingCookie.attributes | string | `"insert indirect nocache dynamic httponly secure attr \"SameSite=None\""` | Attributes for the cookie value in the haproxy config. See [haproxy cookie](https://cbonte.github.io/haproxy-dconv/2.6/configuration.html#4.2-cookie) for more information. | +| spotfire-server.haproxy.spotfireConfig.loadBalancingCookie.dynamicCookieKey | string | the cookie key | dynamic-cookie-key value in the haproxy config. | +| spotfire-server.haproxy.spotfireConfig.maintenance | object | disabled | Maintenance mode, can be used to temporarily block requests (but still allow some, see allowCookie below). | +| spotfire-server.haproxy.spotfireConfig.maintenance.allowCookie | object | disabled | Allowed requests in maintenance mode by configuring a cookie for allowed requests. | +| spotfire-server.haproxy.spotfireConfig.maintenance.allowCookie.enabled | bool | `false` | Specifies if a cookie can be used to access the environment while maintenance mode is enabled. | +| spotfire-server.haproxy.spotfireConfig.maintenance.allowCookie.name | string | `""` | The name of the cookie, case sensitive | +| spotfire-server.haproxy.spotfireConfig.maintenance.allowCookie.value | string | `""` | The value of the cookie, case sensitive | +| spotfire-server.haproxy.spotfireConfig.maintenance.enabled | bool | `false` | Specifies if maintenance mode is enabled. | +| spotfire-server.haproxy.spotfireConfig.maintenancePage | object | maintenance page related settings | A custom maintenance page that is displayed if maintenance mode is enabled or if no Spotfire Server instances are running | +| spotfire-server.haproxy.spotfireConfig.maintenancePage.bufSize | int | `24576` | For larger files, haproxy tune.bufsize may need to be increased to accommodate the larger size. | +| spotfire-server.haproxy.spotfireConfig.maintenancePage.responseString | string | `"Maintenance - Maintenance in progress"` | The maintenance page response string. | +| spotfire-server.haproxy.spotfireConfig.maintenancePage.useFile | bool | `false` | If a haproxy include file, haproxy.includes.'maintenance\\.html'=, should be used instead of haproxy.maintenancePage.responseString below. | +| spotfire-server.haproxy.spotfireConfig.serverTemplate.additionalParams | string | `"on-marked-down shutdown-sessions"` | Additional parameters, see [haproxy server](https://cbonte.github.io/haproxy-dconv/2.6/snapshot/configuration.html#server%20%28Alphabetically%20sorted%20keywords%20reference%29) | +| spotfire-server.haproxy.spotfireConfig.timeouts.client | string | `"30m"` | See [haproxy timeout client](https://cbonte.github.io/haproxy-dconv/2.6/configuration.html#4.2-timeout%20client). | +| spotfire-server.haproxy.spotfireConfig.timeouts.connect | string | `"300ms"` | See [haproxy timeout connect](https://cbonte.github.io/haproxy-dconv/2.6/configuration.html#4.2-timeout%20connect). | +| spotfire-server.haproxy.spotfireConfig.timeouts.httpRequest | string | `"3600s"` | See [haproxy timeout http-request](https://cbonte.github.io/haproxy-dconv/2.6/configuration.html#4.2-timeout%20http-request). | +| spotfire-server.haproxy.spotfireConfig.timeouts.queue | string | `"60s"` | See [haproxy timeout queue](https://cbonte.github.io/haproxy-dconv/2.6/configuration.html#4-timeout%20queue). | +| spotfire-server.haproxy.spotfireConfig.timeouts.server | string | `"30m"` | See [haproxy timeout server](https://cbonte.github.io/haproxy-dconv/2.6/configuration.html#4.2-timeout%20server). | +| spotfire-server.haproxy.spotfireConfig.timeouts.tunnel | string | `"31m"` | See [haproxy timeout tunnel](https://cbonte.github.io/haproxy-dconv/2.6/configuration.html#4.2-timeout%20tunnel). | +| spotfire-server.image.pullPolicy | string | `nil` | The spotfire-server image pull policy. Overrides `global.spotfire.image.pullPolicy`. | +| spotfire-server.image.pullSecrets | list | `[]` | spotfire-deployment image pull secrets. | +| spotfire-server.image.registry | string | `nil` | The image registry for spotfire-server. Overrides `global.spotfire.image.registry` value. | +| spotfire-server.image.repository | string | `"spotfire/spotfire-server"` | The spotfire-server image repository. | +| spotfire-server.image.tag | string | `"14.4.1-1"` | The container image tag to use. | +| spotfire-server.ingress.annotations | object | `{}` | Annotations for the ingress object. See documentation for your ingress controller for valid annotations. | +| spotfire-server.ingress.enabled | bool | `false` | Enables configuration of ingress to expose Spotfire Server. Requires ingress support in the Kubernetes cluster. | +| spotfire-server.ingress.hosts[0].host | string | `"spotfire.local"` | | +| spotfire-server.ingress.hosts[0].paths[0].path | string | `"/"` | | +| spotfire-server.ingress.hosts[0].paths[0].pathType | string | `"Prefix"` | | +| spotfire-server.ingress.ingressClassName | string | `""` | IngressClass that will be be used for the Ingress (Kubernetes 1.18+) ref: https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/ | +| spotfire-server.ingress.tls | list | `[]` | | +| spotfire-server.kedaAutoscaling | object | Disabled | KEDA autoscaling configuration. See https://keda.sh/docs/latest/concepts/scaling-deployments for more details. | +| spotfire-server.kedaAutoscaling.cooldownPeriod | int | `300` | The period to wait after the last trigger reported active before scaling the resource back to 0. | +| spotfire-server.kedaAutoscaling.maxReplicas | int | `4` | This setting is passed to the HPA definition that KEDA creates for a given resource and holds the maximum number of replicas of the target resource. | +| spotfire-server.kedaAutoscaling.minReplicas | int | `1` | The minimum number of replicas KEDA scales the resource down to. | +| spotfire-server.kedaAutoscaling.pollingInterval | int | `30` | The interval to check each trigger on. | +| spotfire-server.kedaAutoscaling.spotfireConfig | object | `{"prometheusServerAddress":"http://prometheus-server.monitor.svc.cluster.local"}` | Spotfire specific settings. | +| spotfire-server.kedaAutoscaling.spotfireConfig.prometheusServerAddress | string | `"http://prometheus-server.monitor.svc.cluster.local"` | REQUIRED. The URL to the Prometheus server where metrics should be fetched from. | +| spotfire-server.livenessProbe.enabled | bool | `true` | | +| spotfire-server.livenessProbe.failureThreshold | int | `3` | | +| spotfire-server.livenessProbe.httpGet.path | string | `"/spotfire/rest/status/getStatus"` | | +| spotfire-server.livenessProbe.httpGet.port | string | `"http"` | | +| spotfire-server.livenessProbe.periodSeconds | int | `3` | | +| spotfire-server.log-forwarder.config.filters | string | Example that drops specific events using [grep](https://docs.fluentbit.io/manual/pipeline/filters/grep) | Add custom fluent-bit [filters configuration](https://docs.fluentbit.io/manual/pipeline/filters). | +| spotfire-server.log-forwarder.config.inputs | string | [tcp input](https://docs.fluentbit.io/manual/pipeline/inputs/tcp) on port 5170 and [forward input](https://docs.fluentbit.io/manual/pipeline/inputs/forward) on port 24224 | fluent-bit [input configuration](https://docs.fluentbit.io/manual/pipeline/inputs). | +| spotfire-server.log-forwarder.config.outputs | string | Logs are written to stdout of the log-forwarder pod. | Override this value with an [output configuration](https://docs.fluentbit.io/manual/pipeline/outputs) to send logs to an external system. | +| spotfire-server.log-forwarder.enabled | bool | `true` | enables or disables the fluent-bit log-forwarder pod. If enabled, it collects logs from the spotfire-server pods and can forward traffic to any output supported by fluent-bit. | +| spotfire-server.log-forwarder.extraPorts[0].containerPort | int | `5170` | | +| spotfire-server.log-forwarder.extraPorts[0].name | string | `"json"` | | +| spotfire-server.log-forwarder.extraPorts[0].port | int | `5170` | | +| spotfire-server.log-forwarder.extraPorts[0].protocol | string | `"TCP"` | | +| spotfire-server.log-forwarder.extraPorts[1].containerPort | int | `24224` | | +| spotfire-server.log-forwarder.extraPorts[1].name | string | `"forward"` | | +| spotfire-server.log-forwarder.extraPorts[1].port | int | `24224` | | +| spotfire-server.log-forwarder.extraPorts[1].protocol | string | `"TCP"` | | +| spotfire-server.log-forwarder.image.pullPolicy | string | `"IfNotPresent"` | | +| spotfire-server.log-forwarder.kind | string | `"Deployment"` | | +| spotfire-server.log-forwarder.labels."app.kubernetes.io/component" | string | `"logging"` | | +| spotfire-server.log-forwarder.labels."app.kubernetes.io/part-of" | string | `"spotfire"` | | +| spotfire-server.log-forwarder.podAnnotations."prometheus.io/path" | string | `"/api/v1/metrics/prometheus"` | | +| spotfire-server.log-forwarder.podAnnotations."prometheus.io/port" | string | `"2020"` | | +| spotfire-server.log-forwarder.podAnnotations."prometheus.io/scrape" | string | `"true"` | | +| spotfire-server.log-forwarder.podLabels."app.kubernetes.io/component" | string | `"logging"` | | +| spotfire-server.log-forwarder.podLabels."app.kubernetes.io/part-of" | string | `"spotfire"` | | +| spotfire-server.log-forwarder.rbac.create | bool | `false` | Specifies whether to create an RBAC for the fluent-bit / log-forwarder. Setting this to `true` requires additional privileges in the Kubernetes cluster. | +| spotfire-server.log-forwarder.service.labels."app.kubernetes.io/component" | string | `"logging"` | | +| spotfire-server.log-forwarder.service.labels."app.kubernetes.io/part-of" | string | `"spotfire"` | | +| spotfire-server.logging.logForwarderAddress | string | `""` | Specifies a logForwarderAddress. If left empty, then the default `log-forwarder` is used in the case where `log-forwarder.enabled=true`. Template. | +| spotfire-server.logging.logLevel | string | `""` | The Spotfire Server log-level. Set to `debug`, `trace`, `minimal` or leave empty for info. | +| spotfire-server.nodeSelector | object | `{}` | | +| spotfire-server.podAnnotations."prometheus.io/path" | string | `"/spotfire/metrics"` | | +| spotfire-server.podAnnotations."prometheus.io/port" | string | `"9080"` | | +| spotfire-server.podAnnotations."prometheus.io/scrape" | string | `"true"` | | +| spotfire-server.podSecurityContext | object | `{}` | The Pod securityContext setting applies to all the containers inside the Pod. More info: `kubectl explain deployment.spec.template.spec.securityContext` | +| spotfire-server.readinessProbe.enabled | bool | `false` | | +| spotfire-server.replicaCount | int | `1` | The number of Spotfire Server containers. | +| spotfire-server.resources | object | `{}` | | +| spotfire-server.securityContext | object | `{}` | The securityContext setting for spotfire-server container. Overrides any securityContext setting on the Pod level. More info: `kubectl explain deployment.spec.template.spec.containers.securityContext` | +| spotfire-server.service.clusterIP | string | `"None"` | | +| spotfire-server.service.type | string | `"ClusterIP"` | | +| spotfire-server.serviceAccount.annotations | object | `{}` | | +| spotfire-server.serviceAccount.create | bool | `true` | | +| spotfire-server.serviceAccount.name | string | `""` | | +| spotfire-server.spotfireServerJava.extraJavaOpts | list | `[]` | Additional `JAVA_OPTS` for spotfire-server pods. | +| spotfire-server.startupProbe.enabled | bool | `true` | | +| spotfire-server.startupProbe.failureThreshold | int | `30` | | +| spotfire-server.startupProbe.httpGet.path | string | `"/spotfire/rest/status/getStatus"` | | +| spotfire-server.startupProbe.httpGet.port | string | `"http"` | | +| spotfire-server.startupProbe.initialDelaySeconds | int | `60` | | +| spotfire-server.startupProbe.periodSeconds | int | `10` | | +| spotfire-server.tolerations | list | `[]` | | +| spotfire-server.toolPassword | string | `""` | The Spotfire config tool password to use for `bootstrap.xml`. If not provided, this password is automatically generated. The password is only used locally inside pods for use to together with the configuration and is not usable for anything outside the pod. | +| spotfire-server.troubleshooting.jvm.heapDumpOnOutOfMemoryError.dumpPath | string | `"/opt/spotfire/troubleshooting/jvm-heap-dumps"` | Define a path where the generated dump is exported. By default, this gets mounted in EmptyDir: {} internally, which survives container restarts. In case you want to persist troubleshooting information to an external location, you can override the default behaviour by specifying PVC in `volumes.troubleshooting`. | +| spotfire-server.troubleshooting.jvm.heapDumpOnOutOfMemoryError.enabled | bool | `true` | Enable or disable for a heap dump in case of OutOfMemoryError. | +| spotfire-server.volumes.certificates.existingClaim | string | `""` | | +| spotfire-server.volumes.certificates.subPath | string | `""` | The subPath of the volume to be used for the volume mount | +| spotfire-server.volumes.customExt.existingClaim | string | `""` | Defines an already-existing persistent volume claim. | +| spotfire-server.volumes.customExt.subPath | string | `""` | The subPath of the volume to be used for the volume mount | +| spotfire-server.volumes.customExtInformationservices.existingClaim | string | `""` | Defines an already-existing persistent volume claim. | +| spotfire-server.volumes.customExtInformationservices.subPath | string | `""` | The subPath of the volume to be used for the volume mount | +| spotfire-server.volumes.deployments.existingClaim | string | `""` | Defines an already-existing persistent volume claim. | +| spotfire-server.volumes.deployments.subPath | string | `""` | The subPath of the volume to be used for the volume mount | +| spotfire-server.volumes.libraryImportExport.existingClaim | string | `""` | When `persistentVolumeClaim.create` is `false`, then this value is used to define an already-existing PVC. | +| spotfire-server.volumes.libraryImportExport.persistentVolumeClaim.create | bool | `false` | If `true`, then a `PersistentVolumeClaim` (PVC) is created. | +| spotfire-server.volumes.libraryImportExport.persistentVolumeClaim.resources | object | `{"requests":{"storage":"1Gi"}}` | Specifies the standard Kubernetes resource requests and/or limits for the `volumes.libraryImportExport` PVC. | +| spotfire-server.volumes.libraryImportExport.persistentVolumeClaim.storageClassName | string | `""` | Specifies the name of the `StorageClass` to use for the `volumes.libraryImportExport` PVC. | +| spotfire-server.volumes.libraryImportExport.persistentVolumeClaim.volumeName | string | `nil` | Specifies the name of the persistent volume to use for the `volumes.libraryImportExport` PVC. | +| spotfire-server.volumes.libraryImportExport.subPath | string | `""` | The subPath of the volume to be used for the volume mount | +| spotfire-server.volumes.troubleshooting.existingClaim | string | `""` | When `persistentVolumeClaim.create` is `false`, then use this value to define an already-existing PVC. | +| spotfire-server.volumes.troubleshooting.persistentVolumeClaim.create | bool | `false` | If `true`, then a `PersistentVolumeClaim` (PVC) is created. | +| spotfire-server.volumes.troubleshooting.persistentVolumeClaim.resources | object | `{"requests":{"storage":"2Gi"}}` | Specifies the standard K8s resource requests and/or limits for the `volumes.troubleshooting` PVC. | +| spotfire-server.volumes.troubleshooting.persistentVolumeClaim.storageClassName | string | `""` | Specifies the name of the `StorageClass` that to use for the `volumes.troubleshooting` PVC. | +| spotfire-server.volumes.troubleshooting.persistentVolumeClaim.volumeName | string | `nil` | Specifies the name of the persistent volume to use for the `volumes.troubleshooting` PVC. | +| spotfire-terrservice.acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | +| spotfire-terrservice.affinity | object | `{}` | | +| spotfire-terrservice.configuration | object | `{}` | Add [Custom configuration properties](https://docs.tibco.com/pub/terrsrv/latest/doc/html/TIB_terrsrv_install/_shared/install/topics/custom_configuration_properties.html). Keys under configuration should be named the same as the configuration property, for example 'engine.execution.timeout'. | +| spotfire-terrservice.extraContainers | list | `[]` | Additional sidecar containers to add to the service pod. | +| spotfire-terrservice.extraEnvVars | list | `[]` | Additional environment variables. | +| spotfire-terrservice.extraEnvVarsCM | string | `""` | The name of the ConfigMap containing additional environment variables. | +| spotfire-terrservice.extraEnvVarsSecret | string | `""` | The name of the Secret containing extra additional environment variables. | +| spotfire-terrservice.extraInitContainers | list | `[]` | Additional init containers to add to the service pod. | +| spotfire-terrservice.extraVolumeMounts | list | `[]` | Extra volumeMounts for the service container. More info: `kubectl explain deployment.spec.template.spec.containers.volumeMounts`. | +| spotfire-terrservice.extraVolumes | list | `[]` | Extra volumes for the service container. More info: `kubectl explain deployment.spec.template.spec.volumes`. | +| spotfire-terrservice.fluentBitSidecar.image.pullPolicy | string | `"IfNotPresent"` | The image pull policy for the fluent-bit logging sidecar image. | +| spotfire-terrservice.fluentBitSidecar.image.repository | string | `"fluent/fluent-bit"` | The image repository for fluent-bit logging sidecar. | +| spotfire-terrservice.fluentBitSidecar.image.tag | string | `"3.1.6"` | The image tag to use for fluent-bit logging sidecar. | +| spotfire-terrservice.fluentBitSidecar.securityContext | object | `{}` | The securityContext setting for fluent-bit sidecar container. Overrides any securityContext setting on the Pod level. | +| spotfire-terrservice.fullnameOverride | string | `""` | | +| spotfire-terrservice.image.pullPolicy | string | `nil` | The spotfire-server image pull policy. Overrides global.spotfire.image.pullPolicy. | +| spotfire-terrservice.image.pullSecrets | list | `[]` | Image pull secrets. | +| spotfire-terrservice.image.registry | string | `nil` | The image registry for spotfire-server. Overrides global.spotfire.image.registry value. | +| spotfire-terrservice.image.repository | string | `"spotfire/spotfire-terrservice"` | The spotfire-server image repository. | +| spotfire-terrservice.image.tag | string | `"1.21.1-1"` | The container image tag to use. | +| spotfire-terrservice.kedaAutoscaling | object | `{"advanced":{},"cooldownPeriod":300,"enabled":false,"fallback":{},"maxReplicas":4,"minReplicas":1,"pollingInterval":30,"spotfireConfig":{"prometheusServerAddress":"http://prometheus-server.monitor.svc.cluster.local"},"threshold":null,"triggers":[]}` | KEDA autoscaling configuration. See https://keda.sh/docs/latest/concepts/scaling-deployments for more details. | +| spotfire-terrservice.kedaAutoscaling.cooldownPeriod | int | `300` | The period to wait after the last trigger reported active before scaling the resource back to 0. | +| spotfire-terrservice.kedaAutoscaling.maxReplicas | int | `4` | This setting is passed to the HPA definition that KEDA creates for a given resource and holds the maximum number of replicas of the target resource. | +| spotfire-terrservice.kedaAutoscaling.minReplicas | int | `1` | The minimum number of replicas KEDA scales the resource down to. | +| spotfire-terrservice.kedaAutoscaling.pollingInterval | int | `30` | The interval to check each trigger on. | +| spotfire-terrservice.kedaAutoscaling.spotfireConfig | object | `{"prometheusServerAddress":"http://prometheus-server.monitor.svc.cluster.local"}` | Spotfire specific settings. | +| spotfire-terrservice.kedaAutoscaling.spotfireConfig.prometheusServerAddress | string | `"http://prometheus-server.monitor.svc.cluster.local"` | REQUIRED. The URL for the Prometheus server from where metrics are fetched. | +| spotfire-terrservice.livenessProbe.enabled | bool | `true` | | +| spotfire-terrservice.livenessProbe.failureThreshold | int | `10` | | +| spotfire-terrservice.livenessProbe.httpGet.path | string | `"/spotfire/liveness"` | | +| spotfire-terrservice.livenessProbe.httpGet.port | string | `"registration"` | | +| spotfire-terrservice.livenessProbe.initialDelaySeconds | int | `60` | | +| spotfire-terrservice.livenessProbe.periodSeconds | int | `3` | | +| spotfire-terrservice.logging.logForwarderAddress | string | `""` | The spotfire-server log-forwarder name. Template. | +| spotfire-terrservice.logging.logLevel | string | `"debug"` | Set to `debug`, `trace`, `minimal`, or leave empty for info. This applies for both node manager and the service. | +| spotfire-terrservice.nameOverride | string | `""` | | +| spotfire-terrservice.nodeSelector | object | `{}` | | +| spotfire-terrservice.nodemanagerConfig.preStopDrainingTimeoutSeconds | int | `610` | The draining timeout after which the service is forcefully shut down. | +| spotfire-terrservice.nodemanagerConfig.serverBackendAddress | string | `""` | The spotfire-server service name. This value is evaluated as a helm template. | +| spotfire-terrservice.podAnnotations."prometheus.io/path" | string | `"/spotfire/metrics"` | | +| spotfire-terrservice.podAnnotations."prometheus.io/port" | string | `"9080"` | | +| spotfire-terrservice.podAnnotations."prometheus.io/scrape" | string | `"true"` | | +| spotfire-terrservice.podSecurityContext | object | `{}` | The Pod securityContext setting applies to all of the containers inside the Pod. | +| spotfire-terrservice.readinessProbe.enabled | bool | `false` | | +| spotfire-terrservice.readinessProbe.failureThreshold | int | `10` | | +| spotfire-terrservice.readinessProbe.httpGet.path | string | `"/spotfire/readiness"` | | +| spotfire-terrservice.readinessProbe.httpGet.port | string | `"registration"` | | +| spotfire-terrservice.readinessProbe.initialDelaySeconds | int | `60` | | +| spotfire-terrservice.readinessProbe.periodSeconds | int | `3` | | +| spotfire-terrservice.replicaCount | int | `1` | | +| spotfire-terrservice.resources | object | `{}` | | +| spotfire-terrservice.securityContext | object | `{}` | The securityContext setting for the service container. Overrides any securityContext setting on the Pod level. | +| spotfire-terrservice.service.port | int | `9501` | | +| spotfire-terrservice.service.type | string | `"ClusterIP"` | | +| spotfire-terrservice.serviceAccount.annotations | object | `{}` | | +| spotfire-terrservice.serviceAccount.create | bool | `false` | | +| spotfire-terrservice.serviceAccount.name | string | `""` | | +| spotfire-terrservice.startupProbe.enabled | bool | `true` | | +| spotfire-terrservice.startupProbe.failureThreshold | int | `20` | | +| spotfire-terrservice.startupProbe.httpGet.path | string | `"/spotfire/started"` | | +| spotfire-terrservice.startupProbe.httpGet.port | string | `"registration"` | | +| spotfire-terrservice.startupProbe.initialDelaySeconds | int | `60` | | +| spotfire-terrservice.startupProbe.periodSeconds | int | `3` | | +| spotfire-terrservice.tolerations | list | `[]` | | +| spotfire-terrservice.volumes.packages.existingClaim | string | `""` | When 'persistentVolumeClaim.create' is 'false', then use this value to define an already existing persistent volume claim. | +| spotfire-terrservice.volumes.packages.persistentVolumeClaim.create | bool | `false` | If 'true', then a 'PersistentVolumeClaim' is created. | +| spotfire-terrservice.volumes.packages.persistentVolumeClaim.resources | object | `{"requests":{"storage":"1Gi"}}` | Specifies the standard Kubernetes resource requests and/or limits for the customExt volume claims. | +| spotfire-terrservice.volumes.packages.persistentVolumeClaim.storageClassName | string | `""` | Specifies the name of the 'StorageClass' to use for the customExt volume-claim. | +| spotfire-terrservice.volumes.packages.persistentVolumeClaim.volumeName | string | `nil` | Specifies the name of the persistent volume that should be used for the customExt volume-claim. | +| spotfire-terrservice.volumes.packages.subPath | string | `""` | The subPath of the volume to be used for the volume mount | +| spotfire-terrservice.volumes.troubleshooting.existingClaim | string | `""` | When 'persistentVolumeClaim.create' is 'false', then use this value to define an already existing persistent volume claim. | +| spotfire-terrservice.volumes.troubleshooting.persistentVolumeClaim.create | bool | `false` | If 'true', then a 'PersistentVolumeClaim' will be created. | +| spotfire-terrservice.volumes.troubleshooting.persistentVolumeClaim.resources | object | `{"requests":{"storage":"2Gi"}}` | Specifies the standard Kubernetes resource requests and/or limits for the volumes.troubleshooting claims. | +| spotfire-terrservice.volumes.troubleshooting.persistentVolumeClaim.storageClassName | string | `""` | Specifies the name of the 'StorageClass' to use for the volumes.troubleshooting-claim. | +| spotfire-terrservice.volumes.troubleshooting.persistentVolumeClaim.volumeName | string | `nil` | Specifies the name of the persistent volume to use for the volumes.troubleshooting-claim. | +| spotfire-webplayer.acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | +| spotfire-webplayer.affinity | object | `{}` | | +| spotfire-webplayer.config."Spotfire.Dxp.Worker.Core.config" | string | `""` | A custom [Spotfire.Dxp.Worker.Core.config](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/spotfire.dxp.worker.core.config_file.html). | +| spotfire-webplayer.config."Spotfire.Dxp.Worker.Host.dll.config" | string | `""` | A custom Spotfire.Dxp.Worker.Host.dll.config. See [Spotfire.Dxp.Worker.Host.exe.config](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/spotfire.dxp.worker.host.exe.config_file.html). | +| spotfire-webplayer.config."Spotfire.Dxp.Worker.Web.config" | string | `""` | A custom [Spotfire.Dxp.Worker.Web.config](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/spotfire.dxp.worker.web.config_file.html). | +| spotfire-webplayer.extraContainers | list | `[]` | Additional sidecar containers to add to the service pod. | +| spotfire-webplayer.extraEnvVars | list | `[]` | Additional environment variables. | +| spotfire-webplayer.extraEnvVarsCM | string | `""` | The name of the ConfigMap containing additional environment variables. | +| spotfire-webplayer.extraEnvVarsSecret | string | `""` | The name of the Secret containing extra additional environment variables. | +| spotfire-webplayer.extraInitContainers | list | `[]` | Additional init containers to add to the service pod. | +| spotfire-webplayer.extraVolumeMounts | list | `[]` | Extra volumeMounts for the service container. More info: `kubectl explain deployment.spec.template.spec.containers.volumeMounts`. | +| spotfire-webplayer.extraVolumes | list | `[]` | Extra volumes for the service container. More info: `kubectl explain deployment.spec.template.spec.volumes`. | +| spotfire-webplayer.fluentBitSidecar.image.pullPolicy | string | `"IfNotPresent"` | The image pull policy for the fluent-bit logging sidecar image. | +| spotfire-webplayer.fluentBitSidecar.image.repository | string | `"fluent/fluent-bit"` | The image repository for fluent-bit logging sidecar. | +| spotfire-webplayer.fluentBitSidecar.image.tag | string | `"3.1.6"` | The image tag to use for fluent-bit logging sidecar. | +| spotfire-webplayer.fluentBitSidecar.securityContext | object | `{}` | The securityContext setting for fluent-bit sidecar container. Overrides any securityContext setting on the Pod level. | +| spotfire-webplayer.fullnameOverride | string | `""` | | +| spotfire-webplayer.image.pullPolicy | string | `nil` | The spotfire-server image pull policy. Overrides global.spotfire.image.pullPolicy. | +| spotfire-webplayer.image.pullSecrets | list | `[]` | Image pull secrets. | +| spotfire-webplayer.image.registry | string | `nil` | The image registry for spotfire-server. Overrides global.spotfire.image.registry value. | +| spotfire-webplayer.image.repository | string | `"spotfire/spotfire-webplayer"` | The spotfire-server image repository. | +| spotfire-webplayer.image.tag | string | `"14.4.1-1"` | The container image tag to use. | +| spotfire-webplayer.kedaAutoscaling | object | `{"advanced":{},"cooldownPeriod":300,"enabled":false,"fallback":{},"maxReplicas":4,"minReplicas":1,"pollingInterval":30,"spotfireConfig":{"prometheusServerAddress":"http://prometheus-server.monitor.svc.cluster.local"},"threshold":null,"triggers":[]}` | KEDA autoscaling configuration. See https://keda.sh/docs/latest/concepts/scaling-deployments for more details. | +| spotfire-webplayer.kedaAutoscaling.cooldownPeriod | int | `300` | The period to wait after the last trigger reported active before scaling the resource back to 0. | +| spotfire-webplayer.kedaAutoscaling.maxReplicas | int | `4` | This setting is passed to the HPA definition that KEDA creates for a given resource and holds the maximum number of replicas of the target resource. | +| spotfire-webplayer.kedaAutoscaling.minReplicas | int | `1` | The minimum number of replicas KEDA scales the resource down to. | +| spotfire-webplayer.kedaAutoscaling.pollingInterval | int | `30` | The interval to check each trigger on. | +| spotfire-webplayer.kedaAutoscaling.spotfireConfig | object | `{"prometheusServerAddress":"http://prometheus-server.monitor.svc.cluster.local"}` | Spotfire specific settings. | +| spotfire-webplayer.kedaAutoscaling.spotfireConfig.prometheusServerAddress | string | `"http://prometheus-server.monitor.svc.cluster.local"` | REQUIRED. The URL for the Prometheus server from where metrics are fetched. | +| spotfire-webplayer.livenessProbe.enabled | bool | `true` | | +| spotfire-webplayer.livenessProbe.failureThreshold | int | `10` | | +| spotfire-webplayer.livenessProbe.httpGet.path | string | `"/spotfire/liveness"` | | +| spotfire-webplayer.livenessProbe.httpGet.port | string | `"registration"` | | +| spotfire-webplayer.livenessProbe.initialDelaySeconds | int | `60` | | +| spotfire-webplayer.livenessProbe.periodSeconds | int | `3` | | +| spotfire-webplayer.logging.logForwarderAddress | string | `""` | The spotfire-server log-forwarder name. Template. | +| spotfire-webplayer.logging.logLevel | string | `"debug"` | Set to `debug`, `trace`, `minimal`, or leave empty for info. This applies for both node manager and the service. | +| spotfire-webplayer.nameOverride | string | `""` | | +| spotfire-webplayer.nodeSelector | object | `{}` | | +| spotfire-webplayer.nodemanagerConfig.preStopDrainingTimeoutSeconds | int | `610` | The draining timeout after which the service is forcefully shut down. | +| spotfire-webplayer.nodemanagerConfig.serverBackendAddress | string | `""` | The spotfire-server service name. This value is evaluated as a helm template. | +| spotfire-webplayer.podAnnotations."prometheus.io/path" | string | `"/spotfire/metrics"` | | +| spotfire-webplayer.podAnnotations."prometheus.io/port" | string | `"9080"` | | +| spotfire-webplayer.podAnnotations."prometheus.io/scrape" | string | `"true"` | | +| spotfire-webplayer.podSecurityContext | object | `{}` | The Pod securityContext setting applies to all of the containers inside the Pod. | +| spotfire-webplayer.readinessProbe.enabled | bool | `false` | | +| spotfire-webplayer.readinessProbe.failureThreshold | int | `10` | | +| spotfire-webplayer.readinessProbe.httpGet.path | string | `"/spotfire/readiness"` | | +| spotfire-webplayer.readinessProbe.httpGet.port | string | `"registration"` | | +| spotfire-webplayer.readinessProbe.initialDelaySeconds | int | `60` | | +| spotfire-webplayer.readinessProbe.periodSeconds | int | `3` | | +| spotfire-webplayer.replicaCount | int | `1` | | +| spotfire-webplayer.resources | object | `{}` | | +| spotfire-webplayer.securityContext | object | `{}` | The securityContext setting for the service container. Overrides any securityContext setting on the Pod level. | +| spotfire-webplayer.service.port | int | `9501` | | +| spotfire-webplayer.service.type | string | `"ClusterIP"` | | +| spotfire-webplayer.serviceAccount.annotations | object | `{}` | | +| spotfire-webplayer.serviceAccount.create | bool | `false` | | +| spotfire-webplayer.serviceAccount.name | string | `""` | | +| spotfire-webplayer.startupProbe.enabled | bool | `true` | | +| spotfire-webplayer.startupProbe.failureThreshold | int | `20` | | +| spotfire-webplayer.startupProbe.httpGet.path | string | `"/spotfire/started"` | | +| spotfire-webplayer.startupProbe.httpGet.port | string | `"registration"` | | +| spotfire-webplayer.startupProbe.initialDelaySeconds | int | `60` | | +| spotfire-webplayer.startupProbe.periodSeconds | int | `3` | | +| spotfire-webplayer.tolerations | list | `[]` | | +| spotfire-webplayer.volumes.customModules.existingClaim | string | `""` | When 'persistentVolumeClaim.create' is 'false', then use this value to define an already existing persistent volume claim. | +| spotfire-webplayer.volumes.customModules.persistentVolumeClaim.create | bool | `false` | If 'true', then a 'PersistentVolumeClaim' is created. | +| spotfire-webplayer.volumes.customModules.persistentVolumeClaim.resources | object | `{"requests":{"storage":"2Gi"}}` | Specifies the standard Kubernetes resource requests and/or limits for the volumes.customModules claims. | +| spotfire-webplayer.volumes.customModules.persistentVolumeClaim.storageClassName | string | `""` | Specifies the name of the 'StorageClass' to use for the volumes.customModules-claim. | +| spotfire-webplayer.volumes.customModules.persistentVolumeClaim.volumeName | string | `nil` | Specifies the name of the persistent volume to use for the volumes.customModules-claim. | +| spotfire-webplayer.volumes.customModules.subPath | string | `""` | The subPath of the volume to be used for the volume mount | +| spotfire-webplayer.volumes.troubleshooting.existingClaim | string | `""` | When 'persistentVolumeClaim.create' is 'false', then use this value to define an already existing persistent volume claim. | +| spotfire-webplayer.volumes.troubleshooting.persistentVolumeClaim.create | bool | `false` | If 'true', then a 'PersistentVolumeClaim' will be created. | +| spotfire-webplayer.volumes.troubleshooting.persistentVolumeClaim.resources | object | `{"requests":{"storage":"2Gi"}}` | Specifies the standard Kubernetes resource requests and/or limits for the volumes.troubleshooting claims. | +| spotfire-webplayer.volumes.troubleshooting.persistentVolumeClaim.storageClassName | string | `""` | Specifies the name of the 'StorageClass' to use for the volumes.troubleshooting-claim. | +| spotfire-webplayer.volumes.troubleshooting.persistentVolumeClaim.volumeName | string | `nil` | Specifies the name of the persistent volume to use for the volumes.troubleshooting-claim. | +| spotfire-webplayer.webplayerConfig.resourcePool | string | `""` | The web player resource pool. | diff --git a/helm/charts/spotfire-platform/README.md.gotmpl b/helm/charts/spotfire-platform/README.md.gotmpl new file mode 100755 index 0000000..1c103db --- /dev/null +++ b/helm/charts/spotfire-platform/README.md.gotmpl @@ -0,0 +1,99 @@ +{{ template "chart.header" . }} + +{{ template "chart.deprecationWarning" . }} + +{{ template "chart.badgesSection" . }} + +{{ template "chart.description" . }} + +{{ template "chart.homepageLine" . }} + +{{ template "chart.maintainersSection" . }} + +{{ template "chart.sourcesSection" . }} + +{{ template "chart.requirementsSection" . }} + +## Overview + +The Spotfire Helm chart is an umbrella chart that includes multiple components for deploying a Spotfire analytics platform. It consists of the following components: + +- [spotfire-server](../spotfire-server/README.md) +- [spotfire-webplayer](../spotfire-webplayer/README.md) +- [spotfire-automationservices](../spotfire-automationservices/README.md) +- [spotfire-terrservice](../spotfire-terrservice/README.md) +- [spotfire-rservice](../spotfire-rservice/README.md) +- [spotfire-pythonservice](../spotfire-pythonservice/README.md) +- [PostgreSQL database](https://github.com/bitnami/charts/tree/main/bitnami/postgresql) ⚠️ + +Warning: The PostgreSQL chart is included as an example and is intended for demo and testing purposes only. It is important to note that the spotfire Helm chart does not take responsibility for data persistence in the Spotfire database. It is your responsibility to ensure that you have a proper data persistence strategy in place. Failure to do so may result in data loss. Please make sure you are familiar with the documentation of your chosen database (e.g., PostgreSQL, Oracle, SQL Server) and take appropriate measures to ensure data persistence. + +Note: For more advanced configurations, where you need multiple instances of a single chart, such as two web players with different configurations, you can either deploy the chart directly to add another instance or create new umbrella that suits your needs. The 'publicAddress' field is required. + +## Installation + +```bash +helm install my-release . --render-subchart-notes --set global.spotfire.acceptEUA=true \ + --set postgresql.enabled=true \ + --set spotfire-webplayer.enabled=true \ + --set spotfire-automationservices.enabled=true \ + --set spotfire-terrservice.enabled=true \ + --set spotfire-rservice.enabled=true \ + --set spotfire-pythonservice.enabled=true \ + --set spotfire-server.configuration.site.publicAddress=http://localhost/ +``` + +This will deploy the Spotfire platform with all components enabled using the embedded PostgreSQL database. + +### Using an external Spotfire database + +To use an external database, you need to provide the database connection details to the database. We will use a PostgreSQL database for this example but you can use any other database supported by Spotfire. + +First, install the [PostgreSQL](https://artifacthub.io/packages/helm/bitnami/postgresql) chart using Helm: + +```bash +helm repo add bitnami https://charts.bitnami.com/bitnami +helm install spotfiredatabase bitnami/postgresql \ + --version 15 \ + --set primary.persistence.enabled=false \ + --set primary.resourcesPreset=small \ + --set global.postgresql.auth.postgresPassword=PostgresAdminPassword +``` + +It will create a new non-persistent PostgreSQL database with the password `PostgresAdminPassword` and the service name `spotfiredatabase-postgresql`. + +Create a file named `spotfire-database.yaml` with the following content: + +```yaml +spotfire-server: + database: + bootstrap: + databaseUrl: "jdbc:postgresql://spotfiredatabase-postgresql/" + driverClass: "org.postgresql.Driver" + username: "spotfire" + password: "SpotfireDatabasePassword" + create-db: + enabled: true + adminUsername: "postgres" + adminPassword: "PostgresAdminPassword" + databaseUrl: "jdbc:postgresql://spotfiredatabase-postgresql/" + adminPasswordExistingSecret: + name: "" + key: "" +``` + +If needed, adjust the values in the file to match your database configuration. + +Then install the chart with the release name `my-release` using the database configuration: + +```bash +helm install my-release . --render-subchart-notes --set postgresql.enabled=false --set global.spotfire.acceptEUA=true --values spotfire-database.yaml +``` + +Note that the `postgresql.enabled` parameter is set to `false` to disable the embedded PostgreSQL database. + +## Usage + +For detailed usage instructions, please refer to the README.md files of the individual components. + +{{ template "chart.valuesSection" . }} diff --git a/helm/charts/spotfire-platform/templates/NOTES.txt b/helm/charts/spotfire-platform/templates/NOTES.txt new file mode 100644 index 0000000..43ffee9 --- /dev/null +++ b/helm/charts/spotfire-platform/templates/NOTES.txt @@ -0,0 +1,9 @@ + +spotfire-server enabled: true +spotfire-webplayer enabled: {{ (index .Values "spotfire-webplayer").enabled }} +spotfire-automationservices enabled: {{ (index .Values "spotfire-automationservices").enabled }} +spotfire-rservice enabled: {{ (index .Values "spotfire-rservice").enabled }} +spotfir-terrservice enabled {{ (index .Values "spotfire-terrservice").enabled }} +spotfire-pythonservice enabled: {{ (index .Values "spotfire-pythonservice").enabled }} + +Tip: Run 'helm install' or 'helm upgrade' with '--render-subchart-notes' to see the notes of the subcharts. diff --git a/helm/charts/spotfire-platform/test/basic-values.yaml b/helm/charts/spotfire-platform/test/basic-values.yaml new file mode 100644 index 0000000..9246e8b --- /dev/null +++ b/helm/charts/spotfire-platform/test/basic-values.yaml @@ -0,0 +1,8 @@ +global: + spotfire: + acceptEUA: true + +spotfire-server: + configuration: + site: + publicAddress: "https://example.domain" diff --git a/helm/charts/spotfire-platform/values.yaml b/helm/charts/spotfire-platform/values.yaml new file mode 100644 index 0000000..7b0cf78 --- /dev/null +++ b/helm/charts/spotfire-platform/values.yaml @@ -0,0 +1,97 @@ +global: + spotfire: + # -- Set to `true` to accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms). + acceptEUA: + + +# -- See [spotfire-server README.md](../spotfire-server/README.md) for configuration options +# @default -- - +spotfire-server: + # -- - + # @default -- The default database values are intended for use with the included PostgreSQL chart, postgresql.enabled=true. + database: + bootstrap: + #username: + #password: + databaseUrl: "jdbc:postgresql://{{ .Release.Name }}-postgresql/" + driverClass: "org.postgresql.Driver" + create-db: + enabled: true + adminUsername: "postgres" + #adminPassword: + adminPasswordExistingSecret: + name: "{{ .Release.Name }}-postgresql" + key: "postgres-password" + databaseUrl: "jdbc:postgresql://{{ .Release.Name }}-postgresql/" + + configuration: + site: + # -- - + publicAddress: "" + + +# -- See [PostgreSQL Helm Chart](https://github.com/bitnami/charts/tree/main/bitnami/postgresql) documentation. +#
+#
+# ⚠️ Warning: The PostgreSQL chart is included as an example and is intended +# for demo and testing purposes only. It is important to note that the +# spotfire Helm chart does not take responsibility for data persistence in the +# Spotfire database. It is your responsibility to ensure that you have a +# proper data persistence strategy in place. Failure to do so may result in +# data loss. Please make sure you are familiar with the documentation of your +# chosen database (e.g., PostgreSQL, Oracle, SQL Server) and take appropriate +# measures to ensure data persistence. +# @default -- - +postgresql: + # -- Enable or disable the PostgreSQL database component + enabled: false + +# -- See [spotfire-webplayer README.md](../spotfire-webplayer/README.md) for configuration options +# @default -- - +spotfire-webplayer: + # -- Enable or disable the Spotfire Web Player component + enabled: false + nodemanagerConfig: + serverBackendAddress: "{{ .Release.Name }}-spotfire-server" + logging: + logForwarderAddress: "{{ .Release.Name }}-log-forwarder" + +# -- See [spotfire-automationservices README.md](../spotfire-automationservices/README.md) for configuration options +# @default -- - +spotfire-automationservices: + # -- Enable or disable the Spotfire Automation Services component + enabled: false + nodemanagerConfig: + serverBackendAddress: "{{ .Release.Name }}-spotfire-server" + logging: + logForwarderAddress: "{{ .Release.Name }}-log-forwarder" + +# -- See [spotfire-rservice README.md](../spotfire-rservice/README.md) for configuration options +# @default -- - +spotfire-rservice: + # -- Enable or disable the Spotfire R Service component + enabled: false + nodemanagerConfig: + serverBackendAddress: "{{ .Release.Name }}-spotfire-server" + logging: + logForwarderAddress: "{{ .Release.Name }}-log-forwarder" + +# -- See [spotfire-pythonservice README.md](../spotfire-pythonservice/README.md) for configuration options +# @default -- - +spotfire-pythonservice: + # -- Enable or disable the Spotfire Python Service component + enabled: false + nodemanagerConfig: + serverBackendAddress: "{{ .Release.Name }}-spotfire-server" + logging: + logForwarderAddress: "{{ .Release.Name }}-log-forwarder" + +# -- See [spotfire-terrservice README.md](../spotfire-terrservice/README.md) for configuration options +# @default -- - +spotfire-terrservice: + # -- Enable or disable the Spotfire TERR Service component + enabled: false + nodemanagerConfig: + serverBackendAddress: "{{ .Release.Name }}-spotfire-server" + logging: + logForwarderAddress: "{{ .Release.Name }}-log-forwarder" \ No newline at end of file diff --git a/helm/charts/spotfire-pythonservice/Chart.yaml b/helm/charts/spotfire-pythonservice/Chart.yaml index 1736f86..80db10f 100755 --- a/helm/charts/spotfire-pythonservice/Chart.yaml +++ b/helm/charts/spotfire-pythonservice/Chart.yaml @@ -4,9 +4,9 @@ description: A Helm chart for Spotfire® Service for Python type: application -version: 0.2.4 +version: 0.3.0 -appVersion: "1.21.0" +appVersion: "1.21.1" kubeVersion: ">=1.24.0-0" @@ -24,7 +24,7 @@ keywords: dependencies: - name: spotfire-common repository: file://../spotfire-common - version: 0.2.4 + version: 0.3.0 annotations: license: Apache 2.0 diff --git a/helm/charts/spotfire-pythonservice/README.md b/helm/charts/spotfire-pythonservice/README.md index a668695..72c71da 100644 --- a/helm/charts/spotfire-pythonservice/README.md +++ b/helm/charts/spotfire-pythonservice/README.md @@ -1,6 +1,6 @@ # spotfire-pythonservice -![Version: 0.2.4](https://img.shields.io/badge/Version-0.2.4-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.21.0](https://img.shields.io/badge/AppVersion-1.21.0-informational?style=flat-square) +![Version: 0.3.0](https://img.shields.io/badge/Version-0.3.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.21.1](https://img.shields.io/badge/AppVersion-1.21.1-informational?style=flat-square) A Helm chart for Spotfire® Service for Python @@ -16,7 +16,7 @@ Kubernetes: `>=1.24.0-0` | Repository | Name | Version | |------------|------|---------| -| file://../spotfire-common | spotfire-common | 0.2.4 | +| file://../spotfire-common | spotfire-common | 0.3.0 | ## Overview @@ -171,15 +171,19 @@ See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command document When you upgrade to a newer Spotfire Server version and newer Spotfire services versions, upgrade the Spotfire Server first, and then upgrade the Spotfire services. -Some parameters might have been changed, moved or renamed and must be taken into consideration when upgrading the release. See [RELEASE-NOTES.md](../../../RELEASE-NOTES.md) for details. +Some parameters might have been changed, moved or renamed and must be taken into consideration when upgrading the release. See [release notes](https://github.com/spotfiresoftware/spotfire-cloud-deployment-kit/releases) for more information. ## Values | Key | Type | Default | Description | |-----|------|---------|-------------| +| global.spotfire.acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | +| global.spotfire.image.pullPolicy | string | `"IfNotPresent"` | The global container image pull policy. | +| global.spotfire.image.pullSecrets | list | `[]` | The global container image pull secrets. | +| global.spotfire.image.registry | string | `nil` | The global container image registry. Used for spotfire/ container images, unless it is overridden. | | acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | | affinity | object | `{}` | | -| configuration | object | `{}` | (object) Add [Custom configuration properties](https://docs.tibco.com/pub/sf-pysrv/latest/doc/html/TIB_sf-pysrv_install/_shared/install/topics/custom_configuration_properties.html). Keys under configuration should be named the same as the configuration property, for example 'engine.execution.timeout'. | +| configuration | object | `{}` | Add [Custom configuration properties](https://docs.tibco.com/pub/sf-pysrv/latest/doc/html/TIB_sf-pysrv_install/_shared/install/topics/custom_configuration_properties.html). Keys under configuration should be named the same as the configuration property, for example 'engine.execution.timeout'. | | extraContainers | list | `[]` | Additional sidecar containers to add to the service pod. | | extraEnvVars | list | `[]` | Additional environment variables. | | extraEnvVarsCM | string | `""` | The name of the ConfigMap containing additional environment variables. | @@ -189,18 +193,14 @@ Some parameters might have been changed, moved or renamed and must be taken into | extraVolumes | list | `[]` | Extra volumes for the service container. More info: `kubectl explain deployment.spec.template.spec.volumes`. | | fluentBitSidecar.image.pullPolicy | string | `"IfNotPresent"` | The image pull policy for the fluent-bit logging sidecar image. | | fluentBitSidecar.image.repository | string | `"fluent/fluent-bit"` | The image repository for fluent-bit logging sidecar. | -| fluentBitSidecar.image.tag | string | `"2.2.2"` | The image tag to use for fluent-bit logging sidecar. | +| fluentBitSidecar.image.tag | string | `"3.1.6"` | The image tag to use for fluent-bit logging sidecar. | | fluentBitSidecar.securityContext | object | `{}` | The securityContext setting for fluent-bit sidecar container. Overrides any securityContext setting on the Pod level. | | fullnameOverride | string | `""` | | -| global.spotfire.acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | -| global.spotfire.image.pullPolicy | string | `"IfNotPresent"` | The global container image pull policy. | -| global.spotfire.image.pullSecrets | list | `[]` | The global container image pull secrets. | -| global.spotfire.image.registry | string | `nil` | The global container image registry. Used for spotfire/ container images, unless it is overridden. | | image.pullPolicy | string | `nil` | The spotfire-server image pull policy. Overrides global.spotfire.image.pullPolicy. | | image.pullSecrets | list | `[]` | Image pull secrets. | | image.registry | string | `nil` | The image registry for spotfire-server. Overrides global.spotfire.image.registry value. | | image.repository | string | `"spotfire/spotfire-pythonservice"` | The spotfire-server image repository. | -| image.tag | string | `"1.21.0-1"` | The container image tag to use. | +| image.tag | string | `"1.21.1-1"` | The container image tag to use. | | kedaAutoscaling | object | `{"advanced":{},"cooldownPeriod":300,"enabled":false,"fallback":{},"maxReplicas":4,"minReplicas":1,"pollingInterval":30,"spotfireConfig":{"prometheusServerAddress":"http://prometheus-server.monitor.svc.cluster.local"},"threshold":null,"triggers":[]}` | KEDA autoscaling configuration. See https://keda.sh/docs/latest/concepts/scaling-deployments for more details. | | kedaAutoscaling.cooldownPeriod | int | `300` | The period to wait after the last trigger reported active before scaling the resource back to 0. | | kedaAutoscaling.maxReplicas | int | `4` | This setting is passed to the HPA definition that KEDA creates for a given resource and holds the maximum number of replicas of the target resource. | @@ -255,4 +255,4 @@ Some parameters might have been changed, moved or renamed and must be taken into | volumes.troubleshooting.persistentVolumeClaim.create | bool | `false` | If 'true', then a 'PersistentVolumeClaim' will be created. | | volumes.troubleshooting.persistentVolumeClaim.resources | object | `{"requests":{"storage":"2Gi"}}` | Specifies the standard Kubernetes resource requests and/or limits for the volumes.troubleshooting claims. | | volumes.troubleshooting.persistentVolumeClaim.storageClassName | string | `""` | Specifies the name of the 'StorageClass' to use for the volumes.troubleshooting-claim. | -| volumes.troubleshooting.persistentVolumeClaim.volumeName | string | `nil` | Specifies the name of the persistent volume to use for the volumes.troubleshooting-claim. | \ No newline at end of file +| volumes.troubleshooting.persistentVolumeClaim.volumeName | string | `nil` | Specifies the name of the persistent volume to use for the volumes.troubleshooting-claim. | diff --git a/helm/charts/spotfire-pythonservice/README.md.gotmpl b/helm/charts/spotfire-pythonservice/README.md.gotmpl index eb35eac..4a8eba7 100755 --- a/helm/charts/spotfire-pythonservice/README.md.gotmpl +++ b/helm/charts/spotfire-pythonservice/README.md.gotmpl @@ -167,6 +167,6 @@ See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command document When you upgrade to a newer Spotfire Server version and newer Spotfire services versions, upgrade the Spotfire Server first, and then upgrade the Spotfire services. -Some parameters might have been changed, moved or renamed and must be taken into consideration when upgrading the release. See [RELEASE-NOTES.md](../../../RELEASE-NOTES.md) for details. +Some parameters might have been changed, moved or renamed and must be taken into consideration when upgrading the release. See [release notes](https://github.com/spotfiresoftware/spotfire-cloud-deployment-kit/releases) for more information. -{{ template "chart.valuesSection" . }} \ No newline at end of file +{{ template "chart.valuesSection" . }} diff --git a/helm/charts/spotfire-pythonservice/deploy-packages-to-pv-with-job.yaml b/helm/charts/spotfire-pythonservice/deploy-packages-to-pv-with-job.yaml index 2d04b93..f86cc59 100644 --- a/helm/charts/spotfire-pythonservice/deploy-packages-to-pv-with-job.yaml +++ b/helm/charts/spotfire-pythonservice/deploy-packages-to-pv-with-job.yaml @@ -44,7 +44,7 @@ spec: spec: containers: - name: populate-packages - image: spotfire/spotfire-pythonservice:1.21.0 + image: spotfire/spotfire-pythonservice:1.21.1 command: ['sh', '-c', 'python -m pip install -t /packages -r /requirements.txt'] imagePullPolicy: Always volumeMounts: diff --git a/helm/charts/spotfire-pythonservice/values.yaml b/helm/charts/spotfire-pythonservice/values.yaml index 9439186..09c12fa 100755 --- a/helm/charts/spotfire-pythonservice/values.yaml +++ b/helm/charts/spotfire-pythonservice/values.yaml @@ -11,10 +11,6 @@ global: # -- The global container image pull policy. pullPolicy: IfNotPresent # -- The global container image pull secrets. - ## E.g. - ## pullSecrets: - ## - myRegistryKeySecretName - ## pullSecrets: [] nodemanagerConfig: @@ -31,7 +27,7 @@ image: # -- The spotfire-server image repository. repository: spotfire/spotfire-pythonservice # -- The container image tag to use. - tag: "1.21.0-1" + tag: "1.21.1-1" # -- The spotfire-server image pull policy. Overrides global.spotfire.image.pullPolicy. pullPolicy: # -- Image pull secrets. @@ -42,7 +38,7 @@ fluentBitSidecar: # -- The image repository for fluent-bit logging sidecar. repository: fluent/fluent-bit # -- The image tag to use for fluent-bit logging sidecar. - tag: "2.2.2" + tag: "3.1.6" # -- The image pull policy for the fluent-bit logging sidecar image. pullPolicy: IfNotPresent diff --git a/helm/charts/spotfire-rservice/Chart.yaml b/helm/charts/spotfire-rservice/Chart.yaml index 67b2332..a3576db 100755 --- a/helm/charts/spotfire-rservice/Chart.yaml +++ b/helm/charts/spotfire-rservice/Chart.yaml @@ -4,9 +4,9 @@ description: A Helm chart for Spotfire® Service for R type: application -version: 0.2.4 +version: 0.3.0 -appVersion: "1.21.0" +appVersion: "1.21.1" kubeVersion: ">=1.24.0-0" @@ -24,7 +24,7 @@ keywords: dependencies: - name: spotfire-common repository: file://../spotfire-common - version: 0.2.4 + version: 0.3.0 annotations: license: Apache 2.0 diff --git a/helm/charts/spotfire-rservice/README.md b/helm/charts/spotfire-rservice/README.md index 5de9cf0..cc6c445 100755 --- a/helm/charts/spotfire-rservice/README.md +++ b/helm/charts/spotfire-rservice/README.md @@ -1,6 +1,6 @@ # spotfire-rservice -![Version: 0.2.4](https://img.shields.io/badge/Version-0.2.4-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.21.0](https://img.shields.io/badge/AppVersion-1.21.0-informational?style=flat-square) +![Version: 0.3.0](https://img.shields.io/badge/Version-0.3.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.21.1](https://img.shields.io/badge/AppVersion-1.21.1-informational?style=flat-square) A Helm chart for Spotfire® Service for R @@ -16,7 +16,7 @@ Kubernetes: `>=1.24.0-0` | Repository | Name | Version | |------------|------|---------| -| file://../spotfire-common | spotfire-common | 0.2.4 | +| file://../spotfire-common | spotfire-common | 0.3.0 | ## Overview @@ -148,9 +148,13 @@ See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command document | Key | Type | Default | Description | |-----|------|---------|-------------| +| global.spotfire.acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | +| global.spotfire.image.pullPolicy | string | `"IfNotPresent"` | The global container image pull policy. | +| global.spotfire.image.pullSecrets | list | `[]` | The global container image pull secrets. | +| global.spotfire.image.registry | string | `nil` | The global container image registry. Used for spotfire/ container images, unless it is overridden. | | acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | | affinity | object | `{}` | | -| configuration | object | `{}` | (object) Add [Custom configuration properties](https://docs.tibco.com/pub/sf-rsrv/latest/doc/html/TIB_sf-rsrv_install/_shared/install/topics/custom_configuration_properties.html). Keys under configuration should be named the same as the configuration property, for example 'engine.execution.timeout'. | +| configuration | object | `{}` | Add [Custom configuration properties](https://docs.tibco.com/pub/sf-rsrv/latest/doc/html/TIB_sf-rsrv_install/_shared/install/topics/custom_configuration_properties.html). Keys under configuration should be named the same as the configuration property, for example 'engine.execution.timeout'. | | extraContainers | list | `[]` | Additional sidecar containers to add to the service pod. | | extraEnvVars | list | `[]` | Additional environment variables. | | extraEnvVarsCM | string | `""` | The name of the ConfigMap containing additional environment variables. | @@ -160,18 +164,14 @@ See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command document | extraVolumes | list | `[]` | Extra volumes for the service container. More info: `kubectl explain deployment.spec.template.spec.volumes`. | | fluentBitSidecar.image.pullPolicy | string | `"IfNotPresent"` | The image pull policy for the fluent-bit logging sidecar image. | | fluentBitSidecar.image.repository | string | `"fluent/fluent-bit"` | The image repository for fluent-bit logging sidecar. | -| fluentBitSidecar.image.tag | string | `"2.2.2"` | The image tag to use for fluent-bit logging sidecar. | +| fluentBitSidecar.image.tag | string | `"3.1.6"` | The image tag to use for fluent-bit logging sidecar. | | fluentBitSidecar.securityContext | object | `{}` | The securityContext setting for fluent-bit sidecar container. Overrides any securityContext setting on the Pod level. | | fullnameOverride | string | `""` | | -| global.spotfire.acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | -| global.spotfire.image.pullPolicy | string | `"IfNotPresent"` | The global container image pull policy. | -| global.spotfire.image.pullSecrets | list | `[]` | The global container image pull secrets. | -| global.spotfire.image.registry | string | `nil` | The global container image registry. Used for spotfire/ container images, unless it is overridden. | | image.pullPolicy | string | `nil` | The spotfire-server image pull policy. Overrides global.spotfire.image.pullPolicy. | | image.pullSecrets | list | `[]` | Image pull secrets. | | image.registry | string | `nil` | The image registry for spotfire-server. Overrides the global.spotfire.image.registry value. | | image.repository | string | `"spotfire/spotfire-rservice"` | The spotfire-server image repository. | -| image.tag | string | `"1.21.0-1"` | The container image tag to use. | +| image.tag | string | `"1.21.1-1"` | The container image tag to use. | | kedaAutoscaling | object | `{"advanced":{},"cooldownPeriod":300,"enabled":false,"fallback":{},"maxReplicas":4,"minReplicas":1,"pollingInterval":30,"spotfireConfig":{"prometheusServerAddress":"http://prometheus-server.monitor.svc.cluster.local"},"threshold":null,"triggers":[]}` | KEDA autoscaling configuration. See https://keda.sh/docs/latest/concepts/scaling-deployments/ for more details. | | kedaAutoscaling.cooldownPeriod | int | `300` | The period to wait after the last trigger reported active before scaling the resource back to 0. | | kedaAutoscaling.maxReplicas | int | `4` | This setting is passed to the HPA definition that KEDA creates for a given resource and holds the maximum number of replicas of the target resource. | diff --git a/helm/charts/spotfire-rservice/values.yaml b/helm/charts/spotfire-rservice/values.yaml index 0bae4af..03598b4 100755 --- a/helm/charts/spotfire-rservice/values.yaml +++ b/helm/charts/spotfire-rservice/values.yaml @@ -11,10 +11,6 @@ global: # -- The global container image pull policy. pullPolicy: IfNotPresent # -- The global container image pull secrets. - ## E.g. - ## pullSecrets: - ## - myRegistryKeySecretName - ## pullSecrets: [] nodemanagerConfig: @@ -31,7 +27,7 @@ image: # -- The spotfire-server image repository. repository: spotfire/spotfire-rservice # -- The container image tag to use. - tag: "1.21.0-1" + tag: "1.21.1-1" # -- The spotfire-server image pull policy. Overrides global.spotfire.image.pullPolicy. pullPolicy: # -- Image pull secrets. @@ -42,7 +38,7 @@ fluentBitSidecar: # -- The image repository for fluent-bit logging sidecar. repository: fluent/fluent-bit # -- The image tag to use for fluent-bit logging sidecar. - tag: "2.2.2" + tag: "3.1.6" # -- The image pull policy for the fluent-bit logging sidecar image. pullPolicy: IfNotPresent diff --git a/helm/charts/spotfire-server/Chart.yaml b/helm/charts/spotfire-server/Chart.yaml index 35ca9a3..d88065a 100644 --- a/helm/charts/spotfire-server/Chart.yaml +++ b/helm/charts/spotfire-server/Chart.yaml @@ -4,9 +4,9 @@ description: A Helm chart for Spotfire Server. type: application -version: 0.2.4 +version: 0.3.0 -appVersion: "14.4.0" +appVersion: "14.4.1" kubeVersion: ">=1.24.0-0" @@ -28,15 +28,15 @@ dependencies: - name: fluent-bit alias: log-forwarder repository: https://fluent.github.io/helm-charts - version: 0.43.* + version: 0.47.* condition: log-forwarder.enabled - name: haproxy repository: https://haproxytech.github.io/helm-charts - version: 1.20.* + version: 1.22.* condition: haproxy.enabled - name: spotfire-common repository: file://../spotfire-common - version: 0.2.4 + version: 0.3.0 annotations: license: Apache 2.0 diff --git a/helm/charts/spotfire-server/README.md b/helm/charts/spotfire-server/README.md index 88b1754..0cc8b99 100644 --- a/helm/charts/spotfire-server/README.md +++ b/helm/charts/spotfire-server/README.md @@ -1,6 +1,6 @@ # spotfire-server -![Version: 0.2.4](https://img.shields.io/badge/Version-0.2.4-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 14.4.0](https://img.shields.io/badge/AppVersion-14.4.0-informational?style=flat-square) +![Version: 0.3.0](https://img.shields.io/badge/Version-0.3.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 14.4.1](https://img.shields.io/badge/AppVersion-14.4.1-informational?style=flat-square) A Helm chart for Spotfire Server. @@ -16,9 +16,9 @@ Kubernetes: `>=1.24.0-0` | Repository | Name | Version | |------------|------|---------| -| file://../spotfire-common | spotfire-common | 0.2.4 | -| https://fluent.github.io/helm-charts | log-forwarder(fluent-bit) | 0.43.* | -| https://haproxytech.github.io/helm-charts | haproxy | 1.20.* | +| file://../spotfire-common | spotfire-common | 0.3.0 | +| https://fluent.github.io/helm-charts | log-forwarder(fluent-bit) | 0.47.* | +| https://haproxytech.github.io/helm-charts | haproxy | 1.22.* | ## Overview @@ -111,7 +111,10 @@ The database is deployed as a container and, by default, the PostgreSQL Helm cha 1. Add the Bitnami charts repository and install a Postgresql database using the [Bitnami's PostgreSQL chart](https://artifacthub.io/packages/helm/bitnami/postgresql): ```bash helm repo add bitnami https://charts.bitnami.com/bitnami - helm install vanilla-tssdb bitnami/postgresql + helm install vanilla-tssdb bitnami/postgresql \ + --version 15 \ + --set primary.persistence.enabled=false \ + --set primary.resourcesPreset=small ``` 2. Export the Postgresql autogenerated random password: @@ -244,7 +247,7 @@ kedaAutoscaling: #### Upgrading helm chart version -Some parameters might have been changed, moved, or renamed. They must be taken into consideration when upgrading the release. See [RELEASE-NOTES.md](../../../RELEASE-NOTES.md) for details. +Some parameters might have been changed, moved or renamed and must be taken into consideration when upgrading the release. See [release notes](https://github.com/spotfiresoftware/spotfire-cloud-deployment-kit/releases) for more information. #### Upgrading the Spotfire Server version @@ -260,9 +263,11 @@ See the [Upgrading Spotfire](https://docs.tibco.com/pub/spotfire_server/latest/d If you are upgrading to a newer Spotfire Server version and Spotfire services versions, first upgrade the Spotfire Server, and then upgrade the Spotfire services. -##### Disabling automatic database schema upgrade +##### Database upgrade -If you prefer to disable the automatic Spotfire database schema upgrade, you can set the `database.upgrade` value to *false*. However, in this case, you must manually upgrade the database. +If you prefer to let the Helm chart to automatically perform Spotfire database schema upgrade, you can set the `database.upgrade` value to *true*. + +By default automatic database upgrade is disabled meaning you must manually upgrade the database when installing a new Spotfire server version that requires the Spotfire database to be upgraded. ##### Backing up the database @@ -539,6 +544,10 @@ For more details, see for example | Key | Type | Default | Description | |-----|------|---------|-------------| +| global.spotfire.acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | +| global.spotfire.image.pullPolicy | string | `"IfNotPresent"` | The global container image pull policy. | +| global.spotfire.image.pullSecrets | list | `[]` | The global container image pull secrets. | +| global.spotfire.image.registry | string | `nil` | The global container image registry. Used for container images unless overridden. | | acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | | affinity | object | `{}` | | | cliPod.affinity | object | `{}` | | @@ -553,7 +562,7 @@ For more details, see for example | cliPod.image.pullSecrets | list | `[]` | | | cliPod.image.registry | string | `nil` | The image registry for spotfireConfig. Overrides global.spotfire.image.registry value. | | cliPod.image.repository | string | `"spotfire/spotfire-config"` | The spotfireConfig image repository. | -| cliPod.image.tag | string | `"14.4.0-1"` | The spotfireConfig container image tag to use. | +| cliPod.image.tag | string | `"14.4.1-1"` | The spotfireConfig container image tag to use. | | cliPod.logLevel | string | `""` | Set to DEBUG or TRACE to increase log level. Defaults to INFO if unset. | | cliPod.nodeSelector | object | `{}` | | | cliPod.podAnnotations | object | `{}` | Podannotations for cliPod | @@ -571,7 +580,7 @@ For more details, see for example | configJob.image.pullSecrets | list | `[]` | | | configJob.image.registry | string | `nil` | The image registry for spotfireConfig. Overrides `global.spotfire.image.registry` value. | | configJob.image.repository | string | `"spotfire/spotfire-config"` | The spotfireConfig image repository. | -| configJob.image.tag | string | `"14.4.0-1"` | The spotfireConfig container image tag to use. | +| configJob.image.tag | string | `"14.4.1-1"` | The spotfireConfig container image tag to use. | | configJob.logLevel | string | `""` | Set to `DEBUG` or `TRACE` to increase log level. Defaults to `INFO` if unset. | | configJob.nodeSelector | object | `{}` | | | configJob.podAnnotations | object | `{}` | Podannotations for configJob | @@ -606,7 +615,7 @@ For more details, see for example | configuration.deployment.defaultDeployment.image.pullSecrets | list | `[]` | | | configuration.deployment.defaultDeployment.image.registry | string | `nil` | The image registry for spotfire-deployment. Overrides `global.spotfire.image.registry` value. | | configuration.deployment.defaultDeployment.image.repository | string | `"spotfire/spotfire-deployment"` | The spotfire-deployment image repository. | -| configuration.deployment.defaultDeployment.image.tag | string | `"14.4.0-1"` | The container image tag to use. | +| configuration.deployment.defaultDeployment.image.tag | string | `"14.4.1-1"` | The container image tag to use. | | configuration.deployment.enabled | bool | `true` | When enabled spotfire deployment areas will be created by the configuration job. See also `volumes.deployment`. | | configuration.draining | object | `{"enabled":true,"minimumSeconds":90,"publishNotReadyAddresses":true,"timeoutSeconds":180}` | Configuration of the Spotfire Server container lifecycle PreStop hook. | | configuration.draining.enabled | bool | `true` | Enables or disables the container lifecycle PreStop hook. | @@ -640,7 +649,7 @@ For more details, see for example | database.create-db.oracleTablespacePrefix | string | `""` | Specify the value in case of Oracle database, otherwise keep it blank. | | database.create-db.spotfiredbDbname | string | `"spotfire"` | Database name to be created to hold the Spotfire Server database schemas. | | database.create-db.variant | string | `""` | For connecting to MS SQL or Oracle on Amazon RDS, specify `rds`, for MS SQL on Azure, specify `azure`, otherwise omit the option. | -| database.upgrade | bool | `true` | Often new Spotfire server version requires an upgraded database. If true, the database will be upgrade to match the server version being deployed. | +| database.upgrade | bool | `false` | Often new Spotfire server version requires an upgraded database. If true, the database will be upgrade to match the server version being deployed. | | extraContainers | list | `[]` | Additional sidecar containers to add to the Spotfire server pod. More info: `kubectl explain deployment.spec.template.spec.containers` | | extraEnvVars | list | `[]` | Additional environment variables that all spotfire-server pods use. | | extraEnvVarsCM | string | `""` | | @@ -650,12 +659,8 @@ For more details, see for example | extraVolumes | list | `[]` | Extra volumes for the spotfire-server container. More info: `kubectl explain deployment.spec.template.spec.volumes` | | fluentBitSidecar.image.pullPolicy | string | `"IfNotPresent"` | The image pull policy for the fluent-bit logging sidecar image. | | fluentBitSidecar.image.repository | string | `"fluent/fluent-bit"` | The image repository for fluent-bit logging sidecar. | -| fluentBitSidecar.image.tag | string | `"2.2.2"` | The image tag to use for fluent-bit logging sidecar. | +| fluentBitSidecar.image.tag | string | `"3.1.6"` | The image tag to use for fluent-bit logging sidecar. | | fluentBitSidecar.securityContext | object | `{}` | The securityContext setting for fluent-bit sidecar container. Overrides any securityContext setting on the Pod level. More info: `kubectl explain pod.spec.securityContext` | -| global.spotfire.acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | -| global.spotfire.image.pullPolicy | string | `"IfNotPresent"` | The global container image pull policy. | -| global.spotfire.image.pullSecrets | list | `[]` | The global container image pull secrets. | -| global.spotfire.image.registry | string | `nil` | The global container image registry. Used for container images unless overridden. | | haproxy.config | string | The chart creates a configuration automatically. | The haproxy configuration file template. For implementation details see templates/haproxy-config.tpl. | | haproxy.enabled | bool | `true` | | | haproxy.includes | object | `{}` | | @@ -697,7 +702,7 @@ For more details, see for example | image.pullSecrets | list | `[]` | spotfire-deployment image pull secrets. | | image.registry | string | `nil` | The image registry for spotfire-server. Overrides `global.spotfire.image.registry` value. | | image.repository | string | `"spotfire/spotfire-server"` | The spotfire-server image repository. | -| image.tag | string | `"14.4.0-1"` | The container image tag to use. | +| image.tag | string | `"14.4.1-1"` | The container image tag to use. | | ingress.annotations | object | `{}` | Annotations for the ingress object. See documentation for your ingress controller for valid annotations. | | ingress.enabled | bool | `false` | Enables configuration of ingress to expose Spotfire Server. Requires ingress support in the Kubernetes cluster. | | ingress.hosts[0].host | string | `"spotfire.local"` | | diff --git a/helm/charts/spotfire-server/README.md.gotmpl b/helm/charts/spotfire-server/README.md.gotmpl index 6f36268..9c1b792 100644 --- a/helm/charts/spotfire-server/README.md.gotmpl +++ b/helm/charts/spotfire-server/README.md.gotmpl @@ -106,7 +106,10 @@ The database is deployed as a container and, by default, the PostgreSQL Helm cha 1. Add the Bitnami charts repository and install a Postgresql database using the [Bitnami's PostgreSQL chart](https://artifacthub.io/packages/helm/bitnami/postgresql): ```bash helm repo add bitnami https://charts.bitnami.com/bitnami - helm install vanilla-tssdb bitnami/postgresql + helm install vanilla-tssdb bitnami/postgresql \ + --version 15 \ + --set primary.persistence.enabled=false \ + --set primary.resourcesPreset=small ``` 2. Export the Postgresql autogenerated random password: @@ -239,7 +242,7 @@ kedaAutoscaling: #### Upgrading helm chart version -Some parameters might have been changed, moved, or renamed. They must be taken into consideration when upgrading the release. See [RELEASE-NOTES.md](../../../RELEASE-NOTES.md) for details. +Some parameters might have been changed, moved or renamed and must be taken into consideration when upgrading the release. See [release notes](https://github.com/spotfiresoftware/spotfire-cloud-deployment-kit/releases) for more information. #### Upgrading the Spotfire Server version @@ -255,9 +258,11 @@ See the [Upgrading Spotfire](https://docs.tibco.com/pub/spotfire_server/latest/d If you are upgrading to a newer Spotfire Server version and Spotfire services versions, first upgrade the Spotfire Server, and then upgrade the Spotfire services. -##### Disabling automatic database schema upgrade +##### Database upgrade -If you prefer to disable the automatic Spotfire database schema upgrade, you can set the `database.upgrade` value to *false*. However, in this case, you must manually upgrade the database. +If you prefer to let the Helm chart to automatically perform Spotfire database schema upgrade, you can set the `database.upgrade` value to *true*. + +By default automatic database upgrade is disabled meaning you must manually upgrade the database when installing a new Spotfire server version that requires the Spotfire database to be upgraded. ##### Backing up the database diff --git a/helm/charts/spotfire-server/config-job-scripts/main.sh b/helm/charts/spotfire-server/config-job-scripts/main.sh index 61e920b..2f5f7af 100755 --- a/helm/charts/spotfire-server/config-job-scripts/main.sh +++ b/helm/charts/spotfire-server/config-job-scripts/main.sh @@ -129,6 +129,9 @@ logHeader "Bootstrapping" if [ "${JOB_UPGRADE_DATABASE}" = "true" ]; then logHeader "Upgrading database" /opt/spotfire/scripts/database-upgrade.sh +else + logHeader "Skipping database upgrade step" + echo "The server will fail to start if the database requires an upgrade and 'database.upgrade' has been set to false." fi logHeader "Configuration and setup" diff --git a/helm/charts/spotfire-server/config/fluent-bit/tss.parsers.fluentbit.conf b/helm/charts/spotfire-server/config/fluent-bit/tss.parsers.fluentbit.conf index 6a33c78..223cc18 100644 --- a/helm/charts/spotfire-server/config/fluent-bit/tss.parsers.fluentbit.conf +++ b/helm/charts/spotfire-server/config/fluent-bit/tss.parsers.fluentbit.conf @@ -165,4 +165,23 @@ Name tss.cspviolations Format json Time_Key time - Time_Format %Y-%m-%dT%H:%M:%S,%L%z \ No newline at end of file + Time_Format %Y-%m-%dT%H:%M:%S,%L%z + +[PARSER] + Name tss.externalstoragelog + Format regex + + Regex /^(?\S+) (?\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2},\d{3}(\+|-)\d{4}): (?.*)/ + + Time_Key Timestamp + Time_Format %Y-%m-%dT%H:%M:%S,%L%z + +[MULTILINE_PARSER] + Name tss.externalstoragelog-multiline + Type regex + Flush_Timeout 1000 + + Regex /^(?\S+) (?\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2},\d{3}(\+|-)\d{4}): (?.*)/ + + Time_Key Timestamp + Time_Format %Y-%m-%dT%H:%M:%S,%L%z diff --git a/helm/charts/spotfire-server/config/fluent-bit/tss.tail.fluentbit.conf b/helm/charts/spotfire-server/config/fluent-bit/tss.tail.fluentbit.conf index 2c603e7..7a8cc74 100644 --- a/helm/charts/spotfire-server/config/fluent-bit/tss.tail.fluentbit.conf +++ b/helm/charts/spotfire-server/config/fluent-bit/tss.tail.fluentbit.conf @@ -91,7 +91,7 @@ Parser tss.actionlog - Path ${TSS_HOME}${FILE_SEPARATOR}logs${FILE_SEPARATOR}actionlogs${FILE_SEPARATOR}actionlog.log + Path ${TSS_HOME}${FILE_SEPARATOR}logs${FILE_SEPARATOR}actionlogs${FILE_SEPARATOR}actionlog*.log Db ${TSS_HOME}${FILE_SEPARATOR}logs${FILE_SEPARATOR}tss.fluentbit.db Read_from_Head True @@ -329,7 +329,7 @@ Parser tss.actionlog - Path ${TSS_HOME}${FILE_SEPARATOR}logs${FILE_SEPARATOR}informationservices${FILE_SEPARATOR}actionlogs${FILE_SEPARATOR}actionlog.log + Path ${TSS_HOME}${FILE_SEPARATOR}logs${FILE_SEPARATOR}informationservices${FILE_SEPARATOR}actionlogs${FILE_SEPARATOR}actionlog*.log Db ${TSS_HOME}${FILE_SEPARATOR}logs${FILE_SEPARATOR}tss.fluentbit.db Read_from_Head True @@ -395,4 +395,49 @@ Reserve_Data on Parser threaddump.epochseconds key_name LogFilePath - Preserve_Key off \ No newline at end of file + Preserve_Key off + +[INPUT] + Name tail + Alias tss.awss3request + Tag tss.awss3request + + Multiline on + Multiline_Flush 1 + Parser_Firstline tss.externalstoragelog + + Path ${TSS_HOME}${FILE_SEPARATOR}logs${FILE_SEPARATOR}s3request.log + Db ${TSS_HOME}${FILE_SEPARATOR}logs${FILE_SEPARATOR}tss.fluentbit.db + + Read_from_Head True + Buffer_Max_Size 64KB + +[INPUT] + Name tail + Alias tss.googlecloudstoragerequest + Tag tss.googlecloudstoragerequest + + Multiline on + Multiline_Flush 1 + Parser_Firstline tss.externalstoragelog + + Path ${TSS_HOME}${FILE_SEPARATOR}logs${FILE_SEPARATOR}google.cloud.storage.request.log + Db ${TSS_HOME}${FILE_SEPARATOR}logs${FILE_SEPARATOR}tss.fluentbit.db + + Read_from_Head True + Buffer_Max_Size 64KB + +[INPUT] + Name tail + Alias tss.azureblobstoragerequest + Tag tss.azureblobstoragerequest + + Multiline on + Multiline_Flush 1 + Parser_Firstline tss.externalstoragelog + + Path ${TSS_HOME}${FILE_SEPARATOR}logs${FILE_SEPARATOR}azure.blob.Storage.request.log + Db ${TSS_HOME}${FILE_SEPARATOR}logs${FILE_SEPARATOR}tss.fluentbit.db + + Read_from_Head True + Buffer_Max_Size 64KB \ No newline at end of file diff --git a/helm/charts/spotfire-server/templates/NOTES.txt b/helm/charts/spotfire-server/templates/NOTES.txt index db2a0e4..bee2b00 100644 --- a/helm/charts/spotfire-server/templates/NOTES.txt +++ b/helm/charts/spotfire-server/templates/NOTES.txt @@ -1,65 +1 @@ - -- Login credentials for spotfire admin user - - # Spotfire Admin password for "{{ .Values.configuration.spotfireAdmin.username }}": - export SPOTFIREADMIN_PASSWORD=$(kubectl get secrets --namespace {{ .Release.Namespace }} {{ include "spotfire-server.spotfireadmin.secret.name" . }} -o jsonpath="{.data.{{ include "spotfire-server.spotfireadmin.secret.passwordkey" . }}}" | base64 --decode) - -- Spotfire database credentials - - # Database password for "{{ .Values.database.bootstrap.username }}": - export SPOTFIREDB_PASSWORD=$(kubectl get secrets --namespace {{ .Release.Namespace }} {{ include "spotfire-server.spotfiredatabase.secret.name" . }} -o jsonpath="{.data.SPOTFIREDB_PASSWORD}" | base64 --decode) - -- Application URL -{{ if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "spotfire-server.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "spotfire-server.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "spotfire-server.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "spotfire-server.name" . }},app.kubernetes.io/instance={{ .Release.Name }}, app.kubernetes.io/component=server, app.kubernetes.io/part-of=spotfire" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} - - # The server backend address is {{ include "spotfire-server.fullname" . }} - -{{- if .Values.cliPod.enabled }} - -- Configuration tool - - # To get a shell on the always on configuration pod use this command: - kubectl --namespace {{ .Release.Namespace }} exec -it $(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/component=cli, app.kubernetes.io/instance={{ .Release.Name }}, app.kubernetes.io/part-of=spotfire" -o jsonpath="{.items[0].metadata.name}" ) -- bash - - # Run './bootstrap.sh' to create a bootstrap.xml before starting to use config.sh. -{{- end }} - -- Accessing and viewing logs - - # To view the logs of configuration job: - kubectl --namespace {{ .Release.Namespace }} logs jobs.batch/{{ include "spotfire-server.configJob.fullname" . }} -c config-job - -{{- if (index .Values "log-forwarder").enabled }} - - # Application logs are sent to default address {{ template "spotfire-server.log-forwarder.fullname" . }}. To view the logs on the log-forwarder run: - export LOG_FORWARDER_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name=log-forwarder,app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - kubectl --namespace {{ .Release.Namespace }} logs "${LOG_FORWARDER_NAME}" -c log-forwarder -{{- else if (tpl .Values.logging.logForwarderAddress $) }} - - # Application logs are sent to non-default address {{ template "spotfire-server.log-forwarder.fullname" . }} -{{- else }} - - # Log forwarding is disabled. To view logs for spotfire server pods, run: - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "spotfire-server.name" . }}, app.kubernetes.io/instance={{ .Release.Name }}, app.kubernetes.io/component=server, app.kubernetes.io/part-of=spotfire" -o jsonpath="{.items[0].metadata.name}") - kubectl --namespace {{ .Release.Namespace }} logs "${POD_NAME}" -c fluent-bit -{{- end }} +{{- include "spotfire-server.notes" . -}} \ No newline at end of file diff --git a/helm/charts/spotfire-server/templates/config-job/_notes.tpl b/helm/charts/spotfire-server/templates/config-job/_notes.tpl new file mode 100644 index 0000000..66d32ea --- /dev/null +++ b/helm/charts/spotfire-server/templates/config-job/_notes.tpl @@ -0,0 +1,70 @@ +{{- if not .Values.database.upgrade }} +Note: Database upgrade is not enabled. Set .Values.database.upgrade to true to enable automatic database upgrade on Helm install or upgrade. +{{- end }} + +{{- define "spotfire-server.notes" -}} +- Login credentials for spotfire admin user + + # Spotfire Admin password for "{{ .Values.configuration.spotfireAdmin.username }}": + export SPOTFIREADMIN_PASSWORD=$(kubectl get secrets --namespace {{ .Release.Namespace }} {{ include "spotfire-server.spotfireadmin.secret.name" . }} -o jsonpath="{.data.{{ include "spotfire-server.spotfireadmin.secret.passwordkey" . }}}" | base64 --decode) + +- Spotfire database credentials + + # Database password for "{{ .Values.database.bootstrap.username }}": + export SPOTFIREDB_PASSWORD=$(kubectl get secrets --namespace {{ .Release.Namespace }} {{ include "spotfire-server.spotfiredatabase.secret.name" . }} -o jsonpath="{.data.SPOTFIREDB_PASSWORD}" | base64 --decode) + +- Application URL +{{ if .Values.ingress.enabled }} +{{- range $host := .Values.ingress.hosts }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }} + {{- end }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "spotfire-server.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "spotfire-server.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "spotfire-server.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "spotfire-server.name" . }},app.kubernetes.io/instance={{ .Release.Name }}, app.kubernetes.io/component=server, app.kubernetes.io/part-of=spotfire" -o jsonpath="{.items[0].metadata.name}") + export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT +{{- end }} + + # The server backend address is {{ include "spotfire-server.fullname" . }} + +{{- if .Values.cliPod.enabled }} + +- Configuration tool + + # To get a shell on the always on configuration pod use this command: + kubectl --namespace {{ .Release.Namespace }} exec -it $(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/component=cli, app.kubernetes.io/instance={{ .Release.Name }}, app.kubernetes.io/part-of=spotfire" -o jsonpath="{.items[0].metadata.name}" ) -- bash + + # Run './bootstrap.sh' to create a bootstrap.xml before starting to use config.sh. +{{- end }} + +- Accessing and viewing logs + + # To view the logs of configuration job: + kubectl --namespace {{ .Release.Namespace }} logs jobs.batch/{{ include "spotfire-server.configJob.fullname" . }} -c config-job + +{{- if (index .Values "log-forwarder").enabled }} + + # Application logs are sent to default address {{ template "spotfire-server.log-forwarder.fullname" . }}. To view the logs on the log-forwarder run: + export LOG_FORWARDER_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name=log-forwarder,app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + kubectl --namespace {{ .Release.Namespace }} logs "${LOG_FORWARDER_NAME}" -c log-forwarder +{{- else if (tpl .Values.logging.logForwarderAddress $) }} + + # Application logs are sent to non-default address {{ template "spotfire-server.log-forwarder.fullname" . }} +{{- else }} + + # Log forwarding is disabled. To view logs for spotfire server pods, run: + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "spotfire-server.name" . }}, app.kubernetes.io/instance={{ .Release.Name }}, app.kubernetes.io/component=server, app.kubernetes.io/part-of=spotfire" -o jsonpath="{.items[0].metadata.name}") + kubectl --namespace {{ .Release.Namespace }} logs "${POD_NAME}" -c fluent-bit +{{- end }} +{{- end }} \ No newline at end of file diff --git a/helm/charts/spotfire-server/templates/haproxy-config.tpl b/helm/charts/spotfire-server/templates/haproxy-config.tpl index fca6fd7..ef1b507 100644 --- a/helm/charts/spotfire-server/templates/haproxy-config.tpl +++ b/helm/charts/spotfire-server/templates/haproxy-config.tpl @@ -31,7 +31,17 @@ frontend stats option dontlog-normal {{- end }} + # external health check (/health) and readiness (/up) + acl acl_backend_down nbsrv(spotfire) lt 1 + http-request return status 503 content-type "text/plain" string "Service unavailable" if { path /health && acl_backend_down } + http-request return status 200 content-type "text/plain" string "OK" if { path /health } + + http-request return status 200 content-type "text/plain" string "OK" if { path /up } + + # Prometheus metrics http-request use-service prometheus-exporter if { path {{ index .Values "podAnnotations" "prometheus.io/path" }} } + + # Stats stats enable stats uri /stats stats refresh 10s diff --git a/helm/charts/spotfire-server/values.yaml b/helm/charts/spotfire-server/values.yaml index 25d1d1f..a918432 100644 --- a/helm/charts/spotfire-server/values.yaml +++ b/helm/charts/spotfire-server/values.yaml @@ -16,10 +16,6 @@ global: # -- The global container image pull policy. pullPolicy: IfNotPresent # -- The global container image pull secrets. - ## E.g. - ## pullSecrets: - ## - myRegistryKeySecretName - ## pullSecrets: [] # spotfire-server image settings @@ -29,7 +25,7 @@ image: # -- The spotfire-server image repository. repository: spotfire/spotfire-server # -- The container image tag to use. - tag: "14.4.0-1" + tag: "14.4.1-1" # -- The spotfire-server image pull policy. Overrides `global.spotfire.image.pullPolicy`. pullPolicy: ## Optionally specify an array of imagePullSecrets. @@ -41,7 +37,7 @@ fluentBitSidecar: # -- The image repository for fluent-bit logging sidecar. repository: fluent/fluent-bit # -- The image tag to use for fluent-bit logging sidecar. - tag: "2.2.2" + tag: "3.1.6" # -- The image pull policy for the fluent-bit logging sidecar image. pullPolicy: IfNotPresent @@ -246,7 +242,7 @@ cliPod: # -- The spotfireConfig image repository. repository: spotfire/spotfire-config # -- The spotfireConfig container image tag to use. - tag: "14.4.0-1" + tag: "14.4.1-1" # -- The spotfireConfig image pull policy. Overrides global.spotfire.image.pullPolicy. pullPolicy: # -- The spotfireConfig image pull secrets. @@ -295,7 +291,7 @@ configJob: # -- The spotfireConfig image repository. repository: spotfire/spotfire-config # -- The spotfireConfig container image tag to use. - tag: "14.4.0-1" + tag: "14.4.1-1" # -- The spotfireConfig image pull policy. Overrides `global.spotfire.image.pullPolicy` value. pullPolicy: # -- The spotfireConfig image pull secrets. @@ -432,7 +428,7 @@ database: # -- Specify the value in case of Oracle database, otherwise keep it blank. oracleRootfolder: "" # -- Often new Spotfire server version requires an upgraded database. If true, the database will be upgrade to match the server version being deployed. - upgrade: true + upgrade: false configuration: # -- When to apply configurationScripts, commandScripts, admin user creation and action log settings. @@ -570,7 +566,7 @@ configuration: # -- The spotfire-deployment image repository. repository: spotfire/spotfire-deployment # -- The container image tag to use. - tag: "14.4.0-1" + tag: "14.4.1-1" # -- The spotfire-deployment image pull policy. Overrides `global.spotfire.image.pullPolicy`. pullPolicy: ## Optionally specify an array of imagePullSecrets. @@ -663,10 +659,8 @@ troubleshooting: spotfireServerJava: # -- Additional `JAVA_OPTS` for spotfire-server pods. - ## Example - ## extraJavaOpts: - ## - -Dsystem.property=value extraJavaOpts: [] + # - -Dsystem.property=value # =============================== # haproxy diff --git a/helm/charts/spotfire-terrservice/Chart.yaml b/helm/charts/spotfire-terrservice/Chart.yaml index cddef89..dee72f9 100755 --- a/helm/charts/spotfire-terrservice/Chart.yaml +++ b/helm/charts/spotfire-terrservice/Chart.yaml @@ -4,9 +4,9 @@ description: A Helm chart for Spotfire® Enterprise Runtime for R - Server Editi type: application -version: 0.2.4 +version: 0.3.0 -appVersion: "1.21.0" +appVersion: "1.21.1" kubeVersion: ">=1.24.0-0" @@ -24,7 +24,7 @@ keywords: dependencies: - name: spotfire-common repository: file://../spotfire-common - version: 0.2.4 + version: 0.3.0 annotations: license: Apache 2.0 diff --git a/helm/charts/spotfire-terrservice/README.md b/helm/charts/spotfire-terrservice/README.md index c694ac3..6239fdb 100644 --- a/helm/charts/spotfire-terrservice/README.md +++ b/helm/charts/spotfire-terrservice/README.md @@ -1,6 +1,6 @@ # spotfire-terrservice -![Version: 0.2.4](https://img.shields.io/badge/Version-0.2.4-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.21.0](https://img.shields.io/badge/AppVersion-1.21.0-informational?style=flat-square) +![Version: 0.3.0](https://img.shields.io/badge/Version-0.3.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.21.1](https://img.shields.io/badge/AppVersion-1.21.1-informational?style=flat-square) A Helm chart for Spotfire® Enterprise Runtime for R - Server Edition @@ -16,7 +16,7 @@ Kubernetes: `>=1.24.0-0` | Repository | Name | Version | |------------|------|---------| -| file://../spotfire-common | spotfire-common | 0.2.4 | +| file://../spotfire-common | spotfire-common | 0.3.0 | ## Overview @@ -144,15 +144,19 @@ See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command document When you upgrade to a newer Spotfire Server version and newer Spotfire services versions, upgrade the Spotfire Server first, and then upgrade the Spotfire services. -Some parameters might have been changed, moved or renamed and must be taken into consideration when upgrading the release. See [RELEASE-NOTES.md](../../../RELEASE-NOTES.md) for details. +Some parameters might have been changed, moved or renamed and must be taken into consideration when upgrading the release. See [release notes](https://github.com/spotfiresoftware/spotfire-cloud-deployment-kit/releases) for more information. ## Values | Key | Type | Default | Description | |-----|------|---------|-------------| +| global.spotfire.acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | +| global.spotfire.image.pullPolicy | string | `"IfNotPresent"` | The global container image pull policy. | +| global.spotfire.image.pullSecrets | list | `[]` | The global container image pull secrets. | +| global.spotfire.image.registry | string | `nil` | The global container image registry. Used for spotfire/ container images, unless it is overridden. | | acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | | affinity | object | `{}` | | -| configuration | object | `{}` | (object) Add [Custom configuration properties](https://docs.tibco.com/pub/terrsrv/latest/doc/html/TIB_terrsrv_install/_shared/install/topics/custom_configuration_properties.html). Keys under configuration should be named the same as the configuration property, for example 'engine.execution.timeout'. | +| configuration | object | `{}` | Add [Custom configuration properties](https://docs.tibco.com/pub/terrsrv/latest/doc/html/TIB_terrsrv_install/_shared/install/topics/custom_configuration_properties.html). Keys under configuration should be named the same as the configuration property, for example 'engine.execution.timeout'. | | extraContainers | list | `[]` | Additional sidecar containers to add to the service pod. | | extraEnvVars | list | `[]` | Additional environment variables. | | extraEnvVarsCM | string | `""` | The name of the ConfigMap containing additional environment variables. | @@ -162,18 +166,14 @@ Some parameters might have been changed, moved or renamed and must be taken into | extraVolumes | list | `[]` | Extra volumes for the service container. More info: `kubectl explain deployment.spec.template.spec.volumes`. | | fluentBitSidecar.image.pullPolicy | string | `"IfNotPresent"` | The image pull policy for the fluent-bit logging sidecar image. | | fluentBitSidecar.image.repository | string | `"fluent/fluent-bit"` | The image repository for fluent-bit logging sidecar. | -| fluentBitSidecar.image.tag | string | `"2.2.2"` | The image tag to use for fluent-bit logging sidecar. | +| fluentBitSidecar.image.tag | string | `"3.1.6"` | The image tag to use for fluent-bit logging sidecar. | | fluentBitSidecar.securityContext | object | `{}` | The securityContext setting for fluent-bit sidecar container. Overrides any securityContext setting on the Pod level. | | fullnameOverride | string | `""` | | -| global.spotfire.acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | -| global.spotfire.image.pullPolicy | string | `"IfNotPresent"` | The global container image pull policy. | -| global.spotfire.image.pullSecrets | list | `[]` | The global container image pull secrets. | -| global.spotfire.image.registry | string | `nil` | The global container image registry. Used for spotfire/ container images, unless it is overridden. | | image.pullPolicy | string | `nil` | The spotfire-server image pull policy. Overrides global.spotfire.image.pullPolicy. | | image.pullSecrets | list | `[]` | Image pull secrets. | | image.registry | string | `nil` | The image registry for spotfire-server. Overrides global.spotfire.image.registry value. | | image.repository | string | `"spotfire/spotfire-terrservice"` | The spotfire-server image repository. | -| image.tag | string | `"1.21.0-1"` | The container image tag to use. | +| image.tag | string | `"1.21.1-1"` | The container image tag to use. | | kedaAutoscaling | object | `{"advanced":{},"cooldownPeriod":300,"enabled":false,"fallback":{},"maxReplicas":4,"minReplicas":1,"pollingInterval":30,"spotfireConfig":{"prometheusServerAddress":"http://prometheus-server.monitor.svc.cluster.local"},"threshold":null,"triggers":[]}` | KEDA autoscaling configuration. See https://keda.sh/docs/latest/concepts/scaling-deployments for more details. | | kedaAutoscaling.cooldownPeriod | int | `300` | The period to wait after the last trigger reported active before scaling the resource back to 0. | | kedaAutoscaling.maxReplicas | int | `4` | This setting is passed to the HPA definition that KEDA creates for a given resource and holds the maximum number of replicas of the target resource. | diff --git a/helm/charts/spotfire-terrservice/README.md.gotmpl b/helm/charts/spotfire-terrservice/README.md.gotmpl index e5a8303..0e22541 100755 --- a/helm/charts/spotfire-terrservice/README.md.gotmpl +++ b/helm/charts/spotfire-terrservice/README.md.gotmpl @@ -140,6 +140,6 @@ See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command document When you upgrade to a newer Spotfire Server version and newer Spotfire services versions, upgrade the Spotfire Server first, and then upgrade the Spotfire services. -Some parameters might have been changed, moved or renamed and must be taken into consideration when upgrading the release. See [RELEASE-NOTES.md](../../../RELEASE-NOTES.md) for details. +Some parameters might have been changed, moved or renamed and must be taken into consideration when upgrading the release. See [release notes](https://github.com/spotfiresoftware/spotfire-cloud-deployment-kit/releases) for more information. {{ template "chart.valuesSection" . }} diff --git a/helm/charts/spotfire-terrservice/values.yaml b/helm/charts/spotfire-terrservice/values.yaml index 2b5c023..7ec03ea 100755 --- a/helm/charts/spotfire-terrservice/values.yaml +++ b/helm/charts/spotfire-terrservice/values.yaml @@ -11,10 +11,6 @@ global: # -- The global container image pull policy. pullPolicy: IfNotPresent # -- The global container image pull secrets. - ## E.g. - ## pullSecrets: - ## - myRegistryKeySecretName - ## pullSecrets: [] nodemanagerConfig: @@ -31,7 +27,7 @@ image: # -- The spotfire-server image repository. repository: spotfire/spotfire-terrservice # -- The container image tag to use. - tag: "1.21.0-1" + tag: "1.21.1-1" # -- The spotfire-server image pull policy. Overrides global.spotfire.image.pullPolicy. pullPolicy: # -- Image pull secrets. @@ -42,7 +38,7 @@ fluentBitSidecar: # -- The image repository for fluent-bit logging sidecar. repository: fluent/fluent-bit # -- The image tag to use for fluent-bit logging sidecar. - tag: "2.2.2" + tag: "3.1.6" # -- The image pull policy for the fluent-bit logging sidecar image. pullPolicy: IfNotPresent diff --git a/helm/charts/spotfire-webplayer/Chart.yaml b/helm/charts/spotfire-webplayer/Chart.yaml index 395ad7b..1a137df 100644 --- a/helm/charts/spotfire-webplayer/Chart.yaml +++ b/helm/charts/spotfire-webplayer/Chart.yaml @@ -4,9 +4,9 @@ description: A Helm chart for Spotfire Web Player. type: application -version: 0.2.4 +version: 0.3.0 -appVersion: "14.4.0" +appVersion: "14.4.1" kubeVersion: ">=1.24.0-0" @@ -22,7 +22,7 @@ keywords: dependencies: - name: spotfire-common repository: file://../spotfire-common - version: 0.2.4 + version: 0.3.0 annotations: license: Apache 2.0 diff --git a/helm/charts/spotfire-webplayer/README.md b/helm/charts/spotfire-webplayer/README.md index e4ea0ff..399862e 100644 --- a/helm/charts/spotfire-webplayer/README.md +++ b/helm/charts/spotfire-webplayer/README.md @@ -1,6 +1,6 @@ # spotfire-webplayer -![Version: 0.2.4](https://img.shields.io/badge/Version-0.2.4-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 14.4.0](https://img.shields.io/badge/AppVersion-14.4.0-informational?style=flat-square) +![Version: 0.3.0](https://img.shields.io/badge/Version-0.3.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 14.4.1](https://img.shields.io/badge/AppVersion-14.4.1-informational?style=flat-square) A Helm chart for Spotfire Web Player. @@ -12,7 +12,7 @@ Kubernetes: `>=1.24.0-0` | Repository | Name | Version | |------------|------|---------| -| file://../spotfire-common | spotfire-common | 0.2.4 | +| file://../spotfire-common | spotfire-common | 0.3.0 | ## Overview @@ -211,12 +211,16 @@ See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command document #### Upgrading helm chart version -Some parameters might have been changed, moved or renamed and must be taken into consideration when upgrading the release. See [RELEASE-NOTES.md](../../../RELEASE-NOTES.md) for details. +Some parameters might have been changed, moved or renamed and must be taken into consideration when upgrading the release. See [release notes](https://github.com/spotfiresoftware/spotfire-cloud-deployment-kit/releases) for more information. ## Values | Key | Type | Default | Description | |-----|------|---------|-------------| +| global.spotfire.acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | +| global.spotfire.image.pullPolicy | string | `"IfNotPresent"` | The global container image pull policy. | +| global.spotfire.image.pullSecrets | list | `[]` | The global container image pull secrets. | +| global.spotfire.image.registry | string | `nil` | The global container image registry. Used for spotfire/ container images, unless it is overridden. | | acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | | affinity | object | `{}` | | | config."Spotfire.Dxp.Worker.Core.config" | string | `""` | A custom [Spotfire.Dxp.Worker.Core.config](https://docs.tibco.com/pub/spotfire_server/latest/doc/html/TIB_sfire_server_tsas_admin_help/server/topics/spotfire.dxp.worker.core.config_file.html). | @@ -231,18 +235,14 @@ Some parameters might have been changed, moved or renamed and must be taken into | extraVolumes | list | `[]` | Extra volumes for the service container. More info: `kubectl explain deployment.spec.template.spec.volumes`. | | fluentBitSidecar.image.pullPolicy | string | `"IfNotPresent"` | The image pull policy for the fluent-bit logging sidecar image. | | fluentBitSidecar.image.repository | string | `"fluent/fluent-bit"` | The image repository for fluent-bit logging sidecar. | -| fluentBitSidecar.image.tag | string | `"2.2.2"` | The image tag to use for fluent-bit logging sidecar. | +| fluentBitSidecar.image.tag | string | `"3.1.6"` | The image tag to use for fluent-bit logging sidecar. | | fluentBitSidecar.securityContext | object | `{}` | The securityContext setting for fluent-bit sidecar container. Overrides any securityContext setting on the Pod level. | | fullnameOverride | string | `""` | | -| global.spotfire.acceptEUA | bool | `nil` | Accept the [Cloud Software Group, Inc. End User Agreement](https://www.cloud.com/legal/terms) by setting the value to `true`. | -| global.spotfire.image.pullPolicy | string | `"IfNotPresent"` | The global container image pull policy. | -| global.spotfire.image.pullSecrets | list | `[]` | The global container image pull secrets. | -| global.spotfire.image.registry | string | `nil` | The global container image registry. Used for spotfire/ container images, unless it is overridden. | | image.pullPolicy | string | `nil` | The spotfire-server image pull policy. Overrides global.spotfire.image.pullPolicy. | | image.pullSecrets | list | `[]` | Image pull secrets. | | image.registry | string | `nil` | The image registry for spotfire-server. Overrides global.spotfire.image.registry value. | | image.repository | string | `"spotfire/spotfire-webplayer"` | The spotfire-server image repository. | -| image.tag | string | `"14.4.0-1"` | The container image tag to use. | +| image.tag | string | `"14.4.1-1"` | The container image tag to use. | | kedaAutoscaling | object | `{"advanced":{},"cooldownPeriod":300,"enabled":false,"fallback":{},"maxReplicas":4,"minReplicas":1,"pollingInterval":30,"spotfireConfig":{"prometheusServerAddress":"http://prometheus-server.monitor.svc.cluster.local"},"threshold":null,"triggers":[]}` | KEDA autoscaling configuration. See https://keda.sh/docs/latest/concepts/scaling-deployments for more details. | | kedaAutoscaling.cooldownPeriod | int | `300` | The period to wait after the last trigger reported active before scaling the resource back to 0. | | kedaAutoscaling.maxReplicas | int | `4` | This setting is passed to the HPA definition that KEDA creates for a given resource and holds the maximum number of replicas of the target resource. | diff --git a/helm/charts/spotfire-webplayer/README.md.gotmpl b/helm/charts/spotfire-webplayer/README.md.gotmpl index d3c37d5..df7fa01 100755 --- a/helm/charts/spotfire-webplayer/README.md.gotmpl +++ b/helm/charts/spotfire-webplayer/README.md.gotmpl @@ -211,6 +211,6 @@ See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command document #### Upgrading helm chart version -Some parameters might have been changed, moved or renamed and must be taken into consideration when upgrading the release. See [RELEASE-NOTES.md](../../../RELEASE-NOTES.md) for details. +Some parameters might have been changed, moved or renamed and must be taken into consideration when upgrading the release. See [release notes](https://github.com/spotfiresoftware/spotfire-cloud-deployment-kit/releases) for more information. {{ template "chart.valuesSection" . }} diff --git a/helm/charts/spotfire-webplayer/values.yaml b/helm/charts/spotfire-webplayer/values.yaml index 2d432da..0c31c52 100644 --- a/helm/charts/spotfire-webplayer/values.yaml +++ b/helm/charts/spotfire-webplayer/values.yaml @@ -11,10 +11,6 @@ global: # -- The global container image pull policy. pullPolicy: IfNotPresent # -- The global container image pull secrets. - ## E.g. - ## pullSecrets: - ## - myRegistryKeySecretName - ## pullSecrets: [] nodemanagerConfig: @@ -35,7 +31,7 @@ image: # -- The spotfire-server image repository. repository: spotfire/spotfire-webplayer # -- The container image tag to use. - tag: "14.4.0-1" + tag: "14.4.1-1" # -- The spotfire-server image pull policy. Overrides global.spotfire.image.pullPolicy. pullPolicy: # -- Image pull secrets. @@ -46,7 +42,7 @@ fluentBitSidecar: # -- The image repository for fluent-bit logging sidecar. repository: fluent/fluent-bit # -- The image tag to use for fluent-bit logging sidecar. - tag: "2.2.2" + tag: "3.1.6" # -- The image pull policy for the fluent-bit logging sidecar image. pullPolicy: IfNotPresent diff --git a/helm/examples/aws/alb-ingress.md b/helm/examples/aws/alb-ingress.md deleted file mode 100644 index 527a4ff..0000000 --- a/helm/examples/aws/alb-ingress.md +++ /dev/null @@ -1,114 +0,0 @@ - -# Configuring AWS Load Balancer Controller (as ingress) - -This document lists steps to configure the Spotfire CDK on an EKS cluster with an AWS load balancer ingress controller, along with Route 53 to access it from the internet. - -## Prerequisites -- Administrator access to the Amazon account where the EKS cluster is deployed. -- Access to EKS cluster. -- Kubectl. -- Helm 3+. -- A domain in Route 53 (If you do not have one, then for more information, see [Registring a new domain](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register.html).) -- A certificate for TLS configuration. For a new domain certificate, see [Request a public certificate using the console](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html). - - - -## Configuration with AWS load balancer controller (as ingress) - -- Install an AWS ALB ingress controller: Follow the steps listed at [AWS Load Balancer Controller installation](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/deploy/installation/). - -- As per [AWS Load balancer controller documentation](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/how-it-works/#instance-mode), by default `Instance mode` ingress traffic is used by the AWS Load Balancer controller. (For example, the annotation `alb.ingress.kubernetes.io/target-type` in the ingress class is set to `NodeType`.) In this case, it requires the service to be exposed as type `NodePort`.
-To fulfill this requirement, deploy the `spotfire-server` chart with `haproxy.service.type=NodePort`.

-Note: This setting is not needed when ingress traffic is set explicitly to `IP mode`, using the annotation `alb.ingress.kubernetes.io/target-type=IP` in the ingress resource.
- -See the difference between these modes on the page AWS Load balancer controller [How it works](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/how-it-works/#instance-mode) and choose the configuration that best suits your use case. - - -### Option 1: Spotfire configuration with ingress traffic set to IP mode - -    Note: The page [EKS best practices guides](https://aws.github.io/aws-eks-best-practices/networking/loadbalancing/loadbalancing/#recommendations) recommends using this option. - -1. Create an ingress values file using the following template. (Replace the variables in "<>" with appropriate values.) - -    ingress-values.yaml -```yaml -ingress: - # -- Enables configuration of ingress to expose Spotfire Server. Requires ingress support in the Kubernetes cluster. - enabled: true - className: alb - hosts: - - host: "" - paths: - - path: / - pathType: Prefix - # -- Annotations for the ingress object. For valid annotations, see the documentation for your ingress controller. - # -- Ingress annotations page (https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/guide/ingress/annotations/#annotations). - annotations: - # -- Group annotations are optional. - alb.ingress.kubernetes.io/group.name: spotfire.web - alb.ingress.kubernetes.io/group.order: "10" - # -- - alb.ingress.kubernetes.io/scheme: internet-facing - alb.ingress.kubernetes.io/load-balancer-name: "" - alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]' - alb.ingress.kubernetes.io/inbound-cidrs: 0.0.0.0/0 - alb.ingress.kubernetes.io/ip-address-type: ipv4 - alb.ingress.kubernetes.io/target-type: ip - alb.ingress.kubernetes.io/certificate-arn: "" - alb.ingress.kubernetes.io/ssl-redirect: "443" - alb.ingress.kubernetes.io/success-codes: "200" - external-dns.alpha.kubernetes.io/hostname: "" - -``` - -2. Install the Spotfire Server helm chart with this additional values file. For example: -``` -helm install my-release . -f ingress-values.yaml ... -``` -For more information, see ["Installing" section of the Readme for the `spotfire-server` helm chart](./../../charts/spotfire-server/README.md#installing). - - - -### Option 2: Spotfire configuration with ingress traffic set to instance mode - -1. Create an ingress values file using the following template. (Replace the variables in "<>" with appropriate values.) - -        ingress-values.yaml -```yaml -haproxy: - service: - type: NodePort -ingress: - # -- Enables configuration of ingress to expose Spotfire Server. Requires ingress support in the Kubernetes cluster. - enabled: true - className: alb - hosts: - - host: "" - paths: - - path: / - pathType: Prefix - # -- Annotations for the ingress object. For valid annotations, see the documentation for your ingress controller. - # -- Ingress annotations page (https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/guide/ingress/annotations/#annotations). - annotations: - # -- Group annotations are optional. - alb.ingress.kubernetes.io/group.name: spotfire.web - alb.ingress.kubernetes.io/group.order: "10" - # -- - alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]' - alb.ingress.kubernetes.io/load-balancer-name: "" - alb.ingress.kubernetes.io/scheme: internet-facing - alb.ingress.kubernetes.io/ssl-redirect: "443" - alb.ingress.kubernetes.io/success-codes: "200" - external-dns.alpha.kubernetes.io/hostname: "" - alb.ingress.kubernetes.io/certificate-arn: "" -``` - -2. Install the Spotfire Server helm chart with this additional values file. For example: -``` -helm install my-release . -f ingress-values.yaml ... -``` -For more information, see ["Installing" section in the Readme for the `spotfire-server` helm chart](./../../charts/spotfire-server/README.md#installing). - -## Configuring Route 53 - -Add "A" record in the appropriate Route 53 hosted zone and point it to the load balancer. For more information, see [Creating records by using the Amazon Route 53 console](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html). \ No newline at end of file diff --git a/helm/examples/spotfire-umbrella-example/Chart.yaml b/helm/examples/spotfire-umbrella-example/Chart.yaml deleted file mode 100644 index 9e202a7..0000000 --- a/helm/examples/spotfire-umbrella-example/Chart.yaml +++ /dev/null @@ -1,40 +0,0 @@ -apiVersion: v2 -name: spotfire-umbrella-example -description: An umbrella chart that can install a Spotfire environment with optional components such as a database and Spotfire services. It comes with a few example values files. -type: application -version: 0.1.7 -kubeVersion: ">=1.24.0-0" -dependencies: - - name: spotfire-server - repository: file://../../charts/spotfire-server/ - version: 0.2.4 - - name: spotfire-webplayer - alias: spotfire-webplayer-pool1 - repository: file://../../charts/spotfire-webplayer/ - version: 0.2.4 - condition: spotfire-webplayer-pool1.enabled - - name: spotfire-webplayer - alias: spotfire-webplayer-pool2 - repository: file://../../charts/spotfire-webplayer/ - version: 0.2.4 - condition: spotfire-webplayer-pool2.enabled - - name: spotfire-automationservices - repository: file://../../charts/spotfire-automationservices/ - version: 0.2.4 - condition: spotfire-automationservices.enabled - - name: spotfire-terrservice - repository: file://../../charts/spotfire-terrservice/ - version: 0.2.4 - condition: spotfire-terrservice.enabled - - name: spotfire-rservice - repository: file://../../charts/spotfire-rservice/ - version: 0.2.4 - condition: spotfire-rservice.enabled - - name: spotfire-pythonservice - repository: file://../../charts/spotfire-pythonservice/ - version: 0.2.4 - condition: spotfire-pythonservice.enabled - - name: postgresql - condition: postgresql.enabled - repository: https://charts.bitnami.com/bitnami - version: 12.1.2 diff --git a/helm/examples/spotfire-umbrella-example/README.md b/helm/examples/spotfire-umbrella-example/README.md deleted file mode 100644 index 9cfdeec..0000000 --- a/helm/examples/spotfire-umbrella-example/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# spotfire-umbrella-example - -![Version: 0.1.7](https://img.shields.io/badge/Version-0.1.7-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) - -An umbrella chart that can install a Spotfire environment with optional components such as a database and Spotfire services. It comes with a few example values files. - -## Requirements - -Kubernetes: `>=1.24.0-0` - -| Repository | Name | Version | -|------------|------|---------| -| file://../../charts/spotfire-automationservices/ | spotfire-automationservices | 0.2.4 | -| file://../../charts/spotfire-pythonservice/ | spotfire-pythonservice | 0.2.4 | -| file://../../charts/spotfire-rservice/ | spotfire-rservice | 0.2.4 | -| file://../../charts/spotfire-server/ | spotfire-server | 0.2.4 | -| file://../../charts/spotfire-terrservice/ | spotfire-terrservice | 0.2.4 | -| file://../../charts/spotfire-webplayer/ | spotfire-webplayer-pool1(spotfire-webplayer) | 0.2.4 | -| file://../../charts/spotfire-webplayer/ | spotfire-webplayer-pool2(spotfire-webplayer) | 0.2.4 | -| https://charts.bitnami.com/bitnami | postgresql | 12.1.2 | - -## Values - -| Key | Type | Default | Description | -|-----|------|---------|-------------| -| global.spotfire.acceptEUA | string | `nil` | | -| postgresql.enabled | bool | `true` | | -| postgresql.primary.persistence.enabled | bool | `false` | | -| spotfire-automationservices.enabled | bool | `false` | | -| spotfire-automationservices.logging.logForwarderAddress | string | `"{{ .Release.Name }}-log-forwarder"` | | -| spotfire-automationservices.nodemanagerConfig.serverBackendAddress | string | `"{{ .Release.Name }}-spotfire-server"` | | -| spotfire-pythonservice.enabled | bool | `false` | | -| spotfire-pythonservice.logging.logForwarderAddress | string | `"{{ .Release.Name }}-log-forwarder"` | | -| spotfire-pythonservice.nodemanagerConfig.serverBackendAddress | string | `"{{ .Release.Name }}-spotfire-server"` | | -| spotfire-rservice.enabled | bool | `false` | | -| spotfire-rservice.logging.logForwarderAddress | string | `"{{ .Release.Name }}-log-forwarder"` | | -| spotfire-rservice.nodemanagerConfig.serverBackendAddress | string | `"{{ .Release.Name }}-spotfire-server"` | | -| spotfire-server.configuration.site.publicAddress | string | `"http://localhost/"` | | -| spotfire-server.database.bootstrap.databaseUrl | string | `"jdbc:postgresql://{{ .Release.Name }}-postgresql/"` | | -| spotfire-server.database.bootstrap.driverClass | string | `"org.postgresql.Driver"` | | -| spotfire-server.database.create-db.adminPasswordExistingSecret.key | string | `"postgres-password"` | | -| spotfire-server.database.create-db.adminPasswordExistingSecret.name | string | `"{{ .Release.Name }}-postgresql"` | | -| spotfire-server.database.create-db.adminUsername | string | `"postgres"` | | -| spotfire-server.database.create-db.databaseUrl | string | `"jdbc:postgresql://{{ .Release.Name }}-postgresql/"` | | -| spotfire-server.database.create-db.enabled | bool | `true` | | -| spotfire-terrservice.enabled | bool | `false` | | -| spotfire-terrservice.logging.logForwarderAddress | string | `"{{ .Release.Name }}-log-forwarder"` | | -| spotfire-terrservice.nodemanagerConfig.serverBackendAddress | string | `"{{ .Release.Name }}-spotfire-server"` | | -| spotfire-webplayer-pool1.enabled | bool | `false` | | -| spotfire-webplayer-pool1.logging.logForwarderAddress | string | `"{{ .Release.Name }}-log-forwarder"` | | -| spotfire-webplayer-pool1.nodemanagerConfig.serverBackendAddress | string | `"{{ .Release.Name }}-spotfire-server"` | | -| spotfire-webplayer-pool1.webplayerConfig.resourcePool | string | `"pool1"` | | -| spotfire-webplayer-pool2.enabled | bool | `false` | | -| spotfire-webplayer-pool2.logging.logForwarderAddress | string | `"{{ .Release.Name }}-log-forwarder"` | | -| spotfire-webplayer-pool2.nodemanagerConfig.serverBackendAddress | string | `"{{ .Release.Name }}-spotfire-server"` | | -| spotfire-webplayer-pool2.webplayerConfig.resourcePool | string | `"pool2"` | | - ----------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.7.0](https://github.com/norwoodj/helm-docs/releases/v1.7.0) diff --git a/helm/examples/spotfire-umbrella-example/values.yaml b/helm/examples/spotfire-umbrella-example/values.yaml deleted file mode 100644 index 4bad996..0000000 --- a/helm/examples/spotfire-umbrella-example/values.yaml +++ /dev/null @@ -1,84 +0,0 @@ -# When using this chart, you should override the values in this file or provide -# a values file with your own values during installation. values-*.yaml for -# various examples. - -global: - spotfire: - # Set to true to accept the End User Agreement - # Alternatively you can install the chart with: - # `helm upgrade/install --set global.spotfire.acceptEUA=true` - acceptEUA: - -spotfire-server: - database: - bootstrap: - databaseUrl: "jdbc:postgresql://{{ .Release.Name }}-postgresql/" - driverClass: "org.postgresql.Driver" - create-db: - enabled: true - # The postgresql chart will generate a random password and store it in a - # secret with the key 'postgres-password'. The username will always be - # 'postgres'. - adminUsername: "postgres" - adminPasswordExistingSecret: - name: "{{ .Release.Name }}-postgresql" - key: "postgres-password" - databaseUrl: "jdbc:postgresql://{{ .Release.Name }}-postgresql/" - configuration: - site: - publicAddress: "http://localhost/" - -postgresql: - # Note: Using the PostgreSQL database like this is not recommended for - # production use. Make sure you know how to back up and restore your data - # when using this chart for other than testing purposes. - enabled: true - primary: - persistence: - enabled: false - -spotfire-webplayer-pool1: - enabled: false - nodemanagerConfig: - serverBackendAddress: "{{ .Release.Name }}-spotfire-server" - logging: - logForwarderAddress: "{{ .Release.Name }}-log-forwarder" - webplayerConfig: - resourcePool: "pool1" - -spotfire-webplayer-pool2: - enabled: false - nodemanagerConfig: - serverBackendAddress: "{{ .Release.Name }}-spotfire-server" - logging: - logForwarderAddress: "{{ .Release.Name }}-log-forwarder" - webplayerConfig: - resourcePool: "pool2" - -spotfire-automationservices: - enabled: false - nodemanagerConfig: - serverBackendAddress: "{{ .Release.Name }}-spotfire-server" - logging: - logForwarderAddress: "{{ .Release.Name }}-log-forwarder" - -spotfire-rservice: - enabled: false - nodemanagerConfig: - serverBackendAddress: "{{ .Release.Name }}-spotfire-server" - logging: - logForwarderAddress: "{{ .Release.Name }}-log-forwarder" - -spotfire-pythonservice: - enabled: false - nodemanagerConfig: - serverBackendAddress: "{{ .Release.Name }}-spotfire-server" - logging: - logForwarderAddress: "{{ .Release.Name }}-log-forwarder" - -spotfire-terrservice: - enabled: false - nodemanagerConfig: - serverBackendAddress: "{{ .Release.Name }}-spotfire-server" - logging: - logForwarderAddress: "{{ .Release.Name }}-log-forwarder" diff --git a/helm/test.mk b/helm/test.mk deleted file mode 100644 index b00ea09..0000000 --- a/helm/test.mk +++ /dev/null @@ -1,27 +0,0 @@ -TEST_CHARTS = $(filter-out spotfire-common,$(CHARTS)) - -test : $(addprefix test-,$(TEST_CHARTS)) -test-% : lint-% template-% kubeconform-% - @echo Test of chart $* completed. - -lint : $(addprefix lint-,$(TEST_CHARTS)) -lint-% : - $(foreach v, $(wildcard charts/$*/test/*-values.yaml), \ - helm lint charts/$* --values $(v); \ - ) - -# Set to VALIDATE=1 validate against running kubernetes cluster -templat% : VALIDATE ?= 1 -template : $(addprefix template-,$(TEST_CHARTS)) -template-% : - $(foreach v, $(wildcard charts/$*/test/*-values.yaml), \ - helm template $(if $(filter 1,$(VALIDATE)),--validate,) charts/$* --values $(v); \ - ) - -kubeconform : $(addprefix kubeconform-,$(TEST_CHARTS)) -kubeconform-% : - $(foreach v, $(wildcard charts/$*/test/*-values.yaml), \ - helm template charts/$* --values $(v) | kubeconform -summary -ignore-missing-schemas; \ - ) - -.PHONY: kubeconform kubeconform-% lint lint-% template template-% test test-% diff --git a/utilities/generate-troubleshooting-bundle.sh b/utilities/generate-troubleshooting-bundle.sh new file mode 100755 index 0000000..37fbce1 --- /dev/null +++ b/utilities/generate-troubleshooting-bundle.sh @@ -0,0 +1,271 @@ +#!/bin/bash + +function print_usage() { + echo "Usage: $0 [options]" + echo "" + echo "Options:" + echo " -h, --help Show help" + echo " -o, --output Specify output. Will be an archive if it ends with .tar.gz (default: -.tar.gz)" + echo " -v, --verbose Enable verbose mode" + echo " -k, --kinds KINDS Kubernetes object kinds to collect (comma-separated). Run 'kubectl api-resources' to list all available kinds" + echo " --add KINDS Add kinds to the list of kinds to collect (comma-separated)" + echo " --remove KINDS Remove kinds from the list of kinds to collect (comma-separated)" + echo " --no-helm Do not collect helm releases and values" + echo " --no-cluster-info Do not collect cluster information" + echo + echo "This script generates a troubleshooting bundle tar.gz. for a given namespace." + echo + echo "Example of the information that will be collected:" + echo " - Helm releases and values" + echo " - Kubernetes cluster information" + echo " - Container standard out" + echo " - Spotfire application logs" + echo " - Kubernetes objects (default kinds: $(export IFS=,; echo "${KUBERNETES_KINDS[*]}"))" +} + +ERROR_CODE_HELP=1 +ERROR_CODE_FILE_NOT_FOUND=2 +ERROR_CODE_INVALID_ARGUMENTS=3 +ERROR_CODE_COMMAND_NOT_FOUND=4 + +# Defaults +VERBOSE=false +KUBERNETES_KINDS=("LimitRange" "ResourceQuota" "Endpoints" "PersistentVolumeClaim" "ServiceAccount" "Service" "ControllerRevision" "Deployment" "ReplicaSet" "StatefulSet" "Job" "Ingress" "NetworkPolicy" "PodDisruptionBudget") + +# Parse command line options +parsed_options=$(getopt -o ho:ivt: --long help,output:,verbose,kinds:,add:,remove:,no-helm,no-cluster-info -- "$@") +if [ $? != 0 ]; then + print_usage + exit ${ERROR_CODE_INVALID_ARGUMENTS} +fi +eval set -- $parsed_options + +while true; do + case "$1" in + -h|--help) print_usage; exit ${ERROR_CODE_HELP} ;; + -o|--output) OUTPUT_FILE_OR_DIRECTORY="$2"; shift ;; + -v|--verbose) VERBOSE=true ;; + -k|--kinds) IFS=',' read -ra ADD_KINDS <<< "$2"; KUBERNETES_KINDS=("${ADD_KINDS[@]}"); shift ;; + --add) IFS=',' read -ra ADD_KINDS <<< "$2"; KUBERNETES_KINDS+=("${ADD_KINDS[@]}"); shift ;; + --remove) IFS=',' read -ra REMOVE_KINDS <<< "$2"; KUBERNETES_KINDS=("${KUBERNETES_KINDS[@]/${REMOVE_KINDS[@]}/}"); shift ;; + --no-helm) NO_HELM=true ;; + --no-cluster-info) NO_CLUSTER_INFO=true ;; + --) shift; break ;; + *) echo "Invalid option: $1"; print_usage; exit ${ERROR_CODE_INVALID_ARGUMENTS} ;; + esac + shift +done + +NAMESPACE="$1" +if [[ -z $NAMESPACE ]]; then + echo "❌ Error: Namespace is required." >&2 + print_usage + exit ${ERROR_CODE_INVALID_ARGUMENTS} +fi +shift + +# Keep all entries in KUBERNETES_KINDS if it is a non-empty string +KUBERNETES_KINDS=(${KUBERNETES_KINDS[@]:-}) + +if [[ $# -gt 0 ]]; then + echo "❌ Error: Unexpected positional parameters after options: $@" >&2 + print_usage + exit ${ERROR_CODE_INVALID_ARGUMENTS} +fi + +# Check if OUTPUT_FILE_OR_DIRECTORY is a directory or already exists +if [[ -d "${OUTPUT_FILE_OR_DIRECTORY}" || -f "${OUTPUT_FILE_OR_DIRECTORY}" ]]; then + echo "❌ Error: Output file already exists." >&2 + exit ${ERROR_CODE_FILE_NOT_FOUND} +fi + +# Set default output file if not provided +if [[ -z "${OUTPUT_FILE_OR_DIRECTORY}" ]]; then + timestamp=$(date +"%Y%m%d%H%M%S") + OUTPUT_FILE_OR_DIRECTORY="${NAMESPACE}-${timestamp}.tar.gz" +fi + +# Check that kubectl and helm commands are available +if ! command -v kubectl &> /dev/null; then + echo "❌ kubectl command not found." >&2 + exit ${ERROR_CODE_COMMAND_NOT_FOUND} +fi + +if [[ "${NO_HELM}" != "true" ]] && ! command -v helm &> /dev/null; then + echo "❌ helm command not found." >&2 + exit ${ERROR_CODE_COMMAND_NOT_FOUND} +fi + +# Check if namespace exists +if ! kubectl get -- namespace "$NAMESPACE" >/dev/null 2>&1; then + echo "❌ Namespace '$NAMESPACE' does not exist or you are unable to access it." + exit ${ERROR_CODE_INVALID_ARGUMENTS} +fi + +# +# Functions +# + +function collect_info() { + local command="$1" + local output_file="$2" + + echo "📄 ${output_file}" >&2 + [[ "${VERBOSE}" == true ]] && echo "⚙️ ${command}" >&2 + mkdir -p "$(dirname "${output_file}")" + eval "${command}" > "${output_file}" || return $? +} + +function copy_applogs() { + local pod="$1" + local container="$2" + local filepath="$3" + local output_dir="${OUTPUT_DIR}/pod-${pod}/logs/" + + # Get the status of the container and check the status code + if ! container_status=$(kubectl get pod "${pod}" --namespace "${NAMESPACE}" -o jsonpath="{.status.containerStatuses[?(@.name=='${container}')].state}"); then + echo "⚠️ Warning: Failed to get the status of container ${container} in pod ${pod}." + return 1 + fi + + # Check if the container is running + if [[ "${container_status}" != *"running"* ]]; then + echo "⚠️ Warning: Container ${container} is not running in pod ${pod}. Logs cannot be copied." >&2 + return 1 + fi + + echo "📁 ${output_dir}" + kubectl cp -n "${NAMESPACE}" -c "${container}" "${pod}:${filepath}" "${output_dir}" + return $? +} + +function fetch_pod_info_and_logs() { + local pod=$1 + local pod_output_dir="${OUTPUT_DIR}/pod-${pod}" + + # Collect pod information using 'kubectl describe pod' command + collect_info "kubectl --namespace '${NAMESPACE}' describe pod '${pod}'" "${pod_output_dir}/describe.txt" || return 1 + + # Get the list of containers in the pod + containers=$(kubectl get pod "${pod}" --namespace "${NAMESPACE}" --output=jsonpath='{.spec.containers[*].name}' 2>/dev/null) + if [[ $? -ne 0 ]]; then + echo "❌ Error: Failed to get the list of containers for pod ${pod}." + return 1 + fi + + # Collect logs for each container in the pod + for container in ${containers}; do + collect_info "kubectl --namespace '${NAMESPACE}' logs '${pod}' -c '${container}'" "${pod_output_dir}/stdout-${container}.log" + done + + local main_container_restart_count=$(kubectl get pod ${pod} -n ${NAMESPACE} -o jsonpath='{.status.containerStatuses[0].restartCount}') + if [ "${main_container_restart_count}" -gt 0 ]; then + collect_info "kubectl --namespace '${NAMESPACE}' logs --previous '${pod}'" "${pod_output_dir}/stdout-previous.log" + fi +} + +## +## Main +## + +# Create a temporary folder if the output is an archive +if [[ "${OUTPUT_FILE_OR_DIRECTORY}" == *.tar.gz ]]; then + archive=true + TEMP_DIR=$(mktemp -d) + + # Paths should be relative to so .tar.gz file contains a single directory + pushd "${TEMP_DIR}" > /dev/null + OUTPUT_DIR="$(basename "${OUTPUT_FILE_OR_DIRECTORY%.tar.gz}")" + + cleanup() { + rm -rf "${TEMP_DIR}" + } + trap cleanup EXIT SIGINT SIGTERM +else + archive=false + OUTPUT_DIR="${OUTPUT_FILE_OR_DIRECTORY}" +fi + +mkdir -p "${OUTPUT_DIR}" + + +# Redirect all output to a log file included in the tar.gz +tbtoollog="${OUTPUT_DIR}/tbtool.log" +exec > >(tee -a ${tbtoollog}) 2>&1 +echo "🔍 Collecting information for namespace ${NAMESPACE}" + +if [[ "${NO_HELM}" != "true" ]]; then + # Helm (consider yaml/json output) + collect_info "helm list --namespace '${NAMESPACE}'" "${OUTPUT_DIR}/helm-releases.txt" + + # All helm releases containing spotfire components + helmReleases=$(kubectl get pods --namespace "${NAMESPACE}" -l app.kubernetes.io/managed-by=Helm,app.kubernetes.io/part-of=spotfire --output=jsonpath='{.items[*].metadata.labels.app\.kubernetes\.io\/instance}' | tr ' ' '\n' | sort -u | tr '\n' ' ') + for helmRelease in ${helmReleases}; do + collect_info "helm get values '${helmRelease}' --namespace '${NAMESPACE}'" "${OUTPUT_DIR}/helm-release-${helmRelease}-values.yaml" + done +else + echo "ℹ️ Skipping helm releases and values" +fi + +# Cluster info +if [[ "${NO_CLUSTER_INFO}" != "true" ]]; then + collect_info "kubectl cluster-info" "${OUTPUT_DIR}/cluster-info.txt" + collect_info "kubectl get nodes -o yaml" "${OUTPUT_DIR}/nodes.yaml" + collect_info "kubectl version" "${OUTPUT_DIR}/version.txt" +else + echo "ℹ️ Skipping cluster information" +fi + +# Namespaced objects +for kind in "${KUBERNETES_KINDS[@]:-${DEFAULT_KUBERNETES_TYPES[@]}}"; do + collect_info "kubectl get '${kind}' --namespace '${NAMESPACE}' -o yaml" "${OUTPUT_DIR}/${kind}.yaml" + collect_info "kubectl describe '${kind}' --namespace '${NAMESPACE}'" "${OUTPUT_DIR}/${kind}.txt" +done + +# Events +kubectl_events_nowatch_columns="FirstSeen:.firstTimestamp,LastSeen:.lastTimestamp,Count:.count,From:.source.component,Kind:.involvedObject.kind,Object:.involvedObject.name,Type:.type,Reason:.reason,Message:.message" +collect_info "kubectl get events --namespace '${NAMESPACE}' --sort-by=.metadata.creationTimestamp -o custom-columns='${kubectl_events_nowatch_columns}'" "${OUTPUT_DIR}/events.txt" + +spotfire_selector="app.kubernetes.io/part-of=spotfire" +# Spotfire pods container stdout +allPods=$(kubectl --namespace "${NAMESPACE}" get pods --output=jsonpath='{.items[*].metadata.name}' --selector="${spotfire_selector}") +for pod in ${allPods}; do + fetch_pod_info_and_logs "${pod}" +done + +# Job pods container stdout +allJobs=$(kubectl --namespace "${NAMESPACE}" get jobs --output=jsonpath='{.items[*].metadata.name}' --selector="${spotfire_selector}") +for job in ${allJobs}; do + collect_info "kubectl --namespace '${NAMESPACE}' logs job/${job}" "${OUTPUT_DIR}/job-${job}-log.txt" +done + +# Loop to copy server logs +server_selector="app.kubernetes.io/component=server" +serverPods=$(kubectl --namespace "${NAMESPACE}" get pods --output=jsonpath='{.items[*].metadata.name}' --selector=${server_selector}) +for serverPod in ${serverPods}; do + copy_applogs "${serverPod}" "spotfire-server" "spotfireserver/tomcat/logs" || : +done + +# Loop to copy component logs +components="webplayer automationservices pythonservice terrservice rservice" +for component in ${components}; do + component_selector="app.kubernetes.io/component=${component}" + componentPods=$(kubectl --namespace "${NAMESPACE}" get pods --output=jsonpath='{.items[*].metadata.name}' --selector="${component_selector}") + for componentPod in ${componentPods}; do + containers=$(kubectl get pod "${componentPod}" --namespace "${NAMESPACE}" --output=jsonpath='{.spec.containers[*].name}') + for container in ${containers}; do + if [[ ${container} == spotfire-* ]]; then + copy_applogs "${componentPod}" "${container}" "nm/logs" || : + fi + done + done +done + +if [[ "${archive}" == "true" ]]; then + popd + echo "📦 Adding files to archive ${OUTPUT_FILE_OR_DIRECTORY}" + tar -czf "${OUTPUT_FILE_OR_DIRECTORY}" -C "${TEMP_DIR}" --remove-files "${OUTPUT_DIR}" +else + echo "🗂️ Files are located in $(realpath "${OUTPUT_DIR}")" + trap - EXIT SIGINT SIGTERM +fi diff --git a/versions.mk b/versions.mk index e47e484..31a5e93 100644 --- a/versions.mk +++ b/versions.mk @@ -1,11 +1,11 @@ -SPOTFIRE_DEPLOYMENT_VERSION=14.4.0 +SPOTFIRE_DEPLOYMENT_VERSION=14.4.1 SPOTFIRE_NETCORE_LANGUAGEPACKS_VERSION=14.4.0 -SPOTFIRE_NETCORE_VERSION=14.4.0 -SPOTFIRE_NODEMANAGER_VERSION=14.4.0 -SPOTFIRE_PYTHONSERVICE_VERSION=1.21.0 -SPOTFIRE_RSERVICE_VERSION=1.21.0 -SPOTFIRE_SERVER_VERSION=14.4.0 -SPOTFIRE_TERRSERVICE_VERSION=1.21.0 +SPOTFIRE_NETCORE_VERSION=14.4.1 +SPOTFIRE_NODEMANAGER_VERSION=14.4.1 +SPOTFIRE_PYTHONSERVICE_VERSION=1.21.1 +SPOTFIRE_RSERVICE_VERSION=1.21.1 +SPOTFIRE_SERVER_VERSION=14.4.1 +SPOTFIRE_TERRSERVICE_VERSION=1.21.1 # Container iteration - set when multiple container versions target the same app version SPOTFIRE_AUTOMATIONSERVICES_CONTAINER_ITERATION=1