added repo

This commit is contained in:
Your Name
2026-08-26 03:39:42 +05:30
parent 45c25a95af
commit b8575bb8b9
6889 changed files with 1217125 additions and 0 deletions
@@ -0,0 +1,40 @@
1. Get the application URL by running these commands:
{{- $ctx := dict "helm" . }}
{{- $ns := include "vm.namespace" $ctx }}
{{- $fullname := include "vm.fullname" $ctx }}
{{- $name := include "vm.name" $ctx }}
{{- $release := include "vm.release" $ctx }}
{{- if .Values.route.enabled }}
{{- if .Values.route.hostnames }}
export APP_HOSTNAME={{ .Values.route.hostnames | first }}
{{- else }}
export APP_HOSTNAME=$(kubectl get --namespace {{(first .Values.route.parentRefs).namespace | default $ns }} gateway/{{ (first .Values.route.parentRefs).name }} -o jsonpath="{.spec.listeners[?(@.name=='{{ (first .Values.route.parentRefs).sectionName | default "http" }}')].hostname}")
{{- end }}
{{- if and .Values.route.rules (first .Values.route.rules).matches (first (first .Values.route.rules).matches).path.value }}
echo "Visit http://$APP_HOSTNAME{{ (first (first .Values.route.rules).matches).path.value }} to use your application"
NOTE: Your HTTPRoute depends on the listener configuration of your gateway and your HTTPRoute rules.
The rules can be set for path, method, header and query parameters.
You can check the gateway configuration with 'kubectl get --namespace {{(first .Values.route.parentRefs).namespace | default $ns }} gateway/{{ (first .Values.route.parentRefs).name }} -o yaml'
{{- end }}
{{- else 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 {{ $ns }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "vm.fullname" . }})
export NODE_IP=$(kubectl get nodes --namespace {{ $ns }} -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 its status by running 'kubectl get --namespace {{ $ns }} svc -w {{ $fullname }}'
export SERVICE_IP=$(kubectl get svc --namespace {{ $ns }} {{ $fullname }} --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 {{ $ns }} -l "app.kubernetes.io/name={{ $name }},app.kubernetes.io/instance={{ $release }}" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace {{ $ns }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace {{ $ns }} port-forward $POD_NAME 8080:$CONTAINER_PORT
{{- end }}
@@ -0,0 +1,123 @@
{{- if eq .Values.mcp.mode "stdio" }}
{{- fail "mcp.mode=stdio is not supported in Kubernetes deployments. Use 'sse' or 'http' instead." }}
{{- end }}
{{- $isCloud := gt (len .Values.vm.cloudAPIKey) 0 }}
{{- $ctx := dict "helm" . }}
{{- $fullname := include "vm.fullname" $ctx }}
{{- $sa := include "vm.fullname" $ctx }}
{{- $ns := include "vm.namespace" $ctx }}
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ $fullname }}
namespace: {{ $ns }}
labels: {{ include "vm.labels" $ctx | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels: {{ include "vm.selectorLabels" $ctx | nindent 6 }}
template:
metadata:
{{- with .Values.podAnnotations }}
annotations: {{ toYaml . | nindent 8 }}
{{- end }}
labels:
{{- include "vm.labels" . | nindent 8 }}
{{- with .Values.podLabels }}
{{- toYaml . | nindent 8 }}
{{- end }}
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets: {{ toYaml . | nindent 8 }}
{{- end }}
{{- if (.Values.serviceAccount).create }}
serviceAccountName: {{ tpl ((.Values.serviceAccount).name | default $sa) $ctx }}
automountServiceAccountToken: {{ .Values.serviceAccount.automount }}
{{- end }}
{{- with .Values.podSecurityContext }}
securityContext: {{ toYaml . | nindent 8 }}
{{- end }}
containers:
- name: {{ .Chart.Name }}
{{- with .Values.securityContext }}
securityContext: {{ toYaml . | nindent 12 }}
{{- end }}
{{- $repo := .Values.image.repository }}
{{- with .Values.image.registry }}
{{- $repo = printf "%s/%s" . $repo }}
{{- end }}
image: "{{ $repo }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
env:
- name: MCP_LISTEN_ADDR
value: "0.0.0.0:{{ .Values.service.port }}"
- name: MCP_SERVER_MODE
value: "{{ .Values.mcp.mode }}"
{{- if $isCloud }}
- name: VMC_API_KEY
value: "{{ .Values.vm.cloudAPIKey }}"
{{- else }}
- name: VM_INSTANCE_ENTRYPOINT
value: "{{ required "either .Values.vm.cloudAPIKey or .Values.vm.entrypoint should be set" .Values.vm.entrypoint }}"
- name: VM_INSTANCE_TYPE
value: "{{ .Values.vm.type }}"
{{- with .Values.vm.bearerToken }}
- name: VM_INSTANCE_BEARER_TOKEN
{{- if kindIs "map" . }}
valueFrom: {{ toYaml . | nindent 16 }}
{{- else }}
value: "{{ . }}"
{{- end }}
{{- end }}
{{- end }}
{{- with .Values.vm.headers }}
- name: VM_INSTANCE_HEADERS
value: "{{ join "," . }}"
{{- end }}
{{- with .Values.mcp.passthroughHeaders }}
- name: MCP_PASSTHROUGH_HEADERS
value: "{{ join "," . }}"
{{- end }}
{{- with .Values.mcp.disable.resources }}
- name: MCP_DISABLE_RESOURCES
value: "{{ . }}"
{{- end }}
{{- with .Values.mcp.disable.tools }}
- name: MCP_DISABLED_TOOLS
value: "{{ join "," . }}"
{{- end }}
{{- with .Values.mcp.heartbeatInterval }}
- name: MCP_HEARTBEAT_INTERVAL
value: "{{ . }}"
{{- end }}
{{- with .Values.env }}
{{- toYaml . | nindent 12 }}
{{- end }}
ports:
- name: http
containerPort: {{ .Values.service.port }}
protocol: TCP
{{- with .Values.livenessProbe }}
livenessProbe: {{ toYaml . | nindent 12 }}
{{- end }}
{{- with .Values.readinessProbe }}
readinessProbe: {{ toYaml . | nindent 12 }}
{{- end }}
{{- with .Values.resources }}
resources: {{ toYaml . | nindent 12 }}
{{- end }}
{{- with .Values.volumeMounts }}
volumeMounts: {{ toYaml . | nindent 12 }}
{{- end }}
{{- with .Values.volumes }}
volumes: {{ toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.nodeSelector }}
nodeSelector: {{ toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.affinity }}
affinity: {{ toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations: {{ toYaml . | nindent 8 }}
{{- end }}
@@ -0,0 +1,23 @@
{{- if .Values.externalSecrets -}}
{{- $ctx := dict "helm" . }}
{{- $fullname := include "vm.plain.fullname" $ctx }}
{{- $ns := include "vm.namespace" $ctx }}
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: {{ $fullname }}-secret
namespace: "{{ $ns }}"
spec:
refreshInterval: {{ .Values.externalSecrets.refreshInterval }}
secretStoreRef:
name: {{ .Values.externalSecrets.secretStoreRef.name }}
kind: {{ .Values.externalSecrets.secretStoreRef.kind }}
target:
creationPolicy: Owner
deletionPolicy: Retain
name: {{ $fullname }}-secret
dataFrom:
- extract:
conversionStrategy: Default
key: {{ .Values.externalSecrets.dataFrom.secretKey }}
{{- end -}}
@@ -0,0 +1,141 @@
{{- if .Values.httpProxy.enabled -}}
{{- if .Values.createContourGateway -}}
{{- if or ( eq "contour-internal" .Values.ingress.ingressClassName ) ( eq "contour-external" .Values.ingress.ingressClassName ) ( eq "contour-internal-0" .Values.ingress.ingressClassName ) ( eq "contour-internal-1" .Values.ingress.ingressClassName ) ( eq "contour-external-0" .Values.ingress.ingressClassName ) ( eq "contour-external-1" .Values.ingress.ingressClassName ) }}
{{- $ctx := dict "helm" . -}}
{{- $fullname := include "vm.fullname" $ctx -}}
{{- $servicePortNumber := .Values.ingress.servicePortNumber | default 8080 -}}
{{- $namespace := .Release.Namespace -}}
{{- $ingressClassName := .Values.ingress.ingressClassName -}}
{{ $count := 0 | int }}
{{- range .Values.ingress.hosts }}
apiVersion: projectcontour.io/v1
kind: HTTPProxy
metadata:
namespace: {{ $namespace }}
name: {{ $fullname }}-{{ $count }}
labels:
{{- include "vm.labels" (dict "helm" $) | nindent 4 }}
annotations:
projectcontour.io/ingress.class: {{ $.Values.ingress.ingressClassName }}
spec:
ingressClassName: {{ $ingressClassName }}
virtualhost:
fqdn: "{{ .host }}"
{{- /* 1) Weighted paths render here as routes with services */}}
routes:
{{- range .paths }}
{{- if hasKey . "backends" }}
- conditions:
{{- if or ( eq ( lower .pathType ) "prefix" ) ( eq ( lower .pathType ) "implementationspecific") }}
- prefix: {{ .path }}
{{- end }}
{{- if ( eq ( lower .pathType ) "exact" ) }}
- exact: {{ .path }}
{{- end }}
{{- if ( eq ( lower .pathType ) "regex" ) }}
- regex: {{ .path }}
{{- end }}
{{- if ( eq ( lower .pathType ) "header" ) }}
- header:
name: {{ (split "___" .path)._0 }}
{{ (split "___" .path)._1 }}: {{ (split "___" .path)._2 }}
{{- end }}
{{- if ( eq ( lower .pathType ) "prefixheader" ) }}
- prefix: {{ (split "___" .path)._0 }}
- header:
name: {{ (split "___" .path)._1 }}
{{ (split "___" .path)._2 }}: {{ (split "___" .path)._3 }}
{{- end }}
services:
{{ range .backends }}
{{- $svc := .service -}}
{{- $hasSlash := contains "/" $svc -}}
{{- $svcName := ternary (split "/" $svc)._1 $svc $hasSlash -}}
{{- $targetNs := ternary .namespace (ternary (split "/" $svc)._0 $.Release.Namespace $hasSlash) (hasKey . "namespace") -}}
{{- $useAlias := ne $targetNs $.Release.Namespace -}}
{{- $aliasName := printf "%s-xns-%s" $svcName $targetNs | trunc 63 | trimSuffix "-" -}}
- name: {{ ternary $aliasName $svcName $useAlias }}
port: {{ $servicePortNumber }}
{{- if .weight }}
weight: {{ .weight }}
{{- end }}
{{- if $.Values.ingress.slowStart.enabled }}
slowStartPolicy:
window: {{ $.Values.ingress.slowStart.window }}
aggression: {{ $.Values.ingress.slowStart.aggression | float64 | squote }}
minWeightPercent: {{ $.Values.ingress.slowStart.minPercent }}
{{- end }}
{{ end }}
{{- end }}
{{- end }}
{{- /* 2) Non-weighted paths keep using includes to your upstreams */}}
includes:
{{- range .paths }}
{{- if not (hasKey . "backends") }}
- conditions:
{{- if or ( eq ( lower .pathType ) "prefix" ) ( eq ( lower .pathType ) "implementationspecific") }}
- prefix: {{ .path }}
{{- end }}
{{- if ( eq ( lower .pathType ) "exact" ) }}
- exact: {{ .path }}
{{- end }}
{{- if ( eq ( lower .pathType ) "regex" ) }}
- regex: {{ .path }}
{{- end }}
{{- if ( eq ( lower .pathType ) "header" ) }}
- header:
name: {{ (split "___" .path)._0 }}
{{ (split "___" .path)._1 }}: {{ (split "___" .path)._2 }}
{{- end }}
{{- if ( eq ( lower .pathType ) "prefixheader" ) }}
- prefix: {{ (split "___" .path)._0 }}
- header:
name: {{ (split "___" .path)._1 }}
{{ (split "___" .path)._2 }}: {{ (split "___" .path)._3 }}
{{- end }}
{{- if .targetService }}
name: {{ .targetService | replace "/" "-" }}
namespace: {{ (split "/" .targetService)._0 }}
{{- else }}
name: {{ $fullname }}
namespace: {{ $namespace }}
{{- end }}
{{- end }}
{{- end }}
---
{{ $count = add1 $count }}
{{- /* Child HTTPProxy - routes with services */}}
apiVersion: projectcontour.io/v1
kind: HTTPProxy
metadata:
namespace: {{ $namespace }}
name: {{ $fullname }}
labels:
{{- include "vm.labels" (dict "helm" $) | nindent 4 }}
annotations:
projectcontour.io/ingress.class: {{ $ingressClassName }}
spec:
ingressClassName: {{ $ingressClassName }}
routes:
- services:
- name: {{ $fullname }}
port: {{ $servicePortNumber }}
{{- if $.Values.ingress.slowStart.enabled }}
slowStartPolicy:
window: {{ $.Values.ingress.slowStart.window }}
aggression: {{ $.Values.ingress.slowStart.aggression | float64 | squote }}
minWeightPercent: {{ $.Values.ingress.slowStart.minPercent }}
{{- end }}
{{- if $.Values.ingress.enableWebsocket }}
enableWebsockets: true
{{- end }}
{{- if $.Values.contourResponseTimeout }}
timeoutPolicy:
response: {{ $.Values.contourResponseTimeout }}
{{- end }}
{{- end -}}
{{- end -}}
{{- end -}}
{{- end -}}
@@ -0,0 +1,44 @@
{{- if .Values.ingress.enabled -}}
{{- $ctx := dict "helm" . }}
{{- $fullname := include "vm.fullname" $ctx }}
{{- $ns := include "vm.namespace" $ctx }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ $fullname }}
labels: {{ include "vm.labels" $ctx | nindent 4 }}
{{- with .Values.ingress.annotations }}
annotations: {{ toYaml . | nindent 4 }}
{{- end }}
spec:
{{- with .Values.ingress.className }}
ingressClassName: {{ . }}
{{- end }}
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ . | quote }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
rules:
{{- range .Values.ingress.hosts }}
- host: {{ .host | quote }}
http:
paths:
{{- range .paths }}
- path: {{ .path }}
{{- with .pathType }}
pathType: {{ . }}
{{- end }}
backend:
service:
name: {{ $fullname }}
port:
number: {{ $.Values.service.port }}
{{- end }}
{{- end }}
{{- end }}
@@ -0,0 +1,36 @@
{{- if .Values.route.enabled -}}
{{- $ctx := dict "helm" . }}
{{- $fullname := include "vm.fullname" $ctx }}
{{- $ns := include "vm.namespace" $ctx }}
{{- $svcPort := .Values.service.port -}}
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: {{ $fullname }}
namespace: {{ $ns }}
labels: {{ include "vm.labels" $ctx | nindent 4 }}
{{- with .Values.route.annotations }}
annotations: {{ toYaml . | nindent 4 }}
{{- end }}
spec:
parentRefs:
{{- with .Values.route.parentRefs }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.route.hostnames }}
hostnames: {{ toYaml . | nindent 4 }}
{{- end }}
rules:
{{- range .Values.route.rules }}
- backendRefs:
- name: {{ $fullname }}
port: {{ $svcPort }}
weight: 1
{{- with .matches }}
matches: {{ toYaml . | nindent 8 }}
{{- end }}
{{- with .filters }}
filters: {{ toYaml . | nindent 8 }}
{{- end }}
{{- end }}
{{- end }}
@@ -0,0 +1,21 @@
{{- if .Values.scrape.enabled }}
{{- $ctx := dict "helm" . }}
{{- $fullname := include "vm.fullname" $ctx }}
{{- $ns := include "vm.namespace" $ctx }}
---
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMServiceScrape
metadata:
labels: {{ include "vm.labels" $ctx | nindent 4 }}
name: {{ $fullname }}
namespace: {{ $ns }}
spec:
endpoints:
- path: /metrics
port: http
namespaceSelector:
matchNames:
- {{ include "vm.release" $ctx }}
selector:
matchLabels: {{ include "vm.labels" $ctx | nindent 6 }}
{{- end }}
@@ -0,0 +1,17 @@
{{- $ctx := dict "helm" . }}
{{- $fullname := include "vm.fullname" $ctx }}
{{- $ns := include "vm.namespace" $ctx }}
apiVersion: v1
kind: Service
metadata:
name: {{ $fullname }}
namespace: {{ $ns }}
labels: {{ include "vm.labels" $ctx | nindent 4 }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector: {{ include "vm.selectorLabels" $ctx | nindent 4 }}
@@ -0,0 +1,16 @@
{{- if .Values.serviceAccount.create -}}
{{- $ctx := dict "helm" . }}
{{- $fullname := include "vm.fullname" $ctx }}
{{- $ns := include "vm.namespace" $ctx }}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ tpl ((.Values.serviceAccount).name | default $fullname) $ctx }}
namespace: {{ $ns }}
labels: {{ include "vm.labels" $ctx | nindent 4 }}
{{- with .Values.serviceAccount.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
automountServiceAccountToken: {{ .Values.serviceAccount.automount }}
{{- end }}