From 938274488c3608be1445d7d9aad1415cfc175e44 Mon Sep 17 00:00:00 2001 From: Kjeld Schouten-Lebbing Date: Mon, 6 Sep 2021 12:52:18 +0200 Subject: [PATCH] Add SOGO to Incubator (#901) * Add SOGo to incubator * fix an indent mistake --- charts/incubator/sogo/.helmignore | 24 + charts/incubator/sogo/CONFIG.md | 0 charts/incubator/sogo/Chart.yaml | 30 + charts/incubator/sogo/README.md | 0 charts/incubator/sogo/SCALE/item.yaml | 3 + charts/incubator/sogo/SCALE/ix_values.yaml | 42 + charts/incubator/sogo/SCALE/questions.yaml | 1548 +++++++++++++++++++ charts/incubator/sogo/app-readme.md | 0 charts/incubator/sogo/helm-values.md | 0 charts/incubator/sogo/templates/_config.tpl | 154 ++ charts/incubator/sogo/templates/common.yaml | 26 + charts/incubator/sogo/values.yaml | 142 ++ docs/_static/img/sogo-icon.png | Bin 0 -> 9207 bytes 13 files changed, 1969 insertions(+) create mode 100644 charts/incubator/sogo/.helmignore create mode 100644 charts/incubator/sogo/CONFIG.md create mode 100644 charts/incubator/sogo/Chart.yaml create mode 100644 charts/incubator/sogo/README.md create mode 100644 charts/incubator/sogo/SCALE/item.yaml create mode 100644 charts/incubator/sogo/SCALE/ix_values.yaml create mode 100644 charts/incubator/sogo/SCALE/questions.yaml create mode 100644 charts/incubator/sogo/app-readme.md create mode 100644 charts/incubator/sogo/helm-values.md create mode 100644 charts/incubator/sogo/templates/_config.tpl create mode 100644 charts/incubator/sogo/templates/common.yaml create mode 100644 charts/incubator/sogo/values.yaml create mode 100644 docs/_static/img/sogo-icon.png diff --git a/charts/incubator/sogo/.helmignore b/charts/incubator/sogo/.helmignore new file mode 100644 index 00000000000..e559de0a012 --- /dev/null +++ b/charts/incubator/sogo/.helmignore @@ -0,0 +1,24 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS diff --git a/charts/incubator/sogo/CONFIG.md b/charts/incubator/sogo/CONFIG.md new file mode 100644 index 00000000000..e69de29bb2d diff --git a/charts/incubator/sogo/Chart.yaml b/charts/incubator/sogo/Chart.yaml new file mode 100644 index 00000000000..0ce7623937f --- /dev/null +++ b/charts/incubator/sogo/Chart.yaml @@ -0,0 +1,30 @@ +apiVersion: v2 +appVersion: auto +dependencies: +- name: common + repository: https://truecharts.org/ + version: 6.13.7 +- condition: postgresql.enabled + name: postgresql + repository: https://truecharts.org/ + version: 1.6.1 +- condition: memcached.enabled + name: memcached + repository: https://charts.bitnami.com/bitnami + version: 5.14.2 +deprecated: false +description: Groupware package +home: https://github.com/truecharts/apps/tree/master/charts/stable/sogo +icon: https://truecharts.org/_static/sogo-icon.png +keywords: +- groupware +kubeVersion: '>=1.16.0-0' +maintainers: +- email: info@truecharts.org + name: TrueCharts + url: truecharts.org +name: sogo +sources: +- https://www.sogo.nu/ +type: application +version: 0.0.1 diff --git a/charts/incubator/sogo/README.md b/charts/incubator/sogo/README.md new file mode 100644 index 00000000000..e69de29bb2d diff --git a/charts/incubator/sogo/SCALE/item.yaml b/charts/incubator/sogo/SCALE/item.yaml new file mode 100644 index 00000000000..d656f47b6c3 --- /dev/null +++ b/charts/incubator/sogo/SCALE/item.yaml @@ -0,0 +1,3 @@ +categories: + - groupware +icon_url: https://truecharts.org/_static/sogo-icon.png diff --git a/charts/incubator/sogo/SCALE/ix_values.yaml b/charts/incubator/sogo/SCALE/ix_values.yaml new file mode 100644 index 00000000000..c64d50bad4b --- /dev/null +++ b/charts/incubator/sogo/SCALE/ix_values.yaml @@ -0,0 +1,42 @@ +## +# This file contains Values.yaml content that gets added to the output of questions.yaml +# It's ONLY meant for content that the user is NOT expected to change. +# Example: Everything under "image" is not included in questions.yaml but is included here. +## +image: + repository: ghcr.io/truecharts/sogo + pullPolicy: IfNotPresent + tag: "v5.2.0" + +initContainers: + - name: init-postgresdb + image: postgres:13.1 + command: + - "sh" + - "-c" + - "until pg_isready -U authelia -h ${pghost} ; do sleep 2 ; done" + imagePullPolicy: IfNotPresent + env: + - name: pghost + valueFrom: + secretKeyRef: + name: dbcreds + key: plainhost + + +# Enabled postgres +postgresql: + enabled: true + postgresqlUsername: sogo + postgresqlDatabase: sogo + existingSecret: dbcreds + +# -- memcached dependency settings +memcached: + enabled: true + + +## +# Most other defaults are set in questions.yaml +# For other options please refer to the wiki, default_values.yaml or the common library chart +## diff --git a/charts/incubator/sogo/SCALE/questions.yaml b/charts/incubator/sogo/SCALE/questions.yaml new file mode 100644 index 00000000000..8c27760fd6c --- /dev/null +++ b/charts/incubator/sogo/SCALE/questions.yaml @@ -0,0 +1,1548 @@ +groups: + - name: "Container Image" + description: "Image to be used for container" + - name: "Controller" + description: "Configure workload deployment" + - name: "Container Configuration" + description: "additional container configuration" + - name: "App Configuration" + description: "App specific config options" + - name: "Networking and Services" + description: "Configure Network and Services for container" + - name: "Storage and Persistence" + description: "Persist and share data that is separate from the container" + - name: "Ingress" + description: "Ingress Configuration" + - name: "Security and Permissions" + description: "Configure security context and permissions" + - name: "Resources and Devices" + description: "Specify resources/devices to be allocated to workload" + - name: "Advanced" + description: "Advanced Configuration" +portals: + web_portal: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" +questions: + - variable: portal + group: "Container Image" + label: "Configure Portal Button" + schema: + type: dict + hidden: true + attrs: + - variable: enabled + label: "Enable" + description: "enable the portal button" + schema: + hidden: true + editable: false + type: boolean + default: true + - variable: controller + group: "Controller" + label: "" + schema: + type: dict + attrs: + - variable: type + description: "Please specify type of workload to deploy" + label: "(Advanced) Controller Type" + schema: + type: string + default: "deployment" + required: true + enum: + - value: "deployment" + description: "Deployment" + - value: "statefulset" + description: "Statefulset" + - value: "daemonset" + description: "Daemonset" + - variable: replicas + description: "Number of desired pod replicas" + label: "Desired Replicas" + schema: + type: int + default: 1 + required: true + - variable: strategy + description: "Please specify type of workload to deploy" + label: "(Advanced) Update Strategy" + schema: + type: string + default: "Recreate" + required: true + enum: + - value: "Recreate" + description: "Recreate: Kill existing pods before creating new ones" + - value: "RollingUpdate" + description: "RollingUpdate: Create new pods and then kill old ones" + - value: "OnDelete" + description: "(Legacy) OnDelete: ignore .spec.template changes" + - variable: labelsList + label: "Controller Labels" + schema: + type: list + default: [] + items: + - variable: labelItem + label: "Label" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + - variable: annotationsList + label: " Controller Annotations" + schema: + type: list + default: [] + items: + - variable: annotationItem + label: "Label" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + + + - variable: podLabelsList + group: "Container Configuration" + label: "Pod Labels" + schema: + type: list + default: [] + items: + - variable: podLabelItem + label: "Label" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + + - variable: podAnnotationsList + group: "Container Configuration" + label: "Pod Annotations" + schema: + type: list + default: [] + items: + - variable: podAnnotationItem + label: "Label" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + + - variable: termination + group: "Container Configuration" + label: "Termination settings" + schema: + type: dict + attrs: + - variable: gracePeriodSeconds + label: "Grace Period Seconds" + schema: + type: int + default: 10 + + + - variable: env + group: "Container Configuration" + label: "Image Environment" + schema: + type: dict + attrs: + - variable: TZ + label: "Timezone" + schema: + type: string + default: "Etc/UTC" + $ref: + - "definitions/timezone" + - variable: UMASK + label: "UMASK" + description: "Sets the UMASK env var for LinuxServer.io (compatible) containers" + schema: + type: string + default: "002" + # Configure Enviroment Variables + - variable: envList + label: "Image environment" + group: "Container Configuration" + schema: + type: list + default: [] + items: + - variable: envItem + label: "Environment Variable" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + + + - variable: sogo + group: "App Configuration" + label: "SOGo Configuration " + schema: + type: dict + attrs: + - variable: general + label: "General" + schema: + type: dict + attrs: + - variable: SOGoLanguage + label: "SOGoLanguage" + schema: + type: string + required: true + default: "English" + - variable: SOGoSuperUsernames + label: "SOGoSuperUsernames" + schema: + type: string + default: "" + - variable: SxVMemLimit + label: "SxVMemLimit" + schema: + type: int + default: 384 + required: true + - variable: webui + label: "Web Interface" + schema: + type: dict + attrs: + - variable: SOGoPageTitle + label: "SOGoPageTitle" + schema: + type: string + required: true + default: "SOGo" + - variable: SOGoVacationEnabled + label: "SOGoVacationEnabled" + schema: + type: boolean + default: true + - variable: SOGoForwardEnabled + label: "SOGoForwardEnabled" + schema: + type: boolean + default: true + - variable: SOGoSieveScriptsEnabled + label: "SOGoSieveScriptsEnabled" + schema: + type: boolean + default: true + - variable: SOGoMailAuxiliaryUserAccountsEnabled + label: "SOGoMailAuxiliaryUserAccountsEnabled" + schema: + type: boolean + default: true + - variable: SOGoTrustProxyAuthentication + label: "SOGoTrustProxyAuthentication" + schema: + type: boolean + default: false + - variable: SOGoXSRFValidationEnabled + label: "SOGoXSRFValidationEnabled" + schema: + type: boolean + default: true + - variable: mail + label: "Mail" + schema: + type: dict + attrs: + - variable: SOGoDraftsFolderName + label: "SOGoDraftsFolderName" + schema: + type: string + default: "Drafts" + required: true + - variable: SOGoSentFolderName + label: "SOGoSentFolderName" + schema: + type: string + default: "Sent" + required: true + - variable: SOGoTrashFolderName + label: "SOGoTrashFolderName" + schema: + type: string + default: "Trash" + required: true + - variable: SOGoIMAPServer + label: "SOGoIMAPServer" + schema: + type: string + default: "localhost" + required: true + - variable: SOGoSieveServer + label: "SOGoSieveServer" + schema: + type: string + default: "" + - variable: SOGoMailDomain + label: "SOGoMailDomain" + schema: + type: string + default: "example.com" + required: true + - variable: SOGoMailingMechanism + label: "SOGoMailingMechanism" + schema: + type: string + default: "smtp" + enum: + - value: "smtp" + description: "smtp" + - value: "sendmail" + description: "sendmail" + - variable: SOGoSMTPServer + label: "SOGoSMTPServer" + schema: + type: string + show_if: [["SOGoMailingMechanism", "=", "smtp"]] + default: "smtp://domain:port" + required: true + - variable: SOGoForceExternalLoginWithEmail + label: "SOGoForceExternalLoginWithEmail" + schema: + type: boolean + default: false + - variable: SOGoMailSpoolPath + label: "SOGoMailSpoolPath" + schema: + type: string + default: "/var/spool/sogo" + required: true + - variable: NGMimeBuildMimeTempDirectory + label: "NGMimeBuildMimeTempDirectory" + schema: + type: string + default: "/mimetmp" + required: true + - variable: notifications + label: "Notifications" + schema: + type: dict + attrs: + - variable: SOGoAppointmentSendEMailNotifications + label: "SOGoAppointmentSendEMailNotifications" + schema: + type: boolean + default: false + - variable: SOGoACLsSendEMailNotifications + label: "SOGoACLsSendEMailNotifications" + schema: + type: boolean + default: false + - variable: SOGoFoldersSendEMailNotifications + label: "SOGoFoldersSendEMailNotifications" + schema: + type: boolean + default: false + - variable: auth + label: "Authentication" + schema: + type: dict + attrs: + - variable: SOGoPasswordChangeEnabled + label: "SOGoPasswordChangeEnabled" + schema: + type: boolean + default: true + - variable: usersources + label: "User Data Sources" + schema: + type: list + default: [] + items: + - variable: usersourcesEntry + label: "Source" + schema: + type: dict + attrs: + - variable: id + label: "id" + schema: + type: string + default: "id" + required: true + - variable: canAuthenticate + label: "canAuthenticate" + schema: + type: boolean + default: true + - variable: isAddressBook + label: "isAddressBook" + schema: + type: boolean + default: true + - variable: type + label: "Userdata Type" + schema: + type: string + default: "LDAP" + enum: + - value: "LDAP" + description: "LDAP" + - value: "SQL" + description: "SQL" + - variable: viewURL + label: "viewURL" + schema: + show_if: [["type", "=", "SQL"]] + type: string + default: "LDAP" + required: true + - variable: userPasswordAlgorithm + label: "userPasswordAlgorithm" + schema: + show_if: [["type", "=", "SQL"]] + type: string + default: "md5" + required: true + - variable: CNFieldName + label: "CNFieldName" + schema: + show_if: [["type", "=", "LDAP"]] + type: string + default: "cn" + required: true + - variable: UIDFieldName + label: "UIDFieldName" + schema: + show_if: [["type", "=", "LDAP"]] + type: string + default: "uid" + required: true + - variable: IDFieldName + label: "IDFieldName" + schema: + show_if: [["type", "=", "LDAP"]] + type: string + default: "uid" + required: true + - variable: bindFields + label: "bindFields" + schema: + show_if: [["type", "=", "LDAP"]] + type: string + default: "(uid, mail)" + required: true + - variable: baseDN + label: "baseDN" + schema: + show_if: [["type", "=", "LDAP"]] + type: string + default: "ou=users,dc=acme,dc=com" + required: true + - variable: bindDN + label: "bindDN" + schema: + show_if: [["type", "=", "LDAP"]] + type: string + default: "uid=sogo,ou=users,dc=acme,dc=com" + required: true + - variable: bindPassword + label: "bindPassword" + schema: + show_if: [["type", "=", "LDAP"]] + type: string + default: "qwerty" + required: true + - variable: displayName + label: "displayName" + schema: + show_if: [["type", "=", "LDAP"]] + type: string + default: "Shared Addresses" + required: true + - variable: hostname + label: "hostname" + schema: + show_if: [["type", "=", "LDAP"]] + type: string + default: "ldap://127.0.0.1:389" + required: true + - variable: custom + label: "Custom configuration Arguments" + schema: + type: list + default: [] + items: + - variable: customsourceEntry + label: "custom argument" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + required: true + - variable: value + label: "Value" + schema: + type: string + required: true + - variable: debug + label: "Debug" + schema: + type: dict + attrs: + - variable: show + label: "show debug options" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: SOGoDebugRequests + label: "SOGoDebugRequests" + schema: + type: boolean + default: false + - variable: SoDebugBaseURL + label: "SoDebugBaseURL" + schema: + type: boolean + default: false + - variable: LDAPDebugEnabled + label: "LDAPDebugEnabled" + schema: + type: boolean + default: false + - variable: ImapDebugEnabled + label: "ImapDebugEnabled" + schema: + type: boolean + default: false + - variable: PGDebugEnabled + label: "PGDebugEnabled" + schema: + type: boolean + default: false + - variable: MySQL4DebugEnabled + label: "MySQL4DebugEnabled" + schema: + type: boolean + default: false + - variable: SOGoUIxDebugEnabled + label: "SOGoUIxDebugEnabled" + schema: + type: boolean + default: false + - variable: WODontZipResponse + label: "WODontZipResponse" + schema: + type: boolean + default: false + - variable: WOLogFile + label: "WOLogFile" + schema: + type: string + default: "" + - variable: custom + label: "Custom configuration Arguments" + schema: + type: list + default: [] + items: + - variable: customEntry + label: "custom argument" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + required: true + - variable: value + label: "Value" + schema: + type: string + required: true + + - variable: service + group: "Networking and Services" + label: "Configure Service(s)" + schema: + type: dict + attrs: + - variable: main + label: "Main Service" + description: "The Primary service on which the healthcheck runs, often the webUI" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable the service" + schema: + type: boolean + default: true + hidden: true + - variable: type + label: "Service Type" + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: "NodePort" + enum: + - value: "NodePort" + description: "NodePort" + - value: "ClusterIP" + description: "ClusterIP" + - value: "LoadBalancer" + description: "LoadBalancer" + - variable: loadBalancerIP + label: "LoadBalancer IP" + description: "LoadBalancerIP" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: "External IP" + schema: + type: string + - variable: ports + label: "Service's Port(s) Configuration" + schema: + type: dict + attrs: + - variable: main + label: "Main Service Port Configuration" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable the port" + schema: + type: boolean + default: true + hidden: true + - variable: protocol + label: "Port Type" + schema: + type: string + default: "HTTP" + enum: + - value: HTTP + description: "HTTP" + - value: "HTTPS" + description: "HTTPS" + - value: TCP + description: "TCP" + - value: "UDP" + description: "UDP" + - variable: targetPort + label: "Target Port" + description: "This port exposes the container port on the service" + schema: + type: int + default: 80 + editable: false + hidden: true + - variable: port + label: "Container Port" + schema: + type: int + default: 80 + editable: true + required: true + - variable: nodePort + label: "Node Port (Optional)" + description: "This port gets exposed to the node. Only considered when service type is NodePort" + schema: + type: int + min: 9000 + max: 65535 + default: 36102 + required: true + + - variable: persistence + label: "Integrated Persistent Storage" + description: "Integrated Persistent Storage" + group: "Storage and Persistence" + schema: + type: dict + attrs: + - variable: data + label: "App Data Storage" + description: "Stores the Application Data." + schema: + type: dict + attrs: + - variable: enabled + label: "Enable the storage" + schema: + type: boolean + default: true + - variable: type + label: "(Advanced) Type of Storage" + description: "Sets the persistence type" + schema: + type: string + default: "pvc" + enum: + - value: "pvc" + description: "pvc" + - value: "emptyDir" + description: "emptyDir" + - value: "hostPath" + description: "hostPath" + - variable: storageClass + label: "(Advanced) storageClass" + description: " Warning: Anything other than SCALE-ZFS will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "SCALE-ZFS" + - variable: setPermissions + label: "Automatic Permissions" + description: "Automatically set permissions on install" + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: true + - variable: readOnly + label: "readOnly" + schema: + type: boolean + default: false + - variable: hostPath + label: "hostPath" + description: "Path inside the container the storage is mounted" + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: hostPathType + label: "hostPath Type" + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: "Default" + - value: "DirectoryOrCreate" + description: "DirectoryOrCreate" + - value: "Directory" + description: "Directory" + - value: "FileOrCreate" + description: "FileOrCreate" + - value: "File" + description: "File" + - value: "Socket" + description: "Socket" + - value: "CharDevice" + description: "CharDevice" + - value: "BlockDevice" + description: "BlockDevice" + - variable: mountPath + label: "mountPath" + description: "Path inside the container the storage is mounted" + schema: + type: string + default: "/data/conf/sogo/" + hidden: true + - variable: medium + label: "EmptyDir Medium" + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: "Default" + - value: "Memory" + description: "Memory" + - variable: accessMode + label: "Access Mode (Advanced)" + description: "Allow or disallow multiple PVC's writhing to the same PV" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "ReadWriteOnce" + enum: + - value: "ReadWriteOnce" + description: "ReadWriteOnce" + - value: "ReadOnlyMany" + description: "ReadOnlyMany" + - value: "ReadWriteMany" + description: "ReadWriteMany" + - variable: size + label: "Size quotum of storage" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "100Gi" + - variable: drafts + label: "App drafts Storage" + description: "Stores Draft emails" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable the storage" + schema: + type: boolean + default: true + - variable: type + label: "(Advanced) Type of Storage" + description: "Sets the persistence type" + schema: + type: string + default: "pvc" + enum: + - value: "pvc" + description: "pvc" + - value: "emptyDir" + description: "emptyDir" + - value: "hostPath" + description: "hostPath" + - variable: storageClass + label: "(Advanced) storageClass" + description: " Warning: Anything other than SCALE-ZFS will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "SCALE-ZFS" + - variable: setPermissions + label: "Automatic Permissions" + description: "Automatically set permissions on install" + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: true + - variable: readOnly + label: "readOnly" + schema: + type: boolean + default: false + - variable: hostPath + label: "hostPath" + description: "Path inside the container the storage is mounted" + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: hostPathType + label: "hostPath Type" + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: "Default" + - value: "DirectoryOrCreate" + description: "DirectoryOrCreate" + - value: "Directory" + description: "Directory" + - value: "FileOrCreate" + description: "FileOrCreate" + - value: "File" + description: "File" + - value: "Socket" + description: "Socket" + - value: "CharDevice" + description: "CharDevice" + - value: "BlockDevice" + description: "BlockDevice" + - variable: mountPath + label: "mountPath" + description: "Path inside the container the storage is mounted" + schema: + type: string + default: "/var/spool/sogo" + hidden: true + - variable: medium + label: "EmptyDir Medium" + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: "Default" + - value: "Memory" + description: "Memory" + - variable: accessMode + label: "Access Mode (Advanced)" + description: "Allow or disallow multiple PVC's writhing to the same PV" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "ReadWriteOnce" + enum: + - value: "ReadWriteOnce" + description: "ReadWriteOnce" + - value: "ReadOnlyMany" + description: "ReadOnlyMany" + - value: "ReadWriteMany" + description: "ReadWriteMany" + - variable: size + label: "Size quotum of storage" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "100Gi" + - variable: mimetmp + label: "App mimetmp Storage" + description: "Stores the temporary mime files" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable the storage" + schema: + type: boolean + default: true + - variable: type + label: "(Advanced) Type of Storage" + description: "Sets the persistence type" + schema: + type: string + default: "emptyDir" + enum: + - value: "pvc" + description: "pvc" + - value: "emptyDir" + description: "emptyDir" + - value: "hostPath" + description: "hostPath" + - variable: storageClass + label: "(Advanced) storageClass" + description: " Warning: Anything other than SCALE-ZFS will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "SCALE-ZFS" + - variable: setPermissions + label: "Automatic Permissions" + description: "Automatically set permissions on install" + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: true + - variable: readOnly + label: "readOnly" + schema: + type: boolean + default: false + - variable: hostPath + label: "hostPath" + description: "Path inside the container the storage is mounted" + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: hostPathType + label: "hostPath Type" + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: "Default" + - value: "DirectoryOrCreate" + description: "DirectoryOrCreate" + - value: "Directory" + description: "Directory" + - value: "FileOrCreate" + description: "FileOrCreate" + - value: "File" + description: "File" + - value: "Socket" + description: "Socket" + - value: "CharDevice" + description: "CharDevice" + - value: "BlockDevice" + description: "BlockDevice" + - variable: mountPath + label: "mountPath" + description: "Path inside the container the storage is mounted" + schema: + type: string + default: "/mimetmp" + hidden: true + - variable: medium + label: "EmptyDir Medium" + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: "Default" + - value: "Memory" + description: "Memory" + - variable: accessMode + label: "Access Mode (Advanced)" + description: "Allow or disallow multiple PVC's writhing to the same PV" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "ReadWriteOnce" + enum: + - value: "ReadWriteOnce" + description: "ReadWriteOnce" + - value: "ReadOnlyMany" + description: "ReadOnlyMany" + - value: "ReadWriteMany" + description: "ReadWriteMany" + - variable: size + label: "Size quotum of storage" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "100Gi" + + - variable: persistenceList + label: "Additional app storage" + group: "Storage and Persistence" + schema: + type: list + default: [] + items: + - variable: persistenceListEntry + label: "Custom Storage" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable the storage" + schema: + type: boolean + default: true + - variable: type + label: "(Advanced) Type of Storage" + description: "Sets the persistence type" + schema: + type: string + default: "hostPath" + enum: + - value: "pvc" + description: "pvc" + - value: "emptyDir" + description: "emptyDir" + - value: "hostPath" + description: "hostPath" + - variable: storageClass + label: "(Advanced) storageClass" + description: " Warning: Anything other than SCALE-ZFS will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "SCALE-ZFS" + - variable: setPermissions + label: "Automatic Permissions" + description: "Automatically set permissions on install" + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: true + - variable: readOnly + label: "readOnly" + schema: + type: boolean + default: false + - variable: hostPath + label: "hostPath" + description: "Path inside the container the storage is mounted" + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: hostPathType + label: "hostPath Type" + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: "Default" + - value: "DirectoryOrCreate" + description: "DirectoryOrCreate" + - value: "Directory" + description: "Directory" + - value: "FileOrCreate" + description: "FileOrCreate" + - value: "File" + description: "File" + - value: "Socket" + description: "Socket" + - value: "CharDevice" + description: "CharDevice" + - value: "BlockDevice" + description: "BlockDevice" + - variable: mountPath + label: "mountPath" + description: "Path inside the container the storage is mounted" + schema: + type: string + required: true + default: "" + - variable: medium + label: "EmptyDir Medium" + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: "Default" + - value: "Memory" + description: "Memory" + - variable: accessMode + label: "Access Mode (Advanced)" + description: "Allow or disallow multiple PVC's writhing to the same PVC" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "ReadWriteOnce" + enum: + - value: "ReadWriteOnce" + description: "ReadWriteOnce" + - value: "ReadOnlyMany" + description: "ReadOnlyMany" + - value: "ReadWriteMany" + description: "ReadWriteMany" + - variable: size + label: "Size quotum of storage" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "100Gi" + + - variable: ingress + label: "" + group: "Ingress" + schema: + type: dict + attrs: + - variable: main + label: "Main Ingress" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable Ingress" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hosts + label: "Hosts" + schema: + type: list + default: [] + items: + - variable: hostEntry + label: "Host" + schema: + type: dict + attrs: + - variable: host + label: "HostName" + schema: + type: string + default: "" + required: true + - variable: paths + label: "Paths" + schema: + type: list + default: [] + items: + - variable: pathEntry + label: "Host" + schema: + type: dict + attrs: + - variable: path + label: "path" + schema: + type: string + required: true + default: "/" + - variable: pathType + label: "pathType" + schema: + type: string + required: true + default: "Prefix" + - variable: tls + label: "TLS-Settings" + schema: + type: list + default: [] + items: + - variable: tlsEntry + label: "Host" + schema: + type: dict + attrs: + - variable: hosts + label: "Certificate Hosts" + schema: + type: list + default: [] + items: + - variable: host + label: "Host" + schema: + type: string + default: "" + required: true + - variable: scaleCert + label: "Select TrueNAS SCALE Certificate" + schema: + type: int + $ref: + - "definitions/certificate" + - variable: entrypoint + label: "Traefik Entrypoint" + description: "Entrypoint used by Traefik when using Traefik as Ingress Provider" + schema: + type: string + default: "websecure" + required: true + - variable: middlewares + label: "Traefik Middlewares" + description: "Add previously created Traefik Middlewares to this Ingress" + schema: + type: list + default: [] + items: + - variable: name + label: "Name" + schema: + type: string + default: "" + required: true + + + + - variable: ingressList + label: "Additional Ingress" + group: "Ingress" + schema: + type: list + default: [] + items: + - variable: ingressListEntry + label: "Custom Ingress" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable Ingress" + schema: + type: boolean + default: true + hidden: true + - variable: name + label: "Name" + schema: + type: string + default: "" + - variable: ingressClassName + label: "IngressClass Name" + schema: + type: string + default: "" + - variable: labelsList + label: "Labels" + schema: + type: list + default: [] + items: + - variable: labelItem + label: "Label" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + - variable: annotationsList + label: "Annotations" + schema: + type: list + default: [] + items: + - variable: annotationItem + label: "Label" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + - variable: hosts + label: "Hosts" + schema: + type: list + default: [] + items: + - variable: hostEntry + label: "Host" + schema: + type: dict + attrs: + - variable: host + label: "HostName" + schema: + type: string + default: "" + required: true + - variable: paths + label: "Paths" + schema: + type: list + default: [] + items: + - variable: pathEntry + label: "Host" + schema: + type: dict + attrs: + - variable: path + label: "path" + schema: + type: string + required: true + default: "/" + - variable: pathType + label: "pathType" + schema: + type: string + required: true + default: "Prefix" + - variable: service + label: "Linked Service" + schema: + type: dict + attrs: + - variable: name + label: "Service Name" + schema: + type: string + default: "" + - variable: port + label: "Service Port" + schema: + type: int + - variable: tls + label: "TLS-Settings" + schema: + type: list + default: [] + items: + - variable: tlsEntry + label: "Host" + schema: + type: dict + attrs: + - variable: hosts + label: "Certificate Hosts" + schema: + type: list + default: [] + items: + - variable: host + label: "Host" + schema: + type: string + default: "" + required: true + - variable: scaleCert + label: "Select TrueNAS SCALE Certificate" + schema: + type: int + $ref: + - "definitions/certificate" + - variable: entrypoint + label: "Traefik Entrypoint" + description: "Entrypoint used by Traefik when using Traefik as Ingress Provider" + schema: + type: string + default: "websecure" + required: true + - variable: middlewares + label: "Traefik Middlewares" + description: "Add previously created Traefik Middlewares to this Ingress" + schema: + type: list + default: [] + items: + - variable: name + label: "Name" + schema: + type: string + default: "" + required: true + + - variable: securityContext + group: "Security and Permissions" + label: "Security Context" + schema: + type: dict + attrs: + - variable: privileged + label: "Privileged mode" + schema: + type: boolean + default: false + - variable: readOnlyRootFilesystem + label: "ReadOnly Root Filesystem" + schema: + type: boolean + default: true + - variable: allowPrivilegeEscalation + label: "Allow Privilege Escalation" + schema: + type: boolean + default: false + + - variable: resources + group: "Resources and Devices" + label: "" + schema: + type: dict + attrs: + - variable: limits + label: "Advanced Limit Resource Consumption" + schema: + type: dict + attrs: + - variable: cpu + label: "CPU" + schema: + type: string + default: "2000m" + - variable: memory + label: "Memory RAM" + schema: + type: string + default: "2Gi" + - variable: requests + label: "Advanced Request minimum resources required" + schema: + type: dict + attrs: + - variable: cpu + label: "CPU" + schema: + type: string + default: "10m" + - variable: memory + label: "Memory RAM" + schema: + type: string + default: "50Mi" + + - variable: autoscaling + group: "Resources and Devices" + label: "Horizontal Pod Autoscaler" + schema: + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: target + label: "Target" + description: "deployment name, defaults to main deployment" + schema: + type: string + default: "" + - variable: minReplicas + label: "Minimum Replicas" + schema: + type: int + default: 1 + - variable: maxReplicas + label: "Maximum Replicas" + schema: + type: int + default: 5 + - variable: targetCPUUtilizationPercentage + label: "Target CPU Utilization Percentage" + schema: + type: int + default: 80 + - variable: targetMemoryUtilizationPercentage + label: "Target Memory Utilization Percentage" + schema: + type: int + default: 80 diff --git a/charts/incubator/sogo/app-readme.md b/charts/incubator/sogo/app-readme.md new file mode 100644 index 00000000000..e69de29bb2d diff --git a/charts/incubator/sogo/helm-values.md b/charts/incubator/sogo/helm-values.md new file mode 100644 index 00000000000..e69de29bb2d diff --git a/charts/incubator/sogo/templates/_config.tpl b/charts/incubator/sogo/templates/_config.tpl new file mode 100644 index 00000000000..3430ac78c0e --- /dev/null +++ b/charts/incubator/sogo/templates/_config.tpl @@ -0,0 +1,154 @@ +{{/* Define the configmap */}} +{{- define "sogo.config" -}} +--- + +apiVersion: v1 +kind: Secret +metadata: + labels: + {{- include "common.labels" . | nindent 4 }} + name: dbcreds +{{- $dbprevious := lookup "v1" "Secret" .Release.Namespace "dbcreds" }} +{{- $dbPass := "" }} +data: +{{- if $dbprevious }} + {{- $dbPass = ( index $dbprevious.data "postgresql-password" ) | b64dec }} + postgresql-password: {{ ( index $dbprevious.data "postgresql-password" ) }} + postgresql-postgres-password: {{ ( index $dbprevious.data "postgresql-postgres-password" ) }} +{{- else }} + {{- $dbPass = randAlphaNum 50 }} + postgresql-password: {{ $dbPass | b64enc | quote }} + postgresql-postgres-password: {{ randAlphaNum 50 | b64enc | quote }} +{{- end }} + {{- $url := printf "%v%v:%v@%v-%v:%v/%v" "postgresql://" .Values.postgresql.postgresqlUsername $dbPass .Release.Name "postgresql" "5432" .Values.postgresql.postgresqlDatabase }} + url: {{ $url | b64enc | quote }} + plainhost: {{ ( printf "%v-%v" .Release.Name "postgresql" ) | b64enc | quote }} +type: Opaque + +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: sogo-config +data: + sogo.conf: | + { + /* ********************* Main SOGo configuration file ********************** + * * + * Since the content of this file is a dictionary in OpenStep plist format, * + * the curly braces enclosing the body of the configuration are mandatory. * + * See the Installation Guide for details on the format. * + * * + * C and C++ style comments are supported. * + * * + * This example configuration contains only a subset of all available * + * configuration parameters. Please see the installation guide more details. * + * * + * ~sogo/GNUstep/Defaults/.GNUstepDefaults has precedence over this file, * + * make sure to move it away to avoid unwanted parameter overrides. * + * * + * **************************************************************************/ + + /* Database configuration (mysql:// or postgresql://) */ + SOGoProfileURL = "{{ $url }}/sogo_user_profile"; + OCSFolderInfoURL = "{{ $url }}/sogo_folder_info"; + OCSSessionsFolderURL = "{{ $url }}/sogo_sessions_folder"; + + /* Mail */ + SOGoDraftsFolderName = {{ .Values.sogo.mail.SOGoDraftsFolderName | default "Drafts" }}; + SOGoSentFolderName = {{ .Values.sogo.mail.SOGoSentFolderName | default "Sent" }}; + SOGoTrashFolderName = {{ .Values.sogo.mail.SOGoTrashFolderName | default "Trash" }}; + SOGoIMAPServer = {{ .Values.sogo.mail.SOGoIMAPServer | default "localhost" }}; +{{- if .Values.sogo.mail.SOGoSieveServer}} + SOGoSieveServer = {{ .Values.sogo.mail.SOGoSieveServer | default "sieve://127.0.0.1:4190" }}; +{{- end }} + SOGoMailDomain = {{ .Values.sogo.mail.SOGoMailDomain | default "acme.com" }}; + SOGoMailingMechanism = {{ .Values.sogo.mail.SOGoMailingMechanism | default "smtp" }}; +{{- if eq .Values.sogo.mail.SOGoMailingMechanism "smtp" }} + SOGoSMTPServer = {{ .Values.sogo.mail.SOGoSMTPServer | default "smtp://domain:port/?tls=YES" }}; +{{- end }} + SOGoForceExternalLoginWithEmail = {{ if .Values.sogo.mail.SOGoForceExternalLoginWithEmail }}"YES"{{ else }}"NO"{{ end }}; + SOGoMailSpoolPath = {{ ( .Values.sogo.mail.SOGoMailSpoolPath | default "/var/spool/sogo") | quote }}; + NGMimeBuildMimeTempDirectory = {{ ( .Values.sogo.mail.NGMimeBuildMimeTempDirectory | default "/mimetmp") | quote }}; + + /* Notifications */ + SOGoAppointmentSendEMailNotifications = {{ if .Values.sogo.notifications.SOGoAppointmentSendEMailNotifications }}"YES"{{ else }}"NO"{{ end }}; + SOGoACLsSendEMailNotifications = {{ if .Values.sogo.notifications.SOGoACLsSendEMailNotifications }}"YES"{{ else }}"NO"{{ end }}; + SOGoFoldersSendEMailNotifications = {{ if .Values.sogo.notifications.SOGoFoldersSendEMailNotifications }}"YES"{{ else }}"NO"{{ end }}; + + /* Authentication */ + SOGoPasswordChangeEnabled = {{ if .Values.sogo.auth.SOGoPasswordChangeEnabled }}"YES"{{ else }}"NO"{{ end }}; + + /* User Sources */ +{{- if .Values.sogo.usersources }} + SOGoUserSources = ( + {{- range $index, $value := .Values.sogo.usersources }} + { + type = {{ $value.type | default "ldap" }}; + {{- if eq $value.type "ldap" }} + CNFieldName = {{ $value.CNFieldName | default "cn" }}; + UIDFieldName = {{ $value.UIDFieldName | default "uid" }}; + IDFieldName = {{ $value.IDFieldName | default "uid" }}; // first field of the DN for direct binds + bindFields = {{ $value.bindFields | default "(uid, mail)" }}; // array of fields to use for indirect binds + baseDN = {{ ( $value.baseDN | default "ou=users,dc=acme,dc=com" ) | quote }}; + bindDN = {{ ( $value.bindDN | default "uid=sogo,ou=users,dc=acme,dc=com" ) | quote }}; + bindPassword = {{ $value.bindPassword | default "qwerty" }}; + canAuthenticate = {{ if $value.canAuthenticate }}"YES"{{ else }}"NO"{{ end }}; + displayName = {{ ( $value.displayName | default "Shared Addresses" ) | quote }}; + hostname = {{ $value.hostname | default "ldap://127.0.0.1:389" }}; + id = {{ $value.id | default "public" }}; + isAddressBook = {{ if $value.isAddressBook }}"YES"{{ else }}"NO"{{ end }}; + {{- else if eq $value.type "sql" }} + id = {{ $value.sql.id | default "directory" }}; + viewURL = {{ ( $value.sql.viewURL | default "postgresql://sogo:sogo@127.0.0.1:5432/sogo/sogo_view" ) | quote }}; + canAuthenticate = {{ if $value.sql.canAuthenticate }}"YES"{{ else }}"NO"{{ end }}; + isAddressBook = {{ if $value.sql.isAddressBook }}"YES"{{ else }}"NO"{{ end }}; + userPasswordAlgorithm = {{ $value.sql.userPasswordAlgorithm | default "md5" }}; + {{- end }} + {{- range $value.custom }} + {{ .name }} = {{ .value }}; + {{- end }} + {{- if $index }} + } + {{- else }} + }, + {{- end }} + {{- end }} + ); +{{- end }} + + /* Web Interface */ + SOGoPageTitle = {{ .Values.sogo.webui.SOGoPageTitle | default "SOGo" }}; + SOGoVacationEnabled = {{ if .Values.sogo.webui.SOGoVacationEnabled }}"YES"{{ else }}"NO"{{ end }}; + SOGoForwardEnabled = {{ if .Values.sogo.webui.SOGoForwardEnabled }}"YES"{{ else }}"NO"{{ end }}; + SOGoSieveScriptsEnabled = {{ if .Values.sogo.webui.SOGoSieveScriptsEnabled }}"YES"{{ else }}"NO"{{ end }}; + SOGoMailAuxiliaryUserAccountsEnabled = {{ if .Values.sogo.webui.SOGoMailAuxiliaryUserAccountsEnabled }}"YES"{{ else }}"NO"{{ end }}; + SOGoTrustProxyAuthentication = {{ if .Values.sogo.webui.SOGoTrustProxyAuthentication }}"YES"{{ else }}"NO"{{ end }}; + SOGoXSRFValidationEnabled = {{ if .Values.sogo.webui.SOGoXSRFValidationEnabled }}"YES"{{ else }}"NO"{{ end }}; + + /* General - SOGoTimeZone *MUST* be defined */ + SOGoLanguage = {{ .Values.sogo.general.SOGoLanguage | default "English" }}; + SOGoTimeZone = {{ .Values.env.TZ | default "America/Montreal" }}; + SOGoSuperUsernames = ({{ .Values.sogo.general.SOGoSuperUsernames | default "" }}); // This is an array - keep the parens! + SxVMemLimit = {{ .Values.sogo.general.SxVMemLimit | default "384" }}; + SOGoMemcachedHost = {{ ( printf "%v-%v" .Release.Name "memcached" ) | quote }}; + + /* Debug */ + SOGoDebugRequests = {{ if .Values.sogo.debug.SOGoDebugRequests }}"YES"{{ else }}"NO"{{ end }}; + SoDebugBaseURL = {{ if .Values.sogo.debug.SoDebugBaseURL }}"YES"{{ else }}"NO"{{ end }}; + ImapDebugEnabled = {{ if .Values.sogo.debug.ImapDebugEnabled }}"YES"{{ else }}"NO"{{ end }}; + LDAPDebugEnabled = {{ if .Values.sogo.debug.LDAPDebugEnabled }}"YES"{{ else }}"NO"{{ end }}; + PGDebugEnabled = {{ if .Values.sogo.debug.PGDebugEnabled }}"YES"{{ else }}"NO"{{ end }}; + MySQL4DebugEnabled = {{ if .Values.sogo.debug.MySQL4DebugEnabled }}"YES"{{ else }}"NO"{{ end }}; + SOGoUIxDebugEnabled = {{ if .Values.sogo.debug.SOGoUIxDebugEnabled }}"YES"{{ else }}"NO"{{ end }}; + WODontZipResponse = {{ if .Values.sogo.debug.WODontZipResponse }}"YES"{{ else }}"NO"{{ end }}; + WOLogFile = {{ ( .Values.sogo.debug.WOLogFile | default "/var/log/sogo/sogo.log" ) | quote }}; + } + + /* Custom Arguments added by user */ + {{- range .Values.sogo.custom }} + {{ .name }} = {{ .value }}; + {{- end }} + +{{- end -}} diff --git a/charts/incubator/sogo/templates/common.yaml b/charts/incubator/sogo/templates/common.yaml new file mode 100644 index 00000000000..51e8201cc68 --- /dev/null +++ b/charts/incubator/sogo/templates/common.yaml @@ -0,0 +1,26 @@ +{{/* Make sure all variables are set properly */}} +{{- include "common.values.setup" . }} + +{{/* Render config and secrets for sogo */}} +{{- include "sogo.config" . }} + +{{/* Append the general configMap volume to the volumes */}} +{{- define "sogo.configmapVolume" -}} +enabled: "true" +mountPath: "/etc/sogo/sogo.conf" +readOnly: true +subPath: sogo.conf +type: "custom" +volumeSpec: + configMap: + name: sogo-config + items: + - key: sogo.conf + path: sogo.conf +{{- end -}} + +{{- $_ := set .Values.persistence "sogo-config" (include "sogo.configmapVolume" . | fromYaml) -}} + + +{{/* Render the templates */}} +{{ include "common.all" . }} diff --git a/charts/incubator/sogo/values.yaml b/charts/incubator/sogo/values.yaml new file mode 100644 index 00000000000..19bf6530d93 --- /dev/null +++ b/charts/incubator/sogo/values.yaml @@ -0,0 +1,142 @@ +# Default values for Bitwarden. +image: + repository: ghcr.io/truecharts/sogo + pullPolicy: IfNotPresent + tag: "v5.2.0" + +# -- services +service: + main: + ports: + main: + port: 80 + +# -- initcontainers +initContainers: + # -- wait for database before starting sogo + - name: init-postgresdb + image: postgres:13.1 + command: + - "sh" + - "-c" + - "until pg_isready -U sogo -h ${pghost} ; do sleep 2 ; done" + imagePullPolicy: IfNotPresent + env: + - name: pghost + valueFrom: + secretKeyRef: + name: dbcreds + key: plainhost + +# -- persistence settings +persistence: + data: + enabled: true + mountPath: "/data/conf/sogo/" + type: pvc + accessMode: ReadWriteOnce + size: "100Gi" + drafts: + enabled: true + mountPath: "/var/spool/sogo" + type: pvc + accessMode: ReadWriteOnce + size: "100Gi" + mimetmp: + enabled: true + mountPath: "/mimetmp" + type: emptyDir + + +# -- postgres dependency settings +postgresql: + enabled: true + postgresqlUsername: sogo + postgresqlDatabase: sogo + existingSecret: dbcreds + +# -- memcached dependency settings +memcached: + enabled: true + +# -- Sogo settings +sogo: + # -- Pre-configured Sogo mail settings + mail: + SOGoDraftsFolderName: "Drafts" + SOGoSentFolderName: "Sent" + SOGoTrashFolderName: "Trash" + SOGoIMAPServer: "localhost" + SOGoSieveServer: "" + SOGoMailDomain: "example.com" + SOGoMailingMechanism: "smtp" + SOGoSMTPServer: "smtp://domain:port" + SOGoForceExternalLoginWithEmail: false + SOGoMailSpoolPath: "/var/spool/sogo" + NGMimeBuildMimeTempDirectory: "/mimetmp" + # -- Pre-configured Sogo notifications settings + notifications: + SOGoAppointmentSendEMailNotifications: false + SOGoACLsSendEMailNotifications: false + SOGoFoldersSendEMailNotifications: false + # -- Pre-configured general Sogo settings + general: + SOGoLanguage: "English" + SOGoSuperUsernames: "" + SxVMemLimit: "384" + # -- Pre-configured Sogo authentication settings + auth: + SOGoPasswordChangeEnabled: true + # -- Sogo usersources + usersources: [] + # - type: "ldap" + # CNFieldName: "cn" + # UIDFieldName: "uid" + # IDFieldName: "uid" + # bindFields: "(uid, mail)" + # baseDN: "ou=users,dc=acme,dc=com" + # bindDN: "uid=sogo,ou=users,dc=acme,dc=com" + # bindPassword: "qwerty" + # canAuthenticate: true + # displayName: "Shared Addresses" + # hostname: "ldap://127.0.0.1:389" + # id: "public" + # isAddressBook: true + # custom: + # - name: name-of-ldap-setting + # value: somevalue + # + # - type: "sql" + # id: "directory" + # viewURL: "postgresql://sogo:sogo@127.0.0.1:5432/sogo/sogo_view" + # canAuthenticate: true + # isAddressBook: true + # userPasswordAlgorithm: "md5" + # custom: + # - name: name-of-sql-setting + # value: somevalue + + # -- Pre-configured Sogo debug settings + debug: + SOGoDebugRequests: false + SoDebugBaseURL: false + LDAPDebugEnabled: false + ImapDebugEnabled: false + PGDebugEnabled: false + MySQL4DebugEnabled: false + SOGoUIxDebugEnabled: false + WODontZipResponse: false + WOLogFile: "/var/log/sogo/sogo.log" + # -- Pre-configured Sogo webui settings + webui: + SOGoPageTitle: "SOGo" + SOGoVacationEnabled: true + SOGoForwardEnabled: true + SOGoSieveScriptsEnabled: true + SOGoMailAuxiliaryUserAccountsEnabled: true + SOGoTrustProxyAuthentication: false + SOGoXSRFValidationEnabled: true + # -- custom Sogo setting arguments + custom: [] + # - name: SOGoPageTitle + # value: "somevalue" diff --git a/docs/_static/img/sogo-icon.png b/docs/_static/img/sogo-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..70f1ae9ca5fbdd1c5bb30fb8c6111c197797241d GIT binary patch literal 9207 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 C)Td1V literal 0 HcmV?d00001