Compare commits

...

158 Commits

Author SHA1 Message Date
Rafael Brito 67d19e100f
chore: make api-proto to support go module style (#4402)
tweak on make api-proto to support go module style

Signed-off-by: Rafael Brito <rafa@stormforge.io>
2025-08-08 11:18:18 -05:00
Rafael Brito b579b3d4d9
fix(deps): bumping k8s modules to 0.30.14 fixes #4210 Rollout CRD and mitigates #4180 (#4212)
* chore: bumping k8s mods to 0.30.11 and new CRD

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* chore: updating more modules and tweaking CRD generation

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* chore: adding StormForge on USERS.md

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* tweaking Makefile and supporting script to successfully run codegen

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* removed deprecated generate-groups.sh codegen script

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* Updating gen-openapi parameters k8s to v0.30.X

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* running go mod before generating crd

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* another pass on fixing go-to-protobuf

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* restoring boilerplate.go.txt for gen_client

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* tweaking openapi-gen for the expected file name

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* disable vendoring on gen-crd

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* disable vendoring for docs generation

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* invoking doc generation prior crd generation

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* bumping mockery version

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* adding go-mod-vendor for docs

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* bumping to latest k8s libraries 0.30.X

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* bumping golang

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* bumping last k8s libraries and reinstate go 1.23

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* fixing codegen directory

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* resolving conflicts on x/sync

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* bumping k8s libraries to 1.30.14

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* another pass after go mod tidy

Signed-off-by: Rafael Brito <rafa@stormforge.io>

* Makefile changes to support go module style setup with new codegen

Signed-off-by: Rafael Brito <rafa@stormforge.io>

---------

Signed-off-by: Rafael Brito <rafa@stormforge.io>
Signed-off-by: Rafael Brito <rafaelbrito@gmail.com>
2025-08-07 19:20:37 -05:00
Gusty Sapto Ady Prakoso b3447cbf96
docs: add batumbu to USERS.md (#4389)
Signed-off-by: Gusty Sapto Ady Prakoso <gustysaptoadyprakoso@gmail.com>
2025-08-07 19:19:46 -05:00
Kevin Dorosh a9e566ea4f
fix(cli): Add generation to RolloutInfo (#4336)
Signed-off-by: Kevin Dorosh <kcdorosh@gmail.com>
Co-authored-by: Kevin Dorosh <kevin.dorosh@reddit.com>
2025-07-24 10:26:32 -05:00
Oliver Gondža 87562252b3
chore: Adding Red Hat to the list (#4361)
feat(USERS.md): Adding Red Hat to the list

Signed-off-by: Oliver Gondža <ogondza@gmail.com>
2025-07-24 10:25:42 -05:00
dependabot[bot] 5e44d4b461
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.45.1 to 1.45.4 (#4366)
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/cloudwatch
  dependency-version: 1.45.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-24 10:25:23 -05:00
Kevin Park 401a5fab7e
fix(cli): expose AWS API versions in controller CLI. Fixes #4334 (#4368)
* Fix camelCase typo in metricsPort CLI flag

Signed-off-by: Kevin Park <krapi0314@gmail.com>

* Expose AWS API version in controller CLI

Signed-off-by: Kevin Park <krapi0314@gmail.com>

---------

Signed-off-by: Kevin Park <krapi0314@gmail.com>
2025-07-24 09:28:08 -05:00
Brian Fox d6d63f3330
fix(controller): don't panic if workload ref is not found (#4208)
Signed-off-by: OneMatchFox <878612+onematchfox@users.noreply.github.com>
Co-authored-by: Zach Aller <zachaller@users.noreply.github.com>
2025-07-23 13:19:36 -05:00
TamarRubin d4a935068d
feat(dashboard): add error handling notifications for rollout actions (#4345)
* feat(ui): add error handling notifications for rollout actions

- Add try-catch error handling to rollout action buttons
- Display error notifications at top of page when actions fail
- Show specific 'Permission Denied' message for HTTP 403 errors
- Include RBAC guidance for permission-related failures
- Ensure loading spinner stops on both success and error
- Remove success notifications to reduce UI noise

Fixes silent failures when users lack proper RBAC permissions
for rollout actions like Abort, Promote, Restart, and Retry.

Signed-off-by: tamar.rubin <tamar.rubin@appsflyer.com>

* docs: add AppsFlyer to USERS.md

Signed-off-by: tamar.rubin <tamar.rubin@appsflyer.com>

---------

Signed-off-by: tamar.rubin <tamar.rubin@appsflyer.com>
Co-authored-by: tamar.rubin <tamar.rubin@appsflyer.com>
2025-07-17 08:45:13 -05:00
dependabot[bot] 1e03da7841
chore(deps): bump golang.org/x/sync from 0.11.0 to 0.16.0 (#4353)
Bumps [golang.org/x/sync](https://github.com/golang/sync) from 0.11.0 to 0.16.0.
- [Commits](https://github.com/golang/sync/compare/v0.11.0...v0.16.0)

---
updated-dependencies:
- dependency-name: golang.org/x/sync
  dependency-version: 0.16.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-17 08:43:53 -05:00
Donghyun Kang 848c9fa729
docs: fix indentation in Rollout YAML (#4354)
Signed-off-by: augustkang <iamaugustkang@gmail.com>
2025-07-17 08:43:33 -05:00
Kevin Park caf2e6f4d2
fix(cli): update incorrect boolean flag syntax example in cli help output. Fixes #4112 (#4355)
Fix cli example for boolean flag with value set

Signed-off-by: Kevin Park <krapi0314@gmail.com>
2025-07-17 08:43:06 -05:00
Eduardo Morales 6dfe280d14
feat: added available replica pods threshold (#4341)
* feat: added available replica pods threshold

Signed-off-by: Eduardo Morales <emorales@nextdoor.com>

* feat: created a better struct pattern for replicaProgressThreshold

Signed-off-by: Eduardo Morales <emorales@nextdoor.com>

* fix: changed ThresholdType -> Type

Signed-off-by: Eduardo Morales <emorales@nextdoor.com>

---------

Signed-off-by: Eduardo Morales <emorales@nextdoor.com>
2025-07-17 08:41:01 -05:00
Kostis (Codefresh) 468cfdf3d4
docs: proposal for parameterized build system (#4331)
Signed-off-by: Kostis Kapelonis <kostis@codefresh.io>
2025-07-08 14:42:31 +00:00
Kostis (Codefresh) 92df0a35d2
fix: truncate analysis job name if needed (#4305)
* fix: truncate analysis job name if needed

Signed-off-by: Kostis Kapelonis <kostis@codefresh.io>

* fix: moved DNS limit to defaults

Signed-off-by: Kostis Kapelonis <kostis@codefresh.io>

---------

Signed-off-by: Kostis Kapelonis <kostis@codefresh.io>
2025-07-08 09:07:13 -05:00
Abhish2702 88ea0c519f
fix: experiment services deletion before reconciling traffic routing in rollouts (#4310)
Signed-off-by: Abhishek Bansal <abhishekbansal2002@gmail.com>
2025-07-07 19:11:47 -07:00
dependabot[bot] e2cdaf5f11
chore(deps): bump docker/setup-buildx-action from 3.10.0 to 3.11.1 (#4328)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3.10.0 to 3.11.1.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](b5ca514318...e468171a9d)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-version: 3.11.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 13:11:26 -05:00
Revan Darth f17316b9ac
docs: fix traffic manager note (#4311)
Signed-off-by: Revan Darth <darthrevan344@gmail.com>
2025-06-09 10:16:53 -05:00
dependabot[bot] c179d94d5a
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.44.1 to 1.45.1 (#4313)
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch

Bumps [github.com/aws/aws-sdk-go-v2/service/cloudwatch](https://github.com/aws/aws-sdk-go-v2) from 1.44.1 to 1.45.1.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/iot/v1.44.1...service/s3/v1.45.1)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/cloudwatch
  dependency-version: 1.45.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-09 10:16:32 -05:00
github-actions[bot] 4025384e2e
docs: Update Changelog (#4306)
* update changelog

* Update CHANGELOG.md

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

---------

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>
Co-authored-by: zachaller <201390+zachaller@users.noreply.github.com>
Co-authored-by: Zach Aller <zachaller@users.noreply.github.com>
2025-06-05 13:14:33 +00:00
Jan Konarzewski 02cf24ebb3
docs: fix links in canary docs to other docs (#4303)
docs(canaries): fix links to other docs

Signed-off-by: Jan Konarzewski <jan.konarzewski@wolt.com>
2025-06-04 10:40:21 -05:00
Jayendra Parsai 8668348cd4
fix: code weakness of path traversal (#4278)
Signed-off-by: Jayendra Parsai <jparsai@jparsai-thinkpadp1gen4i.remote.csb>
Co-authored-by: Jayendra Parsai <jparsai@jparsai-thinkpadp1gen4i.remote.csb>
2025-05-30 21:21:19 +00:00
Kostis (Codefresh) 5ccf0a71e0
docs: explain skew policy between the kubectl plugin and the controller (#4300)
* docs: explain version skew policy

Signed-off-by: Kostis Kapelonis <kostis@codefresh.io>

* docs: explain version skew policy - added links

Signed-off-by: Kostis Kapelonis <kostis@codefresh.io>

---------

Signed-off-by: Kostis Kapelonis <kostis@codefresh.io>
2025-05-30 21:20:45 +00:00
Johannes Kleinlercher 3f677349be
fix: remove preserveUnknownFields to avoid OutOfSync in ArgoCD. Fixes #1272 (#4277)
* fix: remove preserveUnknownFields to avoid OutOfSync in ArgoCD

fixes https://github.com/argoproj/argo-rollouts/issues/1272

Signed-off-by: Johannes Kleinlercher <johannes.kleinlercher@suxess-it.com>

* chore: added suxess-it as users

Signed-off-by: Johannes Kleinlercher <johannes.kleinlercher@suxess-it.com>

* fix: remove preserveUnknownFields in gen-crd-spec

Signed-off-by: Johannes Kleinlercher <johannes.kleinlercher@suxess-it.com>

---------

Signed-off-by: Johannes Kleinlercher <johannes.kleinlercher@suxess-it.com>
2025-05-30 09:17:55 -05:00
dependabot[bot] db79990787
chore(deps): bump codecov/codecov-action from 5.4.2 to 5.4.3 (#4283)
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5.4.2 to 5.4.3.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](ad3126e916...18283e04ce)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-version: 5.4.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-30 09:05:37 -05:00
Takumi Sue 599e7fa54e
docs: fix broken link (#4289)
docs: fix link

Signed-off-by: mikutas <23391543+mikutas@users.noreply.github.com>
2025-05-30 08:50:06 -05:00
Tyler Auerbeck 473c14e360
ci: bump golangci-lint to v2 (#4290)
bump golangci-lint to v2

Signed-off-by: Tyler Auerbeck <tylerauerbeck@users.noreply.github.com>
Co-authored-by: Tyler Auerbeck <tylerauerbeck@users.noreply.github.com>
2025-05-30 08:48:19 -05:00
dependabot[bot] 0a15908d66
chore(deps): bump docker/build-push-action from 6.16.0 to 6.18.0 (#4298)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.16.0 to 6.18.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](14487ce63c...263435318d)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-version: 6.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-30 08:38:45 -05:00
Peter Jiang ccf0be9ccc
fix: abort scenario where canary/stable service is not provided (#4299)
* fix: fix abort scenario where canary/stable service is not provided

Signed-off-by: Peter Jiang <peterjiang823@gmail.com>

* remove not needed code

Signed-off-by: Peter Jiang <peterjiang823@gmail.com>

* Modularize tests

Signed-off-by: Peter Jiang <peterjiang823@gmail.com>

* fix tests

Signed-off-by: Peter Jiang <peterjiang823@gmail.com>

* Refactor code to handle only checking relavant RS and return nil

Signed-off-by: Peter Jiang <peterjiang823@gmail.com>

* update test

Signed-off-by: Peter Jiang <peterjiang823@gmail.com>

* update test

Signed-off-by: Peter Jiang <peterjiang823@gmail.com>

---------

Signed-off-by: Peter Jiang <peterjiang823@gmail.com>
2025-05-30 08:38:01 -05:00
Ciprian Hacman 6e7560ad8d
fix: update main command description for retry (#4301)
* Fix main command description for retry

Signed-off-by: Ciprian Hacman <ciprian@hakman.dev>

* Add Microsoft to the users list

Signed-off-by: Ciprian Hacman <ciprian@hakman.dev>

* Update generated docs

Signed-off-by: Ciprian Hacman <ciprian@hakman.dev>

---------

Signed-off-by: Ciprian Hacman <ciprian@hakman.dev>
2025-05-30 08:33:23 -05:00
Travis Perdue 8f536b4beb
refactor(controller): context refactor (#4291)
* add lo package

Signed-off-by: Travis Perdue <perduetravis@gmail.com>

* remove repetitive boolean checks

Signed-off-by: Travis Perdue <perduetravis@gmail.com>

* remove accidental package add

Signed-off-by: Travis Perdue <perduetravis@gmail.com>

* fix vendor package snafu

Signed-off-by: Travis Perdue <perduetravis@gmail.com>

* restore log; tweak if conditions

Signed-off-by: Travis Perdue <perduetravis@gmail.com>

---------

Signed-off-by: Travis Perdue <perduetravis@gmail.com>
2025-05-27 12:00:00 -05:00
T Nolan 2e31d0f550
docs: adding more information about flag to document (#4240) (#4280)
* Adding more information about flag

Signed-off-by: Tavi Nolan <Tavi.Nolan@fmr.com>

* Updating --aws-region note

Signed-off-by: Tavi Nolan <Tavi.Nolan@fmr.com>

---------

Signed-off-by: Tavi Nolan <Tavi.Nolan@fmr.com>
Co-authored-by: Tavi Nolan <Tavi.Nolan@fmr.com>
2025-05-19 17:02:28 +00:00
Travis Perdue b32ed29b43
chore: fix deprecation (pointer -> ptr) (#4286)
pointer -> ptr

Signed-off-by: Travis Perdue <perduetravis@gmail.com>
2025-05-19 07:52:06 -05:00
Kostis (Codefresh) 287acaa919
chore: Improve logging (#4266)
Signed-off-by: Kostis Kapelonis <kostis@codefresh.io>
Co-authored-by: pashakostohrys <pavel@codefresh.io>
2025-05-18 10:20:01 -05:00
Kylash M R e9ac866296
docs: Update USERS.md - adding Schneider Electric (#4272)
Update USERS.md - adding Schneider Electric

Signed-off-by: Kylash M R <105107963+kylash-mr@users.noreply.github.com>
2025-05-13 15:25:19 +00:00
Tsubasa Nakayama c44c9d2560
fix(dashboard): fix container image input (#4274)
Signed-off-by: Tsubasa Nakayama <app.nakayama@gmail.com>
2025-05-13 10:22:55 -05:00
Jorge Ivan Tapicha Bedoya 16edf3a9b5
docs: Added Yuno to the USERS.md (#4262)
Docs: Added Yuno to the USERS.md

Signed-off-by: Jorge Ivan Tapicha Bedoya <jitapichab@gmail.com>
2025-05-01 10:55:04 -05:00
Aaron Hastings 80493f2018
docs: Fix traffic management link from `features/canary` page (#4269)
* Fix traffic management link from `features/canary` page.

Signed-off-by: Aaron Hastings <aaron@aaronhastings.me>
2025-05-01 10:54:29 -05:00
Kostis (Codefresh) 7ea5086021
docs: mention existing test suite names (#4267)
Signed-off-by: Kostis Kapelonis <kostis@codefresh.io>
2025-04-30 17:47:06 +00:00
dependabot[bot] 94376e6ed3
chore(deps): bump softprops/action-gh-release from 2.2.1 to 2.2.2 (#4243)
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2.2.1 to 2.2.2.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](c95fe14893...da05d55257)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: 2.2.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-28 12:46:39 -05:00
Zach Aller 06e887dcbf
docs: blue green w/ ALB not supported without downtime (#4259)
* docs: blue green w/ ALB not supported

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* docs: blue green w/ ALB not supported

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* docs: blue green w/ ALB not supported

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* docs: blue green w/ ALB not supported

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* docs: blue green w/ ALB not supported

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* docs: blue green w/ ALB not supported

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* Update docs/features/bluegreen.md

Co-authored-by: Leonardo Luz Almeida <leoluz@users.noreply.github.com>
Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* Update docs/features/bluegreen.md

Co-authored-by: Leonardo Luz Almeida <leoluz@users.noreply.github.com>
Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* docs: blue green w/ ALB not supported

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

---------

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>
Co-authored-by: Leonardo Luz Almeida <leoluz@users.noreply.github.com>
2025-04-28 16:00:01 +00:00
dependabot[bot] 6f391aaf03
chore(deps): bump actions/download-artifact from 4.2.1 to 4.3.0 (#4254)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4.2.1 to 4.3.0.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](95815c38cf...d3f86a106a)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: 4.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-25 13:13:49 -07:00
dependabot[bot] 9b8655c72c
chore(deps): bump docker/build-push-action from 6.15.0 to 6.16.0 (#4255)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.15.0 to 6.16.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](471d1dc4e0...14487ce63c)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-version: 6.16.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-25 13:13:22 -07:00
dependabot[bot] b296d31a85
chore(deps): bump github.com/aws/aws-sdk-go-v2/config from 1.29.8 to 1.29.14 (#4230)
chore(deps): bump github.com/aws/aws-sdk-go-v2/config

Bumps [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) from 1.29.8 to 1.29.14.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.8...config/v1.29.14)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-version: 1.29.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-24 08:44:59 -07:00
dependabot[bot] 37b9d0bee1
chore(deps): bump codecov/codecov-action from 5.4.0 to 5.4.2 (#4237)
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5.4.0 to 5.4.2.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](0565863a31...ad3126e916)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-version: 5.4.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-24 08:44:35 -07:00
dependabot[bot] e7e512a606
chore(deps): bump sigstore/cosign-installer from 3.8.1 to 3.8.2 (#4247)
Bumps [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) from 3.8.1 to 3.8.2.
- [Release notes](https://github.com/sigstore/cosign-installer/releases)
- [Commits](d7d6bc7722...3454372f43)

---
updated-dependencies:
- dependency-name: sigstore/cosign-installer
  dependency-version: 3.8.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-24 08:43:59 -07:00
Keith Chong c98bc84159
chore(deps): bump github.com/golang-jwt/jwt to 4.5.2 (#4235) (#4236)
Signed-off-by: Keith Chong <kykchong@redhat.com>
2025-04-16 10:02:00 -05:00
dependabot[bot] d2d958d1d2
chore(deps): bump google.golang.org/grpc from 1.70.0 to 1.71.1 (#4227)
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.70.0 to 1.71.1.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.70.0...v1.71.1)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-version: 1.71.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-10 11:21:01 -05:00
Yusuke Abe bd7a37c607
fix: follow the kustomize directory structure changes for link (#4224)
Signed-off-by: chansuke <moonset20@gmail.com>
2025-04-08 13:27:47 -05:00
Cheng Fang 39665b087c
chore(deps): bump golangci-lang from v1.61.0 to v1.64.8 (#4213)
Signed-off-by: Cheng Fang <cfang@redhat.com>
2025-04-08 14:35:33 +00:00
Joe Ton 5fe7bb8963
chore: enrich controller startup log with namespace, ports, and insta… (#4218)
chore: enrich controller startup log with namespace, ports, and instanceID

Signed-off-by: Joe Ton <joe@tonindustries.com>
2025-04-08 09:15:23 -05:00
dependabot[bot] bd6ec088f4
chore(deps): bump golang.org/x/oauth2 from 0.26.0 to 0.29.0 (#4219)
Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.26.0 to 0.29.0.
- [Commits](https://github.com/golang/oauth2/compare/v0.26.0...v0.29.0)

---
updated-dependencies:
- dependency-name: golang.org/x/oauth2
  dependency-version: 0.29.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-08 09:14:36 -05:00
Jesse Suen 2d24489418
fix: restarts during updates could cause downtime (#4221)
Signed-off-by: Jesse Suen <jesse@akuity.io>
2025-04-08 09:13:03 -05:00
Salvador Montiel 3427b15786
chore: Fix Traefik name (#4217)
Signed-off-by: Salvador Montiel <salvadormontiel8@gmail.com>
2025-04-07 11:05:33 -05:00
Dag Andersen 2583845f27
chore: Add Doubble to official USERS.md (#4214)
docs(users): Add Doubble to official USERS.md

Signed-off-by: Dag Andersen <dagbjerreandersen@gmail.com>
2025-04-03 22:24:40 +00:00
github-actions[bot] f4f7eabd6b
docs: Update Changelog (#4202)
update changelog

Co-authored-by: zachaller <201390+zachaller@users.noreply.github.com>
2025-03-22 03:53:31 +00:00
Zach Aller 963e4f291b
fix: Revert "fix(controller): rollout stuck in `Progressing`. fixes #3988" (#4201)
Revert "fix(controller):  rollout stuck in `Progressing`. fixes #3988 (#4072)"

This reverts commit f4289b70eb.
2025-03-21 14:06:41 -05:00
Yurii 38c3ff3584
fix(analysis): prevent promotion on inconclusive background run. Fixes: #3850 (#3873)
* test: add test for background analysis with inconclusive result

Signed-off-by: Yurii Popivniak <ypopivniak@cargurus.com>

* fix: prevent promotion on inconclusive background run

Signed-off-by: Yurii Popivniak <ypopivniak@cargurus.com>

* fix: e2e test for inconclusive analysisrun

Signed-off-by: Yurii Popivniak <ypopivniak@cargurus.com>

---------

Signed-off-by: Yurii Popivniak <ypopivniak@cargurus.com>
2025-03-21 13:58:51 -05:00
github-actions[bot] 88f902cfcb
docs: Update Changelog (#4199)
* update changelog

* Update CHANGELOG.md for version 1.8.0

---------

Co-authored-by: zachaller <201390+zachaller@users.noreply.github.com>
Co-authored-by: Zach Aller <zachaller@users.noreply.github.com>
2025-03-20 17:16:54 +00:00
dependabot[bot] d49ab7eb0f
chore(deps): bump actions/setup-go from 5.3.0 to 5.4.0 (#4197)
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 5.3.0 to 5.4.0.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](https://github.com/actions/setup-go/compare/v5.3.0...v5.4.0)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-20 09:00:43 -05:00
dependabot[bot] 5bbc3723e2
chore(deps): bump actions/download-artifact from 4.2.0 to 4.2.1 (#4198)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4.2.0 to 4.2.1.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](b14cf4c926...95815c38cf)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-20 09:00:13 -05:00
dependabot[bot] 2b653644c0
chore(deps): bump docker/login-action from 3.3.0 to 3.4.0 (#4191)
Bumps [docker/login-action](https://github.com/docker/login-action) from 3.3.0 to 3.4.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](9780b0c442...74a5d14239)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-19 09:45:27 -05:00
dependabot[bot] 88e408d957
chore(deps): bump actions/download-artifact from 4.1.9 to 4.2.0 (#4194)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4.1.9 to 4.2.0.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](cc20338598...b14cf4c926)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-19 09:45:11 -05:00
Anand Francis Joseph 507dc0c233
chore(deps): Updated go version in go.mod file (#4182)
Updated go version in go.mod file

Signed-off-by: Anand Francis Joseph <anjoseph@redhat.com>
2025-03-15 08:34:33 -05:00
Steve Ramage 659c13934f
docs: Improve the Istio documentation and some grammar tweaks. Fixes #4163 (#4164)
docs: fix some typos and tweaks to istio documentation

Signed-off-by: Steve Ramage <gitcommits@sjrx.net>
Co-authored-by: Steve Ramage <gitcommits@sjrx.net>
2025-03-12 14:50:34 -05:00
Abhish2702 933b7b3b1a
fix: guardrail to not overload stable replicaset (#3878)
* fix: unexpected downtime in rollouts

Signed-off-by: Abhishek Bansal <abhibansal@abhisheks-mbp-7.corp.adobe.com>

* lint

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

---------

Signed-off-by: Abhishek Bansal <abhibansal@abhisheks-mbp-7.corp.adobe.com>
Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>
Co-authored-by: Abhishek Bansal <abhibansal@abhisheks-mbp-7.corp.adobe.com>
Co-authored-by: Zach Aller <zachaller@users.noreply.github.com>
2025-03-10 11:35:33 -05:00
chengjoey f4289b70eb
fix(controller): rollout stuck in `Progressing`. fixes #3988 (#4072)
fix rollout stuck in `Progressing`

Signed-off-by: joey <zchengjoey@gmail.com>
2025-03-06 09:29:17 -06:00
dependabot[bot] 37368106ab
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.44.0 to 1.44.1 (#4172)
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch

Bumps [github.com/aws/aws-sdk-go-v2/service/cloudwatch](https://github.com/aws/aws-sdk-go-v2) from 1.44.0 to 1.44.1.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.44.0...service/iot/v1.44.1)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/cloudwatch
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-05 12:01:10 -06:00
Andrii Korotkov aa243dbba9
chore: Add Verkada to the list of users (#4176)
Signed-off-by: Andrii Korotkov <andrii.korotkov@verkada.com>
2025-03-05 12:00:45 -06:00
Michael Crenshaw 7c0f995d8c
chore: use internal errors util instead of pkg's (#4171)
Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
2025-03-05 17:33:12 +00:00
dependabot[bot] 9e71a87087
chore(deps): bump slsa-framework/slsa-github-generator from 2.0.0 to 2.1.0 (#4152)
chore(deps): bump slsa-framework/slsa-github-generator

Bumps [slsa-framework/slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator) from 2.0.0 to 2.1.0.
- [Release notes](https://github.com/slsa-framework/slsa-github-generator/releases)
- [Changelog](https://github.com/slsa-framework/slsa-github-generator/blob/main/CHANGELOG.md)
- [Commits](https://github.com/slsa-framework/slsa-github-generator/compare/v2.0.0...v2.1.0)

---
updated-dependencies:
- dependency-name: slsa-framework/slsa-github-generator
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-04 08:31:17 -06:00
dependabot[bot] 48377540ec
chore(deps): bump docker/setup-buildx-action from 3.9.0 to 3.10.0 (#4167)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3.9.0 to 3.10.0.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](f7ce87c1d6...b5ca514318)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-04 08:29:58 -06:00
dependabot[bot] 451ea40086
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.43.15 to 1.44.0 (#4169)
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch

Bumps [github.com/aws/aws-sdk-go-v2/service/cloudwatch](https://github.com/aws/aws-sdk-go-v2) from 1.43.15 to 1.44.0.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/cloudwatch/v1.43.15...service/s3/v1.44.0)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/cloudwatch
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-04 08:29:14 -06:00
Yusuke Abe b69c07cdf7
fix(dashboard): Revert react-scripts upgrade due to performance regression. Fixes #4122 (#4166)
fix(dashboard): revert `react-scripts`` upgrade to restore performance

This reverts commit 2e7cf6932a.

Signed-off-by: chansuke <moonset20@gmail.com>
2025-03-03 16:29:01 -06:00
dependabot[bot] 2213b07592
chore(deps): bump github.com/newrelic/newrelic-client-go/v2 from 2.53.0 to 2.54.0 (#4150)
chore(deps): bump github.com/newrelic/newrelic-client-go/v2

Bumps [github.com/newrelic/newrelic-client-go/v2](https://github.com/newrelic/newrelic-client-go) from 2.53.0 to 2.54.0.
- [Release notes](https://github.com/newrelic/newrelic-client-go/releases)
- [Changelog](https://github.com/newrelic/newrelic-client-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/newrelic/newrelic-client-go/compare/v2.53.0...v2.54.0)

---
updated-dependencies:
- dependency-name: github.com/newrelic/newrelic-client-go/v2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-03 15:48:36 -06:00
dependabot[bot] e033914389
chore(deps): bump actions/download-artifact from 4.1.8 to 4.1.9 (#4154)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4.1.8 to 4.1.9.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](fa0a91b85d...cc20338598)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-03 15:47:26 -06:00
dependabot[bot] e876f43be9
chore(deps): bump codecov/codecov-action from 5.3.1 to 5.4.0 (#4157)
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5.3.1 to 5.4.0.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](13ce06bfc6...0565863a31)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-03 15:47:03 -06:00
dependabot[bot] 7b9279c5ae
chore(deps): bump docker/build-push-action from 6.14.0 to 6.15.0 (#4158)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.14.0 to 6.15.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](0adf995921...471d1dc4e0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-03 15:46:25 -06:00
dependabot[bot] 6fbb625bdf
chore(deps): bump github.com/aws/aws-sdk-go-v2/config from 1.29.6 to 1.29.8 (#4160)
chore(deps): bump github.com/aws/aws-sdk-go-v2/config

Bumps [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) from 1.29.6 to 1.29.8.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.6...config/v1.29.8)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-03 15:46:05 -06:00
Matias Reparaz 3cb61fa80a
docs: Update USERS.md (#4162)
Update USERS.md

Adding X3M ads to argo-rollouts users

Signed-off-by: Matias Reparaz <mreparaz@gmail.com>
2025-03-03 15:45:42 -06:00
dependabot[bot] 444094a1ca
chore(deps): bump docker/setup-qemu-action from 3.4.0 to 3.6.0 (#4165)
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 3.4.0 to 3.6.0.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](4574d27a47...29109295f8)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-03 11:29:30 -06:00
Jean Morais 77a139861c
fix(trafficrouting): patch VirtualService when there is only one named route (#4055)
* fix(trafficrouting): patch VirtualService when there is only one named route

Signed-off-by: Jean Morais <jeancdemorais@gmail.com>

* test(trafficrouting): fix TestGetHttpRouteIndexesToPatch

Signed-off-by: Jean Morais <jeancdemorais@gmail.com>

---------

Signed-off-by: Jean Morais <jeancdemorais@gmail.com>
2025-02-21 20:18:01 +00:00
Zach Aller 5e6936e06f
fix!: subresource scale selector changed for traffic routed canary (#4074)
* fix: subresouce scale selector for traffic routed canary

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: fix tests

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* chore: fix lint

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: add code docs

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: standardize test

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

---------

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>
2025-02-21 13:32:01 -06:00
Zach Aller 6e43cff7b2
fix: loop when paused and completed (#4134)
* fix: loop when paused and completed

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: loop when paused and completed

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: loop when paused and completed

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* cleanup

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* add e2e tests

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: loop when paused and completed

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: loop when paused and completed

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: loop when paused and completed

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* cleanup

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* add e2e tests

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* add comments

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* use function for completed

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* remove un-used variable

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

---------

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>
2025-02-21 13:16:41 -06:00
dependabot[bot] e4e1942a0c
chore(deps): bump docker/build-push-action from 6.13.0 to 6.14.0 (#4141)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.13.0 to 6.14.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](ca877d9245...0adf995921)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 08:29:15 -06:00
Takayuki Takagi 494bfd909e
fix(metricprovider): not require address in kubernetes secret for Datadog. Fixes #4103 (#4145)
fix(metricprovider): not require address in kubernetes secret for Datadog

Signed-off-by: Takayuki Takagi <takagi.takayuki.yuuki@gmail.com>
2025-02-21 08:23:55 -06:00
dependabot[bot] d35fcb5b4c
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.43.14 to 1.43.15 (#4144)
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch

Bumps [github.com/aws/aws-sdk-go-v2/service/cloudwatch](https://github.com/aws/aws-sdk-go-v2) from 1.43.14 to 1.43.15.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/cloudwatch/v1.43.14...service/cloudwatch/v1.43.15)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/cloudwatch
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 07:39:46 -06:00
dependabot[bot] 1672c67065
chore(deps): bump sigstore/cosign-installer from 3.8.0 to 3.8.1 (#4146)
Bumps [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) from 3.8.0 to 3.8.1.
- [Release notes](https://github.com/sigstore/cosign-installer/releases)
- [Commits](c56c2d3e59...d7d6bc7722)

---
updated-dependencies:
- dependency-name: sigstore/cosign-installer
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 07:39:28 -06:00
dependabot[bot] 445e1c2b78
chore(deps): bump github.com/spf13/cobra from 1.8.1 to 1.9.1 (#4135)
Bumps [github.com/spf13/cobra](https://github.com/spf13/cobra) from 1.8.1 to 1.9.1.
- [Release notes](https://github.com/spf13/cobra/releases)
- [Commits](https://github.com/spf13/cobra/compare/v1.8.1...v1.9.1)

---
updated-dependencies:
- dependency-name: github.com/spf13/cobra
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-19 08:33:55 -06:00
dependabot[bot] cb7c0fc7c8
chore(deps): bump github.com/aws/smithy-go from 1.22.2 to 1.22.3 (#4136)
Bumps [github.com/aws/smithy-go](https://github.com/aws/smithy-go) from 1.22.2 to 1.22.3.
- [Release notes](https://github.com/aws/smithy-go/releases)
- [Changelog](https://github.com/aws/smithy-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/aws/smithy-go/compare/v1.22.2...v1.22.3)

---
updated-dependencies:
- dependency-name: github.com/aws/smithy-go
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-19 08:33:28 -06:00
dependabot[bot] 76b3898c04
chore(deps): bump golang.org/x/sync from 0.10.0 to 0.11.0 (#4132)
Bumps [golang.org/x/sync](https://github.com/golang/sync) from 0.10.0 to 0.11.0.
- [Commits](https://github.com/golang/sync/compare/v0.10.0...v0.11.0)

---
updated-dependencies:
- dependency-name: golang.org/x/sync
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-14 10:09:37 -06:00
mitchell amihod a748f05fde
fix(experiments): fire rollout event on experiment step (#4124)
* chore: ignore all debug_bin*

Signed-off-by: mitchell amihod <4623+meeech@users.noreply.github.com>

* feat(experiments): Add a utility to check if an experiment belongs to a Rollout. We can then identify when an experiment is a Step in a Rollout.

Signed-off-by: mitchell amihod <4623+meeech@users.noreply.github.com>

* chore: typo

Signed-off-by: mitchell amihod <4623+meeech@users.noreply.github.com>

* feat(experiments): Fire k8s Event bound to the Rollout when it owns the Experiment

Addresses #4009. This change will fire Analysis Run events bound to the parent Rollout object when the Experiment is a Step in the Rollout.

Signed-off-by: mitchell amihod <4623+meeech@users.noreply.github.com>

* Loop through ownerReferences to find the rollout reference.

If we pass belongs to rollout check, we know there is a rollout to find.

Signed-off-by: mitchell amihod <4623+meeech@users.noreply.github.com>

* Tighten things up - don't need a bool - fetch the ref or nil

Signed-off-by: mitchell amihod <4623+meeech@users.noreply.github.com>

---------

Signed-off-by: mitchell amihod <4623+meeech@users.noreply.github.com>
2025-02-14 10:09:09 -06:00
Jordan Rodgers d8994c0b19
feat: reconcile pod ephemeral metadata in parallel (#4130)
* perf: reconcile pod ephemeral metadata in parallel

Signed-off-by: Jordan Rodgers <jrodgers@figma.com>

* update tests for multiple pods

Signed-off-by: Jordan Rodgers <jrodgers@figma.com>

---------

Signed-off-by: Jordan Rodgers <jrodgers@figma.com>
2025-02-13 10:21:32 -06:00
Zach Aller a312e28021
fix: nil pointer on logging (#4127)
Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>
2025-02-11 21:44:28 -06:00
dependabot[bot] 44eee2ec3b
chore(deps): bump docker/setup-qemu-action from 3.3.0 to 3.4.0 (#4120)
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 3.3.0 to 3.4.0.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](53851d1459...4574d27a47)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-07 14:46:07 +00:00
dependabot[bot] a9e10fb73e
chore(deps): bump github.com/newrelic/newrelic-client-go/v2 from 2.52.0 to 2.53.0 (#4102)
chore(deps): bump github.com/newrelic/newrelic-client-go/v2

Bumps [github.com/newrelic/newrelic-client-go/v2](https://github.com/newrelic/newrelic-client-go) from 2.52.0 to 2.53.0.
- [Release notes](https://github.com/newrelic/newrelic-client-go/releases)
- [Changelog](https://github.com/newrelic/newrelic-client-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/newrelic/newrelic-client-go/compare/v2.52.0...v2.53.0)

---
updated-dependencies:
- dependency-name: github.com/newrelic/newrelic-client-go/v2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-07 08:21:27 -06:00
ayureidini 420aacb133
fix(experiments): propagate rolouts labels to experiments and replicasets (#4118)
fix(experiments): propagate rolouts labels to experiments and replica sets

Enhancement ticket: https://github.com/argoproj/argo-rollouts/issues/4113
This can be useful for complying to Tagging Policy imposed at cluster level
since there is no mechanism to add custom labels to Experiments and their
associated ReplicaSets.
Indeed, this could enable automatic reporting but also give required information
for investigation.

Signed-off-by: Ahmed YUREIDINI NOGALES <ahmed.yureidini@gmail.com>
Co-authored-by: Ahmed YUREIDINI NOGALES <ayureidininogales@ncelrnd2709.nce.amadeus.net>
2025-02-07 08:20:59 -06:00
dependabot[bot] cbf36efaf8
chore(deps): bump google.golang.org/protobuf from 1.36.4 to 1.36.5 (#4119)
Bumps google.golang.org/protobuf from 1.36.4 to 1.36.5.

---
updated-dependencies:
- dependency-name: google.golang.org/protobuf
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-07 08:17:40 -06:00
dependabot[bot] c8f165c1ca
chore(deps): bump docker/setup-buildx-action from 3.8.0 to 3.9.0 (#4121)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3.8.0 to 3.9.0.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](6524bf65af...f7ce87c1d6)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-07 08:15:41 -06:00
dependabot[bot] 70a946d56e
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.43.12 to 1.43.14 (#4115)
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch

Bumps [github.com/aws/aws-sdk-go-v2/service/cloudwatch](https://github.com/aws/aws-sdk-go-v2) from 1.43.12 to 1.43.14.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/cloudwatch/v1.43.12...service/cloudwatch/v1.43.14)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/cloudwatch
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-06 22:58:07 +00:00
dependabot[bot] 1d47a97cd3
chore(deps): bump golang.org/x/oauth2 from 0.25.0 to 0.26.0 (#4108)
Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.25.0 to 0.26.0.
- [Commits](https://github.com/golang/oauth2/compare/v0.25.0...v0.26.0)

---
updated-dependencies:
- dependency-name: golang.org/x/oauth2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-06 16:18:07 -06:00
dependabot[bot] fa17918a9e
chore(deps): bump github.com/aws/aws-sdk-go-v2/config from 1.29.4 to 1.29.6 (#4116)
chore(deps): bump github.com/aws/aws-sdk-go-v2/config

Bumps [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) from 1.29.4 to 1.29.6.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.4...config/v1.29.6)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-06 16:17:15 -06:00
dependabot[bot] c3407844ca
chore(deps): bump sigstore/cosign-installer from 3.7.0 to 3.8.0 (#4105)
Bumps [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) from 3.7.0 to 3.8.0.
- [Release notes](https://github.com/sigstore/cosign-installer/releases)
- [Commits](dc72c7d5c4...c56c2d3e59)

---
updated-dependencies:
- dependency-name: sigstore/cosign-installer
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-06 16:16:58 -06:00
Zach Aller ea914af830
fix: redo PR 3639 (#4114)
Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>
2025-02-06 16:15:47 -06:00
Gonçalo Montalvão Marques 6761843977
docs: fix markdown rendering (#4109)
Signed-off-by: Gonçalo Montalvão Marques <9379664+gonmmarques@users.noreply.github.com>
2025-02-05 10:34:28 -06:00
Jordan Rodgers f829ae7984
fix: check ephemeral metadata is set before delete (#4089)
* fix: check ephemeral metadata is set before delete

Signed-off-by: Jordan Rodgers <jrodgers@figma.com>

* add test case

Signed-off-by: Jordan Rodgers <jrodgers@figma.com>

* address test comments

Signed-off-by: Jordan Rodgers <jrodgers@figma.com>

---------

Signed-off-by: Jordan Rodgers <jrodgers@figma.com>
2025-02-03 20:18:56 -06:00
dependabot[bot] db8e065044
chore(deps): bump github.com/aws/aws-sdk-go-v2/config from 1.29.3 to 1.29.4 (#4098)
chore(deps): bump github.com/aws/aws-sdk-go-v2/config

Bumps [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) from 1.29.3 to 1.29.4.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.3...config/v1.29.4)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-03 17:07:37 +00:00
Ville Vesilehto 42117f9af4
fix: correct typo in linter settings key name (#4094)
The linter settings key was incorrectly named "linter-settings" instead of
"linters-settings", preventing proper parsing of goimports configuration.
This fixes the local-prefixes setting for import organization.

All affected files have been automatically reformatted to comply with the
now-active goimports rules for import ordering and grouping.

Signed-off-by: Ville Vesilehto <ville@vesilehto.fi>
2025-02-03 10:16:38 -06:00
dependabot[bot] 7695f8a8de
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.43.11 to 1.43.12 (#4099)
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch

Bumps [github.com/aws/aws-sdk-go-v2/service/cloudwatch](https://github.com/aws/aws-sdk-go-v2) from 1.43.11 to 1.43.12.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/cloudwatch/v1.43.11...service/cloudwatch/v1.43.12)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/cloudwatch
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-03 10:12:22 -06:00
dependabot[bot] 4ecce02e70
chore(deps): bump github.com/aws/aws-sdk-go-v2 from 1.35.0 to 1.36.0 (#4100)
Bumps [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2) from 1.35.0 to 1.36.0.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.35.0...v1.36.0)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-03 10:12:03 -06:00
dependabot[bot] 4580c2d1e2
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.43.10 to 1.43.11 (#4091)
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch

Bumps [github.com/aws/aws-sdk-go-v2/service/cloudwatch](https://github.com/aws/aws-sdk-go-v2) from 1.43.10 to 1.43.11.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/fsx/v1.43.10...service/cloudwatch/v1.43.11)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/cloudwatch
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-31 17:58:17 +00:00
dependabot[bot] 73fda66371
chore(deps): bump github.com/aws/aws-sdk-go-v2/config from 1.29.2 to 1.29.3 (#4092)
chore(deps): bump github.com/aws/aws-sdk-go-v2/config

Bumps [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) from 1.29.2 to 1.29.3.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.2...config/v1.29.3)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-31 11:13:01 -06:00
github-actions[bot] 38ed49959b
docs: Update Changelog (#4088)
* update changelog

* Update CHANGELOG.md formatting

---------

Co-authored-by: zachaller <201390+zachaller@users.noreply.github.com>
Co-authored-by: Zach Aller <zachaller@users.noreply.github.com>
2025-01-31 15:39:08 +00:00
Zach Aller 4f5d93bbe6
fix!: make `.spec.selector` immutable (#4084)
* fix: make selector immutable

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: make selector immutable

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: make selector optional for workloadRef

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

---------

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>
2025-01-30 10:07:11 -06:00
dependabot[bot] 723e81ca69
chore(deps): bump github.com/evanphx/json-patch/v5 from 5.9.10 to 5.9.11 (#4085)
Bumps [github.com/evanphx/json-patch/v5](https://github.com/evanphx/json-patch) from 5.9.10 to 5.9.11.
- [Release notes](https://github.com/evanphx/json-patch/releases)
- [Commits](https://github.com/evanphx/json-patch/compare/v5.9.10...v5.9.11)

---
updated-dependencies:
- dependency-name: github.com/evanphx/json-patch/v5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-30 09:52:51 -06:00
dependabot[bot] 236f878447
chore(deps): bump google.golang.org/grpc from 1.69.4 to 1.70.0 (#4086)
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.69.4 to 1.70.0.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.69.4...v1.70.0)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-30 09:52:29 -06:00
dependabot[bot] dfa0eaef7c
chore(deps): bump github.com/evanphx/json-patch/v5 from 5.9.0 to 5.9.10 (#4080)
Bumps [github.com/evanphx/json-patch/v5](https://github.com/evanphx/json-patch) from 5.9.0 to 5.9.10.
- [Release notes](https://github.com/evanphx/json-patch/releases)
- [Commits](https://github.com/evanphx/json-patch/compare/v5.9.0...v5.9.10)

---
updated-dependencies:
- dependency-name: github.com/evanphx/json-patch/v5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-28 08:44:33 -06:00
dependabot[bot] 78682686b9
chore(deps): bump github.com/hashicorp/go-plugin from 1.6.2 to 1.6.3 (#4081)
Bumps [github.com/hashicorp/go-plugin](https://github.com/hashicorp/go-plugin) from 1.6.2 to 1.6.3.
- [Release notes](https://github.com/hashicorp/go-plugin/releases)
- [Changelog](https://github.com/hashicorp/go-plugin/blob/main/CHANGELOG.md)
- [Commits](https://github.com/hashicorp/go-plugin/compare/v1.6.2...v1.6.3)

---
updated-dependencies:
- dependency-name: github.com/hashicorp/go-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-28 08:44:08 -06:00
dependabot[bot] c25954dccf
chore(deps): bump google.golang.org/protobuf from 1.36.3 to 1.36.4 (#4082)
Bumps google.golang.org/protobuf from 1.36.3 to 1.36.4.

---
updated-dependencies:
- dependency-name: google.golang.org/protobuf
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-28 08:43:46 -06:00
Kostis (Codefresh) f237af07be
chore: security fix https://nvd.nist.gov/vuln/detail/CVE-2023-46402 (#4083)
* chore: security fix https://nvd.nist.gov/vuln/detail/CVE-2023-46402

Signed-off-by: Kostis Kapelonis <kostis@codefresh.io>

* docs: GitHub notification reference

Signed-off-by: Kostis (Codefresh) <39800303+kostis-codefresh@users.noreply.github.com>

---------

Signed-off-by: Kostis Kapelonis <kostis@codefresh.io>
Signed-off-by: Kostis (Codefresh) <39800303+kostis-codefresh@users.noreply.github.com>
2025-01-28 08:43:22 -06:00
chengjoey b101632af0
chore(deps): fix go list -m all show `unknown revision v0.0.0` (#4071)
fix go list -m all show `unknown revision v0.0.0`

Signed-off-by: joey <zchengjoey@gmail.com>
2025-01-27 16:49:42 -06:00
dependabot[bot] b6a9bec292
chore(deps): bump github.com/aws/aws-sdk-go-v2/config from 1.29.0 to 1.29.2 (#4077)
chore(deps): bump github.com/aws/aws-sdk-go-v2/config

Bumps [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) from 1.29.0 to 1.29.2.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.29.0...config/v1.29.2)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 17:18:11 +00:00
dependabot[bot] e225d88da8
chore(deps): bump docker/build-push-action from 6.12.0 to 6.13.0 (#4076)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.12.0 to 6.13.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](67a2d409c0...ca877d9245)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 17:03:19 +00:00
dependabot[bot] 086d4cb755
chore(deps): bump actions/setup-go from 5.2.0 to 5.3.0 (#4066)
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 5.2.0 to 5.3.0.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](https://github.com/actions/setup-go/compare/v5.2.0...v5.3.0)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 10:33:55 -06:00
dependabot[bot] 8b5ecaed16
chore(deps): bump codecov/codecov-action from 5.1.2 to 5.3.1 (#4075)
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5.1.2 to 5.3.1.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](1e68e06f1d...13ce06bfc6)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 10:21:36 -06:00
dependabot[bot] 7d02604f6d
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.43.8 to 1.43.10 (#4078)
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch

Bumps [github.com/aws/aws-sdk-go-v2/service/cloudwatch](https://github.com/aws/aws-sdk-go-v2) from 1.43.8 to 1.43.10.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/fsx/v1.43.8...service/fsx/v1.43.10)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/cloudwatch
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 10:20:38 -06:00
dependabot[bot] c10bf66176
chore(deps): bump google.golang.org/protobuf from 1.36.2 to 1.36.3 (#4057)
Bumps google.golang.org/protobuf from 1.36.2 to 1.36.3.

---
updated-dependencies:
- dependency-name: google.golang.org/protobuf
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-17 08:37:26 -06:00
github-actions[bot] 99903543ee
docs: Update Changelog (#4056)
* update changelog

* Update CHANGELOG.md formatting

---------

Co-authored-by: zachaller <201390+zachaller@users.noreply.github.com>
Co-authored-by: Zach Aller <zachaller@users.noreply.github.com>
2025-01-16 20:21:13 +00:00
dependabot[bot] 5905525b4a
chore(deps): bump docker/build-push-action from 6.10.0 to 6.12.0 (#4050)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.10.0 to 6.12.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](48aba3b46d...67a2d409c0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-16 13:40:28 -06:00
dependabot[bot] d6054867c6
chore(deps): bump docker/setup-qemu-action from 3.2.0 to 3.3.0 (#4034)
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 3.2.0 to 3.3.0.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](49b3bc8e6b...53851d1459)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-16 11:57:31 -06:00
dependabot[bot] 00210827b7
chore(deps): bump google.golang.org/grpc from 1.69.2 to 1.69.4 (#4045)
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.69.2 to 1.69.4.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.69.2...v1.69.4)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-16 10:58:11 -06:00
dependabot[bot] ba05acf4fd
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.43.6 to 1.43.8 (#4051)
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch

Bumps [github.com/aws/aws-sdk-go-v2/service/cloudwatch](https://github.com/aws/aws-sdk-go-v2) from 1.43.6 to 1.43.8.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/fsx/v1.43.6...service/fsx/v1.43.8)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/cloudwatch
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-16 10:57:20 -06:00
dependabot[bot] effef4477a
chore(deps): bump github.com/aws/aws-sdk-go-v2/config from 1.28.10 to 1.29.0 (#4053)
chore(deps): bump github.com/aws/aws-sdk-go-v2/config

Bumps [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) from 1.28.10 to 1.29.0.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.28.10...v1.29.0)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-16 09:50:35 -06:00
Zach Aller 50cf6d7de9
fix: remove ReplicaSet write-back (#4044)
* fix: keep informer updated

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: move inside if

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: cleanup logic

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: don't write back to informer at all

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: fix tests

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: remove informer add

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: typo

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: fix lint

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: cleanup

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: cleanup

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: update comments

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

---------

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>
2025-01-16 09:18:46 -06:00
dependabot[bot] 5c1a2a9000
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.43.4 to 1.43.6 (#4039)
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch

Bumps [github.com/aws/aws-sdk-go-v2/service/cloudwatch](https://github.com/aws/aws-sdk-go-v2) from 1.43.4 to 1.43.6.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/fsx/v1.43.4...service/fsx/v1.43.6)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/cloudwatch
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-13 22:01:07 +00:00
dependabot[bot] 23c40c15ad
chore(deps): bump github.com/newrelic/newrelic-client-go/v2 from 2.51.3 to 2.52.0 (#4031)
chore(deps): bump github.com/newrelic/newrelic-client-go/v2

Bumps [github.com/newrelic/newrelic-client-go/v2](https://github.com/newrelic/newrelic-client-go) from 2.51.3 to 2.52.0.
- [Release notes](https://github.com/newrelic/newrelic-client-go/releases)
- [Changelog](https://github.com/newrelic/newrelic-client-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/newrelic/newrelic-client-go/compare/v2.51.3...v2.52.0)

---
updated-dependencies:
- dependency-name: github.com/newrelic/newrelic-client-go/v2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-13 15:23:33 -06:00
dependabot[bot] dbf5588e7e
chore(deps): bump github.com/aws/aws-sdk-go-v2/config from 1.28.7 to 1.28.10 (#4043)
chore(deps): bump github.com/aws/aws-sdk-go-v2/config

Bumps [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) from 1.28.7 to 1.28.10.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.28.7...config/v1.28.10)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-13 15:22:19 -06:00
dependabot[bot] 00b57266b9
chore(deps): bump github.com/aws/aws-sdk-go-v2 from 1.32.7 to 1.32.8 (#4041)
Bumps [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2) from 1.32.7 to 1.32.8.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.32.7...v1.32.8)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-10 16:43:09 -06:00
Derek Brown efd3008a34
fix(controller): Fixed broken pprof links #4037 (#4038)
Signed-off-by: Derek Brown <6845676+DerekTBrown@users.noreply.github.com>
2025-01-10 16:42:00 -06:00
Hellspam c0ca5301bf
fix(experiments): move recorder event to after experiment reconciliation, fixes #4021 (#4022)
* fix: move recorder event to after experiment reconcilation, fixes #4021

Signed-off-by: Roy Arnon <roy.a@taboola.com>

* Add Taboola to the user list

---------

Signed-off-by: Roy Arnon <roy.a@taboola.com>
Co-authored-by: Zach Aller <zachaller@users.noreply.github.com>
2025-01-08 18:15:11 +00:00
dependabot[bot] 07c1028545
chore(deps): bump golang.org/x/oauth2 from 0.24.0 to 0.25.0 (#4027)
Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.24.0 to 0.25.0.
- [Commits](https://github.com/golang/oauth2/compare/v0.24.0...v0.25.0)

---
updated-dependencies:
- dependency-name: golang.org/x/oauth2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-08 09:19:59 -06:00
dependabot[bot] 1874afa10d
chore(deps): bump softprops/action-gh-release from 2.2.0 to 2.2.1 (#4028)
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2.2.0 to 2.2.1.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](7b4da11513...c95fe14893)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-08 09:19:23 -06:00
dependabot[bot] dc2e00e3a0
chore(deps): bump google.golang.org/protobuf from 1.36.0 to 1.36.2 (#4029)
Bumps google.golang.org/protobuf from 1.36.0 to 1.36.2.

---
updated-dependencies:
- dependency-name: google.golang.org/protobuf
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-08 09:18:34 -06:00
dependabot[bot] 097f5be132
chore(deps): bump github.com/aws/aws-sdk-go-v2/config from 1.28.6 to 1.28.7 (#4019)
chore(deps): bump github.com/aws/aws-sdk-go-v2/config

Bumps [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) from 1.28.6 to 1.28.7.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.28.6...config/v1.28.7)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-06 18:08:38 +00:00
dependabot[bot] fde9cdeba9
chore(deps): bump google.golang.org/grpc from 1.69.0 to 1.69.2 (#4015)
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.69.0 to 1.69.2.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.69.0...v1.69.2)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-06 11:05:38 -06:00
dependabot[bot] 5904f6481f
chore(deps): bump codecov/codecov-action from 5.1.1 to 5.1.2 (#4014)
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5.1.1 to 5.1.2.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](7f8b4b4bde...1e68e06f1d)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-06 10:59:34 -06:00
dependabot[bot] 6ca92be1fe
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.43.3 to 1.43.4 (#4020)
chore(deps): bump github.com/aws/aws-sdk-go-v2/service/cloudwatch

Bumps [github.com/aws/aws-sdk-go-v2/service/cloudwatch](https://github.com/aws/aws-sdk-go-v2) from 1.43.3 to 1.43.4.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/ssm/v1.43.3...service/fsx/v1.43.4)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/cloudwatch
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-06 10:58:10 -06:00
Kostis (Codefresh) bdbb0f17c0
docs: mention the Kubernetes Downward API in the ephemeral metadata documentation page (#4025)
* :docs: mention Downward API in docs

Signed-off-by: Kostis (Codefresh) <39800303+kostis-codefresh@users.noreply.github.com>

* :docs: Spelling mistakes

Signed-off-by: Kostis (Codefresh) <39800303+kostis-codefresh@users.noreply.github.com>

---------

Signed-off-by: Kostis (Codefresh) <39800303+kostis-codefresh@users.noreply.github.com>
2025-01-05 08:25:32 -06:00
Kostis (Codefresh) 8a800a8717
docs: new syntax for docs conf (#4012)
Signed-off-by: Kostis (Codefresh) <39800303+kostis-codefresh@users.noreply.github.com>
2024-12-18 16:13:14 +00:00
Zach Aller 0eec0d89f8
fix: don't over reconcile on error (#4005)
* fix: don't over reconcile on error

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: don't send rollout context on field error

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: cleanup comments

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix: cleanup comments

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

* fix typo

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>

---------

Signed-off-by: Zach Aller <zachaller@users.noreply.github.com>
2024-12-17 16:03:01 +00:00
dependabot[bot] 707bd9f9eb
chore(deps): bump google.golang.org/protobuf from 1.35.2 to 1.36.0 (#4007)
Bumps google.golang.org/protobuf from 1.35.2 to 1.36.0.

---
updated-dependencies:
- dependency-name: google.golang.org/protobuf
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-17 09:18:01 -06:00
dependabot[bot] e808d6ef62
chore(deps): bump docker/setup-buildx-action from 3.7.1 to 3.8.0 (#4006)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3.7.1 to 3.8.0.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](c47758b77c...6524bf65af)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-16 19:08:32 -06:00
dependabot[bot] e5a9307958
chore(deps): bump actions/setup-go from 5.1.0 to 5.2.0 (#4000)
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 5.1.0 to 5.2.0.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](https://github.com/actions/setup-go/compare/v5.1.0...v5.2.0)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-13 10:42:59 -06:00
dependabot[bot] c348ecf270
chore(deps): bump google.golang.org/grpc from 1.68.1 to 1.69.0 (#4001)
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.68.1 to 1.69.0.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.68.1...v1.69.0)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-13 10:42:41 -06:00
dependabot[bot] 6858812261
chore(deps): bump softprops/action-gh-release from 2.1.0 to 2.2.0 (#3999)
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](01570a1f39...7b4da11513)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-13 10:42:20 -06:00
Rizwana Naaz 25e2b535db
fix: Upgrade go-retryablehttp to v0.7.7 (#3743)
Upgrade go-retryablehttp to v0.7.7

Signed-off-by: Rizwana777 <rizwananaaz177@gmail.com>
2024-12-12 18:33:41 -06:00
Youssef Rabie 21d57165b9
docs(analysis): add docs for consecutiveSuccessLimit (#3996)
Signed-off-by: Youssef Rabie <youssef.rabie@procore.com>
2024-12-11 14:07:37 -06:00
github-actions[bot] 37193bf535
docs: Update Changelog (#3992)
update changelog

Co-authored-by: zachaller <201390+zachaller@users.noreply.github.com>
2024-12-09 15:44:23 +00:00
259 changed files with 15861 additions and 9645 deletions

View File

@ -24,7 +24,7 @@ jobs:
with:
python-version: 3.x
- name: Set up Go
uses: actions/setup-go@v5.1.0
uses: actions/setup-go@v5.4.0
with:
go-version: '1.23'
- name: build

View File

@ -27,22 +27,22 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Set up Go
uses: actions/setup-go@v5.1.0
uses: actions/setup-go@v5.4.0
with:
go-version: ${{ env.GOLANG_VERSION }}
- name: Checkout code
uses: actions/checkout@v4
- name: Run golangci-lint
uses: golangci/golangci-lint-action@v6
uses: golangci/golangci-lint-action@v8
with:
version: v1.61.0
version: v2.1.6
args: --timeout 6m
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Set up Go
uses: actions/setup-go@v5.1.0
uses: actions/setup-go@v5.4.0
with:
go-version: ${{ env.GOLANG_VERSION }}
id: go
@ -72,7 +72,7 @@ jobs:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Golang
uses: actions/setup-go@v5.1.0
uses: actions/setup-go@v5.4.0
with:
go-version: ${{ env.GOLANG_VERSION }}
# k8s codegen generates files into GOPATH location instead of the GitHub git checkout location

View File

@ -69,17 +69,17 @@ jobs:
if: ${{ github.ref_type != 'tag'}}
- name: Setup Golang
uses: actions/setup-go@v5.1.0 # v3.5.0
uses: actions/setup-go@v5.4.0 # v3.5.0
with:
go-version: ${{ inputs.go-version }}
- name: Install cosign
uses: sigstore/cosign-installer@dc72c7d5c4d10cd6bcb8cf6e3fd625a9e5e537da # v3.7.0
uses: sigstore/cosign-installer@3454372f43399081ed03b604cb2d021dabca52bb # v3.8.2
with:
cosign-release: 'v2.2.0'
- uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v3.2.0
- uses: docker/setup-buildx-action@c47758b77c9736f4b2ef4073d4d51994fabfe349 # v3.7.1
- uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
- uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
- name: Setup tags for container image as a CSV type
run: |
@ -106,7 +106,7 @@ jobs:
echo 'EOF' >> $GITHUB_ENV
- name: Login to Quay.io
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
with:
registry: quay.io
username: ${{ secrets.quay_username }}
@ -114,7 +114,7 @@ jobs:
if: ${{ inputs.quay_image_name && inputs.push }}
- name: Login to GitHub Container Registry
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
with:
registry: ghcr.io
username: ${{ secrets.ghcr_username }}
@ -122,7 +122,7 @@ jobs:
if: ${{ inputs.ghcr_image_name && inputs.push }}
- name: Login to dockerhub Container Registry
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
with:
username: ${{ secrets.docker_username }}
password: ${{ secrets.docker_password }}
@ -130,7 +130,7 @@ jobs:
- name: Build and push container image
id: image
uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 #v6.10.0
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 #v6.18.0
with:
context: .
platforms: ${{ inputs.platforms }}

View File

@ -51,7 +51,7 @@ jobs:
id-token: write # for creating OIDC tokens for signing.
packages: write # for uploading attestations. (https://github.com/slsa-framework/slsa-github-generator/blob/main/internal/builders/container/README.md#known-issues)
# Must be refernced by a tag. https://github.com/slsa-framework/slsa-github-generator/blob/main/internal/builders/container/README.md#referencing-the-slsa-generator
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v2.0.0
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v2.1.0
with:
image: quay.io/argoproj/argo-rollouts
digest: ${{ needs.controller-image.outputs.image-digest }}
@ -67,7 +67,7 @@ jobs:
id-token: write # for creating OIDC tokens for signing.
packages: write # for uploading attestations. (https://github.com/slsa-framework/slsa-github-generator/blob/main/internal/builders/container/README.md#known-issues)
# Must be refernced by a tag. https://github.com/slsa-framework/slsa-github-generator/blob/main/internal/builders/container/README.md#referencing-the-slsa-generator
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v2.0.0
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v2.1.0
with:
image: quay.io/argoproj/kubectl-argo-rollouts
digest: ${{ needs.plugin-image.outputs.image-digest }}
@ -90,15 +90,15 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Golang
uses: actions/setup-go@v5.1.0 # v4.0.1
uses: actions/setup-go@v5.4.0 # v4.0.1
with:
go-version: ${{ env.GOLANG_VERSION }}
- name: Set up QEMU
uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v3.2.0
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@c47758b77c9736f4b2ef4073d4d51994fabfe349 # v3.7.1
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
- name: Generate release artifacts
run: |
@ -107,7 +107,7 @@ jobs:
make manifests IMAGE_TAG=${{ github.ref_name }}
- name: Draft release
uses: softprops/action-gh-release@01570a1f39cb168c169c802c3bceb9e93fb10974 # v0.1.15
uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631 # v0.1.15
with:
tag_name: ${{ github.event.inputs.tag }}
draft: true
@ -139,7 +139,7 @@ jobs:
id-token: write # Needed for provenance signing and ID
contents: write # Needed for release uploads
# Must be refernced by a tag. https://github.com/slsa-framework/slsa-github-generator/blob/main/internal/builders/container/README.md#referencing-the-slsa-generator
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.0.0
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.1.0
with:
base64-subjects: '${{ needs.release-artifacts.outputs.hashes }}'
provenance-name: 'argo-rollouts.intoto.jsonl'
@ -163,12 +163,12 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Golang
uses: actions/setup-go@v5.1.0 # v4.0.0
uses: actions/setup-go@v5.4.0 # v4.0.0
with:
go-version: ${{ env.GOLANG_VERSION }}
- name: Install cosign
uses: sigstore/cosign-installer@dc72c7d5c4d10cd6bcb8cf6e3fd625a9e5e537da # v3.7.0
uses: sigstore/cosign-installer@3454372f43399081ed03b604cb2d021dabca52bb # v3.8.2
with:
cosign-release: 'v2.2.0'
@ -212,7 +212,7 @@ jobs:
/tmp/sbom.tar.gz
- name: Upload SBOM and signature assets
uses: softprops/action-gh-release@01570a1f39cb168c169c802c3bceb9e93fb10974 # v0.1.15
uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631 # v0.1.15
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:

View File

@ -19,7 +19,7 @@ jobs:
actions: read
steps:
- name: Download and Extract Artifacts
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
run-id: ${{ github.event.workflow_run.id }}
path: artifacts

View File

@ -41,7 +41,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Set up Go
uses: actions/setup-go@v5.1.0
uses: actions/setup-go@v5.4.0
with:
go-version: ${{ env.GOLANG_VERSION }}
id: go
@ -91,7 +91,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Set up Go
uses: actions/setup-go@v5.1.0
uses: actions/setup-go@v5.4.0
with:
go-version: '1.23'
- uses: actions/checkout@v4
@ -165,18 +165,18 @@ jobs:
- test-e2e
steps:
- name: Set up Go
uses: actions/setup-go@v5.1.0
uses: actions/setup-go@v5.4.0
with:
go-version: ${{ env.GOLANG_VERSION }}
id: go
- uses: actions/checkout@v4
- name: Get e2e code coverage
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: coverage-output-e2e
path: coverage-output-e2e
- name: Get unit test code coverage
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: coverage-output-unit
path: coverage-output-unit
@ -184,7 +184,7 @@ jobs:
run: |
go tool covdata textfmt -i=coverage-output-unit/,coverage-output-e2e/ -o full-coverage.out
- name: Upload code coverage information to codecov.io
uses: codecov/codecov-action@7f8b4b4bde536c465e797be725718b88c5d95e0e # v5.1.1
uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3
with:
file: full-coverage.out
fail_ci_if_error: false

7
.gitignore vendored
View File

@ -2,9 +2,11 @@
.idea/
.DS_Store
dist/
github.com/
k8s.io/
*.iml
# delve debug binaries
__debug_bin
__debug_bin*
cmd/**/debug
debug.test
coverage.out
@ -19,4 +21,5 @@ server/static/*
!server/static/.gitkeep
coverage-output-e2e/
coverage-output-unit/
junit-unit-test.xml
junit*

View File

@ -1,21 +1,41 @@
version: "2"
run:
timeout: 10m
modules-download-mode: readonly
issues:
exclude-dirs:
- pkg/client
exclude-files:
- ".*\\.pb\\.go"
linter-settings:
goimports:
local-prefixes: github.com/argoproj/argo-rollouts
timeout: 10m
linters:
default: none
enable:
- gofmt
- goimports
- govet
- ineffassign
- misspell
- unconvert
- unused
disable-all: true
exclusions:
generated: lax
presets:
- comments
- common-false-positives
- legacy
- std-error-handling
paths:
- .*\.pb\.go
- pkg/client
- third_party$
- builtin$
- examples$
formatters:
enable:
- gofmt
- goimports
settings:
goimports:
local-prefixes:
- github.com/argoproj/argo-rollouts
exclusions:
generated: lax
paths:
- .*\.pb\.go
- pkg/client
- third_party$
- builtin$
- examples$

View File

@ -1,6 +1,7 @@
version: 2
formats: all
mkdocs:
configuration: mkdocs.yml
fail_on_warning: false
python:
install:

View File

@ -1,3 +1,299 @@
<a name="v1.8.3"></a>
## [v1.8.3](https://github.com/argoproj/argo-rollouts/compare/v1.8.2...v1.8.3) (2025-05-31)
### Chore
* **deps:** bump github.com/golang-jwt/jwt to 4.5.2 ([#4235](https://github.com/argoproj/argo-rollouts/issues/4235)) ([#4236](https://github.com/argoproj/argo-rollouts/issues/4236))
* **deps:** bump golang.org/x/oauth2 from 0.24.0 to 0.29.0 to fix CVE-2025-22868 ([#4225](https://github.com/argoproj/argo-rollouts/issues/4225))
### Docs
* explain skew policy between the kubectl plugin and the controller ([#4300](https://github.com/argoproj/argo-rollouts/issues/4300))
* blue green w/ ALB not supported without downtime ([#4259](https://github.com/argoproj/argo-rollouts/issues/4259))
### Fix
* abort scenario where canary/stable service is not provided ([#4299](https://github.com/argoproj/argo-rollouts/issues/4299))
* restarts during updates could cause downtime ([#4221](https://github.com/argoproj/argo-rollouts/issues/4221))
* **experiments:** fire rollout event on experiment step ([#4124](https://github.com/argoproj/argo-rollouts/issues/4124))
* **trafficrouting:** patch VirtualService when there is only one named route ([#4055](https://github.com/argoproj/argo-rollouts/issues/4055))
<a name="v1.8.2"></a>
## [v1.8.2](https://github.com/argoproj/argo-rollouts/compare/v1.8.1...v1.8.2) (2025-03-21)
### Fix
* Revert "fix(controller): rollout stuck in `Progressing`. fixes [#3988](https://github.com/argoproj/argo-rollouts/issues/3988)" ([#4201](https://github.com/argoproj/argo-rollouts/issues/4201))
* **analysis:** prevent promotion on inconclusive background run. Fixes: [#3850](https://github.com/argoproj/argo-rollouts/issues/3850) ([#3873](https://github.com/argoproj/argo-rollouts/issues/3873))
<a name="v1.8.1"></a>
## [v1.8.1](https://github.com/argoproj/argo-rollouts/compare/v1.8.0...v1.8.1) (2025-03-15)
### Chore
* **deps:** Updated go version in go.mod file ([#4182](https://github.com/argoproj/argo-rollouts/issues/4182))
### Docs
* new syntax for docs conf ([#4012](https://github.com/argoproj/argo-rollouts/issues/4012))
### Fix
* guardrail to not overload stable replicaset ([#3878](https://github.com/argoproj/argo-rollouts/issues/3878))
* redo PR 3639 ([#4114](https://github.com/argoproj/argo-rollouts/issues/4114))
* check ephemeral metadata is set before delete ([#4089](https://github.com/argoproj/argo-rollouts/issues/4089))
* correct typo in linter settings key name ([#4094](https://github.com/argoproj/argo-rollouts/issues/4094))
* loop when paused and completed ([#4134](https://github.com/argoproj/argo-rollouts/issues/4134))
* nil pointer on logging ([#4127](https://github.com/argoproj/argo-rollouts/issues/4127))
* Upgrade go-retryablehttp to v0.7.7 ([#3743](https://github.com/argoproj/argo-rollouts/issues/3743))
* **controller:** rollout stuck in `Progressing`. fixes [#3988](https://github.com/argoproj/argo-rollouts/issues/3988) ([#4072](https://github.com/argoproj/argo-rollouts/issues/4072))
* **dashboard:** Revert react-scripts upgrade due to performance regression. Fixes [#4122](https://github.com/argoproj/argo-rollouts/issues/4122) ([#4166](https://github.com/argoproj/argo-rollouts/issues/4166))
* **metricprovider:** not require address in kubernetes secret for Datadog. Fixes [#4103](https://github.com/argoproj/argo-rollouts/issues/4103) ([#4145](https://github.com/argoproj/argo-rollouts/issues/4145))
<a name="v1.8.0"></a>
## [v1.8.0](https://github.com/argoproj/argo-rollouts/compare/v1.8.0-rc2...v1.8.0) (2024-12-17)
<a name="v1.8.0-rc2"></a>
## [v1.8.0-rc2](https://github.com/argoproj/argo-rollouts/compare/v1.8.0-rc1...v1.8.0-rc2) (2024-12-17)
### Ci
* add testing for k8s 1.30 and 1.31 ([#3858](https://github.com/argoproj/argo-rollouts/issues/3858))
### Docs
* **analysis:** add docs for consecutiveSuccessLimit ([#3996](https://github.com/argoproj/argo-rollouts/issues/3996))
### Fix
* don't over reconcile on error ([#4005](https://github.com/argoproj/argo-rollouts/issues/4005))
* remove ReplicaSet write-back ([#4044](https://github.com/argoproj/argo-rollouts/issues/4044))
* **controller:** Fixed broken pprof links [#4037](https://github.com/argoproj/argo-rollouts/issues/4037) ([#4038](https://github.com/argoproj/argo-rollouts/issues/4038))
* **experiments:** move recorder event to after experiment reconciliation, fixes [#4021](https://github.com/argoproj/argo-rollouts/issues/4021) ([#4022](https://github.com/argoproj/argo-rollouts/issues/4022))
<a name="v1.8.0-rc1"></a>
## [v1.8.0-rc1](https://github.com/argoproj/argo-rollouts/compare/v1.7.2...v1.8.0-rc1) (2024-12-06)
### Chore
* update the link of DCO in PR template ([#3944](https://github.com/argoproj/argo-rollouts/issues/3944))
* remove some k8s e2e test versions ([#3495](https://github.com/argoproj/argo-rollouts/issues/3495))
* upgrade react-scripts ([#3584](https://github.com/argoproj/argo-rollouts/issues/3584))
* update golangci-lint to v1.61.0 ([#3857](https://github.com/argoproj/argo-rollouts/issues/3857))
* fix and add more cli usage case ([#3592](https://github.com/argoproj/argo-rollouts/issues/3592))
* don't fail code-cov on failure ([#3661](https://github.com/argoproj/argo-rollouts/issues/3661))
* add example for updating all container images in set command ([#3667](https://github.com/argoproj/argo-rollouts/issues/3667))
* add codecov token ([#3623](https://github.com/argoproj/argo-rollouts/issues/3623))
* code coverage for e2e ([#3740](https://github.com/argoproj/argo-rollouts/issues/3740))
* use codecov config and only send merged coverage file ([#3751](https://github.com/argoproj/argo-rollouts/issues/3751))
* Add Cloudflare to users ([#3768](https://github.com/argoproj/argo-rollouts/issues/3768))
* capitalize AS in Dockerfile ([#3781](https://github.com/argoproj/argo-rollouts/issues/3781))
* move ReplicaSet creation and Rollout validation earlier during the reconciliation process. ([#3657](https://github.com/argoproj/argo-rollouts/issues/3657))
* Add Trustly to USERS.md ([#3837](https://github.com/argoproj/argo-rollouts/issues/3837))
* add step plugin proposal ([#3480](https://github.com/argoproj/argo-rollouts/issues/3480))
* **deps:** bump docker/setup-buildx-action from 3.4.0 to 3.5.0 ([#3738](https://github.com/argoproj/argo-rollouts/issues/3738))
* **deps:** bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.42.2 to 1.42.3 ([#3923](https://github.com/argoproj/argo-rollouts/issues/3923))
* **deps:** bump github.com/newrelic/newrelic-client-go/v2 from 2.48.2 to 2.50.1 ([#3924](https://github.com/argoproj/argo-rollouts/issues/3924))
* **deps:** bump softprops/action-gh-release from 2.0.8 to 2.0.9 ([#3928](https://github.com/argoproj/argo-rollouts/issues/3928))
* **deps:** bump github.com/aws/aws-sdk-go-v2/config from 1.27.38 to 1.28.1 ([#3917](https://github.com/argoproj/argo-rollouts/issues/3917))
* **deps:** bump github.com/hashicorp/go-plugin from 1.6.1 to 1.6.2 ([#3908](https://github.com/argoproj/argo-rollouts/issues/3908))
* **deps:** bump actions/setup-go from 5.0.2 to 5.1.0 ([#3912](https://github.com/argoproj/argo-rollouts/issues/3912))
* **deps:** bump github.com/aws/aws-sdk-go-v2 from 1.32.2 to 1.32.3 ([#3919](https://github.com/argoproj/argo-rollouts/issues/3919))
* **deps:** bump github.com/newrelic/newrelic-client-go/v2 from 2.50.1 to 2.51.3 ([#3939](https://github.com/argoproj/argo-rollouts/issues/3939))
* **deps:** bump google.golang.org/grpc from 1.66.2 to 1.67.1 ([#3903](https://github.com/argoproj/argo-rollouts/issues/3903))
* **deps:** bump docker/setup-buildx-action from 3.6.1 to 3.7.1 ([#3876](https://github.com/argoproj/argo-rollouts/issues/3876))
* **deps:** bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.40.8 to 1.42.2 ([#3901](https://github.com/argoproj/argo-rollouts/issues/3901))
* **deps:** bump github.com/aws/smithy-go from 1.21.0 to 1.22.0 ([#3885](https://github.com/argoproj/argo-rollouts/issues/3885))
* **deps:** bump github.com/aws/aws-sdk-go-v2 from 1.31.0 to 1.32.2 ([#3886](https://github.com/argoproj/argo-rollouts/issues/3886))
* **deps:** bump google.golang.org/protobuf from 1.34.2 to 1.35.1 ([#3887](https://github.com/argoproj/argo-rollouts/issues/3887))
* **deps:** bump golang.org/x/oauth2 from 0.22.0 to 0.23.0 ([#3841](https://github.com/argoproj/argo-rollouts/issues/3841))
* **deps:** bump codecov/codecov-action from 4.5.0 to 4.6.0 ([#3865](https://github.com/argoproj/argo-rollouts/issues/3865))
* **deps:** bump github.com/newrelic/newrelic-client-go/v2 from 2.45.0 to 2.48.2 ([#3874](https://github.com/argoproj/argo-rollouts/issues/3874))
* **deps:** bump sigstore/cosign-installer from 3.6.0 to 3.7.0 ([#3875](https://github.com/argoproj/argo-rollouts/issues/3875))
* **deps:** bump docker/build-push-action from 6.8.0 to 6.9.0 ([#3863](https://github.com/argoproj/argo-rollouts/issues/3863))
* **deps:** bump docker/build-push-action from 6.7.0 to 6.8.0 ([#3860](https://github.com/argoproj/argo-rollouts/issues/3860))
* **deps:** bump github.com/aws/aws-sdk-go-v2/config from 1.27.33 to 1.27.38 ([#3851](https://github.com/argoproj/argo-rollouts/issues/3851))
* **deps:** bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.40.5 to 1.40.8 ([#3838](https://github.com/argoproj/argo-rollouts/issues/3838))
* **deps:** bump github.com/newrelic/newrelic-client-go/v2 from 2.43.1 to 2.45.0 ([#3829](https://github.com/argoproj/argo-rollouts/issues/3829))
* **deps:** bump google.golang.org/grpc from 1.65.0 to 1.66.2 ([#3831](https://github.com/argoproj/argo-rollouts/issues/3831))
* **deps:** bump softprops/action-gh-release from 2.0.9 to 2.1.0 ([#3938](https://github.com/argoproj/argo-rollouts/issues/3938))
* **deps:** bump peter-evans/create-pull-request from 6 to 7 ([#3819](https://github.com/argoproj/argo-rollouts/issues/3819))
* **deps:** bump github.com/aws/aws-sdk-go-v2/config from 1.27.31 to 1.27.33 ([#3822](https://github.com/argoproj/argo-rollouts/issues/3822))
* **deps:** bump github.com/aws/aws-sdk-go-v2/config from 1.27.30 to 1.27.31 ([#3807](https://github.com/argoproj/argo-rollouts/issues/3807))
* **deps:** bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.40.3 to 1.40.5 ([#3808](https://github.com/argoproj/argo-rollouts/issues/3808))
* **deps:** bump github.com/aws/aws-sdk-go-v2/config from 1.27.27 to 1.27.30 ([#3804](https://github.com/argoproj/argo-rollouts/issues/3804))
* **deps:** bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.42.3 to 1.42.4 ([#3935](https://github.com/argoproj/argo-rollouts/issues/3935))
* **deps:** bump github.com/newrelic/newrelic-client-go/v2 from 2.41.2 to 2.43.1 ([#3793](https://github.com/argoproj/argo-rollouts/issues/3793))
* **deps:** bump github.com/aws/smithy-go from 1.20.3 to 1.20.4 ([#3794](https://github.com/argoproj/argo-rollouts/issues/3794))
* **deps:** bump docker/build-push-action from 6.6.1 to 6.7.0 ([#3791](https://github.com/argoproj/argo-rollouts/issues/3791))
* **deps:** bump github.com/influxdata/influxdb-client-go/v2 from 2.13.0 to 2.14.0 ([#3786](https://github.com/argoproj/argo-rollouts/issues/3786))
* **deps:** bump github.com/aws/aws-sdk-go-v2 from 1.32.3 to 1.32.4 ([#3934](https://github.com/argoproj/argo-rollouts/issues/3934))
* **deps:** bump docker/build-push-action from 6.5.0 to 6.6.1 ([#3776](https://github.com/argoproj/argo-rollouts/issues/3776))
* **deps:** bump sigstore/cosign-installer from 3.5.0 to 3.6.0 ([#3777](https://github.com/argoproj/argo-rollouts/issues/3777))
* **deps:** bump golang.org/x/oauth2 from 0.21.0 to 0.22.0 ([#3766](https://github.com/argoproj/argo-rollouts/issues/3766))
* **deps:** bump docker/build-push-action from 6.9.0 to 6.10.0 ([#3963](https://github.com/argoproj/argo-rollouts/issues/3963))
* **deps:** bump docker/setup-buildx-action from 3.5.0 to 3.6.1 ([#3755](https://github.com/argoproj/argo-rollouts/issues/3755))
* **deps:** bump google.golang.org/protobuf from 1.35.1 to 1.35.2 ([#3950](https://github.com/argoproj/argo-rollouts/issues/3950))
* **deps:** bump github.com/aws/aws-sdk-go-v2/config from 1.27.26 to 1.27.27 ([#3732](https://github.com/argoproj/argo-rollouts/issues/3732))
* **deps:** bump softprops/action-gh-release from 2.0.6 to 2.0.8 ([#3733](https://github.com/argoproj/argo-rollouts/issues/3733))
* **deps:** bump golang.org/x/oauth2 from 0.23.0 to 0.24.0 ([#3949](https://github.com/argoproj/argo-rollouts/issues/3949))
* **deps:** bump docker/setup-qemu-action from 3.1.0 to 3.2.0 ([#3736](https://github.com/argoproj/argo-rollouts/issues/3736))
* **deps:** bump docker/build-push-action from 6.4.0 to 6.5.0 ([#3737](https://github.com/argoproj/argo-rollouts/issues/3737))
* **deps:** bump codecov/codecov-action from 4.6.0 to 5.0.7 ([#3961](https://github.com/argoproj/argo-rollouts/issues/3961))
* **deps:** bump docker/login-action from 3.2.0 to 3.3.0 ([#3739](https://github.com/argoproj/argo-rollouts/issues/3739))
* **deps:** bump docker/build-push-action from 6.3.0 to 6.4.0 ([#3723](https://github.com/argoproj/argo-rollouts/issues/3723))
* **deps:** bump github.com/aws/aws-sdk-go-v2/config from 1.27.24 to 1.27.26 ([#3717](https://github.com/argoproj/argo-rollouts/issues/3717))
* **deps:** bump actions/setup-go from 5.0.1 to 5.0.2 ([#3716](https://github.com/argoproj/argo-rollouts/issues/3716))
* **deps:** bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.40.1 to 1.40.3 ([#3719](https://github.com/argoproj/argo-rollouts/issues/3719))
* **deps:** bump docker/setup-qemu-action from 3.0.0 to 3.1.0 ([#3696](https://github.com/argoproj/argo-rollouts/issues/3696))
* **deps:** bump docker/build-push-action from 6.2.0 to 6.3.0 ([#3697](https://github.com/argoproj/argo-rollouts/issues/3697))
* **deps:** bump github.com/aws/aws-sdk-go-v2/config from 1.27.23 to 1.27.24 ([#3698](https://github.com/argoproj/argo-rollouts/issues/3698))
* **deps:** bump docker/setup-buildx-action from 3.3.0 to 3.4.0 ([#3705](https://github.com/argoproj/argo-rollouts/issues/3705))
* **deps:** bump google.golang.org/grpc from 1.64.0 to 1.65.0 ([#3694](https://github.com/argoproj/argo-rollouts/issues/3694))
* **deps:** bump github.com/aws/aws-sdk-go-v2/config from 1.27.22 to 1.27.23 ([#3695](https://github.com/argoproj/argo-rollouts/issues/3695))
* **deps:** bump github.com/aws/aws-sdk-go-v2/config from 1.28.1 to 1.28.6 ([#3981](https://github.com/argoproj/argo-rollouts/issues/3981))
* **deps:** bump github.com/aws/smithy-go from 1.20.2 to 1.20.3 ([#3685](https://github.com/argoproj/argo-rollouts/issues/3685))
* **deps:** bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.38.7 to 1.40.1 ([#3687](https://github.com/argoproj/argo-rollouts/issues/3687))
* **deps:** bump softprops/action-gh-release from 2.0.5 to 2.0.6 ([#3656](https://github.com/argoproj/argo-rollouts/issues/3656))
* **deps:** bump docker/build-push-action from 6.1.0 to 6.2.0 ([#3676](https://github.com/argoproj/argo-rollouts/issues/3676))
* **deps:** bump github.com/aws/aws-sdk-go-v2/config from 1.27.19 to 1.27.22 ([#3680](https://github.com/argoproj/argo-rollouts/issues/3680))
* **deps:** bump docker/build-push-action from 6.0.2 to 6.1.0 ([#3662](https://github.com/argoproj/argo-rollouts/issues/3662))
* **deps:** bump docker/build-push-action from 6.0.0 to 6.0.2 ([#3659](https://github.com/argoproj/argo-rollouts/issues/3659))
* **deps:** bump google.golang.org/grpc from 1.67.1 to 1.68.1 ([#3979](https://github.com/argoproj/argo-rollouts/issues/3979))
* **deps:** bump github.com/aws/aws-sdk-go-v2/config from 1.27.18 to 1.27.19 ([#3646](https://github.com/argoproj/argo-rollouts/issues/3646))
* **deps:** bump docker/build-push-action from 5.4.0 to 6.0.0 ([#3644](https://github.com/argoproj/argo-rollouts/issues/3644))
* **deps:** bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.38.6 to 1.38.7 ([#3647](https://github.com/argoproj/argo-rollouts/issues/3647))
* **deps:** bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.42.4 to 1.43.3 ([#3980](https://github.com/argoproj/argo-rollouts/issues/3980))
* **deps:** bump github.com/spf13/cobra from 1.8.0 to 1.8.1 ([#3640](https://github.com/argoproj/argo-rollouts/issues/3640))
* **deps:** bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.38.0 to 1.38.6 ([#3619](https://github.com/argoproj/argo-rollouts/issues/3619))
* **deps:** bump github.com/aws/aws-sdk-go-v2/config from 1.27.16 to 1.27.18 ([#3625](https://github.com/argoproj/argo-rollouts/issues/3625))
* **deps:** bump google.golang.org/protobuf from 1.34.1 to 1.34.2 ([#3633](https://github.com/argoproj/argo-rollouts/issues/3633))
* **deps:** bump codecov/codecov-action from 4.4.1 to 4.5.0 ([#3634](https://github.com/argoproj/argo-rollouts/issues/3634))
* **deps:** bump docker/build-push-action from 5.3.0 to 5.4.0 ([#3624](https://github.com/argoproj/argo-rollouts/issues/3624))
* **deps:** bump golang.org/x/oauth2 from 0.20.0 to 0.21.0 ([#3631](https://github.com/argoproj/argo-rollouts/issues/3631))
* **deps:** bump github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 from 1.31.1 to 1.31.3 ([#3620](https://github.com/argoproj/argo-rollouts/issues/3620))
* **deps:** bump actions/setup-go from 5.0.0 to 5.0.1 ([#3552](https://github.com/argoproj/argo-rollouts/issues/3552))
* **deps:** bump github.com/aws/aws-sdk-go-v2 from 1.27.0 to 1.27.2 ([#3621](https://github.com/argoproj/argo-rollouts/issues/3621))
* **deps:** bump docker/login-action from 3.1.0 to 3.2.0 ([#3604](https://github.com/argoproj/argo-rollouts/issues/3604))
* **deps:** bump github.com/hashicorp/go-plugin from 1.6.0 to 1.6.1 ([#3606](https://github.com/argoproj/argo-rollouts/issues/3606))
* **deps:** bump google.golang.org/grpc from 1.63.2 to 1.64.0 ([#3607](https://github.com/argoproj/argo-rollouts/issues/3607))
* **deps:** bump github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 from 1.30.5 to 1.31.1 ([#3608](https://github.com/argoproj/argo-rollouts/issues/3608))
* **deps:** bump golang.org/x/oauth2 from 0.19.0 to 0.20.0 ([#3554](https://github.com/argoproj/argo-rollouts/issues/3554))
* **deps:** bump golangci/golangci-lint-action from 5 to 6 ([#3556](https://github.com/argoproj/argo-rollouts/issues/3556))
* **deps:** bump google.golang.org/protobuf from 1.34.0 to 1.34.1 ([#3557](https://github.com/argoproj/argo-rollouts/issues/3557))
* **deps:** bump softprops/action-gh-release from 2.0.4 to 2.0.5 ([#3561](https://github.com/argoproj/argo-rollouts/issues/3561))
* **deps:** bump codecov/codecov-action from 4.3.1 to 4.4.1 ([#3588](https://github.com/argoproj/argo-rollouts/issues/3588))
* **deps:** bump github.com/aws/aws-sdk-go-v2/config from 1.27.11 to 1.27.16 ([#3597](https://github.com/argoproj/argo-rollouts/issues/3597))
* **deps:** update golang to 1.23 ([#3987](https://github.com/argoproj/argo-rollouts/issues/3987))
* **deps:** bump google.golang.org/protobuf from 1.33.0 to 1.34.0 ([#3548](https://github.com/argoproj/argo-rollouts/issues/3548))
* **deps:** bump codecov/codecov-action from 4.3.0 to 4.3.1 ([#3550](https://github.com/argoproj/argo-rollouts/issues/3550))
* **deps:** bump codecov/codecov-action from 5.0.7 to 5.1.1 ([#3986](https://github.com/argoproj/argo-rollouts/issues/3986))
* **deps:** bump github.com/aws/aws-sdk-go-v2/service/cloudwatch from 1.37.0 to 1.38.0 ([#3525](https://github.com/argoproj/argo-rollouts/issues/3525))
* **deps:** bump golangci/golangci-lint-action from 4 to 5 ([#3540](https://github.com/argoproj/argo-rollouts/issues/3540))
* **deps:** bump sigstore/cosign-installer from 3.4.0 to 3.5.0 ([#3522](https://github.com/argoproj/argo-rollouts/issues/3522))
* **deps:** bump slsa-framework/slsa-github-generator from 1.10.0 to 2.0.0 ([#3537](https://github.com/argoproj/argo-rollouts/issues/3537))
* **deps:** bump codecov/codecov-action from 4.2.0 to 4.3.0 ([#3517](https://github.com/argoproj/argo-rollouts/issues/3517))
* **deps:** bump go version to 1.22 ([#3516](https://github.com/argoproj/argo-rollouts/issues/3516))
* **deps:** bump google.golang.org/grpc from 1.63.0 to 1.63.2 ([#3512](https://github.com/argoproj/argo-rollouts/issues/3512))
* **deps:** bump github.com/aws/aws-sdk-go-v2/config from 1.27.10 to 1.27.11 ([#3510](https://github.com/argoproj/argo-rollouts/issues/3510))
* **deps:** bump peaceiris/actions-gh-pages from 3 to 4 ([#3513](https://github.com/argoproj/argo-rollouts/issues/3513))
* **deps:** bump docker/setup-buildx-action from 3.2.0 to 3.3.0 ([#3514](https://github.com/argoproj/argo-rollouts/issues/3514))
* **deps:** bump google.golang.org/grpc from 1.62.1 to 1.63.0 ([#3497](https://github.com/argoproj/argo-rollouts/issues/3497))
* **deps:** bump github.com/prometheus/client_model from 0.6.0 to 0.6.1 ([#3499](https://github.com/argoproj/argo-rollouts/issues/3499))
* **deps:** bump golang.org/x/oauth2 from 0.18.0 to 0.19.0 ([#3506](https://github.com/argoproj/argo-rollouts/issues/3506))
* **deps:** bump codecov/codecov-action from 4.1.1 to 4.2.0 ([#3500](https://github.com/argoproj/argo-rollouts/issues/3500))
* **deps:** bump github.com/stretchr/testify from 1.9.0 to 1.10.0 ([#3985](https://github.com/argoproj/argo-rollouts/issues/3985))
### Docs
* fix broken links ([#3962](https://github.com/argoproj/argo-rollouts/issues/3962))
* add descriptions for additional default trigger templates ([#3960](https://github.com/argoproj/argo-rollouts/issues/3960))
* document dynamicStableScale ([#3978](https://github.com/argoproj/argo-rollouts/issues/3978))
* add 7shifts to users.md ([#3965](https://github.com/argoproj/argo-rollouts/issues/3965))
* add CarGurus to users.md ([#3940](https://github.com/argoproj/argo-rollouts/issues/3940))
* Add technique for ConfigMap change detection in Rollout ([#3515](https://github.com/argoproj/argo-rollouts/issues/3515))
* document canary step plugin (alpha) ([#3906](https://github.com/argoproj/argo-rollouts/issues/3906))
* GTW API support changed to Gloo Gateway instead of GloodMesh ([#3914](https://github.com/argoproj/argo-rollouts/issues/3914))
* Add Amadeus to Users.md ([#3527](https://github.com/argoproj/argo-rollouts/issues/3527))
* add TBC Bank to USERS.md ([#3871](https://github.com/argoproj/argo-rollouts/issues/3871))
* Update specification document ([#3877](https://github.com/argoproj/argo-rollouts/issues/3877))
* clarify supported deployment strategies ([#3823](https://github.com/argoproj/argo-rollouts/issues/3823))
* Update metric job docs with some of the available config options ([#3839](https://github.com/argoproj/argo-rollouts/issues/3839))
* Clarify analysis count with value 0 ([#3847](https://github.com/argoproj/argo-rollouts/issues/3847))
* fix a link to e2e.yaml ([#3834](https://github.com/argoproj/argo-rollouts/issues/3834))
* Update Changelog ([#3788](https://github.com/argoproj/argo-rollouts/issues/3788))
* remove obsolete roadmap page ([#3783](https://github.com/argoproj/argo-rollouts/issues/3783))
* Update ephemeral-metadata.md with a small fix ([#3782](https://github.com/argoproj/argo-rollouts/issues/3782))
* add Priceline to USERS.md ([#3764](https://github.com/argoproj/argo-rollouts/issues/3764))
* added clarifications for short releases ([#3753](https://github.com/argoproj/argo-rollouts/issues/3753))
* correct the case that autoPromotionSeconds feature is ignored ([#2388](https://github.com/argoproj/argo-rollouts/issues/2388))
* copy omission in rollout docs ([#3690](https://github.com/argoproj/argo-rollouts/issues/3690))
* Update Changelog ([#3666](https://github.com/argoproj/argo-rollouts/issues/3666))
* Update Changelog ([#3632](https://github.com/argoproj/argo-rollouts/issues/3632))
* provide recommendation for strategies ([#3531](https://github.com/argoproj/argo-rollouts/issues/3531))
* Update Changelog ([#3507](https://github.com/argoproj/argo-rollouts/issues/3507))
* **analysis:** new plugin is added to the documentation ([#3915](https://github.com/argoproj/argo-rollouts/issues/3915))
* **analysis:** plugin url is changed and redirected to argoproj-labs project ([#3922](https://github.com/argoproj/argo-rollouts/issues/3922))
### Feat
* New Prometheus metric: build_info ([#3591](https://github.com/argoproj/argo-rollouts/issues/3591))
* support multi account Datadog metrics provider ([#3787](https://github.com/argoproj/argo-rollouts/issues/3787))
* **analysis:** Add ConsecutiveSuccessLimit feature to Analysis ([#3970](https://github.com/argoproj/argo-rollouts/issues/3970))
* **analysis:** Returns the resolved query as metadata in the New Relic provider ([#3715](https://github.com/argoproj/argo-rollouts/issues/3715))
* **analysis:** Adds timeout property to NewRelic metrics provider. Resolves: [#3741](https://github.com/argoproj/argo-rollouts/issues/3741) ([#3742](https://github.com/argoproj/argo-rollouts/issues/3742))
* **controller:** enable pprof profiling support ([#3769](https://github.com/argoproj/argo-rollouts/issues/3769))
* **controller:** add canary steps plugin ([#3521](https://github.com/argoproj/argo-rollouts/issues/3521))
* **controller:** Allow specifying full annotations for nginx canary ingresses. ([#3671](https://github.com/argoproj/argo-rollouts/issues/3671))
* **dashboard:** change the color of the current rollout step ([#3526](https://github.com/argoproj/argo-rollouts/issues/3526))
* **metricprovider:** credentials to download plugin ([#3905](https://github.com/argoproj/argo-rollouts/issues/3905))
* **metricprovider:** add prometheus range query support ([#3704](https://github.com/argoproj/argo-rollouts/issues/3704))
### Fix
* add update verb to ClusterRole permissions for scaleDown feature. Fixes [#3672](https://github.com/argoproj/argo-rollouts/issues/3672) ([#3675](https://github.com/argoproj/argo-rollouts/issues/3675))
* e2e test results processing change key name to run-id ([#3744](https://github.com/argoproj/argo-rollouts/issues/3744))
* Update loader-utils to 2.0.4 ([#3601](https://github.com/argoproj/argo-rollouts/issues/3601))
* remove condition where header routes can stay directed at empty service in preemption ([#3898](https://github.com/argoproj/argo-rollouts/issues/3898))
* add secrets so we can download across workflows ([#3746](https://github.com/argoproj/argo-rollouts/issues/3746))
* rollout should skip timeout when paused ([#3711](https://github.com/argoproj/argo-rollouts/issues/3711))
* check isScalingEvent only on stable and newRS ([#3883](https://github.com/argoproj/argo-rollouts/issues/3883))
* rs conflict with fallback to patch ([#3559](https://github.com/argoproj/argo-rollouts/issues/3559))
* verify the weight of the alb at the end of the rollout ([#3627](https://github.com/argoproj/argo-rollouts/issues/3627))
* stop rollout from entering degraded state during blueGreen pause. Fixes [#3843](https://github.com/argoproj/argo-rollouts/issues/3843) ([#3845](https://github.com/argoproj/argo-rollouts/issues/3845))
* when Rollout has pingpong and stable/canary service defined, only alb traffic management uses pingpong. ([#3628](https://github.com/argoproj/argo-rollouts/issues/3628))
* protocol missing in ambassador canary mapping creation. Fixes [#3593](https://github.com/argoproj/argo-rollouts/issues/3593) ([#3603](https://github.com/argoproj/argo-rollouts/issues/3603))
* Change indentation to properly render Markdown - fixes [#3509](https://github.com/argoproj/argo-rollouts/issues/3509) ([#3511](https://github.com/argoproj/argo-rollouts/issues/3511))
* Add volume for plugin and tmp folder ([#3546](https://github.com/argoproj/argo-rollouts/issues/3546))
* replicaSet not scaled down due to incorrect annotations ([#3762](https://github.com/argoproj/argo-rollouts/issues/3762)) ([#3784](https://github.com/argoproj/argo-rollouts/issues/3784))
* don't default datadog aggregator ([#3643](https://github.com/argoproj/argo-rollouts/issues/3643))
* Support kustomize v5 labels transformer. Fixes [#3105](https://github.com/argoproj/argo-rollouts/issues/3105) ([#3775](https://github.com/argoproj/argo-rollouts/issues/3775))
* separate e2e and unit test reporting uploads ([#3747](https://github.com/argoproj/argo-rollouts/issues/3747))
* retain non-nginx canary annotations. Fixes: [#1070](https://github.com/argoproj/argo-rollouts/issues/1070) ([#3806](https://github.com/argoproj/argo-rollouts/issues/3806))
* docs site version selector broken ([#3590](https://github.com/argoproj/argo-rollouts/issues/3590))
* **analysis:** explicitly set datadog aggregator to last only on v2 ([#3730](https://github.com/argoproj/argo-rollouts/issues/3730))
* **analysis:** Take RollbackWindow into account when Reconciling Analysis Runs. Fixes [#3669](https://github.com/argoproj/argo-rollouts/issues/3669) ([#3670](https://github.com/argoproj/argo-rollouts/issues/3670))
* **controller:** use the stableRS from the rollout context rather tha… ([#3664](https://github.com/argoproj/argo-rollouts/issues/3664))
* **controller:** weighted experiment validation should allow delegating to trafficRouter plugins ([#3909](https://github.com/argoproj/argo-rollouts/issues/3909))
* **controller:** Corrects the logic of comparing sha256 has. Fixes [#3519](https://github.com/argoproj/argo-rollouts/issues/3519) ([#3520](https://github.com/argoproj/argo-rollouts/issues/3520))
* **controller:** Get the right resourceName for traefik.io.Fixes [#3615](https://github.com/argoproj/argo-rollouts/issues/3615) ([#3759](https://github.com/argoproj/argo-rollouts/issues/3759))
* **controller:** fix race condition in updating ephemeral metadata ([#3975](https://github.com/argoproj/argo-rollouts/issues/3975))
* **dashboard:** Update pod status logic to support native sidecars. Fixes [#3366](https://github.com/argoproj/argo-rollouts/issues/3366) ([#3639](https://github.com/argoproj/argo-rollouts/issues/3639))
* **dashboard:** No redirect loop when running on root. Fixes [#3967](https://github.com/argoproj/argo-rollouts/issues/3967) ([#3968](https://github.com/argoproj/argo-rollouts/issues/3968))
* **dashboard:** parse analysis values with JSON5 to handle NaN. Fixes [#2758](https://github.com/argoproj/argo-rollouts/issues/2758) ([#3801](https://github.com/argoproj/argo-rollouts/issues/3801))
* **dashboard:** analysis modal crashed when value not valid ([#3881](https://github.com/argoproj/argo-rollouts/issues/3881))
* **dashboard:** Cleanup viewcontroller after each request. Fixes [#2095](https://github.com/argoproj/argo-rollouts/issues/2095) ([#3966](https://github.com/argoproj/argo-rollouts/issues/3966))
* **metricprovider:** fix handling null values in datadog ([#3893](https://github.com/argoproj/argo-rollouts/issues/3893))
* **metricprovider:** reuse http.Transport for http.Client ([#3780](https://github.com/argoproj/argo-rollouts/issues/3780))
* **trafficrouting:** add nil check for desired annotations map in ALB… ([#3853](https://github.com/argoproj/argo-rollouts/issues/3853))
* **trafficrouting:** Fix downtime on initial deployment using Istio DestinationRule Subsets. Fixes [#2507](https://github.com/argoproj/argo-rollouts/issues/2507) ([#3602](https://github.com/argoproj/argo-rollouts/issues/3602))
<a name="v1.7.2"></a>
## [v1.7.2](https://github.com/argoproj/argo-rollouts/compare/v1.7.1...v1.7.2) (2024-08-12)
@ -1002,3 +1298,4 @@ There was an unintentional change in behavior related to service creation with e
### Fixes
* **controller:** istio dropping fields not defined in type ([#2268](https://github.com/argoproj/argo-rollouts/issues/2268))

View File

@ -12,7 +12,7 @@ RUN apt-get update && apt-get install -y \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Install golangci-lint
RUN curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.61.0 && \
RUN curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v2.1.6 && \
golangci-lint linters
COPY .golangci.yml ${GOPATH}/src/dummy/.golangci.yml

View File

@ -64,8 +64,8 @@ define protoc
-I ${GOPATH}/src \
-I ${GOPATH}/pkg/mod/github.com/gogo/protobuf@v1.3.2/gogoproto \
-I ${GOPATH}/pkg/mod/github.com/grpc-ecosystem/grpc-gateway@v1.16.0/third_party/googleapis \
--gogofast_out=plugins=grpc:${GOPATH}/src \
--grpc-gateway_out=logtostderr=true:${GOPATH}/src \
--gogofast_out=plugins=grpc:${CURDIR} \
--grpc-gateway_out=logtostderr=true:${CURDIR} \
--swagger_out=logtostderr=true,fqn_for_swagger_name=true:. \
$(1)
endef
@ -101,6 +101,7 @@ install-tools-local: install-go-tools-local install-protoc-local install-devtool
TYPES := $(shell find pkg/apis/rollouts/v1alpha1 -type f -name '*.go' -not -name openapi_generated.go -not -name '*generated*' -not -name '*test.go')
APIMACHINERY_PKGS=k8s.io/apimachinery/pkg/util/intstr,+k8s.io/apimachinery/pkg/api/resource,+k8s.io/apimachinery/pkg/runtime/schema,+k8s.io/apimachinery/pkg/runtime,k8s.io/apimachinery/pkg/apis/meta/v1,k8s.io/api/core/v1,k8s.io/api/batch/v1
PKG := $(shell go list ./pkg/apis/rollouts/v1alpha1)
.PHONY: install-toolchain
install-toolchain: install-go-tools-local install-protoc-local
@ -117,21 +118,31 @@ gen-proto: k8s-proto api-proto ui-proto
# generates the .proto files affected by changes to types.go
.PHONY: k8s-proto
k8s-proto: go-mod-vendor $(TYPES) ## generate kubernetes protobuf files
k8s-proto: go-mod-vendor install-protoc-local install-go-tools-local $(TYPES) ## generate kubernetes protobuf files
mkdir -p ${PKG}
cp -f $(CURDIR)/pkg/apis/rollouts/v1alpha1/*.* ${PKG}/
PATH=${DIST_DIR}:$$PATH GOPATH=${GOPATH} go-to-protobuf \
--go-header-file=./hack/custom-boilerplate.go.txt \
--packages=github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1 \
--packages=${PKG} \
--apimachinery-packages=${APIMACHINERY_PKGS} \
--proto-import $(CURDIR)/vendor \
--proto-import=${DIST_DIR}/protoc-include
--proto-import=${CURDIR}/vendor \
--proto-import=${GOPATH}/src \
--proto-import=${DIST_DIR}/protoc-include
touch pkg/apis/rollouts/v1alpha1/generated.proto
cp -R ${GOPATH}/src/github.com/argoproj/argo-rollouts/pkg . | true
cp -Rf $(CURDIR)/github.com/argoproj/argo-rollouts/pkg . | true
# cleaning up
rm -Rf $(CURDIR)/github.com/
rm -Rf $(CURDIR)/k8s.io/
# generates *.pb.go, *.pb.gw.go, swagger from .proto files
.PHONY: api-proto
api-proto: go-mod-vendor k8s-proto ## generate api protobuf files
mkdir -p ${PKG}
cp -f $(CURDIR)/pkg/apis/rollouts/v1alpha1/generated.proto ${PKG}
$(call protoc,pkg/apiclient/rollout/rollout.proto)
cp -Rf $(CURDIR)/github.com/argoproj/argo-rollouts/pkg . | true
# cleaning up
rm -Rf $(CURDIR)/github.com/
# generates ui related proto files
.PHONY: ui-proto
@ -145,8 +156,8 @@ gen-k8scodegen: go-mod-vendor ## generate kubernetes codegen files
# generates ./manifests/crds/
.PHONY: gen-crd
gen-crd: install-go-tools-local ## generate crd manifests
go run ./hack/gen-crd-spec/main.go
gen-crd: go-mod-vendor install-go-tools-local ## generate crd manifests
go run -mod=mod ./hack/gen-crd-spec/main.go
# generates mock files from interfaces
.PHONY: gen-mocks
@ -158,12 +169,13 @@ gen-mocks-fast:
# generates openapi_generated.go
.PHONY: gen-openapi
gen-openapi: $(DIST_DIR)/openapi-gen ## generate openapi files
PATH=${DIST_DIR}:$$PATH GOPATH=${GOPATH} openapi-gen \
gen-openapi: install-go-tools-local $(DIST_DIR)/openapi-gen ## generate openapi files
PATH=${DIST_DIR}:$$PATH GOPATH=${GOPATH} openapi-gen ${CURRENT_DIR}/pkg/apis/rollouts/v1alpha1 \
--go-header-file ${CURRENT_DIR}/hack/custom-boilerplate.go.txt \
--input-dirs github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1 \
--output-package github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1 \
--report-filename pkg/apis/api-rules/violation_exceptions.list
--output-pkg github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1 \
--output-dir ${CURRENT_DIR}/pkg/apis/rollouts/v1alpha1 \
--output-file openapi_generated.go \
--report-filename ${CURRENT_DIR}/pkg/apis/api-rules/violation_exceptions.list
##@ Plugins
@ -279,6 +291,8 @@ manifests: ## generate manifests e.g. CRD, RBAC etc.
clean: ## clean up build artifacts
-rm -rf ${CURRENT_DIR}/dist
-rm -rf ${CURRENT_DIR}/ui/dist
-rm -Rf ${CURRENT_DIR}/github.com/
-rm -Rf ${CURRENT_DIR}/k8s.io/
.PHONY: precheckin
precheckin: test lint
@ -291,8 +305,8 @@ serve-docs: docs ## serve docs locally
docker run --rm -it -p 8000:8000 -v ${CURRENT_DIR}:/docs squidfunk/mkdocs-material serve -a 0.0.0.0:8000
.PHONY: docs
docs: ## build docs
go run ./hack/gen-docs/main.go
docs: go-mod-vendor install-go-tools-local ## build docs
go run -mod=mod ./hack/gen-docs/main.go
##@ Release

View File

@ -10,6 +10,8 @@ Organizations below are **officially** using Argo Rollouts. Please send a PR wit
1. [Amadeus IT Group](https://amadeus.com/)
1. [Ambassador Labs](https://www.getambassador.io)
1. [Ant Group](https://www.antgroup.com/)
1. [AppsFlyer](https://www.appsflyer.com/)
1. [Batumbu](https://batumbu.id/)
1. [Bucketplace](https://www.bucketplace.co.kr/)
1. [BukuKas](https://bukukas.co.id/)
1. [Calm](https://www.calm.com/)
@ -21,6 +23,7 @@ Organizations below are **officially** using Argo Rollouts. Please send a PR wit
1. [DaoCloud](https://daocloud.io)
1. [Databricks](https://github.com/databricks)
1. [Devtron Labs](https://github.com/devtron-labs/devtron)
1. [Doubble](https://www.doubble.app)
1. [Factorial](https://factorialhr.com)
1. [Farfetch](https://www.farfetch.com/)
1. [Flipkart](https://flipkart.com)
@ -31,7 +34,9 @@ Organizations below are **officially** using Argo Rollouts. Please send a PR wit
1. [Hepsiburada](https://hepsiburada.com/)
1. [Ibotta](https://home.ibotta.com/)
1. [Intuit](https://www.intuit.com/)
1. [Microsoft](https://microsoft.com/)
1. [New Relic](https://newrelic.com/)
1. [Nextdoor](https://nextdoor.com)
1. [Nitro](https://www.gonitro.com)
1. [Nozzle](https://nozzle.io)
1. [Opensurvey Inc.](https://opensurvey.co.kr)
@ -42,22 +47,32 @@ 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. [Plaid](https://plaid.com/)
1. [Priceline](https://priceline.com)
1. [Productboard](https://www.productboard.com)
1. [Quipper](https://www.quipper.com/)
1. [Quizlet](https://quizlet.com)
1. [Red Hat](https://www.redhat.com/)
1. [Salesforce](https://www.salesforce.com/)
1. [SAP Concur](https://www.concur.com/)
1. [Schneider Electric](https://www.se.com)
1. [Shipt](https://www.shipt.com/)
1. [Skillz](https://www.skillz.com)
1. [Spotify](https://www.spotify.com/)
1. [suXess-it](https://www.suxess-it.com/)
1. [Synamedia](https://www.synamedia.com)
1. [StormForge](https://www.stormforge.io)
1. [Taboola](https://www.taboola.com)
1. [TBC Bank](https://tbcbank.ge/)
1. [Trustly](https://www.trustly.com/)
1. [Tuhu](https://www.tuhu.cn/)
1. [Twilio SendGrid](https://sendgrid.com)
1. [Ubie](https://ubie.life/)
1. [Verkada](https://verkada.com)
1. [VISITS Technologies](https://visits.world/en)
1. [WeLab Bank](https://www.welab.bank/)
1. [Wolt](https://wolt.com/)
1. [Yotpo](https://www.yotpo.com/)
1. [Yuno](https://y.uno/)
1. [VGS](https://www.vgs.io)
1. [X3M ads](https://x3mads.com)

View File

@ -11,7 +11,7 @@ import (
corev1 "k8s.io/api/core/v1"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/utils/pointer"
"k8s.io/utils/ptr"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
analysisutil "github.com/argoproj/argo-rollouts/utils/analysis"
@ -145,7 +145,7 @@ func getResolvedMetricsWithoutSecrets(metrics []v1alpha1.Metric, args []v1alpha1
newArg := arg.DeepCopy()
if newArg.ValueFrom != nil && newArg.ValueFrom.SecretKeyRef != nil {
newArg.ValueFrom = nil
newArg.Value = pointer.StringPtr("temp-for-secret")
newArg.Value = ptr.To[string]("temp-for-secret")
}
newArgs = append(newArgs, *newArg)
}

View File

@ -22,7 +22,7 @@ import (
"k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/apimachinery/pkg/util/uuid"
k8stesting "k8s.io/client-go/testing"
"k8s.io/utils/pointer"
"k8s.io/utils/ptr"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
"github.com/argoproj/argo-rollouts/utils/defaults"
@ -1393,7 +1393,7 @@ func TestGarbageCollectArgResolution(t *testing.T) {
}
run.Spec.Args = append(run.Spec.Args, v1alpha1.Argument{
Name: "port",
Value: pointer.String("8080"),
Value: ptr.To[string]("8080"),
})
var measurementRetentionMetricsMap = map[string]*v1alpha1.MeasurementRetention{}
measurementRetentionMetricsMap["metric2"] = &v1alpha1.MeasurementRetention{MetricName: "metric2", Limit: 2}
@ -2071,7 +2071,7 @@ func StartTerminatingAnalysisRun(t *testing.T, isDryRun bool) *v1alpha1.Analysis
Args: []v1alpha1.Argument{
{
Name: "service",
Value: pointer.StringPtr("rollouts-demo-canary.default.svc.cluster.local"),
Value: ptr.To[string]("rollouts-demo-canary.default.svc.cluster.local"),
},
},
Metrics: []v1alpha1.Metric{{
@ -2130,7 +2130,7 @@ func TestInvalidDryRunConfigThrowsError(t *testing.T) {
Args: []v1alpha1.Argument{
{
Name: "service",
Value: pointer.StringPtr("rollouts-demo-canary.default.svc.cluster.local"),
Value: ptr.To[string]("rollouts-demo-canary.default.svc.cluster.local"),
},
},
Metrics: []v1alpha1.Metric{{
@ -2171,7 +2171,7 @@ func TestInvalidMeasurementsRetentionConfigThrowsError(t *testing.T) {
Args: []v1alpha1.Argument{
{
Name: "service",
Value: pointer.StringPtr("rollouts-demo-canary.default.svc.cluster.local"),
Value: ptr.To[string]("rollouts-demo-canary.default.svc.cluster.local"),
},
},
Metrics: []v1alpha1.Metric{{
@ -2315,7 +2315,7 @@ func TestExceededTtlChecked(t *testing.T) {
})
// Test success TTL overrides completed TTL.
testTTLStrategy(t, &v1alpha1.TTLStrategy{
SecondsAfterCompletion: pointer.Int32Ptr(100000),
SecondsAfterCompletion: ptr.To[int32](100000),
SecondsAfterSuccess: &secondsOfOneDay,
}, &v1alpha1.AnalysisRunStatus{
CompletedAt: timePtr(metav1.NewTime(ttlExpiredCompletedTime)),
@ -2326,7 +2326,7 @@ func TestExceededTtlChecked(t *testing.T) {
})
// Test failed TTL overrides completed TTL.
testTTLStrategy(t, &v1alpha1.TTLStrategy{
SecondsAfterCompletion: pointer.Int32Ptr(100000),
SecondsAfterCompletion: ptr.To[int32](100000),
SecondsAfterFailure: &secondsOfOneDay,
}, &v1alpha1.AnalysisRunStatus{
CompletedAt: timePtr(metav1.NewTime(ttlExpiredCompletedTime)),
@ -2338,7 +2338,7 @@ func TestExceededTtlChecked(t *testing.T) {
// Test completed TTL still evaluated when non-matching overrides exist.
testTTLStrategy(t, &v1alpha1.TTLStrategy{
SecondsAfterCompletion: &secondsOfOneDay,
SecondsAfterFailure: pointer.Int32Ptr(86401),
SecondsAfterFailure: ptr.To[int32](86401),
}, &v1alpha1.AnalysisRunStatus{
CompletedAt: timePtr(metav1.NewTime(ttlExpiredCompletedTime)),
Phase: v1alpha1.AnalysisPhaseSuccessful,
@ -2454,7 +2454,7 @@ func TestReconcileAnalysisRunOnRunNotFound(t *testing.T) {
},
Spec: v1alpha1.AnalysisRunSpec{
TTLStrategy: &v1alpha1.TTLStrategy{
SecondsAfterCompletion: pointer.Int32Ptr(1),
SecondsAfterCompletion: ptr.To[int32](1),
},
},
Status: v1alpha1.AnalysisRunStatus{
@ -2491,7 +2491,7 @@ func TestReconcileAnalysisRunOnOtherRunErrors(t *testing.T) {
},
Spec: v1alpha1.AnalysisRunSpec{
TTLStrategy: &v1alpha1.TTLStrategy{
SecondsAfterCompletion: pointer.Int32Ptr(1),
SecondsAfterCompletion: ptr.To[int32](1),
},
},
Status: v1alpha1.AnalysisRunStatus{
@ -2563,7 +2563,7 @@ func TestMaybeGarbageCollectAnalysisRunNoGCIfWithDeletionTimestamp(t *testing.T)
},
Spec: v1alpha1.AnalysisRunSpec{
TTLStrategy: &v1alpha1.TTLStrategy{
SecondsAfterCompletion: pointer.Int32Ptr(1),
SecondsAfterCompletion: ptr.To[int32](1),
},
},
Status: v1alpha1.AnalysisRunStatus{
@ -2590,7 +2590,7 @@ func TestMaybeGarbageCollectAnalysisRunNoGCIfNoCompletedAt(t *testing.T) {
},
Spec: v1alpha1.AnalysisRunSpec{
TTLStrategy: &v1alpha1.TTLStrategy{
SecondsAfterCompletion: pointer.Int32Ptr(1),
SecondsAfterCompletion: ptr.To[int32](1),
},
},
Status: v1alpha1.AnalysisRunStatus{

View File

@ -5,12 +5,13 @@ import (
"sync"
"time"
"github.com/argoproj/argo-rollouts/metric"
jobProvider "github.com/argoproj/argo-rollouts/metricproviders/job"
"github.com/aws/smithy-go/ptr"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"github.com/argoproj/argo-rollouts/metric"
jobProvider "github.com/argoproj/argo-rollouts/metricproviders/job"
unstructuredutil "github.com/argoproj/argo-rollouts/utils/unstructured"
log "github.com/sirupsen/logrus"

View File

@ -3,7 +3,6 @@ package main
import (
"os"
logutil "github.com/argoproj/argo-rollouts/utils/log"
log "github.com/sirupsen/logrus"
"k8s.io/cli-runtime/pkg/genericclioptions"
_ "k8s.io/client-go/plugin/pkg/client/auth/azure"
@ -11,6 +10,8 @@ import (
_ "k8s.io/client-go/plugin/pkg/client/auth/oidc"
"k8s.io/klog/v2"
logutil "github.com/argoproj/argo-rollouts/utils/log"
"github.com/argoproj/argo-rollouts/pkg/kubectl-argo-rollouts/cmd"
"github.com/argoproj/argo-rollouts/pkg/kubectl-argo-rollouts/options"
)

View File

@ -7,8 +7,6 @@ import (
"strings"
"time"
"github.com/argoproj/argo-rollouts/metricproviders"
"github.com/argoproj/argo-rollouts/utils/record"
"github.com/argoproj/pkg/kubeclientmetrics"
smiclientset "github.com/servicemeshinterface/smi-sdk-go/pkg/gen/client/split/clientset/versioned"
log "github.com/sirupsen/logrus"
@ -24,6 +22,11 @@ import (
_ "k8s.io/client-go/plugin/pkg/client/auth/oidc"
"k8s.io/client-go/tools/clientcmd"
"github.com/argoproj/argo-rollouts/metricproviders"
"github.com/argoproj/argo-rollouts/rollout"
"github.com/argoproj/argo-rollouts/utils/errors"
"github.com/argoproj/argo-rollouts/utils/record"
"github.com/argoproj/argo-rollouts/controller"
"github.com/argoproj/argo-rollouts/controller/metrics"
jobprovider "github.com/argoproj/argo-rollouts/metricproviders/job"
@ -66,6 +69,9 @@ func newCommand() *cobra.Command {
analysisThreads int
serviceThreads int
ingressThreads int
ephemeralMetadataThreads int
targetGroupBindingVersion string
albTagKeyResourceID string
istioVersion string
trafficSplitVersion string
traefikAPIGroup string
@ -99,12 +105,13 @@ func newCommand() *cobra.Command {
}
logutil.SetKLogLogger(logger)
logutil.SetKLogLevel(klogLevel)
log.WithField("version", version.GetVersion()).Info("Argo Rollouts starting")
// set up signals so we handle the first shutdown signal gracefully
ctx := signals.SetupSignalHandlerContext()
defaults.SetVerifyTargetGroup(awsVerifyTargetGroup)
defaults.SetTargetGroupBindingAPIVersion(targetGroupBindingVersion)
defaults.SetalbTagKeyResourceID(albTagKeyResourceID)
defaults.SetIstioAPIVersion(istioVersion)
defaults.SetAmbassadorAPIVersion(ambassadorVersion)
defaults.SetSMIAPIVersion(trafficSplitVersion)
@ -113,30 +120,36 @@ func newCommand() *cobra.Command {
defaults.SetTraefikVersion(traefikVersion)
config, err := clientConfig.ClientConfig()
checkError(err)
errors.CheckError(err)
config.QPS = qps
config.Burst = burst
namespace := metav1.NamespaceAll
configNS, _, err := clientConfig.Namespace()
checkError(err)
errors.CheckError(err)
if namespaced {
namespace = configNS
log.Infof("Using namespace %s", namespace)
}
log.WithFields(log.Fields{
"version": version.GetVersion(),
"namespace": namespace,
"instanceID": instanceID,
"metricsPort": metricsPort,
"healthzPort": healthzPort,
}).Info("Argo Rollouts controller starting")
k8sRequestProvider := &metrics.K8sRequestsCountProvider{}
kubeclientmetrics.AddMetricsTransportWrapper(config, k8sRequestProvider.IncKubernetesRequest)
kubeClient, err := kubernetes.NewForConfig(config)
checkError(err)
errors.CheckError(err)
argoprojClient, err := clientset.NewForConfig(config)
checkError(err)
errors.CheckError(err)
dynamicClient, err := dynamic.NewForConfig(config)
checkError(err)
errors.CheckError(err)
discoveryClient, err := discovery.NewDiscoveryClientForConfig(config)
checkError(err)
errors.CheckError(err)
smiClient, err := smiclientset.NewForConfig(config)
checkError(err)
errors.CheckError(err)
resyncDuration := time.Duration(rolloutResyncPeriod) * time.Second
kubeInformerFactory := kubeinformers.NewSharedInformerFactoryWithOptions(
kubeClient,
@ -147,7 +160,7 @@ func newCommand() *cobra.Command {
options.LabelSelector = instanceIDSelector.String()
}
jobKubeClient, _, err := metricproviders.GetAnalysisJobClientset(kubeClient)
checkError(err)
errors.CheckError(err)
jobNs := metricproviders.GetAnalysisJobNamespace()
if jobNs == "" {
// if not set explicitly use the configured ns
@ -202,9 +215,9 @@ func newCommand() *cobra.Command {
)
mode, err := ingressutil.DetermineIngressMode(ingressVersion, kubeClient.DiscoveryClient)
checkError(err)
errors.CheckError(err)
ingressWrapper, err := ingressutil.NewIngressWrapper(mode, kubeClient, kubeInformerFactory)
checkError(err)
errors.CheckError(err)
if pprofAddress != "" {
mux := controller.NewPProfServer()
@ -214,7 +227,7 @@ func newCommand() *cobra.Command {
var cm *controller.Manager
enabledControllers, err := getEnabledControllers(controllersEnabled)
checkError(err)
errors.CheckError(err)
// currently only supports running analysis controller independently
if enabledControllers[controllerAnalysis] {
@ -270,7 +283,8 @@ func newCommand() *cobra.Command {
istioDynamicInformerFactory,
namespaced,
kubeInformerFactory,
jobInformerFactory)
jobInformerFactory,
ephemeralMetadataThreads)
}
if err = cm.Run(ctx, rolloutThreads, serviceThreads, ingressThreads, experimentThreads, analysisThreads, electOpts); err != nil {
log.Fatalf("Error running controller: %s", err.Error())
@ -288,7 +302,7 @@ func newCommand() *cobra.Command {
command.Flags().StringVar(&logLevel, "loglevel", "info", "Set the logging level. One of: debug|info|warn|error")
command.Flags().StringVar(&logFormat, "logformat", "", "Set the logging format. One of: text|json")
command.Flags().IntVar(&klogLevel, "kloglevel", 0, "Set the klog logging level")
command.Flags().IntVar(&metricsPort, "metricsport", controller.DefaultMetricsPort, "Set the port the metrics endpoint should be exposed over")
command.Flags().IntVar(&metricsPort, "metricsPort", controller.DefaultMetricsPort, "Set the port the metrics endpoint should be exposed over")
command.Flags().IntVar(&healthzPort, "healthzPort", controller.DefaultHealthzPort, "Set the port the healthz endpoint should be exposed over")
command.Flags().StringVar(&instanceID, "instance-id", "", "Indicates which argo rollout objects the controller should operate on")
command.Flags().Float32Var(&qps, "qps", defaults.DefaultQPS, "Maximum QPS (queries per second) to the K8s API server")
@ -298,11 +312,14 @@ func newCommand() *cobra.Command {
command.Flags().IntVar(&analysisThreads, "analysis-threads", controller.DefaultAnalysisThreads, "Set the number of worker threads for the Experiment controller")
command.Flags().IntVar(&serviceThreads, "service-threads", controller.DefaultServiceThreads, "Set the number of worker threads for the Service controller")
command.Flags().IntVar(&ingressThreads, "ingress-threads", controller.DefaultIngressThreads, "Set the number of worker threads for the Ingress controller")
command.Flags().IntVar(&ephemeralMetadataThreads, "ephemeral-metadata-threads", rollout.DefaultEphemeralMetadataThreads, "Set the number of worker threads for the Ephemeral Metadata reconciler")
command.Flags().StringVar(&targetGroupBindingVersion, "aws-target-group-binding-api-version", defaults.DefaultTargetGroupBindingAPIVersion, "Set the default AWS TargetGroupBinding apiVersion that controller uses when verifying target group weights.")
command.Flags().StringVar(&albTagKeyResourceID, "alb-tag-key-resource-id", defaults.DefaultAlbTagKeyResourceID, "Set the default AWS LoadBalancer tag key for resource ID that controller uses when verifying target group weights.")
command.Flags().StringVar(&istioVersion, "istio-api-version", defaults.DefaultIstioVersion, "Set the default Istio apiVersion that controller should look when manipulating VirtualServices.")
command.Flags().StringVar(&ambassadorVersion, "ambassador-api-version", defaults.DefaultAmbassadorVersion, "Set the Ambassador apiVersion that controller should look when manipulating Ambassador Mappings.")
command.Flags().StringVar(&trafficSplitVersion, "traffic-split-api-version", defaults.DefaultSMITrafficSplitVersion, "Set the default TrafficSplit apiVersion that controller uses when creating TrafficSplits.")
command.Flags().StringVar(&traefikAPIGroup, "traefik-api-group", defaults.DefaultTraefikAPIGroup, "Set the default Traerfik apiGroup that controller uses.")
command.Flags().StringVar(&traefikVersion, "traefik-api-version", defaults.DefaultTraefikVersion, "Set the default Traerfik apiVersion that controller uses.")
command.Flags().StringVar(&traefikAPIGroup, "traefik-api-group", defaults.DefaultTraefikAPIGroup, "Set the default Traefik apiGroup that controller uses.")
command.Flags().StringVar(&traefikVersion, "traefik-api-version", defaults.DefaultTraefikVersion, "Set the default Traefik apiVersion that controller uses.")
command.Flags().StringVar(&ingressVersion, "ingress-api-version", "", "Set the Ingress apiVersion that the controller should use.")
command.Flags().StringVar(&appmeshCRDVersion, "appmesh-crd-version", defaults.DefaultAppMeshCRDVersion, "Set the default AppMesh CRD Version that controller uses when manipulating resources.")
command.Flags().StringArrayVar(&albIngressClasses, "alb-ingress-classes", defaultALBIngressClass, "Defines all the ingress class annotations that the alb ingress controller operates on. Defaults to alb")
@ -366,12 +383,6 @@ func createFormatter(logFormat string) log.Formatter {
return formatType
}
func checkError(err error) {
if err != nil {
log.Fatal(err)
}
}
func getEnabledControllers(controllersEnabled []string) (map[string]bool, error) {
enabledControllers := make(map[string]bool)
for _, controller := range controllersEnabled {

View File

@ -13,9 +13,10 @@ import (
istioutil "github.com/argoproj/argo-rollouts/utils/istio"
rolloutsConfig "github.com/argoproj/argo-rollouts/utils/config"
goPlugin "github.com/hashicorp/go-plugin"
rolloutsConfig "github.com/argoproj/argo-rollouts/utils/config"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/client-go/dynamic/dynamicinformer"
@ -281,6 +282,7 @@ func NewManager(
namespaced bool,
kubeInformerFactory kubeinformers.SharedInformerFactory,
jobInformerFactory kubeinformers.SharedInformerFactory,
ephemeralMetadataThreads int,
) *Manager {
runtime.Must(rolloutscheme.AddToScheme(scheme.Scheme))
log.Info("Creating event broadcaster")
@ -345,6 +347,7 @@ func NewManager(
IngressWorkQueue: ingressWorkqueue,
MetricsServer: metricsServer,
Recorder: recorder,
EphemeralMetadataThreads: ephemeralMetadataThreads,
})
experimentController := experiments.NewController(experiments.ControllerConfig{

View File

@ -269,6 +269,7 @@ func TestNewManager(t *testing.T) {
false,
nil,
nil,
rolloutController.DefaultEphemeralMetadataThreads,
)
assert.NotNil(t, cm)

View File

@ -10,9 +10,10 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"sigs.k8s.io/yaml"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
)
const (

View File

@ -9,11 +9,12 @@ import (
"testing"
"time"
"github.com/argoproj/argo-rollouts/utils/defaults"
"github.com/stretchr/testify/assert"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/tools/cache"
"github.com/argoproj/argo-rollouts/utils/defaults"
"github.com/argoproj/argo-rollouts/pkg/client/clientset/versioned/fake"
informerfactory "github.com/argoproj/argo-rollouts/pkg/client/informers/externalversions"
logutil "github.com/argoproj/argo-rollouts/utils/log"

View File

@ -1,8 +1,9 @@
package metrics
import (
"github.com/argoproj/argo-rollouts/utils/version"
"github.com/prometheus/client_golang/prometheus"
"github.com/argoproj/argo-rollouts/utils/version"
)
// Follow Prometheus naming practices

View File

@ -10,10 +10,11 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"sigs.k8s.io/yaml"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
"github.com/argoproj/argo-rollouts/utils/conditions"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
"github.com/argoproj/argo-rollouts/utils/conditions"
)
const (

View File

@ -1,24 +1,21 @@
package controller
import (
"fmt"
"net/http"
"net/http/pprof"
)
const (
ProfilingPath = "/debug/pprof"
)
// NewPProfServer returns a new pprof server to gather runtime profiling data
func NewPProfServer() *http.ServeMux {
mux := http.NewServeMux()
mux.HandleFunc(ProfilingPath, pprof.Index)
mux.HandleFunc(fmt.Sprintf("%s/cmdline", ProfilingPath), pprof.Cmdline)
mux.HandleFunc(fmt.Sprintf("%s/profile", ProfilingPath), pprof.Profile)
mux.HandleFunc(fmt.Sprintf("%s/symbol", ProfilingPath), pprof.Symbol)
mux.HandleFunc(fmt.Sprintf("%s/trace", ProfilingPath), pprof.Trace)
// TODO: Remove enumerating all pprof endpoints if/when a more ergonomic
// attachment solution is introduced. See: https://github.com/golang/go/issues/71213.
mux.HandleFunc("/debug/pprof/", pprof.Index)
mux.HandleFunc("/debug/pprof/cmdline/", pprof.Cmdline)
mux.HandleFunc("/debug/pprof/profile/", pprof.Profile)
mux.HandleFunc("/debug/pprof/symbol/", pprof.Symbol)
mux.HandleFunc("/debug/pprof/trace/", pprof.Trace)
return mux
}

View File

@ -114,6 +114,24 @@ To run a subset of e2e tests, you need to specify the suite with `-run`, and the
E2E_TEST_OPTIONS="-run 'TestCanarySuite' -testify.m 'TestCanaryScaleDownOnAbortNoTrafficRouting'" make test-e2e
```
Available test suites [are the following](https://github.com/argoproj/argo-rollouts/tree/master/test/e2e):
* `TestBlueGreenSuite`
* `TestCanarySuite`
* `TestAnalysisSuite`
* `TestExperimentSuite`
* `TestFunctionalSuite`
* `TestRollbackSuite`
* `TestIstioSuite`
* `TestHeaderRoutingSuite` (Istio only)
* `TestMirrorRouteSuite` (Istio only)
* `TestAPISIXSuite`
* `TestAppMeshSuite`
* `TestAWSSuite`
* `StepPluginSuite`
* `SMISuite` (SMI is [deprecated](https://www.cncf.io/blog/2023/10/03/cncf-archives-the-service-mesh-interface-smi-project/))
* `SMIIngressSuite` (SMI is [deprecated](https://www.cncf.io/blog/2023/10/03/cncf-archives-the-service-mesh-interface-smi-project/))
## Running the UI
If you'd like to run the UI locally, you first need a running Rollouts controller. This can be a locally running controller with a k3d cluster, as described above, or a controller running in a remote Kubernetes cluster.

View File

@ -15,7 +15,7 @@ Argo CD understands the health of Argo Rollouts resources via Argo CDs [Lua h
As a result, an operator can build automation to react to the states of the Argo Rollouts resources. For example, if a Rollout created by Argo CD is paused, Argo CD detects that and marks the Application as suspended. Once the new version is verified to be good, the operator can use Argo CDs resume resource action to unpause the Rollout so it can continue to make progress.
### Can we run the Argo Rollouts kubectl plugin commands via Argo CD?
Argo CD supports running Lua scripts to modify resource kinds (i.e. suspending a CronJob by setting the `.spec.suspend` to true). These Lua Scripts can be configured in the argocd-cm ConfigMap or upstreamed to the Argo CD's [resource_customizations](https://github.com/argoproj/argo-cd/tree/master/resource_customizations) directory. These custom actions have two Lua scripts: one to modify the said resource and another to detect if the action can be executed (i.e. A user should not be able to resuming a unpaused Rollout). Argo CD allows users to execute these actions via the UI or CLI.
Argo CD supports running Lua scripts to modify resource kinds (i.e. suspending a CronJob by setting the `.spec.suspend` to true). These Lua Scripts can be configured in the argocd-cm ConfigMap or upstreamed to the Argo CD's [resource_customizations](https://github.com/argoproj/argo-cd/tree/master/resource_customizations) directory. These custom actions have two Lua scripts: one to modify the said resource and another to detect if the action can be executed (i.e. A user should not be able to resuming an unpaused Rollout). Argo CD allows users to execute these actions via the UI or CLI.
In the CLI, a user (or a CI system) can run
```bash
@ -47,6 +47,10 @@ Yes. A k8s cluster can run multiple replicas of Argo-rollouts controllers to ach
No you cannot do that (even though Argo CD can work that way). This is by design because the Rollout is a custom resource unknown to vanilla Kubernetes. You need the Rollout CRD as well as the controller in the deployment cluster (every cluster that will use workloads with Rollouts).
### What is the version skew policy between the controller and the kubectl plugin?
The Argo Rollout CLI/Kubectl plugin just patches the Rollout object or reads fields from it. [There is no separate "Argo Rollouts API"](../best-practices#there-is-no-argo-rollouts-api). Old versions of the plugin might not understand new fields that are added in the [Rollout specification](../features/specification/). We have never made a breaking change intentionally (removed something from the Rollout Spec). So old clients should work even with newer Rollout versions (excluding new features).
## Rollouts
### Which deployment strategies does Argo Rollouts support?

View File

@ -57,29 +57,29 @@ stringData:
Let me know if there's anything else you'd like to adjust!
```yaml
apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
name: loq-error-rate
spec:
args:
- name: service-name
metrics:
- name: error-rate
```yaml
apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
name: loq-error-rate
spec:
args:
- name: service-name
metrics:
- name: error-rate
interval: 5m
successCondition: result <= 0.01
failureLimit: 3
provider:
datadog:
apiVersion: v2
interval: 5m
successCondition: result <= 0.01
failureLimit: 3
provider:
datadog:
apiVersion: v2
interval: 5m
secretRef:
name: "mysecret"
namespaced: true
query: |
sum:requests.error.rate{service:{{args.service-name}}}
```
secretRef:
name: "mysecret"
namespaced: true
query: |
sum:requests.error.rate{service:{{args.service-name}}}
```
@ -194,7 +194,7 @@ successCondition: default(result, 0) < 0.05
#### Metric aggregation (v2 only)
By default, Datadog analysis run is configured to use `last` metric aggregator when querying Datadog v2 API. This value can be overriden by specifying a new `aggregator` value from a list of supported aggregators (`avg,min,max,sum,last,percentile,mean,l2norm,area`) for the V2 API ([docs](https://docs.datadoghq.com/api/latest/metrics/#query-scalar-data-across-multiple-products)).
By default, Datadog analysis run is configured to use `last` metric aggregator when querying Datadog v2 API. This value can be overridden by specifying a new `aggregator` value from a list of supported aggregators (`avg,min,max,sum,last,percentile,mean,l2norm,area`) for the V2 API ([docs](https://docs.datadoghq.com/api/latest/metrics/#query-scalar-data-across-multiple-products)).
For example, using count-based distribution metric (`count:metric{*}.as_count()`) with values `1,9,3,7,5` in a given `interval` will make `last` aggregator return `5`. To return a sum of all values (`25`), set `aggregator: sum` in Datadog provider block and use `moving_rollup()` function to aggregate values in the specified rollup interval. These functions can be combined in a `formula` to perform additional calculations:

View File

@ -13,7 +13,7 @@ here: [rollouts-plugin-metric-sample-prometheus](https://github.com/argoproj-lab
## Installing
There are two methods of installing and using an argo rollouts plugin. The first method is to mount up the plugin executable
into the rollouts controller container. The second method is to use a HTTP(S) server to host the plugin executable.
into the rollouts controller container. The second method is to use an HTTP(S) server to host the plugin executable.
### Mounting the plugin executable into the rollouts controller container
@ -33,11 +33,11 @@ metadata:
name: argo-rollouts-config
data:
metricProviderPlugins: |-
- name: "argoproj-labs/sample-prometheus" # name of the plugin, it must match the name required by the plugin so it can find it's configuration
- name: "argoproj-labs/sample-prometheus" # name of the plugin, it must match the name required by the plugin so it can find its configuration
location: "file://./my-custom-plugin" # supports http(s):// urls and file://
```
### Using a HTTP(S) server to host the plugin executable
### Using an HTTP(S) server to host the plugin executable
!!! warning "Installing a plugin with http(s)"
@ -52,7 +52,7 @@ data:
deleted during a server outage, the other pods will still be able to take over because there will already be a plugin executable available to it. It is the
responsibility of the Argo Rollouts administrator to define the plugin installation method considering the risks of each approach.
Argo Rollouts supports downloading the plugin executable from a HTTP(S) server. To use this method, you will need to
Argo Rollouts supports downloading the plugin executable from an HTTP(S) server. To use this method, you will need to
configure the controller via the `argo-rollouts-config` configmap and set `pluginLocation` to a http(s) url. Example:
```yaml
@ -62,7 +62,7 @@ metadata:
name: argo-rollouts-config
data:
metricProviderPlugins: |-
- name: "argoproj-labs/sample-prometheus" # name of the plugin, it must match the name required by the plugin so it can find it's configuration
- name: "argoproj-labs/sample-prometheus" # name of the plugin, it must match the name required by the plugin so it can find its configuration
location: "https://github.com/argoproj-labs/rollouts-plugin-metric-sample-prometheus/releases/download/v0.0.4/metric-plugin-linux-amd64" # supports http(s):// urls and file://
sha256: "dac10cbf57633c9832a17f8c27d2ca34aa97dd3d" #optional sha256 checksum of the plugin executable
headersFrom: #optional headers for the download via http request

View File

@ -137,7 +137,7 @@ spec:
authentication:
oauth2:
tokenUrl: https://my-oauth2-provider/token
clientId: my-cliend-id
clientId: my-client-id
clientSecret: "{{ args.oauthSecret }}"
scopes: [
"my-oauth2-scope"

View File

@ -1,7 +1,7 @@
# Web Metrics
An HTTP request can be performed against some external service to obtain the measurement. This example
makes a HTTP GET request to some URL. The webhook response must return JSON content. The result of
makes an HTTP GET request to some URL. The webhook response must return JSON content. The result of
the optional `jsonPath` expression will be assigned to the `result` variable that can be referenced
in the `successCondition` and `failureCondition` expressions. If omitted, will use the entire body
of the as the result variable.
@ -143,7 +143,7 @@ spec:
authentication:
oauth2:
tokenUrl: https://my-oauth2-provider/token
clientId: my-cliend-id
clientId: my-client-id
clientSecret: "{{ args.oauthSecret }}"
scopes: [
"my-oauth2-scope"

View File

@ -53,7 +53,7 @@ div[data-md-component=announce]>div#announce-msg>a{
}
/* from https://assets.readthedocs.org/static/css/badge_only.css,
most styles have to be overriden here */
most styles have to be overridden here */
.rst-versions{
position: relative !important;
bottom: 0;

View File

@ -13,7 +13,7 @@ Note that using Argo Rollouts for "infrastructure" applications such as cert-man
## Understand the scope of Argo Rollouts
Currently Argo Rollouts works with a single Kubernetes deployment/application and within a single cluster only. You also need to have the controller deployed on *every* cluster where a Rollout is running if have more than one clusters using Rollout workloads.
Currently, Argo Rollouts works with a single Kubernetes deployment/application and within a single cluster only. You also need to have the controller deployed on *every* cluster where a Rollout is running if have more than one clusters using Rollout workloads.
If you want to look at multiple-services on multiple clusters
see discussion at issues [2737](https://github.com/argoproj/argo-rollouts/issues/2737), [451](https://github.com/argoproj/argo-rollouts/issues/451) and [2088](https://github.com/argoproj/argo-rollouts/issues/2088).
@ -37,11 +37,11 @@ Then somebody deploys 1.5
1. Some people believe that the new state should be 1.3 stable and 1.5 as preview
1. Some people believe that the new state should be 1.4 stable and 1.5 as preview
Currently Argo Rollouts follows the first approach, under the assumption that something was really wrong with 1.4 and 1.5 is the hotfix.
Currently, Argo Rollouts follows the first approach, under the assumption that something was really wrong with 1.4 and 1.5 is the hotfix.
And then let's say that 1.5 has an issue. Some people believe that Argo rollouts should "rollback" to 1.3 while other people think it should rollback to 1.4
Currently Argo Rollouts assumes that the version to rollback is always 1.3 regardless of how many "hotfixes" have been previewed in-between.
Currently, Argo Rollouts assumes that the version to rollback is always 1.3 regardless of how many "hotfixes" have been previewed in-between.
All these problems are not present if you make the assumption that each release stays active only for a minimal time and you always create one new version when the previous one has finished.
@ -144,7 +144,7 @@ spec:
number: 443
```
The above technique has the a benefit in that it would not incur additional cost of allocating
The above technique has a benefit in that it would not incur additional cost of allocating
additional load balancers.
## Reducing operator memory usage

View File

@ -75,4 +75,4 @@ Here is a summary table for the possible approaches.
| Advanced routing scenarios | No | No | Yes |
| Failure Blast Radius | Massive impact | Low impact | Low impact |
Note that that traffic manager can be any compatible Service Mesh or Ingress Controller or Gateway API implementation (via a plugin).
Note that the traffic manager can be any compatible Service Mesh or Ingress Controller or Gateway API implementation (via a plugin).

View File

@ -759,6 +759,67 @@ The entire analysis run is considered as Failed after three failed measurements.
))
```
## ConsecutiveSuccessLimit and FailureLimit
!!! important
`consecutiveSuccessLimit` available since v1.8
You can use either `failureLimit` to define a limit for the number of failures before the analysis is considered failed, `consecutiveSuccessLimit` to define the required consecutive number of successes for the analysis to succeed, or both together. One of them has to be applicable (i.e. not disabled, see below for more), otherwise a validation error is thrown.
To disable:
* `failureLimit`, set the field to `-1`.
* `consecutiveSuccessLimit`, set the field to `0` (the default value).
The default value for both is `0`, the meaning of which differs for each one of them. A value of `0` for `failureLimit` means its logic _is_ applicable and no failures are tolerated. However, a value of `0` for `consecutiveSuccessLimit` means it's inapplicable or disabled.
Let's go through each case and show what the behavior would look like.
### Only FailureLimit applicable
The behavior is shown above in the [Failure Conditions and Failure Limit](#failure-conditions-and-failure-limit) section. This is the default behavior if you set nothing of the two fields (with `failureLimit` having a default value of `0`, so no failures are tolerated).
### Only ConsecutiveSuccessLimit applicable
To have this behavior, you need to have something like
```yaml
failureLimit: -1
consecutiveSuccessLimit: 4 # Any value > 0
```
This behavior is essentially waiting for a condition to hold, or an event to happen. That is, keep measuring a metric and keep failing until you measure `N` consecutive successful measurements, at which point the analysis concludes successfully. This can be useful as an event-driven way of promoting a rollout when used in an inline analysis.
### Both FailureLimit and ConsecutiveSuccessLimit applicable
To have this behavior, you need to have something like
```yaml
failureLimit: 3 # Any value >= 0
consecutiveSuccessLimit: 4 # Any value > 0
```
The behavior is simply waiting to measure `N` consecutive successful measurements, _while_ being limited by the number of overall failures specified by `failureLimit`. Above, we need to have at most 3 failures before we get 4 consecutive successful measurements for the analysis to be considered successful.
In case of an analysis that has `count` specified (that is, runs for a specific amount of time) and that `count` is reached, the evaluation of success is as follows:
* `failureLimit` is violated and `consecutiveSuccessLimit` is satisfied: Failure.
* `failureLimit` is violated and `consecutiveSuccessLimit` is not satisfied: Failure.
* `failureLimit` is not violated and `consecutiveSuccessLimit` is satisfied: Success.
* `failureLimit` is not violated and `consecutiveSuccessLimit` is not satisfied: Inconclusive State.
As illustrated, `failureLimit` takes priority if violated. However, if neither is violated/satisfied, the analysis reaches an inconclusive state.
!!! note
When terminating analyses prematurely, they are always terminated successfully, unless it happens that `failureLimit` is enabled and violated, then they terminate in failure. `consecutiveSuccessLimit`, if enabled, doesn't affect the termination status.
For more clarity, examples of analyses terminated "prematurely":
* A background analysis with `count` not specified when terminated at the end of the rollout.
* Any analysis with `count` specified and not yet reached when the rollout is aborted.
## Dry-Run Mode
!!! important
@ -1090,7 +1151,7 @@ A use case for having `Inconclusive` analysis runs are to enable Argo Rollouts t
whether or not measurement value is acceptable and decide to proceed or abort.
## Delay Analysis Runs
If the analysis run does not need to start immediately (i.e give the metric provider time to collect
If the analysis run does not need to start immediately (i.e. give the metric provider time to collect
metrics on the canary version), Analysis Runs can delay the specific metric analysis. Each metric
can be configured to have a different delay. In additional to the metric specific delays, the rollouts
with background analysis can delay creating an analysis run until a certain step is reached

View File

@ -42,7 +42,7 @@ This feature will not modify any of the ReplicaSet's pre-existing affinity rules
Users have a choice between these scheduling rules: `RequiredDuringSchedulingIgnoredDuringExecution` and `PreferredDuringSchedulingIgnoredDuringExecution`.
`RequiredDuringSchedulingIgnoredDuringExecution` requires a new version's pods to be on a separate node than the previous versions. If this
is not possible, the the new version's pods will not be scheduled.
is not possible, the new version's pods will not be scheduled.
```yaml
strategy:

View File

@ -11,6 +11,12 @@ When there is a change to the `.spec.template` field of a rollout, the controlle
!!! important
When the rollout changes the selector on a service, there is a propagation delay before all the nodes update their IP tables to send traffic to the new pods instead of the old. During this delay, traffic will be directed to the old pods if the nodes have not been updated yet. In order to prevent the packets from being sent to a node that killed the old pod, the rollout uses the scaleDownDelaySeconds field to give nodes enough time to broadcast the IP table changes.
!!! important
ALB Ingress with Rollouts blue-green strategy is not supported without a chance of downtime.
When using an AWS ALB to route traffic to a service, the ALB Ingress Controller does not update the target groups in an atomic or safe manner. This can result in a situation where, during a deployment, the stable target group temporarily has no pods registered. This occurs because the ALB Controller removes all current pods from the target group before registering pods from the desired ReplicaSet.
The desired pods must pass their initial configured health check on the stable target group to be considered healthy by the ALB. This creates a risk where the ALB may temporarily have no healthy pods registered to the target group, depending on the timing of deregistration and registration of new pods. This can lead to application downtime that the rollouts controller cannot prevent.
## Example
```yaml
@ -98,7 +104,7 @@ Setting a positive non-zero value here would make the rollout automatically prom
Defaults to nil
### antiAffinity
Check out the [Anti Affinity document](anti-affinity/anti-affinity.md) document for more information.
Check out the [Anti Affinity document](anti-affinity/anti-affinity.md) for more information.
Defaults to nil

View File

@ -90,7 +90,7 @@ match the traffic weight. Some use cases for this:
Setting canary scale is only available when using the canary strategy with a traffic router, since the basic canary needs to control canary scale in order to approximate canary weight.
To control canary scales and weights during steps, use the `setCanaryScale` step and indicate which scale the
To control canary scales and weights during steps, use the `setCanaryScale` step and indicate which scale
the canary should use:
- explicit replica count without changing traffic weight (`replicas`)
@ -196,13 +196,13 @@ spec:
### analysis
Configure the background [Analysis](analysis.md) to execute during the rollout. If the analysis is unsuccessful the rollout will be aborted.
Configure the background [Analysis](../analysis.md) to execute during the rollout. If the analysis is unsuccessful the rollout will be aborted.
Defaults to nil
### antiAffinity
Check out the [Anti Affinity document](anti-affinity/anti-affinity.md) document for more information.
Check out the [Anti Affinity](../anti-affinity/anti-affinity.md) document for more information.
Defaults to nil
@ -232,6 +232,6 @@ Defaults to 25%
### trafficRouting
The [traffic management](traffic-management/index.md) rules to apply to control the flow of traffic between the active and canary versions. If not set, the default weighted pod replica based routing will be used.
The [traffic management](../traffic-management/index.md) rules to apply to control the flow of traffic between the active and canary versions. If not set, the default weighted pod replica based routing will be used.
Defaults to nil

View File

@ -12,7 +12,7 @@ to support executing arbitrary steps during the canary. Rollout's uses a plugin
## Installing
There are two methods of installing and using an Argo Rollouts plugin. The first method is to mount up the plugin executable
into the rollouts controller container. The second method is to use a HTTP(S) server to host the plugin executable.
into the rollouts controller container. The second method is to use an HTTP(S) server to host the plugin executable.
### Mounting the plugin executable into the rollouts controller container
@ -32,11 +32,11 @@ metadata:
name: argo-rollouts-config
data:
stepPlugins: |-
- name: "argoproj-labs/sample-step" # name of the plugin, it must match the name required by the plugin so it can find it's configuration
- name: "argoproj-labs/sample-step" # name of the plugin, it must match the name required by the plugin so it can find its configuration
location: "file://./my-custom-plugin" # supports http(s):// urls and file://
```
### Using a HTTP(S) server to host the plugin executable
### Using an HTTP(S) server to host the plugin executable
!!! warning "Installing a plugin with http(s)"
@ -51,7 +51,7 @@ data:
deleted during a server outage, the other pods will still be able to take over because there will already be a plugin executable available to it. It is the
responsibility of the Argo Rollouts administrator to define the plugin installation method considering the risks of each approach.
Argo Rollouts supports downloading the plugin executable from a HTTP(S) server. To use this method, you will need to
Argo Rollouts supports downloading the plugin executable from an HTTP(S) server. To use this method, you will need to
configure the controller via the `argo-rollouts-config` ConfigMap and set `pluginLocation` to a http(s) url. Example:
```yaml
@ -61,7 +61,7 @@ metadata:
name: argo-rollouts-config
data:
stepPlugins: |-
- name: "argoproj-labs/sample-nginx" # name of the plugin, it must match the name required by the plugin so it can find it's configuration
- name: "argoproj-labs/sample-nginx" # name of the plugin, it must match the name required by the plugin so it can find its configuration
location: "https://github.com/argoproj-labs/rollouts-plugin-trafficrouter-sample-nginx/releases/download/v0.0.1/metric-plugin-linux-amd64" # supports http(s):// urls and file://
sha256: "08f588b1c799a37bbe8d0fc74cc1b1492dd70b2c" # optional sha256 checksum of the plugin executable
```

View File

@ -2,19 +2,31 @@
!!! important
Available for canary rollouts since v0.10.0
This is an **optional** feature of Argo Rollouts that allows you to have more visibility while a rollout is in progress. You do **NOT** need to use emphemeral metadata in order to achieve the main functionality of Argo Rollouts.
!!! important
Normally during a deployment, Argo Rollouts automatically handles the pods of the new and old versions along with their labels and their association with your traffic provider (if you use one).
Available for blue-green rollouts since v1.0
In some scenarios however,
One use case is for a Rollout to label or annotate the desired/stable pods with user-defined
1. You might want to annotate the pods of each version with your own custom labels
1. You may want the application itself know when a deployment is happening
Argo Rollouts gives you the capability to label or annotate the desired/stable pods with user-defined
labels/annotations, for _only_ the duration which they are the desired or stable set, and for the
labels to be updated/removed as soon as the ReplicaSet switches roles (e.g. from desired to stable).
The use case which this enables, is to allow prometheus, wavefront, datadog queries and dashboards
In the first use case this allows prometheus, wavefront, datadog queries and dashboards
to be built, which can rely on a consistent list of labels, rather than the `rollouts-pod-template-hash`
which is unpredictable and changing from revision to revision.
In the second use case you can have your application read the labels itself using the [Kubernetes Downward API](https://kubernetes.io/docs/concepts/workloads/pods/downward-api/) and adjust
its behavior automatically only for the duration of the canary/blue/green deployment. For example you could point your application
to a different Queue server while the application pods are in "preview" and only use the production instance of your Queue server
when the pods are marked as "stable".
## Using Ephemeral labels
A Rollout using the canary strategy has the ability to attach ephemeral metadata to the stable or
canary Pods using the `stableMetadata` and `canaryMetadata` fields respectively.
@ -47,12 +59,14 @@ spec:
During an update, the Rollout will create the desired ReplicaSet while also merging the metadata
defined in `canaryMetadata`/`previewMetadata` to the desired ReplicaSet's `spec.template.metadata`.
This results in all Pods of the ReplicaSet being created with the desired metadata. When the rollout
This results in all Pods of the ReplicaSet being created with the desired metadata.
When the rollout
becomes fully promoted, the desired ReplicaSet becomes the stable, and is updated to use the labels
and annotations under `stableMetadata`/`activeMetadata`. The Pods of the ReplicaSet will then be
updated _in place_ to use the stable metadata (without recreating the pods).
!!! important
!!! tip
In order for tooling to take advantage of this feature, they would need to recognize the change in
labels and/or annotations that happen _after_ the Pod has already started. Not all tools may detect
this.
this. For application code apart from the Kubernetes Downward API you also need a programming library that automatically reloads configuration files when they change their contents.

View File

@ -1,4 +1,4 @@
# https://github.com/kubernetes-sigs/kustomize/blob/master/api/konfig/builtinpluginconsts/namereference.go
# https://github.com/kubernetes-sigs/kustomize/blob/master/api/internal/konfig/builtinpluginconsts/namereference.go
nameReference:
- kind: ConfigMap
version: v1
@ -182,7 +182,7 @@ nameReference:
- path: spec/strategy/canary/trafficRouting/ambassador/mappings
kind: Rollout
# https://github.com/kubernetes-sigs/kustomize/blob/master/api/konfig/builtinpluginconsts/commonlabels.go
# https://github.com/kubernetes-sigs/kustomize/blob/master/api/internal/konfig/builtinpluginconsts/commonlabels.go
commonLabels:
- path: spec/selector/matchLabels
create: true
@ -203,13 +203,13 @@ commonLabels:
create: false
kind: Rollout
# https://github.com/kubernetes-sigs/kustomize/blob/master/api/konfig/builtinpluginconsts/commonannotations.go
# https://github.com/kubernetes-sigs/kustomize/blob/master/api/internal/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
# https://github.com/kubernetes-sigs/kustomize/blob/master/api/internal/konfig/builtinpluginconsts/varreference.go
varReference:
- path: spec/template/spec/containers/args
kind: Rollout
@ -262,7 +262,7 @@ varReference:
- 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
# https://github.com/kubernetes-sigs/kustomize/blob/master/api/internal/konfig/builtinpluginconsts/replicas.go
replicas:
- path: spec/replicas
create: true

File diff suppressed because it is too large Load Diff

View File

@ -68,7 +68,7 @@ To enable you need to add a flag to the controller `--self-service-notification-
## Default Trigger templates
Currently the following triggers have [built-in templates](https://github.com/argoproj/argo-rollouts/tree/master/manifests/notifications).
Currently, the following triggers have [built-in templates](https://github.com/argoproj/argo-rollouts/tree/master/manifests/notifications).
* `on-analysis-run-error` when an error occurs during the execution of an analysis run
* `on-analysis-run-failed` when an analysis run fails

View File

@ -23,7 +23,7 @@ argocd app actions run my-app restart --kind Rollout --resource-name my-rollout
```
Both of these mechanisms updates the Rollout's `.spec.restartAt` to the current time in the
form of a [RFC 3339 formatted](https://tools.ietf.org/html/rfc3339) UTC string
form of an [RFC 3339 formatted](https://tools.ietf.org/html/rfc3339) UTC string
(e.g. 2020-03-30T21:19:35Z), which indicates to the Rollout controller that all of a Rollout's
Pods should have been created after this timestamp.

View File

@ -276,7 +276,7 @@ spec:
# Pauses indefinitely until manually resumed
- pause: {}
# set canary scale to a explicit count without changing traffic weight
# set canary scale to an explicit count without changing traffic weight
# (supported only with trafficRouting)
- setCanaryScale:
replicas: 3
@ -291,6 +291,19 @@ spec:
- setCanaryScale:
matchTrafficWeight: true
# The percentage or number of replica pods within the applications ReplicaSet
# that are available and ready when a rollout is ready to be promoted. Useful if your application
# configured an HPA to help handle different loads of traffic, but you still want quick promotions.
# Defaults to 100% if replicaProgressThreshold is not specified.
# The 'type' field should be either "Percent" | "Pod"
# Current percentage that is checked against the input percent value is calculated by the following:
# CURRENT PERCENTAGE = available replicas / desired replicas for the current step
# +optional
- replicaProgressThreshold:
type: Percent
value: 90
# executes the configured plugin by name with the provided configuration
- plugin:
name: example

View File

@ -149,7 +149,7 @@ spec:
By default, a rollout will inject the `alb.ingress.kubernetes.io/actions.<SERVICE-NAME>` annotation
using the service/action name specified under `spec.strategy.canary.stableService`. However, it may
be desirable to specify an explicit service/action name different from the `stableService`. For
example, [one pattern](/argo-rollouts/best-practices/#ingress-desiredstable-host-routes) is to use a single
example, [one pattern](/best-practices/#ingress-desiredstable-host-routes) is to use a single
Ingress containing three different rules to reach the canary, stable, and root service separately
(e.g. for testing purposes). In this case, you may want to specify a "root" service as the
service/action name instead of stable. To do so, reference a service under `rootService` under the
@ -308,6 +308,9 @@ spec:
args: [--aws-verify-target-group]
# NOTE: in v1.0, the --alb-verify-weight flag should be used instead
```
!!! note
The `--aws-region` flag is mandatory for enabling AWS integrations, including TargetGroup verification. If the Argo Rollouts controller does not have the correct AWS region specified, or lacks access to validate the AWS ALB, the promotion process will fail. Ensure that the necessary AWS API permissions are granted to the controller and that the region is correctly configured.
For this feature to work, the argo-rollouts deployment requires the following AWS API permissions
under the [Elastic Load Balancing API](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/Welcome.html):

View File

@ -65,7 +65,7 @@ When Ambassador is configured in the `trafficRouting` attribute of the manifest,
## Endpoint Resolver
By default, Ambassador uses kube-proxy to route traffic to Pods. However we should configure it to bypass kube-proxy and route traffic directly to pods. This will provide true L7 load balancing which is desirable in a canary workflow. This approach is called [endpoint routing](https://www.getambassador.io/docs/latest/topics/running/load-balancer/) and can be achieve by configuring [endpoint resolvers](https://www.getambassador.io/docs/latest/topics/running/resolvers/#the-kubernetes-endpoint-resolver).
By default, Ambassador uses kube-proxy to route traffic to Pods. However we should configure it to bypass kube-proxy and route traffic directly to pods. This will provide true L7 load balancing which is desirable in a canary workflow. This approach is called [endpoint routing](https://www.getambassador.io/docs/latest/topics/running/load-balancer/) and can be achieved by configuring [endpoint resolvers](https://www.getambassador.io/docs/latest/topics/running/resolvers/#the-kubernetes-endpoint-resolver).
To configure Ambassador to use endpoint resolver it is necessary to apply the following resource in the cluster:

View File

@ -175,16 +175,16 @@ spec:
steps:
- setCanaryScale:
weight: 25
- setMirrorRoute:
name: mirror-route
percentage: 35
match:
- method:
exact: GET
path:
prefix: /
- pause:
duration: 10m
- setMirrorRoute:
name: "mirror-route" # removes mirror based traffic route
- setMirrorRoute:
name: mirror-route
percentage: 35
match:
- method:
exact: GET
path:
prefix: /
- pause:
duration: 10m
- setMirrorRoute:
name: "mirror-route" # removes mirror based traffic route
```

View File

@ -19,6 +19,10 @@ are available as options in Argo Rollouts:
1. [Host-level traffic splitting](#host-level-traffic-splitting)
2. [Subset-level traffic splitting](#subset-level-traffic-splitting)
!!! note
When using Istio only traffic that is within the service mesh will follow the rollout strategy. Pods excluded from the service mesh (e.g., because of a `sidecar.istio.io/inject="false"` label) will follow default Kubernetes traffic routing.
## Host-level Traffic Splitting
The first approach to traffic splitting using Argo Rollouts and Istio, is splitting between two
@ -303,7 +307,7 @@ spec:
## Multicluster Setup
If you have [Istio multicluster setup](https://istio.io/latest/docs/setup/install/multicluster/)
where the primary Istio cluster is different than the cluster where the Argo Rollout controller
where the primary Istio cluster is different from the cluster where the Argo Rollout controller
is running, then you need to do the following setup:
1. Create a `ServiceAccount` in the Istio primary cluster.
@ -439,12 +443,12 @@ leverage the following Argo CD features:
ignoreDifferences:
- group: networking.istio.io
kind: VirtualService
jsonPointers:
- /spec/http/0
jqPathExpressions:
- .spec.http[].route[].weight
```
Ignoring the differences in the VirtualServices HTTP route, prevents gitops differences
in the VirtualService HTTP routes to contribute to the overall sync status of the Argo CD
Ignoring the differences in the VirtualServices HTTP route weights, prevents GitOps differences
in the VirtualService HTTP route weights to contribute to the overall sync status of the Argo CD
application. This adds the additional benefit of prevent auto-sync operations from being
triggered.
@ -459,6 +463,7 @@ leverage the following Argo CD features:
syncPolicy:
syncOptions:
- ApplyOutOfSyncOnly=true
- RespectIgnoreDifferences=true
```
By default, when Argo CD syncs an application, it runs `kubectl apply` against all resources in
@ -468,11 +473,6 @@ leverage the following Argo CD features:
feature, provides a way to manage the conflict in the desired state of a VirtualService between
Argo CD and Argo Rollouts.
Argo CD also has an [open issue here](https://github.com/argoproj/argo-cd/issues/2913) which would
help address this problem. The proposed solution is to introduce an annotation to resources, which
indicates to Argo CD to respect and preserve the differences at a specified path, in order to allow
other controllers (e.g. Argo Rollouts) controller manage them instead.
## Ping Pong
!!! important

View File

@ -29,14 +29,14 @@ implement more providers such as Istio, SMI, etc.
### Hybrid Scenarios
In this case, its very similar to avoiding the Big-Bang, either if it is part of the platform roadmap or a new redesign
In this case, it's very similar to avoiding the Big-Bang, either if it is part of the platform roadmap or a new redesign
of the architecture, there are multiple scenarios where having the capacity of using multiple trafficRoutings is very
much in need: gradual implementation, eased rollback of architecture or even for a fallback.
## Requirements
The use of multiple providers requires that both providers comply with its minimum requirements independently.
By example, if you want to use NGiNX and SMI you would need to have both SMI and NGiNX in place and produce the rollout configuration
For example, if you want to use NGiNX and SMI you would need to have both SMI and NGiNX in place and produce the rollout configuration
for both.
```yaml

View File

@ -13,7 +13,7 @@ here: [rollouts-plugin-trafficrouter-sample-nginx](https://github.com/argoproj-l
## Installing
There are two methods of installing and using an argo rollouts plugin. The first method is to mount up the plugin executable
into the rollouts controller container. The second method is to use a HTTP(S) server to host the plugin executable.
into the rollouts controller container. The second method is to use an HTTP(S) server to host the plugin executable.
### Mounting the plugin executable into the rollouts controller container
@ -33,11 +33,11 @@ metadata:
name: argo-rollouts-config
data:
trafficRouterPlugins: |-
- name: "argoproj-labs/sample-nginx" # name of the plugin, it must match the name required by the plugin so it can find it's configuration
- name: "argoproj-labs/sample-nginx" # name of the plugin, it must match the name required by the plugin so it can find its configuration
location: "file://./my-custom-plugin" # supports http(s):// urls and file://
```
### Using a HTTP(S) server to host the plugin executable
### Using an HTTP(S) server to host the plugin executable
!!! warning "Installing a plugin with http(s)"
@ -52,7 +52,7 @@ data:
deleted during a server outage, the other pods will still be able to take over because there will already be a plugin executable available to it. It is the
responsibility of the Argo Rollouts administrator to define the plugin installation method considering the risks of each approach.
Argo Rollouts supports downloading the plugin executable from a HTTP(S) server. To use this method, you will need to
Argo Rollouts supports downloading the plugin executable from an HTTP(S) server. To use this method, you will need to
configure the controller via the `argo-rollouts-config` configmap and set `pluginLocation` to a http(s) url. Example:
```yaml
@ -62,7 +62,7 @@ metadata:
name: argo-rollouts-config
data:
trafficRouterPlugins: |-
- name: "argoproj-labs/sample-nginx" # name of the plugin, it must match the name required by the plugin so it can find it's configuration
- name: "argoproj-labs/sample-nginx" # name of the plugin, it must match the name required by the plugin so it can find its configuration
location: "https://github.com/argoproj-labs/rollouts-plugin-trafficrouter-sample-nginx/releases/download/v0.0.1/metric-plugin-linux-amd64" # supports http(s):// urls and file://
sha256: "08f588b1c799a37bbe8d0fc74cc1b1492dd70b2c" #optional sha256 checksum of the plugin executable
headersFrom: #optional headers for the download via http request

View File

@ -242,7 +242,7 @@ Status:
Events: <none>
```
Here we see the recommendation for cpu, memory with lowerbound, upper bound, Target etc., are provided. If we check the status of the pods.. the older pods with initial configuration would get terminated and newer pods get created.
Here we see the recommendation for cpu, memory with lowerbound, upper bound, Target etc., are provided. If we check the status of the pods, the older pods with initial configuration would get terminated and newer pods get created.
```yaml
# kubectl get po -n test-vpa -w
@ -337,7 +337,7 @@ Events:
## Requirements
In order for the VPA to manipulate the rollout, the Kubernetes cluster hosting the rollout CRD needs the subresources support for CRDs. This feature was introduced as alpha in Kubernetes version 1.10 and transitioned to beta in Kubernetes version 1.11. If a user wants to use VPA on v1.10, the Kubernetes Cluster operator will need to add a custom feature flag to the API server. After 1.10, the flag is turned on by default. Check out the following [link](https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/) for more information on setting the custom feature flag.
When installing VPA you may need to add the following in RBAC configurations for `system:vpa-target-reader` cluster role as by default VPA maynot support rollouts in all the versions.
When installing VPA you may need to add the following in RBAC configurations for `system:vpa-target-reader` cluster role as by default VPA may not support rollouts in all the versions.
```yaml
- apiGroups:

View File

@ -26,7 +26,7 @@ kubectl argo rollouts promote guestbook
kubectl argo rollouts abort guestbook
# Retry the guestbook rollout
kubectl argo rollouts retry guestbook
kubectl argo rollouts retry rollout guestbook
```
## Options

View File

@ -18,7 +18,7 @@ kubectl argo rollouts status ROLLOUT_NAME [flags]
kubectl argo rollouts status guestbook
# Show the rollout status
kubectl argo rollouts status guestbook --watch false
kubectl argo rollouts status guestbook --watch=false
# Watch the rollout until it succeeds, fail if it takes more than 60 seconds
kubectl argo rollouts status --timeout 60s guestbook

View File

@ -4,21 +4,21 @@
The GitHub notification service changes commit status using [GitHub Apps](https://docs.github.com/en/developers/apps) and requires specifying the following settings:
* `appID` - the app id
* `installationID` - the app installation id
* `privateKey` - the app private key
* `enterpriseBaseURL` - optional URL, e.g. https://git.example.com/
- `appID` - the app id
- `installationID` - the app installation id
- `privateKey` - the app private key
- `enterpriseBaseURL` - optional URL, e.g. https://git.example.com/
## Configuration
1. Create a GitHub Apps using https://github.com/settings/apps/new
2. Change repository permissions to enable write commit statuses and/or deployments and/or pull requests comments
![2](https://user-images.githubusercontent.com/18019529/108397381-3ca57980-725b-11eb-8d17-5b8992dc009e.png)
3. Generate a private key, and download it automatically
![3](https://user-images.githubusercontent.com/18019529/108397926-d4a36300-725b-11eb-83fe-74795c8c3e03.png)
4. Install app to account
5. Store privateKey in `argo-rollouts-notification-secret` Secret and configure GitHub integration
in `argo-rollouts-notification-configmap` ConfigMap
1. Change repository permissions to enable write commit statuses and/or deployments and/or pull requests comments
![2](https://user-images.githubusercontent.com/18019529/108397381-3ca57980-725b-11eb-8d17-5b8992dc009e.png)
1. Generate a private key, and download it automatically
![3](https://user-images.githubusercontent.com/18019529/108397926-d4a36300-725b-11eb-83fe-74795c8c3e03.png)
1. Install app to account
1. Store privateKey in `argo-rollouts-notification-secret` Secret and configure GitHub integration
in `argo-rollouts-notification-configmap` ConfigMap
```yaml
apiVersion: v1
@ -77,6 +77,7 @@ template.app-deployed: |
requiredContexts: []
autoMerge: true
transientEnvironment: false
reference: v1.0.0
pullRequestComment:
content: |
Application {{.app.metadata.name}} is now running new version of deployments manifests.
@ -84,9 +85,11 @@ template.app-deployed: |
```
**Notes**:
- If the message is set to 140 characters or more, it will be truncated.
- If `github.repoURLPath` and `github.revisionPath` are same as above, they can be omitted.
- Automerge is optional and `true` by default for github deployments to ensure the requested ref is up to date with the default branch.
Setting this option to `false` is required if you would like to deploy older refs in your default branch.
For more information see the [GitHub Deployment API Docs](https://docs.github.com/en/rest/deployments/deployments?apiVersion=2022-11-28#create-a-deployment).
- If `github.pullRequestComment.content` is set to 65536 characters or more, it will be truncated.
- Reference is optional. When set, it will be used as the ref to deploy. If not set, the revision will be used as the ref to deploy.

View File

@ -91,7 +91,7 @@ kubectl argo rollouts promote rollouts-demo
```
After promotion, Rollout will proceed to execute the remaining steps. The remaining rollout steps
in our example are fully automated, so the Rollout will eventually complete steps until it has has
in our example are fully automated, so the Rollout will eventually complete steps until it has
fully transitioned to the new version. Watch the rollout again until it has completed all steps:
```shell
@ -153,7 +153,7 @@ there is no activity with regards to new ReplicaSets becoming created.
When a Rollout has not yet reached its desired state (e.g. it was aborted, or in the middle of
an update), and the stable manifest were re-applied, the Rollout detects this as a rollback
and *not* a update, and will fast-track the deployment of the stable ReplicaSet by skipping
and *not* an update, and will fast-track the deployment of the stable ReplicaSet by skipping
analysis, and the steps.
## Summary
@ -165,7 +165,7 @@ In this guide, we have learned basic capabilities of Argo Rollouts, including:
* Manual promotion
* Manual abortion
The Rollout in this basic example did not utilize a ingress controller or service mesh provider
The Rollout in this basic example did not utilize an ingress controller or service mesh provider
to route traffic. Instead, it used normal Kubernetes Service networking (i.e. kube-proxy) to achieve
an *approximate* canary weight, based on the closest ratio of new to old replica counts.
As a result, this Rollout had a limitation in that it could only achieve a minimum canary

View File

@ -91,7 +91,7 @@ kubectl -n argo-examples port-forward svc/my-svc 8181:80
## 3. Rollout new version
Now its time to deploy new version. Update the rollout with new image.
Now it's time to deploy new version. Update the rollout with new image.
```shell
kubectl argo rollouts set image my-rollout demo=argoproj/rollouts-demo:green -n argo-examples

View File

@ -220,7 +220,7 @@ kubectl argo rollouts get rollout rollouts-demo
## 2. Perform an update
Update the rollout by changing the image, and wait for it to reached the paused state.
Update the rollout by changing the image, and wait for it to reach the paused state.
```shell
kubectl argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow

View File

@ -62,7 +62,7 @@ spec:
...
```
A combination of both should have comply with each TrafficRouting requirements, in this case:
A combination of both should have to comply with each TrafficRouting requirements, in this case:
```yaml
apiVersion: argoproj.io/v1alpha1
@ -176,7 +176,7 @@ discussed in the following section.
## 2. Perform an update
Now perform an update the rollout by changing the image, and wait for it to reached the paused state.
Now perform an update the rollout by changing the image, and wait for it to reach the paused state.
```shell
kubectl argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow
@ -210,7 +210,7 @@ changes over the original ingress:
1. Two additional
[NGINX specific canary annotations](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#canary)
are added to the annotations.
2. The Ingress rules will have an rule which points the backend to the *canary* service.
2. The Ingress rules will have a rule which points the backend to the *canary* service.
```yaml

View File

@ -109,7 +109,7 @@ kubectl argo rollouts get rollout rollouts-demo
## 2. Perform an update
Update the rollout by changing the image, and wait for it to reached the paused state.
Update the rollout by changing the image, and wait for it to reach the paused state.
```shell
kubectl argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow
@ -130,7 +130,7 @@ changes over the original ingress:
1. Two additional
[NGINX specific canary annotations](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#canary)
are added to the annotations.
2. The Ingress rules will have an rule which points the backend to the *canary* service.
2. The Ingress rules will have a rule which points the backend to the *canary* service.
```yaml

View File

@ -100,7 +100,7 @@ spec:
## 2. Perform an update
Now perform an update the rollout by changing the image, and wait for it to reached the paused state.
Now perform an update the rollout by changing the image, and wait for it to reach the paused state.
```shell
kubectl argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow

View File

@ -104,7 +104,7 @@ The completion command supports bash, zsh, fish and powershell.
See the [completion command documentation](./generated/kubectl-argo-rollouts/kubectl-argo-rollouts_completion.md) for more details.
## Using the CLI with Docker
## Using the CLI with Docker
The CLI is also available as a container image at [https://quay.io/repository/argoproj/kubectl-argo-rollouts](https://quay.io/repository/argoproj/kubectl-argo-rollouts)

View File

@ -184,7 +184,7 @@ type TrafficRouterPlugin interface {
type StepPlugin interface {
// InitPlugin initializes the canary step plugin. This gets called once when the plugin is loaded.
InitPlugin() RpcError
// Run executes a step plugin for the RpcStepContext and returns the result to the controller or an RpcError for unexpeted failures
// Run executes a step plugin for the RpcStepContext and returns the result to the controller or an RpcError for unexpected failures
Run(*v1alpha1.Rollout, *RpcStepContext) (RpcStepResult, RpcError)
// Terminate stops an uncompleted operation started by the Run operation
Terminate(*v1alpha1.Rollout, *RpcStepContext) (RpcStepResult, RpcError)

View File

@ -0,0 +1,97 @@
---
title: Parameterized Build system
authors:
- '@kostis-codefresh'
creation-date: 2025-06-24
---
# Parameterized Build system
The build system of Argo Rollouts is currently presenting several challenges for companies that want to keep
internal forks.
This document provides a proposal for making the build system of Argo Rollouts more flexible.
## Summary
There is a need for companies to have an internal fork of Argo Rollouts. This fork needs to follow the upstream project (in order to get new features) but at the same time
allow
- quick security fixes
- testing of upcoming features before releasing them to the upstream OSS fork
- integration with internal systems that are not relevant to the OSS fork.
## Motivation
Currently the [build system of Argo Rollouts](https://github.com/argoproj/argo-rollouts/tree/master/.github/workflows) has several hardcoded parameters. These include
- The Docker registry for the project is hardcoded to [quay.io/argoproj/kubectl-argo-rollouts](https://github.com/argoproj/argo-rollouts/blob/master/.github/workflows/docker-publish.yml#L44)
- There are mentions on which Golang version to use in [several](https://github.com/argoproj/argo-rollouts/blob/master/.github/workflows/testing.yaml#L96) [different](https://github.com/argoproj/argo-rollouts/blob/master/.github/workflows/docker-publish.yml#L70) [places](https://github.com/argoproj/argo-rollouts/blob/master/.github/workflows/go.yml#L12).
- The Kubernetes API versions of E2E tests [are an inline list](https://github.com/argoproj/argo-rollouts/blob/master/.github/workflows/testing.yaml#L82)
This makes having a internal fork a more difficult process than needed because any custom changes that happen internally require extra effort if
- they never need to be sent to the upstream project
- they need to be compared with the upstream project (3-way diff)
- they need to be pinned/kept back against the upstream project
## Goals
The goals of this proposal are:
- Detect all places in the build system that have hardcoded values
- Make the different build system configurations a parameter
- Setup default values for the main OSS project
- Allow external organizations to maintain internal forks with minimal effort
## Use cases
Here are some example use cases
### Basic build/push
An external organization should be able to fork the OSS project and push the final image to their own registry instead of the default `quay.io/argoproj`
### Internal security fix
A critical vulnerability has been found and the organization needs to provide a hotfix in the internal fork. The fix could be in
- a standard library of Argo Rollouts
- the version of GoLang
- The version of Kubernetes client
- Any combination of the above.
A developer should be able to apply this fix in the internal fork, and then at the same time send the fix to the upstream OSS project. The assumption is that the OSS
project might not get the fix as fast as the internal fork, so there is a brief time window where the security fix is only in the internal fork while there is still the need
to get new features from the OSS project.
### Internal feature implementation
Same scenario as the security fix but this time code changes in the actual controller are included.
### Permanent changes only for the internal fork
The most complex scenario (and the one presenting more challenges today) is for changes that do not go to the upstream fork and need to stay
in the internal fork for a larger time period.
Examples are
- Using an older Golang version
- Supporting an older version of the Kubernetes client library
- Using an internal fork for a dependency library that will never be OSS
## Security Considerations
There is no impact for the security of the project. In fact, this proposal will allow security conscious organizations to ship security fixes much faster
and in smaller batches to the OSS project.
## Risks and Mitigations
There is no risk in the main project as all changes will happen on the build system. The end result for the main project will be exactly the same
(using default values or having implied configuration files).

View File

@ -286,7 +286,7 @@ A user wants to use an API to publish information about the rollout. The plugin
Other steps need to use the conversationID during their execution.
The plugin step receives in parameters the full rollout object and the pluginName. This information can be used to retrieve the status of other plugin execution.
An utility function such as `PluginHelper.GetStatuses(rollout, pluginName)` can be implemented and made available to the plugins.
A utility function such as `PluginHelper.GetStatuses(rollout, pluginName)` can be implemented and made available to the plugins.
##### I want my rollout to continue event if my plugin failed

View File

@ -24,7 +24,7 @@ Example:
Once the script is executed successfully, a GitHub workflow will start
execution. You can follow its progress under the [Actions](https://github.com/argoproj/argo-rollouts/actions/workflows/release.yaml) tab, the name of the action is `Release`.
1. When the action completes, visit the generated draft [Github releases](https://github.com/argoproj/argo-rollouts/releases) and enter the details about the release:
1. When the action completes, visit the generated draft [GitHub releases](https://github.com/argoproj/argo-rollouts/releases) and enter the details about the release:
* Getting started (copy from previous release and new version)
* Changelog

View File

@ -6,23 +6,23 @@
***
## Release Assets
| Asset | Description |
|-------------------------------------|--------------------------------------------------|
| argo-rollouts-checksums.txt | Checksums of binaries |
| argo-rollouts-cli.intoto.jsonl | Attestation of CLI binaries & manifiest |
| dashboard-install.yaml | Dashboard install |
| install.yaml | Standard installation method |
| kubectl-argo-rollouts-darwin-amd64 | CLI Binary |
| kubectl-argo-rollouts-darwin-arm64 | CLI Binary |
| kubectl-argo-rollouts-linux-amd64 | CLI Binary |
| kubectl-argo-rollouts-linux-arm64 | CLI Binary |
| kubectl-argo-rollouts-windows-amd64 | CLI Binary |
| namespace-install.yaml | Namespace installation |
| notifications-install.yaml | Notification installation |
| rollout_cr_schema.json | Schema |
| sbom.tar.gz | Sbom |
| sbom.tar.gz.pem | Certificate used to sign sbom |
| sbom.tar.gz.sig | Signature of sbom |
| Asset | Description |
|-------------------------------------|---------------------------------------------|
| argo-rollouts-checksums.txt | Checksums of binaries |
| argo-rollouts-cli.intoto.jsonl | Attestation of CLI binaries & manifest |
| dashboard-install.yaml | Dashboard install |
| install.yaml | Standard installation method |
| kubectl-argo-rollouts-darwin-amd64 | CLI Binary |
| kubectl-argo-rollouts-darwin-arm64 | CLI Binary |
| kubectl-argo-rollouts-linux-amd64 | CLI Binary |
| kubectl-argo-rollouts-linux-arm64 | CLI Binary |
| kubectl-argo-rollouts-windows-amd64 | CLI Binary |
| namespace-install.yaml | Namespace installation |
| notifications-install.yaml | Notification installation |
| rollout_cr_schema.json | Schema |
| sbom.tar.gz | Sbom |
| sbom.tar.gz.pem | Certificate used to sign sbom |
| sbom.tar.gz.sig | Signature of sbom |
***
## Verification of container images

View File

@ -10,7 +10,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
kubetesting "k8s.io/client-go/testing"
"k8s.io/utils/pointer"
"k8s.io/utils/ptr"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
)
@ -207,7 +207,7 @@ func TestCreateAnalysisRunWithArg(t *testing.T) {
TemplateName: aTemplates[0].Name,
Args: []v1alpha1.Argument{{
Name: "test",
Value: pointer.StringPtr("sss"),
Value: ptr.To[string]("sss"),
}},
},
}
@ -239,7 +239,7 @@ func TestCreateAnalysisRunWithClusterTemplate(t *testing.T) {
ClusterScope: true,
Args: []v1alpha1.Argument{{
Name: "test",
Value: pointer.StringPtr("sss"),
Value: ptr.To[string]("sss"),
}},
},
}
@ -271,7 +271,7 @@ func TestAnalysisRunFailToResolveArg(t *testing.T) {
Args: []v1alpha1.Argument{{
Name: "test",
Value: pointer.StringPtr("{{not a real substitution}}"),
Value: ptr.To[string]("{{not a real substitution}}"),
}},
},
}
@ -480,7 +480,7 @@ func TestAssessAnalysisRunStatusesAfterTemplateSuccess(t *testing.T) {
func TestFailExperimentWhenAnalysisFails(t *testing.T) {
templates := generateTemplates("bar")
e := newExperiment("foo", templates, "")
e.Spec.ScaleDownDelaySeconds = pointer.Int32Ptr(0)
e.Spec.ScaleDownDelaySeconds = ptr.To[int32](0)
e.Spec.Analyses = []v1alpha1.ExperimentAnalysisTemplateRef{
{
Name: "success-rate",
@ -493,7 +493,7 @@ func TestFailExperimentWhenAnalysisFails(t *testing.T) {
}
e.Status.Phase = v1alpha1.AnalysisPhaseRunning
e.Spec.Duration = "5m"
e.Spec.ScaleDownDelaySeconds = pointer.Int32Ptr(0)
e.Spec.ScaleDownDelaySeconds = ptr.To[int32](0)
e.Status.AvailableAt = secondsAgo(60)
rs := templateToRS(e, templates[0], 1)
ar1 := analysisTemplateToRun("success-rate", e, &v1alpha1.AnalysisTemplateSpec{})
@ -660,7 +660,7 @@ func TestDoNotCompleteExperimentWithRemainingRequiredAnalysisRun(t *testing.T) {
func TestCompleteExperimentWithNoRequiredAnalysis(t *testing.T) {
templates := generateTemplates("bar")
e := newExperiment("foo", templates, "1m")
e.Spec.ScaleDownDelaySeconds = pointer.Int32Ptr(0)
e.Spec.ScaleDownDelaySeconds = ptr.To[int32](0)
e.Spec.Analyses = []v1alpha1.ExperimentAnalysisTemplateRef{
{
Name: "success-rate",
@ -700,7 +700,7 @@ func TestCompleteExperimentWithNoRequiredAnalysis(t *testing.T) {
func TestTerminateAnalysisRuns(t *testing.T) {
templates := generateTemplates("bar")
e := newExperiment("foo", templates, "")
e.Spec.ScaleDownDelaySeconds = pointer.Int32Ptr(0)
e.Spec.ScaleDownDelaySeconds = ptr.To[int32](0)
e.Spec.Analyses = []v1alpha1.ExperimentAnalysisTemplateRef{
{
Name: "success-rate",

View File

@ -5,7 +5,7 @@ import (
"time"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/utils/pointer"
"k8s.io/utils/ptr"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
"github.com/argoproj/argo-rollouts/utils/conditions"
@ -15,7 +15,7 @@ import (
func TestUpdateProgressingLastUpdateTime(t *testing.T) {
templates := generateTemplates("bar")
templates[0].Replicas = pointer.Int32Ptr(2)
templates[0].Replicas = ptr.To[int32](2)
e := newExperiment("foo", templates, "")
e.Status.TemplateStatuses = []v1alpha1.TemplateStatus{{
Name: "bar",
@ -53,7 +53,7 @@ func TestEnterTimeoutDegradedState(t *testing.T) {
Name: "bar",
Status: v1alpha1.TemplateStatusProgressing,
}}
e.Spec.ProgressDeadlineSeconds = pointer.Int32Ptr(30)
e.Spec.ProgressDeadlineSeconds = ptr.To[int32](30)
prevTime := metav1.NewTime(timeutil.Now().Add(-1 * time.Minute).Truncate(time.Second))
e.Status.TemplateStatuses[0].LastTransitionTime = &prevTime

View File

@ -5,6 +5,8 @@ import (
"sync"
"time"
corev1 "k8s.io/api/core/v1"
log "github.com/sirupsen/logrus"
appsv1 "k8s.io/api/apps/v1"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
@ -79,7 +81,7 @@ type Controller struct {
resyncPeriod time.Duration
}
// ControllerConfig describes the data required to instantiate a new analysis controller
// ControllerConfig describes the data required to instantiate a new experiments controller
type ControllerConfig struct {
KubeClientSet kubernetes.Interface
ArgoProjClientset clientset.Interface
@ -98,7 +100,6 @@ type ControllerConfig struct {
// NewController returns a new experiment controller
func NewController(cfg ControllerConfig) *Controller {
replicaSetControl := controller.RealRSControl{
KubeClient: cfg.KubeClientSet,
Recorder: cfg.Recorder.K8sRecorder(),
@ -318,6 +319,7 @@ func (ec *Controller) syncHandler(ctx context.Context, key string) error {
}
func (ec *Controller) persistExperimentStatus(orig *v1alpha1.Experiment, newStatus *v1alpha1.ExperimentStatus) error {
prevStatus := orig.Status
ctx := context.TODO()
logCtx := logutil.WithExperiment(orig)
patch, modified, err := diff.CreateTwoWayMergePatch(
@ -336,15 +338,27 @@ func (ec *Controller) persistExperimentStatus(orig *v1alpha1.Experiment, newStat
return nil
}
logCtx.Debugf("Experiment Patch: %s", patch)
_, err = ec.argoProjClientset.ArgoprojV1alpha1().Experiments(orig.Namespace).Patch(ctx, orig.Name, patchtypes.MergePatchType, patch, metav1.PatchOptions{})
patched, err := ec.argoProjClientset.ArgoprojV1alpha1().Experiments(orig.Namespace).Patch(ctx, orig.Name, patchtypes.MergePatchType, patch, metav1.PatchOptions{})
if err != nil {
logCtx.Warningf("Error updating experiment: %v", err)
return err
}
logCtx.Info("Patch status successfully")
ec.recordEvent(patched, prevStatus, newStatus)
return nil
}
func (ec *Controller) recordEvent(ex *v1alpha1.Experiment, prevStatus v1alpha1.ExperimentStatus, newStatus *v1alpha1.ExperimentStatus) {
if prevStatus.Phase != newStatus.Phase {
eventType := corev1.EventTypeNormal
switch newStatus.Phase {
case v1alpha1.AnalysisPhaseError, v1alpha1.AnalysisPhaseFailed, v1alpha1.AnalysisPhaseInconclusive:
eventType = corev1.EventTypeWarning
}
ec.recorder.Eventf(ex, record.EventOptions{EventType: eventType, EventReason: "Experiment" + string(newStatus.Phase)}, "Experiment transitioned from %s -> %s", prevStatus.Phase, newStatus.Phase)
}
}
// enqueueIfCompleted conditionally enqueues the AnalysisRun's Experiment if the run is complete
func (ec *Controller) enqueueIfCompleted(obj any) {
run := unstructuredutil.ObjectToAnalysisRun(obj)

View File

@ -31,7 +31,7 @@ import (
core "k8s.io/client-go/testing"
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/util/workqueue"
"k8s.io/utils/pointer"
"k8s.io/utils/ptr"
"github.com/argoproj/argo-rollouts/controller/metrics"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
@ -143,7 +143,7 @@ func generateTemplates(imageNames ...string) []v1alpha1.TemplateSpec {
Selector: &metav1.LabelSelector{
MatchLabels: selector,
},
Replicas: pointer.Int32Ptr(1),
Replicas: ptr.To[int32](1),
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: selector,

View File

@ -26,7 +26,7 @@ import (
"k8s.io/client-go/kubernetes"
appslisters "k8s.io/client-go/listers/apps/v1"
v1 "k8s.io/client-go/listers/core/v1"
"k8s.io/utils/pointer"
"k8s.io/utils/ptr"
)
const (
@ -72,7 +72,6 @@ func newExperimentContext(
resyncPeriod time.Duration,
enqueueExperimentAfter func(obj any, duration time.Duration),
) *experimentContext {
exCtx := experimentContext{
ex: experiment,
templateRSs: templateRSs,
@ -138,7 +137,14 @@ func (ec *experimentContext) reconcileTemplate(template v1alpha1.TemplateSpec) {
// Create service for template if service field is set
if desiredReplicaCount != 0 {
ec.createTemplateService(&template, templateStatus, rs)
} else {
if rs.Status.AvailableReplicas == 0 {
// Check if service should be deleted when ReplicaSet has scaled down to 0 available replicas
svc := ec.templateServices[template.Name]
ec.deleteTemplateService(svc, templateStatus, template.Name)
}
}
} else {
// If service field nil but service exists, then delete it
// Code should not enter this path
@ -158,6 +164,7 @@ func (ec *experimentContext) reconcileTemplate(template v1alpha1.TemplateSpec) {
ec.scaleTemplateRS(rs, template, templateStatus, desiredReplicaCount, experimentReplicas)
templateStatus.LastTransitionTime = &now
}
}
if rs == nil {
@ -273,11 +280,6 @@ func (ec *experimentContext) scaleTemplateRS(rs *appsv1.ReplicaSet, template v1a
if err != nil {
templateStatus.Status = v1alpha1.TemplateStatusError
templateStatus.Message = fmt.Sprintf("Unable to scale ReplicaSet for template '%s' to desired replica count '%v': %v", templateStatus.Name, desiredReplicaCount, err)
} else {
if desiredReplicaCount == 0 && template.Service != nil {
svc := ec.templateServices[template.Name]
ec.deleteTemplateService(svc, templateStatus, template.Name)
}
}
}
@ -319,7 +321,7 @@ func (ec *experimentContext) createTemplateService(template *v1alpha1.TemplateSp
// createReplicaSetForTemplate initializes ReplicaSet with zero replicas for given experiment template
func (ec *experimentContext) createReplicaSetForTemplate(template v1alpha1.TemplateSpec, templateStatus *v1alpha1.TemplateStatus, logCtx *log.Entry, now metav1.Time) {
template.Replicas = pointer.Int32Ptr(0)
template.Replicas = ptr.To[int32](0)
rs, err := ec.createReplicaSet(template, templateStatus.CollisionCount)
if err != nil {
logCtx.Warnf("Failed to create ReplicaSet: %v", err)
@ -416,6 +418,19 @@ func (ec *experimentContext) reconcileAnalysisRun(analysis v1alpha1.ExperimentAn
eventType = corev1.EventTypeWarning
}
ec.recorder.Eventf(ec.ex, record.EventOptions{EventType: eventType, EventReason: "AnalysisRun" + string(newStatus.Phase)}, msg)
// Handle the case where the Analysis Run belongs to an Experiment, and the Experiment is a Step in the Rollout
// This makes sure the rollout gets the Analysis Run events, which will then trigger any subscribed notifications
// #4009
roRef := experimentutil.GetRolloutOwnerRef(ec.ex)
if roRef != nil {
rollout, err := ec.argoProjClientset.ArgoprojV1alpha1().Rollouts(ec.ex.Namespace).Get(context.TODO(), roRef.Name, metav1.GetOptions{})
if err != nil {
ec.log.Warnf("Failed to get parent Rollout of the Experiment '%s': %v", roRef.Name, err)
} else {
ec.recorder.Eventf(rollout, record.EventOptions{EventType: corev1.EventTypeWarning, EventReason: "AnalysisRun" + string(newStatus.Phase)}, msg)
}
}
}
experimentutil.SetAnalysisRunStatus(ec.newStatus, *newStatus)
}()
@ -523,7 +538,6 @@ func (ec *experimentContext) ResolveAnalysisRunArgs(args []v1alpha1.Argument) ([
}
func (ec *experimentContext) calculateStatus() *v1alpha1.ExperimentStatus {
prevStatus := ec.newStatus.DeepCopy()
switch ec.newStatus.Phase {
case "":
ec.newStatus.Phase = v1alpha1.AnalysisPhasePending
@ -568,14 +582,6 @@ func (ec *experimentContext) calculateStatus() *v1alpha1.ExperimentStatus {
}
}
ec.newStatus = calculateExperimentConditions(ec.ex, *ec.newStatus)
if prevStatus.Phase != ec.newStatus.Phase {
eventType := corev1.EventTypeNormal
switch ec.newStatus.Phase {
case v1alpha1.AnalysisPhaseError, v1alpha1.AnalysisPhaseFailed, v1alpha1.AnalysisPhaseInconclusive:
eventType = corev1.EventTypeWarning
}
ec.recorder.Eventf(ec.ex, record.EventOptions{EventType: eventType, EventReason: "Experiment" + string(ec.newStatus.Phase)}, "Experiment transitioned from %s -> %s", prevStatus.Phase, ec.newStatus.Phase)
}
return ec.newStatus
}
@ -636,7 +642,6 @@ func (ec *experimentContext) assessAnalysisRuns() (v1alpha1.AnalysisPhase, strin
// newAnalysisRun generates an AnalysisRun from the experiment and template
func (ec *experimentContext) newAnalysisRun(analysis v1alpha1.ExperimentAnalysisTemplateRef, args []v1alpha1.Argument, dryRunMetrics []v1alpha1.DryRun, measurementRetentionMetrics []v1alpha1.MeasurementRetention, analysisRunMetadata *v1alpha1.AnalysisRunMetadata) (*v1alpha1.AnalysisRun, error) {
if analysis.ClusterScope {
analysisTemplates, clusterAnalysisTemplates, err := ec.getAnalysisTemplatesFromClusterAnalysis(analysis)
if err != nil {
@ -781,7 +786,6 @@ func (ec *experimentContext) getAnalysisTemplatesFromRefs(templateRefs *[]v1alph
templates = append(templates, innerTemplates...)
}
}
}
uniqueTemplates, uniqueClusterTemplates := analysisutil.FilterUniqueTemplates(templates, clusterTemplates)
return uniqueTemplates, uniqueClusterTemplates, nil

View File

@ -17,7 +17,7 @@ import (
kubeinformers "k8s.io/client-go/informers"
k8sfake "k8s.io/client-go/kubernetes/fake"
kubetesting "k8s.io/client-go/testing"
"k8s.io/utils/pointer"
"k8s.io/utils/ptr"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
"github.com/argoproj/argo-rollouts/pkg/client/clientset/versioned/fake"
@ -129,7 +129,7 @@ func TestAddScaleDownDelayToRS(t *testing.T) {
func TestRemoveScaleDownDelayFromRS(t *testing.T) {
templates := generateTemplates("bar")
e := newExperiment("foo", templates, "")
e.Spec.ScaleDownDelaySeconds = pointer.Int32Ptr(0)
e.Spec.ScaleDownDelaySeconds = ptr.To[int32](0)
e.Status.AvailableAt = now()
e.Status.Phase = v1alpha1.AnalysisPhaseRunning
cond := conditions.NewExperimentConditions(v1alpha1.ExperimentProgressing, corev1.ConditionTrue, conditions.NewRSAvailableReason, "Experiment \"foo\" is running.")
@ -175,12 +175,10 @@ func TestScaleDownRSAfterFinish(t *testing.T) {
inThePast := timeutil.Now().Add(-10 * time.Second).UTC().Format(time.RFC3339)
rs1.Annotations[v1alpha1.DefaultReplicaSetScaleDownDeadlineAnnotationKey] = inThePast
rs2.Annotations[v1alpha1.DefaultReplicaSetScaleDownDeadlineAnnotationKey] = inThePast
f := newFixture(t, e, rs1, rs2, s1)
defer f.Close()
updateRs1Index := f.expectUpdateReplicaSetAction(rs1)
f.expectDeleteServiceAction(s1)
updateRs2Index := f.expectUpdateReplicaSetAction(rs2)
expPatchIndex := f.expectPatchExperimentAction(e)
@ -195,6 +193,60 @@ func TestScaleDownRSAfterFinish(t *testing.T) {
expPatchObj := f.getPatchedExperimentAsObj(expPatchIndex)
assert.Equal(t, v1alpha1.AnalysisPhaseSuccessful, expPatchObj.Status.Phase)
rs1.Status.AvailableReplicas = 0
rs2.Status.AvailableReplicas = 0
f = newFixture(t, e, rs1, rs2, s1)
defer f.Close()
f.expectDeleteServiceAction(s1)
}
// TestScaleDownRSAWhenSvcNotDeleted verifies that ScaleDownDelaySeconds annotation is added to ReplicaSet that is to be scaled down and service is not deleted because available replicas are not 0
func TestScaleDownRSWhenSvcNotDeleted(t *testing.T) {
tmpl := generateTemplates("template1", "template2")
tmpl[0].Service = &v1alpha1.TemplateService{}
exp := newExperiment("test-exp", tmpl, "")
replicaSet1 := templateToRS(exp, tmpl[0], 1)
replicaSet2 := templateToRS(exp, tmpl[1], 1)
svc := templateToService(exp, tmpl[0], *replicaSet1)
exp.Status.AvailableAt = now()
exp.Status.Phase = v1alpha1.AnalysisPhaseRunning
exp.Status.TemplateStatuses = []v1alpha1.TemplateStatus{
generateTemplatesStatus("template1", 1, 1, v1alpha1.TemplateStatusSuccessful, now()),
generateTemplatesStatus("template2", 1, 1, v1alpha1.TemplateStatusSuccessful, now()),
}
exp.Spec.Terminate = true
exp.Status.TemplateStatuses[0].ServiceName = svc.Name
condition := conditions.NewExperimentConditions(v1alpha1.ExperimentProgressing, corev1.ConditionTrue, conditions.NewRSAvailableReason, "Experiment \"test-exp\" is running.")
exp.Status.Conditions = append(exp.Status.Conditions, *condition)
pastTime := timeutil.Now().Add(-10 * time.Second).UTC().Format(time.RFC3339)
replicaSet1.Annotations[v1alpha1.DefaultReplicaSetScaleDownDeadlineAnnotationKey] = pastTime
replicaSet2.Annotations[v1alpha1.DefaultReplicaSetScaleDownDeadlineAnnotationKey] = pastTime
replicaSet1.Status.AvailableReplicas = 1
replicaSet2.Status.AvailableReplicas = 1
fixture := newFixture(t, exp, replicaSet1, replicaSet2, svc)
defer fixture.Close()
rs1UpdateIdx := fixture.expectUpdateReplicaSetAction(replicaSet1)
rs2UpdateIdx := fixture.expectUpdateReplicaSetAction(replicaSet2)
expPatchIdx := fixture.expectPatchExperimentAction(exp)
fixture.run(getKey(exp, t))
updatedRS1 := fixture.getUpdatedReplicaSet(rs1UpdateIdx)
assert.NotNil(t, updatedRS1)
assert.Equal(t, int32(0), *updatedRS1.Spec.Replicas)
updatedRS2 := fixture.getUpdatedReplicaSet(rs2UpdateIdx)
assert.NotNil(t, updatedRS2)
assert.Equal(t, int32(0), *updatedRS2.Spec.Replicas)
patchedExp := fixture.getPatchedExperimentAsObj(expPatchIdx)
assert.Equal(t, v1alpha1.AnalysisPhaseSuccessful, patchedExp.Status.Phase)
}
func TestSetAvailableAt(t *testing.T) {
@ -407,7 +459,7 @@ func TestFailAddScaleDownDelay(t *testing.T) {
templates := generateTemplates("bar")
templates[0].Service = &v1alpha1.TemplateService{}
ex := newExperiment("foo", templates, "")
ex.Spec.ScaleDownDelaySeconds = pointer.Int32Ptr(0)
ex.Spec.ScaleDownDelaySeconds = ptr.To[int32](0)
ex.Status.TemplateStatuses = []v1alpha1.TemplateStatus{
generateTemplatesStatus("bar", 1, 1, v1alpha1.TemplateStatusFailed, now()),
}
@ -429,12 +481,12 @@ func TestFailAddScaleDownDelay(t *testing.T) {
func TestFailAddScaleDownDelayIsConflict(t *testing.T) {
templates := generateTemplates("bar")
ex := newExperiment("foo", templates, "")
ex.Spec.ScaleDownDelaySeconds = pointer.Int32Ptr(0)
ex.Spec.ScaleDownDelaySeconds = ptr.To[int32](0)
ex.Status.TemplateStatuses = []v1alpha1.TemplateStatus{
generateTemplatesStatus("bar", 1, 1, v1alpha1.TemplateStatusRunning, now()),
}
rs := templateToRS(ex, templates[0], 1)
rs.Spec.Replicas = pointer.Int32(0)
rs.Spec.Replicas = ptr.To[int32](0)
exCtx := newTestContext(ex, rs)
exCtx.templateRSs["bar"] = rs
@ -485,7 +537,7 @@ func TestDeleteOutdatedService(t *testing.T) {
func TestDeleteServiceIfServiceFieldNil(t *testing.T) {
templates := generateTemplates("bar")
templates[0].Replicas = pointer.Int32Ptr(0)
templates[0].Replicas = ptr.To[int32](0)
ex := newExperiment("foo", templates, "")
ex.Status.TemplateStatuses = []v1alpha1.TemplateStatus{
generateTemplatesStatus("bar", 1, 1, v1alpha1.TemplateStatusRunning, now()),

View File

@ -166,17 +166,21 @@ func newReplicaSetFromTemplate(experiment *v1alpha1.Experiment, template v1alpha
newRSTemplate.Labels = labelsutil.CloneAndAddLabel(newRSTemplate.Labels, v1alpha1.DefaultRolloutUniqueLabelKey, podHash)
// Add podTemplateHash label to selector.
newRSSelector := labelsutil.CloneSelectorAndAddLabel(template.Selector, v1alpha1.DefaultRolloutUniqueLabelKey, podHash)
newRSLabels := map[string]string{}
// enrich with template labels
for k, v := range newRSTemplate.Labels {
newRSLabels[k] = v
}
newRSLabels[v1alpha1.DefaultRolloutUniqueLabelKey] = podHash
// The annotations must be different for each template because annotations are used to match
// replicasets to templates. We inject the experiment and template name in the replicaset
// annotations to ensure uniqueness.
rs := appsv1.ReplicaSet{
ObjectMeta: metav1.ObjectMeta{
Name: fmt.Sprintf("%s-%s", experiment.Name, template.Name),
Namespace: experiment.Namespace,
Labels: map[string]string{
v1alpha1.DefaultRolloutUniqueLabelKey: podHash,
},
Name: fmt.Sprintf("%s-%s", experiment.Name, template.Name),
Namespace: experiment.Namespace,
Labels: newRSLabels,
OwnerReferences: []metav1.OwnerReference{*metav1.NewControllerRef(experiment, controllerKind)},
Annotations: replicaSetAnnotations,
},

View File

@ -1,12 +1,13 @@
package experiments
import (
"fmt"
"testing"
"github.com/stretchr/testify/assert"
appsv1 "k8s.io/api/apps/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/utils/pointer"
"k8s.io/utils/ptr"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
"github.com/argoproj/argo-rollouts/utils/conditions"
@ -115,7 +116,7 @@ func TestNameCollision(t *testing.T) {
templateStatuses := []v1alpha1.TemplateStatus{
generateTemplatesStatus("bar", 0, 0, "", nil),
}
templateStatuses[0].CollisionCount = pointer.Int32Ptr(1)
templateStatuses[0].CollisionCount = ptr.To[int32](1)
validatePatch(t, patch, "", NoChange, templateStatuses, nil)
}
{
@ -152,7 +153,7 @@ func TestNameCollisionWithEquivalentPodTemplateAndControllerUID(t *testing.T) {
templateStatuses := []v1alpha1.TemplateStatus{
generateTemplatesStatus("bar", 0, 0, "", nil),
}
templateStatuses[0].CollisionCount = pointer.Int32Ptr(1)
templateStatuses[0].CollisionCount = ptr.To[int32](1)
validatePatch(t, patch, "", NoChange, templateStatuses, nil)
}
{
@ -164,3 +165,35 @@ func TestNameCollisionWithEquivalentPodTemplateAndControllerUID(t *testing.T) {
validatePatch(t, patch, "", NoChange, templateStatuses, cond)
}
}
// TestNewReplicaSetFromTemplate tests the creation of a new ReplicaSet from a given template.
// It verifies that the ReplicaSet is correctly initialized with the expected name, namespace,
// annotations, labels, and container specifications based on the provided experiment and template.
// The test ensures that:
// - The ReplicaSet name is a combination of the experiment name and template name.
// - The ReplicaSet namespace matches the experiment namespace.
// - The ReplicaSet annotations include the experiment name and template name.
// - The ReplicaSet labels include the default rollout unique label key and a specific key from the template.
// - The ReplicaSet selector and template labels include the default rollout unique label key.
// - The ReplicaSet container specifications match those defined in the template.
func TestNewReplicaSetFromTemplate(t *testing.T) {
templates := generateTemplates("bar")
template := templates[0]
experiment := newExperiment("foo", templates, "")
collisionCount := int32(0)
rs := newReplicaSetFromTemplate(experiment, template, &collisionCount)
assert.Equal(t, fmt.Sprintf("%s-%s", experiment.Name, template.Name), rs.Name)
assert.Equal(t, experiment.Namespace, rs.Namespace)
assert.Equal(t, experiment.Name, rs.Annotations[v1alpha1.ExperimentNameAnnotationKey])
assert.NotNil(t, rs.ObjectMeta.Labels[v1alpha1.DefaultRolloutUniqueLabelKey])
assert.NotNil(t, rs.ObjectMeta.Labels["key"])
assert.Equal(t, template.Template.ObjectMeta.Labels["key"], rs.ObjectMeta.Labels["key"])
assert.Equal(t, template.Name, rs.Annotations[v1alpha1.ExperimentTemplateNameAnnotationKey])
assert.NotNil(t, rs.Spec.Selector.MatchLabels[v1alpha1.DefaultRolloutUniqueLabelKey])
assert.NotNil(t, rs.Spec.Template.ObjectMeta.Labels[v1alpha1.DefaultRolloutUniqueLabelKey])
assert.Equal(t, template.Template.Labels["key"], rs.Spec.Template.Labels["key"])
assert.Equal(t, template.Template.Spec.Containers[0].Name, rs.Spec.Template.Spec.Containers[0].Name)
assert.Equal(t, template.Template.Spec.Containers[0].Image, rs.Spec.Template.Spec.Containers[0].Image)
}

View File

@ -6,12 +6,13 @@ import (
"k8s.io/apimachinery/pkg/api/errors"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
logutil "github.com/argoproj/argo-rollouts/utils/log"
log "github.com/sirupsen/logrus"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
logutil "github.com/argoproj/argo-rollouts/utils/log"
)
var experimentKind = v1alpha1.SchemeGroupVersion.WithKind("Experiment")

210
go.mod
View File

@ -1,30 +1,30 @@
module github.com/argoproj/argo-rollouts
go 1.23
go 1.23.4
require (
github.com/antonmedv/expr v1.15.5
github.com/argoproj/notifications-engine v0.4.1-0.20240219110818-7a069766e954
github.com/argoproj/notifications-engine v0.4.1-0.20240403133627-f48567108f01
github.com/argoproj/pkg v0.13.6
github.com/aws/aws-sdk-go-v2 v1.32.6
github.com/aws/aws-sdk-go-v2/config v1.28.6
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.43.3
github.com/aws/aws-sdk-go-v2 v1.36.6
github.com/aws/aws-sdk-go-v2/config v1.29.14
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.45.4
github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.31.3
github.com/aws/smithy-go v1.22.1
github.com/aws/smithy-go v1.22.4
github.com/blang/semver v3.5.1+incompatible
github.com/bombsimon/logrusr/v4 v4.1.0
github.com/evanphx/json-patch/v5 v5.9.0
github.com/evanphx/json-patch/v5 v5.9.11
github.com/gogo/protobuf v1.3.2
github.com/golang/mock v1.6.0
github.com/golang/protobuf v1.5.4
github.com/google/uuid v1.6.0
github.com/grpc-ecosystem/grpc-gateway v1.16.0
github.com/hashicorp/go-plugin v1.6.2
github.com/hashicorp/go-plugin v1.6.3
github.com/influxdata/influxdb-client-go/v2 v2.14.0
github.com/juju/ansiterm v1.0.0
github.com/machinebox/graphql v0.2.2
github.com/mitchellh/mapstructure v1.5.0
github.com/newrelic/newrelic-client-go/v2 v2.51.3
github.com/newrelic/newrelic-client-go/v2 v2.54.0
github.com/pkg/errors v0.9.1
github.com/prometheus/client_golang v1.18.0
github.com/prometheus/client_model v0.6.1
@ -34,33 +34,34 @@ require (
github.com/sirupsen/logrus v1.9.3
github.com/soheilhy/cmux v0.1.5
github.com/spaceapegames/go-wavefront v1.8.1
github.com/spf13/cobra v1.8.1
github.com/spf13/cobra v1.9.1
github.com/stretchr/testify v1.10.0
github.com/tj/assert v0.0.3
github.com/valyala/fasttemplate v1.2.2
golang.org/x/oauth2 v0.24.0
google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1
google.golang.org/grpc v1.68.1
google.golang.org/protobuf v1.35.2
golang.org/x/oauth2 v0.29.0
golang.org/x/sync v0.16.0
google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422
google.golang.org/grpc v1.71.1
google.golang.org/protobuf v1.36.5
gopkg.in/yaml.v2 v2.4.0
k8s.io/api v0.29.3
k8s.io/apiextensions-apiserver v0.29.3
k8s.io/apimachinery v0.29.3
k8s.io/apiserver v0.29.3
k8s.io/cli-runtime v0.29.3
k8s.io/client-go v0.29.3
k8s.io/code-generator v0.29.3
k8s.io/component-base v0.29.3
k8s.io/klog/v2 v2.110.1
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00
k8s.io/kubectl v0.29.3
k8s.io/kubernetes v1.29.3
k8s.io/utils v0.0.0-20230726121419-3b25d923346b
k8s.io/api v0.30.14
k8s.io/apiextensions-apiserver v0.30.13
k8s.io/apimachinery v0.30.14
k8s.io/apiserver v0.30.14
k8s.io/cli-runtime v0.30.14
k8s.io/client-go v0.30.14
k8s.io/code-generator v0.30.14
k8s.io/component-base v0.30.14
k8s.io/klog/v2 v2.130.1
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff
k8s.io/kubectl v0.30.13
k8s.io/kubernetes v1.30.14
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8
sigs.k8s.io/yaml v1.4.0
)
require (
cloud.google.com/go/compute/metadata v0.5.0 // indirect
cloud.google.com/go/compute/metadata v0.6.0 // indirect
github.com/PagerDuty/go-pagerduty v1.7.0 // indirect
github.com/bradleyfalzon/ghinstallation/v2 v2.5.0 // indirect
github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1 // indirect
@ -79,24 +80,24 @@ require (
github.com/RocketChat/Rocket.Chat.Go.SDK v0.0.0-20220708192748-b73dcb041214 // indirect
github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df // indirect
github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a // indirect
github.com/aws/aws-sdk-go v1.44.116 // indirect
github.com/aws/aws-sdk-go-v2/credentials v1.17.47 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6 // indirect
github.com/aws/aws-sdk-go-v2/credentials v1.17.67 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.37 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.37 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect
github.com/aws/aws-sdk-go-v2/service/sqs v1.29.7 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.24.7 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.33.2 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/blang/semver/v4 v4.0.0 // indirect
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/chai2010/gettext-go v1.0.2 // indirect
github.com/chainguard-dev/git-urls v1.0.2 // indirect
github.com/cloudflare/circl v1.3.3 // indirect
github.com/coreos/go-semver v0.3.1 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
@ -105,22 +106,22 @@ require (
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
github.com/evanphx/json-patch v5.6.0+incompatible // indirect
github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect
github.com/fatih/color v1.7.0 // indirect
github.com/fatih/color v1.16.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 // indirect
github.com/go-errors/errors v1.4.2 // indirect
github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-openapi/jsonpointer v0.19.6 // indirect
github.com/go-openapi/jsonpointer v0.21.0 // indirect
github.com/go-openapi/jsonreference v0.20.2 // indirect
github.com/go-openapi/swag v0.22.3 // indirect
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
github.com/golang/glog v1.2.2 // indirect
github.com/go-openapi/swag v0.23.0 // indirect
github.com/golang-jwt/jwt/v4 v4.5.2 // indirect
github.com/golang/glog v1.2.4 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/google/btree v1.1.2 // indirect
github.com/google/cel-go v0.17.7 // indirect
github.com/google/gnostic-models v0.6.8 // indirect
github.com/google/cel-go v0.17.8 // indirect
github.com/google/gnostic-models v0.6.9 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/go-github/v53 v53.0.0 // indirect
github.com/google/go-querystring v1.1.0 // indirect
@ -135,8 +136,8 @@ require (
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-hclog v0.14.1 // indirect
github.com/hashicorp/go-retryablehttp v0.7.1 // indirect
github.com/hashicorp/go-hclog v1.6.3 // indirect
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
github.com/hashicorp/yamux v0.1.1 // indirect
github.com/huandu/xstrings v1.3.3 // indirect
github.com/imdario/mergo v0.3.16 // indirect
@ -150,7 +151,7 @@ require (
github.com/lunixbochs/vtclean v1.0.0 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
@ -172,92 +173,99 @@ require (
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/shopspring/decimal v1.2.0 // indirect
github.com/slack-go/slack v0.12.2 // indirect
github.com/spf13/cast v1.5.1 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/cast v1.6.0 // indirect
github.com/spf13/pflag v1.0.6 // indirect
github.com/stoewer/go-strcase v1.2.0 // indirect
github.com/stretchr/objx v0.5.2 // indirect
github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fastjson v1.6.4 // indirect
github.com/whilp/git-urls v0.0.0-20191001220047-6db9661140c0 // indirect
github.com/xlab/treeprint v1.2.0 // indirect
go.etcd.io/etcd/api/v3 v3.5.10 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect
go.etcd.io/etcd/client/v3 v3.5.10 // indirect
go.opencensus.io v0.24.0 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 // indirect
go.opentelemetry.io/otel v1.22.0 // indirect
go.opentelemetry.io/otel v1.34.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0 // indirect
go.opentelemetry.io/otel/metric v1.22.0 // indirect
go.opentelemetry.io/otel/sdk v1.21.0 // indirect
go.opentelemetry.io/otel/trace v1.22.0 // indirect
go.opentelemetry.io/otel/metric v1.34.0 // indirect
go.opentelemetry.io/otel/sdk v1.34.0 // indirect
go.opentelemetry.io/otel/trace v1.34.0 // indirect
go.opentelemetry.io/proto/otlp v1.0.0 // indirect
go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect
go.uber.org/atomic v1.10.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.19.0 // indirect
golang.org/x/crypto v0.27.0 // indirect
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect
golang.org/x/mod v0.17.0 // indirect
golang.org/x/net v0.29.0 // indirect
golang.org/x/sync v0.8.0 // indirect
golang.org/x/sys v0.25.0 // indirect
golang.org/x/term v0.24.0 // indirect
golang.org/x/text v0.18.0 // indirect
go.uber.org/zap v1.26.0 // indirect
golang.org/x/crypto v0.32.0 // indirect
golang.org/x/exp v0.0.0-20220827204233-334a2380cb91 // indirect
golang.org/x/mod v0.20.0 // indirect
golang.org/x/net v0.34.0 // indirect
golang.org/x/sys v0.29.0 // indirect
golang.org/x/term v0.28.0 // indirect
golang.org/x/text v0.21.0 // indirect
golang.org/x/time v0.5.0 // indirect
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
golang.org/x/tools v0.24.0 // indirect
gomodules.xyz/envconfig v1.3.1-0.20190308184047-426f31af0d45 // indirect
gomodules.xyz/notify v0.1.1 // indirect
google.golang.org/api v0.162.0 // indirect
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/cloud-provider v0.0.0 // indirect
k8s.io/cloud-provider v0.30.13 // indirect
k8s.io/cluster-bootstrap v0.25.8 // indirect
k8s.io/component-helpers v0.29.3 // indirect
k8s.io/controller-manager v0.29.3 // indirect
k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 // indirect
k8s.io/kms v0.29.3 // indirect
k8s.io/component-helpers v0.30.14 // indirect
k8s.io/controller-manager v0.30.14 // indirect
k8s.io/gengo/v2 v2.0.0-20240826214909-a7b603a56eb7 // indirect
k8s.io/kms v0.30.14 // indirect
k8s.io/kubelet v0.0.0 // indirect
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 // indirect
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0 // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 // indirect
sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
sigs.k8s.io/randfill v1.0.0 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.6.0 // indirect
)
replace (
github.com/go-check/check => github.com/go-check/check v0.0.0-20180628173108-788fd7840127
github.com/go-telegram-bot-api/telegram-bot-api/v5 => github.com/OvyFlash/telegram-bot-api/v5 v5.0.0-20240108230938-63e5c59035bf
k8s.io/api v0.0.0 => k8s.io/api v0.29.3
k8s.io/apiextensions-apiserver v0.0.0 => k8s.io/apiextensions-apiserver v0.29.3
k8s.io/apimachinery v0.0.0 => k8s.io/apimachinery v0.29.3
k8s.io/apiserver v0.0.0 => k8s.io/apiserver v0.29.3
k8s.io/cli-runtime v0.0.0 => k8s.io/cli-runtime v0.29.3
k8s.io/client-go v0.0.0 => k8s.io/client-go v0.29.3
k8s.io/cloud-provider v0.0.0 => k8s.io/cloud-provider v0.29.3
k8s.io/cluster-bootstrap v0.0.0 => k8s.io/cluster-bootstrap v0.29.3
k8s.io/code-generator v0.0.0 => k8s.io/code-generator v0.29.3
k8s.io/component-base v0.0.0 => k8s.io/component-base v0.29.3
k8s.io/component-helpers v0.0.0 => k8s.io/component-helpers v0.29.3
k8s.io/controller-manager v0.0.0 => k8s.io/controller-manager v0.29.3
k8s.io/cri-api v0.0.0 => k8s.io/cri-api v0.29.3
k8s.io/csi-translation-lib v0.0.0 => k8s.io/csi-translation-lib v0.29.3
k8s.io/kube-aggregator v0.0.0 => k8s.io/kube-aggregator v0.29.3
k8s.io/kube-controller-manager v0.0.0 => k8s.io/kube-controller-manager v0.29.3
k8s.io/kube-proxy v0.0.0 => k8s.io/kube-proxy v0.29.3
k8s.io/kube-scheduler v0.0.0 => k8s.io/kube-scheduler v0.29.3
k8s.io/kubectl v0.0.0 => k8s.io/kubectl v0.29.3
k8s.io/kubelet v0.0.0 => k8s.io/kubelet v0.29.3
k8s.io/legacy-cloud-providers v0.0.0 => k8s.io/legacy-cloud-providers v0.29.3
k8s.io/metrics v0.0.0 => k8s.io/metrics v0.29.3
k8s.io/mount-utils v0.0.0 => k8s.io/mount-utils v0.29.3
k8s.io/pod-security-admission v0.0.0 => k8s.io/pod-security-admission v0.29.3
k8s.io/sample-apiserver v0.0.0 => k8s.io/sample-apiserver v0.29.3
k8s.io/api => k8s.io/api v0.30.14
k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.30.14
k8s.io/apimachinery => k8s.io/apimachinery v0.30.14
k8s.io/apiserver => k8s.io/apiserver v0.30.14
k8s.io/cli-runtime => k8s.io/cli-runtime v0.30.14
k8s.io/client-go => k8s.io/client-go v0.30.14
k8s.io/cloud-provider => k8s.io/cloud-provider v0.30.14
k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.30.14
k8s.io/code-generator => k8s.io/code-generator v0.30.14
k8s.io/component-base => k8s.io/component-base v0.30.14
k8s.io/component-helpers => k8s.io/component-helpers v0.30.14
k8s.io/controller-manager => k8s.io/controller-manager v0.30.14
k8s.io/cri-api => k8s.io/cri-api v0.30.14
k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.30.14
k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.30.14
k8s.io/endpointslice => k8s.io/endpointslice v0.30.14
k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.30.14
k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.30.14
k8s.io/kube-proxy => k8s.io/kube-proxy v0.30.14
k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.30.14
k8s.io/kubectl => k8s.io/kubectl v0.30.14
k8s.io/kubelet => k8s.io/kubelet v0.30.14
k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.30.14
k8s.io/metrics => k8s.io/metrics v0.30.14
k8s.io/mount-utils => k8s.io/mount-utils v0.30.14
k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.30.14
k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.30.14
)
replace k8s.io/kms => k8s.io/kms v0.30.14
replace k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.30.14
replace k8s.io/sample-controller => k8s.io/sample-controller v0.30.14

1652
go.sum

File diff suppressed because it is too large Load Diff

View File

@ -233,7 +233,7 @@ func removeK8S118Fields(un *unstructured.Unstructured) {
setValidationOverride(un, preserveUnknownFields, "spec.template.spec.ephemeralContainers[].resources.requests")
// Replace this with "spec.template.spec.volumes[].ephemeral.volumeClaimTemplate.spec.resources.{limits/requests}"
// when it's ok to only support k8s 1.17+
setValidationOverride(un, preserveUnknownFields, "spec.template.spec.volumes[]")
setValidationOverride(un, preserveUnknownFields, "spec.template.spec.volumes")
case "Experiment":
setValidationOverride(un, preserveUnknownFields, "spec.templates[].template.spec.containers[].resources.limits")
setValidationOverride(un, preserveUnknownFields, "spec.templates[].template.spec.containers[].resources.requests")
@ -463,11 +463,6 @@ func main() {
err = json.Unmarshal(jsonBytes, &r.Object)
checkErr(err)
// Need to explicitly set spec.preserveUnknownFields to false, despite false being the
// default value in v1, in order to facilitate upgrades from apiextensions.k8s.io/v1beta1 v1.
// See https://github.com/argoproj/argo-rollouts/issues/1067
unstructured.SetNestedField(r.Object, false, "spec", "preserveUnknownFields")
// clean up crd yaml before marshalling
unstructured.RemoveNestedField(r.Object, "status")
unstructured.RemoveNestedField(r.Object, "metadata", "creationTimestamp")

View File

@ -54,4 +54,4 @@ go install github.com/go-swagger/go-swagger/cmd/swagger@v0.30.5
go install golang.org/x/tools/cmd/goimports@v0.20.0
# mockery is used for generating mock
go install github.com/vektra/mockery/v2@v2.42.2
go install github.com/vektra/mockery/v2@v2.53.4

View File

@ -37,7 +37,7 @@ url=https://github.com/protocolbuffers/protobuf/releases/download/v${protoc_vers
mkdir -p /tmp/protoc-${protoc_version}
unzip -o ${temp_path} -d /tmp/protoc-${protoc_version}
mkdir -p ${DIST_PATH}/protoc-include
cp /tmp/protoc-${protoc_version}/bin/protoc ${DIST_PATH}/protoc
cp -f /tmp/protoc-${protoc_version}/bin/protoc ${DIST_PATH}/protoc
chmod +x ${DIST_PATH}/protoc
cp -a /tmp/protoc-${protoc_version}/include/* ${DIST_PATH}/protoc-include
chmod -R +rx ${DIST_PATH}/protoc-include

View File

@ -19,15 +19,19 @@ cleanup() {
}
trap "cleanup" EXIT SIGINT
TARGET_SCRIPT=kube_codegen.sh
chmod +x ${CODEGEN_PKG}/*.sh
chmod +x ${CODEGEN_PKG}/${TARGET_SCRIPT}
${CODEGEN_PKG}/generate-groups.sh "deepcopy,client,informer,lister" \
github.com/argoproj/argo-rollouts/pkg/client github.com/argoproj/argo-rollouts/pkg/apis \
"rollouts:v1alpha1" \
--output-base "${TEMP_DIR}" \
--go-header-file ${SCRIPT_ROOT}/hack/boilerplate.go.txt
source ${CODEGEN_PKG}/${TARGET_SCRIPT}
cp -r "${TEMP_DIR}/github.com/argoproj/argo-rollouts/." "${SCRIPT_ROOT}/"
# To use your own boilerplate text use:
# --go-header-file ${SCRIPT_ROOT}/hack/custom-boilerplate.go.txt
kube::codegen::gen_helpers pkg/apis/rollouts/v1alpha1 \
--boilerplate "${SCRIPT_ROOT}/hack/boilerplate.go.txt"
kube::codegen::gen_client pkg/apis \
--with-watch \
--output-pkg github.com/argoproj/argo-rollouts/pkg/client \
--output-dir "${TEMP_DIR}" \
--boilerplate "${SCRIPT_ROOT}/hack/boilerplate.go.txt"
cp -rf "${TEMP_DIR}/." "${SCRIPT_ROOT}/pkg/client/"

View File

@ -1,5 +1,6 @@
#!/bin/sh
set -euo pipefail
set -x
# Grabbed from https://github.com/kubernetes/kubernetes/issues/79384
VERSION=${1#"v"}

View File

@ -7,7 +7,7 @@ import (
"strings"
log "github.com/sirupsen/logrus"
"k8s.io/utils/pointer"
"k8s.io/utils/ptr"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
ingressutil "github.com/argoproj/argo-rollouts/utils/ingress"
@ -103,7 +103,7 @@ func getResetALBActionStr(ingress *ingressutil.Ingress, action string) (string,
{
ServiceName: service,
ServicePort: port,
Weight: pointer.Int64Ptr(int64(100)),
Weight: ptr.To[int64](int64(100)),
},
},
},

View File

@ -18,12 +18,13 @@ import (
k8sfake "k8s.io/client-go/kubernetes/fake"
"k8s.io/client-go/util/workqueue"
"k8s.io/client-go/tools/cache"
"github.com/argoproj/argo-rollouts/controller/metrics"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
"github.com/argoproj/argo-rollouts/pkg/client/clientset/versioned/fake"
informers "github.com/argoproj/argo-rollouts/pkg/client/informers/externalversions"
ingressutil "github.com/argoproj/argo-rollouts/utils/ingress"
"k8s.io/client-go/tools/cache"
)
const stableService string = "test-stable-service"

View File

@ -13,7 +13,6 @@ spec:
shortNames:
- ar
singular: analysisrun
preserveUnknownFields: false
scope: Namespaced
versions:
- additionalPrinterColumns:
@ -263,6 +262,8 @@ spec:
completions:
format: int32
type: integer
managedBy:
type: string
manualSelector:
type: boolean
maxFailedIndexes:
@ -330,17 +331,35 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
type: object
type: object
x-kubernetes-map-type: atomic
successPolicy:
properties:
rules:
items:
properties:
succeededCount:
format: int32
type: integer
succeededIndexes:
type: string
type: object
type: array
x-kubernetes-list-type: atomic
required:
- rules
type: object
suspend:
type: boolean
template:
@ -381,11 +400,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchFields:
items:
properties:
@ -397,11 +418,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
type: object
x-kubernetes-map-type: atomic
weight:
@ -412,6 +435,7 @@ spec:
- weight
type: object
type: array
x-kubernetes-list-type: atomic
requiredDuringSchedulingIgnoredDuringExecution:
properties:
nodeSelectorTerms:
@ -428,11 +452,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchFields:
items:
properties:
@ -444,14 +470,17 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
type: object
x-kubernetes-map-type: atomic
type: array
x-kubernetes-list-type: atomic
required:
- nodeSelectorTerms
type: object
@ -477,11 +506,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -511,11 +542,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -526,6 +559,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
@ -539,6 +573,7 @@ spec:
- weight
type: object
type: array
x-kubernetes-list-type: atomic
requiredDuringSchedulingIgnoredDuringExecution:
items:
properties:
@ -555,11 +590,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -589,11 +626,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -604,12 +643,14 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
- topologyKey
type: object
type: array
x-kubernetes-list-type: atomic
type: object
podAntiAffinity:
properties:
@ -631,11 +672,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -665,11 +708,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -680,6 +725,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
@ -693,6 +739,7 @@ spec:
- weight
type: object
type: array
x-kubernetes-list-type: atomic
requiredDuringSchedulingIgnoredDuringExecution:
items:
properties:
@ -709,11 +756,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -743,11 +792,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -758,12 +809,14 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
- topologyKey
type: object
type: array
x-kubernetes-list-type: atomic
type: object
type: object
automountServiceAccountToken:
@ -775,10 +828,12 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
command:
items:
type: string
type: array
x-kubernetes-list-type: atomic
env:
items:
properties:
@ -793,6 +848,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -831,6 +887,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -843,12 +900,16 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
envFrom:
items:
properties:
configMapRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -859,6 +920,7 @@ spec:
secretRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -866,6 +928,7 @@ spec:
x-kubernetes-map-type: atomic
type: object
type: array
x-kubernetes-list-type: atomic
image:
type: string
imagePullPolicy:
@ -880,6 +943,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -897,6 +961,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -938,6 +1003,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -955,6 +1021,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -997,6 +1064,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1027,6 +1095,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1101,6 +1170,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1131,6 +1201,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1209,16 +1280,27 @@ spec:
properties:
allowPrivilegeEscalation:
type: boolean
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
capabilities:
properties:
add:
items:
type: string
type: array
x-kubernetes-list-type: atomic
drop:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
privileged:
type: boolean
@ -1274,6 +1356,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1304,6 +1387,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1366,6 +1450,9 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- devicePath
x-kubernetes-list-type: map
volumeMounts:
items:
properties:
@ -1377,6 +1464,8 @@ spec:
type: string
readOnly:
type: boolean
recursiveReadOnly:
type: string
subPath:
type: string
subPathExpr:
@ -1386,18 +1475,25 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- mountPath
x-kubernetes-list-type: map
workingDir:
type: string
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
dnsConfig:
properties:
nameservers:
items:
type: string
type: array
x-kubernetes-list-type: atomic
options:
items:
properties:
@ -1407,10 +1503,12 @@ spec:
type: string
type: object
type: array
x-kubernetes-list-type: atomic
searches:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
dnsPolicy:
type: string
@ -1423,10 +1521,12 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
command:
items:
type: string
type: array
x-kubernetes-list-type: atomic
env:
items:
properties:
@ -1441,6 +1541,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -1479,6 +1580,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -1491,12 +1593,16 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
envFrom:
items:
properties:
configMapRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -1507,6 +1613,7 @@ spec:
secretRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -1514,6 +1621,7 @@ spec:
x-kubernetes-map-type: atomic
type: object
type: array
x-kubernetes-list-type: atomic
image:
type: string
imagePullPolicy:
@ -1528,6 +1636,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -1545,6 +1654,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1586,6 +1696,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -1603,6 +1714,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1645,6 +1757,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1675,6 +1788,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1749,6 +1863,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1779,6 +1894,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1857,16 +1973,27 @@ spec:
properties:
allowPrivilegeEscalation:
type: boolean
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
capabilities:
properties:
add:
items:
type: string
type: array
x-kubernetes-list-type: atomic
drop:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
privileged:
type: boolean
@ -1922,6 +2049,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1952,6 +2080,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2016,6 +2145,9 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- devicePath
x-kubernetes-list-type: map
volumeMounts:
items:
properties:
@ -2027,6 +2159,8 @@ spec:
type: string
readOnly:
type: boolean
recursiveReadOnly:
type: string
subPath:
type: string
subPathExpr:
@ -2036,12 +2170,18 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- mountPath
x-kubernetes-list-type: map
workingDir:
type: string
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
hostAliases:
items:
properties:
@ -2049,10 +2189,16 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
ip:
type: string
required:
- ip
type: object
type: array
x-kubernetes-list-map-keys:
- ip
x-kubernetes-list-type: map
hostIPC:
type: boolean
hostNetwork:
@ -2067,10 +2213,14 @@ spec:
items:
properties:
name:
default: ""
type: string
type: object
x-kubernetes-map-type: atomic
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
initContainers:
items:
properties:
@ -2078,10 +2228,12 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
command:
items:
type: string
type: array
x-kubernetes-list-type: atomic
env:
items:
properties:
@ -2096,6 +2248,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -2134,6 +2287,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -2146,12 +2300,16 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
envFrom:
items:
properties:
configMapRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -2162,6 +2320,7 @@ spec:
secretRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -2169,6 +2328,7 @@ spec:
x-kubernetes-map-type: atomic
type: object
type: array
x-kubernetes-list-type: atomic
image:
type: string
imagePullPolicy:
@ -2183,6 +2343,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -2200,6 +2361,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2241,6 +2403,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -2258,6 +2421,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2300,6 +2464,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -2330,6 +2495,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2404,6 +2570,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -2434,6 +2601,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2512,16 +2680,27 @@ spec:
properties:
allowPrivilegeEscalation:
type: boolean
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
capabilities:
properties:
add:
items:
type: string
type: array
x-kubernetes-list-type: atomic
drop:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
privileged:
type: boolean
@ -2577,6 +2756,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -2607,6 +2787,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2669,6 +2850,9 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- devicePath
x-kubernetes-list-type: map
volumeMounts:
items:
properties:
@ -2680,6 +2864,8 @@ spec:
type: string
readOnly:
type: boolean
recursiveReadOnly:
type: string
subPath:
type: string
subPathExpr:
@ -2689,12 +2875,18 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- mountPath
x-kubernetes-list-type: map
workingDir:
type: string
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
nodeName:
type: string
nodeSelector:
@ -2733,6 +2925,7 @@ spec:
- conditionType
type: object
type: array
x-kubernetes-list-type: atomic
resourceClaims:
items:
properties:
@ -2772,6 +2965,15 @@ spec:
x-kubernetes-list-type: map
securityContext:
properties:
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
fsGroup:
format: int64
type: integer
@ -2810,6 +3012,7 @@ spec:
format: int64
type: integer
type: array
x-kubernetes-list-type: atomic
sysctls:
items:
properties:
@ -2822,6 +3025,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
windowsOptions:
properties:
gmsaCredentialSpec:
@ -2863,6 +3067,7 @@ spec:
type: string
type: object
type: array
x-kubernetes-list-type: atomic
topologySpreadConstraints:
items:
properties:
@ -2879,11 +3084,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string

View File

@ -13,7 +13,6 @@ spec:
shortNames:
- at
singular: analysistemplate
preserveUnknownFields: false
scope: Namespaced
versions:
- additionalPrinterColumns:
@ -259,6 +258,8 @@ spec:
completions:
format: int32
type: integer
managedBy:
type: string
manualSelector:
type: boolean
maxFailedIndexes:
@ -326,17 +327,35 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
type: object
type: object
x-kubernetes-map-type: atomic
successPolicy:
properties:
rules:
items:
properties:
succeededCount:
format: int32
type: integer
succeededIndexes:
type: string
type: object
type: array
x-kubernetes-list-type: atomic
required:
- rules
type: object
suspend:
type: boolean
template:
@ -377,11 +396,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchFields:
items:
properties:
@ -393,11 +414,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
type: object
x-kubernetes-map-type: atomic
weight:
@ -408,6 +431,7 @@ spec:
- weight
type: object
type: array
x-kubernetes-list-type: atomic
requiredDuringSchedulingIgnoredDuringExecution:
properties:
nodeSelectorTerms:
@ -424,11 +448,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchFields:
items:
properties:
@ -440,14 +466,17 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
type: object
x-kubernetes-map-type: atomic
type: array
x-kubernetes-list-type: atomic
required:
- nodeSelectorTerms
type: object
@ -473,11 +502,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -507,11 +538,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -522,6 +555,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
@ -535,6 +569,7 @@ spec:
- weight
type: object
type: array
x-kubernetes-list-type: atomic
requiredDuringSchedulingIgnoredDuringExecution:
items:
properties:
@ -551,11 +586,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -585,11 +622,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -600,12 +639,14 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
- topologyKey
type: object
type: array
x-kubernetes-list-type: atomic
type: object
podAntiAffinity:
properties:
@ -627,11 +668,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -661,11 +704,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -676,6 +721,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
@ -689,6 +735,7 @@ spec:
- weight
type: object
type: array
x-kubernetes-list-type: atomic
requiredDuringSchedulingIgnoredDuringExecution:
items:
properties:
@ -705,11 +752,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -739,11 +788,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -754,12 +805,14 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
- topologyKey
type: object
type: array
x-kubernetes-list-type: atomic
type: object
type: object
automountServiceAccountToken:
@ -771,10 +824,12 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
command:
items:
type: string
type: array
x-kubernetes-list-type: atomic
env:
items:
properties:
@ -789,6 +844,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -827,6 +883,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -839,12 +896,16 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
envFrom:
items:
properties:
configMapRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -855,6 +916,7 @@ spec:
secretRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -862,6 +924,7 @@ spec:
x-kubernetes-map-type: atomic
type: object
type: array
x-kubernetes-list-type: atomic
image:
type: string
imagePullPolicy:
@ -876,6 +939,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -893,6 +957,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -934,6 +999,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -951,6 +1017,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -993,6 +1060,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1023,6 +1091,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1097,6 +1166,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1127,6 +1197,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1205,16 +1276,27 @@ spec:
properties:
allowPrivilegeEscalation:
type: boolean
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
capabilities:
properties:
add:
items:
type: string
type: array
x-kubernetes-list-type: atomic
drop:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
privileged:
type: boolean
@ -1270,6 +1352,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1300,6 +1383,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1362,6 +1446,9 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- devicePath
x-kubernetes-list-type: map
volumeMounts:
items:
properties:
@ -1373,6 +1460,8 @@ spec:
type: string
readOnly:
type: boolean
recursiveReadOnly:
type: string
subPath:
type: string
subPathExpr:
@ -1382,18 +1471,25 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- mountPath
x-kubernetes-list-type: map
workingDir:
type: string
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
dnsConfig:
properties:
nameservers:
items:
type: string
type: array
x-kubernetes-list-type: atomic
options:
items:
properties:
@ -1403,10 +1499,12 @@ spec:
type: string
type: object
type: array
x-kubernetes-list-type: atomic
searches:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
dnsPolicy:
type: string
@ -1419,10 +1517,12 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
command:
items:
type: string
type: array
x-kubernetes-list-type: atomic
env:
items:
properties:
@ -1437,6 +1537,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -1475,6 +1576,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -1487,12 +1589,16 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
envFrom:
items:
properties:
configMapRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -1503,6 +1609,7 @@ spec:
secretRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -1510,6 +1617,7 @@ spec:
x-kubernetes-map-type: atomic
type: object
type: array
x-kubernetes-list-type: atomic
image:
type: string
imagePullPolicy:
@ -1524,6 +1632,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -1541,6 +1650,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1582,6 +1692,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -1599,6 +1710,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1641,6 +1753,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1671,6 +1784,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1745,6 +1859,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1775,6 +1890,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1853,16 +1969,27 @@ spec:
properties:
allowPrivilegeEscalation:
type: boolean
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
capabilities:
properties:
add:
items:
type: string
type: array
x-kubernetes-list-type: atomic
drop:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
privileged:
type: boolean
@ -1918,6 +2045,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1948,6 +2076,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2012,6 +2141,9 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- devicePath
x-kubernetes-list-type: map
volumeMounts:
items:
properties:
@ -2023,6 +2155,8 @@ spec:
type: string
readOnly:
type: boolean
recursiveReadOnly:
type: string
subPath:
type: string
subPathExpr:
@ -2032,12 +2166,18 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- mountPath
x-kubernetes-list-type: map
workingDir:
type: string
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
hostAliases:
items:
properties:
@ -2045,10 +2185,16 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
ip:
type: string
required:
- ip
type: object
type: array
x-kubernetes-list-map-keys:
- ip
x-kubernetes-list-type: map
hostIPC:
type: boolean
hostNetwork:
@ -2063,10 +2209,14 @@ spec:
items:
properties:
name:
default: ""
type: string
type: object
x-kubernetes-map-type: atomic
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
initContainers:
items:
properties:
@ -2074,10 +2224,12 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
command:
items:
type: string
type: array
x-kubernetes-list-type: atomic
env:
items:
properties:
@ -2092,6 +2244,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -2130,6 +2283,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -2142,12 +2296,16 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
envFrom:
items:
properties:
configMapRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -2158,6 +2316,7 @@ spec:
secretRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -2165,6 +2324,7 @@ spec:
x-kubernetes-map-type: atomic
type: object
type: array
x-kubernetes-list-type: atomic
image:
type: string
imagePullPolicy:
@ -2179,6 +2339,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -2196,6 +2357,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2237,6 +2399,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -2254,6 +2417,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2296,6 +2460,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -2326,6 +2491,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2400,6 +2566,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -2430,6 +2597,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2508,16 +2676,27 @@ spec:
properties:
allowPrivilegeEscalation:
type: boolean
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
capabilities:
properties:
add:
items:
type: string
type: array
x-kubernetes-list-type: atomic
drop:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
privileged:
type: boolean
@ -2573,6 +2752,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -2603,6 +2783,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2665,6 +2846,9 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- devicePath
x-kubernetes-list-type: map
volumeMounts:
items:
properties:
@ -2676,6 +2860,8 @@ spec:
type: string
readOnly:
type: boolean
recursiveReadOnly:
type: string
subPath:
type: string
subPathExpr:
@ -2685,12 +2871,18 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- mountPath
x-kubernetes-list-type: map
workingDir:
type: string
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
nodeName:
type: string
nodeSelector:
@ -2729,6 +2921,7 @@ spec:
- conditionType
type: object
type: array
x-kubernetes-list-type: atomic
resourceClaims:
items:
properties:
@ -2768,6 +2961,15 @@ spec:
x-kubernetes-list-type: map
securityContext:
properties:
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
fsGroup:
format: int64
type: integer
@ -2806,6 +3008,7 @@ spec:
format: int64
type: integer
type: array
x-kubernetes-list-type: atomic
sysctls:
items:
properties:
@ -2818,6 +3021,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
windowsOptions:
properties:
gmsaCredentialSpec:
@ -2859,6 +3063,7 @@ spec:
type: string
type: object
type: array
x-kubernetes-list-type: atomic
topologySpreadConstraints:
items:
properties:
@ -2875,11 +3080,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string

View File

@ -13,7 +13,6 @@ spec:
shortNames:
- cat
singular: clusteranalysistemplate
preserveUnknownFields: false
scope: Cluster
versions:
- additionalPrinterColumns:
@ -259,6 +258,8 @@ spec:
completions:
format: int32
type: integer
managedBy:
type: string
manualSelector:
type: boolean
maxFailedIndexes:
@ -326,17 +327,35 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
type: object
type: object
x-kubernetes-map-type: atomic
successPolicy:
properties:
rules:
items:
properties:
succeededCount:
format: int32
type: integer
succeededIndexes:
type: string
type: object
type: array
x-kubernetes-list-type: atomic
required:
- rules
type: object
suspend:
type: boolean
template:
@ -377,11 +396,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchFields:
items:
properties:
@ -393,11 +414,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
type: object
x-kubernetes-map-type: atomic
weight:
@ -408,6 +431,7 @@ spec:
- weight
type: object
type: array
x-kubernetes-list-type: atomic
requiredDuringSchedulingIgnoredDuringExecution:
properties:
nodeSelectorTerms:
@ -424,11 +448,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchFields:
items:
properties:
@ -440,14 +466,17 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
type: object
x-kubernetes-map-type: atomic
type: array
x-kubernetes-list-type: atomic
required:
- nodeSelectorTerms
type: object
@ -473,11 +502,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -507,11 +538,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -522,6 +555,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
@ -535,6 +569,7 @@ spec:
- weight
type: object
type: array
x-kubernetes-list-type: atomic
requiredDuringSchedulingIgnoredDuringExecution:
items:
properties:
@ -551,11 +586,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -585,11 +622,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -600,12 +639,14 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
- topologyKey
type: object
type: array
x-kubernetes-list-type: atomic
type: object
podAntiAffinity:
properties:
@ -627,11 +668,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -661,11 +704,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -676,6 +721,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
@ -689,6 +735,7 @@ spec:
- weight
type: object
type: array
x-kubernetes-list-type: atomic
requiredDuringSchedulingIgnoredDuringExecution:
items:
properties:
@ -705,11 +752,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -739,11 +788,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -754,12 +805,14 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
- topologyKey
type: object
type: array
x-kubernetes-list-type: atomic
type: object
type: object
automountServiceAccountToken:
@ -771,10 +824,12 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
command:
items:
type: string
type: array
x-kubernetes-list-type: atomic
env:
items:
properties:
@ -789,6 +844,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -827,6 +883,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -839,12 +896,16 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
envFrom:
items:
properties:
configMapRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -855,6 +916,7 @@ spec:
secretRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -862,6 +924,7 @@ spec:
x-kubernetes-map-type: atomic
type: object
type: array
x-kubernetes-list-type: atomic
image:
type: string
imagePullPolicy:
@ -876,6 +939,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -893,6 +957,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -934,6 +999,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -951,6 +1017,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -993,6 +1060,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1023,6 +1091,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1097,6 +1166,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1127,6 +1197,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1205,16 +1276,27 @@ spec:
properties:
allowPrivilegeEscalation:
type: boolean
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
capabilities:
properties:
add:
items:
type: string
type: array
x-kubernetes-list-type: atomic
drop:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
privileged:
type: boolean
@ -1270,6 +1352,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1300,6 +1383,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1362,6 +1446,9 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- devicePath
x-kubernetes-list-type: map
volumeMounts:
items:
properties:
@ -1373,6 +1460,8 @@ spec:
type: string
readOnly:
type: boolean
recursiveReadOnly:
type: string
subPath:
type: string
subPathExpr:
@ -1382,18 +1471,25 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- mountPath
x-kubernetes-list-type: map
workingDir:
type: string
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
dnsConfig:
properties:
nameservers:
items:
type: string
type: array
x-kubernetes-list-type: atomic
options:
items:
properties:
@ -1403,10 +1499,12 @@ spec:
type: string
type: object
type: array
x-kubernetes-list-type: atomic
searches:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
dnsPolicy:
type: string
@ -1419,10 +1517,12 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
command:
items:
type: string
type: array
x-kubernetes-list-type: atomic
env:
items:
properties:
@ -1437,6 +1537,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -1475,6 +1576,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -1487,12 +1589,16 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
envFrom:
items:
properties:
configMapRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -1503,6 +1609,7 @@ spec:
secretRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -1510,6 +1617,7 @@ spec:
x-kubernetes-map-type: atomic
type: object
type: array
x-kubernetes-list-type: atomic
image:
type: string
imagePullPolicy:
@ -1524,6 +1632,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -1541,6 +1650,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1582,6 +1692,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -1599,6 +1710,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1641,6 +1753,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1671,6 +1784,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1745,6 +1859,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1775,6 +1890,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1853,16 +1969,27 @@ spec:
properties:
allowPrivilegeEscalation:
type: boolean
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
capabilities:
properties:
add:
items:
type: string
type: array
x-kubernetes-list-type: atomic
drop:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
privileged:
type: boolean
@ -1918,6 +2045,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1948,6 +2076,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2012,6 +2141,9 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- devicePath
x-kubernetes-list-type: map
volumeMounts:
items:
properties:
@ -2023,6 +2155,8 @@ spec:
type: string
readOnly:
type: boolean
recursiveReadOnly:
type: string
subPath:
type: string
subPathExpr:
@ -2032,12 +2166,18 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- mountPath
x-kubernetes-list-type: map
workingDir:
type: string
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
hostAliases:
items:
properties:
@ -2045,10 +2185,16 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
ip:
type: string
required:
- ip
type: object
type: array
x-kubernetes-list-map-keys:
- ip
x-kubernetes-list-type: map
hostIPC:
type: boolean
hostNetwork:
@ -2063,10 +2209,14 @@ spec:
items:
properties:
name:
default: ""
type: string
type: object
x-kubernetes-map-type: atomic
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
initContainers:
items:
properties:
@ -2074,10 +2224,12 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
command:
items:
type: string
type: array
x-kubernetes-list-type: atomic
env:
items:
properties:
@ -2092,6 +2244,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -2130,6 +2283,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -2142,12 +2296,16 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
envFrom:
items:
properties:
configMapRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -2158,6 +2316,7 @@ spec:
secretRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -2165,6 +2324,7 @@ spec:
x-kubernetes-map-type: atomic
type: object
type: array
x-kubernetes-list-type: atomic
image:
type: string
imagePullPolicy:
@ -2179,6 +2339,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -2196,6 +2357,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2237,6 +2399,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -2254,6 +2417,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2296,6 +2460,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -2326,6 +2491,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2400,6 +2566,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -2430,6 +2597,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2508,16 +2676,27 @@ spec:
properties:
allowPrivilegeEscalation:
type: boolean
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
capabilities:
properties:
add:
items:
type: string
type: array
x-kubernetes-list-type: atomic
drop:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
privileged:
type: boolean
@ -2573,6 +2752,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -2603,6 +2783,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2665,6 +2846,9 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- devicePath
x-kubernetes-list-type: map
volumeMounts:
items:
properties:
@ -2676,6 +2860,8 @@ spec:
type: string
readOnly:
type: boolean
recursiveReadOnly:
type: string
subPath:
type: string
subPathExpr:
@ -2685,12 +2871,18 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- mountPath
x-kubernetes-list-type: map
workingDir:
type: string
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
nodeName:
type: string
nodeSelector:
@ -2729,6 +2921,7 @@ spec:
- conditionType
type: object
type: array
x-kubernetes-list-type: atomic
resourceClaims:
items:
properties:
@ -2768,6 +2961,15 @@ spec:
x-kubernetes-list-type: map
securityContext:
properties:
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
fsGroup:
format: int64
type: integer
@ -2806,6 +3008,7 @@ spec:
format: int64
type: integer
type: array
x-kubernetes-list-type: atomic
sysctls:
items:
properties:
@ -2818,6 +3021,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
windowsOptions:
properties:
gmsaCredentialSpec:
@ -2859,6 +3063,7 @@ spec:
type: string
type: object
type: array
x-kubernetes-list-type: atomic
topologySpreadConstraints:
items:
properties:
@ -2875,11 +3080,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string

View File

@ -13,7 +13,6 @@ spec:
shortNames:
- exp
singular: experiment
preserveUnknownFields: false
scope: Namespaced
versions:
- additionalPrinterColumns:
@ -149,11 +148,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -203,11 +204,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchFields:
items:
properties:
@ -219,11 +222,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
type: object
x-kubernetes-map-type: atomic
weight:
@ -234,6 +239,7 @@ spec:
- weight
type: object
type: array
x-kubernetes-list-type: atomic
requiredDuringSchedulingIgnoredDuringExecution:
properties:
nodeSelectorTerms:
@ -250,11 +256,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchFields:
items:
properties:
@ -266,14 +274,17 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
type: object
x-kubernetes-map-type: atomic
type: array
x-kubernetes-list-type: atomic
required:
- nodeSelectorTerms
type: object
@ -299,11 +310,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -333,11 +346,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -348,6 +363,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
@ -361,6 +377,7 @@ spec:
- weight
type: object
type: array
x-kubernetes-list-type: atomic
requiredDuringSchedulingIgnoredDuringExecution:
items:
properties:
@ -377,11 +394,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -411,11 +430,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -426,12 +447,14 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
- topologyKey
type: object
type: array
x-kubernetes-list-type: atomic
type: object
podAntiAffinity:
properties:
@ -453,11 +476,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -487,11 +512,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -502,6 +529,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
@ -515,6 +543,7 @@ spec:
- weight
type: object
type: array
x-kubernetes-list-type: atomic
requiredDuringSchedulingIgnoredDuringExecution:
items:
properties:
@ -531,11 +560,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -565,11 +596,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -580,12 +613,14 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
- topologyKey
type: object
type: array
x-kubernetes-list-type: atomic
type: object
type: object
automountServiceAccountToken:
@ -597,10 +632,12 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
command:
items:
type: string
type: array
x-kubernetes-list-type: atomic
env:
items:
properties:
@ -615,6 +652,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -653,6 +691,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -665,12 +704,16 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
envFrom:
items:
properties:
configMapRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -681,6 +724,7 @@ spec:
secretRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -688,6 +732,7 @@ spec:
x-kubernetes-map-type: atomic
type: object
type: array
x-kubernetes-list-type: atomic
image:
type: string
imagePullPolicy:
@ -702,6 +747,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -719,6 +765,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -760,6 +807,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -777,6 +825,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -819,6 +868,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -849,6 +899,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -923,6 +974,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -953,6 +1005,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1031,16 +1084,27 @@ spec:
properties:
allowPrivilegeEscalation:
type: boolean
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
capabilities:
properties:
add:
items:
type: string
type: array
x-kubernetes-list-type: atomic
drop:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
privileged:
type: boolean
@ -1096,6 +1160,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1126,6 +1191,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1188,6 +1254,9 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- devicePath
x-kubernetes-list-type: map
volumeMounts:
items:
properties:
@ -1199,6 +1268,8 @@ spec:
type: string
readOnly:
type: boolean
recursiveReadOnly:
type: string
subPath:
type: string
subPathExpr:
@ -1208,18 +1279,25 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- mountPath
x-kubernetes-list-type: map
workingDir:
type: string
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
dnsConfig:
properties:
nameservers:
items:
type: string
type: array
x-kubernetes-list-type: atomic
options:
items:
properties:
@ -1229,10 +1307,12 @@ spec:
type: string
type: object
type: array
x-kubernetes-list-type: atomic
searches:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
dnsPolicy:
type: string
@ -1245,10 +1325,12 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
command:
items:
type: string
type: array
x-kubernetes-list-type: atomic
env:
items:
properties:
@ -1263,6 +1345,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -1301,6 +1384,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -1313,12 +1397,16 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
envFrom:
items:
properties:
configMapRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -1329,6 +1417,7 @@ spec:
secretRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -1336,6 +1425,7 @@ spec:
x-kubernetes-map-type: atomic
type: object
type: array
x-kubernetes-list-type: atomic
image:
type: string
imagePullPolicy:
@ -1350,6 +1440,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -1367,6 +1458,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1408,6 +1500,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -1425,6 +1518,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1467,6 +1561,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1497,6 +1592,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1571,6 +1667,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1601,6 +1698,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1679,16 +1777,27 @@ spec:
properties:
allowPrivilegeEscalation:
type: boolean
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
capabilities:
properties:
add:
items:
type: string
type: array
x-kubernetes-list-type: atomic
drop:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
privileged:
type: boolean
@ -1744,6 +1853,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1774,6 +1884,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1838,6 +1949,9 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- devicePath
x-kubernetes-list-type: map
volumeMounts:
items:
properties:
@ -1849,6 +1963,8 @@ spec:
type: string
readOnly:
type: boolean
recursiveReadOnly:
type: string
subPath:
type: string
subPathExpr:
@ -1858,12 +1974,18 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- mountPath
x-kubernetes-list-type: map
workingDir:
type: string
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
hostAliases:
items:
properties:
@ -1871,10 +1993,16 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
ip:
type: string
required:
- ip
type: object
type: array
x-kubernetes-list-map-keys:
- ip
x-kubernetes-list-type: map
hostIPC:
type: boolean
hostNetwork:
@ -1889,10 +2017,14 @@ spec:
items:
properties:
name:
default: ""
type: string
type: object
x-kubernetes-map-type: atomic
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
initContainers:
items:
properties:
@ -1900,10 +2032,12 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
command:
items:
type: string
type: array
x-kubernetes-list-type: atomic
env:
items:
properties:
@ -1918,6 +2052,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -1956,6 +2091,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -1968,12 +2104,16 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
envFrom:
items:
properties:
configMapRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -1984,6 +2124,7 @@ spec:
secretRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -1991,6 +2132,7 @@ spec:
x-kubernetes-map-type: atomic
type: object
type: array
x-kubernetes-list-type: atomic
image:
type: string
imagePullPolicy:
@ -2005,6 +2147,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -2022,6 +2165,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2063,6 +2207,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -2080,6 +2225,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2122,6 +2268,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -2152,6 +2299,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2226,6 +2374,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -2256,6 +2405,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2334,16 +2484,27 @@ spec:
properties:
allowPrivilegeEscalation:
type: boolean
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
capabilities:
properties:
add:
items:
type: string
type: array
x-kubernetes-list-type: atomic
drop:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
privileged:
type: boolean
@ -2399,6 +2560,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -2429,6 +2591,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2491,6 +2654,9 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- devicePath
x-kubernetes-list-type: map
volumeMounts:
items:
properties:
@ -2502,6 +2668,8 @@ spec:
type: string
readOnly:
type: boolean
recursiveReadOnly:
type: string
subPath:
type: string
subPathExpr:
@ -2511,12 +2679,18 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- mountPath
x-kubernetes-list-type: map
workingDir:
type: string
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
nodeName:
type: string
nodeSelector:
@ -2555,6 +2729,7 @@ spec:
- conditionType
type: object
type: array
x-kubernetes-list-type: atomic
resourceClaims:
items:
properties:
@ -2594,6 +2769,15 @@ spec:
x-kubernetes-list-type: map
securityContext:
properties:
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
fsGroup:
format: int64
type: integer
@ -2632,6 +2816,7 @@ spec:
format: int64
type: integer
type: array
x-kubernetes-list-type: atomic
sysctls:
items:
properties:
@ -2644,6 +2829,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
windowsOptions:
properties:
gmsaCredentialSpec:
@ -2685,6 +2871,7 @@ spec:
type: string
type: object
type: array
x-kubernetes-list-type: atomic
topologySpreadConstraints:
items:
properties:
@ -2701,11 +2888,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string

View File

@ -13,7 +13,6 @@ spec:
shortNames:
- ro
singular: rollout
preserveUnknownFields: false
scope: Namespaced
versions:
- additionalPrinterColumns:
@ -98,17 +97,22 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
type: object
type: object
x-kubernetes-map-type: atomic
x-kubernetes-validations:
- message: .spec.selector is immutable
rule: self == oldSelf
strategy:
properties:
blueGreen:
@ -440,6 +444,17 @@ spec:
- pingService
- pongService
type: object
replicaProgressThreshold:
properties:
type:
type: string
value:
format: int32
type: integer
required:
- type
- value
type: object
scaleDownDelayRevisionLimit:
format: int32
type: integer
@ -625,11 +640,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -1013,11 +1030,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchFields:
items:
properties:
@ -1029,11 +1048,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
type: object
x-kubernetes-map-type: atomic
weight:
@ -1044,6 +1065,7 @@ spec:
- weight
type: object
type: array
x-kubernetes-list-type: atomic
requiredDuringSchedulingIgnoredDuringExecution:
properties:
nodeSelectorTerms:
@ -1060,11 +1082,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchFields:
items:
properties:
@ -1076,14 +1100,17 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
type: object
x-kubernetes-map-type: atomic
type: array
x-kubernetes-list-type: atomic
required:
- nodeSelectorTerms
type: object
@ -1109,11 +1136,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -1143,11 +1172,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -1158,6 +1189,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
@ -1171,6 +1203,7 @@ spec:
- weight
type: object
type: array
x-kubernetes-list-type: atomic
requiredDuringSchedulingIgnoredDuringExecution:
items:
properties:
@ -1187,11 +1220,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -1221,11 +1256,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -1236,12 +1273,14 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
- topologyKey
type: object
type: array
x-kubernetes-list-type: atomic
type: object
podAntiAffinity:
properties:
@ -1263,11 +1302,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -1297,11 +1338,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -1312,6 +1355,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
@ -1325,6 +1369,7 @@ spec:
- weight
type: object
type: array
x-kubernetes-list-type: atomic
requiredDuringSchedulingIgnoredDuringExecution:
items:
properties:
@ -1341,11 +1386,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -1375,11 +1422,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -1390,12 +1439,14 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
topologyKey:
type: string
required:
- topologyKey
type: object
type: array
x-kubernetes-list-type: atomic
type: object
type: object
automountServiceAccountToken:
@ -1407,10 +1458,12 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
command:
items:
type: string
type: array
x-kubernetes-list-type: atomic
env:
items:
properties:
@ -1425,6 +1478,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -1463,6 +1517,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -1475,12 +1530,16 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
envFrom:
items:
properties:
configMapRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -1491,6 +1550,7 @@ spec:
secretRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -1498,6 +1558,7 @@ spec:
x-kubernetes-map-type: atomic
type: object
type: array
x-kubernetes-list-type: atomic
image:
type: string
imagePullPolicy:
@ -1512,6 +1573,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -1529,6 +1591,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1570,6 +1633,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -1587,6 +1651,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1629,6 +1694,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1659,6 +1725,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1733,6 +1800,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1763,6 +1831,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1841,16 +1910,27 @@ spec:
properties:
allowPrivilegeEscalation:
type: boolean
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
capabilities:
properties:
add:
items:
type: string
type: array
x-kubernetes-list-type: atomic
drop:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
privileged:
type: boolean
@ -1906,6 +1986,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -1936,6 +2017,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -1998,6 +2080,9 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- devicePath
x-kubernetes-list-type: map
volumeMounts:
items:
properties:
@ -2009,6 +2094,8 @@ spec:
type: string
readOnly:
type: boolean
recursiveReadOnly:
type: string
subPath:
type: string
subPathExpr:
@ -2018,18 +2105,25 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- mountPath
x-kubernetes-list-type: map
workingDir:
type: string
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
dnsConfig:
properties:
nameservers:
items:
type: string
type: array
x-kubernetes-list-type: atomic
options:
items:
properties:
@ -2039,10 +2133,12 @@ spec:
type: string
type: object
type: array
x-kubernetes-list-type: atomic
searches:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
dnsPolicy:
type: string
@ -2055,10 +2151,12 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
command:
items:
type: string
type: array
x-kubernetes-list-type: atomic
env:
items:
properties:
@ -2073,6 +2171,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -2111,6 +2210,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -2123,12 +2223,16 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
envFrom:
items:
properties:
configMapRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -2139,6 +2243,7 @@ spec:
secretRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -2146,6 +2251,7 @@ spec:
x-kubernetes-map-type: atomic
type: object
type: array
x-kubernetes-list-type: atomic
image:
type: string
imagePullPolicy:
@ -2160,6 +2266,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -2177,6 +2284,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2218,6 +2326,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -2235,6 +2344,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2277,6 +2387,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -2307,6 +2418,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2381,6 +2493,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -2411,6 +2524,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2489,16 +2603,27 @@ spec:
properties:
allowPrivilegeEscalation:
type: boolean
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
capabilities:
properties:
add:
items:
type: string
type: array
x-kubernetes-list-type: atomic
drop:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
privileged:
type: boolean
@ -2554,6 +2679,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -2584,6 +2710,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2648,6 +2775,9 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- devicePath
x-kubernetes-list-type: map
volumeMounts:
items:
properties:
@ -2659,6 +2789,8 @@ spec:
type: string
readOnly:
type: boolean
recursiveReadOnly:
type: string
subPath:
type: string
subPathExpr:
@ -2668,12 +2800,18 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- mountPath
x-kubernetes-list-type: map
workingDir:
type: string
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
hostAliases:
items:
properties:
@ -2681,10 +2819,16 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
ip:
type: string
required:
- ip
type: object
type: array
x-kubernetes-list-map-keys:
- ip
x-kubernetes-list-type: map
hostIPC:
type: boolean
hostNetwork:
@ -2699,10 +2843,14 @@ spec:
items:
properties:
name:
default: ""
type: string
type: object
x-kubernetes-map-type: atomic
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
initContainers:
items:
properties:
@ -2710,10 +2858,12 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
command:
items:
type: string
type: array
x-kubernetes-list-type: atomic
env:
items:
properties:
@ -2728,6 +2878,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -2766,6 +2917,7 @@ spec:
key:
type: string
name:
default: ""
type: string
optional:
type: boolean
@ -2778,12 +2930,16 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
envFrom:
items:
properties:
configMapRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -2794,6 +2950,7 @@ spec:
secretRef:
properties:
name:
default: ""
type: string
optional:
type: boolean
@ -2801,6 +2958,7 @@ spec:
x-kubernetes-map-type: atomic
type: object
type: array
x-kubernetes-list-type: atomic
image:
type: string
imagePullPolicy:
@ -2815,6 +2973,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -2832,6 +2991,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2873,6 +3033,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
httpGet:
properties:
@ -2890,6 +3051,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -2932,6 +3094,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -2962,6 +3125,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -3036,6 +3200,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -3066,6 +3231,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -3144,16 +3310,27 @@ spec:
properties:
allowPrivilegeEscalation:
type: boolean
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
capabilities:
properties:
add:
items:
type: string
type: array
x-kubernetes-list-type: atomic
drop:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
privileged:
type: boolean
@ -3209,6 +3386,7 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
type: object
failureThreshold:
format: int32
@ -3239,6 +3417,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
path:
type: string
port:
@ -3301,6 +3480,9 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- devicePath
x-kubernetes-list-type: map
volumeMounts:
items:
properties:
@ -3312,6 +3494,8 @@ spec:
type: string
readOnly:
type: boolean
recursiveReadOnly:
type: string
subPath:
type: string
subPathExpr:
@ -3321,12 +3505,18 @@ spec:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- mountPath
x-kubernetes-list-type: map
workingDir:
type: string
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
nodeName:
type: string
nodeSelector:
@ -3365,6 +3555,7 @@ spec:
- conditionType
type: object
type: array
x-kubernetes-list-type: atomic
resourceClaims:
items:
properties:
@ -3404,6 +3595,15 @@ spec:
x-kubernetes-list-type: map
securityContext:
properties:
appArmorProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
fsGroup:
format: int64
type: integer
@ -3442,6 +3642,7 @@ spec:
format: int64
type: integer
type: array
x-kubernetes-list-type: atomic
sysctls:
items:
properties:
@ -3454,6 +3655,7 @@ spec:
- value
type: object
type: array
x-kubernetes-list-type: atomic
windowsOptions:
properties:
gmsaCredentialSpec:
@ -3495,6 +3697,7 @@ spec:
type: string
type: object
type: array
x-kubernetes-list-type: atomic
topologySpreadConstraints:
items:
properties:
@ -3511,11 +3714,13 @@ spec:
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
@ -3552,9 +3757,7 @@ spec:
- whenUnsatisfiable
x-kubernetes-list-type: map
volumes:
items:
x-kubernetes-preserve-unknown-fields: true
type: array
x-kubernetes-preserve-unknown-fields: true
required:
- containers
type: object

File diff suppressed because it is too large Load Diff

View File

@ -192,6 +192,7 @@ rules:
- get
- apiGroups:
- elbv2.k8s.aws
- eks.amazonaws.com
resources:
- targetgroupbindings
verbs:

View File

@ -197,6 +197,7 @@ rules:
- get
- apiGroups:
- elbv2.k8s.aws
- eks.amazonaws.com
resources:
- targetgroupbindings
verbs:

View File

@ -12,7 +12,7 @@ import (
"github.com/stretchr/testify/assert"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/utils/pointer"
"k8s.io/utils/ptr"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
)
@ -242,65 +242,65 @@ func TestConvertType(t *testing.T) {
query: []v1alpha1.CloudWatchMetricDataQuery{
{
Id: "rate",
Expression: pointer.StringPtr("errors / requests"),
Expression: ptr.To[string]("errors / requests"),
},
{
Id: "errors",
MetricStat: &v1alpha1.CloudWatchMetricStat{
Metric: v1alpha1.CloudWatchMetricStatMetric{
Namespace: pointer.StringPtr("app"),
Namespace: ptr.To[string]("app"),
MetricName: "errors",
},
Period: period,
Stat: "Sum",
Unit: "Count",
},
ReturnData: pointer.BoolPtr(false),
ReturnData: ptr.To[bool](false),
},
{
Id: "requests",
MetricStat: &v1alpha1.CloudWatchMetricStat{
Metric: v1alpha1.CloudWatchMetricStatMetric{
Namespace: pointer.StringPtr("app"),
Namespace: ptr.To[string]("app"),
MetricName: "requests",
},
Period: period,
Stat: "Sum",
Unit: "Count",
},
ReturnData: pointer.BoolPtr(false),
ReturnData: ptr.To[bool](false),
},
},
expected: []types.MetricDataQuery{
{
Id: pointer.StringPtr("rate"),
Expression: pointer.StringPtr("errors / requests"),
Id: ptr.To[string]("rate"),
Expression: ptr.To[string]("errors / requests"),
},
{
Id: pointer.StringPtr("errors"),
Id: ptr.To[string]("errors"),
MetricStat: &types.MetricStat{
Metric: &types.Metric{
Namespace: pointer.StringPtr("app"),
MetricName: pointer.StringPtr("errors"),
Namespace: ptr.To[string]("app"),
MetricName: ptr.To[string]("errors"),
},
Period: pointer.Int32Ptr(300),
Stat: pointer.StringPtr("Sum"),
Period: ptr.To[int32](300),
Stat: ptr.To[string]("Sum"),
Unit: types.StandardUnitCount,
},
ReturnData: pointer.BoolPtr(false),
ReturnData: ptr.To[bool](false),
},
{
Id: pointer.StringPtr("requests"),
Id: ptr.To[string]("requests"),
MetricStat: &types.MetricStat{
Metric: &types.Metric{
Namespace: pointer.StringPtr("app"),
MetricName: pointer.StringPtr("requests"),
Namespace: ptr.To[string]("app"),
MetricName: ptr.To[string]("requests"),
},
Period: pointer.Int32Ptr(300),
Stat: pointer.StringPtr("Sum"),
Period: ptr.To[int32](300),
Stat: ptr.To[string]("Sum"),
Unit: types.StandardUnitCount,
},
ReturnData: pointer.BoolPtr(false),
ReturnData: ptr.To[bool](false),
},
},
},
@ -308,7 +308,7 @@ func TestConvertType(t *testing.T) {
query: []v1alpha1.CloudWatchMetricDataQuery{
{
Id: "rate",
Expression: pointer.StringPtr("errors / requests"),
Expression: ptr.To[string]("errors / requests"),
},
{
Id: "errors",
@ -320,65 +320,65 @@ func TestConvertType(t *testing.T) {
Value: "fuga",
},
},
Namespace: pointer.StringPtr("app1"),
Namespace: ptr.To[string]("app1"),
MetricName: "errors",
},
Period: period,
Stat: "Max",
Unit: "Count",
},
ReturnData: pointer.BoolPtr(false),
ReturnData: ptr.To[bool](false),
},
{
Id: "requests",
MetricStat: &v1alpha1.CloudWatchMetricStat{
Metric: v1alpha1.CloudWatchMetricStatMetric{
Namespace: pointer.StringPtr("app2"),
Namespace: ptr.To[string]("app2"),
MetricName: "requests",
},
Period: period,
Stat: "Sum",
Unit: "Bytes/Second",
},
ReturnData: pointer.BoolPtr(true),
ReturnData: ptr.To[bool](true),
},
},
expected: []types.MetricDataQuery{
{
Id: pointer.StringPtr("rate"),
Expression: pointer.StringPtr("errors / requests"),
Id: ptr.To[string]("rate"),
Expression: ptr.To[string]("errors / requests"),
},
{
Id: pointer.StringPtr("errors"),
Id: ptr.To[string]("errors"),
MetricStat: &types.MetricStat{
Metric: &types.Metric{
Namespace: pointer.StringPtr("app1"),
MetricName: pointer.StringPtr("errors"),
Namespace: ptr.To[string]("app1"),
MetricName: ptr.To[string]("errors"),
Dimensions: []types.Dimension{
{
Name: pointer.StringPtr("hoge"),
Value: pointer.StringPtr("fuga"),
Name: ptr.To[string]("hoge"),
Value: ptr.To[string]("fuga"),
},
},
},
Period: pointer.Int32Ptr(300),
Stat: pointer.StringPtr("Max"),
Period: ptr.To[int32](300),
Stat: ptr.To[string]("Max"),
Unit: types.StandardUnitCount,
},
ReturnData: pointer.BoolPtr(false),
ReturnData: ptr.To[bool](false),
},
{
Id: pointer.StringPtr("requests"),
Id: ptr.To[string]("requests"),
MetricStat: &types.MetricStat{
Metric: &types.Metric{
Namespace: pointer.StringPtr("app2"),
MetricName: pointer.StringPtr("requests"),
Namespace: ptr.To[string]("app2"),
MetricName: ptr.To[string]("requests"),
},
Period: pointer.Int32Ptr(300),
Stat: pointer.StringPtr("Sum"),
Period: ptr.To[int32](300),
Stat: ptr.To[string]("Sum"),
Unit: types.StandardUnitBytesSecond,
},
ReturnData: pointer.BoolPtr(true),
ReturnData: ptr.To[bool](true),
},
},
},
@ -386,7 +386,7 @@ func TestConvertType(t *testing.T) {
query: []v1alpha1.CloudWatchMetricDataQuery{
{
Id: "rate",
Expression: pointer.StringPtr("errors / requests"),
Expression: ptr.To[string]("errors / requests"),
},
{
Id: "errors",
@ -402,69 +402,69 @@ func TestConvertType(t *testing.T) {
Value: "doge",
},
},
Namespace: pointer.StringPtr("app1"),
Namespace: ptr.To[string]("app1"),
MetricName: "errors",
},
Period: period,
Stat: "Max",
Unit: "Count",
},
ReturnData: pointer.BoolPtr(false),
ReturnData: ptr.To[bool](false),
},
{
Id: "requests",
MetricStat: &v1alpha1.CloudWatchMetricStat{
Metric: v1alpha1.CloudWatchMetricStatMetric{
Namespace: pointer.StringPtr("app2"),
Namespace: ptr.To[string]("app2"),
MetricName: "requests",
},
Period: period,
Stat: "Sum",
Unit: "Bytes/Second",
},
ReturnData: pointer.BoolPtr(true),
ReturnData: ptr.To[bool](true),
},
},
expected: []types.MetricDataQuery{
{
Id: pointer.StringPtr("rate"),
Expression: pointer.StringPtr("errors / requests"),
Id: ptr.To[string]("rate"),
Expression: ptr.To[string]("errors / requests"),
},
{
Id: pointer.StringPtr("errors"),
Id: ptr.To[string]("errors"),
MetricStat: &types.MetricStat{
Metric: &types.Metric{
Namespace: pointer.StringPtr("app1"),
MetricName: pointer.StringPtr("errors"),
Namespace: ptr.To[string]("app1"),
MetricName: ptr.To[string]("errors"),
Dimensions: []types.Dimension{
{
Name: pointer.StringPtr("hoge"),
Value: pointer.StringPtr("fuga"),
Name: ptr.To[string]("hoge"),
Value: ptr.To[string]("fuga"),
},
{
Name: pointer.StringPtr("poge"),
Value: pointer.StringPtr("doge"),
Name: ptr.To[string]("poge"),
Value: ptr.To[string]("doge"),
},
},
},
Period: pointer.Int32Ptr(300),
Stat: pointer.StringPtr("Max"),
Period: ptr.To[int32](300),
Stat: ptr.To[string]("Max"),
Unit: types.StandardUnitCount,
},
ReturnData: pointer.BoolPtr(false),
ReturnData: ptr.To[bool](false),
},
{
Id: pointer.StringPtr("requests"),
Id: ptr.To[string]("requests"),
MetricStat: &types.MetricStat{
Metric: &types.Metric{
Namespace: pointer.StringPtr("app2"),
MetricName: pointer.StringPtr("requests"),
Namespace: ptr.To[string]("app2"),
MetricName: ptr.To[string]("requests"),
},
Period: pointer.Int32Ptr(300),
Stat: pointer.StringPtr("Sum"),
Period: ptr.To[int32](300),
Stat: ptr.To[string]("Sum"),
Unit: types.StandardUnitBytesSecond,
},
ReturnData: pointer.BoolPtr(true),
ReturnData: ptr.To[bool](true),
},
},
},

View File

@ -451,7 +451,7 @@ func findCredentials(logCtx log.Entry, kubeclientset kubernetes.Interface, names
}
for _, finder := range finders {
address, apiKey, appKey := finder.FindCredentials(logCtx)
if address != "" && apiKey != "" && appKey != "" {
if apiKey != "" && appKey != "" {
return address, apiKey, appKey, nil
}
}

View File

@ -8,7 +8,6 @@ import (
"strconv"
"testing"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
log "github.com/sirupsen/logrus"
"github.com/stretchr/testify/assert"
corev1 "k8s.io/api/core/v1"
@ -16,6 +15,8 @@ import (
"k8s.io/apimachinery/pkg/runtime"
k8sfake "k8s.io/client-go/kubernetes/fake"
kubetesting "k8s.io/client-go/testing"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
)
func TestRunSuite(t *testing.T) {

View File

@ -8,7 +8,6 @@ import (
"os"
"testing"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
log "github.com/sirupsen/logrus"
"github.com/stretchr/testify/assert"
corev1 "k8s.io/api/core/v1"
@ -16,6 +15,8 @@ import (
"k8s.io/apimachinery/pkg/runtime"
k8sfake "k8s.io/client-go/kubernetes/fake"
kubetesting "k8s.io/client-go/testing"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
)
func newQueryDefaultProvider() v1alpha1.MetricProvider {

View File

@ -6,7 +6,6 @@ import (
"os"
"testing"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
log "github.com/sirupsen/logrus"
"github.com/stretchr/testify/assert"
corev1 "k8s.io/api/core/v1"
@ -15,6 +14,8 @@ import (
k8sfake "k8s.io/client-go/kubernetes/fake"
"k8s.io/client-go/kubernetes/scheme"
kubetesting "k8s.io/client-go/testing"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
)
func TestDatadogSpecDefaults(t *testing.T) {
@ -187,16 +188,23 @@ func TestValidateIncomingProps(t *testing.T) {
func TestFindCredentials(t *testing.T) {
testCases := []struct {
name string
secret *corev1.Secret
expectsError bool
metric v1alpha1.Metric
name string
secret *corev1.Secret
expectsError bool
expectsEmptyAddress bool
metric v1alpha1.Metric
}{
{
name: "when secretRef is set and secret found, should success",
secret: NewSecretBuilderDefaultData().Build(),
metric: newMetric("datadog", true),
},
{
name: "when secretRef without address is set and secret found, should success",
secret: NewSecretBuilder().WithData("api-key", []byte("apiKey")).WithData("app-key", []byte("appKey")).Build(),
metric: newMetric("datadog", true),
expectsEmptyAddress: true,
},
{
name: "when secretRef is set but secret not found, should fail",
secret: NewSecretBuilder().Build(),
@ -222,7 +230,11 @@ func TestFindCredentials(t *testing.T) {
address, apiKey, appKey, err := findCredentials(logCtx, fakeClient, "namespace", testCase.metric)
assert.Equal(t, err != nil, testCase.expectsError)
if !testCase.expectsError {
assert.Equal(t, string(testCase.secret.Data["address"]), address)
if testCase.expectsEmptyAddress {
assert.Empty(t, address)
} else {
assert.Equal(t, string(testCase.secret.Data["address"]), address)
}
assert.Equal(t, string(testCase.secret.Data["api-key"]), apiKey)
assert.Equal(t, string(testCase.secret.Data["app-key"]), appKey)
}

View File

@ -8,9 +8,10 @@ import (
"testing"
"time"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
log "github.com/sirupsen/logrus"
"github.com/stretchr/testify/assert"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
)
func testGraphiteMetric(addr string) v1alpha1.Metric {

View File

@ -6,14 +6,15 @@ import (
"fmt"
"time"
"github.com/argoproj/argo-rollouts/utils/defaults"
"github.com/argoproj/argo-rollouts/utils/evaluate"
influxdb2 "github.com/influxdata/influxdb-client-go/v2"
influxapi "github.com/influxdata/influxdb-client-go/v2/api"
log "github.com/sirupsen/logrus"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"github.com/argoproj/argo-rollouts/utils/defaults"
"github.com/argoproj/argo-rollouts/utils/evaluate"
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
metricutil "github.com/argoproj/argo-rollouts/utils/metric"
)

Some files were not shown because too many files have changed in this diff Show More