Skip to content

Commit f366bb3

Browse files
edits
1 parent 0096111 commit f366bb3

22 files changed

Lines changed: 1364 additions & 2 deletions

activeloop-neohorizon/.helmignore

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Patterns to ignore when building packages.
2+
# This supports shell glob matching, relative path matching, and
3+
# negation (prefixed with !). Only one pattern per line.
4+
.DS_Store
5+
# Common VCS dirs
6+
.git/
7+
.gitignore
8+
.bzr/
9+
.bzrignore
10+
.hg/
11+
.hgignore
12+
.svn/
13+
# Common backup files
14+
*.swp
15+
*.bak
16+
*.tmp
17+
*.orig
18+
*~
19+
# Various IDEs
20+
.project
21+
.idea/
22+
*.tmproj
23+
.vscode/

activeloop-neohorizon/Chart.lock

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
dependencies:
2+
- name: postgresql
3+
repository: oci://registry-1.docker.io/bitnamicharts
4+
version: 16.7.16
5+
- name: rabbitmq
6+
repository: oci://registry-1.docker.io/bitnamicharts
7+
version: 16.0.10
8+
digest: sha256:abf273a1b71ac9837ee0e6573d63ade977fd28a88dc6583bbb766c785749fffd
9+
generated: "2025-07-11T18:41:47.356935751+04:00"

activeloop-neohorizon/Chart.yaml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
apiVersion: v2
2+
name: activeloop-neohorizon
3+
description: Activeloop NeoHorizon Deployment Chart
4+
type: application
5+
version: 0.1.0
6+
appVersion: "v0.0.4"
7+
kubeVersion: ">= 1.24.0-0"
8+
9+
maintainers:
10+
- name: Activeloop SRE
11+
email: sre@activeloop.dev
12+
13+
sources:
14+
- https://github.com/activeloopai/activeloop-helm-charts
15+
home: https://activeloop.ai
16+
icon: https://static.activeloop.io/logos/SVG/activeloop-logo-256x256.svg
17+
18+
keywords:
19+
- activeloop
20+
- neohorizon
21+
- deeplake
22+
23+
dependencies:
24+
- name: postgresql
25+
version: 16.7.16
26+
repository: oci://registry-1.docker.io/bitnamicharts
27+
condition: postgresql.create
28+
29+
- name: rabbitmq
30+
version: 16.0.10
31+
repository: oci://registry-1.docker.io/bitnamicharts
32+
condition: rabbitmq.create
82.8 KB
Binary file not shown.
71.4 KB
Binary file not shown.
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
Thank you for installing the Activeloop NeoHorizon Helm chart!
2+
3+
To access your deployed APIs, follow the instructions below for each enabled API:
4+
5+
{{- range $api := .Values.apis }}
6+
{{- if $api.enabled }}
7+
--------------------------------------------------------------------------------
8+
API: {{ $api.name }}
9+
10+
{{- if $api.ingress.enabled }}
11+
Ingress is enabled for this API.
12+
Access it at:
13+
{{- range $host := $api.ingress.hosts }}
14+
{{- range $path := $host.paths }}
15+
http{{ if $api.ingress.tls }}s{{ end }}://{{ $host.host }}{{ $path.path }}
16+
{{- end }}
17+
{{- end }}
18+
{{- else if eq ($api.service.type | default "ClusterIP") "NodePort" }}
19+
NodePort service is enabled.
20+
Run the following to get the service URL:
21+
export NODE_PORT=$(kubectl get --namespace {{ include "final.namespace" $ }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ printf "%s-%s-svc" (include "final.namespace" $) $api.name }})
22+
export NODE_IP=$(kubectl get nodes --namespace {{ include "final.namespace" $ }} -o jsonpath="{.items[0].status.addresses[0].address}")
23+
echo http://$NODE_IP:$NODE_PORT
24+
{{- else if eq ($api.service.type | default "ClusterIP") "LoadBalancer" }}
25+
LoadBalancer service is enabled.
26+
It may take a few minutes for the external IP to be available.
27+
Watch status with:
28+
kubectl get --namespace {{ include "final.namespace" $ }} svc -w {{ printf "%s-%s-svc" (include "final.namespace" $) $api.name }}
29+
Once ready, get the external IP and access the service:
30+
export SERVICE_IP=$(kubectl get svc --namespace {{ include "final.namespace" $ }} {{ printf "%s-%s-svc" (include "final.namespace" $) $api.name }} -o jsonpath="{.status.loadBalancer.ingress[0].ip}")
31+
echo http://$SERVICE_IP:{{ $api.service.port | default 80 }}
32+
{{- else }}
33+
ClusterIP service is enabled.
34+
To access the API locally, run:
35+
export POD_NAME=$(kubectl get pods --namespace {{ include "final.namespace" $ }} -l "app.kubernetes.io/name={{ $api.name }},app.kubernetes.io/instance={{ $.Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
36+
export CONTAINER_PORT={{ $api.port | default 8000 }}
37+
kubectl --namespace {{ include "final.namespace" $ }} port-forward $POD_NAME 8080:$CONTAINER_PORT
38+
Then visit: http://127.0.0.1:8080
39+
{{- end }}
40+
--------------------------------------------------------------------------------
41+
{{- end }}
42+
{{- end }}
43+
44+
For troubleshooting, check the status of your pods:
45+
kubectl get pods --namespace {{ include "final.namespace" $ }}
46+
47+
For logs:
48+
kubectl logs --namespace {{ include "final.namespace" $ }} <pod-name>
49+
50+
Thank you for using Activeloop NeoHorizon!
51+
52+
________ ________ _________ ___ ___ ___ _______ ___ ________ ________ ________
53+
|\ __ \ |\ ____\ |\___ ___\ |\ \ |\ \ / /||\ ___ \ |\ \ |\ __ \ |\ __ \ |\ __ \
54+
\ \ \|\ \ \ \ \___| \|___ \ \_| \ \ \ \ \ \ / / /\ \ __/| \ \ \ \ \ \|\ \ \ \ \|\ \ \ \ \|\ \
55+
\ \ __ \ \ \ \ \ \ \ \ \ \ \ \ \/ / / \ \ \_|/__ \ \ \ \ \ \\\ \ \ \ \\\ \ \ \ ____\
56+
\ \ \ \ \ \ \ \____ \ \ \ \ \ \ \ \ / / \ \ \_|\ \ \ \ \____ \ \ \\\ \ \ \ \\\ \ \ \ \___|
57+
\ \__\ \__\ \ \_______\ \ \__\ \ \__\ \ \__/ / \ \_______\ \ \_______\ \ \_______\ \ \_______\ \ \__\
58+
\|__|\|__| \|_______| \|__| \|__| \|__|/ \|_______| \|_______| \|_______| \|_______| \|__|
59+
60+
________ _______ ________ ___ ___ ________ ________ ___ ________ ________ ________
61+
|\ ___ \ |\ ___ \ |\ __ \ |\ \|\ \ |\ __ \ |\ __ \ |\ \ |\_____ \ |\ __ \ |\ ___ \
62+
\ \ \\ \ \ \ \ __/| \ \ \|\ \ \ \ \\\ \ \ \ \|\ \ \ \ \|\ \ \ \ \ \|___/ /| \ \ \|\ \ \ \ \\ \ \
63+
\ \ \\ \ \ \ \ \_|/__ \ \ \\\ \ \ \ __ \ \ \ \\\ \ \ \ _ _\ \ \ \ / / / \ \ \\\ \ \ \ \\ \ \
64+
\ \ \\ \ \ \ \ \_|\ \ \ \ \\\ \ \ \ \ \ \ \ \ \\\ \ \ \ \\ \| \ \ \ / /_/__ \ \ \\\ \ \ \ \\ \ \
65+
\ \__\\ \__\ \ \_______\ \ \_______\ \ \__\ \__\ \ \_______\ \ \__\\ _\ \ \__\ |\________\ \ \_______\ \ \__\\ \__\
66+
\|__| \|__| \|_______| \|_______| \|__|\|__| \|_______| \|__|\|__| \|__| \|_______| \|_______| \|__| \|__|
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
{{/*
2+
Expand the name of the chart.
3+
*/}}
4+
{{- define "chart.name" -}}
5+
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
6+
{{- end }}
7+
{{- define "activeloop-neohorizon.name" -}}
8+
{{ include "chart.name" . }}
9+
{{- end }}
10+
11+
{{/*
12+
Create a default fully qualified app name.
13+
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
14+
If release name contains chart name it will be used as a full name.
15+
*/}}
16+
{{- define "activeloop-neohorizon.fullname" -}}
17+
{{- if .Values.fullnameOverride }}
18+
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
19+
{{- else }}
20+
{{- $name := default .Chart.Name .Values.nameOverride }}
21+
{{- if contains $name .Release.Name }}
22+
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
23+
{{- else }}
24+
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
25+
{{- end }}
26+
{{- end }}
27+
{{- end }}
28+
29+
{{/*
30+
Create chart name and version as used by the chart label.
31+
*/}}
32+
{{- define "activeloop-neohorizon.chart" -}}
33+
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
34+
{{- end }}
35+
36+
{{/*
37+
Common labels
38+
*/}}
39+
{{- define "activeloop-neohorizon.labels" -}}
40+
helm.sh/chart: {{ include "activeloop-neohorizon.chart" . }}
41+
{{ include "activeloop-neohorizon.selectorLabels" . }}
42+
{{- if .Chart.AppVersion }}
43+
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
44+
{{- end }}
45+
app.kubernetes.io/managed-by: {{ .Release.Service }}
46+
{{- end }}
47+
48+
{{/*
49+
Selector labels
50+
*/}}
51+
{{- define "activeloop-neohorizon.selectorLabels" -}}
52+
app.kubernetes.io/name: {{ include "activeloop-neohorizon.name" . }}
53+
app.kubernetes.io/instance: {{ .Release.Name }}
54+
{{- end }}
55+
56+
{{/*
57+
Create the name of the service account to use
58+
*/}}
59+
{{- define "activeloop-neohorizon.serviceAccountName" -}}
60+
{{- if .Values.serviceAccount.create }}
61+
{{- default (include "activeloop-neohorizon.fullname" .) .Values.serviceAccount.name }}
62+
{{- else }}
63+
{{- default "default" .Values.serviceAccount.name }}
64+
{{- end }}
65+
{{- end }}
66+
67+
68+
{{- define "final.namespace" -}}
69+
{{- if .Values.global.namespaceOverride -}}
70+
{{- print .Values.global.namespaceOverride -}}
71+
{{- else -}}
72+
{{- print .Release.Namespace -}}
73+
{{- end }}
74+
{{- end -}}
75+
76+
{{/* Return RabbitMQ connection string */}}
77+
{{- define "activeloop-neohorizon.rabbitmqConnection" -}}
78+
{{- if .Values.global.config.rabbitmq_url }}
79+
{{ .Values.global.config.rabbitmq_url }}
80+
{{- else if .Values.rabbitmq.create }}
81+
amqp://{{ .Values.rabbitmq.auth.username }}:{{ .Values.rabbitmq.auth.password }}@{{ .Release.Name }}-rabbitmq.{{ $.Release.Namespace }}:5672
82+
{{- else }}
83+
"" {{/* fallback */}}
84+
{{- end }}
85+
{{- end }}
86+
87+
{{/* Return PostgreSQL connection string */}}
88+
{{- define "activeloop-neohorizon.postgresqlHost" -}}
89+
{{- if .Values.global.config.postgres_host }}
90+
{{ .Values.global.config.postgres_host }}
91+
{{- else if .Values.postgresql.create }}
92+
{{ .Release.Name }}-postgresql.{{ $.Release.Namespace }}
93+
{{- else }}
94+
"" {{/* fallback */}}
95+
{{- end }}
96+
{{- end }}
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
{{- range $key, $val := .Values.apis }}
2+
---
3+
apiVersion: apps/v1
4+
kind: Deployment
5+
metadata:
6+
name: {{ printf "%s-%s" (include "chart.name" $) $key | kebabcase }}
7+
namespace: {{ include "final.namespace" $ }}
8+
labels:
9+
app.kubernetes.io/name: {{ $key | kebabcase }}
10+
app.kubernetes.io/component: api
11+
app.kubernetes.io/instance: {{ $.Release.Name }}
12+
app.kubernetes.io/managed-by: {{ $.Release.Service }}
13+
app.kubernetes.io/part-of: {{ include "chart.name" $ }}
14+
helm.sh/chart: {{ $.Chart.Name }}
15+
{{- with $val.labels }}
16+
{{- toYaml . | nindent 4 }}
17+
{{- end }}
18+
{{- with $val.annotations }}
19+
annotations:
20+
{{- toYaml . | nindent 4 }}
21+
{{- end }}
22+
spec:
23+
replicas: {{ $val.replicas | default 1 }}
24+
{{- with $val.strategy }}
25+
strategy:
26+
{{- toYaml . | nindent 4 }}
27+
{{- end }}
28+
selector:
29+
matchLabels:
30+
app.kubernetes.io/name: {{ $key | kebabcase }}
31+
app.kubernetes.io/component: api
32+
app.kubernetes.io/instance: {{ $.Release.Name }}
33+
template:
34+
metadata:
35+
labels:
36+
app.kubernetes.io/name: {{ $key | kebabcase }}
37+
app.kubernetes.io/component: api
38+
app.kubernetes.io/instance: {{ $.Release.Name }}
39+
app.kubernetes.io/managed-by: {{ $.Release.Service }}
40+
app.kubernetes.io/part-of: {{ include "chart.name" $ }}
41+
helm.sh/chart: {{ $.Chart.Name }}
42+
{{- with $val.labels }}
43+
{{- toYaml . | nindent 8 }}
44+
{{- end }}
45+
{{- with $val.podAnnotations }}
46+
annotations:
47+
{{- toYaml . | nindent 8 }}
48+
{{- end }}
49+
spec:
50+
serviceAccountName: {{ $val.serviceAccount.name | default "default" }}
51+
{{- with $val.imagePullSecrets }}
52+
imagePullSecrets:
53+
{{- toYaml . | nindent 8 }}
54+
{{- end }}
55+
containers:
56+
- name: {{ $key | kebabcase }}
57+
{{- $image := get $val "image" | default dict }}
58+
image: "{{ get $image "registry" | default $.Values.global.image.registry }}/{{ get $image "repository" | default $.Values.global.image.repository }}:{{ get $image "tag" | default $.Values.global.image.tag | default $.Chart.AppVersion }}"
59+
imagePullPolicy: {{ $val.imagePullPolicy | default "IfNotPresent" }}
60+
61+
{{- with $val.command }}
62+
command:
63+
{{- toYaml . | nindent 12 }}
64+
{{- end }}
65+
66+
{{- with $val.args }}
67+
args:
68+
{{- toYaml . | nindent 12 }}
69+
{{- end }}
70+
71+
{{- with $val.env }}
72+
env:
73+
{{- range . }}
74+
- name: {{ .name }}
75+
value: {{ .value | quote }}
76+
{{- end }}
77+
{{- end }}
78+
79+
envFrom:
80+
- secretRef:
81+
name: {{ include "activeloop-neohorizon.fullname" $ }}
82+
{{- with $val.envFrom }}
83+
{{- toYaml . | nindent 12 }}
84+
{{- end }}
85+
86+
{{- if and $val.enableHealthProbes }}
87+
livenessProbe:
88+
httpGet:
89+
path: /health
90+
port: 8000
91+
initialDelaySeconds: 30
92+
periodSeconds: 20
93+
timeoutSeconds: 3
94+
failureThreshold: 3
95+
readinessProbe:
96+
httpGet:
97+
path: /health
98+
port: 8000
99+
initialDelaySeconds: 10
100+
periodSeconds: 10
101+
timeoutSeconds: 3
102+
failureThreshold: 3
103+
successThreshold: 1
104+
startupProbe:
105+
httpGet:
106+
path: /health
107+
port: 8000
108+
failureThreshold: 20
109+
periodSeconds: 5
110+
timeoutSeconds: 3
111+
{{- end }}
112+
113+
{{- with $val.resources }}
114+
resources:
115+
{{- toYaml . | nindent 12 }}
116+
{{- end }}
117+
118+
119+
{{- with $val.securityContext | default $.Values.global.securityContext }}
120+
securityContext:
121+
{{- toYaml . | nindent 12 }}
122+
{{- end }}
123+
124+
{{- with $val.nodeSelector | default $.Values.global.nodeSelector }}
125+
nodeSelector:
126+
{{- toYaml . | nindent 8 }}
127+
{{- end }}
128+
129+
{{- with $val.affinity | default $.Values.global.affinity }}
130+
affinity:
131+
{{- toYaml . | nindent 8 }}
132+
{{- end }}
133+
134+
{{- with $val.tolerations | default $.Values.global.tolerations }}
135+
tolerations:
136+
{{- toYaml . | nindent 8 }}
137+
{{- end }}
138+
139+
{{- with $val.podSecurityContext | default $.Values.global.podSecurityContext }}
140+
securityContext:
141+
{{- toYaml . | nindent 8 }}
142+
{{- end }}
143+
{{- end }}

0 commit comments

Comments
 (0)