Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions templates/policies/application-policies.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,12 @@ spec:
selfHeal: true
retry:
limit: {{ default 20 $.Values.global.options.applicationRetryLimit }}
{{- with $.Values.global.options.applicationRetryBackoff }}
backoff:
duration: {{ .duration | quote }}
factor: {{ .factor }}
maxDuration: {{ .maxDuration | quote }}
{{- end }}
ignoreDifferences:
- group: apps
kind: Deployment
Expand Down
329 changes: 329 additions & 0 deletions tests/application_policy_retry_backoff_test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,329 @@
suite: Test application retry backoff configuration
templates:
- templates/policies/application-policies.yaml
release:
name: release-test
tests:

- it: should not render backoff when applicationRetryBackoff is not set
values:
- ./clusterselector_values.yaml
asserts:
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.limit
value: 20
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
isNull:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff

- it: should not render backoff when applicationRetryBackoff is not set (multisource)
values:
- ./clusterselector_values.yaml
set:
global:
multiSourceSupport: true
multiSourceRepoUrl: "https://charts.example.com"
multiSourceTargetRevision: "0.1.0"
asserts:
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.limit
value: 20
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
isNull:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff

- it: should render backoff when applicationRetryBackoff is set
values:
- ./clusterselector_values.yaml
set:
global:
options:
applicationRetryBackoff:
duration: 10s
factor: 2
maxDuration: 5m
asserts:
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.duration
value: "10s"
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.factor
value: 2
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.maxDuration
value: "5m"

- it: should render backoff when applicationRetryBackoff is set (multisource)
values:
- ./clusterselector_values.yaml
set:
global:
multiSourceSupport: true
multiSourceRepoUrl: "https://charts.example.com"
multiSourceTargetRevision: "0.1.0"
options:
applicationRetryBackoff:
duration: 10s
factor: 2
maxDuration: 5m
asserts:
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.duration
value: "10s"
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.factor
value: 2
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.maxDuration
value: "5m"

- it: should render backoff with custom retry limit
values:
- ./clusterselector_values.yaml
set:
global:
options:
applicationRetryLimit: 10
applicationRetryBackoff:
duration: 15s
factor: 3
maxDuration: 10m
asserts:
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.limit
value: 10
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.duration
value: "15s"
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.factor
value: 3
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.maxDuration
value: "10m"

- it: should render backoff for all groups in multiple managedClusterGroups
set:
global:
multiSourceSupport: true
multiSourceRepoUrl: "https://charts.example.com"
multiSourceTargetRevision: "0.1.0"
options:
applicationRetryBackoff:
duration: 10s
factor: 2
maxDuration: 5m
clusterGroup:
managedClusterGroups:
groupOne:
name: east
acmlabels:
- name: clusterGroup
value: east
helmOverrides:
- name: clusterGroup.isHubCluster
value: false
groupTwo:
name: west
acmlabels:
- name: clusterGroup
value: west
helmOverrides:
- name: clusterGroup.isHubCluster
value: false
asserts:
- documentSelector:
path: metadata.name
value: east-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.duration
value: "10s"
- documentSelector:
path: metadata.name
value: east-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.factor
value: 2
- documentSelector:
path: metadata.name
value: east-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.maxDuration
value: "5m"
- documentSelector:
path: metadata.name
value: west-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.duration
value: "10s"
- documentSelector:
path: metadata.name
value: west-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.factor
value: 2
- documentSelector:
path: metadata.name
value: west-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.maxDuration
value: "5m"

- it: should preserve default retry limit when only backoff is configured
values:
- ./clusterselector_values.yaml
set:
global:
options:
applicationRetryBackoff:
duration: 5s
factor: 2
maxDuration: 3m
asserts:
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.limit
value: 20

- it: should render backoff with factor 1 (linear backoff)
values:
- ./clusterselector_values.yaml
set:
global:
options:
applicationRetryBackoff:
duration: 30s
factor: 1
maxDuration: 30s
asserts:
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.duration
value: "30s"
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.factor
value: 1
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.maxDuration
value: "30s"

- it: should not render backoff when deletePattern is DeleteSpoke (no documents rendered)
values:
- ./clusterselector_values.yaml
set:
global:
deletePattern: DeleteSpoke
options:
applicationRetryBackoff:
duration: 10s
factor: 2
maxDuration: 5m
asserts:
- hasDocuments:
count: 0

- it: should render backoff alongside prune true when deletePattern is set
values:
- ./clusterselector_values.yaml
set:
global:
deletePattern: DeleteChildApps
options:
applicationRetryBackoff:
duration: 10s
factor: 2
maxDuration: 5m
asserts:
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.automated.prune
value: true
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.duration
value: "10s"
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.factor
value: 2

- it: should render backoff alongside prune false when deletePattern is none
values:
- ./clusterselector_values.yaml
set:
global:
deletePattern: none
options:
applicationRetryBackoff:
duration: 10s
factor: 2
maxDuration: 5m
asserts:
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.automated.prune
value: false
- documentSelector:
path: metadata.name
value: group-one-clustergroup-policy
equal:
path: spec.policy-templates[0].objectDefinition.spec.object-templates[1].objectDefinition.spec.syncPolicy.retry.backoff.duration
value: "10s"
4 changes: 4 additions & 0 deletions values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ global:
targetRevision: main
options:
applicationRetryLimit: 20
# applicationRetryBackoff:
# duration: 10s
# factor: 2
# maxDuration: 5m
secretStore:
backend: "vault"

Expand Down