Compare commits
158 Commits
Author | SHA1 | Date |
---|---|---|
|
67d19e100f | |
|
b579b3d4d9 | |
|
b3447cbf96 | |
|
a9e566ea4f | |
|
87562252b3 | |
|
5e44d4b461 | |
|
401a5fab7e | |
|
d6d63f3330 | |
|
d4a935068d | |
|
1e03da7841 | |
|
848c9fa729 | |
|
caf2e6f4d2 | |
|
6dfe280d14 | |
|
468cfdf3d4 | |
|
92df0a35d2 | |
|
88ea0c519f | |
|
e2cdaf5f11 | |
|
f17316b9ac | |
|
c179d94d5a | |
|
4025384e2e | |
|
02cf24ebb3 | |
|
8668348cd4 | |
|
5ccf0a71e0 | |
|
3f677349be | |
|
db79990787 | |
|
599e7fa54e | |
|
473c14e360 | |
|
0a15908d66 | |
|
ccf0be9ccc | |
|
6e7560ad8d | |
|
8f536b4beb | |
|
2e31d0f550 | |
|
b32ed29b43 | |
|
287acaa919 | |
|
e9ac866296 | |
|
c44c9d2560 | |
|
16edf3a9b5 | |
|
80493f2018 | |
|
7ea5086021 | |
|
94376e6ed3 | |
|
06e887dcbf | |
|
6f391aaf03 | |
|
9b8655c72c | |
|
b296d31a85 | |
|
37b9d0bee1 | |
|
e7e512a606 | |
|
c98bc84159 | |
|
d2d958d1d2 | |
|
bd7a37c607 | |
|
39665b087c | |
|
5fe7bb8963 | |
|
bd6ec088f4 | |
|
2d24489418 | |
|
3427b15786 | |
|
2583845f27 | |
|
f4f7eabd6b | |
|
963e4f291b | |
|
38c3ff3584 | |
|
88f902cfcb | |
|
d49ab7eb0f | |
|
5bbc3723e2 | |
|
2b653644c0 | |
|
88e408d957 | |
|
507dc0c233 | |
|
659c13934f | |
|
933b7b3b1a | |
|
f4289b70eb | |
|
37368106ab | |
|
aa243dbba9 | |
|
7c0f995d8c | |
|
9e71a87087 | |
|
48377540ec | |
|
451ea40086 | |
|
b69c07cdf7 | |
|
2213b07592 | |
|
e033914389 | |
|
e876f43be9 | |
|
7b9279c5ae | |
|
6fbb625bdf | |
|
3cb61fa80a | |
|
444094a1ca | |
|
77a139861c | |
|
5e6936e06f | |
|
6e43cff7b2 | |
|
e4e1942a0c | |
|
494bfd909e | |
|
d35fcb5b4c | |
|
1672c67065 | |
|
445e1c2b78 | |
|
cb7c0fc7c8 | |
|
76b3898c04 | |
|
a748f05fde | |
|
d8994c0b19 | |
|
a312e28021 | |
|
44eee2ec3b | |
|
a9e10fb73e | |
|
420aacb133 | |
|
cbf36efaf8 | |
|
c8f165c1ca | |
|
70a946d56e | |
|
1d47a97cd3 | |
|
fa17918a9e | |
|
c3407844ca | |
|
ea914af830 | |
|
6761843977 | |
|
f829ae7984 | |
|
db8e065044 | |
|
42117f9af4 | |
|
7695f8a8de | |
|
4ecce02e70 | |
|
4580c2d1e2 | |
|
73fda66371 | |
|
38ed49959b | |
|
4f5d93bbe6 | |
|
723e81ca69 | |
|
236f878447 | |
|
dfa0eaef7c | |
|
78682686b9 | |
|
c25954dccf | |
|
f237af07be | |
|
b101632af0 | |
|
b6a9bec292 | |
|
e225d88da8 | |
|
086d4cb755 | |
|
8b5ecaed16 | |
|
7d02604f6d | |
|
c10bf66176 | |
|
99903543ee | |
|
5905525b4a | |
|
d6054867c6 | |
|
00210827b7 | |
|
ba05acf4fd | |
|
effef4477a | |
|
50cf6d7de9 | |
|
5c1a2a9000 | |
|
23c40c15ad | |
|
dbf5588e7e | |
|
00b57266b9 | |
|
efd3008a34 | |
|
c0ca5301bf | |
|
07c1028545 | |
|
1874afa10d | |
|
dc2e00e3a0 | |
|
097f5be132 | |
|
fde9cdeba9 | |
|
5904f6481f | |
|
6ca92be1fe | |
|
bdbb0f17c0 | |
|
8a800a8717 | |
|
0eec0d89f8 | |
|
707bd9f9eb | |
|
e808d6ef62 | |
|
e5a9307958 | |
|
c348ecf270 | |
|
6858812261 | |
|
25e2b535db | |
|
21d57165b9 | |
|
37193bf535 |
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 }}
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
.idea/
|
||||
.DS_Store
|
||||
dist/
|
||||
github.com/
|
||||
k8s.io/
|
||||
*.iml
|
||||
# delve debug binaries
|
||||
__debug_bin*
|
||||
|
@ -19,4 +21,5 @@ server/static/*
|
|||
!server/static/.gitkeep
|
||||
coverage-output-e2e/
|
||||
coverage-output-unit/
|
||||
junit-unit-test.xml
|
||||
junit*
|
||||
|
||||
|
|
|
@ -1,21 +1,41 @@
|
|||
version: "2"
|
||||
run:
|
||||
timeout: 10m
|
||||
modules-download-mode: readonly
|
||||
issues:
|
||||
exclude-dirs:
|
||||
- pkg/client
|
||||
exclude-files:
|
||||
- ".*\\.pb\\.go"
|
||||
linters-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$
|
||||
|
|
297
CHANGELOG.md
297
CHANGELOG.md
|
@ -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))
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
48
Makefile
48
Makefile
|
@ -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
|
||||
|
||||
|
|
13
USERS.md
13
USERS.md
|
@ -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)
|
||||
|
@ -47,19 +52,27 @@ Organizations below are **officially** using Argo Rollouts. Please send a PR wit
|
|||
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)
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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{
|
||||
|
|
|
@ -23,6 +23,8 @@ import (
|
|||
"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"
|
||||
|
@ -67,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
|
||||
|
@ -100,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)
|
||||
|
@ -114,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,
|
||||
|
@ -148,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
|
||||
|
@ -203,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()
|
||||
|
@ -215,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] {
|
||||
|
@ -271,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())
|
||||
|
@ -289,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")
|
||||
|
@ -299,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")
|
||||
|
@ -367,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 {
|
||||
|
|
|
@ -282,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")
|
||||
|
@ -346,6 +347,7 @@ func NewManager(
|
|||
IngressWorkQueue: ingressWorkqueue,
|
||||
MetricsServer: metricsServer,
|
||||
Recorder: recorder,
|
||||
EphemeralMetadataThreads: ephemeralMetadataThreads,
|
||||
})
|
||||
|
||||
experimentController := experiments.NewController(experiments.ControllerConfig{
|
||||
|
|
|
@ -269,6 +269,7 @@ func TestNewManager(t *testing.T) {
|
|||
false,
|
||||
nil,
|
||||
nil,
|
||||
rolloutController.DefaultEphemeralMetadataThreads,
|
||||
)
|
||||
|
||||
assert.NotNil(t, cm)
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -15,7 +15,7 @@ Argo CD understands the health of Argo Rollouts resources via Argo CD’s [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 CD’s 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
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -1151,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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -104,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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
```
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -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
|
||||
```
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||

|
||||
3. Generate a private key, and download it automatically
|
||||

|
||||
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
|
||||

|
||||
1. Generate a private key, and download it automatically
|
||||

|
||||
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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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).
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 (
|
||||
|
@ -137,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
|
||||
|
@ -157,6 +164,7 @@ func (ec *experimentContext) reconcileTemplate(template v1alpha1.TemplateSpec) {
|
|||
ec.scaleTemplateRS(rs, template, templateStatus, desiredReplicaCount, experimentReplicas)
|
||||
templateStatus.LastTransitionTime = &now
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if rs == nil {
|
||||
|
@ -272,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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -318,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)
|
||||
|
|
|
@ -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()),
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
196
go.mod
196
go.mod
|
@ -4,27 +4,27 @@ 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.29.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/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
|
||||
|
@ -110,17 +111,17 @@ require (
|
|||
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/go-openapi/swag v0.23.0 // indirect
|
||||
github.com/golang-jwt/jwt/v4 v4.5.2 // indirect
|
||||
github.com/golang/glog v1.2.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
|
||||
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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/"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#!/bin/sh
|
||||
set -euo pipefail
|
||||
set -x
|
||||
|
||||
# Grabbed from https://github.com/kubernetes/kubernetes/issues/79384
|
||||
VERSION=${1#"v"}
|
||||
|
|
|
@ -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)),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
@ -192,6 +192,7 @@ rules:
|
|||
- get
|
||||
- apiGroups:
|
||||
- elbv2.k8s.aws
|
||||
- eks.amazonaws.com
|
||||
resources:
|
||||
- targetgroupbindings
|
||||
verbs:
|
||||
|
|
|
@ -197,6 +197,7 @@ rules:
|
|||
- get
|
||||
- apiGroups:
|
||||
- elbv2.k8s.aws
|
||||
- eks.amazonaws.com
|
||||
resources:
|
||||
- targetgroupbindings
|
||||
verbs:
|
||||
|
|
|
@ -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),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -17,6 +17,7 @@ import (
|
|||
|
||||
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
|
||||
analysisutil "github.com/argoproj/argo-rollouts/utils/analysis"
|
||||
"github.com/argoproj/argo-rollouts/utils/defaults"
|
||||
metricutil "github.com/argoproj/argo-rollouts/utils/metric"
|
||||
timeutil "github.com/argoproj/argo-rollouts/utils/time"
|
||||
)
|
||||
|
@ -73,8 +74,19 @@ func (p *JobProvider) GetMetadata(metric v1alpha1.Metric) map[string]string {
|
|||
// fit into a 63 character label, since the k8s job controller incorporates the job name into the
|
||||
// pod spec labels.
|
||||
func newJobName(run *v1alpha1.AnalysisRun, metric v1alpha1.Metric) string {
|
||||
|
||||
jobID := getJobIDSuffix(run, metric.Name)
|
||||
return fmt.Sprintf("%s.%s.%d", run.UID, metric.Name, jobID)
|
||||
jobName := fmt.Sprintf("%s.%s.%d", run.UID, metric.Name, jobID)
|
||||
|
||||
// Kubernetes can accept this job name without any issues
|
||||
if len(jobName) <= defaults.Kubernetes_DNS_Limit {
|
||||
return jobName
|
||||
}
|
||||
|
||||
//We are over 63 characters so Kubernetes will reject this job name. We need to truncate it to 63 characters.
|
||||
charactersOverLimit := len(jobName) - defaults.Kubernetes_DNS_Limit
|
||||
truncateTo := len(metric.Name) - charactersOverLimit
|
||||
return fmt.Sprintf("%s.%s.%d", run.UID, metric.Name[:truncateTo], jobID)
|
||||
}
|
||||
|
||||
// getJobIDSuffix returns a numeric id which will be used as part of the job name. This is equal
|
||||
|
|
|
@ -21,6 +21,7 @@ import (
|
|||
"k8s.io/client-go/tools/cache"
|
||||
|
||||
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
|
||||
"github.com/argoproj/argo-rollouts/utils/defaults"
|
||||
)
|
||||
|
||||
var noResyncPeriodFunc = func() time.Duration { return 0 }
|
||||
|
@ -324,3 +325,75 @@ func TestGarbageCollect(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestJobNameWithin63characters(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
p := newTestJobProvider()
|
||||
run := newRunWithJobMetric()
|
||||
|
||||
// Set the UID to a realistic value
|
||||
run.UID = types.UID("34e4d823-4ba9-4afe-8775-6384561d7ef3")
|
||||
|
||||
// Create a metric with a short name that is within 63 characters (Kubernetes JOB DNS restriction)
|
||||
shortMetricName := "short-job-name"
|
||||
run.Spec.Metrics[0].Name = shortMetricName
|
||||
metric := run.Spec.Metrics[0]
|
||||
|
||||
// First measurement
|
||||
measurement := p.Run(run, metric)
|
||||
expectedName := fmt.Sprintf("%s.%s.1", run.UID, metric.Name)
|
||||
assert.Equal(t, expectedName, measurement.Metadata[JobNameKey], "Job name should not be truncated")
|
||||
|
||||
// Ensure the job was created with the correct name
|
||||
jobs, err := p.kubeclientset.BatchV1().Jobs(run.Namespace).List(ctx, metav1.ListOptions{})
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, expectedName, jobs.Items[0].Name, "Job name should match the expected name")
|
||||
|
||||
// Verify that the job name is less than or equal to 63 characters
|
||||
assert.LessOrEqual(t, len(jobs.Items[0].Name), defaults.Kubernetes_DNS_Limit, "Job name should be less than or equal to 63 characters")
|
||||
}
|
||||
|
||||
func TestJobNameWithTruncation(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
p := newTestJobProvider()
|
||||
run := newRunWithJobMetric()
|
||||
|
||||
// Set the UID to a realistic value
|
||||
run.UID = types.UID("5d610152-d78d-4af9-aa6a-81c227ea422c")
|
||||
|
||||
// Create a metric where the name itself is within limits, but it is larger than 63 characters if the UUID is included
|
||||
longMetricName := "service-endpoint-reachable"
|
||||
run.Spec.Metrics[0].Name = longMetricName
|
||||
metric := run.Spec.Metrics[0]
|
||||
|
||||
// First measurement
|
||||
measurement := p.Run(run, metric)
|
||||
assert.Len(t, measurement.Metadata[JobNameKey], defaults.Kubernetes_DNS_Limit, "Job name should be truncated to 63 characters")
|
||||
|
||||
// Ensure that job is submitted
|
||||
_, err := p.kubeclientset.BatchV1().Jobs(run.Namespace).List(ctx, metav1.ListOptions{})
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestLongJobName(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
p := newTestJobProvider()
|
||||
run := newRunWithJobMetric()
|
||||
|
||||
// Set the UID to a realistic value
|
||||
run.UID = types.UID("a3f5c9b2-1d4e-4b8a-9f3e-2c7d8e6a4b1c")
|
||||
|
||||
// Create a metric with a long name (70 characters) that is obviously longer than 63 characters
|
||||
longMetricName := "this-is-a-very-long-metric-name-that-is-exactly-seventy-characters-long"
|
||||
run.Spec.Metrics[0].Name = longMetricName
|
||||
metric := run.Spec.Metrics[0]
|
||||
|
||||
// First measurement
|
||||
measurement := p.Run(run, metric)
|
||||
assert.Len(t, measurement.Metadata[JobNameKey], defaults.Kubernetes_DNS_Limit, "Job name should be truncated to 63 characters")
|
||||
|
||||
// Ensure that job is submitted
|
||||
_, err := p.kubeclientset.BatchV1().Jobs(run.Namespace).List(ctx, metav1.ListOptions{})
|
||||
assert.NoError(t, err)
|
||||
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Code generated by mockery v2.42.2. DO NOT EDIT.
|
||||
// Code generated by mockery v2.53.4. DO NOT EDIT.
|
||||
|
||||
package mocks
|
||||
|
||||
|
@ -104,7 +104,7 @@ func (_m *Provider) Terminate(_a0 *v1alpha1.AnalysisRun, _a1 v1alpha1.Metric, _a
|
|||
return r0
|
||||
}
|
||||
|
||||
// Type provides a mock function with given fields:
|
||||
// Type provides a mock function with no fields
|
||||
func (_m *Provider) Type() string {
|
||||
ret := _m.Called()
|
||||
|
||||
|
|
|
@ -1101,6 +1101,10 @@
|
|||
"type": "integer",
|
||||
"format": "int32",
|
||||
"title": "Assuming the desired number of pods in a stable or canary ReplicaSet is not zero, then make sure it is at least\nMinPodsPerReplicaSet for High Availability. Only applicable for TrafficRoutedCanary"
|
||||
},
|
||||
"replicaProgressThreshold": {
|
||||
"$ref": "#/definitions/github.com.argoproj.argo_rollouts.pkg.apis.rollouts.v1alpha1.ReplicaProgressThreshold",
|
||||
"title": "ReplicaProgressThreshold is the threhold number or percentage of pods that need to be available before a rollout promotion.\nDefaults to 100% of total replicas.\n+optional"
|
||||
}
|
||||
},
|
||||
"title": "CanaryStrategy defines parameters for a Replica Based Canary"
|
||||
|
@ -1891,6 +1895,20 @@
|
|||
},
|
||||
"title": "Arguments to perform a prometheus range query"
|
||||
},
|
||||
"github.com.argoproj.argo_rollouts.pkg.apis.rollouts.v1alpha1.ReplicaProgressThreshold": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"description": "Type is used to specify whether the replica progress threshold is a percentage or a number. Required if replicaProgressThreshold is specified."
|
||||
},
|
||||
"value": {
|
||||
"type": "integer",
|
||||
"format": "int32",
|
||||
"description": "Value contains the user-specified value for when a Argo Rollouts can promote a canary to the next step.\nIf not satisfied, this value will be assumed to be 100% of the total desired replicas for the given next step.\nValue must also be greater than 0. Required."
|
||||
}
|
||||
}
|
||||
},
|
||||
"github.com.argoproj.argo_rollouts.pkg.apis.rollouts.v1alpha1.RequiredDuringSchedulingIgnoredDuringExecution": {
|
||||
"type": "object",
|
||||
"title": "RequiredDuringSchedulingIgnoredDuringExecution defines inter-pod scheduling rule to be RequiredDuringSchedulingIgnoredDuringExecution"
|
||||
|
@ -2134,7 +2152,7 @@
|
|||
},
|
||||
"selector": {
|
||||
"$ref": "#/definitions/k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector",
|
||||
"title": "Label selector for pods. Existing ReplicaSets whose pods are\nselected by this will be the ones affected by this rollout.\nIt must match the pod template's labels.\n+optional"
|
||||
"title": "Label selector for pods. Existing ReplicaSets whose pods are\nselected by this will be the ones affected by this rollout.\nIt must match the pod template's labels.\n+optional\n+kubebuilder:validation:XValidation:rule=\"self == oldSelf\",message=\".spec.selector is immutable\""
|
||||
},
|
||||
"template": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.PodTemplateSpec",
|
||||
|
@ -2946,6 +2964,10 @@
|
|||
"$ref": "#/definitions/k8s.io.api.batch.v1.PodFailurePolicy",
|
||||
"description": "Specifies the policy of handling failed pods. In particular, it allows to\nspecify the set of actions and conditions which need to be\nsatisfied to take the associated action.\nIf empty, the default behaviour applies - the counter of failed pods,\nrepresented by the jobs's .status.failed field, is incremented and it is\nchecked against the backoffLimit. This field cannot be used in combination\nwith restartPolicy=OnFailure.\n\nThis field is beta-level. It can be used when the `JobPodFailurePolicy`\nfeature gate is enabled (enabled by default).\n+optional"
|
||||
},
|
||||
"successPolicy": {
|
||||
"$ref": "#/definitions/k8s.io.api.batch.v1.SuccessPolicy",
|
||||
"description": "successPolicy specifies the policy when the Job can be declared as succeeded.\nIf empty, the default behavior applies - the Job is declared as succeeded\nonly when the number of succeeded pods equals to the completions.\nWhen the field is specified, it must be immutable and works only for the Indexed Jobs.\nOnce the Job meets the SuccessPolicy, the lingering pods are terminated.\n\nThis field is alpha-level. To use this field, you must enable the\n`JobSuccessPolicy` feature gate (disabled by default).\n+optional"
|
||||
},
|
||||
"backoffLimit": {
|
||||
"type": "integer",
|
||||
"format": "int32",
|
||||
|
@ -2989,6 +3011,10 @@
|
|||
"podReplacementPolicy": {
|
||||
"type": "string",
|
||||
"description": "podReplacementPolicy specifies when to create replacement Pods.\nPossible values are:\n- TerminatingOrFailed means that we recreate pods\n when they are terminating (has a metadata.deletionTimestamp) or failed.\n- Failed means to wait until a previously created Pod is fully terminated (has phase\n Failed or Succeeded) before creating a replacement Pod.\n\nWhen using podFailurePolicy, Failed is the the only allowed value.\nTerminatingOrFailed and Failed are allowed values when podFailurePolicy is not in use.\nThis is an beta field. To use this, enable the JobPodReplacementPolicy feature toggle.\nThis is on by default.\n+optional"
|
||||
},
|
||||
"managedBy": {
|
||||
"type": "string",
|
||||
"description": "ManagedBy field indicates the controller that manages a Job. The k8s Job\ncontroller reconciles jobs which don't have this field at all or the field\nvalue is the reserved string `kubernetes.io/job-controller`, but skips\nreconciling Jobs with a custom value for this field.\nThe value must be a valid domain-prefixed path (e.g. acme.io/foo) -\nall characters before the first \"/\" must be a valid subdomain as defined\nby RFC 1123. All characters trailing the first \"/\" must be valid HTTP Path\ncharacters as defined by RFC 3986. The value cannot exceed 64 characters.\n\nThis field is alpha-level. The job controller accepts setting the field\nwhen the feature gate JobManagedBy is enabled (disabled by default).\n+optional"
|
||||
}
|
||||
},
|
||||
"description": "JobSpec describes how the job execution will look like."
|
||||
|
@ -3065,6 +3091,34 @@
|
|||
},
|
||||
"description": "PodFailurePolicyRule describes how a pod failure is handled when the requirements are met.\nOne of onExitCodes and onPodConditions, but not both, can be used in each rule."
|
||||
},
|
||||
"k8s.io.api.batch.v1.SuccessPolicy": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"rules": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.batch.v1.SuccessPolicyRule"
|
||||
},
|
||||
"title": "rules represents the list of alternative rules for the declaring the Jobs\nas successful before `.status.succeeded \u003e= .spec.completions`. Once any of the rules are met,\nthe \"SucceededCriteriaMet\" condition is added, and the lingering pods are removed.\nThe terminal state for such a Job has the \"Complete\" condition.\nAdditionally, these rules are evaluated in order; Once the Job meets one of the rules,\nother rules are ignored. At most 20 elements are allowed.\n+listType=atomic"
|
||||
}
|
||||
},
|
||||
"description": "SuccessPolicy describes when a Job can be declared as succeeded based on the success of some indexes."
|
||||
},
|
||||
"k8s.io.api.batch.v1.SuccessPolicyRule": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"succeededIndexes": {
|
||||
"type": "string",
|
||||
"description": "succeededIndexes specifies the set of indexes\nwhich need to be contained in the actual set of the succeeded indexes for the Job.\nThe list of indexes must be within 0 to \".spec.completions-1\" and\nmust not contain duplicates. At least one element is required.\nThe indexes are represented as intervals separated by commas.\nThe intervals can be a decimal integer or a pair of decimal integers separated by a hyphen.\nThe number are listed in represented by the first and last element of the series,\nseparated by a hyphen.\nFor example, if the completed indexes are 1, 3, 4, 5 and 7, they are\nrepresented as \"1,3-5,7\".\nWhen this field is null, this field doesn't default to any value\nand is never evaluated at any time.\n\n+optional"
|
||||
},
|
||||
"succeededCount": {
|
||||
"type": "integer",
|
||||
"format": "int32",
|
||||
"description": "succeededCount specifies the minimal required size of the actual set of the succeeded indexes\nfor the Job. When succeededCount is used along with succeededIndexes, the check is\nconstrained only to the set of indexes specified by succeededIndexes.\nFor example, given that succeededIndexes is \"1-4\", succeededCount is \"3\",\nand completed indexes are \"1\", \"3\", and \"5\", the Job isn't declared as succeeded\nbecause only \"1\" and \"3\" indexes are considered in that rules.\nWhen this field is null, this doesn't default to any value and\nis never evaluated at any time.\nWhen specified it needs to be a positive integer.\n\n+optional"
|
||||
}
|
||||
},
|
||||
"description": "SuccessPolicyRule describes rule for declaring a Job as succeeded.\nEach rule must have at least one of the \"succeededIndexes\" or \"succeededCount\" specified."
|
||||
},
|
||||
"k8s.io.api.core.v1.AWSElasticBlockStoreVolumeSource": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
@ -3106,6 +3160,20 @@
|
|||
},
|
||||
"description": "Affinity is a group of affinity scheduling rules."
|
||||
},
|
||||
"k8s.io.api.core.v1.AppArmorProfile": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"title": "type indicates which kind of AppArmor profile will be applied.\nValid options are:\n Localhost - a profile pre-loaded on the node.\n RuntimeDefault - the container runtime's default profile.\n Unconfined - no AppArmor enforcement.\n+unionDiscriminator"
|
||||
},
|
||||
"localhostProfile": {
|
||||
"type": "string",
|
||||
"title": "localhostProfile indicates a profile loaded on the node that should be used.\nThe profile must be preconfigured on the node to work.\nMust match the loaded name of the profile.\nMust be set if and only if type is \"Localhost\".\n+optional"
|
||||
}
|
||||
},
|
||||
"title": "AppArmorProfile defines a pod or container's AppArmor settings.\n+union"
|
||||
},
|
||||
"k8s.io.api.core.v1.AzureDiskVolumeSource": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
@ -3191,14 +3259,14 @@
|
|||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Added capabilities\n+optional"
|
||||
"title": "Added capabilities\n+optional\n+listType=atomic"
|
||||
},
|
||||
"drop": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Removed capabilities\n+optional"
|
||||
"title": "Removed capabilities\n+optional\n+listType=atomic"
|
||||
}
|
||||
},
|
||||
"description": "Adds and removes POSIX capabilities from running containers."
|
||||
|
@ -3211,7 +3279,7 @@
|
|||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "monitors is Required: Monitors is a collection of Ceph monitors\nMore info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it"
|
||||
"title": "monitors is Required: Monitors is a collection of Ceph monitors\nMore info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it\n+listType=atomic"
|
||||
},
|
||||
"path": {
|
||||
"type": "string",
|
||||
|
@ -3341,7 +3409,7 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.KeyToPath"
|
||||
},
|
||||
"title": "items if unspecified, each key-value pair in the Data field of the referenced\nConfigMap will be projected into the volume as a file whose name is the\nkey and content is the value. If specified, the listed keys will be\nprojected into the specified paths, and unlisted keys will not be\npresent. If a key is specified which is not present in the ConfigMap,\nthe volume setup will error unless it is marked optional. Paths must be\nrelative and may not contain the '..' path or start with '..'.\n+optional"
|
||||
"title": "items if unspecified, each key-value pair in the Data field of the referenced\nConfigMap will be projected into the volume as a file whose name is the\nkey and content is the value. If specified, the listed keys will be\nprojected into the specified paths, and unlisted keys will not be\npresent. If a key is specified which is not present in the ConfigMap,\nthe volume setup will error unless it is marked optional. Paths must be\nrelative and may not contain the '..' path or start with '..'.\n+optional\n+listType=atomic"
|
||||
},
|
||||
"optional": {
|
||||
"type": "boolean",
|
||||
|
@ -3361,7 +3429,7 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.KeyToPath"
|
||||
},
|
||||
"title": "items if unspecified, each key-value pair in the Data field of the referenced\nConfigMap will be projected into the volume as a file whose name is the\nkey and content is the value. If specified, the listed keys will be\nprojected into the specified paths, and unlisted keys will not be\npresent. If a key is specified which is not present in the ConfigMap,\nthe volume setup will error unless it is marked optional. Paths must be\nrelative and may not contain the '..' path or start with '..'.\n+optional"
|
||||
"title": "items if unspecified, each key-value pair in the Data field of the referenced\nConfigMap will be projected into the volume as a file whose name is the\nkey and content is the value. If specified, the listed keys will be\nprojected into the specified paths, and unlisted keys will not be\npresent. If a key is specified which is not present in the ConfigMap,\nthe volume setup will error unless it is marked optional. Paths must be\nrelative and may not contain the '..' path or start with '..'.\n+optional\n+listType=atomic"
|
||||
},
|
||||
"defaultMode": {
|
||||
"type": "integer",
|
||||
|
@ -3391,14 +3459,14 @@
|
|||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Entrypoint array. Not executed within a shell.\nThe container image's ENTRYPOINT is used if this is not provided.\nVariable references $(VAR_NAME) are expanded using the container's environment. If a variable\ncannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced\nto a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will\nproduce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless\nof whether the variable exists or not. Cannot be updated.\nMore info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n+optional"
|
||||
"title": "Entrypoint array. Not executed within a shell.\nThe container image's ENTRYPOINT is used if this is not provided.\nVariable references $(VAR_NAME) are expanded using the container's environment. If a variable\ncannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced\nto a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will\nproduce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless\nof whether the variable exists or not. Cannot be updated.\nMore info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n+optional\n+listType=atomic"
|
||||
},
|
||||
"args": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Arguments to the entrypoint.\nThe container image's CMD is used if this is not provided.\nVariable references $(VAR_NAME) are expanded using the container's environment. If a variable\ncannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced\nto a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will\nproduce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless\nof whether the variable exists or not. Cannot be updated.\nMore info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n+optional"
|
||||
"title": "Arguments to the entrypoint.\nThe container image's CMD is used if this is not provided.\nVariable references $(VAR_NAME) are expanded using the container's environment. If a variable\ncannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced\nto a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will\nproduce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless\nof whether the variable exists or not. Cannot be updated.\nMore info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n+optional\n+listType=atomic"
|
||||
},
|
||||
"workingDir": {
|
||||
"type": "string",
|
||||
|
@ -3416,14 +3484,14 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.EnvFromSource"
|
||||
},
|
||||
"title": "List of sources to populate environment variables in the container.\nThe keys defined within a source must be a C_IDENTIFIER. All invalid keys\nwill be reported as an event when the container is starting. When a key exists in multiple\nsources, the value associated with the last source will take precedence.\nValues defined by an Env with a duplicate key will take precedence.\nCannot be updated.\n+optional"
|
||||
"title": "List of sources to populate environment variables in the container.\nThe keys defined within a source must be a C_IDENTIFIER. All invalid keys\nwill be reported as an event when the container is starting. When a key exists in multiple\nsources, the value associated with the last source will take precedence.\nValues defined by an Env with a duplicate key will take precedence.\nCannot be updated.\n+optional\n+listType=atomic"
|
||||
},
|
||||
"env": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.EnvVar"
|
||||
},
|
||||
"title": "List of environment variables to set in the container.\nCannot be updated.\n+optional\n+patchMergeKey=name\n+patchStrategy=merge"
|
||||
"title": "List of environment variables to set in the container.\nCannot be updated.\n+optional\n+patchMergeKey=name\n+patchStrategy=merge\n+listType=map\n+listMapKey=name"
|
||||
},
|
||||
"resources": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.ResourceRequirements",
|
||||
|
@ -3445,14 +3513,14 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.VolumeMount"
|
||||
},
|
||||
"title": "Pod volumes to mount into the container's filesystem.\nCannot be updated.\n+optional\n+patchMergeKey=mountPath\n+patchStrategy=merge"
|
||||
"title": "Pod volumes to mount into the container's filesystem.\nCannot be updated.\n+optional\n+patchMergeKey=mountPath\n+patchStrategy=merge\n+listType=map\n+listMapKey=mountPath"
|
||||
},
|
||||
"volumeDevices": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.VolumeDevice"
|
||||
},
|
||||
"title": "volumeDevices is the list of block devices to be used by the container.\n+patchMergeKey=devicePath\n+patchStrategy=merge\n+optional"
|
||||
"title": "volumeDevices is the list of block devices to be used by the container.\n+patchMergeKey=devicePath\n+patchStrategy=merge\n+listType=map\n+listMapKey=devicePath\n+optional"
|
||||
},
|
||||
"livenessProbe": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.Probe",
|
||||
|
@ -3551,7 +3619,7 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.DownwardAPIVolumeFile"
|
||||
},
|
||||
"title": "Items is a list of DownwardAPIVolume file\n+optional"
|
||||
"title": "Items is a list of DownwardAPIVolume file\n+optional\n+listType=atomic"
|
||||
}
|
||||
},
|
||||
"description": "Represents downward API info for projecting into a projected volume.\nNote that this is identical to a downwardAPI volume source without the default\nmode."
|
||||
|
@ -3565,7 +3633,7 @@
|
|||
},
|
||||
"fieldRef": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.ObjectFieldSelector",
|
||||
"title": "Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.\n+optional"
|
||||
"title": "Required: Selects a field of the pod: only annotations, labels, name, namespace and uid are supported.\n+optional"
|
||||
},
|
||||
"resourceFieldRef": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.ResourceFieldSelector",
|
||||
|
@ -3587,7 +3655,7 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.DownwardAPIVolumeFile"
|
||||
},
|
||||
"title": "Items is a list of downward API volume file\n+optional"
|
||||
"title": "Items is a list of downward API volume file\n+optional\n+listType=atomic"
|
||||
},
|
||||
"defaultMode": {
|
||||
"type": "integer",
|
||||
|
@ -3699,14 +3767,14 @@
|
|||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Entrypoint array. Not executed within a shell.\nThe image's ENTRYPOINT is used if this is not provided.\nVariable references $(VAR_NAME) are expanded using the container's environment. If a variable\ncannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced\nto a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will\nproduce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless\nof whether the variable exists or not. Cannot be updated.\nMore info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n+optional"
|
||||
"title": "Entrypoint array. Not executed within a shell.\nThe image's ENTRYPOINT is used if this is not provided.\nVariable references $(VAR_NAME) are expanded using the container's environment. If a variable\ncannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced\nto a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will\nproduce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless\nof whether the variable exists or not. Cannot be updated.\nMore info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n+optional\n+listType=atomic"
|
||||
},
|
||||
"args": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Arguments to the entrypoint.\nThe image's CMD is used if this is not provided.\nVariable references $(VAR_NAME) are expanded using the container's environment. If a variable\ncannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced\nto a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will\nproduce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless\nof whether the variable exists or not. Cannot be updated.\nMore info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n+optional"
|
||||
"title": "Arguments to the entrypoint.\nThe image's CMD is used if this is not provided.\nVariable references $(VAR_NAME) are expanded using the container's environment. If a variable\ncannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced\nto a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will\nproduce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless\nof whether the variable exists or not. Cannot be updated.\nMore info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n+optional\n+listType=atomic"
|
||||
},
|
||||
"workingDir": {
|
||||
"type": "string",
|
||||
|
@ -3724,14 +3792,14 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.EnvFromSource"
|
||||
},
|
||||
"title": "List of sources to populate environment variables in the container.\nThe keys defined within a source must be a C_IDENTIFIER. All invalid keys\nwill be reported as an event when the container is starting. When a key exists in multiple\nsources, the value associated with the last source will take precedence.\nValues defined by an Env with a duplicate key will take precedence.\nCannot be updated.\n+optional"
|
||||
"title": "List of sources to populate environment variables in the container.\nThe keys defined within a source must be a C_IDENTIFIER. All invalid keys\nwill be reported as an event when the container is starting. When a key exists in multiple\nsources, the value associated with the last source will take precedence.\nValues defined by an Env with a duplicate key will take precedence.\nCannot be updated.\n+optional\n+listType=atomic"
|
||||
},
|
||||
"env": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.EnvVar"
|
||||
},
|
||||
"title": "List of environment variables to set in the container.\nCannot be updated.\n+optional\n+patchMergeKey=name\n+patchStrategy=merge"
|
||||
"title": "List of environment variables to set in the container.\nCannot be updated.\n+optional\n+patchMergeKey=name\n+patchStrategy=merge\n+listType=map\n+listMapKey=name"
|
||||
},
|
||||
"resources": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.ResourceRequirements",
|
||||
|
@ -3753,14 +3821,14 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.VolumeMount"
|
||||
},
|
||||
"title": "Pod volumes to mount into the container's filesystem. Subpath mounts are not allowed for ephemeral containers.\nCannot be updated.\n+optional\n+patchMergeKey=mountPath\n+patchStrategy=merge"
|
||||
"title": "Pod volumes to mount into the container's filesystem. Subpath mounts are not allowed for ephemeral containers.\nCannot be updated.\n+optional\n+patchMergeKey=mountPath\n+patchStrategy=merge\n+listType=map\n+listMapKey=mountPath"
|
||||
},
|
||||
"volumeDevices": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.VolumeDevice"
|
||||
},
|
||||
"title": "volumeDevices is the list of block devices to be used by the container.\n+patchMergeKey=devicePath\n+patchStrategy=merge\n+optional"
|
||||
"title": "volumeDevices is the list of block devices to be used by the container.\n+patchMergeKey=devicePath\n+patchStrategy=merge\n+listType=map\n+listMapKey=devicePath\n+optional"
|
||||
},
|
||||
"livenessProbe": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.Probe",
|
||||
|
@ -3827,7 +3895,7 @@
|
|||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Command is the command line to execute inside the container, the working directory for the\ncommand is root ('/') in the container's filesystem. The command is simply exec'd, it is\nnot run inside a shell, so traditional shell instructions ('|', etc) won't work. To use\na shell, you need to explicitly call out to that shell.\nExit status of 0 is treated as live/healthy and non-zero is unhealthy.\n+optional"
|
||||
"title": "Command is the command line to execute inside the container, the working directory for the\ncommand is root ('/') in the container's filesystem. The command is simply exec'd, it is\nnot run inside a shell, so traditional shell instructions ('|', etc) won't work. To use\na shell, you need to explicitly call out to that shell.\nExit status of 0 is treated as live/healthy and non-zero is unhealthy.\n+optional\n+listType=atomic"
|
||||
}
|
||||
},
|
||||
"description": "ExecAction describes a \"run in container\" action."
|
||||
|
@ -3840,7 +3908,7 @@
|
|||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "targetWWNs is Optional: FC target worldwide names (WWNs)\n+optional"
|
||||
"title": "targetWWNs is Optional: FC target worldwide names (WWNs)\n+optional\n+listType=atomic"
|
||||
},
|
||||
"lun": {
|
||||
"type": "integer",
|
||||
|
@ -3860,7 +3928,7 @@
|
|||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "wwids Optional: FC volume world wide identifiers (wwids)\nEither wwids or combination of targetWWNs and lun must be set, but not both simultaneously.\n+optional"
|
||||
"title": "wwids Optional: FC volume world wide identifiers (wwids)\nEither wwids or combination of targetWWNs and lun must be set, but not both simultaneously.\n+optional\n+listType=atomic"
|
||||
}
|
||||
},
|
||||
"description": "Represents a Fibre Channel volume.\nFibre Channel volumes can only be mounted as read/write once.\nFibre Channel volumes support ownership management and SELinux relabeling."
|
||||
|
@ -4005,7 +4073,7 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.HTTPHeader"
|
||||
},
|
||||
"title": "Custom headers to set in the request. HTTP allows repeated headers.\n+optional"
|
||||
"title": "Custom headers to set in the request. HTTP allows repeated headers.\n+optional\n+listType=atomic"
|
||||
}
|
||||
},
|
||||
"description": "HTTPGetAction describes an action based on HTTP Get requests."
|
||||
|
@ -4029,14 +4097,14 @@
|
|||
"properties": {
|
||||
"ip": {
|
||||
"type": "string",
|
||||
"description": "IP address of the host file entry."
|
||||
"title": "IP address of the host file entry.\n+required"
|
||||
},
|
||||
"hostnames": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "Hostnames for the above IP address."
|
||||
"title": "Hostnames for the above IP address.\n+listType=atomic"
|
||||
}
|
||||
},
|
||||
"description": "HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the\npod's hosts file."
|
||||
|
@ -4088,7 +4156,7 @@
|
|||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "portals is the iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port\nis other than default (typically TCP ports 860 and 3260).\n+optional"
|
||||
"title": "portals is the iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port\nis other than default (typically TCP ports 860 and 3260).\n+optional\n+listType=atomic"
|
||||
},
|
||||
"chapAuthDiscovery": {
|
||||
"type": "boolean",
|
||||
|
@ -4169,7 +4237,7 @@
|
|||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"title": "Name of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\nTODO: Add other useful fields. apiVersion, kind, uid?\n+optional"
|
||||
"description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nTODO: Add other useful fields. apiVersion, kind, uid?\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n+optional\n+default=\"\"\n+kubebuilder:default=\"\"\nTODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896."
|
||||
}
|
||||
},
|
||||
"title": "LocalObjectReference contains enough information to let you locate the\nreferenced object inside the same namespace.\n+structType=atomic"
|
||||
|
@ -4204,7 +4272,7 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.PreferredSchedulingTerm"
|
||||
},
|
||||
"title": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and adding\n\"weight\" to the sum if the node matches the corresponding matchExpressions; the\nnode(s) with the highest sum are the most preferred.\n+optional"
|
||||
"title": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and adding\n\"weight\" to the sum if the node matches the corresponding matchExpressions; the\nnode(s) with the highest sum are the most preferred.\n+optional\n+listType=atomic"
|
||||
}
|
||||
},
|
||||
"description": "Node affinity is a group of node affinity scheduling rules."
|
||||
|
@ -4217,7 +4285,7 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.NodeSelectorTerm"
|
||||
},
|
||||
"description": "Required. A list of node selector terms. The terms are ORed."
|
||||
"title": "Required. A list of node selector terms. The terms are ORed.\n+listType=atomic"
|
||||
}
|
||||
},
|
||||
"title": "A node selector represents the union of the results of one or more label queries\nover a set of nodes; that is, it represents the OR of the selectors represented\nby the node selector terms.\n+structType=atomic"
|
||||
|
@ -4238,7 +4306,7 @@
|
|||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "An array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. If the operator is Gt or Lt, the values\narray must have a single element, which will be interpreted as an integer.\nThis array is replaced during a strategic merge patch.\n+optional"
|
||||
"title": "An array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. If the operator is Gt or Lt, the values\narray must have a single element, which will be interpreted as an integer.\nThis array is replaced during a strategic merge patch.\n+optional\n+listType=atomic"
|
||||
}
|
||||
},
|
||||
"description": "A node selector requirement is a selector that contains values, a key, and an operator\nthat relates the key and values."
|
||||
|
@ -4251,14 +4319,14 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.NodeSelectorRequirement"
|
||||
},
|
||||
"title": "A list of node selector requirements by node's labels.\n+optional"
|
||||
"title": "A list of node selector requirements by node's labels.\n+optional\n+listType=atomic"
|
||||
},
|
||||
"matchFields": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.NodeSelectorRequirement"
|
||||
},
|
||||
"title": "A list of node selector requirements by node's fields.\n+optional"
|
||||
"title": "A list of node selector requirements by node's fields.\n+optional\n+listType=atomic"
|
||||
}
|
||||
},
|
||||
"title": "A null or empty node selector term matches no objects. The requirements of\nthem are ANDed.\nThe TopologySelectorTerm type implements a subset of the NodeSelectorTerm.\n+structType=atomic"
|
||||
|
@ -4285,7 +4353,7 @@
|
|||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "accessModes contains the desired access modes the volume should have.\nMore info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1\n+optional"
|
||||
"title": "accessModes contains the desired access modes the volume should have.\nMore info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1\n+optional\n+listType=atomic"
|
||||
},
|
||||
"selector": {
|
||||
"$ref": "#/definitions/k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector",
|
||||
|
@ -4317,7 +4385,7 @@
|
|||
},
|
||||
"volumeAttributesClassName": {
|
||||
"type": "string",
|
||||
"title": "volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.\nIf specified, the CSI driver will create or update the volume with the attributes defined\nin the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,\nit can be changed after the claim is created. An empty string value means that no VolumeAttributesClass\nwill be applied to the claim but it's not allowed to reset this field to empty string once it is set.\nIf unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass\nwill be set by the persistentvolume controller if it exists.\nIf the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be\nset to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource\nexists.\nMore info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#volumeattributesclass\n(Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.\n+featureGate=VolumeAttributesClass\n+optional"
|
||||
"title": "volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.\nIf specified, the CSI driver will create or update the volume with the attributes defined\nin the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,\nit can be changed after the claim is created. An empty string value means that no VolumeAttributesClass\nwill be applied to the claim but it's not allowed to reset this field to empty string once it is set.\nIf unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass\nwill be set by the persistentvolume controller if it exists.\nIf the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be\nset to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource\nexists.\nMore info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/\n(Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.\n+featureGate=VolumeAttributesClass\n+optional"
|
||||
}
|
||||
},
|
||||
"title": "PersistentVolumeClaimSpec describes the common attributes of storage devices\nand allows a Source for provider-specific attributes"
|
||||
|
@ -4372,14 +4440,14 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.PodAffinityTerm"
|
||||
},
|
||||
"title": "If the affinity requirements specified by this field are not met at\nscheduling time, the pod will not be scheduled onto the node.\nIf the affinity requirements specified by this field cease to be met\nat some point during pod execution (e.g. due to a pod label update), the\nsystem may or may not try to eventually evict the pod from its node.\nWhen there are multiple elements, the lists of nodes corresponding to each\npodAffinityTerm are intersected, i.e. all terms must be satisfied.\n+optional"
|
||||
"title": "If the affinity requirements specified by this field are not met at\nscheduling time, the pod will not be scheduled onto the node.\nIf the affinity requirements specified by this field cease to be met\nat some point during pod execution (e.g. due to a pod label update), the\nsystem may or may not try to eventually evict the pod from its node.\nWhen there are multiple elements, the lists of nodes corresponding to each\npodAffinityTerm are intersected, i.e. all terms must be satisfied.\n+optional\n+listType=atomic"
|
||||
},
|
||||
"preferredDuringSchedulingIgnoredDuringExecution": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.WeightedPodAffinityTerm"
|
||||
},
|
||||
"title": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and adding\n\"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the\nnode(s) with the highest sum are the most preferred.\n+optional"
|
||||
"title": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and adding\n\"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the\nnode(s) with the highest sum are the most preferred.\n+optional\n+listType=atomic"
|
||||
}
|
||||
},
|
||||
"description": "Pod affinity is a group of inter pod affinity scheduling rules."
|
||||
|
@ -4396,7 +4464,7 @@
|
|||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "namespaces specifies a static list of namespace names that the term applies to.\nThe term is applied to the union of the namespaces listed in this field\nand the ones selected by namespaceSelector.\nnull or empty namespaces list and null namespaceSelector means \"this pod's namespace\".\n+optional"
|
||||
"title": "namespaces specifies a static list of namespace names that the term applies to.\nThe term is applied to the union of the namespaces listed in this field\nand the ones selected by namespaceSelector.\nnull or empty namespaces list and null namespaceSelector means \"this pod's namespace\".\n+optional\n+listType=atomic"
|
||||
},
|
||||
"topologyKey": {
|
||||
"type": "string",
|
||||
|
@ -4411,14 +4479,14 @@
|
|||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "MatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both MatchLabelKeys and LabelSelector.\nAlso, MatchLabelKeys cannot be set when LabelSelector isn't set.\nThis is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.\n+listType=atomic\n+optional"
|
||||
"title": "MatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both matchLabelKeys and labelSelector.\nAlso, matchLabelKeys cannot be set when labelSelector isn't set.\nThis is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.\n+listType=atomic\n+optional"
|
||||
},
|
||||
"mismatchLabelKeys": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "MismatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both MismatchLabelKeys and LabelSelector.\nAlso, MismatchLabelKeys cannot be set when LabelSelector isn't set.\nThis is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.\n+listType=atomic\n+optional"
|
||||
"title": "MismatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both mismatchLabelKeys and labelSelector.\nAlso, mismatchLabelKeys cannot be set when labelSelector isn't set.\nThis is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.\n+listType=atomic\n+optional"
|
||||
}
|
||||
},
|
||||
"title": "Defines a set of pods (namely those matching the labelSelector\nrelative to the given namespace(s)) that this pod should be\nco-located (affinity) or not co-located (anti-affinity) with,\nwhere co-located is defined as running on a node whose value of\nthe label with key \u003ctopologyKey\u003e matches that of any node on which\na pod of the set of pods is running"
|
||||
|
@ -4431,14 +4499,14 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.PodAffinityTerm"
|
||||
},
|
||||
"title": "If the anti-affinity requirements specified by this field are not met at\nscheduling time, the pod will not be scheduled onto the node.\nIf the anti-affinity requirements specified by this field cease to be met\nat some point during pod execution (e.g. due to a pod label update), the\nsystem may or may not try to eventually evict the pod from its node.\nWhen there are multiple elements, the lists of nodes corresponding to each\npodAffinityTerm are intersected, i.e. all terms must be satisfied.\n+optional"
|
||||
"title": "If the anti-affinity requirements specified by this field are not met at\nscheduling time, the pod will not be scheduled onto the node.\nIf the anti-affinity requirements specified by this field cease to be met\nat some point during pod execution (e.g. due to a pod label update), the\nsystem may or may not try to eventually evict the pod from its node.\nWhen there are multiple elements, the lists of nodes corresponding to each\npodAffinityTerm are intersected, i.e. all terms must be satisfied.\n+optional\n+listType=atomic"
|
||||
},
|
||||
"preferredDuringSchedulingIgnoredDuringExecution": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.WeightedPodAffinityTerm"
|
||||
},
|
||||
"title": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe anti-affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling anti-affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and adding\n\"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the\nnode(s) with the highest sum are the most preferred.\n+optional"
|
||||
"title": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe anti-affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling anti-affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and adding\n\"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the\nnode(s) with the highest sum are the most preferred.\n+optional\n+listType=atomic"
|
||||
}
|
||||
},
|
||||
"description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules."
|
||||
|
@ -4451,21 +4519,21 @@
|
|||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "A list of DNS name server IP addresses.\nThis will be appended to the base nameservers generated from DNSPolicy.\nDuplicated nameservers will be removed.\n+optional"
|
||||
"title": "A list of DNS name server IP addresses.\nThis will be appended to the base nameservers generated from DNSPolicy.\nDuplicated nameservers will be removed.\n+optional\n+listType=atomic"
|
||||
},
|
||||
"searches": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "A list of DNS search domains for host-name lookup.\nThis will be appended to the base search paths generated from DNSPolicy.\nDuplicated search paths will be removed.\n+optional"
|
||||
"title": "A list of DNS search domains for host-name lookup.\nThis will be appended to the base search paths generated from DNSPolicy.\nDuplicated search paths will be removed.\n+optional\n+listType=atomic"
|
||||
},
|
||||
"options": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.PodDNSConfigOption"
|
||||
},
|
||||
"title": "A list of DNS resolver options.\nThis will be merged with the base options generated from DNSPolicy.\nDuplicated entries will be removed. Resolution options given in Options\nwill override those that appear in the base DNSPolicy.\n+optional"
|
||||
"title": "A list of DNS resolver options.\nThis will be merged with the base options generated from DNSPolicy.\nDuplicated entries will be removed. Resolution options given in Options\nwill override those that appear in the base DNSPolicy.\n+optional\n+listType=atomic"
|
||||
}
|
||||
},
|
||||
"description": "PodDNSConfig defines the DNS parameters of a pod in addition to\nthose generated from DNSPolicy."
|
||||
|
@ -4559,7 +4627,7 @@
|
|||
"type": "string",
|
||||
"format": "int64"
|
||||
},
|
||||
"title": "A list of groups applied to the first process run in each container, in addition\nto the container's primary GID, the fsGroup (if specified), and group memberships\ndefined in the container image for the uid of the container process. If unspecified,\nno additional groups are added to any container. Note that group memberships\ndefined in the container image for the uid of the container process are still effective,\neven if they are not included in this list.\nNote that this field cannot be set when spec.os.name is windows.\n+optional"
|
||||
"title": "A list of groups applied to the first process run in each container, in addition\nto the container's primary GID, the fsGroup (if specified), and group memberships\ndefined in the container image for the uid of the container process. If unspecified,\nno additional groups are added to any container. Note that group memberships\ndefined in the container image for the uid of the container process are still effective,\neven if they are not included in this list.\nNote that this field cannot be set when spec.os.name is windows.\n+optional\n+listType=atomic"
|
||||
},
|
||||
"fsGroup": {
|
||||
"type": "string",
|
||||
|
@ -4572,7 +4640,7 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.Sysctl"
|
||||
},
|
||||
"title": "Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported\nsysctls (by the container runtime) might fail to launch.\nNote that this field cannot be set when spec.os.name is windows.\n+optional"
|
||||
"title": "Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported\nsysctls (by the container runtime) might fail to launch.\nNote that this field cannot be set when spec.os.name is windows.\n+optional\n+listType=atomic"
|
||||
},
|
||||
"fsGroupChangePolicy": {
|
||||
"type": "string",
|
||||
|
@ -4581,6 +4649,10 @@
|
|||
"seccompProfile": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.SeccompProfile",
|
||||
"title": "The seccomp options to use by the containers in this pod.\nNote that this field cannot be set when spec.os.name is windows.\n+optional"
|
||||
},
|
||||
"appArmorProfile": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.AppArmorProfile",
|
||||
"title": "appArmorProfile is the AppArmor options to use by the containers in this pod.\nNote that this field cannot be set when spec.os.name is windows.\n+optional"
|
||||
}
|
||||
},
|
||||
"description": "PodSecurityContext holds pod-level security attributes and common container settings.\nSome fields are also present in container.securityContext. Field values of\ncontainer.securityContext take precedence over field values of PodSecurityContext."
|
||||
|
@ -4593,28 +4665,28 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.Volume"
|
||||
},
|
||||
"title": "List of volumes that can be mounted by containers belonging to the pod.\nMore info: https://kubernetes.io/docs/concepts/storage/volumes\n+optional\n+patchMergeKey=name\n+patchStrategy=merge,retainKeys"
|
||||
"title": "List of volumes that can be mounted by containers belonging to the pod.\nMore info: https://kubernetes.io/docs/concepts/storage/volumes\n+optional\n+patchMergeKey=name\n+patchStrategy=merge,retainKeys\n+listType=map\n+listMapKey=name"
|
||||
},
|
||||
"initContainers": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.Container"
|
||||
},
|
||||
"title": "List of initialization containers belonging to the pod.\nInit containers are executed in order prior to containers being started. If any\ninit container fails, the pod is considered to have failed and is handled according\nto its restartPolicy. The name for an init container or normal container must be\nunique among all containers.\nInit containers may not have Lifecycle actions, Readiness probes, Liveness probes, or Startup probes.\nThe resourceRequirements of an init container are taken into account during scheduling\nby finding the highest request/limit for each resource type, and then using the max of\nof that value or the sum of the normal containers. Limits are applied to init containers\nin a similar fashion.\nInit containers cannot currently be added or removed.\nCannot be updated.\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n+patchMergeKey=name\n+patchStrategy=merge"
|
||||
"title": "List of initialization containers belonging to the pod.\nInit containers are executed in order prior to containers being started. If any\ninit container fails, the pod is considered to have failed and is handled according\nto its restartPolicy. The name for an init container or normal container must be\nunique among all containers.\nInit containers may not have Lifecycle actions, Readiness probes, Liveness probes, or Startup probes.\nThe resourceRequirements of an init container are taken into account during scheduling\nby finding the highest request/limit for each resource type, and then using the max of\nof that value or the sum of the normal containers. Limits are applied to init containers\nin a similar fashion.\nInit containers cannot currently be added or removed.\nCannot be updated.\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n+patchMergeKey=name\n+patchStrategy=merge\n+listType=map\n+listMapKey=name"
|
||||
},
|
||||
"containers": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.Container"
|
||||
},
|
||||
"title": "List of containers belonging to the pod.\nContainers cannot currently be added or removed.\nThere must be at least one container in a Pod.\nCannot be updated.\n+patchMergeKey=name\n+patchStrategy=merge"
|
||||
"title": "List of containers belonging to the pod.\nContainers cannot currently be added or removed.\nThere must be at least one container in a Pod.\nCannot be updated.\n+patchMergeKey=name\n+patchStrategy=merge\n+listType=map\n+listMapKey=name"
|
||||
},
|
||||
"ephemeralContainers": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.EphemeralContainer"
|
||||
},
|
||||
"title": "List of ephemeral containers run in this pod. Ephemeral containers may be run in an existing\npod to perform user-initiated actions such as debugging. This list cannot be specified when\ncreating a pod, and it cannot be modified by updating the pod spec. In order to add an\nephemeral container to an existing pod, use the pod's ephemeralcontainers subresource.\n+optional\n+patchMergeKey=name\n+patchStrategy=merge"
|
||||
"title": "List of ephemeral containers run in this pod. Ephemeral containers may be run in an existing\npod to perform user-initiated actions such as debugging. This list cannot be specified when\ncreating a pod, and it cannot be modified by updating the pod spec. In order to add an\nephemeral container to an existing pod, use the pod's ephemeralcontainers subresource.\n+optional\n+patchMergeKey=name\n+patchStrategy=merge\n+listType=map\n+listMapKey=name"
|
||||
},
|
||||
"restartPolicy": {
|
||||
"type": "string",
|
||||
|
@ -4647,7 +4719,7 @@
|
|||
},
|
||||
"serviceAccount": {
|
||||
"type": "string",
|
||||
"title": "DeprecatedServiceAccount is a depreciated alias for ServiceAccountName.\nDeprecated: Use serviceAccountName instead.\n+k8s:conversion-gen=false\n+optional"
|
||||
"title": "DeprecatedServiceAccount is a deprecated alias for ServiceAccountName.\nDeprecated: Use serviceAccountName instead.\n+k8s:conversion-gen=false\n+optional"
|
||||
},
|
||||
"automountServiceAccountToken": {
|
||||
"type": "boolean",
|
||||
|
@ -4682,7 +4754,7 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.LocalObjectReference"
|
||||
},
|
||||
"title": "ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec.\nIf specified, these secrets will be passed to individual puller implementations for them to use.\nMore info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n+optional\n+patchMergeKey=name\n+patchStrategy=merge"
|
||||
"title": "ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec.\nIf specified, these secrets will be passed to individual puller implementations for them to use.\nMore info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n+optional\n+patchMergeKey=name\n+patchStrategy=merge\n+listType=map\n+listMapKey=name"
|
||||
},
|
||||
"hostname": {
|
||||
"type": "string",
|
||||
|
@ -4705,14 +4777,14 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.Toleration"
|
||||
},
|
||||
"title": "If specified, the pod's tolerations.\n+optional"
|
||||
"title": "If specified, the pod's tolerations.\n+optional\n+listType=atomic"
|
||||
},
|
||||
"hostAliases": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.HostAlias"
|
||||
},
|
||||
"title": "HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts\nfile if specified. This is only valid for non-hostNetwork pods.\n+optional\n+patchMergeKey=ip\n+patchStrategy=merge"
|
||||
"title": "HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts\nfile if specified.\n+optional\n+patchMergeKey=ip\n+patchStrategy=merge\n+listType=map\n+listMapKey=ip"
|
||||
},
|
||||
"priorityClassName": {
|
||||
"type": "string",
|
||||
|
@ -4732,7 +4804,7 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.PodReadinessGate"
|
||||
},
|
||||
"title": "If specified, all readiness gates will be evaluated for pod readiness.\nA pod is ready when all its containers are ready AND\nall conditions specified in the readiness gates have status equal to \"True\"\nMore info: https://git.k8s.io/enhancements/keps/sig-network/580-pod-readiness-gates\n+optional"
|
||||
"title": "If specified, all readiness gates will be evaluated for pod readiness.\nA pod is ready when all its containers are ready AND\nall conditions specified in the readiness gates have status equal to \"True\"\nMore info: https://git.k8s.io/enhancements/keps/sig-network/580-pod-readiness-gates\n+optional\n+listType=atomic"
|
||||
},
|
||||
"runtimeClassName": {
|
||||
"type": "string",
|
||||
|
@ -4766,7 +4838,7 @@
|
|||
},
|
||||
"os": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.PodOS",
|
||||
"description": "Specifies the OS of the containers in the pod.\nSome pod and container fields are restricted if this is set.\n\nIf the OS field is set to linux, the following fields must be unset:\n-securityContext.windowsOptions\n\nIf the OS field is set to windows, following fields must be unset:\n- spec.hostPID\n- spec.hostIPC\n- spec.hostUsers\n- spec.securityContext.seLinuxOptions\n- spec.securityContext.seccompProfile\n- spec.securityContext.fsGroup\n- spec.securityContext.fsGroupChangePolicy\n- spec.securityContext.sysctls\n- spec.shareProcessNamespace\n- spec.securityContext.runAsUser\n- spec.securityContext.runAsGroup\n- spec.securityContext.supplementalGroups\n- spec.containers[*].securityContext.seLinuxOptions\n- spec.containers[*].securityContext.seccompProfile\n- spec.containers[*].securityContext.capabilities\n- spec.containers[*].securityContext.readOnlyRootFilesystem\n- spec.containers[*].securityContext.privileged\n- spec.containers[*].securityContext.allowPrivilegeEscalation\n- spec.containers[*].securityContext.procMount\n- spec.containers[*].securityContext.runAsUser\n- spec.containers[*].securityContext.runAsGroup\n+optional"
|
||||
"description": "Specifies the OS of the containers in the pod.\nSome pod and container fields are restricted if this is set.\n\nIf the OS field is set to linux, the following fields must be unset:\n-securityContext.windowsOptions\n\nIf the OS field is set to windows, following fields must be unset:\n- spec.hostPID\n- spec.hostIPC\n- spec.hostUsers\n- spec.securityContext.appArmorProfile\n- spec.securityContext.seLinuxOptions\n- spec.securityContext.seccompProfile\n- spec.securityContext.fsGroup\n- spec.securityContext.fsGroupChangePolicy\n- spec.securityContext.sysctls\n- spec.shareProcessNamespace\n- spec.securityContext.runAsUser\n- spec.securityContext.runAsGroup\n- spec.securityContext.supplementalGroups\n- spec.containers[*].securityContext.appArmorProfile\n- spec.containers[*].securityContext.seLinuxOptions\n- spec.containers[*].securityContext.seccompProfile\n- spec.containers[*].securityContext.capabilities\n- spec.containers[*].securityContext.readOnlyRootFilesystem\n- spec.containers[*].securityContext.privileged\n- spec.containers[*].securityContext.allowPrivilegeEscalation\n- spec.containers[*].securityContext.procMount\n- spec.containers[*].securityContext.runAsUser\n- spec.containers[*].securityContext.runAsGroup\n+optional"
|
||||
},
|
||||
"hostUsers": {
|
||||
"type": "boolean",
|
||||
|
@ -4777,7 +4849,7 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.PodSchedulingGate"
|
||||
},
|
||||
"description": "SchedulingGates is an opaque list of values that if specified will block scheduling the pod.\nIf schedulingGates is not empty, the pod will stay in the SchedulingGated state and the\nscheduler will not attempt to schedule the pod.\n\nSchedulingGates can only be set at pod creation time, and be removed only afterwards.\n\nThis is a beta feature enabled by the PodSchedulingReadiness feature gate.\n\n+patchMergeKey=name\n+patchStrategy=merge\n+listType=map\n+listMapKey=name\n+featureGate=PodSchedulingReadiness\n+optional"
|
||||
"description": "SchedulingGates is an opaque list of values that if specified will block scheduling the pod.\nIf schedulingGates is not empty, the pod will stay in the SchedulingGated state and the\nscheduler will not attempt to schedule the pod.\n\nSchedulingGates can only be set at pod creation time, and be removed only afterwards.\n\n+patchMergeKey=name\n+patchStrategy=merge\n+listType=map\n+listMapKey=name\n+optional"
|
||||
},
|
||||
"resourceClaims": {
|
||||
"type": "array",
|
||||
|
@ -4906,7 +4978,7 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.VolumeProjection"
|
||||
},
|
||||
"title": "sources is the list of volume projections\n+optional"
|
||||
"title": "sources is the list of volume projections\n+optional\n+listType=atomic"
|
||||
},
|
||||
"defaultMode": {
|
||||
"type": "integer",
|
||||
|
@ -4954,7 +5026,7 @@
|
|||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "monitors is a collection of Ceph monitors.\nMore info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it"
|
||||
"title": "monitors is a collection of Ceph monitors.\nMore info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it\n+listType=atomic"
|
||||
},
|
||||
"image": {
|
||||
"type": "string",
|
||||
|
@ -5168,7 +5240,7 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.KeyToPath"
|
||||
},
|
||||
"title": "items if unspecified, each key-value pair in the Data field of the referenced\nSecret will be projected into the volume as a file whose name is the\nkey and content is the value. If specified, the listed keys will be\nprojected into the specified paths, and unlisted keys will not be\npresent. If a key is specified which is not present in the Secret,\nthe volume setup will error unless it is marked optional. Paths must be\nrelative and may not contain the '..' path or start with '..'.\n+optional"
|
||||
"title": "items if unspecified, each key-value pair in the Data field of the referenced\nSecret will be projected into the volume as a file whose name is the\nkey and content is the value. If specified, the listed keys will be\nprojected into the specified paths, and unlisted keys will not be\npresent. If a key is specified which is not present in the Secret,\nthe volume setup will error unless it is marked optional. Paths must be\nrelative and may not contain the '..' path or start with '..'.\n+optional\n+listType=atomic"
|
||||
},
|
||||
"optional": {
|
||||
"type": "boolean",
|
||||
|
@ -5189,7 +5261,7 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.KeyToPath"
|
||||
},
|
||||
"title": "items If unspecified, each key-value pair in the Data field of the referenced\nSecret will be projected into the volume as a file whose name is the\nkey and content is the value. If specified, the listed keys will be\nprojected into the specified paths, and unlisted keys will not be\npresent. If a key is specified which is not present in the Secret,\nthe volume setup will error unless it is marked optional. Paths must be\nrelative and may not contain the '..' path or start with '..'.\n+optional"
|
||||
"title": "items If unspecified, each key-value pair in the Data field of the referenced\nSecret will be projected into the volume as a file whose name is the\nkey and content is the value. If specified, the listed keys will be\nprojected into the specified paths, and unlisted keys will not be\npresent. If a key is specified which is not present in the Secret,\nthe volume setup will error unless it is marked optional. Paths must be\nrelative and may not contain the '..' path or start with '..'.\n+optional\n+listType=atomic"
|
||||
},
|
||||
"defaultMode": {
|
||||
"type": "integer",
|
||||
|
@ -5251,6 +5323,10 @@
|
|||
"seccompProfile": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.SeccompProfile",
|
||||
"title": "The seccomp options to use by this container. If seccomp options are\nprovided at both the pod \u0026 container level, the container options\noverride the pod options.\nNote that this field cannot be set when spec.os.name is windows.\n+optional"
|
||||
},
|
||||
"appArmorProfile": {
|
||||
"$ref": "#/definitions/k8s.io.api.core.v1.AppArmorProfile",
|
||||
"title": "appArmorProfile is the AppArmor options to use by this container. If set, this profile\noverrides the pod's appArmorProfile.\nNote that this field cannot be set when spec.os.name is windows.\n+optional"
|
||||
}
|
||||
},
|
||||
"description": "SecurityContext holds security configuration that will be applied to a container.\nSome fields are present in both SecurityContext and PodSecurityContext. When both\nare set, the values in SecurityContext take precedence."
|
||||
|
@ -5389,7 +5465,7 @@
|
|||
"minDomains": {
|
||||
"type": "integer",
|
||||
"format": "int32",
|
||||
"description": "MinDomains indicates a minimum number of eligible domains.\nWhen the number of eligible domains with matching topology keys is less than minDomains,\nPod Topology Spread treats \"global minimum\" as 0, and then the calculation of Skew is performed.\nAnd when the number of eligible domains with matching topology keys equals or greater than minDomains,\nthis value has no effect on scheduling.\nAs a result, when the number of eligible domains is less than minDomains,\nscheduler won't schedule more than maxSkew Pods to those domains.\nIf value is nil, the constraint behaves as if MinDomains is equal to 1.\nValid values are integers greater than 0.\nWhen value is not nil, WhenUnsatisfiable must be DoNotSchedule.\n\nFor example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same\nlabelSelector spread as 2/2/2:\n+-------+-------+-------+\n| zone1 | zone2 | zone3 |\n+-------+-------+-------+\n| P P | P P | P P |\n+-------+-------+-------+\nThe number of domains is less than 5(MinDomains), so \"global minimum\" is treated as 0.\nIn this situation, new pod with the same labelSelector cannot be scheduled,\nbecause computed skew will be 3(3 - 0) if new Pod is scheduled to any of the three zones,\nit will violate MaxSkew.\n\nThis is a beta field and requires the MinDomainsInPodTopologySpread feature gate to be enabled (enabled by default).\n+optional"
|
||||
"description": "MinDomains indicates a minimum number of eligible domains.\nWhen the number of eligible domains with matching topology keys is less than minDomains,\nPod Topology Spread treats \"global minimum\" as 0, and then the calculation of Skew is performed.\nAnd when the number of eligible domains with matching topology keys equals or greater than minDomains,\nthis value has no effect on scheduling.\nAs a result, when the number of eligible domains is less than minDomains,\nscheduler won't schedule more than maxSkew Pods to those domains.\nIf value is nil, the constraint behaves as if MinDomains is equal to 1.\nValid values are integers greater than 0.\nWhen value is not nil, WhenUnsatisfiable must be DoNotSchedule.\n\nFor example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same\nlabelSelector spread as 2/2/2:\n+-------+-------+-------+\n| zone1 | zone2 | zone3 |\n+-------+-------+-------+\n| P P | P P | P P |\n+-------+-------+-------+\nThe number of domains is less than 5(MinDomains), so \"global minimum\" is treated as 0.\nIn this situation, new pod with the same labelSelector cannot be scheduled,\nbecause computed skew will be 3(3 - 0) if new Pod is scheduled to any of the three zones,\nit will violate MaxSkew.\n+optional"
|
||||
},
|
||||
"nodeAffinityPolicy": {
|
||||
"type": "string",
|
||||
|
@ -5487,6 +5563,10 @@
|
|||
"type": "boolean",
|
||||
"title": "Mounted read-only if true, read-write otherwise (false or unspecified).\nDefaults to false.\n+optional"
|
||||
},
|
||||
"recursiveReadOnly": {
|
||||
"type": "string",
|
||||
"description": "RecursiveReadOnly specifies whether read-only mounts should be handled\nrecursively.\n\nIf ReadOnly is false, this field has no meaning and must be unspecified.\n\nIf ReadOnly is true, and this field is set to Disabled, the mount is not made\nrecursively read-only. If this field is set to IfPossible, the mount is made\nrecursively read-only, if it is supported by the container runtime. If this\nfield is set to Enabled, the mount is made recursively read-only if it is\nsupported by the container runtime, otherwise the pod will not be started and\nan error will be generated to indicate the reason.\n\nIf this field is set to IfPossible or Enabled, MountPropagation must be set to\nNone (or be unspecified, which defaults to None).\n\nIf this field is not specified, it is treated as an equivalent of Disabled.\n\n+featureGate=RecursiveReadOnlyMounts\n+optional"
|
||||
},
|
||||
"mountPath": {
|
||||
"type": "string",
|
||||
"description": "Path within the container at which the volume should be mounted. Must\nnot contain ':'."
|
||||
|
@ -5497,7 +5577,7 @@
|
|||
},
|
||||
"mountPropagation": {
|
||||
"type": "string",
|
||||
"title": "mountPropagation determines how mounts are propagated from the host\nto container and the other way around.\nWhen not set, MountPropagationNone is used.\nThis field is beta in 1.10.\n+optional"
|
||||
"title": "mountPropagation determines how mounts are propagated from the host\nto container and the other way around.\nWhen not set, MountPropagationNone is used.\nThis field is beta in 1.10.\nWhen RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified\n(which defaults to None).\n+optional"
|
||||
},
|
||||
"subPathExpr": {
|
||||
"type": "string",
|
||||
|
@ -5768,7 +5848,7 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement"
|
||||
},
|
||||
"title": "matchExpressions is a list of label selector requirements. The requirements are ANDed.\n+optional"
|
||||
"title": "matchExpressions is a list of label selector requirements. The requirements are ANDed.\n+optional\n+listType=atomic"
|
||||
}
|
||||
},
|
||||
"title": "A label selector is a label query over a set of resources. The result of matchLabels and\nmatchExpressions are ANDed. An empty label selector matches all objects. A null\nlabel selector matches no objects.\n+structType=atomic"
|
||||
|
@ -5789,7 +5869,7 @@
|
|||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.\n+optional"
|
||||
"title": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.\n+optional\n+listType=atomic"
|
||||
}
|
||||
},
|
||||
"description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values."
|
||||
|
@ -5892,21 +5972,21 @@
|
|||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.apimachinery.pkg.apis.meta.v1.OwnerReference"
|
||||
},
|
||||
"title": "List of objects depended by this object. If ALL objects in the list have\nbeen deleted, this object will be garbage collected. If this object is managed by a controller,\nthen an entry in this list will point to this controller, with the controller field set to true.\nThere cannot be more than one managing controller.\n+optional\n+patchMergeKey=uid\n+patchStrategy=merge"
|
||||
"title": "List of objects depended by this object. If ALL objects in the list have\nbeen deleted, this object will be garbage collected. If this object is managed by a controller,\nthen an entry in this list will point to this controller, with the controller field set to true.\nThere cannot be more than one managing controller.\n+optional\n+patchMergeKey=uid\n+patchStrategy=merge\n+listType=map\n+listMapKey=uid"
|
||||
},
|
||||
"finalizers": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Must be empty before the object is deleted from the registry. Each entry\nis an identifier for the responsible component that will remove the entry\nfrom the list. If the deletionTimestamp of the object is non-nil, entries\nin this list can only be removed.\nFinalizers may be processed and removed in any order. Order is NOT enforced\nbecause it introduces significant risk of stuck finalizers.\nfinalizers is a shared field, any actor with permission can reorder it.\nIf the finalizer list is processed in order, then this can lead to a situation\nin which the component responsible for the first finalizer in the list is\nwaiting for a signal (field value, external system, or other) produced by a\ncomponent responsible for a finalizer later in the list, resulting in a deadlock.\nWithout enforced ordering finalizers are free to order amongst themselves and\nare not vulnerable to ordering changes in the list.\n+optional\n+patchStrategy=merge"
|
||||
"title": "Must be empty before the object is deleted from the registry. Each entry\nis an identifier for the responsible component that will remove the entry\nfrom the list. If the deletionTimestamp of the object is non-nil, entries\nin this list can only be removed.\nFinalizers may be processed and removed in any order. Order is NOT enforced\nbecause it introduces significant risk of stuck finalizers.\nfinalizers is a shared field, any actor with permission can reorder it.\nIf the finalizer list is processed in order, then this can lead to a situation\nin which the component responsible for the first finalizer in the list is\nwaiting for a signal (field value, external system, or other) produced by a\ncomponent responsible for a finalizer later in the list, resulting in a deadlock.\nWithout enforced ordering finalizers are free to order amongst themselves and\nare not vulnerable to ordering changes in the list.\n+optional\n+patchStrategy=merge\n+listType=set"
|
||||
},
|
||||
"managedFields": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/k8s.io.apimachinery.pkg.apis.meta.v1.ManagedFieldsEntry"
|
||||
},
|
||||
"description": "ManagedFields maps workflow-id and version to the set of fields\nthat are managed by that workflow. This is mostly for internal\nhousekeeping, and users typically shouldn't need to set or\nunderstand this field. A workflow can be the user's name, a\ncontroller's name, or the name of a specific apply path like\n\"ci-cd\". The set of fields is always in the version that the\nworkflow used when modifying the object.\n\n+optional"
|
||||
"description": "ManagedFields maps workflow-id and version to the set of fields\nthat are managed by that workflow. This is mostly for internal\nhousekeeping, and users typically shouldn't need to set or\nunderstand this field. A workflow can be the user's name, a\ncontroller's name, or the name of a specific apply path like\n\"ci-cd\". The set of fields is always in the version that the\nworkflow used when modifying the object.\n\n+optional\n+listType=atomic"
|
||||
}
|
||||
},
|
||||
"description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects\nusers must create."
|
||||
|
|
|
@ -57,3 +57,8 @@ API rule violation: names_match,github.com/argoproj/argo-rollouts/pkg/apis/rollo
|
|||
API rule violation: names_match,github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1,RolloutStatus,ALBs
|
||||
API rule violation: names_match,github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1,RolloutStatus,HPAReplicas
|
||||
API rule violation: names_match,github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1,Sigv4Config,RoleARN
|
||||
API rule violation: streaming_list_type_json_tags,github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1,AnalysisRunList,ListMeta
|
||||
API rule violation: streaming_list_type_json_tags,github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1,AnalysisTemplateList,ListMeta
|
||||
API rule violation: streaming_list_type_json_tags,github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1,ClusterAnalysisTemplateList,ListMeta
|
||||
API rule violation: streaming_list_type_json_tags,github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1,ExperimentList,ListMeta
|
||||
API rule violation: streaming_list_type_json_tags,github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1,RolloutList,ListMeta
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -17,8 +17,6 @@ limitations under the License.
|
|||
|
||||
// Code generated by openapi-gen. DO NOT EDIT.
|
||||
|
||||
// This file was autogenerated by openapi-gen. Do not edit it manually!
|
||||
|
||||
package v1alpha1
|
||||
|
||||
import (
|
||||
|
@ -102,6 +100,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA
|
|||
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.PreferredDuringSchedulingIgnoredDuringExecution": schema_pkg_apis_rollouts_v1alpha1_PreferredDuringSchedulingIgnoredDuringExecution(ref),
|
||||
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.PrometheusMetric": schema_pkg_apis_rollouts_v1alpha1_PrometheusMetric(ref),
|
||||
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.PrometheusRangeQueryArgs": schema_pkg_apis_rollouts_v1alpha1_PrometheusRangeQueryArgs(ref),
|
||||
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.ReplicaProgressThreshold": schema_pkg_apis_rollouts_v1alpha1_ReplicaProgressThreshold(ref),
|
||||
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.RequiredDuringSchedulingIgnoredDuringExecution": schema_pkg_apis_rollouts_v1alpha1_RequiredDuringSchedulingIgnoredDuringExecution(ref),
|
||||
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.RollbackWindowSpec": schema_pkg_apis_rollouts_v1alpha1_RollbackWindowSpec(ref),
|
||||
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.Rollout": schema_pkg_apis_rollouts_v1alpha1_Rollout(ref),
|
||||
|
@ -1625,11 +1624,17 @@ func schema_pkg_apis_rollouts_v1alpha1_CanaryStrategy(ref common.ReferenceCallba
|
|||
Format: "int32",
|
||||
},
|
||||
},
|
||||
"replicaProgressThreshold": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "ReplicaProgressThreshold is the threhold number or percentage of pods that need to be available before a rollout promotion. Defaults to 100% of total replicas.",
|
||||
Ref: ref("github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.ReplicaProgressThreshold"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Dependencies: []string{
|
||||
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.AntiAffinity", "github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.CanaryStep", "github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.PingPongSpec", "github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.PodTemplateMetadata", "github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.RolloutAnalysisBackground", "github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.RolloutTrafficRouting", "k8s.io/apimachinery/pkg/util/intstr.IntOrString"},
|
||||
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.AntiAffinity", "github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.CanaryStep", "github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.PingPongSpec", "github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.PodTemplateMetadata", "github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.ReplicaProgressThreshold", "github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.RolloutAnalysisBackground", "github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1.RolloutTrafficRouting", "k8s.io/apimachinery/pkg/util/intstr.IntOrString"},
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3782,6 +3787,35 @@ func schema_pkg_apis_rollouts_v1alpha1_PrometheusRangeQueryArgs(ref common.Refer
|
|||
}
|
||||
}
|
||||
|
||||
func schema_pkg_apis_rollouts_v1alpha1_ReplicaProgressThreshold(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
return common.OpenAPIDefinition{
|
||||
Schema: spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Type: []string{"object"},
|
||||
Properties: map[string]spec.Schema{
|
||||
"type": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "Type is used to specify whether the replica progress threshold is a percentage or a number. Required if replicaProgressThreshold is specified.",
|
||||
Default: "",
|
||||
Type: []string{"string"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
"value": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "Value contains the user-specified value for when a Argo Rollouts can promote a canary to the next step. If not satisfied, this value will be assumed to be 100% of the total desired replicas for the given next step. Value must also be greater than 0. Required.",
|
||||
Default: 0,
|
||||
Type: []string{"integer"},
|
||||
Format: "int32",
|
||||
},
|
||||
},
|
||||
},
|
||||
Required: []string{"type", "value"},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func schema_pkg_apis_rollouts_v1alpha1_RequiredDuringSchedulingIgnoredDuringExecution(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
return common.OpenAPIDefinition{
|
||||
Schema: spec.Schema{
|
||||
|
|
|
@ -45,6 +45,7 @@ type RolloutSpec struct {
|
|||
// selected by this will be the ones affected by this rollout.
|
||||
// It must match the pod template's labels.
|
||||
// +optional
|
||||
// +kubebuilder:validation:XValidation:rule="self == oldSelf",message=".spec.selector is immutable"
|
||||
Selector *metav1.LabelSelector `json:"selector" protobuf:"bytes,2,opt,name=selector"`
|
||||
// Template describes the pods that will be created.
|
||||
// +optional
|
||||
|
@ -239,6 +240,23 @@ type PreferredDuringSchedulingIgnoredDuringExecution struct {
|
|||
// RequiredDuringSchedulingIgnoredDuringExecution defines inter-pod scheduling rule to be RequiredDuringSchedulingIgnoredDuringExecution
|
||||
type RequiredDuringSchedulingIgnoredDuringExecution struct{}
|
||||
|
||||
// ProgressType is the type which could be used when specifying the replica progress threshold. Percentage | Pods
|
||||
type ProgressType string
|
||||
|
||||
const (
|
||||
ProgressTypePercentage ProgressType = "Percent"
|
||||
ProgressTypePods ProgressType = "Pods"
|
||||
)
|
||||
|
||||
type ReplicaProgressThreshold struct {
|
||||
// Type is used to specify whether the replica progress threshold is a percentage or a number. Required if replicaProgressThreshold is specified.
|
||||
Type ProgressType `json:"type" protobuf:"bytes,1,opt,name=type"`
|
||||
// Value contains the user-specified value for when a Argo Rollouts can promote a canary to the next step.
|
||||
// If not satisfied, this value will be assumed to be 100% of the total desired replicas for the given next step.
|
||||
// Value must also be greater than 0. Required.
|
||||
Value int32 `json:"value" protobuf:"varint,2,opt,name=value"`
|
||||
}
|
||||
|
||||
// CanaryStrategy defines parameters for a Replica Based Canary
|
||||
type CanaryStrategy struct {
|
||||
// CanaryService holds the name of a service which selects pods with canary version and don't select any pods with stable version.
|
||||
|
@ -316,6 +334,11 @@ type CanaryStrategy struct {
|
|||
// Assuming the desired number of pods in a stable or canary ReplicaSet is not zero, then make sure it is at least
|
||||
// MinPodsPerReplicaSet for High Availability. Only applicable for TrafficRoutedCanary
|
||||
MinPodsPerReplicaSet *int32 `json:"minPodsPerReplicaSet,omitempty" protobuf:"varint,16,opt,name=minPodsPerReplicaSet"`
|
||||
|
||||
// ReplicaProgressThreshold is the threhold number or percentage of pods that need to be available before a rollout promotion.
|
||||
// Defaults to 100% of total replicas.
|
||||
// +optional
|
||||
ReplicaProgressThreshold *ReplicaProgressThreshold `json:"replicaProgressThreshold,omitempty" protobuf:"bytes,17,opt,name=replicaProgressThreshold"`
|
||||
}
|
||||
|
||||
// PingPongSpec holds the ping and pong service name.
|
||||
|
|
|
@ -940,6 +940,11 @@ func (in *CanaryStrategy) DeepCopyInto(out *CanaryStrategy) {
|
|||
*out = new(int32)
|
||||
**out = **in
|
||||
}
|
||||
if in.ReplicaProgressThreshold != nil {
|
||||
in, out := &in.ReplicaProgressThreshold, &out.ReplicaProgressThreshold
|
||||
*out = new(ReplicaProgressThreshold)
|
||||
**out = **in
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -2076,6 +2081,22 @@ func (in *PrometheusRangeQueryArgs) DeepCopy() *PrometheusRangeQueryArgs {
|
|||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *ReplicaProgressThreshold) DeepCopyInto(out *ReplicaProgressThreshold) {
|
||||
*out = *in
|
||||
return
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReplicaProgressThreshold.
|
||||
func (in *ReplicaProgressThreshold) DeepCopy() *ReplicaProgressThreshold {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(ReplicaProgressThreshold)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *RequiredDuringSchedulingIgnoredDuringExecution) DeepCopyInto(out *RequiredDuringSchedulingIgnoredDuringExecution) {
|
||||
*out = *in
|
||||
|
|
|
@ -228,6 +228,11 @@ func ValidateRolloutStrategyBlueGreen(rollout *v1alpha1.Rollout, fldPath *field.
|
|||
return allErrs
|
||||
}
|
||||
|
||||
func InvalidWorkloadRef(rollout *v1alpha1.Rollout, err error) error {
|
||||
fldPath := field.NewPath("spec")
|
||||
return field.Invalid(fldPath.Child("workloadRef"), rollout.Spec.WorkloadRef, err.Error())
|
||||
}
|
||||
|
||||
// requireCanaryStableServices returns true if the rollout requires canary.stableService and
|
||||
// canary.canaryService to be defined
|
||||
func requireCanaryStableServices(rollout *v1alpha1.Rollout) bool {
|
||||
|
|
|
@ -13,7 +13,7 @@ import (
|
|||
"k8s.io/apimachinery/pkg/runtime/serializer/yaml"
|
||||
"k8s.io/apimachinery/pkg/util/intstr"
|
||||
"k8s.io/apimachinery/pkg/util/validation/field"
|
||||
"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"
|
||||
|
@ -674,8 +674,8 @@ func TestValidateAnalysisTemplatesWithType(t *testing.T) {
|
|||
t.Run("failure - duplicate metrics", func(t *testing.T) {
|
||||
rollout := getAlbRollout("alb-ingress")
|
||||
templates := getAnalysisTemplatesWithType()
|
||||
templates.AnalysisTemplates[0].Spec.Args = append(templates.AnalysisTemplates[0].Spec.Args, v1alpha1.Argument{Name: "metric1-name", Value: pointer.StringPtr("true")})
|
||||
templates.AnalysisTemplates[0].Spec.Args[0] = v1alpha1.Argument{Name: "valid", Value: pointer.StringPtr("true")}
|
||||
templates.AnalysisTemplates[0].Spec.Args = append(templates.AnalysisTemplates[0].Spec.Args, v1alpha1.Argument{Name: "metric1-name", Value: ptr.To[string]("true")})
|
||||
templates.AnalysisTemplates[0].Spec.Args[0] = v1alpha1.Argument{Name: "valid", Value: ptr.To[string]("true")}
|
||||
allErrs := ValidateAnalysisTemplatesWithType(rollout, templates)
|
||||
assert.Empty(t, allErrs)
|
||||
})
|
||||
|
@ -741,7 +741,7 @@ func TestValidateAnalysisTemplateWithType(t *testing.T) {
|
|||
template.AnalysisTemplates[0].Spec.Args = []v1alpha1.Argument{
|
||||
{
|
||||
Name: "service-name",
|
||||
Value: pointer.StringPtr("service-name"),
|
||||
Value: ptr.To[string]("service-name"),
|
||||
},
|
||||
}
|
||||
allErrs := ValidateAnalysisTemplateWithType(rollout, template.AnalysisTemplates[0], nil, template.TemplateType, GetAnalysisTemplateWithTypeFieldPath(template.TemplateType, template.CanaryStepIndex))
|
||||
|
@ -800,7 +800,7 @@ func TestValidateAnalysisTemplateWithType(t *testing.T) {
|
|||
templates.AnalysisTemplates[0].Spec.Args = []v1alpha1.Argument{
|
||||
{
|
||||
Name: "service-name",
|
||||
Value: pointer.StringPtr("service-name"),
|
||||
Value: ptr.To[string]("service-name"),
|
||||
},
|
||||
}
|
||||
rollout.Spec.Strategy.Canary.Analysis = &v1alpha1.RolloutAnalysisBackground{
|
||||
|
@ -1573,7 +1573,7 @@ func TestValidateAnalysisMetrics(t *testing.T) {
|
|||
})
|
||||
|
||||
t.Run("Error: arg has both Value and ValueFrom", func(t *testing.T) {
|
||||
args[2].Value = pointer.StringPtr("secret-value")
|
||||
args[2].Value = ptr.To[string]("secret-value")
|
||||
_, err := validateAnalysisMetrics(metrics, args)
|
||||
assert.NotNil(t, err)
|
||||
assert.Equal(t, "arg 'secret' has both Value and ValueFrom fields", err.Error())
|
||||
|
|
|
@ -10,7 +10,7 @@ import (
|
|||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/util/intstr"
|
||||
"k8s.io/apimachinery/pkg/util/validation/field"
|
||||
"k8s.io/utils/pointer"
|
||||
"k8s.io/utils/ptr"
|
||||
|
||||
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
|
||||
"github.com/argoproj/argo-rollouts/utils/defaults"
|
||||
|
@ -82,7 +82,7 @@ func TestValidateRollout(t *testing.T) {
|
|||
t.Run("privileged container", func(t *testing.T) {
|
||||
ro := ro.DeepCopy()
|
||||
ro.Spec.Template.Spec.Containers[0].SecurityContext = &corev1.SecurityContext{
|
||||
Privileged: pointer.BoolPtr(true),
|
||||
Privileged: ptr.To[bool](true),
|
||||
}
|
||||
allErrs := ValidateRollout(ro)
|
||||
assert.Empty(t, allErrs)
|
||||
|
@ -211,7 +211,7 @@ func TestValidateRolloutStrategyCanaryMissingServiceNames(t *testing.T) {
|
|||
// Create a table of test cases
|
||||
canaryStrategy := &v1alpha1.CanaryStrategy{
|
||||
Steps: []v1alpha1.CanaryStep{{
|
||||
SetWeight: pointer.Int32(10),
|
||||
SetWeight: ptr.To[int32](10),
|
||||
}},
|
||||
}
|
||||
ro := &v1alpha1.Rollout{}
|
||||
|
@ -263,14 +263,14 @@ func TestValidateRolloutStrategyCanary(t *testing.T) {
|
|||
|
||||
t.Run("valid rollout", func(t *testing.T) {
|
||||
validRo := ro.DeepCopy()
|
||||
validRo.Spec.Strategy.Canary.Steps[0].SetWeight = pointer.Int32(10)
|
||||
validRo.Spec.Strategy.Canary.Steps[0].SetWeight = ptr.To[int32](10)
|
||||
allErrs := ValidateRolloutStrategyCanary(validRo, field.NewPath(""))
|
||||
assert.Empty(t, allErrs)
|
||||
})
|
||||
|
||||
t.Run("valid plugin missing canary and stable service", func(t *testing.T) {
|
||||
validRo := ro.DeepCopy()
|
||||
validRo.Spec.Strategy.Canary.Steps[0].SetWeight = pointer.Int32(10)
|
||||
validRo.Spec.Strategy.Canary.Steps[0].SetWeight = ptr.To[int32](10)
|
||||
validRo.Spec.Strategy.Canary.CanaryService = ""
|
||||
validRo.Spec.Strategy.Canary.StableService = ""
|
||||
validRo.Spec.Strategy.Canary.TrafficRouting.ALB = nil
|
||||
|
@ -281,7 +281,7 @@ func TestValidateRolloutStrategyCanary(t *testing.T) {
|
|||
|
||||
t.Run("valid Istio missing canary and stable service", func(t *testing.T) {
|
||||
validRo := ro.DeepCopy()
|
||||
validRo.Spec.Strategy.Canary.Steps[0].SetWeight = pointer.Int32(10)
|
||||
validRo.Spec.Strategy.Canary.Steps[0].SetWeight = ptr.To[int32](10)
|
||||
validRo.Spec.Strategy.Canary.CanaryService = ""
|
||||
validRo.Spec.Strategy.Canary.StableService = ""
|
||||
validRo.Spec.Strategy.Canary.TrafficRouting.Istio = &v1alpha1.IstioTrafficRouting{DestinationRule: &v1alpha1.IstioDestinationRule{Name: "destination-rule"}}
|
||||
|
@ -292,7 +292,7 @@ func TestValidateRolloutStrategyCanary(t *testing.T) {
|
|||
|
||||
t.Run("valid Istio with ping pong", func(t *testing.T) {
|
||||
validRo := ro.DeepCopy()
|
||||
validRo.Spec.Strategy.Canary.Steps[0].SetWeight = pointer.Int32(10)
|
||||
validRo.Spec.Strategy.Canary.Steps[0].SetWeight = ptr.To[int32](10)
|
||||
validRo.Spec.Strategy.Canary.CanaryService = ""
|
||||
validRo.Spec.Strategy.Canary.StableService = ""
|
||||
validRo.Spec.Strategy.Canary.PingPong = &v1alpha1.PingPongSpec{
|
||||
|
@ -307,7 +307,7 @@ func TestValidateRolloutStrategyCanary(t *testing.T) {
|
|||
|
||||
t.Run("valid PingPong missing canary and stable service", func(t *testing.T) {
|
||||
validRo := ro.DeepCopy()
|
||||
validRo.Spec.Strategy.Canary.Steps[0].SetWeight = pointer.Int32(10)
|
||||
validRo.Spec.Strategy.Canary.Steps[0].SetWeight = ptr.To[int32](10)
|
||||
validRo.Spec.Strategy.Canary.CanaryService = ""
|
||||
validRo.Spec.Strategy.Canary.StableService = ""
|
||||
validRo.Spec.Strategy.Canary.PingPong = &v1alpha1.PingPongSpec{PingService: "ping", PongService: "pong"}
|
||||
|
@ -317,7 +317,7 @@ func TestValidateRolloutStrategyCanary(t *testing.T) {
|
|||
|
||||
t.Run("valid two plugins missing canary and stable service", func(t *testing.T) {
|
||||
validRo := ro.DeepCopy()
|
||||
validRo.Spec.Strategy.Canary.Steps[0].SetWeight = pointer.Int32(10)
|
||||
validRo.Spec.Strategy.Canary.Steps[0].SetWeight = ptr.To[int32](10)
|
||||
validRo.Spec.Strategy.Canary.CanaryService = ""
|
||||
validRo.Spec.Strategy.Canary.StableService = ""
|
||||
validRo.Spec.Strategy.Canary.PingPong = &v1alpha1.PingPongSpec{PingService: "ping", PongService: "pong"}
|
||||
|
@ -328,7 +328,7 @@ func TestValidateRolloutStrategyCanary(t *testing.T) {
|
|||
|
||||
t.Run("invalid two plugins missing canary and stable service", func(t *testing.T) {
|
||||
validRo := ro.DeepCopy()
|
||||
validRo.Spec.Strategy.Canary.Steps[0].SetWeight = pointer.Int32(10)
|
||||
validRo.Spec.Strategy.Canary.Steps[0].SetWeight = ptr.To[int32](10)
|
||||
validRo.Spec.Strategy.Canary.CanaryService = ""
|
||||
validRo.Spec.Strategy.Canary.StableService = ""
|
||||
validRo.Spec.Strategy.Canary.TrafficRouting.ALB = nil
|
||||
|
@ -876,7 +876,7 @@ func TestCanaryScaleDownDelaySeconds(t *testing.T) {
|
|||
Canary: &v1alpha1.CanaryStrategy{
|
||||
StableService: "stable",
|
||||
CanaryService: "canary",
|
||||
ScaleDownDelaySeconds: pointer.Int32(60),
|
||||
ScaleDownDelaySeconds: ptr.To[int32](60),
|
||||
},
|
||||
},
|
||||
Template: corev1.PodTemplateSpec{
|
||||
|
@ -943,7 +943,7 @@ func TestCanaryDynamicStableScale(t *testing.T) {
|
|||
})
|
||||
t.Run("dynamicStableScale with scaleDownDelaySeconds", func(t *testing.T) {
|
||||
ro := ro.DeepCopy()
|
||||
ro.Spec.Strategy.Canary.ScaleDownDelaySeconds = pointer.Int32(60)
|
||||
ro.Spec.Strategy.Canary.ScaleDownDelaySeconds = ptr.To[int32](60)
|
||||
ro.Spec.Strategy.Canary.TrafficRouting = &v1alpha1.RolloutTrafficRouting{
|
||||
SMI: &v1alpha1.SMITrafficRouting{},
|
||||
}
|
||||
|
@ -1007,7 +1007,7 @@ func TestCanaryExperimentStepWithWeight(t *testing.T) {
|
|||
Experiment: &v1alpha1.RolloutExperimentStep{
|
||||
Templates: []v1alpha1.RolloutExperimentTemplate{{
|
||||
Name: "template",
|
||||
Weight: pointer.Int32(20),
|
||||
Weight: ptr.To[int32](20),
|
||||
}},
|
||||
},
|
||||
}},
|
||||
|
|
|
@ -41,7 +41,7 @@ const (
|
|||
%[1]s abort guestbook
|
||||
|
||||
# Retry the guestbook rollout
|
||||
%[1]s retry guestbook`
|
||||
%[1]s retry rollout guestbook`
|
||||
)
|
||||
|
||||
// NewCmdArgoRollouts returns new instance of rollouts command.
|
||||
|
|
|
@ -14,7 +14,7 @@ import (
|
|||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/utils/pointer"
|
||||
"k8s.io/utils/ptr"
|
||||
"sigs.k8s.io/yaml"
|
||||
|
||||
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts"
|
||||
|
@ -372,7 +372,7 @@ func (c *CreateAnalysisRunOptions) ParseArgFlags() ([]v1alpha1.Argument, error)
|
|||
}
|
||||
arg := v1alpha1.Argument{
|
||||
Name: argSplit[0],
|
||||
Value: pointer.StringPtr(argSplit[1]),
|
||||
Value: ptr.To[string](argSplit[1]),
|
||||
}
|
||||
args = append(args, arg)
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ import (
|
|||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/watch"
|
||||
kubetesting "k8s.io/client-go/testing"
|
||||
"k8s.io/utils/pointer"
|
||||
"k8s.io/utils/ptr"
|
||||
|
||||
"github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
|
||||
fakeroclient "github.com/argoproj/argo-rollouts/pkg/client/clientset/versioned/fake"
|
||||
|
@ -25,12 +25,12 @@ func newCanaryRollout() *v1alpha1.Rollout {
|
|||
Namespace: "test",
|
||||
},
|
||||
Spec: v1alpha1.RolloutSpec{
|
||||
Replicas: pointer.Int32Ptr(5),
|
||||
Replicas: ptr.To[int32](5),
|
||||
Strategy: v1alpha1.RolloutStrategy{
|
||||
Canary: &v1alpha1.CanaryStrategy{
|
||||
Steps: []v1alpha1.CanaryStep{
|
||||
{
|
||||
SetWeight: pointer.Int32Ptr(10),
|
||||
SetWeight: ptr.To[int32](10),
|
||||
},
|
||||
{
|
||||
Pause: &v1alpha1.RolloutPause{
|
||||
|
@ -38,14 +38,14 @@ func newCanaryRollout() *v1alpha1.Rollout {
|
|||
},
|
||||
},
|
||||
{
|
||||
SetWeight: pointer.Int32Ptr(20),
|
||||
SetWeight: ptr.To[int32](20),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Status: v1alpha1.RolloutStatus{
|
||||
CurrentStepIndex: pointer.Int32Ptr(1),
|
||||
CurrentStepIndex: ptr.To[int32](1),
|
||||
Replicas: 4,
|
||||
ReadyReplicas: 1,
|
||||
UpdatedReplicas: 3,
|
||||
|
@ -61,13 +61,13 @@ func newBlueGreenRollout() *v1alpha1.Rollout {
|
|||
Namespace: "test",
|
||||
},
|
||||
Spec: v1alpha1.RolloutSpec{
|
||||
Replicas: pointer.Int32Ptr(5),
|
||||
Replicas: ptr.To[int32](5),
|
||||
Strategy: v1alpha1.RolloutStrategy{
|
||||
BlueGreen: &v1alpha1.BlueGreenStrategy{},
|
||||
},
|
||||
},
|
||||
Status: v1alpha1.RolloutStatus{
|
||||
CurrentStepIndex: pointer.Int32Ptr(1),
|
||||
CurrentStepIndex: ptr.To[int32](1),
|
||||
Replicas: 4,
|
||||
ReadyReplicas: 1,
|
||||
UpdatedReplicas: 3,
|
||||
|
|
|
@ -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"
|
||||
fakeroclient "github.com/argoproj/argo-rollouts/pkg/client/clientset/versioned/fake"
|
||||
|
@ -130,10 +130,10 @@ func TestPromoteCmdSuccesSkipAllSteps(t *testing.T) {
|
|||
Canary: &v1alpha1.CanaryStrategy{
|
||||
Steps: []v1alpha1.CanaryStep{
|
||||
{
|
||||
SetWeight: pointer.Int32Ptr(1),
|
||||
SetWeight: ptr.To[int32](1),
|
||||
},
|
||||
{
|
||||
SetWeight: pointer.Int32Ptr(2),
|
||||
SetWeight: ptr.To[int32](2),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -180,10 +180,10 @@ func TestPromoteCmdSuccesFirstStepWithSkipFirstStep(t *testing.T) {
|
|||
Canary: &v1alpha1.CanaryStrategy{
|
||||
Steps: []v1alpha1.CanaryStep{
|
||||
{
|
||||
SetWeight: pointer.Int32Ptr(1),
|
||||
SetWeight: ptr.To[int32](1),
|
||||
},
|
||||
{
|
||||
SetWeight: pointer.Int32Ptr(2),
|
||||
SetWeight: ptr.To[int32](2),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -230,10 +230,10 @@ func TestPromoteCmdSuccesFirstStep(t *testing.T) {
|
|||
Canary: &v1alpha1.CanaryStrategy{
|
||||
Steps: []v1alpha1.CanaryStep{
|
||||
{
|
||||
SetWeight: pointer.Int32Ptr(1),
|
||||
SetWeight: ptr.To[int32](1),
|
||||
},
|
||||
{
|
||||
SetWeight: pointer.Int32Ptr(2),
|
||||
SetWeight: ptr.To[int32](2),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -280,17 +280,17 @@ func TestPromoteCmdSuccessDoNotGoPastLastStep(t *testing.T) {
|
|||
Canary: &v1alpha1.CanaryStrategy{
|
||||
Steps: []v1alpha1.CanaryStep{
|
||||
{
|
||||
SetWeight: pointer.Int32Ptr(1),
|
||||
SetWeight: ptr.To[int32](1),
|
||||
},
|
||||
{
|
||||
SetWeight: pointer.Int32Ptr(2),
|
||||
SetWeight: ptr.To[int32](2),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Status: v1alpha1.RolloutStatus{
|
||||
CurrentStepIndex: pointer.Int32Ptr(2),
|
||||
CurrentStepIndex: ptr.To[int32](2),
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -503,10 +503,10 @@ func TestPromoteInconclusiveStep(t *testing.T) {
|
|||
Canary: &v1alpha1.CanaryStrategy{
|
||||
Steps: []v1alpha1.CanaryStep{
|
||||
{
|
||||
SetWeight: pointer.Int32Ptr(1),
|
||||
SetWeight: ptr.To[int32](1),
|
||||
},
|
||||
{
|
||||
SetWeight: pointer.Int32Ptr(2),
|
||||
SetWeight: ptr.To[int32](2),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue