From 1bd92211a125dc03453f4a37bd12b03599ce959c Mon Sep 17 00:00:00 2001 From: moabu <47318409+moabu@users.noreply.github.com> Date: Wed, 27 Nov 2024 12:42:12 +0300 Subject: [PATCH 1/4] ci: pull temporarily from branch Signed-off-by: moabu <47318409+moabu@users.noreply.github.com> --- .github/workflows/build-packages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-packages.yml b/.github/workflows/build-packages.yml index 9e914b8f5..dfedd474f 100644 --- a/.github/workflows/build-packages.yml +++ b/.github/workflows/build-packages.yml @@ -87,7 +87,7 @@ jobs: id: run_build run: | cd flex/ - sudo python${{ matrix.python_version }} flex_setup.py --jans-branch="v1.1.6" -download-exit + sudo python${{ matrix.python_version }} flex_setup.py --jans-branch="v1.1.6-hotfix" --jans-setup-branch="v1.1.6-hotfix" -download-exit cp -r /opt/dist flex-src/opt/ cp -r /opt/jans flex-src/opt/ touch flex-src/opt/jans/jans-setup/package From ec1eb186bb7a7c04f88f5e9daee5dd31dcd8579c Mon Sep 17 00:00:00 2001 From: Jatin Mehta <32476704+mjatin-dev@users.noreply.github.com> Date: Thu, 28 Nov 2024 13:45:46 +0530 Subject: [PATCH 2/4] update README with the latest dashboard UI screenshots (#1909) --- docs/assets/admin-ui/dashboard.png | Bin 75785 -> 176393 bytes docs/assets/admin-ui/left-nav-bar.png | Bin 25465 -> 39142 bytes docs/assets/admin-ui/mau.png | Bin 32131 -> 42596 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/admin-ui/dashboard.png b/docs/assets/admin-ui/dashboard.png index eaae546e1beab6675a88648b5d691cdfd9ac925c..b6812d70412ba4267b6ba71e6cbfa6dbfe220c76 100644 GIT binary patch literal 176393 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


IHXRKQ>T?LG-_CHWvbZ>-=r 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 diff --git a/docs/assets/admin-ui/left-nav-bar.png b/docs/assets/admin-ui/left-nav-bar.png index aaee4237174ac61a17f01c577a856e676e8c2e07..add1a2e35b8ce0d3452b1aed27503208e4a0c2ab 100644 GIT binary patch literal 39142 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�b{5PcZ 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 diff --git a/docs/assets/admin-ui/mau.png b/docs/assets/admin-ui/mau.png index ab9d737b2413269d3b28fdaf9eb17e8b3751e825..86433c6cb8700e8a26e4e83658222d0888d1fd51 100644 GIT binary patch literal 42596 zcmbrmcT^Km7d;w8K>EAE&+q-}A8)-Z)=Dy&ncL1iXYYN^5b;<;=`sl&2?PSUto-PKHUvV%0D%zn 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

0Y$KTb3mw&LEA?^Y}l7a@Hb(>|BZOgXGP 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∾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

NH!Sya)kUccdQN>&}zKXx#crq(Cjk{{) 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 Date: Fri, 29 Nov 2024 11:00:31 +0000 Subject: [PATCH 3/4] chore(release): prepare for 5.1.6 (#1910) * chore(release): prepare for 5.1.6 https://github.com/JanssenProject/jans/pull/10201 Signed-off-by: moabu <47318409+moabu@users.noreply.github.com> * chore(docker-admin-ui): update FLEX_SOURCE_VERSION Signed-off-by: iromli * chore(docker-flex-monolith): update FLEX_SOURCE_VERSION Signed-off-by: iromli --------- Signed-off-by: moabu <47318409+moabu@users.noreply.github.com> Signed-off-by: iromli Co-authored-by: iromli --- .github/workflows/docker_build_image.yml | 2 +- .../rancher-partner-charts/questions.yaml | 18 ++-- charts/gluu-all-in-one/Chart.yaml | 6 +- charts/gluu-all-in-one/README.md | 16 ++-- charts/gluu-all-in-one/values.yaml | 6 +- charts/gluu/Chart.yaml | 56 ++++++------- charts/gluu/README.md | 84 +++++++++---------- charts/gluu/charts/admin-ui/Chart.yaml | 4 +- charts/gluu/charts/admin-ui/README.md | 4 +- charts/gluu/charts/admin-ui/values.yaml | 2 +- .../auth-server-key-rotation/Chart.yaml | 4 +- .../charts/auth-server-key-rotation/README.md | 4 +- .../auth-server-key-rotation/values.yaml | 2 +- charts/gluu/charts/auth-server/Chart.yaml | 4 +- charts/gluu/charts/auth-server/README.md | 4 +- charts/gluu/charts/auth-server/values.yaml | 2 +- charts/gluu/charts/casa/Chart.yaml | 4 +- charts/gluu/charts/casa/README.md | 4 +- charts/gluu/charts/casa/values.yaml | 2 +- .../gluu/charts/cn-istio-ingress/Chart.yaml | 4 +- charts/gluu/charts/cn-istio-ingress/README.md | 2 +- charts/gluu/charts/config-api/Chart.yaml | 4 +- charts/gluu/charts/config-api/README.md | 4 +- charts/gluu/charts/config-api/values.yaml | 2 +- charts/gluu/charts/config/Chart.yaml | 4 +- charts/gluu/charts/config/README.md | 4 +- charts/gluu/charts/config/values.yaml | 2 +- charts/gluu/charts/fido2/Chart.yaml | 4 +- charts/gluu/charts/fido2/README.md | 4 +- charts/gluu/charts/fido2/values.yaml | 2 +- charts/gluu/charts/kc-scheduler/Chart.yaml | 4 +- charts/gluu/charts/kc-scheduler/README.md | 4 +- charts/gluu/charts/kc-scheduler/values.yaml | 2 +- charts/gluu/charts/link/Chart.yaml | 4 +- charts/gluu/charts/link/README.md | 4 +- charts/gluu/charts/link/values.yaml | 2 +- charts/gluu/charts/nginx-ingress/Chart.yaml | 4 +- charts/gluu/charts/nginx-ingress/README.md | 2 +- charts/gluu/charts/persistence/Chart.yaml | 4 +- charts/gluu/charts/persistence/README.md | 4 +- charts/gluu/charts/persistence/values.yaml | 2 +- charts/gluu/charts/saml/Chart.yaml | 4 +- charts/gluu/charts/saml/README.md | 4 +- charts/gluu/charts/saml/values.yaml | 2 +- charts/gluu/charts/scim/Chart.yaml | 4 +- charts/gluu/charts/scim/README.md | 4 +- charts/gluu/charts/scim/values.yaml | 2 +- charts/gluu/openbanking-values.yaml | 8 +- charts/gluu/values.yaml | 24 +++--- docker-admin-ui/Dockerfile | 2 +- docker-flex-all-in-one/Dockerfile | 2 +- docker-flex-monolith/Dockerfile | 2 +- docker-flex-monolith/clean.sh | 2 +- docker-flex-monolith/down.sh | 2 +- docker-flex-monolith/flex-mysql-compose.yml | 2 +- .../flex-postgres-compose.yml | 2 +- docker-flex-monolith/up.sh | 2 +- docker-flex-monolith/version.txt | 2 +- docs/reference/kubernetes/helm-chart.md | 44 +++++----- flex-linux-setup/flex_linux_setup/version.py | 2 +- 60 files changed, 208 insertions(+), 208 deletions(-) diff --git a/.github/workflows/docker_build_image.yml b/.github/workflows/docker_build_image.yml index 975c8ea32..48bcae0c1 100644 --- a/.github/workflows/docker_build_image.yml +++ b/.github/workflows/docker_build_image.yml @@ -89,7 +89,7 @@ jobs: DOCKER_IMAGE=ghcr.io/$REPOSITORY/${{ matrix.docker-images }} VERSION=${MAIN_VERSION}_dev if [[ ${{ matrix.docker-images }} == "flex-monolith" ]]; then - VERSION=5.1.6_dev + VERSION=5.1.6-1 DOCKER_IMAGE=ghcr.io/$REPOSITORY/monolith fi BUILD=true diff --git a/automation/rancher-partner-charts/questions.yaml b/automation/rancher-partner-charts/questions.yaml index 02c4746a6..3fe8387d8 100644 --- a/automation/rancher-partner-charts/questions.yaml +++ b/automation/rancher-partner-charts/questions.yaml @@ -703,7 +703,7 @@ questions: - variable: auth-server.image.tag required: true type: string - default: "1.1.6_dev" + default: "1.1.6-1" description: "The Auth Server Image tag" label: Auth Server image tag group: "Images" @@ -732,7 +732,7 @@ questions: - variable: admin-ui.image.tag required: true type: string - default: "5.1.6_dev" + default: "5.1.6-1" description: "The AdminUI Image tag" label: AdminUI image tag group: "Images" @@ -761,7 +761,7 @@ questions: - variable: auth-server-key-rotation.image.tag required: true type: string - default: "1.1.6_dev" + default: "1.1.6-1" description: "The Auth Server Image tag" label: Auth Server KeyRotation image tag group: "Images" @@ -790,7 +790,7 @@ questions: - variable: casa.image.tag required: true type: string - default: "1.1.6_dev" + default: "1.1.6-1" description: "The Casa Image tag" label: Casa image tag group: "Images" @@ -819,7 +819,7 @@ questions: - variable: config.image.tag required: true type: string - default: "1.1.6_dev" + default: "1.1.6-1" description: "The Configurator Image tag" label: Configurator image tag group: "Images" @@ -848,7 +848,7 @@ questions: - variable: config-api.image.tag required: true type: string - default: "1.1.6_dev" + default: "1.1.6-1" description: "The ConfigAPI Image tag" label: ConfigAPI image tag group: "Images" @@ -877,7 +877,7 @@ questions: - variable: fido2.image.tag required: true type: string - default: "1.1.6_dev" + default: "1.1.6-1" description: "The Fido2 Image tag" label: Fido2 image tag group: "Images" @@ -906,7 +906,7 @@ questions: - variable: persistence.image.tag required: true type: string - default: "1.1.6_dev" + default: "1.1.6-1" description: "The Persistence Image tag" label: Persistence image tag group: "Images" @@ -935,7 +935,7 @@ questions: - variable: scim.image.tag required: true type: string - default: "1.1.6_dev" + default: "1.1.6-1" description: "The SCIM Image tag" label: SCIM image tag group: "Images" diff --git a/charts/gluu-all-in-one/Chart.yaml b/charts/gluu-all-in-one/Chart.yaml index e6383e3e5..fa389799e 100644 --- a/charts/gluu-all-in-one/Chart.yaml +++ b/charts/gluu-all-in-one/Chart.yaml @@ -3,13 +3,13 @@ annotations: artifacthub.io/containsSecurityUpdates: 'true' artifacthub.io/images: | - name: all-in-one - image: ghcr.io/gluufederation/flex/flex-all-in-one:5.1.6_dev + image: ghcr.io/gluufederation/flex/flex-all-in-one:5.1.6-1 artifacthub.io/license: Apache-2.0 catalog.cattle.io/certified: partner catalog.cattle.io/release-name: gluu-all-in-one catalog.cattle.io/display-name: Gluu Flex Cloud Identity and Access Management All-in-One apiVersion: v2 -appVersion: "5.1.6-dev" +appVersion: "5.1.6" icon: >- https://gluu.org/docs/gluu-server/favicon.ico home: https://docs.gluu.org @@ -21,4 +21,4 @@ maintainers: email: team@gluu.org description: Gluu Access and Identity Management All-in-One Chart. This chart deploys the selected janssen microservice all in one deployment. name: gluu-all-in-one -version: 5.1.6-dev +version: 5.1.6 diff --git a/charts/gluu-all-in-one/README.md b/charts/gluu-all-in-one/README.md index 214faa313..05c23a7d0 100644 --- a/charts/gluu-all-in-one/README.md +++ b/charts/gluu-all-in-one/README.md @@ -1,6 +1,6 @@ # gluu-all-in-one -![Version: 5.1.6-dev](https://img.shields.io/badge/Version-5.1.6--dev-informational?style=flat-square) ![AppVersion: 5.1.6-dev](https://img.shields.io/badge/AppVersion-5.1.6--dev-informational?style=flat-square) +![Version: 5.1.6](https://img.shields.io/badge/Version-5.1.6-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) Gluu Access and Identity Management All-in-One Chart. This chart deploys the selected janssen microservice all in one deployment. @@ -35,7 +35,7 @@ Kubernetes: `>=v1.22.0-0` | adminPassword | string | `"Test1234#"` | Admin password to log in to the UI. | | alb.ingress | bool | `false` | switches the service to Nodeport for ALB ingress | | auth-server | object | `{"appLoggers":{"auditStatsLogLevel":"INFO","auditStatsLogTarget":"FILE","authLogLevel":"INFO","authLogTarget":"STDOUT","enableStdoutLogPrefix":"true","httpLogLevel":"INFO","httpLogTarget":"FILE","persistenceDurationLogLevel":"INFO","persistenceDurationLogTarget":"FILE","persistenceLogLevel":"INFO","persistenceLogTarget":"FILE","scriptLogLevel":"INFO","scriptLogTarget":"FILE"},"authEncKeys":"RSA1_5 RSA-OAEP","authSigKeys":"RS256 RS384 RS512 ES256 ES384 ES512 PS256 PS384 PS512","enabled":true,"ingress":{"authServerAdditionalAnnotations":{},"authServerEnabled":true,"authServerLabels":{},"authServerProtectedRegister":false,"authServerProtectedRegisterAdditionalAnnotations":{},"authServerProtectedRegisterLabels":{},"authServerProtectedToken":false,"authServerProtectedTokenAdditionalAnnotations":{},"authServerProtectedTokenLabels":{},"deviceCodeAdditionalAnnotations":{},"deviceCodeEnabled":true,"deviceCodeLabels":{},"firebaseMessagingAdditionalAnnotations":{},"firebaseMessagingEnabled":true,"firebaseMessagingLabels":{},"lockAdditionalAnnotations":{},"lockConfigAdditionalAnnotations":{},"lockConfigEnabled":false,"lockConfigLabels":{},"lockEnabled":false,"lockLabels":{},"openidAdditionalAnnotations":{},"openidConfigEnabled":true,"openidConfigLabels":{},"u2fAdditionalAnnotations":{},"u2fConfigEnabled":true,"u2fConfigLabels":{},"uma2AdditionalAnnotations":{},"uma2ConfigEnabled":true,"uma2ConfigLabels":{},"webdiscoveryAdditionalAnnotations":{},"webdiscoveryEnabled":true,"webdiscoveryLabels":{},"webfingerAdditionalAnnotations":{},"webfingerEnabled":true,"webfingerLabels":{}},"lockEnabled":false}` | Parameters used globally across all services helm charts. | -| auth-server-key-rotation | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","enabled":true,"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/certmanager","tag":"1.1.6_dev"},"initKeysLife":48,"keysLife":48,"keysPushDelay":0,"keysPushStrategy":"NEWER","keysStrategy":"NEWER","lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for regenerating auth-keys per x hours | +| auth-server-key-rotation | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","enabled":true,"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/certmanager","tag":"1.1.6-1"},"initKeysLife":48,"keysLife":48,"keysPushDelay":0,"keysPushStrategy":"NEWER","keysStrategy":"NEWER","lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for regenerating auth-keys per x hours | | auth-server-key-rotation.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | auth-server-key-rotation.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | auth-server-key-rotation.customCommand | list | `[]` | Add custom job's command. If passed, it will override the default conditional command. | @@ -46,7 +46,7 @@ Kubernetes: `>=v1.22.0-0` | auth-server-key-rotation.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | auth-server-key-rotation.image.pullSecrets | list | `[]` | Image Pull Secrets | | auth-server-key-rotation.image.repository | string | `"ghcr.io/janssenproject/jans/certmanager"` | Image to use for deploying. | -| auth-server-key-rotation.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| auth-server-key-rotation.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | auth-server-key-rotation.initKeysLife | int | `48` | The initial auth server key rotation keys life in hours | | auth-server-key-rotation.keysLife | int | `48` | Auth server key rotation keys life in hours | | auth-server-key-rotation.keysPushDelay | int | `0` | Delay (in seconds) before pushing private keys to Auth server | @@ -214,6 +214,8 @@ Kubernetes: `>=v1.22.0-0` | configmap.cnVaultSecretIdFile | string | `"/etc/certs/vault_secret_id"` | Path to file contains Vault AppRole secret ID. | | configmap.cnVaultVerify | bool | `false` | Verify connection to Vault. | | configmap.containerMetadataName | string | `"kubernetes"` | | +| configmap.kcAdminPassword | string | `"Test1234#"` | Keycloak admin UI password | +| configmap.kcAdminUsername | string | `"admin"` | Keycloak admin UI username | | configmap.kcDbPassword | string | `"Test1234#"` | Password for Keycloak database access | | configmap.kcDbSchema | string | `"keycloak"` | Keycloak database schema name (note that PostgreSQL may using "public" schema). | | configmap.kcDbUrlDatabase | string | `"keycloak"` | Keycloak database name | @@ -270,7 +272,7 @@ Kubernetes: `>=v1.22.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"ghcr.io/gluufederation/flex/flex-all-in-one"` | Image to use for deploying. | -| image.tag | string | `"5.1.6_dev"` | Image tag to use for deploying. | +| image.tag | string | `"5.1.6-1"` | Image tag to use for deploying. | | isFqdnRegistered | bool | `false` | Boolean flag to enable mapping lbIp to fqdn inside pods on clouds that provide static ip for load balancers. On cloud that provide only addresses to the LB this flag will enable a script to actively scan config.configmap.lbAddr and update the hosts file inside the pods automatically. | | istio.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | istio.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | @@ -279,7 +281,7 @@ Kubernetes: `>=v1.22.0-0` | istio.ingress | bool | `false` | Boolean flag that enables using istio gateway for Gluu. This assumes istio ingress is installed and hence the LB is available. | | istio.namespace | string | `"istio-system"` | The namespace istio is deployed in. The is normally istio-system. | | istio.tlsSecretName | string | `"istio-tls-certificate"` | | -| kc-scheduler | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","enabled":false,"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/kc-scheduler","tag":"1.1.6_dev"},"interval":10,"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for synchronizing Keycloak SAML clients | +| kc-scheduler | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","enabled":false,"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/kc-scheduler","tag":"1.1.6-1"},"interval":10,"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for synchronizing Keycloak SAML clients | | kc-scheduler.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | kc-scheduler.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | kc-scheduler.customCommand | list | `[]` | Add custom job's command. If passed, it will override the default conditional command. | @@ -290,7 +292,7 @@ Kubernetes: `>=v1.22.0-0` | kc-scheduler.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | kc-scheduler.image.pullSecrets | list | `[]` | Image Pull Secrets | | kc-scheduler.image.repository | string | `"ghcr.io/janssenproject/jans/kc-scheduler"` | Image to use for deploying. | -| kc-scheduler.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| kc-scheduler.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | kc-scheduler.interval | int | `10` | Interval of running the scheduler (in minutes) | | kc-scheduler.resources | object | `{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}}` | Resource specs. | | kc-scheduler.resources.limits.cpu | string | `"300m"` | CPU limit. | @@ -302,8 +304,6 @@ Kubernetes: `>=v1.22.0-0` | kc-scheduler.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | kc-scheduler.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | kc-scheduler.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| kcAdminCredentialsFile | string | `"/etc/jans/conf/kc_admin_creds"` | Path to file contains Keycloak admin credentials (username and password) | -| kcDbPasswordFile | string | `"/etc/jans/conf/kc_db_password"` | Path to file contains password for database access | | lbIp | string | `"22.22.22.22"` | The Loadbalancer IP created by nginx or istio on clouds that provide static IPs. This is not needed if `fqdn` is globally resolvable. | | lifecycle | object | `{}` | | | link.appLoggers | object | `{"enableStdoutLogPrefix":"true","linkLogLevel":"INFO","linkLogTarget":"STDOUT","persistenceDurationLogLevel":"INFO","persistenceDurationLogTarget":"FILE","persistenceLogLevel":"INFO","persistenceLogTarget":"FILE","scriptLogLevel":"INFO","scriptLogTarget":"FILE"}` | App loggers can be configured to define where the logs will be redirected to and the level of each in which it should be displayed. | diff --git a/charts/gluu-all-in-one/values.yaml b/charts/gluu-all-in-one/values.yaml index 1c4ab3934..5dc83a1b6 100644 --- a/charts/gluu-all-in-one/values.yaml +++ b/charts/gluu-all-in-one/values.yaml @@ -305,7 +305,7 @@ auth-server-key-rotation: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/certmanager # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Auth server key rotation keys life in hours @@ -697,7 +697,7 @@ image: # -- Image to use for deploying. repository: ghcr.io/gluufederation/flex/flex-all-in-one # -- Image tag to use for deploying. - tag: 5.1.6_dev + tag: 5.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -776,7 +776,7 @@ kc-scheduler: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/kc-scheduler # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Resource specs. diff --git a/charts/gluu/Chart.yaml b/charts/gluu/Chart.yaml index bde225d85..505e13352 100644 --- a/charts/gluu/Chart.yaml +++ b/charts/gluu/Chart.yaml @@ -3,35 +3,35 @@ annotations: artifacthub.io/containsSecurityUpdates: "true" artifacthub.io/images: | - name: auth-server - image: ghcr.io/janssenproject/jans/auth-server:1.1.6_dev + image: ghcr.io/janssenproject/jans/auth-server:1.1.6-1 - name: auth-server-key-rotation - image: ghcr.io/janssenproject/jans/certmanager:1.1.6_dev + image: ghcr.io/janssenproject/jans/certmanager:1.1.6-1 - name: configuration-manager - image: ghcr.io/janssenproject/jans/configurator:1.1.6_dev + image: ghcr.io/janssenproject/jans/configurator:1.1.6-1 - name: config-api - image: ghcr.io/janssenproject/jans/config-api:1.1.6_dev + image: ghcr.io/janssenproject/jans/config-api:1.1.6-1 - name: fido2 - image: ghcr.io/janssenproject/jans/fido2:1.1.6_dev + image: ghcr.io/janssenproject/jans/fido2:1.1.6-1 - name: persistence - image: ghcr.io/janssenproject/jans/persistence-loader:1.1.6_dev + image: ghcr.io/janssenproject/jans/persistence-loader:1.1.6-1 - name: scim - image: ghcr.io/janssenproject/jans/scim:1.1.6_dev + image: ghcr.io/janssenproject/jans/scim:1.1.6-1 - name: casa - image: ghcr.io/janssenproject/jans/casa:1.1.6_dev + image: ghcr.io/janssenproject/jans/casa:1.1.6-1 - name: admin-ui - image: ghcr.io/gluufederation/flex/admin-ui:5.1.6_dev + image: ghcr.io/gluufederation/flex/admin-ui:5.1.6-1 - name: link - image: ghcr.io/janssenproject/jans/link:1.1.6_dev + image: ghcr.io/janssenproject/jans/link:1.1.6-1 - name: saml - image: ghcr.io/janssenproject/jans/saml:1.1.6_dev + image: ghcr.io/janssenproject/jans/saml:1.1.6-1 - name: kc-scheduler - image: ghcr.io/janssenproject/jans/kc-scheduler:1.1.6_dev + image: ghcr.io/janssenproject/jans/kc-scheduler:1.1.6-1 artifacthub.io/license: Apache-2.0 catalog.cattle.io/certified: partner catalog.cattle.io/release-name: gluu catalog.cattle.io/display-name: Gluu Cloud Identity and Access Management apiVersion: v2 -appVersion: "5.1.6-dev" +appVersion: "5.1.6" icon: https://gluu.org/docs/gluu-server/favicon.ico home: https://www.gluu.org sources: @@ -41,60 +41,60 @@ maintainers: email: team@gluu.org description: Gluu Access and Identity Management name: gluu -version: 5.1.6-dev +version: 5.1.6 dependencies: - name: config condition: global.config.enabled - version: 1.1.6-dev + version: 1.1.6 - name: config-api condition: global.config-api.enabled - version: 1.1.6-dev + version: 1.1.6 - name: auth-server condition: global.auth-server.enabled - version: 1.1.6-dev + version: 1.1.6 - name: admin-ui condition: global.admin-ui.enabled - version: 5.1.6-dev + version: 5.1.6 - name: fido2 condition: global.fido2.enabled - version: 1.1.6-dev + version: 1.1.6 - name: scim condition: global.scim.enabled - version: 1.1.6-dev + version: 1.1.6 - name: nginx-ingress condition: global.nginx-ingress.enabled - version: 5.1.6-dev + version: 5.1.6 - name: casa - version: 1.1.6-dev + version: 1.1.6 condition: global.casa.enabled - name: auth-server-key-rotation condition: global.auth-server-key-rotation.enabled - version: 1.1.6-dev + version: 1.1.6 - name: persistence condition: global.persistence.enabled - version: 1.1.6-dev + version: 1.1.6 - name: cn-istio-ingress condition: global.istio.ingress - version: 5.1.6-dev + version: 5.1.6 - name: link condition: global.link.enabled - version: 1.1.6-dev + version: 1.1.6 - name: saml condition: global.saml.enabled - version: 1.1.6-dev + version: 1.1.6 - name: kc-scheduler condition: global.kc-scheduler.enabled - version: 1.1.6-dev + version: 1.1.6 diff --git a/charts/gluu/README.md b/charts/gluu/README.md index 96bc994e1..eb1e04f88 100644 --- a/charts/gluu/README.md +++ b/charts/gluu/README.md @@ -1,6 +1,6 @@ # gluu -![Version: 5.1.6-dev](https://img.shields.io/badge/Version-5.1.6--dev-informational?style=flat-square) ![AppVersion: 5.1.6-dev](https://img.shields.io/badge/AppVersion-5.1.6--dev-informational?style=flat-square) +![Version: 5.1.6](https://img.shields.io/badge/Version-5.1.6-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) Gluu Access and Identity Management @@ -22,26 +22,26 @@ Kubernetes: `>=v1.21.0-0` | Repository | Name | Version | |------------|------|---------| -| | admin-ui | 5.1.6-dev | -| | auth-server | 1.1.6-dev | -| | auth-server-key-rotation | 1.1.6-dev | -| | casa | 1.1.6-dev | -| | cn-istio-ingress | 5.1.6-dev | -| | config | 1.1.6-dev | -| | config-api | 1.1.6-dev | -| | fido2 | 1.1.6-dev | -| | kc-scheduler | 1.1.6-dev | -| | link | 1.1.6-dev | -| | nginx-ingress | 5.1.6-dev | -| | persistence | 1.1.6-dev | -| | saml | 1.1.6-dev | -| | scim | 1.1.6-dev | +| | admin-ui | 5.1.6 | +| | auth-server | 1.1.6 | +| | auth-server-key-rotation | 1.1.6 | +| | casa | 1.1.6 | +| | cn-istio-ingress | 5.1.6 | +| | config | 1.1.6 | +| | config-api | 1.1.6 | +| | fido2 | 1.1.6 | +| | kc-scheduler | 1.1.6 | +| | link | 1.1.6 | +| | nginx-ingress | 5.1.6 | +| | persistence | 1.1.6 | +| | saml | 1.1.6 | +| | scim | 1.1.6 | ## Values | Key | Type | Default | Description | |-----|------|---------|-------------| -| admin-ui | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/gluufederation/flex/admin-ui","tag":"5.1.6_dev"},"lifecycle":{},"livenessProbe":{"failureThreshold":20,"initialDelaySeconds":60,"periodSeconds":25,"tcpSocket":{"port":8080},"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"failureThreshold":20,"initialDelaySeconds":60,"periodSeconds":25,"tcpSocket":{"port":8080},"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"2000m","memory":"2000Mi"},"requests":{"cpu":"2000m","memory":"2000Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Admin GUI for configuration of the auth-server | +| admin-ui | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/gluufederation/flex/admin-ui","tag":"5.1.6-1"},"lifecycle":{},"livenessProbe":{"failureThreshold":20,"initialDelaySeconds":60,"periodSeconds":25,"tcpSocket":{"port":8080},"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"failureThreshold":20,"initialDelaySeconds":60,"periodSeconds":25,"tcpSocket":{"port":8080},"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"2000m","memory":"2000Mi"},"requests":{"cpu":"2000m","memory":"2000Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Admin GUI for configuration of the auth-server | | admin-ui.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | admin-ui.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | admin-ui.customCommand | list | `[]` | Add custom pod's command. If passed, it will override the default conditional command. | @@ -54,7 +54,7 @@ Kubernetes: `>=v1.21.0-0` | admin-ui.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | admin-ui.image.pullSecrets | list | `[]` | Image Pull Secrets | | admin-ui.image.repository | string | `"ghcr.io/gluufederation/flex/admin-ui"` | Image to use for deploying. | -| admin-ui.image.tag | string | `"5.1.6_dev"` | Image tag to use for deploying. | +| admin-ui.image.tag | string | `"5.1.6-1"` | Image tag to use for deploying. | | admin-ui.livenessProbe | object | `{"failureThreshold":20,"initialDelaySeconds":60,"periodSeconds":25,"tcpSocket":{"port":8080},"timeoutSeconds":5}` | Configure the liveness healthcheck for the admin ui if needed. | | admin-ui.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | | admin-ui.readinessProbe | object | `{"failureThreshold":20,"initialDelaySeconds":60,"periodSeconds":25,"tcpSocket":{"port":8080},"timeoutSeconds":5}` | Configure the readiness healthcheck for the admin ui if needed. | @@ -70,8 +70,8 @@ Kubernetes: `>=v1.21.0-0` | admin-ui.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | admin-ui.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | admin-ui.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| auth-server | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/auth-server","tag":"1.1.6_dev"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"2500m","memory":"2500Mi"},"requests":{"cpu":"2500m","memory":"2500Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | OAuth Authorization Server, the OpenID Connect Provider, the UMA Authorization Server--this is the main Internet facing component of Gluu. It's the service that returns tokens, JWT's and identity assertions. This service must be Internet facing. | -| auth-server-key-rotation | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/certmanager","tag":"1.1.6_dev"},"keysLife":48,"keysPushDelay":0,"keysPushStrategy":"NEWER","keysStrategy":"NEWER","lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for regenerating auth-keys per x hours | +| auth-server | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/auth-server","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"2500m","memory":"2500Mi"},"requests":{"cpu":"2500m","memory":"2500Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | OAuth Authorization Server, the OpenID Connect Provider, the UMA Authorization Server--this is the main Internet facing component of Gluu. It's the service that returns tokens, JWT's and identity assertions. This service must be Internet facing. | +| auth-server-key-rotation | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/certmanager","tag":"1.1.6-1"},"keysLife":48,"keysPushDelay":0,"keysPushStrategy":"NEWER","keysStrategy":"NEWER","lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for regenerating auth-keys per x hours | | auth-server-key-rotation.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | auth-server-key-rotation.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | auth-server-key-rotation.customCommand | list | `[]` | Add custom job's command. If passed, it will override the default conditional command. | @@ -81,7 +81,7 @@ Kubernetes: `>=v1.21.0-0` | auth-server-key-rotation.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | auth-server-key-rotation.image.pullSecrets | list | `[]` | Image Pull Secrets | | auth-server-key-rotation.image.repository | string | `"ghcr.io/janssenproject/jans/certmanager"` | Image to use for deploying. | -| auth-server-key-rotation.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| auth-server-key-rotation.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | auth-server-key-rotation.keysLife | int | `48` | Auth server key rotation keys life in hours | | auth-server-key-rotation.keysPushDelay | int | `0` | Delay (in seconds) before pushing private keys to Auth server | | auth-server-key-rotation.keysPushStrategy | string | `"NEWER"` | Set key selection strategy after pushing private keys to Auth server (only takes effect when keysPushDelay value is greater than 0) | @@ -108,7 +108,7 @@ Kubernetes: `>=v1.21.0-0` | auth-server.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | auth-server.image.pullSecrets | list | `[]` | Image Pull Secrets | | auth-server.image.repository | string | `"ghcr.io/janssenproject/jans/auth-server"` | Image to use for deploying. | -| auth-server.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| auth-server.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | auth-server.livenessProbe | object | `{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | auth-server.livenessProbe.exec | object | `{"command":["python3","/app/scripts/healthcheck.py"]}` | Executes the python3 healthcheck. https://github.com/JanssenProject/docker-jans-auth-server/blob/master/scripts/healthcheck.py | | auth-server.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -125,7 +125,7 @@ Kubernetes: `>=v1.21.0-0` | auth-server.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | auth-server.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | auth-server.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| casa | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/casa","tag":"1.1.6_dev"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"500Mi"},"requests":{"cpu":"500m","memory":"500Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Janssen Casa ("Casa") is a self-service web portal for end-users to manage authentication and authorization preferences for their account in a Janssen Auth Server. | +| casa | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/casa","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"500Mi"},"requests":{"cpu":"500m","memory":"500Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Janssen Casa ("Casa") is a self-service web portal for end-users to manage authentication and authorization preferences for their account in a Janssen Auth Server. | | casa.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | casa.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | casa.customCommand | list | `[]` | Add custom pod's command. If passed, it will override the default conditional command. | @@ -138,7 +138,7 @@ Kubernetes: `>=v1.21.0-0` | casa.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | casa.image.pullSecrets | list | `[]` | Image Pull Secrets | | casa.image.repository | string | `"ghcr.io/janssenproject/jans/casa"` | Image to use for deploying. | -| casa.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| casa.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | casa.livenessProbe | object | `{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5}` | Configure the liveness healthcheck for casa if needed. | | casa.livenessProbe.httpGet.path | string | `"/jans-casa/health-check"` | http liveness probe endpoint | | casa.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -156,8 +156,8 @@ Kubernetes: `>=v1.21.0-0` | casa.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | casa.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | casa.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| config | object | `{"additionalAnnotations":{},"additionalLabels":{},"adminPassword":"Test1234#","city":"Austin","configmap":{"cnAwsAccessKeyId":"","cnAwsDefaultRegion":"us-west-1","cnAwsProfile":"gluu","cnAwsSecretAccessKey":"","cnAwsSecretsEndpointUrl":"","cnAwsSecretsNamePrefix":"gluu","cnAwsSecretsReplicaRegions":[],"cnCacheType":"NATIVE_PERSISTENCE","cnConfigKubernetesConfigMap":"cn","cnGoogleProjectId":"google-project-to-save-config-and-secrets-to","cnGoogleSecretManagerServiceAccount":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnGoogleSecretNamePrefix":"gluu","cnGoogleSecretVersionId":"latest","cnJettyRequestHeaderSize":8192,"cnMaxRamPercent":"75.0","cnMessageType":"DISABLED","cnOpaUrl":"http://opa.opa.svc.cluster.cluster.local:8181/v1","cnPersistenceHybridMapping":"{}","cnRedisSentinelGroup":"","cnRedisSslTruststore":"","cnRedisType":"STANDALONE","cnRedisUrl":"redis.redis.svc.cluster.local:6379","cnRedisUseSsl":false,"cnScimProtectionMode":"OAUTH","cnSecretKubernetesSecret":"cn","cnSqlDbDialect":"mysql","cnSqlDbHost":"my-release-mysql.default.svc.cluster.local","cnSqlDbName":"gluu","cnSqlDbPort":3306,"cnSqlDbSchema":"","cnSqlDbTimezone":"UTC","cnSqlDbUser":"gluu","cnSqldbUserPassword":"Test1234#","cnVaultAddr":"http://localhost:8200","cnVaultAppRolePath":"approle","cnVaultKvPath":"secret","cnVaultNamespace":"","cnVaultPrefix":"jans","cnVaultRoleId":"","cnVaultRoleIdFile":"/etc/certs/vault_role_id","cnVaultSecretId":"","cnVaultSecretIdFile":"/etc/certs/vault_secret_id","cnVaultVerify":false,"kcDbPassword":"Test1234#","kcDbSchema":"keycloak","kcDbUrlDatabase":"keycloak","kcDbUrlHost":"mysql.kc.svc.cluster.local","kcDbUrlPort":3306,"kcDbUrlProperties":"?useUnicode=true&characterEncoding=UTF-8&character_set_server=utf8mb4","kcDbUsername":"keycloak","kcDbVendor":"mysql","kcLogLevel":"INFO","lbAddr":"","quarkusTransactionEnableRecovery":true},"countryCode":"US","customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","email":"team@gluu.org","image":{"pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/configurator","tag":"1.1.6_dev"},"lifecycle":{},"migration":{"enabled":false,"migrationDataFormat":"ldif","migrationDir":"/ce-migration"},"orgName":"Gluu","redisPassword":"P@assw0rd","resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"salt":"","state":"TX","usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Configuration parameters for setup and initial configuration secret and config layers used by Gluu services. | -| config-api | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/config-api","tag":"1.1.6_dev"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-config-api/api/v1/health/live","port":8074},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"jans-config-api/api/v1/health/ready","port":8074},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1200Mi"},"requests":{"cpu":"1000m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Config Api endpoints can be used to configure the auth-server, which is an open-source OpenID Connect Provider (OP) and UMA Authorization Server (AS). | +| config | object | `{"additionalAnnotations":{},"additionalLabels":{},"adminPassword":"Test1234#","city":"Austin","configmap":{"cnAwsAccessKeyId":"","cnAwsDefaultRegion":"us-west-1","cnAwsProfile":"gluu","cnAwsSecretAccessKey":"","cnAwsSecretsEndpointUrl":"","cnAwsSecretsNamePrefix":"gluu","cnAwsSecretsReplicaRegions":[],"cnCacheType":"NATIVE_PERSISTENCE","cnConfigKubernetesConfigMap":"cn","cnGoogleProjectId":"google-project-to-save-config-and-secrets-to","cnGoogleSecretManagerServiceAccount":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnGoogleSecretNamePrefix":"gluu","cnGoogleSecretVersionId":"latest","cnJettyRequestHeaderSize":8192,"cnMaxRamPercent":"75.0","cnMessageType":"DISABLED","cnOpaUrl":"http://opa.opa.svc.cluster.cluster.local:8181/v1","cnPersistenceHybridMapping":"{}","cnRedisSentinelGroup":"","cnRedisSslTruststore":"","cnRedisType":"STANDALONE","cnRedisUrl":"redis.redis.svc.cluster.local:6379","cnRedisUseSsl":false,"cnScimProtectionMode":"OAUTH","cnSecretKubernetesSecret":"cn","cnSqlDbDialect":"mysql","cnSqlDbHost":"my-release-mysql.default.svc.cluster.local","cnSqlDbName":"gluu","cnSqlDbPort":3306,"cnSqlDbSchema":"","cnSqlDbTimezone":"UTC","cnSqlDbUser":"gluu","cnSqldbUserPassword":"Test1234#","cnVaultAddr":"http://localhost:8200","cnVaultAppRolePath":"approle","cnVaultKvPath":"secret","cnVaultNamespace":"","cnVaultPrefix":"jans","cnVaultRoleId":"","cnVaultRoleIdFile":"/etc/certs/vault_role_id","cnVaultSecretId":"","cnVaultSecretIdFile":"/etc/certs/vault_secret_id","cnVaultVerify":false,"kcAdminPassword":"Test1234#","kcAdminUsername":"admin","kcDbPassword":"Test1234#","kcDbSchema":"keycloak","kcDbUrlDatabase":"keycloak","kcDbUrlHost":"mysql.kc.svc.cluster.local","kcDbUrlPort":3306,"kcDbUrlProperties":"?useUnicode=true&characterEncoding=UTF-8&character_set_server=utf8mb4","kcDbUsername":"keycloak","kcDbVendor":"mysql","kcLogLevel":"INFO","lbAddr":"","quarkusTransactionEnableRecovery":true},"countryCode":"US","customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","email":"team@gluu.org","image":{"pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/configurator","tag":"1.1.6-1"},"lifecycle":{},"migration":{"enabled":false,"migrationDataFormat":"ldif","migrationDir":"/ce-migration"},"orgName":"Gluu","redisPassword":"P@assw0rd","resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"salt":"","state":"TX","usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Configuration parameters for setup and initial configuration secret and config layers used by Gluu services. | +| config-api | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/config-api","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-config-api/api/v1/health/live","port":8074},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"jans-config-api/api/v1/health/ready","port":8074},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1200Mi"},"requests":{"cpu":"1000m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Config Api endpoints can be used to configure the auth-server, which is an open-source OpenID Connect Provider (OP) and UMA Authorization Server (AS). | | config-api.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | config-api.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | config-api.customCommand | list | `[]` | Add custom pod's command. If passed, it will override the default conditional command. | @@ -170,7 +170,7 @@ Kubernetes: `>=v1.21.0-0` | config-api.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | config-api.image.pullSecrets | list | `[]` | Image Pull Secrets | | config-api.image.repository | string | `"ghcr.io/janssenproject/jans/config-api"` | Image to use for deploying. | -| config-api.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| config-api.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | config-api.livenessProbe | object | `{"httpGet":{"path":"/jans-config-api/api/v1/health/live","port":8074},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | config-api.livenessProbe.httpGet | object | `{"path":"/jans-config-api/api/v1/health/live","port":8074}` | http liveness probe endpoint | | config-api.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -227,6 +227,8 @@ Kubernetes: `>=v1.21.0-0` | config.configmap.cnVaultSecretId | string | `""` | Vault AppRole SecretID. | | config.configmap.cnVaultSecretIdFile | string | `"/etc/certs/vault_secret_id"` | Path to file contains Vault AppRole secret ID. | | config.configmap.cnVaultVerify | bool | `false` | Verify connection to Vault. | +| config.configmap.kcAdminPassword | string | `"Test1234#"` | Keycloak admin UI password | +| config.configmap.kcAdminUsername | string | `"admin"` | Keycloak admin UI username | | config.configmap.kcDbPassword | string | `"Test1234#"` | Password for Keycloak database access | | config.configmap.kcDbSchema | string | `"keycloak"` | Keycloak database schema name (note that PostgreSQL may be using "public" schema). | | config.configmap.kcDbUrlDatabase | string | `"keycloak"` | Keycloak database name. | @@ -246,7 +248,7 @@ Kubernetes: `>=v1.21.0-0` | config.email | string | `"team@gluu.org"` | Email address of the administrator usually. Used for certificate creation. | | config.image.pullSecrets | list | `[]` | Image Pull Secrets | | config.image.repository | string | `"ghcr.io/janssenproject/jans/configurator"` | Image to use for deploying. | -| config.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| config.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | config.migration | object | `{"enabled":false,"migrationDataFormat":"ldif","migrationDir":"/ce-migration"}` | CE to CN Migration section | | config.migration.enabled | bool | `false` | Boolean flag to enable migration from CE | | config.migration.migrationDataFormat | string | `"ldif"` | migration data-format depending on persistence backend. Supported data formats are ldif, postgresql+json, and mysql+json. | @@ -265,7 +267,7 @@ Kubernetes: `>=v1.21.0-0` | config.usrEnvs.secret | object | `{}` | Add custom secret envs to the service. variable1: value1 | | config.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | config.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| fido2 | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/fido2","tag":"1.1.6_dev"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"500Mi"},"requests":{"cpu":"500m","memory":"500Mi"}},"service":{"name":"http-fido2","port":8080},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | FIDO 2.0 (FIDO2) is an open authentication standard that enables leveraging common devices to authenticate to online services in both mobile and desktop environments. | +| fido2 | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/fido2","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"500Mi"},"requests":{"cpu":"500m","memory":"500Mi"}},"service":{"name":"http-fido2","port":8080},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | FIDO 2.0 (FIDO2) is an open authentication standard that enables leveraging common devices to authenticate to online services in both mobile and desktop environments. | | fido2.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | fido2.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | fido2.customCommand | list | `[]` | Add custom pod's command. If passed, it will override the default conditional command. | @@ -278,7 +280,7 @@ Kubernetes: `>=v1.21.0-0` | fido2.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | fido2.image.pullSecrets | list | `[]` | Image Pull Secrets | | fido2.image.repository | string | `"ghcr.io/janssenproject/jans/fido2"` | Image to use for deploying. | -| fido2.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| fido2.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | fido2.livenessProbe | object | `{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5}` | Configure the liveness healthcheck for the fido2 if needed. | | fido2.livenessProbe.httpGet | object | `{"path":"/jans-fido2/sys/health-check","port":"http-fido2"}` | http liveness probe endpoint | | fido2.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -297,7 +299,7 @@ Kubernetes: `>=v1.21.0-0` | fido2.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | fido2.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | fido2.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| global | object | `{"admin-ui":{"adminUiServiceName":"admin-ui","customAnnotations":{"deployment":{},"destinationRule":{},"horizontalPodAutoscaler":{},"pod":{},"podDisruptionBudget":{},"secret":{},"service":{},"virtualService":{}},"enabled":true,"ingress":{"adminUiAdditionalAnnotations":{},"adminUiEnabled":false,"adminUiLabels":{}}},"alb":{"ingress":false},"auth-server":{"appLoggers":{"auditStatsLogLevel":"INFO","auditStatsLogTarget":"FILE","authLogLevel":"INFO","authLogTarget":"STDOUT","enableStdoutLogPrefix":"true","httpLogLevel":"INFO","httpLogTarget":"FILE","persistenceDurationLogLevel":"INFO","persistenceDurationLogTarget":"FILE","persistenceLogLevel":"INFO","persistenceLogTarget":"FILE","scriptLogLevel":"INFO","scriptLogTarget":"FILE"},"authEncKeys":"RSA1_5 RSA-OAEP","authServerServiceName":"auth-server","authSigKeys":"RS256 RS384 RS512 ES256 ES384 ES512 PS256 PS384 PS512","cnCustomJavaOptions":"","customAnnotations":{"deployment":{},"destinationRule":{},"horizontalPodAutoscaler":{},"pod":{},"podDisruptionBudget":{},"secret":{},"service":{},"virtualService":{}},"enabled":true,"ingress":{"authServerAdditionalAnnotations":{},"authServerEnabled":true,"authServerLabels":{},"authServerProtectedRegister":false,"authServerProtectedRegisterAdditionalAnnotations":{},"authServerProtectedRegisterLabels":{},"authServerProtectedToken":false,"authServerProtectedTokenAdditionalAnnotations":{},"authServerProtectedTokenLabels":{},"deviceCodeAdditionalAnnotations":{},"deviceCodeEnabled":true,"deviceCodeLabels":{},"firebaseMessagingAdditionalAnnotations":{},"firebaseMessagingEnabled":true,"firebaseMessagingLabels":{},"lockAdditionalAnnotations":{},"lockConfigAdditionalAnnotations":{},"lockConfigEnabled":false,"lockConfigLabels":{},"lockEnabled":false,"lockLabels":{},"openidAdditionalAnnotations":{},"openidConfigEnabled":true,"openidConfigLabels":{},"u2fAdditionalAnnotations":{},"u2fConfigEnabled":true,"u2fConfigLabels":{},"uma2AdditionalAnnotations":{},"uma2ConfigEnabled":true,"uma2ConfigLabels":{},"webdiscoveryAdditionalAnnotations":{},"webdiscoveryEnabled":true,"webdiscoveryLabels":{},"webfingerAdditionalAnnotations":{},"webfingerEnabled":true,"webfingerLabels":{}},"lockEnabled":false},"auth-server-key-rotation":{"customAnnotations":{"cronjob":{},"secret":{},"service":{}},"enabled":true,"initKeysLife":48},"awsStorageType":"io1","azureStorageAccountType":"Standard_LRS","azureStorageKind":"Managed","casa":{"appLoggers":{"casaLogLevel":"INFO","casaLogTarget":"STDOUT","enableStdoutLogPrefix":"true","timerLogLevel":"INFO","timerLogTarget":"FILE"},"casaServiceName":"casa","cnCustomJavaOptions":"","customAnnotations":{"deployment":{},"destinationRule":{},"horizontalPodAutoscaler":{},"pod":{},"podDisruptionBudget":{},"secret":{},"service":{},"virtualService":{}},"enabled":true,"ingress":{"casaAdditionalAnnotations":{},"casaEnabled":false,"casaLabels":{}}},"cloud":{"testEnviroment":false},"cnAwsConfigFile":"/etc/jans/conf/aws_config_file","cnAwsSecretsReplicaRegionsFile":"/etc/jans/conf/aws_secrets_replica_regions","cnAwsSharedCredentialsFile":"/etc/jans/conf/aws_shared_credential_file","cnConfiguratorConfigurationFile":"/etc/jans/conf/configuration.json","cnConfiguratorCustomSchema":{"secretName":""},"cnConfiguratorDumpFile":"/etc/jans/conf/configuration.out.json","cnDocumentStoreType":"DB","cnGoogleApplicationCredentials":"/etc/jans/conf/google-credentials.json","cnObExtSigningAlias":"","cnObExtSigningJwksCrt":"","cnObExtSigningJwksKey":"","cnObExtSigningJwksKeyPassPhrase":"","cnObExtSigningJwksUri":"","cnObStaticSigningKeyKid":"","cnObTransportAlias":"","cnObTransportCrt":"","cnObTransportKey":"","cnObTransportKeyPassPhrase":"","cnObTransportTrustStore":"","cnPersistenceType":"sql","cnPrometheusPort":"","cnSqlPasswordFile":"/etc/jans/conf/sql_password","config":{"customAnnotations":{"clusterRoleBinding":{},"configMap":{},"job":{},"role":{},"roleBinding":{},"secret":{},"service":{},"serviceAccount":{}},"enabled":true},"config-api":{"adminUiAppLoggers":{"adminUiAuditLogLevel":"INFO","adminUiAuditLogTarget":"FILE","adminUiLogLevel":"INFO","adminUiLogTarget":"FILE","enableStdoutLogPrefix":"true"},"appLoggers":{"configApiLogLevel":"INFO","configApiLogTarget":"STDOUT","enableStdoutLogPrefix":"true","persistenceDurationLogLevel":"INFO","persistenceDurationLogTarget":"FILE","persistenceLogLevel":"INFO","persistenceLogTarget":"FILE","scriptLogLevel":"INFO","scriptLogTarget":"FILE"},"cnCustomJavaOptions":"","configApiServerServiceName":"config-api","customAnnotations":{"deployment":{},"destinationRule":{},"horizontalPodAutoscaler":{},"pod":{},"podDisruptionBudget":{},"service":{},"virtualService":{}},"enabled":true,"ingress":{"configApiAdditionalAnnotations":{},"configApiEnabled":true,"configApiLabels":{}},"plugins":"admin-ui,fido2,scim,user-mgt"},"configAdapterName":"kubernetes","configSecretAdapter":"kubernetes","distribution":"default","fido2":{"appLoggers":{"enableStdoutLogPrefix":"true","fido2LogLevel":"INFO","fido2LogTarget":"STDOUT","persistenceDurationLogLevel":"INFO","persistenceDurationLogTarget":"FILE","persistenceLogLevel":"INFO","persistenceLogTarget":"FILE","scriptLogLevel":"INFO","scriptLogTarget":"FILE"},"cnCustomJavaOptions":"","customAnnotations":{"deployment":{},"destinationRule":{},"horizontalPodAutoscaler":{},"pod":{},"podDisruptionBudget":{},"secret":{},"service":{},"virtualService":{}},"enabled":true,"fido2ServiceName":"fido2","ingress":{"fido2AdditionalAnnotations":{},"fido2ConfigAdditionalAnnotations":{},"fido2ConfigEnabled":false,"fido2ConfigLabels":{},"fido2Enabled":false,"fido2Labels":{}}},"fqdn":"demoexample.gluu.org","gcePdStorageType":"pd-standard","isFqdnRegistered":false,"istio":{"additionalAnnotations":{},"additionalLabels":{},"enabled":false,"gateways":[],"ingress":false,"namespace":"istio-system"},"jobTtlSecondsAfterFinished":300,"kc-scheduler":{"enabled":false},"kcAdminCredentialsFile":"/etc/jans/conf/kc_admin_creds","kcDbPasswordFile":"/etc/jans/conf/kc_db_password","lbIp":"22.22.22.22","link":{"appLoggers":{"enableStdoutLogPrefix":"true","linkLogLevel":"INFO","linkLogTarget":"STDOUT","persistenceDurationLogLevel":"INFO","persistenceDurationLogTarget":"FILE","persistenceLogLevel":"INFO","persistenceLogTarget":"FILE","scriptLogLevel":"INFO","scriptLogTarget":"FILE"},"cnCustomJavaOptions":"","customAnnotations":{"deployment":{},"destinationRule":{},"horizontalPodAutoscaler":{},"pod":{},"podDisruptionBudget":{},"service":{},"virtualService":{}},"enabled":false,"ingress":{"linkEnabled":true},"linkServiceName":"link"},"nginx-ingress":{"enabled":true},"persistence":{"customAnnotations":{"job":{},"secret":{},"service":{}},"enabled":true},"saml":{"cnCustomJavaOptions":"","customAnnotations":{"deployment":{},"destinationRule":{},"horizontalPodAutoscaler":{},"pod":{},"podDisruptionBudget":{},"secret":{},"service":{},"virtualService":{}},"enabled":false,"ingress":{"samlAdditionalAnnotations":{},"samlEnabled":false,"samlLabels":{}},"samlServiceName":"saml"},"scim":{"appLoggers":{"enableStdoutLogPrefix":"true","persistenceDurationLogLevel":"INFO","persistenceDurationLogTarget":"FILE","persistenceLogLevel":"INFO","persistenceLogTarget":"FILE","scimLogLevel":"INFO","scimLogTarget":"STDOUT","scriptLogLevel":"INFO","scriptLogTarget":"FILE"},"cnCustomJavaOptions":"","customAnnotations":{"deployment":{},"destinationRule":{},"horizontalPodAutoscaler":{},"pod":{},"podDisruptionBudget":{},"secret":{},"service":{},"virtualService":{}},"enabled":true,"ingress":{"scimAdditionalAnnotations":{},"scimConfigAdditionalAnnotations":{},"scimConfigEnabled":false,"scimConfigLabels":{},"scimEnabled":false,"scimLabels":{}},"scimServiceName":"scim"},"serviceAccountName":"default","storageClass":{"allowVolumeExpansion":true,"allowedTopologies":[],"mountOptions":["debug"],"parameters":{},"provisioner":"microk8s.io/hostpath","reclaimPolicy":"Retain","volumeBindingMode":"WaitForFirstConsumer"},"usrEnvs":{"normal":{},"secret":{}}}` | Parameters used globally across all services helm charts. | +| global | object | `{"admin-ui":{"adminUiServiceName":"admin-ui","customAnnotations":{"deployment":{},"destinationRule":{},"horizontalPodAutoscaler":{},"pod":{},"podDisruptionBudget":{},"secret":{},"service":{},"virtualService":{}},"enabled":true,"ingress":{"adminUiAdditionalAnnotations":{},"adminUiEnabled":false,"adminUiLabels":{}}},"alb":{"ingress":false},"auth-server":{"appLoggers":{"auditStatsLogLevel":"INFO","auditStatsLogTarget":"FILE","authLogLevel":"INFO","authLogTarget":"STDOUT","enableStdoutLogPrefix":"true","httpLogLevel":"INFO","httpLogTarget":"FILE","persistenceDurationLogLevel":"INFO","persistenceDurationLogTarget":"FILE","persistenceLogLevel":"INFO","persistenceLogTarget":"FILE","scriptLogLevel":"INFO","scriptLogTarget":"FILE"},"authEncKeys":"RSA1_5 RSA-OAEP","authServerServiceName":"auth-server","authSigKeys":"RS256 RS384 RS512 ES256 ES384 ES512 PS256 PS384 PS512","cnCustomJavaOptions":"","customAnnotations":{"deployment":{},"destinationRule":{},"horizontalPodAutoscaler":{},"pod":{},"podDisruptionBudget":{},"secret":{},"service":{},"virtualService":{}},"enabled":true,"ingress":{"authServerAdditionalAnnotations":{},"authServerEnabled":true,"authServerLabels":{},"authServerProtectedRegister":false,"authServerProtectedRegisterAdditionalAnnotations":{},"authServerProtectedRegisterLabels":{},"authServerProtectedToken":false,"authServerProtectedTokenAdditionalAnnotations":{},"authServerProtectedTokenLabels":{},"deviceCodeAdditionalAnnotations":{},"deviceCodeEnabled":true,"deviceCodeLabels":{},"firebaseMessagingAdditionalAnnotations":{},"firebaseMessagingEnabled":true,"firebaseMessagingLabels":{},"lockAdditionalAnnotations":{},"lockConfigAdditionalAnnotations":{},"lockConfigEnabled":false,"lockConfigLabels":{},"lockEnabled":false,"lockLabels":{},"openidAdditionalAnnotations":{},"openidConfigEnabled":true,"openidConfigLabels":{},"u2fAdditionalAnnotations":{},"u2fConfigEnabled":true,"u2fConfigLabels":{},"uma2AdditionalAnnotations":{},"uma2ConfigEnabled":true,"uma2ConfigLabels":{},"webdiscoveryAdditionalAnnotations":{},"webdiscoveryEnabled":true,"webdiscoveryLabels":{},"webfingerAdditionalAnnotations":{},"webfingerEnabled":true,"webfingerLabels":{}},"lockEnabled":false},"auth-server-key-rotation":{"customAnnotations":{"cronjob":{},"secret":{},"service":{}},"enabled":true,"initKeysLife":48},"awsStorageType":"io1","azureStorageAccountType":"Standard_LRS","azureStorageKind":"Managed","casa":{"appLoggers":{"casaLogLevel":"INFO","casaLogTarget":"STDOUT","enableStdoutLogPrefix":"true","timerLogLevel":"INFO","timerLogTarget":"FILE"},"casaServiceName":"casa","cnCustomJavaOptions":"","customAnnotations":{"deployment":{},"destinationRule":{},"horizontalPodAutoscaler":{},"pod":{},"podDisruptionBudget":{},"secret":{},"service":{},"virtualService":{}},"enabled":true,"ingress":{"casaAdditionalAnnotations":{},"casaEnabled":false,"casaLabels":{}}},"cloud":{"testEnviroment":false},"cnAwsConfigFile":"/etc/jans/conf/aws_config_file","cnAwsSecretsReplicaRegionsFile":"/etc/jans/conf/aws_secrets_replica_regions","cnAwsSharedCredentialsFile":"/etc/jans/conf/aws_shared_credential_file","cnConfiguratorConfigurationFile":"/etc/jans/conf/configuration.json","cnConfiguratorCustomSchema":{"secretName":""},"cnConfiguratorDumpFile":"/etc/jans/conf/configuration.out.json","cnDocumentStoreType":"DB","cnGoogleApplicationCredentials":"/etc/jans/conf/google-credentials.json","cnObExtSigningAlias":"","cnObExtSigningJwksCrt":"","cnObExtSigningJwksKey":"","cnObExtSigningJwksKeyPassPhrase":"","cnObExtSigningJwksUri":"","cnObStaticSigningKeyKid":"","cnObTransportAlias":"","cnObTransportCrt":"","cnObTransportKey":"","cnObTransportKeyPassPhrase":"","cnObTransportTrustStore":"","cnPersistenceType":"sql","cnPrometheusPort":"","cnSqlPasswordFile":"/etc/jans/conf/sql_password","config":{"customAnnotations":{"clusterRoleBinding":{},"configMap":{},"job":{},"role":{},"roleBinding":{},"secret":{},"service":{},"serviceAccount":{}},"enabled":true},"config-api":{"adminUiAppLoggers":{"adminUiAuditLogLevel":"INFO","adminUiAuditLogTarget":"FILE","adminUiLogLevel":"INFO","adminUiLogTarget":"FILE","enableStdoutLogPrefix":"true"},"appLoggers":{"configApiLogLevel":"INFO","configApiLogTarget":"STDOUT","enableStdoutLogPrefix":"true","persistenceDurationLogLevel":"INFO","persistenceDurationLogTarget":"FILE","persistenceLogLevel":"INFO","persistenceLogTarget":"FILE","scriptLogLevel":"INFO","scriptLogTarget":"FILE"},"cnCustomJavaOptions":"","configApiServerServiceName":"config-api","customAnnotations":{"deployment":{},"destinationRule":{},"horizontalPodAutoscaler":{},"pod":{},"podDisruptionBudget":{},"service":{},"virtualService":{}},"enabled":true,"ingress":{"configApiAdditionalAnnotations":{},"configApiEnabled":true,"configApiLabels":{}},"plugins":"admin-ui,fido2,scim,user-mgt"},"configAdapterName":"kubernetes","configSecretAdapter":"kubernetes","distribution":"default","fido2":{"appLoggers":{"enableStdoutLogPrefix":"true","fido2LogLevel":"INFO","fido2LogTarget":"STDOUT","persistenceDurationLogLevel":"INFO","persistenceDurationLogTarget":"FILE","persistenceLogLevel":"INFO","persistenceLogTarget":"FILE","scriptLogLevel":"INFO","scriptLogTarget":"FILE"},"cnCustomJavaOptions":"","customAnnotations":{"deployment":{},"destinationRule":{},"horizontalPodAutoscaler":{},"pod":{},"podDisruptionBudget":{},"secret":{},"service":{},"virtualService":{}},"enabled":true,"fido2ServiceName":"fido2","ingress":{"fido2AdditionalAnnotations":{},"fido2ConfigAdditionalAnnotations":{},"fido2ConfigEnabled":false,"fido2ConfigLabels":{},"fido2Enabled":false,"fido2Labels":{}}},"fqdn":"demoexample.gluu.org","gcePdStorageType":"pd-standard","isFqdnRegistered":false,"istio":{"additionalAnnotations":{},"additionalLabels":{},"enabled":false,"gateways":[],"ingress":false,"namespace":"istio-system"},"jobTtlSecondsAfterFinished":300,"kc-scheduler":{"enabled":false},"lbIp":"22.22.22.22","link":{"appLoggers":{"enableStdoutLogPrefix":"true","linkLogLevel":"INFO","linkLogTarget":"STDOUT","persistenceDurationLogLevel":"INFO","persistenceDurationLogTarget":"FILE","persistenceLogLevel":"INFO","persistenceLogTarget":"FILE","scriptLogLevel":"INFO","scriptLogTarget":"FILE"},"cnCustomJavaOptions":"","customAnnotations":{"deployment":{},"destinationRule":{},"horizontalPodAutoscaler":{},"pod":{},"podDisruptionBudget":{},"service":{},"virtualService":{}},"enabled":false,"ingress":{"linkEnabled":true},"linkServiceName":"link"},"nginx-ingress":{"enabled":true},"persistence":{"customAnnotations":{"job":{},"secret":{},"service":{}},"enabled":true},"saml":{"cnCustomJavaOptions":"","customAnnotations":{"deployment":{},"destinationRule":{},"horizontalPodAutoscaler":{},"pod":{},"podDisruptionBudget":{},"secret":{},"service":{},"virtualService":{}},"enabled":false,"ingress":{"samlAdditionalAnnotations":{},"samlEnabled":false,"samlLabels":{}},"samlServiceName":"saml"},"scim":{"appLoggers":{"enableStdoutLogPrefix":"true","persistenceDurationLogLevel":"INFO","persistenceDurationLogTarget":"FILE","persistenceLogLevel":"INFO","persistenceLogTarget":"FILE","scimLogLevel":"INFO","scimLogTarget":"STDOUT","scriptLogLevel":"INFO","scriptLogTarget":"FILE"},"cnCustomJavaOptions":"","customAnnotations":{"deployment":{},"destinationRule":{},"horizontalPodAutoscaler":{},"pod":{},"podDisruptionBudget":{},"secret":{},"service":{},"virtualService":{}},"enabled":true,"ingress":{"scimAdditionalAnnotations":{},"scimConfigAdditionalAnnotations":{},"scimConfigEnabled":false,"scimConfigLabels":{},"scimEnabled":false,"scimLabels":{}},"scimServiceName":"scim"},"serviceAccountName":"default","storageClass":{"allowVolumeExpansion":true,"allowedTopologies":[],"mountOptions":["debug"],"parameters":{},"provisioner":"microk8s.io/hostpath","reclaimPolicy":"Retain","volumeBindingMode":"WaitForFirstConsumer"},"usrEnvs":{"normal":{},"secret":{}}}` | Parameters used globally across all services helm charts. | | global.admin-ui.adminUiServiceName | string | `"admin-ui"` | Name of the admin-ui service. Please keep it as default. | | global.admin-ui.enabled | bool | `true` | Boolean flag to enable/disable the admin-ui chart and admin ui config api plugin. | | global.admin-ui.ingress.adminUiAdditionalAnnotations | object | `{}` | Admin UI ingress resource additional annotations. | @@ -457,8 +459,6 @@ Kubernetes: `>=v1.21.0-0` | global.istio.namespace | string | `"istio-system"` | The namespace istio is deployed in. The is normally istio-system. | | global.jobTtlSecondsAfterFinished | int | `300` | https://kubernetes.io/docs/concepts/workloads/controllers/ttlafterfinished/ | | global.kc-scheduler.enabled | bool | `false` | Boolean flag to enable/disable the kc-scheduler cronjob chart. | -| global.kcAdminCredentialsFile | string | `"/etc/jans/conf/kc_admin_creds"` | Path to file contains Keycloak admin credentials (username and password) | -| global.kcDbPasswordFile | string | `"/etc/jans/conf/kc_db_password"` | Path to file contains password for database access | | global.lbIp | string | `"22.22.22.22"` | The Loadbalancer IP created by nginx or istio on clouds that provide static IPs. This is not needed if `global.fqdn` is globally resolvable. | | global.link.appLoggers | object | `{"enableStdoutLogPrefix":"true","linkLogLevel":"INFO","linkLogTarget":"STDOUT","persistenceDurationLogLevel":"INFO","persistenceDurationLogTarget":"FILE","persistenceLogLevel":"INFO","persistenceLogTarget":"FILE","scriptLogLevel":"INFO","scriptLogTarget":"FILE"}` | App loggers can be configured to define where the logs will be redirected to and the level of each in which it should be displayed. | | global.link.appLoggers.enableStdoutLogPrefix | string | `"true"` | Enable log prefixing which enables prepending the STDOUT logs with the file name. i.e link-persistence ===> 2022-12-20 17:49:55,744 INFO | @@ -510,7 +510,7 @@ Kubernetes: `>=v1.21.0-0` | global.usrEnvs.normal | object | `{}` | Add custom normal envs to the service. variable1: value1 | | global.usrEnvs.secret | object | `{}` | Add custom secret envs to the service. variable1: value1 | | installer-settings | object | `{"acceptLicense":"","aws":{"arn":{"arnAcmCert":"","enabled":""},"lbType":"","vpcCidr":"0.0.0.0/0"},"confirmSettings":false,"currentVersion":"","google":{"useSecretManager":""},"images":{"edit":""},"namespace":"","nginxIngress":{"namespace":"","releaseName":""},"nodes":{"ips":"","names":"","zones":""},"openbanking":{"cnObTransportTrustStoreP12password":"","hasCnObTransportTrustStore":false},"postgres":{"install":"","namespace":""},"redis":{"install":"","namespace":""},"releaseName":"","sql":{"install":"","namespace":""},"volumeProvisionStrategy":""}` | Only used by the installer. These settings do not affect nor are used by the chart | -| kc-scheduler | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/kc-scheduler","tag":"1.1.6_dev"},"interval":10,"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for synchronizing Keycloak SAML clients | +| kc-scheduler | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/kc-scheduler","tag":"1.1.6-1"},"interval":10,"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for synchronizing Keycloak SAML clients | | kc-scheduler.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | kc-scheduler.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | kc-scheduler.customCommand | list | `[]` | Add custom job's command. If passed, it will override the default conditional command. | @@ -520,7 +520,7 @@ Kubernetes: `>=v1.21.0-0` | kc-scheduler.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | kc-scheduler.image.pullSecrets | list | `[]` | Image Pull Secrets | | kc-scheduler.image.repository | string | `"ghcr.io/janssenproject/jans/kc-scheduler"` | Image to use for deploying. | -| kc-scheduler.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| kc-scheduler.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | kc-scheduler.interval | int | `10` | Interval of running the scheduler (in minutes) | | kc-scheduler.resources | object | `{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}}` | Resource specs. | | kc-scheduler.resources.limits.cpu | string | `"300m"` | CPU limit. | @@ -532,7 +532,7 @@ Kubernetes: `>=v1.21.0-0` | kc-scheduler.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | kc-scheduler.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | kc-scheduler.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| link | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/link","tag":"1.1.6_dev"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"1200Mi"},"requests":{"cpu":"500m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Link. | +| link | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/link","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"1200Mi"},"requests":{"cpu":"500m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Link. | | link.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | link.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | link.customCommand | list | `[]` | Add custom pod's command. If passed, it will override the default conditional command. | @@ -545,7 +545,7 @@ Kubernetes: `>=v1.21.0-0` | link.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | link.image.pullSecrets | list | `[]` | Image Pull Secrets | | link.image.repository | string | `"ghcr.io/janssenproject/jans/link"` | Image to use for deploying. | -| link.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| link.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | link.livenessProbe | object | `{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | link.livenessProbe.exec | object | `{"command":["python3","/app/scripts/healthcheck.py"]}` | http liveness probe endpoint | | link.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -566,7 +566,7 @@ Kubernetes: `>=v1.21.0-0` | nginx-ingress.ingress.additionalAnnotations | object | `{}` | Additional annotations that will be added across all ingress definitions in the format of {cert-manager.io/issuer: "letsencrypt-prod"} Enable client certificate authentication nginx.ingress.kubernetes.io/auth-tls-verify-client: "optional" Create the secret containing the trusted ca certificates nginx.ingress.kubernetes.io/auth-tls-secret: "gluu/tls-certificate" Specify the verification depth in the client certificates chain nginx.ingress.kubernetes.io/auth-tls-verify-depth: "1" Specify if certificates are passed to upstream server nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: "true" | | nginx-ingress.ingress.additionalLabels | object | `{}` | Additional labels that will be added across all ingress definitions in the format of {mylabel: "myapp"} | | nginx-ingress.ingress.tls | list | `[{"hosts":["demoexample.gluu.org"],"secretName":"tls-certificate"}]` | Secrets holding HTTPS CA cert and key. | -| persistence | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/persistence-loader","tag":"1.1.6_dev"},"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Job to generate data and initial config for Gluu Server persistence layer. | +| persistence | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/persistence-loader","tag":"1.1.6-1"},"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Job to generate data and initial config for Gluu Server persistence layer. | | persistence.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | persistence.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | persistence.customCommand | list | `[]` | Add custom job's command. If passed, it will override the default conditional command. | @@ -576,7 +576,7 @@ Kubernetes: `>=v1.21.0-0` | persistence.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | persistence.image.pullSecrets | list | `[]` | Image Pull Secrets | | persistence.image.repository | string | `"ghcr.io/janssenproject/jans/persistence-loader"` | Image to use for deploying. | -| persistence.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| persistence.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | persistence.resources | object | `{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}}` | Resource specs. | | persistence.resources.limits.cpu | string | `"300m"` | CPU limit | | persistence.resources.limits.memory | string | `"300Mi"` | Memory limit. | @@ -587,7 +587,7 @@ Kubernetes: `>=v1.21.0-0` | persistence.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | persistence.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | persistence.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| saml | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/saml","tag":"1.1.6_dev"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"1200Mi"},"requests":{"cpu":"500m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | SAML. | +| saml | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/saml","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"1200Mi"},"requests":{"cpu":"500m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | SAML. | | saml.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | saml.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | saml.customCommand | list | `[]` | Add custom pod's command. If passed, it will override the default conditional command. | @@ -600,7 +600,7 @@ Kubernetes: `>=v1.21.0-0` | saml.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | saml.image.pullSecrets | list | `[]` | Image Pull Secrets | | saml.image.repository | string | `"ghcr.io/janssenproject/jans/saml"` | Image to use for deploying. | -| saml.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| saml.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | saml.livenessProbe | object | `{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | saml.livenessProbe.exec | object | `{"command":["python3","/app/scripts/healthcheck.py"]}` | http liveness probe endpoint | | saml.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -617,7 +617,7 @@ Kubernetes: `>=v1.21.0-0` | saml.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | saml.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | saml.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| scim | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/scim","tag":"1.1.6_dev"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1200Mi"},"requests":{"cpu":"1000m","memory":"1200Mi"}},"service":{"name":"http-scim","port":8080},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | System for Cross-domain Identity Management (SCIM) version 2.0 | +| scim | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/scim","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1200Mi"},"requests":{"cpu":"1000m","memory":"1200Mi"}},"service":{"name":"http-scim","port":8080},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | System for Cross-domain Identity Management (SCIM) version 2.0 | | scim.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | scim.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | scim.customCommand | list | `[]` | Add custom pod's command. If passed, it will override the default conditional command. | @@ -630,7 +630,7 @@ Kubernetes: `>=v1.21.0-0` | scim.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | scim.image.pullSecrets | list | `[]` | Image Pull Secrets | | scim.image.repository | string | `"ghcr.io/janssenproject/jans/scim"` | Image to use for deploying. | -| scim.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| scim.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | scim.livenessProbe | object | `{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for SCIM if needed. | | scim.livenessProbe.httpGet.path | string | `"/jans-scim/sys/health-check"` | http liveness probe endpoint | | scim.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | diff --git a/charts/gluu/charts/admin-ui/Chart.yaml b/charts/gluu/charts/admin-ui/Chart.yaml index 60d1c90c2..95941e472 100644 --- a/charts/gluu/charts/admin-ui/Chart.yaml +++ b/charts/gluu/charts/admin-ui/Chart.yaml @@ -1,6 +1,6 @@ apiVersion: v2 name: admin-ui -version: 5.1.6-dev +version: 5.1.6 kubeVersion: ">=v1.21.0-0" description: Admin GUI. Requires license. type: application @@ -17,4 +17,4 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6-dev" +appVersion: "5.1.6" diff --git a/charts/gluu/charts/admin-ui/README.md b/charts/gluu/charts/admin-ui/README.md index 4311c8ccb..1bafadc8b 100644 --- a/charts/gluu/charts/admin-ui/README.md +++ b/charts/gluu/charts/admin-ui/README.md @@ -1,6 +1,6 @@ # admin-ui -![Version: 5.1.6-dev](https://img.shields.io/badge/Version-5.1.6--dev-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6-dev](https://img.shields.io/badge/AppVersion-5.1.6--dev-informational?style=flat-square) +![Version: 5.1.6](https://img.shields.io/badge/Version-5.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) Admin GUI. Requires license. @@ -37,7 +37,7 @@ Kubernetes: `>=v1.21.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"gluufederation/admin-ui"` | Image to use for deploying. | -| image.tag | string | `"5.1.6_dev"` | Image tag to use for deploying. | +| image.tag | string | `"5.1.6-1"` | Image tag to use for deploying. | | lifecycle | object | `{}` | | | livenessProbe | object | `{"failureThreshold":20,"initialDelaySeconds":60,"periodSeconds":25,"tcpSocket":{"port":8080},"timeoutSeconds":5}` | Configure the liveness healthcheck for the admin ui if needed. | | readinessProbe | object | `{"failureThreshold":20,"initialDelaySeconds":60,"periodSeconds":25,"tcpSocket":{"port":8080},"timeoutSeconds":5}` | Configure the readiness healthcheck for the admin ui if needed. | diff --git a/charts/gluu/charts/admin-ui/values.yaml b/charts/gluu/charts/admin-ui/values.yaml index 378ce1297..1039c3804 100644 --- a/charts/gluu/charts/admin-ui/values.yaml +++ b/charts/gluu/charts/admin-ui/values.yaml @@ -27,7 +27,7 @@ image: # -- Image to use for deploying. repository: gluufederation/admin-ui # -- Image tag to use for deploying. - tag: 5.1.6_dev + tag: 5.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. diff --git a/charts/gluu/charts/auth-server-key-rotation/Chart.yaml b/charts/gluu/charts/auth-server-key-rotation/Chart.yaml index 1b07d8109..9deb17c71 100644 --- a/charts/gluu/charts/auth-server-key-rotation/Chart.yaml +++ b/charts/gluu/charts/auth-server-key-rotation/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: auth-server-key-rotation -version: 1.1.6-dev +version: 1.1.6 kubeVersion: ">=v1.21.0-0" description: Responsible for regenerating auth-keys per x hours type: application @@ -16,4 +16,4 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6-dev" \ No newline at end of file +appVersion: "5.1.6" \ No newline at end of file diff --git a/charts/gluu/charts/auth-server-key-rotation/README.md b/charts/gluu/charts/auth-server-key-rotation/README.md index 114c88595..f2fcc039e 100644 --- a/charts/gluu/charts/auth-server-key-rotation/README.md +++ b/charts/gluu/charts/auth-server-key-rotation/README.md @@ -1,6 +1,6 @@ # auth-server-key-rotation -![Version: 1.1.6-dev](https://img.shields.io/badge/Version-1.1.6--dev-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6-dev](https://img.shields.io/badge/AppVersion-5.1.6--dev-informational?style=flat-square) +![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) Responsible for regenerating auth-keys per x hours @@ -35,7 +35,7 @@ Kubernetes: `>=v1.21.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"janssenproject/certmanager"` | Image to use for deploying. | -| image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | keysLife | int | `48` | Auth server key rotation keys life in hours | | keysPushDelay | int | `0` | Delay (in seconds) before pushing private keys to Auth server | | keysPushStrategy | string | `"NEWER"` | Set key selection strategy after pushing private keys to Auth server (only takes effect when keysPushDelay value is greater than 0) | diff --git a/charts/gluu/charts/auth-server-key-rotation/values.yaml b/charts/gluu/charts/auth-server-key-rotation/values.yaml index f27cbe625..adb5170d9 100644 --- a/charts/gluu/charts/auth-server-key-rotation/values.yaml +++ b/charts/gluu/charts/auth-server-key-rotation/values.yaml @@ -18,7 +18,7 @@ image: # -- Image to use for deploying. repository: janssenproject/certmanager # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Auth server key rotation keys life in hours diff --git a/charts/gluu/charts/auth-server/Chart.yaml b/charts/gluu/charts/auth-server/Chart.yaml index 261bec813..6996048c8 100644 --- a/charts/gluu/charts/auth-server/Chart.yaml +++ b/charts/gluu/charts/auth-server/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: auth-server -version: 1.1.6-dev +version: 1.1.6 kubeVersion: ">=v1.21.0-0" description: OAuth Authorization Server, the OpenID Connect Provider, the UMA Authorization Server--this is the main Internet facing component of Gluu. It's the service that returns tokens, JWT's and identity assertions. This service must be Internet facing. type: application @@ -18,4 +18,4 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6-dev" +appVersion: "5.1.6" diff --git a/charts/gluu/charts/auth-server/README.md b/charts/gluu/charts/auth-server/README.md index 303571d60..df83b2641 100644 --- a/charts/gluu/charts/auth-server/README.md +++ b/charts/gluu/charts/auth-server/README.md @@ -1,6 +1,6 @@ # auth-server -![Version: 1.1.6-dev](https://img.shields.io/badge/Version-1.1.6--dev-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6-dev](https://img.shields.io/badge/AppVersion-5.1.6--dev-informational?style=flat-square) +![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) OAuth Authorization Server, the OpenID Connect Provider, the UMA Authorization Server--this is the main Internet facing component of Gluu. It's the service that returns tokens, JWT's and identity assertions. This service must be Internet facing. @@ -38,7 +38,7 @@ Kubernetes: `>=v1.21.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"janssenproject/auth-server"` | Image to use for deploying. | -| image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | lifecycle | object | `{}` | | | livenessProbe | object | `{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | livenessProbe.exec | object | `{"command":["python3","/app/scripts/healthcheck.py"]}` | Executes the python3 healthcheck. | diff --git a/charts/gluu/charts/auth-server/values.yaml b/charts/gluu/charts/auth-server/values.yaml index a00c23efb..8add8c2ef 100644 --- a/charts/gluu/charts/auth-server/values.yaml +++ b/charts/gluu/charts/auth-server/values.yaml @@ -28,7 +28,7 @@ image: # -- Image to use for deploying. repository: janssenproject/auth-server # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. diff --git a/charts/gluu/charts/casa/Chart.yaml b/charts/gluu/charts/casa/Chart.yaml index 02df2e3a2..963ff16e6 100644 --- a/charts/gluu/charts/casa/Chart.yaml +++ b/charts/gluu/charts/casa/Chart.yaml @@ -1,6 +1,6 @@ apiVersion: v2 name: casa -version: 1.1.6-dev +version: 1.1.6 kubeVersion: ">=v1.21.0-0" description: Jans Casa ("Casa") is a self-service web portal for end-users to manage authentication and authorization preferences for their account in a Jans Server. type: application @@ -17,4 +17,4 @@ maintainers: email: support@jans.io url: https://github.com/moabu icon: https://github.com/JanssenProject/jans/raw/main/docs/assets/logo/janssen_project_favicon_transparent_50px_50px.png -appVersion: "5.1.6-dev" +appVersion: "5.1.6" diff --git a/charts/gluu/charts/casa/README.md b/charts/gluu/charts/casa/README.md index 52d03e581..3ba6c0ab2 100644 --- a/charts/gluu/charts/casa/README.md +++ b/charts/gluu/charts/casa/README.md @@ -1,6 +1,6 @@ # casa -![Version: 1.1.6-dev](https://img.shields.io/badge/Version-1.1.6--dev-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6-dev](https://img.shields.io/badge/AppVersion-5.1.6--dev-informational?style=flat-square) +![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) Jans Casa ("Casa") is a self-service web portal for end-users to manage authentication and authorization preferences for their account in a Jans Server. @@ -38,7 +38,7 @@ Kubernetes: `>=v1.21.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"janssenproject/casa"` | Image to use for deploying. | -| image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | lifecycle | object | `{}` | | | livenessProbe | object | `{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5}` | Configure the liveness healthcheck for casa if needed. | | livenessProbe.httpGet.path | string | `"/jans-casa/health-check"` | http liveness probe endpoint | diff --git a/charts/gluu/charts/casa/values.yaml b/charts/gluu/charts/casa/values.yaml index 22cf268bd..f0701c9f7 100644 --- a/charts/gluu/charts/casa/values.yaml +++ b/charts/gluu/charts/casa/values.yaml @@ -27,7 +27,7 @@ image: # -- Image to use for deploying. repository: janssenproject/casa # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. diff --git a/charts/gluu/charts/cn-istio-ingress/Chart.yaml b/charts/gluu/charts/cn-istio-ingress/Chart.yaml index 83ae572b8..c134b30a8 100644 --- a/charts/gluu/charts/cn-istio-ingress/Chart.yaml +++ b/charts/gluu/charts/cn-istio-ingress/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: cn-istio-ingress -version: 5.1.6-dev +version: 5.1.6 kubeVersion: ">=v1.21.0-0" description: Istio Gateway type: application @@ -17,4 +17,4 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6-dev" +appVersion: "5.1.6" diff --git a/charts/gluu/charts/cn-istio-ingress/README.md b/charts/gluu/charts/cn-istio-ingress/README.md index c2829895e..03e914aa9 100644 --- a/charts/gluu/charts/cn-istio-ingress/README.md +++ b/charts/gluu/charts/cn-istio-ingress/README.md @@ -1,6 +1,6 @@ # cn-istio-ingress -![Version: 5.1.6-dev](https://img.shields.io/badge/Version-5.1.6--dev-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6-dev](https://img.shields.io/badge/AppVersion-5.1.6--dev-informational?style=flat-square) +![Version: 5.1.6](https://img.shields.io/badge/Version-5.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) Istio Gateway diff --git a/charts/gluu/charts/config-api/Chart.yaml b/charts/gluu/charts/config-api/Chart.yaml index abf6d4223..a9dab95d4 100644 --- a/charts/gluu/charts/config-api/Chart.yaml +++ b/charts/gluu/charts/config-api/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: config-api -version: 1.1.6-dev +version: 1.1.6 kubeVersion: ">=v1.21.0-0" description: Jans Config Api endpoints can be used to configure jans-auth-server, which is an open-source OpenID Connect Provider (OP) and UMA Authorization Server (AS) type: application @@ -18,4 +18,4 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6-dev" +appVersion: "5.1.6" diff --git a/charts/gluu/charts/config-api/README.md b/charts/gluu/charts/config-api/README.md index 9024a9d66..1732889e0 100644 --- a/charts/gluu/charts/config-api/README.md +++ b/charts/gluu/charts/config-api/README.md @@ -1,6 +1,6 @@ # config-api -![Version: 1.1.6-dev](https://img.shields.io/badge/Version-1.1.6--dev-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6-dev](https://img.shields.io/badge/AppVersion-5.1.6--dev-informational?style=flat-square) +![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) Jans Config Api endpoints can be used to configure jans-auth-server, which is an open-source OpenID Connect Provider (OP) and UMA Authorization Server (AS) @@ -39,7 +39,7 @@ Kubernetes: `>=v1.21.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"janssenproject/config-api"` | Image to use for deploying. | -| image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | lifecycle | object | `{}` | | | livenessProbe | object | `{"httpGet":{"path":"/jans-config-api/api/v1/health/live","port":8074},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | livenessProbe.httpGet | object | `{"path":"/jans-config-api/api/v1/health/live","port":8074}` | Executes the python3 healthcheck. | diff --git a/charts/gluu/charts/config-api/values.yaml b/charts/gluu/charts/config-api/values.yaml index 18cca2971..4fd1e64f0 100644 --- a/charts/gluu/charts/config-api/values.yaml +++ b/charts/gluu/charts/config-api/values.yaml @@ -31,7 +31,7 @@ image: # -- Image to use for deploying. repository: janssenproject/config-api # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. diff --git a/charts/gluu/charts/config/Chart.yaml b/charts/gluu/charts/config/Chart.yaml index 2120fb47e..f7968c129 100644 --- a/charts/gluu/charts/config/Chart.yaml +++ b/charts/gluu/charts/config/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: config -version: 1.1.6-dev +version: 1.1.6 kubeVersion: ">=v1.21.0-0" description: Configuration parameters for setup and initial configuration secret and config layers used by Gluu services. type: application @@ -18,4 +18,4 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6-dev" +appVersion: "5.1.6" diff --git a/charts/gluu/charts/config/README.md b/charts/gluu/charts/config/README.md index 6a0aa29c0..d0bc2afef 100644 --- a/charts/gluu/charts/config/README.md +++ b/charts/gluu/charts/config/README.md @@ -1,6 +1,6 @@ # config -![Version: 1.1.6-dev](https://img.shields.io/badge/Version-1.1.6--dev-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6-dev](https://img.shields.io/badge/AppVersion-5.1.6--dev-informational?style=flat-square) +![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) Configuration parameters for setup and initial configuration secret and config layers used by Gluu services. @@ -92,7 +92,7 @@ Kubernetes: `>=v1.21.0-0` | fullNameOverride | string | `""` | | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"janssenproject/configurator"` | Image to use for deploying. | -| image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | lifecycle | object | `{}` | | | migration | object | `{"enabled":false,"migrationDataFormat":"ldif","migrationDir":"/ce-migration"}` | CE to CN Migration section | | migration.enabled | bool | `false` | Boolean flag to enable migration from CE | diff --git a/charts/gluu/charts/config/values.yaml b/charts/gluu/charts/config/values.yaml index ba566a0dc..166ec7d1c 100644 --- a/charts/gluu/charts/config/values.yaml +++ b/charts/gluu/charts/config/values.yaml @@ -146,7 +146,7 @@ image: # -- Image to use for deploying. repository: janssenproject/configurator # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Organization name. Used for certificate creation. diff --git a/charts/gluu/charts/fido2/Chart.yaml b/charts/gluu/charts/fido2/Chart.yaml index 6dc1f099d..cef17d16d 100644 --- a/charts/gluu/charts/fido2/Chart.yaml +++ b/charts/gluu/charts/fido2/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: fido2 -version: 1.1.6-dev +version: 1.1.6 kubeVersion: ">=v1.21.0-0" description: FIDO 2.0 (FIDO2) is an open authentication standard that enables leveraging common devices to authenticate to online services in both mobile and desktop environments. type: application @@ -19,4 +19,4 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6-dev" +appVersion: "5.1.6" diff --git a/charts/gluu/charts/fido2/README.md b/charts/gluu/charts/fido2/README.md index 11affa36b..532ed3b06 100644 --- a/charts/gluu/charts/fido2/README.md +++ b/charts/gluu/charts/fido2/README.md @@ -1,6 +1,6 @@ # fido2 -![Version: 1.1.6-dev](https://img.shields.io/badge/Version-1.1.6--dev-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6-dev](https://img.shields.io/badge/AppVersion-5.1.6--dev-informational?style=flat-square) +![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) FIDO 2.0 (FIDO2) is an open authentication standard that enables leveraging common devices to authenticate to online services in both mobile and desktop environments. @@ -39,7 +39,7 @@ Kubernetes: `>=v1.21.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"janssenproject/fido2"` | Image to use for deploying. | -| image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | lifecycle | object | `{}` | | | livenessProbe | object | `{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5}` | Configure the liveness healthcheck for the fido2 if needed. | | livenessProbe.httpGet | object | `{"path":"/jans-fido2/sys/health-check","port":"http-fido2"}` | http liveness probe endpoint | diff --git a/charts/gluu/charts/fido2/values.yaml b/charts/gluu/charts/fido2/values.yaml index 52e03eb9f..9f255a7c0 100644 --- a/charts/gluu/charts/fido2/values.yaml +++ b/charts/gluu/charts/fido2/values.yaml @@ -29,7 +29,7 @@ image: # -- Image to use for deploying. repository: janssenproject/fido2 # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. diff --git a/charts/gluu/charts/kc-scheduler/Chart.yaml b/charts/gluu/charts/kc-scheduler/Chart.yaml index 69dddff23..9d3db5330 100644 --- a/charts/gluu/charts/kc-scheduler/Chart.yaml +++ b/charts/gluu/charts/kc-scheduler/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: kc-scheduler -version: 1.1.6-dev +version: 1.1.6 kubeVersion: ">=v1.22.0-0" description: Responsible for synchronizing Keycloak SAML clients type: application @@ -16,4 +16,4 @@ maintainers: email: support@jans.io url: https://github.com/moabu icon: https://github.com/JanssenProject/jans/raw/main/docs/assets/logo/janssen_project_favicon_transparent_50px_50px.png -appVersion: "1.1.6-dev" +appVersion: "5.1.6" diff --git a/charts/gluu/charts/kc-scheduler/README.md b/charts/gluu/charts/kc-scheduler/README.md index 8554230c8..3a09cb7e6 100644 --- a/charts/gluu/charts/kc-scheduler/README.md +++ b/charts/gluu/charts/kc-scheduler/README.md @@ -1,6 +1,6 @@ # kc-scheduler -![Version: 1.1.6-dev](https://img.shields.io/badge/Version-1.1.6--dev-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.1.6-dev](https://img.shields.io/badge/AppVersion-1.1.6--dev-informational?style=flat-square) +![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) Responsible for synchronizing Keycloak SAML clients @@ -33,7 +33,7 @@ Kubernetes: `>=v1.22.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"ghcr.io/janssenproject/jans/kc-scheduler"` | Image to use for deploying. | -| image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | interval | int | `10` | Interval of running the scheduler (in minutes) | | lifecycle | object | `{}` | | | resources | object | `{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}}` | Resource specs. | diff --git a/charts/gluu/charts/kc-scheduler/values.yaml b/charts/gluu/charts/kc-scheduler/values.yaml index 1e420bd8c..0e913564e 100644 --- a/charts/gluu/charts/kc-scheduler/values.yaml +++ b/charts/gluu/charts/kc-scheduler/values.yaml @@ -16,7 +16,7 @@ image: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/kc-scheduler # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Resource specs. diff --git a/charts/gluu/charts/link/Chart.yaml b/charts/gluu/charts/link/Chart.yaml index 9d7dca82a..1c4e2ffd4 100644 --- a/charts/gluu/charts/link/Chart.yaml +++ b/charts/gluu/charts/link/Chart.yaml @@ -1,6 +1,6 @@ apiVersion: v2 name: link -version: 1.1.6-dev +version: 1.1.6 kubeVersion: ">=v1.22.0-0" description: Jans Link type: application @@ -15,4 +15,4 @@ maintainers: email: support@jans.io url: https://github.com/moabu icon: https://github.com/JanssenProject/jans/raw/main/docs/assets/logo/janssen_project_favicon_transparent_50px_50px.png -appVersion: "5.1.6-dev" +appVersion: "5.1.6" diff --git a/charts/gluu/charts/link/README.md b/charts/gluu/charts/link/README.md index 5cb60e81b..90bbd5fdd 100644 --- a/charts/gluu/charts/link/README.md +++ b/charts/gluu/charts/link/README.md @@ -1,6 +1,6 @@ # link -![Version: 1.1.6-dev](https://img.shields.io/badge/Version-1.1.6--dev-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6-dev](https://img.shields.io/badge/AppVersion-5.1.6--dev-informational?style=flat-square) +![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) Jans Link @@ -39,7 +39,7 @@ Kubernetes: `>=v1.22.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"ghcr.io/janssenproject/jans/link"` | Image to use for deploying. | -| image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | lifecycle | object | `{}` | | | livenessProbe | object | `{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the link if needed. | | livenessProbe.exec | object | `{"command":["python3","/app/scripts/healthcheck.py"]}` | Executes the python3 healthcheck. | diff --git a/charts/gluu/charts/link/values.yaml b/charts/gluu/charts/link/values.yaml index 6bb0c2171..25308a716 100644 --- a/charts/gluu/charts/link/values.yaml +++ b/charts/gluu/charts/link/values.yaml @@ -31,7 +31,7 @@ image: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/link # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. diff --git a/charts/gluu/charts/nginx-ingress/Chart.yaml b/charts/gluu/charts/nginx-ingress/Chart.yaml index 43aa8b4a4..5e756bfca 100644 --- a/charts/gluu/charts/nginx-ingress/Chart.yaml +++ b/charts/gluu/charts/nginx-ingress/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: nginx-ingress -version: 5.1.6-dev +version: 5.1.6 kubeVersion: ">=v1.21.0-0" description: Nginx ingress definitions chart type: application @@ -18,4 +18,4 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6-dev" +appVersion: "5.1.6" diff --git a/charts/gluu/charts/nginx-ingress/README.md b/charts/gluu/charts/nginx-ingress/README.md index 26d50fd78..356419a8c 100644 --- a/charts/gluu/charts/nginx-ingress/README.md +++ b/charts/gluu/charts/nginx-ingress/README.md @@ -1,6 +1,6 @@ # nginx-ingress -![Version: 5.1.6-dev](https://img.shields.io/badge/Version-5.1.6--dev-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6-dev](https://img.shields.io/badge/AppVersion-5.1.6--dev-informational?style=flat-square) +![Version: 5.1.6](https://img.shields.io/badge/Version-5.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) Nginx ingress definitions chart diff --git a/charts/gluu/charts/persistence/Chart.yaml b/charts/gluu/charts/persistence/Chart.yaml index 1e9cd20ba..1961c47bf 100644 --- a/charts/gluu/charts/persistence/Chart.yaml +++ b/charts/gluu/charts/persistence/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: persistence -version: 1.1.6-dev +version: 1.1.6 kubeVersion: ">=v1.21.0-0" description: Job to generate data and initial config for Gluu Server persistence layer. type: application @@ -16,5 +16,5 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6-dev" +appVersion: "5.1.6" diff --git a/charts/gluu/charts/persistence/README.md b/charts/gluu/charts/persistence/README.md index 305988a8e..c94a9c526 100644 --- a/charts/gluu/charts/persistence/README.md +++ b/charts/gluu/charts/persistence/README.md @@ -1,6 +1,6 @@ # persistence -![Version: 1.1.6-dev](https://img.shields.io/badge/Version-1.1.6--dev-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6-dev](https://img.shields.io/badge/AppVersion-5.1.6--dev-informational?style=flat-square) +![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) Job to generate data and initial config for Gluu Server persistence layer. @@ -35,7 +35,7 @@ Kubernetes: `>=v1.21.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"janssenproject/persistence"` | Image to use for deploying. | -| image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | imagePullSecrets | list | `[]` | | | lifecycle | object | `{}` | | | nameOverride | string | `""` | | diff --git a/charts/gluu/charts/persistence/values.yaml b/charts/gluu/charts/persistence/values.yaml index 438ca41eb..3751e28cc 100644 --- a/charts/gluu/charts/persistence/values.yaml +++ b/charts/gluu/charts/persistence/values.yaml @@ -18,7 +18,7 @@ image: # -- Image to use for deploying. repository: janssenproject/persistence # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Resource specs. diff --git a/charts/gluu/charts/saml/Chart.yaml b/charts/gluu/charts/saml/Chart.yaml index 5d38024bb..183d4a06b 100644 --- a/charts/gluu/charts/saml/Chart.yaml +++ b/charts/gluu/charts/saml/Chart.yaml @@ -1,6 +1,6 @@ apiVersion: v2 name: saml -version: 1.1.6-dev +version: 1.1.6 kubeVersion: ">=v1.21.0-0" description: Jans SAML type: application @@ -15,4 +15,4 @@ maintainers: email: support@jans.io url: https://github.com/moabu icon: https://github.com/JanssenProject/jans/raw/main/docs/assets/logo/janssen_project_favicon_transparent_50px_50px.png -appVersion: "5.1.6-dev" +appVersion: "5.1.6" diff --git a/charts/gluu/charts/saml/README.md b/charts/gluu/charts/saml/README.md index eeab2d4c0..b5f30c045 100644 --- a/charts/gluu/charts/saml/README.md +++ b/charts/gluu/charts/saml/README.md @@ -1,6 +1,6 @@ # saml -![Version: 1.1.6-dev](https://img.shields.io/badge/Version-1.1.6--dev-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6-dev](https://img.shields.io/badge/AppVersion-5.1.6--dev-informational?style=flat-square) +![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) Jans SAML @@ -37,7 +37,7 @@ Kubernetes: `>=v1.21.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"janssenproject/saml"` | Image to use for deploying. | -| image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | lifecycle | object | `{}` | | | livenessProbe | object | `{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for saml if needed. | | livenessProbe.exec | object | `{"command":["python3","/app/scripts/healthcheck.py"]}` | Executes the python3 healthcheck. | diff --git a/charts/gluu/charts/saml/values.yaml b/charts/gluu/charts/saml/values.yaml index 50d127ba0..885e97a16 100644 --- a/charts/gluu/charts/saml/values.yaml +++ b/charts/gluu/charts/saml/values.yaml @@ -27,7 +27,7 @@ image: # -- Image to use for deploying. repository: janssenproject/saml # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. diff --git a/charts/gluu/charts/scim/Chart.yaml b/charts/gluu/charts/scim/Chart.yaml index 3a0142d55..091e06901 100644 --- a/charts/gluu/charts/scim/Chart.yaml +++ b/charts/gluu/charts/scim/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: scim -version: 1.1.6-dev +version: 1.1.6 kubeVersion: ">=v1.21.0-0" description: System for Cross-domain Identity Management (SCIM) version 2.0 type: application @@ -18,4 +18,4 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6-dev" +appVersion: "5.1.6" diff --git a/charts/gluu/charts/scim/README.md b/charts/gluu/charts/scim/README.md index cea9aec5f..6acf9e375 100644 --- a/charts/gluu/charts/scim/README.md +++ b/charts/gluu/charts/scim/README.md @@ -1,6 +1,6 @@ # scim -![Version: 1.1.6-dev](https://img.shields.io/badge/Version-1.1.6--dev-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6-dev](https://img.shields.io/badge/AppVersion-5.1.6--dev-informational?style=flat-square) +![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) System for Cross-domain Identity Management (SCIM) version 2.0 @@ -38,7 +38,7 @@ Kubernetes: `>=v1.21.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"janssenproject/scim"` | Image to use for deploying. | -| image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | lifecycle | object | `{}` | | | livenessProbe | object | `{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for SCIM if needed. | | livenessProbe.httpGet.path | string | `"/jans-scim/sys/health-check"` | http liveness probe endpoint | diff --git a/charts/gluu/charts/scim/values.yaml b/charts/gluu/charts/scim/values.yaml index 179500549..abaf722cd 100644 --- a/charts/gluu/charts/scim/values.yaml +++ b/charts/gluu/charts/scim/values.yaml @@ -28,7 +28,7 @@ image: # -- Image to use for deploying. repository: janssenproject/scim # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. diff --git a/charts/gluu/openbanking-values.yaml b/charts/gluu/openbanking-values.yaml index eb9d71892..8bbacee19 100644 --- a/charts/gluu/openbanking-values.yaml +++ b/charts/gluu/openbanking-values.yaml @@ -28,7 +28,7 @@ auth-server: # -- Image to use for deploying. repository: janssenproject/auth-server # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -161,7 +161,7 @@ config: # -- Image to use for deploying. repository: janssenproject/configurator # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Organization name. Used for certificate creation. @@ -225,7 +225,7 @@ config-api: # -- Image to use for deploying. repository: janssenproject/config-api # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -625,7 +625,7 @@ persistence: # -- Image to use for deploying. repository: janssenproject/persistence-loader # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Resource specs. diff --git a/charts/gluu/values.yaml b/charts/gluu/values.yaml index a3872bcd1..6ca5965d4 100644 --- a/charts/gluu/values.yaml +++ b/charts/gluu/values.yaml @@ -85,7 +85,7 @@ admin-ui: # -- Image to use for deploying. repository: ghcr.io/gluufederation/flex/admin-ui # -- Image tag to use for deploying. - tag: 5.1.6_dev + tag: 5.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -188,7 +188,7 @@ auth-server: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/auth-server # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -267,7 +267,7 @@ auth-server-key-rotation: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/certmanager # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Auth server key rotation keys life in hours @@ -467,7 +467,7 @@ config: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/configurator # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Organization name. Used for certificate creation. @@ -572,7 +572,7 @@ config-api: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/config-api # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -677,7 +677,7 @@ fido2: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/fido2 # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -787,7 +787,7 @@ casa: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/casa # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -1464,7 +1464,7 @@ persistence: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/persistence-loader # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Resource specs. @@ -1550,7 +1550,7 @@ scim: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/scim # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -1660,7 +1660,7 @@ link: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/link # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -1769,7 +1769,7 @@ saml: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/saml # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -1850,7 +1850,7 @@ kc-scheduler: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/kc-scheduler # -- Image tag to use for deploying. - tag: 1.1.6_dev + tag: 1.1.6-1 # -- Image Pull Secrets pullSecrets: [ ] # -- Resource specs. diff --git a/docker-admin-ui/Dockerfile b/docker-admin-ui/Dockerfile index d68c820f7..9c5975ec8 100644 --- a/docker-admin-ui/Dockerfile +++ b/docker-admin-ui/Dockerfile @@ -43,7 +43,7 @@ RUN cd /tmp/jans \ && cp ${JANS_SETUP_DIR}/schema/custom_schema.json /app/schema/ \ && cp ${JANS_SETUP_DIR}/schema/opendj_types.json /app/schema/ -ENV FLEX_SOURCE_VERSION=12a5729c0fc9d79178fdc29e2566baa600905301 +ENV FLEX_SOURCE_VERSION=6e9133309eb63dd499e1963d4f1d4eaa9d8bae7f RUN mkdir -p /app/templates/admin-ui diff --git a/docker-flex-all-in-one/Dockerfile b/docker-flex-all-in-one/Dockerfile index e35b9a3c4..6263ba6e4 100644 --- a/docker-flex-all-in-one/Dockerfile +++ b/docker-flex-all-in-one/Dockerfile @@ -105,7 +105,7 @@ RUN mkdir -p /usr/share/java /var/lib/nginx/html/admin COPY app /app # CN version as env var (with suffix if any, i.e. SNAPSHOT) -ENV CN_VERSION=1.1.6-SNAPSHOT +ENV CN_VERSION=1.1.6 # set directory contains installer code that will be added to Python sys.path ENV PYTHONPATH=/app diff --git a/docker-flex-monolith/Dockerfile b/docker-flex-monolith/Dockerfile index 04d86f4c5..c7fd9581f 100644 --- a/docker-flex-monolith/Dockerfile +++ b/docker-flex-monolith/Dockerfile @@ -42,7 +42,7 @@ EXPOSE 443 8080 1636 # flex-linux-setup # ===================== -ENV FLEX_SOURCE_VERSION=55e028960e7548c751387e149eab7774f16c09aa +ENV FLEX_SOURCE_VERSION=6e9133309eb63dd499e1963d4f1d4eaa9d8bae7f # cleanup RUN rm -rf /tmp/jans diff --git a/docker-flex-monolith/clean.sh b/docker-flex-monolith/clean.sh index 9bb4e5694..f5deeecf3 100644 --- a/docker-flex-monolith/clean.sh +++ b/docker-flex-monolith/clean.sh @@ -23,7 +23,7 @@ if [ -z "$INSTALLED_FLEX_NAME" ]; then fi if [ -z "$FLEX_VERSION" ]; then - FLEX_VERSION="5.1.6_dev" + FLEX_VERSION="5.1.6-1" fi if [ -z "$DATABASE_VOLUME_NAME" ]; then diff --git a/docker-flex-monolith/down.sh b/docker-flex-monolith/down.sh index 930955d81..31331e2e9 100644 --- a/docker-flex-monolith/down.sh +++ b/docker-flex-monolith/down.sh @@ -23,7 +23,7 @@ if [ -z "$INSTALLED_FLEX_NAME" ]; then fi if [ -z "$FLEX_VERSION" ]; then - FLEX_VERSION="5.1.6_dev" + FLEX_VERSION="5.1.6-1" fi if [ -z "$FLEX_SERVICE_NAME" ]; then diff --git a/docker-flex-monolith/flex-mysql-compose.yml b/docker-flex-monolith/flex-mysql-compose.yml index 95eb295f8..1db4a188c 100644 --- a/docker-flex-monolith/flex-mysql-compose.yml +++ b/docker-flex-monolith/flex-mysql-compose.yml @@ -16,7 +16,7 @@ services: - MYSQL_PASSWORD=1t5Fin3#security - MYSQL_ROOT_PASSWORD=1t5Fin3#security flex: - image: ${FLEX_IMAGE:-ghcr.io/gluufederation/flex/monolith:5.1.6_dev} + image: ${FLEX_IMAGE:-ghcr.io/gluufederation/flex/monolith:5.1.6-1} restart: always ports: - "443:443" diff --git a/docker-flex-monolith/flex-postgres-compose.yml b/docker-flex-monolith/flex-postgres-compose.yml index d1239f0c3..ce180bf4d 100644 --- a/docker-flex-monolith/flex-postgres-compose.yml +++ b/docker-flex-monolith/flex-postgres-compose.yml @@ -14,7 +14,7 @@ services: POSTGRES_PASSWORD: 1t5Fin3#security POSTGRES_DB: gluu flex: - image: ${FLEX_IMAGE:-ghcr.io/gluufederation/flex/monolith:5.1.6_dev} + image: ${FLEX_IMAGE:-ghcr.io/gluufederation/flex/monolith:5.1.6-1} restart: always ports: - "443:443" diff --git a/docker-flex-monolith/up.sh b/docker-flex-monolith/up.sh index 0134495bf..09d4c7a2a 100644 --- a/docker-flex-monolith/up.sh +++ b/docker-flex-monolith/up.sh @@ -23,7 +23,7 @@ if [ -z "$INSTALLED_FLEX_NAME" ]; then fi if [ -z "$FLEX_VERSION" ]; then - FLEX_VERSION="5.1.6_dev" + FLEX_VERSION="5.1.6-1" fi if [ -z "$DATABASE_VOLUME_NAME" ]; then diff --git a/docker-flex-monolith/version.txt b/docker-flex-monolith/version.txt index 24fadfe7d..8710cfdff 100644 --- a/docker-flex-monolith/version.txt +++ b/docker-flex-monolith/version.txt @@ -1 +1 @@ -5.1.6-dev +5.1.6 diff --git a/docs/reference/kubernetes/helm-chart.md b/docs/reference/kubernetes/helm-chart.md index 5c59246c9..178e0f3be 100644 --- a/docs/reference/kubernetes/helm-chart.md +++ b/docs/reference/kubernetes/helm-chart.md @@ -1,6 +1,6 @@ # gluu -![version: 5.1.6-dev](https://img.shields.io/badge/Version-5.1.3--dev-informational?style=flat-square) ![Appversion: 5.1.6-dev](https://img.shields.io/badge/AppVersion-5.1.3--dev-informational?style=flat-square) +![version: 5.1.6](https://img.shields.io/badge/Version-5.1.3--dev-informational?style=flat-square) ![Appversion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.3--dev-informational?style=flat-square) Gluu Access and Identity Management @@ -69,8 +69,8 @@ Kubernetes: `>=v1.21.0-0` | admin-ui.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | admin-ui.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | admin-ui.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| auth-server | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/auth-server","tag":"1.1.6_dev"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"2500m","memory":"2500Mi"},"requests":{"cpu":"2500m","memory":"2500Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | OAuth Authorization Server, the OpenID Connect Provider, the UMA Authorization Server--this is the main Internet facing component of Gluu. It's the service that returns tokens, JWT's and identity assertions. This service must be Internet facing. | -| auth-server-key-rotation | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/certmanager","tag":"1.1.6_dev"},"keysLife":48,"keysPushDelay":0,"keysPushStrategy":"NEWER","keysStrategy":"NEWER","lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for regenerating auth-keys per x hours | +| auth-server | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/auth-server","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"2500m","memory":"2500Mi"},"requests":{"cpu":"2500m","memory":"2500Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | OAuth Authorization Server, the OpenID Connect Provider, the UMA Authorization Server--this is the main Internet facing component of Gluu. It's the service that returns tokens, JWT's and identity assertions. This service must be Internet facing. | +| auth-server-key-rotation | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/certmanager","tag":"1.1.6-1"},"keysLife":48,"keysPushDelay":0,"keysPushStrategy":"NEWER","keysStrategy":"NEWER","lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for regenerating auth-keys per x hours | | auth-server-key-rotation.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | auth-server-key-rotation.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | auth-server-key-rotation.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | @@ -105,7 +105,7 @@ Kubernetes: `>=v1.21.0-0` | auth-server.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | auth-server.image.pullSecrets | list | `[]` | Image Pull Secrets | | auth-server.image.repository | string | `"ghcr.io/janssenproject/jans/auth-server"` | Image to use for deploying. | -| auth-server.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| auth-server.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | auth-server.livenessProbe | object | `{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | auth-server.livenessProbe.exec | object | `{"command":["python3","/app/scripts/healthcheck.py"]}` | Executes the python3 healthcheck. https://github.com/JanssenProject/docker-jans-auth-server/blob/master/scripts/healthcheck.py | | auth-server.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -122,7 +122,7 @@ Kubernetes: `>=v1.21.0-0` | auth-server.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | auth-server.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | auth-server.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| casa | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/casa","tag":"1.1.6_dev"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"500Mi"},"requests":{"cpu":"500m","memory":"500Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Janssen Casa ("Casa") is a self-service web portal for end-users to manage authentication and authorization preferences for their account in a Janssen Auth Server. | +| casa | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/casa","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"500Mi"},"requests":{"cpu":"500m","memory":"500Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Janssen Casa ("Casa") is a self-service web portal for end-users to manage authentication and authorization preferences for their account in a Janssen Auth Server. | | casa.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | casa.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | casa.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | @@ -134,7 +134,7 @@ Kubernetes: `>=v1.21.0-0` | casa.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | casa.image.pullSecrets | list | `[]` | Image Pull Secrets | | casa.image.repository | string | `"ghcr.io/janssenproject/jans/casa"` | Image to use for deploying. | -| casa.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| casa.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | casa.livenessProbe | object | `{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5}` | Configure the liveness healthcheck for casa if needed. | | casa.livenessProbe.httpGet.path | string | `"/jans-casa/health-check"` | http liveness probe endpoint | | casa.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -152,8 +152,8 @@ Kubernetes: `>=v1.21.0-0` | casa.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | casa.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | casa.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| config | object | `{"additionalAnnotations":{},"additionalLabels":{},"adminPassword":"Test1234#","city":"Austin","configmap":{"cnAwsAccessKeyId":"","cnAwsDefaultRegion":"us-west-1","cnAwsProfile":"gluu","cnAwsSecretAccessKey":"","cnAwsSecretsEndpointUrl":"","cnAwsSecretsNamePrefix":"gluu","cnAwsSecretsReplicaRegions":[],"cnCacheType":"NATIVE_PERSISTENCE","cnConfigKubernetesConfigMap":"cn","cnCouchbaseBucketPrefix":"jans","cnCouchbaseCrt":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnCouchbaseIndexNumReplica":0,"cnCouchbasePassword":"P@ssw0rd","cnCouchbaseSuperUser":"admin","cnCouchbaseSuperUserPassword":"Test1234#","cnCouchbaseUrl":"cbgluu.default.svc.cluster.local","cnCouchbaseUser":"gluu","cnGoogleProjectId":"google-project-to-save-config-and-secrets-to","cnGoogleSecretManagerServiceAccount":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnGoogleSecretNamePrefix":"gluu","cnGoogleSecretVersionId":"latest","cnGoogleSpannerDatabaseId":"","cnGoogleSpannerInstanceId":"","cnJettyRequestHeaderSize":8192,"cnLdapCrt":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnLdapKey":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnLdapUrl":"opendj:1636","cnMaxRamPercent":"75.0","cnMessageType":"DISABLED","cnOpaUrl":"http://opa.opa.svc.cluster.cluster.local:8181/v1","cnPersistenceHybridMapping":"{}","cnRedisSentinelGroup":"","cnRedisSslTruststore":"","cnRedisType":"STANDALONE","cnRedisUrl":"redis.redis.svc.cluster.local:6379","cnRedisUseSsl":false,"cnScimProtectionMode":"OAUTH","cnSecretKubernetesSecret":"cn","cnSqlDbDialect":"mysql","cnSqlDbHost":"my-release-mysql.default.svc.cluster.local","cnSqlDbName":"gluu","cnSqlDbPort":3306,"cnSqlDbSchema":"","cnSqlDbTimezone":"UTC","cnSqlDbUser":"gluu","cnSqldbUserPassword":"Test1234#","cnVaultAddr":"http://localhost:8200","cnVaultAppRolePath":"approle","cnVaultKvPath":"secret","cnVaultNamespace":"","cnVaultPrefix":"jans","cnVaultRoleId":"","cnVaultRoleIdFile":"/etc/certs/vault_role_id","cnVaultSecretId":"","cnVaultSecretIdFile":"/etc/certs/vault_secret_id","cnVaultVerify":false,"kcDbPassword":"Test1234#","kcDbSchema":"keycloak","kcDbUrlDatabase":"keycloak","kcDbUrlHost":"mysql.kc.svc.cluster.local","kcDbUrlPort":3306,"kcDbUrlProperties":"?useUnicode=true&characterEncoding=UTF-8&character_set_server=utf8mb4","kcDbUsername":"keycloak","kcDbVendor":"mysql","kcLogLevel":"INFO","lbAddr":"","quarkusTransactionEnableRecovery":true},"countryCode":"US","customScripts":[],"dnsConfig":{},"dnsPolicy":"","email":"team@gluu.org","image":{"pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/configurator","tag":"1.1.6_dev"},"ldapPassword":"P@ssw0rds","ldapTruststorePassword":"changeit","lifecycle":{},"migration":{"enabled":false,"migrationDataFormat":"ldif","migrationDir":"/ce-migration"},"orgName":"Gluu","redisPassword":"P@assw0rd","resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"salt":"","state":"TX","usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Configuration parameters for setup and initial configuration secret and config layers used by Gluu services. | -| config-api | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/config-api","tag":"1.1.6_dev"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-config-api/api/v1/health/live","port":8074},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"jans-config-api/api/v1/health/ready","port":8074},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1200Mi"},"requests":{"cpu":"1000m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Config Api endpoints can be used to configure the auth-server, which is an open-source OpenID Connect Provider (OP) and UMA Authorization Server (AS). | +| config | object | `{"additionalAnnotations":{},"additionalLabels":{},"adminPassword":"Test1234#","city":"Austin","configmap":{"cnAwsAccessKeyId":"","cnAwsDefaultRegion":"us-west-1","cnAwsProfile":"gluu","cnAwsSecretAccessKey":"","cnAwsSecretsEndpointUrl":"","cnAwsSecretsNamePrefix":"gluu","cnAwsSecretsReplicaRegions":[],"cnCacheType":"NATIVE_PERSISTENCE","cnConfigKubernetesConfigMap":"cn","cnCouchbaseBucketPrefix":"jans","cnCouchbaseCrt":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnCouchbaseIndexNumReplica":0,"cnCouchbasePassword":"P@ssw0rd","cnCouchbaseSuperUser":"admin","cnCouchbaseSuperUserPassword":"Test1234#","cnCouchbaseUrl":"cbgluu.default.svc.cluster.local","cnCouchbaseUser":"gluu","cnGoogleProjectId":"google-project-to-save-config-and-secrets-to","cnGoogleSecretManagerServiceAccount":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnGoogleSecretNamePrefix":"gluu","cnGoogleSecretVersionId":"latest","cnGoogleSpannerDatabaseId":"","cnGoogleSpannerInstanceId":"","cnJettyRequestHeaderSize":8192,"cnLdapCrt":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnLdapKey":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnLdapUrl":"opendj:1636","cnMaxRamPercent":"75.0","cnMessageType":"DISABLED","cnOpaUrl":"http://opa.opa.svc.cluster.cluster.local:8181/v1","cnPersistenceHybridMapping":"{}","cnRedisSentinelGroup":"","cnRedisSslTruststore":"","cnRedisType":"STANDALONE","cnRedisUrl":"redis.redis.svc.cluster.local:6379","cnRedisUseSsl":false,"cnScimProtectionMode":"OAUTH","cnSecretKubernetesSecret":"cn","cnSqlDbDialect":"mysql","cnSqlDbHost":"my-release-mysql.default.svc.cluster.local","cnSqlDbName":"gluu","cnSqlDbPort":3306,"cnSqlDbSchema":"","cnSqlDbTimezone":"UTC","cnSqlDbUser":"gluu","cnSqldbUserPassword":"Test1234#","cnVaultAddr":"http://localhost:8200","cnVaultAppRolePath":"approle","cnVaultKvPath":"secret","cnVaultNamespace":"","cnVaultPrefix":"jans","cnVaultRoleId":"","cnVaultRoleIdFile":"/etc/certs/vault_role_id","cnVaultSecretId":"","cnVaultSecretIdFile":"/etc/certs/vault_secret_id","cnVaultVerify":false,"kcDbPassword":"Test1234#","kcDbSchema":"keycloak","kcDbUrlDatabase":"keycloak","kcDbUrlHost":"mysql.kc.svc.cluster.local","kcDbUrlPort":3306,"kcDbUrlProperties":"?useUnicode=true&characterEncoding=UTF-8&character_set_server=utf8mb4","kcDbUsername":"keycloak","kcDbVendor":"mysql","kcLogLevel":"INFO","lbAddr":"","quarkusTransactionEnableRecovery":true},"countryCode":"US","customScripts":[],"dnsConfig":{},"dnsPolicy":"","email":"team@gluu.org","image":{"pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/configurator","tag":"1.1.6-1"},"ldapPassword":"P@ssw0rds","ldapTruststorePassword":"changeit","lifecycle":{},"migration":{"enabled":false,"migrationDataFormat":"ldif","migrationDir":"/ce-migration"},"orgName":"Gluu","redisPassword":"P@assw0rd","resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"salt":"","state":"TX","usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Configuration parameters for setup and initial configuration secret and config layers used by Gluu services. | +| config-api | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/config-api","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-config-api/api/v1/health/live","port":8074},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"jans-config-api/api/v1/health/ready","port":8074},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1200Mi"},"requests":{"cpu":"1000m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Config Api endpoints can be used to configure the auth-server, which is an open-source OpenID Connect Provider (OP) and UMA Authorization Server (AS). | | config-api.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | config-api.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | config-api.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | @@ -165,7 +165,7 @@ Kubernetes: `>=v1.21.0-0` | config-api.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | config-api.image.pullSecrets | list | `[]` | Image Pull Secrets | | config-api.image.repository | string | `"ghcr.io/janssenproject/jans/config-api"` | Image to use for deploying. | -| config-api.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| config-api.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | config-api.livenessProbe | object | `{"httpGet":{"path":"/jans-config-api/api/v1/health/live","port":8074},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | config-api.livenessProbe.httpGet | object | `{"path":"/jans-config-api/api/v1/health/live","port":8074}` | http liveness probe endpoint | | config-api.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -253,7 +253,7 @@ Kubernetes: `>=v1.21.0-0` | config.email | string | `"team@gluu.org"` | Email address of the administrator usually. Used for certificate creation. | | config.image.pullSecrets | list | `[]` | Image Pull Secrets | | config.image.repository | string | `"ghcr.io/janssenproject/jans/configurator"` | Image to use for deploying. | -| config.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| config.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | config.ldapPassword | string | `"P@ssw0rds"` | LDAP admin password if OpenDJ is used for persistence. | | config.ldapTruststorePassword | string | `"changeit"` | LDAP truststore password if OpenDJ is used for persistence | | config.migration | object | `{"enabled":false,"migrationDataFormat":"ldif","migrationDir":"/ce-migration"}` | CE to CN Migration section | @@ -274,7 +274,7 @@ Kubernetes: `>=v1.21.0-0` | config.usrEnvs.secret | object | `{}` | Add custom secret envs to the service. variable1: value1 | | config.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | config.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| fido2 | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/fido2","tag":"1.1.6_dev"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"500Mi"},"requests":{"cpu":"500m","memory":"500Mi"}},"service":{"name":"http-fido2","port":8080},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | FIDO 2.0 (FIDO2) is an open authentication standard that enables leveraging common devices to authenticate to online services in both mobile and desktop environments. | +| fido2 | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/fido2","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"500Mi"},"requests":{"cpu":"500m","memory":"500Mi"}},"service":{"name":"http-fido2","port":8080},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | FIDO 2.0 (FIDO2) is an open authentication standard that enables leveraging common devices to authenticate to online services in both mobile and desktop environments. | | fido2.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | fido2.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | fido2.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | @@ -286,7 +286,7 @@ Kubernetes: `>=v1.21.0-0` | fido2.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | fido2.image.pullSecrets | list | `[]` | Image Pull Secrets | | fido2.image.repository | string | `"ghcr.io/janssenproject/jans/fido2"` | Image to use for deploying. | -| fido2.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| fido2.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | fido2.livenessProbe | object | `{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5}` | Configure the liveness healthcheck for the fido2 if needed. | | fido2.livenessProbe.httpGet | object | `{"path":"/jans-fido2/sys/health-check","port":"http-fido2"}` | http liveness probe endpoint | | fido2.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -488,7 +488,7 @@ Kubernetes: `>=v1.21.0-0` | global.usrEnvs.normal | object | `{}` | Add custom normal envs to the service. variable1: value1 | | global.usrEnvs.secret | object | `{}` | Add custom secret envs to the service. variable1: value1 | | installer-settings | object | `{"acceptLicense":"","aws":{"arn":{"arnAcmCert":"","enabled":""},"lbType":"","vpcCidr":"0.0.0.0/0"},"confirmSettings":false,"couchbase":{"backup":{"fullSchedule":"","incrementalSchedule":"","retentionTime":"","storageSize":""},"clusterName":"","commonName":"","customFileOverride":"","install":"","lowResourceInstall":"","namespace":"","subjectAlternativeName":"","totalNumberOfExpectedTransactionsPerSec":"","totalNumberOfExpectedUsers":"","volumeType":""},"currentVersion":"","google":{"useSecretManager":""},"images":{"edit":""},"ldap":{"backup":{"fullSchedule":""}},"namespace":"","nginxIngress":{"namespace":"","releaseName":""},"nodes":{"ips":"","names":"","zones":""},"openbanking":{"cnObTransportTrustStoreP12password":"","hasCnObTransportTrustStore":false},"postgres":{"install":"","namespace":""},"redis":{"install":"","namespace":""},"releaseName":"","sql":{"install":"","namespace":""},"volumeProvisionStrategy":""}` | Only used by the installer. These settings do not affect nor are used by the chart | -| kc-scheduler | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/kc-scheduler","tag":"1.1.6_dev"},"interval":10,"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for synchronizing Keycloak SAML clients | +| kc-scheduler | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/kc-scheduler","tag":"1.1.6-1"},"interval":10,"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for synchronizing Keycloak SAML clients | | kc-scheduler.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | kc-scheduler.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | kc-scheduler.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | @@ -497,7 +497,7 @@ Kubernetes: `>=v1.21.0-0` | kc-scheduler.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | kc-scheduler.image.pullSecrets | list | `[]` | Image Pull Secrets | | kc-scheduler.image.repository | string | `"ghcr.io/janssenproject/jans/kc-scheduler"` | Image to use for deploying. | -| kc-scheduler.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| kc-scheduler.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | kc-scheduler.interval | int | `10` | Interval of running the scheduler (in minutes) | | kc-scheduler.resources | object | `{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}}` | Resource specs. | | kc-scheduler.resources.limits.cpu | string | `"300m"` | CPU limit. | @@ -509,7 +509,7 @@ Kubernetes: `>=v1.21.0-0` | kc-scheduler.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | kc-scheduler.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | kc-scheduler.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| link | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/link","tag":"1.1.6_dev"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"1200Mi"},"requests":{"cpu":"500m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Link. | +| link | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/link","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"1200Mi"},"requests":{"cpu":"500m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Link. | | link.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | link.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | link.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | @@ -521,7 +521,7 @@ Kubernetes: `>=v1.21.0-0` | link.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | link.image.pullSecrets | list | `[]` | Image Pull Secrets | | link.image.repository | string | `"ghcr.io/janssenproject/jans/link"` | Image to use for deploying. | -| link.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| link.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | link.livenessProbe | object | `{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | link.livenessProbe.exec | object | `{"command":["python3","/app/scripts/healthcheck.py"]}` | http liveness probe endpoint | | link.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -609,7 +609,7 @@ Kubernetes: `>=v1.21.0-0` | opendj.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | opendj.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | opendj.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| persistence | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/persistence-loader","tag":"1.1.6_dev"},"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Job to generate data and initial config for Gluu Server persistence layer. | +| persistence | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/persistence-loader","tag":"1.1.6-1"},"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Job to generate data and initial config for Gluu Server persistence layer. | | persistence.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | persistence.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | persistence.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | @@ -618,7 +618,7 @@ Kubernetes: `>=v1.21.0-0` | persistence.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | persistence.image.pullSecrets | list | `[]` | Image Pull Secrets | | persistence.image.repository | string | `"ghcr.io/janssenproject/jans/persistence-loader"` | Image to use for deploying. | -| persistence.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| persistence.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | persistence.resources | object | `{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}}` | Resource specs. | | persistence.resources.limits.cpu | string | `"300m"` | CPU limit | | persistence.resources.limits.memory | string | `"300Mi"` | Memory limit. | @@ -629,7 +629,7 @@ Kubernetes: `>=v1.21.0-0` | persistence.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | persistence.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | persistence.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| saml | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/saml","tag":"1.1.6_dev"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"1200Mi"},"requests":{"cpu":"500m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | SAML. | +| saml | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/saml","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"1200Mi"},"requests":{"cpu":"500m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | SAML. | | saml.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | saml.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | saml.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | @@ -641,7 +641,7 @@ Kubernetes: `>=v1.21.0-0` | saml.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | saml.image.pullSecrets | list | `[]` | Image Pull Secrets | | saml.image.repository | string | `"ghcr.io/janssenproject/jans/saml"` | Image to use for deploying. | -| saml.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| saml.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | saml.livenessProbe | object | `{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | saml.livenessProbe.exec | object | `{"command":["python3","/app/scripts/healthcheck.py"]}` | http liveness probe endpoint | | saml.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -658,7 +658,7 @@ Kubernetes: `>=v1.21.0-0` | saml.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | saml.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | saml.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| scim | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/scim","tag":"1.1.6_dev"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1200Mi"},"requests":{"cpu":"1000m","memory":"1200Mi"}},"service":{"name":"http-scim","port":8080},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | System for Cross-domain Identity Management (SCIM) version 2.0 | +| scim | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/scim","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1200Mi"},"requests":{"cpu":"1000m","memory":"1200Mi"}},"service":{"name":"http-scim","port":8080},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | System for Cross-domain Identity Management (SCIM) version 2.0 | | scim.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | scim.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | scim.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | @@ -670,7 +670,7 @@ Kubernetes: `>=v1.21.0-0` | scim.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | scim.image.pullSecrets | list | `[]` | Image Pull Secrets | | scim.image.repository | string | `"ghcr.io/janssenproject/jans/scim"` | Image to use for deploying. | -| scim.image.tag | string | `"1.1.6_dev"` | Image tag to use for deploying. | +| scim.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | | scim.livenessProbe | object | `{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for SCIM if needed. | | scim.livenessProbe.httpGet.path | string | `"/jans-scim/sys/health-check"` | http liveness probe endpoint | | scim.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | diff --git a/flex-linux-setup/flex_linux_setup/version.py b/flex-linux-setup/flex_linux_setup/version.py index cec8bdf4b..e7dda09d4 100644 --- a/flex-linux-setup/flex_linux_setup/version.py +++ b/flex-linux-setup/flex_linux_setup/version.py @@ -1 +1 @@ -__version__ = "5.1.6-dev" +__version__ = "5.1.6" From 71be844dc2808310749941e3efad9b182e2fc845 Mon Sep 17 00:00:00 2001 From: Mohammad Abudayyeh <47318409+moabu@users.noreply.github.com> Date: Mon, 2 Dec 2024 07:01:25 +0000 Subject: [PATCH 4/4] chore(release): back to 0.0.0-nightly (#1911) * chore(release): back to 0.0.0-nightly Signed-off-by: moabu <47318409+moabu@users.noreply.github.com> * ci: adjust build workflows Signed-off-by: moabu <47318409+moabu@users.noreply.github.com> --------- Signed-off-by: moabu <47318409+moabu@users.noreply.github.com> --- .github/workflows/activate-nightly-build.yml | 27 ++++--- .github/workflows/build-packages.yml | 32 ++++++-- .github/workflows/docker_build_image.yml | 6 +- .github/workflows/release-snapshot.yml | 8 +- .github/workflows/release.yml | 8 +- admin-ui/package.json | 2 +- .../rancher-partner-charts/questions.yaml | 18 ++--- charts/gluu-all-in-one/Chart.yaml | 6 +- charts/gluu-all-in-one/README.md | 12 +-- charts/gluu-all-in-one/values.yaml | 6 +- charts/gluu/Chart.yaml | 56 ++++++------- charts/gluu/README.md | 78 +++++++++---------- charts/gluu/charts/admin-ui/Chart.yaml | 4 +- charts/gluu/charts/admin-ui/README.md | 4 +- charts/gluu/charts/admin-ui/values.yaml | 2 +- .../auth-server-key-rotation/Chart.yaml | 4 +- .../charts/auth-server-key-rotation/README.md | 4 +- .../auth-server-key-rotation/values.yaml | 2 +- charts/gluu/charts/auth-server/Chart.yaml | 4 +- charts/gluu/charts/auth-server/README.md | 4 +- charts/gluu/charts/auth-server/values.yaml | 2 +- charts/gluu/charts/casa/Chart.yaml | 4 +- charts/gluu/charts/casa/README.md | 4 +- charts/gluu/charts/casa/values.yaml | 2 +- .../gluu/charts/cn-istio-ingress/Chart.yaml | 4 +- charts/gluu/charts/cn-istio-ingress/README.md | 2 +- charts/gluu/charts/config-api/Chart.yaml | 4 +- charts/gluu/charts/config-api/README.md | 4 +- charts/gluu/charts/config-api/values.yaml | 2 +- charts/gluu/charts/config/Chart.yaml | 4 +- charts/gluu/charts/config/README.md | 4 +- charts/gluu/charts/config/values.yaml | 2 +- charts/gluu/charts/fido2/Chart.yaml | 4 +- charts/gluu/charts/fido2/README.md | 4 +- charts/gluu/charts/fido2/values.yaml | 2 +- charts/gluu/charts/kc-scheduler/Chart.yaml | 4 +- charts/gluu/charts/kc-scheduler/README.md | 4 +- charts/gluu/charts/kc-scheduler/values.yaml | 2 +- charts/gluu/charts/link/Chart.yaml | 4 +- charts/gluu/charts/link/README.md | 4 +- charts/gluu/charts/link/values.yaml | 2 +- charts/gluu/charts/nginx-ingress/Chart.yaml | 4 +- charts/gluu/charts/nginx-ingress/README.md | 2 +- charts/gluu/charts/persistence/Chart.yaml | 4 +- charts/gluu/charts/persistence/README.md | 4 +- charts/gluu/charts/persistence/values.yaml | 2 +- charts/gluu/charts/saml/Chart.yaml | 4 +- charts/gluu/charts/saml/README.md | 4 +- charts/gluu/charts/saml/values.yaml | 2 +- charts/gluu/charts/scim/Chart.yaml | 4 +- charts/gluu/charts/scim/README.md | 4 +- charts/gluu/charts/scim/values.yaml | 2 +- charts/gluu/openbanking-values.yaml | 8 +- charts/gluu/values.yaml | 24 +++--- docker-admin-ui/Dockerfile | 2 +- docker-admin-ui/Makefile | 2 +- docker-admin-ui/README.md | 2 +- docker-admin-ui/version.txt | 2 +- docker-flex-all-in-one/Dockerfile | 12 +-- docker-flex-all-in-one/Makefile | 2 +- docker-flex-monolith/Dockerfile | 2 +- docker-flex-monolith/Makefile | 2 +- docker-flex-monolith/README.md | 2 +- docker-flex-monolith/clean.sh | 2 +- docker-flex-monolith/down.sh | 2 +- docker-flex-monolith/flex-mysql-compose.yml | 2 +- .../flex-postgres-compose.yml | 2 +- docker-flex-monolith/up.sh | 2 +- docker-flex-monolith/version.txt | 2 +- docs/install/docker-install/compose.md | 2 +- docs/reference/kubernetes/docker-admin-ui.md | 2 +- .../kubernetes/docker-flex-monolith.md | 2 +- docs/reference/kubernetes/helm-chart.md | 44 +++++------ .../flex_linux_setup/flex_setup.py | 4 +- flex-linux-setup/flex_linux_setup/version.py | 2 +- 75 files changed, 273 insertions(+), 246 deletions(-) diff --git a/.github/workflows/activate-nightly-build.yml b/.github/workflows/activate-nightly-build.yml index cb6b050b1..3d6a9adce 100644 --- a/.github/workflows/activate-nightly-build.yml +++ b/.github/workflows/activate-nightly-build.yml @@ -4,12 +4,22 @@ on: workflow_dispatch: schedule: - cron: "0 23 * * *" +permissions: + contents: read + jobs: publish_binary_packages: + permissions: + contents: write # for Git to git push runs-on: ubuntu-22.04 steps: + - name: Harden Runner + uses: step-security/harden-runner@a4aa98b93cab29d9b1101a6143fb8bce00e2eac4 # v2.7.1 + with: + egress-policy: audit + - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: set nightly version id: nightly @@ -23,13 +33,8 @@ jobs: sudo cp gh_${VERSION}_linux_amd64/bin/gh /usr/local/bin/ gh version echo "${{ secrets.MOWORKFLOWTOKEN }}" | gh auth login --with-token - BASE_VERSION=$(cat charts/gluu/Chart.yaml | grep "appVersion" | awk -F ": " '{print $2}' | tr -d '"' | sed 's/-dev//') - # Clean up old nightly release - gh release delete v${BASE_VERSION}.nightly --cleanup-tag --yes || echo "v${BASE_VERSION}.nightly" does not exist - git push --delete origin v${BASE_VERSION}.nightly || echo "v${BASE_VERSION}.nightly" does not exist - # Create new nightly release - gh release delete v${BASE_VERSION}.nightly --cleanup-tag --yes || echo "v${BASE_VERSION}.nightly" does not exist - gh release delete v${BASE_VERSION}.nightly --cleanup-tag --yes || echo "v${BASE_VERSION}.nightly" does not exist - git push --delete origin v${BASE_VERSION}.nightly || echo "v${BASE_VERSION}.nightly" does not exist - - gh release create v${BASE_VERSION}.nightly --generate-notes --prerelease --title "v${BASE_VERSION}.nightly" \ No newline at end of file + NIGHTLY_VERSION="nightly" + gh release delete ${NIGHTLY_VERSION} --cleanup-tag --yes || echo "${NIGHTLY_VERSION}" does not exist + gh release delete ${NIGHTLY_VERSION} --cleanup-tag --yes || echo "${NIGHTLY_VERSION}" does not exist + git push --delete origin ${NIGHTLY_VERSION} || echo "${NIGHTLY_VERSION}" does not exist + gh release create ${NIGHTLY_VERSION} --generate-notes --prerelease --title "${NIGHTLY_VERSION}" \ No newline at end of file diff --git a/.github/workflows/build-packages.yml b/.github/workflows/build-packages.yml index dfedd474f..e7aad4af2 100644 --- a/.github/workflows/build-packages.yml +++ b/.github/workflows/build-packages.yml @@ -4,8 +4,10 @@ on: push: tags: - 'v**' + - 'nightly' jobs: publish_binary_packages: + if: github.repository == 'GluuFederation/flex' runs-on: ubuntu-20.04 strategy: fail-fast: false @@ -43,8 +45,13 @@ jobs: python_version: "3.6" steps: + - name: Harden Runner + uses: step-security/harden-runner@a4aa98b93cab29d9b1101a6143fb8bce00e2eac4 # v2.7.1 + with: + egress-policy: audit + - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 with: path: temp-flex @@ -63,7 +70,7 @@ jobs: - name: Import GPG key id: import_gpg continue-on-error: true - uses: crazy-max/ghaction-import-gpg@v5 + uses: crazy-max/ghaction-import-gpg@01dd5d3ca463c7f10f7f4f7b4f177225ac661ee4 # v6.1.0 with: gpg_private_key: ${{ secrets.MOAUTO_GPG_PRIVATE_KEY }} passphrase: ${{ secrets.MOAUTO_GPG_PRIVATE_KEY_PASSPHRASE }} @@ -77,6 +84,11 @@ jobs: run: | echo "version=$(echo ${{ github.event.ref }} | cut -d 'v' -f 2)" >> $GITHUB_OUTPUT echo "tag=$(echo ${{ github.event.ref }} | cut -d '/' -f 3)" >> $GITHUB_OUTPUT + if [[ ${{ github.event.ref }} == 'refs/tags/nightly' ]]; then + echo "version=0.0.0-nightly" >> $GITHUB_OUTPUT + else + echo "version=$(echo ${{ github.event.ref }} | cut -d 'v' -f 2)" >> $GITHUB_OUTPUT + fi echo "PACKAGE_PREFIX=flex" >> ${GITHUB_ENV} - name: Print Version and tag @@ -87,7 +99,7 @@ jobs: id: run_build run: | cd flex/ - sudo python${{ matrix.python_version }} flex_setup.py --jans-branch="v1.1.6-hotfix" --jans-setup-branch="v1.1.6-hotfix" -download-exit + sudo python${{ matrix.python_version }} install.py --jans-branch="nightly" --jans-setup-branch="nightly" -download-exit -yes --keep-downloads --keep-setup -force-download cp -r /opt/dist flex-src/opt/ cp -r /opt/jans flex-src/opt/ touch flex-src/opt/jans/jans-setup/package @@ -111,9 +123,10 @@ jobs: cd flex/ sed -i "s/%VERSION%/${{ steps.previoustag.outputs.version }}/g" checksum.sh sudo ./checksum.sh + - name: Upload binaries to release id: upload_binaries - uses: svenstaro/upload-release-action@v2 + uses: svenstaro/upload-release-action@1beeb572c19a9242f4361f4cee78f8e0d9aec5df # v2 with: repo_token: ${{ secrets.MOWORKFLOWTOKEN }} file: ${{github.workspace}}/${{ matrix.asset_path }}/flex${{ matrix.asset_prefix }}${{ steps.previoustag.outputs.version }}${{ matrix.asset_suffix }} @@ -122,10 +135,19 @@ jobs: overwrite: true - name: Upload checksum to release id: upload_shas - uses: svenstaro/upload-release-action@v2 + uses: svenstaro/upload-release-action@1beeb572c19a9242f4361f4cee78f8e0d9aec5df # v2 with: repo_token: ${{ secrets.MOWORKFLOWTOKEN }} file: ${{github.workspace}}/${{ matrix.asset_path }}/flex${{ matrix.asset_prefix }}${{ steps.previoustag.outputs.version }}${{ matrix.asset_suffix }}.sha256sum asset_name: ${{ env.PACKAGE_PREFIX }}${{ matrix.asset_prefix }}${{ steps.previoustag.outputs.version }}${{ matrix.asset_suffix }}.sha256sum tag: ${{ steps.previoustag.outputs.tag }} overwrite: true + - name: Upload sig to release + id: upload_sigs + uses: svenstaro/upload-release-action@1beeb572c19a9242f4361f4cee78f8e0d9aec5df # v2 + with: + repo_token: ${{ secrets.MOAUTO_WORKFLOW_TOKEN }} + file: ${{github.workspace}}/${{ matrix.asset_path }}/flex{{ matrix.asset_prefix }}${{ steps.previoustag.outputs.version }}${{ matrix.asset_suffix }}.asc + asset_name: ${{ env.PACKAGE_PREFIX }}${{ matrix.asset_prefix }}${{ steps.previoustag.outputs.version }}${{ matrix.asset_suffix }}.asc + tag: ${{ steps.previoustag.outputs.tag }} + overwrite: true diff --git a/.github/workflows/docker_build_image.yml b/.github/workflows/docker_build_image.yml index 48bcae0c1..57807e03f 100644 --- a/.github/workflows/docker_build_image.yml +++ b/.github/workflows/docker_build_image.yml @@ -87,9 +87,9 @@ jobs: REPOSITORY=$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]') MAIN_VERSION=$(python3 -c "from dockerfile_parse import DockerfileParser ; dfparser = DockerfileParser('./docker-${{ matrix.docker-images }}') ; print(dfparser.labels['org.opencontainers.image.version'])") DOCKER_IMAGE=ghcr.io/$REPOSITORY/${{ matrix.docker-images }} - VERSION=${MAIN_VERSION}_dev + VERSION=${MAIN_VERSION} if [[ ${{ matrix.docker-images }} == "flex-monolith" ]]; then - VERSION=5.1.6-1 + VERSION=0.0.0-nightly DOCKER_IMAGE=ghcr.io/$REPOSITORY/monolith fi BUILD=true @@ -101,7 +101,7 @@ jobs: fi TAGS="${DOCKER_IMAGE}:${VERSION}" if [[ $VERSION =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\_[a-b]{1}[0-9]{1,3}$ ]]; then - TAGS="$TAGS,${DOCKER_IMAGE}:${MAIN_VERSION}_dev" + TAGS="$TAGS,${DOCKER_IMAGE}:${MAIN_VERSION}" fi # If the user passed a manual image tag to build a custom manual image MANUAL_IMAGE_TAG=${{ github.event.inputs.image_tag }} diff --git a/.github/workflows/release-snapshot.yml b/.github/workflows/release-snapshot.yml index 390db3252..993fbe4fe 100644 --- a/.github/workflows/release-snapshot.yml +++ b/.github/workflows/release-snapshot.yml @@ -5,19 +5,19 @@ on: jans_release_as: description: 'Release version for the python projects, admin ui, docker images, and helm charts' required: true - default: '1.1.6' + default: '0.0.0-nightly' mega_release_as: description: 'Mega release version' required: true - default: '5.1.6' + default: '0.0.0-nightly' next_jans_release_as: description: 'next anticipated jans Mega release version' required: true - default: '1.1.6' + default: '0.0.0-nightly' next_mega_release_as: description: 'next anticipated Mega release version' required: true - default: '5.1.6' + default: '0.0.0-nightly' jobs: mega-release-pr: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 35d1b8829..a5caf075b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,19 +5,19 @@ on: jans_release_as: description: 'Release version for the python projects, admin ui, docker images, and helm charts' required: true - default: '1.1.6' + default: '0.0.0-nightly' mega_release_as: description: 'Mega release version' required: true - default: '5.1.6' + default: '0.0.0-nightly' next_jans_release_as: description: 'next anticipated jans Mega release version' required: true - default: '1.1.6' + default: '0.0.0-nightly' next_mega_release_as: description: 'next anticipated Mega release version' required: true - default: '5.1.6' + default: '0.0.0-nightly' jobs: mega-release-pr: diff --git a/admin-ui/package.json b/admin-ui/package.json index 70af5604a..ab031844f 100644 --- a/admin-ui/package.json +++ b/admin-ui/package.json @@ -1,6 +1,6 @@ { "name": "gluu-admin-ui", - "version": "5.1.6", + "version": "0.0.0-nightly", "description": "UI to administer the jans-sever features", "keywords": [ "jans-server", diff --git a/automation/rancher-partner-charts/questions.yaml b/automation/rancher-partner-charts/questions.yaml index 3fe8387d8..d7a8f001a 100644 --- a/automation/rancher-partner-charts/questions.yaml +++ b/automation/rancher-partner-charts/questions.yaml @@ -703,7 +703,7 @@ questions: - variable: auth-server.image.tag required: true type: string - default: "1.1.6-1" + default: "0.0.0-nightly" description: "The Auth Server Image tag" label: Auth Server image tag group: "Images" @@ -732,7 +732,7 @@ questions: - variable: admin-ui.image.tag required: true type: string - default: "5.1.6-1" + default: "0.0.0-nightly" description: "The AdminUI Image tag" label: AdminUI image tag group: "Images" @@ -761,7 +761,7 @@ questions: - variable: auth-server-key-rotation.image.tag required: true type: string - default: "1.1.6-1" + default: "0.0.0-nightly" description: "The Auth Server Image tag" label: Auth Server KeyRotation image tag group: "Images" @@ -790,7 +790,7 @@ questions: - variable: casa.image.tag required: true type: string - default: "1.1.6-1" + default: "0.0.0-nightly" description: "The Casa Image tag" label: Casa image tag group: "Images" @@ -819,7 +819,7 @@ questions: - variable: config.image.tag required: true type: string - default: "1.1.6-1" + default: "0.0.0-nightly" description: "The Configurator Image tag" label: Configurator image tag group: "Images" @@ -848,7 +848,7 @@ questions: - variable: config-api.image.tag required: true type: string - default: "1.1.6-1" + default: "0.0.0-nightly" description: "The ConfigAPI Image tag" label: ConfigAPI image tag group: "Images" @@ -877,7 +877,7 @@ questions: - variable: fido2.image.tag required: true type: string - default: "1.1.6-1" + default: "0.0.0-nightly" description: "The Fido2 Image tag" label: Fido2 image tag group: "Images" @@ -906,7 +906,7 @@ questions: - variable: persistence.image.tag required: true type: string - default: "1.1.6-1" + default: "0.0.0-nightly" description: "The Persistence Image tag" label: Persistence image tag group: "Images" @@ -935,7 +935,7 @@ questions: - variable: scim.image.tag required: true type: string - default: "1.1.6-1" + default: "0.0.0-nightly" description: "The SCIM Image tag" label: SCIM image tag group: "Images" diff --git a/charts/gluu-all-in-one/Chart.yaml b/charts/gluu-all-in-one/Chart.yaml index fa389799e..1dba7da3c 100644 --- a/charts/gluu-all-in-one/Chart.yaml +++ b/charts/gluu-all-in-one/Chart.yaml @@ -3,13 +3,13 @@ annotations: artifacthub.io/containsSecurityUpdates: 'true' artifacthub.io/images: | - name: all-in-one - image: ghcr.io/gluufederation/flex/flex-all-in-one:5.1.6-1 + image: ghcr.io/gluufederation/flex/flex-all-in-one:0.0.0-nightly artifacthub.io/license: Apache-2.0 catalog.cattle.io/certified: partner catalog.cattle.io/release-name: gluu-all-in-one catalog.cattle.io/display-name: Gluu Flex Cloud Identity and Access Management All-in-One apiVersion: v2 -appVersion: "5.1.6" +appVersion: "0.0.0-nightly" icon: >- https://gluu.org/docs/gluu-server/favicon.ico home: https://docs.gluu.org @@ -21,4 +21,4 @@ maintainers: email: team@gluu.org description: Gluu Access and Identity Management All-in-One Chart. This chart deploys the selected janssen microservice all in one deployment. name: gluu-all-in-one -version: 5.1.6 +version: 0.0.0-nightly diff --git a/charts/gluu-all-in-one/README.md b/charts/gluu-all-in-one/README.md index 05c23a7d0..29f415ab2 100644 --- a/charts/gluu-all-in-one/README.md +++ b/charts/gluu-all-in-one/README.md @@ -1,6 +1,6 @@ # gluu-all-in-one -![Version: 5.1.6](https://img.shields.io/badge/Version-5.1.6-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) +![Version: 0.0.0-nightly](https://img.shields.io/badge/Version-0.0.0--nightly-informational?style=flat-square) ![AppVersion: 0.0.0-nightly](https://img.shields.io/badge/AppVersion-0.0.0--nightly-informational?style=flat-square) Gluu Access and Identity Management All-in-One Chart. This chart deploys the selected janssen microservice all in one deployment. @@ -35,7 +35,7 @@ Kubernetes: `>=v1.22.0-0` | adminPassword | string | `"Test1234#"` | Admin password to log in to the UI. | | alb.ingress | bool | `false` | switches the service to Nodeport for ALB ingress | | auth-server | object | `{"appLoggers":{"auditStatsLogLevel":"INFO","auditStatsLogTarget":"FILE","authLogLevel":"INFO","authLogTarget":"STDOUT","enableStdoutLogPrefix":"true","httpLogLevel":"INFO","httpLogTarget":"FILE","persistenceDurationLogLevel":"INFO","persistenceDurationLogTarget":"FILE","persistenceLogLevel":"INFO","persistenceLogTarget":"FILE","scriptLogLevel":"INFO","scriptLogTarget":"FILE"},"authEncKeys":"RSA1_5 RSA-OAEP","authSigKeys":"RS256 RS384 RS512 ES256 ES384 ES512 PS256 PS384 PS512","enabled":true,"ingress":{"authServerAdditionalAnnotations":{},"authServerEnabled":true,"authServerLabels":{},"authServerProtectedRegister":false,"authServerProtectedRegisterAdditionalAnnotations":{},"authServerProtectedRegisterLabels":{},"authServerProtectedToken":false,"authServerProtectedTokenAdditionalAnnotations":{},"authServerProtectedTokenLabels":{},"deviceCodeAdditionalAnnotations":{},"deviceCodeEnabled":true,"deviceCodeLabels":{},"firebaseMessagingAdditionalAnnotations":{},"firebaseMessagingEnabled":true,"firebaseMessagingLabels":{},"lockAdditionalAnnotations":{},"lockConfigAdditionalAnnotations":{},"lockConfigEnabled":false,"lockConfigLabels":{},"lockEnabled":false,"lockLabels":{},"openidAdditionalAnnotations":{},"openidConfigEnabled":true,"openidConfigLabels":{},"u2fAdditionalAnnotations":{},"u2fConfigEnabled":true,"u2fConfigLabels":{},"uma2AdditionalAnnotations":{},"uma2ConfigEnabled":true,"uma2ConfigLabels":{},"webdiscoveryAdditionalAnnotations":{},"webdiscoveryEnabled":true,"webdiscoveryLabels":{},"webfingerAdditionalAnnotations":{},"webfingerEnabled":true,"webfingerLabels":{}},"lockEnabled":false}` | Parameters used globally across all services helm charts. | -| auth-server-key-rotation | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","enabled":true,"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/certmanager","tag":"1.1.6-1"},"initKeysLife":48,"keysLife":48,"keysPushDelay":0,"keysPushStrategy":"NEWER","keysStrategy":"NEWER","lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for regenerating auth-keys per x hours | +| auth-server-key-rotation | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","enabled":true,"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/certmanager","tag":"0.0.0-nightly"},"initKeysLife":48,"keysLife":48,"keysPushDelay":0,"keysPushStrategy":"NEWER","keysStrategy":"NEWER","lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for regenerating auth-keys per x hours | | auth-server-key-rotation.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | auth-server-key-rotation.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | auth-server-key-rotation.customCommand | list | `[]` | Add custom job's command. If passed, it will override the default conditional command. | @@ -46,7 +46,7 @@ Kubernetes: `>=v1.22.0-0` | auth-server-key-rotation.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | auth-server-key-rotation.image.pullSecrets | list | `[]` | Image Pull Secrets | | auth-server-key-rotation.image.repository | string | `"ghcr.io/janssenproject/jans/certmanager"` | Image to use for deploying. | -| auth-server-key-rotation.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| auth-server-key-rotation.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | auth-server-key-rotation.initKeysLife | int | `48` | The initial auth server key rotation keys life in hours | | auth-server-key-rotation.keysLife | int | `48` | Auth server key rotation keys life in hours | | auth-server-key-rotation.keysPushDelay | int | `0` | Delay (in seconds) before pushing private keys to Auth server | @@ -272,7 +272,7 @@ Kubernetes: `>=v1.22.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"ghcr.io/gluufederation/flex/flex-all-in-one"` | Image to use for deploying. | -| image.tag | string | `"5.1.6-1"` | Image tag to use for deploying. | +| image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | isFqdnRegistered | bool | `false` | Boolean flag to enable mapping lbIp to fqdn inside pods on clouds that provide static ip for load balancers. On cloud that provide only addresses to the LB this flag will enable a script to actively scan config.configmap.lbAddr and update the hosts file inside the pods automatically. | | istio.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | istio.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | @@ -281,7 +281,7 @@ Kubernetes: `>=v1.22.0-0` | istio.ingress | bool | `false` | Boolean flag that enables using istio gateway for Gluu. This assumes istio ingress is installed and hence the LB is available. | | istio.namespace | string | `"istio-system"` | The namespace istio is deployed in. The is normally istio-system. | | istio.tlsSecretName | string | `"istio-tls-certificate"` | | -| kc-scheduler | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","enabled":false,"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/kc-scheduler","tag":"1.1.6-1"},"interval":10,"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for synchronizing Keycloak SAML clients | +| kc-scheduler | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","enabled":false,"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/kc-scheduler","tag":"0.0.0-nightly"},"interval":10,"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for synchronizing Keycloak SAML clients | | kc-scheduler.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | kc-scheduler.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | kc-scheduler.customCommand | list | `[]` | Add custom job's command. If passed, it will override the default conditional command. | @@ -292,7 +292,7 @@ Kubernetes: `>=v1.22.0-0` | kc-scheduler.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | kc-scheduler.image.pullSecrets | list | `[]` | Image Pull Secrets | | kc-scheduler.image.repository | string | `"ghcr.io/janssenproject/jans/kc-scheduler"` | Image to use for deploying. | -| kc-scheduler.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| kc-scheduler.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | kc-scheduler.interval | int | `10` | Interval of running the scheduler (in minutes) | | kc-scheduler.resources | object | `{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}}` | Resource specs. | | kc-scheduler.resources.limits.cpu | string | `"300m"` | CPU limit. | diff --git a/charts/gluu-all-in-one/values.yaml b/charts/gluu-all-in-one/values.yaml index 5dc83a1b6..f09797ea3 100644 --- a/charts/gluu-all-in-one/values.yaml +++ b/charts/gluu-all-in-one/values.yaml @@ -305,7 +305,7 @@ auth-server-key-rotation: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/certmanager # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Auth server key rotation keys life in hours @@ -697,7 +697,7 @@ image: # -- Image to use for deploying. repository: ghcr.io/gluufederation/flex/flex-all-in-one # -- Image tag to use for deploying. - tag: 5.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -776,7 +776,7 @@ kc-scheduler: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/kc-scheduler # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Resource specs. diff --git a/charts/gluu/Chart.yaml b/charts/gluu/Chart.yaml index 505e13352..975715379 100644 --- a/charts/gluu/Chart.yaml +++ b/charts/gluu/Chart.yaml @@ -3,35 +3,35 @@ annotations: artifacthub.io/containsSecurityUpdates: "true" artifacthub.io/images: | - name: auth-server - image: ghcr.io/janssenproject/jans/auth-server:1.1.6-1 + image: ghcr.io/janssenproject/jans/auth-server:0.0.0-nightly - name: auth-server-key-rotation - image: ghcr.io/janssenproject/jans/certmanager:1.1.6-1 + image: ghcr.io/janssenproject/jans/certmanager:0.0.0-nightly - name: configuration-manager - image: ghcr.io/janssenproject/jans/configurator:1.1.6-1 + image: ghcr.io/janssenproject/jans/configurator:0.0.0-nightly - name: config-api - image: ghcr.io/janssenproject/jans/config-api:1.1.6-1 + image: ghcr.io/janssenproject/jans/config-api:0.0.0-nightly - name: fido2 - image: ghcr.io/janssenproject/jans/fido2:1.1.6-1 + image: ghcr.io/janssenproject/jans/fido2:0.0.0-nightly - name: persistence - image: ghcr.io/janssenproject/jans/persistence-loader:1.1.6-1 + image: ghcr.io/janssenproject/jans/persistence-loader:0.0.0-nightly - name: scim - image: ghcr.io/janssenproject/jans/scim:1.1.6-1 + image: ghcr.io/janssenproject/jans/scim:0.0.0-nightly - name: casa - image: ghcr.io/janssenproject/jans/casa:1.1.6-1 + image: ghcr.io/janssenproject/jans/casa:0.0.0-nightly - name: admin-ui - image: ghcr.io/gluufederation/flex/admin-ui:5.1.6-1 + image: ghcr.io/gluufederation/flex/admin-ui:0.0.0-nightly - name: link - image: ghcr.io/janssenproject/jans/link:1.1.6-1 + image: ghcr.io/janssenproject/jans/link:0.0.0-nightly - name: saml - image: ghcr.io/janssenproject/jans/saml:1.1.6-1 + image: ghcr.io/janssenproject/jans/saml:0.0.0-nightly - name: kc-scheduler - image: ghcr.io/janssenproject/jans/kc-scheduler:1.1.6-1 + image: ghcr.io/janssenproject/jans/kc-scheduler:0.0.0-nightly artifacthub.io/license: Apache-2.0 catalog.cattle.io/certified: partner catalog.cattle.io/release-name: gluu catalog.cattle.io/display-name: Gluu Cloud Identity and Access Management apiVersion: v2 -appVersion: "5.1.6" +appVersion: "0.0.0-nightly" icon: https://gluu.org/docs/gluu-server/favicon.ico home: https://www.gluu.org sources: @@ -41,60 +41,60 @@ maintainers: email: team@gluu.org description: Gluu Access and Identity Management name: gluu -version: 5.1.6 +version: 0.0.0-nightly dependencies: - name: config condition: global.config.enabled - version: 1.1.6 + version: 0.0.0-nightly - name: config-api condition: global.config-api.enabled - version: 1.1.6 + version: 0.0.0-nightly - name: auth-server condition: global.auth-server.enabled - version: 1.1.6 + version: 0.0.0-nightly - name: admin-ui condition: global.admin-ui.enabled - version: 5.1.6 + version: 0.0.0-nightly - name: fido2 condition: global.fido2.enabled - version: 1.1.6 + version: 0.0.0-nightly - name: scim condition: global.scim.enabled - version: 1.1.6 + version: 0.0.0-nightly - name: nginx-ingress condition: global.nginx-ingress.enabled - version: 5.1.6 + version: 0.0.0-nightly - name: casa - version: 1.1.6 + version: 0.0.0-nightly condition: global.casa.enabled - name: auth-server-key-rotation condition: global.auth-server-key-rotation.enabled - version: 1.1.6 + version: 0.0.0-nightly - name: persistence condition: global.persistence.enabled - version: 1.1.6 + version: 0.0.0-nightly - name: cn-istio-ingress condition: global.istio.ingress - version: 5.1.6 + version: 0.0.0-nightly - name: link condition: global.link.enabled - version: 1.1.6 + version: 0.0.0-nightly - name: saml condition: global.saml.enabled - version: 1.1.6 + version: 0.0.0-nightly - name: kc-scheduler condition: global.kc-scheduler.enabled - version: 1.1.6 + version: 0.0.0-nightly diff --git a/charts/gluu/README.md b/charts/gluu/README.md index eb1e04f88..0a4e1a6cc 100644 --- a/charts/gluu/README.md +++ b/charts/gluu/README.md @@ -1,6 +1,6 @@ # gluu -![Version: 5.1.6](https://img.shields.io/badge/Version-5.1.6-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) +![Version: 0.0.0-nightly](https://img.shields.io/badge/Version-0.0.0--nightly-informational?style=flat-square) ![AppVersion: 0.0.0-nightly](https://img.shields.io/badge/AppVersion-0.0.0--nightly-informational?style=flat-square) Gluu Access and Identity Management @@ -22,26 +22,26 @@ Kubernetes: `>=v1.21.0-0` | Repository | Name | Version | |------------|------|---------| -| | admin-ui | 5.1.6 | -| | auth-server | 1.1.6 | -| | auth-server-key-rotation | 1.1.6 | -| | casa | 1.1.6 | -| | cn-istio-ingress | 5.1.6 | -| | config | 1.1.6 | -| | config-api | 1.1.6 | -| | fido2 | 1.1.6 | -| | kc-scheduler | 1.1.6 | -| | link | 1.1.6 | -| | nginx-ingress | 5.1.6 | -| | persistence | 1.1.6 | -| | saml | 1.1.6 | -| | scim | 1.1.6 | +| | admin-ui | 0.0.0-nightly | +| | auth-server | 0.0.0-nightly | +| | auth-server-key-rotation | 0.0.0-nightly | +| | casa | 0.0.0-nightly | +| | cn-istio-ingress | 0.0.0-nightly | +| | config | 0.0.0-nightly | +| | config-api | 0.0.0-nightly | +| | fido2 | 0.0.0-nightly | +| | kc-scheduler | 0.0.0-nightly | +| | link | 0.0.0-nightly | +| | nginx-ingress | 0.0.0-nightly | +| | persistence | 0.0.0-nightly | +| | saml | 0.0.0-nightly | +| | scim | 0.0.0-nightly | ## Values | Key | Type | Default | Description | |-----|------|---------|-------------| -| admin-ui | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/gluufederation/flex/admin-ui","tag":"5.1.6-1"},"lifecycle":{},"livenessProbe":{"failureThreshold":20,"initialDelaySeconds":60,"periodSeconds":25,"tcpSocket":{"port":8080},"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"failureThreshold":20,"initialDelaySeconds":60,"periodSeconds":25,"tcpSocket":{"port":8080},"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"2000m","memory":"2000Mi"},"requests":{"cpu":"2000m","memory":"2000Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Admin GUI for configuration of the auth-server | +| admin-ui | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/gluufederation/flex/admin-ui","tag":"0.0.0-nightly"},"lifecycle":{},"livenessProbe":{"failureThreshold":20,"initialDelaySeconds":60,"periodSeconds":25,"tcpSocket":{"port":8080},"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"failureThreshold":20,"initialDelaySeconds":60,"periodSeconds":25,"tcpSocket":{"port":8080},"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"2000m","memory":"2000Mi"},"requests":{"cpu":"2000m","memory":"2000Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Admin GUI for configuration of the auth-server | | admin-ui.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | admin-ui.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | admin-ui.customCommand | list | `[]` | Add custom pod's command. If passed, it will override the default conditional command. | @@ -54,7 +54,7 @@ Kubernetes: `>=v1.21.0-0` | admin-ui.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | admin-ui.image.pullSecrets | list | `[]` | Image Pull Secrets | | admin-ui.image.repository | string | `"ghcr.io/gluufederation/flex/admin-ui"` | Image to use for deploying. | -| admin-ui.image.tag | string | `"5.1.6-1"` | Image tag to use for deploying. | +| admin-ui.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | admin-ui.livenessProbe | object | `{"failureThreshold":20,"initialDelaySeconds":60,"periodSeconds":25,"tcpSocket":{"port":8080},"timeoutSeconds":5}` | Configure the liveness healthcheck for the admin ui if needed. | | admin-ui.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | | admin-ui.readinessProbe | object | `{"failureThreshold":20,"initialDelaySeconds":60,"periodSeconds":25,"tcpSocket":{"port":8080},"timeoutSeconds":5}` | Configure the readiness healthcheck for the admin ui if needed. | @@ -70,8 +70,8 @@ Kubernetes: `>=v1.21.0-0` | admin-ui.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | admin-ui.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | admin-ui.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| auth-server | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/auth-server","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"2500m","memory":"2500Mi"},"requests":{"cpu":"2500m","memory":"2500Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | OAuth Authorization Server, the OpenID Connect Provider, the UMA Authorization Server--this is the main Internet facing component of Gluu. It's the service that returns tokens, JWT's and identity assertions. This service must be Internet facing. | -| auth-server-key-rotation | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/certmanager","tag":"1.1.6-1"},"keysLife":48,"keysPushDelay":0,"keysPushStrategy":"NEWER","keysStrategy":"NEWER","lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for regenerating auth-keys per x hours | +| auth-server | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/auth-server","tag":"0.0.0-nightly"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"2500m","memory":"2500Mi"},"requests":{"cpu":"2500m","memory":"2500Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | OAuth Authorization Server, the OpenID Connect Provider, the UMA Authorization Server--this is the main Internet facing component of Gluu. It's the service that returns tokens, JWT's and identity assertions. This service must be Internet facing. | +| auth-server-key-rotation | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/certmanager","tag":"0.0.0-nightly"},"keysLife":48,"keysPushDelay":0,"keysPushStrategy":"NEWER","keysStrategy":"NEWER","lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for regenerating auth-keys per x hours | | auth-server-key-rotation.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | auth-server-key-rotation.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | auth-server-key-rotation.customCommand | list | `[]` | Add custom job's command. If passed, it will override the default conditional command. | @@ -81,7 +81,7 @@ Kubernetes: `>=v1.21.0-0` | auth-server-key-rotation.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | auth-server-key-rotation.image.pullSecrets | list | `[]` | Image Pull Secrets | | auth-server-key-rotation.image.repository | string | `"ghcr.io/janssenproject/jans/certmanager"` | Image to use for deploying. | -| auth-server-key-rotation.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| auth-server-key-rotation.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | auth-server-key-rotation.keysLife | int | `48` | Auth server key rotation keys life in hours | | auth-server-key-rotation.keysPushDelay | int | `0` | Delay (in seconds) before pushing private keys to Auth server | | auth-server-key-rotation.keysPushStrategy | string | `"NEWER"` | Set key selection strategy after pushing private keys to Auth server (only takes effect when keysPushDelay value is greater than 0) | @@ -108,7 +108,7 @@ Kubernetes: `>=v1.21.0-0` | auth-server.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | auth-server.image.pullSecrets | list | `[]` | Image Pull Secrets | | auth-server.image.repository | string | `"ghcr.io/janssenproject/jans/auth-server"` | Image to use for deploying. | -| auth-server.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| auth-server.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | auth-server.livenessProbe | object | `{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | auth-server.livenessProbe.exec | object | `{"command":["python3","/app/scripts/healthcheck.py"]}` | Executes the python3 healthcheck. https://github.com/JanssenProject/docker-jans-auth-server/blob/master/scripts/healthcheck.py | | auth-server.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -125,7 +125,7 @@ Kubernetes: `>=v1.21.0-0` | auth-server.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | auth-server.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | auth-server.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| casa | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/casa","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"500Mi"},"requests":{"cpu":"500m","memory":"500Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Janssen Casa ("Casa") is a self-service web portal for end-users to manage authentication and authorization preferences for their account in a Janssen Auth Server. | +| casa | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/casa","tag":"0.0.0-nightly"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"500Mi"},"requests":{"cpu":"500m","memory":"500Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Janssen Casa ("Casa") is a self-service web portal for end-users to manage authentication and authorization preferences for their account in a Janssen Auth Server. | | casa.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | casa.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | casa.customCommand | list | `[]` | Add custom pod's command. If passed, it will override the default conditional command. | @@ -138,7 +138,7 @@ Kubernetes: `>=v1.21.0-0` | casa.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | casa.image.pullSecrets | list | `[]` | Image Pull Secrets | | casa.image.repository | string | `"ghcr.io/janssenproject/jans/casa"` | Image to use for deploying. | -| casa.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| casa.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | casa.livenessProbe | object | `{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5}` | Configure the liveness healthcheck for casa if needed. | | casa.livenessProbe.httpGet.path | string | `"/jans-casa/health-check"` | http liveness probe endpoint | | casa.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -156,8 +156,8 @@ Kubernetes: `>=v1.21.0-0` | casa.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | casa.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | casa.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| config | object | `{"additionalAnnotations":{},"additionalLabels":{},"adminPassword":"Test1234#","city":"Austin","configmap":{"cnAwsAccessKeyId":"","cnAwsDefaultRegion":"us-west-1","cnAwsProfile":"gluu","cnAwsSecretAccessKey":"","cnAwsSecretsEndpointUrl":"","cnAwsSecretsNamePrefix":"gluu","cnAwsSecretsReplicaRegions":[],"cnCacheType":"NATIVE_PERSISTENCE","cnConfigKubernetesConfigMap":"cn","cnGoogleProjectId":"google-project-to-save-config-and-secrets-to","cnGoogleSecretManagerServiceAccount":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnGoogleSecretNamePrefix":"gluu","cnGoogleSecretVersionId":"latest","cnJettyRequestHeaderSize":8192,"cnMaxRamPercent":"75.0","cnMessageType":"DISABLED","cnOpaUrl":"http://opa.opa.svc.cluster.cluster.local:8181/v1","cnPersistenceHybridMapping":"{}","cnRedisSentinelGroup":"","cnRedisSslTruststore":"","cnRedisType":"STANDALONE","cnRedisUrl":"redis.redis.svc.cluster.local:6379","cnRedisUseSsl":false,"cnScimProtectionMode":"OAUTH","cnSecretKubernetesSecret":"cn","cnSqlDbDialect":"mysql","cnSqlDbHost":"my-release-mysql.default.svc.cluster.local","cnSqlDbName":"gluu","cnSqlDbPort":3306,"cnSqlDbSchema":"","cnSqlDbTimezone":"UTC","cnSqlDbUser":"gluu","cnSqldbUserPassword":"Test1234#","cnVaultAddr":"http://localhost:8200","cnVaultAppRolePath":"approle","cnVaultKvPath":"secret","cnVaultNamespace":"","cnVaultPrefix":"jans","cnVaultRoleId":"","cnVaultRoleIdFile":"/etc/certs/vault_role_id","cnVaultSecretId":"","cnVaultSecretIdFile":"/etc/certs/vault_secret_id","cnVaultVerify":false,"kcAdminPassword":"Test1234#","kcAdminUsername":"admin","kcDbPassword":"Test1234#","kcDbSchema":"keycloak","kcDbUrlDatabase":"keycloak","kcDbUrlHost":"mysql.kc.svc.cluster.local","kcDbUrlPort":3306,"kcDbUrlProperties":"?useUnicode=true&characterEncoding=UTF-8&character_set_server=utf8mb4","kcDbUsername":"keycloak","kcDbVendor":"mysql","kcLogLevel":"INFO","lbAddr":"","quarkusTransactionEnableRecovery":true},"countryCode":"US","customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","email":"team@gluu.org","image":{"pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/configurator","tag":"1.1.6-1"},"lifecycle":{},"migration":{"enabled":false,"migrationDataFormat":"ldif","migrationDir":"/ce-migration"},"orgName":"Gluu","redisPassword":"P@assw0rd","resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"salt":"","state":"TX","usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Configuration parameters for setup and initial configuration secret and config layers used by Gluu services. | -| config-api | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/config-api","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-config-api/api/v1/health/live","port":8074},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"jans-config-api/api/v1/health/ready","port":8074},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1200Mi"},"requests":{"cpu":"1000m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Config Api endpoints can be used to configure the auth-server, which is an open-source OpenID Connect Provider (OP) and UMA Authorization Server (AS). | +| config | object | `{"additionalAnnotations":{},"additionalLabels":{},"adminPassword":"Test1234#","city":"Austin","configmap":{"cnAwsAccessKeyId":"","cnAwsDefaultRegion":"us-west-1","cnAwsProfile":"gluu","cnAwsSecretAccessKey":"","cnAwsSecretsEndpointUrl":"","cnAwsSecretsNamePrefix":"gluu","cnAwsSecretsReplicaRegions":[],"cnCacheType":"NATIVE_PERSISTENCE","cnConfigKubernetesConfigMap":"cn","cnGoogleProjectId":"google-project-to-save-config-and-secrets-to","cnGoogleSecretManagerServiceAccount":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnGoogleSecretNamePrefix":"gluu","cnGoogleSecretVersionId":"latest","cnJettyRequestHeaderSize":8192,"cnMaxRamPercent":"75.0","cnMessageType":"DISABLED","cnOpaUrl":"http://opa.opa.svc.cluster.cluster.local:8181/v1","cnPersistenceHybridMapping":"{}","cnRedisSentinelGroup":"","cnRedisSslTruststore":"","cnRedisType":"STANDALONE","cnRedisUrl":"redis.redis.svc.cluster.local:6379","cnRedisUseSsl":false,"cnScimProtectionMode":"OAUTH","cnSecretKubernetesSecret":"cn","cnSqlDbDialect":"mysql","cnSqlDbHost":"my-release-mysql.default.svc.cluster.local","cnSqlDbName":"gluu","cnSqlDbPort":3306,"cnSqlDbSchema":"","cnSqlDbTimezone":"UTC","cnSqlDbUser":"gluu","cnSqldbUserPassword":"Test1234#","cnVaultAddr":"http://localhost:8200","cnVaultAppRolePath":"approle","cnVaultKvPath":"secret","cnVaultNamespace":"","cnVaultPrefix":"jans","cnVaultRoleId":"","cnVaultRoleIdFile":"/etc/certs/vault_role_id","cnVaultSecretId":"","cnVaultSecretIdFile":"/etc/certs/vault_secret_id","cnVaultVerify":false,"kcAdminPassword":"Test1234#","kcAdminUsername":"admin","kcDbPassword":"Test1234#","kcDbSchema":"keycloak","kcDbUrlDatabase":"keycloak","kcDbUrlHost":"mysql.kc.svc.cluster.local","kcDbUrlPort":3306,"kcDbUrlProperties":"?useUnicode=true&characterEncoding=UTF-8&character_set_server=utf8mb4","kcDbUsername":"keycloak","kcDbVendor":"mysql","kcLogLevel":"INFO","lbAddr":"","quarkusTransactionEnableRecovery":true},"countryCode":"US","customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","email":"team@gluu.org","image":{"pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/configurator","tag":"0.0.0-nightly"},"lifecycle":{},"migration":{"enabled":false,"migrationDataFormat":"ldif","migrationDir":"/ce-migration"},"orgName":"Gluu","redisPassword":"P@assw0rd","resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"salt":"","state":"TX","usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Configuration parameters for setup and initial configuration secret and config layers used by Gluu services. | +| config-api | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/config-api","tag":"0.0.0-nightly"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-config-api/api/v1/health/live","port":8074},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"jans-config-api/api/v1/health/ready","port":8074},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1200Mi"},"requests":{"cpu":"1000m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Config Api endpoints can be used to configure the auth-server, which is an open-source OpenID Connect Provider (OP) and UMA Authorization Server (AS). | | config-api.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | config-api.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | config-api.customCommand | list | `[]` | Add custom pod's command. If passed, it will override the default conditional command. | @@ -170,7 +170,7 @@ Kubernetes: `>=v1.21.0-0` | config-api.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | config-api.image.pullSecrets | list | `[]` | Image Pull Secrets | | config-api.image.repository | string | `"ghcr.io/janssenproject/jans/config-api"` | Image to use for deploying. | -| config-api.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| config-api.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | config-api.livenessProbe | object | `{"httpGet":{"path":"/jans-config-api/api/v1/health/live","port":8074},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | config-api.livenessProbe.httpGet | object | `{"path":"/jans-config-api/api/v1/health/live","port":8074}` | http liveness probe endpoint | | config-api.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -248,7 +248,7 @@ Kubernetes: `>=v1.21.0-0` | config.email | string | `"team@gluu.org"` | Email address of the administrator usually. Used for certificate creation. | | config.image.pullSecrets | list | `[]` | Image Pull Secrets | | config.image.repository | string | `"ghcr.io/janssenproject/jans/configurator"` | Image to use for deploying. | -| config.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| config.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | config.migration | object | `{"enabled":false,"migrationDataFormat":"ldif","migrationDir":"/ce-migration"}` | CE to CN Migration section | | config.migration.enabled | bool | `false` | Boolean flag to enable migration from CE | | config.migration.migrationDataFormat | string | `"ldif"` | migration data-format depending on persistence backend. Supported data formats are ldif, postgresql+json, and mysql+json. | @@ -267,7 +267,7 @@ Kubernetes: `>=v1.21.0-0` | config.usrEnvs.secret | object | `{}` | Add custom secret envs to the service. variable1: value1 | | config.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | config.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| fido2 | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/fido2","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"500Mi"},"requests":{"cpu":"500m","memory":"500Mi"}},"service":{"name":"http-fido2","port":8080},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | FIDO 2.0 (FIDO2) is an open authentication standard that enables leveraging common devices to authenticate to online services in both mobile and desktop environments. | +| fido2 | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/fido2","tag":"0.0.0-nightly"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"500Mi"},"requests":{"cpu":"500m","memory":"500Mi"}},"service":{"name":"http-fido2","port":8080},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | FIDO 2.0 (FIDO2) is an open authentication standard that enables leveraging common devices to authenticate to online services in both mobile and desktop environments. | | fido2.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | fido2.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | fido2.customCommand | list | `[]` | Add custom pod's command. If passed, it will override the default conditional command. | @@ -280,7 +280,7 @@ Kubernetes: `>=v1.21.0-0` | fido2.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | fido2.image.pullSecrets | list | `[]` | Image Pull Secrets | | fido2.image.repository | string | `"ghcr.io/janssenproject/jans/fido2"` | Image to use for deploying. | -| fido2.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| fido2.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | fido2.livenessProbe | object | `{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5}` | Configure the liveness healthcheck for the fido2 if needed. | | fido2.livenessProbe.httpGet | object | `{"path":"/jans-fido2/sys/health-check","port":"http-fido2"}` | http liveness probe endpoint | | fido2.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -510,7 +510,7 @@ Kubernetes: `>=v1.21.0-0` | global.usrEnvs.normal | object | `{}` | Add custom normal envs to the service. variable1: value1 | | global.usrEnvs.secret | object | `{}` | Add custom secret envs to the service. variable1: value1 | | installer-settings | object | `{"acceptLicense":"","aws":{"arn":{"arnAcmCert":"","enabled":""},"lbType":"","vpcCidr":"0.0.0.0/0"},"confirmSettings":false,"currentVersion":"","google":{"useSecretManager":""},"images":{"edit":""},"namespace":"","nginxIngress":{"namespace":"","releaseName":""},"nodes":{"ips":"","names":"","zones":""},"openbanking":{"cnObTransportTrustStoreP12password":"","hasCnObTransportTrustStore":false},"postgres":{"install":"","namespace":""},"redis":{"install":"","namespace":""},"releaseName":"","sql":{"install":"","namespace":""},"volumeProvisionStrategy":""}` | Only used by the installer. These settings do not affect nor are used by the chart | -| kc-scheduler | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/kc-scheduler","tag":"1.1.6-1"},"interval":10,"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for synchronizing Keycloak SAML clients | +| kc-scheduler | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/kc-scheduler","tag":"0.0.0-nightly"},"interval":10,"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for synchronizing Keycloak SAML clients | | kc-scheduler.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | kc-scheduler.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | kc-scheduler.customCommand | list | `[]` | Add custom job's command. If passed, it will override the default conditional command. | @@ -520,7 +520,7 @@ Kubernetes: `>=v1.21.0-0` | kc-scheduler.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | kc-scheduler.image.pullSecrets | list | `[]` | Image Pull Secrets | | kc-scheduler.image.repository | string | `"ghcr.io/janssenproject/jans/kc-scheduler"` | Image to use for deploying. | -| kc-scheduler.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| kc-scheduler.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | kc-scheduler.interval | int | `10` | Interval of running the scheduler (in minutes) | | kc-scheduler.resources | object | `{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}}` | Resource specs. | | kc-scheduler.resources.limits.cpu | string | `"300m"` | CPU limit. | @@ -532,7 +532,7 @@ Kubernetes: `>=v1.21.0-0` | kc-scheduler.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | kc-scheduler.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | kc-scheduler.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| link | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/link","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"1200Mi"},"requests":{"cpu":"500m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Link. | +| link | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/link","tag":"0.0.0-nightly"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"1200Mi"},"requests":{"cpu":"500m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Link. | | link.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | link.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | link.customCommand | list | `[]` | Add custom pod's command. If passed, it will override the default conditional command. | @@ -545,7 +545,7 @@ Kubernetes: `>=v1.21.0-0` | link.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | link.image.pullSecrets | list | `[]` | Image Pull Secrets | | link.image.repository | string | `"ghcr.io/janssenproject/jans/link"` | Image to use for deploying. | -| link.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| link.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | link.livenessProbe | object | `{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | link.livenessProbe.exec | object | `{"command":["python3","/app/scripts/healthcheck.py"]}` | http liveness probe endpoint | | link.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -566,7 +566,7 @@ Kubernetes: `>=v1.21.0-0` | nginx-ingress.ingress.additionalAnnotations | object | `{}` | Additional annotations that will be added across all ingress definitions in the format of {cert-manager.io/issuer: "letsencrypt-prod"} Enable client certificate authentication nginx.ingress.kubernetes.io/auth-tls-verify-client: "optional" Create the secret containing the trusted ca certificates nginx.ingress.kubernetes.io/auth-tls-secret: "gluu/tls-certificate" Specify the verification depth in the client certificates chain nginx.ingress.kubernetes.io/auth-tls-verify-depth: "1" Specify if certificates are passed to upstream server nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: "true" | | nginx-ingress.ingress.additionalLabels | object | `{}` | Additional labels that will be added across all ingress definitions in the format of {mylabel: "myapp"} | | nginx-ingress.ingress.tls | list | `[{"hosts":["demoexample.gluu.org"],"secretName":"tls-certificate"}]` | Secrets holding HTTPS CA cert and key. | -| persistence | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/persistence-loader","tag":"1.1.6-1"},"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Job to generate data and initial config for Gluu Server persistence layer. | +| persistence | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/persistence-loader","tag":"0.0.0-nightly"},"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Job to generate data and initial config for Gluu Server persistence layer. | | persistence.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | persistence.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | persistence.customCommand | list | `[]` | Add custom job's command. If passed, it will override the default conditional command. | @@ -576,7 +576,7 @@ Kubernetes: `>=v1.21.0-0` | persistence.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | persistence.image.pullSecrets | list | `[]` | Image Pull Secrets | | persistence.image.repository | string | `"ghcr.io/janssenproject/jans/persistence-loader"` | Image to use for deploying. | -| persistence.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| persistence.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | persistence.resources | object | `{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}}` | Resource specs. | | persistence.resources.limits.cpu | string | `"300m"` | CPU limit | | persistence.resources.limits.memory | string | `"300Mi"` | Memory limit. | @@ -587,7 +587,7 @@ Kubernetes: `>=v1.21.0-0` | persistence.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | persistence.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | persistence.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| saml | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/saml","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"1200Mi"},"requests":{"cpu":"500m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | SAML. | +| saml | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/saml","tag":"0.0.0-nightly"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"1200Mi"},"requests":{"cpu":"500m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | SAML. | | saml.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | saml.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | saml.customCommand | list | `[]` | Add custom pod's command. If passed, it will override the default conditional command. | @@ -600,7 +600,7 @@ Kubernetes: `>=v1.21.0-0` | saml.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | saml.image.pullSecrets | list | `[]` | Image Pull Secrets | | saml.image.repository | string | `"ghcr.io/janssenproject/jans/saml"` | Image to use for deploying. | -| saml.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| saml.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | saml.livenessProbe | object | `{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | saml.livenessProbe.exec | object | `{"command":["python3","/app/scripts/healthcheck.py"]}` | http liveness probe endpoint | | saml.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -617,7 +617,7 @@ Kubernetes: `>=v1.21.0-0` | saml.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | saml.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | saml.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| scim | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/scim","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1200Mi"},"requests":{"cpu":"1000m","memory":"1200Mi"}},"service":{"name":"http-scim","port":8080},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | System for Cross-domain Identity Management (SCIM) version 2.0 | +| scim | object | `{"additionalAnnotations":{},"additionalLabels":{},"customCommand":[],"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/scim","tag":"0.0.0-nightly"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1200Mi"},"requests":{"cpu":"1000m","memory":"1200Mi"}},"service":{"name":"http-scim","port":8080},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | System for Cross-domain Identity Management (SCIM) version 2.0 | | scim.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | scim.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | scim.customCommand | list | `[]` | Add custom pod's command. If passed, it will override the default conditional command. | @@ -630,7 +630,7 @@ Kubernetes: `>=v1.21.0-0` | scim.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | scim.image.pullSecrets | list | `[]` | Image Pull Secrets | | scim.image.repository | string | `"ghcr.io/janssenproject/jans/scim"` | Image to use for deploying. | -| scim.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| scim.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | scim.livenessProbe | object | `{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for SCIM if needed. | | scim.livenessProbe.httpGet.path | string | `"/jans-scim/sys/health-check"` | http liveness probe endpoint | | scim.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | diff --git a/charts/gluu/charts/admin-ui/Chart.yaml b/charts/gluu/charts/admin-ui/Chart.yaml index 95941e472..bbfe5f893 100644 --- a/charts/gluu/charts/admin-ui/Chart.yaml +++ b/charts/gluu/charts/admin-ui/Chart.yaml @@ -1,6 +1,6 @@ apiVersion: v2 name: admin-ui -version: 5.1.6 +version: 0.0.0-nightly kubeVersion: ">=v1.21.0-0" description: Admin GUI. Requires license. type: application @@ -17,4 +17,4 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6" +appVersion: "0.0.0-nightly" diff --git a/charts/gluu/charts/admin-ui/README.md b/charts/gluu/charts/admin-ui/README.md index 1bafadc8b..eeea75e5f 100644 --- a/charts/gluu/charts/admin-ui/README.md +++ b/charts/gluu/charts/admin-ui/README.md @@ -1,6 +1,6 @@ # admin-ui -![Version: 5.1.6](https://img.shields.io/badge/Version-5.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) +![Version: 0.0.0-nightly](https://img.shields.io/badge/Version-0.0.0--nightly-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.0.0-nightly](https://img.shields.io/badge/AppVersion-0.0.0--nightly-informational?style=flat-square) Admin GUI. Requires license. @@ -37,7 +37,7 @@ Kubernetes: `>=v1.21.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"gluufederation/admin-ui"` | Image to use for deploying. | -| image.tag | string | `"5.1.6-1"` | Image tag to use for deploying. | +| image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | lifecycle | object | `{}` | | | livenessProbe | object | `{"failureThreshold":20,"initialDelaySeconds":60,"periodSeconds":25,"tcpSocket":{"port":8080},"timeoutSeconds":5}` | Configure the liveness healthcheck for the admin ui if needed. | | readinessProbe | object | `{"failureThreshold":20,"initialDelaySeconds":60,"periodSeconds":25,"tcpSocket":{"port":8080},"timeoutSeconds":5}` | Configure the readiness healthcheck for the admin ui if needed. | diff --git a/charts/gluu/charts/admin-ui/values.yaml b/charts/gluu/charts/admin-ui/values.yaml index 1039c3804..d26b7d89e 100644 --- a/charts/gluu/charts/admin-ui/values.yaml +++ b/charts/gluu/charts/admin-ui/values.yaml @@ -27,7 +27,7 @@ image: # -- Image to use for deploying. repository: gluufederation/admin-ui # -- Image tag to use for deploying. - tag: 5.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. diff --git a/charts/gluu/charts/auth-server-key-rotation/Chart.yaml b/charts/gluu/charts/auth-server-key-rotation/Chart.yaml index 9deb17c71..c70fa162e 100644 --- a/charts/gluu/charts/auth-server-key-rotation/Chart.yaml +++ b/charts/gluu/charts/auth-server-key-rotation/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: auth-server-key-rotation -version: 1.1.6 +version: 0.0.0-nightly kubeVersion: ">=v1.21.0-0" description: Responsible for regenerating auth-keys per x hours type: application @@ -16,4 +16,4 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6" \ No newline at end of file +appVersion: "0.0.0-nightly" \ No newline at end of file diff --git a/charts/gluu/charts/auth-server-key-rotation/README.md b/charts/gluu/charts/auth-server-key-rotation/README.md index f2fcc039e..6198609bd 100644 --- a/charts/gluu/charts/auth-server-key-rotation/README.md +++ b/charts/gluu/charts/auth-server-key-rotation/README.md @@ -1,6 +1,6 @@ # auth-server-key-rotation -![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) +![Version: 0.0.0-nightly](https://img.shields.io/badge/Version-0.0.0--nightly-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.0.0-nightly](https://img.shields.io/badge/AppVersion-0.0.0--nightly-informational?style=flat-square) Responsible for regenerating auth-keys per x hours @@ -35,7 +35,7 @@ Kubernetes: `>=v1.21.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"janssenproject/certmanager"` | Image to use for deploying. | -| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | keysLife | int | `48` | Auth server key rotation keys life in hours | | keysPushDelay | int | `0` | Delay (in seconds) before pushing private keys to Auth server | | keysPushStrategy | string | `"NEWER"` | Set key selection strategy after pushing private keys to Auth server (only takes effect when keysPushDelay value is greater than 0) | diff --git a/charts/gluu/charts/auth-server-key-rotation/values.yaml b/charts/gluu/charts/auth-server-key-rotation/values.yaml index adb5170d9..f2c4cf65f 100644 --- a/charts/gluu/charts/auth-server-key-rotation/values.yaml +++ b/charts/gluu/charts/auth-server-key-rotation/values.yaml @@ -18,7 +18,7 @@ image: # -- Image to use for deploying. repository: janssenproject/certmanager # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Auth server key rotation keys life in hours diff --git a/charts/gluu/charts/auth-server/Chart.yaml b/charts/gluu/charts/auth-server/Chart.yaml index 6996048c8..77b1e5094 100644 --- a/charts/gluu/charts/auth-server/Chart.yaml +++ b/charts/gluu/charts/auth-server/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: auth-server -version: 1.1.6 +version: 0.0.0-nightly kubeVersion: ">=v1.21.0-0" description: OAuth Authorization Server, the OpenID Connect Provider, the UMA Authorization Server--this is the main Internet facing component of Gluu. It's the service that returns tokens, JWT's and identity assertions. This service must be Internet facing. type: application @@ -18,4 +18,4 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6" +appVersion: "0.0.0-nightly" diff --git a/charts/gluu/charts/auth-server/README.md b/charts/gluu/charts/auth-server/README.md index df83b2641..b59a0c250 100644 --- a/charts/gluu/charts/auth-server/README.md +++ b/charts/gluu/charts/auth-server/README.md @@ -1,6 +1,6 @@ # auth-server -![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) +![Version: 0.0.0-nightly](https://img.shields.io/badge/Version-0.0.0--nightly-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.0.0-nightly](https://img.shields.io/badge/AppVersion-0.0.0--nightly-informational?style=flat-square) OAuth Authorization Server, the OpenID Connect Provider, the UMA Authorization Server--this is the main Internet facing component of Gluu. It's the service that returns tokens, JWT's and identity assertions. This service must be Internet facing. @@ -38,7 +38,7 @@ Kubernetes: `>=v1.21.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"janssenproject/auth-server"` | Image to use for deploying. | -| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | lifecycle | object | `{}` | | | livenessProbe | object | `{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | livenessProbe.exec | object | `{"command":["python3","/app/scripts/healthcheck.py"]}` | Executes the python3 healthcheck. | diff --git a/charts/gluu/charts/auth-server/values.yaml b/charts/gluu/charts/auth-server/values.yaml index 8add8c2ef..6e71508e6 100644 --- a/charts/gluu/charts/auth-server/values.yaml +++ b/charts/gluu/charts/auth-server/values.yaml @@ -28,7 +28,7 @@ image: # -- Image to use for deploying. repository: janssenproject/auth-server # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. diff --git a/charts/gluu/charts/casa/Chart.yaml b/charts/gluu/charts/casa/Chart.yaml index 963ff16e6..88779ffda 100644 --- a/charts/gluu/charts/casa/Chart.yaml +++ b/charts/gluu/charts/casa/Chart.yaml @@ -1,6 +1,6 @@ apiVersion: v2 name: casa -version: 1.1.6 +version: 0.0.0-nightly kubeVersion: ">=v1.21.0-0" description: Jans Casa ("Casa") is a self-service web portal for end-users to manage authentication and authorization preferences for their account in a Jans Server. type: application @@ -17,4 +17,4 @@ maintainers: email: support@jans.io url: https://github.com/moabu icon: https://github.com/JanssenProject/jans/raw/main/docs/assets/logo/janssen_project_favicon_transparent_50px_50px.png -appVersion: "5.1.6" +appVersion: "0.0.0-nightly" diff --git a/charts/gluu/charts/casa/README.md b/charts/gluu/charts/casa/README.md index 3ba6c0ab2..9e37fc500 100644 --- a/charts/gluu/charts/casa/README.md +++ b/charts/gluu/charts/casa/README.md @@ -1,6 +1,6 @@ # casa -![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) +![Version: 0.0.0-nightly](https://img.shields.io/badge/Version-0.0.0--nightly-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.0.0-nightly](https://img.shields.io/badge/AppVersion-0.0.0--nightly-informational?style=flat-square) Jans Casa ("Casa") is a self-service web portal for end-users to manage authentication and authorization preferences for their account in a Jans Server. @@ -38,7 +38,7 @@ Kubernetes: `>=v1.21.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"janssenproject/casa"` | Image to use for deploying. | -| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | lifecycle | object | `{}` | | | livenessProbe | object | `{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5}` | Configure the liveness healthcheck for casa if needed. | | livenessProbe.httpGet.path | string | `"/jans-casa/health-check"` | http liveness probe endpoint | diff --git a/charts/gluu/charts/casa/values.yaml b/charts/gluu/charts/casa/values.yaml index f0701c9f7..382f7c571 100644 --- a/charts/gluu/charts/casa/values.yaml +++ b/charts/gluu/charts/casa/values.yaml @@ -27,7 +27,7 @@ image: # -- Image to use for deploying. repository: janssenproject/casa # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. diff --git a/charts/gluu/charts/cn-istio-ingress/Chart.yaml b/charts/gluu/charts/cn-istio-ingress/Chart.yaml index c134b30a8..4a883da7f 100644 --- a/charts/gluu/charts/cn-istio-ingress/Chart.yaml +++ b/charts/gluu/charts/cn-istio-ingress/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: cn-istio-ingress -version: 5.1.6 +version: 0.0.0-nightly kubeVersion: ">=v1.21.0-0" description: Istio Gateway type: application @@ -17,4 +17,4 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6" +appVersion: "0.0.0-nightly" diff --git a/charts/gluu/charts/cn-istio-ingress/README.md b/charts/gluu/charts/cn-istio-ingress/README.md index 03e914aa9..068a48b3b 100644 --- a/charts/gluu/charts/cn-istio-ingress/README.md +++ b/charts/gluu/charts/cn-istio-ingress/README.md @@ -1,6 +1,6 @@ # cn-istio-ingress -![Version: 5.1.6](https://img.shields.io/badge/Version-5.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) +![Version: 0.0.0-nightly](https://img.shields.io/badge/Version-0.0.0--nightly-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.0.0-nightly](https://img.shields.io/badge/AppVersion-0.0.0--nightly-informational?style=flat-square) Istio Gateway diff --git a/charts/gluu/charts/config-api/Chart.yaml b/charts/gluu/charts/config-api/Chart.yaml index a9dab95d4..b9296d367 100644 --- a/charts/gluu/charts/config-api/Chart.yaml +++ b/charts/gluu/charts/config-api/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: config-api -version: 1.1.6 +version: 0.0.0-nightly kubeVersion: ">=v1.21.0-0" description: Jans Config Api endpoints can be used to configure jans-auth-server, which is an open-source OpenID Connect Provider (OP) and UMA Authorization Server (AS) type: application @@ -18,4 +18,4 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6" +appVersion: "0.0.0-nightly" diff --git a/charts/gluu/charts/config-api/README.md b/charts/gluu/charts/config-api/README.md index 1732889e0..71bfd47b0 100644 --- a/charts/gluu/charts/config-api/README.md +++ b/charts/gluu/charts/config-api/README.md @@ -1,6 +1,6 @@ # config-api -![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) +![Version: 0.0.0-nightly](https://img.shields.io/badge/Version-0.0.0--nightly-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.0.0-nightly](https://img.shields.io/badge/AppVersion-0.0.0--nightly-informational?style=flat-square) Jans Config Api endpoints can be used to configure jans-auth-server, which is an open-source OpenID Connect Provider (OP) and UMA Authorization Server (AS) @@ -39,7 +39,7 @@ Kubernetes: `>=v1.21.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"janssenproject/config-api"` | Image to use for deploying. | -| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | lifecycle | object | `{}` | | | livenessProbe | object | `{"httpGet":{"path":"/jans-config-api/api/v1/health/live","port":8074},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | livenessProbe.httpGet | object | `{"path":"/jans-config-api/api/v1/health/live","port":8074}` | Executes the python3 healthcheck. | diff --git a/charts/gluu/charts/config-api/values.yaml b/charts/gluu/charts/config-api/values.yaml index 4fd1e64f0..e9c86d452 100644 --- a/charts/gluu/charts/config-api/values.yaml +++ b/charts/gluu/charts/config-api/values.yaml @@ -31,7 +31,7 @@ image: # -- Image to use for deploying. repository: janssenproject/config-api # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. diff --git a/charts/gluu/charts/config/Chart.yaml b/charts/gluu/charts/config/Chart.yaml index f7968c129..a1140b91c 100644 --- a/charts/gluu/charts/config/Chart.yaml +++ b/charts/gluu/charts/config/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: config -version: 1.1.6 +version: 0.0.0-nightly kubeVersion: ">=v1.21.0-0" description: Configuration parameters for setup and initial configuration secret and config layers used by Gluu services. type: application @@ -18,4 +18,4 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6" +appVersion: "0.0.0-nightly" diff --git a/charts/gluu/charts/config/README.md b/charts/gluu/charts/config/README.md index d0bc2afef..da68db31b 100644 --- a/charts/gluu/charts/config/README.md +++ b/charts/gluu/charts/config/README.md @@ -1,6 +1,6 @@ # config -![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) +![Version: 0.0.0-nightly](https://img.shields.io/badge/Version-0.0.0--nightly-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.0.0-nightly](https://img.shields.io/badge/AppVersion-0.0.0--nightly-informational?style=flat-square) Configuration parameters for setup and initial configuration secret and config layers used by Gluu services. @@ -92,7 +92,7 @@ Kubernetes: `>=v1.21.0-0` | fullNameOverride | string | `""` | | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"janssenproject/configurator"` | Image to use for deploying. | -| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | lifecycle | object | `{}` | | | migration | object | `{"enabled":false,"migrationDataFormat":"ldif","migrationDir":"/ce-migration"}` | CE to CN Migration section | | migration.enabled | bool | `false` | Boolean flag to enable migration from CE | diff --git a/charts/gluu/charts/config/values.yaml b/charts/gluu/charts/config/values.yaml index 166ec7d1c..9fde42d85 100644 --- a/charts/gluu/charts/config/values.yaml +++ b/charts/gluu/charts/config/values.yaml @@ -146,7 +146,7 @@ image: # -- Image to use for deploying. repository: janssenproject/configurator # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Organization name. Used for certificate creation. diff --git a/charts/gluu/charts/fido2/Chart.yaml b/charts/gluu/charts/fido2/Chart.yaml index cef17d16d..84f5c75fe 100644 --- a/charts/gluu/charts/fido2/Chart.yaml +++ b/charts/gluu/charts/fido2/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: fido2 -version: 1.1.6 +version: 0.0.0-nightly kubeVersion: ">=v1.21.0-0" description: FIDO 2.0 (FIDO2) is an open authentication standard that enables leveraging common devices to authenticate to online services in both mobile and desktop environments. type: application @@ -19,4 +19,4 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6" +appVersion: "0.0.0-nightly" diff --git a/charts/gluu/charts/fido2/README.md b/charts/gluu/charts/fido2/README.md index 532ed3b06..40e82dc60 100644 --- a/charts/gluu/charts/fido2/README.md +++ b/charts/gluu/charts/fido2/README.md @@ -1,6 +1,6 @@ # fido2 -![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) +![Version: 0.0.0-nightly](https://img.shields.io/badge/Version-0.0.0--nightly-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.0.0-nightly](https://img.shields.io/badge/AppVersion-0.0.0--nightly-informational?style=flat-square) FIDO 2.0 (FIDO2) is an open authentication standard that enables leveraging common devices to authenticate to online services in both mobile and desktop environments. @@ -39,7 +39,7 @@ Kubernetes: `>=v1.21.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"janssenproject/fido2"` | Image to use for deploying. | -| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | lifecycle | object | `{}` | | | livenessProbe | object | `{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5}` | Configure the liveness healthcheck for the fido2 if needed. | | livenessProbe.httpGet | object | `{"path":"/jans-fido2/sys/health-check","port":"http-fido2"}` | http liveness probe endpoint | diff --git a/charts/gluu/charts/fido2/values.yaml b/charts/gluu/charts/fido2/values.yaml index 9f255a7c0..75601f95c 100644 --- a/charts/gluu/charts/fido2/values.yaml +++ b/charts/gluu/charts/fido2/values.yaml @@ -29,7 +29,7 @@ image: # -- Image to use for deploying. repository: janssenproject/fido2 # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. diff --git a/charts/gluu/charts/kc-scheduler/Chart.yaml b/charts/gluu/charts/kc-scheduler/Chart.yaml index 9d3db5330..5865904d5 100644 --- a/charts/gluu/charts/kc-scheduler/Chart.yaml +++ b/charts/gluu/charts/kc-scheduler/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: kc-scheduler -version: 1.1.6 +version: 0.0.0-nightly kubeVersion: ">=v1.22.0-0" description: Responsible for synchronizing Keycloak SAML clients type: application @@ -16,4 +16,4 @@ maintainers: email: support@jans.io url: https://github.com/moabu icon: https://github.com/JanssenProject/jans/raw/main/docs/assets/logo/janssen_project_favicon_transparent_50px_50px.png -appVersion: "5.1.6" +appVersion: "0.0.0-nightly" diff --git a/charts/gluu/charts/kc-scheduler/README.md b/charts/gluu/charts/kc-scheduler/README.md index 3a09cb7e6..e6cd90727 100644 --- a/charts/gluu/charts/kc-scheduler/README.md +++ b/charts/gluu/charts/kc-scheduler/README.md @@ -1,6 +1,6 @@ # kc-scheduler -![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) +![Version: 0.0.0-nightly](https://img.shields.io/badge/Version-0.0.0--nightly-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.0.0-nightly](https://img.shields.io/badge/AppVersion-0.0.0--nightly-informational?style=flat-square) Responsible for synchronizing Keycloak SAML clients @@ -33,7 +33,7 @@ Kubernetes: `>=v1.22.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"ghcr.io/janssenproject/jans/kc-scheduler"` | Image to use for deploying. | -| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | interval | int | `10` | Interval of running the scheduler (in minutes) | | lifecycle | object | `{}` | | | resources | object | `{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}}` | Resource specs. | diff --git a/charts/gluu/charts/kc-scheduler/values.yaml b/charts/gluu/charts/kc-scheduler/values.yaml index 0e913564e..98ec8bf0f 100644 --- a/charts/gluu/charts/kc-scheduler/values.yaml +++ b/charts/gluu/charts/kc-scheduler/values.yaml @@ -16,7 +16,7 @@ image: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/kc-scheduler # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Resource specs. diff --git a/charts/gluu/charts/link/Chart.yaml b/charts/gluu/charts/link/Chart.yaml index 1c4e2ffd4..240add79c 100644 --- a/charts/gluu/charts/link/Chart.yaml +++ b/charts/gluu/charts/link/Chart.yaml @@ -1,6 +1,6 @@ apiVersion: v2 name: link -version: 1.1.6 +version: 0.0.0-nightly kubeVersion: ">=v1.22.0-0" description: Jans Link type: application @@ -15,4 +15,4 @@ maintainers: email: support@jans.io url: https://github.com/moabu icon: https://github.com/JanssenProject/jans/raw/main/docs/assets/logo/janssen_project_favicon_transparent_50px_50px.png -appVersion: "5.1.6" +appVersion: "0.0.0-nightly" diff --git a/charts/gluu/charts/link/README.md b/charts/gluu/charts/link/README.md index 90bbd5fdd..dadd4e363 100644 --- a/charts/gluu/charts/link/README.md +++ b/charts/gluu/charts/link/README.md @@ -1,6 +1,6 @@ # link -![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) +![Version: 0.0.0-nightly](https://img.shields.io/badge/Version-0.0.0--nightly-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.0.0-nightly](https://img.shields.io/badge/AppVersion-0.0.0--nightly-informational?style=flat-square) Jans Link @@ -39,7 +39,7 @@ Kubernetes: `>=v1.22.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"ghcr.io/janssenproject/jans/link"` | Image to use for deploying. | -| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | lifecycle | object | `{}` | | | livenessProbe | object | `{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the link if needed. | | livenessProbe.exec | object | `{"command":["python3","/app/scripts/healthcheck.py"]}` | Executes the python3 healthcheck. | diff --git a/charts/gluu/charts/link/values.yaml b/charts/gluu/charts/link/values.yaml index 25308a716..98d1542a3 100644 --- a/charts/gluu/charts/link/values.yaml +++ b/charts/gluu/charts/link/values.yaml @@ -31,7 +31,7 @@ image: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/link # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. diff --git a/charts/gluu/charts/nginx-ingress/Chart.yaml b/charts/gluu/charts/nginx-ingress/Chart.yaml index 5e756bfca..dafe41ff7 100644 --- a/charts/gluu/charts/nginx-ingress/Chart.yaml +++ b/charts/gluu/charts/nginx-ingress/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: nginx-ingress -version: 5.1.6 +version: 0.0.0-nightly kubeVersion: ">=v1.21.0-0" description: Nginx ingress definitions chart type: application @@ -18,4 +18,4 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6" +appVersion: "0.0.0-nightly" diff --git a/charts/gluu/charts/nginx-ingress/README.md b/charts/gluu/charts/nginx-ingress/README.md index 356419a8c..fa18fe8e3 100644 --- a/charts/gluu/charts/nginx-ingress/README.md +++ b/charts/gluu/charts/nginx-ingress/README.md @@ -1,6 +1,6 @@ # nginx-ingress -![Version: 5.1.6](https://img.shields.io/badge/Version-5.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) +![Version: 0.0.0-nightly](https://img.shields.io/badge/Version-0.0.0--nightly-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.0.0-nightly](https://img.shields.io/badge/AppVersion-0.0.0--nightly-informational?style=flat-square) Nginx ingress definitions chart diff --git a/charts/gluu/charts/persistence/Chart.yaml b/charts/gluu/charts/persistence/Chart.yaml index 1961c47bf..4a65624d8 100644 --- a/charts/gluu/charts/persistence/Chart.yaml +++ b/charts/gluu/charts/persistence/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: persistence -version: 1.1.6 +version: 0.0.0-nightly kubeVersion: ">=v1.21.0-0" description: Job to generate data and initial config for Gluu Server persistence layer. type: application @@ -16,5 +16,5 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6" +appVersion: "0.0.0-nightly" diff --git a/charts/gluu/charts/persistence/README.md b/charts/gluu/charts/persistence/README.md index c94a9c526..6b23bfb1f 100644 --- a/charts/gluu/charts/persistence/README.md +++ b/charts/gluu/charts/persistence/README.md @@ -1,6 +1,6 @@ # persistence -![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) +![Version: 0.0.0-nightly](https://img.shields.io/badge/Version-0.0.0--nightly-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.0.0-nightly](https://img.shields.io/badge/AppVersion-0.0.0--nightly-informational?style=flat-square) Job to generate data and initial config for Gluu Server persistence layer. @@ -35,7 +35,7 @@ Kubernetes: `>=v1.21.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"janssenproject/persistence"` | Image to use for deploying. | -| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | imagePullSecrets | list | `[]` | | | lifecycle | object | `{}` | | | nameOverride | string | `""` | | diff --git a/charts/gluu/charts/persistence/values.yaml b/charts/gluu/charts/persistence/values.yaml index 3751e28cc..f164fc61e 100644 --- a/charts/gluu/charts/persistence/values.yaml +++ b/charts/gluu/charts/persistence/values.yaml @@ -18,7 +18,7 @@ image: # -- Image to use for deploying. repository: janssenproject/persistence # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Resource specs. diff --git a/charts/gluu/charts/saml/Chart.yaml b/charts/gluu/charts/saml/Chart.yaml index 183d4a06b..4b9c55d9b 100644 --- a/charts/gluu/charts/saml/Chart.yaml +++ b/charts/gluu/charts/saml/Chart.yaml @@ -1,6 +1,6 @@ apiVersion: v2 name: saml -version: 1.1.6 +version: 0.0.0-nightly kubeVersion: ">=v1.21.0-0" description: Jans SAML type: application @@ -15,4 +15,4 @@ maintainers: email: support@jans.io url: https://github.com/moabu icon: https://github.com/JanssenProject/jans/raw/main/docs/assets/logo/janssen_project_favicon_transparent_50px_50px.png -appVersion: "5.1.6" +appVersion: "0.0.0-nightly" diff --git a/charts/gluu/charts/saml/README.md b/charts/gluu/charts/saml/README.md index b5f30c045..0659af4fe 100644 --- a/charts/gluu/charts/saml/README.md +++ b/charts/gluu/charts/saml/README.md @@ -1,6 +1,6 @@ # saml -![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) +![Version: 0.0.0-nightly](https://img.shields.io/badge/Version-0.0.0--nightly-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.0.0-nightly](https://img.shields.io/badge/AppVersion-0.0.0--nightly-informational?style=flat-square) Jans SAML @@ -37,7 +37,7 @@ Kubernetes: `>=v1.21.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"janssenproject/saml"` | Image to use for deploying. | -| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | lifecycle | object | `{}` | | | livenessProbe | object | `{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for saml if needed. | | livenessProbe.exec | object | `{"command":["python3","/app/scripts/healthcheck.py"]}` | Executes the python3 healthcheck. | diff --git a/charts/gluu/charts/saml/values.yaml b/charts/gluu/charts/saml/values.yaml index 885e97a16..dd888b2c9 100644 --- a/charts/gluu/charts/saml/values.yaml +++ b/charts/gluu/charts/saml/values.yaml @@ -27,7 +27,7 @@ image: # -- Image to use for deploying. repository: janssenproject/saml # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. diff --git a/charts/gluu/charts/scim/Chart.yaml b/charts/gluu/charts/scim/Chart.yaml index 091e06901..27ef7dfe2 100644 --- a/charts/gluu/charts/scim/Chart.yaml +++ b/charts/gluu/charts/scim/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: scim -version: 1.1.6 +version: 0.0.0-nightly kubeVersion: ">=v1.21.0-0" description: System for Cross-domain Identity Management (SCIM) version 2.0 type: application @@ -18,4 +18,4 @@ maintainers: email: team@gluu.org url: https://github.com/moabu icon: https://gluu.org/docs/gluu-server/favicon.ico -appVersion: "5.1.6" +appVersion: "0.0.0-nightly" diff --git a/charts/gluu/charts/scim/README.md b/charts/gluu/charts/scim/README.md index 6acf9e375..d8ffc2f6b 100644 --- a/charts/gluu/charts/scim/README.md +++ b/charts/gluu/charts/scim/README.md @@ -1,6 +1,6 @@ # scim -![Version: 1.1.6](https://img.shields.io/badge/Version-1.1.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.1.6](https://img.shields.io/badge/AppVersion-5.1.6-informational?style=flat-square) +![Version: 0.0.0-nightly](https://img.shields.io/badge/Version-0.0.0--nightly-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.0.0-nightly](https://img.shields.io/badge/AppVersion-0.0.0--nightly-informational?style=flat-square) System for Cross-domain Identity Management (SCIM) version 2.0 @@ -38,7 +38,7 @@ Kubernetes: `>=v1.21.0-0` | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | image.pullSecrets | list | `[]` | Image Pull Secrets | | image.repository | string | `"janssenproject/scim"` | Image to use for deploying. | -| image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | lifecycle | object | `{}` | | | livenessProbe | object | `{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for SCIM if needed. | | livenessProbe.httpGet.path | string | `"/jans-scim/sys/health-check"` | http liveness probe endpoint | diff --git a/charts/gluu/charts/scim/values.yaml b/charts/gluu/charts/scim/values.yaml index abaf722cd..d27dbf282 100644 --- a/charts/gluu/charts/scim/values.yaml +++ b/charts/gluu/charts/scim/values.yaml @@ -28,7 +28,7 @@ image: # -- Image to use for deploying. repository: janssenproject/scim # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. diff --git a/charts/gluu/openbanking-values.yaml b/charts/gluu/openbanking-values.yaml index 8bbacee19..31eecefae 100644 --- a/charts/gluu/openbanking-values.yaml +++ b/charts/gluu/openbanking-values.yaml @@ -28,7 +28,7 @@ auth-server: # -- Image to use for deploying. repository: janssenproject/auth-server # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -161,7 +161,7 @@ config: # -- Image to use for deploying. repository: janssenproject/configurator # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Organization name. Used for certificate creation. @@ -225,7 +225,7 @@ config-api: # -- Image to use for deploying. repository: janssenproject/config-api # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -625,7 +625,7 @@ persistence: # -- Image to use for deploying. repository: janssenproject/persistence-loader # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Resource specs. diff --git a/charts/gluu/values.yaml b/charts/gluu/values.yaml index 6ca5965d4..00d1fc289 100644 --- a/charts/gluu/values.yaml +++ b/charts/gluu/values.yaml @@ -85,7 +85,7 @@ admin-ui: # -- Image to use for deploying. repository: ghcr.io/gluufederation/flex/admin-ui # -- Image tag to use for deploying. - tag: 5.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -188,7 +188,7 @@ auth-server: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/auth-server # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -267,7 +267,7 @@ auth-server-key-rotation: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/certmanager # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Auth server key rotation keys life in hours @@ -467,7 +467,7 @@ config: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/configurator # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Organization name. Used for certificate creation. @@ -572,7 +572,7 @@ config-api: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/config-api # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -677,7 +677,7 @@ fido2: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/fido2 # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -787,7 +787,7 @@ casa: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/casa # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -1464,7 +1464,7 @@ persistence: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/persistence-loader # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Resource specs. @@ -1550,7 +1550,7 @@ scim: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/scim # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -1660,7 +1660,7 @@ link: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/link # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -1769,7 +1769,7 @@ saml: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/saml # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Service replica number. @@ -1850,7 +1850,7 @@ kc-scheduler: # -- Image to use for deploying. repository: ghcr.io/janssenproject/jans/kc-scheduler # -- Image tag to use for deploying. - tag: 1.1.6-1 + tag: 0.0.0-nightly # -- Image Pull Secrets pullSecrets: [ ] # -- Resource specs. diff --git a/docker-admin-ui/Dockerfile b/docker-admin-ui/Dockerfile index 9c5975ec8..4dc6984f4 100644 --- a/docker-admin-ui/Dockerfile +++ b/docker-admin-ui/Dockerfile @@ -159,7 +159,7 @@ ENV CN_WAIT_MAX_TIME=300 \ LABEL org.opencontainers.image.url="ghcr.io/gluufederation/flex/admin-ui" \ org.opencontainers.image.authors="Gluu Inc. " \ org.opencontainers.image.vendor="Gluu Federation" \ - org.opencontainers.image.version="5.1.6" \ + org.opencontainers.image.version="0.0.0-nightly" \ org.opencontainers.image.title="Gluu Flex Admin UI" \ org.opencontainers.image.description="" diff --git a/docker-admin-ui/Makefile b/docker-admin-ui/Makefile index 131f9c7ce..acc888c11 100644 --- a/docker-admin-ui/Makefile +++ b/docker-admin-ui/Makefile @@ -1,4 +1,4 @@ -IMAGE_VERSION?=$(shell grep -Po 'org.opencontainers.image.version="\K.*?(?=")' Dockerfile)_dev +IMAGE_VERSION?=$(shell grep -Po 'org.opencontainers.image.version="\K.*?(?=")' Dockerfile) IMAGE_URL=$(shell grep -Po 'org.opencontainers.image.url="\K.*?(?=")' Dockerfile) IMAGE?=${IMAGE_URL}:${IMAGE_VERSION} diff --git a/docker-admin-ui/README.md b/docker-admin-ui/README.md index 6fa02a278..e594fbd8c 100644 --- a/docker-admin-ui/README.md +++ b/docker-admin-ui/README.md @@ -13,7 +13,7 @@ A containerized application for Gluu Admin UI frontend. ## Versions See [Releases](https://github.com/GluuFederation/docker-admin-ui/releases) for stable versions. -For bleeding-edge/unstable version, use `gluufederation/admin-ui:1.0.0_dev`. +For bleeding-edge/unstable version, use `gluufederation/admin-ui:0.0.0-nightly`. ## Environment Variables diff --git a/docker-admin-ui/version.txt b/docker-admin-ui/version.txt index 8710cfdff..53647c142 100644 --- a/docker-admin-ui/version.txt +++ b/docker-admin-ui/version.txt @@ -1 +1 @@ -5.1.6 +0.0.0-nightly diff --git a/docker-flex-all-in-one/Dockerfile b/docker-flex-all-in-one/Dockerfile index 6263ba6e4..5ef9e0a6d 100644 --- a/docker-flex-all-in-one/Dockerfile +++ b/docker-flex-all-in-one/Dockerfile @@ -3,13 +3,13 @@ # ============== # original Janssen base version (without suffix) -ARG BASE_VERSION=1.1.6 -ARG FLEX_BASE_VERSION=5.1.6 +ARG BASE_VERSION=0.0.0-nightly +ARG FLEX_BASE_VERSION=0.0.0-nightly # the following ARGs set default base images # they can be overriden in build process via --build-arg option -ARG JANS_AIO_IMAGE=ghcr.io/janssenproject/jans/all-in-one:${BASE_VERSION}_dev -ARG FLEX_ADMIN_UI_IMAGE=ghcr.io/gluufederation/flex/admin-ui:${FLEX_BASE_VERSION}_dev +ARG JANS_AIO_IMAGE=ghcr.io/janssenproject/jans/all-in-one:${BASE_VERSION} +ARG FLEX_ADMIN_UI_IMAGE=ghcr.io/gluufederation/flex/admin-ui:${FLEX_BASE_VERSION} # ----------- # base images @@ -105,7 +105,7 @@ RUN mkdir -p /usr/share/java /var/lib/nginx/html/admin COPY app /app # CN version as env var (with suffix if any, i.e. SNAPSHOT) -ENV CN_VERSION=1.1.6 +ENV CN_VERSION= # set directory contains installer code that will be added to Python sys.path ENV PYTHONPATH=/app @@ -164,7 +164,7 @@ ENV JETTY_BASE=/opt/jans/jetty \ LABEL org.opencontainers.image.url="ghcr.io/gluufederation/flex/flex-all-in-one" \ org.opencontainers.image.authors="Gluu Inc. " \ org.opencontainers.image.vendor="Gluu Federation" \ - org.opencontainers.image.version="5.1.6" \ + org.opencontainers.image.version="0.0.0-nightly" \ org.opencontainers.image.title="Gluu Flex All-in-One" \ org.opencontainers.image.description="" diff --git a/docker-flex-all-in-one/Makefile b/docker-flex-all-in-one/Makefile index 131f9c7ce..acc888c11 100644 --- a/docker-flex-all-in-one/Makefile +++ b/docker-flex-all-in-one/Makefile @@ -1,4 +1,4 @@ -IMAGE_VERSION?=$(shell grep -Po 'org.opencontainers.image.version="\K.*?(?=")' Dockerfile)_dev +IMAGE_VERSION?=$(shell grep -Po 'org.opencontainers.image.version="\K.*?(?=")' Dockerfile) IMAGE_URL=$(shell grep -Po 'org.opencontainers.image.url="\K.*?(?=")' Dockerfile) IMAGE?=${IMAGE_URL}:${IMAGE_VERSION} diff --git a/docker-flex-monolith/Dockerfile b/docker-flex-monolith/Dockerfile index c7fd9581f..e19f0684d 100644 --- a/docker-flex-monolith/Dockerfile +++ b/docker-flex-monolith/Dockerfile @@ -92,7 +92,7 @@ ENV CN_HOSTNAME="demoexample.gluu.org" \ LABEL org.opencontainers.image.url="ghcr.io/gluufederation/flex/monolith" \ org.opencontainers.image.authors="GluuFederation " \ org.opencontainers.image.vendor="GluuFederation" \ - org.opencontainers.image.version="5.1.6" \ + org.opencontainers.image.version="0.0.0-nightly" \ org.opencontainers.image.title="GluuFederation Flex Monolith Image" \ org.opencontainers.image.description="Janssen Authorization server + Casa + AdminUI" diff --git a/docker-flex-monolith/Makefile b/docker-flex-monolith/Makefile index a1dd261cc..b7b883278 100644 --- a/docker-flex-monolith/Makefile +++ b/docker-flex-monolith/Makefile @@ -1,4 +1,4 @@ -IMAGE_VERSION?=$(shell grep -Po 'org.opencontainers.image.version="\K.*?(?=")' Dockerfile)_dev +IMAGE_VERSION?=$(shell grep -Po 'org.opencontainers.image.version="\K.*?(?=")' Dockerfile) IMAGE_URL=$(shell grep -Po 'org.opencontainers.image.url="\K.*?(?=")' Dockerfile) IMAGE?=${IMAGE_URL}:${IMAGE_VERSION} diff --git a/docker-flex-monolith/README.md b/docker-flex-monolith/README.md index d98939339..4ecf45633 100644 --- a/docker-flex-monolith/README.md +++ b/docker-flex-monolith/README.md @@ -23,7 +23,7 @@ Docker monolith image packaging for Gluu Flex. This image packs janssen services ## Versions See [Releases](https://github.com/GluuFederation/docker-flex-monolith/releases) for stable versions. This image should never be used in production. -For bleeding-edge/unstable version, use `gluufederation/monolith:5.0.0_dev`. +For bleeding-edge/unstable version, use `gluufederation/monolith:0.0.0-nightly`. ## Environment Variables diff --git a/docker-flex-monolith/clean.sh b/docker-flex-monolith/clean.sh index f5deeecf3..5ca48fdc4 100644 --- a/docker-flex-monolith/clean.sh +++ b/docker-flex-monolith/clean.sh @@ -23,7 +23,7 @@ if [ -z "$INSTALLED_FLEX_NAME" ]; then fi if [ -z "$FLEX_VERSION" ]; then - FLEX_VERSION="5.1.6-1" + FLEX_VERSION="0.0.0-nightly" fi if [ -z "$DATABASE_VOLUME_NAME" ]; then diff --git a/docker-flex-monolith/down.sh b/docker-flex-monolith/down.sh index 31331e2e9..a69f59ab5 100644 --- a/docker-flex-monolith/down.sh +++ b/docker-flex-monolith/down.sh @@ -23,7 +23,7 @@ if [ -z "$INSTALLED_FLEX_NAME" ]; then fi if [ -z "$FLEX_VERSION" ]; then - FLEX_VERSION="5.1.6-1" + FLEX_VERSION="0.0.0-nightly" fi if [ -z "$FLEX_SERVICE_NAME" ]; then diff --git a/docker-flex-monolith/flex-mysql-compose.yml b/docker-flex-monolith/flex-mysql-compose.yml index 1db4a188c..a74004e4d 100644 --- a/docker-flex-monolith/flex-mysql-compose.yml +++ b/docker-flex-monolith/flex-mysql-compose.yml @@ -16,7 +16,7 @@ services: - MYSQL_PASSWORD=1t5Fin3#security - MYSQL_ROOT_PASSWORD=1t5Fin3#security flex: - image: ${FLEX_IMAGE:-ghcr.io/gluufederation/flex/monolith:5.1.6-1} + image: ${FLEX_IMAGE:-ghcr.io/gluufederation/flex/monolith:0.0.0-nightly} restart: always ports: - "443:443" diff --git a/docker-flex-monolith/flex-postgres-compose.yml b/docker-flex-monolith/flex-postgres-compose.yml index ce180bf4d..a50e5fc2e 100644 --- a/docker-flex-monolith/flex-postgres-compose.yml +++ b/docker-flex-monolith/flex-postgres-compose.yml @@ -14,7 +14,7 @@ services: POSTGRES_PASSWORD: 1t5Fin3#security POSTGRES_DB: gluu flex: - image: ${FLEX_IMAGE:-ghcr.io/gluufederation/flex/monolith:5.1.6-1} + image: ${FLEX_IMAGE:-ghcr.io/gluufederation/flex/monolith:0.0.0-nightly} restart: always ports: - "443:443" diff --git a/docker-flex-monolith/up.sh b/docker-flex-monolith/up.sh index 09d4c7a2a..e7fc26966 100644 --- a/docker-flex-monolith/up.sh +++ b/docker-flex-monolith/up.sh @@ -23,7 +23,7 @@ if [ -z "$INSTALLED_FLEX_NAME" ]; then fi if [ -z "$FLEX_VERSION" ]; then - FLEX_VERSION="5.1.6-1" + FLEX_VERSION="0.0.0-nightly" fi if [ -z "$DATABASE_VOLUME_NAME" ]; then diff --git a/docker-flex-monolith/version.txt b/docker-flex-monolith/version.txt index 8710cfdff..53647c142 100644 --- a/docker-flex-monolith/version.txt +++ b/docker-flex-monolith/version.txt @@ -1 +1 @@ -5.1.6 +0.0.0-nightly diff --git a/docs/install/docker-install/compose.md b/docs/install/docker-install/compose.md index ae42a68f9..dec9a9cce 100644 --- a/docs/install/docker-install/compose.md +++ b/docs/install/docker-install/compose.md @@ -23,7 +23,7 @@ Docker monolith image packaging for Gluu Flex. This image packs janssen services ## Versions See [Releases](https://github.com/GluuFederation/docker-flex-monolith/releases) for stable versions. This image should never be used in production. -For bleeding-edge/unstable version, use `gluufederation/monolith:5.0.0_dev`. +For bleeding-edge/unstable version, use `gluufederation/monolith:0.0.0-nightly`. ## Environment Variables diff --git a/docs/reference/kubernetes/docker-admin-ui.md b/docs/reference/kubernetes/docker-admin-ui.md index 7138a7c6c..42838b388 100644 --- a/docs/reference/kubernetes/docker-admin-ui.md +++ b/docs/reference/kubernetes/docker-admin-ui.md @@ -13,7 +13,7 @@ A containerized application for Gluu Admin UI frontend. ## Versions See [Releases](https://github.com/GluuFederation/docker-admin-ui/releases) for stable versions. -For bleeding-edge/unstable version, use `gluufederation/admin-ui:1.0.0_dev`. +For bleeding-edge/unstable version, use `gluufederation/admin-ui:0.0.0-nightly`. ## Environment Variables diff --git a/docs/reference/kubernetes/docker-flex-monolith.md b/docs/reference/kubernetes/docker-flex-monolith.md index d98939339..4ecf45633 100644 --- a/docs/reference/kubernetes/docker-flex-monolith.md +++ b/docs/reference/kubernetes/docker-flex-monolith.md @@ -23,7 +23,7 @@ Docker monolith image packaging for Gluu Flex. This image packs janssen services ## Versions See [Releases](https://github.com/GluuFederation/docker-flex-monolith/releases) for stable versions. This image should never be used in production. -For bleeding-edge/unstable version, use `gluufederation/monolith:5.0.0_dev`. +For bleeding-edge/unstable version, use `gluufederation/monolith:0.0.0-nightly`. ## Environment Variables diff --git a/docs/reference/kubernetes/helm-chart.md b/docs/reference/kubernetes/helm-chart.md index 178e0f3be..415e299ae 100644 --- a/docs/reference/kubernetes/helm-chart.md +++ b/docs/reference/kubernetes/helm-chart.md @@ -69,8 +69,8 @@ Kubernetes: `>=v1.21.0-0` | admin-ui.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | admin-ui.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | admin-ui.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| auth-server | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/auth-server","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"2500m","memory":"2500Mi"},"requests":{"cpu":"2500m","memory":"2500Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | OAuth Authorization Server, the OpenID Connect Provider, the UMA Authorization Server--this is the main Internet facing component of Gluu. It's the service that returns tokens, JWT's and identity assertions. This service must be Internet facing. | -| auth-server-key-rotation | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/certmanager","tag":"1.1.6-1"},"keysLife":48,"keysPushDelay":0,"keysPushStrategy":"NEWER","keysStrategy":"NEWER","lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for regenerating auth-keys per x hours | +| auth-server | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/auth-server","tag":"0.0.0-nightly"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"2500m","memory":"2500Mi"},"requests":{"cpu":"2500m","memory":"2500Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | OAuth Authorization Server, the OpenID Connect Provider, the UMA Authorization Server--this is the main Internet facing component of Gluu. It's the service that returns tokens, JWT's and identity assertions. This service must be Internet facing. | +| auth-server-key-rotation | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/certmanager","tag":"0.0.0-nightly"},"keysLife":48,"keysPushDelay":0,"keysPushStrategy":"NEWER","keysStrategy":"NEWER","lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for regenerating auth-keys per x hours | | auth-server-key-rotation.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | auth-server-key-rotation.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | auth-server-key-rotation.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | @@ -105,7 +105,7 @@ Kubernetes: `>=v1.21.0-0` | auth-server.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | auth-server.image.pullSecrets | list | `[]` | Image Pull Secrets | | auth-server.image.repository | string | `"ghcr.io/janssenproject/jans/auth-server"` | Image to use for deploying. | -| auth-server.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| auth-server.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | auth-server.livenessProbe | object | `{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | auth-server.livenessProbe.exec | object | `{"command":["python3","/app/scripts/healthcheck.py"]}` | Executes the python3 healthcheck. https://github.com/JanssenProject/docker-jans-auth-server/blob/master/scripts/healthcheck.py | | auth-server.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -122,7 +122,7 @@ Kubernetes: `>=v1.21.0-0` | auth-server.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | auth-server.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | auth-server.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| casa | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/casa","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"500Mi"},"requests":{"cpu":"500m","memory":"500Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Janssen Casa ("Casa") is a self-service web portal for end-users to manage authentication and authorization preferences for their account in a Janssen Auth Server. | +| casa | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/casa","tag":"0.0.0-nightly"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"500Mi"},"requests":{"cpu":"500m","memory":"500Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Janssen Casa ("Casa") is a self-service web portal for end-users to manage authentication and authorization preferences for their account in a Janssen Auth Server. | | casa.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | casa.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | casa.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | @@ -134,7 +134,7 @@ Kubernetes: `>=v1.21.0-0` | casa.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | casa.image.pullSecrets | list | `[]` | Image Pull Secrets | | casa.image.repository | string | `"ghcr.io/janssenproject/jans/casa"` | Image to use for deploying. | -| casa.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| casa.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | casa.livenessProbe | object | `{"httpGet":{"path":"/jans-casa/health-check","port":"http-casa"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5}` | Configure the liveness healthcheck for casa if needed. | | casa.livenessProbe.httpGet.path | string | `"/jans-casa/health-check"` | http liveness probe endpoint | | casa.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -152,8 +152,8 @@ Kubernetes: `>=v1.21.0-0` | casa.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | casa.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | casa.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| config | object | `{"additionalAnnotations":{},"additionalLabels":{},"adminPassword":"Test1234#","city":"Austin","configmap":{"cnAwsAccessKeyId":"","cnAwsDefaultRegion":"us-west-1","cnAwsProfile":"gluu","cnAwsSecretAccessKey":"","cnAwsSecretsEndpointUrl":"","cnAwsSecretsNamePrefix":"gluu","cnAwsSecretsReplicaRegions":[],"cnCacheType":"NATIVE_PERSISTENCE","cnConfigKubernetesConfigMap":"cn","cnCouchbaseBucketPrefix":"jans","cnCouchbaseCrt":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnCouchbaseIndexNumReplica":0,"cnCouchbasePassword":"P@ssw0rd","cnCouchbaseSuperUser":"admin","cnCouchbaseSuperUserPassword":"Test1234#","cnCouchbaseUrl":"cbgluu.default.svc.cluster.local","cnCouchbaseUser":"gluu","cnGoogleProjectId":"google-project-to-save-config-and-secrets-to","cnGoogleSecretManagerServiceAccount":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnGoogleSecretNamePrefix":"gluu","cnGoogleSecretVersionId":"latest","cnGoogleSpannerDatabaseId":"","cnGoogleSpannerInstanceId":"","cnJettyRequestHeaderSize":8192,"cnLdapCrt":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnLdapKey":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnLdapUrl":"opendj:1636","cnMaxRamPercent":"75.0","cnMessageType":"DISABLED","cnOpaUrl":"http://opa.opa.svc.cluster.cluster.local:8181/v1","cnPersistenceHybridMapping":"{}","cnRedisSentinelGroup":"","cnRedisSslTruststore":"","cnRedisType":"STANDALONE","cnRedisUrl":"redis.redis.svc.cluster.local:6379","cnRedisUseSsl":false,"cnScimProtectionMode":"OAUTH","cnSecretKubernetesSecret":"cn","cnSqlDbDialect":"mysql","cnSqlDbHost":"my-release-mysql.default.svc.cluster.local","cnSqlDbName":"gluu","cnSqlDbPort":3306,"cnSqlDbSchema":"","cnSqlDbTimezone":"UTC","cnSqlDbUser":"gluu","cnSqldbUserPassword":"Test1234#","cnVaultAddr":"http://localhost:8200","cnVaultAppRolePath":"approle","cnVaultKvPath":"secret","cnVaultNamespace":"","cnVaultPrefix":"jans","cnVaultRoleId":"","cnVaultRoleIdFile":"/etc/certs/vault_role_id","cnVaultSecretId":"","cnVaultSecretIdFile":"/etc/certs/vault_secret_id","cnVaultVerify":false,"kcDbPassword":"Test1234#","kcDbSchema":"keycloak","kcDbUrlDatabase":"keycloak","kcDbUrlHost":"mysql.kc.svc.cluster.local","kcDbUrlPort":3306,"kcDbUrlProperties":"?useUnicode=true&characterEncoding=UTF-8&character_set_server=utf8mb4","kcDbUsername":"keycloak","kcDbVendor":"mysql","kcLogLevel":"INFO","lbAddr":"","quarkusTransactionEnableRecovery":true},"countryCode":"US","customScripts":[],"dnsConfig":{},"dnsPolicy":"","email":"team@gluu.org","image":{"pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/configurator","tag":"1.1.6-1"},"ldapPassword":"P@ssw0rds","ldapTruststorePassword":"changeit","lifecycle":{},"migration":{"enabled":false,"migrationDataFormat":"ldif","migrationDir":"/ce-migration"},"orgName":"Gluu","redisPassword":"P@assw0rd","resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"salt":"","state":"TX","usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Configuration parameters for setup and initial configuration secret and config layers used by Gluu services. | -| config-api | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/config-api","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-config-api/api/v1/health/live","port":8074},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"jans-config-api/api/v1/health/ready","port":8074},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1200Mi"},"requests":{"cpu":"1000m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Config Api endpoints can be used to configure the auth-server, which is an open-source OpenID Connect Provider (OP) and UMA Authorization Server (AS). | +| config | object | `{"additionalAnnotations":{},"additionalLabels":{},"adminPassword":"Test1234#","city":"Austin","configmap":{"cnAwsAccessKeyId":"","cnAwsDefaultRegion":"us-west-1","cnAwsProfile":"gluu","cnAwsSecretAccessKey":"","cnAwsSecretsEndpointUrl":"","cnAwsSecretsNamePrefix":"gluu","cnAwsSecretsReplicaRegions":[],"cnCacheType":"NATIVE_PERSISTENCE","cnConfigKubernetesConfigMap":"cn","cnCouchbaseBucketPrefix":"jans","cnCouchbaseCrt":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnCouchbaseIndexNumReplica":0,"cnCouchbasePassword":"P@ssw0rd","cnCouchbaseSuperUser":"admin","cnCouchbaseSuperUserPassword":"Test1234#","cnCouchbaseUrl":"cbgluu.default.svc.cluster.local","cnCouchbaseUser":"gluu","cnGoogleProjectId":"google-project-to-save-config-and-secrets-to","cnGoogleSecretManagerServiceAccount":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnGoogleSecretNamePrefix":"gluu","cnGoogleSecretVersionId":"latest","cnGoogleSpannerDatabaseId":"","cnGoogleSpannerInstanceId":"","cnJettyRequestHeaderSize":8192,"cnLdapCrt":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnLdapKey":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnLdapUrl":"opendj:1636","cnMaxRamPercent":"75.0","cnMessageType":"DISABLED","cnOpaUrl":"http://opa.opa.svc.cluster.cluster.local:8181/v1","cnPersistenceHybridMapping":"{}","cnRedisSentinelGroup":"","cnRedisSslTruststore":"","cnRedisType":"STANDALONE","cnRedisUrl":"redis.redis.svc.cluster.local:6379","cnRedisUseSsl":false,"cnScimProtectionMode":"OAUTH","cnSecretKubernetesSecret":"cn","cnSqlDbDialect":"mysql","cnSqlDbHost":"my-release-mysql.default.svc.cluster.local","cnSqlDbName":"gluu","cnSqlDbPort":3306,"cnSqlDbSchema":"","cnSqlDbTimezone":"UTC","cnSqlDbUser":"gluu","cnSqldbUserPassword":"Test1234#","cnVaultAddr":"http://localhost:8200","cnVaultAppRolePath":"approle","cnVaultKvPath":"secret","cnVaultNamespace":"","cnVaultPrefix":"jans","cnVaultRoleId":"","cnVaultRoleIdFile":"/etc/certs/vault_role_id","cnVaultSecretId":"","cnVaultSecretIdFile":"/etc/certs/vault_secret_id","cnVaultVerify":false,"kcDbPassword":"Test1234#","kcDbSchema":"keycloak","kcDbUrlDatabase":"keycloak","kcDbUrlHost":"mysql.kc.svc.cluster.local","kcDbUrlPort":3306,"kcDbUrlProperties":"?useUnicode=true&characterEncoding=UTF-8&character_set_server=utf8mb4","kcDbUsername":"keycloak","kcDbVendor":"mysql","kcLogLevel":"INFO","lbAddr":"","quarkusTransactionEnableRecovery":true},"countryCode":"US","customScripts":[],"dnsConfig":{},"dnsPolicy":"","email":"team@gluu.org","image":{"pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/configurator","tag":"0.0.0-nightly"},"ldapPassword":"P@ssw0rds","ldapTruststorePassword":"changeit","lifecycle":{},"migration":{"enabled":false,"migrationDataFormat":"ldif","migrationDir":"/ce-migration"},"orgName":"Gluu","redisPassword":"P@assw0rd","resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"salt":"","state":"TX","usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Configuration parameters for setup and initial configuration secret and config layers used by Gluu services. | +| config-api | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/config-api","tag":"0.0.0-nightly"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-config-api/api/v1/health/live","port":8074},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"jans-config-api/api/v1/health/ready","port":8074},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1200Mi"},"requests":{"cpu":"1000m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Config Api endpoints can be used to configure the auth-server, which is an open-source OpenID Connect Provider (OP) and UMA Authorization Server (AS). | | config-api.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | config-api.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | config-api.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | @@ -165,7 +165,7 @@ Kubernetes: `>=v1.21.0-0` | config-api.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | config-api.image.pullSecrets | list | `[]` | Image Pull Secrets | | config-api.image.repository | string | `"ghcr.io/janssenproject/jans/config-api"` | Image to use for deploying. | -| config-api.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| config-api.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | config-api.livenessProbe | object | `{"httpGet":{"path":"/jans-config-api/api/v1/health/live","port":8074},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | config-api.livenessProbe.httpGet | object | `{"path":"/jans-config-api/api/v1/health/live","port":8074}` | http liveness probe endpoint | | config-api.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -253,7 +253,7 @@ Kubernetes: `>=v1.21.0-0` | config.email | string | `"team@gluu.org"` | Email address of the administrator usually. Used for certificate creation. | | config.image.pullSecrets | list | `[]` | Image Pull Secrets | | config.image.repository | string | `"ghcr.io/janssenproject/jans/configurator"` | Image to use for deploying. | -| config.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| config.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | config.ldapPassword | string | `"P@ssw0rds"` | LDAP admin password if OpenDJ is used for persistence. | | config.ldapTruststorePassword | string | `"changeit"` | LDAP truststore password if OpenDJ is used for persistence | | config.migration | object | `{"enabled":false,"migrationDataFormat":"ldif","migrationDir":"/ce-migration"}` | CE to CN Migration section | @@ -274,7 +274,7 @@ Kubernetes: `>=v1.21.0-0` | config.usrEnvs.secret | object | `{}` | Add custom secret envs to the service. variable1: value1 | | config.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | config.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| fido2 | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/fido2","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"500Mi"},"requests":{"cpu":"500m","memory":"500Mi"}},"service":{"name":"http-fido2","port":8080},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | FIDO 2.0 (FIDO2) is an open authentication standard that enables leveraging common devices to authenticate to online services in both mobile and desktop environments. | +| fido2 | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/fido2","tag":"0.0.0-nightly"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"500Mi"},"requests":{"cpu":"500m","memory":"500Mi"}},"service":{"name":"http-fido2","port":8080},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | FIDO 2.0 (FIDO2) is an open authentication standard that enables leveraging common devices to authenticate to online services in both mobile and desktop environments. | | fido2.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | fido2.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | fido2.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | @@ -286,7 +286,7 @@ Kubernetes: `>=v1.21.0-0` | fido2.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | fido2.image.pullSecrets | list | `[]` | Image Pull Secrets | | fido2.image.repository | string | `"ghcr.io/janssenproject/jans/fido2"` | Image to use for deploying. | -| fido2.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| fido2.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | fido2.livenessProbe | object | `{"httpGet":{"path":"/jans-fido2/sys/health-check","port":"http-fido2"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5}` | Configure the liveness healthcheck for the fido2 if needed. | | fido2.livenessProbe.httpGet | object | `{"path":"/jans-fido2/sys/health-check","port":"http-fido2"}` | http liveness probe endpoint | | fido2.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -488,7 +488,7 @@ Kubernetes: `>=v1.21.0-0` | global.usrEnvs.normal | object | `{}` | Add custom normal envs to the service. variable1: value1 | | global.usrEnvs.secret | object | `{}` | Add custom secret envs to the service. variable1: value1 | | installer-settings | object | `{"acceptLicense":"","aws":{"arn":{"arnAcmCert":"","enabled":""},"lbType":"","vpcCidr":"0.0.0.0/0"},"confirmSettings":false,"couchbase":{"backup":{"fullSchedule":"","incrementalSchedule":"","retentionTime":"","storageSize":""},"clusterName":"","commonName":"","customFileOverride":"","install":"","lowResourceInstall":"","namespace":"","subjectAlternativeName":"","totalNumberOfExpectedTransactionsPerSec":"","totalNumberOfExpectedUsers":"","volumeType":""},"currentVersion":"","google":{"useSecretManager":""},"images":{"edit":""},"ldap":{"backup":{"fullSchedule":""}},"namespace":"","nginxIngress":{"namespace":"","releaseName":""},"nodes":{"ips":"","names":"","zones":""},"openbanking":{"cnObTransportTrustStoreP12password":"","hasCnObTransportTrustStore":false},"postgres":{"install":"","namespace":""},"redis":{"install":"","namespace":""},"releaseName":"","sql":{"install":"","namespace":""},"volumeProvisionStrategy":""}` | Only used by the installer. These settings do not affect nor are used by the chart | -| kc-scheduler | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/kc-scheduler","tag":"1.1.6-1"},"interval":10,"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for synchronizing Keycloak SAML clients | +| kc-scheduler | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/kc-scheduler","tag":"0.0.0-nightly"},"interval":10,"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for synchronizing Keycloak SAML clients | | kc-scheduler.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | kc-scheduler.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | kc-scheduler.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | @@ -497,7 +497,7 @@ Kubernetes: `>=v1.21.0-0` | kc-scheduler.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | kc-scheduler.image.pullSecrets | list | `[]` | Image Pull Secrets | | kc-scheduler.image.repository | string | `"ghcr.io/janssenproject/jans/kc-scheduler"` | Image to use for deploying. | -| kc-scheduler.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| kc-scheduler.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | kc-scheduler.interval | int | `10` | Interval of running the scheduler (in minutes) | | kc-scheduler.resources | object | `{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}}` | Resource specs. | | kc-scheduler.resources.limits.cpu | string | `"300m"` | CPU limit. | @@ -509,7 +509,7 @@ Kubernetes: `>=v1.21.0-0` | kc-scheduler.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | kc-scheduler.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | kc-scheduler.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| link | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/link","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"1200Mi"},"requests":{"cpu":"500m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Link. | +| link | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/link","tag":"0.0.0-nightly"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"1200Mi"},"requests":{"cpu":"500m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Link. | | link.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | link.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | link.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | @@ -521,7 +521,7 @@ Kubernetes: `>=v1.21.0-0` | link.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | link.image.pullSecrets | list | `[]` | Image Pull Secrets | | link.image.repository | string | `"ghcr.io/janssenproject/jans/link"` | Image to use for deploying. | -| link.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| link.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | link.livenessProbe | object | `{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | link.livenessProbe.exec | object | `{"command":["python3","/app/scripts/healthcheck.py"]}` | http liveness probe endpoint | | link.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -578,7 +578,7 @@ Kubernetes: `>=v1.21.0-0` | nginx-ingress.ingress.webdiscoveryLabels | object | `{}` | webdiscovery ingress resource labels. key app is taken | | nginx-ingress.ingress.webfingerAdditionalAnnotations | object | `{}` | webfinger ingress resource additional annotations. | | nginx-ingress.ingress.webfingerLabels | object | `{}` | webfinger ingress resource labels. key app is taken | -| opendj | object | `{"additionalAnnotations":{},"additionalLabels":{},"backup":{"cronJobSchedule":"*/59 * * * *","enabled":true},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/opendj","tag":"5.0.0_dev"},"lifecycle":{"preStop":{"exec":{"command":["/bin/sh","-c","python3 /app/scripts/deregister_peer.py 1>&/proc/1/fd/1"]}}},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":20,"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":1},"persistence":{"size":"5Gi"},"ports":{"tcp-admin":{"nodePort":"","port":4444,"protocol":"TCP","targetPort":4444},"tcp-ldap":{"nodePort":"","port":1389,"protocol":"TCP","targetPort":1389},"tcp-ldaps":{"nodePort":"","port":1636,"protocol":"TCP","targetPort":1636},"tcp-repl":{"nodePort":"","port":8989,"protocol":"TCP","targetPort":8989},"tcp-serf":{"nodePort":"","port":7946,"protocol":"TCP","targetPort":7946},"udp-serf":{"nodePort":"","port":7946,"protocol":"UDP","targetPort":7946}},"readinessProbe":{"failureThreshold":20,"initialDelaySeconds":60,"periodSeconds":25,"tcpSocket":{"port":1636},"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1500m","memory":"2000Mi"},"requests":{"cpu":"1500m","memory":"2000Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | OpenDJ is a directory server which implements a wide range of Lightweight Directory Access Protocol and related standards, including full compliance with LDAPv3 but also support for Directory Service Markup Language (DSMLv2).Written in Java, OpenDJ offers multi-master replication, access control, and many extensions. | +| opendj | object | `{"additionalAnnotations":{},"additionalLabels":{},"backup":{"cronJobSchedule":"*/59 * * * *","enabled":true},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/opendj","tag":"0.0.0-nightly"},"lifecycle":{"preStop":{"exec":{"command":["/bin/sh","-c","python3 /app/scripts/deregister_peer.py 1>&/proc/1/fd/1"]}}},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":20,"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":1},"persistence":{"size":"5Gi"},"ports":{"tcp-admin":{"nodePort":"","port":4444,"protocol":"TCP","targetPort":4444},"tcp-ldap":{"nodePort":"","port":1389,"protocol":"TCP","targetPort":1389},"tcp-ldaps":{"nodePort":"","port":1636,"protocol":"TCP","targetPort":1636},"tcp-repl":{"nodePort":"","port":8989,"protocol":"TCP","targetPort":8989},"tcp-serf":{"nodePort":"","port":7946,"protocol":"TCP","targetPort":7946},"udp-serf":{"nodePort":"","port":7946,"protocol":"UDP","targetPort":7946}},"readinessProbe":{"failureThreshold":20,"initialDelaySeconds":60,"periodSeconds":25,"tcpSocket":{"port":1636},"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1500m","memory":"2000Mi"},"requests":{"cpu":"1500m","memory":"2000Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | OpenDJ is a directory server which implements a wide range of Lightweight Directory Access Protocol and related standards, including full compliance with LDAPv3 but also support for Directory Service Markup Language (DSMLv2).Written in Java, OpenDJ offers multi-master replication, access control, and many extensions. | | opendj.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | opendj.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | opendj.backup | object | `{"cronJobSchedule":"*/59 * * * *","enabled":true}` | Configure ldap backup cronjob | @@ -609,7 +609,7 @@ Kubernetes: `>=v1.21.0-0` | opendj.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | opendj.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | opendj.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| persistence | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/persistence-loader","tag":"1.1.6-1"},"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Job to generate data and initial config for Gluu Server persistence layer. | +| persistence | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/persistence-loader","tag":"0.0.0-nightly"},"lifecycle":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Job to generate data and initial config for Gluu Server persistence layer. | | persistence.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | persistence.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | persistence.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | @@ -618,7 +618,7 @@ Kubernetes: `>=v1.21.0-0` | persistence.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | persistence.image.pullSecrets | list | `[]` | Image Pull Secrets | | persistence.image.repository | string | `"ghcr.io/janssenproject/jans/persistence-loader"` | Image to use for deploying. | -| persistence.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| persistence.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | persistence.resources | object | `{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}}` | Resource specs. | | persistence.resources.limits.cpu | string | `"300m"` | CPU limit | | persistence.resources.limits.memory | string | `"300Mi"` | Memory limit. | @@ -629,7 +629,7 @@ Kubernetes: `>=v1.21.0-0` | persistence.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | persistence.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | persistence.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| saml | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/saml","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"1200Mi"},"requests":{"cpu":"500m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | SAML. | +| saml | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/saml","tag":"0.0.0-nightly"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"1200Mi"},"requests":{"cpu":"500m","memory":"1200Mi"}},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | SAML. | | saml.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | saml.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | saml.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | @@ -641,7 +641,7 @@ Kubernetes: `>=v1.21.0-0` | saml.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | saml.image.pullSecrets | list | `[]` | Image Pull Secrets | | saml.image.repository | string | `"ghcr.io/janssenproject/jans/saml"` | Image to use for deploying. | -| saml.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| saml.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | saml.livenessProbe | object | `{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"failureThreshold":10,"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for the auth server if needed. | | saml.livenessProbe.exec | object | `{"command":["python3","/app/scripts/healthcheck.py"]}` | http liveness probe endpoint | | saml.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | @@ -658,7 +658,7 @@ Kubernetes: `>=v1.21.0-0` | saml.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | saml.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | saml.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| scim | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/scim","tag":"1.1.6-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1200Mi"},"requests":{"cpu":"1000m","memory":"1200Mi"}},"service":{"name":"http-scim","port":8080},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | System for Cross-domain Identity Management (SCIM) version 2.0 | +| scim | object | `{"additionalAnnotations":{},"additionalLabels":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"ghcr.io/janssenproject/jans/scim","tag":"0.0.0-nightly"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1200Mi"},"requests":{"cpu":"1000m","memory":"1200Mi"}},"service":{"name":"http-scim","port":8080},"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | System for Cross-domain Identity Management (SCIM) version 2.0 | | scim.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | scim.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | scim.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | @@ -670,7 +670,7 @@ Kubernetes: `>=v1.21.0-0` | scim.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | | scim.image.pullSecrets | list | `[]` | Image Pull Secrets | | scim.image.repository | string | `"ghcr.io/janssenproject/jans/scim"` | Image to use for deploying. | -| scim.image.tag | string | `"1.1.6-1"` | Image tag to use for deploying. | +| scim.image.tag | string | `"0.0.0-nightly"` | Image tag to use for deploying. | | scim.livenessProbe | object | `{"httpGet":{"path":"/jans-scim/sys/health-check","port":8080},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5}` | Configure the liveness healthcheck for SCIM if needed. | | scim.livenessProbe.httpGet.path | string | `"/jans-scim/sys/health-check"` | http liveness probe endpoint | | scim.pdb | object | `{"enabled":true,"maxUnavailable":"90%"}` | Configure the PodDisruptionBudget | diff --git a/flex-linux-setup/flex_linux_setup/flex_setup.py b/flex-linux-setup/flex_linux_setup/flex_setup.py index e7c8605e0..2158446bf 100644 --- a/flex-linux-setup/flex_linux_setup/flex_setup.py +++ b/flex-linux-setup/flex_linux_setup/flex_setup.py @@ -265,8 +265,8 @@ def download_jans_install_py(setup_branch): "SETUP_BRANCH": argsp.jans_setup_branch, "FLEX_BRANCH": argsp.flex_branch, "JANS_BRANCH": argsp.jans_branch, - "JANS_APP_VERSION": "1.1.6", - "JANS_BUILD": "", + "JANS_APP_VERSION": "0.0.0", + "JANS_BUILD": "-nightly", "NODE_VERSION": "v18.16.0", "NODE_MODULES_BRANCH": argsp.node_modules_branch or argsp.flex_branch } diff --git a/flex-linux-setup/flex_linux_setup/version.py b/flex-linux-setup/flex_linux_setup/version.py index e7dda09d4..6c8e6b979 100644 --- a/flex-linux-setup/flex_linux_setup/version.py +++ b/flex-linux-setup/flex_linux_setup/version.py @@ -1 +1 @@ -__version__ = "5.1.6" +__version__ = "0.0.0"