chibenwa commented on a change in pull request #718:
URL: https://github.com/apache/james-project/pull/718#discussion_r741591906



##########
File path: server/apps/distributed-app/docs/modules/ROOT/nav.adoc
##########
@@ -3,8 +3,14 @@
 ** xref:architecture/index.adoc[]
 *** xref:architecture/consistency-model.adoc[]
 *** xref:architecture/specialized-instances.adoc[]
-** xref:run.adoc[]
-** xref:run-docker.adoc[]
+** xref:run/index.adoc[Run]
+*** xref:run/run-java.adoc[Run with Java]
+*** xref:run/run-docker.adoc[Run with Docker]
+*** xref:run/run-kubernetes.adoc[Run with Kubernetes]
+**** xref:run/k8s0-checklist.adoc[Deployment Checklist]

Review comment:
       ```suggestion
   **** xref:run/k8s-checklist.adoc[Deployment Checklist]
   ```
   
   Otherwise we got a broken NAV link

##########
File path: 
server/apps/distributed-app/docs/modules/ROOT/pages/run/k8s-checklist.adoc
##########
@@ -0,0 +1,43 @@
+= Checklist
+
+There is some things that you must have before being able to run James on your 
Kubernetes Cluster.
+
+== MUST have
+
+Those are absolutely necessary if you want at least James to start without 
crashing.
+
+- [ ] Setup RabbitMQ and create James user in it.
+- [ ] Create a Kubernetes namespace for James deployment.
+- [ ] A `distributed` version of James image.
+- [ ] An ObjectStorage compatible with S3 APIs.
+- [ ] Configure JWT keys, keystores.
+- [ ] Adding the proper `mailetcontainer.xml` file with other conf files in 
James Helm package
+
+With those you should be able to startup James for first tests without having 
it crashing. However it's still not enough to have it fully functional.
+
+== Should have
+
+- [ ] Cassandra nodes deployed.
+- [ ] Put valid Cassandra keyspaces in the configuration.
+- [ ] Have an appropriate email domain (Contact your Domain Service Provider)
+- [ ] Create your Domain SPF and DKIM Record. See document 
[here](https://james.apache.org/howTo/)
+- [ ] ElasticSearch nodes deployed.
+- [ ] LDAP deployed.

Review comment:
       ```suggestion
   ```

##########
File path: 
server/apps/distributed-app/docs/modules/ROOT/pages/run/k8s-checklist.adoc
##########
@@ -0,0 +1,43 @@
+= Checklist
+
+There is some things that you must have before being able to run James on your 
Kubernetes Cluster.
+
+== MUST have
+
+Those are absolutely necessary if you want at least James to start without 
crashing.
+
+- [ ] Setup RabbitMQ and create James user in it.
+- [ ] Create a Kubernetes namespace for James deployment.
+- [ ] A `distributed` version of James image.
+- [ ] An ObjectStorage compatible with S3 APIs.
+- [ ] Configure JWT keys, keystores.
+- [ ] Adding the proper `mailetcontainer.xml` file with other conf files in 
James Helm package
+
+With those you should be able to startup James for first tests without having 
it crashing. However it's still not enough to have it fully functional.
+
+== Should have
+
+- [ ] Cassandra nodes deployed.
+- [ ] Put valid Cassandra keyspaces in the configuration.
+- [ ] Have an appropriate email domain (Contact your Domain Service Provider)
+- [ ] Create your Domain SPF and DKIM Record. See document 
[here](https://james.apache.org/howTo/)
+- [ ] ElasticSearch nodes deployed.
+- [ ] LDAP deployed.
+- [ ] DNS registered entries for JMAP, IMAP, SMTP, Webadmin.
+- [ ] change James admin ID to a user we can use for imapsync (to check with 
the person responsible of the imapsync).

Review comment:
       ```suggestion
   ```

##########
File path: 
server/apps/distributed-app/docs/modules/ROOT/pages/run/k8s-logsMetrics.adoc
##########
@@ -0,0 +1,27 @@
+== Logs and Metrics
+
+=== Logs
+
+James exposes its logs on the console. Then a fluentbit instance scraps
+and collects them, before being indexed and used by Kibana, with nice
+search possibilities.
+
+The way James exposes its logs on the console is defined in the
+`logback.xml` configuration file. James currently exposes logs in JSON
+format using Jackson Json formatter.
+
+=== Metrics
+
+James exposes its metrics over an HTTP Webadmin endpoint, something like
+`https://james-web-admin/metrics`. Those metrics can be scraped by
+Prometheus before being visualized on Grafana.
+
+This Helm chart exposes James metrics through Prometheus
+https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/user-guides/getting-started.md#include-servicemonitors[ServiceMonitor].
+
+You can import the dashboards for James metrics in Grafana defined
+https://github.com/apache/james-project/tree/master/server/grafana-reporting/prometheus-datasource[here].
+
+Be aware that those dashboards still need more work, as we used to
+export metrics to Elasticsearch not long ago, which required to redo all
+dashboards. Some enhancements are highly possible and encouraged.

Review comment:
       ```suggestion
   dashboards. Some enhancements are highly possible and encouraged.
   
   Read more about xref:operate/metrics.adoc[Metrics in James].
   ```

##########
File path: 
server/apps/distributed-app/docs/modules/ROOT/pages/run/k8s-values.adoc
##########
@@ -0,0 +1,170 @@
+== Values for Helm James template
+
+Helm James has many visible values to configure before being able to use
+it correctly. Values are injected into the deployment template as
+environment variables. An example with default values can be found in
+the `+values.yaml+` file.
+
+This document presents a quick description of each value field.
+
+=== DNS values
+[cols="<,<,<",options="header",]
+|===
+|Field |Default value |Description
+|emailDomain |mail.example.com |The domain name for your tenant’s email
+addresses
+
+|jmapUrl |jmap.example.com |The url for the ingress jmap endpoint
+
+|adminUrl |admin.example.com |The url for the ingress admin endpoint
+
+|smtpHostname |smtp.example.com |The SMTP Ehlo hostname
+|===
+
+=== James values
+[cols="<,<,<",options="header",]
+|===
+|Field |Default value |Description
+|replicaJmapInstanceCount |1 |The number of pods we deploy for James
+JMAP instance in the cluster
+
+|replicaImapSmtpInstanceCount |1 |The number of pods we deploy for James
+IMAP/SMTP instance in the cluster
+
+|image |apache/james:distributed-3.7.0 |The James image used for
+deployment (Cassandra - RabbitMQ - LDAP distributed James flavor)
+|===
+
+=== James environment values
+[cols="<,<,<",options="header",]
+|===
+|Field |Default value |Description
+|jamesAdminID |[email protected] |The James admin account (mainly
+used for imapsync)
+

Review comment:
       ```suggestion
   ```

##########
File path: 
server/apps/distributed-app/helm-chart/james/templates/deployment.yaml
##########
@@ -0,0 +1,391 @@
+{{- $elasticsearchUrl := include "elasticsearch.url.list" . }}
+{{- $cassandraUrl := include "cassandra.url.list" . }}
+{{- $jamesOpts := include "james.jvmOpts" . }}
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: james-jmap
+spec:
+  selector:
+    matchLabels:
+      instance: james-jmap
+  replicas: {{ .Values.james.replicaJmapInstanceCount }}
+  template:
+    metadata:
+      labels:
+        app: james
+        instance: james-jmap
+    spec:
+    {{- if .Values.dockerCredentials }}
+      imagePullSecrets:
+      - name: docker-registry-secret
+    {{- end }}
+      affinity:
+        podAntiAffinity:
+          preferredDuringSchedulingIgnoredDuringExecution:
+          - weight: 100
+            podAffinityTerm:
+              labelSelector:
+                matchExpressions:
+                - key: app
+                  operator: In
+                  values:
+                  - james
+              topologyKey: "kubernetes.io/hostname"
+
+      containers:
+      - name: james-jmap
+        image: {{ .Values.james.image }}
+        readinessProbe:
+          httpGet:
+            path: /healthcheck/checks/Guice%20application%20lifecycle
+            port: 8000
+          initialDelaySeconds: 60
+          periodSeconds: 10
+        livenessProbe:
+          httpGet:
+            path: /healthcheck/checks/Guice%20application%20lifecycle
+            port: 8000
+          initialDelaySeconds: 91
+          periodSeconds: 30
+        envFrom:
+          - secretRef:
+              name: s3-james-credentials
+        env:
+        - name: ELASTICSEARCH_INIT_TIMEOUT
+          value: "120"
+        - name: JAMES_IMAP_SMTP_ENABLED
+          value: "false"
+        - name: JAMES_JMAP_ENABLED
+          value: "true"
+        - name: JAMES_CASSANDRA_NODES_URLS
+          value: "{{ $cassandraUrl | trimSuffix "," }}"
+        - name: JAMES_CASSANDRA_REPLICATION_FACTOR
+          value: "{{ .Values.james.env.cassandraReplicationFactor }}"
+        - name: JAMES_CASSANDRA_USER
+          valueFrom:
+            secretKeyRef:
+              name: db-cassandra-account-james
+              key: james-user
+        - name: JAMES_CASSANDRA_PASSWORD
+          valueFrom:
+            secretKeyRef:
+              name: db-cassandra-account-james
+              key: james-password
+        - name: JAMES_ES_NODES_URLS
+          value: "{{ $elasticsearchUrl | trimSuffix "," }}"
+        - name: JAMES_AMQP_HOST
+          value: {{ .Values.james.env.jamesRabbitHost }}
+        - name: JAMES_AMQP_PORT
+          value: "5672"
+        - name: JAMES_AMQP_MANAGEMENT_PORT
+          value: "15672"
+        - name: JAMES_AMQP_USERNAME
+          valueFrom:
+            secretKeyRef:
+              name: rabbitmq-account-james
+              key: rabbitmq-user
+        - name: JAMES_AMQP_PASSWORD
+          valueFrom:
+            secretKeyRef:
+              name: rabbitmq-account-james
+              key: rabbitmq-password
+        - name: JAMES_DKIM_SIGN_SMTP
+          value: {{ .Values.james.env.jamesDkimSignSmtp }}
+        - name: JAMES_DKIM_SIGN_DOMAIN
+          value: {{ .Values.james.env.jamesDkimSignDomain }}
+        - name: JAMES_DKIM_PRIVATE_KEY
+          valueFrom:
+            secretKeyRef:
+              name: dkim-private-key
+              key: dkim.key
+        - name: JAMES_BUCKET_COUNT
+          value: "6"
+        - name: NAMESPACE
+          valueFrom:
+            fieldRef:
+              fieldPath: metadata.namespace
+        {{- if and (.Values.james.secret.esUser) 
(.Values.james.secret.esPassword) }}
+        - name: JAMES_ES_USER
+          valueFrom:
+            secretKeyRef:
+              name: db-es-account-james
+              key: james-user
+        - name: JAMES_ES_PASSWORD
+          valueFrom:
+            secretKeyRef:
+              name: db-es-account-james
+              key: james-password
+        {{- end }}
+        - name: JAMES_DEFAULT_DOMAIN
+          value: {{ .Values.dns.emailDomain }}
+        - name: JAMES_ADMINISTRATOR_ID
+          value: "{{ .Values.james.env.jamesAdminID }}"

Review comment:
       ```suggestion
   ```

##########
File path: 
server/apps/distributed-app/helm-chart/james/templates/deployment.yaml
##########
@@ -0,0 +1,391 @@
+{{- $elasticsearchUrl := include "elasticsearch.url.list" . }}
+{{- $cassandraUrl := include "cassandra.url.list" . }}
+{{- $jamesOpts := include "james.jvmOpts" . }}
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: james-jmap
+spec:
+  selector:
+    matchLabels:
+      instance: james-jmap
+  replicas: {{ .Values.james.replicaJmapInstanceCount }}
+  template:
+    metadata:
+      labels:
+        app: james
+        instance: james-jmap
+    spec:
+    {{- if .Values.dockerCredentials }}
+      imagePullSecrets:
+      - name: docker-registry-secret
+    {{- end }}
+      affinity:
+        podAntiAffinity:
+          preferredDuringSchedulingIgnoredDuringExecution:
+          - weight: 100
+            podAffinityTerm:
+              labelSelector:
+                matchExpressions:
+                - key: app
+                  operator: In
+                  values:
+                  - james
+              topologyKey: "kubernetes.io/hostname"
+
+      containers:
+      - name: james-jmap
+        image: {{ .Values.james.image }}
+        readinessProbe:
+          httpGet:
+            path: /healthcheck/checks/Guice%20application%20lifecycle
+            port: 8000
+          initialDelaySeconds: 60
+          periodSeconds: 10
+        livenessProbe:
+          httpGet:
+            path: /healthcheck/checks/Guice%20application%20lifecycle
+            port: 8000
+          initialDelaySeconds: 91
+          periodSeconds: 30
+        envFrom:
+          - secretRef:
+              name: s3-james-credentials
+        env:
+        - name: ELASTICSEARCH_INIT_TIMEOUT
+          value: "120"
+        - name: JAMES_IMAP_SMTP_ENABLED
+          value: "false"
+        - name: JAMES_JMAP_ENABLED
+          value: "true"
+        - name: JAMES_CASSANDRA_NODES_URLS
+          value: "{{ $cassandraUrl | trimSuffix "," }}"
+        - name: JAMES_CASSANDRA_REPLICATION_FACTOR
+          value: "{{ .Values.james.env.cassandraReplicationFactor }}"
+        - name: JAMES_CASSANDRA_USER
+          valueFrom:
+            secretKeyRef:
+              name: db-cassandra-account-james
+              key: james-user
+        - name: JAMES_CASSANDRA_PASSWORD
+          valueFrom:
+            secretKeyRef:
+              name: db-cassandra-account-james
+              key: james-password
+        - name: JAMES_ES_NODES_URLS
+          value: "{{ $elasticsearchUrl | trimSuffix "," }}"
+        - name: JAMES_AMQP_HOST
+          value: {{ .Values.james.env.jamesRabbitHost }}
+        - name: JAMES_AMQP_PORT
+          value: "5672"
+        - name: JAMES_AMQP_MANAGEMENT_PORT
+          value: "15672"
+        - name: JAMES_AMQP_USERNAME
+          valueFrom:
+            secretKeyRef:
+              name: rabbitmq-account-james
+              key: rabbitmq-user
+        - name: JAMES_AMQP_PASSWORD
+          valueFrom:
+            secretKeyRef:
+              name: rabbitmq-account-james
+              key: rabbitmq-password
+        - name: JAMES_DKIM_SIGN_SMTP
+          value: {{ .Values.james.env.jamesDkimSignSmtp }}
+        - name: JAMES_DKIM_SIGN_DOMAIN
+          value: {{ .Values.james.env.jamesDkimSignDomain }}
+        - name: JAMES_DKIM_PRIVATE_KEY
+          valueFrom:
+            secretKeyRef:
+              name: dkim-private-key
+              key: dkim.key
+        - name: JAMES_BUCKET_COUNT
+          value: "6"
+        - name: NAMESPACE
+          valueFrom:
+            fieldRef:
+              fieldPath: metadata.namespace
+        {{- if and (.Values.james.secret.esUser) 
(.Values.james.secret.esPassword) }}
+        - name: JAMES_ES_USER
+          valueFrom:
+            secretKeyRef:
+              name: db-es-account-james
+              key: james-user
+        - name: JAMES_ES_PASSWORD
+          valueFrom:
+            secretKeyRef:
+              name: db-es-account-james
+              key: james-password
+        {{- end }}
+        - name: JAMES_DEFAULT_DOMAIN
+          value: {{ .Values.dns.emailDomain }}
+        - name: JAMES_ADMINISTRATOR_ID
+          value: "{{ .Values.james.env.jamesAdminID }}"
+        - name: JAMES_SMTP_HOSTNAME
+          value: "{{ .Values.dns.smtpHostname }}"
+        - name: JAMES_SMTP_MESSAGE
+          value: "{{ .Values.james.env.jamesHELOMessage }}"
+        - name: JAMES_CASSANDRA_KEYSPACE
+          value: {{ .Values.james.env.jamesCassandraKeyspace }}
+        - name: JAMES_CASSANDRA_CACHE_KEYSPACE
+          value: {{ .Values.james.env.jamesCassandraCacheKeyspace }}
+        - name: JAMES_BUCKET_SUFFIX
+          value: "{{ .Values.james.secret.s3.bucketNameSuffix }}"
+        - name: JAMES_ES_MAILBOX_INDEX
+          value: {{ .Values.james.env.jamesEsMailboxIndex }}
+        - name: JAMES_ES_CLUSTER_NAME
+          value: {{ .Values.james.env.jamesEsClusterName }}
+        - name: JAMES_ES_HOST_SCHEME
+          value: {{ .Values.james.env.jamesEsHostScheme }}
+        - name: JAMES_ES_SSL_VALIDATION_STRATEGY
+          value: {{ .Values.james.env.jamesEsSslValidationStrategy }}
+        - name: JAMES_ES_HOST_NAME_VERIFIER
+          value: {{ .Values.james.env.jamesEsHostNameVerifier }}
+        - name: JAMES_ES_NB_SHARDS
+          value: "{{ .Values.james.env.jamesEsNbShards }}"
+        - name: JAMES_ES_NB_REPLICA
+          value: "{{ .Values.james.env.jamesEsNbReplica }}"
+        - name: JAMES_ES_MAILBOX_READ_ALIAS
+          value: "{{ .Values.james.env.jamesEsMailboxReadAlias }}"
+        - name: JAMES_ES_MAILBOX_READ_WRITE
+          value: "{{ .Values.james.env.jamesEsMailboxWriteAlias }}"
+        - name: JAMES_MESSAGE_SIZE
+          value: "{{ .Values.james.env.jamesMessageSize }}"
+        - name: JAVA_TOOL_OPTIONS
+          value: "{{ $jamesOpts }}"
+        ports:
+        - containerPort: 80
+        - containerPort: 8000
+        - containerPort: 4000
+        resources:
+          limits:
+            cpu: {{ .Values.james.env.jamesResources.limits.cpu }}
+            memory: {{ .Values.james.env.jamesResources.limits.memory }}
+          requests:
+            cpu: {{ .Values.james.env.jamesResources.requests.cpu }}
+            memory: {{ .Values.james.env.jamesResources.requests.memory }}
+        volumeMounts:
+        - name: all-in-one-config
+          mountPath: "/root/conf"
+          readOnly: true
+        {{- if .Values.james.tls.secretName }}
+        - name: james-secrets
+          mountPath: /root/secrets
+        {{- end }}
+      volumes:
+      - name: all-in-one-config
+        projected:
+          sources:
+          - configMap:
+              name: james-configs
+          - secret:
+              name: james-jwt-key
+      {{- if .Values.james.tls.secretName }}        
+      - name: james-secrets
+        projected:
+          sources:
+          - secret:
+              name: {{ .Values.james.tls.secretName }}
+              items:
+              - key: tls.key
+                path: tls.key
+              - key: tls.crt
+                path: tls.crt
+        {{- end }}
+      priorityClassName: application-scope-medium
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: james-imap-smtp
+spec:
+  selector:
+    matchLabels:
+      instance: james-imap-smtp
+  replicas: {{ .Values.james.replicaImapSmtpInstanceCount }}
+  template:
+    metadata:
+      labels:
+        app: james
+        instance: james-imap-smtp
+    spec:
+    {{- if .Values.dockerCredentials }}
+      imagePullSecrets:
+      - name: docker-registry-secret
+    {{- end }}
+      affinity:
+        podAntiAffinity:
+          preferredDuringSchedulingIgnoredDuringExecution:
+          - weight: 100
+            podAffinityTerm:
+              labelSelector:
+                matchExpressions:
+                - key: app
+                  operator: In
+                  values:
+                  - james
+              topologyKey: "kubernetes.io/hostname"
+
+      containers:
+      - name: james-imap-smtp
+        image: {{ .Values.james.image }}
+        readinessProbe:
+          httpGet:
+            path: /healthcheck/checks/Guice%20application%20lifecycle
+            port: 8000
+          initialDelaySeconds: 60
+          periodSeconds: 10
+        livenessProbe:
+          httpGet:
+            path: /healthcheck/checks/Guice%20application%20lifecycle
+            port: 8000
+          initialDelaySeconds: 91
+          periodSeconds: 30
+        envFrom:
+          - secretRef:
+              name: s3-james-credentials
+        env:
+        - name: ELASTICSEARCH_INIT_TIMEOUT
+          value: "120"
+        - name: JAMES_IMAP_SMTP_ENABLED
+          value: "true"
+        - name: JAMES_JMAP_ENABLED
+          value: "false"
+        - name: JAMES_CASSANDRA_NODES_URLS
+          value: "{{ $cassandraUrl | trimSuffix "," }}"
+        - name: JAMES_CASSANDRA_REPLICATION_FACTOR
+          value: "{{ .Values.james.env.cassandraReplicationFactor }}"
+        - name: JAMES_CASSANDRA_USER
+          valueFrom:
+            secretKeyRef:
+              name: db-cassandra-account-james
+              key: james-user
+        - name: JAMES_CASSANDRA_PASSWORD
+          valueFrom:
+            secretKeyRef:
+              name: db-cassandra-account-james
+              key: james-password
+        - name: JAMES_ES_NODES_URLS
+          value: "{{ $elasticsearchUrl | trimSuffix "," }}"
+        - name: JAMES_AMQP_HOST
+          value: {{ .Values.james.env.jamesRabbitHost }}
+        - name: JAMES_AMQP_PORT
+          value: "5672"
+        - name: JAMES_AMQP_MANAGEMENT_PORT
+          value: "15672"
+        - name: JAMES_AMQP_USERNAME
+          valueFrom:
+            secretKeyRef:
+              name: rabbitmq-account-james
+              key: rabbitmq-user
+        - name: JAMES_AMQP_PASSWORD
+          valueFrom:
+            secretKeyRef:
+              name: rabbitmq-account-james
+              key: rabbitmq-password
+        - name: JAMES_DKIM_SIGN_SMTP
+          value: {{ .Values.james.env.jamesDkimSignSmtp }}
+        - name: JAMES_DKIM_SIGN_DOMAIN
+          value: {{ .Values.james.env.jamesDkimSignDomain }}
+        - name: JAMES_DKIM_PRIVATE_KEY
+          valueFrom:
+            secretKeyRef:
+              name: dkim-private-key
+              key: dkim.key
+        - name: JAMES_BUCKET_COUNT
+          value: "6"
+        - name: NAMESPACE
+          valueFrom:
+            fieldRef:
+              fieldPath: metadata.namespace
+        {{- if and (.Values.james.secret.esUser) 
(.Values.james.secret.esPassword) }}
+        - name: JAMES_ES_USER
+          valueFrom:
+            secretKeyRef:
+              name: db-es-account-james
+              key: james-user
+        - name: JAMES_ES_PASSWORD
+          valueFrom:
+            secretKeyRef:
+              name: db-es-account-james
+              key: james-password
+        {{- end }}
+        - name: JAMES_DEFAULT_DOMAIN
+          value: {{ .Values.dns.emailDomain }}
+        - name: JAMES_ADMINISTRATOR_ID
+          value: "{{ .Values.james.env.jamesAdminID }}"

Review comment:
       ```suggestion
   ```

##########
File path: server/apps/distributed-app/helm-chart/james/values.schema.json
##########
@@ -0,0 +1,220 @@
+{
+    "$schema": "http://json-schema.org/schema#";,
+    "type": "object",
+    "properties": {
+        "dns": {
+            "type": "object",
+            "properties": {
+                "emailDomain": {
+                    "type": "string",
+                    "pattern": "^[a-z0-9-.]+$"
+                },
+                "jmapUrl": {
+                    "type": "string",
+                    "pattern": "^[a-z0-9-.]+$"
+                },
+                "adminUrl": {
+                    "type": "string",
+                    "pattern": "^[a-z0-9-.]+$"
+                },
+                "smtpHostname": {
+                    "type": "string",
+                    "pattern": "^[a-z0-9-.]+$"
+                }
+            },
+            "additionalProperties": true,
+            "required": [
+                "emailDomain",
+                "jmapUrl",
+                "adminUrl",
+                "smtpHostname"
+            ]
+        },
+        "dockerRegistrySecret": {
+            "type": "string"
+        },
+        "james": {
+            "type": "object",
+            "properties": {
+                "env": {
+                    "type": "object",
+                    "properties": {
+                        "jamesAdminID": {
+                            "type": "string"
+                        },

Review comment:
       ```suggestion
   ```

##########
File path: server/apps/distributed-app/helm-chart/james/values.schema.json
##########
@@ -0,0 +1,220 @@
+{
+    "$schema": "http://json-schema.org/schema#";,
+    "type": "object",
+    "properties": {
+        "dns": {
+            "type": "object",
+            "properties": {
+                "emailDomain": {
+                    "type": "string",
+                    "pattern": "^[a-z0-9-.]+$"
+                },
+                "jmapUrl": {
+                    "type": "string",
+                    "pattern": "^[a-z0-9-.]+$"
+                },
+                "adminUrl": {
+                    "type": "string",
+                    "pattern": "^[a-z0-9-.]+$"
+                },
+                "smtpHostname": {
+                    "type": "string",
+                    "pattern": "^[a-z0-9-.]+$"
+                }
+            },
+            "additionalProperties": true,
+            "required": [
+                "emailDomain",
+                "jmapUrl",
+                "adminUrl",
+                "smtpHostname"
+            ]
+        },
+        "dockerRegistrySecret": {
+            "type": "string"
+        },
+        "james": {
+            "type": "object",
+            "properties": {
+                "env": {
+                    "type": "object",
+                    "properties": {
+                        "jamesAdminID": {
+                            "type": "string"
+                        },
+                        "jamesCassandraKeyspace": {
+                            "type": "string"
+                        },
+                        "jamesCassandraCacheKeyspace": {
+                            "type": "string"
+                        },
+                        "jamesEsMailboxIndex": {
+                            "type": "string"
+                        },
+                        "jamesEsClusterName": {
+                            "type": "string"
+                        },
+                        "jamesEsHostScheme": {
+                            "type": "string"
+                        },
+                        "jamesEsSslValidationStrategy": {
+                            "type": "string"
+                        },
+                        "jamesEsHostNameVerifier": {
+                            "type": "string"
+                        },
+                        "jamesEsNbShards": {
+                            "type": "integer"
+                        },
+                        "jamesEsNbReplica": {
+                            "type": "integer"
+                        },
+                        "jamesEsMailboxReadAlias": {
+                            "type": "string"
+                        },
+                        "jamesEsMailboxWriteAlias": {
+                            "type": "string"
+                        },
+                        "jamesRabbitHost": {
+                            "type": "string"
+                        },
+                        "jamesMessageSize": {
+                            "type": "string"
+                        },                        
+                        "jamesDkimSignSmtp": {
+                            "type": "string"
+                        },
+                        "jamesDkimSignDomain": {
+                            "type": "string"
+                        },
+                        "remoteDeliveryGateway": {
+                            "type": "string"
+                        },
+                        "remoteDeliveryGatewayPort": {
+                            "type": "string"
+                        },
+                        "remoteDeliveryHelo": {
+                            "type": "string"
+                        },
+                        "jamesHELOMessage": {
+                            "type": "string"
+                        },
+                        "cassandraReplicationFactor": {
+                            "type": "integer"
+                        },
+                        "jvmOpts": {
+                            "type": "string"
+                        },
+                        "jamesResources": {
+                            "type": "object",
+                            "properties": {
+                                "limits": {
+                                    "type": "object",
+                                    "properties": {
+                                        "cpu": {
+                                            "type": "string"
+                                        },
+                                        "memory": {
+                                            "type": "string"
+                                        }
+                                    }
+                                },
+                                "request": {
+                                    "type": "object",
+                                    "properties": {
+                                        "cpu": {
+                                            "type": "string"
+                                        },
+                                        "memory": {
+                                            "type": "string"
+                                        }
+                                    }
+                                }
+                            }
+                        },
+                        "glowroot": {
+                            "type": "object",
+                            "properties": {
+                                "enabled": {
+                                    "type": "boolean"
+                                }
+                            }
+                        }
+                    },
+                    "required": [
+                        "jamesAdminID",

Review comment:
       ```suggestion
   ```

##########
File path: server/apps/distributed-app/helm-chart/james/values.yaml
##########
@@ -0,0 +1,89 @@
+dns:
+  ## Default domain for all emailing components
+  emailDomain: "example.com"
+  jmapUrl: "jmap.example.com"
+  adminUrl: "admin.example.com"
+  smtpHostname: "smtp.example.com"
+
+# Default values for james
+james:
+  replicaJmapInstanceCount: 1
+  replicaImapSmtpInstanceCount: 1
+  image: apache/james:distributed-3.7.0
+  ## Environment for James
+  env:
+    jamesAdminID: [email protected]

Review comment:
       ```suggestion
   ```




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to