fluxcd-reconciler, env creator calling it every 30 sec to sync the cluster
diff --git a/core/installer/app.go b/core/installer/app.go
index 511f1a4..85f1cba 100644
--- a/core/installer/app.go
+++ b/core/installer/app.go
@@ -114,6 +114,7 @@
CreateResourceRendererController(valuesTmpls, tmpls),
CreateHeadscaleController(valuesTmpls, tmpls),
CreateDNSZoneManager(valuesTmpls, tmpls),
+ CreateFluxcdReconciler(valuesTmpls, tmpls),
}
for _, a := range CreateStoreApps() {
ret = append(ret, a.App)
@@ -577,6 +578,22 @@
}
}
+func CreateFluxcdReconciler(fs embed.FS, tmpls *template.Template) App {
+ schema, err := fs.ReadFile("values-tmpl/fluxcd-reconciler.jsonschema")
+ if err != nil {
+ panic(err)
+ }
+ return App{
+ "fluxcd-reconciler",
+ []string{"fluxcd-reconciler"},
+ []*template.Template{
+ tmpls.Lookup("fluxcd-reconciler.yaml"),
+ },
+ string(schema),
+ tmpls.Lookup("fluxcd-reconciler.md"),
+ }
+}
+
type httpAppRepository struct {
apps []StoreApp
}
diff --git a/core/installer/bootstrapper.go b/core/installer/bootstrapper.go
index 94c1e2d..e3331c4 100644
--- a/core/installer/bootstrapper.go
+++ b/core/installer/bootstrapper.go
@@ -88,6 +88,10 @@
if err := b.installDNSZoneManager(ss, repoIO, nsGen, b.ns, env); err != nil {
return err
}
+ fmt.Println("Installing Fluxcd Reconciler")
+ if err := b.installFluxcdReconciler(ss, repoIO, nsGen, b.ns, env); err != nil {
+ return err
+ }
fmt.Println("Installing env manager")
if err := b.installEnvManager(ss, repoIO, nsGen, b.ns, env); err != nil {
return err
@@ -555,6 +559,34 @@
return nil
}
+func (b Bootstrapper) installFluxcdReconciler(ss *soft.Client, repo RepoIO, nsGen NamespaceGenerator, nsCreator NamespaceCreator, env EnvConfig) error {
+ appRepo := NewInMemoryAppRepository(CreateAllApps())
+ app, err := appRepo.Find("fluxcd-reconciler")
+ if err != nil {
+ return err
+ }
+ ns, err := nsGen.Generate(app.Namespaces[0])
+ if err != nil {
+ return err
+ }
+ if err := nsCreator.Create(ns); err != nil {
+ return err
+ }
+ derived := Derived{
+ Global: Values{
+ PCloudEnvName: env.Name,
+ },
+ Values: map[string]any{},
+ Release: Release{
+ Namespace: ns,
+ },
+ }
+ if err := repo.InstallApp(*app, filepath.Join("/infrastructure", app.Name), derived.Values, derived); err != nil {
+ return err
+ }
+ return nil
+}
+
type HelmActionConfigFactory interface {
New(namespace string) (*action.Configuration, error)
}
diff --git a/core/installer/tasks/env.go b/core/installer/tasks/env.go
index 2dd8da5..f5cc0c7 100644
--- a/core/installer/tasks/env.go
+++ b/core/installer/tasks/env.go
@@ -1,7 +1,10 @@
package tasks
import (
+ "fmt"
"net"
+ "net/http"
+ "time"
"github.com/charmbracelet/keygen"
@@ -47,7 +50,7 @@
nsCreator: nsCreator,
repo: repo,
}
- return newSequentialParentTask(
+ t := newSequentialParentTask(
"Create env",
append(
[]Task{
@@ -57,5 +60,26 @@
},
SetupInfra(env, &st)...,
)...,
- ), DNSZoneRef{"dns-zone", env.Name}
+ )
+ done := make(chan struct{})
+ t.OnDone(func(_ error) {
+ close(done)
+ })
+ go reconcile(fmt.Sprintf("%s-flux", env.PCloudEnvName), done)
+ go reconcile(env.Name, done)
+ return t, DNSZoneRef{"dns-zone", env.Name}
+}
+
+func reconcile(name string, quit chan struct{}) {
+ git := fmt.Sprintf("http://fluxcd-reconciler.dodo-fluxcd-reconciler.svc.cluster.local/source/git/%s/%s/reconcile", name, name)
+ kust := fmt.Sprintf("http://fluxcd-reconciler.dodo-fluxcd-reconciler.svc.cluster.local/kustomization/%s/%s/reconcile", name, name)
+ for {
+ select {
+ case <-time.After(30 * time.Second):
+ http.Get(git)
+ http.Get(kust)
+ case <-quit:
+ return
+ }
+ }
}
diff --git a/core/installer/values-tmpl/fluxcd-reconciler.jsonschema b/core/installer/values-tmpl/fluxcd-reconciler.jsonschema
new file mode 100644
index 0000000..4a7c07d
--- /dev/null
+++ b/core/installer/values-tmpl/fluxcd-reconciler.jsonschema
@@ -0,0 +1,5 @@
+{
+ "type": "object",
+ "properties": {},
+ "additionalProperties": false
+}
diff --git a/core/installer/values-tmpl/fluxcd-reconciler.md b/core/installer/values-tmpl/fluxcd-reconciler.md
new file mode 100644
index 0000000..f31c256
--- /dev/null
+++ b/core/installer/values-tmpl/fluxcd-reconciler.md
@@ -0,0 +1 @@
+Installs gateway to Fluxcd API
diff --git a/core/installer/values-tmpl/fluxcd-reconciler.yaml b/core/installer/values-tmpl/fluxcd-reconciler.yaml
new file mode 100644
index 0000000..d749a7d
--- /dev/null
+++ b/core/installer/values-tmpl/fluxcd-reconciler.yaml
@@ -0,0 +1,15 @@
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
+ name: fluxcd-reconciler
+ namespace: {{ .Release.Namespace }}
+spec:
+ chart:
+ spec:
+ chart: charts/fluxcd-reconciler
+ sourceRef:
+ kind: GitRepository
+ name: pcloud
+ namespace: {{ .Global.Id }}
+ interval: 1m0s
+ values: