Skip to content

Commit 3b9beb5

Browse files
authored
Merge pull request #18 from sassoftware/release-11-update
2025.11 Public Release
2 parents 27a8c2a + e406705 commit 3b9beb5

File tree

124 files changed

+6520
-2487
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

124 files changed

+6520
-2487
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,8 @@ helm install my-sas-retrieval-agent-manager oci://ghcr.io/sassoftware/sas-retrie
268268
--values <RAM Values file> \
269269
-n retagentmgr \
270270
--create-namespace
271+
--wait # used in version .11 and later
272+
--timeout 10m
271273
```
272274

273275
Note: Use the package section of this repository to find an installable version. Also, if something fails and you need to redeploy, you'll have to run `kubectl delete ns retagentmgr` first.

helm/sas-retrieval-agent-manager/charts/filebrowser/.helmignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,6 @@
2020
.project
2121
.idea/
2222
*.tmproj
23-
.vscode/
23+
.vscode/
24+
tests/
25+
.debug
Lines changed: 66 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,74 @@
1+
apiVersion: v2
2+
name: filebrowser
3+
description: A Helm chart for File Browser - A web-based file management interface with OAuth2 authentication
4+
type: application
5+
version: 1.0.0
6+
appVersion: v2.23.0
7+
8+
# Chart metadata and repository information
9+
home: https://filebrowser.org
10+
sources:
11+
- https://github.com/filebrowser/filebrowser
12+
icon: https://raw.githubusercontent.com/filebrowser/filebrowser/bb5d192095646e1643f97d5f860d22bb566038d8/frontend/public/img/icons/favicon-32x32.png
13+
14+
# Chart categorization and discovery
15+
keywords:
16+
- filebrowser
17+
- file-browser
18+
- file-server
19+
- http-file-server
20+
- web-interface
21+
- file-management
22+
- oauth2
23+
- authentication
24+
- storage
25+
- kubernetes
26+
27+
# Maintainer information
28+
maintainers:
29+
- name: SAS Institute
30+
31+
url: https://www.sas.com
32+
33+
# Enhanced Artifact Hub annotations
134
annotations:
2-
artifacthub.io/dependencies: |
3-
- name: ingress-nginx
4-
version: ">=4.0.0"
5-
repository: https://kubernetes.github.io/ingress-nginx
6-
condition: ingress.enabled
7-
artifacthub.io/images: |
8-
- name: filebrowser
9-
image: docker.io/filebrowser/filebrowser:v2.23.0
10-
whitelisted: true
11-
artifacthub.io/license: MIT
35+
# Licensing and legal information
36+
artifacthub.io/license: "MIT"
37+
artifacthub.io/operator: "false"
38+
artifacthub.io/prerelease: "false"
39+
40+
# Chart documentation and links
1241
artifacthub.io/links: |
1342
- name: File Browser Documentation
1443
url: https://filebrowser.org/
1544
- name: Source Repository
1645
url: https://github.com/filebrowser/filebrowser
17-
artifacthub.io/operator: "false"
18-
artifacthub.io/prerelease: "false"
19-
helm.version.min: 3.8.0
20-
kubernetes.version.max: 1.30.0
21-
kubernetes.version.min: 1.20.0
46+
47+
# Container images used by this chart
48+
artifacthub.io/images: |
49+
- name: filebrowser
50+
image: docker.io/filebrowser/filebrowser:v2.23.0
51+
whitelisted: true
52+
53+
# Deployment requirements and dependencies
54+
artifacthub.io/dependencies: |
55+
- name: ingress-nginx
56+
version: ">=4.0.0"
57+
repository: https://kubernetes.github.io/ingress-nginx
58+
condition: ingress.enabled
59+
60+
# Resource allocation recommendations
61+
resources.cpu.min: "100m"
2262
resources.cpu.max: "1"
23-
resources.cpu.min: 100m
24-
resources.memory.max: 512Mi
25-
resources.memory.min: 128Mi
63+
resources.memory.min: "128Mi"
64+
resources.memory.max: "512Mi"
65+
66+
# Network and storage requirements
2667
storage.required: "true"
27-
storage.size.min: 1Gi
28-
storage.size.recommended: 10Gi
29-
apiVersion: v2
30-
appVersion: v2.23.0
31-
description: A Helm chart for File Browser - A web-based file management interface
32-
with OAuth2 authentication
33-
home: https://filebrowser.org
34-
icon: https://raw.githubusercontent.com/filebrowser/filebrowser/bb5d192095646e1643f97d5f860d22bb566038d8/frontend/public/img/icons/favicon-32x32.png
35-
keywords:
36-
- filebrowser
37-
- file-browser
38-
- file-server
39-
- http-file-server
40-
- web-interface
41-
- file-management
42-
- oauth2
43-
- authentication
44-
- storage
45-
- kubernetes
46-
maintainers:
47-
48-
name: SAS Institute
49-
url: https://www.sas.com
50-
name: filebrowser
51-
sources:
52-
- https://github.com/filebrowser/filebrowser
53-
type: application
54-
version: 1.0.0
68+
storage.size.min: "1Gi"
69+
storage.size.recommended: "10Gi"
70+
71+
# Compatibility and version information
72+
kubernetes.version.min: "1.20.0"
73+
kubernetes.version.max: "1.30.0"
74+
helm.version.min: "3.8.0"
Lines changed: 27 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,91 +1,59 @@
11
# filebrowser
22

3-
![Version: 1.0.0](https://img.shields.io/badge/Version-1.0.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v2.23.0](https://img.shields.io/badge/AppVersion-v2.23.0-informational?style=flat-square)
4-
5-
A Helm chart for File Browser - A web-based file management interface with OAuth2 authentication
3+
A Helm chart for the File Browser project
64

75
**Homepage:** <https://filebrowser.org>
86

9-
## Maintainers
7+
## Introduction
108

11-
| Name | Email | Url |
12-
| ---- | ------ | --- |
13-
| SAS Institute | <[email protected]> | <https://www.sas.com> |
9+
This chart packages the project **[filebrowser](https://filebrowser.org)** as a Helm chart.
1410

15-
## Source Code
11+
## Parameters
1612

17-
* <https://github.com/filebrowser/filebrowser>
13+
The following tables lists the configurable parameters of the chart and their default values.
1814

1915
## Values
2016

2117
| Key | Type | Default | Description |
2218
|-----|------|---------|-------------|
23-
| affinity | object | `{"nodeAffinity":{"preferredDuringSchedulingIgnoredDuringExecution":[{"preference":{"matchExpressions":[{"key":"sas.com/deployment","operator":"In","values":["sas-retrieval-agent-manager"]}]},"weight":1},{"preference":{"matchExpressions":[{"key":"workload.sas.com/class","operator":"In","values":["ram"]}]},"weight":2}]}}` | Map of node/pod affinities |
24-
| config | object | `{"address":"","baseURL":"/files","database":"/db/filebrowser.db","log":"stdout","port":18080,"root":"/mnt/data"}` | File Browser application specific configuration |
25-
| config.address | string | `""` | Address to bind the server to (empty means all interfaces) |
26-
| config.baseURL | string | `"/files"` | Base URL path for the filebrowser application |
27-
| config.database | string | `"/db/filebrowser.db"` | Path to the SQLite database file for storing filebrowser configuration |
28-
| config.log | string | `"stdout"` | Log output destination (stdout, stderr, or file path) |
29-
| config.port | int | `18080` | Port on which the filebrowser application listens inside the container |
30-
| config.root | string | `"/mnt/data"` | Root directory that filebrowser will serve and manage files from |
31-
| db | object | `{"pvc":{"accessModes":["ReadWriteOnce"],"enabled":true,"size":"256Mi","storageClassName":""}}` | Database configuration for Filebrowser |
32-
| db.pvc | object | `{"accessModes":["ReadWriteOnce"],"enabled":true,"size":"256Mi","storageClassName":""}` | Database persistence configuration |
19+
| affinity | object | `{}` | Map of node/pod affinities |
20+
| config | object | see [values.yaml](values.yaml) | File Browser application specific configuration |
3321
| db.pvc.accessModes | list | `["ReadWriteOnce"]` | Access modes for the database PVC |
3422
| db.pvc.enabled | bool | `true` | Enable persistence for database |
23+
| db.pvc.existingClaim | string | `""` | Existing claim for the database |
3524
| db.pvc.size | string | `"256Mi"` | Size for the database PVC |
3625
| db.pvc.storageClassName | string | `""` | Storage class name for the database PVC |
37-
| enabled | bool | `false` | Enable the actual filebrowser deployment. Set to true to deploy the filebrowser component |
38-
| fullnameOverride | string | `"sas-retrieval-agent-manager-filebrowser"` | String to fully override the fullname template with a string |
39-
| image | object | `{"pullPolicy":"IfNotPresent","repo":{"base":"docker.io","path":"filebrowser/filebrowser"},"tag":"v2.42.1"}` | Container image configuration for Filebrowser and related services |
26+
| fullnameOverride | string | `""` | String to fully override the fullname template with a string |
4027
| image.pullPolicy | string | `"IfNotPresent"` | Container image pull policy |
41-
| image.repo | object | `{"base":"docker.io","path":"filebrowser/filebrowser"}` | Container image configuration |
42-
| image.repo.base | string | `"docker.io"` | Container registry base URL |
43-
| image.repo.path | string | `"filebrowser/filebrowser"` | Container image path/name |
44-
| image.tag | string | `"v2.42.1"` | Overrides the image tag whose default is the chart appVersion. |
28+
| image.repository | string | `"docker.io/filebrowser/filebrowser"` | Container image name |
29+
| image.tag | string | `""` | Overrides the image tag whose default is the chart appVersion. |
4530
| imagePullSecrets | list | `[]` | Array of imagePullSecrets in the namespace for pulling images |
46-
| ingress | object | `{"annotations":{"nginx.ingress.kubernetes.io/auth-signin":"https://$host/SASRetrievalAgentManager/oauth2/start?rd=$escaped_request_uri","nginx.ingress.kubernetes.io/auth-url":"https://$host/SASRetrievalAgentManager/oauth2/auth","nginx.ingress.kubernetes.io/proxy-body-size":"500m","nginx.ingress.kubernetes.io/proxy-buffer-size":"16k","nginx.ingress.kubernetes.io/rewrite-target":"/$2","nginx.ingress.kubernetes.io/ssl-redirect":"true"},"className":"nginx","enabled":true,"paths":[{"path":"/SASRetrievalAgentManager/files(/|$)(.*)","pathType":"ImplementationSpecific"}],"tls":[],"useGlobal":false}` | Ingress configuration for external access to Filebrowser |
47-
| ingress.annotations | object | `{"nginx.ingress.kubernetes.io/auth-signin":"https://$host/SASRetrievalAgentManager/oauth2/start?rd=$escaped_request_uri","nginx.ingress.kubernetes.io/auth-url":"https://$host/SASRetrievalAgentManager/oauth2/auth","nginx.ingress.kubernetes.io/proxy-body-size":"500m","nginx.ingress.kubernetes.io/proxy-buffer-size":"16k","nginx.ingress.kubernetes.io/rewrite-target":"/$2","nginx.ingress.kubernetes.io/ssl-redirect":"true"}` | Annotations for the Ingress |
48-
| ingress.annotations."nginx.ingress.kubernetes.io/auth-signin" | string | `"https://$host/SASRetrievalAgentManager/oauth2/start?rd=$escaped_request_uri"` | OAuth2 authentication sign-in URL |
49-
| ingress.annotations."nginx.ingress.kubernetes.io/auth-url" | string | `"https://$host/SASRetrievalAgentManager/oauth2/auth"` | OAuth2 authentication validation URL |
50-
| ingress.annotations."nginx.ingress.kubernetes.io/proxy-body-size" | string | `"500m"` | Maximum allowed size of client request body (for file uploads) |
51-
| ingress.annotations."nginx.ingress.kubernetes.io/proxy-buffer-size" | string | `"16k"` | Size of buffer used for reading the first part of response received from proxied server |
52-
| ingress.annotations."nginx.ingress.kubernetes.io/rewrite-target" | string | `"/$2"` | URL rewrite rule to strip the prefix path |
53-
| ingress.annotations."nginx.ingress.kubernetes.io/ssl-redirect" | string | `"true"` | Force SSL redirect |
54-
| ingress.className | string | `"nginx"` | Class name of the Ingress |
55-
| ingress.enabled | bool | `true` | Enable ingress for external access to API |
56-
| ingress.paths | list | `[{"path":"/SASRetrievalAgentManager/files(/|$)(.*)","pathType":"ImplementationSpecific"}]` | Ingress path configuration when useGlobal is true |
57-
| ingress.tls | list | `[]` | TLS configuration for ingress |
58-
| ingress.useGlobal | bool | `false` | Use global ingress configuration instead of local hosts configuration |
31+
| ingress.annotations | object | `{}` | Annotations for the Ingress |
32+
| ingress.className | string | `""` | Class name of the Ingress |
33+
| ingress.enabled | bool | `false` | Enable the use of the ingress controller to access the web UI |
34+
| ingress.hosts | list | see [values.yaml](values.yaml) | Hosts for the ingress |
35+
| ingress.tls | list | `[]` | |
5936
| initContainers | list | `[]` | Set of initContainers for the deployment |
60-
| livenessProbe | object | `{}` | Liveness probe configuration (disabled by default, enable if needed) |
61-
| nameOverride | string | `"filebrowser"` | String to partially override the fullname template with a string (will prepend the release name) |
37+
| livenessProbe | object | `{}` | Liveness probe configuration |
38+
| nameOverride | string | `""` | String to partially override the fullname template with a string (will prepend the release name) |
6239
| nodeSelector | object | `{}` | Node labels for pod assignment |
63-
| podAnnotations | object | `{}` | Annotations to add to the pods |
64-
| podLabels | object | `{"sas.com/deployment":"sas-retrieval-agent-manager","workload.sas.com/class":"ram"}` | Labels to add to the pods |
40+
| podAnnotations | object | `{}` | Annotations of the pods |
6541
| podSecurityContext | object | `{}` | The security context for the pods |
66-
| readinessProbe | object | `{"httpGet":{"path":"/health","port":"http"}}` | Readiness probe configuration |
42+
| readinessProbe | object | see [values.yaml](values.yaml) | Readiness probe configuration |
6743
| replicaCount | int | `1` | Number of replicas to run. Chart is not designed to scale horizontally, use at your own risk |
6844
| resources | object | `{}` | The resources to allocate for the container |
69-
| rootDir.hostPath | object | `{"path":"/mnt/data"}` | Host path configuration (only used when type is 'hostPath') |
70-
| rootDir.hostPath.path | string | `"/mnt/data"` | Path on the host to mount |
71-
| rootDir.pvc | object | `{"accessModes":["ReadWriteOnce"],"createStorageClass":true,"name":"vhub-pv","size":"20Gi","storageClassName":"azurefile-sas"}` | Persistent Volume Claim configuration (only used when type is 'pvc') |
45+
| rootDir.hostPath.path | string | `"/path/on/host"` | |
7246
| rootDir.pvc.accessModes | list | `["ReadWriteOnce"]` | Access modes for the root directory PVC |
73-
| rootDir.pvc.createStorageClass | bool | `true` | Whether to create the storage class if it doesn't exist |
74-
| rootDir.pvc.name | string | `"vhub-pv"` | Name for the PVC |
75-
| rootDir.pvc.size | string | `"20Gi"` | Size for the root directory PVC |
76-
| rootDir.pvc.storageClassName | string | `"azurefile-sas"` | Storage class name for the root directory PVC |
47+
| rootDir.pvc.existingClaim | string | `""` | Existing claim for the root directory |
48+
| rootDir.pvc.size | string | `"2Gi"` | Size for the root directory PVC |
49+
| rootDir.pvc.storageClassName | string | `""` | Storage class name for the root directory PVC |
7750
| rootDir.readOnly | bool | `false` | Mount the root directory in read-only mode |
78-
| rootDir.type | string | `"pvc"` | Type of rootDir mount. Valid values are [pvc, hostPath, emptyDir] |
51+
| rootDir.type | string | `"pvc"` | type of rootDir mount. Valid values are [pvc, hostPath, emptyDir] |
7952
| securityContext | object | `{}` | The security context for the application container |
80-
| service | object | `{"port":80,"type":"ClusterIP"}` | Kubernetes Service configuration |
8153
| service.port | int | `80` | Kubernetes Service port |
8254
| service.type | string | `"ClusterIP"` | Kubernetes Service type |
83-
| serviceAccount | object | `{"annotations":{},"create":true,"name":""}` | Service account configuration for API |
8455
| serviceAccount.annotations | object | `{}` | Annotations to add to the service account |
8556
| serviceAccount.create | bool | `true` | Specifies whether a service account should be created |
8657
| serviceAccount.name | string | `""` | The name of the service account to use. If not set and create is true, a name is generated using the fullname template |
87-
| strategy | object | `{"type":"Recreate"}` | Deployment strategy to use (Recreate is recommended for stateful applications) |
88-
| tolerations | list | `[]` | Tolerations for pod assignment |
89-
90-
----------------------------------------------
91-
Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2)
58+
| strategy | object | `{"type":"Recreate"}` | Deployment strategy to use |
59+
| tolerations | list | `[]` | Tolerations for pod assignment |

helm/sas-retrieval-agent-manager/charts/filebrowser/templates/_helpers.tpl

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,32 @@ Usage: {{ include "testValuesPath" (list .Values "x" "y" "z") }}
8080
{{- end }}
8181
{{- $exists }}
8282
{{- end }}
83+
84+
{{/*
85+
Implement logic to determine storage class
86+
and whether to create it based on target platform
87+
*/}}
88+
{{- define "filebrowser.storageConfig" -}}
89+
{{- $platform := .Values.global.targetPlatform }}
90+
{{- $userSC := .Values.rootDir.pvc.storageClassName | default "" }}
91+
{{- $storageClass := $userSC }}
92+
{{- $createSC := .Values.rootDir.pvc.createStorageClass | default false }}
93+
94+
{{- if or (eq $userSC "") (eq $userSC nil) }}
95+
{{- if eq $platform "azure" }}
96+
{{- $storageClass = "azurefile-sas" }}
97+
{{- $createSC = true }}
98+
{{- else if or (eq $platform "openshift") (eq $platform "kubernetes") }}
99+
{{- $storageClass = "nfs-client" }}
100+
{{- $createSC = false }}
101+
{{- else if eq $platform "aws" }}
102+
{{- $storageClass = "efs" }}
103+
{{- $createSC = false }}
104+
{{- else if eq $platform "gcp" }}
105+
{{- $storageClass = "filestore" }}
106+
{{- $createSC = false }}
107+
{{- end }}
108+
{{- end }}
109+
110+
{{- printf "%s|%t" $storageClass $createSC }}
111+
{{- end }}

helm/sas-retrieval-agent-manager/charts/filebrowser/templates/deployment.yaml

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
{{- if .Values.enabled -}}
2+
{{- $repo_base := "" -}}
3+
{{- if ((include "testValuesPath" (list .Values "global" "image" "repo" "base")) | eq "true") -}}
4+
{{- $repo_base = .Values.global.image.repo.base | default .Values.image.repo.base -}}
5+
{{- else -}}
6+
{{- $repo_base = .Values.image.repo.base -}}
7+
{{- end -}}
28
apiVersion: apps/v1
39
kind: Deployment
410
metadata:
@@ -16,15 +22,18 @@ spec:
1622
{{- include "filebrowser.selectorLabels" . | nindent 6 }}
1723
template:
1824
metadata:
19-
annotations:
20-
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
2125
{{- with .Values.podAnnotations }}
26+
annotations:
2227
{{- toYaml . | nindent 8 }}
2328
{{- end }}
2429
labels:
2530
{{- include "filebrowser.selectorLabels" . | nindent 8 }}
2631
spec:
27-
{{- with .Values.imagePullSecrets }}
32+
{{- $globalImagePullSecrets := list -}}
33+
{{- if ((include "testValuesPath" (list .Values "global" "imagePullSecrets")) | eq "true") -}}
34+
{{- $globalImagePullSecrets = .Values.global.imagePullSecrets | default (list) -}}
35+
{{- end -}}
36+
{{- with uniq (concat (.Values.imagePullSecrets | default (list)) $globalImagePullSecrets) }}
2837
imagePullSecrets:
2938
{{- toYaml . | nindent 8 }}
3039
{{- end }}
@@ -33,7 +42,7 @@ spec:
3342
{{- toYaml .Values.podSecurityContext | nindent 8 }}
3443
initContainers:
3544
- name: init-db
36-
image: busybox
45+
image: "{{ $repo_base }}/busybox"
3746
command: ["sh", "-c", "touch /db/filebrowser.db && chown 1000:1000 /db/filebrowser.db"]
3847
securityContext:
3948
{{- toYaml .Values.securityContext | nindent 12 }}
@@ -50,14 +59,14 @@ spec:
5059
- name: {{ .Chart.Name }}
5160
securityContext:
5261
{{- toYaml .Values.securityContext | nindent 12 }}
53-
image: "{{ .Values.image.repo.base }}/{{ .Values.image.repo.path }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
62+
image: "{{ $repo_base }}/{{ .Values.image.repo.path }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
5463
imagePullPolicy: {{ .Values.image.pullPolicy }}
5564
env:
56-
{{- if .Values.securityContext.runAsUser }}
65+
{{- if ((include "testValuesPath" (list .Values "securityContext" "runAsUser")) | eq "true") }}
5766
- name: PUID
5867
value: {{ .Values.securityContext.runAsUser | quote }}
5968
{{- end }}
60-
{{- if .Values.securityContext.runAsGroup }}
69+
{{- if ((include "testValuesPath" (list .Values "securityContext" "runAsGroup")) | eq "true") }}
6170
- name: PGID
6271
value: {{ .Values.securityContext.runAsGroup | quote }}
6372
{{- end }}

0 commit comments

Comments
 (0)