Files
homelab/pkg/flux/flux.go
T

53 lines
1.4 KiB
Go
Raw Normal View History

2026-04-17 18:11:18 -04:00
package flux
2026-04-17 20:49:37 -04:00
import (
"time"
"danicos.dev/daniel/go-kube/pkg/kube"
"danicos.dev/daniel/go-kube/pkg/stack"
"danicos.dev/daniel/homelab/pkg/root"
kz "github.com/fluxcd/kustomize-controller/api/v1"
2026-04-20 19:58:02 -04:00
flux_meta "github.com/fluxcd/pkg/apis/meta"
2026-04-17 20:49:37 -04:00
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
)
var Flux_namespace = kube.Namespace(root.FLUX_NAMESPACE)
2026-04-17 18:11:18 -04:00
func Stack() stack.Stack {
2026-04-21 13:06:42 -04:00
flux_apps_meta := kube.NewMetadata("apps", Flux_namespace)
flux_infra_meta := kube.NewMetadata("infrastructure", Flux_namespace)
2026-04-21 10:05:38 -04:00
2026-04-17 20:49:37 -04:00
s := stack.NewStack("flux", map[string]any{
2026-04-21 13:06:42 -04:00
"apps": kuztomization(flux_apps_meta, root.FLUX_APPS_HYDRA_PATH),
"infra": kuztomization(flux_infra_meta, root.FLUX_INFRA_HYDRA_PATH),
2026-04-17 20:49:37 -04:00
})
2026-04-17 18:11:18 -04:00
return s
}
2026-04-17 20:49:37 -04:00
2026-04-21 13:06:42 -04:00
func kuztomization(meta kube.Metadata, path string) kz.Kustomization {
2026-04-17 20:49:37 -04:00
retryInteval := durMin(1)
timeout := durMin(5)
spec := kz.KustomizationSpec{
2026-04-20 19:58:02 -04:00
Decryption: &kz.Decryption{
Provider: root.FLUX_DECRYPTION_PROVIDER,
SecretRef: &flux_meta.LocalObjectReference{
Name: "sops-age",
},
},
2026-04-17 20:49:37 -04:00
Interval: durMin(10),
RetryInterval: &retryInteval,
Timeout: &timeout,
SourceRef: kz.CrossNamespaceSourceReference{
Kind: "GitRepository",
Name: Flux_namespace.Name,
},
2026-04-21 13:06:42 -04:00
Path: path,
2026-04-17 20:49:37 -04:00
Prune: true,
}
2026-04-21 13:06:42 -04:00
return kube.NewFluxKustomization(meta, spec)
2026-04-17 20:49:37 -04:00
}
func durMin(d int64) meta.Duration {
return meta.Duration{Duration: (time.Duration(d) * time.Minute)}
}