Skip to content

Commit 7ae1f96

Browse files
committed
Add objectStore and ExternalDatabase fields to datastore .spec
Signed-off-by: Sheng Lin <[email protected]>
1 parent c46cd53 commit 7ae1f96

File tree

7 files changed

+487
-267
lines changed

7 files changed

+487
-267
lines changed

api/apps/v1alpha1/nemo_datastore_types.go

Lines changed: 106 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"fmt"
2121
"maps"
2222
"os"
23+
"strconv"
2324

2425
rendertypes "github.com/NVIDIA/k8s-nim-operator/internal/render/types"
2526
utils "github.com/NVIDIA/k8s-nim-operator/internal/utils"
@@ -79,7 +80,19 @@ type NemoDatastoreSpec struct {
7980
GroupID *int64 `json:"groupID,omitempty"`
8081
RuntimeClass string `json:"runtimeClass,omitempty"`
8182

82-
DataStoreParams NemoDatastoreParams `json:"dataStoreParams"`
83+
ObjectStore ObjectStore `json:"objectStore"` // e.g. minio
84+
ExternalDatabase ExternalDatabase `json:"externalDatabase"` // e.g. postgres
85+
86+
Secrets Secrets `json:"secrets"`
87+
PVC *PersistentVolumeClaim `json:"pvc,omitempty"`
88+
}
89+
90+
type Secrets struct {
91+
GiteaAdminSecret string `json:"giteaAdminSecret"`
92+
LfsJwtSecret string `json:"lfsJwtSecret"`
93+
DataStoreInitSecret string `json:"datastoreInitSecret"`
94+
DataStoreConfigSecret string `json:"datastoreConfigSecret"` // config_environment.sh
95+
DataStoreInlineConfigSecret string `json:"datastoreInlineConfigSecret"`
8396
}
8497

8598
// NemoDatastoreStatus defines the observed state of NemoDatastore
@@ -89,21 +102,26 @@ type NemoDatastoreStatus struct {
89102
State string `json:"state,omitempty"`
90103
}
91104

92-
type NemoDatastoreParams struct {
93-
DBSecret string `json:"dbSecret"`
94-
GiteaAdminSecret string `json:"giteaAdminSecret"`
95-
96-
ObjectStoreSecret string `json:"objStoreSecret"`
97-
DataStoreSettingsSecret string `json:"datastoreSettingsSecret"`
98-
LfsJwtSecret string `json:"lfsJwtSecret"`
105+
type ObjectStore struct { // e.g. Minio, s3
106+
ObjectStoreSecret string `json:"objectStoreSecret"`
107+
ObjectStoreAccessKey string `json:"objectStoreSecretAccessKey"`
108+
ObjectStoreSecretAccessSecret string `json:"objectStoreSecretAccessSecret"`
99109

100-
DataStoreInitSecret string `json:"datastoreInitSecret"`
101-
DataStoreConfigSecret string `json:"datastoreConfigSecret"`
102-
DataStoreInlineConfigSecret string `json:"datastoreInlineConfigSecret"`
103-
104-
SshEnabled bool `json:"sshEnabled"`
110+
ServeDirect bool `json:"serveDirect"`
111+
Endpoint string `json:"endpoint"`
112+
BucketName string `json:"bucketName"`
113+
Region string `json:"region"`
114+
SSL bool `json:"ssl"`
115+
}
105116

106-
PVC *PersistentVolumeClaim `json:"pvc,omitempty"`
117+
type ExternalDatabase struct {
118+
SSLMode string `json:"sslMode"`
119+
Host string `json:"host"`
120+
Port int `json:"port"`
121+
User string `json:"user"`
122+
Database string `json:"database"`
123+
DatabaseSecret string `json:"databaseSecret"`
124+
DatabaseSecretKey string `json:"databaseSecretKey"`
107125
}
108126

109127
// +genclient
@@ -134,9 +152,8 @@ type NemoDatastoreList struct {
134152
// Prefers pvc.Name if explicitly set by the user in the NemoDatastore instance
135153
func (n *NemoDatastore) GetPVCName() string {
136154
pvcName := fmt.Sprintf("%s-pvc", n.GetName())
137-
dsParam := n.Spec.DataStoreParams
138-
if dsParam.PVC != nil && dsParam.PVC.Name != "" {
139-
pvcName = dsParam.PVC.Name
155+
if n.Spec.PVC != nil && n.Spec.PVC.Name != "" {
156+
pvcName = n.Spec.PVC.Name
140157
}
141158
return pvcName
142159
}
@@ -200,9 +217,9 @@ func (n *NemoDatastore) GetStandardEnv() []corev1.EnvVar {
200217
Name: "GITEA__LFS__MINIO_ACCESS_KEY_ID",
201218
ValueFrom: &corev1.EnvVarSource{
202219
SecretKeyRef: &corev1.SecretKeySelector{
203-
Key: "objectStoreKey",
220+
Key: n.Spec.ObjectStore.ObjectStoreAccessKey,
204221
LocalObjectReference: corev1.LocalObjectReference{
205-
Name: n.Spec.DataStoreParams.ObjectStoreSecret,
222+
Name: n.Spec.ObjectStore.ObjectStoreSecret,
206223
},
207224
},
208225
},
@@ -211,9 +228,9 @@ func (n *NemoDatastore) GetStandardEnv() []corev1.EnvVar {
211228
Name: "GITEA__LFS__MINIO_SECRET_ACCESS_KEY",
212229
ValueFrom: &corev1.EnvVarSource{
213230
SecretKeyRef: &corev1.SecretKeySelector{
214-
Key: "objectStoreSecret",
231+
Key: n.Spec.ObjectStore.ObjectStoreSecretAccessSecret,
215232
LocalObjectReference: corev1.LocalObjectReference{
216-
Name: n.Spec.DataStoreParams.ObjectStoreSecret,
233+
Name: n.Spec.ObjectStore.ObjectStoreSecret,
217234
},
218235
},
219236
},
@@ -224,7 +241,7 @@ func (n *NemoDatastore) GetStandardEnv() []corev1.EnvVar {
224241
SecretKeyRef: &corev1.SecretKeySelector{
225242
Key: "jwtSecret",
226243
LocalObjectReference: corev1.LocalObjectReference{
227-
Name: n.Spec.DataStoreParams.LfsJwtSecret,
244+
Name: n.Spec.Secrets.LfsJwtSecret,
228245
},
229246
},
230247
},
@@ -233,9 +250,9 @@ func (n *NemoDatastore) GetStandardEnv() []corev1.EnvVar {
233250
Name: "GITEA__DATABASE__PASSWD",
234251
ValueFrom: &corev1.EnvVarSource{
235252
SecretKeyRef: &corev1.SecretKeySelector{
236-
Key: "postgresPassword",
253+
Key: n.Spec.ExternalDatabase.DatabaseSecretKey,
237254
LocalObjectReference: corev1.LocalObjectReference{
238-
Name: n.Spec.DataStoreParams.DBSecret,
255+
Name: n.Spec.ExternalDatabase.DatabaseSecret,
239256
},
240257
},
241258
},
@@ -245,6 +262,9 @@ func (n *NemoDatastore) GetStandardEnv() []corev1.EnvVar {
245262
}
246263

247264
func (n *NemoDatastore) GetInitContainerEnv() []corev1.EnvVar {
265+
objStoreSetting := n.Spec.ObjectStore
266+
dbSetting := n.Spec.ExternalDatabase
267+
248268
envVars := []corev1.EnvVar{
249269
{
250270
Name: "GITEA_APP_INI",
@@ -274,9 +294,9 @@ func (n *NemoDatastore) GetInitContainerEnv() []corev1.EnvVar {
274294
Name: "GITEA__LFS__MINIO_ACCESS_KEY_ID",
275295
ValueFrom: &corev1.EnvVarSource{
276296
SecretKeyRef: &corev1.SecretKeySelector{
277-
Key: "objectStoreKey",
297+
Key: objStoreSetting.ObjectStoreAccessKey,
278298
LocalObjectReference: corev1.LocalObjectReference{
279-
Name: n.Spec.DataStoreParams.ObjectStoreSecret,
299+
Name: objStoreSetting.ObjectStoreSecret,
280300
},
281301
},
282302
},
@@ -285,9 +305,9 @@ func (n *NemoDatastore) GetInitContainerEnv() []corev1.EnvVar {
285305
Name: "GITEA__LFS__MINIO_SECRET_ACCESS_KEY",
286306
ValueFrom: &corev1.EnvVarSource{
287307
SecretKeyRef: &corev1.SecretKeySelector{
288-
Key: "objectStoreSecret",
308+
Key: objStoreSetting.ObjectStoreSecretAccessSecret,
289309
LocalObjectReference: corev1.LocalObjectReference{
290-
Name: n.Spec.DataStoreParams.ObjectStoreSecret,
310+
Name: objStoreSetting.ObjectStoreSecret,
291311
},
292312
},
293313
},
@@ -298,7 +318,7 @@ func (n *NemoDatastore) GetInitContainerEnv() []corev1.EnvVar {
298318
SecretKeyRef: &corev1.SecretKeySelector{
299319
Key: "jwtSecret",
300320
LocalObjectReference: corev1.LocalObjectReference{
301-
Name: n.Spec.DataStoreParams.LfsJwtSecret,
321+
Name: n.Spec.Secrets.LfsJwtSecret,
302322
},
303323
},
304324
},
@@ -307,9 +327,9 @@ func (n *NemoDatastore) GetInitContainerEnv() []corev1.EnvVar {
307327
Name: "GITEA__DATABASE__PASSWD",
308328
ValueFrom: &corev1.EnvVarSource{
309329
SecretKeyRef: &corev1.SecretKeySelector{
310-
Key: "postgresPassword",
330+
Key: dbSetting.DatabaseSecretKey,
311331
LocalObjectReference: corev1.LocalObjectReference{
312-
Name: n.Spec.DataStoreParams.DBSecret,
332+
Name: dbSetting.DatabaseSecret,
313333
},
314334
},
315335
},
@@ -320,7 +340,7 @@ func (n *NemoDatastore) GetInitContainerEnv() []corev1.EnvVar {
320340
SecretKeyRef: &corev1.SecretKeySelector{
321341
Key: "GITEA_ADMIN_USERNAME",
322342
LocalObjectReference: corev1.LocalObjectReference{
323-
Name: n.Spec.DataStoreParams.GiteaAdminSecret,
343+
Name: n.Spec.Secrets.GiteaAdminSecret,
324344
},
325345
},
326346
},
@@ -331,11 +351,55 @@ func (n *NemoDatastore) GetInitContainerEnv() []corev1.EnvVar {
331351
SecretKeyRef: &corev1.SecretKeySelector{
332352
Key: "GITEA_ADMIN_PASSWORD",
333353
LocalObjectReference: corev1.LocalObjectReference{
334-
Name: n.Spec.DataStoreParams.GiteaAdminSecret,
354+
Name: n.Spec.Secrets.GiteaAdminSecret,
335355
},
336356
},
337357
},
338358
},
359+
{
360+
Name: "GITEA__LFS__SERVE_DIRECT",
361+
Value: strconv.FormatBool(objStoreSetting.ServeDirect),
362+
},
363+
{
364+
Name: "GITEA__LFS__STORAGE_TYPE",
365+
Value: "minio",
366+
},
367+
{
368+
Name: "GITEA__LFS__MINIO_ENDPOINT",
369+
Value: objStoreSetting.Endpoint,
370+
},
371+
{
372+
Name: "GITEA__LFS__MINIO_BUCKET",
373+
Value: objStoreSetting.BucketName,
374+
},
375+
{
376+
Name: "GITEA__LFS__MINIO_LOCATION",
377+
Value: objStoreSetting.Region,
378+
},
379+
{
380+
Name: "GITEA__LFS__MINIO_LOCATION",
381+
Value: objStoreSetting.Region,
382+
},
383+
{
384+
Name: "GITEA__LFS__MINIO_USE_SSL",
385+
Value: strconv.FormatBool(objStoreSetting.SSL),
386+
},
387+
{
388+
Name: "GITEA__DATABASE__SSL_MODE",
389+
Value: dbSetting.SSLMode,
390+
},
391+
{
392+
Name: "GITEA__DATABASE__NAME",
393+
Value: dbSetting.Database,
394+
},
395+
{
396+
Name: "GITEA__DATABASE__HOST",
397+
Value: fmt.Sprintf("%s:%d", dbSetting.Host, dbSetting.Port),
398+
},
399+
{
400+
Name: "GITEA__DATABASE__USER",
401+
Value: dbSetting.User,
402+
},
339403
}
340404
return envVars
341405
}
@@ -369,7 +433,7 @@ func (n *NemoDatastore) GetVolumes() []corev1.Volume {
369433
Name: "init",
370434
VolumeSource: corev1.VolumeSource{
371435
Secret: &corev1.SecretVolumeSource{
372-
SecretName: n.Spec.DataStoreParams.DataStoreInitSecret,
436+
SecretName: n.Spec.Secrets.DataStoreInitSecret,
373437
DefaultMode: &initMode,
374438
},
375439
},
@@ -378,7 +442,7 @@ func (n *NemoDatastore) GetVolumes() []corev1.Volume {
378442
Name: "config",
379443
VolumeSource: corev1.VolumeSource{
380444
Secret: &corev1.SecretVolumeSource{
381-
SecretName: n.Spec.DataStoreParams.DataStoreConfigSecret,
445+
SecretName: n.Spec.Secrets.DataStoreConfigSecret,
382446
DefaultMode: &initMode,
383447
},
384448
},
@@ -387,7 +451,7 @@ func (n *NemoDatastore) GetVolumes() []corev1.Volume {
387451
Name: "inline-config-sources",
388452
VolumeSource: corev1.VolumeSource{
389453
Secret: &corev1.SecretVolumeSource{
390-
SecretName: n.Spec.DataStoreParams.DataStoreInlineConfigSecret,
454+
SecretName: n.Spec.Secrets.DataStoreInlineConfigSecret,
391455
DefaultMode: &configMode,
392456
},
393457
},
@@ -400,7 +464,7 @@ func (n *NemoDatastore) GetVolumes() []corev1.Volume {
400464
},
401465
}
402466

403-
if n.Spec.DataStoreParams.PVC != nil {
467+
if n.Spec.PVC != nil {
404468
volumes = append(volumes, corev1.Volume{
405469
Name: "data",
406470
VolumeSource: corev1.VolumeSource{
@@ -421,27 +485,14 @@ func (n *NemoDatastore) GetVolumes() []corev1.Volume {
421485
}
422486

423487
func (n *NemoDatastore) ShouldCreatePersistentStorage() bool {
424-
return n.Spec.DataStoreParams.PVC != nil && n.Spec.DataStoreParams.PVC.Create != nil && *n.Spec.DataStoreParams.PVC.Create
488+
return n.Spec.PVC != nil && n.Spec.PVC.Create != nil && *n.Spec.PVC.Create
425489
}
426490

427491
// GetStandardAnnotations returns default annotations to apply to the NemoDatastore instance
428492
func (n *NemoDatastore) GetEnvFrom() []corev1.EnvFromSource {
429493
return []corev1.EnvFromSource{}
430494
}
431495

432-
// GetStandardAnnotations returns default annotations to apply to the NemoDatastore instance
433-
func (n *NemoDatastore) GetInitAppIniEnvFrom() []corev1.EnvFromSource {
434-
return []corev1.EnvFromSource{
435-
{
436-
SecretRef: &corev1.SecretEnvSource{
437-
LocalObjectReference: corev1.LocalObjectReference{
438-
Name: n.Spec.DataStoreParams.DataStoreSettingsSecret,
439-
},
440-
},
441-
},
442-
}
443-
}
444-
445496
// GetStandardAnnotations returns default annotations to apply to the NemoDatastore instance
446497
func (n *NemoDatastore) GetStandardAnnotations() map[string]string {
447498
standardAnnotations := map[string]string{
@@ -633,8 +684,8 @@ func (n *NemoDatastore) GetVolumeMounts() []corev1.VolumeMount {
633684
Name: "data",
634685
}
635686

636-
if n.Spec.DataStoreParams.PVC != nil {
637-
dataMount.SubPath = n.Spec.DataStoreParams.PVC.SubPath
687+
if n.Spec.PVC != nil {
688+
dataMount.SubPath = n.Spec.PVC.SubPath
638689
}
639690
mounts = append(mounts, dataMount)
640691
return mounts
@@ -664,8 +715,8 @@ func (n *NemoDatastore) GetVolumeMountsInitContainer() []corev1.VolumeMount {
664715
Name: "data",
665716
}
666717

667-
if n.Spec.DataStoreParams.PVC != nil {
668-
dataMount.SubPath = n.Spec.DataStoreParams.PVC.SubPath
718+
if n.Spec.PVC != nil {
719+
dataMount.SubPath = n.Spec.PVC.SubPath
669720
}
670721
mounts = append(mounts, dataMount)
671722
return mounts
@@ -682,7 +733,6 @@ func (n *NemoDatastore) GetInitContainers() []corev1.Container {
682733
},
683734
VolumeMounts: n.GetVolumeMountsInitContainer(),
684735
Env: n.GetInitContainerEnv(),
685-
EnvFrom: n.GetInitAppIniEnvFrom(),
686736
},
687737
{
688738
Name: "init-app-ini",
@@ -693,7 +743,6 @@ func (n *NemoDatastore) GetInitContainers() []corev1.Container {
693743
},
694744
VolumeMounts: n.GetVolumeMountsInitContainer(),
695745
Env: n.GetInitContainerEnv(),
696-
EnvFrom: n.GetInitAppIniEnvFrom(),
697746
},
698747
{
699748
Name: "configure-datastore",
@@ -707,7 +756,6 @@ func (n *NemoDatastore) GetInitContainers() []corev1.Container {
707756
},
708757
VolumeMounts: n.GetVolumeMountsInitContainer(),
709758
Env: n.GetInitContainerEnv(),
710-
EnvFrom: n.GetInitAppIniEnvFrom(),
711759
SecurityContext: &corev1.SecurityContext{
712760
RunAsUser: n.GetUserID(),
713761
},

0 commit comments

Comments
 (0)