mirror of
https://github.com/bjw-s-labs/helm-charts.git
synced 2025-07-03 08:37:03 +02:00
feat(common): Release 2.0.0 (#189)
This commit is contained in:
parent
8a42d212af
commit
98677d85b2
56 changed files with 1192 additions and 1804 deletions
82
.ci/mkdocs/mkdocs.yml
Normal file
82
.ci/mkdocs/mkdocs.yml
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
---
|
||||||
|
# Project information
|
||||||
|
site_name: bjw-s Helm Charts
|
||||||
|
site_url: https://bjw-s.github.io/helm-charts/
|
||||||
|
site_author: bjw-s
|
||||||
|
|
||||||
|
# Repository
|
||||||
|
repo_name: bjw-s/helm-charts
|
||||||
|
repo_url: https://github.com/bjw-s/helm-charts
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
docs_dir: ../../docs
|
||||||
|
site_dir: ../../site
|
||||||
|
|
||||||
|
theme:
|
||||||
|
name: material
|
||||||
|
custom_dir: ../../docs/overrides
|
||||||
|
features:
|
||||||
|
- announce.dismiss
|
||||||
|
- content.code.annotate
|
||||||
|
- content.code.copy
|
||||||
|
- navigation.expand
|
||||||
|
- navigation.indexes
|
||||||
|
- navigation.path
|
||||||
|
- navigation.sections
|
||||||
|
- navigation.tabs
|
||||||
|
- navigation.top
|
||||||
|
- search.suggest
|
||||||
|
palette:
|
||||||
|
scheme: slate
|
||||||
|
primary: black
|
||||||
|
accent: indigo
|
||||||
|
font:
|
||||||
|
text: Roboto
|
||||||
|
code: Roboto Mono
|
||||||
|
icon:
|
||||||
|
logo: material/kubernetes
|
||||||
|
|
||||||
|
# Plugins
|
||||||
|
plugins:
|
||||||
|
- search:
|
||||||
|
separator: '[\s\u200b\-_,:!=\[\]()"`/]+|\.(?!\d)|&[lg]t;|(?!\b)(?=[A-Z][a-z])'
|
||||||
|
- minify:
|
||||||
|
minify_html: true
|
||||||
|
|
||||||
|
# Extensions
|
||||||
|
markdown_extensions:
|
||||||
|
- admonition
|
||||||
|
- pymdownx.highlight:
|
||||||
|
anchor_linenums: true
|
||||||
|
line_spans: __span
|
||||||
|
pygments_lang_class: true
|
||||||
|
- pymdownx.inlinehilite
|
||||||
|
- pymdownx.snippets:
|
||||||
|
check_paths: true
|
||||||
|
- pymdownx.superfences
|
||||||
|
- toc:
|
||||||
|
permalink: true
|
||||||
|
toc_depth: 3
|
||||||
|
|
||||||
|
# Page tree
|
||||||
|
nav:
|
||||||
|
- index.md
|
||||||
|
- Common Library:
|
||||||
|
- common-library/index.md
|
||||||
|
- Storage:
|
||||||
|
- Permissions: common-library/storage/permissions.md
|
||||||
|
- Global options: common-library/storage/globalOptions.md
|
||||||
|
- Types-specific options:
|
||||||
|
- configMap: common-library/storage/types/configmap.md
|
||||||
|
- Custom: common-library/storage/types/custom.md
|
||||||
|
- emptyDir: common-library/storage/types/emptyDir.md
|
||||||
|
- hostPath: common-library/storage/types/hostPath.md
|
||||||
|
- NFS share: common-library/storage/types/nfs-share.md
|
||||||
|
- persistentVolumeClaim: common-library/storage/types/persistentVolumeClaim.md
|
||||||
|
- Secret: common-library/storage/types/secret.md
|
||||||
|
- How To...:
|
||||||
|
- common-library/howto/index.md
|
||||||
|
- Helm templates: common-library/howto/helm-templates.md
|
||||||
|
- Multiple subPaths for 1 volume: common-library/howto/multiple-subpath.md
|
||||||
|
- App Template:
|
||||||
|
- app-template/index.md
|
23
.github/workflows/docs-release.yaml
vendored
23
.github/workflows/docs-release.yaml
vendored
|
@ -7,8 +7,12 @@ on:
|
||||||
- main
|
- main
|
||||||
paths:
|
paths:
|
||||||
- ".github/workflows/docs-release.yaml"
|
- ".github/workflows/docs-release.yaml"
|
||||||
|
- ".ci/mkdocs/mkdocs.yml"
|
||||||
- "docs/**"
|
- "docs/**"
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
release-docs:
|
release-docs:
|
||||||
name: Release documentation
|
name: Release documentation
|
||||||
|
@ -24,22 +28,27 @@ jobs:
|
||||||
private_key: ${{ secrets.BJWS_APP_PRIVATE_KEY }}
|
private_key: ${{ secrets.BJWS_APP_PRIVATE_KEY }}
|
||||||
|
|
||||||
- name: Checkout main branch
|
- name: Checkout main branch
|
||||||
uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
token: ${{ steps.get-app-token.outputs.token }}
|
token: ${{ steps.get-app-token.outputs.token }}
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Build docs
|
- uses: actions/setup-python@v4
|
||||||
uses: docker://ghcr.io/bjw-s/mdbook:0.4.35@sha256:ce016bc119d7501dd59e8f5f2491b0ccd6cbbb328f18ca4d6a0365ef4926e8d6
|
|
||||||
with:
|
with:
|
||||||
args: bash -c "cd docs && mdbook build"
|
python-version: 3.x
|
||||||
|
|
||||||
|
- name: Install requirements
|
||||||
|
run: pip install -r docs/requirements.txt
|
||||||
|
|
||||||
|
- name: Build and publish docs
|
||||||
|
run: mkdocs build -f .ci/mkdocs/mkdocs.yml
|
||||||
|
|
||||||
- name: Deploy
|
- name: Deploy
|
||||||
uses: peaceiris/actions-gh-pages@v3.9.3
|
uses: peaceiris/actions-gh-pages@v3.9.3
|
||||||
if: ${{ github.ref == 'refs/heads/main' }}
|
if: ${{ github.ref == 'refs/heads/main' }}
|
||||||
with:
|
with:
|
||||||
github_token: ${{ steps.get-app-token.outputs.token }}
|
github_token: ${{ steps.get-app-token.outputs.token }}
|
||||||
publish_dir: ./docs/book/html
|
publish_dir: ./site
|
||||||
destination_dir: docs
|
destination_dir: docs
|
||||||
user_name: 'bjw-s-bot[bot]'
|
user_name: "bjw-s-bot[bot]"
|
||||||
user_email: 'bjw-s-bot <87358111+bjw-s-bot[bot]@users.noreply.github.com>'
|
user_email: "bjw-s-bot <87358111+bjw-s-bot[bot]@users.noreply.github.com>"
|
||||||
|
|
22
.vscode/settings.json
vendored
22
.vscode/settings.json
vendored
|
@ -1,3 +1,23 @@
|
||||||
{
|
{
|
||||||
"prettier.configPath": ".ci/prettier/.prettierrc.yaml"
|
"prettier.configPath": ".ci/prettier/.prettierrc.yaml",
|
||||||
|
"prettier.ignorePath": ".ci/prettier/.prettierignore",
|
||||||
|
"yaml.schemas": {
|
||||||
|
"https://json.schemastore.org/taskfile.json": [
|
||||||
|
"Taskfile.yaml",
|
||||||
|
".taskfiles/*.yaml"
|
||||||
|
],
|
||||||
|
"http://json.schemastore.org/github-workflow.json": [
|
||||||
|
".github/workflows/*.yaml"
|
||||||
|
],
|
||||||
|
"https://squidfunk.github.io/mkdocs-material/schema.json": [
|
||||||
|
"mkdocs.yml"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaml.customTags": [
|
||||||
|
"!ENV scalar",
|
||||||
|
"!ENV sequence",
|
||||||
|
"tag:yaml.org,2002:python/name:material.extensions.emoji.to_svg",
|
||||||
|
"tag:yaml.org,2002:python/name:material.extensions.emoji.twemoji",
|
||||||
|
"tag:yaml.org,2002:python/name:pymdownx.superfences.fence_code_format"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,13 +2,13 @@
|
||||||
|
|
||||||
<img src="https://github.com/bjw-s/bjw-s/blob/main/_assets/images/logo.jpg?raw=true" align="left" width="144px" height="144px"/>
|
<img src="https://github.com/bjw-s/bjw-s/blob/main/_assets/images/logo.jpg?raw=true" align="left" width="144px" height="144px"/>
|
||||||
|
|
||||||
## helm-charts
|
<h1> helm-charts </h1>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
[](https://discord.gg/k8s-at-home)
|
<a href="https://discord.gg/k8s-at-home"><img src="https://img.shields.io/discord/673534664354430999?style=for-the-badge&label&logo=discord&logoColor=white&color=blue"></a>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ If you like this project, please consider supporting my work through my [GitHub
|
||||||
|
|
||||||
### Discord
|
### Discord
|
||||||
|
|
||||||
Join the k8s-at-home [Discord](https://discord.gg/sTMX7Vh) community on Discord.
|
Join the k8s-at-home [Discord](https://discord.gg/k8s-at-home) community on Discord.
|
||||||
|
|
||||||
### Repository topics
|
### Repository topics
|
||||||
|
|
||||||
|
|
|
@ -64,16 +64,16 @@ persistence:
|
||||||
name: |-
|
name: |-
|
||||||
{{- (include "bjw-s.common.lib.chart.names.fullname" $) -}}-config
|
{{- (include "bjw-s.common.lib.chart.names.fullname" $) -}}-config
|
||||||
advancedMounts:
|
advancedMounts:
|
||||||
main: # the controller with whe "main" identifier
|
main: # the controller with the "main" identifier
|
||||||
main: # the container with whe "main" identifier
|
main: # the container with the "main" identifier
|
||||||
- path: /data/config.yaml
|
- path: /data/config.yaml
|
||||||
readOnly: false
|
readOnly: false
|
||||||
subPath: config.yaml
|
subPath: config.yaml
|
||||||
second-container: # the container with whe "second-container" identifier
|
second-container: # the container with the "second-container" identifier
|
||||||
- path: /appdata/config
|
- path: /appdata/config
|
||||||
readOnly: true
|
readOnly: true
|
||||||
second-controller: # the controller with whe "second-controller" identifier
|
second-controller: # the controller with the "second-controller" identifier
|
||||||
main: # the container with whe "main" identifier
|
main: # the container with the "main" identifier
|
||||||
- path: /data/config.yaml
|
- path: /data/config.yaml
|
||||||
readOnly: false
|
readOnly: false
|
||||||
subPath: config.yaml
|
subPath: config.yaml
|
||||||
|
|
|
@ -22,3 +22,8 @@ ingress:
|
||||||
persistence:
|
persistence:
|
||||||
config:
|
config:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
media:
|
||||||
|
enabled: true
|
||||||
|
type: persistentVolumeClaim
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 1Gi
|
||||||
|
|
|
@ -43,3 +43,71 @@ tests:
|
||||||
name: pathService
|
name: pathService
|
||||||
port:
|
port:
|
||||||
number: 1234
|
number: 1234
|
||||||
|
|
||||||
|
- it: multiple hosts with port name references should pass
|
||||||
|
set:
|
||||||
|
service:
|
||||||
|
main:
|
||||||
|
ports:
|
||||||
|
http:
|
||||||
|
port: &httpPort 8081
|
||||||
|
http2:
|
||||||
|
enabled: true
|
||||||
|
port: &http2Port 1880
|
||||||
|
ingress:
|
||||||
|
main:
|
||||||
|
enabled: true
|
||||||
|
className: "nginx"
|
||||||
|
hosts:
|
||||||
|
- host: http.chart-test.local
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
service:
|
||||||
|
name: main
|
||||||
|
port: http
|
||||||
|
- host: http2.chart-test.local
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
service:
|
||||||
|
name: main
|
||||||
|
port: http2
|
||||||
|
asserts:
|
||||||
|
- documentIndex: &IngressDocument 2
|
||||||
|
isKind:
|
||||||
|
of: Ingress
|
||||||
|
# First Ingress host
|
||||||
|
- documentIndex: *IngressDocument
|
||||||
|
equal:
|
||||||
|
path: spec.rules[0].host
|
||||||
|
value: http.chart-test.local
|
||||||
|
- documentIndex: *IngressDocument
|
||||||
|
equal:
|
||||||
|
path: spec.rules[0].http.paths[0].path
|
||||||
|
value: "/"
|
||||||
|
- documentIndex: *IngressDocument
|
||||||
|
equal:
|
||||||
|
path: spec.rules[0].http.paths[0].backend.service.name
|
||||||
|
value: "RELEASE-NAME"
|
||||||
|
- documentIndex: *IngressDocument
|
||||||
|
equal:
|
||||||
|
path: spec.rules[0].http.paths[0].backend.service.port.number
|
||||||
|
value: *httpPort
|
||||||
|
# Second Ingress host
|
||||||
|
- documentIndex: *IngressDocument
|
||||||
|
equal:
|
||||||
|
path: spec.rules[1].host
|
||||||
|
value: http2.chart-test.local
|
||||||
|
- documentIndex: *IngressDocument
|
||||||
|
equal:
|
||||||
|
path: spec.rules[1].http.paths[0].path
|
||||||
|
value: "/"
|
||||||
|
- documentIndex: *IngressDocument
|
||||||
|
equal:
|
||||||
|
path: spec.rules[1].http.paths[0].backend.service.name
|
||||||
|
value: "RELEASE-NAME"
|
||||||
|
- documentIndex: *IngressDocument
|
||||||
|
equal:
|
||||||
|
path: spec.rules[1].http.paths[0].backend.service.port.number
|
||||||
|
value: *http2Port
|
||||||
|
|
|
@ -3,7 +3,7 @@ apiVersion: v2
|
||||||
name: common
|
name: common
|
||||||
description: Function library for Helm charts
|
description: Function library for Helm charts
|
||||||
type: library
|
type: library
|
||||||
version: 2.0.0-beta.3
|
version: 2.0.0
|
||||||
kubeVersion: ">=1.22.0-0"
|
kubeVersion: ">=1.22.0-0"
|
||||||
keywords:
|
keywords:
|
||||||
- common
|
- common
|
||||||
|
@ -13,7 +13,6 @@ maintainers:
|
||||||
- name: bjw-s
|
- name: bjw-s
|
||||||
email: me@bjw-s.dev
|
email: me@bjw-s.dev
|
||||||
annotations:
|
annotations:
|
||||||
# TODO: Update this before releasing
|
|
||||||
artifacthub.io/changes: |-
|
artifacthub.io/changes: |-
|
||||||
- kind: removed
|
- kind: removed
|
||||||
description: |-
|
description: |-
|
||||||
|
@ -25,3 +24,5 @@ annotations:
|
||||||
description: Added support for ordering (init)Containers within a controller.
|
description: Added support for ordering (init)Containers within a controller.
|
||||||
- kind: added
|
- kind: added
|
||||||
description: Added support for creating Network Policies.
|
description: Added support for creating Network Policies.
|
||||||
|
- kind: changed
|
||||||
|
description: Automatically detect `gateway.networking.k8s.io` API version
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
# common
|
# common
|
||||||
|
|
||||||
 
|
 
|
||||||
|
|
||||||
Function library for Helm charts
|
Function library for Helm charts
|
||||||
|
|
||||||
Since a lot of the bjw-s charts follow a similar pattern, this library was built to reduce maintenance cost between the charts that use it and try achieve a goal of being DRY.
|
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
Kubernetes: `>=1.22.0-0`
|
Kubernetes: `>=1.22.0-0`
|
||||||
|
@ -13,13 +11,13 @@ Kubernetes: `>=1.22.0-0`
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
||||||
| Repository | Name | Version |
|
| Repository | Name | Version |
|
||||||
|------------|------|---------|
|
| ---------- | ---- | ------- |
|
||||||
|
|
||||||
## Installing the Chart
|
## Installing the Chart
|
||||||
|
|
||||||
This is a [Helm Library Chart](https://helm.sh/docs/topics/library_charts/#helm).
|
This is a [Helm Library Chart](https://helm.sh/docs/topics/library_charts/#helm).
|
||||||
|
|
||||||
**WARNING: THIS CHART IS NOT MEANT TO BE INSTALLED DIRECTLY**
|
**🚨 WARNING: THIS CHART IS NOT MEANT TO BE INSTALLED DIRECTLY**
|
||||||
|
|
||||||
## Using this library
|
## Using this library
|
||||||
|
|
||||||
|
@ -28,9 +26,9 @@ Include this chart as a dependency in your `Chart.yaml` e.g.
|
||||||
```yaml
|
```yaml
|
||||||
# Chart.yaml
|
# Chart.yaml
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: common
|
- name: common
|
||||||
version: 2.0.0-beta.2
|
version: 2.0.0
|
||||||
repository: https://bjw-s.github.io/helm-charts/
|
repository: https://bjw-s.github.io/helm-charts/
|
||||||
```
|
```
|
||||||
|
|
||||||
For more information, take a look at the [Docs](http://bjw-s.github.io/helm-charts/docs/common-library/introduction/).
|
For more information, take a look at the [Docs](http://bjw-s.github.io/helm-charts/docs/common-library/introduction/).
|
||||||
|
@ -39,174 +37,186 @@ For more information, take a look at the [Docs](http://bjw-s.github.io/helm-char
|
||||||
|
|
||||||
Read through the [values.yaml](./values.yaml) file. It has several commented out suggested values.
|
Read through the [values.yaml](./values.yaml) file. It has several commented out suggested values.
|
||||||
|
|
||||||
## Custom configuration
|
|
||||||
|
|
||||||
N/A
|
|
||||||
|
|
||||||
## Values
|
## Values
|
||||||
|
|
||||||
**Important**: When deploying an application Helm chart you can add more values from our common library chart [here](https://github.com/bjw-s/helm-charts/tree/main/charts/library/common)
|
**Important**: When deploying an application Helm chart you can add more values from the common library chart [here](https://github.com/bjw-s/helm-charts/tree/main/charts/library/common)
|
||||||
|
|
||||||
| Key | Type | Default | Description |
|
The following table contains an overview of available values and their descriptions / default values.
|
||||||
|-----|------|---------|-------------|
|
|
||||||
| configMaps | object | See below | Configure configMaps for the chart here. Additional configMaps can be added by adding a dictionary key similar to the 'config' object. |
|
<details>
|
||||||
| configMaps.config.annotations | object | `{}` | Annotations to add to the configMap |
|
<summary>Expand</summary>
|
||||||
| configMaps.config.data | object | `{}` | configMap data content. Helm template enabled. |
|
|
||||||
| configMaps.config.enabled | bool | `false` | Enables or disables the configMap |
|
| Key | Type | Default | Description |
|
||||||
| configMaps.config.labels | object | `{}` | Labels to add to the configMap |
|
| --------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| controllers.main.annotations | object | `{}` | Set annotations on the deployment/statefulset/daemonset/cronjob |
|
| configMaps | object | See below | Configure configMaps for the chart here. Additional configMaps can be added by adding a dictionary key similar to the 'config' object. |
|
||||||
| controllers.main.containers.main.args | list | `[]` | Override the args for the default container |
|
| configMaps.config.annotations | object | `{}` | Annotations to add to the configMap |
|
||||||
| controllers.main.containers.main.command | list | `[]` | Override the command(s) for the default container |
|
| configMaps.config.data | object | `{}` | configMap data content. Helm template enabled. |
|
||||||
| controllers.main.containers.main.env | string | `nil` | Environment variables. Template enabled. Syntax options: A) TZ: UTC B) PASSWD: '{{ .Release.Name }}' C) PASSWD: configMapKeyRef: name: config-map-name key: key-name D) PASSWD: valueFrom: secretKeyRef: name: secret-name key: key-name ... E) - name: TZ value: UTC F) - name: TZ value: '{{ .Release.Name }}' |
|
| configMaps.config.enabled | bool | `false` | Enables or disables the configMap |
|
||||||
| controllers.main.containers.main.envFrom | list | `[]` | Secrets and/or ConfigMaps that will be loaded as environment variables. [[ref]](https://unofficial-kubernetes.readthedocs.io/en/latest/tasks/configure-pod-container/configmap/#use-case-consume-configmap-in-environment-variables) |
|
| configMaps.config.labels | object | `{}` | Labels to add to the configMap |
|
||||||
| controllers.main.containers.main.image.pullPolicy | string | `nil` | image pull policy |
|
| controllers.main.annotations | object | `{}` | Set annotations on the deployment/statefulset/daemonset/cronjob |
|
||||||
| controllers.main.containers.main.image.repository | string | `nil` | image repository |
|
| controllers.main.containers.main.args | list | `[]` | Override the args for the default container |
|
||||||
| controllers.main.containers.main.image.tag | string | `nil` | image tag |
|
| controllers.main.containers.main.command | list | `[]` | Override the command(s) for the default container |
|
||||||
| controllers.main.containers.main.lifecycle | object | `{}` | Configure the lifecycle for the container |
|
| controllers.main.containers.main.env | string | `nil` | Environment variables. Template enabled. Syntax options: A) TZ: UTC B) PASSWD: '{{ .Release.Name }}' C) PASSWD: configMapKeyRef: name: config-map-name key: key-name D) PASSWD: valueFrom: secretKeyRef: name: secret-name key: key-name ... E) - name: TZ value: UTC F) - name: TZ value: '{{ .Release.Name }}' |
|
||||||
| controllers.main.containers.main.nameOverride | string | `nil` | Override the container name |
|
| controllers.main.containers.main.envFrom | list | `[]` | Secrets and/or ConfigMaps that will be loaded as environment variables. [[ref]](https://unofficial-kubernetes.readthedocs.io/en/latest/tasks/configure-pod-container/configmap/#use-case-consume-configmap-in-environment-variables) |
|
||||||
| controllers.main.containers.main.order | int | 99 | Override the default container order Containers get sorted alphanumerically by the `<order>-<identifier>` combination. |
|
| controllers.main.containers.main.image.pullPolicy | string | `nil` | image pull policy |
|
||||||
| controllers.main.containers.main.probes | object | See below | [[ref]](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) |
|
| controllers.main.containers.main.image.repository | string | `nil` | image repository |
|
||||||
| controllers.main.containers.main.probes.liveness | object | See below | Liveness probe configuration |
|
| controllers.main.containers.main.image.tag | string | `nil` | image tag |
|
||||||
| controllers.main.containers.main.probes.liveness.custom | bool | `false` | Set this to `true` if you wish to specify your own livenessProbe |
|
| controllers.main.containers.main.lifecycle | object | `{}` | Configure the lifecycle for the container |
|
||||||
| controllers.main.containers.main.probes.liveness.enabled | bool | `true` | Enable the liveness probe |
|
| controllers.main.containers.main.nameOverride | string | `nil` | Override the container name |
|
||||||
| controllers.main.containers.main.probes.liveness.spec | object | See below | The spec field contains the values for the default livenessProbe. If you selected `custom: true`, this field holds the definition of the livenessProbe. |
|
| controllers.main.containers.main.order | int | 99 | Override the default container order Containers get sorted alphanumerically by the `<order>-<identifier>` combination. |
|
||||||
| controllers.main.containers.main.probes.liveness.type | string | "TCP" | sets the probe type when not using a custom probe |
|
| controllers.main.containers.main.probes | object | See below | [[ref]](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) |
|
||||||
| controllers.main.containers.main.probes.readiness | object | See below | Redainess probe configuration |
|
| controllers.main.containers.main.probes.liveness | object | See below | Liveness probe configuration |
|
||||||
| controllers.main.containers.main.probes.readiness.custom | bool | `false` | Set this to `true` if you wish to specify your own readinessProbe |
|
| controllers.main.containers.main.probes.liveness.custom | bool | `false` | Set this to `true` if you wish to specify your own livenessProbe |
|
||||||
| controllers.main.containers.main.probes.readiness.enabled | bool | `true` | Enable the readiness probe |
|
| controllers.main.containers.main.probes.liveness.enabled | bool | `true` | Enable the liveness probe |
|
||||||
| controllers.main.containers.main.probes.readiness.spec | object | See below | The spec field contains the values for the default readinessProbe. If you selected `custom: true`, this field holds the definition of the readinessProbe. |
|
| controllers.main.containers.main.probes.liveness.spec | object | See below | The spec field contains the values for the default livenessProbe. If you selected `custom: true`, this field holds the definition of the livenessProbe. |
|
||||||
| controllers.main.containers.main.probes.readiness.type | string | "TCP" | sets the probe type when not using a custom probe |
|
| controllers.main.containers.main.probes.liveness.type | string | "TCP" | sets the probe type when not using a custom probe |
|
||||||
| controllers.main.containers.main.probes.startup | object | See below | Startup probe configuration |
|
| controllers.main.containers.main.probes.readiness | object | See below | Redainess probe configuration |
|
||||||
| controllers.main.containers.main.probes.startup.custom | bool | `false` | Set this to `true` if you wish to specify your own startupProbe |
|
| controllers.main.containers.main.probes.readiness.custom | bool | `false` | Set this to `true` if you wish to specify your own readinessProbe |
|
||||||
| controllers.main.containers.main.probes.startup.enabled | bool | `true` | Enable the startup probe |
|
| controllers.main.containers.main.probes.readiness.enabled | bool | `true` | Enable the readiness probe |
|
||||||
| controllers.main.containers.main.probes.startup.spec | object | See below | The spec field contains the values for the default startupProbe. If you selected `custom: true`, this field holds the definition of the startupProbe. |
|
| controllers.main.containers.main.probes.readiness.spec | object | See below | The spec field contains the values for the default readinessProbe. If you selected `custom: true`, this field holds the definition of the readinessProbe. |
|
||||||
| controllers.main.containers.main.probes.startup.type | string | "TCP" | sets the probe type when not using a custom probe |
|
| controllers.main.containers.main.probes.readiness.type | string | "TCP" | sets the probe type when not using a custom probe |
|
||||||
| controllers.main.containers.main.resources | object | `{}` | Set the resource requests / limits for the container. |
|
| controllers.main.containers.main.probes.startup | object | See below | Startup probe configuration |
|
||||||
| controllers.main.containers.main.securityContext | object | `{}` | Configure the Security Context for the container |
|
| controllers.main.containers.main.probes.startup.custom | bool | `false` | Set this to `true` if you wish to specify your own startupProbe |
|
||||||
| controllers.main.containers.main.terminationMessagePath | string | `nil` | [[ref](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#lifecycle-1)] |
|
| controllers.main.containers.main.probes.startup.enabled | bool | `true` | Enable the startup probe |
|
||||||
| controllers.main.containers.main.terminationMessagePolicy | string | `nil` | [[ref](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#lifecycle-1)] |
|
| controllers.main.containers.main.probes.startup.spec | object | See below | The spec field contains the values for the default startupProbe. If you selected `custom: true`, this field holds the definition of the startupProbe. |
|
||||||
| controllers.main.cronjob | object | See below | CronJob configuration. Required only when using `controller.type: cronjob`. |
|
| controllers.main.containers.main.probes.startup.type | string | "TCP" | sets the probe type when not using a custom probe |
|
||||||
| controllers.main.cronjob.backoffLimit | int | `6` | Limits the number of times a failed job will be retried |
|
| controllers.main.containers.main.resources | object | `{}` | Set the resource requests / limits for the container. |
|
||||||
| controllers.main.cronjob.concurrencyPolicy | string | `"Forbid"` | Specifies how to treat concurrent executions of a job that is created by this cron job valid values are Allow, Forbid or Replace |
|
| controllers.main.containers.main.securityContext | object | `{}` | Configure the Security Context for the container |
|
||||||
| controllers.main.cronjob.failedJobsHistory | int | `1` | The number of failed Jobs to keep |
|
| controllers.main.containers.main.terminationMessagePath | string | `nil` | [[ref](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#lifecycle-1)] |
|
||||||
| controllers.main.cronjob.schedule | string | `"*/20 * * * *"` | Sets the CronJob time when to execute your jobs |
|
| controllers.main.containers.main.terminationMessagePolicy | string | `nil` | [[ref](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#lifecycle-1)] |
|
||||||
| controllers.main.cronjob.startingDeadlineSeconds | int | `30` | The deadline in seconds for starting the job if it misses its scheduled time for any reason |
|
| controllers.main.cronjob | object | See below | CronJob configuration. Required only when using `controller.type: cronjob`. |
|
||||||
| controllers.main.cronjob.successfulJobsHistory | int | `1` | The number of succesful Jobs to keep |
|
| controllers.main.cronjob.backoffLimit | int | `6` | Limits the number of times a failed job will be retried |
|
||||||
| controllers.main.cronjob.ttlSecondsAfterFinished | string | `nil` | If this field is set, ttlSecondsAfterFinished after the Job finishes, it is eligible to be automatically deleted. |
|
| controllers.main.cronjob.concurrencyPolicy | string | `"Forbid"` | Specifies how to treat concurrent executions of a job that is created by this cron job valid values are Allow, Forbid or Replace |
|
||||||
| controllers.main.enabled | bool | `true` | enable the controller. |
|
| controllers.main.cronjob.failedJobsHistory | int | `1` | The number of failed Jobs to keep |
|
||||||
| controllers.main.initContainers | object | `{}` | Specify any initContainers here as dictionary items. Each initContainer should have its own key initContainers get sorted alphanumerically by the `<order>-<identifier>` combination. |
|
| controllers.main.cronjob.schedule | string | `"*/20 * * * *"` | Sets the CronJob time when to execute your jobs |
|
||||||
| controllers.main.labels | object | `{}` | Set labels on the deployment/statefulset/daemonset/cronjob |
|
| controllers.main.cronjob.startingDeadlineSeconds | int | `30` | The deadline in seconds for starting the job if it misses its scheduled time for any reason |
|
||||||
| controllers.main.replicas | int | `1` | Number of desired pods. When using a HorizontalPodAutoscaler, set this to `null`. |
|
| controllers.main.cronjob.successfulJobsHistory | int | `1` | The number of succesful Jobs to keep |
|
||||||
| controllers.main.revisionHistoryLimit | int | `3` | ReplicaSet revision history limit |
|
| controllers.main.cronjob.ttlSecondsAfterFinished | string | `nil` | If this field is set, ttlSecondsAfterFinished after the Job finishes, it is eligible to be automatically deleted. |
|
||||||
| controllers.main.rollingUpdate.partition | string | `nil` | Set statefulset RollingUpdate partition |
|
| controllers.main.enabled | bool | `true` | enable the controller. |
|
||||||
| controllers.main.rollingUpdate.surge | string | `nil` | Set deployment RollingUpdate max surge |
|
| controllers.main.initContainers | object | `{}` | Specify any initContainers here as dictionary items. Each initContainer should have its own key initContainers get sorted alphanumerically by the `<order>-<identifier>` combination. |
|
||||||
| controllers.main.rollingUpdate.unavailable | string | `nil` | Set deployment RollingUpdate max unavailable |
|
| controllers.main.labels | object | `{}` | Set labels on the deployment/statefulset/daemonset/cronjob |
|
||||||
| controllers.main.statefulset | object | `{"podManagementPolicy":null,"volumeClaimTemplates":[]}` | StatefulSet configuration. Required only when using `controller.type: statefulset`. |
|
| controllers.main.pod | object | `{}` | |
|
||||||
| controllers.main.statefulset.podManagementPolicy | string | `nil` | Set podManagementPolicy, valid values are Parallel and OrderedReady (default). |
|
| controllers.main.replicas | int | `1` | Number of desired pods. When using a HorizontalPodAutoscaler, set this to `null`. |
|
||||||
| controllers.main.statefulset.volumeClaimTemplates | list | `[]` | Used to create individual disks for each instance. |
|
| controllers.main.revisionHistoryLimit | int | `3` | ReplicaSet revision history limit |
|
||||||
| controllers.main.strategy | string | `nil` | Set the controller upgrade strategy For Deployments, valid values are Recreate (default) and RollingUpdate. For StatefulSets, valid values are OnDelete and RollingUpdate (default). DaemonSets/CronJobs ignore this. |
|
| controllers.main.rollingUpdate.partition | string | `nil` | Set statefulset RollingUpdate partition |
|
||||||
| controllers.main.type | string | `"deployment"` | Set the controller type. Valid options are deployment, daemonset, statefulset or cronjob |
|
| controllers.main.rollingUpdate.surge | string | `nil` | Set deployment RollingUpdate max surge |
|
||||||
| defaultPodOptions | object | `{"affinity":{},"annotations":{},"automountServiceAccountToken":true,"dnsConfig":{},"dnsPolicy":null,"enableServiceLinks":true,"hostAliases":[],"hostIPC":false,"hostNetwork":false,"hostPID":false,"hostname":null,"imagePullSecrets":[],"labels":{},"nodeSelector":{},"priorityClassName":null,"restartPolicy":null,"runtimeClassName":null,"schedulerName":null,"securityContext":{},"terminationGracePeriodSeconds":null,"tolerations":[],"topologySpreadConstraints":[]}` | Set default options for all controllers / pods here Each of these options can be overridden on a Pod level |
|
| controllers.main.rollingUpdate.unavailable | string | `nil` | Set deployment RollingUpdate max unavailable |
|
||||||
| defaultPodOptions.affinity | object | `{}` | Defines affinity constraint rules. [[ref]](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity) |
|
| controllers.main.statefulset | object | `{"podManagementPolicy":null,"volumeClaimTemplates":[]}` | StatefulSet configuration. Required only when using `controller.type: statefulset`. |
|
||||||
| defaultPodOptions.annotations | object | `{}` | Set annotations on the Pod. Pod-specific values will be merged with this. |
|
| controllers.main.statefulset.podManagementPolicy | string | `nil` | Set podManagementPolicy, valid values are Parallel and OrderedReady (default). |
|
||||||
| defaultPodOptions.automountServiceAccountToken | bool | `true` | Specifies whether a service account token should be automatically mounted. |
|
| controllers.main.statefulset.volumeClaimTemplates | list | `[]` | Used to create individual disks for each instance. |
|
||||||
| defaultPodOptions.dnsConfig | object | `{}` | Configuring the ndots option may resolve nslookup issues on some Kubernetes setups. |
|
| controllers.main.strategy | string | `nil` | Set the controller upgrade strategy For Deployments, valid values are Recreate (default) and RollingUpdate. For StatefulSets, valid values are OnDelete and RollingUpdate (default). DaemonSets/CronJobs ignore this. |
|
||||||
| defaultPodOptions.dnsPolicy | string | `nil` | Defaults to "ClusterFirst" if hostNetwork is false and "ClusterFirstWithHostNet" if hostNetwork is true. |
|
| controllers.main.type | string | `"deployment"` | Set the controller type. Valid options are deployment, daemonset, statefulset or cronjob |
|
||||||
| defaultPodOptions.enableServiceLinks | bool | `true` | Enable/disable the generation of environment variables for services. [[ref]](https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#accessing-the-service) |
|
| defaultPodOptions | object | `{"affinity":{},"annotations":{},"automountServiceAccountToken":true,"dnsConfig":{},"dnsPolicy":null,"enableServiceLinks":true,"hostAliases":[],"hostIPC":false,"hostNetwork":false,"hostPID":false,"hostname":null,"imagePullSecrets":[],"labels":{},"nodeSelector":{},"priorityClassName":null,"restartPolicy":null,"runtimeClassName":null,"schedulerName":null,"securityContext":{},"terminationGracePeriodSeconds":null,"tolerations":[],"topologySpreadConstraints":[]}` | Set default options for all controllers / pods here Each of these options can be overridden on a Controller level |
|
||||||
| defaultPodOptions.hostAliases | list | `[]` | Use hostAliases to add custom entries to /etc/hosts - mapping IP addresses to hostnames. [[ref]](https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/) |
|
| defaultPodOptions.affinity | object | `{}` | Defines affinity constraint rules. [[ref]](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity) |
|
||||||
| defaultPodOptions.hostIPC | bool | `false` | Use the host's ipc namespace |
|
| defaultPodOptions.annotations | object | `{}` | Set annotations on the Pod. Pod-specific values will be merged with this. |
|
||||||
| defaultPodOptions.hostNetwork | bool | `false` | When using hostNetwork make sure you set dnsPolicy to `ClusterFirstWithHostNet` |
|
| defaultPodOptions.automountServiceAccountToken | bool | `true` | Specifies whether a service account token should be automatically mounted. |
|
||||||
| defaultPodOptions.hostPID | bool | `false` | Use the host's pid namespace |
|
| defaultPodOptions.dnsConfig | object | `{}` | Configuring the ndots option may resolve nslookup issues on some Kubernetes setups. |
|
||||||
| defaultPodOptions.hostname | string | `nil` | Allows specifying explicit hostname setting |
|
| defaultPodOptions.dnsPolicy | string | `nil` | Defaults to "ClusterFirst" if hostNetwork is false and "ClusterFirstWithHostNet" if hostNetwork is true. |
|
||||||
| defaultPodOptions.imagePullSecrets | list | `[]` | Set image pull secrets |
|
| defaultPodOptions.enableServiceLinks | bool | `true` | Enable/disable the generation of environment variables for services. [[ref]](https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#accessing-the-service) |
|
||||||
| defaultPodOptions.labels | object | `{}` | Set labels on the Pod. Pod-specific values will be merged with this. |
|
| defaultPodOptions.hostAliases | list | `[]` | Use hostAliases to add custom entries to /etc/hosts - mapping IP addresses to hostnames. [[ref]](https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/) |
|
||||||
| defaultPodOptions.nodeSelector | object | `{}` | Node selection constraint [[ref]](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) |
|
| defaultPodOptions.hostIPC | bool | `false` | Use the host's ipc namespace |
|
||||||
| defaultPodOptions.priorityClassName | string | `nil` | Custom priority class for different treatment by the scheduler |
|
| defaultPodOptions.hostNetwork | bool | `false` | When using hostNetwork make sure you set dnsPolicy to `ClusterFirstWithHostNet` |
|
||||||
| defaultPodOptions.restartPolicy | string | `Always`. When `controller.type` is `cronjob` it defaults to `Never`. | Set Container restart policy. |
|
| defaultPodOptions.hostPID | bool | `false` | Use the host's pid namespace |
|
||||||
| defaultPodOptions.runtimeClassName | string | `nil` | Allow specifying a runtimeClassName other than the default one (ie: nvidia) |
|
| defaultPodOptions.hostname | string | `nil` | Allows specifying explicit hostname setting |
|
||||||
| defaultPodOptions.schedulerName | string | `nil` | Allows specifying a custom scheduler name |
|
| defaultPodOptions.imagePullSecrets | list | `[]` | Set image pull secrets |
|
||||||
| defaultPodOptions.securityContext | object | `{}` | Configure the Security Context for the Pod |
|
| defaultPodOptions.labels | object | `{}` | Set labels on the Pod. Pod-specific values will be merged with this. |
|
||||||
| defaultPodOptions.terminationGracePeriodSeconds | string | `nil` | [[ref](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#lifecycle)] |
|
| defaultPodOptions.nodeSelector | object | `{}` | Node selection constraint [[ref]](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) |
|
||||||
| defaultPodOptions.tolerations | list | `[]` | Specify taint tolerations [[ref]](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) |
|
| defaultPodOptions.priorityClassName | string | `nil` | Custom priority class for different treatment by the scheduler |
|
||||||
| defaultPodOptions.topologySpreadConstraints | list | `[]` | Defines topologySpreadConstraint rules. [[ref]](https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/) |
|
| defaultPodOptions.restartPolicy | string | `Always`. When `controller.type` is `cronjob` it defaults to `Never`. | Set Container restart policy. |
|
||||||
| global.annotations | object | `{}` | Set additional global annotations. Helm templates can be used. |
|
| defaultPodOptions.runtimeClassName | string | `nil` | Allow specifying a runtimeClassName other than the default one (ie: nvidia) |
|
||||||
| global.fullnameOverride | string | `nil` | Set the entire name definition |
|
| defaultPodOptions.schedulerName | string | `nil` | Allows specifying a custom scheduler name |
|
||||||
| global.labels | object | `{}` | Set additional global labels. Helm templates can be used. |
|
| defaultPodOptions.securityContext | object | `{}` | Configure the Security Context for the Pod |
|
||||||
| global.nameOverride | string | `nil` | Set an override for the prefix of the fullname |
|
| defaultPodOptions.terminationGracePeriodSeconds | string | `nil` | [[ref](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#lifecycle)] |
|
||||||
| ingress | object | See below | Configure the ingresses for the chart here. Additional ingresses can be added by adding a dictionary key similar to the 'main' ingress. |
|
| defaultPodOptions.tolerations | list | `[]` | Specify taint tolerations [[ref]](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) |
|
||||||
| ingress.main.annotations | object | `{}` | Provide additional annotations which may be required. |
|
| defaultPodOptions.topologySpreadConstraints | list | `[]` | Defines topologySpreadConstraint rules. [[ref]](https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/) |
|
||||||
| ingress.main.className | string | `nil` | Set the ingressClass that is used for this ingress. |
|
| global.annotations | object | `{}` | Set additional global annotations. Helm templates can be used. |
|
||||||
| ingress.main.enabled | bool | `false` | Enables or disables the ingress |
|
| global.fullnameOverride | string | `nil` | Set the entire name definition |
|
||||||
| ingress.main.hosts[0].host | string | `"chart-example.local"` | Host address. Helm template can be passed. |
|
| global.labels | object | `{}` | Set additional global labels. Helm templates can be used. |
|
||||||
| ingress.main.hosts[0].paths[0].path | string | `"/"` | Path. Helm template can be passed. |
|
| global.nameOverride | string | `nil` | Set an override for the prefix of the fullname |
|
||||||
| ingress.main.hosts[0].paths[0].service.name | string | `"main"` | Overrides the service name reference for this path This can be an actual service name, or reference a service identifier from this values.yaml |
|
| ingress | object | See below | Configure the ingresses for the chart here. Additional ingresses can be added by adding a dictionary key similar to the 'main' ingress. |
|
||||||
| ingress.main.hosts[0].paths[0].service.port | string | `nil` | Overrides the service port number reference for this path |
|
| ingress.main.annotations | object | `{}` | Provide additional annotations which may be required. |
|
||||||
| ingress.main.labels | object | `{}` | Provide additional labels which may be required. |
|
| ingress.main.className | string | `nil` | Set the ingressClass that is used for this ingress. |
|
||||||
| ingress.main.nameOverride | string | `nil` | Override the name suffix that is used for this ingress. |
|
| ingress.main.enabled | bool | `false` | Enables or disables the ingress |
|
||||||
| ingress.main.primary | bool | `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. |
|
| ingress.main.hosts[0].host | string | `"chart-example.local"` | Host address. Helm template can be passed. |
|
||||||
| ingress.main.tls | list | `[]` | Configure TLS for the ingress. Both secretName and hosts can process a Helm template. |
|
| ingress.main.hosts[0].paths[0].path | string | `"/"` | Path. Helm template can be passed. |
|
||||||
| persistence | object | See below | Configure persistence for the chart here. Additional items can be added by adding a dictionary key similar to the 'config' key. [[ref]](https://bjw-s.github.io/helm-charts/docs/common-library/common-library-storage) |
|
| ingress.main.hosts[0].paths[0].service.name | string | `"main"` | Overrides the service name reference for this path This can be an actual service name, or reference a service identifier from this values.yaml |
|
||||||
| persistence.config.accessMode | string | `"ReadWriteOnce"` | AccessMode for the persistent volume. Make sure to select an access mode that is supported by your storage provider! [[ref]](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) |
|
| ingress.main.hosts[0].paths[0].service.port | string | `nil` | Overrides the service port number reference for this path |
|
||||||
| persistence.config.advancedMounts | object | `{}` | Explicitly configure mounts for specific controllers and containers. Example: advancedMounts: main: # the controller with whe "main" identifier main: # the container with whe "main" identifier - path: /data/config.yaml readOnly: true subPath: config.yaml second-container: # the container with whe "second-container" identifier - path: /appdata/config readOnly: true second-controller: # the controller with whe "second-controller" identifier main: # the container with whe "main" identifier - path: /data/config.yaml readOnly: false subPath: config.yaml |
|
| ingress.main.labels | object | `{}` | Provide additional labels which may be required. |
|
||||||
| persistence.config.enabled | bool | `false` | Enables or disables the persistence item. Defaults to true |
|
| ingress.main.nameOverride | string | `nil` | Override the name suffix that is used for this ingress. |
|
||||||
| persistence.config.existingClaim | string | `nil` | If you want to reuse an existing claim, the name of the existing PVC can be passed here. |
|
| ingress.main.primary | bool | `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. |
|
||||||
| persistence.config.globalMounts | list | `[]` | Configure mounts to all controllers and containers. By default the persistence item will be mounted to `/<name_of_the_peristence_item>`. Example: globalMounts: - path: /config readOnly: false |
|
| ingress.main.tls | list | `[]` | Configure TLS for the ingress. Both secretName and hosts can process a Helm template. |
|
||||||
| persistence.config.retain | bool | `false` | Set to true to retain the PVC upon `helm uninstall` |
|
| networkpolicies | object | See below | Configure the networkPolicies for the chart here. Additional networkPolicies can be added by adding a dictionary key similar to the 'main' networkPolicy. |
|
||||||
| persistence.config.size | string | `"1Gi"` | The amount of storage that is requested for the persistent volume. |
|
| networkpolicies.main.controller | string | `"main"` | Configure which controller this networkPolicy should target |
|
||||||
| persistence.config.storageClass | string | `nil` | Storage Class for the config volume. If set to `-`, dynamic provisioning is disabled. If set to something else, the given storageClass is used. If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. |
|
| networkpolicies.main.enabled | bool | `false` | Enables or disables the networkPolicy item. Defaults to true |
|
||||||
| persistence.config.type | string | `"persistentVolumeClaim"` | Sets the persistence type Valid options are persistentVolumeClaim, emptyDir, hostPath, secret, configMap or custom |
|
| networkpolicies.main.policyTypes | list | `["Ingress","Egress"]` | The policyTypes for this networkPolicy |
|
||||||
| route | object | See below | Configure the gateway routes for the chart here. Additional routes can be added by adding a dictionary key similar to the 'main' route. [[ref]](https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io%2fv1alpha2) |
|
| networkpolicies.main.rules | object | `{"egress":[{}],"ingress":[{}]}` | The rulesets for this networkPolicy [[ref]](https://kubernetes.io/docs/concepts/services-networking/network-policies/#networkpolicy-resource) |
|
||||||
| route.main.annotations | object | `{}` | Provide additional annotations which may be required. |
|
| networkpolicies.main.rules.egress | list | `[{}]` | The egress rules for this networkPolicy. Allows all egress traffic by default. |
|
||||||
| route.main.enabled | bool | `false` | Enables or disables the route |
|
| networkpolicies.main.rules.ingress | list | `[{}]` | The ingress rules for this networkPolicy. Allows all ingress traffic by default. |
|
||||||
| route.main.hostnames | list | `[]` | Host addresses |
|
| persistence | object | See below | Configure persistence for the chart here. Additional items can be added by adding a dictionary key similar to the 'config' key. [[ref]](https://bjw-s.github.io/helm-charts/docs/common-library/common-library-storage) |
|
||||||
| route.main.kind | string | `"HTTPRoute"` | Set the route kind Valid options are GRPCRoute, HTTPRoute, TCPRoute, TLSRoute, UDPRoute |
|
| persistence.config.accessMode | string | `"ReadWriteOnce"` | AccessMode for the persistent volume. Make sure to select an access mode that is supported by your storage provider! [[ref]](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) |
|
||||||
| route.main.labels | object | `{}` | Provide additional labels which may be required. |
|
| persistence.config.advancedMounts | object | `{}` | Explicitly configure mounts for specific controllers and containers. Example: advancedMounts: main: # the controller with the "main" identifier main: # the container with the "main" identifier - path: /data/config.yaml readOnly: true subPath: config.yaml second-container: # the container with the "second-container" identifier - path: /appdata/config readOnly: true second-controller: # the controller with the "second-controller" identifier main: # the container with the "main" identifier - path: /data/config.yaml readOnly: false subPath: config.yaml |
|
||||||
| route.main.nameOverride | string | `nil` | Override the name suffix that is used for this route. |
|
| persistence.config.enabled | bool | `false` | Enables or disables the persistence item. Defaults to true |
|
||||||
| route.main.parentRefs | list | `[{"group":"gateway.networking.k8s.io","kind":"Gateway","name":null,"namespace":null,"sectionName":null}]` | Configure the resource the route attaches to. |
|
| persistence.config.existingClaim | string | `nil` | If you want to reuse an existing claim, the name of the existing PVC can be passed here. |
|
||||||
| route.main.rules | list | `[{"backendRefs":[{"group":"","kind":"Service","name":"main","namespace":null,"port":null,"weight":1}],"matches":[{"path":{"type":"PathPrefix","value":"/"}}]}]` | Configure rules for routing. Defaults to the primary service. |
|
| persistence.config.globalMounts | list | `[]` | Configure mounts to all controllers and containers. By default the persistence item will be mounted to `/<name_of_the_peristence_item>`. Example: globalMounts: - path: /config readOnly: false |
|
||||||
| route.main.rules[0].backendRefs | list | `[{"group":"","kind":"Service","name":"main","namespace":null,"port":null,"weight":1}]` | Configure backends where matching requests should be sent. |
|
| persistence.config.retain | bool | `false` | Set to true to retain the PVC upon `helm uninstall` |
|
||||||
| secrets | object | See below | Use this to populate secrets with the values you specify. Be aware that these values are not encrypted by default, and could therefore visible to anybody with access to the values.yaml file. Additional Secrets can be added by adding a dictionary key similar to the 'secret' object. |
|
| persistence.config.size | string | `"1Gi"` | The amount of storage that is requested for the persistent volume. |
|
||||||
| secrets.secret.annotations | object | `{}` | Annotations to add to the Secret |
|
| persistence.config.storageClass | string | `nil` | Storage Class for the config volume. If set to `-`, dynamic provisioning is disabled. If set to something else, the given storageClass is used. If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. |
|
||||||
| secrets.secret.enabled | bool | `false` | Enables or disables the Secret |
|
| persistence.config.type | string | `"persistentVolumeClaim"` | Sets the persistence type Valid options are persistentVolumeClaim, emptyDir, hostPath, secret, configMap or custom |
|
||||||
| secrets.secret.labels | object | `{}` | Labels to add to the Secret |
|
| route | object | See below | Configure the gateway routes for the chart here. Additional routes can be added by adding a dictionary key similar to the 'main' route. [[ref]](https://gateway-api.sigs.k8s.io/references/spec/) |
|
||||||
| secrets.secret.stringData | object | `{}` | Secret stringData content. Helm template enabled. |
|
| route.main.annotations | object | `{}` | Provide additional annotations which may be required. |
|
||||||
| service | object | See below | Configure the services for the chart here. Additional services can be added by adding a dictionary key similar to the 'main' service. |
|
| route.main.enabled | bool | `false` | Enables or disables the route |
|
||||||
| service.main.annotations | object | `{}` | Provide additional annotations which may be required. |
|
| route.main.hostnames | list | `[]` | Host addresses |
|
||||||
| service.main.controller | string | `"main"` | Configure which controller this service should target |
|
| route.main.kind | string | `"HTTPRoute"` | Set the route kind Valid options are GRPCRoute, HTTPRoute, TCPRoute, TLSRoute, UDPRoute |
|
||||||
| service.main.enabled | bool | `true` | Enables or disables the service |
|
| route.main.labels | object | `{}` | Provide additional labels which may be required. |
|
||||||
| service.main.externalTrafficPolicy | string | `nil` | [[ref](https://kubernetes.io/docs/tutorials/services/source-ip/)] |
|
| route.main.nameOverride | string | `nil` | Override the name suffix that is used for this route. |
|
||||||
| service.main.extraSelectorLabels | object | `{}` | Allow adding additional match labels |
|
| route.main.parentRefs | list | `[{"group":"gateway.networking.k8s.io","kind":"Gateway","name":null,"namespace":null,"sectionName":null}]` | Configure the resource the route attaches to. |
|
||||||
| service.main.ipFamilies | list | `[]` | The ip families that should be used. Options: IPv4, IPv6 |
|
| route.main.rules | list | `[{"backendRefs":[{"group":"","kind":"Service","name":"main","namespace":null,"port":null,"weight":1}],"matches":[{"path":{"type":"PathPrefix","value":"/"}}]}]` | Configure rules for routing. Defaults to the primary service. |
|
||||||
| service.main.ipFamilyPolicy | string | `nil` | Specify the ip policy. Options: SingleStack, PreferDualStack, RequireDualStack |
|
| route.main.rules[0].backendRefs | list | `[{"group":"","kind":"Service","name":"main","namespace":null,"port":null,"weight":1}]` | Configure backends where matching requests should be sent. |
|
||||||
| service.main.labels | object | `{}` | Provide additional labels which may be required. |
|
| secrets | object | See below | Use this to populate secrets with the values you specify. Be aware that these values are not encrypted by default, and could therefore visible to anybody with access to the values.yaml file. Additional Secrets can be added by adding a dictionary key similar to the 'secret' object. |
|
||||||
| service.main.nameOverride | string | `nil` | Override the name suffix that is used for this service |
|
| secrets.secret.annotations | object | `{}` | Annotations to add to the Secret |
|
||||||
| service.main.ports | object | See below | Configure the Service port information here. Additional ports can be added by adding a dictionary key similar to the 'http' service. |
|
| secrets.secret.enabled | bool | `false` | Enables or disables the Secret |
|
||||||
| service.main.ports.http.enabled | bool | `true` | Enables or disables the port |
|
| secrets.secret.labels | object | `{}` | Labels to add to the Secret |
|
||||||
| service.main.ports.http.nodePort | string | `nil` | Specify the nodePort value for the LoadBalancer and NodePort service types. [[ref]](https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport) |
|
| secrets.secret.stringData | object | `{}` | Secret stringData content. Helm template enabled. |
|
||||||
| service.main.ports.http.port | string | `nil` | The port number |
|
| service | object | See below | Configure the services for the chart here. Additional services can be added by adding a dictionary key similar to the 'main' service. |
|
||||||
| service.main.ports.http.primary | bool | `true` | Make this the primary port (used in probes, notes, etc...) If there is more than 1 service, make sure that only 1 port is marked as primary. |
|
| service.main.annotations | object | `{}` | Provide additional annotations which may be required. |
|
||||||
| service.main.ports.http.protocol | string | `"HTTP"` | Port protocol. Support values are `HTTP`, `HTTPS`, `TCP` and `UDP`. HTTP and HTTPS spawn a TCP service and get used for internal URL and name generation |
|
| service.main.controller | string | `"main"` | Configure which controller this service should target |
|
||||||
| service.main.ports.http.targetPort | string | `nil` | Specify a service targetPort if you wish to differ the service port from the application port. If `targetPort` is specified, this port number is used in the container definition instead of the `port` value. Therefore named ports are not supported for this field. |
|
| service.main.enabled | bool | `true` | Enables or disables the service |
|
||||||
| service.main.primary | bool | `true` | Make this the primary service for this controller (used in probes, notes, etc...). If there is more than 1 service targeting the controller, make sure that only 1 service is marked as primary. |
|
| service.main.externalTrafficPolicy | string | `nil` | [[ref](https://kubernetes.io/docs/tutorials/services/source-ip/)] |
|
||||||
| service.main.type | string | `"ClusterIP"` | Set the service type |
|
| service.main.extraSelectorLabels | object | `{}` | Allow adding additional match labels |
|
||||||
| serviceAccount.annotations | object | `{}` | Annotations to add to the service account |
|
| service.main.ipFamilies | list | `[]` | The ip families that should be used. Options: IPv4, IPv6 |
|
||||||
| serviceAccount.create | bool | `false` | Specifies whether a service account should be created |
|
| service.main.ipFamilyPolicy | string | `nil` | Specify the ip policy. Options: SingleStack, PreferDualStack, RequireDualStack |
|
||||||
| serviceAccount.labels | object | `{}` | Labels to add to the service account |
|
| service.main.labels | object | `{}` | Provide additional labels which may be required. |
|
||||||
| serviceAccount.name | string | `""` | The name of the service account to use. If not set and create is true, a name is generated using the fullname template |
|
| service.main.nameOverride | string | `nil` | Override the name suffix that is used for this service |
|
||||||
| serviceMonitor | object | See below | Configure the ServiceMonitors for the chart here. Additional ServiceMonitors can be added by adding a dictionary key similar to the 'main' ServiceMonitors. |
|
| service.main.ports | object | See below | Configure the Service port information here. Additional ports can be added by adding a dictionary key similar to the 'http' service. |
|
||||||
| serviceMonitor.main.annotations | object | `{}` | Provide additional annotations which may be required. |
|
| service.main.ports.http.enabled | bool | `true` | Enables or disables the port |
|
||||||
| serviceMonitor.main.enabled | bool | `false` | Enables or disables the serviceMonitor. |
|
| service.main.ports.http.nodePort | string | `nil` | Specify the nodePort value for the LoadBalancer and NodePort service types. [[ref]](https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport) |
|
||||||
| serviceMonitor.main.endpoints | list | See values.yaml | Configures the endpoints for the serviceMonitor. |
|
| service.main.ports.http.port | string | `nil` | The port number |
|
||||||
| serviceMonitor.main.labels | object | `{}` | Provide additional labels which may be required. |
|
| service.main.ports.http.primary | bool | `true` | Make this the primary port (used in probes, notes, etc...) If there is more than 1 service, make sure that only 1 port is marked as primary. |
|
||||||
| serviceMonitor.main.nameOverride | string | `nil` | Override the name suffix that is used for this serviceMonitor. |
|
| service.main.ports.http.protocol | string | `"HTTP"` | Port protocol. Support values are `HTTP`, `HTTPS`, `TCP` and `UDP`. HTTP and HTTPS spawn a TCP service and get used for internal URL and name generation |
|
||||||
| serviceMonitor.main.selector | object | `{}` | Configures a custom selector for the serviceMonitor, this takes precedence over specifying a service name. Helm templates can be used. |
|
| service.main.ports.http.targetPort | string | `nil` | Specify a service targetPort if you wish to differ the service port from the application port. If `targetPort` is specified, this port number is used in the container definition instead of the `port` value. Therefore named ports are not supported for this field. |
|
||||||
| serviceMonitor.main.serviceName | string | `"{{ include \"bjw-s.common.lib.chart.names.fullname\" $ }}"` | Configures the target Service for the serviceMonitor. Helm templates can be used. |
|
| service.main.primary | bool | `true` | Make this the primary service for this controller (used in probes, notes, etc...). If there is more than 1 service targeting the controller, make sure that only 1 service is marked as primary. |
|
||||||
|
| service.main.type | string | `"ClusterIP"` | Set the service type |
|
||||||
|
| serviceAccount.annotations | object | `{}` | Annotations to add to the service account |
|
||||||
|
| serviceAccount.create | bool | `false` | Specifies whether a service account should be created |
|
||||||
|
| serviceAccount.labels | object | `{}` | Labels to add to the service account |
|
||||||
|
| serviceAccount.name | string | `""` | The name of the service account to use. If not set and create is true, a name is generated using the fullname template |
|
||||||
|
| serviceMonitor | object | See below | Configure the ServiceMonitors for the chart here. Additional ServiceMonitors can be added by adding a dictionary key similar to the 'main' ServiceMonitors. |
|
||||||
|
| serviceMonitor.main.annotations | object | `{}` | Provide additional annotations which may be required. |
|
||||||
|
| serviceMonitor.main.enabled | bool | `false` | Enables or disables the serviceMonitor. |
|
||||||
|
| serviceMonitor.main.endpoints | list | See values.yaml | Configures the endpoints for the serviceMonitor. |
|
||||||
|
| serviceMonitor.main.labels | object | `{}` | Provide additional labels which may be required. |
|
||||||
|
| serviceMonitor.main.nameOverride | string | `nil` | Override the name suffix that is used for this serviceMonitor. |
|
||||||
|
| serviceMonitor.main.selector | object | `{}` | Configures a custom selector for the serviceMonitor, this takes precedence over specifying a service name. Helm templates can be used. |
|
||||||
|
| serviceMonitor.main.serviceName | string | `"{{ include \"bjw-s.common.lib.chart.names.fullname\" $ }}"` | Configures the target Service for the serviceMonitor. Helm templates can be used. |
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
## Support
|
## Support
|
||||||
|
|
||||||
- See the [Docs](http://bjw-s.github.io/helm-charts/docs/)
|
- See the [Docs](http://bjw-s.github.io/helm-charts/docs/)
|
||||||
- Open an [issue](https://github.com/bjw-s/helm-charts/issues/new/choose)
|
- Open an [issue](https://github.com/bjw-s/helm-charts/issues/new/choose)
|
||||||
- Join the k8s-at-home [Discord](https://discord.gg/sTMX7Vh) community
|
- Join the k8s-at-home [Discord](https://discord.gg/k8s-at-home) community
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
----------------------------------------------
|
|
||||||
Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0)
|
Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0)
|
||||||
|
|
|
@ -1,95 +1,64 @@
|
||||||
{{- define "custom.repository.organization" -}}
|
|
||||||
bjw-s
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- define "custom.repository.url" -}}
|
|
||||||
https://github.com/bjw-s/helm-charts
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- define "custom.helm.url" -}}
|
{{- define "custom.helm.url" -}}
|
||||||
https://bjw-s.github.io/helm-charts/
|
https://bjw-s.github.io/helm-charts/
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
{{- define "custom.helm.path" -}}
|
|
||||||
{{ template "custom.repository.organization" . }}/{{ template "chart.name" . }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- define "custom.notes" -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- define "custom.requirements" -}}
|
|
||||||
## Requirements
|
|
||||||
|
|
||||||
{{ template "chart.kubeVersionLine" . }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- define "custom.dependencies" -}}
|
|
||||||
## Dependencies
|
|
||||||
|
|
||||||
{{ template "chart.requirementsTable" . }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- define "custom.install" -}}
|
|
||||||
## Installing the Chart
|
|
||||||
|
|
||||||
This is a [Helm Library Chart](https://helm.sh/docs/topics/library_charts/#helm).
|
|
||||||
|
|
||||||
**WARNING: THIS CHART IS NOT MEANT TO BE INSTALLED DIRECTLY**
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- define "custom.usage" -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- define "custom.configuration.header" -}}
|
|
||||||
## Configuration
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- define "custom.configuration.readValues" -}}
|
|
||||||
Read through the [values.yaml](./values.yaml) file. It has several commented out suggested values.
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- define "custom.valuesSection" -}}
|
|
||||||
## Values
|
|
||||||
|
|
||||||
**Important**: When deploying an application Helm chart you can add more values from our common library chart [here](https://github.com/bjw-s/helm-charts/tree/main/charts/library/common)
|
|
||||||
|
|
||||||
{{ template "chart.valuesTable" . }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- define "custom.support" -}}
|
|
||||||
## Support
|
|
||||||
|
|
||||||
- See the [Docs](http://bjw-s.github.io/helm-charts/docs/)
|
|
||||||
- Open an [issue](https://github.com/bjw-s/helm-charts/issues/new/choose)
|
|
||||||
- Join the k8s-at-home [Discord](https://discord.gg/sTMX7Vh) community
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{ template "chart.header" . }}
|
{{ template "chart.header" . }}
|
||||||
|
|
||||||
{{ template "chart.versionBadge" . }}{{ template "chart.typeBadge" . }}{{ template "chart.appVersionBadge" . }}
|
{{ template "chart.versionBadge" . }}{{ template "chart.typeBadge" . }}{{ template "chart.appVersionBadge" . }}
|
||||||
|
|
||||||
{{ template "chart.description" . }}
|
{{ template "chart.description" . }}
|
||||||
|
|
||||||
{{ template "custom.notes" . }}
|
|
||||||
|
|
||||||
{{ template "chart.sourcesSection" . }}
|
{{ template "chart.sourcesSection" . }}
|
||||||
|
|
||||||
{{ template "custom.requirements" . }}
|
## Requirements
|
||||||
|
|
||||||
{{ template "custom.dependencies" . }}
|
{{ template "chart.kubeVersionLine" . }}
|
||||||
|
|
||||||
{{ template "custom.install" . }}
|
## Dependencies
|
||||||
|
|
||||||
{{ template "custom.usage" . }}
|
{{ template "chart.requirementsTable" . }}
|
||||||
|
|
||||||
{{ template "custom.configuration.header" . }}
|
## Installing the Chart
|
||||||
|
|
||||||
{{ template "custom.configuration.readValues" . }}
|
This is a [Helm Library Chart](https://helm.sh/docs/topics/library_charts/#helm).
|
||||||
|
|
||||||
{{ template "custom.custom.configuration" . }}
|
**🚨 WARNING: THIS CHART IS NOT MEANT TO BE INSTALLED DIRECTLY**
|
||||||
|
|
||||||
{{ template "custom.valuesSection" . }}
|
## Using this library
|
||||||
|
|
||||||
{{ template "custom.support" . }}
|
Include this chart as a dependency in your `Chart.yaml` e.g.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# Chart.yaml
|
||||||
|
dependencies:
|
||||||
|
- name: common
|
||||||
|
version: {{template "chart.version" .}}
|
||||||
|
repository: {{template "custom.helm.url"}}
|
||||||
|
```
|
||||||
|
|
||||||
|
For more information, take a look at the [Docs](http://bjw-s.github.io/helm-charts/docs/common-library/introduction/).
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Read through the [values.yaml](./values.yaml) file. It has several commented out suggested values.
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
**Important**: When deploying an application Helm chart you can add more values from the common library chart [here](https://github.com/bjw-s/helm-charts/tree/main/charts/library/common)
|
||||||
|
|
||||||
|
The following table contains an overview of available values and their descriptions / default values.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Expand</summary>
|
||||||
|
|
||||||
|
{{ template "chart.valuesTable" . }}
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
- See the [Docs](http://bjw-s.github.io/helm-charts/docs/)
|
||||||
|
- Open an [issue](https://github.com/bjw-s/helm-charts/issues/new/choose)
|
||||||
|
- Join the k8s-at-home [Discord](https://discord.gg/k8s-at-home) community
|
||||||
|
|
||||||
{{ template "helm-docs.versionFooter" . }}
|
{{ template "helm-docs.versionFooter" . }}
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
{{- define "custom.notes" -}}
|
|
||||||
Since a lot of the {{ template "custom.repository.organization" . }} charts follow a similar pattern, this library was built to reduce maintenance cost between the charts that use it and try achieve a goal of being DRY.
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- define "custom.custom.configuration.header" -}}
|
|
||||||
## Custom configuration
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- define "custom.custom.configuration" -}}
|
|
||||||
{{ template "custom.custom.configuration.header" . }}
|
|
||||||
|
|
||||||
N/A
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- define "custom.usage" }}
|
|
||||||
## Using this library
|
|
||||||
|
|
||||||
Include this chart as a dependency in your `Chart.yaml` e.g.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Chart.yaml
|
|
||||||
dependencies:
|
|
||||||
- name: common
|
|
||||||
version: {{ template "chart.version" . }}
|
|
||||||
repository: {{ template "custom.helm.url" }}
|
|
||||||
```
|
|
||||||
|
|
||||||
For more information, take a look at the [Docs](http://bjw-s.github.io/helm-charts/docs/common-library/introduction/).
|
|
||||||
{{- end -}}
|
|
||||||
{{ "" }}
|
|
|
@ -54,13 +54,28 @@ spec:
|
||||||
backend:
|
backend:
|
||||||
service:
|
service:
|
||||||
{{ $service := include "bjw-s.common.lib.service.getByIdentifier" (dict "rootContext" $rootContext "id" .service.name) | fromYaml -}}
|
{{ $service := include "bjw-s.common.lib.service.getByIdentifier" (dict "rootContext" $rootContext "id" .service.name) | fromYaml -}}
|
||||||
{{ $servicePrimaryPort := dict -}}
|
{{ $servicePort := 0 -}}
|
||||||
{{ if $service -}}
|
|
||||||
{{ $servicePrimaryPort = include "bjw-s.common.lib.service.primaryPort" (dict "rootContext" $rootContext "serviceObject" $service) | fromYaml -}}
|
{{ if eq (dig "port" nil .service) nil -}}
|
||||||
|
{{/* Default to the Service primary port if no port has been specified */ -}}
|
||||||
|
{{ if $service -}}
|
||||||
|
{{ $defaultServicePort := include "bjw-s.common.lib.service.primaryPort" (dict "rootContext" $rootContext "serviceObject" $service) | fromYaml -}}
|
||||||
|
{{ if $defaultServicePort -}}
|
||||||
|
{{ $servicePort = $defaultServicePort.port -}}
|
||||||
|
{{ end -}}
|
||||||
|
{{ end -}}
|
||||||
|
{{ else -}}
|
||||||
|
{{/* If a port number is given, use that */ -}}
|
||||||
|
{{ if kindIs "float64" .service.port -}}
|
||||||
|
{{ $servicePort = .service.port -}}
|
||||||
|
{{ else if kindIs "string" .service.port -}}
|
||||||
|
{{/* If a port name is given, try to resolve to a number */ -}}
|
||||||
|
{{ $servicePort = include "bjw-s.common.lib.service.getPortNumberByName" (dict "rootContext" $rootContext "serviceID" .service.name "portName" .service.port) -}}
|
||||||
|
{{ end -}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
name: {{ default .service.name $service.name }}
|
name: {{ default .service.name $service.name }}
|
||||||
port:
|
port:
|
||||||
number: {{ default .service.port $servicePrimaryPort.port }}
|
number: {{ $servicePort }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
|
@ -7,6 +7,10 @@ within the common library.
|
||||||
{{- $routeObject := .object -}}
|
{{- $routeObject := .object -}}
|
||||||
|
|
||||||
{{- $routeKind := $routeObject.kind | default "HTTPRoute" -}}
|
{{- $routeKind := $routeObject.kind | default "HTTPRoute" -}}
|
||||||
|
{{- $apiVersion := "gateway.networking.k8s.io/v1alpha2" -}}
|
||||||
|
{{- if $rootContext.Capabilities.APIVersions.Has (printf "gateway.networking.k8s.io/v1beta1/%s" $routeKind) }}
|
||||||
|
{{- $apiVersion = "gateway.networking.k8s.io/v1beta1" -}}
|
||||||
|
{{- end -}}
|
||||||
{{- $labels := merge
|
{{- $labels := merge
|
||||||
($routeObject.labels | default dict)
|
($routeObject.labels | default dict)
|
||||||
(include "bjw-s.common.lib.metadata.allLabels" $rootContext | fromYaml)
|
(include "bjw-s.common.lib.metadata.allLabels" $rootContext | fromYaml)
|
||||||
|
@ -16,7 +20,7 @@ within the common library.
|
||||||
(include "bjw-s.common.lib.metadata.globalAnnotations" $rootContext | fromYaml)
|
(include "bjw-s.common.lib.metadata.globalAnnotations" $rootContext | fromYaml)
|
||||||
-}}
|
-}}
|
||||||
---
|
---
|
||||||
apiVersion: gateway.networking.k8s.io/v1alpha2
|
apiVersion: {{ $apiVersion }}
|
||||||
{{- if and (ne $routeKind "GRPCRoute") (ne $routeKind "HTTPRoute") (ne $routeKind "TCPRoute") (ne $routeKind "TLSRoute") (ne $routeKind "UDPRoute") }}
|
{{- if and (ne $routeKind "GRPCRoute") (ne $routeKind "HTTPRoute") (ne $routeKind "TCPRoute") (ne $routeKind "TLSRoute") (ne $routeKind "UDPRoute") }}
|
||||||
{{- fail (printf "Not a valid route kind (%s)" $routeKind) }}
|
{{- fail (printf "Not a valid route kind (%s)" $routeKind) }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
|
@ -93,7 +93,7 @@ Returns the value for volumes
|
||||||
{{- $_ := set $volume.hostPath "type" . -}}
|
{{- $_ := set $volume.hostPath "type" . -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
{{- /* hostPath persistence type */ -}}
|
{{- /* nfs persistence type */ -}}
|
||||||
{{- else if eq $persistenceValues.type "nfs" -}}
|
{{- else if eq $persistenceValues.type "nfs" -}}
|
||||||
{{- $_ := set $volume "nfs" dict -}}
|
{{- $_ := set $volume "nfs" dict -}}
|
||||||
{{- $_ := set $volume.nfs "server" (required "server not set" $persistenceValues.server) -}}
|
{{- $_ := set $volume.nfs "server" (required "server not set" $persistenceValues.server) -}}
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
{{/*
|
||||||
|
Return a service port number by name for a Service object
|
||||||
|
*/}}
|
||||||
|
{{- define "bjw-s.common.lib.service.getPortNumberByName" -}}
|
||||||
|
{{- $rootContext := .rootContext -}}
|
||||||
|
{{- $identifier := .serviceID -}}
|
||||||
|
{{- $portName := .portName -}}
|
||||||
|
|
||||||
|
{{- $service := include "bjw-s.common.lib.service.getByIdentifier" (dict "rootContext" $rootContext "id" $identifier) | fromYaml -}}
|
||||||
|
|
||||||
|
{{- if $service -}}
|
||||||
|
{{ $servicePort := dig "ports" $portName "port" nil $service -}}
|
||||||
|
{{- if not (eq $servicePort nil) -}}
|
||||||
|
{{- $servicePort -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
|
@ -10,7 +10,7 @@ global:
|
||||||
annotations: {}
|
annotations: {}
|
||||||
|
|
||||||
# -- Set default options for all controllers / pods here
|
# -- Set default options for all controllers / pods here
|
||||||
# Each of these options can be overridden on a Pod level
|
# Each of these options can be overridden on a Controller level
|
||||||
defaultPodOptions:
|
defaultPodOptions:
|
||||||
# -- Defines affinity constraint rules.
|
# -- Defines affinity constraint rules.
|
||||||
# [[ref]](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity)
|
# [[ref]](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity)
|
||||||
|
@ -171,6 +171,9 @@ controllers:
|
||||||
# size: 2Gi
|
# size: 2Gi
|
||||||
# storageClass: cheap-storage-class
|
# storageClass: cheap-storage-class
|
||||||
|
|
||||||
|
# Controller-specific overrides for `defaultPodOptions` keys
|
||||||
|
pod: {}
|
||||||
|
|
||||||
containers:
|
containers:
|
||||||
main:
|
main:
|
||||||
# -- Override the container name
|
# -- Override the container name
|
||||||
|
@ -521,7 +524,7 @@ ingress:
|
||||||
|
|
||||||
# -- Configure the gateway routes for the chart here.
|
# -- Configure the gateway routes for the chart here.
|
||||||
# Additional routes can be added by adding a dictionary key similar to the 'main' route.
|
# Additional routes can be added by adding a dictionary key similar to the 'main' route.
|
||||||
# [[ref]](https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io%2fv1alpha2)
|
# [[ref]](https://gateway-api.sigs.k8s.io/references/spec/)
|
||||||
# @default -- See below
|
# @default -- See below
|
||||||
route:
|
route:
|
||||||
main:
|
main:
|
||||||
|
@ -583,7 +586,7 @@ persistence:
|
||||||
enabled: false
|
enabled: false
|
||||||
|
|
||||||
# -- Sets the persistence type
|
# -- Sets the persistence type
|
||||||
# Valid options are persistentVolumeClaim, emptyDir, hostPath, secret, configMap or custom
|
# Valid options are persistentVolumeClaim, emptyDir, nfs, hostPath, secret, configMap or custom
|
||||||
type: persistentVolumeClaim
|
type: persistentVolumeClaim
|
||||||
|
|
||||||
# -- Storage Class for the config volume.
|
# -- Storage Class for the config volume.
|
||||||
|
@ -617,16 +620,16 @@ persistence:
|
||||||
# -- Explicitly configure mounts for specific controllers and containers.
|
# -- Explicitly configure mounts for specific controllers and containers.
|
||||||
# Example:
|
# Example:
|
||||||
# advancedMounts:
|
# advancedMounts:
|
||||||
# main: # the controller with whe "main" identifier
|
# main: # the controller with the "main" identifier
|
||||||
# main: # the container with whe "main" identifier
|
# main: # the container with the "main" identifier
|
||||||
# - path: /data/config.yaml
|
# - path: /data/config.yaml
|
||||||
# readOnly: true
|
# readOnly: true
|
||||||
# subPath: config.yaml
|
# subPath: config.yaml
|
||||||
# second-container: # the container with whe "second-container" identifier
|
# second-container: # the container with the "second-container" identifier
|
||||||
# - path: /appdata/config
|
# - path: /appdata/config
|
||||||
# readOnly: true
|
# readOnly: true
|
||||||
# second-controller: # the controller with whe "second-controller" identifier
|
# second-controller: # the controller with the "second-controller" identifier
|
||||||
# main: # the container with whe "main" identifier
|
# main: # the container with the "main" identifier
|
||||||
# - path: /data/config.yaml
|
# - path: /data/config.yaml
|
||||||
# readOnly: false
|
# readOnly: false
|
||||||
# subPath: config.yaml
|
# subPath: config.yaml
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
apiVersion: v2
|
apiVersion: v2
|
||||||
description: A common powered chart template. This can be useful for small projects that don't have their own chart.
|
description: A common powered chart template. This can be useful for small projects that don't have their own chart.
|
||||||
name: app-template
|
name: app-template
|
||||||
version: 2.0.0-beta.3
|
version: 2.0.0
|
||||||
kubeVersion: ">=1.22.0-0"
|
kubeVersion: ">=1.22.0-0"
|
||||||
maintainers:
|
maintainers:
|
||||||
- name: bjw-s
|
- name: bjw-s
|
||||||
|
@ -10,12 +10,14 @@ maintainers:
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: common
|
- name: common
|
||||||
repository: https://bjw-s.github.io/helm-charts
|
repository: https://bjw-s.github.io/helm-charts
|
||||||
version: 2.0.0-beta.3
|
version: 2.0.0
|
||||||
annotations:
|
annotations:
|
||||||
artifacthub.io/changes: |-
|
artifacthub.io/changes: |-
|
||||||
- kind: changed
|
- kind: changed
|
||||||
description: |
|
description: |
|
||||||
Updated library version to 2.0.0-beta.3.
|
Updated library version to 2.0.0.
|
||||||
links:
|
links:
|
||||||
|
- name: Upgrade instructions
|
||||||
|
url: https://github.com/bjw-s/helm-charts/tree/main/charts/other/app-template#from-1xx-to-20x
|
||||||
- name: Common library chart definition
|
- name: Common library chart definition
|
||||||
url: https://github.com/bjw-s/helm-charts/blob/main/charts/library/common/Chart.yaml
|
url: https://github.com/bjw-s/helm-charts/blob/main/charts/library/common/Chart.yaml
|
||||||
|
|
150
charts/other/app-template/README.md
Normal file
150
charts/other/app-template/README.md
Normal file
|
@ -0,0 +1,150 @@
|
||||||
|
# app-template
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
A common powered chart template. This can be useful for small projects that don't have their own chart.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
Kubernetes: `>=1.22.0-0`
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
| Repository | Name | Version |
|
||||||
|
| ----------------------------------- | ------ | ------- |
|
||||||
|
| https://bjw-s.github.io/helm-charts | common | 2.0.0 |
|
||||||
|
|
||||||
|
## Installing the Chart
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Add the repository
|
||||||
|
helm repo add bjw-s https://bjw-s.github.io/helm-charts/
|
||||||
|
|
||||||
|
# Install the chart
|
||||||
|
helm install bjw-s app-template -f values.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Read through the [values.yaml](../../library/common/values.yaml) file of the [common library](../../library/common/) chart. It has several commented out suggested values.
|
||||||
|
The [CI tests](../../library/common-test/ci) contain a number of scenarios that may prove useful as well.
|
||||||
|
|
||||||
|
## Upgrade instructions
|
||||||
|
|
||||||
|
### From 1.x.x to 2.0.x
|
||||||
|
|
||||||
|
Given the following real-life example values.yaml for app-template v1:
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Expand</summary>
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/onedr0p/sabnzbd
|
||||||
|
tag: latest
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
podSecurityContext:
|
||||||
|
runAsUser: 568
|
||||||
|
runAsGroup: 568
|
||||||
|
fsGroup: 568
|
||||||
|
fsGroupChangePolicy: "OnRootMismatch"
|
||||||
|
supplementalGroups:
|
||||||
|
- 65539
|
||||||
|
|
||||||
|
service:
|
||||||
|
main:
|
||||||
|
ports:
|
||||||
|
http:
|
||||||
|
port: 8080
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
main:
|
||||||
|
enabled: true
|
||||||
|
ingressClassName: "ingress-nginx"
|
||||||
|
|
||||||
|
persistence:
|
||||||
|
media:
|
||||||
|
enabled: true
|
||||||
|
existingClaim: nas-media
|
||||||
|
mountPath: /data/nas-media
|
||||||
|
|
||||||
|
probes:
|
||||||
|
liveness:
|
||||||
|
enabled: false
|
||||||
|
readiness:
|
||||||
|
enabled: false
|
||||||
|
startup:
|
||||||
|
enabled: false
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
The values for app-template v2.x would become this:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
defaultPodOptions:
|
||||||
|
securityContext:
|
||||||
|
runAsUser: 568
|
||||||
|
runAsGroup: 568
|
||||||
|
fsGroup: 568
|
||||||
|
fsGroupChangePolicy: "OnRootMismatch"
|
||||||
|
supplementalGroups:
|
||||||
|
- 65539
|
||||||
|
|
||||||
|
controllers:
|
||||||
|
main:
|
||||||
|
containers:
|
||||||
|
main:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/onedr0p/sabnzbd
|
||||||
|
tag: latest
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
probes:
|
||||||
|
liveness:
|
||||||
|
enabled: false
|
||||||
|
readiness:
|
||||||
|
enabled: false
|
||||||
|
startup:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
service:
|
||||||
|
main:
|
||||||
|
ports:
|
||||||
|
http:
|
||||||
|
port: 8080
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
main:
|
||||||
|
enabled: true
|
||||||
|
className: "ingress-nginx"
|
||||||
|
|
||||||
|
persistence:
|
||||||
|
media:
|
||||||
|
existingClaim: nas-media
|
||||||
|
globalMounts:
|
||||||
|
- path: /data/nas-media
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Changes in this example
|
||||||
|
|
||||||
|
This is not meant as an exhaustive list of changes, but rather a "most common" example.
|
||||||
|
|
||||||
|
- `podSecurityContext` has been moved to `defaultPodOptions.securityContext`. It is also possible to configure this on a controller-specific basis by moving it to `controllers.main.pod.securityContext` instead.
|
||||||
|
- `image` has been moved to `controllers.main.containers.main.image` so that multiple containers can be configured.
|
||||||
|
- `ingress.main.ingressClassName` has been renamed to `ingress.main.className`.
|
||||||
|
- `ingress.main.enabled` can be removed, since items are considered enabled by default (they can still be disabled by adding `enabled: false`).
|
||||||
|
- `persistence.media.mountPath` has been moved to `persistence.media.globalMounts.*.path` to allow multiple mountPaths for the same persistence item.
|
||||||
|
- `persistence.media.enabled` can be removed, since items are considered enabled by default (they can still be disabled by adding `enabled: false`).
|
||||||
|
- `probes` has been moved to `controllers.main.containers.main.probes` so that multiple containers can be configured.
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
- See the [Docs](http://bjw-s.github.io/helm-charts/docs/)
|
||||||
|
- Open an [issue](https://github.com/bjw-s/helm-charts/issues/new/choose)
|
||||||
|
- Join the k8s-at-home [Discord](https://discord.gg/k8s-at-home) community
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0)
|
152
charts/other/app-template/README.md.gotmpl
Normal file
152
charts/other/app-template/README.md.gotmpl
Normal file
|
@ -0,0 +1,152 @@
|
||||||
|
{{- define "custom.helm.url" -}}
|
||||||
|
https://bjw-s.github.io/helm-charts/
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{ template "chart.header" . }}
|
||||||
|
|
||||||
|
{{ template "chart.versionBadge" . }}{{ template "chart.typeBadge" . }}{{ template "chart.appVersionBadge" . }}
|
||||||
|
|
||||||
|
{{ template "chart.description" . }}
|
||||||
|
|
||||||
|
{{ template "chart.sourcesSection" . }}
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
{{ template "chart.kubeVersionLine" . }}
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
{{ template "chart.requirementsTable" . }}
|
||||||
|
|
||||||
|
## Installing the Chart
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Add the repository
|
||||||
|
helm repo add bjw-s {{template "custom.helm.url"}}
|
||||||
|
|
||||||
|
# Install the chart
|
||||||
|
helm install bjw-s app-template -f values.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Read through the [values.yaml](../../library/common/values.yaml) file of the [common library](../../library/common/) chart. It has several commented out suggested values.
|
||||||
|
The [CI tests](../../library/common-test/ci) contain a number of scenarios that may prove useful as well.
|
||||||
|
|
||||||
|
## Upgrade instructions
|
||||||
|
|
||||||
|
### From 1.x.x to 2.0.x
|
||||||
|
|
||||||
|
Given the following real-life example values.yaml for app-template v1:
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Expand</summary>
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/onedr0p/sabnzbd
|
||||||
|
tag: latest
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
podSecurityContext:
|
||||||
|
runAsUser: 568
|
||||||
|
runAsGroup: 568
|
||||||
|
fsGroup: 568
|
||||||
|
fsGroupChangePolicy: "OnRootMismatch"
|
||||||
|
supplementalGroups:
|
||||||
|
- 65539
|
||||||
|
|
||||||
|
service:
|
||||||
|
main:
|
||||||
|
ports:
|
||||||
|
http:
|
||||||
|
port: 8080
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
main:
|
||||||
|
enabled: true
|
||||||
|
ingressClassName: "ingress-nginx"
|
||||||
|
|
||||||
|
persistence:
|
||||||
|
media:
|
||||||
|
enabled: true
|
||||||
|
existingClaim: nas-media
|
||||||
|
mountPath: /data/nas-media
|
||||||
|
|
||||||
|
probes:
|
||||||
|
liveness:
|
||||||
|
enabled: false
|
||||||
|
readiness:
|
||||||
|
enabled: false
|
||||||
|
startup:
|
||||||
|
enabled: false
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
The values for app-template v2.x would become this:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
defaultPodOptions:
|
||||||
|
securityContext:
|
||||||
|
runAsUser: 568
|
||||||
|
runAsGroup: 568
|
||||||
|
fsGroup: 568
|
||||||
|
fsGroupChangePolicy: "OnRootMismatch"
|
||||||
|
supplementalGroups:
|
||||||
|
- 65539
|
||||||
|
|
||||||
|
controllers:
|
||||||
|
main:
|
||||||
|
containers:
|
||||||
|
main:
|
||||||
|
image:
|
||||||
|
repository: ghcr.io/onedr0p/sabnzbd
|
||||||
|
tag: latest
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
probes:
|
||||||
|
liveness:
|
||||||
|
enabled: false
|
||||||
|
readiness:
|
||||||
|
enabled: false
|
||||||
|
startup:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
service:
|
||||||
|
main:
|
||||||
|
ports:
|
||||||
|
http:
|
||||||
|
port: 8080
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
main:
|
||||||
|
enabled: true
|
||||||
|
className: "ingress-nginx"
|
||||||
|
|
||||||
|
persistence:
|
||||||
|
media:
|
||||||
|
existingClaim: nas-media
|
||||||
|
globalMounts:
|
||||||
|
- path: /data/nas-media
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Changes in this example
|
||||||
|
|
||||||
|
This is not meant as an exhaustive list of changes, but rather a "most common" example.
|
||||||
|
|
||||||
|
- `podSecurityContext` has been moved to `defaultPodOptions.securityContext`. It is also possible to configure this on a controller-specific basis by moving it to `controllers.main.pod.securityContext` instead.
|
||||||
|
- `image` has been moved to `controllers.main.containers.main.image` so that multiple containers can be configured.
|
||||||
|
- `ingress.main.ingressClassName` has been renamed to `ingress.main.className`.
|
||||||
|
- `ingress.main.enabled` can be removed, since items are considered enabled by default (they can still be disabled by adding `enabled: false`).
|
||||||
|
- `persistence.media.mountPath` has been moved to `persistence.media.globalMounts.*.path` to allow multiple mountPaths for the same persistence item.
|
||||||
|
- `persistence.media.enabled` can be removed, since items are considered enabled by default (they can still be disabled by adding `enabled: false`).
|
||||||
|
- `probes` has been moved to `controllers.main.containers.main.probes` so that multiple containers can be configured.
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
- See the [Docs](http://bjw-s.github.io/helm-charts/docs/)
|
||||||
|
- Open an [issue](https://github.com/bjw-s/helm-charts/issues/new/choose)
|
||||||
|
- Join the k8s-at-home [Discord](https://discord.gg/k8s-at-home) community
|
||||||
|
|
||||||
|
{{ template "helm-docs.versionFooter" . }}
|
|
@ -1,9 +0,0 @@
|
||||||
{{- define "custom.custom.configuration.header" -}}
|
|
||||||
## Custom configuration
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- define "custom.custom.configuration" -}}
|
|
||||||
{{ template "custom.custom.configuration.header" . }}
|
|
||||||
|
|
||||||
N/A
|
|
||||||
{{- end -}}
|
|
|
@ -1 +0,0 @@
|
||||||
---
|
|
1
docs/.gitignore
vendored
1
docs/.gitignore
vendored
|
@ -1 +0,0 @@
|
||||||
book
|
|
|
@ -1,16 +1,21 @@
|
||||||
|
---
|
||||||
|
hide:
|
||||||
|
- navigation
|
||||||
|
---
|
||||||
|
|
||||||
# App Template
|
# App Template
|
||||||
|
|
||||||
## Background
|
## Background
|
||||||
|
|
||||||
Since Helm [library charts](https://helm.sh/docs/topics/library_charts/) cannot be
|
Since Helm [library charts](https://helm.sh/docs/topics/library_charts/) cannot be
|
||||||
installed directly I have created a companion chart for the [common library](../common-library/introduction.md).
|
installed directly I have created a companion chart for the [common library](../common-library/index.md).
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
In order to use this template chart, you would deploy it as you would any other Helm chart.
|
In order to use this template chart, you would deploy it as you would any other Helm chart.
|
||||||
By setting the desired values, the common library chart will render the desired resources.
|
By setting the desired values, the common library chart will render the desired resources.
|
||||||
|
|
||||||
Be sure to check out the [common library docs](../common-library/introduction.md)
|
Be sure to check out the [common library docs](../common-library/index.md)
|
||||||
and its [`values.yaml`](https://github.com/bjw-s/helm-charts/tree/main/charts/library/common/values.yaml) for
|
and its [`values.yaml`](https://github.com/bjw-s/helm-charts/tree/main/charts/library/common/values.yaml) for
|
||||||
more information about the available configuration options.
|
more information about the available configuration options.
|
||||||
|
|
||||||
|
@ -19,11 +24,16 @@ more information about the available configuration options.
|
||||||
This is an example `values.yaml` file that would deploy the [vaultwarden](https://github.com/dani-garcia/vaultwarden)
|
This is an example `values.yaml` file that would deploy the [vaultwarden](https://github.com/dani-garcia/vaultwarden)
|
||||||
application. For more deployment examples, check out the [`examples` folder](https://github.com/bjw-s/helm-charts/tree/main/examples/).
|
application. For more deployment examples, check out the [`examples` folder](https://github.com/bjw-s/helm-charts/tree/main/examples/).
|
||||||
|
|
||||||
|
```yaml linenums="1"
|
||||||
```yaml
|
--8<--
|
||||||
{{ #include ../../../examples/helm/values.yaml }}
|
examples/helm/values.yaml
|
||||||
|
--8<--
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Upgrade instructions
|
||||||
|
|
||||||
|
--8<-- "charts/other/app-template/README.md:34:141"
|
||||||
|
|
||||||
## Source code
|
## Source code
|
||||||
|
|
||||||
The source code for the app template chart can be found
|
The source code for the app template chart can be found
|
|
@ -1,352 +0,0 @@
|
||||||
@charset "UTF-8";
|
|
||||||
:root {
|
|
||||||
--md-admonition-icon--note:
|
|
||||||
url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z'/></svg>");
|
|
||||||
--md-admonition-icon--abstract:
|
|
||||||
url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M17 9H7V7h10m0 6H7v-2h10m-3 6H7v-2h7M12 3a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1m7 0h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2z'/></svg>");
|
|
||||||
--md-admonition-icon--info:
|
|
||||||
url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M13 9h-2V7h2m0 10h-2v-6h2m-1-9A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2z'/></svg>");
|
|
||||||
--md-admonition-icon--tip:
|
|
||||||
url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M17.66 11.2c-.23-.3-.51-.56-.77-.82-.67-.6-1.43-1.03-2.07-1.66C13.33 7.26 13 4.85 13.95 3c-.95.23-1.78.75-2.49 1.32-2.59 2.08-3.61 5.75-2.39 8.9.04.1.08.2.08.33 0 .22-.15.42-.35.5-.23.1-.47.04-.66-.12a.58.58 0 0 1-.14-.17c-1.13-1.43-1.31-3.48-.55-5.12C5.78 10 4.87 12.3 5 14.47c.06.5.12 1 .29 1.5.14.6.41 1.2.71 1.73 1.08 1.73 2.95 2.97 4.96 3.22 2.14.27 4.43-.12 6.07-1.6 1.83-1.66 2.47-4.32 1.53-6.6l-.13-.26c-.21-.46-.77-1.26-.77-1.26m-3.16 6.3c-.28.24-.74.5-1.1.6-1.12.4-2.24-.16-2.9-.82 1.19-.28 1.9-1.16 2.11-2.05.17-.8-.15-1.46-.28-2.23-.12-.74-.1-1.37.17-2.06.19.38.39.76.63 1.06.77 1 1.98 1.44 2.24 2.8.04.14.06.28.06.43.03.82-.33 1.72-.93 2.27z'/></svg>");
|
|
||||||
--md-admonition-icon--success:
|
|
||||||
url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='m9 20.42-6.21-6.21 2.83-2.83L9 14.77l9.88-9.89 2.83 2.83L9 20.42z'/></svg>");
|
|
||||||
--md-admonition-icon--question:
|
|
||||||
url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='m15.07 11.25-.9.92C13.45 12.89 13 13.5 13 15h-2v-.5c0-1.11.45-2.11 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41a2 2 0 0 0-2-2 2 2 0 0 0-2 2H8a4 4 0 0 1 4-4 4 4 0 0 1 4 4 3.2 3.2 0 0 1-.93 2.25M13 19h-2v-2h2M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10c0-5.53-4.5-10-10-10z'/></svg>");
|
|
||||||
--md-admonition-icon--warning:
|
|
||||||
url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M13 14h-2V9h2m0 9h-2v-2h2M1 21h22L12 2 1 21z'/></svg>");
|
|
||||||
--md-admonition-icon--failure:
|
|
||||||
url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M20 6.91 17.09 4 12 9.09 6.91 4 4 6.91 9.09 12 4 17.09 6.91 20 12 14.91 17.09 20 20 17.09 14.91 12 20 6.91z'/></svg>");
|
|
||||||
--md-admonition-icon--danger:
|
|
||||||
url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M11 15H6l7-14v8h5l-7 14v-8z'/></svg>");
|
|
||||||
--md-admonition-icon--bug:
|
|
||||||
url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M14 12h-4v-2h4m0 6h-4v-2h4m6-6h-2.81a5.985 5.985 0 0 0-1.82-1.96L17 4.41 15.59 3l-2.17 2.17a6.002 6.002 0 0 0-2.83 0L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8z'/></svg>");
|
|
||||||
--md-admonition-icon--example:
|
|
||||||
url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M7 13v-2h14v2H7m0 6v-2h14v2H7M7 7V5h14v2H7M3 8V5H2V4h2v4H3m-1 9v-1h3v4H2v-1h2v-.5H3v-1h1V17H2m2.25-7a.75.75 0 0 1 .75.75c0 .2-.08.39-.21.52L3.12 13H5v1H2v-.92L4 11H2v-1h2.25z'/></svg>");
|
|
||||||
--md-admonition-icon--quote:
|
|
||||||
url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M14 17h3l2-4V7h-6v6h3M6 17h3l2-4V7H5v6h3l-2 4z'/></svg>");
|
|
||||||
--md-details-icon:
|
|
||||||
url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.42Z'/></svg>");
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.admonition) {
|
|
||||||
display: flow-root;
|
|
||||||
margin: 1.5625em 0;
|
|
||||||
padding: 0 1.2rem;
|
|
||||||
color: var(--fg);
|
|
||||||
page-break-inside: avoid;
|
|
||||||
background-color: var(--bg);
|
|
||||||
border: 0 solid black;
|
|
||||||
border-inline-start-width: 0.4rem;
|
|
||||||
border-radius: 0.2rem;
|
|
||||||
box-shadow: 0 0.2rem 1rem rgba(0, 0, 0, 0.05), 0 0 0.1rem rgba(0, 0, 0, 0.1);
|
|
||||||
}
|
|
||||||
@media print {
|
|
||||||
:is(.admonition) {
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
:is(.admonition) > * {
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
:is(.admonition) :is(.admonition) {
|
|
||||||
margin-top: 1em;
|
|
||||||
margin-bottom: 1em;
|
|
||||||
}
|
|
||||||
:is(.admonition) > .tabbed-set:only-child {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
html :is(.admonition) > :last-child {
|
|
||||||
margin-bottom: 1.2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.admonition-anchor-link {
|
|
||||||
display: none;
|
|
||||||
position: absolute;
|
|
||||||
left: -1.2rem;
|
|
||||||
padding-right: 1rem;
|
|
||||||
}
|
|
||||||
a.admonition-anchor-link:link, a.admonition-anchor-link:visited {
|
|
||||||
color: var(--fg);
|
|
||||||
}
|
|
||||||
a.admonition-anchor-link:link:hover, a.admonition-anchor-link:visited:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
a.admonition-anchor-link::before {
|
|
||||||
content: "§";
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.admonition-title, summary) {
|
|
||||||
position: relative;
|
|
||||||
margin-block: 0;
|
|
||||||
margin-inline: -1.6rem -1.2rem;
|
|
||||||
padding-block: 0.8rem;
|
|
||||||
padding-inline: 4.4rem 1.2rem;
|
|
||||||
font-weight: 700;
|
|
||||||
background-color: rgba(68, 138, 255, 0.1);
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
:is(.admonition-title, summary) p {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
html :is(.admonition-title, summary):last-child {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
:is(.admonition-title, summary)::before {
|
|
||||||
position: absolute;
|
|
||||||
top: 0.625em;
|
|
||||||
inset-inline-start: 1.6rem;
|
|
||||||
width: 2rem;
|
|
||||||
height: 2rem;
|
|
||||||
background-color: #448aff;
|
|
||||||
mask-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"></svg>');
|
|
||||||
-webkit-mask-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"></svg>');
|
|
||||||
mask-repeat: no-repeat;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
mask-size: contain;
|
|
||||||
-webkit-mask-size: contain;
|
|
||||||
content: "";
|
|
||||||
}
|
|
||||||
:is(.admonition-title, summary):hover a.admonition-anchor-link {
|
|
||||||
display: initial;
|
|
||||||
}
|
|
||||||
|
|
||||||
details.admonition > summary.admonition-title::after {
|
|
||||||
position: absolute;
|
|
||||||
top: 0.625em;
|
|
||||||
inset-inline-end: 1.6rem;
|
|
||||||
height: 2rem;
|
|
||||||
width: 2rem;
|
|
||||||
background-color: currentcolor;
|
|
||||||
mask-image: var(--md-details-icon);
|
|
||||||
-webkit-mask-image: var(--md-details-icon);
|
|
||||||
mask-repeat: no-repeat;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
mask-size: contain;
|
|
||||||
-webkit-mask-size: contain;
|
|
||||||
content: "";
|
|
||||||
transform: rotate(0deg);
|
|
||||||
transition: transform 0.25s;
|
|
||||||
}
|
|
||||||
details[open].admonition > summary.admonition-title::after {
|
|
||||||
transform: rotate(90deg);
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.admonition):is(.note) {
|
|
||||||
border-color: #448aff;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.note) > :is(.admonition-title, summary) {
|
|
||||||
background-color: rgba(68, 138, 255, 0.1);
|
|
||||||
}
|
|
||||||
:is(.note) > :is(.admonition-title, summary)::before {
|
|
||||||
background-color: #448aff;
|
|
||||||
mask-image: var(--md-admonition-icon--note);
|
|
||||||
-webkit-mask-image: var(--md-admonition-icon--note);
|
|
||||||
mask-repeat: no-repeat;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
mask-size: contain;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.admonition):is(.abstract, .summary, .tldr) {
|
|
||||||
border-color: #00b0ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.abstract, .summary, .tldr) > :is(.admonition-title, summary) {
|
|
||||||
background-color: rgba(0, 176, 255, 0.1);
|
|
||||||
}
|
|
||||||
:is(.abstract, .summary, .tldr) > :is(.admonition-title, summary)::before {
|
|
||||||
background-color: #00b0ff;
|
|
||||||
mask-image: var(--md-admonition-icon--abstract);
|
|
||||||
-webkit-mask-image: var(--md-admonition-icon--abstract);
|
|
||||||
mask-repeat: no-repeat;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
mask-size: contain;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.admonition):is(.info, .todo) {
|
|
||||||
border-color: #00b8d4;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.info, .todo) > :is(.admonition-title, summary) {
|
|
||||||
background-color: rgba(0, 184, 212, 0.1);
|
|
||||||
}
|
|
||||||
:is(.info, .todo) > :is(.admonition-title, summary)::before {
|
|
||||||
background-color: #00b8d4;
|
|
||||||
mask-image: var(--md-admonition-icon--info);
|
|
||||||
-webkit-mask-image: var(--md-admonition-icon--info);
|
|
||||||
mask-repeat: no-repeat;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
mask-size: contain;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.admonition):is(.tip, .hint, .important) {
|
|
||||||
border-color: #00bfa5;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.tip, .hint, .important) > :is(.admonition-title, summary) {
|
|
||||||
background-color: rgba(0, 191, 165, 0.1);
|
|
||||||
}
|
|
||||||
:is(.tip, .hint, .important) > :is(.admonition-title, summary)::before {
|
|
||||||
background-color: #00bfa5;
|
|
||||||
mask-image: var(--md-admonition-icon--tip);
|
|
||||||
-webkit-mask-image: var(--md-admonition-icon--tip);
|
|
||||||
mask-repeat: no-repeat;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
mask-size: contain;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.admonition):is(.success, .check, .done) {
|
|
||||||
border-color: #00c853;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.success, .check, .done) > :is(.admonition-title, summary) {
|
|
||||||
background-color: rgba(0, 200, 83, 0.1);
|
|
||||||
}
|
|
||||||
:is(.success, .check, .done) > :is(.admonition-title, summary)::before {
|
|
||||||
background-color: #00c853;
|
|
||||||
mask-image: var(--md-admonition-icon--success);
|
|
||||||
-webkit-mask-image: var(--md-admonition-icon--success);
|
|
||||||
mask-repeat: no-repeat;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
mask-size: contain;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.admonition):is(.question, .help, .faq) {
|
|
||||||
border-color: #64dd17;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.question, .help, .faq) > :is(.admonition-title, summary) {
|
|
||||||
background-color: rgba(100, 221, 23, 0.1);
|
|
||||||
}
|
|
||||||
:is(.question, .help, .faq) > :is(.admonition-title, summary)::before {
|
|
||||||
background-color: #64dd17;
|
|
||||||
mask-image: var(--md-admonition-icon--question);
|
|
||||||
-webkit-mask-image: var(--md-admonition-icon--question);
|
|
||||||
mask-repeat: no-repeat;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
mask-size: contain;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.admonition):is(.warning, .caution, .attention) {
|
|
||||||
border-color: #ff9100;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.warning, .caution, .attention) > :is(.admonition-title, summary) {
|
|
||||||
background-color: rgba(255, 145, 0, 0.1);
|
|
||||||
}
|
|
||||||
:is(.warning, .caution, .attention) > :is(.admonition-title, summary)::before {
|
|
||||||
background-color: #ff9100;
|
|
||||||
mask-image: var(--md-admonition-icon--warning);
|
|
||||||
-webkit-mask-image: var(--md-admonition-icon--warning);
|
|
||||||
mask-repeat: no-repeat;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
mask-size: contain;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.admonition):is(.failure, .fail, .missing) {
|
|
||||||
border-color: #ff5252;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.failure, .fail, .missing) > :is(.admonition-title, summary) {
|
|
||||||
background-color: rgba(255, 82, 82, 0.1);
|
|
||||||
}
|
|
||||||
:is(.failure, .fail, .missing) > :is(.admonition-title, summary)::before {
|
|
||||||
background-color: #ff5252;
|
|
||||||
mask-image: var(--md-admonition-icon--failure);
|
|
||||||
-webkit-mask-image: var(--md-admonition-icon--failure);
|
|
||||||
mask-repeat: no-repeat;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
mask-size: contain;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.admonition):is(.danger, .error) {
|
|
||||||
border-color: #ff1744;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.danger, .error) > :is(.admonition-title, summary) {
|
|
||||||
background-color: rgba(255, 23, 68, 0.1);
|
|
||||||
}
|
|
||||||
:is(.danger, .error) > :is(.admonition-title, summary)::before {
|
|
||||||
background-color: #ff1744;
|
|
||||||
mask-image: var(--md-admonition-icon--danger);
|
|
||||||
-webkit-mask-image: var(--md-admonition-icon--danger);
|
|
||||||
mask-repeat: no-repeat;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
mask-size: contain;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.admonition):is(.bug) {
|
|
||||||
border-color: #f50057;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.bug) > :is(.admonition-title, summary) {
|
|
||||||
background-color: rgba(245, 0, 87, 0.1);
|
|
||||||
}
|
|
||||||
:is(.bug) > :is(.admonition-title, summary)::before {
|
|
||||||
background-color: #f50057;
|
|
||||||
mask-image: var(--md-admonition-icon--bug);
|
|
||||||
-webkit-mask-image: var(--md-admonition-icon--bug);
|
|
||||||
mask-repeat: no-repeat;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
mask-size: contain;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.admonition):is(.example) {
|
|
||||||
border-color: #7c4dff;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.example) > :is(.admonition-title, summary) {
|
|
||||||
background-color: rgba(124, 77, 255, 0.1);
|
|
||||||
}
|
|
||||||
:is(.example) > :is(.admonition-title, summary)::before {
|
|
||||||
background-color: #7c4dff;
|
|
||||||
mask-image: var(--md-admonition-icon--example);
|
|
||||||
-webkit-mask-image: var(--md-admonition-icon--example);
|
|
||||||
mask-repeat: no-repeat;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
mask-size: contain;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.admonition):is(.quote, .cite) {
|
|
||||||
border-color: #9e9e9e;
|
|
||||||
}
|
|
||||||
|
|
||||||
:is(.quote, .cite) > :is(.admonition-title, summary) {
|
|
||||||
background-color: rgba(158, 158, 158, 0.1);
|
|
||||||
}
|
|
||||||
:is(.quote, .cite) > :is(.admonition-title, summary)::before {
|
|
||||||
background-color: #9e9e9e;
|
|
||||||
mask-image: var(--md-admonition-icon--quote);
|
|
||||||
-webkit-mask-image: var(--md-admonition-icon--quote);
|
|
||||||
mask-repeat: no-repeat;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
mask-size: contain;
|
|
||||||
-webkit-mask-repeat: no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navy :is(.admonition) {
|
|
||||||
background-color: var(--sidebar-bg);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ayu :is(.admonition), .coal :is(.admonition) {
|
|
||||||
background-color: var(--theme-hover);
|
|
||||||
}
|
|
||||||
|
|
||||||
.rust :is(.admonition) {
|
|
||||||
background-color: var(--sidebar-bg);
|
|
||||||
color: var(--sidebar-fg);
|
|
||||||
}
|
|
||||||
.rust .admonition-anchor-link:link, .rust .admonition-anchor-link:visited {
|
|
||||||
color: var(--sidebar-fg);
|
|
||||||
}
|
|
|
@ -1,48 +0,0 @@
|
||||||
[book]
|
|
||||||
authors = ["Bernd Schorgers"]
|
|
||||||
language = "en"
|
|
||||||
multilingual = false
|
|
||||||
src = "src"
|
|
||||||
title = "Helm Charts"
|
|
||||||
|
|
||||||
[build]
|
|
||||||
create-missing = false
|
|
||||||
|
|
||||||
[output.html]
|
|
||||||
default-theme = "latte"
|
|
||||||
preferred-dark-theme = "macchiato"
|
|
||||||
git-repository-url = "https://github.com/bjw-s/helm-charts"
|
|
||||||
git-repository-icon = "fa-github"
|
|
||||||
no-section-label = true
|
|
||||||
additional-css = ["././assets/css/mdbook-admonish.css", "./theme/catppuccin.css", "./theme/catppuccin-highlight.css"]
|
|
||||||
git-branch = "main"
|
|
||||||
open-on-text = "[Edit this page on GitHub]"
|
|
||||||
|
|
||||||
[output.html.fold]
|
|
||||||
enable = true
|
|
||||||
level = 1
|
|
||||||
|
|
||||||
[output.html.playground]
|
|
||||||
copyable = false
|
|
||||||
|
|
||||||
[output.html.search]
|
|
||||||
limit-results = 15
|
|
||||||
|
|
||||||
[output.linkcheck]
|
|
||||||
|
|
||||||
[preprocessor]
|
|
||||||
|
|
||||||
[preprocessor.admonish]
|
|
||||||
command = "mdbook-admonish"
|
|
||||||
assets_version = "2.0.0" # do not edit: managed by `mdbook-admonish install`
|
|
||||||
|
|
||||||
[preprocessor.emojicodes]
|
|
||||||
after = [ "links" ]
|
|
||||||
|
|
||||||
[preprocessor.toc]
|
|
||||||
command = "mdbook-toc"
|
|
||||||
renderer = ["html"]
|
|
||||||
|
|
||||||
[preprocessor.regex]
|
|
||||||
after = [ "links" ]
|
|
||||||
patterns = "replace-patterns.json"
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
hide:
|
||||||
|
- toc
|
||||||
|
---
|
||||||
|
|
||||||
# Helm templates
|
# Helm templates
|
||||||
|
|
||||||
Some fields in the common library `values.yaml` allow the use of Helm templates for their values.
|
Some fields in the common library `values.yaml` allow the use of Helm templates for their values.
|
||||||
|
@ -5,7 +10,7 @@ This is often indicated by a remark similar to `Helm template enabled` in the fi
|
||||||
|
|
||||||
This feature allows you to set the value of that key to the output of the given Helm template.
|
This feature allows you to set the value of that key to the output of the given Helm template.
|
||||||
|
|
||||||
## Example:
|
## Example
|
||||||
|
|
||||||
Given the following `values.yaml`
|
Given the following `values.yaml`
|
||||||
|
|
|
@ -1,10 +1,15 @@
|
||||||
|
---
|
||||||
|
hide:
|
||||||
|
- toc
|
||||||
|
---
|
||||||
|
|
||||||
# Multiple subPaths for 1 volume
|
# Multiple subPaths for 1 volume
|
||||||
|
|
||||||
It is possible to mount multiple subPaths from the same volume to a
|
It is possible to mount multiple subPaths from the same volume to a
|
||||||
container. This can be achieved by specifying `subPath` with a list
|
container. This can be achieved by specifying `subPath` with a list
|
||||||
instead of a string.
|
instead of a string.
|
||||||
|
|
||||||
## Examples:
|
## Example
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
persistence:
|
persistence:
|
||||||
|
@ -12,20 +17,26 @@ persistence:
|
||||||
type: configMap
|
type: configMap
|
||||||
name: my-configMap
|
name: my-configMap
|
||||||
advancedMounts:
|
advancedMounts:
|
||||||
main: # the controller with whe "main" identifier
|
main: # (1)
|
||||||
main: # the container with whe "main" identifier
|
main: # (2)
|
||||||
- path: /data/config.yaml
|
- path: /data/config.yaml
|
||||||
readOnly: false
|
readOnly: false
|
||||||
subPath: config.yaml
|
subPath: config.yaml
|
||||||
- path: /data/secondConfigFile.yaml
|
- path: /data/secondConfigFile.yaml
|
||||||
readOnly: false
|
readOnly: false
|
||||||
subPath: secondConfigFile.yaml
|
subPath: secondConfigFile.yaml
|
||||||
second-container: # the container with whe "second-container" identifier
|
second-container: # (3)
|
||||||
- path: /appdata/config
|
- path: /appdata/config
|
||||||
readOnly: true
|
readOnly: true
|
||||||
second-controller: # the controller with whe "second-controller" identifier
|
second-controller: # (4)
|
||||||
main: # the container with whe "main" identifier
|
main: # (5)
|
||||||
- path: /data/config.yaml
|
- path: /data/config.yaml
|
||||||
readOnly: false
|
readOnly: false
|
||||||
subPath: config.yaml
|
subPath: config.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
|
1. the controller with the "main" identifier
|
||||||
|
2. the container with the "main" identifier
|
||||||
|
3. the container with the "second-container" identifier
|
||||||
|
4. the controller with the "second-controller" identifier
|
||||||
|
5. the container with the "main" identifier
|
|
@ -1,11 +1,16 @@
|
||||||
# Common library
|
---
|
||||||
|
hide:
|
||||||
|
- toc
|
||||||
|
---
|
||||||
|
|
||||||
```admonish note
|
# Common Library
|
||||||
The Common library chart is not meant to be installed directly, application
|
|
||||||
charts use the Common library as a dependency.
|
!!! note
|
||||||
See the [app template](../app-template/introduction.md ) for an example how to
|
|
||||||
deploy it.
|
The Common library chart is not meant to be installed directly, application
|
||||||
```
|
charts use the Common library as a dependency.
|
||||||
|
See the [app template](../app-template/index.md) for an example how to
|
||||||
|
deploy it.
|
||||||
|
|
||||||
## Background
|
## Background
|
||||||
|
|
||||||
|
@ -20,17 +25,17 @@ In Helm 3, their team introduced the concept of a
|
||||||
The common library was created because I saw many charts requiring only a
|
The common library was created because I saw many charts requiring only a
|
||||||
few select configuration options in their Helm charts.
|
few select configuration options in their Helm charts.
|
||||||
|
|
||||||
```admonish note
|
!!! note
|
||||||
Take one of the many applications like `sonarr` or `nzbget`. Each of these
|
|
||||||
charts only require setting `service`, `port`, `persistence`, `ingress`
|
Take one of the many applications like `sonarr` or `nzbget`. Each of these
|
||||||
and `image` since state and app configuration is handled by the application
|
charts only require setting `service`, `port`, `persistence`, `ingress`
|
||||||
itself.
|
and `image` since state and app configuration is handled by the application
|
||||||
```
|
itself.
|
||||||
|
|
||||||
In order to stay somewhat DRY (Don't Repeat Yourself) and keeping with Helm 3
|
In order to stay somewhat DRY (Don't Repeat Yourself) and keeping with Helm 3
|
||||||
usage for a Library chart, I saw this pattern and decided it was worth it to
|
usage for a Library chart, I saw this pattern and decided it was worth it to
|
||||||
create a library. This means each one of these app charts has a
|
create a library. This means each one of these app charts has a
|
||||||
dependency on what we call the `common` library.
|
dependency on what I call the `common` library.
|
||||||
|
|
||||||
## Source code
|
## Source code
|
||||||
|
|
88
docs/common-library/storage/globalOptions.md
Normal file
88
docs/common-library/storage/globalOptions.md
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
# Global Options
|
||||||
|
|
||||||
|
The following options are available for all persistence types:
|
||||||
|
|
||||||
|
## enabled
|
||||||
|
|
||||||
|
Enables or disables the persistence item. Defaults to `true`.
|
||||||
|
|
||||||
|
## type
|
||||||
|
|
||||||
|
Sets the persistence type
|
||||||
|
|
||||||
|
Valid options are:
|
||||||
|
|
||||||
|
- [`configMap`](types/configmap.md)
|
||||||
|
- [`custom`](types/custom.md)
|
||||||
|
- [`emptyDir`](types/emptyDir.md)
|
||||||
|
- [`hostPath`](types/hostPath.md)
|
||||||
|
- [`nfs`](types/nfs-share.md)
|
||||||
|
- [`persistentVolumeClaim`](types/persistentVolumeClaim.md)
|
||||||
|
- [`secret`](types/secret.md)
|
||||||
|
|
||||||
|
## globalMounts
|
||||||
|
|
||||||
|
Configure mounts to all controllers and containers. By default the persistence item
|
||||||
|
will be mounted to `/<name_of_the_peristence_item>`.
|
||||||
|
|
||||||
|
**Example**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
globalMounts:
|
||||||
|
- path: /config
|
||||||
|
readOnly: false
|
||||||
|
```
|
||||||
|
|
||||||
|
### path
|
||||||
|
|
||||||
|
Where to mount the volume in the main container. Defaults to `/<name_of_the_volume>`
|
||||||
|
|
||||||
|
### readOnly
|
||||||
|
|
||||||
|
Specify if the volume should be mounted read-only
|
||||||
|
|
||||||
|
### subPath
|
||||||
|
|
||||||
|
Specifies a sub-path inside the referenced volume instead of its root.
|
||||||
|
|
||||||
|
## advancedMounts
|
||||||
|
|
||||||
|
Explicitly configure mounts for specific controllers and containers.
|
||||||
|
|
||||||
|
**Example**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
advancedMounts:
|
||||||
|
main: # (1)
|
||||||
|
main: # (2)
|
||||||
|
- path: /data/config.yaml
|
||||||
|
readOnly: true
|
||||||
|
subPath: config.yaml
|
||||||
|
second-container: # (3)
|
||||||
|
- path: /appdata/config
|
||||||
|
readOnly: true
|
||||||
|
|
||||||
|
second-controller: # (4)
|
||||||
|
main: # (5)
|
||||||
|
- path: /data/config.yaml
|
||||||
|
readOnly: false
|
||||||
|
subPath: config.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
1. the controller with the "main" identifier
|
||||||
|
2. the container with the "main" identifier
|
||||||
|
3. the container with the "second-container" identifier
|
||||||
|
4. the controller with the "second-controller" identifier
|
||||||
|
5. the container with the "main" identifier
|
||||||
|
|
||||||
|
### path
|
||||||
|
|
||||||
|
Where to mount the volume in the main container. Defaults to `/<name_of_the_volume>`
|
||||||
|
|
||||||
|
### readOnly
|
||||||
|
|
||||||
|
Specify if the volume should be mounted read-only
|
||||||
|
|
||||||
|
### subPath
|
||||||
|
|
||||||
|
Specifies a sub-path inside the referenced volume instead of its root.
|
31
docs/common-library/storage/types/configmap.md
Normal file
31
docs/common-library/storage/types/configmap.md
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
---
|
||||||
|
hide:
|
||||||
|
- toc
|
||||||
|
---
|
||||||
|
|
||||||
|
# ConfigMap
|
||||||
|
|
||||||
|
In order to mount a configMap to a mount point within the Pod you can use the
|
||||||
|
`configMap` type persistence item.
|
||||||
|
|
||||||
|
| Field | Mandatory | Docs / Description |
|
||||||
|
| ------------- | --------- | -------------------------------------------------------------------------- |
|
||||||
|
| `name` | Yes | Which configMap should be mounted. Supports Helm templating. |
|
||||||
|
| `defaultMode` | No | The default file access permission bit. |
|
||||||
|
| `items` | No | Specify item-specific configuration. Will be passed 1:1 to the volumeSpec. |
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
|
||||||
|
Even if not specified, the configMap will be read-only.
|
||||||
|
|
||||||
|
## Minimal configuration
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
enabled: true
|
||||||
|
type: configMap
|
||||||
|
name: mySettings
|
||||||
|
```
|
||||||
|
|
||||||
|
This will mount the contents of the pre-existing `mySettings` configMap to `/config`.
|
34
docs/common-library/storage/types/custom.md
Normal file
34
docs/common-library/storage/types/custom.md
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
---
|
||||||
|
hide:
|
||||||
|
- toc
|
||||||
|
---
|
||||||
|
|
||||||
|
# Custom
|
||||||
|
|
||||||
|
When you wish to specify a custom volume, you can use the `custom` type.
|
||||||
|
This can be used for example to mount configMap or Secret objects.
|
||||||
|
|
||||||
|
See the [Kubernetes docs](https://kubernetes.io/docs/concepts/storage/volumes/)
|
||||||
|
for more information.
|
||||||
|
|
||||||
|
| Field | Mandatory | Docs / Description |
|
||||||
|
| ------------ | --------- | -------------------------------- |
|
||||||
|
| `volumeSpec` | Yes | Define the raw Volume spec here. |
|
||||||
|
|
||||||
|
## Minimal configuration
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
enabled: true
|
||||||
|
type: custom
|
||||||
|
volumeSpec:
|
||||||
|
downwardAPI:
|
||||||
|
items:
|
||||||
|
- path: "labels"
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.labels
|
||||||
|
- path: "annotations"
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.annotations
|
||||||
|
```
|
28
docs/common-library/storage/types/emptyDir.md
Normal file
28
docs/common-library/storage/types/emptyDir.md
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
---
|
||||||
|
hide:
|
||||||
|
- toc
|
||||||
|
---
|
||||||
|
|
||||||
|
# Empty Dir
|
||||||
|
|
||||||
|
Sometimes you need to share some data between containers, or need some
|
||||||
|
scratch space. That is where an emptyDir can come in.
|
||||||
|
|
||||||
|
See the [Kubernetes docs](https://kubernetes.io/docs/concepts/storage/volumes/#emptydir)
|
||||||
|
for more information.
|
||||||
|
|
||||||
|
| Field | Mandatory | Docs / Description |
|
||||||
|
| ----------- | --------- | ---------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| `medium` | No | Set this to `Memory` to mount a tmpfs (RAM-backed filesystem) instead of the storage medium that backs the node. |
|
||||||
|
| `sizeLimit` | No | If the `SizeMemoryBackedVolumes` feature gate is enabled, you can specify a size for memory backed volumes. |
|
||||||
|
|
||||||
|
## Minimal configuration
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
enabled: true
|
||||||
|
type: emptyDir
|
||||||
|
```
|
||||||
|
|
||||||
|
This will create an ephemeral emptyDir volume and mount it to `/config`.
|
32
docs/common-library/storage/types/hostPath.md
Normal file
32
docs/common-library/storage/types/hostPath.md
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
---
|
||||||
|
hide:
|
||||||
|
- toc
|
||||||
|
---
|
||||||
|
|
||||||
|
# Host path
|
||||||
|
|
||||||
|
In order to mount a path from the node where the Pod is running you can use a
|
||||||
|
`hostPath` type persistence item.
|
||||||
|
|
||||||
|
This can also be used to mount an attached USB device to a Pod. Note that
|
||||||
|
this will most likely also require setting an elevated `securityContext`.
|
||||||
|
|
||||||
|
See the [Kubernetes docs](https://kubernetes.io/docs/concepts/storage/volumes/#hostpath)
|
||||||
|
for more information.
|
||||||
|
|
||||||
|
| Field | Mandatory | Docs / Description |
|
||||||
|
| -------------- | --------- | ----------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| `hostPath` | Yes | Which path on the host should be mounted. |
|
||||||
|
| `hostPathType` | No | Specifying a hostPathType adds a check before trying to mount the path. See Kubernetes documentation for options. |
|
||||||
|
|
||||||
|
## Minimal configuration
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
enabled: true
|
||||||
|
type: hostPath
|
||||||
|
hostPath: /dev
|
||||||
|
```
|
||||||
|
|
||||||
|
This will mount the `/dev` folder from the underlying host to `/dev` in the container.
|
32
docs/common-library/storage/types/nfs-share.md
Normal file
32
docs/common-library/storage/types/nfs-share.md
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
---
|
||||||
|
hide:
|
||||||
|
- toc
|
||||||
|
---
|
||||||
|
|
||||||
|
# NFS Share
|
||||||
|
|
||||||
|
To mount an NFS share to your Pod you can either pre-create a persistentVolumeClaim
|
||||||
|
referring to it, or you can specify an inline NFS volume:
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
|
||||||
|
Mounting an NFS share this way does not allow for specifying mount options.
|
||||||
|
If you require these, you must create a PVC to mount the share.
|
||||||
|
|
||||||
|
| Field | Mandatory | Docs / Description |
|
||||||
|
| -------- | --------- | ------------------------------------------ |
|
||||||
|
| `server` | Yes | Host name or IP address of the NFS server. |
|
||||||
|
| `path` | Yes | The path on the server to mount. |
|
||||||
|
|
||||||
|
## Minimal configuration
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
enabled: true
|
||||||
|
type: nfs
|
||||||
|
server: 10.10.0.8
|
||||||
|
path: /tank/nas/library
|
||||||
|
```
|
||||||
|
|
||||||
|
This will mount the NFS share `/tank/nas/library` on server `10.10.0.8` to `/config`.
|
57
docs/common-library/storage/types/persistentVolumeClaim.md
Normal file
57
docs/common-library/storage/types/persistentVolumeClaim.md
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
# Persistent Volume Claim
|
||||||
|
|
||||||
|
This is probably the most common storage type, therefore it is also the
|
||||||
|
default when no `type` is specified.
|
||||||
|
|
||||||
|
It can be attached in two ways.
|
||||||
|
|
||||||
|
- [Dynamically provisioned](#dynamically-provisioned)
|
||||||
|
- [Existing claim](#existing-claim)
|
||||||
|
|
||||||
|
## Dynamically provisioned
|
||||||
|
|
||||||
|
Charts can be configured to create the required persistentVolumeClaim
|
||||||
|
manifests on the fly.
|
||||||
|
|
||||||
|
| Field | Mandatory | Docs / Description |
|
||||||
|
| -------------- | --------- | ------------------------------------------------------------------------------------ |
|
||||||
|
| `accessMode` | Yes | [link](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) |
|
||||||
|
| `size` | Yes | [link](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#resources) |
|
||||||
|
| `nameOverride` | No | Override the name suffix that is used for this volume. |
|
||||||
|
| `storageClass` | No | Storage class to use for this volume. |
|
||||||
|
| `retain` | No | Set to true to retain the PVC upon `helm uninstall`. |
|
||||||
|
|
||||||
|
### Minimal configuration
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
enabled: true
|
||||||
|
type: persistentVolumeClaim
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 1Gi
|
||||||
|
```
|
||||||
|
|
||||||
|
This will create a 1Gi RWO PVC named `RELEASE-NAME-config` with the default
|
||||||
|
storageClass, which will mount to `/config`.
|
||||||
|
|
||||||
|
## Existing claim
|
||||||
|
|
||||||
|
Charts can be configured to attach to a pre-existing persistentVolumeClaim.
|
||||||
|
|
||||||
|
| Field | Mandatory | Docs / Description |
|
||||||
|
| --------------- | --------- | ------------------------------------------------------ |
|
||||||
|
| `existingClaim` | Yes | Name of the existing PVC |
|
||||||
|
| `nameOverride` | No | Override the name suffix that is used for this volume. |
|
||||||
|
|
||||||
|
### Minimal configuration
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
enabled: true
|
||||||
|
type: persistentVolumeClaim
|
||||||
|
existingClaim: myAppData
|
||||||
|
```
|
||||||
|
|
||||||
|
This will mount an existing PVC named `myAppData` to `/config`.
|
31
docs/common-library/storage/types/secret.md
Normal file
31
docs/common-library/storage/types/secret.md
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
---
|
||||||
|
hide:
|
||||||
|
- toc
|
||||||
|
---
|
||||||
|
|
||||||
|
# Secret
|
||||||
|
|
||||||
|
In order to mount a Secret to a mount point within the Pod you can use the
|
||||||
|
`secret` type persistence item.
|
||||||
|
|
||||||
|
| Field | Mandatory | Docs / Description |
|
||||||
|
| ------------- | --------- | -------------------------------------------------------------------------- |
|
||||||
|
| `name` | Yes | Which Secret should be mounted. Supports Helm templating. |
|
||||||
|
| `defaultMode` | No | The default file access permission bit. |
|
||||||
|
| `items` | No | Specify item-specific configuration. Will be passed 1:1 to the volumeSpec. |
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
|
||||||
|
Even if not specified, the Secret will be read-only.
|
||||||
|
|
||||||
|
## Minimal configuration
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
enabled: true
|
||||||
|
type: secret
|
||||||
|
name: mySecret
|
||||||
|
```
|
||||||
|
|
||||||
|
This will mount the contents of the pre-existing `mySecret` Secret to `/config`.
|
9
docs/index.md
Normal file
9
docs/index.md
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
---
|
||||||
|
hide:
|
||||||
|
- navigation
|
||||||
|
- toc
|
||||||
|
---
|
||||||
|
|
||||||
|
--8<--
|
||||||
|
README.md
|
||||||
|
--8<--
|
4
docs/overrides/main.html
Normal file
4
docs/overrides/main.html
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{% extends "base.html" %} {% block announce %} ⚠️ Common Library and
|
||||||
|
app-template v2.0 have been released. Please raise any issues over at the
|
||||||
|
<a href="https://github.com/bjw-s/helm-charts/issues/new/choose">GitHub repo</a
|
||||||
|
>. {% endblock %}
|
|
@ -1,6 +0,0 @@
|
||||||
[
|
|
||||||
{
|
|
||||||
"pattern" : "\n### 📖 Docs[\\s\\S\n]*?---\n",
|
|
||||||
"template" : ""
|
|
||||||
}
|
|
||||||
]
|
|
5
docs/requirements.txt
Normal file
5
docs/requirements.txt
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
mkdocs~=1.5,>=1.5.3
|
||||||
|
mkdocs-material-extensions~=1.2
|
||||||
|
pygments~=2.16
|
||||||
|
pymdown-extensions~=10.2
|
||||||
|
mkdocs-minify-plugin
|
|
@ -1,29 +0,0 @@
|
||||||
# Summary
|
|
||||||
|
|
||||||
# Welcome
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
- [Introduction](introduction.md)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Helm Charts
|
|
||||||
|
|
||||||
- [Common Library](common-library/introduction.md)
|
|
||||||
|
|
||||||
- [Storage](common-library/storage/index.md)
|
|
||||||
- [Permissions](common-library/storage/permissions.md)
|
|
||||||
- [Storage types](common-library/storage/types.md)
|
|
||||||
- [PersistentVolumeClaim](common-library/storage/types/pvc.md)
|
|
||||||
- [EmptyDir](common-library/storage/types/emptydir.md)
|
|
||||||
- [HostPath](common-library/storage/types/hostpath.md)
|
|
||||||
- [ConfigMap](common-library/storage/types/configmap.md)
|
|
||||||
- [Secret](common-library/storage/types/secret.md)
|
|
||||||
- [NFS share](common-library/storage/types/nfs-share.md)
|
|
||||||
- [Custom](common-library/storage/types/custom.md)
|
|
||||||
- [How to...](common-library/howto/index.md)
|
|
||||||
- [Multiple subPaths for 1 volume](common-library/howto/multiple-subpath.md)
|
|
||||||
- [Helm templates](common-library/howto/helm-templates.md)
|
|
||||||
|
|
||||||
- [App Template](app-template/introduction.md)
|
|
|
@ -1,4 +0,0 @@
|
||||||
# Common library Storage
|
|
||||||
|
|
||||||
This page describes the different ways you can configure and attach storage to charts
|
|
||||||
using the common library.
|
|
|
@ -1,3 +0,0 @@
|
||||||
# Storage types
|
|
||||||
|
|
||||||
Here you can find information on the different types of storage available in the common library chart.
|
|
|
@ -1,25 +0,0 @@
|
||||||
# ConfigMap
|
|
||||||
|
|
||||||
In order to mount a configMap to a mount point within the Pod you can use the
|
|
||||||
`configMap` type persistence item.
|
|
||||||
|
|
||||||
| Field | Mandatory | Docs / Description |
|
|
||||||
| --------------- | --------- | --------------------------------------------------------------------------------------------------------------------- |
|
|
||||||
| `enabled` | Yes | |
|
|
||||||
| `type` | Yes | |
|
|
||||||
| `name` | Yes | Which configMap should be mounted. Supports Helm templating. |
|
|
||||||
| `defaultMode` | No | The default file access permission bit. |
|
|
||||||
| `items` | No | Specify item-specific configuration. Will be passed 1:1 to the volumeSpec. |
|
|
||||||
| `readOnly` | No | Explicitly specify if the volume should be mounted read-only. Even if not specified, the configMap will be read-only. |
|
|
||||||
|
|
||||||
## Minimal configuration:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
persistence:
|
|
||||||
config:
|
|
||||||
enabled: true
|
|
||||||
type: configMap
|
|
||||||
name: mySettings
|
|
||||||
```
|
|
||||||
|
|
||||||
This will mount the contents of the pre-existing `mySettings` configMap to `/config`.
|
|
|
@ -1,16 +0,0 @@
|
||||||
# Custom
|
|
||||||
|
|
||||||
When you wish to specify a custom volume, you can use the `custom` type.
|
|
||||||
This can be used for example to mount configMap or Secret objects.
|
|
||||||
|
|
||||||
See the [Kubernetes docs](https://kubernetes.io/docs/concepts/storage/volumes/)
|
|
||||||
for more information.
|
|
||||||
|
|
||||||
| Field | Mandatory | Docs / Description |
|
|
||||||
| --------------- | --------- | ------------------------------------------------------------------------------------- |
|
|
||||||
| `enabled` | Yes | |
|
|
||||||
| `type` | Yes | |
|
|
||||||
| `volumeSpec` | Yes | Define the raw Volume spec here. |
|
|
||||||
| `mountPath` | No | Where to mount the volume in the main container. Defaults to the value of `hostPath`. |
|
|
||||||
| `readOnly` | No | Specify if the volume should be mounted read-only. |
|
|
||||||
| `nameOverride` | No | Override the name suffix that is used for this volume. |
|
|
|
@ -1,27 +0,0 @@
|
||||||
# Empty Dir
|
|
||||||
|
|
||||||
Sometimes you need to share some data between containers, or need some
|
|
||||||
scratch space. That is where an emptyDir can come in.
|
|
||||||
|
|
||||||
See the [Kubernetes docs](https://kubernetes.io/docs/concepts/storage/volumes/#emptydir)
|
|
||||||
for more information.
|
|
||||||
|
|
||||||
| Field | Mandatory | Docs / Description |
|
|
||||||
| --------------- | --------- | ---------------------------------------------------------------------------------------------------------------- |
|
|
||||||
| `enabled` | Yes | |
|
|
||||||
| `type` | Yes | |
|
|
||||||
| `medium` | No | Set this to `Memory` to mount a tmpfs (RAM-backed filesystem) instead of the storage medium that backs the node. |
|
|
||||||
| `sizeLimit` | No | If the `SizeMemoryBackedVolumes` feature gate is enabled, you can specify a size for memory backed volumes. |
|
|
||||||
| `mountPath` | No | Where to mount the volume in the main container. Defaults to `/<name_of_the_volume>`. |
|
|
||||||
| `nameOverride` | No | Override the name suffix that is used for this volume. |
|
|
||||||
|
|
||||||
## Minimal configuration:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
persistence:
|
|
||||||
config:
|
|
||||||
enabled: true
|
|
||||||
type: emptyDir
|
|
||||||
```
|
|
||||||
|
|
||||||
This will create an ephemeral emptyDir volume and mount it to `/config`.
|
|
|
@ -1,32 +0,0 @@
|
||||||
# Host path
|
|
||||||
|
|
||||||
In order to mount a path from the node where the Pod is running you can use a
|
|
||||||
`hostPath` type persistence item.
|
|
||||||
|
|
||||||
This can also be used to mount an attached USB device to a Pod. Note that
|
|
||||||
this will most likely also require setting an elevated `securityContext`.
|
|
||||||
|
|
||||||
See the [Kubernetes docs](https://kubernetes.io/docs/concepts/storage/volumes/#hostpath)
|
|
||||||
for more information.
|
|
||||||
|
|
||||||
| Field | Mandatory | Docs / Description |
|
|
||||||
| --------------- | --------- | ----------------------------------------------------------------------------------------------------------------- |
|
|
||||||
| `enabled` | Yes | |
|
|
||||||
| `type` | Yes | |
|
|
||||||
| `hostPath` | Yes | Which path on the host should be mounted. |
|
|
||||||
| `hostPathType` | No | Specifying a hostPathType adds a check before trying to mount the path. See Kubernetes documentation for options. |
|
|
||||||
| `mountPath` | No | Where to mount the volume in the main container. Defaults to the value of `hostPath`. |
|
|
||||||
| `readOnly` | No | Specify if the volume should be mounted read-only. |
|
|
||||||
| `nameOverride` | No | Override the name suffix that is used for this volume. |
|
|
||||||
|
|
||||||
## Minimal configuration:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
persistence:
|
|
||||||
config:
|
|
||||||
enabled: true
|
|
||||||
type: hostPath
|
|
||||||
hostPath: /dev
|
|
||||||
```
|
|
||||||
|
|
||||||
This will mount the `/dev` folder from the underlying host to `/dev` in the container.
|
|
|
@ -1,31 +0,0 @@
|
||||||
# NFS Share
|
|
||||||
|
|
||||||
To mount an NFS share to your Pod you can either pre-create a persistentVolumeClaim
|
|
||||||
referring to it, or you can specify an inline NFS volume:
|
|
||||||
|
|
||||||
```admonish note
|
|
||||||
Mounting an NFS share this way does not allow for specifying mount options.
|
|
||||||
If you require these, you must create a PVC to mount the share.
|
|
||||||
```
|
|
||||||
|
|
||||||
| Field | Mandatory | Docs / Description |
|
|
||||||
| --------------- | --------- | ------------------------------------------------------------------------------------------------------------------ |
|
|
||||||
| `enabled` | Yes | |
|
|
||||||
| `type` | Yes | |
|
|
||||||
| `server` | Yes | Host name or IP address of the NFS server. |
|
|
||||||
| `path` | Yes | The path on the server to mount. |
|
|
||||||
| `mountPath` | No | The path on the pod to mount to. Defaults to `/<name-of-the-volume>` |
|
|
||||||
| `readOnly` | No | Explicitly specify if the volume should be mounted read-only. Even if not specified, the Secret will be read-only. |
|
|
||||||
|
|
||||||
## Minimal configuration:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
persistence:
|
|
||||||
config:
|
|
||||||
enabled: true
|
|
||||||
type: nfs
|
|
||||||
server: 10.10.0.8
|
|
||||||
path: /tank/nas/library
|
|
||||||
```
|
|
||||||
|
|
||||||
This will mount the NFS share `/tank/nas/library` on server `10.10.0.8` to `/config`.
|
|
|
@ -1,66 +0,0 @@
|
||||||
# Persistent Volume Claim
|
|
||||||
|
|
||||||
This is probably the most common storage type, therefore it is also the
|
|
||||||
default when no `type` is specified.
|
|
||||||
|
|
||||||
It can be attached in two ways.
|
|
||||||
|
|
||||||
- [Dynamically provisioned](#dynamically-provisioned)
|
|
||||||
- [Existing claim](#existing-claim)
|
|
||||||
|
|
||||||
## Dynamically provisioned
|
|
||||||
|
|
||||||
Charts can be configured to create the required persistentVolumeClaim
|
|
||||||
manifests on the fly.
|
|
||||||
|
|
||||||
| Field | Mandatory | Docs / Description |
|
|
||||||
| --------------- | --------- | ------------------------------------------------------------------------------------- |
|
|
||||||
| `enabled` | Yes | |
|
|
||||||
| `type` | Yes | |
|
|
||||||
| `accessMode` | Yes | [link](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) |
|
|
||||||
| `size` | Yes | [link](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#resources) |
|
|
||||||
| `mountPath` | No | Where to mount the volume in the main container. Defaults to `/<name_of_the_volume>`. |
|
|
||||||
| `readOnly` | No | Specify if the volume should be mounted read-only. |
|
|
||||||
| `nameOverride` | No | Override the name suffix that is used for this volume. |
|
|
||||||
| `storageClass` | No | Storage class to use for this volume. |
|
|
||||||
| `retain` | No | Set to true to retain the PVC upon `helm uninstall`. |
|
|
||||||
|
|
||||||
### Minimal configuration:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
persistence:
|
|
||||||
config:
|
|
||||||
enabled: true
|
|
||||||
type: pvc
|
|
||||||
accessMode: ReadWriteOnce
|
|
||||||
size: 1Gi
|
|
||||||
```
|
|
||||||
|
|
||||||
This will create a 1Gi RWO PVC named `RELEASE-NAME-config` with the default
|
|
||||||
storageClass, which will mount to `/config`.
|
|
||||||
|
|
||||||
## Existing claim
|
|
||||||
|
|
||||||
Charts can be configured to attach to a pre-existing persistentVolumeClaim.
|
|
||||||
|
|
||||||
| Field | Mandatory | Docs / Description |
|
|
||||||
| --------------- | --------- | ------------------------------------------------------------------------------------- |
|
|
||||||
| `enabled` | Yes | |
|
|
||||||
| `type` | Yes | |
|
|
||||||
| `existingClaim` | Yes | Name of the existing PVC |
|
|
||||||
| `mountPath` | No | Where to mount the volume in the main container. Defaults to `/<name_of_the_volume>`. |
|
|
||||||
| `subPath` | No | Specifies a sub-path inside the referenced volume instead of its root. |
|
|
||||||
| `readOnly` | No | Specify if the volume should be mounted read-only. |
|
|
||||||
| `nameOverride` | No | Override the name suffix that is used for this volume. |
|
|
||||||
|
|
||||||
### Minimal configuration:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
persistence:
|
|
||||||
config:
|
|
||||||
enabled: true
|
|
||||||
type: pvc
|
|
||||||
existingClaim: myAppData
|
|
||||||
```
|
|
||||||
|
|
||||||
This will mount an existing PVC named `myAppData` to `/config`.
|
|
|
@ -1,25 +0,0 @@
|
||||||
# Secret
|
|
||||||
|
|
||||||
In order to mount a Secret to a mount point within the Pod you can use the
|
|
||||||
`secret` type persistence item.
|
|
||||||
|
|
||||||
| Field | Mandatory | Docs / Description |
|
|
||||||
| --------------- | --------- | ------------------------------------------------------------------------------------------------------------------ |
|
|
||||||
| `enabled` | Yes | |
|
|
||||||
| `type` | Yes | |
|
|
||||||
| `name` | Yes | Which Secret should be mounted. Supports Helm templating. |
|
|
||||||
| `defaultMode` | No | The default file access permission bit. |
|
|
||||||
| `items` | No | Specify item-specific configuration. Will be passed 1:1 to the volumeSpec. |
|
|
||||||
| `readOnly` | No | Explicitly specify if the volume should be mounted read-only. Even if not specified, the Secret will be read-only. |
|
|
||||||
|
|
||||||
## Minimal configuration:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
persistence:
|
|
||||||
config:
|
|
||||||
enabled: true
|
|
||||||
type: secret
|
|
||||||
name: mySecret
|
|
||||||
```
|
|
||||||
|
|
||||||
This will mount the contents of the pre-existing `mySecret` Secret to `/config`.
|
|
|
@ -1 +0,0 @@
|
||||||
{{ #include ../../README.md }}
|
|
359
docs/theme/catppuccin-highlight.css
vendored
359
docs/theme/catppuccin-highlight.css
vendored
|
@ -1,359 +0,0 @@
|
||||||
.mocha code,
|
|
||||||
.mocha .hljs {
|
|
||||||
background: #181825;
|
|
||||||
}
|
|
||||||
.mocha code .hljs-attr,
|
|
||||||
.mocha code .hljs-string {
|
|
||||||
color: #a6e3a1;
|
|
||||||
}
|
|
||||||
.mocha code .hljs-tag {
|
|
||||||
color: #f38ba8;
|
|
||||||
}
|
|
||||||
.mocha code .hljs-name {
|
|
||||||
color: #f2cdcd;
|
|
||||||
}
|
|
||||||
.mocha pre .hljs {
|
|
||||||
background: #181825 !important;
|
|
||||||
}
|
|
||||||
.mocha pre .hljs-params {
|
|
||||||
color: #f38ba8 !important;
|
|
||||||
}
|
|
||||||
.mocha pre .hljs-built_in,
|
|
||||||
.mocha pre .hljs-selector-tag,
|
|
||||||
.mocha pre .hljs-section,
|
|
||||||
.mocha pre .hljs-link {
|
|
||||||
color: #74c7ec !important;
|
|
||||||
}
|
|
||||||
.mocha pre .hljs-keyword {
|
|
||||||
color: #cba6f7 !important;
|
|
||||||
}
|
|
||||||
.mocha pre .hljs,
|
|
||||||
.mocha pre .hljs-subst {
|
|
||||||
color: #a6adc8 !important;
|
|
||||||
}
|
|
||||||
.mocha pre .hljs-title {
|
|
||||||
color: #89b4fa !important;
|
|
||||||
}
|
|
||||||
.mocha pre .hljs-attr,
|
|
||||||
.mocha pre .hljs-meta-keyword {
|
|
||||||
color: #a6e3a1 !important;
|
|
||||||
}
|
|
||||||
.mocha pre .hljs-type {
|
|
||||||
color: #89b4fa !important;
|
|
||||||
}
|
|
||||||
.mocha pre .hljs-string {
|
|
||||||
color: #a6e3a1 !important;
|
|
||||||
}
|
|
||||||
.mocha pre .hljs-tag {
|
|
||||||
color: #f38ba8 !important;
|
|
||||||
}
|
|
||||||
.mocha pre .hljs-meta,
|
|
||||||
.mocha pre .hljs-name,
|
|
||||||
.mocha pre .hljs-symbol,
|
|
||||||
.mocha pre .hljs-bullet,
|
|
||||||
.mocha pre .hljs-addition,
|
|
||||||
.mocha pre .hljs-variable,
|
|
||||||
.mocha pre .hljs-template-tag,
|
|
||||||
.mocha pre .hljs-template-variable {
|
|
||||||
color: #f2cdcd !important;
|
|
||||||
}
|
|
||||||
.mocha pre .hljs-addition {
|
|
||||||
background-color: #181825 !important;
|
|
||||||
color: #a6e3a1 !important;
|
|
||||||
}
|
|
||||||
.mocha pre .hljs-deletion {
|
|
||||||
background-color: #181825 !important;
|
|
||||||
color: #f38ba8 !important;
|
|
||||||
}
|
|
||||||
.mocha pre .hljs-comment,
|
|
||||||
.mocha pre .hljs-quote {
|
|
||||||
color: #585b70 !important;
|
|
||||||
}
|
|
||||||
.mocha pre .hljs-keyword,
|
|
||||||
.mocha pre .hljs-selector-tag,
|
|
||||||
.mocha pre .hljs-literal,
|
|
||||||
.mocha pre .hljs-title,
|
|
||||||
.mocha pre .hljs-section,
|
|
||||||
.mocha pre .hljs-doctag,
|
|
||||||
.mocha pre .hljs-type,
|
|
||||||
.mocha pre .hljs-name,
|
|
||||||
.mocha pre .hljs-strong {
|
|
||||||
font-weight: bold !important;
|
|
||||||
}
|
|
||||||
.mocha pre .hljs-literal,
|
|
||||||
.mocha pre .hljs-number {
|
|
||||||
color: #fab387 !important;
|
|
||||||
}
|
|
||||||
.mocha pre .hljs-emphasis {
|
|
||||||
font-style: italic !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.macchiato code,
|
|
||||||
.macchiato .hljs {
|
|
||||||
background: #1e2030;
|
|
||||||
}
|
|
||||||
.macchiato code .hljs-attr,
|
|
||||||
.macchiato code .hljs-string {
|
|
||||||
color: #a6da95;
|
|
||||||
}
|
|
||||||
.macchiato code .hljs-tag {
|
|
||||||
color: #ed8796;
|
|
||||||
}
|
|
||||||
.macchiato code .hljs-name {
|
|
||||||
color: #f0c6c6;
|
|
||||||
}
|
|
||||||
.macchiato pre .hljs {
|
|
||||||
background: #1e2030 !important;
|
|
||||||
}
|
|
||||||
.macchiato pre .hljs-params {
|
|
||||||
color: #ed8796 !important;
|
|
||||||
}
|
|
||||||
.macchiato pre .hljs-built_in,
|
|
||||||
.macchiato pre .hljs-selector-tag,
|
|
||||||
.macchiato pre .hljs-section,
|
|
||||||
.macchiato pre .hljs-link {
|
|
||||||
color: #7dc4e4 !important;
|
|
||||||
}
|
|
||||||
.macchiato pre .hljs-keyword {
|
|
||||||
color: #c6a0f6 !important;
|
|
||||||
}
|
|
||||||
.macchiato pre .hljs,
|
|
||||||
.macchiato pre .hljs-subst {
|
|
||||||
color: #a5adcb !important;
|
|
||||||
}
|
|
||||||
.macchiato pre .hljs-title {
|
|
||||||
color: #8aadf4 !important;
|
|
||||||
}
|
|
||||||
.macchiato pre .hljs-attr,
|
|
||||||
.macchiato pre .hljs-meta-keyword {
|
|
||||||
color: #a6da95 !important;
|
|
||||||
}
|
|
||||||
.macchiato pre .hljs-type {
|
|
||||||
color: #8aadf4 !important;
|
|
||||||
}
|
|
||||||
.macchiato pre .hljs-string {
|
|
||||||
color: #a6da95 !important;
|
|
||||||
}
|
|
||||||
.macchiato pre .hljs-tag {
|
|
||||||
color: #ed8796 !important;
|
|
||||||
}
|
|
||||||
.macchiato pre .hljs-meta,
|
|
||||||
.macchiato pre .hljs-name,
|
|
||||||
.macchiato pre .hljs-symbol,
|
|
||||||
.macchiato pre .hljs-bullet,
|
|
||||||
.macchiato pre .hljs-addition,
|
|
||||||
.macchiato pre .hljs-variable,
|
|
||||||
.macchiato pre .hljs-template-tag,
|
|
||||||
.macchiato pre .hljs-template-variable {
|
|
||||||
color: #f0c6c6 !important;
|
|
||||||
}
|
|
||||||
.macchiato pre .hljs-addition {
|
|
||||||
background-color: #1e2030 !important;
|
|
||||||
color: #a6da95 !important;
|
|
||||||
}
|
|
||||||
.macchiato pre .hljs-deletion {
|
|
||||||
background-color: #1e2030 !important;
|
|
||||||
color: #ed8796 !important;
|
|
||||||
}
|
|
||||||
.macchiato pre .hljs-comment,
|
|
||||||
.macchiato pre .hljs-quote {
|
|
||||||
color: #5b6078 !important;
|
|
||||||
}
|
|
||||||
.macchiato pre .hljs-keyword,
|
|
||||||
.macchiato pre .hljs-selector-tag,
|
|
||||||
.macchiato pre .hljs-literal,
|
|
||||||
.macchiato pre .hljs-title,
|
|
||||||
.macchiato pre .hljs-section,
|
|
||||||
.macchiato pre .hljs-doctag,
|
|
||||||
.macchiato pre .hljs-type,
|
|
||||||
.macchiato pre .hljs-name,
|
|
||||||
.macchiato pre .hljs-strong {
|
|
||||||
font-weight: bold !important;
|
|
||||||
}
|
|
||||||
.macchiato pre .hljs-literal,
|
|
||||||
.macchiato pre .hljs-number {
|
|
||||||
color: #f5a97f !important;
|
|
||||||
}
|
|
||||||
.macchiato pre .hljs-emphasis {
|
|
||||||
font-style: italic !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.frappe code,
|
|
||||||
.frappe .hljs {
|
|
||||||
background: #292c3c;
|
|
||||||
}
|
|
||||||
.frappe code .hljs-attr,
|
|
||||||
.frappe code .hljs-string {
|
|
||||||
color: #a6d189;
|
|
||||||
}
|
|
||||||
.frappe code .hljs-tag {
|
|
||||||
color: #e78284;
|
|
||||||
}
|
|
||||||
.frappe code .hljs-name {
|
|
||||||
color: #eebebe;
|
|
||||||
}
|
|
||||||
.frappe pre .hljs {
|
|
||||||
background: #292c3c !important;
|
|
||||||
}
|
|
||||||
.frappe pre .hljs-params {
|
|
||||||
color: #e78284 !important;
|
|
||||||
}
|
|
||||||
.frappe pre .hljs-built_in,
|
|
||||||
.frappe pre .hljs-selector-tag,
|
|
||||||
.frappe pre .hljs-section,
|
|
||||||
.frappe pre .hljs-link {
|
|
||||||
color: #85c1dc !important;
|
|
||||||
}
|
|
||||||
.frappe pre .hljs-keyword {
|
|
||||||
color: #ca9ee6 !important;
|
|
||||||
}
|
|
||||||
.frappe pre .hljs,
|
|
||||||
.frappe pre .hljs-subst {
|
|
||||||
color: #a5adce !important;
|
|
||||||
}
|
|
||||||
.frappe pre .hljs-title {
|
|
||||||
color: #8caaee !important;
|
|
||||||
}
|
|
||||||
.frappe pre .hljs-attr,
|
|
||||||
.frappe pre .hljs-meta-keyword {
|
|
||||||
color: #a6d189 !important;
|
|
||||||
}
|
|
||||||
.frappe pre .hljs-type {
|
|
||||||
color: #8caaee !important;
|
|
||||||
}
|
|
||||||
.frappe pre .hljs-string {
|
|
||||||
color: #a6d189 !important;
|
|
||||||
}
|
|
||||||
.frappe pre .hljs-tag {
|
|
||||||
color: #e78284 !important;
|
|
||||||
}
|
|
||||||
.frappe pre .hljs-meta,
|
|
||||||
.frappe pre .hljs-name,
|
|
||||||
.frappe pre .hljs-symbol,
|
|
||||||
.frappe pre .hljs-bullet,
|
|
||||||
.frappe pre .hljs-addition,
|
|
||||||
.frappe pre .hljs-variable,
|
|
||||||
.frappe pre .hljs-template-tag,
|
|
||||||
.frappe pre .hljs-template-variable {
|
|
||||||
color: #eebebe !important;
|
|
||||||
}
|
|
||||||
.frappe pre .hljs-addition {
|
|
||||||
background-color: #292c3c !important;
|
|
||||||
color: #a6d189 !important;
|
|
||||||
}
|
|
||||||
.frappe pre .hljs-deletion {
|
|
||||||
background-color: #292c3c !important;
|
|
||||||
color: #e78284 !important;
|
|
||||||
}
|
|
||||||
.frappe pre .hljs-comment,
|
|
||||||
.frappe pre .hljs-quote {
|
|
||||||
color: #626880 !important;
|
|
||||||
}
|
|
||||||
.frappe pre .hljs-keyword,
|
|
||||||
.frappe pre .hljs-selector-tag,
|
|
||||||
.frappe pre .hljs-literal,
|
|
||||||
.frappe pre .hljs-title,
|
|
||||||
.frappe pre .hljs-section,
|
|
||||||
.frappe pre .hljs-doctag,
|
|
||||||
.frappe pre .hljs-type,
|
|
||||||
.frappe pre .hljs-name,
|
|
||||||
.frappe pre .hljs-strong {
|
|
||||||
font-weight: bold !important;
|
|
||||||
}
|
|
||||||
.frappe pre .hljs-literal,
|
|
||||||
.frappe pre .hljs-number {
|
|
||||||
color: #ef9f76 !important;
|
|
||||||
}
|
|
||||||
.frappe pre .hljs-emphasis {
|
|
||||||
font-style: italic !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.latte code,
|
|
||||||
.latte .hljs {
|
|
||||||
background: #e6e9ef;
|
|
||||||
}
|
|
||||||
.latte code .hljs-attr,
|
|
||||||
.latte code .hljs-string {
|
|
||||||
color: #40a02b;
|
|
||||||
}
|
|
||||||
.latte code .hljs-tag {
|
|
||||||
color: #d20f39;
|
|
||||||
}
|
|
||||||
.latte code .hljs-name {
|
|
||||||
color: #dd7878;
|
|
||||||
}
|
|
||||||
.latte pre .hljs {
|
|
||||||
background: #e6e9ef !important;
|
|
||||||
}
|
|
||||||
.latte pre .hljs-params {
|
|
||||||
color: #d20f39 !important;
|
|
||||||
}
|
|
||||||
.latte pre .hljs-built_in,
|
|
||||||
.latte pre .hljs-selector-tag,
|
|
||||||
.latte pre .hljs-section,
|
|
||||||
.latte pre .hljs-link {
|
|
||||||
color: #209fb5 !important;
|
|
||||||
}
|
|
||||||
.latte pre .hljs-keyword {
|
|
||||||
color: #8839ef !important;
|
|
||||||
}
|
|
||||||
.latte pre .hljs,
|
|
||||||
.latte pre .hljs-subst {
|
|
||||||
color: #6c6f85 !important;
|
|
||||||
}
|
|
||||||
.latte pre .hljs-title {
|
|
||||||
color: #1e66f5 !important;
|
|
||||||
}
|
|
||||||
.latte pre .hljs-attr,
|
|
||||||
.latte pre .hljs-meta-keyword {
|
|
||||||
color: #40a02b !important;
|
|
||||||
}
|
|
||||||
.latte pre .hljs-type {
|
|
||||||
color: #1e66f5 !important;
|
|
||||||
}
|
|
||||||
.latte pre .hljs-string {
|
|
||||||
color: #40a02b !important;
|
|
||||||
}
|
|
||||||
.latte pre .hljs-tag {
|
|
||||||
color: #d20f39 !important;
|
|
||||||
}
|
|
||||||
.latte pre .hljs-meta,
|
|
||||||
.latte pre .hljs-name,
|
|
||||||
.latte pre .hljs-symbol,
|
|
||||||
.latte pre .hljs-bullet,
|
|
||||||
.latte pre .hljs-addition,
|
|
||||||
.latte pre .hljs-variable,
|
|
||||||
.latte pre .hljs-template-tag,
|
|
||||||
.latte pre .hljs-template-variable {
|
|
||||||
color: #dd7878 !important;
|
|
||||||
}
|
|
||||||
.latte pre .hljs-addition {
|
|
||||||
background-color: #e6e9ef !important;
|
|
||||||
color: #40a02b !important;
|
|
||||||
}
|
|
||||||
.latte pre .hljs-deletion {
|
|
||||||
background-color: #e6e9ef !important;
|
|
||||||
color: #d20f39 !important;
|
|
||||||
}
|
|
||||||
.latte pre .hljs-comment,
|
|
||||||
.latte pre .hljs-quote {
|
|
||||||
color: #acb0be !important;
|
|
||||||
}
|
|
||||||
.latte pre .hljs-keyword,
|
|
||||||
.latte pre .hljs-selector-tag,
|
|
||||||
.latte pre .hljs-literal,
|
|
||||||
.latte pre .hljs-title,
|
|
||||||
.latte pre .hljs-section,
|
|
||||||
.latte pre .hljs-doctag,
|
|
||||||
.latte pre .hljs-type,
|
|
||||||
.latte pre .hljs-name,
|
|
||||||
.latte pre .hljs-strong {
|
|
||||||
font-weight: bold !important;
|
|
||||||
}
|
|
||||||
.latte pre .hljs-literal,
|
|
||||||
.latte pre .hljs-number {
|
|
||||||
color: #fe640b !important;
|
|
||||||
}
|
|
||||||
.latte pre .hljs-emphasis {
|
|
||||||
font-style: italic !important;
|
|
||||||
}
|
|
123
docs/theme/catppuccin.css
vendored
123
docs/theme/catppuccin.css
vendored
|
@ -1,123 +0,0 @@
|
||||||
.mocha {
|
|
||||||
--bg: #1e1e2e;
|
|
||||||
--fg: #cdd6f4;
|
|
||||||
--sidebar-bg: #181825;
|
|
||||||
--sidebar-fg: #cdd6f4;
|
|
||||||
--sidebar-non-existant: #6c7086;
|
|
||||||
--sidebar-active: #f5e0dc;
|
|
||||||
--sidebar-spacer: #6c7086;
|
|
||||||
--scrollbar: #6c7086;
|
|
||||||
--icons: #6c7086;
|
|
||||||
--icons-hover: #7f849c;
|
|
||||||
--links: #89b4fa;
|
|
||||||
--inline-code-color: #fab387;
|
|
||||||
--theme-popup-bg: #181825;
|
|
||||||
--theme-popup-border: #6c7086;
|
|
||||||
--theme-hover: #6c7086;
|
|
||||||
--quote-bg: #181825;
|
|
||||||
--quote-border: #11111b;
|
|
||||||
--table-border-color: #11111b;
|
|
||||||
--table-header-bg: #181825;
|
|
||||||
--table-alternate-bg: #11111b;
|
|
||||||
--searchbar-border-color: #11111b;
|
|
||||||
--searchbar-bg: #181825;
|
|
||||||
--searchbar-fg: #cdd6f4;
|
|
||||||
--searchbar-shadow-color: #11111b;
|
|
||||||
--searchresults-header-fg: #cdd6f4;
|
|
||||||
--searchresults-border-color: #11111b;
|
|
||||||
--searchresults-li-bg: #1e1e2e;
|
|
||||||
--search-mark-bg: #fab387;
|
|
||||||
}
|
|
||||||
|
|
||||||
.macchiato {
|
|
||||||
--bg: #24273a;
|
|
||||||
--fg: #cad3f5;
|
|
||||||
--sidebar-bg: #1e2030;
|
|
||||||
--sidebar-fg: #cad3f5;
|
|
||||||
--sidebar-non-existant: #6e738d;
|
|
||||||
--sidebar-active: #f4dbd6;
|
|
||||||
--sidebar-spacer: #6e738d;
|
|
||||||
--scrollbar: #6e738d;
|
|
||||||
--icons: #6e738d;
|
|
||||||
--icons-hover: #8087a2;
|
|
||||||
--links: #8aadf4;
|
|
||||||
--inline-code-color: #f5a97f;
|
|
||||||
--theme-popup-bg: #1e2030;
|
|
||||||
--theme-popup-border: #6e738d;
|
|
||||||
--theme-hover: #6e738d;
|
|
||||||
--quote-bg: #1e2030;
|
|
||||||
--quote-border: #181926;
|
|
||||||
--table-border-color: #181926;
|
|
||||||
--table-header-bg: #1e2030;
|
|
||||||
--table-alternate-bg: #181926;
|
|
||||||
--searchbar-border-color: #181926;
|
|
||||||
--searchbar-bg: #1e2030;
|
|
||||||
--searchbar-fg: #cad3f5;
|
|
||||||
--searchbar-shadow-color: #181926;
|
|
||||||
--searchresults-header-fg: #cad3f5;
|
|
||||||
--searchresults-border-color: #181926;
|
|
||||||
--searchresults-li-bg: #24273a;
|
|
||||||
--search-mark-bg: #f5a97f;
|
|
||||||
}
|
|
||||||
|
|
||||||
.frappe {
|
|
||||||
--bg: #303446;
|
|
||||||
--fg: #c6d0f5;
|
|
||||||
--sidebar-bg: #292c3c;
|
|
||||||
--sidebar-fg: #c6d0f5;
|
|
||||||
--sidebar-non-existant: #737994;
|
|
||||||
--sidebar-active: #f2d5cf;
|
|
||||||
--sidebar-spacer: #737994;
|
|
||||||
--scrollbar: #737994;
|
|
||||||
--icons: #737994;
|
|
||||||
--icons-hover: #838ba7;
|
|
||||||
--links: #8caaee;
|
|
||||||
--inline-code-color: #ef9f76;
|
|
||||||
--theme-popup-bg: #292c3c;
|
|
||||||
--theme-popup-border: #737994;
|
|
||||||
--theme-hover: #737994;
|
|
||||||
--quote-bg: #292c3c;
|
|
||||||
--quote-border: #232634;
|
|
||||||
--table-border-color: #232634;
|
|
||||||
--table-header-bg: #292c3c;
|
|
||||||
--table-alternate-bg: #232634;
|
|
||||||
--searchbar-border-color: #232634;
|
|
||||||
--searchbar-bg: #292c3c;
|
|
||||||
--searchbar-fg: #c6d0f5;
|
|
||||||
--searchbar-shadow-color: #232634;
|
|
||||||
--searchresults-header-fg: #c6d0f5;
|
|
||||||
--searchresults-border-color: #232634;
|
|
||||||
--searchresults-li-bg: #303446;
|
|
||||||
--search-mark-bg: #ef9f76;
|
|
||||||
}
|
|
||||||
|
|
||||||
.latte {
|
|
||||||
--bg: #eff1f5;
|
|
||||||
--fg: #4c4f69;
|
|
||||||
--sidebar-bg: #e6e9ef;
|
|
||||||
--sidebar-fg: #4c4f69;
|
|
||||||
--sidebar-non-existant: #9ca0b0;
|
|
||||||
--sidebar-active: #dc8a78;
|
|
||||||
--sidebar-spacer: #9ca0b0;
|
|
||||||
--scrollbar: #9ca0b0;
|
|
||||||
--icons: #9ca0b0;
|
|
||||||
--icons-hover: #8c8fa1;
|
|
||||||
--links: #1e66f5;
|
|
||||||
--inline-code-color: #fe640b;
|
|
||||||
--theme-popup-bg: #e6e9ef;
|
|
||||||
--theme-popup-border: #9ca0b0;
|
|
||||||
--theme-hover: #9ca0b0;
|
|
||||||
--quote-bg: #e6e9ef;
|
|
||||||
--quote-border: #dce0e8;
|
|
||||||
--table-border-color: #dce0e8;
|
|
||||||
--table-header-bg: #e6e9ef;
|
|
||||||
--table-alternate-bg: #dce0e8;
|
|
||||||
--searchbar-border-color: #dce0e8;
|
|
||||||
--searchbar-bg: #e6e9ef;
|
|
||||||
--searchbar-fg: #4c4f69;
|
|
||||||
--searchbar-shadow-color: #dce0e8;
|
|
||||||
--searchresults-header-fg: #4c4f69;
|
|
||||||
--searchresults-border-color: #dce0e8;
|
|
||||||
--searchresults-li-bg: #eff1f5;
|
|
||||||
--search-mark-bg: #fe640b;
|
|
||||||
}
|
|
313
docs/theme/index.hbs
vendored
313
docs/theme/index.hbs
vendored
|
@ -1,313 +0,0 @@
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html lang="{{ language }}" class="sidebar-visible no-js {{ default_theme }}">
|
|
||||||
<head>
|
|
||||||
<!-- Book generated using mdBook -->
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>{{ title }}</title>
|
|
||||||
{{#if is_print }}
|
|
||||||
<meta name="robots" content="noindex" />
|
|
||||||
{{/if}}
|
|
||||||
{{#if base_url}}
|
|
||||||
<base href="{{ base_url }}">
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Custom HTML head -->
|
|
||||||
{{> head}}
|
|
||||||
|
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
|
|
||||||
<meta name="description" content="{{ description }}">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<meta name="theme-color" content="#ffffff" />
|
|
||||||
|
|
||||||
{{#if favicon_svg}}
|
|
||||||
<link rel="icon" href="{{ path_to_root }}favicon.svg">
|
|
||||||
{{/if}}
|
|
||||||
{{#if favicon_png}}
|
|
||||||
<link rel="shortcut icon" href="{{ path_to_root }}favicon.png">
|
|
||||||
{{/if}}
|
|
||||||
<link rel="stylesheet" href="{{ path_to_root }}css/variables.css">
|
|
||||||
<link rel="stylesheet" href="{{ path_to_root }}css/general.css">
|
|
||||||
<link rel="stylesheet" href="{{ path_to_root }}css/chrome.css">
|
|
||||||
{{#if print_enable}}
|
|
||||||
<link rel="stylesheet" href="{{ path_to_root }}css/print.css" media="print">
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
<!-- Fonts -->
|
|
||||||
<link rel="stylesheet" href="{{ path_to_root }}FontAwesome/css/font-awesome.css">
|
|
||||||
{{#if copy_fonts}}
|
|
||||||
<link rel="stylesheet" href="{{ path_to_root }}fonts/fonts.css">
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
<!-- Highlight.js Stylesheets -->
|
|
||||||
<link rel="stylesheet" href="{{ path_to_root }}highlight.css">
|
|
||||||
<link rel="stylesheet" href="{{ path_to_root }}tomorrow-night.css">
|
|
||||||
<link rel="stylesheet" href="{{ path_to_root }}ayu-highlight.css">
|
|
||||||
|
|
||||||
<!-- Custom theme stylesheets -->
|
|
||||||
{{#each additional_css}}
|
|
||||||
<link rel="stylesheet" href="{{ ../path_to_root }}{{ this }}">
|
|
||||||
{{/each}}
|
|
||||||
|
|
||||||
{{#if mathjax_support}}
|
|
||||||
<!-- MathJax -->
|
|
||||||
<script async type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
|
||||||
{{/if}}
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<!-- Provide site root to javascript -->
|
|
||||||
<script type="text/javascript">
|
|
||||||
var path_to_root = "{{ path_to_root }}";
|
|
||||||
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "{{ preferred_dark_theme }}" : "{{ default_theme }}";
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Work around some values being stored in localStorage wrapped in quotes -->
|
|
||||||
<script type="text/javascript">
|
|
||||||
try {
|
|
||||||
var theme = localStorage.getItem('mdbook-theme');
|
|
||||||
var sidebar = localStorage.getItem('mdbook-sidebar');
|
|
||||||
|
|
||||||
if (theme.startsWith('"') && theme.endsWith('"')) {
|
|
||||||
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
|
|
||||||
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
|
|
||||||
}
|
|
||||||
} catch (e) { }
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Set the theme before any content is loaded, prevents flash -->
|
|
||||||
<script type="text/javascript">
|
|
||||||
var theme;
|
|
||||||
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
|
|
||||||
if (theme === null || theme === undefined) { theme = default_theme; }
|
|
||||||
var html = document.querySelector('html');
|
|
||||||
html.classList.remove('no-js')
|
|
||||||
html.classList.remove('{{ default_theme }}')
|
|
||||||
html.classList.add(theme);
|
|
||||||
html.classList.add('js');
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Hide / unhide sidebar before it is displayed -->
|
|
||||||
<script type="text/javascript">
|
|
||||||
var html = document.querySelector('html');
|
|
||||||
var sidebar = 'hidden';
|
|
||||||
if (document.body.clientWidth >= 1080) {
|
|
||||||
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
|
|
||||||
sidebar = sidebar || 'visible';
|
|
||||||
}
|
|
||||||
html.classList.remove('sidebar-visible');
|
|
||||||
html.classList.add("sidebar-" + sidebar);
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
|
|
||||||
<div class="sidebar-scrollbox">
|
|
||||||
{{#toc}}{{/toc}}
|
|
||||||
</div>
|
|
||||||
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<div id="page-wrapper" class="page-wrapper">
|
|
||||||
|
|
||||||
<div class="page">
|
|
||||||
{{> header}}
|
|
||||||
<div id="menu-bar-hover-placeholder"></div>
|
|
||||||
<div id="menu-bar" class="menu-bar sticky bordered">
|
|
||||||
<div class="left-buttons">
|
|
||||||
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
|
|
||||||
<i class="fa fa-bars"></i>
|
|
||||||
</button>
|
|
||||||
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
|
|
||||||
<i class="fa fa-paint-brush"></i>
|
|
||||||
</button>
|
|
||||||
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
|
|
||||||
<li role="none"><button role="menuitem" class="theme" id="latte">{{ theme_option "Latte" }}</button></li>
|
|
||||||
<li role="none"><button role="menuitem" class="theme" id="frappe">{{ theme_option "Frappé" }}</button></li>
|
|
||||||
<li role="none"><button role="menuitem" class="theme" id="macchiato">{{ theme_option "Macchiato" }}</button></li>
|
|
||||||
<li role="none"><button role="menuitem" class="theme" id="mocha">{{ theme_option "Mocha" }}</button></li>
|
|
||||||
</ul>
|
|
||||||
{{#if search_enabled}}
|
|
||||||
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
|
|
||||||
<i class="fa fa-search"></i>
|
|
||||||
</button>
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h1 class="menu-title">{{ book_title }}</h1>
|
|
||||||
|
|
||||||
<div class="right-buttons">
|
|
||||||
{{#if print_enable}}
|
|
||||||
<a href="{{ path_to_root }}print.html" title="Print this book" aria-label="Print this book">
|
|
||||||
<i id="print-button" class="fa fa-print"></i>
|
|
||||||
</a>
|
|
||||||
{{/if}}
|
|
||||||
{{#if git_repository_url}}
|
|
||||||
<a href="{{git_repository_url}}" title="Git repository" aria-label="Git repository">
|
|
||||||
<i id="git-repository-button" class="fa {{git_repository_icon}}"></i>
|
|
||||||
</a>
|
|
||||||
{{/if}}
|
|
||||||
{{#if git_repository_edit_url}}
|
|
||||||
<a href="{{git_repository_edit_url}}" title="Suggest an edit" aria-label="Suggest an edit">
|
|
||||||
<i id="git-edit-button" class="fa fa-edit"></i>
|
|
||||||
</a>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{#if search_enabled}}
|
|
||||||
<div id="search-wrapper" class="hidden">
|
|
||||||
<form id="searchbar-outer" class="searchbar-outer">
|
|
||||||
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
|
|
||||||
</form>
|
|
||||||
<div id="searchresults-outer" class="searchresults-outer hidden">
|
|
||||||
<div id="searchresults-header" class="searchresults-header"></div>
|
|
||||||
<ul id="searchresults">
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
|
|
||||||
<script type="text/javascript">
|
|
||||||
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
|
|
||||||
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
|
|
||||||
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
|
|
||||||
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div id="content" class="content">
|
|
||||||
<main>
|
|
||||||
{{{ content }}}
|
|
||||||
</main>
|
|
||||||
|
|
||||||
<nav class="nav-wrapper" aria-label="Page navigation">
|
|
||||||
<!-- Mobile navigation buttons -->
|
|
||||||
{{#previous}}
|
|
||||||
<a rel="prev" href="{{ path_to_root }}{{link}}" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
|
|
||||||
<i class="fa fa-angle-left"></i>
|
|
||||||
</a>
|
|
||||||
{{/previous}}
|
|
||||||
|
|
||||||
{{#next}}
|
|
||||||
<a rel="next" href="{{ path_to_root }}{{link}}" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
|
|
||||||
<i class="fa fa-angle-right"></i>
|
|
||||||
</a>
|
|
||||||
{{/next}}
|
|
||||||
|
|
||||||
<div style="clear: both"></div>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<nav class="nav-wide-wrapper" aria-label="Page navigation">
|
|
||||||
{{#previous}}
|
|
||||||
<a rel="prev" href="{{ path_to_root }}{{link}}" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
|
|
||||||
<i class="fa fa-angle-left"></i>
|
|
||||||
</a>
|
|
||||||
{{/previous}}
|
|
||||||
|
|
||||||
{{#next}}
|
|
||||||
<a rel="next" href="{{ path_to_root }}{{link}}" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
|
|
||||||
<i class="fa fa-angle-right"></i>
|
|
||||||
</a>
|
|
||||||
{{/next}}
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{#if live_reload_endpoint}}
|
|
||||||
<!-- Livereload script (if served using the cli tool) -->
|
|
||||||
<script type="text/javascript">
|
|
||||||
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
|
|
||||||
const wsAddress = wsProtocol + "//" + location.host + "/" + "{{{live_reload_endpoint}}}";
|
|
||||||
const socket = new WebSocket(wsAddress);
|
|
||||||
socket.onmessage = function (event) {
|
|
||||||
if (event.data === "reload") {
|
|
||||||
socket.close();
|
|
||||||
location.reload();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
window.onbeforeunload = function() {
|
|
||||||
socket.close();
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{#if google_analytics}}
|
|
||||||
<!-- Google Analytics Tag -->
|
|
||||||
<script type="text/javascript">
|
|
||||||
var localAddrs = ["localhost", "127.0.0.1", ""];
|
|
||||||
|
|
||||||
// make sure we don't activate google analytics if the developer is
|
|
||||||
// inspecting the book locally...
|
|
||||||
if (localAddrs.indexOf(document.location.hostname) === -1) {
|
|
||||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
|
||||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
|
||||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
|
||||||
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
|
||||||
|
|
||||||
ga('create', '{{google_analytics}}', 'auto');
|
|
||||||
ga('send', 'pageview');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{#if playground_line_numbers}}
|
|
||||||
<script type="text/javascript">
|
|
||||||
window.playground_line_numbers = true;
|
|
||||||
</script>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{#if playground_copyable}}
|
|
||||||
<script type="text/javascript">
|
|
||||||
window.playground_copyable = true;
|
|
||||||
</script>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{#if playground_js}}
|
|
||||||
<script src="{{ path_to_root }}ace.js" type="text/javascript" charset="utf-8"></script>
|
|
||||||
<script src="{{ path_to_root }}editor.js" type="text/javascript" charset="utf-8"></script>
|
|
||||||
<script src="{{ path_to_root }}mode-rust.js" type="text/javascript" charset="utf-8"></script>
|
|
||||||
<script src="{{ path_to_root }}theme-dawn.js" type="text/javascript" charset="utf-8"></script>
|
|
||||||
<script src="{{ path_to_root }}theme-tomorrow_night.js" type="text/javascript" charset="utf-8"></script>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{#if search_js}}
|
|
||||||
<script src="{{ path_to_root }}elasticlunr.min.js" type="text/javascript" charset="utf-8"></script>
|
|
||||||
<script src="{{ path_to_root }}mark.min.js" type="text/javascript" charset="utf-8"></script>
|
|
||||||
<script src="{{ path_to_root }}searcher.js" type="text/javascript" charset="utf-8"></script>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
<script src="{{ path_to_root }}clipboard.min.js" type="text/javascript" charset="utf-8"></script>
|
|
||||||
<script src="{{ path_to_root }}highlight.js" type="text/javascript" charset="utf-8"></script>
|
|
||||||
<script src="{{ path_to_root }}book.js" type="text/javascript" charset="utf-8"></script>
|
|
||||||
|
|
||||||
<!-- Custom JS scripts -->
|
|
||||||
{{#each additional_js}}
|
|
||||||
<script type="text/javascript" src="{{ ../path_to_root }}{{this}}"></script>
|
|
||||||
{{/each}}
|
|
||||||
|
|
||||||
{{#if is_print}}
|
|
||||||
{{#if mathjax_support}}
|
|
||||||
<script type="text/javascript">
|
|
||||||
window.addEventListener('load', function() {
|
|
||||||
MathJax.Hub.Register.StartupHook('End', function() {
|
|
||||||
window.setTimeout(window.print, 100);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{{else}}
|
|
||||||
<script type="text/javascript">
|
|
||||||
window.addEventListener('load', function() {
|
|
||||||
window.setTimeout(window.print, 100);
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{{/if}}
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Loading…
Add table
Add a link
Reference in a new issue