diff --git a/templates/_helpers.tpl b/templates/_helpers.tpl index ed0d518..0094d90 100644 --- a/templates/_helpers.tpl +++ b/templates/_helpers.tpl @@ -56,6 +56,15 @@ Default always defined valueFiles to be included when pushing the cluster wide a value: {{ $.Values.global.privateRepo | quote }} - name: global.experimentalCapabilities value: {{ $.Values.global.experimentalCapabilities }} +{{/* +if this chart gets DeleteSpokeChildApps, it will set deletePattern to DeleteChildApps to remove the child apps from spokes +*/}} +- name: global.deletePattern + {{- if eq $.Values.global.deletePattern "DeleteSpokeChildApps" }} + value: DeleteChildApps + {{- else }} + value: {{ $.Values.global.deletePattern }} + {{- end }} {{- end }} {{- /*acm.app.policies.helmparameters */}} {{- define "acm.app.clusterSelector" -}} diff --git a/templates/multiclusterhub.yaml b/templates/multiclusterhub.yaml index d8fc529..f003b69 100644 --- a/templates/multiclusterhub.yaml +++ b/templates/multiclusterhub.yaml @@ -8,7 +8,6 @@ metadata: name: multiclusterhub namespace: open-cluster-management annotations: - argocd.argoproj.io/sync-wave: "-1" installer.open-cluster-management.io/mce-subscription-spec: '{"source": "{{ default "redhat-operators" .Values.acm.mce_operator.source }}" {{- $channel }} }' spec: {{ .Values.acm.mch_spec | toYaml | indent 2 }} diff --git a/templates/policies/application-policies.yaml b/templates/policies/application-policies.yaml index 309b9ed..fa0725d 100644 --- a/templates/policies/application-policies.yaml +++ b/templates/policies/application-policies.yaml @@ -1,6 +1,8 @@ # TODO: Also create a GitOpsCluster.apps.open-cluster-management.io {{- range .Values.clusterGroup.managedClusterGroups }} {{- $group := . }} +{{- if ($.Values.global.deletePattern | eq "DeleteSpoke" ) }} +{{- else }} apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: @@ -18,6 +20,7 @@ spec: metadata: name: {{ .name }}-clustergroup-config spec: + pruneObjectBehavior: DeleteIfCreated remediationAction: enforce severity: medium namespaceSelector: @@ -129,7 +132,11 @@ spec: namespace: {{ $.Values.global.pattern }}-{{ .name }} syncPolicy: automated: + {{- if ($.Values.global.deletePattern | ne "none" ) }} + prune: true + {{- else }} prune: false + {{- end }} selfHeal: true retry: limit: {{ default 20 $.Values.global.options.applicationRetryLimit }} @@ -174,3 +181,4 @@ spec: ) | nindent 2 }} --- {{- end }} +{{- end }} diff --git a/tests/application_policy_test.yaml b/tests/application_policy_test.yaml index c7c404a..184c578 100644 --- a/tests/application_policy_test.yaml +++ b/tests/application_policy_test.yaml @@ -189,3 +189,88 @@ tests: path: spec.policy-templates[0].objectDefinition.spec.object-templates[0].objectDefinition.spec.sources[1].targetRevision value: "0.1.0" + - it: should render a spoke app of apps with the correct helm parameters (no deletePattern set) + values: + - ./clusterselector_values.yaml + set: + global: + multiSourceSupport: true + multiSourceRepoUrl: "https://charts.example.com" + multiSourceTargetRevision: "0.1.0" + main: + multiSourceConfig: + clusterGroupGitRepoUrl: "https://github.com/example/clustergroup-chart" + clusterGroupChartGitRevision: "feature-branch" + asserts: + - hasDocuments: + count: 3 + - documentSelector: + path: metadata.name + value: group-one-clustergroup-policy + lengthEqual: + path: spec.policy-templates[0].objectDefinition.spec.object-templates[0].objectDefinition.spec.sources[1].helm.parameters + count: 19 # 17 (in the helper) +2 (1 override, and 1 clusterGroup.name) + - documentSelector: + path: metadata.name + value: group-one-clustergroup-policy + equal: + path: spec.policy-templates[0].objectDefinition.spec.object-templates[0].objectDefinition.spec.sources[1].helm.parameters[16].name + value: "global.deletePattern" + - documentSelector: + path: metadata.name + value: group-one-clustergroup-policy + equal: + path: spec.policy-templates[0].objectDefinition.spec.object-templates[0].objectDefinition.spec.sources[1].helm.parameters[16].value + value: null + + - it: should render a spoke app of apps with the correct helm parameters (if deletePattern set to DeleteSpokeChildApps) + values: + - ./clusterselector_values.yaml + set: + global: + multiSourceSupport: true + multiSourceRepoUrl: "https://charts.example.com" + multiSourceTargetRevision: "0.1.0" + deletePattern: DeleteSpokeChildApps + main: + multiSourceConfig: + clusterGroupGitRepoUrl: "https://github.com/example/clustergroup-chart" + clusterGroupChartGitRevision: "feature-branch" + asserts: + - hasDocuments: + count: 3 + - documentSelector: + path: metadata.name + value: group-one-clustergroup-policy + lengthEqual: + path: spec.policy-templates[0].objectDefinition.spec.object-templates[0].objectDefinition.spec.sources[1].helm.parameters + count: 19 # 17 (in the helper) +2 (1 override, and 1 clusterGroup.name) + - documentSelector: + path: metadata.name + value: group-one-clustergroup-policy + equal: + path: spec.policy-templates[0].objectDefinition.spec.object-templates[0].objectDefinition.spec.sources[1].helm.parameters[16].name + value: "global.deletePattern" + - documentSelector: + path: metadata.name + value: group-one-clustergroup-policy + equal: + path: spec.policy-templates[0].objectDefinition.spec.object-templates[0].objectDefinition.spec.sources[1].helm.parameters[16].value + value: "DeleteChildApps" + + - it: should not render a spoke app of apps (if deletePattern set to DeleteSpoke) + values: + - ./clusterselector_values.yaml + set: + global: + multiSourceSupport: true + multiSourceRepoUrl: "https://charts.example.com" + multiSourceTargetRevision: "0.1.0" + deletePattern: DeleteSpoke + main: + multiSourceConfig: + clusterGroupGitRepoUrl: "https://github.com/example/clustergroup-chart" + clusterGroupChartGitRevision: "feature-branch" + asserts: + - hasDocuments: + count: 0 diff --git a/tests/multiclusterhub_test.yaml b/tests/multiclusterhub_test.yaml index f0c4f9c..2262e82 100644 --- a/tests/multiclusterhub_test.yaml +++ b/tests/multiclusterhub_test.yaml @@ -15,9 +15,6 @@ tests: apiVersion: operator.open-cluster-management.io/v1 name: multiclusterhub namespace: open-cluster-management - - equal: - path: metadata.annotations["argocd.argoproj.io/sync-wave"] - value: "-1" - equal: path: metadata.annotations["installer.open-cluster-management.io/mce-subscription-spec"] value: '{"source": "redhat-operators" }'