Compare commits
5 Commits
zigbee2mqt
...
common-2.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
52561bd15d | ||
|
|
311c9c35bb | ||
|
|
d3679c6d39 | ||
|
|
77ea057807 | ||
|
|
5e9124b1db |
63
.github/workflows/lint-test.yaml
vendored
63
.github/workflows/lint-test.yaml
vendored
@@ -3,8 +3,11 @@ name: Lint and Test Charts
|
||||
on: pull_request
|
||||
|
||||
jobs:
|
||||
lint-test:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
changed: ${{ steps.list-changed.outputs.changed }}
|
||||
common: ${{ steps.list-changed.outputs.common }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
@@ -41,15 +44,67 @@ jobs:
|
||||
run: ct lint --config .github/ct.yaml --excluded-charts ""
|
||||
if: steps.list-changed.outputs.changed == 'true' || steps.list-changed.outputs.common == 'true'
|
||||
|
||||
unittest:
|
||||
runs-on: ubuntu-latest
|
||||
needs: lint
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Install Dev tools
|
||||
run: sudo apt-get update && sudo apt-get install -y jq libjq-dev
|
||||
|
||||
- name: Install Helm
|
||||
uses: azure/setup-helm@v1
|
||||
with:
|
||||
version: v3.4.0
|
||||
|
||||
- name: Install Ruby
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: 2.7
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
export RUBYJQ_USE_SYSTEM_LIBRARIES=1
|
||||
bundle install
|
||||
|
||||
- name: Run tests
|
||||
run: |
|
||||
bundle exec m -r test/charts
|
||||
|
||||
install:
|
||||
runs-on: ubuntu-latest
|
||||
needs: lint
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Install Helm
|
||||
uses: azure/setup-helm@v1
|
||||
with:
|
||||
version: v3.4.0
|
||||
|
||||
- uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: 3.7
|
||||
|
||||
- name: Set up chart-testing
|
||||
uses: helm/chart-testing-action@v2.0.1
|
||||
|
||||
- name: Create kind cluster
|
||||
uses: helm/kind-action@v1.1.0
|
||||
if: steps.list-changed.outputs.changed == 'true' || steps.list-changed.outputs.common == 'true'
|
||||
if: needs.lint.outputs.changed == 'true' || needs.lint.outputs.common == 'true'
|
||||
|
||||
- name: Run chart-testing (install)
|
||||
run: ct install --config .github/ct.yaml
|
||||
if: steps.list-changed.outputs.changed == 'true'
|
||||
if: needs.lint.outputs.changed == 'true'
|
||||
|
||||
- name: Run chart-testing (common-test)
|
||||
run: |
|
||||
ct install --config .github/ct.yaml --charts 'charts/common-test'
|
||||
if: steps.list-changed.outputs.common == 'true'
|
||||
if: needs.lint.outputs.common == 'true'
|
||||
|
||||
10
.gitignore
vendored
10
.gitignore
vendored
@@ -1,4 +1,12 @@
|
||||
.env
|
||||
# IDE resources
|
||||
.vscode
|
||||
.idea
|
||||
.devcontainer/
|
||||
|
||||
# Helm resources
|
||||
charts/*/Chart.lock
|
||||
charts/*/charts
|
||||
|
||||
# Other rsources
|
||||
.env
|
||||
Gemfile.lock
|
||||
|
||||
12
Gemfile
Normal file
12
Gemfile
Normal file
@@ -0,0 +1,12 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
source 'https://rubygems.org'
|
||||
|
||||
group :test do
|
||||
gem 'm'
|
||||
gem 'minitest'
|
||||
gem 'minitest-implicit-subject'
|
||||
gem 'minitest-reporters'
|
||||
gem 'pry'
|
||||
gem 'ruby-jq'
|
||||
end
|
||||
@@ -4,6 +4,23 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [2.2.0]
|
||||
|
||||
### Added
|
||||
|
||||
- Allow serviceLinks to be enabled/disabled.
|
||||
- Support for ingressClassName on apiVersion `networking.k8s.io/v1` by setting `ingress.ingressClassName`.
|
||||
- Added some initial proper unit tests for the `common` chart.
|
||||
|
||||
### Changed
|
||||
|
||||
- `service.port.targetPort` is now used in the container spec instead of `service.port.port` if specified. This allows for different service and container ports. (Implements [#465](https://github.com/k8s-at-home/charts/issues/465)).
|
||||
|
||||
### Fixed
|
||||
|
||||
- Document setting environment variables for code-server add-on in `values.yaml` (Fixes [#436](https://github.com/k8s-at-home/charts/issues/436)).
|
||||
- Set service targetPort to the service port name first if no `targetPort` value is given.
|
||||
|
||||
## [2.1.0]
|
||||
|
||||
### Added
|
||||
@@ -36,6 +53,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
This is the last version before starting this changelog. All sorts of cool stuff was changed, but only `git log` remembers what that was :slightly_frowning_face:
|
||||
|
||||
[2.2.0]: https://github.com/k8s-at-home/charts/tree/common-2.2.0/charts/common
|
||||
|
||||
[2.1.0]: https://github.com/k8s-at-home/charts/tree/common-2.1.0/charts/common
|
||||
|
||||
[2.0.4]: https://github.com/k8s-at-home/charts/tree/common-2.0.4/charts/common
|
||||
|
||||
[2.0.0]: https://github.com/k8s-at-home/charts/tree/common-2.0.0/charts/common
|
||||
|
||||
@@ -2,7 +2,7 @@ apiVersion: v2
|
||||
name: common
|
||||
description: Function library for k8s-at-home charts
|
||||
type: library
|
||||
version: 2.1.1
|
||||
version: 2.2.0
|
||||
keywords:
|
||||
- k8s-at-home
|
||||
- common
|
||||
|
||||
@@ -26,6 +26,11 @@ metadata:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if eq (include "common.capabilities.ingress.apiVersion" $) "networking.k8s.io/v1" }}
|
||||
{{- if $values.ingressClassName }}
|
||||
ingressClassName: {{ $values.ingressClassName }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if $values.tls }}
|
||||
tls:
|
||||
{{- range $values.tls }}
|
||||
|
||||
@@ -12,7 +12,7 @@ Render all the ports and additionalPorts for a Service object.
|
||||
ports:
|
||||
{{- range $_ := $ports }}
|
||||
- port: {{ .port }}
|
||||
targetPort: {{ .targetPort | default "http" }}
|
||||
targetPort: {{ .targetPort | default .name | default "http" }}
|
||||
protocol: {{ .protocol | default "TCP" }}
|
||||
name: {{ .name | default "http" }}
|
||||
{{- if (and (eq $.svcType "NodePort") (not (empty .nodePort))) }}
|
||||
|
||||
@@ -21,6 +21,7 @@ dnsPolicy: {{ . }}
|
||||
dnsConfig:
|
||||
{{- toYaml . | nindent 2 }}
|
||||
{{- end }}
|
||||
enableServiceLinks: {{ .Values.enableServiceLinks }}
|
||||
{{- with .Values.initContainers }}
|
||||
initContainers:
|
||||
{{- toYaml . | nindent 2 }}
|
||||
|
||||
@@ -32,7 +32,7 @@ Ports included by the controller.
|
||||
ports:
|
||||
{{- range $_ := $ports }}
|
||||
- name: {{ .name }}
|
||||
containerPort: {{ .port }}
|
||||
containerPort: {{ .targetPort | default .port }}
|
||||
protocol: {{ .protocol | default "TCP" }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
@@ -51,6 +51,11 @@ dnsPolicy: ClusterFirst
|
||||
# - name: ndots
|
||||
# value: "1"
|
||||
|
||||
# Enable/disable the generation of environment variables for services.
|
||||
# See https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#accessing-the-service
|
||||
# for more information.
|
||||
enableServiceLinks: true
|
||||
|
||||
initContainers: []
|
||||
|
||||
additionalContainers: []
|
||||
@@ -96,13 +101,14 @@ probes:
|
||||
service:
|
||||
enabled: true
|
||||
type: ClusterIP
|
||||
# Specify the default port information
|
||||
## Specify the default port information
|
||||
port:
|
||||
port:
|
||||
# name defaults to http
|
||||
## name defaults to http
|
||||
name:
|
||||
protocol: TCP
|
||||
# targetPort defaults to http
|
||||
## targetPort defaults to the service name. If targetPort is specified, this port number
|
||||
## is used in the container definition instead of service.port.port.
|
||||
targetPort:
|
||||
## Specify the nodePort value for the LoadBalancer and NodePort service types.
|
||||
## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
|
||||
@@ -314,6 +320,10 @@ addons:
|
||||
pullPolicy: IfNotPresent
|
||||
tag: 3.7.4
|
||||
|
||||
# Set any environment variables for code-server here
|
||||
env: {}
|
||||
# TZ: UTC
|
||||
|
||||
# Set codeserver command line arguments
|
||||
# consider setting --user-data-dir to a persistent location to preserve code-server setting changes
|
||||
args:
|
||||
|
||||
@@ -2,7 +2,7 @@ apiVersion: v2
|
||||
appVersion: 2.2.2
|
||||
description: An Application dashboard and launcher
|
||||
name: heimdall
|
||||
version: 4.1.1
|
||||
version: 4.1.2
|
||||
keywords:
|
||||
- heimdall
|
||||
home: https://github.com/k8s-at-home/charts/tree/master/charts/heimdall
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Default values for grocy.
|
||||
# Default values for heimdall.
|
||||
|
||||
image:
|
||||
repository: linuxserver/heimdall
|
||||
|
||||
24
charts/hyperion-ng/.helmignore
Normal file
24
charts/hyperion-ng/.helmignore
Normal file
@@ -0,0 +1,24 @@
|
||||
# Patterns to ignore when building packages.
|
||||
# This supports shell glob matching, relative path matching, and
|
||||
# negation (prefixed with !). Only one pattern per line.
|
||||
.DS_Store
|
||||
# Common VCS dirs
|
||||
.git/
|
||||
.gitignore
|
||||
.bzr/
|
||||
.bzrignore
|
||||
.hg/
|
||||
.hgignore
|
||||
.svn/
|
||||
# Common backup files
|
||||
*.swp
|
||||
*.bak
|
||||
*.tmp
|
||||
*~
|
||||
# Various IDEs
|
||||
.project
|
||||
.idea/
|
||||
.vscode/
|
||||
*.tmproj
|
||||
# OWNERS file for Kubernetes
|
||||
OWNERS
|
||||
20
charts/hyperion-ng/Chart.yaml
Normal file
20
charts/hyperion-ng/Chart.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
apiVersion: v2
|
||||
appVersion: 2.0.0-alpha9
|
||||
description: Hyperion is an opensource Bias or Ambient Lighting implementation
|
||||
name: hyperion-ng
|
||||
version: 1.0.0
|
||||
keywords:
|
||||
- hyperion-ng
|
||||
- hyperion
|
||||
home: https://github.com/k8s-at-home/charts/tree/master/charts/hyperion-ng
|
||||
icon: https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/assets/webconfig/img/hyperion/hyperionlogo.png?raw=true
|
||||
sources:
|
||||
- https://github.com/hyperion-project/hyperion.ng
|
||||
- https://hub.docker.com/r/sirfragalot/hyperion.ng
|
||||
maintainers:
|
||||
- name: billimek
|
||||
email: jeff@billimek.com
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: https://k8s-at-home.com/charts/
|
||||
version: 2.1.1
|
||||
8
charts/hyperion-ng/OWNERS
Normal file
8
charts/hyperion-ng/OWNERS
Normal file
@@ -0,0 +1,8 @@
|
||||
approvers:
|
||||
- billimek
|
||||
- onedr0p
|
||||
- bjw-s
|
||||
reviewers:
|
||||
- billimek
|
||||
- onedr0p
|
||||
- bjw-s
|
||||
67
charts/hyperion-ng/README.md
Normal file
67
charts/hyperion-ng/README.md
Normal file
@@ -0,0 +1,67 @@
|
||||
# Radarr
|
||||
|
||||
This is a helm chart for [Hyperion.ng](https://github.com/hyperion-project/hyperion.ng).
|
||||
|
||||
**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)**
|
||||
|
||||
## TL;DR;
|
||||
|
||||
```shell
|
||||
$ helm repo add k8s-at-home https://k8s-at-home.com/charts/
|
||||
$ helm install k8s-at-home/hyperion-ng
|
||||
```
|
||||
|
||||
## Installing the Chart
|
||||
|
||||
To install the chart with the release name `my-release`:
|
||||
|
||||
```console
|
||||
helm install --name my-release k8s-at-home/hyperion-ng
|
||||
```
|
||||
|
||||
## Uninstalling the Chart
|
||||
|
||||
To uninstall/delete the `my-release` deployment:
|
||||
|
||||
```console
|
||||
helm delete my-release --purge
|
||||
```
|
||||
|
||||
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
||||
|
||||
## Configuration
|
||||
Read through the charts [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/hyperion-ng/values.yaml)
|
||||
file. It has several commented out suggested values.
|
||||
Additionally you can take a look at the common library [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/common/values.yaml) for more (advanced) configuration options.
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
|
||||
```console
|
||||
helm install hyperion-ng \
|
||||
--set env.TZ="America/New_York" \
|
||||
k8s-at-home/hyperion-ng
|
||||
```
|
||||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the
|
||||
chart. For example,
|
||||
```console
|
||||
helm install hyperion-ng k8s-at-home/hyperion-ng --values values.yaml
|
||||
```
|
||||
|
||||
```yaml
|
||||
image:
|
||||
tag: ...
|
||||
```
|
||||
|
||||
---
|
||||
**NOTE**
|
||||
|
||||
If you get
|
||||
```console
|
||||
Error: rendered manifests contain a resource that already exists. Unable to continue with install: existing resource conflict: ...`
|
||||
```
|
||||
it may be because you uninstalled the chart with `skipuninstall` enabled, you need to manually delete the pvc or use `existingClaim`.
|
||||
|
||||
---
|
||||
|
||||
## Upgrading an existing Release to a new major version
|
||||
|
||||
A major chart version change (like 4.0.1 -> 5.0.0) indicates that there is an incompatible breaking change potentially needing manual actions.
|
||||
1
charts/hyperion-ng/templates/NOTES.txt
Normal file
1
charts/hyperion-ng/templates/NOTES.txt
Normal file
@@ -0,0 +1 @@
|
||||
{{- include "common.notes.defaultNotes" . -}}
|
||||
1
charts/hyperion-ng/templates/common.yaml
Normal file
1
charts/hyperion-ng/templates/common.yaml
Normal file
@@ -0,0 +1 @@
|
||||
{{ include "common.all" . }}
|
||||
37
charts/hyperion-ng/values.yaml
Normal file
37
charts/hyperion-ng/values.yaml
Normal file
@@ -0,0 +1,37 @@
|
||||
# Default values for hyperion-ng.
|
||||
|
||||
image:
|
||||
repository: sirfragalot/hyperion.ng
|
||||
pullPolicy: IfNotPresent
|
||||
tag: 2.0.0-alpha.9-x86_64
|
||||
|
||||
strategy:
|
||||
type: Recreate
|
||||
|
||||
service:
|
||||
port:
|
||||
port: 8090
|
||||
additionalPorts:
|
||||
- port: 19444
|
||||
name: jsonservice
|
||||
protocol: TCP
|
||||
targetPort: 19444
|
||||
- port: 19445
|
||||
name: protobufservice
|
||||
protocol: TCP
|
||||
targetPort: 19445
|
||||
- port: 19333
|
||||
name: boblightservice
|
||||
protocol: TCP
|
||||
targetPort: 19333
|
||||
|
||||
env: {}
|
||||
# TZ: UTC
|
||||
# PUID: 1001
|
||||
# PGID: 1001
|
||||
|
||||
persistence:
|
||||
config:
|
||||
enabled: false
|
||||
emptyDir: false
|
||||
mountPath: /root/.hyperion
|
||||
@@ -1,8 +1,8 @@
|
||||
apiVersion: v2
|
||||
appVersion: v4.3.0
|
||||
appVersion: v4.3.1
|
||||
description: PowerDNS is a DNS server, written in C++ and licensed under the GPL. It runs on most Unix derivatives. PowerDNS features a large number of different backends ranging from simple BIND style zonefiles to relational databases and load balancing/failover algorithms. A DNS recursor is provided as a separate program.
|
||||
name: powerdns
|
||||
version: 3.0.0
|
||||
version: 3.0.1
|
||||
home: https://www.powerdns.com/
|
||||
sources:
|
||||
- http://www.github.com/PowerDNS/
|
||||
@@ -14,7 +14,7 @@ dependencies:
|
||||
- name: postgresql
|
||||
version: 10.2.0
|
||||
repository: https://charts.bitnami.com/bitnami
|
||||
condition: postgres.enabled
|
||||
condition: postgresql.enabled
|
||||
- name: mariadb
|
||||
version: 9.2.0
|
||||
repository: https://charts.bitnami.com/bitnami
|
||||
|
||||
23
charts/tvheadend/.helmignore
Normal file
23
charts/tvheadend/.helmignore
Normal file
@@ -0,0 +1,23 @@
|
||||
# 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
|
||||
*.orig
|
||||
*~
|
||||
# Various IDEs
|
||||
.project
|
||||
.idea/
|
||||
*.tmproj
|
||||
.vscode/
|
||||
18
charts/tvheadend/Chart.yaml
Normal file
18
charts/tvheadend/Chart.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
apiVersion: v2
|
||||
appVersion: latest
|
||||
description: TVheadend - a TV streaming server and digital video recorder
|
||||
name: tvheadend
|
||||
version: 1.0.0
|
||||
keywords:
|
||||
- tv
|
||||
- streaming
|
||||
- dvb
|
||||
home: https://github.com/k8s-at-home/charts/tree/master/charts/tvheadend
|
||||
sources:
|
||||
- https://github.com/tvheadend/tvheadend
|
||||
maintainers:
|
||||
- name: mr-onion-2
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: https://k8s-at-home.com/charts/
|
||||
version: 2.1.1
|
||||
43
charts/tvheadend/README.md
Normal file
43
charts/tvheadend/README.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# tvheadend
|
||||
|
||||
This is a helm chart for [tvheadend](https://github.com/tvheadend/tvheadend).
|
||||
|
||||
**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).**
|
||||
|
||||
## TL;DR;
|
||||
|
||||
```shell
|
||||
$ helm repo add k8s-at-home https://k8s-at-home.com/charts/
|
||||
$ helm install k8s-at-home/tvheadend
|
||||
```
|
||||
|
||||
## Installing the Chart
|
||||
|
||||
To install the chart with the release name `my-release`:
|
||||
|
||||
```console
|
||||
helm install my-release k8s-at-home/tvheadend
|
||||
```
|
||||
|
||||
## Uninstalling the Chart
|
||||
|
||||
To uninstall/delete the `my-release` deployment:
|
||||
|
||||
```console
|
||||
helm delete my-release --purge
|
||||
```
|
||||
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
||||
|
||||
## Configuration
|
||||
The chart's [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/tvheadend/values.yaml) file contains a set of suggested values for a minimal deployment. Further configuration options are found in the [common library](https://github.com/k8s-at-home/charts/blob/master/charts/common/values.yaml).
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
|
||||
```console
|
||||
helm install tvheadend \
|
||||
--set env.TZ="America/New_York" \
|
||||
k8s-at-home/tvheadend
|
||||
```
|
||||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
|
||||
```console
|
||||
helm install tvheadend k8s-at-home/tvheadend --values values.yaml
|
||||
```
|
||||
1
charts/tvheadend/templates/NOTES.txt
Normal file
1
charts/tvheadend/templates/NOTES.txt
Normal file
@@ -0,0 +1 @@
|
||||
{{- include "common.notes.defaultNotes" . -}}
|
||||
1
charts/tvheadend/templates/common.yaml
Normal file
1
charts/tvheadend/templates/common.yaml
Normal file
@@ -0,0 +1 @@
|
||||
{{ include "common.all" . }}
|
||||
30
charts/tvheadend/values.yaml
Normal file
30
charts/tvheadend/values.yaml
Normal file
@@ -0,0 +1,30 @@
|
||||
# Default values for tvheadend.
|
||||
|
||||
image:
|
||||
repository: linuxserver/tvheadend
|
||||
pullPolicy: IfNotPresent
|
||||
tag: latest
|
||||
|
||||
strategy:
|
||||
type: Recreate
|
||||
|
||||
# See https://github.com/linuxserver/docker-tvheadend#parameters
|
||||
env: {}
|
||||
# PUID: 1000
|
||||
# PGID: 1000
|
||||
# TZ: Europe/London
|
||||
# RUN_OPTS: <run options here>
|
||||
|
||||
service:
|
||||
port:
|
||||
port: 9981
|
||||
|
||||
persistence:
|
||||
config:
|
||||
enabled: false
|
||||
emptyDir: false
|
||||
mountPath: /config
|
||||
recordings:
|
||||
enabled: false
|
||||
emptyDir: false
|
||||
mountPath: /recordings
|
||||
86
test/charts/common-test_spec.rb
Normal file
86
test/charts/common-test_spec.rb
Normal file
@@ -0,0 +1,86 @@
|
||||
# frozen_string_literal: true
|
||||
require_relative '../test_helper'
|
||||
|
||||
class Test < ChartTest
|
||||
@@chart = Chart.new('charts/common-test')
|
||||
|
||||
describe @@chart.name do
|
||||
describe 'controller type' do
|
||||
it 'defaults to "Deployment"' do
|
||||
assert_nil(resource('StatefulSet'))
|
||||
assert_nil(resource('DaemonSet'))
|
||||
refute_nil(resource('Deployment'))
|
||||
end
|
||||
|
||||
it 'accepts "statefulset"' do
|
||||
chart.value controllerType: 'statefulset'
|
||||
assert_nil(resource('Deployment'))
|
||||
assert_nil(resource('DaemonSet'))
|
||||
refute_nil(resource('StatefulSet'))
|
||||
end
|
||||
|
||||
it 'accepts "daemonset"' do
|
||||
chart.value controllerType: 'daemonset'
|
||||
assert_nil(resource('Deployment'))
|
||||
assert_nil(resource('StatefulSet'))
|
||||
refute_nil(resource('DaemonSet'))
|
||||
end
|
||||
end
|
||||
|
||||
describe 'pod replicas' do
|
||||
it 'defaults to 1' do
|
||||
jq('.spec.replicas', resource('Deployment')).must_equal 1
|
||||
end
|
||||
|
||||
it 'accepts integer as value' do
|
||||
chart.value replicas: 3
|
||||
jq('.spec.replicas', resource('Deployment')).must_equal 3
|
||||
end
|
||||
end
|
||||
|
||||
describe 'ports settings' do
|
||||
default_name = 'http'
|
||||
default_port = 8080
|
||||
|
||||
it 'defaults to name "http" on port 8080' do
|
||||
jq('.spec.ports[0].port', resource('Service')).must_equal default_port
|
||||
jq('.spec.ports[0].targetPort', resource('Service')).must_equal default_name
|
||||
jq('.spec.ports[0].name', resource('Service')).must_equal default_name
|
||||
jq('.spec.template.spec.containers[0].ports[0].containerPort', resource('Deployment')).must_equal default_port
|
||||
jq('.spec.template.spec.containers[0].ports[0].name', resource('Deployment')).must_equal default_name
|
||||
end
|
||||
|
||||
it 'port name can be overridden' do
|
||||
values = {
|
||||
service: {
|
||||
port: {
|
||||
name: 'server'
|
||||
}
|
||||
}
|
||||
}
|
||||
chart.value values
|
||||
jq('.spec.ports[0].port', resource('Service')).must_equal default_port
|
||||
jq('.spec.ports[0].targetPort', resource('Service')).must_equal values[:service][:port][:name]
|
||||
jq('.spec.ports[0].name', resource('Service')).must_equal values[:service][:port][:name]
|
||||
jq('.spec.template.spec.containers[0].ports[0].containerPort', resource('Deployment')).must_equal default_port
|
||||
jq('.spec.template.spec.containers[0].ports[0].name', resource('Deployment')).must_equal values[:service][:port][:name]
|
||||
end
|
||||
|
||||
it 'targetPort can be overridden' do
|
||||
values = {
|
||||
service: {
|
||||
port: {
|
||||
targetPort: 80
|
||||
}
|
||||
}
|
||||
}
|
||||
chart.value values
|
||||
jq('.spec.ports[0].port', resource('Service')).must_equal default_port
|
||||
jq('.spec.ports[0].targetPort', resource('Service')).must_equal values[:service][:port][:targetPort]
|
||||
jq('.spec.ports[0].name', resource('Service')).must_equal default_name
|
||||
jq('.spec.template.spec.containers[0].ports[0].containerPort', resource('Deployment')).must_equal values[:service][:port][:targetPort]
|
||||
jq('.spec.template.spec.containers[0].ports[0].name', resource('Deployment')).must_equal default_name
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
119
test/test_helper.rb
Normal file
119
test/test_helper.rb
Normal file
@@ -0,0 +1,119 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'json'
|
||||
require 'yaml'
|
||||
require 'open3'
|
||||
|
||||
require 'jq/extend'
|
||||
require 'minitest-implicit-subject'
|
||||
require "minitest/reporters"
|
||||
require 'minitest/autorun'
|
||||
require 'minitest/pride'
|
||||
|
||||
class HelmCompileError < StandardError
|
||||
end
|
||||
|
||||
class HelmDepsError < StandardError
|
||||
end
|
||||
|
||||
class Chart
|
||||
attr_reader :name, :path, :values
|
||||
|
||||
def initialize(chart)
|
||||
@name = chart.split('/').last
|
||||
|
||||
@path = File.expand_path(chart)
|
||||
|
||||
@values = default_values
|
||||
|
||||
update_deps!
|
||||
end
|
||||
|
||||
def update_deps!
|
||||
command = "helm dep update '#{path}'"
|
||||
stdout, stderr, status = Open3.capture3(command)
|
||||
raise HelmDepsError, stderr if status != 0
|
||||
end
|
||||
|
||||
def reset!
|
||||
@values = default_values
|
||||
@parsed_resources = nil
|
||||
end
|
||||
|
||||
def value(value)
|
||||
values.merge!(value)
|
||||
end
|
||||
|
||||
def configure_custom_name(name)
|
||||
@name = name
|
||||
end
|
||||
|
||||
def execute_helm_template!
|
||||
file = Tempfile.new(name)
|
||||
file.write(JSON.parse(values.to_json).to_yaml)
|
||||
file.close
|
||||
|
||||
begin
|
||||
command = "helm template '#{name}' '#{path}' --namespace='default' --values='#{file.path}'"
|
||||
stdout, stderr, status = Open3.capture3(command)
|
||||
|
||||
raise HelmCompileError, stderr if status != 0
|
||||
|
||||
stdout
|
||||
ensure
|
||||
file.unlink
|
||||
end
|
||||
end
|
||||
|
||||
def parsed_resources
|
||||
@parsed_resources ||= begin
|
||||
output = execute_helm_template!
|
||||
puts output if ENV.fetch('DEBUG', 'false') == 'true'
|
||||
YAML.load_stream(output)
|
||||
end
|
||||
end
|
||||
|
||||
def resources(matcher = nil)
|
||||
return parsed_resources unless matcher
|
||||
|
||||
parsed_resources.select do |r|
|
||||
r >= Hash[matcher.map { |k, v| [k.to_s, v] }]
|
||||
end
|
||||
end
|
||||
|
||||
def default_values
|
||||
{
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
class ExtendedMinitest < Minitest::Test
|
||||
extend MiniTest::Spec::DSL
|
||||
end
|
||||
|
||||
class ChartTest < ExtendedMinitest
|
||||
Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
|
||||
|
||||
before do
|
||||
chart.reset!
|
||||
end
|
||||
|
||||
def chart
|
||||
self.class.class_variable_get('@@chart')
|
||||
end
|
||||
|
||||
def resource(name)
|
||||
chart.resources(kind: name).first
|
||||
end
|
||||
|
||||
def jq(matcher, object)
|
||||
value(object.jq(matcher)[0])
|
||||
end
|
||||
end
|
||||
|
||||
class Minitest::Result
|
||||
def name
|
||||
test_name = defined?(@name) ? @name : super
|
||||
test_name.to_s.gsub /\Atest_\d{4,}_/, ""
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user