diff --git a/charts/incubator/snapcast/.helmignore b/charts/incubator/snapcast/.helmignore new file mode 100644 index 00000000..4379e2b3 --- /dev/null +++ b/charts/incubator/snapcast/.helmignore @@ -0,0 +1,26 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl diff --git a/charts/incubator/snapcast/Chart.yaml b/charts/incubator/snapcast/Chart.yaml new file mode 100644 index 00000000..973947a0 --- /dev/null +++ b/charts/incubator/snapcast/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +appVersion: latest +description: snapcast helm package +name: snapcast +version: 0.0.1 +kubeVersion: ">=1.16.0-0" +keywords: + - snapcast + - snapserver +home: https://github.com/k8s-at-home/charts/tree/master/charts/incubator/snapcast +icon: https://github.com/badaix/snapcast/blob/master/doc/web_hi_res_512.png +sources: + - https://github.com/badaix/snapcast +maintainers: + - name: lanquarden + email: lanquarden@gmail.com +dependencies: + - name: common + repository: https://library-charts.k8s-at-home.com + version: 4.4.2 +annotations: + artifacthub.io/changes: | + - kind: added + description: Initial version diff --git a/charts/incubator/snapcast/README.md b/charts/incubator/snapcast/README.md new file mode 100644 index 00000000..1515164d --- /dev/null +++ b/charts/incubator/snapcast/README.md @@ -0,0 +1,111 @@ +# snapcast + +![Version: 0.0.1](https://img.shields.io/badge/Version-0.0.1-informational?style=flat-square) ![AppVersion: v0.26.0](https://img.shields.io/badge/AppVersion-1.0.0-informational?style=flat-square) + +snapcast helm package + +**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/k8s-at-home/charts/issues/new/choose)** + +## Source Code + +* + +## Requirements + +Kubernetes: `>=1.16.0-0` + +## Dependencies + +| Repository | Name | Version | +|------------|------|---------| +| https://library-charts.k8s-at-home.com | common | 4.4.2 | + +## TL;DR + +```console +helm repo add k8s-at-home https://k8s-at-home.com/charts/ +helm repo update +helm install snapcast k8s-at-home/snapcast +``` + +## Installing the Chart + +To install the chart with the release name `snapcast` + +```console +helm install snapcast k8s-at-home/snapcast +``` + +## Uninstalling the Chart + +To uninstall the `snapcast` deployment + +```console +helm uninstall snapcast +``` + +The command removes all the Kubernetes components associated with the chart **including persistent volumes** and deletes the release. + +## Configuration + +Read through the [values.yaml](./values.yaml) file. It has several commented out suggested values. +Other values may be used from the [values.yaml](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common/values.yaml) from the [common library](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common). + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +```console +helm install snapcast \ + --set env.TZ="America/New York" \ + k8s-at-home/snapcast +``` + +Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. + +```console +helm install snapcast k8s-at-home/snapcast -f values.yaml +``` + +## Custom configuration + +N/A + +## Values + +**Important**: When deploying an application Helm chart you can add more values from our common library chart [here](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common) + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| env | object | See below | environment variables. | +| env.TZ | string | `"UTC"` | Set the container timezone | +| image.pullPolicy | string | `"IfNotPresent"` | image pull policy | +| image.repository | string | `"saiyato/snapserver"` | image repository | +| image.tag | string | chart.appVersion | image tag | +| ingress.main | object | See values.yaml | Enable and configure ingress settings for the chart under this key. | +| persistence | object | See values.yaml | Configure persistence settings for the chart under this key. | +| service | object | See values.yaml | Configures service settings for the chart. | + +## Changelog + +### Version 0.0.1 + +#### Added + +- Initial version + +#### Changed + +N/A + +#### Fixed + +N/A + +## Support + +- See the [Docs](https://docs.k8s-at-home.com/our-helm-charts/getting-started/) +- Open an [issue](https://github.com/k8s-at-home/charts/issues/new/choose) +- Ask a [question](https://github.com/k8s-at-home/organization/discussions) +- Join our [Discord](https://discord.gg/sTMX7Vh) community + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.5.0](https://github.com/norwoodj/helm-docs/releases/v1.5.0) diff --git a/charts/incubator/snapcast/README_CONFIG.md.gotmpl b/charts/incubator/snapcast/README_CONFIG.md.gotmpl new file mode 100644 index 00000000..e93d80bf --- /dev/null +++ b/charts/incubator/snapcast/README_CONFIG.md.gotmpl @@ -0,0 +1,9 @@ +{{- define "custom.custom.configuration.header" -}} +## Custom configuration +{{- end -}} + +{{- define "custom.custom.configuration" -}} +{{ template "custom.custom.configuration.header" . }} + +N/A +{{- end -}} diff --git a/charts/incubator/snapcast/templates/NOTES.txt b/charts/incubator/snapcast/templates/NOTES.txt new file mode 100644 index 00000000..90f7b653 --- /dev/null +++ b/charts/incubator/snapcast/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "common.notes.defaultNotes" . -}} diff --git a/charts/incubator/snapcast/templates/common.yaml b/charts/incubator/snapcast/templates/common.yaml new file mode 100644 index 00000000..6768db69 --- /dev/null +++ b/charts/incubator/snapcast/templates/common.yaml @@ -0,0 +1,19 @@ +{{/* Make sure all variables are set properly */}} +{{- include "common.values.setup" . }} + +{{/* Append the hardcoded settings */}} +{{- define "snapcast.hardcodedValues" -}} +persistence: + snapcast-config: + enabled: "true" + mountPath: "/etc/snapserver.conf" + subPath: "snapserver.conf" + type: "custom" + volumeSpec: + configMap: + name: {{ printf "%v-config" (include "common.names.fullname" .) }} +{{- end -}} +{{- $_ := mergeOverwrite .Values (include "snapcast.hardcodedValues" . | fromYaml) -}} + +{{/* Render the templates */}} +{{ include "common.all" . }} diff --git a/charts/incubator/snapcast/templates/configmap.yaml b/charts/incubator/snapcast/templates/configmap.yaml new file mode 100644 index 00000000..18df25e2 --- /dev/null +++ b/charts/incubator/snapcast/templates/configmap.yaml @@ -0,0 +1,11 @@ +{{- include "common.values.setup" . -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "common.names.fullname" . }}-config + labels: + {{- include "common.labels" . | nindent 4 }} +data: + snapserver.conf: | + {{- .Values.config | nindent 4 }} diff --git a/charts/incubator/snapcast/values.yaml b/charts/incubator/snapcast/values.yaml new file mode 100644 index 00000000..c969df0b --- /dev/null +++ b/charts/incubator/snapcast/values.yaml @@ -0,0 +1,241 @@ +# +# IMPORTANT NOTE +# +# This chart inherits from our common library chart. You can check the default values/options here: +# https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common/values.yaml +# + +image: + # -- image repository + repository: saiyato/snapserver + # -- image tag + # @default -- chart.appVersion + tag: + # -- image pull policy + pullPolicy: IfNotPresent + +# -- environment variables. +# @default -- See below +env: + # -- Set the container timezone + TZ: UTC + +# -- Configures service settings for the chart. +# @default -- See values.yaml +service: + main: + ports: + http: + port: 1780 + # -- Snapcast clients connect on port 1704 (default) + clients: + enabled: true + port: 1704 + # -- Snapcast control on port 1705 (default) + control: + enabled: true + port: 1705 + # -- Configure stream ports when using TCP server sockets as snapserver input streams + streams: + enabled: true + ports: + stream1: + enabled: true + port: 4953 + stream2: + enabled: true + port: 4954 + +ingress: + # -- Enable and configure ingress settings for the chart under this key. + # @default -- See values.yaml + main: + enabled: false + +# -- Configure persistence settings for the chart under this key. +# @default -- See values.yaml +persistence: {} + # data: + # enabled: false + # mountPath: /data + +# -- Snapserver configuration, see https://github.com/badaix/snapcast/blob/master/doc/configuration.md +# @default -- See values.yaml +config: | + ############################################################################### + # ______ # + # / _____) # + # ( (____ ____ _____ ____ ___ _____ ____ _ _ _____ ____ # + # \____ \ | _ \ (____ || _ \ /___)| ___ | / ___)| | | || ___ | / ___) # + # _____) )| | | |/ ___ || |_| ||___ || ____|| | \ V / | ____|| | # + # (______/ |_| |_|\_____|| __/ (___/ |_____)|_| \_/ |_____)|_| # + # |_| # + # # + # Snapserver config file # + # # + ############################################################################### + + # default values are commented + # uncomment and edit to change them + + # Settings can be overwritten on command line with: + # "--
.=", e.g. --server.threads=4 + + + # General server settings ##################################################### + # + [server] + # Number of additional worker threads to use + # - For values < 0 the number of threads will be 2 (on single and dual cores) + # or 4 (for quad and more cores) + # - 0 will utilize just the processes main thread and might cause audio drops + # in case there are a couple of longer running tasks, such as encoding + # multiple audio streams + #threads = -1 + + # the pid file when running as daemon + #pidfile = /var/run/snapserver/pid + + # the user to run as when daemonized + #user = snapserver + # the group to run as when daemonized + #group = snapserver + + # directory where persistent data is stored (server.json) + # if empty, data dir will be + # - "/var/lib/snapserver/" when running as daemon + # - "$HOME/.config/snapserver/" when not running as daemon + #datadir = + + # + ############################################################################### + + + # HTTP RPC #################################################################### + # + [http] + # enable HTTP Json RPC (HTTP POST and websockets) + #enabled = true + + # address to listen on, can be specified multiple times + # use "0.0.0.0" to bind to any IPv4 address or :: to bind to any IPv6 address + # or "127.0.0.1" or "::1" to bind to localhost IPv4 or IPv6, respectively + # use the address of a specific network interface to just listen to and accept + # connections from that interface + #bind_to_address = 0.0.0.0 + + # which port the server should listen to + #port = 1780 + + # serve a website from the doc_root location + # disabled if commented or empty + doc_root = /usr/share/snapserver/snapweb + + # Hostname or IP under which clients can reach this host + # used to serve cached cover art + # use as placeholder for your actual host name + #host = + + # + ############################################################################### + + + # TCP RPC ##################################################################### + # + [tcp] + # enable TCP Json RPC + #enabled = true + + # address to listen on, can be specified multiple times + # use "0.0.0.0" to bind to any IPv4 address or :: to bind to any IPv6 address + # or "127.0.0.1" or "::1" to bind to localhost IPv4 or IPv6, respectively + # use the address of a specific network interface to just listen to and accept + # connections from that interface + #bind_to_address = 0.0.0.0 + + # which port the server should listen to + #port = 1705 + # + ############################################################################### + + + # Stream settings ############################################################# + # + [stream] + # address to listen on, can be specified multiple times + # use "0.0.0.0" to bind to any IPv4 address or :: to bind to any IPv6 address + # or "127.0.0.1" or "::1" to bind to localhost IPv4 or IPv6, respectively + # use the address of a specific network interface to just listen to and accept + # connections from that interface + #bind_to_address = 0.0.0.0 + + # which port the server should listen to + #port = 1704 + + # source URI of the PCM input stream, can be configured multiple times + # The following notation is used in this paragraph: + # : the whole expression must be replaced with your specific setting + # [square brackets]: the whole expression is optional and can be left out + # [key=value]: if you leave this option out, "value" will be the default for "key" + # + # Format: TYPE://host/path?name=[&codec=][&sampleformat=][&chunk_ms=][&controlscript=] + # parameters have the form "key=value", they are concatenated with an "&" character + # parameter "name" is mandatory for all sources, while codec, sampleformat and chunk_ms are optional + # and will override the default codec, sampleformat or chunk_ms settings + # Non blocking sources support the dryout_ms parameter: when no new data is read from the source, send silence to the clients + # Available types are: + # pipe: pipe:///?name=[&mode=create][&dryout_ms=2000], mode can be "create" or "read" + # librespot: librespot:///?name=[&dryout_ms=2000][&username=&password=][&devicename=Snapcast][&bitrate=320][&wd_timeout=7800][&volume=100][&onevent=""][&nomalize=false][&autoplay=false][¶ms=] + # note that you need to have the librespot binary on your machine + # sampleformat will be set to "44100:16:2" + # file: file:///?name= + # process: process:///?name=[&dryout_ms=2000][&wd_timeout=0][&log_stderr=false][¶ms=] + # airplay: airplay:///?name=[&dryout_ms=2000][&port=5000] + # note that you need to have the airplay binary on your machine + # sampleformat will be set to "44100:16:2" + # tcp server: tcp://:?name=[&mode=server] + # tcp client: tcp://:?name=&mode=client + # alsa: alsa://?name=&device=[&send_silence=false][&idle_threshold=100][&silence_threshold_percent=0.0] + # meta: meta://///.../?name= + #source = pipe:///tmp/snapfifo?name=default + #source = tcp://127.0.0.1?name=mopidy_tcp + + source = tcp://0.0.0.0:4953?name=stream1&mode=server + source = tcp://0.0.0.0:4954?name=stream2&mode=server + + # Default sample format: :: + #sampleformat = 48000:16:2 + + # Default transport codec + # (flac|ogg|opus|pcm)[:options] + # Start Snapserver with "--stream:codec=:?" to get codec specific options + #codec = flac + + # Default source stream read chunk size [ms]. + # The server will continously read this number of milliseconds from the source into buffer and pass this buffer to the encoder. + # The encoded buffer is sent to the clients. Some codecs have a higher latency and will need more data, e.g. Flac will need ~26ms chunks + #chunk_ms = 20 + + # Buffer [ms] + # The end-to-end latency, from capturing a sample on the server until the sample is played-out on the client + #buffer = 1000 + + # Send audio to muted clients + #send_to_muted = false + # + ############################################################################### + + + # Logging options ############################################################# + # + [logging] + + # log sink [null,system,stdout,stderr,file:] + # when left empty: if running as daemon "system" else "stdout" + #sink = + + # log filter :[,:]* + # with tag = * or and level = [trace,debug,info,notice,warning,error,fatal] + #filter = *:info + # + ###############################################################################