Skip to content

Commit f969c00

Browse files
committed
feat(metering): added metering - disabled by default
1 parent de2b8bf commit f969c00

14 files changed

Lines changed: 1195 additions & 8 deletions

File tree

charts/nango/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
apiVersion: v2
22
name: nango
33
type: application
4-
version: 2.0.6
4+
version: 2.1.0
55
dependencies:
66
- condition: postgresql.enabled
77
name: postgresql

charts/nango/README.md

Lines changed: 125 additions & 7 deletions
Large diffs are not rendered by default.
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
{{/*
2+
Expand the name of the chart.
3+
*/}}
4+
{{- define "metering.names.name" -}}
5+
{{- default (printf "%s-%s" (include "common.names.name" .) .Values.metering.name) .Values.metering.nameOverride | trunc 63 | trimSuffix "-" -}}
6+
{{- end -}}
7+
8+
{{- define "metering.names.fullname" -}}
9+
{{- default (printf "%s-%s" (include "common.names.fullname" .) .Values.metering.name) .Values.metering.fullnameOverride | trunc 63 | trimSuffix "-" -}}
10+
{{- end -}}
11+
12+
{{- define "metering.names.component" -}}
13+
{{- default "metering" .Values.metering.name | trunc 63 | trimSuffix "-" -}}
14+
{{- end -}}
15+
16+
{{- define "metering.names.service" -}}
17+
{{- printf "%s-svc" (include "metering.names.fullname" .) -}}
18+
{{- end -}}
19+
20+
{{/*
21+
Component URL helpers
22+
*/}}
23+
{{- define "nango.metering.url" -}}
24+
http://{{ include "metering.names.name" . }}.{{ .Release.Namespace }}
25+
{{- end }}
26+
27+
{{/*
28+
Allow the release namespace to be overridden for multi-namespace deployments in combined charts.
29+
*/}}
30+
{{- define "metering.names.namespace" -}}
31+
{{- default (include "common.names.namespace" .) .Values.metering.namespaceOverride | trunc 63 | trimSuffix "-" -}}
32+
{{- end -}}
33+
34+
{{/*
35+
Create the name of the service account to use
36+
*/}}
37+
{{- define "metering.names.serviceAccountName" -}}
38+
{{- if .Values.metering.serviceAccount.create -}}
39+
{{ default (include "metering.names.fullname" .) .Values.metering.serviceAccount.name }}
40+
{{- else -}}
41+
{{ default "default" .Values.metering.serviceAccount.name }}
42+
{{- end -}}
43+
{{- end -}}
44+
45+
{{/*
46+
Return the proper metering image name
47+
*/}}
48+
{{- define "metering.image" -}}
49+
{{ include "common.images.image" (dict "imageRoot" .Values.metering.image "global" .Values.global.image) }}
50+
{{- end -}}
51+
52+
{{- define "metering.images.pullPolicy" -}}
53+
{{ include "common.images.pullPolicy" (dict "imageRoot" .Values.metering.image "global" .Values.global.image)}}
54+
{{- end -}}
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
{{- if .Values.metering.enabled }}
2+
apiVersion: {{ include "common.capabilities.deployment.apiVersion" . }}
3+
kind: Deployment
4+
metadata:
5+
name: {{ include "metering.names.fullname" . }}
6+
namespace: {{ include "metering.names.namespace" . | quote }}
7+
labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
8+
app.kubernetes.io/component: {{ include "metering.names.component" . }}
9+
{{- if or .Values.metering.deploymentAnnotations .Values.commonAnnotations }}
10+
{{- $annotations := include "common.tplvalues.merge" (dict "values" (list .Values.metering.deploymentAnnotations .Values.commonAnnotations) "context" .) }}
11+
annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $ ) | nindent 4 }}
12+
{{- end }}
13+
spec:
14+
{{- if not .Values.metering.autoscaling.hpa.enabled }}
15+
replicas: {{ .Values.metering.replicaCount }}
16+
{{- end -}}
17+
{{- if .Values.metering.updateStrategy }}
18+
strategy: {{- toYaml .Values.metering.updateStrategy | nindent 4 }}
19+
{{- end }}
20+
{{- $podLabels := include "common.tplvalues.merge" (dict "values" (list .Values.metering.podLabels .Values.commonLabels) "context" .) }}
21+
selector:
22+
matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 6 }}
23+
app.kubernetes.io/component: {{ include "metering.names.component" . }}
24+
template:
25+
metadata:
26+
{{- if .Values.metering.podAnnotations }}
27+
annotations: {{- include "common.tplvalues.render" (dict "value" .Values.metering.podAnnotations "context" $) | nindent 8 }}
28+
{{- end }}
29+
labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 8 }}
30+
app.kubernetes.io/component: {{ include "metering.names.component" . }}
31+
spec:
32+
{{- if .Values.metering.imagePullSecrets }}
33+
imagePullSecrets: {{- include "common.tplvalues.render" ( dict "value" .Values.metering.imagePullSecrets "context" $) | nindent 8 }}
34+
{{- end }}
35+
serviceAccountName: {{ template "metering.names.serviceAccountName" . }}
36+
{{- if .Values.metering.hostAliases }}
37+
hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.metering.hostAliases "context" $) | nindent 8 }}
38+
{{- end }}
39+
{{- if .Values.metering.nodeSelector }}
40+
nodeSelector: {{- include "common.tplvalues.render" ( dict "value" .Values.metering.nodeSelector "context" $) | nindent 8 }}
41+
{{- end }}
42+
{{- if .Values.metering.tolerations }}
43+
tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.metering.tolerations "context" .) | nindent 8 }}
44+
{{- end }}
45+
{{- if .Values.metering.priorityClassName }}
46+
priorityClassName: {{ .Values.metering.priorityClassName | quote }}
47+
{{- end }}
48+
{{- if .Values.metering.schedulerName }}
49+
schedulerName: {{ .Values.metering.schedulerName | quote }}
50+
{{- end }}
51+
{{- if .Values.metering.topologySpreadConstraints }}
52+
topologySpreadConstraints: {{- include "common.tplvalues.render" (dict "value" .Values.metering.topologySpreadConstraints "context" .) | nindent 8 }}
53+
{{- end }}
54+
{{- if .Values.metering.podSecurityContext.enabled }}
55+
securityContext: {{- omit .Values.metering.podSecurityContext "enabled" | toYaml | nindent 8 }}
56+
{{- end }}
57+
{{- if .Values.metering.terminationGracePeriodSeconds }}
58+
terminationGracePeriodSeconds: {{ .Values.metering.terminationGracePeriodSeconds }}
59+
{{- end }}
60+
containers:
61+
- name: {{ include "metering.names.component" . }}
62+
image: {{ template "metering.image" . }}
63+
imagePullPolicy: {{ include "metering.images.pullPolicy" . }}
64+
{{- if .Values.metering.command }}
65+
command: {{- include "common.tplvalues.render" (dict "value" .Values.metering.command "context" $) | nindent 12 }}
66+
{{- end }}
67+
{{- if .Values.metering.args }}
68+
args: {{- include "common.tplvalues.render" (dict "value" .Values.metering.args "context" $) | nindent 12 }}
69+
{{- end }}
70+
{{- if .Values.metering.resources }}
71+
resources: {{- toYaml .Values.metering.resources | nindent 12 }}
72+
{{- else if ne .Values.metering.resourcesPreset "none" }}
73+
resources: {{- include "common.resources.preset" (dict "type" .Values.metering.resourcesPreset) | nindent 12 }}
74+
{{- end }}
75+
{{- if .Values.metering.containerPorts.enabled }}
76+
ports:
77+
- name: http
78+
containerPort: {{ .Values.metering.containerPorts.http }}
79+
- name: https
80+
containerPort: {{ .Values.metering.containerPorts.https }}
81+
{{- if .Values.metering.extraContainerPorts }}
82+
{{- include "common.tplvalues.render" (dict "value" .Values.metering.extraContainerPorts "context" $) | nindent 12 }}
83+
{{- end }}
84+
{{- end }}
85+
{{- if .Values.metering.customLivenessProbe }}
86+
livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.metering.customLivenessProbe "context" $) | nindent 12 }}
87+
{{- else if .Values.metering.livenessProbe.enabled }}
88+
livenessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.metering.livenessProbe "enabled") "context" $) | nindent 12 }}
89+
httpGet:
90+
path: /health
91+
port: http
92+
scheme: HTTP
93+
{{- end }}
94+
{{- if .Values.metering.customReadinessProbe }}
95+
readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.metering.customReadinessProbe "context" $) | nindent 12 }}
96+
{{- else if .Values.metering.readinessProbe.enabled }}
97+
readinessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.metering.readinessProbe "enabled") "context" $) | nindent 12 }}
98+
httpGet:
99+
path: /health
100+
port: http
101+
scheme: HTTP
102+
{{- end }}
103+
{{- if .Values.metering.customStartupProbe }}
104+
startupProbe: {{- include "common.tplvalues.render" (dict "value" .Values.metering.customStartupProbe "context" $) | nindent 12 }}
105+
{{- else if .Values.metering.startupProbe.enabled }}
106+
startupProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.metering.startupProbe "enabled") "context" $) | nindent 12 }}
107+
httpGet:
108+
path: /health
109+
port: http
110+
scheme: HTTP
111+
{{- end }}
112+
{{- if .Values.metering.sidecars }}
113+
sidecars: {{- include "common.tplvalues.render" ( dict "value" .Values.metering.sidecars "context" $) | nindent 12 }}
114+
{{- end }}
115+
env:
116+
{{- if .Values.metering.extraEnvVars }}
117+
{{- include "common.tplvalues.render" (dict "value" .Values.metering.extraEnvVars "context" $) | nindent 12 }}
118+
{{- end }}
119+
envFrom:
120+
{{- if .Values.metering.extraEnvVarsCM }}
121+
- configMapRef:
122+
name: {{ include "common.tplvalues.render" (dict "value" .Values.metering.extraEnvVarsCM "context" $) }}
123+
{{- end }}
124+
{{- if .Values.metering.extraEnvVarsSecret }}
125+
- secretRef:
126+
name: {{ include "common.tplvalues.render" (dict "value" .Values.metering.extraEnvVarsSecret "context" $) }}
127+
{{- end }}
128+
volumeMounts:
129+
- name: data
130+
mountPath: {{ .Values.metering.persistence.mountPath }}
131+
{{- if .Values.metering.persistence.subPath }}
132+
subPath: {{ .Values.metering.persistence.subPath }}
133+
{{- end }}
134+
- name: empty-dir
135+
mountPath: /tmp
136+
subPath: tmp-dir
137+
{{- if .Values.metering.extraVolumeMounts }}
138+
{{- include "common.tplvalues.render" (dict "value" .Values.metering.extraVolumeMounts "context" $) | nindent 12 }}
139+
{{- end }}
140+
volumes:
141+
- name: empty-dir
142+
emptyDir: {}
143+
- name: data
144+
{{- if .Values.metering.persistence.enabled }}
145+
persistentVolumeClaim:
146+
claimName: {{ default (include "metering.names.fullname" .) .Values.metering.persistence.existingClaim }}
147+
{{- else }}
148+
emptyDir: {}
149+
{{- end }}
150+
{{- if .Values.metering.extraVolumes }}
151+
{{- include "common.tplvalues.render" (dict "value" .Values.metering.extraVolumes "context" $) | nindent 8 }}
152+
{{- end }}
153+
{{- end }}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
{{- if .Values.metering.enabled }}
2+
{{- if .Values.metering.autoscaling.hpa.enabled }}
3+
apiVersion: {{ include "common.capabilities.hpa.apiVersion" ( dict "context" $ ) }}
4+
kind: HorizontalPodAutoscaler
5+
metadata:
6+
name: {{ include "metering.names.fullname" . }}
7+
namespace: {{ include "metering.names.namespace" . | quote}}
8+
labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
9+
app.kubernetes.io/component: {{ include "metering.names.component" . }}
10+
{{- if .Values.commonAnnotations }}
11+
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
12+
{{- end }}
13+
spec:
14+
scaleTargetRef:
15+
apiVersion: {{ include "common.capabilities.deployment.apiVersion" . }}
16+
kind: Deployment
17+
name: {{ include "metering.names.fullname" . }}
18+
minReplicas: {{ .Values.metering.autoscaling.hpa.minReplicas }}
19+
maxReplicas: {{ .Values.metering.autoscaling.hpa.maxReplicas }}
20+
metrics:
21+
{{- if .Values.metering.autoscaling.hpa.targetMemory }}
22+
- type: Resource
23+
resource:
24+
name: memory
25+
target:
26+
type: Utilization
27+
averageUtilization: {{ .Values.metering.autoscaling.hpa.targetMemory }}
28+
{{- end }}
29+
{{- if .Values.metering.autoscaling.hpa.targetCPU }}
30+
- type: Resource
31+
resource:
32+
name: cpu
33+
target:
34+
type: Utilization
35+
averageUtilization: {{ .Values.metering.autoscaling.hpa.targetCPU }}
36+
{{- end }}
37+
{{- end }}
38+
{{- end }}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
{{- if .Values.metering.enabled }}
2+
{{- if .Values.metering.ingress.enabled }}
3+
apiVersion: {{ include "common.capabilities.ingress.apiVersion" . }}
4+
kind: Ingress
5+
metadata:
6+
name: {{ include "metering.names.fullname" . }}
7+
namespace: {{ include "metering.names.namespace" . | quote }}
8+
labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
9+
app.kubernetes.io/component: {{ include "metering.names.component" . }}
10+
{{- if or .Values.metering.ingress.annotations .Values.commonAnnotations }}
11+
{{- $annotations := include "common.tplvalues.merge" (dict "values" (list .Values.metering.ingress.annotations .Values.commonAnnotations) "context" .) }}
12+
annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $ ) | nindent 4 }}
13+
{{- end }}
14+
spec:
15+
{{- if .Values.metering.ingress.ingressClassName }}
16+
ingressClassName: {{ .Values.metering.ingress.ingressClassName | quote }}
17+
{{- end }}
18+
rules:
19+
{{- if .Values.metering.ingress.hostname }}
20+
- host: {{ .Values.metering.ingress.hostname }}
21+
http:
22+
paths:
23+
{{- if .Values.metering.ingress.extraPaths }}
24+
{{- toYaml .Values.metering.ingress.extraPaths | nindent 10 }}
25+
{{- end }}
26+
- path: {{ .Values.metering.ingress.path }}
27+
pathType: {{ .Values.metering.ingress.pathType }}
28+
backend: {{- include "common.ingress.backend" (dict "serviceName" (include "metering.names.service" .) "servicePort" "http" "context" $) | nindent 14 }}
29+
{{- end }}
30+
{{- range .Values.metering.ingress.extraHosts }}
31+
- host: {{ .name | quote }}
32+
http:
33+
paths:
34+
- path: {{ default "/" .path }}
35+
pathType: {{ default "ImplementationSpecific" .pathType }}
36+
backend: {{- include "common.ingress.backend" (dict "serviceName" (include "metering.names.service" $) "servicePort" "http" "context" $) | nindent 14 }}
37+
{{- end }}
38+
{{- if .Values.metering.ingress.extraRules }}
39+
{{- include "common.tplvalues.render" (dict "value" .Values.metering.ingress.extraRules "context" $) | nindent 4 }}
40+
{{- end }}
41+
{{- if or (and .Values.metering.ingress.tls (or (include "common.ingress.certManagerRequest" ( dict "annotations" .Values.metering.ingress.annotations )) .Values.metering.ingress.selfSigned)) .Values.metering.ingress.extraTls }}
42+
tls:
43+
{{- if and .Values.metering.ingress.tls (or (include "common.ingress.certManagerRequest" ( dict "annotations" .Values.metering.ingress.annotations )) .Values.metering.ingress.selfSigned) }}
44+
- hosts:
45+
- {{ .Values.metering.ingress.hostname | quote }}
46+
secretName: {{ printf "%s-tls" .Values.metering.ingress.hostname }}
47+
{{- end }}
48+
{{- if .Values.metering.ingress.extraTls }}
49+
{{- include "common.tplvalues.render" (dict "value" .Values.metering.ingress.extraTls "context" $) | nindent 4 }}
50+
{{- end }}
51+
{{- end }}
52+
{{- end }}
53+
{{- end }}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
{{- if .Values.metering.enabled }}
2+
{{- if .Values.metering.networkPolicy.enabled }}
3+
apiVersion: {{ include "common.capabilities.networkPolicy.apiVersion" . }}
4+
kind: NetworkPolicy
5+
metadata:
6+
name: {{ template "metering.names.fullname" . }}
7+
namespace: {{ include "metering.names.namespace" . | quote }}
8+
labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
9+
app.kubernetes.io/component: {{ include "metering.names.component" . }}
10+
{{- if .Values.commonAnnotations }}
11+
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
12+
{{- end }}
13+
spec:
14+
{{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.metering.podLabels .Values.commonLabels ) "context" . ) }}
15+
podSelector:
16+
matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 6 }}
17+
app.kubernetes.io/component: {{ include "metering.names.component" . }}
18+
policyTypes:
19+
- Ingress
20+
- Egress
21+
egress:
22+
{{- if .Values.metering.networkPolicy.allowExternalEgress }}
23+
- {}
24+
{{- else }}
25+
- ports:
26+
# Allow dns resolution
27+
- port: 53
28+
protocol: UDP
29+
- port: 53
30+
protocol: TCP
31+
{{- if .Values.metering.networkPolicy.extraEgress }}
32+
{{- include "common.tplvalues.render" ( dict "value" .Values.metering.networkPolicy.extraEgress "context" $ ) | nindent 4 }}
33+
{{- end }}
34+
{{- end }}
35+
ingress:
36+
- ports:
37+
- port: {{ .Values.metering.containerPorts.http }}
38+
- port: {{ .Values.metering.containerPorts.https }}
39+
{{- range .Values.metering.extraContainerPorts }}
40+
- port: {{ .containerPort }}
41+
{{- end }}
42+
{{- if not .Values.metering.networkPolicy.allowExternal }}
43+
from:
44+
- podSelector:
45+
matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 14 }}
46+
{{- if .Values.metering.networkPolicy.addExternalClientAccess }}
47+
- podSelector:
48+
matchLabels:
49+
{{ template "metering.names.fullname" . }}-client: "true"
50+
{{- end }}
51+
{{- if .Values.metering.networkPolicy.ingressPodMatchLabels }}
52+
- podSelector:
53+
matchLabels: {{- include "common.tplvalues.render" (dict "value" .Values.metering.networkPolicy.ingressPodMatchLabels "context" $ ) | nindent 14 }}
54+
{{- end }}
55+
{{- if .Values.metering.networkPolicy.ingressNSMatchLabels }}
56+
- namespaceSelector:
57+
matchLabels: {{- include "common.tplvalues.render" (dict "value" .Values.metering.networkPolicy.ingressNSMatchLabels "context" $ ) | nindent 14 }}
58+
{{- if .Values.metering.networkPolicy.ingressNSPodMatchLabels }}
59+
podSelector:
60+
matchLabels:
61+
matchLabels: {{- include "common.tplvalues.render" (dict "value" .Values.metering.networkPolicy.ingressNSPodMatchLabels "context" $ ) | nindent 14 }}
62+
{{- end }}
63+
{{- end }}
64+
{{- end }}
65+
{{- if .Values.metering.networkPolicy.extraIngress }}
66+
{{- include "common.tplvalues.render" ( dict "value" .Values.metering.networkPolicy.extraIngress "context" $ ) | nindent 4 }}
67+
{{- end }}
68+
{{- end }}
69+
{{- end }}

0 commit comments

Comments
 (0)