Add unit tests for KubernetesCluster, Tenant, ServiceInstance, and RegisterClusterHandler
- Implement tests for KubernetesCluster including registration, connectivity status, and error handling. - Create tests for Tenant creation, member management, and status changes. - Add tests for ServiceInstance provisioning and state management. - Introduce RegisterClusterHandler tests to validate registration requests and error scenarios. - Set up project files for new test projects with necessary dependencies.
This commit is contained in:
67
Charts/entkube/templates/_helpers.tpl
Normal file
67
Charts/entkube/templates/_helpers.tpl
Normal file
@@ -0,0 +1,67 @@
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "entkube.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Create a default fully qualified app name.
|
||||
*/}}
|
||||
{{- define "entkube.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 "entkube.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Common labels
|
||||
*/}}
|
||||
{{- define "entkube.labels" -}}
|
||||
helm.sh/chart: {{ include "entkube.chart" . }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Selector labels for a specific component
|
||||
*/}}
|
||||
{{- define "entkube.selectorLabels" -}}
|
||||
app.kubernetes.io/name: {{ include "entkube.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Image reference helper
|
||||
*/}}
|
||||
{{- define "entkube.image" -}}
|
||||
{{- $registry := .root.Values.image.registry -}}
|
||||
{{- $repository := .component.image.repository -}}
|
||||
{{- $tag := default .root.Chart.AppVersion .root.Values.image.tag -}}
|
||||
{{- printf "%s/%s:%s" $registry $repository $tag -}}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Service account name
|
||||
*/}}
|
||||
{{- define "entkube.serviceAccountName" -}}
|
||||
{{- if .Values.serviceAccount.create }}
|
||||
{{- default (include "entkube.fullname" .) .Values.serviceAccount.name }}
|
||||
{{- else }}
|
||||
{{- default "default" .Values.serviceAccount.name }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
51
Charts/entkube/templates/clusters-deployment.yaml
Normal file
51
Charts/entkube/templates/clusters-deployment.yaml
Normal file
@@ -0,0 +1,51 @@
|
||||
{{- if .Values.clusters.enabled }}
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "entkube.fullname" . }}-clusters
|
||||
labels:
|
||||
{{- include "entkube.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: clusters
|
||||
spec:
|
||||
replicas: {{ .Values.clusters.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "entkube.selectorLabels" . | nindent 6 }}
|
||||
app.kubernetes.io/component: clusters
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
{{- include "entkube.selectorLabels" . | nindent 8 }}
|
||||
app.kubernetes.io/component: clusters
|
||||
spec:
|
||||
{{- with .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
serviceAccountName: {{ include "entkube.serviceAccountName" . }}
|
||||
containers:
|
||||
- name: clusters
|
||||
image: {{ include "entkube.image" (dict "root" . "component" .Values.clusters) }}
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: {{ .Values.clusters.port }}
|
||||
protocol: TCP
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: http
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 30
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /health/ready
|
||||
port: http
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 10
|
||||
resources:
|
||||
{{- toYaml .Values.clusters.resources | nindent 12 }}
|
||||
env:
|
||||
- name: ASPNETCORE_URLS
|
||||
value: "http://+:{{ .Values.clusters.port }}"
|
||||
{{- end }}
|
||||
19
Charts/entkube/templates/clusters-service.yaml
Normal file
19
Charts/entkube/templates/clusters-service.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
{{- if .Values.clusters.enabled }}
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "entkube.fullname" . }}-clusters
|
||||
labels:
|
||||
{{- include "entkube.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: clusters
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- port: {{ .Values.clusters.port }}
|
||||
targetPort: http
|
||||
protocol: TCP
|
||||
name: http
|
||||
selector:
|
||||
{{- include "entkube.selectorLabels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: clusters
|
||||
{{- end }}
|
||||
51
Charts/entkube/templates/identity-deployment.yaml
Normal file
51
Charts/entkube/templates/identity-deployment.yaml
Normal file
@@ -0,0 +1,51 @@
|
||||
{{- if .Values.identity.enabled }}
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "entkube.fullname" . }}-identity
|
||||
labels:
|
||||
{{- include "entkube.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: identity
|
||||
spec:
|
||||
replicas: {{ .Values.identity.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "entkube.selectorLabels" . | nindent 6 }}
|
||||
app.kubernetes.io/component: identity
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
{{- include "entkube.selectorLabels" . | nindent 8 }}
|
||||
app.kubernetes.io/component: identity
|
||||
spec:
|
||||
{{- with .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
serviceAccountName: {{ include "entkube.serviceAccountName" . }}
|
||||
containers:
|
||||
- name: identity
|
||||
image: {{ include "entkube.image" (dict "root" . "component" .Values.identity) }}
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: {{ .Values.identity.port }}
|
||||
protocol: TCP
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: http
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 30
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /health/ready
|
||||
port: http
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 10
|
||||
resources:
|
||||
{{- toYaml .Values.identity.resources | nindent 12 }}
|
||||
env:
|
||||
- name: ASPNETCORE_URLS
|
||||
value: "http://+:{{ .Values.identity.port }}"
|
||||
{{- end }}
|
||||
19
Charts/entkube/templates/identity-service.yaml
Normal file
19
Charts/entkube/templates/identity-service.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
{{- if .Values.identity.enabled }}
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "entkube.fullname" . }}-identity
|
||||
labels:
|
||||
{{- include "entkube.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: identity
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- port: {{ .Values.identity.port }}
|
||||
targetPort: http
|
||||
protocol: TCP
|
||||
name: http
|
||||
selector:
|
||||
{{- include "entkube.selectorLabels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: identity
|
||||
{{- end }}
|
||||
61
Charts/entkube/templates/ingress.yaml
Normal file
61
Charts/entkube/templates/ingress.yaml
Normal file
@@ -0,0 +1,61 @@
|
||||
{{- if .Values.ingress.enabled }}
|
||||
{{- if eq .Values.ingress.provider "traefik" }}
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: {{ include "entkube.fullname" . }}
|
||||
labels:
|
||||
{{- include "entkube.labels" . | nindent 4 }}
|
||||
{{- with .Values.ingress.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`{{ .Values.ingress.host }}`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: {{ include "entkube.fullname" . }}-web
|
||||
port: {{ .Values.web.port }}
|
||||
{{- if .Values.ingress.tls.enabled }}
|
||||
tls:
|
||||
secretName: {{ .Values.ingress.tls.secretName }}
|
||||
{{- end }}
|
||||
{{- else if eq .Values.ingress.provider "gatewayapi" }}
|
||||
apiVersion: gateway.networking.k8s.io/v1
|
||||
kind: HTTPRoute
|
||||
metadata:
|
||||
name: {{ include "entkube.fullname" . }}
|
||||
labels:
|
||||
{{- include "entkube.labels" . | nindent 4 }}
|
||||
spec:
|
||||
parentRefs:
|
||||
- name: {{ include "entkube.fullname" . }}-gateway
|
||||
hostnames:
|
||||
- {{ .Values.ingress.host }}
|
||||
rules:
|
||||
- backendRefs:
|
||||
- name: {{ include "entkube.fullname" . }}-web
|
||||
port: {{ .Values.web.port }}
|
||||
{{- else if eq .Values.ingress.provider "istio" }}
|
||||
apiVersion: networking.istio.io/v1
|
||||
kind: VirtualService
|
||||
metadata:
|
||||
name: {{ include "entkube.fullname" . }}
|
||||
labels:
|
||||
{{- include "entkube.labels" . | nindent 4 }}
|
||||
spec:
|
||||
hosts:
|
||||
- {{ .Values.ingress.host }}
|
||||
gateways:
|
||||
- {{ include "entkube.fullname" . }}-gateway
|
||||
http:
|
||||
- route:
|
||||
- destination:
|
||||
host: {{ include "entkube.fullname" . }}-web
|
||||
port:
|
||||
number: {{ .Values.web.port }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
51
Charts/entkube/templates/provisioning-deployment.yaml
Normal file
51
Charts/entkube/templates/provisioning-deployment.yaml
Normal file
@@ -0,0 +1,51 @@
|
||||
{{- if .Values.provisioning.enabled }}
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "entkube.fullname" . }}-provisioning
|
||||
labels:
|
||||
{{- include "entkube.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: provisioning
|
||||
spec:
|
||||
replicas: {{ .Values.provisioning.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "entkube.selectorLabels" . | nindent 6 }}
|
||||
app.kubernetes.io/component: provisioning
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
{{- include "entkube.selectorLabels" . | nindent 8 }}
|
||||
app.kubernetes.io/component: provisioning
|
||||
spec:
|
||||
{{- with .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
serviceAccountName: {{ include "entkube.serviceAccountName" . }}
|
||||
containers:
|
||||
- name: provisioning
|
||||
image: {{ include "entkube.image" (dict "root" . "component" .Values.provisioning) }}
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: {{ .Values.provisioning.port }}
|
||||
protocol: TCP
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: http
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 30
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /health/ready
|
||||
port: http
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 10
|
||||
resources:
|
||||
{{- toYaml .Values.provisioning.resources | nindent 12 }}
|
||||
env:
|
||||
- name: ASPNETCORE_URLS
|
||||
value: "http://+:{{ .Values.provisioning.port }}"
|
||||
{{- end }}
|
||||
19
Charts/entkube/templates/provisioning-service.yaml
Normal file
19
Charts/entkube/templates/provisioning-service.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
{{- if .Values.provisioning.enabled }}
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "entkube.fullname" . }}-provisioning
|
||||
labels:
|
||||
{{- include "entkube.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: provisioning
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- port: {{ .Values.provisioning.port }}
|
||||
targetPort: http
|
||||
protocol: TCP
|
||||
name: http
|
||||
selector:
|
||||
{{- include "entkube.selectorLabels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: provisioning
|
||||
{{- end }}
|
||||
12
Charts/entkube/templates/serviceaccount.yaml
Normal file
12
Charts/entkube/templates/serviceaccount.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
{{- if .Values.serviceAccount.create }}
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: {{ include "entkube.serviceAccountName" . }}
|
||||
labels:
|
||||
{{- include "entkube.labels" . | nindent 4 }}
|
||||
{{- with .Values.serviceAccount.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
57
Charts/entkube/templates/web-deployment.yaml
Normal file
57
Charts/entkube/templates/web-deployment.yaml
Normal file
@@ -0,0 +1,57 @@
|
||||
{{- if .Values.web.enabled }}
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "entkube.fullname" . }}-web
|
||||
labels:
|
||||
{{- include "entkube.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: web
|
||||
spec:
|
||||
replicas: {{ .Values.web.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "entkube.selectorLabels" . | nindent 6 }}
|
||||
app.kubernetes.io/component: web
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
{{- include "entkube.selectorLabels" . | nindent 8 }}
|
||||
app.kubernetes.io/component: web
|
||||
spec:
|
||||
{{- with .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
serviceAccountName: {{ include "entkube.serviceAccountName" . }}
|
||||
containers:
|
||||
- name: web
|
||||
image: {{ include "entkube.image" (dict "root" . "component" .Values.web) }}
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: {{ .Values.web.port }}
|
||||
protocol: TCP
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: http
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 30
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /health/ready
|
||||
port: http
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 10
|
||||
resources:
|
||||
{{- toYaml .Values.web.resources | nindent 12 }}
|
||||
env:
|
||||
- name: ASPNETCORE_URLS
|
||||
value: "http://+:{{ .Values.web.port }}"
|
||||
- name: Services__Clusters__BaseUrl
|
||||
value: "http://{{ include "entkube.fullname" . }}-clusters:{{ .Values.clusters.port }}"
|
||||
- name: Services__Provisioning__BaseUrl
|
||||
value: "http://{{ include "entkube.fullname" . }}-provisioning:{{ .Values.provisioning.port }}"
|
||||
- name: Services__Identity__BaseUrl
|
||||
value: "http://{{ include "entkube.fullname" . }}-identity:{{ .Values.identity.port }}"
|
||||
{{- end }}
|
||||
19
Charts/entkube/templates/web-service.yaml
Normal file
19
Charts/entkube/templates/web-service.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
{{- if .Values.web.enabled }}
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "entkube.fullname" . }}-web
|
||||
labels:
|
||||
{{- include "entkube.labels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: web
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- port: {{ .Values.web.port }}
|
||||
targetPort: http
|
||||
protocol: TCP
|
||||
name: http
|
||||
selector:
|
||||
{{- include "entkube.selectorLabels" . | nindent 4 }}
|
||||
app.kubernetes.io/component: web
|
||||
{{- end }}
|
||||
Reference in New Issue
Block a user