`{"enabled":false,"organization":``"votre-organisation",``"repository":"votre-repo"}`
| Log into github to generate tag image |
+| ingress.annotations | object | `{}` | Additional annotations for the Ingress |
+| ingress.enabled | bool | `true` | Enable or disable the creation of an Ingress resource for the deployment [More about ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/) |
+| ingress.labels | object | `{}` | Additional labels for the Ingress |
+| ingress.rules | list |
`[{"host":"chart-example.local","paths":``[{"path":"/","pathType": ``"ImplementationSpecific"}]}]`
| List of rules for the Ingress |
+| nameOverride | string | `""` | |
+| podDisruptionBudget | object | `{}` | Empty means no PDB is applied
[More about disruption budget](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) |
+| secrets | object | `{"data":{},"type":""}` | Configuration settings for Kubernetes secrets [More about secrets](https://kubernetes.io/docs/concepts/configuration/secret/) |
+| secrets.data | object | `{}` | Key-value pairs stored as base64-encoded strings |
+| service.enabled | bool | `true` | Enable or disable the creation of a Kubernetes service for the deployment [More about service](https://kubernetes.io/docs/concepts/services-networking/service/) |
+| service.extraPorts | list | `[]` | Additional Service ports, e. g. for custom admin console |
+| service.httpAdminNodePort | string | `""` | The Management node port if type is NodePort (The range of valid ports is 30000-32767) |
+| service.httpAdminPort | int | `8081` | The Management port |
+| service.httpAdminPortName | string | `"http-admin"` | The Management port name |
+| service.httpNodePort | string | `""` | The HTTP Service node port if type is NodePort (The range of valid ports is 30000-32767) |
+| service.httpPort | int | `8080` | The http Service port |
+| service.type | string | `"ClusterIP"` | The Service type |
+| serviceAccount.create | bool | `true` | Specifies whether a service account should be created
[More about service account](https://kubernetes.io/docs/concepts/security/service-accounts/) |
+| serviceAccount.annotations | object | `{}` | Annotations to add to the service account |
+| serviceAccount.imagePullSecrets | list | `[]` | Image pull secrets that are attached to the ServiceAccount |
+| serviceAccount.name | string | `""` | If not set and create is true, a name is generated using the fullname template |
+
+----------------------------------------------
+Autogenerated from chart metadata using [helm-docs v1.11.3](https://github.com/norwoodj/helm-docs/releases/v1.11.3)
diff --git a/bouyguestelecom/spin/.helmignore b/bouyguestelecom/spin/.helmignore
new file mode 100644
index 0000000..0e8a0eb
--- /dev/null
+++ b/bouyguestelecom/spin/.helmignore
@@ -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/
diff --git a/bouyguestelecom/spin/Chart.yaml b/bouyguestelecom/spin/Chart.yaml
new file mode 100644
index 0000000..c0bdd26
--- /dev/null
+++ b/bouyguestelecom/spin/Chart.yaml
@@ -0,0 +1,25 @@
+apiVersion: v2
+name: spin
+description: A Helm chart for Kubernetes
+sources:
+ - https://github.com/BouyguesTelecom/charts/tree/main/bouyguestelecom/spin
+# A chart can be either an 'application' or a 'library' chart.
+#
+# Application charts are a collection of templates that can be packaged into versioned archives
+# to be deployed.
+#
+# Library charts provide useful utilities or functions for the chart developer. They're included as
+# a dependency of application charts to inject those utilities and functions into the rendering
+# pipeline. Library charts do not define any templates and therefore cannot be deployed.
+type: application
+
+# This is the chart version. This version number should be incremented each time you make changes
+# to the chart and its templates, including the app version.
+# Versions are expected to follow Semantic Versioning (https://semver.org/)
+version: 0.1.0
+
+# This is the version number of the application being deployed. This version number should be
+# incremented each time you make changes to the application. Versions are not expected to
+# follow Semantic Versioning. They should reflect the version the application is using.
+# It is recommended to use it with quotes.
+appVersion: "1.16.0"
diff --git a/bouyguestelecom/spin/templates/NOTES.txt b/bouyguestelecom/spin/templates/NOTES.txt
new file mode 100644
index 0000000..ff7a78a
--- /dev/null
+++ b/bouyguestelecom/spin/templates/NOTES.txt
@@ -0,0 +1,22 @@
+1. Get the application URL by running these commands:
+{{- if .Values.ingress.enabled }}
+{{- range $host := .Values.ingress.hosts }}
+ {{- range .paths }}
+ http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }}
+ {{- end }}
+{{- end }}
+{{- else if contains "NodePort" .Values.service.type }}
+ export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ .Release.Name }})
+ 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 {{ .Release.Name }}'
+ export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ .Release.Name }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
+ echo http://$SERVICE_IP:{{ .Values.service.port }}
+{{- else if contains "ClusterIP" .Values.service.type }}
+ export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "spin.fullname" . }},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 }}
diff --git a/bouyguestelecom/spin/templates/_helpers.tpl b/bouyguestelecom/spin/templates/_helpers.tpl
new file mode 100644
index 0000000..dcb0e37
--- /dev/null
+++ b/bouyguestelecom/spin/templates/_helpers.tpl
@@ -0,0 +1,120 @@
+{{/*
+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 "spin.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 "spin.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Common labels
+*/}}
+{{- define "spin.labels" -}}
+helm.sh/chart: {{ include "spin.chart" . }}
+{{ include "spin.selectorLabels" . }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end }}
+
+{{- define "spin.subchart" -}}
+{{- printf "%s-%s" "webapp" .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Selector labels
+*/}}
+{{- define "spin.selectorLabels" -}}
+app.kubernetes.io/name: {{ include "spin.fullname" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end }}
+
+{{/*
+Create host
+*/}}
+{{- define "spin.host" -}}
+{{- printf "%s.%s" .Values.environment .Values.domain }}
+{{- end }}
+
+{{/*
+Detect which version of main image we should use
+*/}}
+{{- define "spin.version" -}}
+{{- if .Values.github.enabled }}
+{{- printf "Fetching latest tag from GitHub..." | quote -}}
+{{- printf -}}
+{{- $githubTag := printf "https://api.github.com/repos/%s/%s/releases/latest" .Values.github.organization .Values.github.repository | quote }}
+{{- $githubTagResponse := printf "$(curl -s %s)" $githubTag | quote }}
+{{- $githubTagResponse -}}
+{{- else }}
+{{- .Values.deployment.image.tag | quote -}}
+{{- end }}
+{{- end -}}
+
+{{/*
+Create the name of the service account to use
+*/}}
+{{- define "spin.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create }}
+{{- default (include "spin.fullname" .) .Values.serviceAccount.name }}
+{{- else }}
+{{- default "default" .Values.serviceAccount.name }}
+{{- end }}
+{{- end }}
+
+{{/*
+Create volumes mounts definition
+*/}}
+{{- define "spin.volumeMounts" -}}
+{{- if .Values.flux.configmap.enabled }}
+volumeMounts:
+- name: config-flux-volume
+mountPath: {{ .Values.flux.configmap.filepath -}}{{- .Values.flux.configmap.filename }}
+subPath: {{ .Values.flux.configmap.filename }}
+{{- end }}
+{{- with .Values.deployment.volumeMounts }}
+volumeMounts:
+ {{- toYaml . | nindent 2 }}
+{{- end }}
+{{- with .Values.deployment.extraVolumeMounts }}
+ {{- toYaml | nindent 2 }}
+{{- end }}
+{{- end }}
+
+{{/*
+Create volumes definition
+*/}}
+{{- define "spin.volumes" -}}
+ volumes:
+ {{- if .Values.flux.configmap.enabled }}
+ volumes:
+ - name: config-flux-volume
+ configMap:
+ name: {{ .Release.Name }}-config-flux
+ {{- end }}
+ {{- with .Values.deployment.volumes }}
+ {{- toYaml . | nindent 2 }}
+ {{- end }}
+ {{- with .Values.deployment.extraVolumes }}
+ {{- toYaml . | nindent 2 }}
+ {{- end }}
+{{- end }}
+
diff --git a/bouyguestelecom/spin/templates/cm.yaml b/bouyguestelecom/spin/templates/cm.yaml
new file mode 100644
index 0000000..5cb069c
--- /dev/null
+++ b/bouyguestelecom/spin/templates/cm.yaml
@@ -0,0 +1,18 @@
+{{- /*
+Copyright Bouygues Telecom SA
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if .Values.configFiles }}
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ .Release.Name }}-conf
+ labels:
+ {{- include "spin.labels" . | nindent 4 }}
+data:
+{{- range $filename, $content := .Values.configFiles }}
+ {{ $filename }}: |-
+{{ $content | indent 4 }}
+{{- end }}
+{{- end }}
diff --git a/bouyguestelecom/spin/templates/deployment.yaml b/bouyguestelecom/spin/templates/deployment.yaml
new file mode 100644
index 0000000..86aae3b
--- /dev/null
+++ b/bouyguestelecom/spin/templates/deployment.yaml
@@ -0,0 +1,104 @@
+{{- /*
+Copyright Bouygues Telecom SA
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ .Release.Name }}
+ labels:
+ {{- include "spin.labels" . | nindent 4 }}
+spec:
+ {{- if not .Values.autoscaling.enabled }}
+ replicas: {{ .Values.deployment.replicaCount }}
+ {{- end }}
+ selector:
+ matchLabels:
+ {{- include "spin.selectorLabels" . | nindent 6 }}
+ template:
+ metadata:
+ {{- with .Values.deployment.podAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ labels:
+ {{- include "spin.selectorLabels" . | nindent 8 }}
+ spec:
+ imagePullSecrets:
+ {{- if .Values.deployment.imagePullSecrets }}
+ {{- toYaml .Values.deployment.imagePullSecrets | nindent 2 }}
+ {{- else }}
+ - name: {{ .Release.Name }}-secret
+ {{- end }}
+ serviceAccountName: {{ include "spin.serviceAccountName" . }}
+ {{- if .Values.deployment.podSecurityContext.enabled }}
+ securityContext: {{- omit .Values.deployment.podSecurityContext "enabled" | toYaml | nindent 8 }}
+ {{- end }}
+ restartPolicy: {{ .Values.deployment.restartPolicy }}
+ {{- if .Values.deployment.extraInitContainers }}
+ initContainers:
+ {{- with .Values.deployment.extraInitContainers }}
+ {{- tpl . $ | nindent 8 }}
+ {{- end }}
+ {{- end }}
+ containers:
+ - name: {{ .Chart.Name }}
+ {{- if .Values.deployment.securityContext.enabled }}
+ securityContext:
+ {{- toYaml .Values.deployment.securityContext | nindent 12 }}
+ {{- end }}
+ image: {{ .Values.deployment.image.repository }}:{{ include "spin.version" . | replace "\"" "" }}
+ {{- with .Values.deployment.command }}
+ command:
+ {{- toYaml . | nindent 10 }}
+ {{- end }}
+ {{- with .Values.deployment.args }}
+ args:
+ {{- toYaml . | nindent 10 }}
+ {{- end }}
+ {{- with .Values.deployment.containerExtraSpecs }}
+ {{- tpl . $ | nindent 10 }}
+ {{- end }}
+ imagePullPolicy: {{ .Values.deployment.image.pullPolicy }}
+ ports:
+ - name: {{ .Values.service.httpPortName }}
+ containerPort: {{ default .Values.service.httpPort .Values.deployment.containerPort }}
+ {{- if or .Values.service.httpAdminPort .Values.deployment.containerAdminPort }}
+ - name: {{ .Values.service.httpAdminPortName }}
+ containerPort: {{ default .Values.service.httpAdminPort .Values.deployment.containerAdminPort }}
+ {{- end }}
+ {{- with .Values.deployment.containerExtraPorts }}
+ {{- tpl . $ | nindent 12 }}
+ {{- end }}
+ livenessProbe:
+ {{- toYaml .Values.deployment.livenessProbe | nindent 12 }}
+ readinessProbe:
+ {{- toYaml .Values.deployment.readinessProbe | nindent 12 }}
+ {{- with .Values.deployment.startupProbe }}
+ startupProbe:
+ {{- tpl . $ | nindent 12 }}
+ {{- end }}
+ resources:
+ {{- toYaml .Values.deployment.resources | nindent 12 }}
+ {{ include "spin.volumeMounts" . | nindent 10 }}
+ env:
+ {{- with .Values.deployment.containerEnv }}
+ {{- range .env }}
+ - name: {{ .name }}
+ value: {{ .value | quote }}
+ {{- end }}
+ {{- end }}
+ {{- with .Values.deployment.nodeSelector }}
+ nodeSelector:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.deployment.affinity }}
+ affinity:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.deployment.tolerations }}
+ tolerations:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{ include "spin.volumes" . | nindent 6 }}
diff --git a/bouyguestelecom/spin/templates/hpa.yaml b/bouyguestelecom/spin/templates/hpa.yaml
new file mode 100644
index 0000000..0ce5c42
--- /dev/null
+++ b/bouyguestelecom/spin/templates/hpa.yaml
@@ -0,0 +1,37 @@
+{{- /*
+Copyright Bouygues Telecom SA
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if .Values.autoscaling.enabled }}
+apiVersion: autoscaling/v2
+kind: HorizontalPodAutoscaler
+metadata:
+ name: {{ .Release.Name }}
+ labels:
+ {{- include "spin.labels" . | nindent 4 }}
+spec:
+ scaleTargetRef:
+ apiVersion: apps/v1
+ kind: Deployment
+ name: {{ .Release.Name }}
+ minReplicas: {{ .Values.autoscaling.minReplicas }}
+ maxReplicas: {{ .Values.autoscaling.maxReplicas }}
+ metrics:
+ {{- if .Values.autoscaling.targetCPUUtilizationPercentage }}
+ - type: Resource
+ resource:
+ name: cpu
+ target:
+ type: Utilization
+ averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }}
+ {{- end }}
+ {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }}
+ - type: Resource
+ resource:
+ name: memory
+ target:
+ type: Utilization
+ averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }}
+ {{- end }}
+{{- end }}
diff --git a/bouyguestelecom/spin/templates/ingress.yaml b/bouyguestelecom/spin/templates/ingress.yaml
new file mode 100644
index 0000000..a0dd4af
--- /dev/null
+++ b/bouyguestelecom/spin/templates/ingress.yaml
@@ -0,0 +1,82 @@
+{{- /*
+Copyright Bouygues Telecom SA
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if .Values.ingress.enabled -}}
+{{- $svcPort := .Values.service.httpPort -}}
+{{- $ingress := .Values.ingress -}}
+{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }}
+ {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }}
+ {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}}
+ {{- end }}
+{{- end }}
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+ name: {{ .Release.Name }}-ingress{{- if eq .Values.canary.enabled true }}-canary{{- end }}
+ labels:
+ {{- include "spin.labels" . | nindent 4 }}
+ {{- range $key, $value := $ingress.labels }}
+ {{- printf "%s: %s" $key (tpl $value $ | quote) | nindent 4 }}
+ {{- end }}
+ app.kubernetes.io/component: http
+ {{- if or .Values.ingress.annotations .Values.ingress.tls }}
+ annotations:
+ {{- if eq $.Values.canary.enabled true }}
+ nginx.ingress.kubernetes.io/canary: "true"
+ {{- if eq .Values.canary.header.enabled true }}
+ nginx.ingress.kubernetes.io/canary-by-header: {{ .Values.canary.header.name }}
+ {{- if or (kindIs "invalid" $.Values.canary.header.regex) (eq $.Values.canary.header.regex "") }}
+ nginx.ingress.kubernetes.io/canary-by-header-value: "true"
+ {{- else}}
+ nginx.ingress.kubernetes.io/canary-by-header-pattern: {{ .Values.canary.header.regex }}
+ {{- end}}
+ {{- end}}
+ {{- if eq $.Values.canary.cookie.enabled true }}
+ nginx.ingress.kubernetes.io/canary-by-cookie: {{ .Values.canary.cookie.name }}
+ {{- end}}
+ {{- if eq $.Values.canary.percent.enabled true }}
+ nginx.ingress.kubernetes.io/canary-weight: '{{ .Values.canary.percent.value }}'
+ {{- end}}
+ {{- end }}
+ {{- with .Values.ingress.annotations }}
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+ {{- end }}
+spec:
+{{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }}
+ ingressClassName: {{ .Values.ingress.className }}
+{{- end }}
+ tls:
+ - hosts:
+ {{- if and .Values.environment .Values.domain }}
+ - {{- include "spin.host" . | quote }}
+ {{- else }}
+ - {{ .Values.ingress.host }}
+ {{- end }}
+ {{- if .Values.ingress.tls.secretName }}
+ secretName: {{ .Values.ingress.tls.secretName }}
+ {{- else }}
+ secretName: {{ .Release.Name }}-tls
+ {{- end }}
+ rules:
+ {{- range .Values.ingress.rules }}
+ {{- if .host }}
+ - host: {{ tpl .host $ | quote }}
+ {{- end }}
+ http:
+ paths:
+ {{- range .paths }}
+ - path: {{ .path }}
+ {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }}
+ pathType: {{ .pathType }}
+ {{- end }}
+ backend:
+ service:
+ name: {{ .Release.Name }}-service
+ port:
+ number: {{ .backend.service.port.number | default $svcPort }}
+ {{- end }}
+ {{- end }}
+{{- end }}
diff --git a/bouyguestelecom/spin/templates/poddisruptionbudget.yaml b/bouyguestelecom/spin/templates/poddisruptionbudget.yaml
new file mode 100644
index 0000000..57d59da
--- /dev/null
+++ b/bouyguestelecom/spin/templates/poddisruptionbudget.yaml
@@ -0,0 +1,18 @@
+{{- /*
+Copyright Bouygues Telecom SA
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if .Values.podDisruptionBudget -}}
+apiVersion: policy/v1
+kind: PodDisruptionBudget
+metadata:
+ name: {{ .Release.Name }}
+ labels:
+ {{- include "spin.labels" . | nindent 4 }}
+spec:
+ {{- toYaml .Values.podDisruptionBudget | nindent 2 }}
+ selector:
+ matchLabels:
+ {{- include "spin.selectorLabels" . | nindent 6 }}
+{{- end -}}
diff --git a/bouyguestelecom/spin/templates/secret.yaml b/bouyguestelecom/spin/templates/secret.yaml
new file mode 100644
index 0000000..fd58e83
--- /dev/null
+++ b/bouyguestelecom/spin/templates/secret.yaml
@@ -0,0 +1,16 @@
+{{- /*
+Copyright Bouygues Telecom SA
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+apiVersion: v1
+kind: Secret
+metadata:
+ name: {{ .Release.Name }}-secret
+ labels:
+ {{- include "spin.labels" . | nindent 4 }}
+data:
+ {{- with .Values.secrets.data }}
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+type: {{ .Values.secrets.type }}
diff --git a/bouyguestelecom/spin/templates/service.yaml b/bouyguestelecom/spin/templates/service.yaml
new file mode 100644
index 0000000..7082cfd
--- /dev/null
+++ b/bouyguestelecom/spin/templates/service.yaml
@@ -0,0 +1,38 @@
+{{- /*
+Copyright Bouygues Telecom SA
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if .Values.service.enabled }}
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ .Release.Name }}-service
+ labels:
+ {{- include "spin.labels" . | nindent 4 }}
+ app.kubernetes.io/component: http
+spec:
+ type: {{ .Values.service.type }}
+ ports:
+ - name: {{ .Values.service.httpPortName }}
+ port: {{ .Values.service.httpPort }}
+ targetPort: {{ .Values.service.httpPortName }}
+ {{- if and (eq "NodePort" .Values.service.type) .Values.service.httpNodePort }}
+ nodePort: {{ .Values.service.httpNodePort }}
+ {{- end }}
+ protocol: TCP
+ {{- if or .Values.service.httpAdminPort .Values.service.httpAdminNodePort }}
+ - name: {{ .Values.service.httpAdminPortName }}
+ port: {{ .Values.service.httpAdminPort }}
+ targetPort: {{ .Values.service.httpAdminPortName }}
+ {{- if and (eq "NodePort" .Values.service.type) .Values.service.httpAdminNodePort }}
+ nodePort: {{ .Values.service.httpAdminNodePort }}
+ {{- end }}
+ protocol: TCP
+ {{- end }}
+ {{- with .Values.service.extraPorts }}
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+ selector:
+ {{- include "spin.selectorLabels" . | nindent 4 }}
+{{- end }}
diff --git a/bouyguestelecom/spin/templates/serviceaccount.yaml b/bouyguestelecom/spin/templates/serviceaccount.yaml
new file mode 100644
index 0000000..1fb9d61
--- /dev/null
+++ b/bouyguestelecom/spin/templates/serviceaccount.yaml
@@ -0,0 +1,22 @@
+{{- /*
+Copyright Bouygues Telecom SA
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+{{- if .Values.serviceAccount.create -}}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: {{ include "spin.serviceAccountName" . }}
+ labels:
+ {{- include "spin.labels" . | nindent 4 }}
+ {{- with .Values.serviceAccount.annotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end }}
+{{- if .Values.serviceAccount.imagePullSecrets }}
+imagePullSecrets:
+ {{- printf "- name: %s-dockercfg-xxxxx" (include "spin.fullname" .) | nindent 4 }}
+ {{- toYaml .Values.serviceAccount.imagePullSecrets | nindent 4 }}
+{{- end }}
diff --git a/bouyguestelecom/spin/templates/tests/test-connection.yaml b/bouyguestelecom/spin/templates/tests/test-connection.yaml
new file mode 100644
index 0000000..ade3a26
--- /dev/null
+++ b/bouyguestelecom/spin/templates/tests/test-connection.yaml
@@ -0,0 +1,20 @@
+{{- /*
+Copyright Bouygues Telecom SA
+SPDX-License-Identifier: APACHE-2.0
+*/}}
+
+apiVersion: v1
+kind: Pod
+metadata:
+ name: "{{ .Release.Name }}-test-connection"
+ labels:
+ {{- include "spin.labels" . | nindent 4 }}
+ annotations:
+ "helm.sh/hook": test
+spec:
+ containers:
+ - name: wget
+ image: busybox
+ command: ['wget']
+ args: ['{{ .Release.Name }}:{{ .Values.service.httpPort }}']
+ restartPolicy: Never
diff --git a/bouyguestelecom/spin/values.schema.json b/bouyguestelecom/spin/values.schema.json
new file mode 100644
index 0000000..3318b30
--- /dev/null
+++ b/bouyguestelecom/spin/values.schema.json
@@ -0,0 +1,1532 @@
+{
+ "$schema": "https://json-schema.org/draft/2019-09/schema",
+ "type": "object",
+ "title": "Root Schema for Helm template",
+ "required": [
+ "deployment",
+ "ingress",
+ "service",
+ "secrets"
+ ],
+ "properties": {
+ "fullnameOverride": {
+ "type": "string",
+ "default": "",
+ "title": "The fullnameOverride Schema",
+ "examples": [
+ ""
+ ]
+ },
+ "nameOverride": {
+ "type": "string",
+ "default": "",
+ "title": "The nameOverride Schema",
+ "examples": [
+ ""
+ ]
+ },
+ "deployment": {
+ "type": "object",
+ "default": {},
+ "title": "The deployment Schema",
+ "required": [
+ "containerPort",
+ "containerAdminPort",
+ "replicaCount",
+ "podAnnotations",
+ "imagePullSecrets",
+ "image",
+ "containerEnv",
+ "containerExtraPorts",
+ "containerExtraSpecs",
+ "args",
+ "podSecurityContext",
+ "extraInitContainers",
+ "restartPolicy",
+ "securityContext",
+ "volumes",
+ "volumeMounts",
+ "command",
+ "nodeSelector",
+ "affinity",
+ "readinessProbe",
+ "livenessProbe",
+ "resources",
+ "tolerations",
+ "startupProbe",
+ "extraVolumes",
+ "extraVolumeMounts"
+ ],
+ "properties": {
+ "containerPort": {
+ "type": "string",
+ "default": "",
+ "title": "The containerPort Schema",
+ "examples": [
+ ""
+ ]
+ },
+ "containerAdminPort": {
+ "type": "string",
+ "default": "",
+ "title": "The containerAdminPort Schema",
+ "examples": [
+ ""
+ ]
+ },
+ "replicaCount": {
+ "type": "integer",
+ "default": 0,
+ "title": "The replicaCount Schema",
+ "examples": [
+ 2
+ ]
+ },
+ "podAnnotations": {
+ "type": "object",
+ "default": {},
+ "title": "The podAnnotations Schema",
+ "required": [],
+ "properties": {},
+ "examples": [{}]
+ },
+ "imagePullSecrets": {
+ "type": "array",
+ "default": [],
+ "title": "The imagePullSecrets Schema",
+ "items": {},
+ "examples": [
+ []
+ ]
+ },
+ "image": {
+ "type": "object",
+ "default": {},
+ "title": "The image Schema",
+ "required": [
+ "repository",
+ "pullPolicy",
+ "tag"
+ ],
+ "properties": {
+ "repository": {
+ "type": "string",
+ "default": "",
+ "title": "The repository Schema",
+ "examples": [
+ "nginx"
+ ]
+ },
+ "pullPolicy": {
+ "type": "string",
+ "default": "",
+ "title": "The pullPolicy Schema",
+ "examples": [
+ "IfNotPresent"
+ ]
+ },
+ "tag": {
+ "type": "string",
+ "default": "",
+ "title": "The tag Schema",
+ "examples": [
+ "10"
+ ]
+ }
+ },
+ "examples": [{
+ "repository": "nginx",
+ "pullPolicy": "IfNotPresent",
+ "tag": "10"
+ }]
+ },
+ "containerEnv": {
+ "type": "object",
+ "default": {},
+ "title": "The containerEnv Schema",
+ "required": [],
+ "properties": {},
+ "examples": [{}]
+ },
+ "containerExtraPorts": {
+ "type": "string",
+ "default": "",
+ "title": "The containerExtraPorts Schema",
+ "examples": [
+ ""
+ ]
+ },
+ "containerExtraSpecs": {
+ "type": "string",
+ "default": "",
+ "title": "The containerExtraSpecs Schema",
+ "examples": [
+ ""
+ ]
+ },
+ "args": {
+ "type": "array",
+ "default": [],
+ "title": "The args Schema",
+ "items": {},
+ "examples": [
+ []
+ ]
+ },
+ "podSecurityContext": {
+ "type": "object",
+ "default": {},
+ "title": "The podSecurityContext Schema",
+ "required": [
+ "enabled",
+ "fsGroup"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean",
+ "default": false,
+ "title": "The enabled Schema",
+ "examples": [
+ false
+ ]
+ },
+ "fsGroup": {
+ "type": "integer",
+ "default": 0,
+ "title": "The fsGroup Schema",
+ "examples": [
+ 1001
+ ]
+ }
+ },
+ "examples": [{
+ "enabled": false,
+ "fsGroup": 1001
+ }]
+ },
+ "extraInitContainers": {
+ "type": "array",
+ "default": [],
+ "title": "The extraInitContainers Schema",
+ "items": {},
+ "examples": [
+ []
+ ]
+ },
+ "restartPolicy": {
+ "type": "string",
+ "default": "",
+ "title": "The restartPolicy Schema",
+ "examples": [
+ "Always"
+ ]
+ },
+ "securityContext": {
+ "type": "object",
+ "default": {},
+ "title": "The securityContext Schema",
+ "required": [
+ "enabled"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean",
+ "default": false,
+ "title": "The enabled Schema",
+ "examples": [
+ false
+ ]
+ }
+ },
+ "examples": [{
+ "enabled": false
+ }]
+ },
+ "volumes": {
+ "type": "array",
+ "default": [],
+ "title": "The volumes Schema",
+ "examples": [
+ ""
+ ]
+ },
+ "volumeMounts": {
+ "type": "array",
+ "default": [],
+ "title": "The volumeMounts Schema",
+ "examples": [
+ ""
+ ]
+ },
+ "command": {
+ "type": "array",
+ "default": [],
+ "title": "The command Schema",
+ "items": {},
+ "examples": [
+ []
+ ]
+ },
+ "nodeSelector": {
+ "type": "object",
+ "default": {},
+ "title": "The nodeSelector Schema",
+ "required": [],
+ "properties": {},
+ "examples": [{}]
+ },
+ "affinity": {
+ "type": "object",
+ "default": {},
+ "title": "The affinity Schema",
+ "required": [],
+ "properties": {},
+ "examples": [{}]
+ },
+ "readinessProbe": {
+ "type": "object",
+ "default": {},
+ "title": "The readinessProbe Schema",
+ "required": [
+ "httpGet",
+ "initialDelaySeconds",
+ "timeoutSeconds",
+ "periodSeconds",
+ "successThreshold",
+ "failureThreshold"
+ ],
+ "properties": {
+ "httpGet": {
+ "type": "object",
+ "default": {},
+ "title": "The httpGet Schema",
+ "required": [
+ "path",
+ "port",
+ "scheme"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "default": "",
+ "title": "The path Schema",
+ "examples": [
+ "/"
+ ]
+ },
+ "port": {
+ "type": "integer",
+ "default": 0,
+ "title": "The port Schema",
+ "examples": [
+ 80
+ ]
+ },
+ "scheme": {
+ "type": "string",
+ "default": "",
+ "title": "The scheme Schema",
+ "examples": [
+ "HTTP"
+ ]
+ }
+ },
+ "examples": [{
+ "path": "/",
+ "port": 80,
+ "scheme": "HTTP"
+ }]
+ },
+ "initialDelaySeconds": {
+ "type": "integer",
+ "default": 0,
+ "title": "The initialDelaySeconds Schema",
+ "examples": [
+ 5
+ ]
+ },
+ "timeoutSeconds": {
+ "type": "integer",
+ "default": 0,
+ "title": "The timeoutSeconds Schema",
+ "examples": [
+ 5
+ ]
+ },
+ "periodSeconds": {
+ "type": "integer",
+ "default": 0,
+ "title": "The periodSeconds Schema",
+ "examples": [
+ 5
+ ]
+ },
+ "successThreshold": {
+ "type": "integer",
+ "default": 0,
+ "title": "The successThreshold Schema",
+ "examples": [
+ 1
+ ]
+ },
+ "failureThreshold": {
+ "type": "integer",
+ "default": 0,
+ "title": "The failureThreshold Schema",
+ "examples": [
+ 10
+ ]
+ }
+ },
+ "examples": [{
+ "httpGet": {
+ "path": "/",
+ "port": 80,
+ "scheme": "HTTP"
+ },
+ "initialDelaySeconds": 5,
+ "timeoutSeconds": 5,
+ "periodSeconds": 5,
+ "successThreshold": 1,
+ "failureThreshold": 10
+ }]
+ },
+ "livenessProbe": {
+ "type": "object",
+ "default": {},
+ "title": "The livenessProbe Schema",
+ "required": [
+ "httpGet",
+ "initialDelaySeconds",
+ "timeoutSeconds",
+ "periodSeconds",
+ "successThreshold",
+ "failureThreshold"
+ ],
+ "properties": {
+ "httpGet": {
+ "type": "object",
+ "default": {},
+ "title": "The httpGet Schema",
+ "required": [
+ "path",
+ "port",
+ "scheme"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "default": "",
+ "title": "The path Schema",
+ "examples": [
+ "/"
+ ]
+ },
+ "port": {
+ "type": "integer",
+ "default": 0,
+ "title": "The port Schema",
+ "examples": [
+ 80
+ ]
+ },
+ "scheme": {
+ "type": "string",
+ "default": "",
+ "title": "The scheme Schema",
+ "examples": [
+ "HTTP"
+ ]
+ }
+ },
+ "examples": [{
+ "path": "/",
+ "port": 80,
+ "scheme": "HTTP"
+ }]
+ },
+ "initialDelaySeconds": {
+ "type": "integer",
+ "default": 0,
+ "title": "The initialDelaySeconds Schema",
+ "examples": [
+ 50
+ ]
+ },
+ "timeoutSeconds": {
+ "type": "integer",
+ "default": 0,
+ "title": "The timeoutSeconds Schema",
+ "examples": [
+ 1
+ ]
+ },
+ "periodSeconds": {
+ "type": "integer",
+ "default": 0,
+ "title": "The periodSeconds Schema",
+ "examples": [
+ 10
+ ]
+ },
+ "successThreshold": {
+ "type": "integer",
+ "default": 0,
+ "title": "The successThreshold Schema",
+ "examples": [
+ 1
+ ]
+ },
+ "failureThreshold": {
+ "type": "integer",
+ "default": 0,
+ "title": "The failureThreshold Schema",
+ "examples": [
+ 5
+ ]
+ }
+ },
+ "examples": [{
+ "httpGet": {
+ "path": "/",
+ "port": 80,
+ "scheme": "HTTP"
+ },
+ "initialDelaySeconds": 50,
+ "timeoutSeconds": 1,
+ "periodSeconds": 10,
+ "successThreshold": 1,
+ "failureThreshold": 5
+ }]
+ },
+ "resources": {
+ "type": "object",
+ "default": {},
+ "title": "The resources Schema",
+ "required": [],
+ "properties": {
+ "limits": {
+ "type": "object",
+ "default": {},
+ "title": "The limits Schema",
+ "required": [
+ "cpu",
+ "memory"
+ ],
+ "properties": {
+ "cpu": {
+ "type": "string",
+ "default": "",
+ "title": "The cpu Schema",
+ "examples": [
+ "500m"
+ ]
+ },
+ "memory": {
+ "type": "string",
+ "default": "",
+ "title": "The memory Schema",
+ "examples": [
+ "1Gi"
+ ]
+ }
+ },
+ "examples": [{
+ "cpu": "500m",
+ "memory": "1Gi"
+ }]
+ },
+ "requests": {
+ "type": "object",
+ "default": {},
+ "title": "The requests Schema",
+ "required": [
+ "cpu",
+ "memory"
+ ],
+ "properties": {
+ "cpu": {
+ "type": "string",
+ "default": "",
+ "title": "The cpu Schema",
+ "examples": [
+ "100m"
+ ]
+ },
+ "memory": {
+ "type": "string",
+ "default": "",
+ "title": "The memory Schema",
+ "examples": [
+ "128Mi"
+ ]
+ }
+ },
+ "examples": [{
+ "cpu": "100m",
+ "memory": "128Mi"
+ }]
+ }
+ },
+ "examples": [{
+ "limits": {
+ "cpu": "100m",
+ "memory": "128Mi"
+ },
+ "requests": {
+ "cpu": "100m",
+ "memory": "128Mi"
+ }
+ }]
+ },
+ "tolerations": {
+ "type": "array",
+ "default": [],
+ "title": "The tolerations Schema",
+ "items": {},
+ "examples": [
+ []
+ ]
+ },
+ "startupProbe": {
+ "type": "string",
+ "default": "",
+ "title": "The startupProbe Schema",
+ "examples": [
+ ""
+ ]
+ },
+ "extraVolumes": {
+ "type": "array",
+ "default": [],
+ "title": "The extraVolumes Schema",
+ "examples": [
+ ""
+ ]
+ },
+ "extraVolumeMounts": {
+ "type": "string",
+ "default": "",
+ "title": "The extraVolumeMounts Schema",
+ "examples": [
+ ""
+ ]
+ }
+ },
+ "examples": [{
+ "containerPort": "",
+ "containerAdminPort": "",
+ "replicaCount": 2,
+ "podAnnotations": {},
+ "imagePullSecrets": [],
+ "image": {
+ "repository": "nginx",
+ "pullPolicy": "IfNotPresent",
+ "tag": "10"
+ },
+ "containerEnv": {},
+ "containerExtraPorts": "",
+ "containerExtraSpecs": "",
+ "args": [],
+ "podSecurityContext": {
+ "enabled": false,
+ "fsGroup": 1001
+ },
+ "extraInitContainers": [],
+ "restartPolicy": "Always",
+ "securityContext": {
+ "enabled": false
+ },
+ "volumes": [],
+ "volumeMounts": [],
+ "command": [],
+ "nodeSelector": {},
+ "affinity": {},
+ "readinessProbe": {
+ "httpGet": {
+ "path": "/",
+ "port": 80,
+ "scheme": "HTTP"
+ },
+ "initialDelaySeconds": 5,
+ "timeoutSeconds": 5,
+ "periodSeconds": 5,
+ "successThreshold": 1,
+ "failureThreshold": 10
+ },
+ "livenessProbe": {
+ "httpGet": {
+ "path": "/",
+ "port": 80,
+ "scheme": "HTTP"
+ },
+ "initialDelaySeconds": 50,
+ "timeoutSeconds": 1,
+ "periodSeconds": 10,
+ "successThreshold": 1,
+ "failureThreshold": 5
+ },
+ "resources": {
+ "limits": {
+ "cpu": "100m",
+ "memory": "128Mi"
+ },
+ "requests": {
+ "cpu": "100m",
+ "memory": "128Mi"
+ }
+ },
+ "tolerations": [],
+ "startupProbe": "",
+ "extraVolumes": [],
+ "extraVolumeMounts": ""
+ }]
+ },
+ "autoscaling": {
+ "type": "object",
+ "default": {},
+ "title": "The autoscaling Schema",
+ "required": [
+ "enabled",
+ "minReplicas",
+ "maxReplicas",
+ "targetCPUUtilizationPercentage",
+ "targetMemoryUtilizationPercentage"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean",
+ "default": false,
+ "title": "The enabled Schema",
+ "examples": [
+ true
+ ]
+ },
+ "minReplicas": {
+ "type": "integer",
+ "default": 0,
+ "title": "The minReplicas Schema",
+ "examples": [
+ 2
+ ]
+ },
+ "maxReplicas": {
+ "type": "integer",
+ "default": 0,
+ "title": "The maxReplicas Schema",
+ "examples": [
+ 10
+ ]
+ },
+ "targetCPUUtilizationPercentage": {
+ "type": "integer",
+ "default": 0,
+ "title": "The targetCPUUtilizationPercentage Schema",
+ "examples": [
+ 100
+ ]
+ },
+ "targetMemoryUtilizationPercentage": {
+ "type": "integer",
+ "default": 0,
+ "title": "The targetMemoryUtilizationPercentage Schema",
+ "examples": [
+ 100
+ ]
+ }
+ },
+ "examples": [{
+ "enabled": true,
+ "minReplicas": 2,
+ "maxReplicas": 10,
+ "targetCPUUtilizationPercentage": 100,
+ "targetMemoryUtilizationPercentage": 100
+ }]
+ },
+ "ingress": {
+ "type": "object",
+ "default": {},
+ "title": "The ingress Schema",
+ "required": [
+ "enabled",
+ "labels",
+ "className",
+ "annotations",
+ "host",
+ "tls",
+ "rules"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean",
+ "default": false,
+ "title": "The enabled Schema",
+ "examples": [
+ true
+ ]
+ },
+ "labels": {
+ "type": "object",
+ "default": {},
+ "title": "The labels Schema",
+ "required": [],
+ "properties": {},
+ "examples": [{}]
+ },
+ "className": {
+ "type": "string",
+ "default": "",
+ "title": "The className Schema",
+ "examples": [
+ ""
+ ]
+ },
+ "annotations": {
+ "type": "object",
+ "default": {},
+ "title": "The annotations Schema",
+ "required": [],
+ "properties": {},
+ "examples": [{}]
+ },
+ "host": {
+ "type": "string",
+ "default": "",
+ "title": "The host Schema",
+ "examples": [
+ "your-host"
+ ]
+ },
+ "tls": {
+ "type": "object",
+ "default": {},
+ "title": "The tls Schema",
+ "required": [
+ "secretName"
+ ],
+ "properties": {
+ "secretName": {
+ "type": "string",
+ "default": "",
+ "title": "The secretName Schema",
+ "examples": [
+ ""
+ ]
+ }
+ },
+ "examples": [{
+ "secretName": ""
+ }]
+ },
+ "rules": {
+ "type": "array",
+ "default": [],
+ "title": "The rules Schema",
+ "items": {
+ "type": "object",
+ "default": {},
+ "title": "A Schema",
+ "required": [
+ "host",
+ "paths"
+ ],
+ "properties": {
+ "host": {
+ "type": "string",
+ "default": "",
+ "title": "The host Schema",
+ "examples": [
+ "chart-example.local"
+ ]
+ },
+ "paths": {
+ "type": "array",
+ "default": [],
+ "title": "The paths Schema",
+ "items": {
+ "type": "object",
+ "default": {},
+ "title": "A Schema",
+ "required": [
+ "path",
+ "pathType"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "default": "",
+ "title": "The path Schema",
+ "examples": [
+ "/"
+ ]
+ },
+ "pathType": {
+ "type": "string",
+ "default": "",
+ "title": "The pathType Schema",
+ "examples": [
+ "ImplementationSpecific"
+ ]
+ }
+ },
+ "examples": [{
+ "path": "/",
+ "pathType": "ImplementationSpecific"
+ }]
+ },
+ "examples": [
+ [{
+ "path": "/",
+ "pathType": "ImplementationSpecific"
+ }]
+ ]
+ }
+ },
+ "examples": [{
+ "host": "chart-example.local",
+ "paths": [{
+ "path": "/",
+ "pathType": "ImplementationSpecific"
+ }]
+ }]
+ },
+ "examples": [
+ [{
+ "host": "chart-example.local",
+ "paths": [{
+ "path": "/",
+ "pathType": "ImplementationSpecific"
+ }]
+ }]
+ ]
+ }
+ },
+ "examples": [{
+ "enabled": true,
+ "labels": {},
+ "className": "",
+ "annotations": {},
+ "host": "your-host",
+ "tls": {
+ "secretName": ""
+ },
+ "rules": [{
+ "host": "chart-example.local",
+ "paths": [{
+ "path": "/",
+ "pathType": "ImplementationSpecific"
+ }]
+ }]
+ }]
+ },
+ "service": {
+ "type": "object",
+ "default": {},
+ "title": "The service Schema",
+ "required": [
+ "enabled",
+ "httpPortName",
+ "type",
+ "httpPort",
+ "httpNodePort",
+ "httpAdminPort",
+ "httpAdminPortName",
+ "httpAdminNodePort",
+ "extraPorts"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean",
+ "default": false,
+ "title": "The enabled Schema",
+ "examples": [
+ true
+ ]
+ },
+ "httpPortName": {
+ "type": "string",
+ "default": "",
+ "title": "The httpPortName Schema",
+ "examples": [
+ "http"
+ ]
+ },
+ "type": {
+ "type": "string",
+ "default": "",
+ "title": "The type Schema",
+ "examples": [
+ "ClusterIP"
+ ]
+ },
+ "httpPort": {
+ "type": "integer",
+ "default": 0,
+ "title": "The httpPort Schema",
+ "examples": [
+ 8080
+ ]
+ },
+ "httpNodePort": {
+ "type": "string",
+ "default": "",
+ "title": "The httpNodePort Schema",
+ "examples": [
+ ""
+ ]
+ },
+ "httpAdminPort": {
+ "type": "integer",
+ "default": 0,
+ "title": "The httpAdminPort Schema",
+ "examples": [
+ 8081
+ ]
+ },
+ "httpAdminPortName": {
+ "type": "string",
+ "default": "",
+ "title": "The httpAdminPortName Schema",
+ "examples": [
+ "http-admin"
+ ]
+ },
+ "httpAdminNodePort": {
+ "type": "string",
+ "default": "",
+ "title": "The httpAdminNodePort Schema",
+ "examples": [
+ ""
+ ]
+ },
+ "extraPorts": {
+ "type": "array",
+ "default": [],
+ "title": "The extraPorts Schema",
+ "items": {},
+ "examples": [
+ []
+ ]
+ }
+ },
+ "examples": [{
+ "enabled": true,
+ "httpPortName": "http",
+ "type": "ClusterIP",
+ "httpPort": 8080,
+ "httpNodePort": "",
+ "httpAdminPort": 8081,
+ "httpAdminPortName": "http-admin",
+ "httpAdminNodePort": "",
+ "extraPorts": []
+ }]
+ },
+ "serviceAccount": {
+ "type": "object",
+ "default": {},
+ "title": "The serviceAccount Schema",
+ "required": [
+ "create",
+ "annotations",
+ "name",
+ "imagePullSecrets"
+ ],
+ "properties": {
+ "create": {
+ "type": "boolean",
+ "default": false,
+ "title": "The create Schema",
+ "examples": [
+ true
+ ]
+ },
+ "annotations": {
+ "type": "object",
+ "default": {},
+ "title": "The annotations Schema",
+ "required": [],
+ "properties": {},
+ "examples": [{}]
+ },
+ "name": {
+ "type": "string",
+ "default": "",
+ "title": "The name Schema",
+ "examples": [
+ ""
+ ]
+ },
+ "imagePullSecrets": {
+ "type": "array",
+ "default": [],
+ "title": "The imagePullSecrets Schema",
+ "items": {},
+ "examples": [
+ []
+ ]
+ }
+ },
+ "examples": [{
+ "create": true,
+ "annotations": {},
+ "name": "",
+ "imagePullSecrets": []
+ }]
+ },
+ "canary": {
+ "type": "object",
+ "default": {},
+ "title": "The canary Schema",
+ "required": [
+ "enabled",
+ "header",
+ "cookie",
+ "percent"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean",
+ "default": false,
+ "title": "The enabled Schema",
+ "examples": [
+ false
+ ]
+ },
+ "header": {
+ "type": "object",
+ "default": {},
+ "title": "The header Schema",
+ "required": [
+ "enabled",
+ "name",
+ "regex"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean",
+ "default": false,
+ "title": "The enabled Schema",
+ "examples": [
+ false
+ ]
+ },
+ "name": {
+ "type": "string",
+ "default": "",
+ "title": "The name Schema",
+ "examples": [
+ "cookie"
+ ]
+ },
+ "regex": {
+ "type": "string",
+ "default": "",
+ "title": "The regex Schema",
+ "examples": [
+ " "
+ ]
+ }
+ },
+ "examples": [{
+ "enabled": false,
+ "name": "cookie",
+ "regex": ""
+ }]
+ },
+ "cookie": {
+ "type": "object",
+ "default": {},
+ "title": "The cookie Schema",
+ "required": [
+ "enabled",
+ "name"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean",
+ "default": false,
+ "title": "The enabled Schema",
+ "examples": [
+ false
+ ]
+ },
+ "name": {
+ "type": "string",
+ "default": "",
+ "title": "The name Schema",
+ "examples": [
+ "x-hidden-prod"
+ ]
+ }
+ },
+ "examples": [{
+ "enabled": false,
+ "name": "x-hidden-prod"
+ }]
+ },
+ "percent": {
+ "type": "object",
+ "default": {},
+ "title": "The percent Schema",
+ "required": [
+ "enabled",
+ "value"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean",
+ "default": false,
+ "title": "The enabled Schema",
+ "examples": [
+ false
+ ]
+ },
+ "value": {
+ "type": "integer",
+ "default": 0,
+ "title": "The value Schema",
+ "examples": [
+ 20
+ ]
+ }
+ },
+ "examples": [{
+ "enabled": false,
+ "value": 20
+ }]
+ }
+ },
+ "examples": [{
+ "enabled": false,
+ "header": {
+ "enabled": false,
+ "name": "cookie",
+ "regex": ""
+ },
+ "cookie": {
+ "enabled": false,
+ "name": "x-hidden-prod"
+ },
+ "percent": {
+ "enabled": false,
+ "value": 20
+ }
+ }]
+ },
+ "flux": {
+ "type": "object",
+ "default": {},
+ "title": "The flux Schema",
+ "required": [
+ "enabled",
+ "configmap",
+ "internal"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean",
+ "default": false,
+ "title": "The enabled Schema",
+ "examples": [
+ false
+ ]
+ },
+ "configmap": {
+ "type": "object",
+ "default": {},
+ "title": "The configmap Schema",
+ "required": [
+ "enabled",
+ "filepath",
+ "filename"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean",
+ "default": false,
+ "title": "The enabled Schema",
+ "examples": [
+ false
+ ]
+ },
+ "filepath": {
+ "type": "string",
+ "default": "",
+ "title": "The filepath Schema",
+ "examples": [
+ "/usr/src/app/"
+ ]
+ },
+ "filename": {
+ "type": "string",
+ "default": "",
+ "title": "The filename Schema",
+ "examples": [
+ "flux.json"
+ ]
+ }
+ },
+ "examples": [{
+ "enabled": false,
+ "filepath": "/usr/src/app/",
+ "filename": "flux.json"
+ }]
+ },
+ "internal": {
+ "type": "object",
+ "default": {},
+ "title": "The internal Schema",
+ "required": [],
+ "properties": {},
+ "examples": [{}]
+ }
+ },
+ "examples": [{
+ "enabled": false,
+ "configmap": {
+ "enabled": false,
+ "filepath": "/usr/src/app/",
+ "filename": "flux.json"
+ },
+ "internal": {}
+ }]
+ },
+ "podDisruptionBudget": {
+ "type": "object",
+ "default": {},
+ "title": "The podDisruptionBudget Schema",
+ "required": [],
+ "properties": {},
+ "examples": [{}]
+ },
+ "secrets": {
+ "type": "object",
+ "default": {},
+ "title": "The secrets Schema",
+ "required": [
+ "data",
+ "type"
+ ],
+ "properties": {
+ "data": {
+ "type": "object",
+ "default": {},
+ "title": "The data Schema",
+ "required": [],
+ "properties": {},
+ "examples": [{}]
+ },
+ "type": {
+ "type": "string",
+ "default": "",
+ "title": "The type Schema",
+ "examples": [
+ ""
+ ]
+ }
+ },
+ "examples": [{
+ "data": {},
+ "type": ""
+ }]
+ },
+ "configFiles": {
+ "type": "object",
+ "default": {},
+ "title": "The configFiles Schema",
+ "required": [],
+ "properties": {},
+ "examples": [{}]
+ },
+ "github": {
+ "type": "object",
+ "default": {},
+ "title": "The github Schema",
+ "required": [
+ "enabled",
+ "organization",
+ "repository"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean",
+ "default": false,
+ "title": "The enabled Schema",
+ "examples": [
+ false
+ ]
+ },
+ "organization": {
+ "type": "string",
+ "default": "",
+ "title": "The organization Schema",
+ "examples": [
+ "votre-organisation"
+ ]
+ },
+ "repository": {
+ "type": "string",
+ "default": "",
+ "title": "The repository Schema",
+ "examples": [
+ "votre-repo"
+ ]
+ }
+ },
+ "examples": [{
+ "enabled": false,
+ "organization": "votre-organisation",
+ "repository": "votre-repo"
+ }]
+ }
+ },
+ "examples": [{
+ "fullnameOverride": "",
+ "nameOverride": "",
+ "deployment": {
+ "containerPort": "",
+ "containerAdminPort": "",
+ "replicaCount": 2,
+ "podAnnotations": {},
+ "imagePullSecrets": [],
+ "image": {
+ "repository": "nginx",
+ "pullPolicy": "IfNotPresent",
+ "tag": "10"
+ },
+ "containerEnv": {},
+ "containerExtraPorts": "",
+ "containerExtraSpecs": "",
+ "args": [],
+ "podSecurityContext": {
+ "enabled": false,
+ "fsGroup": 1001
+ },
+ "extraInitContainers": [],
+ "restartPolicy": "Always",
+ "securityContext": {
+ "enabled": false
+ },
+ "volumes": [],
+ "volumeMounts": [],
+ "command": [],
+ "nodeSelector": {},
+ "affinity": {},
+ "readinessProbe": {
+ "httpGet": {
+ "path": "/",
+ "port": 80,
+ "scheme": "HTTP"
+ },
+ "initialDelaySeconds": 5,
+ "timeoutSeconds": 5,
+ "periodSeconds": 5,
+ "successThreshold": 1,
+ "failureThreshold": 10
+ },
+ "livenessProbe": {
+ "httpGet": {
+ "path": "/",
+ "port": 80,
+ "scheme": "HTTP"
+ },
+ "initialDelaySeconds": 50,
+ "timeoutSeconds": 1,
+ "periodSeconds": 10,
+ "successThreshold": 1,
+ "failureThreshold": 5
+ },
+ "resources": {
+ "limits": {
+ "cpu": "100m",
+ "memory": "128Mi"
+ },
+ "requests": {
+ "cpu": "100m",
+ "memory": "128Mi"
+ }
+ },
+ "tolerations": [],
+ "startupProbe": "",
+ "extraVolumes": [],
+ "extraVolumeMounts": ""
+ },
+ "autoscaling": {
+ "enabled": true,
+ "minReplicas": 2,
+ "maxReplicas": 10,
+ "targetCPUUtilizationPercentage": 100,
+ "targetMemoryUtilizationPercentage": 100
+ },
+ "ingress": {
+ "enabled": true,
+ "labels": {},
+ "className": "",
+ "annotations": {},
+ "host": "your-host",
+ "tls": {
+ "secretName": ""
+ },
+ "rules": [{
+ "host": "chart-example.local",
+ "paths": [{
+ "path": "/",
+ "pathType": "ImplementationSpecific"
+ }]
+ }]
+ },
+ "service": {
+ "enabled": true,
+ "httpPortName": "http",
+ "type": "ClusterIP",
+ "httpPort": 8080,
+ "httpNodePort": "",
+ "httpAdminPort": 8081,
+ "httpAdminPortName": "http-admin",
+ "httpAdminNodePort": "",
+ "extraPorts": []
+ },
+ "serviceAccount": {
+ "create": true,
+ "annotations": {},
+ "name": "",
+ "imagePullSecrets": []
+ },
+ "canary": {
+ "enabled": false,
+ "header": {
+ "enabled": false,
+ "name": "cookie",
+ "regex": ""
+ },
+ "cookie": {
+ "enabled": false,
+ "name": "x-hidden-prod"
+ },
+ "percent": {
+ "enabled": false,
+ "value": 20
+ }
+ },
+ "flux": {
+ "enabled": false,
+ "configmap": {
+ "enabled": false,
+ "filepath": "/usr/src/app/",
+ "filename": "flux.json"
+ },
+ "internal": {}
+ },
+ "podDisruptionBudget": {},
+ "secrets": {
+ "data": {},
+ "type": ""
+ },
+ "configFiles": {},
+ "github": {
+ "enabled": false,
+ "organization": "votre-organisation",
+ "repository": "votre-repo"
+ }
+ }]
+}
\ No newline at end of file
diff --git a/bouyguestelecom/spin/values.yaml b/bouyguestelecom/spin/values.yaml
new file mode 100644
index 0000000..36f3f05
--- /dev/null
+++ b/bouyguestelecom/spin/values.yaml
@@ -0,0 +1,273 @@
+# Default values for spin.
+# This is a YAML-formatted file.
+
+# Override the fully qualified name
+fullnameOverride: ""
+
+# Optionally override the name
+nameOverride: ""
+
+# -- Deployment
+deployment:
+ # -- If defined, forces the container to use a port other than the one defined in service.httpPort.
+ containerPort: ''
+ # -- If defined, forces the container to use an admin port other than the one defined in service.httpAdminPort.
+ containerAdminPort: ''
+ # -- ReplicaCount for the Pod
+ replicaCount: 2
+ # -- Additional annotations for the Pod
+ podAnnotations: {}
+ imagePullSecrets: []
+ # -- Docker image configuration settings
+ image:
+ # -- docker image repository url
+ repository: nginx
+ # -- docker image pull policy
+ pullPolicy: IfNotPresent
+ # -- docker image tag
+ tag: "10"
+ # -- Additional ENV
+ containerEnv: {}
+ # -- Add extra ports to container
+ containerExtraPorts: ''
+ # -- Add extra specifications to container
+ containerExtraSpecs: ''
+ # -- Additional arguments to pass to the command
+ args: [ ]
+ # -- Pod-level security context configuration
+ podSecurityContext:
+ # -- Enable or disable the pod security context
+ enabled: false
+ # -- Set the File System Group (fsGroup) for the pod volumes
+ fsGroup: 1001 ## generic value
+ # -- Add initContainers
+ extraInitContainers: []
+ # -- Pod restart policy. One of `Always`, `OnFailure`, or `Never`
+ restartPolicy: Always
+ # -- Security context
+ securityContext:
+ enabled: false
+ # capabilities:
+ # drop:
+ # - ALL
+ # readOnlyRootFilesystem: true
+ # runAsNonRoot: true
+ # runAsUser: 1000
+ # Volumes
+ volumes: []
+ # - name: kafka-jks
+ # configMap:
+ # name: {{ include "spin.fullName" . }}-conf-kafka-jks
+ # Command to execute within the container
+ # -- VolumeMounts
+ volumeMounts: []
+ # - name: kafka-jks
+ # mountPath: /home/devops/config/kafka
+ command: []
+ # -- Node Selector settings for pod scheduling
+ # -- An empty object means no node selector is applied, and the pod can be scheduled on any node
+ nodeSelector: {}
+ # -- Pod affinity configurartion : Hard node and soft zone anti-affinity
+ affinity: {}
+ # -- Readiness probe configuration
+ readinessProbe:
+ httpGet:
+ # -- The path to be used for the HTTP GET request
+ path: /
+ # -- The port on which to perform the GET request
+ port: 80
+ # -- The scheme for the GET request (e.g., HTTP or HTTPS)
+ scheme: HTTP
+ # -- Initial delay before starting the check (in seconds)
+ initialDelaySeconds: 5
+ # -- Maximum wait time for a response (in seconds)
+ timeoutSeconds: 5
+ # -- Check frequency (in seconds)
+ periodSeconds: 5
+ # -- Number of consecutive successful checks to be considered ready
+ successThreshold: 1
+ # -- Number of consecutive unsuccessful checks to be considered not ready
+ failureThreshold: 10
+ # -- Liveness probe configuration
+ livenessProbe:
+ httpGet:
+ # -- The path to be used for the HTTP GET request
+ path: /
+ # -- The port on which to perform the GET request
+ port: 80
+ # -- The scheme for the GET request (e.g., HTTP or HTTPS)
+ scheme: HTTP
+ # -- Initial delay before starting the check (in seconds)
+ initialDelaySeconds: 50
+ # -- Maximum wait time for a response (in seconds)
+ timeoutSeconds: 1
+ # -- Check frequency (in seconds)
+ periodSeconds: 10
+ # -- Number of consecutive successful checks to be considered alive
+ successThreshold: 1
+ # -- Number of consecutive unsuccessful checks to be considered not alive
+ failureThreshold: 5
+ # -- Resource Management for Pods and Containers
+ resources:
+ limits:
+ cpu: "500m"
+ memory: "1Gi"
+ requests:
+ cpu: "100m"
+ memory: "128Mi"
+ # -- Tolerations for pod assignment
+ # -- Empty list means no tolerations are applied
+ tolerations: [ ]
+ # -- Startup probe settings (overrides liveness and readiness for slow-starting pods)
+ # -- Empty means no startup probe is configured
+ startupProbe: |
+ # -- Add additionnal volumes
+ extraVolumes: []
+ # - name: application-config
+ # configMap:
+ # name: {{ include "spin.fullName" . }}-conf
+ # - name: logback-config
+ # configMap:
+ # name: {{ include "spin.fullName" . }}-conf
+ # -- Add additionnal volumeMounts
+ extraVolumeMounts: ""
+ # - name: application-config
+ # mountPath: /home/devops/config/application.yml
+ # subPath: application.yml
+ # readOnly: true
+ # - name: logback-config
+ # mountPath: /home/devops/config/logback.xml
+ # subPath: logback.xml
+ # readOnly: true
+
+# -- Autoscaling
+autoscaling:
+ # -- Enable or disable Horizontal Pod Autoscaler (Autoscalling)
+ enabled: true
+ # -- Minimum number of pod replicas
+ minReplicas: 2
+ # -- Maximum number of pod replicas
+ maxReplicas: 10
+ # -- target CPU Utilization Percentage
+ targetCPUUtilizationPercentage: 100
+ # -- target Memory Utilization Percentage
+ targetMemoryUtilizationPercentage: 100
+
+# -- Ingress configuration
+ingress:
+ # -- Enable or disable the creation of an Ingress resource for the deployment
+ enabled: true
+ # -- Additional labels for the Ingress
+ labels: {}
+ className: ""
+ # -- Additional annotations for the Ingress
+ annotations: {}
+ # kubernetes.io/ingress.class: nginx
+ # kubernetes.io/tls-acme: "true"
+ host: "your-host"
+ tls:
+ secretName: ''
+ # -- List of rules for the Ingress
+ rules:
+ - host: chart-example.local
+ paths:
+ - path: /
+ pathType: ImplementationSpecific
+
+# -- Service configuration
+service:
+ # -- Enable or disable the creation of a Kubernetes service for the deployment
+ enabled: true
+ httpPortName: http
+ # -- The Service type
+ type: ClusterIP
+ # -- The http Service port
+ httpPort: 8080
+ # -- The HTTP Service node port if type is NodePort (The range of valid ports is 30000-32767)
+ httpNodePort: ''
+ # -- The Management port
+ httpAdminPort: 8081
+ # -- The Management port name
+ httpAdminPortName: http-admin
+ # -- The Management node port if type is NodePort (The range of valid ports is 30000-32767)
+ httpAdminNodePort: ''
+ # -- Additional Service ports, e. g. for custom admin console
+ extraPorts: [ ]
+
+serviceAccount:
+ # -- Specifies whether a service account should be created
+ create: true
+ # -- Annotations to add to the service account
+ annotations: {}
+ # -- The name of the service account to use.
+ # -- If not set and create is true, a name is generated using the fullname template
+ name: ""
+ # -- Image pull secrets that are attached to the ServiceAccount
+ imagePullSecrets: []
+
+# -- Canary release configuration settings
+canary:
+ # -- Enable or disable Canary releases
+ enabled: false
+ # -- HTTP header-based routing settings
+ header:
+ # -- Enable or disable header-based routing
+ enabled: false
+ # -- Name of the HTTP header to match
+ name: cookie
+ # -- Regular expression to match the header value
+ regex: ''
+ # -- Cookie-based routing settings
+ cookie:
+ # -- Enable or disable cookie-based routing
+ enabled: false
+ # -- Name of the cookie to match
+ name: x-hidden-prod
+ # -- Percentage-based routing settings
+ percent:
+ # -- Enable or disable percentage-based routing
+ enabled: false
+ # -- Percentage of traffic to route to the Canary release
+ value: 20
+
+# -- ENP allows object configuration
+# -- List of allowed entities for ENP (see [Readme ENPR](#egress-network-policy-enp))
+flux:
+ # -- Indicates if Flux is enabled (false by default)
+ enabled: false
+ configmap:
+ # -- Indicates if the ConfigMap is enabled (false by default)
+ enabled: false
+ # -- The file path for Flux configuration (default: /usr/src/app/)
+ filepath: /usr/src/app/
+ # -- The name of the Flux configuration file (default: flux.json)
+ filename: flux.json
+ # -- Configuration for Flux ConfigMap
+ # -- Internal settings for Flux (empty by default)
+ internal: {}
+
+# -- Pod Disruption Budget settings
+# -- Empty means no PDB is applied
+podDisruptionBudget: {}
+# maxUnavailable: 1
+# minAvailable: 1
+
+# -- Configuration settings for Kubernetes secrets
+secrets:
+ # -- Key-value pairs stored as base64-encoded strings
+ data: {}
+ type: ''
+
+# -- Set configurations files in configmaps.
+configFiles: {}
+ #Here is samples configurations files : application.properties
+ #application.yml: |-
+ # insert_your_application_configuration_here
+ #logback.xml: |-
+# insert_your_logback_configuration_here
+
+# -- Log into github to generate tag image
+github:
+ enabled: false
+ organization: "votre-organisation"
+ repository: "votre-repo"
\ No newline at end of file