package flux 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" flux_meta "github.com/fluxcd/pkg/apis/meta" meta "k8s.io/apimachinery/pkg/apis/meta/v1" ) var Flux_namespace = kube.Namespace(root.FLUX_NAMESPACE) func Stack() stack.Stack { flux_apps_meta := kube.NewMetadata("apps", Flux_namespace) flux_infra_meta := kube.NewMetadata("infrastructure", Flux_namespace) s := stack.NewStack("flux", map[string]any{ "apps": kuztomization(flux_apps_meta, root.FLUX_APPS_HYDRA_PATH), "infra": kuztomization(flux_infra_meta, root.FLUX_INFRA_HYDRA_PATH), }) return s } func kuztomization(meta kube.Metadata, path string) kz.Kustomization { retryInteval := durMin(1) timeout := durMin(5) spec := kz.KustomizationSpec{ Decryption: &kz.Decryption{ Provider: root.FLUX_DECRYPTION_PROVIDER, SecretRef: &flux_meta.LocalObjectReference{ Name: "sops-age", }, }, Interval: durMin(10), RetryInterval: &retryInteval, Timeout: &timeout, SourceRef: kz.CrossNamespaceSourceReference{ Kind: "GitRepository", Name: Flux_namespace.Name, }, Path: path, Prune: true, } return kube.NewFluxKustomization(meta, spec) } func durMin(d int64) meta.Duration { return meta.Duration{Duration: (time.Duration(d) * time.Minute)} }