From 7e7705d23a1aa4bcabc3a339b94cf0f0a8712e4f Mon Sep 17 00:00:00 2001 From: Amro Misbah Date: Wed, 27 Dec 2023 11:04:29 +0200 Subject: [PATCH] feat: add custom scripts to cn (#613) * fix: add default lbIP to avoid potential errors during helm install Example error: spec.template.spec.hostAliases.ip: Invalid value: "": must be valid IP address * feat: add support for custom scripts in cn * chore: prepare release 1.8.29 * chore: prepare release 1.8.29 --------- Co-authored-by: moabu <47318409+moabu@users.noreply.github.com> --- .../kubernetes/templates/helm/gluu-1.8.29.tgz | Bin 0 -> 115237 bytes .../kubernetes/templates/helm/gluu/Chart.yaml | 36 +-- .../kubernetes/templates/helm/gluu/README.md | 75 +++--- .../helm/gluu/charts/casa/Chart.yaml | 2 +- .../templates/helm/gluu/charts/casa/README.md | 3 +- .../charts/casa/templates/deployment.yaml | 9 +- .../helm/gluu/charts/casa/values.yaml | 2 + .../helm/gluu/charts/config/Chart.yaml | 2 +- .../helm/gluu/charts/config/README.md | 3 +- .../config/templates/load-init-config.yml | 3 + .../helm/gluu/charts/config/values.yaml | 2 + .../helm/gluu/charts/cr-rotate/Chart.yaml | 2 +- .../helm/gluu/charts/cr-rotate/README.md | 2 +- .../helm/gluu/charts/fido2/Chart.yaml | 2 +- .../helm/gluu/charts/fido2/README.md | 3 +- .../charts/fido2/templates/deployment.yml | 5 + .../helm/gluu/charts/fido2/values.yaml | 2 + .../gluu/charts/gluu-alb-ingress/Chart.yaml | 2 +- .../gluu/charts/gluu-alb-ingress/README.md | 2 +- .../gluu/charts/gluu-istio-ingress/Chart.yaml | 2 +- .../gluu/charts/gluu-istio-ingress/README.md | 2 +- .../helm/gluu/charts/jackrabbit/Chart.yaml | 2 +- .../helm/gluu/charts/jackrabbit/README.md | 3 +- .../jackrabbit/templates/statefulset.yaml | 10 + .../helm/gluu/charts/jackrabbit/values.yaml | 2 + .../helm/gluu/charts/nginx-ingress/Chart.yaml | 2 +- .../helm/gluu/charts/nginx-ingress/README.md | 2 +- .../helm/gluu/charts/opendj/README.md | 1 + .../charts/opendj/templates/statefulset.yaml | 10 + .../helm/gluu/charts/opendj/values.yaml | 2 + .../gluu/charts/oxauth-key-rotation/README.md | 1 + .../templates/cronjobs.yaml | 10 + .../charts/oxauth-key-rotation/values.yaml | 2 + .../helm/gluu/charts/oxauth/Chart.yaml | 2 +- .../helm/gluu/charts/oxauth/README.md | 3 +- .../charts/oxauth/templates/deployment.yml | 7 +- .../helm/gluu/charts/oxauth/values.yaml | 2 + .../helm/gluu/charts/oxd-server/Chart.yaml | 2 +- .../helm/gluu/charts/oxd-server/README.md | 3 +- .../oxd-server/templates/deployment.yaml | 9 +- .../helm/gluu/charts/oxd-server/values.yaml | 2 + .../helm/gluu/charts/oxpassport/Chart.yaml | 2 +- .../helm/gluu/charts/oxpassport/README.md | 5 +- .../oxpassport/templates/deployment.yaml | 7 +- .../helm/gluu/charts/oxpassport/values.yaml | 2 + .../helm/gluu/charts/oxshibboleth/Chart.yaml | 2 +- .../helm/gluu/charts/oxshibboleth/README.md | 3 +- .../oxshibboleth/templates/statefulset.yaml | 7 +- .../helm/gluu/charts/oxshibboleth/values.yaml | 2 + .../helm/gluu/charts/oxtrust/Chart.yaml | 2 +- .../helm/gluu/charts/oxtrust/README.md | 3 +- .../charts/oxtrust/templates/statefulset.yml | 7 +- .../helm/gluu/charts/oxtrust/values.yaml | 2 + .../helm/gluu/charts/persistence/Chart.yaml | 2 +- .../helm/gluu/charts/persistence/README.md | 3 +- .../charts/persistence/templates/jobs.yml | 7 +- .../helm/gluu/charts/persistence/values.yaml | 2 + .../helm/gluu/charts/scim/Chart.yaml | 2 +- .../templates/helm/gluu/charts/scim/README.md | 3 +- .../gluu/charts/scim/templates/deployment.yml | 7 +- .../helm/gluu/charts/scim/values.yaml | 2 + .../templates/helm/gluu/values.yaml | 52 ++++ pygluu/kubernetes/templates/helm/index.yaml | 242 +++++++++++++----- 63 files changed, 453 insertions(+), 151 deletions(-) create mode 100644 pygluu/kubernetes/templates/helm/gluu-1.8.29.tgz diff --git a/pygluu/kubernetes/templates/helm/gluu-1.8.29.tgz b/pygluu/kubernetes/templates/helm/gluu-1.8.29.tgz new file mode 100644 index 0000000000000000000000000000000000000000..ec824db008d58d5bb019f8ce741b7f60a82b109e GIT binary patch literal 115237 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

aX>w^jA}u79!{kzy{@+UieDS&}0YL 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 A#Q*>R literal 0 HcmV?d00001 diff --git a/pygluu/kubernetes/templates/helm/gluu/Chart.yaml b/pygluu/kubernetes/templates/helm/gluu/Chart.yaml index 0b9d9ba0..76911078 100644 --- a/pygluu/kubernetes/templates/helm/gluu/Chart.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/Chart.yaml @@ -46,73 +46,73 @@ maintainers: email: support@gluu.org description: Gluu Access and Identity Mangement name: gluu -version: 1.8.28 +version: 1.8.29 dependencies: - name: config condition: global.config.enabled - version: 1.8.28 + version: 1.8.29 - name: opendj condition: global.opendj.enabled - version: 1.8.28 + version: 1.8.29 - name: jackrabbit condition: global.jackrabbit.enabled - version: 1.8.28 + version: 1.8.29 - name: oxauth condition: global.oxauth.enabled - version: 1.8.28 + version: 1.8.29 - name: fido2 condition: global.fido2.enabled - version: 1.8.28 + version: 1.8.29 - name: scim condition: global.scim.enabled - version: 1.8.28 + version: 1.8.29 - name: oxtrust condition: global.oxtrust.enabled - version: 1.8.28 + version: 1.8.29 - name: nginx-ingress condition: global.nginx-ingress.enabled - version: 1.8.28 + version: 1.8.29 - name: oxshibboleth condition: global.oxshibboleth.enabled - version: 1.8.28 + version: 1.8.29 - name: oxpassport - version: 1.8.28 + version: 1.8.29 condition: config.configmap.gluuPassportEnabled - name: casa - version: 1.8.28 + version: 1.8.29 condition: config.configmap.gluuCasaEnabled - name: oxauth-key-rotation condition: global.oxauth-key-rotation.enabled - version: 1.8.28 + version: 1.8.29 - name: cr-rotate - version: 1.8.28 + version: 1.8.29 condition: global.cr-rotate.enabled - name: oxd-server condition: global.oxd-server.enabled - version: 1.8.28 + version: 1.8.29 - name: persistence condition: global.persistence.enabled - version: 1.8.28 + version: 1.8.29 - name: gluu-istio-ingress condition: global.istio.ingress - version: 1.8.28 + version: 1.8.29 - name: gluu-alb-ingress condition: global.alb.ingress - version: 1.8.28 + version: 1.8.29 diff --git a/pygluu/kubernetes/templates/helm/gluu/README.md b/pygluu/kubernetes/templates/helm/gluu/README.md index 783c6aa1..a00b5945 100644 --- a/pygluu/kubernetes/templates/helm/gluu/README.md +++ b/pygluu/kubernetes/templates/helm/gluu/README.md @@ -1,6 +1,6 @@ # gluu -![Version: 1.8.28](https://img.shields.io/badge/Version-1.8.28-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) +![Version: 1.8.29](https://img.shields.io/badge/Version-1.8.29-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) Gluu Access and Identity Mangement @@ -23,32 +23,33 @@ Kubernetes: `>=v1.22.0-0` | Repository | Name | Version | |------------|------|---------| -| | casa | 1.8.28 | -| | config | 1.8.28 | -| | cr-rotate | 1.8.28 | -| | fido2 | 1.8.28 | -| | gluu-alb-ingress | 1.8.28 | -| | gluu-istio-ingress | 1.8.28 | -| | jackrabbit | 1.8.28 | -| | nginx-ingress | 1.8.28 | -| | opendj | 1.8.28 | -| | oxauth | 1.8.28 | -| | oxauth-key-rotation | 1.8.28 | -| | oxd-server | 1.8.28 | -| | oxpassport | 1.8.28 | -| | oxshibboleth | 1.8.28 | -| | oxtrust | 1.8.28 | -| | persistence | 1.8.28 | -| | scim | 1.8.28 | +| | casa | 1.8.29 | +| | config | 1.8.29 | +| | cr-rotate | 1.8.29 | +| | fido2 | 1.8.29 | +| | gluu-alb-ingress | 1.8.29 | +| | gluu-istio-ingress | 1.8.29 | +| | jackrabbit | 1.8.29 | +| | nginx-ingress | 1.8.29 | +| | opendj | 1.8.29 | +| | oxauth | 1.8.29 | +| | oxauth-key-rotation | 1.8.29 | +| | oxd-server | 1.8.29 | +| | oxpassport | 1.8.29 | +| | oxshibboleth | 1.8.29 | +| | oxtrust | 1.8.29 | +| | persistence | 1.8.29 | +| | scim | 1.8.29 | ## Values | Key | Type | Default | Description | |-----|------|---------|-------------| -| casa | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/casa","tag":"4.5.3-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/casa/health-check","port":"http-casa"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"nodeSelector":{},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/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"}},"service":{"casaServiceName":"casa","name":"http-casa","port":8080},"tolerations":[],"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Gluu Casa ("Casa") is a self-service web portal for end-users to manage authentication and authorization preferences for their account in a Gluu Server. | +| casa | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/casa","tag":"4.5.3-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/casa/health-check","port":"http-casa"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"nodeSelector":{},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/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"}},"service":{"casaServiceName":"casa","name":"http-casa","port":8080},"tolerations":[],"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Gluu Casa ("Casa") is a self-service web portal for end-users to manage authentication and authorization preferences for their account in a Gluu Server. | | casa.additionalAnnotations | object | `{}` | Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | casa.additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | casa.affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | +| casa.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | | casa.dnsConfig | object | `{}` | Add custom dns config | | casa.dnsPolicy | string | `""` | Add custom dns policy | | casa.hpa | object | `{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50}` | Configure the HorizontalPodAutoscaler | @@ -79,7 +80,7 @@ Kubernetes: `>=v1.22.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":{},"adminPass":"P@ssw0rd","affinity":{},"city":"Austin","configmap":{"cnAwsAccessKeyId":"","cnAwsDefaultRegion":"us-west-1","cnAwsProfile":"gluu","cnAwsSecretAccessKey":"","cnAwsSecretsEndpointUrl":"","cnAwsSecretsNamePrefix":"gluu","cnAwsSecretsReplicaRegions":[],"cnGoogleProjectId":"google-project-to-save-config-and-secrets-to","cnGoogleServiceAccount":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnGoogleSpannerDatabaseId":"","cnGoogleSpannerEmulatorHost":"","cnGoogleSpannerInstanceId":"","cnSecretGoogleSecretNamePrefix":"gluu","cnSecretGoogleSecretVersionId":"latest","cnSqlDbDialect":"mysql","cnSqlDbHost":"my-release-mysql.default.svc.cluster.local","cnSqlDbName":"gluu","cnSqlDbPort":3306,"cnSqlDbTimezone":"UTC","cnSqlDbUser":"gluu","cnSqlPasswordFile":"/etc/gluu/conf/sql_password","cnSqldbUserPassword":"Test1234#","containerMetadataName":"kubernetes","gluuCacheType":"NATIVE_PERSISTENCE","gluuCasaEnabled":false,"gluuCouchbaseBucketPrefix":"gluu","gluuCouchbaseCertFile":"/etc/certs/couchbase.crt","gluuCouchbaseCrt":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURlakNDQW1LZ0F3SUJBZ0lKQUwyem5UWlREUHFNTUEwR0NTcUdTSWIzRFFFQkN3VUFNQzB4S3pBcEJnTlYKQkFNTUlpb3VZMkpuYkhWMUxtUmxabUYxYkhRdWMzWmpMbU5zZFhOMFpYSXViRzlqWVd3d0hoY05NakF3TWpBMQpNRGt4T1RVeFdoY05NekF3TWpBeU1Ea3hPVFV4V2pBdE1Tc3dLUVlEVlFRRERDSXFMbU5pWjJ4MWRTNWtaV1poCmRXeDBMbk4yWXk1amJIVnpkR1Z5TG14dlkyRnNNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUIKQ2dLQ0FRRUFycmQ5T3lvSnRsVzhnNW5nWlJtL2FKWjJ2eUtubGU3dVFIUEw4Q2RJa1RNdjB0eHZhR1B5UkNQQgo3RE00RTFkLzhMaU5takdZZk41QjZjWjlRUmNCaG1VNmFyUDRKZUZ3c0x0cTFGT3MxaDlmWGo3d3NzcTYrYmlkCjV6Umw3UEE0YmdvOXVkUVRzU1UrWDJUUVRDc0dxVVVPWExrZ3NCMjI0RDNsdkFCbmZOeHcvYnFQa2ZCQTFxVzYKVXpxellMdHN6WE5GY0dQMFhtU3c4WjJuaFhhUGlva2pPT2dyMkMrbVFZK0htQ2xGUWRpd2g2ZjBYR0V0STMrKwoyMStTejdXRkF6RlFBVUp2MHIvZnk4TDRXZzh1YysvalgwTGQrc2NoQTlNQjh3YmJORUp2ZjNMOGZ5QjZ0cTd2CjF4b0FnL0g0S1dJaHdqSEN0dFVnWU1oU0xWV3UrUUlEQVFBQm80R2NNSUdaTUIwR0ExVWREZ1FXQkJTWmQxWU0KVGNIRVZjSENNUmp6ejczZitEVmxxREJkQmdOVkhTTUVWakJVZ0JTWmQxWU1UY0hFVmNIQ01Sanp6NzNmK0RWbApxS0V4cEM4d0xURXJNQ2tHQTFVRUF3d2lLaTVqWW1kc2RYVXVaR1ZtWVhWc2RDNXpkbU11WTJ4MWMzUmxjaTVzCmIyTmhiSUlKQUwyem5UWlREUHFNTUF3R0ExVWRFd1FGTUFNQkFmOHdDd1lEVlIwUEJBUURBZ0VHTUEwR0NTcUcKU0liM0RRRUJDd1VBQTRJQkFRQk9meTVWSHlKZCtWUTBXaUQ1aSs2cmhidGNpSmtFN0YwWVVVZnJ6UFN2YWVFWQp2NElVWStWOC9UNnE4Mk9vVWU1eCtvS2dzbFBsL01nZEg2SW9CRnVtaUFqek14RTdUYUhHcXJ5dk13Qk5IKzB5CnhadG9mSnFXQzhGeUlwTVFHTEs0RVBGd3VHRlJnazZMRGR2ZEN5NVdxWW1MQWdBZVh5VWNaNnlHYkdMTjRPUDUKZTFiaEFiLzRXWXRxRHVydFJrWjNEejlZcis4VWNCVTRLT005OHBZN05aaXFmKzlCZVkvOEhZaVQ2Q0RRWWgyTgoyK0VWRFBHcFE4UkVsRThhN1ZLL29MemlOaXFyRjllNDV1OU1KdjM1ZktmNUJjK2FKdWduTGcwaUZUYmNaT1prCkpuYkUvUENIUDZFWmxLaEFiZUdnendtS1dDbTZTL3g0TklRK2JtMmoKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=","gluuCouchbaseIndexNumReplica":0,"gluuCouchbasePass":"P@ssw0rd","gluuCouchbasePassFile":"/etc/gluu/conf/couchbase_password","gluuCouchbaseSuperUser":"admin","gluuCouchbaseSuperUserPass":"P@ssw0rd","gluuCouchbaseSuperUserPassFile":"/etc/gluu/conf/couchbase_superuser_password","gluuCouchbaseUrl":"cbgluu.default.svc.cluster.local","gluuCouchbaseUser":"gluu","gluuDocumentStoreType":"DB","gluuJackrabbitAdminId":"admin","gluuJackrabbitAdminIdFile":"/etc/gluu/conf/jackrabbit_admin_id","gluuJackrabbitAdminPassFile":"/etc/gluu/conf/jackrabbit_admin_password","gluuJackrabbitPostgresDatabaseName":"jackrabbit","gluuJackrabbitPostgresHost":"postgresql.postgres.svc.cluster.local","gluuJackrabbitPostgresPasswordFile":"/etc/gluu/conf/postgres_password","gluuJackrabbitPostgresPort":5432,"gluuJackrabbitPostgresUser":"jackrabbit","gluuJackrabbitSyncInterval":300,"gluuJackrabbitUrl":"http://jackrabbit:8080","gluuLdapUrl":"opendj:1636","gluuMaxRamPercent":"75.0","gluuOxauthBackend":"oxauth:8080","gluuOxdAdminCertCn":"oxd-server","gluuOxdApplicationCertCn":"oxd-server","gluuOxdBindIpAddresses":"*","gluuOxdServerUrl":"oxd-server:8443","gluuOxtrustApiEnabled":false,"gluuOxtrustApiTestMode":false,"gluuOxtrustBackend":"oxtrust:8080","gluuOxtrustConfigGeneration":true,"gluuPassportEnabled":false,"gluuPassportFailureRedirectUrl":"","gluuPersistenceLdapMapping":"default","gluuRedisSentinelGroup":"","gluuRedisSslTruststore":"","gluuRedisType":"STANDALONE","gluuRedisUrl":"redis:6379","gluuRedisUseSsl":"false","gluuSamlEnabled":false,"gluuScimProtectionMode":"OAUTH","gluuSyncCasaManifests":false,"gluuSyncShibManifests":false,"lbAddr":""},"countryCode":"US","dnsConfig":{},"dnsPolicy":"","email":"support@gluu.com","image":{"pullSecrets":[],"repository":"gluufederation/config-init","tag":"4.5.3-1"},"ldapPass":"P@ssw0rd","lifecycle":{},"migration":{"enabled":false,"migrationDataFormat":"ldif","migrationDir":"/ce-migration"},"nodeSelector":{},"orgName":"Gluu","redisPass":"P@assw0rd","resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"salt":"","state":"TX","tolerations":[],"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Configuration parameters for setup and initial configuration secret and config layers used by Gluu services. | +| config | object | `{"additionalAnnotations":{},"additionalLabels":{},"adminPass":"P@ssw0rd","affinity":{},"city":"Austin","configmap":{"cnAwsAccessKeyId":"","cnAwsDefaultRegion":"us-west-1","cnAwsProfile":"gluu","cnAwsSecretAccessKey":"","cnAwsSecretsEndpointUrl":"","cnAwsSecretsNamePrefix":"gluu","cnAwsSecretsReplicaRegions":[],"cnGoogleProjectId":"google-project-to-save-config-and-secrets-to","cnGoogleServiceAccount":"SWFtTm90YVNlcnZpY2VBY2NvdW50Q2hhbmdlTWV0b09uZQo=","cnGoogleSpannerDatabaseId":"","cnGoogleSpannerEmulatorHost":"","cnGoogleSpannerInstanceId":"","cnSecretGoogleSecretNamePrefix":"gluu","cnSecretGoogleSecretVersionId":"latest","cnSqlDbDialect":"mysql","cnSqlDbHost":"my-release-mysql.default.svc.cluster.local","cnSqlDbName":"gluu","cnSqlDbPort":3306,"cnSqlDbTimezone":"UTC","cnSqlDbUser":"gluu","cnSqlPasswordFile":"/etc/gluu/conf/sql_password","cnSqldbUserPassword":"Test1234#","containerMetadataName":"kubernetes","gluuCacheType":"NATIVE_PERSISTENCE","gluuCasaEnabled":false,"gluuCouchbaseBucketPrefix":"gluu","gluuCouchbaseCertFile":"/etc/certs/couchbase.crt","gluuCouchbaseCrt":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURlakNDQW1LZ0F3SUJBZ0lKQUwyem5UWlREUHFNTUEwR0NTcUdTSWIzRFFFQkN3VUFNQzB4S3pBcEJnTlYKQkFNTUlpb3VZMkpuYkhWMUxtUmxabUYxYkhRdWMzWmpMbU5zZFhOMFpYSXViRzlqWVd3d0hoY05NakF3TWpBMQpNRGt4T1RVeFdoY05NekF3TWpBeU1Ea3hPVFV4V2pBdE1Tc3dLUVlEVlFRRERDSXFMbU5pWjJ4MWRTNWtaV1poCmRXeDBMbk4yWXk1amJIVnpkR1Z5TG14dlkyRnNNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUIKQ2dLQ0FRRUFycmQ5T3lvSnRsVzhnNW5nWlJtL2FKWjJ2eUtubGU3dVFIUEw4Q2RJa1RNdjB0eHZhR1B5UkNQQgo3RE00RTFkLzhMaU5takdZZk41QjZjWjlRUmNCaG1VNmFyUDRKZUZ3c0x0cTFGT3MxaDlmWGo3d3NzcTYrYmlkCjV6Umw3UEE0YmdvOXVkUVRzU1UrWDJUUVRDc0dxVVVPWExrZ3NCMjI0RDNsdkFCbmZOeHcvYnFQa2ZCQTFxVzYKVXpxellMdHN6WE5GY0dQMFhtU3c4WjJuaFhhUGlva2pPT2dyMkMrbVFZK0htQ2xGUWRpd2g2ZjBYR0V0STMrKwoyMStTejdXRkF6RlFBVUp2MHIvZnk4TDRXZzh1YysvalgwTGQrc2NoQTlNQjh3YmJORUp2ZjNMOGZ5QjZ0cTd2CjF4b0FnL0g0S1dJaHdqSEN0dFVnWU1oU0xWV3UrUUlEQVFBQm80R2NNSUdaTUIwR0ExVWREZ1FXQkJTWmQxWU0KVGNIRVZjSENNUmp6ejczZitEVmxxREJkQmdOVkhTTUVWakJVZ0JTWmQxWU1UY0hFVmNIQ01Sanp6NzNmK0RWbApxS0V4cEM4d0xURXJNQ2tHQTFVRUF3d2lLaTVqWW1kc2RYVXVaR1ZtWVhWc2RDNXpkbU11WTJ4MWMzUmxjaTVzCmIyTmhiSUlKQUwyem5UWlREUHFNTUF3R0ExVWRFd1FGTUFNQkFmOHdDd1lEVlIwUEJBUURBZ0VHTUEwR0NTcUcKU0liM0RRRUJDd1VBQTRJQkFRQk9meTVWSHlKZCtWUTBXaUQ1aSs2cmhidGNpSmtFN0YwWVVVZnJ6UFN2YWVFWQp2NElVWStWOC9UNnE4Mk9vVWU1eCtvS2dzbFBsL01nZEg2SW9CRnVtaUFqek14RTdUYUhHcXJ5dk13Qk5IKzB5CnhadG9mSnFXQzhGeUlwTVFHTEs0RVBGd3VHRlJnazZMRGR2ZEN5NVdxWW1MQWdBZVh5VWNaNnlHYkdMTjRPUDUKZTFiaEFiLzRXWXRxRHVydFJrWjNEejlZcis4VWNCVTRLT005OHBZN05aaXFmKzlCZVkvOEhZaVQ2Q0RRWWgyTgoyK0VWRFBHcFE4UkVsRThhN1ZLL29MemlOaXFyRjllNDV1OU1KdjM1ZktmNUJjK2FKdWduTGcwaUZUYmNaT1prCkpuYkUvUENIUDZFWmxLaEFiZUdnendtS1dDbTZTL3g0TklRK2JtMmoKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=","gluuCouchbaseIndexNumReplica":0,"gluuCouchbasePass":"P@ssw0rd","gluuCouchbasePassFile":"/etc/gluu/conf/couchbase_password","gluuCouchbaseSuperUser":"admin","gluuCouchbaseSuperUserPass":"P@ssw0rd","gluuCouchbaseSuperUserPassFile":"/etc/gluu/conf/couchbase_superuser_password","gluuCouchbaseUrl":"cbgluu.default.svc.cluster.local","gluuCouchbaseUser":"gluu","gluuDocumentStoreType":"DB","gluuJackrabbitAdminId":"admin","gluuJackrabbitAdminIdFile":"/etc/gluu/conf/jackrabbit_admin_id","gluuJackrabbitAdminPassFile":"/etc/gluu/conf/jackrabbit_admin_password","gluuJackrabbitPostgresDatabaseName":"jackrabbit","gluuJackrabbitPostgresHost":"postgresql.postgres.svc.cluster.local","gluuJackrabbitPostgresPasswordFile":"/etc/gluu/conf/postgres_password","gluuJackrabbitPostgresPort":5432,"gluuJackrabbitPostgresUser":"jackrabbit","gluuJackrabbitSyncInterval":300,"gluuJackrabbitUrl":"http://jackrabbit:8080","gluuLdapUrl":"opendj:1636","gluuMaxRamPercent":"75.0","gluuOxauthBackend":"oxauth:8080","gluuOxdAdminCertCn":"oxd-server","gluuOxdApplicationCertCn":"oxd-server","gluuOxdBindIpAddresses":"*","gluuOxdServerUrl":"oxd-server:8443","gluuOxtrustApiEnabled":false,"gluuOxtrustApiTestMode":false,"gluuOxtrustBackend":"oxtrust:8080","gluuOxtrustConfigGeneration":true,"gluuPassportEnabled":false,"gluuPassportFailureRedirectUrl":"","gluuPersistenceLdapMapping":"default","gluuRedisSentinelGroup":"","gluuRedisSslTruststore":"","gluuRedisType":"STANDALONE","gluuRedisUrl":"redis:6379","gluuRedisUseSsl":"false","gluuSamlEnabled":false,"gluuScimProtectionMode":"OAUTH","gluuSyncCasaManifests":false,"gluuSyncShibManifests":false,"lbAddr":""},"countryCode":"US","customScripts":[],"dnsConfig":{},"dnsPolicy":"","email":"support@gluu.com","image":{"pullSecrets":[],"repository":"gluufederation/config-init","tag":"4.5.3-1"},"ldapPass":"P@ssw0rd","lifecycle":{},"migration":{"enabled":false,"migrationDataFormat":"ldif","migrationDir":"/ce-migration"},"nodeSelector":{},"orgName":"Gluu","redisPass":"P@assw0rd","resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"salt":"","state":"TX","tolerations":[],"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Configuration parameters for setup and initial configuration secret and config layers used by Gluu services. | | config.additionalAnnotations | object | `{}` | Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | config.additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | config.adminPass | string | `"P@ssw0rd"` | Admin password to log in to the UI. | @@ -149,6 +150,7 @@ Kubernetes: `>=v1.22.0-0` | config.configmap.gluuSyncShibManifests | bool | `false` | Activate manual Shib files sync - depreciated | | config.configmap.lbAddr | string | `""` | Loadbalancer address for AWS if the FQDN is not registered. | | config.countryCode | string | `"US"` | Country code. Used for certificate creation. | +| config.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | | config.dnsConfig | object | `{}` | Add custom dns config | | config.dnsPolicy | string | `""` | Add custom dns policy | | config.email | string | `"support@gluu.com"` | Email address of the administrator usually. Used for certificate creation. | @@ -199,10 +201,11 @@ Kubernetes: `>=v1.22.0-0` | cr-rotate.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | cr-rotate.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | cr-rotate.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| fido2 | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/fido2","tag":"4.5.3-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/fido2/restv1/fido2/configuration","port":"http-fido2"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"nodeSelector":{},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/fido2/restv1/fido2/configuration","port":"http-fido2"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"500Mi"},"requests":{"cpu":"500m","memory":"500Mi"}},"service":{"fido2ServiceName":"fido2","name":"http-fido2","port":8080},"tolerations":[],"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":{},"affinity":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/fido2","tag":"4.5.3-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/fido2/restv1/fido2/configuration","port":"http-fido2"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"nodeSelector":{},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/fido2/restv1/fido2/configuration","port":"http-fido2"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"500m","memory":"500Mi"},"requests":{"cpu":"500m","memory":"500Mi"}},"service":{"fido2ServiceName":"fido2","name":"http-fido2","port":8080},"tolerations":[],"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 all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | fido2.additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | fido2.affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | +| fido2.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | | fido2.dnsConfig | object | `{}` | Add custom dns config | | fido2.dnsPolicy | string | `""` | Add custom dns policy | | fido2.hpa | object | `{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50}` | Configure the HorizontalPodAutoscaler | @@ -371,11 +374,12 @@ Kubernetes: `>=v1.22.0-0` | global.usrEnvs | object | `{"normal":{},"secret":{}}` | Add custom normal and secret envs to the service. Envs defined in global.userEnvs will be globally available to all services | | 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 | -| jackrabbit | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"clusterId":"","dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/jackrabbit","tag":"4.5.3-1"},"lifecycle":{},"livenessProbe":{"initialDelaySeconds":25,"periodSeconds":25,"tcpSocket":{"port":"http-jackrabbit"},"timeoutSeconds":5},"nodeSelector":{},"pdb":{"enabled":true,"maxUnavailable":1},"readinessProbe":{"initialDelaySeconds":30,"periodSeconds":30,"tcpSocket":{"port":"http-jackrabbit"},"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1500m","memory":"1000Mi"},"requests":{"cpu":"1500m","memory":"1000Mi"}},"secrets":{"gluuJackrabbitAdminPass":"Test1234#","gluuJackrabbitPostgresPass":"P@ssw0rd"},"service":{"jackRabbitServiceName":"jackrabbit","name":"http-jackrabbit","port":8080},"storage":{"size":"5Gi"},"tolerations":[],"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Jackrabbit Oak is a complementary implementation of the JCR specification. It is an effort to implement a scalable and performant hierarchical content repository for use as the foundation of modern world-class web sites and other demanding content applications https://jackrabbit.apache.org/jcr/index.html | +| jackrabbit | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"clusterId":"","customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/jackrabbit","tag":"4.5.3-1"},"lifecycle":{},"livenessProbe":{"initialDelaySeconds":25,"periodSeconds":25,"tcpSocket":{"port":"http-jackrabbit"},"timeoutSeconds":5},"nodeSelector":{},"pdb":{"enabled":true,"maxUnavailable":1},"readinessProbe":{"initialDelaySeconds":30,"periodSeconds":30,"tcpSocket":{"port":"http-jackrabbit"},"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1500m","memory":"1000Mi"},"requests":{"cpu":"1500m","memory":"1000Mi"}},"secrets":{"gluuJackrabbitAdminPass":"Test1234#","gluuJackrabbitPostgresPass":"P@ssw0rd"},"service":{"jackRabbitServiceName":"jackrabbit","name":"http-jackrabbit","port":8080},"storage":{"size":"5Gi"},"tolerations":[],"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Jackrabbit Oak is a complementary implementation of the JCR specification. It is an effort to implement a scalable and performant hierarchical content repository for use as the foundation of modern world-class web sites and other demanding content applications https://jackrabbit.apache.org/jcr/index.html | | jackrabbit.additionalAnnotations | object | `{}` | Additional annotations that will be added across the gateway in the format of {cert-manager.io/issuer: "letsencrypt-prod"} | | jackrabbit.additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | jackrabbit.affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | | jackrabbit.clusterId | string | `""` | This id needs to be unique to each kubernetes cluster in a multi cluster setup west, east, south, north, region ...etc If left empty it will be randomly generated. | +| jackrabbit.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | | jackrabbit.dnsConfig | object | `{}` | Add custom dns config | | jackrabbit.dnsPolicy | string | `""` | Add custom dns policy | | jackrabbit.hpa | object | `{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50}` | Configure the HorizontalPodAutoscaler | @@ -460,11 +464,12 @@ Kubernetes: `>=v1.22.0-0` | nginx-ingress.ingress.webfingerAdditionalAnnotations | object | `{}` | webfinger ingress resource additional annotations. | | nginx-ingress.ingress.webfingerEnabled | bool | `true` | Enable endpoint /.well-known/webfinger | | nginx-ingress.ingress.webfingerLabels | object | `{}` | webfinger ingress resource labels. key app is taken | -| opendj | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"backup":{"cronJobSchedule":"*/59 * * * *","enabled":true},"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/opendj","tag":"4.5.3-1"},"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},"nodeSelector":{},"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"}},"tolerations":[],"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":{},"affinity":{},"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":"4.5.3-1"},"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},"nodeSelector":{},"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"}},"tolerations":[],"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 all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | opendj.additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | opendj.affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | | opendj.backup | object | `{"cronJobSchedule":"*/59 * * * *","enabled":true}` | Configure ldap backup cronjob | +| opendj.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | | opendj.dnsConfig | object | `{}` | Add custom dns config | | opendj.dnsPolicy | string | `""` | Add custom dns policy | | opendj.hpa | object | `{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50}` | Configure the HorizontalPodAutoscaler | @@ -493,11 +498,12 @@ Kubernetes: `>=v1.22.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 | -| oxauth | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/oxauth","tag":"4.5.3-1"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"nodeSelector":{},"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"}},"service":{"name":"http-oxauth","oxAuthServiceName":"oxauth","port":8080},"tolerations":[],"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. | -| oxauth-key-rotation | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/certmanager","tag":"4.5.3-1"},"keysLife":48,"keysPushDelay":0,"keysPushStrategy":"NEWER","keysStrategy":"NEWER","lifecycle":{},"nodeSelector":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"tolerations":[],"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for regenerating auth-keys per x hours | +| oxauth | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/oxauth","tag":"4.5.3-1"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"nodeSelector":{},"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"}},"service":{"name":"http-oxauth","oxAuthServiceName":"oxauth","port":8080},"tolerations":[],"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. | +| oxauth-key-rotation | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/certmanager","tag":"4.5.3-1"},"keysLife":48,"keysPushDelay":0,"keysPushStrategy":"NEWER","keysStrategy":"NEWER","lifecycle":{},"nodeSelector":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"tolerations":[],"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Responsible for regenerating auth-keys per x hours | | oxauth-key-rotation.additionalAnnotations | object | `{}` | Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | oxauth-key-rotation.additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | oxauth-key-rotation.affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | +| oxauth-key-rotation.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | | oxauth-key-rotation.dnsConfig | object | `{}` | Add custom dns config | | oxauth-key-rotation.dnsPolicy | string | `""` | Add custom dns policy | | oxauth-key-rotation.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | @@ -522,6 +528,7 @@ Kubernetes: `>=v1.22.0-0` | oxauth.additionalAnnotations | object | `{}` | Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | oxauth.additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | oxauth.affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | +| oxauth.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | | oxauth.dnsConfig | object | `{}` | Add custom dns config | | oxauth.dnsPolicy | string | `""` | Add custom dns policy | | oxauth.hpa | object | `{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50}` | Configure the HorizontalPodAutoscaler | @@ -551,10 +558,11 @@ Kubernetes: `>=v1.22.0-0` | oxauth.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | oxauth.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | oxauth.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| oxd-server | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/oxd-server","tag":"4.5.3-1"},"lifecycle":{},"livenessProbe":{"exec":{"command":["curl","-k","https://localhost:8443/health-check"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"nodeSelector":{},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["curl","-k","https://localhost:8443/health-check"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"400Mi"},"requests":{"cpu":"1000m","memory":"400Mi"}},"service":{"oxdServerServiceName":"oxd-server"},"tolerations":[],"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Middleware API to help application developers call an OAuth, OpenID or UMA server. You may wonder why this is necessary. It makes it easier for client developers to use OpenID signing and encryption features, without becoming crypto experts. This API provides some high level endpoints to do some of the heavy lifting. | +| oxd-server | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/oxd-server","tag":"4.5.3-1"},"lifecycle":{},"livenessProbe":{"exec":{"command":["curl","-k","https://localhost:8443/health-check"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"nodeSelector":{},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"exec":{"command":["curl","-k","https://localhost:8443/health-check"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"400Mi"},"requests":{"cpu":"1000m","memory":"400Mi"}},"service":{"oxdServerServiceName":"oxd-server"},"tolerations":[],"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Middleware API to help application developers call an OAuth, OpenID or UMA server. You may wonder why this is necessary. It makes it easier for client developers to use OpenID signing and encryption features, without becoming crypto experts. This API provides some high level endpoints to do some of the heavy lifting. | | oxd-server.additionalAnnotations | object | `{}` | Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | oxd-server.additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | oxd-server.affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | +| oxd-server.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | | oxd-server.dnsConfig | object | `{}` | Add custom dns config | | oxd-server.dnsPolicy | string | `""` | Add custom dns policy | | oxd-server.hpa | object | `{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50}` | Configure the HorizontalPodAutoscaler | @@ -582,10 +590,11 @@ Kubernetes: `>=v1.22.0-0` | oxd-server.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | oxd-server.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | oxd-server.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| oxpassport | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/oxpassport","tag":"4.5.3-1"},"lifecycle":{},"livenessProbe":{"failureThreshold":20,"httpGet":{"path":"/passport/health-check","port":"http-passport"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"nodeSelector":{},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"failureThreshold":20,"httpGet":{"path":"/passport/health-check","port":"http-passport"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"700m","memory":"900Mi"},"requests":{"cpu":"700m","memory":"900Mi"}},"service":{"name":"http-passport","oxPassportServiceName":"oxpassport","port":8090},"tolerations":[],"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Gluu interface to Passport.js to support social login and inbound identity. | +| oxpassport | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/oxpassport","tag":"4.5.3-1"},"lifecycle":{},"livenessProbe":{"failureThreshold":20,"httpGet":{"path":"/passport/health-check","port":"http-passport"},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"nodeSelector":{},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"failureThreshold":20,"httpGet":{"path":"/passport/health-check","port":"http-passport"},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"700m","memory":"900Mi"},"requests":{"cpu":"700m","memory":"900Mi"}},"service":{"name":"http-passport","oxPassportServiceName":"oxpassport","port":8090},"tolerations":[],"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Gluu interface to Passport.js to support social login and inbound identity. | | oxpassport.additionalAnnotations | object | `{}` | Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | oxpassport.additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | oxpassport.affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | +| oxpassport.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | | oxpassport.dnsConfig | object | `{}` | Add custom dns config | | oxpassport.dnsPolicy | string | `""` | Add custom dns policy | | oxpassport.hpa | object | `{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50}` | Configure the HorizontalPodAutoscaler | @@ -616,10 +625,11 @@ Kubernetes: `>=v1.22.0-0` | oxpassport.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | oxpassport.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | oxpassport.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| oxshibboleth | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/oxshibboleth","tag":"4.5.3-3"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"nodeSelector":{},"pdb":{"enabled":true,"maxUnavailable":1},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1000Mi"},"requests":{"cpu":"1000m","memory":"1000Mi"}},"service":{"name":"http-oxshib","oxShibbolethServiceName":"oxshibboleth","port":8080,"sessionAffinity":"ClientIP"},"tolerations":[],"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Shibboleth project for the Gluu Server's SAML IDP functionality. | +| oxshibboleth | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/oxshibboleth","tag":"4.5.3-3"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"nodeSelector":{},"pdb":{"enabled":true,"maxUnavailable":1},"readinessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1000Mi"},"requests":{"cpu":"1000m","memory":"1000Mi"}},"service":{"name":"http-oxshib","oxShibbolethServiceName":"oxshibboleth","port":8080,"sessionAffinity":"ClientIP"},"tolerations":[],"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Shibboleth project for the Gluu Server's SAML IDP functionality. | | oxshibboleth.additionalAnnotations | object | `{}` | Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | oxshibboleth.additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | oxshibboleth.affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | +| oxshibboleth.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | | oxshibboleth.dnsConfig | object | `{}` | Add custom dns config | | oxshibboleth.dnsPolicy | string | `""` | Add custom dns policy | | oxshibboleth.hpa | object | `{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50}` | Configure the HorizontalPodAutoscaler | @@ -649,10 +659,11 @@ Kubernetes: `>=v1.22.0-0` | oxshibboleth.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | oxshibboleth.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | oxshibboleth.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| oxtrust | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/oxtrust","tag":"4.5.3-1"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"nodeSelector":{},"pdb":{"enabled":true,"maxUnavailable":1},"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"}},"service":{"clusterIp":"None","name":"http-oxtrust","oxTrustServiceName":"oxtrust","port":8080},"tolerations":[],"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Gluu Admin UI. This shouldn't be internet facing. | +| oxtrust | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/oxtrust","tag":"4.5.3-1"},"lifecycle":{},"livenessProbe":{"exec":{"command":["python3","/app/scripts/healthcheck.py"]},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"nodeSelector":{},"pdb":{"enabled":true,"maxUnavailable":1},"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"}},"service":{"clusterIp":"None","name":"http-oxtrust","oxTrustServiceName":"oxtrust","port":8080},"tolerations":[],"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Gluu Admin UI. This shouldn't be internet facing. | | oxtrust.additionalAnnotations | object | `{}` | Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | oxtrust.additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | oxtrust.affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | +| oxtrust.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | | oxtrust.dnsConfig | object | `{}` | Add custom dns config | | oxtrust.dnsPolicy | string | `""` | Add custom dns policy | | oxtrust.hpa | object | `{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50}` | Configure the HorizontalPodAutoscaler | @@ -682,10 +693,11 @@ Kubernetes: `>=v1.22.0-0` | oxtrust.usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | | oxtrust.volumeMounts | list | `[]` | Configure any additional volumesMounts that need to be attached to the containers | | oxtrust.volumes | list | `[]` | Configure any additional volumes that need to be attached to the pod | -| persistence | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/persistence","tag":"4.5.3-1"},"lifecycle":{},"nodeSelector":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"tolerations":[],"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | Job to generate data and initial config for Gluu Server persistence layer. | +| persistence | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/persistence","tag":"4.5.3-1"},"lifecycle":{},"nodeSelector":{},"resources":{"limits":{"cpu":"300m","memory":"300Mi"},"requests":{"cpu":"300m","memory":"300Mi"}},"tolerations":[],"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 all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | persistence.additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | persistence.affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | +| persistence.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | | persistence.dnsConfig | object | `{}` | Add custom dns config | | persistence.dnsPolicy | string | `""` | Add custom dns policy | | persistence.image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | @@ -703,10 +715,11 @@ Kubernetes: `>=v1.22.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 | -| scim | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/scim","tag":"4.5.3-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/scim/restv1/scim/v2/ServiceProviderConfig","port":8080},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"nodeSelector":{},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/scim/restv1/scim/v2/ServiceProviderConfig","port":8080},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1000Mi"},"requests":{"cpu":"1000m","memory":"1000Mi"}},"service":{"name":"http-scim","port":8080,"scimServiceName":"scim"},"tolerations":[],"topologySpreadConstraints":{},"usrEnvs":{"normal":{},"secret":{}},"volumeMounts":[],"volumes":[]}` | System for Cross-domain Identity Management (SCIM) version 2.0 | +| scim | object | `{"additionalAnnotations":{},"additionalLabels":{},"affinity":{},"customScripts":[],"dnsConfig":{},"dnsPolicy":"","hpa":{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50},"image":{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"gluufederation/scim","tag":"4.5.3-1"},"lifecycle":{},"livenessProbe":{"httpGet":{"path":"/scim/restv1/scim/v2/ServiceProviderConfig","port":8080},"initialDelaySeconds":30,"periodSeconds":30,"timeoutSeconds":5},"nodeSelector":{},"pdb":{"enabled":true,"maxUnavailable":"90%"},"readinessProbe":{"httpGet":{"path":"/scim/restv1/scim/v2/ServiceProviderConfig","port":8080},"initialDelaySeconds":25,"periodSeconds":25,"timeoutSeconds":5},"replicas":1,"resources":{"limits":{"cpu":"1000m","memory":"1000Mi"},"requests":{"cpu":"1000m","memory":"1000Mi"}},"service":{"name":"http-scim","port":8080,"scimServiceName":"scim"},"tolerations":[],"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 all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | scim.additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | scim.affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | +| scim.customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. - /tmp/custom.sh - /tmp/custom2.sh | | scim.dnsConfig | object | `{}` | Add custom dns config | | scim.dnsPolicy | string | `""` | Add custom dns policy | | scim.hpa | object | `{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50}` | Configure the HorizontalPodAutoscaler | diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/casa/Chart.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/casa/Chart.yaml index 84f6f51a..cc70fdb3 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/casa/Chart.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/casa/Chart.yaml @@ -2,7 +2,7 @@ # https://www.apache.org/licenses/LICENSE-2.0 apiVersion: v2 name: casa -version: 1.8.28 +version: 1.8.29 kubeVersion: ">=v1.22.0-0" description: Gluu Casa ("Casa") is a self-service web portal for end-users to manage authentication and authorization preferences for their account in a Gluu Server. type: application diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/casa/README.md b/pygluu/kubernetes/templates/helm/gluu/charts/casa/README.md index e4641f17..4a172eaa 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/casa/README.md +++ b/pygluu/kubernetes/templates/helm/gluu/charts/casa/README.md @@ -1,6 +1,6 @@ # casa -![Version: 1.8.28](https://img.shields.io/badge/Version-1.8.28-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) +![Version: 1.8.29](https://img.shields.io/badge/Version-1.8.29-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) Gluu Casa ("Casa") is a self-service web portal for end-users to manage authentication and authorization preferences for their account in a Gluu Server. @@ -29,6 +29,7 @@ Kubernetes: `>=v1.22.0-0` | additionalAnnotations | object | `{}` | Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | +| customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. | | dnsConfig | object | `{}` | Add custom dns config | | dnsPolicy | string | `""` | Add custom dns policy | | fullnameOverride | string | `""` | | diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/casa/templates/deployment.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/casa/templates/deployment.yaml index 0544fb3a..b53c0e25 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/casa/templates/deployment.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/casa/templates/deployment.yaml @@ -81,14 +81,19 @@ spec: env: {{- include "casa.usr-envs" . | indent 12 }} {{- include "casa.usr-secret-envs" . | indent 12 }} - {{- if and (eq .Values.global.isDomainRegistered "false") (or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local")) }} + {{- if or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local") ( .Values.customScripts) }} command: - /bin/sh - -c - | + {{- with .Values.customScripts }} + {{- toYaml . | replace "- " "" | nindent 16}} + {{- end }} + {{- if and (not .Values.global.isDomainRegistered ) (or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local")) }} /usr/bin/python3 /scripts/updatelbip.py & + {{- end}} /app/scripts/entrypoint.sh - {{- end }} + {{- end}} imagePullPolicy: {{ .Values.image.pullPolicy }} ports: - name: {{ .Values.service.name }} diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/casa/values.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/casa/values.yaml index d9003e41..aea0881c 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/casa/values.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/casa/values.yaml @@ -113,3 +113,5 @@ tolerations: [] # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} +# -- Add custom scripts that have been mounted to run before the entrypoint. +customScripts: [] \ No newline at end of file diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/config/Chart.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/config/Chart.yaml index 7c60eeb3..c4760f11 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/config/Chart.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/config/Chart.yaml @@ -2,7 +2,7 @@ # https://www.apache.org/licenses/LICENSE-2.0 apiVersion: v2 name: config -version: 1.8.28 +version: 1.8.29 kubeVersion: ">=v1.22.0-0" description: Configuration parameters for setup and initial configuration secret and config layers used by Gluu services. type: application diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/config/README.md b/pygluu/kubernetes/templates/helm/gluu/charts/config/README.md index 43689822..c7cbd912 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/config/README.md +++ b/pygluu/kubernetes/templates/helm/gluu/charts/config/README.md @@ -1,6 +1,6 @@ # config -![Version: 1.8.28](https://img.shields.io/badge/Version-1.8.28-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) +![Version: 1.8.29](https://img.shields.io/badge/Version-1.8.29-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) Configuration parameters for setup and initial configuration secret and config layers used by Gluu services. @@ -102,6 +102,7 @@ Kubernetes: `>=v1.22.0-0` | configmap.gluuSyncShibManifests | bool | `false` | Activate manual Shib files sync - depreciated | | configmap.lbAddr | string | `""` | Loadbalancer address for AWS if the FQDN is not registered. | | countryCode | string | `"US"` | Country code. Used for certificate creation. | +| customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. | | dnsConfig | object | `{}` | Add custom dns config | | dnsPolicy | string | `""` | Add custom dns policy | | email | string | `"support@gluu.com"` | Email address of the administrator usually. Used for certificate creation. | diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/config/templates/load-init-config.yml b/pygluu/kubernetes/templates/helm/gluu/charts/config/templates/load-init-config.yml index 5ee0c541..ad982dff 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/config/templates/load-init-config.yml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/config/templates/load-init-config.yml @@ -145,6 +145,9 @@ spec: - /bin/sh - -c - | + {{- with .Values.customScripts }} + {{- toYaml . | replace "- " "" | nindent 14}} + {{- end }} {{- if .Values.migration.enabled }} /app/scripts/entrypoint.sh migrate --migration-dir {{ .Values.migration.migrationDir | quote }} --data-format {{ .Values.migration.migrationDataFormat | quote }} {{- else }} diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/config/values.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/config/values.yaml index 514ea7df..ff12a5bb 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/config/values.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/config/values.yaml @@ -230,3 +230,5 @@ tolerations: [] # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} +# -- Add custom scripts that have been mounted to run before the entrypoint. +customScripts: [] \ No newline at end of file diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/cr-rotate/Chart.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/cr-rotate/Chart.yaml index 0ff68878..a2d62ddd 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/cr-rotate/Chart.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/cr-rotate/Chart.yaml @@ -2,7 +2,7 @@ # https://www.apache.org/licenses/LICENSE-2.0 apiVersion: v2 name: cr-rotate -version: 1.8.28 +version: 1.8.29 kubeVersion: ">=v1.22.0-0" description: CacheRefreshRotation is a special container to monitor cache refresh on oxTrust containers. This may become depreciated in 5.0. type: application diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/cr-rotate/README.md b/pygluu/kubernetes/templates/helm/gluu/charts/cr-rotate/README.md index c8bf2fbd..30a5e530 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/cr-rotate/README.md +++ b/pygluu/kubernetes/templates/helm/gluu/charts/cr-rotate/README.md @@ -1,6 +1,6 @@ # cr-rotate -![Version: 1.8.28](https://img.shields.io/badge/Version-1.8.28-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) +![Version: 1.8.29](https://img.shields.io/badge/Version-1.8.29-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) CacheRefreshRotation is a special container to monitor cache refresh on oxTrust containers. This may become depreciated in 5.0. diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/fido2/Chart.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/fido2/Chart.yaml index 9ace52a5..48bd3a75 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/fido2/Chart.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/fido2/Chart.yaml @@ -2,7 +2,7 @@ # https://www.apache.org/licenses/LICENSE-2.0 apiVersion: v2 name: fido2 -version: 1.8.28 +version: 1.8.29 kubeVersion: ">=v1.22.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 diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/fido2/README.md b/pygluu/kubernetes/templates/helm/gluu/charts/fido2/README.md index 362a122a..eefb66ed 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/fido2/README.md +++ b/pygluu/kubernetes/templates/helm/gluu/charts/fido2/README.md @@ -1,6 +1,6 @@ # fido2 -![Version: 1.8.28](https://img.shields.io/badge/Version-1.8.28-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) +![Version: 1.8.29](https://img.shields.io/badge/Version-1.8.29-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-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. @@ -29,6 +29,7 @@ Kubernetes: `>=v1.22.0-0` | additionalAnnotations | object | `{}` | Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | +| customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. | | dnsConfig | object | `{}` | Add custom dns config | | dnsPolicy | string | `""` | Add custom dns policy | | hpa | object | `{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50}` | Configure the HorizontalPodAutoscaler | diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/fido2/templates/deployment.yml b/pygluu/kubernetes/templates/helm/gluu/charts/fido2/templates/deployment.yml index 7ed33e2b..bae157d4 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/fido2/templates/deployment.yml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/fido2/templates/deployment.yml @@ -80,7 +80,12 @@ spec: - /bin/sh - -c - | + {{- with .Values.customScripts }} + {{- toYaml . | replace "- " "" | nindent 14}} + {{- end }} + {{- if and (not .Values.global.isDomainRegistered ) (or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local")) }} /usr/bin/python3 /scripts/updatelbip.py & + {{- end}} /app/scripts/entrypoint.sh {{- end}} ports: diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/fido2/values.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/fido2/values.yaml index ff56b48d..9f17c047 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/fido2/values.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/fido2/values.yaml @@ -98,3 +98,5 @@ tolerations: [] # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} +# -- Add custom scripts that have been mounted to run before the entrypoint. +customScripts: [] \ No newline at end of file diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/gluu-alb-ingress/Chart.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/gluu-alb-ingress/Chart.yaml index dba113ac..6aa15630 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/gluu-alb-ingress/Chart.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/gluu-alb-ingress/Chart.yaml @@ -2,7 +2,7 @@ # https://www.apache.org/licenses/LICENSE-2.0 apiVersion: v2 name: gluu-alb-ingress -version: 1.8.28 +version: 1.8.29 kubeVersion: ">=v1.22.0-0" description: Nginx ingress definitions chart type: application diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/gluu-alb-ingress/README.md b/pygluu/kubernetes/templates/helm/gluu/charts/gluu-alb-ingress/README.md index ec3549c2..09222531 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/gluu-alb-ingress/README.md +++ b/pygluu/kubernetes/templates/helm/gluu/charts/gluu-alb-ingress/README.md @@ -1,6 +1,6 @@ # gluu-alb-ingress -![Version: 1.8.28](https://img.shields.io/badge/Version-1.8.28-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) +![Version: 1.8.29](https://img.shields.io/badge/Version-1.8.29-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) Nginx ingress definitions chart diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/gluu-istio-ingress/Chart.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/gluu-istio-ingress/Chart.yaml index e8d851c4..e6b53da2 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/gluu-istio-ingress/Chart.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/gluu-istio-ingress/Chart.yaml @@ -2,7 +2,7 @@ # https://www.apache.org/licenses/LICENSE-2.0 apiVersion: v2 name: gluu-istio-ingress -version: 1.8.28 +version: 1.8.29 kubeVersion: ">=v1.22.0-0" description: Istio Gateway type: application diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/gluu-istio-ingress/README.md b/pygluu/kubernetes/templates/helm/gluu/charts/gluu-istio-ingress/README.md index d172248d..503e35ec 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/gluu-istio-ingress/README.md +++ b/pygluu/kubernetes/templates/helm/gluu/charts/gluu-istio-ingress/README.md @@ -1,6 +1,6 @@ # gluu-istio-ingress -![Version: 1.8.28](https://img.shields.io/badge/Version-1.8.28-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) +![Version: 1.8.29](https://img.shields.io/badge/Version-1.8.29-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) Istio Gateway diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/jackrabbit/Chart.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/jackrabbit/Chart.yaml index 35adf822..36c1b4f5 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/jackrabbit/Chart.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/jackrabbit/Chart.yaml @@ -2,7 +2,7 @@ # https://www.apache.org/licenses/LICENSE-2.0 apiVersion: v2 name: jackrabbit -version: 1.8.28 +version: 1.8.29 kubeVersion: ">=v1.22.0-0" description: Jackrabbit Oak is a complementary implementation of the JCR specification. It is an effort to implement a scalable and performant hierarchical content repository for use as the foundation of modern world-class web sites and other demanding content applications. type: application diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/jackrabbit/README.md b/pygluu/kubernetes/templates/helm/gluu/charts/jackrabbit/README.md index 9756cf2a..3571da54 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/jackrabbit/README.md +++ b/pygluu/kubernetes/templates/helm/gluu/charts/jackrabbit/README.md @@ -1,6 +1,6 @@ # jackrabbit -![Version: 1.8.28](https://img.shields.io/badge/Version-1.8.28-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) +![Version: 1.8.29](https://img.shields.io/badge/Version-1.8.29-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) Jackrabbit Oak is a complementary implementation of the JCR specification. It is an effort to implement a scalable and performant hierarchical content repository for use as the foundation of modern world-class web sites and other demanding content applications. @@ -31,6 +31,7 @@ Kubernetes: `>=v1.22.0-0` | additionalLabels | object | `{}` | Additional labels that will be added across the gateway in the format of {mylabel: "myapp"} | | affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | | clusterId | string | `""` | This id needs to be unique to each kubernetes cluster in a multi cluster setup west, east, south, north, region ...etc If left empty it will be randomly generated. | +| customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. | | dnsConfig | object | `{}` | Add custom dns config | | dnsPolicy | string | `""` | Add custom dns policy | | fullnameOverride | string | `""` | | diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/jackrabbit/templates/statefulset.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/jackrabbit/templates/statefulset.yaml index 7f958e8e..84313bcb 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/jackrabbit/templates/statefulset.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/jackrabbit/templates/statefulset.yaml @@ -98,6 +98,16 @@ spec: {{- end }} containers: - name: {{ include "jackrabbit.name" . }} + {{- if .Values.customScripts }} + command: + - /bin/sh + - -c + - | + {{- with .Values.customScripts }} + {{- toYaml . | replace "- " "" | nindent 14}} + {{- end }} + /app/scripts/entrypoint.sh + {{- end}} lifecycle: {{- toYaml .Values.lifecycle | nindent 10 }} securityContext: diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/jackrabbit/values.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/jackrabbit/values.yaml index 75e682b7..0c41c699 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/jackrabbit/values.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/jackrabbit/values.yaml @@ -126,3 +126,5 @@ tolerations: [] # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} +# -- Add custom scripts that have been mounted to run before the entrypoint. +customScripts: [] \ No newline at end of file diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/nginx-ingress/Chart.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/nginx-ingress/Chart.yaml index e6783c82..430ddb25 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/nginx-ingress/Chart.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/nginx-ingress/Chart.yaml @@ -2,7 +2,7 @@ # https://www.apache.org/licenses/LICENSE-2.0 apiVersion: v2 name: nginx-ingress -version: 1.8.28 +version: 1.8.29 kubeVersion: ">=v1.22.0-0" description: Nginx ingress definitions chart type: application diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/nginx-ingress/README.md b/pygluu/kubernetes/templates/helm/gluu/charts/nginx-ingress/README.md index dc6a1cfd..a4aa9661 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/nginx-ingress/README.md +++ b/pygluu/kubernetes/templates/helm/gluu/charts/nginx-ingress/README.md @@ -1,6 +1,6 @@ # nginx-ingress -![Version: 1.8.28](https://img.shields.io/badge/Version-1.8.28-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) +![Version: 1.8.29](https://img.shields.io/badge/Version-1.8.29-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) Nginx ingress definitions chart diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/opendj/README.md b/pygluu/kubernetes/templates/helm/gluu/charts/opendj/README.md index 1baf4dfa..cfe1fb45 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/opendj/README.md +++ b/pygluu/kubernetes/templates/helm/gluu/charts/opendj/README.md @@ -28,6 +28,7 @@ Kubernetes: `>=v1.22.0-0` | additionalAnnotations | object | `{}` | Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | +| customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. | | dnsConfig | object | `{}` | Add custom dns config | | dnsPolicy | string | `""` | Add custom dns policy | | fullnameOverride | string | `""` | | diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/opendj/templates/statefulset.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/opendj/templates/statefulset.yaml index 1453ef47..945add21 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/opendj/templates/statefulset.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/opendj/templates/statefulset.yaml @@ -70,6 +70,16 @@ spec: fsGroup: 1000 containers: - name: {{ include "opendj.name" $ }} + {{- if .Values.customScripts }} + command: + - /bin/sh + - -c + - | + {{- with .Values.customScripts }} + {{- toYaml . | replace "- " "" | nindent 14}} + {{- end }} + /app/scripts/entrypoint.sh + {{- end}} lifecycle: {{- toYaml .Values.lifecycle | nindent 10 }} securityContext: diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/opendj/values.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/opendj/values.yaml index de4c6fe7..38dc9b2c 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/opendj/values.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/opendj/values.yaml @@ -141,3 +141,5 @@ tolerations: [] # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} +# -- Add custom scripts that have been mounted to run before the entrypoint. +customScripts: [] \ No newline at end of file diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxauth-key-rotation/README.md b/pygluu/kubernetes/templates/helm/gluu/charts/oxauth-key-rotation/README.md index 0bc1828d..044a1916 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxauth-key-rotation/README.md +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxauth-key-rotation/README.md @@ -28,6 +28,7 @@ Kubernetes: `>=v1.22.0-0` | additionalAnnotations | object | `{}` | Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | affinity | object | `{}` | | +| customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. | | dnsConfig | object | `{}` | Add custom dns config | | dnsPolicy | string | `""` | Add custom dns policy | | image.pullPolicy | string | `"IfNotPresent"` | Image pullPolicy to use for deploying. | diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxauth-key-rotation/templates/cronjobs.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/oxauth-key-rotation/templates/cronjobs.yaml index 0d7be68f..57fa5cda 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxauth-key-rotation/templates/cronjobs.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxauth-key-rotation/templates/cronjobs.yaml @@ -47,6 +47,16 @@ spec: {{- end }} containers: - name: {{ include "oxauth-key-rotation.name" . }} + {{- if .Values.customScripts }} + command: + - /bin/sh + - -c + - | + {{- with .Values.customScripts }} + {{- toYaml . | replace "- " "" | nindent 20}} + {{- end }} + /app/scripts/entrypoint.sh + {{- end}} lifecycle: {{- toYaml .Values.lifecycle | nindent 16 }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxauth-key-rotation/values.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/oxauth-key-rotation/values.yaml index 171ae1c0..6fba2225 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxauth-key-rotation/values.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxauth-key-rotation/values.yaml @@ -64,3 +64,5 @@ affinity: {} additionalLabels: { } # -- Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken additionalAnnotations: { } +# -- Add custom scripts that have been mounted to run before the entrypoint. +customScripts: [] \ No newline at end of file diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxauth/Chart.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/oxauth/Chart.yaml index ecfbc87a..60a28a60 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxauth/Chart.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxauth/Chart.yaml @@ -2,7 +2,7 @@ # https://www.apache.org/licenses/LICENSE-2.0 apiVersion: v2 name: oxauth -version: 1.8.28 +version: 1.8.29 kubeVersion: ">=v1.22.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 diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxauth/README.md b/pygluu/kubernetes/templates/helm/gluu/charts/oxauth/README.md index e1e38c22..4d36158d 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxauth/README.md +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxauth/README.md @@ -1,6 +1,6 @@ # oxauth -![Version: 1.8.28](https://img.shields.io/badge/Version-1.8.28-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) +![Version: 1.8.29](https://img.shields.io/badge/Version-1.8.29-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-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. @@ -28,6 +28,7 @@ Kubernetes: `>=v1.22.0-0` | additionalAnnotations | object | `{}` | Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | +| customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. | | dnsConfig | object | `{}` | Add custom dns config | | dnsPolicy | string | `""` | Add custom dns policy | | hpa | object | `{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50}` | Configure the HorizontalPodAutoscaler | diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxauth/templates/deployment.yml b/pygluu/kubernetes/templates/helm/gluu/charts/oxauth/templates/deployment.yml index 69346d61..d3cc41d9 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxauth/templates/deployment.yml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxauth/templates/deployment.yml @@ -73,12 +73,17 @@ spec: env: {{- include "oxauth.usr-envs" . | indent 12 }} {{- include "oxauth.usr-secret-envs" . | indent 12 }} - {{- if and (eq .Values.global.isDomainRegistered "false") (or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local")) }} + {{- if or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local") ( .Values.customScripts) }} command: - /bin/sh - -c - | + {{- with .Values.customScripts }} + {{- toYaml . | replace "- " "" | nindent 14}} + {{- end }} + {{- if and (not .Values.global.isDomainRegistered ) (or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local")) }} /usr/bin/python3 /scripts/updatelbip.py & + {{- end}} /app/scripts/entrypoint.sh {{- end}} ports: diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxauth/values.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/oxauth/values.yaml index 88fa852d..82ca04bd 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxauth/values.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxauth/values.yaml @@ -101,3 +101,5 @@ tolerations: [] # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} +# -- Add custom scripts that have been mounted to run before the entrypoint. +customScripts: [] \ No newline at end of file diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxd-server/Chart.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/oxd-server/Chart.yaml index f3ab20dc..2112f116 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxd-server/Chart.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxd-server/Chart.yaml @@ -2,7 +2,7 @@ # https://www.apache.org/licenses/LICENSE-2.0 apiVersion: v2 name: oxd-server -version: 1.8.28 +version: 1.8.29 kubeVersion: ">=v1.22.0-0" description: Middleware API to help application developers call an OAuth, OpenID or UMA server. You may wonder why this is necessary. It makes it easier for client developers to use OpenID signing and encryption features, without becoming crypto experts. This API provides some high level endpoints to do some of the heavy lifting. type: application diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxd-server/README.md b/pygluu/kubernetes/templates/helm/gluu/charts/oxd-server/README.md index 0c65b237..63a7dfcb 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxd-server/README.md +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxd-server/README.md @@ -1,6 +1,6 @@ # oxd-server -![Version: 1.8.28](https://img.shields.io/badge/Version-1.8.28-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) +![Version: 1.8.29](https://img.shields.io/badge/Version-1.8.29-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) Middleware API to help application developers call an OAuth, OpenID or UMA server. You may wonder why this is necessary. It makes it easier for client developers to use OpenID signing and encryption features, without becoming crypto experts. This API provides some high level endpoints to do some of the heavy lifting. @@ -28,6 +28,7 @@ Kubernetes: `>=v1.22.0-0` | additionalAnnotations | object | `{}` | Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | affinity | object | `{}` | | +| customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. | | dnsConfig | object | `{}` | Add custom dns config | | dnsPolicy | string | `""` | Add custom dns policy | | hpa | object | `{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50}` | Configure the HorizontalPodAutoscaler | diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxd-server/templates/deployment.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/oxd-server/templates/deployment.yaml index 51e7c5c8..8e7502bc 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxd-server/templates/deployment.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxd-server/templates/deployment.yaml @@ -75,12 +75,17 @@ spec: {{- include "oxd-server.usr-envs" . | indent 12 }} {{- include "oxd-server.usr-secret-envs" . | indent 12 }} imagePullPolicy: {{ .Values.image.pullPolicy }} - {{- if and (eq .Values.global.isDomainRegistered "false") (or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local")) }} + {{- if or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local") ( .Values.customScripts) }} command: - /bin/sh - - -c + - -c - | + {{- with .Values.customScripts }} + {{- toYaml . | replace "- " "" | nindent 16}} + {{- end }} + {{- if and (not .Values.global.isDomainRegistered ) (or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local")) }} /usr/bin/python3 /scripts/updatelbip.py & + {{- end}} /app/scripts/entrypoint.sh {{- end }} ports: diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxd-server/values.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/oxd-server/values.yaml index ea7bc09f..512a7c0b 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxd-server/values.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxd-server/values.yaml @@ -98,3 +98,5 @@ affinity: {} additionalLabels: { } # -- Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken additionalAnnotations: { } +# -- Add custom scripts that have been mounted to run before the entrypoint. +customScripts: [] \ No newline at end of file diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxpassport/Chart.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/oxpassport/Chart.yaml index cf09119c..ddac5467 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxpassport/Chart.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxpassport/Chart.yaml @@ -2,7 +2,7 @@ # https://www.apache.org/licenses/LICENSE-2.0 apiVersion: v2 name: oxpassport -version: 1.8.28 +version: 1.8.29 kubeVersion: ">=v1.22.0-0" description: Gluu interface to Passport.js to support social login and inbound identity. type: application diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxpassport/README.md b/pygluu/kubernetes/templates/helm/gluu/charts/oxpassport/README.md index 1eec7990..fe9d142c 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxpassport/README.md +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxpassport/README.md @@ -1,6 +1,6 @@ # oxpassport -![Version: 1.8.28](https://img.shields.io/badge/Version-1.8.28-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) +![Version: 1.8.29](https://img.shields.io/badge/Version-1.8.29-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) Gluu interface to Passport.js to support social login and inbound identity. @@ -28,6 +28,7 @@ Kubernetes: `>=v1.22.0-0` | additionalAnnotations | object | `{}` | Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | affinity | object | `{}` | | +| customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. | | dnsConfig | object | `{}` | Add custom dns config | | dnsPolicy | string | `""` | Add custom dns policy | | fullnameOverride | string | `""` | | @@ -56,8 +57,8 @@ Kubernetes: `>=v1.22.0-0` | service.port | int | `8090` | Port of the oxPassport service. Please keep it as default. | | service.sessionAffinity | string | `"None"` | Default set to None If you want to make sure that connections from a particular client are passed to the same Pod each time, you can select the session affinity based on the client's IP addresses by setting this to ClientIP | | service.sessionAffinityConfig | object | `{"clientIP":{"timeoutSeconds":10800}}` | the maximum session sticky time if sessionAffinity is ClientIP | -| tolerations | list | `[]` | | | tolerations | list | `[]` | https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ | +| tolerations | list | `[]` | | | usrEnvs | object | `{"normal":{},"secret":{}}` | Add custom normal and secret envs to the service | | usrEnvs.normal | object | `{}` | Add custom normal envs to the service variable1: value1 | | usrEnvs.secret | object | `{}` | Add custom secret envs to the service variable1: value1 | diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxpassport/templates/deployment.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/oxpassport/templates/deployment.yaml index 1887532f..dabc678b 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxpassport/templates/deployment.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxpassport/templates/deployment.yaml @@ -77,12 +77,17 @@ spec: {{- include "oxpassport.usr-envs" . | indent 12 }} {{- include "oxpassport.usr-secret-envs" . | indent 12 }} imagePullPolicy: {{ .Values.image.pullPolicy }} - {{- if and (eq .Values.global.isDomainRegistered "false") (or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local")) }} + {{- if or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local") ( .Values.customScripts) }} command: - /bin/sh - -c - | + {{- with .Values.customScripts }} + {{- toYaml . | replace "- " "" | nindent 14}} + {{- end }} + {{- if and (not .Values.global.isDomainRegistered ) (or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local")) }} /usr/bin/python3 /scripts/updatelbip.py & + {{- end}} /app/scripts/entrypoint.sh {{- end }} ports: diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxpassport/values.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/oxpassport/values.yaml index 3a2cdf51..5d2351e3 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxpassport/values.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxpassport/values.yaml @@ -106,3 +106,5 @@ additionalLabels: { } additionalAnnotations: { } # -- https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ tolerations: [] +# -- Add custom scripts that have been mounted to run before the entrypoint. +customScripts: [] \ No newline at end of file diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxshibboleth/Chart.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/oxshibboleth/Chart.yaml index fd40584c..db9c8752 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxshibboleth/Chart.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxshibboleth/Chart.yaml @@ -2,7 +2,7 @@ # https://www.apache.org/licenses/LICENSE-2.0 apiVersion: v2 name: oxshibboleth -version: 1.8.28 +version: 1.8.29 kubeVersion: ">=v1.22.0-0" description: Shibboleth project for the Gluu Server's SAML IDP functionality. type: application diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxshibboleth/README.md b/pygluu/kubernetes/templates/helm/gluu/charts/oxshibboleth/README.md index 05c749bb..881dc4c4 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxshibboleth/README.md +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxshibboleth/README.md @@ -1,6 +1,6 @@ # oxshibboleth -![Version: 1.8.28](https://img.shields.io/badge/Version-1.8.28-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) +![Version: 1.8.29](https://img.shields.io/badge/Version-1.8.29-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) Shibboleth project for the Gluu Server's SAML IDP functionality. @@ -28,6 +28,7 @@ Kubernetes: `>=v1.22.0-0` | additionalAnnotations | object | `{}` | Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | affinity | object | `{}` | | +| customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. | | dnsConfig | object | `{}` | Add custom dns config | | dnsPolicy | string | `""` | Add custom dns policy | | fullnameOverride | string | `""` | | diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxshibboleth/templates/statefulset.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/oxshibboleth/templates/statefulset.yaml index a6967b93..12190fd2 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxshibboleth/templates/statefulset.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxshibboleth/templates/statefulset.yaml @@ -80,12 +80,17 @@ spec: - name: GLUU_JAVA_OPTIONS value: {{ include "oxshibboleth.detailedLogs" . | trim }} imagePullPolicy: {{ .Values.image.pullPolicy }} - {{- if and (eq .Values.global.isDomainRegistered "false") (or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local")) }} + {{- if or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local") ( .Values.customScripts) }} command: - /bin/sh - -c - | + {{- with .Values.customScripts }} + {{- toYaml . | replace "- " "" | nindent 14}} + {{- end }} + {{- if and (not .Values.global.isDomainRegistered ) (or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local")) }} /usr/bin/python3 /scripts/updatelbip.py & + {{- end}} /app/scripts/entrypoint.sh {{- end }} ports: diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxshibboleth/values.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/oxshibboleth/values.yaml index 94ddfab1..ac586484 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxshibboleth/values.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxshibboleth/values.yaml @@ -103,3 +103,5 @@ affinity: {} additionalLabels: { } # -- Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken additionalAnnotations: { } +# -- Add custom scripts that have been mounted to run before the entrypoint. +customScripts: [] \ No newline at end of file diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxtrust/Chart.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/oxtrust/Chart.yaml index 211ee0af..23bdb8d5 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxtrust/Chart.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxtrust/Chart.yaml @@ -2,7 +2,7 @@ # https://www.apache.org/licenses/LICENSE-2.0 apiVersion: v2 name: oxtrust -version: 1.8.28 +version: 1.8.29 kubeVersion: ">=v1.22.0-0" description: Gluu Admin UI. This shouldn't be internet facing. type: application diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxtrust/README.md b/pygluu/kubernetes/templates/helm/gluu/charts/oxtrust/README.md index f5c73ce2..143b130e 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxtrust/README.md +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxtrust/README.md @@ -1,6 +1,6 @@ # oxtrust -![Version: 1.8.28](https://img.shields.io/badge/Version-1.8.28-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) +![Version: 1.8.29](https://img.shields.io/badge/Version-1.8.29-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) Gluu Admin UI. This shouldn't be internet facing. @@ -28,6 +28,7 @@ Kubernetes: `>=v1.22.0-0` | additionalAnnotations | object | `{}` | Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | +| customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. | | dnsConfig | object | `{}` | Add custom dns config | | dnsPolicy | string | `""` | Add custom dns policy | | hpa | object | `{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50}` | Configure the HorizontalPodAutoscaler | diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxtrust/templates/statefulset.yml b/pygluu/kubernetes/templates/helm/gluu/charts/oxtrust/templates/statefulset.yml index 75b94fa0..5896a8c3 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxtrust/templates/statefulset.yml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxtrust/templates/statefulset.yml @@ -73,12 +73,17 @@ spec: runAsUser: 1000 runAsNonRoot: true {{- end }} - {{- if and (eq .Values.global.isDomainRegistered "false") (or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local")) }} + {{- if or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local") ( .Values.customScripts) }} command: - /bin/sh - -c - | + {{- with .Values.customScripts }} + {{- toYaml . | replace "- " "" | nindent 14}} + {{- end }} + {{- if and (not .Values.global.isDomainRegistered ) (or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local")) }} /usr/bin/python3 /scripts/updatelbip.py & + {{- end}} /app/scripts/entrypoint.sh {{- end }} {{- if and ( or ( .Values.global.opendj.enabled ) ( .Values.global.jackrabbit.enabled) ) (or (eq .Values.global.storageClass.provisioner "microk8s.io/hostpath" ) (eq .Values.global.storageClass.provisioner "k8s.io/minikube-hostpath")) }} diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/oxtrust/values.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/oxtrust/values.yaml index 3bbba8e3..1f305b7e 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/oxtrust/values.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/oxtrust/values.yaml @@ -103,3 +103,5 @@ tolerations: [] # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} +# -- Add custom scripts that have been mounted to run before the entrypoint. +customScripts: [] \ No newline at end of file diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/persistence/Chart.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/persistence/Chart.yaml index b55adec3..184e1b30 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/persistence/Chart.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/persistence/Chart.yaml @@ -2,7 +2,7 @@ # https://www.apache.org/licenses/LICENSE-2.0 apiVersion: v2 name: persistence -version: 1.8.28 +version: 1.8.29 kubeVersion: ">=v1.22.0-0" description: Job to generate data and initial config for Gluu Server persistence layer. type: application diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/persistence/README.md b/pygluu/kubernetes/templates/helm/gluu/charts/persistence/README.md index 6c748ae2..c4611d3a 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/persistence/README.md +++ b/pygluu/kubernetes/templates/helm/gluu/charts/persistence/README.md @@ -1,6 +1,6 @@ # persistence -![Version: 1.8.28](https://img.shields.io/badge/Version-1.8.28-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) +![Version: 1.8.29](https://img.shields.io/badge/Version-1.8.29-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) Job to generate data and initial config for Gluu Server persistence layer. @@ -28,6 +28,7 @@ Kubernetes: `>=v1.22.0-0` | additionalAnnotations | object | `{}` | Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | +| customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. | | dnsConfig | object | `{}` | Add custom dns config | | dnsPolicy | string | `""` | Add custom dns policy | | fullnameOverride | string | `""` | | diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/persistence/templates/jobs.yml b/pygluu/kubernetes/templates/helm/gluu/charts/persistence/templates/jobs.yml index 432d2817..50ff210b 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/persistence/templates/jobs.yml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/persistence/templates/jobs.yml @@ -57,7 +57,7 @@ spec: env: {{- include "persistence.usr-envs" . | indent 12 }} {{- include "persistence.usr-secret-envs" . | indent 12 }} - {{- if .Values.global.istio.enabled }} + {{- if or ( .Values.global.istio.enabled ) ( .Values.customScripts )}} command: - tini - -g @@ -65,8 +65,13 @@ spec: - /bin/sh - -c - | + {{- with .Values.customScripts }} + {{- toYaml . | replace "- " "" | nindent 12}} + {{- end }} /app/scripts/entrypoint.sh + {{- if .Values.global.istio.enabled }} curl -X POST http://localhost:15020/quitquitquit + {{- end }} {{- end }} envFrom: - configMapRef: diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/persistence/values.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/persistence/values.yaml index ef28c072..c2f8acef 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/persistence/values.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/persistence/values.yaml @@ -59,3 +59,5 @@ tolerations: [] # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} +# -- Add custom scripts that have been mounted to run before the entrypoint. +customScripts: [] \ No newline at end of file diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/scim/Chart.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/scim/Chart.yaml index 506d4a29..483b4e74 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/scim/Chart.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/scim/Chart.yaml @@ -2,7 +2,7 @@ # https://www.apache.org/licenses/LICENSE-2.0 apiVersion: v2 name: scim -version: 1.8.28 +version: 1.8.29 kubeVersion: ">=v1.22.0-0" description: System for Cross-domain Identity Management (SCIM) version 2.0 type: application diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/scim/README.md b/pygluu/kubernetes/templates/helm/gluu/charts/scim/README.md index 9e4425e5..073bee63 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/scim/README.md +++ b/pygluu/kubernetes/templates/helm/gluu/charts/scim/README.md @@ -1,6 +1,6 @@ # scim -![Version: 1.8.28](https://img.shields.io/badge/Version-1.8.28-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) +![Version: 1.8.29](https://img.shields.io/badge/Version-1.8.29-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.5.3](https://img.shields.io/badge/AppVersion-4.5.3-informational?style=flat-square) System for Cross-domain Identity Management (SCIM) version 2.0 @@ -29,6 +29,7 @@ Kubernetes: `>=v1.22.0-0` | additionalAnnotations | object | `{}` | Additional annotations that will be added across all resources in the format of {cert-manager.io/issuer: "letsencrypt-prod"}. key app is taken | | additionalLabels | object | `{}` | Additional labels that will be added across all resources definitions in the format of {mylabel: "myapp"} | | affinity | object | `{}` | https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ | +| customScripts | list | `[]` | Add custom scripts that have been mounted to run before the entrypoint. | | dnsConfig | object | `{}` | Add custom dns config | | dnsPolicy | string | `""` | Add custom dns policy | | hpa | object | `{"behavior":{},"enabled":true,"maxReplicas":10,"metrics":[],"minReplicas":1,"targetCPUUtilizationPercentage":50}` | Configure the HorizontalPodAutoscaler | diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/scim/templates/deployment.yml b/pygluu/kubernetes/templates/helm/gluu/charts/scim/templates/deployment.yml index 489f4cbd..e7389284 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/scim/templates/deployment.yml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/scim/templates/deployment.yml @@ -75,12 +75,17 @@ spec: env: {{- include "scim.usr-envs" . | indent 12 }} {{- include "scim.usr-secret-envs" . | indent 12 }} - {{- if and (eq .Values.global.isDomainRegistered "false") (or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local")) }} + {{- if or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local") ( .Values.customScripts) }} command: - /bin/sh - -c - | + {{- with .Values.customScripts }} + {{- toYaml . | replace "- " "" | nindent 14}} + {{- end }} + {{- if and (not .Values.global.isFqdnRegistered ) (or (eq .Values.global.storageClass.provisioner "kubernetes.io/aws-ebs") (eq .Values.global.storageClass.provisioner "openebs.io/local")) }} /usr/bin/python3 /scripts/updatelbip.py & + {{- end}} /app/scripts/entrypoint.sh {{- end}} {{- if and ( or ( .Values.global.opendj.enabled ) ( .Values.global.jackrabbit.enabled) ) (or (eq .Values.global.storageClass.provisioner "microk8s.io/hostpath" ) (eq .Values.global.storageClass.provisioner "k8s.io/minikube-hostpath")) }} diff --git a/pygluu/kubernetes/templates/helm/gluu/charts/scim/values.yaml b/pygluu/kubernetes/templates/helm/gluu/charts/scim/values.yaml index 2b9f55f9..90ceb70f 100644 --- a/pygluu/kubernetes/templates/helm/gluu/charts/scim/values.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/charts/scim/values.yaml @@ -97,3 +97,5 @@ tolerations: [] # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} +# -- Add custom scripts that have been mounted to run before the entrypoint. +customScripts: [] \ No newline at end of file diff --git a/pygluu/kubernetes/templates/helm/gluu/values.yaml b/pygluu/kubernetes/templates/helm/gluu/values.yaml index a1a8bffb..74bb7bcf 100644 --- a/pygluu/kubernetes/templates/helm/gluu/values.yaml +++ b/pygluu/kubernetes/templates/helm/gluu/values.yaml @@ -583,6 +583,10 @@ config: # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} + # -- Add custom scripts that have been mounted to run before the entrypoint. + # - /tmp/custom.sh + # - /tmp/custom2.sh + customScripts: [] # -- Nginx ingress definitions chart nginx-ingress: @@ -838,6 +842,10 @@ jackrabbit: # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} + # -- Add custom scripts that have been mounted to run before the entrypoint. + # - /tmp/custom.sh + # - /tmp/custom2.sh + customScripts: [] # -- 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: @@ -983,6 +991,10 @@ opendj: # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} + # -- Add custom scripts that have been mounted to run before the entrypoint. + # - /tmp/custom.sh + # - /tmp/custom2.sh + customScripts: [] # -- Job to generate data and initial config for Gluu Server persistence layer. persistence: @@ -1041,6 +1053,10 @@ persistence: # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} + # -- Add custom scripts that have been mounted to run before the entrypoint. + # - /tmp/custom.sh + # - /tmp/custom2.sh + customScripts: [] # -- 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. oxauth: @@ -1158,6 +1174,10 @@ oxauth: # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} + # -- Add custom scripts that have been mounted to run before the entrypoint. + # - /tmp/custom.sh + # - /tmp/custom2.sh + customScripts: [] # -- Gluu Admin UI. This shouldn't be internet facing. oxtrust: @@ -1275,6 +1295,10 @@ oxtrust: # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} + # -- Add custom scripts that have been mounted to run before the entrypoint. + # - /tmp/custom.sh + # - /tmp/custom2.sh + customScripts: [] # -- 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: @@ -1388,6 +1412,10 @@ fido2: # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} + # -- Add custom scripts that have been mounted to run before the entrypoint. + # - /tmp/custom.sh + # - /tmp/custom2.sh + customScripts: [] # -- System for Cross-domain Identity Management (SCIM) version 2.0 scim: @@ -1501,6 +1529,10 @@ scim: # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} + # -- Add custom scripts that have been mounted to run before the entrypoint. + # - /tmp/custom.sh + # - /tmp/custom2.sh + customScripts: [] # -- Middleware API to help application developers call an OAuth, OpenID or UMA server. You may wonder why this is necessary. It makes it easier for client developers to use OpenID signing and encryption features, without becoming crypto experts. This API provides some high level endpoints to do some of the heavy lifting. oxd-server: @@ -1614,6 +1646,10 @@ oxd-server: # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} + # -- Add custom scripts that have been mounted to run before the entrypoint. + # - /tmp/custom.sh + # - /tmp/custom2.sh + customScripts: [] # -- Gluu Casa ("Casa") is a self-service web portal for end-users to manage authentication and authorization preferences for their account in a Gluu Server. casa: @@ -1727,6 +1763,10 @@ casa: # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} + # -- Add custom scripts that have been mounted to run before the entrypoint. + # - /tmp/custom.sh + # - /tmp/custom2.sh + customScripts: [] # -- Gluu interface to Passport.js to support social login and inbound identity. oxpassport: @@ -1843,6 +1883,10 @@ oxpassport: # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} + # -- Add custom scripts that have been mounted to run before the entrypoint. + # - /tmp/custom.sh + # - /tmp/custom2.sh + customScripts: [] # -- Shibboleth project for the Gluu Server's SAML IDP functionality. oxshibboleth: @@ -1961,6 +2005,10 @@ oxshibboleth: # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} + # -- Add custom scripts that have been mounted to run before the entrypoint. + # - /tmp/custom.sh + # - /tmp/custom2.sh + customScripts: [] # -- CacheRefreshRotation is a special container to monitor cache refresh on oxTrust containers. This may be depreciated. cr-rotate: @@ -2091,3 +2139,7 @@ oxauth-key-rotation: # -- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ affinity: {} nodeSelector: {} + # -- Add custom scripts that have been mounted to run before the entrypoint. + # - /tmp/custom.sh + # - /tmp/custom2.sh + customScripts: [] diff --git a/pygluu/kubernetes/templates/helm/index.yaml b/pygluu/kubernetes/templates/helm/index.yaml index ed4d532d..d66918fb 100644 --- a/pygluu/kubernetes/templates/helm/index.yaml +++ b/pygluu/kubernetes/templates/helm/index.yaml @@ -36,7 +36,127 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.3 - created: "2023-12-05T14:17:15.657858084Z" + created: "2023-12-27T08:59:50.521445533Z" + dependencies: + - condition: global.config.enabled + name: config + repository: "" + version: 1.8.29 + - condition: global.opendj.enabled + name: opendj + repository: "" + version: 1.8.29 + - condition: global.jackrabbit.enabled + name: jackrabbit + repository: "" + version: 1.8.29 + - condition: global.oxauth.enabled + name: oxauth + repository: "" + version: 1.8.29 + - condition: global.fido2.enabled + name: fido2 + repository: "" + version: 1.8.29 + - condition: global.scim.enabled + name: scim + repository: "" + version: 1.8.29 + - condition: global.oxtrust.enabled + name: oxtrust + repository: "" + version: 1.8.29 + - condition: global.nginx-ingress.enabled + name: nginx-ingress + repository: "" + version: 1.8.29 + - condition: global.oxshibboleth.enabled + name: oxshibboleth + repository: "" + version: 1.8.29 + - condition: config.configmap.gluuPassportEnabled + name: oxpassport + repository: "" + version: 1.8.29 + - condition: config.configmap.gluuCasaEnabled + name: casa + repository: "" + version: 1.8.29 + - condition: global.oxauth-key-rotation.enabled + name: oxauth-key-rotation + repository: "" + version: 1.8.29 + - condition: global.cr-rotate.enabled + name: cr-rotate + repository: "" + version: 1.8.29 + - condition: global.oxd-server.enabled + name: oxd-server + repository: "" + version: 1.8.29 + - condition: global.persistence.enabled + name: persistence + repository: "" + version: 1.8.29 + - condition: global.istio.ingress + name: gluu-istio-ingress + repository: "" + version: 1.8.29 + - condition: global.alb.ingress + name: gluu-alb-ingress + repository: "" + version: 1.8.29 + description: Gluu Access and Identity Mangement + digest: 0b119f180c83fd8fcb4a2fffbcbf37ecafe13f9a1630033bd1e16276551454a4 + home: https://www.gluu.org + icon: https://gluu.org/docs/gluu-server/favicon.ico + kubeVersion: '>=v1.22.0-0' + maintainers: + - email: support@gluu.org + name: moabu + name: gluu + sources: + - https://gluu.org/docs/gluu-server + - https://github.com/GluuFederation/cloud-native-edition + urls: + - gluu-1.8.29.tgz + version: 1.8.29 + - annotations: + artifacthub.io/changes: | + - Gluu 4.5.3 official chart release + artifacthub.io/images: | + - name: casa + image: gluufederation/casa:4.5.3_dev + - name: fido2 + image: gluufederation/fido2:4.5.3_dev + - name: scim + image: gluufederation/scim:4.5.3_dev + - name: configuration-manager + image: gluufederation/config-init:4.5.3_dev + - name: cr-rotate + image: gluufederation/cr-rotate:4.5.3_dev + - name: certmanager + image: gluufederation/certmanager:4.5.3_dev + - name: opendj + image: gluufederation/opendj:4.5.3_dev + - name: jackrabbit + image: gluufederation/jackrabbit:4.5.3_dev + - name: oxauth + image: gluufederation/oxauth:4.5.3_dev + - name: oxd-server + image: gluufederation/oxd-server:4.5.3_dev + - name: oxpassport + image: gluufederation/oxpassport:4.5.3_dev + - name: oxshibboleth + image: gluufederation/oxshibboleth:4.5.3_dev + - name: persistence + image: gluufederation/persistence:4.5.3_dev + - name: oxtrust + image: gluufederation/oxtrust:4.5.3_dev + artifacthub.io/license: Apache-2.0 + apiVersion: v2 + appVersion: 4.5.3 + created: "2023-12-27T08:59:50.500062143Z" dependencies: - condition: global.config.enabled name: config @@ -156,7 +276,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.2 - created: "2023-12-05T14:17:15.623124692Z" + created: "2023-12-27T08:59:50.476447836Z" dependencies: - condition: global.config.enabled name: config @@ -276,7 +396,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.2 - created: "2023-12-05T14:17:15.597807984Z" + created: "2023-12-27T08:59:50.455744545Z" dependencies: - condition: global.config.enabled name: config @@ -396,7 +516,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.2 - created: "2023-12-05T14:17:15.578278242Z" + created: "2023-12-27T08:59:50.435632628Z" dependencies: - condition: global.config.enabled name: config @@ -516,7 +636,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.2 - created: "2023-12-05T14:17:15.555593548Z" + created: "2023-12-27T08:59:50.414813436Z" dependencies: - condition: global.config.enabled name: config @@ -637,7 +757,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.1 - created: "2023-12-05T14:17:15.519586108Z" + created: "2023-12-27T08:59:50.393796839Z" dependencies: - condition: global.config.enabled name: config @@ -758,7 +878,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.1 - created: "2023-12-05T14:17:15.498395607Z" + created: "2023-12-27T08:59:50.373408903Z" dependencies: - condition: global.config.enabled name: config @@ -879,7 +999,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.1 - created: "2023-12-05T14:17:15.478103944Z" + created: "2023-12-27T08:59:50.353942241Z" dependencies: - condition: global.config.enabled name: config @@ -1000,7 +1120,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.1 - created: "2023-12-05T14:17:15.448951506Z" + created: "2023-12-27T08:59:50.3314031Z" dependencies: - condition: global.config.enabled name: config @@ -1121,7 +1241,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.1 - created: "2023-12-05T14:17:15.401798174Z" + created: "2023-12-27T08:59:50.284610255Z" dependencies: - condition: global.config.enabled name: config @@ -1242,7 +1362,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.1 - created: "2023-12-05T14:17:15.379249599Z" + created: "2023-12-27T08:59:50.264010597Z" dependencies: - condition: global.config.enabled name: config @@ -1363,7 +1483,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.1 - created: "2023-12-05T14:17:15.353464227Z" + created: "2023-12-27T08:59:50.242799174Z" dependencies: - condition: global.config.enabled name: config @@ -1484,7 +1604,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.0 - created: "2023-12-05T14:17:15.327118543Z" + created: "2023-12-27T08:59:50.222133717Z" dependencies: - condition: global.config.enabled name: config @@ -1605,7 +1725,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.0 - created: "2023-12-05T14:17:15.293938002Z" + created: "2023-12-27T08:59:50.199561523Z" dependencies: - condition: global.config.enabled name: config @@ -1726,7 +1846,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.0 - created: "2023-12-05T14:17:15.261626047Z" + created: "2023-12-27T08:59:50.17923413Z" dependencies: - condition: global.config.enabled name: config @@ -1847,7 +1967,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.0 - created: "2023-12-05T14:17:15.226744555Z" + created: "2023-12-27T08:59:50.158437448Z" dependencies: - condition: global.config.enabled name: config @@ -1968,7 +2088,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.0 - created: "2023-12-05T14:17:15.191627003Z" + created: "2023-12-27T08:59:50.137088296Z" dependencies: - condition: global.config.enabled name: config @@ -2089,7 +2209,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.0 - created: "2023-12-05T14:17:15.166255915Z" + created: "2023-12-27T08:59:50.114463709Z" dependencies: - condition: global.config.enabled name: config @@ -2211,7 +2331,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.0 - created: "2023-12-05T14:17:15.143313986Z" + created: "2023-12-27T08:59:50.093215618Z" dependencies: - condition: global.config.enabled name: config @@ -2333,7 +2453,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.0 - created: "2023-12-05T14:17:15.857634975Z" + created: "2023-12-27T08:59:50.664462469Z" dependencies: - condition: global.config.enabled name: config @@ -2455,7 +2575,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.0 - created: "2023-12-05T14:17:15.821954722Z" + created: "2023-12-27T08:59:50.644395469Z" dependencies: - condition: global.config.enabled name: config @@ -2577,7 +2697,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.0 - created: "2023-12-05T14:17:15.792712339Z" + created: "2023-12-27T08:59:50.625657816Z" dependencies: - condition: global.config.enabled name: config @@ -2697,7 +2817,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.0 - created: "2023-12-05T14:17:15.770882905Z" + created: "2023-12-27T08:59:50.602438636Z" dependencies: - condition: global.config.enabled name: config @@ -2817,7 +2937,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.0 - created: "2023-12-05T14:17:15.748721216Z" + created: "2023-12-27T08:59:50.582906288Z" dependencies: - condition: global.config.enabled name: config @@ -2937,7 +3057,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.0 - created: "2023-12-05T14:17:15.71824327Z" + created: "2023-12-27T08:59:50.562620227Z" dependencies: - condition: global.config.enabled name: config @@ -3057,7 +3177,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.0 - created: "2023-12-05T14:17:15.683100856Z" + created: "2023-12-27T08:59:50.542566954Z" dependencies: - condition: global.config.enabled name: config @@ -3177,7 +3297,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.0 - created: "2023-12-05T14:17:15.424362286Z" + created: "2023-12-27T08:59:50.305960156Z" dependencies: - condition: global.config.enabled name: config @@ -3297,7 +3417,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.0 - created: "2023-12-05T14:17:15.124235254Z" + created: "2023-12-27T08:59:50.072561558Z" dependencies: - condition: global.config.enabled name: config @@ -3417,7 +3537,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.5.0 - created: "2023-12-05T14:17:15.101445137Z" + created: "2023-12-27T08:59:50.051263517Z" dependencies: - condition: global.config.enabled name: config @@ -3539,7 +3659,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.4.2 - created: "2023-12-05T14:17:14.919452917Z" + created: "2023-12-27T08:59:49.887767389Z" dependencies: - condition: global.config.enabled name: config @@ -3661,7 +3781,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.4.2 - created: "2023-12-05T14:17:14.859308887Z" + created: "2023-12-27T08:59:49.864093592Z" dependencies: - condition: global.config.enabled name: config @@ -3783,7 +3903,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.4.2 - created: "2023-12-05T14:17:14.840305349Z" + created: "2023-12-27T08:59:49.841531018Z" dependencies: - condition: global.config.enabled name: config @@ -3905,7 +4025,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.4.2 - created: "2023-12-05T14:17:14.815834248Z" + created: "2023-12-27T08:59:49.822874675Z" dependencies: - condition: global.config.enabled name: config @@ -4027,7 +4147,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.4.2 - created: "2023-12-05T14:17:14.795856948Z" + created: "2023-12-27T08:59:49.802346891Z" dependencies: - condition: global.config.enabled name: config @@ -4149,7 +4269,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.4.2 - created: "2023-12-05T14:17:15.078752012Z" + created: "2023-12-27T08:59:50.031082598Z" dependencies: - condition: global.config.enabled name: config @@ -4269,7 +4389,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.4.2 - created: "2023-12-05T14:17:15.059115312Z" + created: "2023-12-27T08:59:50.011720399Z" dependencies: - condition: global.config.enabled name: config @@ -4389,7 +4509,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.4.1 - created: "2023-12-05T14:17:15.04018864Z" + created: "2023-12-27T08:59:49.988979594Z" dependencies: - condition: global.config.enabled name: config @@ -4509,7 +4629,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.4.1 - created: "2023-12-05T14:17:15.020655056Z" + created: "2023-12-27T08:59:49.969404876Z" dependencies: - condition: global.config.enabled name: config @@ -4629,7 +4749,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.4.1 - created: "2023-12-05T14:17:14.988582828Z" + created: "2023-12-27T08:59:49.947235948Z" dependencies: - condition: global.config.enabled name: config @@ -4749,7 +4869,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.4.1 - created: "2023-12-05T14:17:14.962100763Z" + created: "2023-12-27T08:59:49.92577402Z" dependencies: - condition: global.config.enabled name: config @@ -4869,7 +4989,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.4.1 - created: "2023-12-05T14:17:14.941864316Z" + created: "2023-12-27T08:59:49.90694512Z" dependencies: - condition: global.config.enabled name: config @@ -4989,7 +5109,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.4.0 - created: "2023-12-05T14:17:14.775242349Z" + created: "2023-12-27T08:59:49.775954323Z" dependencies: - condition: global.config.enabled name: config @@ -5109,7 +5229,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.4.0 - created: "2023-12-05T14:17:14.749157535Z" + created: "2023-12-27T08:59:49.754349839Z" dependencies: - condition: global.config.enabled name: config @@ -5229,7 +5349,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.3.1 - created: "2023-12-05T14:17:14.704071761Z" + created: "2023-12-27T08:59:49.717122835Z" dependencies: - condition: global.config.enabled name: config @@ -5349,7 +5469,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.3.1 - created: "2023-12-05T14:17:14.671115862Z" + created: "2023-12-27T08:59:49.693471631Z" dependencies: - condition: global.config.enabled name: config @@ -5469,7 +5589,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.3.1 - created: "2023-12-05T14:17:14.652916035Z" + created: "2023-12-27T08:59:49.674065574Z" dependencies: - condition: global.config.enabled name: config @@ -5589,7 +5709,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.3.1 - created: "2023-12-05T14:17:14.612544131Z" + created: "2023-12-27T08:59:49.653094198Z" dependencies: - condition: global.config.enabled name: config @@ -5709,7 +5829,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.3.1 - created: "2023-12-05T14:17:14.592250568Z" + created: "2023-12-27T08:59:49.636858982Z" dependencies: - condition: global.config.enabled name: config @@ -5829,7 +5949,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.3.0 - created: "2023-12-05T14:17:14.569451165Z" + created: "2023-12-27T08:59:49.612914065Z" dependencies: - condition: global.config.enabled name: config @@ -5949,7 +6069,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.3.0 - created: "2023-12-05T14:17:14.553878016Z" + created: "2023-12-27T08:59:49.592447338Z" dependencies: - condition: global.config.enabled name: config @@ -6069,7 +6189,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.3.0 - created: "2023-12-05T14:17:14.533939528Z" + created: "2023-12-27T08:59:49.573320244Z" dependencies: - condition: global.config.enabled name: config @@ -6189,7 +6309,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.3.0 - created: "2023-12-05T14:17:14.504128164Z" + created: "2023-12-27T08:59:49.554875764Z" dependencies: - condition: global.config.enabled name: config @@ -6309,7 +6429,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.3.0 - created: "2023-12-05T14:17:14.727244587Z" + created: "2023-12-27T08:59:49.733776496Z" dependencies: - condition: global.config.enabled name: config @@ -6433,7 +6553,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.2.3 - created: "2023-12-05T14:17:14.427633579Z" + created: "2023-12-27T08:59:49.518129733Z" dependencies: - condition: global.config.enabled name: config @@ -6556,7 +6676,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.2.3 - created: "2023-12-05T14:17:14.409990112Z" + created: "2023-12-27T08:59:49.502555973Z" dependencies: - condition: global.config.enabled name: config @@ -6679,7 +6799,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.2.3 - created: "2023-12-05T14:17:14.479851808Z" + created: "2023-12-27T08:59:49.538402651Z" dependencies: - condition: global.config.enabled name: config @@ -6802,7 +6922,7 @@ entries: artifacthub.io/license: Apache-2.0 apiVersion: v2 appVersion: 4.2.3 - created: "2023-12-05T14:17:14.455753026Z" + created: "2023-12-27T08:59:49.527960106Z" dependencies: - condition: global.config.enabled name: config @@ -6889,7 +7009,7 @@ entries: ldap-backup: - apiVersion: v2 appVersion: 4.3.0 - created: "2023-12-05T14:17:15.859505581Z" + created: "2023-12-27T08:59:50.665622297Z" description: A backup strategy for LDAP digest: f00564718757bd0d53f1f3dbaa9399327695eb883000f5d6ade7690bb8a2d371 home: https://gluu.org/docs/gluu-server @@ -6912,7 +7032,7 @@ entries: version: 1.6.11 - apiVersion: v2 appVersion: 4.3.0 - created: "2023-12-05T14:17:15.860441662Z" + created: "2023-12-27T08:59:50.666243465Z" description: A backup strategy for LDAP digest: 2fd5f9c62784f0bc6c4b30e5b90abb5edeca1a6cb865e414a3e87a42b115b647 home: https://gluu.org/docs/gluu-server @@ -6935,7 +7055,7 @@ entries: version: 1.6.9 - apiVersion: v2 appVersion: 4.2.3 - created: "2023-12-05T14:17:15.858544452Z" + created: "2023-12-27T08:59:50.665006931Z" description: A backup strategy for LDAP digest: 838ca4b13bb22686f6ff7da98abc523878d64a105ec27cb85da5489d208bf8dc home: https://www.gluu.org @@ -6951,4 +7071,4 @@ entries: urls: - ldap-backup-1.5.9.tgz version: 1.5.9 -generated: "2023-12-05T14:17:14.389995494Z" +generated: "2023-12-27T08:59:49.488909302Z"