Skip to content

Commit

Permalink
[v2.9] allow overriding flux object spec via annotations
Browse files Browse the repository at this point in the history
Signed-off-by: Chanwit Kaewkasi <chanwit@gmail.com>
  • Loading branch information
chanwit committed Feb 28, 2024
1 parent 402c9e4 commit f37869e
Show file tree
Hide file tree
Showing 9 changed files with 198 additions and 11 deletions.
2 changes: 1 addition & 1 deletion patches-argo-cd-v2.9/02-implement-loopback.patch
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ index 40e2f9a5f..e711182b3 100644
// Prevent applying local manifests for now when signature verification is enabled
diff --git a/controller/state_fsa.go b/controller/state_fsa.go
new file mode 100644
index 000000000..f795c6a75
index 000000000..0892309d2
--- /dev/null
+++ b/controller/state_fsa.go
@@ -0,0 +1,139 @@
Expand Down
4 changes: 2 additions & 2 deletions patches-argo-cd-v2.9/09-auto-create-flux-resources.patch
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Signed-off-by: Chanwit Kaewkasi <chanwit@gmail.com>
create mode 100644 controller/sync_fsa_test.go

diff --git a/controller/state_fsa.go b/controller/state_fsa.go
index f795c6a75..54bb28e4f 100644
index 0892309d2..ae5187507 100644
--- a/controller/state_fsa.go
+++ b/controller/state_fsa.go
@@ -6,6 +6,7 @@ import (
Expand Down Expand Up @@ -253,7 +253,7 @@ index f795c6a75..54bb28e4f 100644
}
diff --git a/controller/sync_fsa.go b/controller/sync_fsa.go
new file mode 100644
index 000000000..7041569a2
index 000000000..40188e00e
--- /dev/null
+++ b/controller/sync_fsa.go
@@ -0,0 +1,193 @@
Expand Down
4 changes: 2 additions & 2 deletions patches-argo-cd-v2.9/11-support-helm-oci-and.patch
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Signed-off-by: Chanwit Kaewkasi <chanwit@gmail.com>
2 files changed, 91 insertions(+), 5 deletions(-)

diff --git a/controller/state_fsa.go b/controller/state_fsa.go
index 54bb28e4f..18f41430d 100644
index ae5187507..07087f033 100644
--- a/controller/state_fsa.go
+++ b/controller/state_fsa.go
@@ -2,11 +2,12 @@ package controller
Expand Down Expand Up @@ -45,7 +45,7 @@ index 54bb28e4f..18f41430d 100644
}, sourceName, sourceNS)
if err != nil {
diff --git a/controller/sync_fsa.go b/controller/sync_fsa.go
index 7041569a2..65ccf8782 100644
index 40188e00e..4689b2f98 100644
--- a/controller/sync_fsa.go
+++ b/controller/sync_fsa.go
@@ -36,13 +36,14 @@ func generateFluxHelmAndSource(app *appv1.Application) (*unstructured.Unstructur
Expand Down
4 changes: 2 additions & 2 deletions patches-argo-cd-v2.9/13-upgrade-to-flux-v2.0.0-rc.1.patch
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Signed-off-by: Chanwit Kaewkasi <chanwit@gmail.com>
2 files changed, 51 insertions(+), 22 deletions(-)

diff --git a/controller/state_fsa.go b/controller/state_fsa.go
index 18f41430d..28cd571cc 100644
index 07087f033..9e1c36e2f 100644
--- a/controller/state_fsa.go
+++ b/controller/state_fsa.go
@@ -42,6 +42,51 @@ func IsAutoCreateFluxResourcesEnabled(app *v1alpha1.Application) bool {
Expand Down Expand Up @@ -117,7 +117,7 @@ index 18f41430d..28cd571cc 100644
if strings.Contains(err.Error(), "not found") {
sourceNotFound = true
diff --git a/controller/sync_fsa.go b/controller/sync_fsa.go
index 65ccf8782..e4b0f3ca6 100644
index 4689b2f98..d9e1da5c8 100644
--- a/controller/sync_fsa.go
+++ b/controller/sync_fsa.go
@@ -172,7 +172,7 @@ spec:
Expand Down
4 changes: 2 additions & 2 deletions patches-argo-cd-v2.9/16-override-workload-name-with.patch
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Signed-off-by: Chanwit Kaewkasi <chanwit@gmail.com>
2 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/controller/state_fsa.go b/controller/state_fsa.go
index 28cd571cc..33a813cc8 100644
index 9e1c36e2f..e3aab0778 100644
--- a/controller/state_fsa.go
+++ b/controller/state_fsa.go
@@ -87,6 +87,30 @@ var supportedKinds = map[fluxKind]schema.GroupVersionKind{
Expand Down Expand Up @@ -62,7 +62,7 @@ index 28cd571cc..33a813cc8 100644
if err != nil {
// err might be a "not found" one
diff --git a/controller/sync_fsa.go b/controller/sync_fsa.go
index e4b0f3ca6..9c4aaca6c 100644
index d9e1da5c8..b4b71f98d 100644
--- a/controller/sync_fsa.go
+++ b/controller/sync_fsa.go
@@ -95,7 +95,7 @@ spec:
Expand Down
2 changes: 1 addition & 1 deletion patches-argo-cd-v2.9/22-fix-flux-2.2-oci.patch
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Signed-off-by: Chanwit Kaewkasi <chanwit@gmail.com>
1 file changed, 11 insertions(+)

diff --git a/resource_customizations/source.toolkit.fluxcd.io/HelmRepository/health.lua b/resource_customizations/source.toolkit.fluxcd.io/HelmRepository/health.lua
index f5bd9b0bc..18f0cc1bf 100644
index f5bd9b0bc..40d3d6853 100644
--- a/resource_customizations/source.toolkit.fluxcd.io/HelmRepository/health.lua
+++ b/resource_customizations/source.toolkit.fluxcd.io/HelmRepository/health.lua
@@ -1,4 +1,15 @@
Expand Down
186 changes: 186 additions & 0 deletions patches-argo-cd-v2.9/23-allow-overriding-flux-object.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
allow overriding flux object spec

From: Chanwit Kaewkasi <chanwit@gmail.com>

Signed-off-by: Chanwit Kaewkasi <chanwit@gmail.com>
---
controller/sync_fsa.go | 42 +++++++++++++++++++++++++++++++++++++--
controller/sync_fsa_override.go | 38 +++++++++++++++++++++++++++++++++++
controller/sync_fsa_test.go | 41 +++++++++++++++++++++++++++++++++++---
3 files changed, 116 insertions(+), 5 deletions(-)
create mode 100644 controller/sync_fsa_override.go

diff --git a/controller/sync_fsa.go b/controller/sync_fsa.go
index b4b71f98d..b2372d5bd 100644
--- a/controller/sync_fsa.go
+++ b/controller/sync_fsa.go
@@ -30,6 +30,22 @@ func mergeHelmParamsAndValues(app appv1.Application) (map[string]interface{}, er
}

func generateFluxHelmAndSource(app *appv1.Application) (*unstructured.Unstructured, *unstructured.Unstructured, error) {
+ obj, src, err := generateFluxHelmAndHelmRepository(app)
+ if err != nil {
+ return obj, src, err
+ }
+
+ if err := overrideSpec(app, FlamingoHelmReleaseOverride, obj); err != nil {
+ return obj, src, err
+ }
+ if err := overrideSpec(app, FlamingoHelmRepositoryOverride, src); err != nil {
+ return obj, src, err
+ }
+
+ return obj, src, nil
+}
+
+func generateFluxHelmAndHelmRepository(app *appv1.Application) (*unstructured.Unstructured, *unstructured.Unstructured, error) {
mergedValues, err := mergeHelmParamsAndValues(*app)
if err != nil {
return nil, nil, err
@@ -135,9 +151,31 @@ spec:

func generateFluxKustomizationAndSource(app *appv1.Application) (*unstructured.Unstructured, *unstructured.Unstructured, error) {
if strings.HasPrefix(app.Spec.Source.RepoURL, "oci://") {
- return generateFluxKustomizationAndOCISource(app)
+ obj, src, err := generateFluxKustomizationAndOCISource(app)
+ if err != nil {
+ return obj, src, err
+ }
+ if err := overrideSpec(app, FlamingoKustomizeOverride, obj); err != nil {
+ return obj, src, err
+ }
+ if err := overrideSpec(app, FlamingoOCIRepositoryOverride, src); err != nil {
+ return obj, src, err
+ }
+
+ return obj, src, nil
} else {
- return generateFluxKustomizationAndGitSource(app)
+ obj, src, err := generateFluxKustomizationAndGitSource(app)
+ if err != nil {
+ return obj, src, err
+ }
+ if err := overrideSpec(app, FlamingoKustomizeOverride, obj); err != nil {
+ return obj, src, err
+ }
+ if err := overrideSpec(app, FlamingoGitRepositoryOverride, src); err != nil {
+ return obj, src, err
+ }
+
+ return obj, src, nil
}
}

diff --git a/controller/sync_fsa_override.go b/controller/sync_fsa_override.go
new file mode 100644
index 000000000..0c124ebb4
--- /dev/null
+++ b/controller/sync_fsa_override.go
@@ -0,0 +1,38 @@
+package controller
+
+import (
+ "github.com/imdario/mergo"
+ "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
+ "sigs.k8s.io/yaml"
+
+ appv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1"
+)
+
+const (
+ FlamingoKustomizeOverride = "flamingo/kustomize-override"
+ FlamingoHelmReleaseOverride = "flamingo/helmrelease-override"
+ FlamingoHelmRepositoryOverride = "flamingo/helmrepository-override"
+ FlamingoGitRepositoryOverride = "flamingo/gitrepository-override"
+ FlamingoOCIRepositoryOverride = "flamingo/ocirepository-override"
+)
+
+func overrideSpec(app *appv1.Application, overrideKey string, u *unstructured.Unstructured) error {
+ if app.Annotations == nil {
+ return nil
+ }
+
+ object := u.Object
+ if overrideSpec, ok := app.Annotations[overrideKey]; ok {
+ spec := map[string]interface{}{}
+ if err := yaml.Unmarshal([]byte(overrideSpec), &spec); err == nil {
+ if err := mergo.Merge(&object, spec, mergo.WithOverride); err != nil {
+ return err
+ }
+ } else {
+ return err
+ }
+ }
+
+ u.Object = object
+ return nil
+}
diff --git a/controller/sync_fsa_test.go b/controller/sync_fsa_test.go
index 9ed03c712..7bd72cabe 100644
--- a/controller/sync_fsa_test.go
+++ b/controller/sync_fsa_test.go
@@ -1,6 +1,7 @@
package controller

import (
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"testing"

appv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1"
@@ -10,7 +11,7 @@ import (
func TestMergeValues(t *testing.T) {
app := appv1.Application{
Spec: appv1.ApplicationSpec{
- Source: appv1.ApplicationSource{
+ Source: &appv1.ApplicationSource{
Helm: &appv1.ApplicationSourceHelm{
Parameters: []appv1.HelmParameter{
{
@@ -36,11 +37,45 @@ ui:
assert.Equal(t, expected, actual, "should equal")
}

-/*
func TestGenerateFluxHelmAndSource(t *testing.T) {
- generateFluxHelmAndSource(app)
+ app := &appv1.Application{
+ ObjectMeta: v1.ObjectMeta{
+ Name: "name",
+ Annotations: map[string]string{
+ FlamingoKustomizeOverride: `spec:
+ interval: 5m0s
+ wait: false
+`,
+ },
+ },
+ Spec: appv1.ApplicationSpec{
+ Source: &appv1.ApplicationSource{
+ Kustomize: &appv1.ApplicationSourceKustomize{},
+ },
+ },
+ }
+
+ ks, src, err := generateFluxKustomizationAndGitSource(app)
+ assert.NoError(t, err, "should not have error")
+ assert.NotNil(t, ks, "should not be nil")
+ assert.NotNil(t, src, "should not be nil")
+ assert.Equal(t, "Kustomization", ks.GetKind(), "should equal")
+ assert.Equal(t, "name", ks.GetName(), "should equal")
+ assert.Equal(t, "10m", ks.Object["spec"].(map[string]interface{})["interval"], "should equal")
+ assert.Equal(t, true, ks.Object["spec"].(map[string]interface{})["wait"], "should equal")
+
+ err = overrideSpec(app, FlamingoKustomizeOverride, ks)
+ assert.NoError(t, err, "should not have error")
+ assert.NotNil(t, ks, "should not be nil")
+ assert.Equal(t, "Kustomization", ks.GetKind(), "should equal")
+ assert.Equal(t, "name", ks.GetName(), "should equal")
+ assert.Equal(t, "5m0s", ks.Object["spec"].(map[string]interface{})["interval"], "should equal")
+ assert.Equal(t, false, ks.Object["spec"].(map[string]interface{})["wait"], "should equal")
+
+ assert.Equal(t, "GitRepository", src.GetKind(), "should equal")
}

+/*
func TestGenerateFluxKustomizationAndSource(t *testing.T) {
generateFluxKustomizationAndSource(app)
}
1 change: 1 addition & 0 deletions patches-argo-cd-v2.9/series
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,4 @@
20-add-health-message-for-helm.patch
21-fix-health-message-in.patch
22-fix-flux-2.2-oci.patch
23-allow-overriding-flux-object.patch
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ index 0000000..1d6f63c
+ o.GroupKind.Kind)
+}
diff --git a/pkg/cache/references.go b/pkg/cache/references.go
index 2189836..e493e08 100644
index 2189836..d27595f 100644
--- a/pkg/cache/references.go
+++ b/pkg/cache/references.go
@@ -15,7 +15,16 @@ import (
Expand Down

0 comments on commit f37869e

Please sign in to comment.