From 0bd82d2e3e1525be07943faa7cda111bd96d2f7d Mon Sep 17 00:00:00 2001 From: TrueCharts-Bot Date: Thu, 4 Nov 2021 20:41:46 +0000 Subject: [PATCH] Commit new App releases for TrueCharts Signed-off-by: TrueCharts-Bot --- stable/vaultwarden/12.0.6/CHANGELOG.md | 99 + stable/vaultwarden/12.0.6/CONFIG.md | 8 + stable/vaultwarden/12.0.6/Chart.lock | 9 + stable/vaultwarden/12.0.6/Chart.yaml | 36 + stable/vaultwarden/12.0.6/README.md | 38 + stable/vaultwarden/12.0.6/app-readme.md | 3 + .../12.0.6/charts/common-8.3.19.tgz | Bin 0 -> 33055 bytes .../12.0.6/charts/postgresql-5.1.7.tgz | Bin 0 -> 40854 bytes .../vaultwarden/12.0.6/ci/default-values.yaml | 0 .../vaultwarden/12.0.6/ci/ingress-values.yaml | 67 + stable/vaultwarden/12.0.6/helm-values.md | 55 + stable/vaultwarden/12.0.6/ix_values.yaml | 158 ++ stable/vaultwarden/12.0.6/questions.yaml | 2122 +++++++++++++++++ .../12.0.6/templates/_configmap.tpl | 116 + .../vaultwarden/12.0.6/templates/_secrets.tpl | 36 + .../12.0.6/templates/_validate.tpl | 17 + .../vaultwarden/12.0.6/templates/common.yaml | 38 + stable/vaultwarden/12.0.6/values.yaml | 0 18 files changed, 2802 insertions(+) create mode 100644 stable/vaultwarden/12.0.6/CHANGELOG.md create mode 100644 stable/vaultwarden/12.0.6/CONFIG.md create mode 100644 stable/vaultwarden/12.0.6/Chart.lock create mode 100644 stable/vaultwarden/12.0.6/Chart.yaml create mode 100644 stable/vaultwarden/12.0.6/README.md create mode 100644 stable/vaultwarden/12.0.6/app-readme.md create mode 100644 stable/vaultwarden/12.0.6/charts/common-8.3.19.tgz create mode 100644 stable/vaultwarden/12.0.6/charts/postgresql-5.1.7.tgz create mode 100644 stable/vaultwarden/12.0.6/ci/default-values.yaml create mode 100644 stable/vaultwarden/12.0.6/ci/ingress-values.yaml create mode 100644 stable/vaultwarden/12.0.6/helm-values.md create mode 100644 stable/vaultwarden/12.0.6/ix_values.yaml create mode 100644 stable/vaultwarden/12.0.6/questions.yaml create mode 100644 stable/vaultwarden/12.0.6/templates/_configmap.tpl create mode 100644 stable/vaultwarden/12.0.6/templates/_secrets.tpl create mode 100644 stable/vaultwarden/12.0.6/templates/_validate.tpl create mode 100644 stable/vaultwarden/12.0.6/templates/common.yaml create mode 100644 stable/vaultwarden/12.0.6/values.yaml diff --git a/stable/vaultwarden/12.0.6/CHANGELOG.md b/stable/vaultwarden/12.0.6/CHANGELOG.md new file mode 100644 index 00000000000..b30fad194e1 --- /dev/null +++ b/stable/vaultwarden/12.0.6/CHANGELOG.md @@ -0,0 +1,99 @@ +# Changelog
+ + + +### [vaultwarden-12.0.6](https://github.com/truecharts/apps/compare/vaultwarden-12.0.5...vaultwarden-12.0.6) (2021-11-04) + +#### Fix + +* correctly define ingress ([#1283](https://github.com/truecharts/apps/issues/1283)) + + + + +### [vaultwarden-12.0.5](https://github.com/truecharts/apps/compare/vaultwarden-12.0.4...vaultwarden-12.0.5) (2021-11-02) + +#### Chore + +* update non-major deps helm releases ([#1267](https://github.com/truecharts/apps/issues/1267)) + + + + +### [vaultwarden-12.0.4](https://github.com/truecharts/apps/compare/vaultwarden-12.0.3...vaultwarden-12.0.4) (2021-11-01) + +#### Chore + +* update non-major deps helm releases ([#1264](https://github.com/truecharts/apps/issues/1264)) + + + + +### [vaultwarden-12.0.3](https://github.com/truecharts/apps/compare/vaultwarden-12.0.2...vaultwarden-12.0.3) (2021-10-26) + +#### Chore + +* update helm chart postgresql to v5.1.4 ([#1249](https://github.com/truecharts/apps/issues/1249)) + + + + +### [vaultwarden-12.0.2](https://github.com/truecharts/apps/compare/vaultwarden-12.0.1...vaultwarden-12.0.2) (2021-10-26) + +#### Chore + +* update non-major deps helm releases ([#1245](https://github.com/truecharts/apps/issues/1245)) + + + + +### [vaultwarden-12.0.1](https://github.com/truecharts/apps/compare/vaultwarden-12.0.0...vaultwarden-12.0.1) (2021-10-26) + +#### Chore + +* update helm chart common to v8.3.15 ([#1240](https://github.com/truecharts/apps/issues/1240)) + + + + +### [vaultwarden-12.0.0](https://github.com/truecharts/apps/compare/vaultwarden-11.0.5...vaultwarden-12.0.0) (2021-10-26) + +#### Chore + +* update helm chart postgresql to v5 ([#1234](https://github.com/truecharts/apps/issues/1234)) +* update non-major ([#1232](https://github.com/truecharts/apps/issues/1232)) + + + + +### [vaultwarden-11.0.5](https://github.com/truecharts/apps/compare/vaultwarden-10.1.0...vaultwarden-11.0.5) (2021-10-26) + + + + +### [vaultwarden-10.1.0](https://github.com/truecharts/apps/compare/vaultwarden-11.0.0...vaultwarden-10.1.0) (2021-10-26) + +#### Fix + +* fix patch for important postgresql consumping apps + + + + +### [vaultwarden-11.0.0](https://github.com/truecharts/apps/compare/vaultwarden-10.0.3...vaultwarden-11.0.0) (2021-10-25) + +#### Chore + +* Adapt for TrueNAS SCALE RC1 + + + + +### [vaultwarden-10.0.3](https://github.com/truecharts/apps/compare/vaultwarden-10.0.0...vaultwarden-10.0.3) (2021-10-20) + +#### Chore + +* bump apps, remove duplicates and move incubator to stable for RC1 +* update non-major deps helm releases ([#1213](https://github.com/truecharts/apps/issues/1213)) + +#### Fix diff --git a/stable/vaultwarden/12.0.6/CONFIG.md b/stable/vaultwarden/12.0.6/CONFIG.md new file mode 100644 index 00000000000..fc9b2fa2d5f --- /dev/null +++ b/stable/vaultwarden/12.0.6/CONFIG.md @@ -0,0 +1,8 @@ +# Configuration Options + +##### Connecting to other apps +If you need to connect this App to other Apps on TrueNAS SCALE, please refer to our "Linking Apps Internally" quick-start guide: +https://truecharts.org/manual/Quick-Start%20Guides/14-linking-apps/ + +##### Available config options +In the future this page is going to contain an automated list of options available in the installation/edit UI. diff --git a/stable/vaultwarden/12.0.6/Chart.lock b/stable/vaultwarden/12.0.6/Chart.lock new file mode 100644 index 00000000000..924d5815314 --- /dev/null +++ b/stable/vaultwarden/12.0.6/Chart.lock @@ -0,0 +1,9 @@ +dependencies: +- name: common + repository: https://truecharts.org + version: 8.3.19 +- name: postgresql + repository: https://truecharts.org/ + version: 5.1.7 +digest: sha256:9ca72bff75244fed934f5f0ef33b2d3bd41a69bb37410bab6f5c96775c803bb3 +generated: "2021-11-04T20:37:12.721418305Z" diff --git a/stable/vaultwarden/12.0.6/Chart.yaml b/stable/vaultwarden/12.0.6/Chart.yaml new file mode 100644 index 00000000000..fc8875e6d01 --- /dev/null +++ b/stable/vaultwarden/12.0.6/Chart.yaml @@ -0,0 +1,36 @@ +apiVersion: v2 +appVersion: "1.23.0" +dependencies: +- name: common + repository: https://truecharts.org + version: 8.3.19 +- condition: postgresql.enabled + name: postgresql + repository: https://truecharts.org/ + version: 5.1.7 +deprecated: false +description: Unofficial Bitwarden compatible server written in Rust +home: https://github.com/truecharts/apps/tree/master/charts/stable/vaultwarden +icon: https://raw.githubusercontent.com/bitwarden/brand/master/icons/256x256.png +keywords: +- bitwarden +- bitwardenrs +- bitwarden_rs +- vaultwarden +- password +- rust +kubeVersion: '>=1.16.0-0' +maintainers: +- email: info@truecharts.org + name: TrueCharts + url: truecharts.org +name: vaultwarden +sources: +- https://github.com/dani-garcia/vaultwarden +type: application +version: 12.0.6 +annotations: + truecharts.org/catagories: | + - security + truecharts.org/SCALE-support: "true" + truecharts.org/grade: U diff --git a/stable/vaultwarden/12.0.6/README.md b/stable/vaultwarden/12.0.6/README.md new file mode 100644 index 00000000000..c485da42ae3 --- /dev/null +++ b/stable/vaultwarden/12.0.6/README.md @@ -0,0 +1,38 @@ +# Introduction + +Unofficial Bitwarden compatible server written in Rust + +TrueCharts are designed to be installed as TrueNAS SCALE app only. We can not guarantee this charts works as a stand-alone helm installation. +**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/apps/issues/new/choose)** + +## Source Code + +* + +## Requirements + +Kubernetes: `>=1.16.0-0` + +## Dependencies + +| Repository | Name | Version | +|------------|------|---------| +| https://truecharts.org/ | postgresql | 5.1.7 | +| https://truecharts.org | common | 8.3.19 | + +## Installing the Chart + +To install this App on TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/manual/Quick-Start%20Guides/03-Installing-an-App/). + +## Uninstalling the Chart + +To remove this App from TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/manual/Quick-Start%20Guides/07-Deleting-an-App/). + +## Support + +- Please check our [quick-start guides](https://truecharts.org/manual/Quick-Start%20Guides/01-Open-Apps/) first. +- See the [Wiki](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/apps/issues/new/choose) +--- +All Rights Reserved - The TrueCharts Project diff --git a/stable/vaultwarden/12.0.6/app-readme.md b/stable/vaultwarden/12.0.6/app-readme.md new file mode 100644 index 00000000000..adff46b5f72 --- /dev/null +++ b/stable/vaultwarden/12.0.6/app-readme.md @@ -0,0 +1,3 @@ +Unofficial Bitwarden compatible server written in Rust + +This App is supplied by TrueCharts, for more information please visit https://truecharts.org diff --git a/stable/vaultwarden/12.0.6/charts/common-8.3.19.tgz b/stable/vaultwarden/12.0.6/charts/common-8.3.19.tgz new file mode 100644 index 0000000000000000000000000000000000000000..ce25f65dcef53fa9b2e1b377a4bf948a2b6effb0 GIT binary patch literal 33055 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 literal 0 HcmV?d00001 diff --git a/stable/vaultwarden/12.0.6/charts/postgresql-5.1.7.tgz b/stable/vaultwarden/12.0.6/charts/postgresql-5.1.7.tgz new file mode 100644 index 0000000000000000000000000000000000000000..c12e8aea1c5305380b08e3bdb8cc584afd3ac81b GIT binary patch literal 40854 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 C+!H_m literal 0 HcmV?d00001 diff --git a/stable/vaultwarden/12.0.6/ci/default-values.yaml b/stable/vaultwarden/12.0.6/ci/default-values.yaml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/stable/vaultwarden/12.0.6/ci/ingress-values.yaml b/stable/vaultwarden/12.0.6/ci/ingress-values.yaml new file mode 100644 index 00000000000..c4f868fea02 --- /dev/null +++ b/stable/vaultwarden/12.0.6/ci/ingress-values.yaml @@ -0,0 +1,67 @@ +# -- Configure the ingresses for the chart here. +# Additional ingresses can be added by adding a dictionary key similar to the 'main' ingress. +# @default -- See below +ingress: + main: + # -- Enables or disables the ingress + enabled: true + + # -- Make this the primary ingress (used in probes, notes, etc...). + # If there is more than 1 ingress, make sure that only 1 ingress is marked as primary. + primary: true + + # -- Override the name suffix that is used for this ingress. + nameOverride: + + # -- List of middlewares in the traefikmiddlewares k8s namespace to add automatically + # Creates an annotation with the middlewares and appends k8s and traefik namespaces to the middleware names + # Primarily used for TrueNAS SCALE to add additional (seperate) middlewares without exposing them to the end-user + fixedMiddlewares: + - chain-basic + + # -- Additional List of middlewares in the traefikmiddlewares k8s namespace to add automatically + # Creates an annotation with the middlewares and appends k8s and traefik namespaces to the middleware names + middlewares: [] + annotationsList: [] + # - name: somename + # value: somevalue + # -- Provide additional annotations which may be required. + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + + labelsList: [] + # - name: somename + # value: somevalue + # -- Set labels on the deployment/statefulset/daemonset + # -- Provide additional labels which may be required. + # -- Provide additional labels which may be required. + labels: {} + + # -- Set the ingressClass that is used for this ingress. + # Requires Kubernetes >=1.19 + ingressClassName: # "nginx" + + ## Configure the hosts for the ingress + hosts: + - # -- Host address. Helm template can be passed. + host: chart-example.local + ## Configure the paths for the host + paths: + - # -- Path. Helm template can be passed. + path: / + # -- Ignored if not kubeVersion >= 1.14-0 + pathType: Prefix + service: + # -- Overrides the service name reference for this path + name: + # -- Overrides the service port reference for this path + port: + + # -- Configure TLS for the ingress. Both secretName and hosts can process a Helm template. + tls: [] + # - secretName: chart-example-tls + # -- Create a secret from a GUI selected TrueNAS SCALE certificate + # scaleCert: true + # hosts: + # - chart-example.local diff --git a/stable/vaultwarden/12.0.6/helm-values.md b/stable/vaultwarden/12.0.6/helm-values.md new file mode 100644 index 00000000000..712555e875d --- /dev/null +++ b/stable/vaultwarden/12.0.6/helm-values.md @@ -0,0 +1,55 @@ +# Default Helm-Values + +TrueCharts is primarily build to supply TrueNAS SCALE Apps. +However, we also supply all Apps as standard Helm-Charts. In this document we aim to document the default values in our values.yaml file. + +Most of our Apps also consume our "common" Helm Chart. +If this is the case, this means that all values.yaml values are set to the common chart values.yaml by default. This values.yaml file will only contain values that deviate from the common chart. +You will, however, be able to use all values referenced in the common chart here, besides the values listed in this document. + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| database.type | string | `"postgresql"` | | +| database.wal | bool | `true` | | +| env | object | `{}` | | +| envFrom[0].configMapRef.name | string | `"vaultwardenconfig"` | | +| envFrom[1].secretRef.name | string | `"vaultwardensecret"` | | +| envTpl.DOMAIN | string | `"https://{{ if .Values.ingress }}{{ if .Values.ingress.main.enabled }}{{ ( index .Values.ingress.main.hosts 0 ).host }}{{ else }}placeholder.com{{ end }}{{ else }}placeholder.com{{ end }}"` | | +| envValueFrom.DATABASE_URL.secretKeyRef.key | string | `"url"` | | +| envValueFrom.DATABASE_URL.secretKeyRef.name | string | `"dbcreds"` | | +| image.pullPolicy | string | `"IfNotPresent"` | | +| image.repository | string | `"ghcr.io/truecharts/vaultwarden"` | | +| image.tag | string | `"v1.23.0@sha256:1e65dd23569e566576c3c80de76f711e0b9fc5e29a39d45f49f0a44d1282d869"` | | +| persistence.data.accessMode | string | `"ReadWriteOnce"` | | +| persistence.data.enabled | bool | `true` | | +| persistence.data.mountPath | string | `"/data"` | | +| persistence.data.size | string | `"100Gi"` | | +| persistence.data.type | string | `"pvc"` | | +| postgresql.enabled | bool | `true` | | +| postgresql.existingSecret | string | `"dbcreds"` | | +| postgresql.postgresqlDatabase | string | `"vaultwarden"` | | +| postgresql.postgresqlUsername | string | `"vaultwarden"` | | +| service.main.ports.main.port | int | `8080` | | +| service.ws.ports.ws.enabled | bool | `true` | | +| service.ws.ports.ws.port | int | `3012` | | +| vaultwarden.admin.disableAdminToken | bool | `false` | | +| vaultwarden.admin.enabled | bool | `false` | | +| vaultwarden.allowInvitation | bool | `true` | | +| vaultwarden.allowSignups | bool | `true` | | +| vaultwarden.enableWebVault | bool | `true` | | +| vaultwarden.enableWebsockets | bool | `true` | | +| vaultwarden.icons.disableDownload | bool | `false` | | +| vaultwarden.log.file | string | `""` | | +| vaultwarden.log.level | string | `"trace"` | | +| vaultwarden.orgCreationUsers | string | `"all"` | | +| vaultwarden.requireEmail | bool | `false` | | +| vaultwarden.showPasswordHint | bool | `true` | | +| vaultwarden.smtp.enabled | bool | `false` | | +| vaultwarden.smtp.from | string | `""` | | +| vaultwarden.smtp.host | string | `""` | | +| vaultwarden.verifySignup | bool | `false` | | +| vaultwarden.yubico.enabled | bool | `false` | | + +All Rights Reserved - The TrueCharts Project diff --git a/stable/vaultwarden/12.0.6/ix_values.yaml b/stable/vaultwarden/12.0.6/ix_values.yaml new file mode 100644 index 00000000000..adf05486931 --- /dev/null +++ b/stable/vaultwarden/12.0.6/ix_values.yaml @@ -0,0 +1,158 @@ +# Default values for Bitwarden. + +image: + repository: ghcr.io/truecharts/vaultwarden + pullPolicy: IfNotPresent + tag: v1.23.0@sha256:1e65dd23569e566576c3c80de76f711e0b9fc5e29a39d45f49f0a44d1282d869 + +service: + main: + ports: + main: + port: 8080 + ws: + ports: + ws: + enabled: true + port: 3012 + +env: {} + +envTpl: + DOMAIN: "https://{{ if .Values.ingress }}{{ if .Values.ingress.main.enabled }}{{ ( index .Values.ingress.main.hosts 0 ).host }}{{ else }}placeholder.com{{ end }}{{ else }}placeholder.com{{ end }}" + +envFrom: + - configMapRef: + name: vaultwardenconfig + - secretRef: + name: vaultwardensecret + +envValueFrom: + DATABASE_URL: + secretKeyRef: + name: dbcreds + key: url + +database: + # Database type, must be one of: 'sqlite', 'mysql' or 'postgresql'. + type: postgresql + # Enable DB Write-Ahead-Log for SQLite, disabled for other databases. https://github.com/dani-garcia/bitwarden_rs/wiki/Running-without-WAL-enabled + wal: true + ## URL for external databases (mysql://user:pass@host:port or postgresql://user:pass@host:port). + # url: "" + ## Set the size of the database connection pool. + # maxConnections: 10 + ## Connection retries during startup, 0 for infinite. 1 second between retries. + # retries: 15 + +# Set Bitwarden_rs application variables +vaultwarden: + # Allow any user to sign-up: https://github.com/dani-garcia/bitwarden_rs/wiki/Disable-registration-of-new-users + allowSignups: true + ## Whitelist domains allowed to sign-up. 'allowSignups' is ignored if set. + # signupDomains: + # - domain.tld + # Verify e-mail before login is enabled. SMTP must be enabled. + verifySignup: false + # When a user logs in an email is required to be sent. If sending the email fails the login attempt will fail. SMTP must be enabled. + requireEmail: false + ## Maximum attempts before an email token is reset and a new email will need to be sent. + # emailAttempts: 3 + ## Email token validity in seconds. + # emailTokenExpiration: 600 + # Allow invited users to sign-up even feature is disabled: https://github.com/dani-garcia/bitwarden_rs/wiki/Disable-invitations + allowInvitation: true + # Show password hints: https://github.com/dani-garcia/bitwarden_rs/wiki/Password-hint-display + ## Default organization name in invitation e-mails that are not coming from a specific organization. + # defaultInviteName: "" + showPasswordHint: true + # Enable Websockets for notification. https://github.com/dani-garcia/bitwarden_rs/wiki/Enabling-WebSocket-notifications + # Redirect HTTP path "/notifications/hub" to port 3012. Ingress/IngressRoute controllers are automatically configured. + enableWebsockets: true + # Enable Web Vault (static content). https://github.com/dani-garcia/bitwarden_rs/wiki/Disabling-or-overriding-the-Vault-interface-hosting + enableWebVault: true + # Restrict creation of orgs. Options are: 'all', 'none' or a comma-separated list of users. + orgCreationUsers: all + ## Limit attachment disk usage per organization. + # attachmentLimitOrg: + ## Limit attachment disk usage per user. + # attachmentLimitUser: + ## HaveIBeenPwned API Key. Can be purchased at https://haveibeenpwned.com/API/Key. + # hibpApiKey: + + admin: + # Enable admin portal. + enabled: false + # Disabling the admin token will make the admin portal accessible to anyone, use carefully: https://github.com/dani-garcia/bitwarden_rs/wiki/Disable-admin-token + disableAdminToken: false + ## Token for admin login, will be generated if not defined. https://github.com/dani-garcia/bitwarden_rs/wiki/Enabling-admin-page + # token: + + # Enable SMTP. https://github.com/dani-garcia/bitwarden_rs/wiki/SMTP-configuration + smtp: + enabled: false + # SMTP hostname, required if SMTP is enabled. + host: "" + # SMTP sender e-mail address, required if SMTP is enabled. + from: "" + ## SMTP sender name, defaults to 'Bitwarden_RS'. + # fromName: "" + ## Enable SSL connection. + # ssl: true + ## SMTP port. Defaults to 25 without SSL, 587 with SSL. + # port: 587 + ## SMTP Authentication Mechanisms. Comma-separated options: 'Plain', 'Login' and 'Xoauth2'. Defaults to 'Plain'. + # authMechanism: Plain + ## Hostname to be sent for SMTP HELO. Defaults to pod name. + # heloName: "" + ## SMTP timeout. + # timeout: 15 + ## Accept SSL session if certificate is valid but hostname doesn't match. DANGEROUS, vulnerable to men-in-the-middle attacks! + # invalidHostname: false + ## Accept invalid certificates. DANGEROUS, vulnerable to men-in-the-middle attacks! + # invalidCertificate: false + ## SMTP username. + # user: "" + ## SMTP password. Required is user is specified, ignored if no user provided. + # password: "" + + ## Enable Yubico OTP authentication. https://github.com/dani-garcia/bitwarden_rs/wiki/Enabling-Yubikey-OTP-authentication + yubico: + enabled: false + ## Yubico server. Defaults to YubiCloud. + # server: + ## Yubico ID and Secret Key. + # clientId: + # secretKey: + + ## Logging options. https://github.com/dani-garcia/bitwarden_rs/wiki/Logging + log: + # Log to file. + file: "" + # Log level. Options are "trace", "debug", "info", "warn", "error" or "off". + level: "trace" + ## Log timestamp format. See https://docs.rs/chrono/0.4.15/chrono/format/strftime/index.html. Defaults to time in milliseconds. + # timeFormat: "" + + icons: + # Disables download of external icons. Setting to true will still serve icons from cache (/data/icon_cache). TTL will default to zero. + disableDownload: false + ## Cache time-to-live for icons fetched. 0 means no purging. + # cache: 2592000 + ## Cache time-to-live for icons that were not available. 0 means no purging. + # cacheFailed: 259200 + +persistence: + data: + enabled: true + mountPath: "/data" + type: pvc + accessMode: ReadWriteOnce + size: "100Gi" + +# Enabled postgres +postgresql: + enabled: true + existingSecret: "dbcreds" + postgresqlUsername: vaultwarden + postgresqlDatabase: vaultwarden diff --git a/stable/vaultwarden/12.0.6/questions.yaml b/stable/vaultwarden/12.0.6/questions.yaml new file mode 100644 index 00000000000..c51a8a5e61e --- /dev/null +++ b/stable/vaultwarden/12.0.6/questions.yaml @@ -0,0 +1,2122 @@ +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: "Middlewares" + description: "Traefik Middlewares" + - name: "Addons" + description: "Addon Configuration" + - 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: global + label: "global settings" + group: "Controller" + schema: + type: dict + hidden: true + attrs: + - variable: isSCALE + label: "flag this is SCALE" + schema: + type: boolean + default: true + hidden: 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: advanced + label: "Show Expert Configuration Options" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: extraArgs + label: "Extra Args" + schema: + type: list + default: [] + items: + - variable: argItem + label: "Arg" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + - 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: 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" + + - 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: expertpodconf + group: "Container Configuration" + label: "Show Expert Config" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: termination + group: "Container Configuration" + label: "Termination settings" + schema: + type: dict + attrs: + - variable: gracePeriodSeconds + label: "Grace Period Seconds" + schema: + type: int + default: 10 + - 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: vaultwarden + label: "" + group: "App Configuration" + schema: + type: dict + attrs: + - variable: yubico + label: "Yubico OTP authentication" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable Yubico OTP authentication" + description: "Please refer to the manual at: https://github.com/dani-garcia/vaultwarden/wiki/Enabling-Yubikey-OTP-authentication" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: server + label: "Yubico server" + description: "Defaults to YubiCloud" + schema: + type: string + default: "" + - variable: clientId + label: "Yubico ID" + schema: + type: string + default: "" + - variable: secretKey + label: "Yubico Secret Key" + schema: + type: string + default: "" + - variable: admin + label: "Admin Portal" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable Admin Portal" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: disableAdminToken + label: "Make Accessible Without Password/Token" + schema: + type: boolean + default: false + - variable: token + label: "Admin Portal Password/Token" + description: "Will be automatically generated if not defined" + schema: + type: string + default: "" + - variable: icons + label: "Icon Download Settings" + schema: + type: dict + attrs: + - variable: disableDownload + label: "Disable Icon Download" + description: "Disables download of external icons. Setting to true will still serve icons from cache (/data/icon_cache)" + schema: + type: boolean + default: false + - variable: cache + label: "Cache time-to-live" + description: "Cache time-to-live for icons fetched. 0 means no purging" + schema: + type: int + default: 2592000 + - variable: token + label: "Failed Downloads Cache time-to-live" + description: "Cache time-to-live for icons that were not available. 0 means no purging." + schema: + type: int + default: 2592000 + - variable: log + label: "Logging" + schema: + type: dict + attrs: + - variable: level + label: "Log level" + schema: + type: string + default: "info" + required: true + enum: + - value: "trace" + description: "trace" + - value: "debug" + description: "debug" + - value: "info" + description: "info" + - value: "warn" + description: "warn" + - value: "error" + description: "error" + - value: "off" + description: "off" + - variable: file + label: "Log-File Location" + schema: + type: string + default: "" + - variable: smtp + label: "SMTP Settings (Email)" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable SMTP Support" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: host + label: "SMTP hostname" + schema: + type: string + required: true + default: "" + - variable: from + label: "SMTP sender e-mail address" + schema: + type: string + required: true + default: "" + - variable: fromName + label: "SMTP sender name" + schema: + type: string + required: true + default: "" + - variable: user + label: "SMTP username" + schema: + type: string + required: true + default: "" + - variable: password + label: "SMTP password" + description: "Required is user is specified, ignored if no user provided" + schema: + type: string + default: "" + - variable: ssl + label: "Enable SSL connection" + schema: + type: boolean + default: true + - variable: port + label: "SMTP port" + description: "Usually: 25 without SSL, 587 with SSL" + schema: + type: int + default: 587 + - variable: authMechanism + label: "SMTP Authentication Mechanisms" + description: "Comma-separated options: Plain, Login and Xoauth2" + schema: + type: string + default: "Plain" + - variable: heloName + label: "SMTP HELO - Hostname" + description: "Hostname to be sent for SMTP HELO. Defaults to pod name" + schema: + type: string + default: "" + - variable: port + label: "SMTP timeout" + schema: + type: int + default: 15 + - variable: invalidHostname + label: "Accept Invalid Hostname" + description: "Accept SSL session if certificate is valid but hostname doesn't match. DANGEROUS, vulnerable to men-in-the-middle attacks!" + schema: + type: boolean + default: false + - variable: invalidCertificate + label: "Accept Invalid Certificate" + description: "Accept invalid certificates. DANGEROUS, vulnerable to men-in-the-middle attacks!" + schema: + type: boolean + default: false + - variable: allowSignups + label: "Allow Signup" + description: "Allow any user to sign-up: https://github.com/dani-garcia/vaultwarden/wiki/Disable-registration-of-new-users" + schema: + type: boolean + default: true + - variable: allowInvitation + label: "Always allow Invitation" + description: "Allow invited users to sign-up even feature is disabled: https://github.com/dani-garcia/vaultwarden/wiki/Disable-invitations" + schema: + type: boolean + default: true + - variable: defaultInviteName + label: "Default Invite Organisation Name" + description: "Default organization name in invitation e-mails that are not coming from a specific organization." + schema: + type: string + default: "" + - variable: showPasswordHint + label: "Show password hints" + description: "https://github.com/dani-garcia/vaultwarden/wiki/Password-hint-display" + schema: + type: boolean + default: true + - variable: signupwhitelistenable + label: "Enable Signup Whitelist" + description: "allowSignups is ignored if set" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: signupDomains + label: "Signup Whitelist Domains" + schema: + type: list + default: [] + items: + - variable: domain + label: "Domain" + schema: + type: string + default: "" + - variable: verifySignup + label: "Verifiy Signup" + description: "Verify e-mail before login is enabled. SMTP must be enabled" + schema: + type: boolean + default: false + - variable: requireEmail + label: "Block Login if email fails" + description: "When a user logs in an email is required to be sent. If sending the email fails the login attempt will fail. SMTP must be enabled" + schema: + type: boolean + default: false + - variable: emailAttempts + label: "Email token reset attempts" + description: "Maximum attempts before an email token is reset and a new email will need to be sent" + schema: + type: int + default: 3 + - variable: emailTokenExpiration + label: "Email token validity in seconds" + schema: + type: int + default: 600 + - variable: enableWebsockets + label: "Enable Websocket Connections" + description: "Enable Websockets for notification. https://github.com/dani-garcia/vaultwarden/wiki/Enabling-WebSocket-notifications" + schema: + type: boolean + default: true + hidden: true + - variable: enableWebVault + label: "Enable Webvault" + description: "Enable Web Vault (static content). https://github.com/dani-garcia/vaultwarden/wiki/Disabling-or-overriding-the-Vault-interface-hosting" + schema: + type: boolean + default: true + - variable: orgCreationUsers + label: "Limit Organisation Creation to (users)" + description: "Restrict creation of orgs. Options are: 'all', 'none' or a comma-separated list of users." + schema: + type: string + default: "all" + - variable: attachmentLimitOrg + label: "Limit Attachment Disk Usage per Organisation" + schema: + type: string + default: "" + - variable: attachmentLimitUser + label: "Limit Attachment Disk Usage per User" + schema: + type: string + default: "" + - variable: hibpApiKey + label: "HaveIBeenPwned API Key" + description: "Can be purchased at https://haveibeenpwned.com/API/Key" + schema: + type: string + default: "" + + - 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: 8080 + editable: false + hidden: true + - variable: port + label: "Container Port" + schema: + type: int + default: 8080 + 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: 36000 + - variable: ws + label: "WebSocket Service" + description: "WebSocket Service" + 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: "ClusterIP" + 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: ws + label: "WebSocket 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: 3012 + editable: false + hidden: true + - variable: port + label: "Container Port" + schema: + type: int + default: 3012 + 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: 36001 + + - variable: serviceexpert + group: "Networking and Services" + label: "Show Expert Config" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostNetwork + group: "Networking and Services" + label: "Host-Networking (Complicated)" + schema: + type: boolean + default: false + + - variable: dnsPolicy + group: "Networking and Services" + label: "dnsPolicy" + schema: + type: string + default: "" + enum: + - value: "" + description: "Default" + - value: "ClusterFirst" + description: "ClusterFirst" + - value: "ClusterFirstWithHostNet" + description: "ClusterFirstWithHostNet" + - value: "None" + description: "None" + + - variable: dnsConfig + label: "DNS Configuration" + group: "Networking and Services" + description: "Specify custom DNS configuration which will be applied to the pod" + schema: + type: dict + attrs: + - variable: nameservers + label: "Nameservers" + schema: + default: [] + type: list + items: + - variable: nameserver + label: "Nameserver" + schema: + type: string + - variable: options + label: "options" + schema: + default: [] + type: list + items: + - variable: option + label: "Option Entry" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + - variable: searches + label: "Searches" + schema: + default: [] + type: list + items: + - variable: search + label: "Search Entry" + schema: + type: string + + - variable: serviceList + label: "Add Manual Custom Services" + group: "Networking and Services" + schema: + type: list + default: [] + items: + - variable: serviceListEntry + label: "Custom Service" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable the service" + schema: + type: boolean + default: true + hidden: true + - variable: name + label: "Name" + schema: + type: string + default: "" + - 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: portsList + label: "Additional Service Ports" + schema: + type: list + default: [] + items: + - variable: portsListEntry + label: "Custom ports" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable the port" + schema: + type: boolean + default: true + hidden: true + - variable: name + label: "Port Name" + schema: + type: string + default: "" + - variable: protocol + label: "Port Type" + schema: + type: string + default: "TCP" + 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 + required: true + - variable: port + label: "Container Port" + schema: + type: int + 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 + + - variable: persistence + label: "Integrated Persistent Storage" + description: "Integrated Persistent Storage" + group: "Storage and Persistence" + schema: + type: dict + attrs: + - variable: data + label: "App Config Storage" + description: "Stores the Application Configuration." + 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" + hidden: true + valid_chars: '^\/([a-zA-Z0-9._-]+\/?)+$' + - 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 + hidden: true + - variable: advanced + label: "Show Advanced Options" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - 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: 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: "(Advanced) 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: "" + required: true + valid_chars: '^\/([a-zA-Z0-9._-]+\/?)+$' + - variable: medium + label: "EmptyDir Medium" + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: "Default" + - value: "Memory" + description: "Memory" + - variable: accessMode + label: "(Advanced) Access Mode" + 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: 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: "(Advanced) 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: expert + label: "Show Expert Configuration Options" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enableFixedMiddlewares + description: "These middlewares enforce a number of best practices." + label: "Enable Default Middlewares" + schema: + type: boolean + default: true + - 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: ingressList + label: "Add Manual Custom Ingresses" + 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: runAsNonRoot + label: "runAsNonRoot" + schema: + type: boolean + default: true + + - variable: podSecurityContext + group: "Security and Permissions" + label: "Pod Security Context" + schema: + type: dict + attrs: + - variable: runAsUser + label: "runAsUser" + description: "The UserID of the user running the application" + schema: + type: int + default: 568 + - variable: runAsGroup + label: "runAsGroup" + description: The groupID this App of the user running the application" + schema: + type: int + default: 568 + - variable: fsGroup + label: "fsGroup" + description: "The group that should own ALL storage." + schema: + type: int + default: 568 + - variable: supplementalGroups + label: "supplemental Groups" + schema: + type: list + default: [] + items: + - variable: supplementalGroupsEntry + label: "supplemental Group" + schema: + type: int + - variable: fsGroupChangePolicy + label: "When should we take ownership?" + schema: + type: string + default: "OnRootMismatch" + enum: + - value: "OnRootMismatch" + description: "OnRootMismatch" + - value: "Always" + description: "Always" + + + # Specify GPU configuration + - variable: scaleGPU + label: "GPU Configuration" + group: "Resources and Devices" + schema: + type: dict + $ref: + - "definitions/gpuConfiguration" + attrs: [] + + - 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: "4000m" + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: "Memory RAM" + schema: + type: string + default: "8Gi" + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: requests + label: "Advanced Request minimum resources required" + schema: + type: dict + attrs: + - variable: cpu + label: "CPU" + schema: + type: string + default: "10m" + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: "Memory RAM" + schema: + type: string + default: "50Mi" + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + + - variable: deviceList + label: "Mount USB devices" + group: "Resources and Devices" + schema: + type: list + default: [] + items: + - variable: deviceListEntry + label: "Device" + 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" + hidden: true + - variable: readOnly + label: "readOnly" + schema: + type: boolean + default: false + - variable: hostPath + label: "Host Device Path" + description: "Path to the device on the host system" + schema: + type: path + - variable: mountPath + label: "Container Device Path" + description: "Path inside the container the device is mounted" + schema: + type: string + default: "/dev/ttyACM0" + + - variable: autoscaling + group: "Resources and Devices" + label: "(Advanced) 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 + + + - variable: addons + group: "Addons" + label: "" + schema: + type: dict + attrs: + - variable: vpn + label: "VPN" + schema: + type: dict + attrs: + - variable: type + label: "Type" + schema: + type: string + default: "disabled" + enum: + - value: "disabled" + description: "disabled" + - value: "openvpn" + description: "OpenVPN" + - value: "wireguard" + description: "Wireguard" + - variable: openvpn + label: "OpenVPN Settings" + schema: + type: dict + show_if: [["type", "=", "openvpn"]] + attrs: + - variable: username + label: "authentication username" + description: "authentication username, optional" + schema: + type: string + default: "" + - variable: password + label: "authentication password" + description: "authentication credentials" + schema: + type: string + default: "" + required: true + - variable: killSwitch + label: "Enable killswitch" + schema: + type: boolean + show_if: [["type", "!=", "disabled"]] + default: true + - variable: excludedNetworks_IPv4 + label: "Killswitch Excluded IPv4 networks" + description: "list of killswitch excluded ipv4 addresses" + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: networkv4 + label: "IPv4 Network" + schema: + type: string + required: true + - variable: excludedNetworks_IPv6 + label: "Killswitch Excluded IPv6 networks" + description: "list of killswitch excluded ipv4 addresses" + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: networkv6 + label: "IPv6 Network" + schema: + type: string + required: true + + - variable: configFile + label: "VPN Config File Location" + schema: + type: dict + show_if: [["type", "!=", "disabled"]] + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: true + hidden: true + - variable: type + label: "type" + schema: + type: string + default: "hostPath" + hidden: true + - variable: hostPathType + label: "hostPathType" + schema: + type: string + default: "File" + hidden: true + - variable: noMount + label: "noMount" + schema: + type: boolean + default: true + hidden: true + - variable: hostPath + label: "Full path to file" + description: "path to your local VPN config file for example: /mnt/tank/vpn.conf or /mnt/tank/vpn.ovpn" + schema: + type: string + default: "" + required: true + - variable: envList + label: "VPN environment Variables" + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: "Environment Variable" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + required: true + - variable: value + label: "Value" + schema: + type: string + required: true + + - variable: codeserver + label: "Codeserver" + schema: + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: git + label: "Git Settings" + schema: + type: dict + attrs: + - variable: deployKey + description: "Raw SSH private key" + label: "deployKey" + schema: + type: string + - variable: deployKeyBase64 + description: "Base64-encoded SSH private key. When both variables are set, the raw SSH key takes precedence" + label: "deployKeyBase64" + schema: + type: string + - variable: service + label: "" + schema: + type: dict + attrs: + - 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: "" + schema: + type: dict + attrs: + - variable: codeserver + label: "" + schema: + type: dict + attrs: + - variable: nodePort + description: "leave empty to disable" + label: "nodePort" + schema: + type: int + default: 36107 + - variable: envList + label: "Codeserver environment Variables" + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: "Environment Variable" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + required: true + - variable: value + label: "Value" + schema: + type: string + required: true + + + - variable: promtail + label: "Promtail" + schema: + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: loki + label: "Loki URL" + schema: + type: string + required: true + - variable: logs + label: "Log Paths" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + required: true + - variable: path + label: "Path" + schema: + type: string + required: true + - variable: args + label: "Promtail ecommand line arguments" + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: arg + label: "Arg" + schema: + type: string + required: true + - variable: envList + label: "Promtail environment Variables" + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: "Environment Variable" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + required: true + - variable: value + label: "Value" + schema: + type: string + required: true + + + + + - variable: netshoot + label: "Netshoot" + schema: + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: envList + label: "Netshoot environment Variables" + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: "Environment Variable" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + required: true + - variable: value + label: "Value" + schema: + type: string + required: true diff --git a/stable/vaultwarden/12.0.6/templates/_configmap.tpl b/stable/vaultwarden/12.0.6/templates/_configmap.tpl new file mode 100644 index 00000000000..8809925abdf --- /dev/null +++ b/stable/vaultwarden/12.0.6/templates/_configmap.tpl @@ -0,0 +1,116 @@ +{{/* Define the configmap */}} +{{- define "vaultwarden.configmap" -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: vaultwardenconfig +data: + ROCKET_PORT: "8080" + SIGNUPS_ALLOWED: {{ .Values.vaultwarden.allowSignups | quote }} + {{- if .Values.vaultwarden.signupDomains }} + SIGNUPS_DOMAINS_WHITELIST: {{ join "," .Values.vaultwarden.signupDomains | quote }} + {{- end }} + {{- if and (eq .Values.vaultwarden.verifySignup true) (eq .Values.vaultwarden.smtp.enabled false) }}{{ required "Signup verification requires SMTP to be enabled" nil}}{{end}} + SIGNUPS_VERIFY: {{ .Values.vaultwarden.verifySignup | quote }} + {{- if and (eq .Values.vaultwarden.requireEmail true) (eq .Values.vaultwarden.smtp.enabled false) }}{{ required "Requiring emails for login depends on SMTP" nil}}{{end}} + REQUIRE_DEVICE_EMAIL: {{ .Values.vaultwarden.requireEmail | quote }} + {{- if .Values.vaultwarden.emailAttempts }} + EMAIL_ATTEMPTS_LIMIT: {{ .Values.vaultwarden.emailAttempts | quote }} + {{- end }} + {{- if .Values.vaultwarden.emailTokenExpiration }} + EMAIL_EXPIRATION_TIME: {{ .Values.vaultwarden.emailTokenExpiration | quote }} + {{- end }} + INVITATIONS_ALLOWED: {{ .Values.vaultwarden.allowInvitation | quote }} + {{- if .Values.vaultwarden.defaultInviteName }} + INVITATION_ORG_NAME: {{ .Values.vaultwarden.defaultInviteName | quote }} + {{- end }} + SHOW_PASSWORD_HINT: {{ .Values.vaultwarden.showPasswordHint | quote }} + WEBSOCKET_ENABLED: {{ .Values.vaultwarden.enableWebsockets | quote }} + WEB_VAULT_ENABLED: {{ .Values.vaultwarden.enableWebVault | quote }} + ORG_CREATION_USERS: {{ .Values.vaultwarden.orgCreationUsers | quote }} + {{- if .Values.vaultwarden.attachmentLimitOrg }} + ORG_ATTACHMENT_LIMIT: {{ .Values.vaultwarden.attachmentLimitOrg | quote }} + {{- end }} + {{- if .Values.vaultwarden.attachmentLimitUser }} + USER_ATTACHMENT_LIMIT: {{ .Values.vaultwarden.attachmentLimitUser | quote }} + {{- end }} + {{- if .Values.vaultwarden.hibpApiKey }} + HIBP_API_KEY: {{ .Values.vaultwarden.hibpApiKey | quote }} + {{- end }} + {{- include "vaultwarden.dbTypeValid" . }} + {{- if .Values.database.retries }} + DB_CONNECTION_RETRIES: {{ .Values.database.retries | quote }} + {{- end }} + {{- if .Values.database.maxConnections }} + DATABASE_MAX_CONNS: {{ .Values.database.maxConnections | quote }} + {{- end }} + {{- if eq .Values.vaultwarden.smtp.enabled true }} + SMTP_HOST: {{ required "SMTP host is required to enable SMTP" .Values.vaultwarden.smtp.host | quote }} + SMTP_FROM: {{ required "SMTP sender address ('from') is required to enable SMTP" .Values.vaultwarden.smtp.from | quote }} + {{- if .Values.vaultwarden.smtp.fromName }} + SMTP_FROM_NAME: {{ .Values.vaultwarden.smtp.fromName | quote }} + {{- end }} + {{- if .Values.vaultwarden.smtp.ssl }} + SMTP_SSL: {{ .Values.vaultwarden.smtp.ssl | quote }} + {{- end }} + {{- if .Values.vaultwarden.smtp.port }} + SMTP_PORT: {{ .Values.vaultwarden.smtp.port | quote }} + {{- end }} + {{- if .Values.vaultwarden.smtp.authMechanism }} + SMTP_AUTH_MECHANISM: {{ .Values.vaultwarden.smtp.authMechanism | quote }} + {{- end }} + {{- if .Values.vaultwarden.smtp.heloName }} + HELO_NAME: {{ .Values.vaultwarden.smtp.heloName | quote }} + {{- end }} + {{- if .Values.vaultwarden.smtp.timeout }} + SMTP_TIMEOUT: {{ .Values.vaultwarden.smtp.timeout | quote }} + {{- end }} + {{- if .Values.vaultwarden.smtp.invalidHostname }} + SMTP_ACCEPT_INVALID_HOSTNAMES: {{ .Values.vaultwarden.smtp.invalidHostname | quote }} + {{- end }} + {{- if .Values.vaultwarden.smtp.invalidCertificate }} + SMTP_ACCEPT_INVALID_CERTS: {{ .Values.vaultwarden.smtp.invalidCertificate | quote }} + {{- end }} + {{- end }} + {{- if .Values.vaultwarden.log.file }} + LOG_FILE: {{ .Values.vaultwarden.log.file | quote }} + {{- end }} + {{- if or .Values.vaultwarden.log.level .Values.vaultwarden.log.timeFormat }} + EXTENDED_LOGGING: "true" + {{- end }} + {{- if .Values.vaultwarden.log.level }} + {{- include "vaultwarden.logLevelValid" . }} + LOG_LEVEL: {{ .Values.vaultwarden.log.level | quote }} + {{- end }} + {{- if .Values.vaultwarden.log.timeFormat }} + LOG_TIMESTAMP_FORMAT: {{ .Values.vaultwarden.log.timeFormat | quote }} + {{- end }} + {{- if .Values.vaultwarden.icons.disableDownload }} + DISABLE_ICON_DOWNLOAD: {{ .Values.vaultwarden.icons.disableDownload | quote }} + {{- if and (not .Values.vaultwarden.icons.cache) (eq .Values.vaultwarden.icons.disableDownload "true") }} + ICON_CACHE_TTL: "0" + {{- end }} + {{- end }} + {{- if .Values.vaultwarden.icons.cache }} + ICON_CACHE_TTL: {{ .Values.vaultwarden.icons.cache | quote }} + {{- end }} + {{- if .Values.vaultwarden.icons.cacheFailed }} + ICON_CACHE_NEGTTL: {{ .Values.vaultwarden.icons.cacheFailed | quote }} + {{- end }} + {{- if eq .Values.vaultwarden.admin.enabled true }} + {{- if eq .Values.vaultwarden.admin.disableAdminToken true }} + DISABLE_ADMIN_TOKEN: "true" + {{- end }} + {{- end }} + {{- if eq .Values.vaultwarden.yubico.enabled true }} + {{- if .Values.vaultwarden.yubico.server }} + YUBICO_SERVER: {{ .Values.vaultwarden.yubico.server | quote }} + {{- end }} + {{- end }} + {{- if eq .Values.database.type "sqlite" }} + ENABLE_DB_WAL: {{ .Values.database.wal | quote }} + {{- else }} + ENABLE_DB_WAL: "false" + {{- end }} +{{- end -}} diff --git a/stable/vaultwarden/12.0.6/templates/_secrets.tpl b/stable/vaultwarden/12.0.6/templates/_secrets.tpl new file mode 100644 index 00000000000..ca5ec74b0af --- /dev/null +++ b/stable/vaultwarden/12.0.6/templates/_secrets.tpl @@ -0,0 +1,36 @@ +{{/* Define the secrets */}} +{{- define "vaultwarden.secrets" -}} + +{{- $adminToken := "" }} +{{- if eq .Values.vaultwarden.admin.enabled true }} +{{- $adminToken = .Values.vaultwarden.admin.token | default (randAlphaNum 48) | b64enc | quote }} +{{- end -}} + +{{- $smtpUser := "" }} +{{- if and (eq .Values.vaultwarden.smtp.enabled true ) (.Values.vaultwarden.smtp.user) }} +{{- $smtpUser = .Values.vaultwarden.smtp.user | b64enc | quote }} +{{- end -}} + +{{- $yubicoClientId := "" }} +{{- if eq .Values.vaultwarden.yubico.enabled true }} +{{- $yubicoClientId = required "Yubico Client ID required" .Values.vaultwarden.yubico.clientId | toString | b64enc | quote }} +{{- end -}} +--- + +apiVersion: v1 +kind: Secret +metadata: + name: vaultwardensecret +data: + {{- if ne $adminToken "" }} + ADMIN_TOKEN: {{ $adminToken }} + {{- end }} + {{- if ne $smtpUser "" }} + SMTP_USERNAME: {{ $smtpUser }} + SMTP_PASSWORD: {{ required "Must specify SMTP password" .Values.vaultwarden.smtp.password | b64enc | quote }} + {{- end }} + {{- if ne $yubicoClientId "" }} + YUBICO_CLIENT_ID: {{ $yubicoClientId }} + YUBICO_SECRET_KEY: {{ required "Yubico Secret Key required" .Values.vaultwarden.yubico.secretKey | b64enc | quote }} + {{- end }} +{{- end -}} diff --git a/stable/vaultwarden/12.0.6/templates/_validate.tpl b/stable/vaultwarden/12.0.6/templates/_validate.tpl new file mode 100644 index 00000000000..e4832c2f6e5 --- /dev/null +++ b/stable/vaultwarden/12.0.6/templates/_validate.tpl @@ -0,0 +1,17 @@ +{{/* +Ensure valid DB type is select, defaults to SQLite +*/}} +{{- define "vaultwarden.dbTypeValid" -}} +{{- if not (or (eq .Values.database.type "postgresql") (eq .Values.database.type "mysql") (eq .Values.database.type "sqlite")) }} +{{- required "Invalid database type" nil }} +{{- end -}} +{{- end -}} + +{{/* +Ensure log type is valid +*/}} +{{- define "vaultwarden.logLevelValid" -}} +{{- if not (or (eq .Values.vaultwarden.log.level "trace") (eq .Values.vaultwarden.log.level "debug") (eq .Values.vaultwarden.log.level "info") (eq .Values.vaultwarden.log.level "warn") (eq .Values.vaultwarden.log.level "error") (eq .Values.vaultwarden.log.level "off")) }} +{{- required "Invalid log level" nil }} +{{- end }} +{{- end }} diff --git a/stable/vaultwarden/12.0.6/templates/common.yaml b/stable/vaultwarden/12.0.6/templates/common.yaml new file mode 100644 index 00000000000..23381ff8a0c --- /dev/null +++ b/stable/vaultwarden/12.0.6/templates/common.yaml @@ -0,0 +1,38 @@ +{{/* Make sure all variables are set properly */}} +{{- include "common.setup" . }} + + +{{/* Render configmap for vaultwarden */}} +{{- include "vaultwarden.configmap" . }} + +{{/* Render secrets for vaultwarden */}} +{{- include "vaultwarden.secrets" . }} + +{{/* Define path for websocket */}} +{{- define "vaultwarden.websocket" -}} +path: "/notifications/hub" +# -- Ignored if not kubeVersion >= 1.14-0 +pathType: Prefix +service: + # -- Overrides the service name reference for this path + name: ws + port: {{ .Values.service.ws.ports.ws.port }} +{{- end -}} + +{{/* inject websocket path to all main ingress hosts*/}} +{{- define "vaultwarden.websocketinjector" -}} +{{- $path := list (include "vaultwarden.websocket" . | fromYaml) -}} +{{- if .Values.ingress.main.enabled }} +{{- range .Values.ingress.main.hosts }} +{{- $newpaths := list }} +{{- $newpaths := concat .paths $path }} +{{- $_ := set . "paths" ( deepCopy $newpaths ) -}} +{{- end }} +{{- end }} +{{- end -}} + +{{/* inject websocket paths in ingress */}} +{{- include "vaultwarden.websocketinjector" . }} + +{{/* Render the templates */}} +{{ include "common.postSetup" . }} diff --git a/stable/vaultwarden/12.0.6/values.yaml b/stable/vaultwarden/12.0.6/values.yaml new file mode 100644 index 00000000000..e69de29bb2d