From f2c737c986906e3d8ce1dbd3979793e6bcd4bc44 Mon Sep 17 00:00:00 2001 From: John Wood Date: Tue, 6 Aug 2024 09:56:05 -0500 Subject: [PATCH 1/5] chore: Add Cloudflare to users (#3768) Add Cloudflare to users Signed-off-by: John Wood --- USERS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/USERS.md b/USERS.md index ffdb01aaf1..77d972cd44 100644 --- a/USERS.md +++ b/USERS.md @@ -12,6 +12,7 @@ Organizations below are **officially** using Argo Rollouts. Please send a PR wit 1. [BukuKas](https://bukukas.co.id/) 1. [Calm](https://www.calm.com/) 1. [CircleCI](https://circleci.com/) +1. [Cloudflare](https://cloudflare.com/) 1. [Codefresh](https://codefresh.io/) 1. [Credit Karma](https://creditkarma.com/) 1. [DaoCloud](https://daocloud.io) From cf469839c2b1912460f17a3f4cadacd325acf7ff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Aug 2024 09:57:01 -0500 Subject: [PATCH 2/5] chore(deps): bump golang.org/x/oauth2 from 0.21.0 to 0.22.0 (#3766) Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.21.0 to 0.22.0. - [Commits](https://github.com/golang/oauth2/compare/v0.21.0...v0.22.0) --- updated-dependencies: - dependency-name: golang.org/x/oauth2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index be23cdc3cc..45559fc1e6 100644 --- a/go.mod +++ b/go.mod @@ -39,7 +39,7 @@ require ( github.com/stretchr/testify v1.9.0 github.com/tj/assert v0.0.3 github.com/valyala/fasttemplate v1.2.2 - golang.org/x/oauth2 v0.21.0 + golang.org/x/oauth2 v0.22.0 google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 google.golang.org/grpc v1.65.0 google.golang.org/protobuf v1.34.2 diff --git a/go.sum b/go.sum index cbbadec5c5..e86242e7c1 100644 --- a/go.sum +++ b/go.sum @@ -878,8 +878,8 @@ golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= -golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= -golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA= +golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= From 0ca5932701aabec0cc7d040ec8e04c765546fbab Mon Sep 17 00:00:00 2001 From: Aleksander Korzynski <89802643+akorzy-pl@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:57:18 +0200 Subject: [PATCH 3/5] docs: add Priceline to USERS.md (#3764) Signed-off-by: Aleksander Korzynski <89802643+akorzy-pl@users.noreply.github.com> --- USERS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/USERS.md b/USERS.md index 77d972cd44..a22b403410 100644 --- a/USERS.md +++ b/USERS.md @@ -37,6 +37,7 @@ Organizations below are **officially** using Argo Rollouts. Please send a PR wit 1. [PagerDuty](https://www.pagerduty.com/) 1. [PayPal](https://www.paypal.com/) 1. [PayPay](https://paypay.ne.jp/) +1. [Priceline](https://priceline.com) 1. [Productboard](https://www.productboard.com) 1. [Quipper](https://www.quipper.com/) 1. [Quizlet](https://quizlet.com) From 827ce595c8d011c1bba05d48ffc0d110d27f438b Mon Sep 17 00:00:00 2001 From: benminter-treatwell <84128121+benminter-treatwell@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:36:00 +0100 Subject: [PATCH 4/5] =?UTF-8?q?fix(controller):=20use=20the=20stableRS=20f?= =?UTF-8?q?rom=20the=20rollout=20context=20rather=20tha=E2=80=A6=20(#3664)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(controller): use the stableRS from the rollout context rather than inferring it from the active selector, to deal with the edge case where the stableRS != activeRS during analysis templates Signed-off-by: ben.minter * fix(controller): update tests which were relying on this bug(?) Signed-off-by: ben.minter * fix(controller): add clarity to comment in the case there is no stableRS Signed-off-by: ben.minter * fix(controller): add a test to assert that the stablers is not scaled by the reconiliation on start, by checking the log Signed-off-by: ben.minter --------- Signed-off-by: ben.minter --- rollout/analysis_test.go | 3 +- rollout/bluegreen.go | 16 +++--- rollout/bluegreen_test.go | 89 +++++++++++++++++++++++++++++++ rollout/ephemeralmetadata_test.go | 2 +- 4 files changed, 98 insertions(+), 12 deletions(-) diff --git a/rollout/analysis_test.go b/rollout/analysis_test.go index e12a898c1a..fa7fdc5b96 100644 --- a/rollout/analysis_test.go +++ b/rollout/analysis_test.go @@ -2532,7 +2532,7 @@ func TestRolloutPostPromotionAnalysisSuccess(t *testing.T) { Status: v1alpha1.AnalysisPhaseRunning, } - rs1 := newReplicaSetWithStatus(r1, 0, 0) + rs1 := newReplicaSetWithStatus(r1, 1, 1) rs2 := newReplicaSetWithStatus(r2, 1, 1) rs1PodHash := rs1.Labels[v1alpha1.DefaultRolloutUniqueLabelKey] rs2PodHash := rs2.Labels[v1alpha1.DefaultRolloutUniqueLabelKey] @@ -2558,6 +2558,7 @@ func TestRolloutPostPromotionAnalysisSuccess(t *testing.T) { patch := f.getPatchedRollout(patchIndex) expectedPatch := fmt.Sprintf(`{ "status": { + "replicas":2, "stableRS": "%s", "blueGreen": { "postPromotionAnalysisRunStatus":{"status":"Successful"} diff --git a/rollout/bluegreen.go b/rollout/bluegreen.go index 9904de9dab..7613852470 100644 --- a/rollout/bluegreen.go +++ b/rollout/bluegreen.go @@ -71,18 +71,14 @@ func (c *rolloutContext) rolloutBlueGreen() error { return c.syncRolloutStatusBlueGreen(previewSvc, activeSvc) } -func (c *rolloutContext) reconcileBlueGreenStableReplicaSet(activeSvc *corev1.Service) error { - if _, ok := activeSvc.Spec.Selector[v1alpha1.DefaultRolloutUniqueLabelKey]; !ok { - return nil - } - activeRS, _ := replicasetutil.GetReplicaSetByTemplateHash(c.allRSs, activeSvc.Spec.Selector[v1alpha1.DefaultRolloutUniqueLabelKey]) - if activeRS == nil { - c.log.Warn("There shouldn't be a nil active replicaset if the active Service selector is set") +func (c *rolloutContext) reconcileBlueGreenStableReplicaSet() error { + if c.stableRS == nil { + c.log.Info("Stable ReplicaSet doesn't exist and hence no reconciliation is required.") return nil } - c.log.Infof("Reconciling stable ReplicaSet '%s'", activeRS.Name) - _, _, err := c.scaleReplicaSetAndRecordEvent(activeRS, defaults.GetReplicasOrDefault(c.rollout.Spec.Replicas)) + c.log.Infof("Reconciling stable ReplicaSet '%s'", c.stableRS.Name) + _, _, err := c.scaleReplicaSetAndRecordEvent(c.stableRS, defaults.GetReplicasOrDefault(c.rollout.Spec.Replicas)) if err != nil { return fmt.Errorf("failed to scaleReplicaSetAndRecordEvent in reconcileBlueGreenStableReplicaSet: %w", err) } @@ -94,7 +90,7 @@ func (c *rolloutContext) reconcileBlueGreenReplicaSets(activeSvc *corev1.Service if err != nil { return err } - err = c.reconcileBlueGreenStableReplicaSet(activeSvc) + err = c.reconcileBlueGreenStableReplicaSet() if err != nil { return err } diff --git a/rollout/bluegreen_test.go b/rollout/bluegreen_test.go index 2ff9515fe3..b78ed8704d 100644 --- a/rollout/bluegreen_test.go +++ b/rollout/bluegreen_test.go @@ -1,12 +1,15 @@ package rollout import ( + "bytes" "encoding/json" "fmt" "strconv" + "strings" "testing" "time" + log "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -1007,6 +1010,92 @@ func TestBlueGreenRolloutScaleUpdateActiveRS(t *testing.T) { f.run(getKey(r2, t)) } +func TestBlueGreenRolloutScaleUpdateStableRS(t *testing.T) { + f := newFixture(t) + defer f.Close() + + r1 := newBlueGreenRollout("foo", 1, nil, "active", "") + rs1 := newReplicaSetWithStatus(r1, 1, 1) + r2 := bumpVersion(r1) + + rs2 := newReplicaSetWithStatus(r2, 1, 1) + f.kubeobjects = append(f.kubeobjects, rs1, rs2) + f.replicaSetLister = append(f.replicaSetLister, rs1, rs2) + + rs1PodHash := rs1.Labels[v1alpha1.DefaultRolloutUniqueLabelKey] + rs2PodHash := rs2.Labels[v1alpha1.DefaultRolloutUniqueLabelKey] + + // Make the new RS the active and the old one stable to simulate post-promotion analysis step. + r2 = updateBlueGreenRolloutStatus(r2, rs2PodHash, rs2PodHash, rs1PodHash, 1, 1, 2, 1, false, true, false) + + f.rolloutLister = append(f.rolloutLister, r2) + + f.objects = append(f.objects, r2) + activeSvc := newService("active", 80, map[string]string{v1alpha1.DefaultRolloutUniqueLabelKey: rs2PodHash}, r2) + f.kubeobjects = append(f.kubeobjects, activeSvc) + f.serviceLister = append(f.serviceLister, activeSvc) + + f.expectPatchRolloutAction(r1) + + // Patch the rollout to get it in the state we want (old RS is stable and new is active) + f.run(getKey(r2, t)) + // Actually update the replicas now that we are in the desired state (old RS is stable and new is active) + r2.Spec.Replicas = pointer.Int32Ptr(2) + + f.expectUpdateReplicaSetAction(rs1) + f.expectUpdateReplicaSetAction(rs2) + f.run(getKey(r2, t)) +} + +func TestBlueGreenStableRSReconciliationShouldNotScaleOnFirstTimeRollout(t *testing.T) { + f := newFixture(t) + prevOutput := log.StandardLogger().Out + defer func() { + log.SetOutput(prevOutput) + }() + defer f.Close() + + // Setup Logging capture + buf := bytes.NewBufferString("") + log.SetOutput(buf) + + r := newBlueGreenRollout("foo", 1, nil, "active", "preview") + r.Status.Conditions = []v1alpha1.RolloutCondition{} + f.rolloutLister = append(f.rolloutLister, r) + f.objects = append(f.objects, r) + previewSvc := newService("preview", 80, nil, r) + activeSvc := newService("active", 80, nil, r) + f.kubeobjects = append(f.kubeobjects, previewSvc, activeSvc) + f.serviceLister = append(f.serviceLister, activeSvc, previewSvc) + + rs := newReplicaSet(r, 1) + rsPodHash := rs.Labels[v1alpha1.DefaultRolloutUniqueLabelKey] + generatedConditions := generateConditionsPatchWithCompleted(false, conditions.ReplicaSetUpdatedReason, rs, false, "", true) + + f.expectCreateReplicaSetAction(rs) + f.expectPatchServiceAction(previewSvc, rsPodHash) + f.expectUpdateReplicaSetAction(rs) // scale up RS + f.expectUpdateRolloutStatusAction(r) + expectedPatchWithoutSubs := `{ + "status":{ + "blueGreen" : { + "previewSelector": "%s" + }, + "conditions": %s, + "selector": "foo=bar", + "stableRS": "%s", + "phase": "Progressing", + "message": "more replicas need to be updated" + } + }` + expectedPatch := calculatePatch(r, fmt.Sprintf(expectedPatchWithoutSubs, rsPodHash, generatedConditions, rsPodHash)) + f.expectPatchRolloutActionWithPatch(r, expectedPatch) + f.run(getKey(r, t)) + + logMessage := buf.String() + assert.True(t, strings.Contains(logMessage, "msg=\"Stable ReplicaSet doesn't exist and hence no reconciliation is required.\""), logMessage) +} + func TestPreviewReplicaCountHandleScaleUpPreviewCheckPoint(t *testing.T) { t.Run("TrueAfterMeetingMinAvailable", func(t *testing.T) { f := newFixture(t) diff --git a/rollout/ephemeralmetadata_test.go b/rollout/ephemeralmetadata_test.go index 59daf1be0e..8241a1831c 100644 --- a/rollout/ephemeralmetadata_test.go +++ b/rollout/ephemeralmetadata_test.go @@ -169,7 +169,7 @@ func TestSyncBlueGreenEphemeralMetadataSecondRevision(t *testing.T) { f := newFixture(t) defer f.Close() - r1 := newBlueGreenRollout("foo", 1, nil, "active", "preview") + r1 := newBlueGreenRollout("foo", 3, nil, "active", "preview") r1.Spec.Strategy.BlueGreen.AutoPromotionEnabled = pointer.BoolPtr(false) r1.Annotations[annotations.RevisionAnnotation] = "1" r1.Spec.Strategy.BlueGreen.PreviewMetadata = &v1alpha1.PodTemplateMetadata{ From 48131ebedc32239d0b855d9beaf396ca32798f71 Mon Sep 17 00:00:00 2001 From: Hidetake Iwata Date: Thu, 8 Aug 2024 01:29:45 +0900 Subject: [PATCH 5/5] fix: Support kustomize v5 labels transformer. Fixes #3105 (#3775) * feat: add rollout-transform-2023-10-09.yaml which has been adapted for kustomize v5 Signed-off-by: Jethro Lee * Rename to rollout-transform-kustomize-v5.yaml Signed-off-by: Hidetake Iwata * Add link to doc Signed-off-by: Hidetake Iwata --------- Signed-off-by: Jethro Lee Signed-off-by: Hidetake Iwata Co-authored-by: Jethro Lee --- docs/features/kustomize.md | 7 + .../rollout-transform-kustomize-v5.yaml | 274 ++++++++++++++++++ 2 files changed, 281 insertions(+) create mode 100644 docs/features/kustomize/rollout-transform-kustomize-v5.yaml diff --git a/docs/features/kustomize.md b/docs/features/kustomize.md index e1a691b511..568d9d2a78 100644 --- a/docs/features/kustomize.md +++ b/docs/features/kustomize.md @@ -28,6 +28,13 @@ configurations: - https://argoproj.github.io/argo-rollouts/features/kustomize/rollout-transform.yaml ``` +- With Kustomize 5 it is possible to reference the configuration directly from a remote resource: + +```yaml +configurations: + - https://argoproj.github.io/argo-rollouts/features/kustomize/rollout-transform-kustomize-v5.yaml +``` + - With Kustomize 4.5.5 kustomize can use kubernetes OpenAPI data to get merge key and patch strategy information about [resource types](https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/openapi). For example, given the following rollout: ```yaml diff --git a/docs/features/kustomize/rollout-transform-kustomize-v5.yaml b/docs/features/kustomize/rollout-transform-kustomize-v5.yaml new file mode 100644 index 0000000000..2084a04554 --- /dev/null +++ b/docs/features/kustomize/rollout-transform-kustomize-v5.yaml @@ -0,0 +1,274 @@ +# https://github.com/kubernetes-sigs/kustomize/blob/master/api/konfig/builtinpluginconsts/namereference.go +nameReference: +- kind: ConfigMap + version: v1 + fieldSpecs: + - path: spec/template/spec/volumes/configMap/name + kind: Rollout + - path: spec/template/spec/containers/env/valueFrom/configMapKeyRef/name + kind: Rollout + - path: spec/template/spec/initContainers/env/valueFrom/configMapKeyRef/name + kind: Rollout + - path: spec/template/spec/containers/envFrom/configMapRef/name + kind: Rollout + - path: spec/template/spec/initContainers/envFrom/configMapRef/name + kind: Rollout + - path: spec/template/spec/volumes/projected/sources/configMap/name + kind: Rollout + - path: spec/templates/template/spec/volumes/configMap/name + kind: Experiment + - path: spec/templates/template/spec/containers/env/valueFrom/configMapKeyRef/name + kind: Experiment + - path: spec/templates/template/spec/initContainers/env/valueFrom/configMapKeyRef/name + kind: Experiment + - path: spec/templates/template/spec/containers/envFrom/configMapRef/name + kind: Experiment + - path: spec/templates/template/spec/initContainers/envFrom/configMapRef/name + kind: Experiment + - path: spec/templates/template/spec/volumes/projected/sources/configMap/name + kind: Experiment + - path: spec/metrics/provider/job/spec/template/spec/volumes/configMap/name + kind: AnalysisTemplate + - path: spec/metrics/provider/job/spec/template/spec/containers/env/valueFrom/configMapKeyRef/name + kind: AnalysisTemplate + - path: spec/metrics/provider/job/spec/template/spec/initContainers/env/valueFrom/configMapKeyRef/name + kind: AnalysisTemplate + - path: spec/metrics/provider/job/spec/template/spec/containers/envFrom/configMapRef/name + kind: AnalysisTemplate + - path: spec/metrics/provider/job/spec/template/spec/initContainers/envFrom/configMapRef/name + kind: AnalysisTemplate + - path: spec/metrics/provider/job/spec/template/spec/volumes/projected/sources/configMap/name + kind: AnalysisTemplate +- kind: Secret + version: v1 + fieldSpecs: + - path: spec/template/spec/volumes/secret/secretName + kind: Rollout + - path: spec/template/spec/containers/env/valueFrom/secretKeyRef/name + kind: Rollout + - path: spec/template/spec/initContainers/env/valueFrom/secretKeyRef/name + kind: Rollout + - path: spec/template/spec/containers/envFrom/secretRef/name + kind: Rollout + - path: spec/template/spec/initContainers/envFrom/secretRef/name + kind: Rollout + - path: spec/template/spec/imagePullSecrets/name + kind: Rollout + - path: spec/template/spec/volumes/projected/sources/secret/name + kind: Rollout + - path: spec/templates/template/spec/volumes/secret/secretName + kind: Experiment + - path: spec/templates/template/spec/containers/env/valueFrom/secretKeyRef/name + kind: Experiment + - path: spec/templates/template/spec/initContainers/env/valueFrom/secretKeyRef/name + kind: Experiment + - path: spec/templates/template/spec/containers/envFrom/secretRef/name + kind: Experiment + - path: spec/templates/template/spec/initContainers/envFrom/secretRef/name + kind: Experiment + - path: spec/templates/template/spec/imagePullSecrets/name + kind: Experiment + - path: spec/templates/template/spec/volumes/projected/sources/secret/name + kind: Experiment + - path: spec/metrics/provider/job/spec/template/spec/volumes/secret/secretName + kind: AnalysisTemplate + - path: spec/metrics/provider/job/spec/template/spec/containers/env/valueFrom/secretKeyRef/name + kind: AnalysisTemplate + - path: spec/metrics/provider/job/spec/template/spec/initContainers/env/valueFrom/secretKeyRef/name + kind: AnalysisTemplate + - path: spec/metrics/provider/job/spec/template/spec/containers/envFrom/secretRef/name + kind: AnalysisTemplate + - path: spec/metrics/provider/job/spec/template/spec/initContainers/envFrom/secretRef/name + kind: AnalysisTemplate + - path: spec/metrics/provider/job/spec/template/spec/imagePullSecrets/name + kind: AnalysisTemplate + - path: spec/metrics/provider/job/spec/template/spec/volumes/projected/sources/secret/name + kind: AnalysisTemplate +- kind: ServiceAccount + version: v1 + fieldSpecs: + - path: spec/template/spec/serviceAccountName + kind: Rollout + - path: spec/templates/template/spec/serviceAccountName + kind: Experiment + - path: spec/metrics/provider/job/spec/template/spec/serviceAccountName + kind: AnalysisTemplate +- kind: PersistentVolumeClaim + version: v1 + fieldSpecs: + - path: spec/template/spec/volumes/persistentVolumeClaim/claimName + kind: Rollout + - path: spec/templates/template/spec/volumes/persistentVolumeClaim/claimName + kind: Experiment + - path: spec/metrics/provider/job/spec/template/spec/volumes/persistentVolumeClaim/claimName + kind: AnalysisTemplate +- kind: PriorityClass + version: v1 + group: scheduling.k8s.io + fieldSpecs: + - path: spec/template/spec/priorityClassName + kind: Rollout + - path: spec/templates/template/spec/priorityClassName + kind: Experiment + - path: spec/metrics/provider/job/spec/template/spec/priorityClassName + kind: AnalysisTemplate + +# The name references below are unique to Rollouts and not applicable to Deployment +- kind: Service + version: v1 + fieldSpecs: + - path: spec/strategy/blueGreen/activeService + kind: Rollout + - path: spec/strategy/blueGreen/previewService + kind: Rollout + - path: spec/strategy/canary/canaryService + kind: Rollout + - path: spec/strategy/canary/stableService + kind: Rollout + - path: spec/strategy/canary/trafficRouting/alb/rootService + kind: Rollout +- kind: VirtualService + group: networking.istio.io + fieldSpecs: + - path: spec/strategy/canary/trafficRouting/istio/virtualService/name + kind: Rollout +- kind: DestinationRule + group: networking.istio.io + fieldSpecs: + - path: spec/strategy/canary/trafficRouting/istio/destinationRule/name + kind: Rollout +- kind: Ingress + group: networking.k8s.io + fieldSpecs: + - path: spec/strategy/canary/trafficRouting/alb/ingress + kind: Rollout + - path: spec/strategy/canary/trafficRouting/nginx/stableIngress + kind: Rollout +- kind: Ingress + group: extensions + fieldSpecs: + - path: spec/strategy/canary/trafficRouting/alb/ingress + kind: Rollout + - path: spec/strategy/canary/trafficRouting/nginx/stableIngress + kind: Rollout +- kind: AnalysisTemplate + group: argoproj.io + fieldSpecs: + - path: spec/strategy/blueGreen/prePromotionAnalysis/templates/templateName + kind: Rollout + - path: spec/strategy/blueGreen/postPromotionAnalysis/templates/templateName + kind: Rollout + - path: spec/strategy/canary/analysis/templates/templateName + kind: Rollout + - path: spec/strategy/canary/steps/analysis/templates/templateName + kind: Rollout + - path: spec/strategy/canary/steps/experiment/analyses/templateName + kind: Rollout + - path: spec/analyses/templateName + kind: Experiment +- kind: Rollout + fieldSpecs: + - path: spec/scaleTargetRef/name + kind: HorizontalPodAutoscaler +- kind: Deployment + version: v1 + group: apps + fieldSpecs: + - path: spec/workloadRef/name + kind: Rollout +- kind: Mapping + group: getambassador.io + fieldSpecs: + - path: spec/strategy/canary/trafficRouting/ambassador/mappings + kind: Rollout + +# https://github.com/kubernetes-sigs/kustomize/blob/master/api/konfig/builtinpluginconsts/commonlabels.go +commonLabels: +- path: spec/selector/matchLabels + create: true + kind: Rollout +- path: spec/template/metadata/labels + create: true + kind: Rollout +- path: spec/template/spec/affinity/podAffinity/preferredDuringSchedulingIgnoredDuringExecution/podAffinityTerm/labelSelector/matchLabels + create: false + kind: Rollout +- path: spec/template/spec/affinity/podAffinity/requiredDuringSchedulingIgnoredDuringExecution/labelSelector/matchLabels + create: false + kind: Rollout +- path: spec/template/spec/affinity/podAntiAffinity/preferredDuringSchedulingIgnoredDuringExecution/podAffinityTerm/labelSelector/matchLabels + create: false + kind: Rollout +- path: spec/template/spec/affinity/podAntiAffinity/requiredDuringSchedulingIgnoredDuringExecution/labelSelector/matchLabels + create: false + kind: Rollout + +templateLabels: +- path: spec/template/metadata/labels + create: true + kind: Rollout + +# https://github.com/kubernetes-sigs/kustomize/blob/master/api/konfig/builtinpluginconsts/commonannotations.go +commonAnnotations: +- path: spec/template/metadata/annotations + create: true + kind: Rollout + +# https://github.com/kubernetes-sigs/kustomize/blob/master/api/konfig/builtinpluginconsts/varreference.go +varReference: +- path: spec/template/spec/containers/args + kind: Rollout +- path: spec/template/spec/containers/command + kind: Rollout +- path: spec/template/spec/containers/env/value + kind: Rollout +- path: spec/template/spec/containers/volumeMounts/mountPath + kind: Rollout +- path: spec/template/spec/initContainers/args + kind: Rollout +- path: spec/template/spec/initContainers/command + kind: Rollout +- path: spec/template/spec/initContainers/env/value + kind: Rollout +- path: spec/template/spec/initContainers/volumeMounts/mountPath + kind: Rollout +- path: spec/templates/template/spec/containers/args + kind: Experiment +- path: spec/templates/template/spec/containers/command + kind: Experiment +- path: spec/templates/template/spec/containers/env/value + kind: Experiment +- path: spec/templates/template/spec/containers/volumeMounts/mountPath + kind: Experiment +- path: spec/templates/template/spec/initContainers/args + kind: Experiment +- path: spec/templates/template/spec/initContainers/command + kind: Experiment +- path: spec/templates/template/spec/initContainers/env/value + kind: Experiment +- path: spec/templates/template/spec/initContainers/volumeMounts/mountPath + kind: Experiment +- path: spec/metrics/provider/job/spec/template/spec/containers/args + kind: AnalysisTemplate +- path: spec/metrics/provider/job/spec/template/spec/containers/command + kind: AnalysisTemplate +- path: spec/metrics/provider/job/spec/template/spec/containers/env/value + kind: AnalysisTemplate +- path: spec/metrics/provider/job/spec/template/spec/containers/volumeMounts/mountPath + kind: AnalysisTemplate +- path: spec/metrics/provider/job/spec/template/spec/initContainers/args + kind: AnalysisTemplate +- path: spec/metrics/provider/job/spec/template/spec/initContainers/command + kind: AnalysisTemplate +- path: spec/metrics/provider/job/spec/template/spec/initContainers/env/value + kind: AnalysisTemplate +- path: spec/metrics/provider/job/spec/template/spec/initContainers/volumeMounts/mountPath + kind: AnalysisTemplate +- path: spec/metrics/provider/job/spec/template/spec/volumes/nfs/server + kind: AnalysisTemplate + +# https://github.com/kubernetes-sigs/kustomize/blob/master/api/konfig/builtinpluginconsts/replicas.go +replicas: +- path: spec/replicas + create: true + kind: Rollout