From 7fd65110bdf39924c5a4ee48b24f91e9866b92c5 Mon Sep 17 00:00:00 2001 From: Daniel Cosme Date: Thu, 30 Apr 2026 19:29:26 -0400 Subject: [PATCH] Add Immich Database --- apps/hydra/linkding/kuztomization.yaml | 4 +-- go.mod | 2 +- go.sum | 4 +-- .../hydra/cloud-native-pg/immich-db.yaml | 11 +++++++++ .../hydra/truenas-csi/kuztomization.yaml | 14 +++++------ pkg/cnpg/cluster.go | 14 +++-------- pkg/cnpg/cnpg.go | 12 ++++----- pkg/cnpg/database.go | 23 ++++++++++++++++++ pkg/cnpg/helm.go | 8 +++--- pkg/enc/immich.go.age | Bin 2162 -> 1960 bytes pkg/enc/linkding.go.age | Bin 2126 -> 2126 bytes pkg/enc/secrets.go.age | Bin 2147 -> 2147 bytes pkg/enc/truenas.go.age | Bin 2072 -> 2072 bytes pkg/immich/immich.go | 10 -------- pkg/root/services.go | 11 ++++++--- 15 files changed, 68 insertions(+), 45 deletions(-) create mode 100644 infrastructure/hydra/cloud-native-pg/immich-db.yaml create mode 100644 pkg/cnpg/database.go diff --git a/apps/hydra/linkding/kuztomization.yaml b/apps/hydra/linkding/kuztomization.yaml index 7a62af4..96e2f9e 100644 --- a/apps/hydra/linkding/kuztomization.yaml +++ b/apps/hydra/linkding/kuztomization.yaml @@ -4,7 +4,7 @@ metadata: name: linking namespace: linkding resources: -- deployment.yaml -- namespace.yaml - srv.yaml - pvc.yaml +- deployment.yaml +- namespace.yaml diff --git a/go.mod b/go.mod index d96848a..37bf9f9 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module danicos.dev/daniel/homelab go 1.26.2 require ( - danicos.dev/daniel/go-kube v1.13.0 + danicos.dev/daniel/go-kube v1.13.3 github.com/cloudnative-pg/api v1.29.0 github.com/fatih/color v1.19.0 github.com/fluxcd/helm-controller/api v1.5.4 diff --git a/go.sum b/go.sum index 2f628e5..79811a3 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -danicos.dev/daniel/go-kube v1.13.0 h1:4c6LAkwbiWJ2qXPEPlKF5eD5KAOIN/oSCqgr+rdMykw= -danicos.dev/daniel/go-kube v1.13.0/go.mod h1:zOhFK+bE4t14yOokp+yqh8Pht1/U102JV/29QoKBjjc= +danicos.dev/daniel/go-kube v1.13.3 h1:b42L3WEJstDKLKCaAFcgh1Egb915tRlKEYD/hKMiYXE= +danicos.dev/daniel/go-kube v1.13.3/go.mod h1:zOhFK+bE4t14yOokp+yqh8Pht1/U102JV/29QoKBjjc= github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= github.com/cloudnative-pg/api v1.29.0 h1:mNx6yJ5qi+Xrjs0NYrUy6V4MlXBkVJxGKwvTJZIuTX4= diff --git a/infrastructure/hydra/cloud-native-pg/immich-db.yaml b/infrastructure/hydra/cloud-native-pg/immich-db.yaml new file mode 100644 index 0000000..7b5a048 --- /dev/null +++ b/infrastructure/hydra/cloud-native-pg/immich-db.yaml @@ -0,0 +1,11 @@ +apiVersion: postgresql.cnpg.io/v1 +kind: Database +metadata: + name: immich-db + namespace: cnpg-cluster +spec: + cluster: + name: cnpg-cluster + name: immich + owner: immich +status: {} diff --git a/infrastructure/hydra/truenas-csi/kuztomization.yaml b/infrastructure/hydra/truenas-csi/kuztomization.yaml index c93dc38..5f7bf87 100644 --- a/infrastructure/hydra/truenas-csi/kuztomization.yaml +++ b/infrastructure/hydra/truenas-csi/kuztomization.yaml @@ -5,15 +5,15 @@ metadata: namespace: truenas-csi resources: - node-binding.yaml -- nfs-storage-class.yaml +- node-deamonset.yaml - iscsi-storage-class.yaml - controller-deployment.yaml -- controller-binding.yaml -- node-deamonset.yaml -- CSIDriver.yaml -- config.yaml -- namespace.yaml - controller-service-account.yaml - controller-cluster-role.yaml -- node-service-account.yaml +- controller-binding.yaml - node-cluster-role.yaml +- CSIDriver.yaml +- config.yaml +- nfs-storage-class.yaml +- namespace.yaml +- node-service-account.yaml diff --git a/pkg/cnpg/cluster.go b/pkg/cnpg/cluster.go index 331d07f..a9117f4 100644 --- a/pkg/cnpg/cluster.go +++ b/pkg/cnpg/cluster.go @@ -2,7 +2,6 @@ package cnpg import ( "danicos.dev/daniel/go-kube/pkg/kube" - "danicos.dev/daniel/homelab/pkg/immich" "danicos.dev/daniel/homelab/pkg/root" kube_cnpg "danicos.dev/daniel/go-kube/pkg/cnpg" @@ -10,8 +9,9 @@ import ( core "k8s.io/api/core/v1" ) +var cluster_meta = kube.NewMetadata(root.CloudNativePG+"-cluster", root.PGClusterNamespace) + func Cluster() pg.Cluster { - meta := kube.NewMetadata(root.CloudNativePG+"-cluster", PGClusterNamespace) spec := pg.ClusterSpec{ Instances: 3, StorageConfiguration: pg.StorageConfiguration{ @@ -28,17 +28,11 @@ func Cluster() pg.Cluster { Name: root.Immich.Name, Login: true, PasswordSecret: &pg.LocalObjectReference{ - Name: immich.Secret.Name, + Name: ImmichPGSecret.Name, }, }, }, }, } - return kube_cnpg.NewCluster(meta, spec) + return kube_cnpg.NewCluster(cluster_meta, spec) } - -/* - PG expects username, password - - PG Secret -*/ diff --git a/pkg/cnpg/cnpg.go b/pkg/cnpg/cnpg.go index 91b1710..4530f76 100644 --- a/pkg/cnpg/cnpg.go +++ b/pkg/cnpg/cnpg.go @@ -6,21 +6,21 @@ import ( "danicos.dev/daniel/homelab/pkg/root" ) -var meta kube.Metadata -var Namespace = kube.Namespace(root.CloudNativePG + "-system") -var PGClusterNamespace = kube.Namespace(root.CloudNativePG + "-cluster") +var meta_system kube.Metadata +var SystemNamespace = kube.Namespace(root.CloudNativePG + "-system") func init() { - meta = kube.NewMetadata(root.CloudNativePG, Namespace) + meta_system = kube.NewMetadata(root.CloudNativePG, SystemNamespace) } func Stack() stack.Stack { s := stack.NewStack("cloud-native-pg", map[string]any{ - "namespace": Namespace, - "cluster-namespace": PGClusterNamespace, + "namespace": SystemNamespace, + "cluster-namespace": root.PGClusterNamespace, "helm-repository-source": HelmSource(), "helm-release": HelmRelease(), "pg-cluster": Cluster(), + "immich-db": ImmichDatabase(), }) return s } diff --git a/pkg/cnpg/database.go b/pkg/cnpg/database.go new file mode 100644 index 0000000..1dd2ac6 --- /dev/null +++ b/pkg/cnpg/database.go @@ -0,0 +1,23 @@ +package cnpg + +import ( + kube_cnpg "danicos.dev/daniel/go-kube/pkg/cnpg" + "danicos.dev/daniel/go-kube/pkg/kube" + "danicos.dev/daniel/homelab/pkg/root" + pg "github.com/cloudnative-pg/api/pkg/api/v1" + core "k8s.io/api/core/v1" +) + +var ImmichPGSecret = kube_cnpg.NewPGSecret(root.Immich.Name, root.PGClusterNamespace) + +func ImmichDatabase() pg.Database { + meta := kube.NewMetadata(root.Immich.Name+"-db", root.PGClusterNamespace) + spec := pg.DatabaseSpec{ + Name: root.Immich.Name, + Owner: root.Immich.Name, + ClusterRef: core.LocalObjectReference{ + Name: cluster_meta.Meta().Name, + }, + } + return kube_cnpg.NewDatabase(meta, spec) +} diff --git a/pkg/cnpg/helm.go b/pkg/cnpg/helm.go index dac8d8f..4bd0b84 100644 --- a/pkg/cnpg/helm.go +++ b/pkg/cnpg/helm.go @@ -16,7 +16,7 @@ func HelmSource() source.HelmRepository { Interval: durHour(root.FLUX_HELM_MONITORING_INTERVAL), URL: root.HELM_CLOUD_NATIVE_PG_URL, } - return flux.NewFluxHelmRepositorySource(meta, spec) + return flux.NewFluxHelmRepositorySource(meta_system, spec) } func HelmRelease() helm.HelmRelease { @@ -30,15 +30,15 @@ func HelmRelease() helm.HelmRelease { Interval: &interval, SourceRef: helm.CrossNamespaceObjectReference{ Kind: flux.MetaHelmRepository.Kind, - Name: meta.Meta().Name, - Namespace: Namespace.Name, + Name: meta_system.Meta().Name, + Namespace: SystemNamespace.Name, }, }, }, Install: &helm.Install{CRDs: helm.Create}, Upgrade: &helm.Upgrade{CRDs: helm.CreateReplace}, } - return flux.NewFluxHelmRelease(meta, spec) + return flux.NewFluxHelmRelease(meta_system, spec) } func durHour(d int64) metav1.Duration { diff --git a/pkg/enc/immich.go.age b/pkg/enc/immich.go.age index cd5dcb9f78bb869a2c79796dab43b6cb3d556920..cb020f422faef3d78cb73c451160cdd4b7625d52 100644 GIT binary patch literal 1960 zcmWO5>B}4k0f2Gac%%_j`f3!Zn1CeW`ev@3*%@OkGrK#pbL?C@yF0UK(7ASwotd3$ zcaD6BSCL>rh**z;F{Y;V3|_n3*I zq-C&9j;wPJ*h2euKXD+AR&LzG@ES%@h&X__;ELZ8S+jwPWyFzH#!5nmhmm1TbShca znIRV=Nm?)9YUsL!i^whE0iKEbIvA}}$JRNUcDj|KbVpTWR$?F~W=GnrnDJQEQ6eXo z9@CN%AL>v)=@6i7ZV7z@c^fjXv#Kk@TaId`t5rafGZV^sXpgLHpo(dFDpJOP>X4{W zjAsO#@jgsIf|kHTjmcGp%__ZURTLw<&?si9O4YrtvRZ8%Xd^8oe4}7im*#Y&Dn^kf z392wjOmNiaVBLc2nS+#Fqm^nr8bde>sB1VG_gikUbjm^84)Srgp+d?F)?c4&AA0Js)w4rlp>;)^2nd@DX6DZFi9MZQ(N4MKF=4gV@U<|HW7kv|n&a?B3o<|yMIBT(Wa?No zR9Dz|+EOhiDm7d|kvr@H(~e?{7n_n8TXBe3B0>?B+q!gD4J3SFbJ85wi$wqr5D|{q zTAd~ixW-_ZY*8cTQFw{?t)Tbk{s=%;?Pi2P$^r|sP&G#^v>u?CM9Cqi`v9Edc+j9C z?0_P=i40>^iZ0uyd$>m}lX*E%+&SH6Ra1l_wp8SjO5onS;{^U%k7SmXsZPNt1*l|P zjG#jvXW`s2--}r_0)1qyU828<7TcET{+9<#B7*Z zo*c~v)x=NORT<1BG6~c9x}TJA2|9iw4YpgUiNF=?PHl|`I4Xo;HN)3KT`q=HA;v}{ zpx`DF5Qh^s1PCun*yTp~Y=Nv|MVZj>%-k;2febr6pzKk)3e${Xj~!L!!GvoYw!>>s zPibL{3%7Fwmx0(0BTkEx%68b%dORyk^oTHaVwimaA2!iJ@R)tow|wtDQFgAQ-# zWVRmVAVrB;Rb)0P`fT3lNL1$%wnc{SwC3Uz3j&NW0IG&MBdZ#;@~|7jg^|mxUn(H5 zHXGOMI@Lr^%|6*mh)%jvKX3*GRRf9Njdan??P<868=(=w5D+LV6%q?rHHu1tf{1aM zu!fc?j=)=zZ+syR0BbTeb(B@(v>P)SVlD}f4Q4WygxCPIP0%IrX$NLGJRvx5l0Wu@U8Vcf99GS5H((^9|GESWIdiJqXOM%Agj zO2S+Ndm@MiJ;)z65k)6tjP)$vv$QOsn1rCqoHKZ-bY>HIk&Oaij2YX7c}Ku>ts<78 zYr;b5)A1nlM}!G06u}2EV9JToL&X`K=s8+06@R9zH_6;$wou`CqljQ6VCk<-Czw?Y z>C-7_t1Q+GlQqr-XrnAUqA&r73=204sy}H_)OLX>-OzGFP@J)W8a)mLirmbn7@9|c zBQ5|Tr^YT+CJ4S2OB=>Jb~y4Q#`9HJa99nVfL7@6;nE@$mL8UEZFu{f#f;}Pp)l^u zi5s%TM0^@S9euH!i*#mHMnd*hIzs^vxNmoN_W+TUDie#Er#`rd4<|l<;aB2U_WW>1`TdXm zRC)RR4`1G~vprA0S-b=sGfrQ={hq_azwTQczVa+p9lvn>`h}N1eQxi$ z%AdUiy!h_@&pZ@A`nQw!{uGPPT>}p7J$v+fr@o^dEI$4giTKlhU;6dy$A|~H2d8Ha z<$w74v;X|&ZyvgO6@AlZjsfL~yPmrBgAcxgKeF@o`#PU}{qX5;-1A8h^Y))Sarcdn zTs=q~9qqpM#toZ2e)HB7N0KK#6u$V@D;jqH$s1oi|K3O5cJliNj+{CF@Z)!X`?Y`E zer4ykr%wOkffwHS*roN&FCX3T=BK`8-TR~CAHCmHnw!A2W7nVgo%okGuHrxG?_GUt Ya`2D0{_}YMU8;5w`ohnjymHU~0bIAdGXMYp literal 2162 zcmWO6i_hEy0RV6yGsFP{6tY2xVfEq$zYS5uZ#>0h|5FUO^BM6ZoNO;bmQy@!>$RF|hnXa?qM0UEI zW?md^k5d;|K3+xJ^|>4PdXUK$;3u*$UmA{ARI)l4blXN%8H{i z{lTbX$_u?ws4bzE6DBK0k;1X&XrV*tB9XL|c56(~V}Mez=4mz02w#Ftx{2d+j({ko zW=y0S-d@OgPAi$tAj?|4E_`dr$b$F167mX5t?{{Kl_J=)BO<8vB^d(bDNQb6(wPmrKohFSF_DQe(gv7{ zf{K($6|fMtfcb1n<=z~|@J65Z<{VCpViYiRn?Tf2TMr>3vidM!j`|`Rg2iY&3zAl| zMlGz`&_G%c<(O;ENIjQ!E)D;UCQs(unoGqZS%!FPeOU6tmz$YBW!+Mr>d~;-3RJ{t+ zkg-%vDibykBT+E8G1D^^NFWVo)u4;b4JQ}b(FiQZLN$wZIufZrP&zwDYJ>B z9?>Lm#u42lLDF`sRfamJvG@e!Tw3WvxWY%iU8zz|Du(#bwin^D?l1yc#Yj;mX)9Sw zDVZm6vOy$T!&!6*K4?W`Tc&Gf!L^B8n4+;VEsIp)jnP1hLpiJaJP*+75HK2jznBFR znC^Nli!ofO&rL>Sgm)K~oh7r9lg*A1Ml-CKh6W&?6 zlt$H{vG#bZ>3s^88cI7+7?`3X6Pxy}Wt!(?Z$S;gerC*!&B7_W9c ztLLh-mWpkUz5tHY%#`KCcx){M4jB(jT=L^U2wSg~}g34k|2i3rnX z6P9~UsYSLH%fc@xiFDqBad> zf=5cSP1%D7x_ivsa&O5c8(60#Qqm$3bKQ(`M;^Vv5wXS*bl`ouh>{vV5dH+9O zSbg|7=IQhPt-to7@yt)&yzURP^Z)xUcv|y=|7fsS2I;$-o^G?3EjxD{tZcmXOQpoSXe#pt3RGa+x0764A+kT%F35IO{-Q}?0ReydSvJ7fvt^m zM!Qca_I~gAFaPG=vc&2d}=g_sbi0JbJ|; z?4|arpV9%gN4=$c`-SS|r|%a(T*qJi4=wqQul?~P=+K?!^E;1x@z%euy#CS;U;5u& zZy&q+8-jzpeE6b0&+py!*H3n$>N8(^>U!b$ch;8Aj^8}`*k&=`u*esyK>V}I#9KBz z`twzizH05g?-J{djN9M8`EOVKdjEKG*MSQji8q~ejdb*e#Qf%yHy`$oZh2zcnYQ)n zg~zr$efcHZ;L63^!L4^c_u&stJ->h1-naWlwqq%FdGOQ69e2Y8uZSPNdH2>+Id(PK nKwo>$#j79L|9a!#SuZFb)Au}8tmY3lA0x}|jSt-JW!L^6@6#d- diff --git a/pkg/enc/linkding.go.age b/pkg/enc/linkding.go.age index 40451663a397c91cddb96147daf87680143a64a2..e1ada4a61b92b34118bf4ec24386934ce6896a43 100644 GIT binary patch literal 2126 zcmWNRd+gi<0f12u%w%kU1Kl7S1T&%gaqT_&U}Mtj^>No;ukH19#Ubsry}Mo?*Is+q zo{E{U#TX}G#4#P98;Fmo2s6pP~-4t3mm&!EGQsaiQn2AC{8FsTBlASrE7d#}Oa@OMq zE~!uzd!oTY+sv$V+GzSdgQi7V8paaSOrg0l?#*~Tf|RtpDC2RPDS1QP7-oscD_Fgl zB5A@o79z>Qu=!ND^FP{2n*^=^6q>alRaN;ZkYn{;*zB^j z6d>RzW%&hDV?uS(bgNWWnobecYV{-6f-^@m0+eJKH|k5N?FeZ)m}Wt}5{g9GDr-6j z5k)_*gOZ&P!z`yOQmbx4b%^e&Zj85qqTpa2mLRyQO=mhOH0$`3_B|tE={h{^w|hEG zVq zc@LJtOhuiF*4Ju6gAqcD7erj@N=k(+%`LfJVp4P5#hZgfmGWTRod{GkuKTe>s;=wt zjS`uqfl;OHwocXh)j7r3<05Y<2F(S)Y_!0AvCnz~Q9-A1Lq|lZff*Q!iGZrJ5;w#w zq*wr`Om_^V<7%N&W&(sL<~px-5L_nbD&eeaP$oKc1XaAAZvaW|Le<7tgKFl)pZP7m(Haqc$w=G0*h+D|G-wEn z%(MzGZsw7$HDH;JTd+NdvbwK#7GZ=j#1veDbv-eO0`kO~&XP!}k-%=513A^2cjj77 zEn0#*N(Vfau*Rfp%UoO_(`KO$kV4HCUZ_OPn3#>ryf7coCd$q*h+Zf%t*d<~g#iq- ztMih^EUf7y%|%k1RjN)G5>>D~r_E3kLQyCuY?#zX5bCrtBajF^rKUk{PiDf1Ps^4n zA!ZzcaSblz4S-4H#+W2+!qG;#-Y7}pV64saK3)$gYB+?f1w5mBNuxiSG^D7?(_Lo5 zj}ph#n0WG{&I}tT4jQHID42wx?xUg;<(k&-K^49&yR_z3q)vsv13G zKU{Xnk%O-u=AOIzsrS!b_Ru%azxnD-zZi$lRrF13w}-^KODnI%cQ>S)USOU%^WsaW z<==Yuz^~6f>(%T3ar}jU|L=1z{p87=n^#rW9RBH*)}QYEBYV%O8?nxd#IE-q-Fo!p z5qJpR`^HBjd&}z8yLsYgPYAaOTaNs0?-}1ay7DpW{^kEIUwzfZ&b1Hj{>D}141b>~~FzW}Uy_>9li3w>F%VtGhPtd*IH?H(j{ns%w*v|8|9bZs)xf z2lmU?f9Bo8XZ~gVo@{*3dHHNi`_z?O>G%ilFFka@$u0Co_tP(boC7!R+mI;+UIQBw)xQyKmWDeryhM{<(B9I^_}GB@kMLCzV(i;Y(6&d zrt5DVXFHAd>vrwD=&t2IeD;P{j_!JK?`4}J|D7H7!)HA5=F|H>M6Y@F$G`mR+jpF| V#(e&(>z9N*YtKJtn-B_}{{#1a5~BbB literal 2126 zcmWO4{mR*K4oW>$L|HdTsCec5SaO z*Slu>MS>`hZT=#R$IS;a*u>4ffG#nQI9L`y5J3nL*aA9m@)BPXV~7!Sf5A8T=A(_w zCDYfVd6?LNzafZ5g(;;a~40EL^ktPe{HL~4AVc!VbQO8!}de4Hriri+6l($rm}qpn&zVEVEB3GwYxO*_tn?+?0L4%$YcV+{GpebJtllHWSP9}lr8GL< zA_oHnB(Z=rNw^&2%80GoeSIePQ79-T6kb$vcQDW0QFl798|A<@OL}S>bYq4^Y|~Ao zNM*ZWz>qpv8FyMi7gd-X268fv@MKU6J=O#H zSfFHlI*=q+o}ww#Dru|?M4D7DjEQ33!N*QNkl}(e?Akekl<~N(K|w_r*#t`J6i;9# zDFBM6J6@p{4>PIDG$cKonkdlCrY2C)LU-iqMa=>TNzhEjCuAvL46{VU?x@hAltQ2C zVtz<*u5RVslz~Rrq>L7)aWBV!w#s@$L%^mM=bE-hlBsAG;0W+^N~~HSKP&~ZCUII9 zB2quHad#g{ms=*svw(fUj1HZlZXA=P^cG(&hvwx*(+X z)5u9d#Za0VSaB!P*p5@kBxPaHiAb~&hrHNgDH`RfxErCUKN6@yMFHa2?esMwkAVR8 zRY2zedDe>|u~`AiMsvbgPRHwX>@Z4rFV}3Q!DXfn@&!hbwNY<~LnEK^X}uB{^Js_- zbF~C17${OYNTaX-G?Q!PRK*>$!Vs&eY8Fm2u+x_`Kxl-jXnTbg25^dADbBhxY#aI^ZwwHovg0`4#e!gLK(nnP=90-(Ma6_`WUs-oNa4vhx*c z-;qn#-TdLLt^0R&IW3 z{eibWJ#r=a?y?7dbj?>+%fC3XymjT(&(!o)@A`Y>jT`SjbHdv7`r1S99J=C2ZP(U? zm#t0iuMZr%;o==fsh9RHyz%NsKl$0!TY&GJdj0TYUp%;U`cz(i_<;vkZy%hzrFQF! zH%P!Yk6!=hlbwtI{@}44FR>Tx!}tH-ntS(sxxJRC7JbU)32ha-+effv^!rFiI z9)0t+T^I2$Uh>iY*PQ$Bx$*F8zgfTaPZ!>G9q{B|Z#ez0-?i5ix0fR0eP`dZH~sU2 TMUUKb=X~AKw@&n&bsPT=ezOda diff --git a/pkg/enc/secrets.go.age b/pkg/enc/secrets.go.age index cff217e60342b21ee3bad8c74313e4a89c1e3746..fe722d19c039802080945ab6f5039f305190b024 100644 GIT binary patch literal 2147 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 diff --git a/pkg/enc/truenas.go.age b/pkg/enc/truenas.go.age index 18edf216876fd64f77b8c0cec00ef99b0dcf08c5..35df2045ff628bc80d8e557817ea2e418f646ebe 100644 GIT binary patch literal 2072 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 F{|ENA07U=* diff --git a/pkg/immich/immich.go b/pkg/immich/immich.go index da798ba..60067df 100644 --- a/pkg/immich/immich.go +++ b/pkg/immich/immich.go @@ -7,16 +7,6 @@ import ( core "k8s.io/api/core/v1" ) -var Secret = struct { - Name string - DB_UserKey string - DB_PasswordKey string -}{ - Name: root.Immich.Name, - DB_UserKey: "db_username", - DB_PasswordKey: "db_password", -} - var meta kube.Metadata var Namespace = kube.Namespace(root.Immich.Name) var srv core.Service diff --git a/pkg/root/services.go b/pkg/root/services.go index b9ea269..efe2425 100644 --- a/pkg/root/services.go +++ b/pkg/root/services.go @@ -1,5 +1,9 @@ package root +import ( + "danicos.dev/daniel/go-kube/pkg/kube" +) + type Service struct { Name string Image string @@ -34,9 +38,10 @@ var Immich = Service{ } var ( - Longhorn = "longhorn" - Monitoring = "monitoring" - CloudNativePG = "cnpg" + Longhorn = "longhorn" + Monitoring = "monitoring" + CloudNativePG = "cnpg" + PGClusterNamespace = kube.Namespace(CloudNativePG + "-cluster") ) var (