-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #614 from pascaliske/feature/ctfd
- Loading branch information
Showing
15 changed files
with
817 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
# yaml-language-server: $schema=https://json.schemastore.org/chart.json | ||
apiVersion: v2 | ||
type: application | ||
name: ctfd | ||
description: A Helm chart for CTFd | ||
version: 1.0.0 | ||
# renovate: image=ghcr.io/ctfd/ctfd | ||
appVersion: "3.7.3" | ||
|
||
home: https://charts.pascaliske.dev/charts/ctfd/ | ||
sources: | ||
- https://github.com/pascaliske/helm-charts | ||
- https://github.com/ctfd/ctfd | ||
- https://docs.ctfd.io | ||
- https://ctfd.io | ||
keywords: | ||
- ctfd | ||
maintainers: | ||
- name: pascaliske | ||
email: [email protected] | ||
url: https://pascaliske.dev | ||
|
||
dependencies: | ||
- name: base | ||
version: 1.2.0 | ||
repository: https://charts.pascaliske.dev | ||
|
||
annotations: | ||
# possible kinds: added, changed, deprecated, removed, fixed, security | ||
artifacthub.io/changes: | | ||
- kind: added | ||
description: 'Initial release of CTFd chart.' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
# [`ctfd`](https://charts.pascaliske.dev/charts/ctfd/) | ||
|
||
> A Helm chart for CTFd | ||
[![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ](https://charts.pascaliske.dev/charts/ctfd/)[![Version: 1.0.0](https://img.shields.io/badge/Version-1.0.0-informational?style=flat-square) ](https://charts.pascaliske.dev/charts/ctfd/)[![AppVersion: 3.7.3](https://img.shields.io/badge/AppVersion-3.7.3-informational?style=flat-square) ](https://charts.pascaliske.dev/charts/ctfd/) | ||
|
||
* <https://github.com/pascaliske/helm-charts> | ||
* <https://github.com/ctfd/ctfd> | ||
* <https://docs.ctfd.io> | ||
* <https://ctfd.io> | ||
|
||
## Requirements | ||
|
||
- [`helm`](https://helm.sh) - Refer to their [docs](https://helm.sh/docs) to get started. | ||
|
||
## Usage | ||
|
||
To use this chart add the repo as follows: | ||
|
||
```sh | ||
helm repo add pascaliske https://charts.pascaliske.dev | ||
``` | ||
|
||
If you had already added this repo earlier, run `helm repo update` to retrieve the latest versions of the packages. | ||
|
||
To install this chart simply run the following command: | ||
|
||
```sh | ||
helm install ctfd pascaliske/ctfd | ||
``` | ||
|
||
To uninstall this chart simply run the following command: | ||
|
||
```sh | ||
helm delete ctfd | ||
``` | ||
|
||
## Values | ||
|
||
The following values can be used to adjust the helm chart. | ||
|
||
| Key | Type | Default | Description | | ||
|-----|------|---------|-------------| | ||
| additionalContainers | object | `{}` | Specify any additional containers here as dictionary items - each should have its own key. | | ||
| affinity | object | `{}` | Pod-level affinity. More info [here](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#scheduling). | | ||
| certificate.annotations | object | `{}` | Additional annotations for the certificate object. | | ||
| certificate.create | bool | `false` | Create a Certificate object for the exposed chart. | | ||
| certificate.dnsNames | list | `[]` | List of subject alternative names for the certificate. | | ||
| certificate.issuerRef.kind | string | `"ClusterIssuer"` | The type of the referenced certificate issuer. It can be "Issuer" or "ClusterIssuer". | | ||
| certificate.issuerRef.name | string | `""` | Name of the referenced certificate issuer. | | ||
| certificate.labels | object | `{}` | Additional labels for the certificate object. | | ||
| certificate.secretName | string | `""` | Name of the secret in which the certificate will be stored. Defaults to the first item in dnsNames. | | ||
| controller.annotations | object | `{}` | Additional annotations for the controller object. | | ||
| controller.enabled | bool | `true` | Create a workload for this chart. | | ||
| controller.kind | string | `"Deployment"` | Type of the workload object. | | ||
| controller.labels | object | `{}` | Additional labels for the controller object. | | ||
| controller.replicas | int | `1` | The number of replicas. | | ||
| controller.updateStrategy | object | `{}` | The controller update strategy. Currently only applies to controllers of kind `Deployment`. | | ||
| env[0] | object | `{"name":"TZ","value":"UTC"}` | Timezone for the container. | | ||
| fullnameOverride | string | `""` | | | ||
| image.pullPolicy | string | `"IfNotPresent"` | The pull policy for the controller. | | ||
| image.registry | string | `"ghcr.io"` | The registry to pull the image from. | | ||
| image.repository | string | `"ctfd/ctfd"` | The repository to pull the image from. | | ||
| image.tag | string | `.Chart.AppVersion` | The docker tag, if left empty chart's appVersion will be used. | | ||
| ingressRoute.annotations | object | `{}` | Additional annotations for the ingress route object. | | ||
| ingressRoute.create | bool | `false` | Create an IngressRoute object for exposing this chart. | | ||
| ingressRoute.entryPoints | list | `[]` | List of [entry points](https://doc.traefik.io/traefik/routing/routers/#entrypoints) on which the ingress route will be available. | | ||
| ingressRoute.labels | object | `{}` | Additional labels for the ingress route object. | | ||
| ingressRoute.middlewares | list | `[]` | List of [middleware objects](https://doc.traefik.io/traefik/routing/providers/kubernetes-crd/#kind-middleware) for the ingress route. | | ||
| ingressRoute.rule | string | `""` | [Matching rule](https://doc.traefik.io/traefik/routing/routers/#rule) for the underlying router. | | ||
| ingressRoute.tlsSecretName | string | `""` | Use an existing secret containing the TLS certificate. | | ||
| nameOverride | string | `""` | | | ||
| persistentVolumeClaim.accessMode | string | `"ReadWriteOnce"` | Access mode of the persistent volume claim object. | | ||
| persistentVolumeClaim.annotations | object | `{}` | Additional annotations for the persistent volume claim object. | | ||
| persistentVolumeClaim.create | bool | `true` | Create a new persistent volume claim object. | | ||
| persistentVolumeClaim.existingPersistentVolumeClaim | string | `""` | Use an existing persistent volume claim object. | | ||
| persistentVolumeClaim.labels | object | `{}` | Additional labels for the persistent volume claim object. | | ||
| persistentVolumeClaim.mountPath | string | `"/data"` | Mount path of the persistent volume claim object. | | ||
| persistentVolumeClaim.size | string | `"1Gi"` | Storage request size for the persistent volume claim object. | | ||
| persistentVolumeClaim.storageClassName | string | `""` | Storage class name for the persistent volume claim object. | | ||
| persistentVolumeClaim.volumeMode | string | `"Filesystem"` | Volume mode of the persistent volume claim object. | | ||
| ports.http.enabled | bool | `true` | Enable the port inside the `controller` and `Service` objects. | | ||
| ports.http.nodePort | string | `nil` | The external port used if `.service.type` == `NodePort`. | | ||
| ports.http.port | int | `8000` | The port used as internal port and cluster-wide port if `.service.type` == `ClusterIP`. | | ||
| ports.http.protocol | string | `"TCP"` | The protocol used for the service. | | ||
| resources | object | `{}` | Compute resources used by the container. More info [here](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/). | | ||
| secret.annotations | object | `{}` | Additional annotations for the secret object. | | ||
| secret.create | bool | `true` | Create a new secret object. | | ||
| secret.existingSecret | string | `""` | Use an existing secret object. | | ||
| secret.labels | object | `{}` | Additional labels for the secret object. | | ||
| secret.values | object | `{"SECRET_KEY":"{{ randAlphaNum 42 | b64enc }}"}` | Secret values used when not using an existing secret. Helm templates are supported for values. | | ||
| secret.values.SECRET_KEY | string | `"{{ randAlphaNum 42 | b64enc }}"` | Secret key for session tokens. | | ||
| securityContext | object | `{"fsGroup":1001,"runAsGroup":1001,"runAsNonRoot":true,"runAsUser":1001}` | Pod-level security attributes. More info [here](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#security-context). | | ||
| service.annotations | object | `{}` | Additional annotations for the service object. | | ||
| service.clusterIP | string | `""` | ClusterIP used if service type is `ClusterIP`. | | ||
| service.enabled | bool | `true` | Create a service for exposing this chart. | | ||
| service.labels | object | `{}` | Additional labels for the service object. | | ||
| service.loadBalancerIP | string | `""` | LoadBalancerIP if service type is `LoadBalancer`. | | ||
| service.loadBalancerSourceRanges | list | `[]` | Allowed addresses when service type is `LoadBalancer`. | | ||
| service.type | string | `"ClusterIP"` | The service type used. | | ||
| serviceAccount.annotations | object | `{}` | Additional annotations for the role and role binding objects. | | ||
| serviceAccount.create | bool | `true` | Create a `ServiceAccount` object. | | ||
| serviceAccount.labels | object | `{}` | Additional labels for the role and role binding objects. | | ||
| serviceAccount.name | string | `""` | Specify the service account used for the controller. | | ||
| tolerations | list | `[]` | Pod-level tolerations. More info [here](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#scheduling). | | ||
|
||
## Maintainers | ||
|
||
| Name | Email | Url | | ||
| ---- | ------ | --- | | ||
| pascaliske | <[email protected]> | <https://pascaliske.dev> | | ||
|
||
## License | ||
|
||
[MIT](../LICENSE.md) – © 2024 [Pascal Iske](https://pascaliske.dev) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
# [`{{ template "chart.name" . }}`]({{ template "chart.homepage" . }}) | ||
|
||
{{ template "chart.deprecationWarning" . }} | ||
|
||
> {{ template "chart.description" . }} | ||
|
||
[{{ template "chart.typeBadge" . }}]({{ template "chart.homepage" . }})[{{ template "chart.versionBadge" . }}]({{ template "chart.homepage" . }})[{{ template "chart.appVersionBadge" . }}]({{ template "chart.homepage" . }}) | ||
|
||
{{ template "chart.sourcesList" . }} | ||
|
||
## Requirements | ||
|
||
- [`helm`](https://helm.sh) - Refer to their [docs](https://helm.sh/docs) to get started. | ||
|
||
## Usage | ||
|
||
To use this chart add the repo as follows: | ||
|
||
```sh | ||
helm repo add pascaliske https://charts.pascaliske.dev | ||
``` | ||
|
||
If you had already added this repo earlier, run `helm repo update` to retrieve the latest versions of the packages. | ||
|
||
To install this chart simply run the following command: | ||
|
||
```sh | ||
helm install {{ template "chart.name" . }} pascaliske/{{ template "chart.name" . }} | ||
``` | ||
|
||
To uninstall this chart simply run the following command: | ||
|
||
```sh | ||
helm delete {{ template "chart.name" . }} | ||
``` | ||
|
||
{{ template "chart.valuesHeader" . }} | ||
|
||
The following values can be used to adjust the helm chart. | ||
|
||
{{ template "chart.valuesTable" . }} | ||
|
||
{{ template "chart.maintainersSection" . }} | ||
|
||
## License | ||
|
||
[MIT](../LICENSE.md) – © {{ now | date "2006" }} [Pascal Iske](https://pascaliske.dev) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
1. Get the application URL by running these commands: | ||
{{- if contains "NodePort" .Values.service.type }} | ||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "ctfd.fullname" . }}) | ||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") | ||
echo http://$NODE_IP:$NODE_PORT | ||
{{- else if contains "LoadBalancer" .Values.service.type }} | ||
NOTE: It may take a few minutes for the LoadBalancer IP to be available. | ||
You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "ctfd.fullname" . }}' | ||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "ctfd.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") | ||
echo http://$SERVICE_IP:{{ .Values.ports.http.port }} | ||
{{- else if contains "ClusterIP" .Values.service.type }} | ||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "ctfd.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") | ||
export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") | ||
echo "Visit http://127.0.0.1:8080 to use your application" | ||
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT | ||
{{- end }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
{{/* | ||
Expand the name of the chart. | ||
*/}} | ||
{{- define "ctfd.name" -}} | ||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} | ||
{{- end }} | ||
|
||
{{/* | ||
Create a default fully qualified app name. | ||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). | ||
If release name contains chart name it will be used as a full name. | ||
*/}} | ||
{{- define "ctfd.fullname" -}} | ||
{{- if .Values.fullnameOverride }} | ||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} | ||
{{- else }} | ||
{{- $name := default .Chart.Name .Values.nameOverride }} | ||
{{- if contains $name .Release.Name }} | ||
{{- .Release.Name | trunc 63 | trimSuffix "-" }} | ||
{{- else }} | ||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} | ||
{{- end }} | ||
{{- end }} | ||
{{- end }} | ||
|
||
{{/* | ||
Create chart name and version as used by the chart label. | ||
*/}} | ||
{{- define "ctfd.chart" -}} | ||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} | ||
{{- end }} | ||
|
||
{{/* | ||
Common labels | ||
*/}} | ||
{{- define "ctfd.labels" -}} | ||
helm.sh/chart: {{ include "ctfd.chart" . }} | ||
{{ include "ctfd.selectorLabels" . }} | ||
{{- if .Chart.AppVersion }} | ||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} | ||
{{- end }} | ||
app.kubernetes.io/managed-by: {{ .Release.Service }} | ||
{{- end }} | ||
|
||
{{/* | ||
Selector labels | ||
*/}} | ||
{{- define "ctfd.selectorLabels" -}} | ||
app.kubernetes.io/name: {{ include "ctfd.name" . }} | ||
app.kubernetes.io/instance: {{ .Release.Name }} | ||
{{- end }} | ||
|
||
{{/* | ||
Create the name of the service account to use | ||
*/}} | ||
{{- define "ctfd.serviceAccountName" -}} | ||
{{- if .Values.serviceAccount.create }} | ||
{{- default (include "ctfd.fullname" .) .Values.serviceAccount.name }} | ||
{{- else }} | ||
{{- default "default" .Values.serviceAccount.name }} | ||
{{- end }} | ||
{{- end }} | ||
|
||
{{/* | ||
Certificate name | ||
*/}} | ||
{{- define "ctfd.certificate.name" -}} | ||
{{- if not (empty .Values.certificate.dnsNames) }} | ||
{{- first .Values.certificate.dnsNames }} | ||
{{- else }} | ||
{{- include "ctfd.fullname" . }} | ||
{{- end }} | ||
{{- end }} | ||
|
||
{{/* | ||
Certificate secret name | ||
*/}} | ||
{{- define "ctfd.certificate.secretName" -}} | ||
{{- if not (empty .Values.certificate.secretName) }} | ||
{{- .Values.certificate.secretName }} | ||
{{- else }} | ||
{{- include "ctfd.certificate.name" . }} | ||
{{- end }} | ||
{{- end }} | ||
|
||
{{/* | ||
Certificate issuer reference name | ||
*/}} | ||
{{- define "ctfd.certificate.issuerRefName" -}} | ||
{{- required "Mandatory field \".certificate.issuerRef.name\" is empty!" .Values.certificate.issuerRef.name -}} | ||
{{- end }} | ||
|
||
{{/* | ||
IngressRoute TLS secret name | ||
*/}} | ||
{{- define "ctfd.ingressRoute.tlsSecretName" -}} | ||
{{- if not (empty .Values.ingressRoute.tlsSecretName) }} | ||
{{- .Values.ingressRoute.tlsSecretName }} | ||
{{- else if .Values.certificate.create }} | ||
{{- include "ctfd.certificate.name" . }} | ||
{{- end }} | ||
{{- end }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
{{- if and .Values.certificate.create .Values.service.enabled -}} | ||
apiVersion: cert-manager.io/v1 | ||
kind: Certificate | ||
metadata: | ||
name: {{ include "ctfd.certificate.name" . }} | ||
labels: | ||
{{- include "ctfd.labels" . | nindent 4 }} | ||
{{- with .Values.certificate.labels }} | ||
{{- toYaml . | nindent 4 }} | ||
{{- end }} | ||
{{- with .Values.certificate.annotations }} | ||
annotations: | ||
{{- toYaml . | nindent 4 }} | ||
{{- end }} | ||
spec: | ||
secretName: {{ include "ctfd.certificate.secretName" . }} | ||
{{- with .Values.certificate.dnsNames }} | ||
dnsNames: | ||
{{- toYaml . | nindent 4 }} | ||
{{- end }} | ||
{{- with .Values.certificate.issuerRef }} | ||
issuerRef: | ||
kind: {{ default "ClusterIssuer" .kind }} | ||
name: {{ include "ctfd.certificate.issuerRefName" $ }} | ||
{{- end }} | ||
{{- end }} |
Oops, something went wrong.