mirror of https://github.com/kyverno/chainsaw.git
Compare commits
343 Commits
main
...
v0.2.10-be
Author | SHA1 | Date |
---|---|---|
|
c6440e1b26 | |
|
41029f5cda | |
|
b46f9871fb | |
|
feb26abec4 | |
|
3a1125a4fd | |
|
2d4a31890d | |
|
a9035ca12c | |
|
9ecfefffe3 | |
|
6ec1ea1470 | |
|
903101868c | |
|
6a74f2784b | |
|
6704586709 | |
|
f6a14c008b | |
|
66e954b648 | |
|
d38d401e83 | |
|
a5b478de2a | |
|
f36ca881cc | |
|
b744df6eda | |
|
d570a302d5 | |
|
e9ae364f86 | |
|
b68fb9bc61 | |
|
dd57c01152 | |
|
a8feb9605e | |
|
3f19159363 | |
|
c4e0650584 | |
|
00727540cb | |
|
2c806616f2 | |
|
b054a82dae | |
|
a635f6a2ec | |
|
20862ce29f | |
|
6fce6107f6 | |
|
0c73b672c6 | |
|
1baaa3e9b9 | |
|
2fa87d495e | |
|
6e77b67fc2 | |
|
9af0813fff | |
|
d213e84192 | |
|
0a04e9e2af | |
|
85c25d769b | |
|
132d1cf8d3 | |
|
8ab1d385ba | |
|
a418f8e624 | |
|
923674f019 | |
|
52b78bba17 | |
|
30857057ba | |
|
b5504a50d1 | |
|
0576885791 | |
|
663ec62ff1 | |
|
7d97818ce0 | |
|
af6a5c9e5a | |
|
b9e3491f9c | |
|
68814db110 | |
|
7b709b442f | |
|
99f5d62390 | |
|
c1faf47b19 | |
|
4ae8f11bbf | |
|
9abd6a7ec2 | |
|
180f8c22f2 | |
|
84260de140 | |
|
df3a774ed7 | |
|
5a959cc0a8 | |
|
94cd2118eb | |
|
0d6f9a57e2 | |
|
73c3380af7 | |
|
33b798c3ee | |
|
752d0b2a93 | |
|
81566dd8c3 | |
|
51207b9dc8 | |
|
7bd4223d93 | |
|
22cbf8a396 | |
|
0e0b4475ba | |
|
4294c5126e | |
|
f0a55bb268 | |
|
b2cc92cece | |
|
db549d5b40 | |
|
7c19c94b19 | |
|
dc6070d90d | |
|
01cfd2b61f | |
|
0ccb5c5997 | |
|
2891392bdf | |
|
4c8575d585 | |
|
d0a7cb9362 | |
|
42944af08a | |
|
8bc0eae6cd | |
|
2d5b3ef95f | |
|
18dcdcbdb9 | |
|
fec064b123 | |
|
a5c2d4053b | |
|
ec1126a9d0 | |
|
2581e5de89 | |
|
90d07f7c11 | |
|
ce26036fc3 | |
|
0a88123a6f | |
|
d5dfecc310 | |
|
7ecf185147 | |
|
75fe4e2bce | |
|
636cc0c051 | |
|
00796b5304 | |
|
67c3be86d2 | |
|
defac86b44 | |
|
fc4290b4b2 | |
|
7c9e952e20 | |
|
2be494bae8 | |
|
09efa13cd9 | |
|
65098eb5b1 | |
|
0d439ae38a | |
|
a96d6fdbf2 | |
|
46e788c0a1 | |
|
e0faaa21d6 | |
|
668fcc0b39 | |
|
128d7db74c | |
|
b77fb57522 | |
|
8d9c3516b4 | |
|
effdb79fd8 | |
|
365151e564 | |
|
85bb85ded7 | |
|
f3138ab3b8 | |
|
7c2b1a67aa | |
|
fffcf31384 | |
|
d2f9657ddd | |
|
32ce9b4cf0 | |
|
596c220296 | |
|
b6cbebc4a8 | |
|
04518ee2f4 | |
|
e8a18918f7 | |
|
1cbbbb98d7 | |
|
dada3e6d16 | |
|
54e34e5d78 | |
|
ef374d6f0d | |
|
82e7ffbea9 | |
|
e16bcb19e4 | |
|
6fa8c5ca7f | |
|
5b7275ac81 | |
|
e1ec6299b0 | |
|
d0a6d47b9f | |
|
4b91ad296a | |
|
0bf667cdc7 | |
|
cdc5be8fb0 | |
|
8efda7f9a1 | |
|
a7b93a6cda | |
|
8a48313717 | |
|
2a2bd7a808 | |
|
0bcb6b4e0c | |
|
7b854d009b | |
|
0365dee1ab | |
|
ea7886a85c | |
|
8e2ba663f2 | |
|
7dfa881538 | |
|
792de8a1d1 | |
|
62539800f0 | |
|
6f2a18b88f | |
|
f0af1aae8e | |
|
60078c01b9 | |
|
48a338f5cb | |
|
8002960436 | |
|
437c781cab | |
|
18899b42b0 | |
|
39ca8895a5 | |
|
2811d18080 | |
|
0c5fae8e97 | |
|
7d1727148e | |
|
d78dca6886 | |
|
310302dc22 | |
|
63d0e49c68 | |
|
7374cf7111 | |
|
b13553b948 | |
|
91ca4dc0e0 | |
|
0d26b59ee6 | |
|
9951fe49ae | |
|
15cebcb4f0 | |
|
4fd2081054 | |
|
4fec1e5954 | |
|
3c91d0daa3 | |
|
d23688208c | |
|
bf8ffe7467 | |
|
6d5444a027 | |
|
216cd86837 | |
|
82b2504e93 | |
|
813e10e9fd | |
|
0805301f6a | |
|
99373ca197 | |
|
4b42a99474 | |
|
362749b645 | |
|
f6d484ed83 | |
|
60545e5b54 | |
|
55d5bb8ace | |
|
2c097c4087 | |
|
05ba99f6e6 | |
|
ee6520bf95 | |
|
0fdf5cddd9 | |
|
423692c22d | |
|
013ec08958 | |
|
ee8e1f1825 | |
|
7a241ad029 | |
|
4a82481aab | |
|
b305f4f348 | |
|
f1e9450194 | |
|
aed1f4307b | |
|
56f7b12c31 | |
|
558ab42ade | |
|
60623e67fc | |
|
093c9e37b0 | |
|
18d99b5e9f | |
|
fa19a76cf7 | |
|
9b05a247d5 | |
|
a27c25512a | |
|
a99022371b | |
|
e337ce6c77 | |
|
a215bb2ef4 | |
|
6f81e73441 | |
|
be87640044 | |
|
05aefe91df | |
|
a301cb7c9c | |
|
dc507c2315 | |
|
bac32f71fd | |
|
bcbff46a1e | |
|
94d92efe85 | |
|
ea600f38a7 | |
|
fd4609ddc6 | |
|
b70ab1e301 | |
|
27971133cb | |
|
26589f3206 | |
|
de919e9612 | |
|
07eb449842 | |
|
cf2c77e95c | |
|
20e426e34f | |
|
9ba295143d | |
|
64bd2fe1b7 | |
|
0514dc2d38 | |
|
693c0d9c16 | |
|
5e45e98ab0 | |
|
a5a8d5c53e | |
|
e0abec8381 | |
|
46d6e5e105 | |
|
bd0bba7ef5 | |
|
31c043659a | |
|
8fa8726974 | |
|
b53fbef960 | |
|
79749433c4 | |
|
082e83eb41 | |
|
a26c3f3cea | |
|
f17e00fd68 | |
|
231ea9a79c | |
|
fe176c0000 | |
|
f5eec08361 | |
|
13a0cf9082 | |
|
08787c49df | |
|
6a0605684f | |
|
0c62ea7eb1 | |
|
68c3faaaa7 | |
|
7431f1c37b | |
|
ce155eeae5 | |
|
42ee5aaa77 | |
|
8bd9b98394 | |
|
afcb015385 | |
|
bcfd85a2f0 | |
|
a5732f01bc | |
|
44b22d0e36 | |
|
6773dc8cd3 | |
|
8bed4698ac | |
|
1c5e38e88d | |
|
180ae170ee | |
|
eefb4482df | |
|
384132c04d | |
|
63c0b6a5d7 | |
|
78b71a0eef | |
|
e80ebb20a4 | |
|
feb61e03fa | |
|
38dc40a360 | |
|
1d4741a01c | |
|
35e0abe471 | |
|
56bf5af759 | |
|
fa6ba2e721 | |
|
99f37cadd2 | |
|
3679a1dd43 | |
|
02ec44faf9 | |
|
f3fd620429 | |
|
78a1d00f05 | |
|
f27c7756de | |
|
955eabef77 | |
|
9fabf9c33f | |
|
4fe68214e4 | |
|
f91cb71a43 | |
|
0b235f4851 | |
|
77ae277e86 | |
|
50e5a45b85 | |
|
90176eb538 | |
|
da759b6b2b | |
|
7771f24a27 | |
|
649f593f0a | |
|
119d34696b | |
|
9585468a14 | |
|
e968e662ba | |
|
ed0bdae4bc | |
|
0bae442d66 | |
|
7613418576 | |
|
010db9c13b | |
|
29ebd16a57 | |
|
f9065d761f | |
|
6db661cf41 | |
|
218e978bd4 | |
|
23a5913303 | |
|
efb3eb4ec0 | |
|
5449554481 | |
|
4915642163 | |
|
39adbf6274 | |
|
c8fad0663b | |
|
57d9440577 | |
|
6be49603ec | |
|
534afdaf90 | |
|
b70a6ce0c1 | |
|
fd0339b146 | |
|
584ecf7f7b | |
|
6b8c3bd757 | |
|
661554179e | |
|
6bb2b2e6e1 | |
|
c7a4964904 | |
|
596041226a | |
|
0734d549f5 | |
|
09792c70de | |
|
967bf17146 | |
|
8fb7732137 | |
|
f073726899 | |
|
6c60e5a3d9 | |
|
3c6932648d | |
|
7ff7ea7488 | |
|
ed0cc751fb | |
|
363b246e91 | |
|
48b069b499 | |
|
0ae5dd936f | |
|
dcc6d45e50 | |
|
97a925baf9 | |
|
037f62bdd8 | |
|
a6082dbe7d | |
|
fa8ddf5369 | |
|
1bf3caf7df | |
|
bd765c8fa9 | |
|
a38de0f688 | |
|
c4efea83f1 | |
|
382d7c6beb | |
|
931fd161d9 | |
|
453007813e | |
|
5a17bd4e96 |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -7,25 +7,33 @@ labels: ["bug", "triage"]
|
|||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Please tell us about the bug.
|
||||
value: Please tell us about the bug.
|
||||
- type: dropdown
|
||||
id: chainsaw-version
|
||||
attributes:
|
||||
label: chainsaw version Version
|
||||
description: >-
|
||||
What version of the chainsaw are you running?
|
||||
description: What version of chainsaw are you running?
|
||||
options:
|
||||
- v0.1.0
|
||||
- v0.1.1
|
||||
- v0.1.2
|
||||
- v0.1.3
|
||||
- v0.1.4
|
||||
- v0.1.5
|
||||
- v0.1.6
|
||||
- v0.1.7
|
||||
- v0.1.8
|
||||
- v0.1.9
|
||||
- v0.2.9
|
||||
- v0.2.8
|
||||
- v0.2.7
|
||||
- v0.2.6
|
||||
- v0.2.5
|
||||
- v0.2.4
|
||||
- v0.2.3
|
||||
- v0.2.2
|
||||
- v0.2.1
|
||||
- v0.2.0
|
||||
- v0.1.9
|
||||
- v0.1.8
|
||||
- v0.1.7
|
||||
- v0.1.6
|
||||
- v0.1.5
|
||||
- v0.1.4
|
||||
- v0.1.3
|
||||
- v0.1.2
|
||||
- v0.1.1
|
||||
- v0.1.0
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
|
|
|
@ -2,48 +2,54 @@
|
|||
|
||||
name: General Question
|
||||
description: Ask a question or need support
|
||||
title: "[Question] "
|
||||
labels: ["question"]
|
||||
|
||||
title: '[Question] '
|
||||
labels:
|
||||
- question
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: "Please answer these questions before submitting your issue. Thanks!"
|
||||
|
||||
value: Please answer these questions before submitting your issue. Thanks!
|
||||
- type: textarea
|
||||
id: describe-your-question
|
||||
attributes:
|
||||
label: Describe your question
|
||||
description: "Provide details about your question or the support needed."
|
||||
placeholder: "Type your question here..."
|
||||
description: Provide details about your question or the support needed.
|
||||
placeholder: Type your question here...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
id: chainsaw-version
|
||||
attributes:
|
||||
label: chainsaw version Version
|
||||
description: >-
|
||||
What version of the chainsaw are you running?
|
||||
description: What version of chainsaw are you running?
|
||||
options:
|
||||
- v0.1.0
|
||||
- v0.1.1
|
||||
- v0.1.2
|
||||
- v0.1.3
|
||||
- v0.1.4
|
||||
- v0.1.5
|
||||
- v0.1.6
|
||||
- v0.1.7
|
||||
- v0.1.8
|
||||
- v0.1.9
|
||||
- v0.2.9
|
||||
- v0.2.8
|
||||
- v0.2.7
|
||||
- v0.2.6
|
||||
- v0.2.5
|
||||
- v0.2.4
|
||||
- v0.2.3
|
||||
- v0.2.2
|
||||
- v0.2.1
|
||||
- v0.2.0
|
||||
- v0.1.9
|
||||
- v0.1.8
|
||||
- v0.1.7
|
||||
- v0.1.6
|
||||
- v0.1.5
|
||||
- v0.1.4
|
||||
- v0.1.3
|
||||
- v0.1.2
|
||||
- v0.1.1
|
||||
- v0.1.0
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: additional-context
|
||||
attributes:
|
||||
label: Additional context
|
||||
description: "Add any other context or screenshots about the question here."
|
||||
placeholder: "Additional details..."
|
||||
description: Add any other context or screenshots about the question here.
|
||||
placeholder: Additional details...
|
||||
validations:
|
||||
required: false
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: gomod
|
||||
directory: /
|
||||
directories:
|
||||
- /
|
||||
- /hack/controller-gen/
|
||||
schedule:
|
||||
interval: daily
|
||||
- package-ecosystem: github-actions
|
||||
|
|
|
@ -8,22 +8,24 @@ on:
|
|||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
- release-*
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- release-*
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
required:
|
||||
check-actions:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
- name: Ensure SHA pinned actions
|
||||
uses: zgosalvez/github-actions-ensure-sha-pinned-actions@19ebcb0babbd282ae1822a0b9c28f3f1f25cea45 # v3.0.4
|
||||
uses: zgosalvez/github-actions-ensure-sha-pinned-actions@0901cf7b71c7ea6261ec69a3dc2bd3f9264f893e # v3.0.12
|
||||
with:
|
||||
# slsa-github-generator requires using a semver tag for reusable workflows.
|
||||
# See: https://github.com/slsa-framework/slsa-github-generator#referencing-slsa-builders-and-generators
|
||||
|
|
|
@ -7,7 +7,14 @@ permissions: {}
|
|||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- 'main'
|
||||
- main
|
||||
- release-*
|
||||
types:
|
||||
- opened
|
||||
- demilestoned
|
||||
- milestoned
|
||||
- edited
|
||||
- synchronize
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
|
|
|
@ -8,22 +8,24 @@ on:
|
|||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
- release-*
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- release-*
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
required:
|
||||
codegen-verify:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
|
||||
uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2
|
||||
with:
|
||||
go-version-file: go.mod
|
||||
cache-dependency-path: go.sum
|
||||
|
|
|
@ -8,26 +8,28 @@ on:
|
|||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
- release-*
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- release-*
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
required:
|
||||
scan-trivy:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
security-events: write
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Run Trivy vulnerability scanner in repo mode
|
||||
uses: aquasecurity/trivy-action@d710430a6722f083d3b36b8339ff66b32f22ee55 # v0.19.0
|
||||
uses: aquasecurity/trivy-action@6e7b7d1fd3e4fef0c5fa8cce1229c54b2c9bd0d8 # v0.24.0
|
||||
with:
|
||||
scan-type: fs
|
||||
ignore-unfixed: false
|
||||
|
@ -38,7 +40,7 @@ jobs:
|
|||
exit-code: '0'
|
||||
vuln-type: os,library
|
||||
- name: Upload Trivy scan results to GitHub Security tab
|
||||
uses: github/codeql-action/upload-sarif@cdcdbb579706841c47f7063dda365e292e5cad7a # v2.13.4
|
||||
uses: github/codeql-action/upload-sarif@8214744c546c1e5c8f03dde8fab3a7353211988d # v3.26.7
|
||||
with:
|
||||
sarif_file: trivy-results.sarif
|
||||
category: code
|
|
@ -14,15 +14,15 @@ concurrency:
|
|||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
docs:
|
||||
docs-main:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
|
||||
uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2
|
||||
with:
|
||||
go-version-file: go.mod
|
||||
cache-dependency-path: go.sum
|
||||
|
|
|
@ -7,10 +7,10 @@ permissions: {}
|
|||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'docs-v*'
|
||||
- docs-v*
|
||||
|
||||
jobs:
|
||||
docs:
|
||||
docs-release:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
@ -23,9 +23,9 @@ jobs:
|
|||
version_extractor_regex: '^docs-v(.*)$'
|
||||
- name: Checkout
|
||||
if: ${{ steps.semver.outputs.prerelease == '' }}
|
||||
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
|
||||
uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2
|
||||
if: ${{ steps.semver.outputs.prerelease == '' }}
|
||||
with:
|
||||
go-version-file: go.mod
|
||||
|
|
|
@ -8,26 +8,28 @@ on:
|
|||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
- release-*
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- release-*
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
required:
|
||||
golangci-lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
|
||||
uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2
|
||||
with:
|
||||
go-version-file: go.mod
|
||||
cache-dependency-path: go.sum
|
||||
- name: golangci-lint
|
||||
uses: golangci/golangci-lint-action@3cfe3a4abbb849e10058ce4af15d205b6da42804 # v3.7.1
|
||||
uses: golangci/golangci-lint-action@aaa42aa0628b4ae2578232a66b541047968fac86 # v3.7.1
|
||||
with:
|
||||
skip-cache: true
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
|
||||
|
||||
# feat: (new feature for the user, not a new feature for build script)
|
||||
# fix: (bug fix for the user, not a fix to a build script)
|
||||
# build: (changes that affect the build system or external dependencies)
|
||||
|
@ -18,73 +20,85 @@
|
|||
# | |_______ Scope
|
||||
# |____________ Type
|
||||
|
||||
name: Semantic PR Validation
|
||||
name: Semantic pull request
|
||||
|
||||
permissions: {}
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
- release-*
|
||||
types:
|
||||
- opened
|
||||
- edited
|
||||
- synchronize
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
- opened
|
||||
- reopened
|
||||
- labeled
|
||||
- unlabeled
|
||||
- edited
|
||||
- synchronize
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
validate:
|
||||
check-semantic-pr:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.actor != 'gcp-cherry-pick-bot' }}
|
||||
steps:
|
||||
- name: Validate Pull Request
|
||||
uses: amannn/action-semantic-pull-request@e9fabac35e210fea40ca5b14c0da95a099eff26f
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
# Configure which types are allowed.
|
||||
# Default: https://github.com/commitizen/conventional-commit-types
|
||||
types: |
|
||||
feat
|
||||
fix
|
||||
build
|
||||
chore
|
||||
ci
|
||||
docs
|
||||
perf
|
||||
refactor
|
||||
revert
|
||||
style
|
||||
test
|
||||
revert
|
||||
release
|
||||
# Configure which scopes are allowed.
|
||||
scopes: |
|
||||
api
|
||||
client
|
||||
commands
|
||||
config
|
||||
data
|
||||
deps
|
||||
discovery
|
||||
internal
|
||||
report
|
||||
resource
|
||||
runner
|
||||
operations
|
||||
processors
|
||||
test
|
||||
utils
|
||||
validation
|
||||
version
|
||||
docs
|
||||
release
|
||||
testdata
|
||||
ignoreLabels: |
|
||||
bot
|
||||
ignore-semantic-pull-request
|
||||
# Configure that a scope must always be provided.
|
||||
requireScope: false
|
||||
# When using "Squash and merge" on a PR with only one commit, GitHub
|
||||
# will suggest using that commit message instead of the PR title for the
|
||||
# merge commit, and it's easy to commit this by mistake. Enable this option
|
||||
# to also validate the commit message for one commit PRs.
|
||||
validateSingleCommit: true
|
||||
# Related to `validateSingleCommit` you can opt-in to validate that the PR
|
||||
# title matches a single commit to avoid confusion.
|
||||
validateSingleCommitMatchesPrTitle: true
|
||||
- name: Validate Pull Request
|
||||
uses: amannn/action-semantic-pull-request@0723387faaf9b38adef4775cd42cfd5155ed6017
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
# Configure which types are allowed.
|
||||
# Default: https://github.com/commitizen/conventional-commit-types
|
||||
types: |
|
||||
feat
|
||||
fix
|
||||
build
|
||||
chore
|
||||
ci
|
||||
docs
|
||||
perf
|
||||
refactor
|
||||
revert
|
||||
style
|
||||
test
|
||||
revert
|
||||
release
|
||||
# Configure which scopes are allowed.
|
||||
scopes: |
|
||||
api
|
||||
client
|
||||
commands
|
||||
config
|
||||
data
|
||||
deps
|
||||
discovery
|
||||
internal
|
||||
report
|
||||
resource
|
||||
runner
|
||||
operations
|
||||
processors
|
||||
test
|
||||
utils
|
||||
validation
|
||||
version
|
||||
docs
|
||||
release
|
||||
testdata
|
||||
ignoreLabels: |
|
||||
bot
|
||||
ignore-semantic-pull-request
|
||||
# Configure that a scope must always be provided.
|
||||
requireScope: false
|
||||
# When using "Squash and merge" on a PR with only one commit, GitHub
|
||||
# will suggest using that commit message instead of the PR title for the
|
||||
# merge commit, and it's easy to commit this by mistake. Enable this option
|
||||
# to also validate the commit message for one commit PRs.
|
||||
validateSingleCommit: true
|
||||
# Related to `validateSingleCommit` you can opt-in to validate that the PR
|
||||
# title matches a single commit to avoid confusion.
|
||||
validateSingleCommitMatchesPrTitle: true
|
||||
|
|
|
@ -7,7 +7,7 @@ permissions: {}
|
|||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
- v*
|
||||
|
||||
jobs:
|
||||
goreleaser:
|
||||
|
@ -33,7 +33,7 @@ jobs:
|
|||
docker-images: true
|
||||
swap-storage: false
|
||||
- name: Checkout
|
||||
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Fetch all tags
|
||||
|
@ -41,19 +41,19 @@ jobs:
|
|||
set -e
|
||||
git fetch --force --tags
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
|
||||
uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2
|
||||
with:
|
||||
go-version-file: go.mod
|
||||
cache-dependency-path: go.sum
|
||||
- name: Install Cosign
|
||||
uses: sigstore/cosign-installer@59acb6260d9c0ba8f4a2f9d9b48431a222b68e20 # v3.5.0
|
||||
uses: sigstore/cosign-installer@4959ce089c160fddf62f7b42464195ba1a56d382 # v3.6.0
|
||||
- name: Install Syft
|
||||
uses: anchore/sbom-action/download-syft@ab5d7b5f48981941c4c5d6bf33aeb98fe3bae38c # v0.15.10
|
||||
uses: anchore/sbom-action/download-syft@61119d458adab75f756bc0b9e4bde25725f86a7a # v0.17.2
|
||||
- name: Install Ko
|
||||
uses: ko-build/setup-ko@ace48d793556083a76f1e3e6068850c1f4a369aa # v0.6
|
||||
uses: ko-build/setup-ko@3aebd0597dc1e9d1a26bcfdb7cbeb19c131d3037 # v0.7
|
||||
- name: Run GoReleaser
|
||||
id: goreleaser
|
||||
uses: goreleaser/goreleaser-action@7ec5c2b0c6cdda6e8bbb49444bc797dd33d74dd8 # v5.0.0
|
||||
uses: goreleaser/goreleaser-action@286f3b13b1b49da4ac219696163fb8c1c93e1200 # v6.0.0
|
||||
with:
|
||||
distribution: goreleaser
|
||||
version: latest
|
||||
|
@ -102,7 +102,7 @@ jobs:
|
|||
actions: read
|
||||
id-token: write
|
||||
contents: write
|
||||
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.10.0
|
||||
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.0.0
|
||||
with:
|
||||
base64-subjects: "${{ needs.goreleaser.outputs.hashes }}"
|
||||
upload-assets: true
|
||||
|
@ -114,7 +114,7 @@ jobs:
|
|||
actions: read
|
||||
id-token: write
|
||||
packages: write
|
||||
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v1.10.0
|
||||
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v2.0.0
|
||||
with:
|
||||
image: ${{ needs.goreleaser.outputs.image }}
|
||||
digest: ${{ needs.goreleaser.outputs.digest }}
|
||||
|
|
|
@ -8,9 +8,11 @@ on:
|
|||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
- release-*
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- release-*
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
|
@ -21,9 +23,9 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
|
||||
uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2
|
||||
with:
|
||||
go-version-file: go.mod
|
||||
cache-dependency-path: go.sum
|
||||
|
@ -36,7 +38,7 @@ jobs:
|
|||
set -e
|
||||
make tests
|
||||
- name: Upload coverage
|
||||
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
|
||||
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
|
||||
with:
|
||||
name: coverage.out
|
||||
path: coverage.out
|
||||
|
@ -48,14 +50,12 @@ jobs:
|
|||
- unit-tests
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
|
||||
- name: Download coverage
|
||||
uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: coverage.out
|
||||
- name: Upload Report to Codecov
|
||||
uses: codecov/codecov-action@84508663e988701840491b86de86b666e8a86bed # v4.3.0
|
||||
uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0
|
||||
with:
|
||||
files: ./coverage.out
|
||||
fail_ci_if_error: true
|
||||
|
@ -67,9 +67,9 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
|
||||
uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2
|
||||
with:
|
||||
go-version-file: go.mod
|
||||
cache-dependency-path: go.sum
|
||||
|
@ -86,14 +86,14 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
|
||||
uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2
|
||||
with:
|
||||
go-version-file: go.mod
|
||||
cache-dependency-path: go.sum
|
||||
- name: Install ko
|
||||
uses: ko-build/setup-ko@ace48d793556083a76f1e3e6068850c1f4a369aa #v0.6
|
||||
uses: ko-build/setup-ko@3aebd0597dc1e9d1a26bcfdb7cbeb19c131d3037 #v0.7
|
||||
- name: Create test cluster
|
||||
run: |
|
||||
set -e
|
||||
|
@ -102,12 +102,3 @@ jobs:
|
|||
run: |
|
||||
set -e
|
||||
make e2e-tests-ko
|
||||
|
||||
required:
|
||||
needs:
|
||||
- unit-tests
|
||||
- e2e-tests
|
||||
- e2e-test-ko
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: echo "Required jobs success!"
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
.cache/
|
||||
.gopath/
|
||||
.temp/
|
||||
.tools/
|
||||
.venv/
|
||||
chainsaw
|
||||
coverage.out
|
||||
website/site
|
||||
|
|
|
@ -41,8 +41,10 @@ linters:
|
|||
|
||||
run:
|
||||
timeout: 15m
|
||||
skip-files:
|
||||
|
||||
output:
|
||||
sort-results: true
|
||||
|
||||
issues:
|
||||
exclude-files:
|
||||
- ".+\\.generated.go"
|
||||
output:
|
||||
format: colored-line-number
|
||||
sort-results: true
|
|
@ -1,3 +1,5 @@
|
|||
version: 2
|
||||
|
||||
before:
|
||||
hooks:
|
||||
- go mod tidy
|
||||
|
@ -15,6 +17,30 @@ builds:
|
|||
- -trimpath
|
||||
ldflags:
|
||||
- -s -w -X github.com/kyverno/chainsaw/pkg/version.BuildVersion={{ .Version }}
|
||||
- id: s390x
|
||||
env:
|
||||
- CGO_ENABLED=0
|
||||
goos:
|
||||
- linux
|
||||
goarch:
|
||||
- s390x
|
||||
binary: chainsaw
|
||||
flags:
|
||||
- -trimpath
|
||||
ldflags:
|
||||
- -s -w -X github.com/kyverno/chainsaw/pkg/version.BuildVersion={{ .Version }}
|
||||
- id: ppc64le
|
||||
env:
|
||||
- CGO_ENABLED=0
|
||||
goos:
|
||||
- linux
|
||||
goarch:
|
||||
- ppc64le
|
||||
binary: chainsaw
|
||||
flags:
|
||||
- -trimpath
|
||||
ldflags:
|
||||
- -s -w -X github.com/kyverno/chainsaw/pkg/version.BuildVersion={{ .Version }}
|
||||
|
||||
kos:
|
||||
- build: chainsaw
|
||||
|
@ -82,7 +108,7 @@ sboms:
|
|||
artifacts: source
|
||||
|
||||
snapshot:
|
||||
name_template: '{{ incpatch .Version }}-next'
|
||||
version_template: '{{ incpatch .Version }}-next'
|
||||
|
||||
release:
|
||||
prerelease: auto
|
||||
|
|
|
@ -3,30 +3,21 @@
|
|||
Release notes for `TODO`.
|
||||
|
||||
<!--
|
||||
## ‼️ Breaking changes ‼️
|
||||
|
||||
## 💫 New features 💫
|
||||
|
||||
## ✨ UI changes ✨
|
||||
|
||||
## ⭐ Examples ⭐
|
||||
|
||||
## ⛵ Tutorials ⛵
|
||||
|
||||
## 📚 Docs 📚
|
||||
|
||||
## 🎸 Misc 🎸
|
||||
-->
|
||||
|
||||
## ‼️ Breaking changes ‼️
|
||||
|
||||
- Deprecated `TestStep` resource support was removed as well as the related command `chainsaw migrate tests`
|
||||
|
||||
## 💫 New features 💫
|
||||
|
||||
- Added support to wait with `jsonpath` conditions
|
||||
|
||||
## 🔧 Fixes 🔧
|
||||
|
||||
- Fixed issue with `update` operation failing because resource version not set correctly
|
||||
- Fixed `wait` operation timeout passing the timeout value to the underlying `kubectl` command
|
||||
- Fixed `wait` operation condition incorrectly formatted with quotes
|
||||
- Fixed issue reading files from embedded file systems on windows
|
||||
|
||||
## 📚 Docs 📚
|
||||
|
||||
- Added missing cluster doc
|
||||
- Fixed default report name not set correctly
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
# Release notes
|
||||
|
||||
Release notes for `v0.2.0`.
|
||||
|
||||
## ‼️ Breaking changes ‼️
|
||||
|
||||
- Deprecated `TestStep` resource support was removed as well as the related command `chainsaw migrate tests`
|
||||
|
||||
## 💫 New features 💫
|
||||
|
||||
- Added support to wait with `jsonpath` conditions
|
||||
- Introduced `v1alpha2` version for configuration, both `v1alpha1` and `v1alpha2` are supported with a conversion system
|
||||
- Rewrote quick-start guide leveraging chainsaw capabilities using relevant usecases
|
||||
|
||||
## 🔧 Fixes 🔧
|
||||
|
||||
- Fixed issue with `update` operation failing because resource version not set correctly
|
||||
- Fixed `wait` operation timeout passing the timeout value to the underlying `kubectl` command
|
||||
- Fixed `wait` operation condition incorrectly formatted with quotes
|
||||
- Fixed issue reading files from embedded file systems on Windows
|
||||
- Fixed incorrect JUnit report format
|
||||
|
||||
## 🎸 Misc 🎸
|
||||
|
||||
- Switched a release branch worflow
|
||||
|
||||
## 📚 Docs 📚
|
||||
|
||||
- Added missing cluster doc
|
|
@ -0,0 +1,18 @@
|
|||
# Release notes
|
||||
|
||||
Release notes for `v0.2.1`.
|
||||
|
||||
## ‼️ Breaking changes ‼️
|
||||
|
||||
- Resource templating is now enabled by default
|
||||
|
||||
## 💫 New features 💫
|
||||
|
||||
- Added `--pause-on-failure` flag to pause when a test failure happens (to ease troubleshooting)
|
||||
- Improved cleanup management logic, alternating `catch`, `finally` and `@cleanup` per step
|
||||
- Added support for registering clusters dynamically, useful when a cluster is created in a test step
|
||||
|
||||
## 🔧 Fixes 🔧
|
||||
|
||||
- Fixed issue with cluster incorrectly registered
|
||||
- Force background deletion propagation policy (useful when testing unmanaged `Job`)
|
|
@ -0,0 +1,25 @@
|
|||
# Release notes
|
||||
|
||||
Release notes for `v0.2.2`.
|
||||
|
||||
## ‼️ Breaking changes ‼️
|
||||
|
||||
- `finally` block now executes when the step terminates. It was supposed to work like this from the beginning but was not properly working. The `cleanup` block was introduced to execute operations when a test terminates instead.
|
||||
|
||||
## 💫 New features 💫
|
||||
|
||||
- Added cleanup handlers support to register custom cleanup operations to run when a test terminates
|
||||
|
||||
## 🔧 Fixes 🔧
|
||||
|
||||
- Use `namespaceTemplate` from configuration if provided
|
||||
|
||||
## 📚 Docs 📚
|
||||
|
||||
- Improved home page
|
||||
- Added scroll to top button
|
||||
- Improved navigation bar
|
||||
- Fixed dark/light color schemes and added system preference support
|
||||
- Added links to Slack and X/Twitter links in the footer
|
||||
- Removed the blog
|
||||
- Rewrote most of the Getting Started pages
|
|
@ -0,0 +1,28 @@
|
|||
# Release notes
|
||||
|
||||
Release notes for `v0.2.3`.
|
||||
|
||||
## ‼️ Breaking changes ‼️
|
||||
|
||||
- `catch` block in v1alpha2 configuration was moved in `error.catch`
|
||||
|
||||
## 💫 New features 💫
|
||||
|
||||
- Added `cleanup` validation logic
|
||||
- Added deletion propagation policy support at the configuration, test and step levels
|
||||
|
||||
## 🔧 Fixes 🔧
|
||||
|
||||
- Added `cleanup` support to generated test catalog
|
||||
|
||||
## 📚 Docs 📚
|
||||
|
||||
- Documentation sections have been completely restructured for better clarity and maintenance
|
||||
- Tons of documentation improvements
|
||||
- Configuration examples in the documentation were updated to `v1alpha2`
|
||||
- Added built-in bindings reference documentation
|
||||
- Links to easily navigate from one section to another were added to the home page
|
||||
|
||||
## 🎸 Misc 🎸
|
||||
|
||||
- Social cards are now enabled and configured for all social networks/apps
|
|
@ -0,0 +1,27 @@
|
|||
# Release notes
|
||||
|
||||
Release notes for `v0.2.4`.
|
||||
|
||||
## ‼️ Breaking changes ‼️
|
||||
|
||||
- Directly specifying resource name was dropped, only `apiVersion` / `kind` is supported now
|
||||
|
||||
## 💫 New features 💫
|
||||
|
||||
- Added test metadata built-in binding
|
||||
- Added file support to `delete` operation
|
||||
- Added `--remarshal` flag to improve anchors support in test resources
|
||||
- Added support for `describe`, `events`, `get` and `podLogs` operations in try blocks
|
||||
|
||||
## 🔧 Fixes 🔧
|
||||
|
||||
- Fixed incorrect path reported when validation failed for a patch operation
|
||||
- Improved the way default values for configuration options are managed in configuration v1alpha2
|
||||
|
||||
## 📚 Docs 📚
|
||||
|
||||
- Removed code markers on titles in API reference documentation
|
||||
|
||||
## 🎸 Misc 🎸
|
||||
|
||||
- Bumped kyverno-json to v0.0.3
|
|
@ -0,0 +1,15 @@
|
|||
# Release notes
|
||||
|
||||
Release notes for `v0.2.5`.
|
||||
|
||||
## 💫 New features 💫
|
||||
|
||||
- Add test scenarios support
|
||||
|
||||
## 🔧 Fixes 🔧
|
||||
|
||||
- Fixed a potential issue with configuration defaults and marshaling
|
||||
|
||||
## 🎸 Misc 🎸
|
||||
|
||||
- Improved all Python-based build operations
|
|
@ -0,0 +1,9 @@
|
|||
# Release notes
|
||||
|
||||
Release notes for `v0.2.6`.
|
||||
|
||||
## 💫 New features 💫
|
||||
|
||||
- Added a `proxy` action to allow HTTP calls to in-cluster services and pods
|
||||
- Added `as_string` JMESPath function to convert types based on strings to bare strings
|
||||
- Added `x_metrics_decode` JMESPath function to decode Prometheus metrics
|
|
@ -0,0 +1,18 @@
|
|||
# Release notes
|
||||
|
||||
Release notes for `v0.2.7`.
|
||||
|
||||
## 💫 New features 💫
|
||||
|
||||
- Added initial `TestTemplate` support to allow defining steps in separate files and reusing them across tests
|
||||
- Replaced programmatic validation with schema-based validation
|
||||
- Better generated JSON schemas based on OpenAPI v3 instead of v2
|
||||
|
||||
## 🔧 Fixes 🔧
|
||||
|
||||
- Fixed incorrect `null` vs empty object comparison in assertion operations
|
||||
|
||||
## 📚 Docs 📚
|
||||
|
||||
- Added detailed community pages to the website website
|
||||
- Added a CODE_OF_CONDUCT.md file in the repo
|
|
@ -0,0 +1,21 @@
|
|||
# Release notes
|
||||
|
||||
Release notes for `v0.2.8`.
|
||||
|
||||
## 💫 New features 💫
|
||||
|
||||
- Added `chainsaw renovate config` to upgrade configuration manifests to `v1alpha2`
|
||||
- Changed `cluster` in test step and actions to a pointer
|
||||
- `null` means inherit the current cluster
|
||||
- an empty string means the default cluster
|
||||
- Made default timeouts part of the schemas
|
||||
- Added support to fail fast at the test level (test will be skipped if a previous error was already reported)
|
||||
- Delay operation loading until operation execution
|
||||
- Generate strict JSON schemas
|
||||
|
||||
## 🔧 Fixes 🔧
|
||||
|
||||
- Fixed incorrect bindings when operations are run against different clusters
|
||||
- Fixed operation info built-in bindings not registered before other bindings
|
||||
- Fixed incorrect cluster client used when applying the test namespace to resources
|
||||
- Detect accessing nodes not present in the payload when traversing an assertion tree
|
|
@ -0,0 +1,19 @@
|
|||
# Release notes
|
||||
|
||||
Release notes for `v0.2.9`.
|
||||
|
||||
## 💫 New features 💫
|
||||
|
||||
- Added support for templating filenames used in operations
|
||||
- Added `ppc64le` and `s390x` binaries in release artifacts
|
||||
- Added support for Kubernetes 1.31
|
||||
- Added server side validation to validate the submitted resource
|
||||
- Added support for overriding the working directory in `command` and `script` operations
|
||||
- Compile string expressions at loading time
|
||||
- Made json path value optional in `wait` operation
|
||||
- Improved logging with `begin`, `end` and `warning` statuses
|
||||
- Added golang 1.23 support
|
||||
|
||||
## 🔧 Fixes 🔧
|
||||
|
||||
- Fixed configuration `v1alpha2` lint command
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -17,8 +17,9 @@ The list of organizations that have publicly shared the usage of Chainsaw:
|
|||
| [Grafana-operator](https://github.com/grafana/grafana-operator) | Chainsaw enabled easier e2e testing and CI debugging after replacing kuttl |
|
||||
| [Opentelemetry-operator](https://github.com/open-telemetry/opentelemetry-operator) | Chainsaw cut down on hacks, improved code-reuse and enhanced test debugging |
|
||||
| [Tempo-operator](https://github.com/grafana/tempo-operator) | Chainsaw cranked up the tempo, making our e2e tests dance to a rhythm of reliability and efficiency |
|
||||
| [Provider-ceph](https://github.com/linode/provider-ceph) | Chainsaw replaced Kuttl and made our e2e tests much more readable and easier to debug. |
|
||||
| [Provider-ceph](https://github.com/linode/provider-ceph) | Chainsaw replaced Kuttl and made our e2e tests much more readable and easier to debug |
|
||||
| [Linode CAPI provider](https://github.com/linode/cluster-api-provider-linode) | Chainsaw replaced Kuttl and made our e2e tests much more readable and easier to debug. 🙏 @eddycharly |
|
||||
| [Linode COSI driver](https://github.com/linode/linode-cosi-driver) | Running all end to end tests for object store driver |
|
||||
|
||||
|
||||
<!-- append the line below to the table
|
||||
|
|
|
@ -0,0 +1,74 @@
|
|||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, gender identity and expression, level of experience,
|
||||
nationality, personal appearance, race, religion, or sexual identity and
|
||||
orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for our community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, or to ban temporarily or permanently any
|
||||
contributor for other behaviors that they deem inappropriate, threatening,
|
||||
offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team privately at hello@squidfunk.com. The
|
||||
project team will review and investigate all complaints, and will respond in a
|
||||
way that it deems appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an
|
||||
incident. Further details of specific enforcement policies may be posted
|
||||
separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
|
||||
|
||||
[homepage]: http://contributor-covenant.org
|
||||
[version]: http://contributor-covenant.org/version/1/4/
|
49
Makefile
49
Makefile
|
@ -29,7 +29,6 @@ KIND_IMAGE ?= kindest/node:v1.29.2
|
|||
|
||||
TOOLS_DIR := $(PWD)/.tools
|
||||
CONTROLLER_GEN := $(TOOLS_DIR)/controller-gen
|
||||
CONTROLLER_GEN_VERSION := v0.12.0
|
||||
REGISTER_GEN := $(TOOLS_DIR)/register-gen
|
||||
DEEPCOPY_GEN := $(TOOLS_DIR)/deepcopy-gen
|
||||
CONVERSION_GEN := $(TOOLS_DIR)/conversion-gen
|
||||
|
@ -51,7 +50,7 @@ COMMA := ,
|
|||
|
||||
$(CONTROLLER_GEN):
|
||||
@echo Install controller-gen... >&2
|
||||
@GOBIN=$(TOOLS_DIR) go install sigs.k8s.io/controller-tools/cmd/controller-gen@$(CONTROLLER_GEN_VERSION)
|
||||
@cd ./hack/controller-gen && GOBIN=$(TOOLS_DIR) go install
|
||||
|
||||
$(REGISTER_GEN):
|
||||
@echo Install register-gen... >&2
|
||||
|
@ -105,7 +104,7 @@ codegen-register: $(PACKAGE_SHIM)
|
|||
codegen-register: $(REGISTER_GEN)
|
||||
@echo Generate registration... >&2
|
||||
@GOPATH=$(GOPATH_SHIM) $(REGISTER_GEN) \
|
||||
--go-header-file=./.hack/boilerplate.go.txt \
|
||||
--go-header-file=./hack/boilerplate.go.txt \
|
||||
--input-dirs=$(INPUT_DIRS)
|
||||
|
||||
.PHONY: codegen-deepcopy
|
||||
|
@ -114,7 +113,7 @@ codegen-deepcopy: $(PACKAGE_SHIM)
|
|||
codegen-deepcopy: $(DEEPCOPY_GEN)
|
||||
@echo Generate deep copy functions... >&2
|
||||
@GOPATH=$(GOPATH_SHIM) $(DEEPCOPY_GEN) \
|
||||
--go-header-file=./.hack/boilerplate.go.txt \
|
||||
--go-header-file=./hack/boilerplate.go.txt \
|
||||
--input-dirs=$(INPUT_DIRS) \
|
||||
--output-file-base=zz_generated.deepcopy
|
||||
|
||||
|
@ -124,16 +123,20 @@ codegen-conversion: $(PACKAGE_SHIM)
|
|||
codegen-conversion: $(CONVERSION_GEN)
|
||||
@echo Generate conversion functions... >&2
|
||||
@GOPATH=$(GOPATH_SHIM) $(CONVERSION_GEN) \
|
||||
--go-header-file=./.hack/boilerplate.go.txt \
|
||||
--go-header-file=./hack/boilerplate.go.txt \
|
||||
--input-dirs=$(INPUT_DIRS) \
|
||||
--output-file-base=zz_generated.conversion
|
||||
|
||||
.PHONY: codegen-crds
|
||||
codegen-crds: ## Generate CRDs
|
||||
codegen-crds: $(PACKAGE_SHIM)
|
||||
codegen-crds: $(CONTROLLER_GEN)
|
||||
codegen-crds: codegen-deepcopy
|
||||
codegen-crds: codegen-register
|
||||
codegen-crds: codegen-conversion
|
||||
@echo Generate crds... >&2
|
||||
@rm -rf $(CRDS_PATH)
|
||||
@$(CONTROLLER_GEN) crd paths=./pkg/apis/... crd:crdVersions=v1 output:dir=$(CRDS_PATH)
|
||||
@GOPATH=$(GOPATH_SHIM) $(CONTROLLER_GEN) paths=./pkg/apis/... crd:crdVersions=v1,ignoreUnexportedFields=true,generateEmbeddedObjectMeta=false output:dir=$(CRDS_PATH)
|
||||
@echo Copy generated CRDs to embed in the CLI... >&2
|
||||
@rm -rf pkg/data/crds && mkdir -p pkg/data/crds
|
||||
@cp $(CRDS_PATH)/* pkg/data/crds
|
||||
|
@ -142,24 +145,24 @@ codegen-crds: $(CONTROLLER_GEN)
|
|||
codegen-cli-docs: ## Generate CLI docs
|
||||
codegen-cli-docs: build
|
||||
@echo Generate cli docs... >&2
|
||||
@rm -rf website/docs/commands && mkdir -p website/docs/commands
|
||||
@rm -rf docs/user/commands && mkdir -p docs/user/commands
|
||||
@./$(CLI_BIN) docs -o website/docs/commands --autogenTag=false
|
||||
@rm -rf website/docs/reference/commands && mkdir -p website/reference/docs/commands
|
||||
@./$(CLI_BIN) docs -o website/docs/reference/commands --autogenTag=false
|
||||
|
||||
.PHONY: codegen-api-docs
|
||||
codegen-api-docs: ## Generate markdown API docs
|
||||
codegen-api-docs: $(REFERENCE_DOCS)
|
||||
codegen-api-docs: codegen-deepcopy
|
||||
codegen-api-docs: codegen-register
|
||||
codegen-api-docs: codegen-conversion
|
||||
@echo Generate api docs... >&2
|
||||
@rm -rf ./website/docs/apis
|
||||
@cd ./website/apis && $(REFERENCE_DOCS) -c config.yaml -f markdown -o ../docs/apis
|
||||
@rm -rf ./website/docs/reference/apis
|
||||
@cd ./website/apis && $(REFERENCE_DOCS) -c config.yaml -f markdown -o ../docs/reference/apis
|
||||
|
||||
.PHONY: codegen-jp-docs
|
||||
codegen-jp-docs: ## Generate JP docs
|
||||
@echo Generate jp docs... >&2
|
||||
@rm -rf ./website/docs/jp && mkdir -p ./website/docs/jp
|
||||
@go run ./website/jp/main.go > ./website/docs/jp/functions.md
|
||||
@mkdir -p ./website/docs/reference/jp
|
||||
@go run ./website/jp/main.go > ./website/docs/reference/jp/functions.md
|
||||
|
||||
.PHONY: codegen-mkdocs
|
||||
codegen-mkdocs: ## Generate mkdocs website
|
||||
|
@ -167,9 +170,7 @@ codegen-mkdocs: codegen-cli-docs
|
|||
codegen-mkdocs: codegen-api-docs
|
||||
codegen-mkdocs: codegen-jp-docs
|
||||
@echo Generate mkdocs website... >&2
|
||||
@$(PIP) install mkdocs
|
||||
@$(PIP) install --upgrade pip
|
||||
@$(PIP) install -U mkdocs-material mkdocs-redirects mkdocs-minify-plugin mkdocs-include-markdown-plugin lunr mkdocs-rss-plugin mike
|
||||
@$(PIP) install -r requirements.txt
|
||||
@mkdocs build -f ./website/mkdocs.yaml
|
||||
|
||||
.PHONY: codegen-schemas-openapi
|
||||
|
@ -194,13 +195,15 @@ codegen-schemas-openapi: $(KIND)
|
|||
codegen-schemas-json: ## Generate json schemas
|
||||
codegen-schemas-json: codegen-schemas-openapi
|
||||
@echo Generate json schema... >&2
|
||||
@$(PIP) install openapi2jsonschema --no-build-isolation
|
||||
@$(PIP) install -r requirements.txt
|
||||
@rm -rf ./.temp/.schemas/json
|
||||
@rm -rf ./.schemas/json
|
||||
@openapi2jsonschema ./.temp/.schemas/openapi/v2/schema.json --kubernetes --stand-alone --expanded -o ./.temp/.schemas/json
|
||||
@openapi2jsonschema .temp/.schemas/openapi/v3/apis/chainsaw.kyverno.io/v1alpha1.json --kubernetes --strict --stand-alone --expanded -o ./.temp/.schemas/json
|
||||
@openapi2jsonschema .temp/.schemas/openapi/v3/apis/chainsaw.kyverno.io/v1alpha2.json --kubernetes --strict --stand-alone --expanded -o ./.temp/.schemas/json
|
||||
@mkdir -p ./.schemas/json
|
||||
@cp ./.temp/.schemas/json/test-chainsaw-*.json ./.schemas/json
|
||||
@cp ./.temp/.schemas/json/configuration-chainsaw-*.json ./.schemas/json
|
||||
@cp ./.temp/.schemas/json/steptemplate-chainsaw-*.json ./.schemas/json
|
||||
@cp ./.temp/.schemas/json/test-chainsaw-*.json ./.schemas/json
|
||||
@echo Copy generated schemas to embed in the CLI... >&2
|
||||
@rm -rf pkg/data/schemas/json && mkdir -p pkg/data/schemas/json
|
||||
@cp ./.schemas/json/* pkg/data/schemas/json
|
||||
|
@ -239,9 +242,7 @@ verify-codegen: codegen
|
|||
.PHONY: mkdocs-serve
|
||||
mkdocs-serve: ## Generate and serve mkdocs website
|
||||
@echo Generate and servemkdocs website... >&2
|
||||
@$(PIP) install mkdocs
|
||||
@$(PIP) install --upgrade pip
|
||||
@$(PIP) install -U mkdocs-material mkdocs-redirects mkdocs-minify-plugin mkdocs-include-markdown-plugin lunr mkdocs-rss-plugin mike
|
||||
@$(PIP) install -r requirements.txt
|
||||
@mkdocs serve -f ./website/mkdocs.yaml
|
||||
|
||||
#########
|
||||
|
@ -297,7 +298,7 @@ tests: $(CLI_BIN)
|
|||
e2e-tests: ## Run e2e tests
|
||||
e2e-tests: $(CLI_BIN)
|
||||
@echo Running e2e tests... >&2
|
||||
@./$(CLI_BIN) test --test-dir ./testdata/e2e --config ./testdata/e2e/config-v1alpha2.yaml --values ./testdata/e2e/values.yaml
|
||||
@./$(CLI_BIN) test --test-dir ./testdata/e2e --remarshal --config ./testdata/e2e/config.yaml --values ./testdata/e2e/values.yaml
|
||||
|
||||
.PHONY: e2e-tests-ko
|
||||
e2e-tests-ko: ## Run e2e tests from a docker container
|
||||
|
@ -311,7 +312,7 @@ e2e-tests-ko: build-ko
|
|||
--user $(id -u):$(id -g) \
|
||||
--name chainsaw \
|
||||
--rm \
|
||||
ko.local/github.com/kyverno/chainsaw:$(KO_TAGS) test /chainsaw --config /chainsaw/config-v1alpha2.yaml --values /chainsaw/values.yaml
|
||||
ko.local/github.com/kyverno/chainsaw:$(KO_TAGS) test /chainsaw --remarshal --config /chainsaw/config.yaml --values /chainsaw/values.yaml --selector !no-ko-test
|
||||
|
||||
########
|
||||
# KIND #
|
||||
|
|
|
@ -39,7 +39,7 @@ Built under the Kyverno umbrella, you can use the Kyverno Chainsaw **Slack chann
|
|||
|
||||
## Getting Started
|
||||
|
||||
Please refer to the [Getting Started](https://kyverno.github.io/chainsaw/latest/intro/) documentation.
|
||||
Please refer to the [Getting Started](https://kyverno.github.io/chainsaw/latest/quick-start/) documentation.
|
||||
|
||||
## RoadMap
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
ignore:
|
||||
- ^pkg/apis/v1alpha1/zz_generated\.deepcopy\.go$
|
||||
- ^pkg/apis/v1alpha1/zz_generated\.register\.go$
|
||||
- ^pkg/testing/.*\.go$
|
||||
- ^.*_test\.go$
|
||||
- 'hack/**/*.go'
|
||||
- 'website/**/*.go'
|
||||
- 'pkg/apis/**/zz_*.go'
|
||||
- 'pkg/testing/*.go'
|
||||
- '**/*_test.go'
|
||||
|
|
162
go.mod
162
go.mod
|
@ -1,84 +1,88 @@
|
|||
module github.com/kyverno/chainsaw
|
||||
|
||||
go 1.21.4
|
||||
go 1.23.0
|
||||
|
||||
require (
|
||||
github.com/Masterminds/sprig v2.22.0+incompatible
|
||||
github.com/dustinkirkland/golang-petname v0.0.0-20231002161417-6a283f1aaaf2
|
||||
github.com/fatih/color v1.16.0
|
||||
github.com/go-logr/logr v1.4.1
|
||||
github.com/dustinkirkland/golang-petname v0.0.0-20240428194347-eebcea082ee0
|
||||
github.com/evanphx/json-patch v5.9.0+incompatible
|
||||
github.com/fatih/color v1.17.0
|
||||
github.com/go-logr/logr v1.4.2
|
||||
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
|
||||
github.com/hashicorp/go-getter v1.7.4
|
||||
github.com/jmespath-community/go-jmespath v1.1.2-0.20240117150817-e430401a2172
|
||||
github.com/kudobuilder/kuttl v0.15.0
|
||||
github.com/kyverno/kyverno-json v0.0.3-alpha.2.0.20240418134117-384bc5db5ad7
|
||||
github.com/hashicorp/go-getter v1.7.6
|
||||
github.com/jmespath-community/go-jmespath v1.1.2-0.20240627155901-bdbb290f571e
|
||||
github.com/jstemmer/go-junit-report/v2 v2.1.0
|
||||
github.com/kudobuilder/kuttl v0.19.0
|
||||
github.com/kyverno/kyverno-json v0.0.4-0.20240730143747-aade3d42fc0e
|
||||
github.com/kyverno/pkg/ext v0.0.0-20240418121121-df8add26c55c
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2
|
||||
github.com/spf13/cobra v1.8.0
|
||||
github.com/prometheus/common v0.59.1
|
||||
github.com/spf13/cobra v1.8.1
|
||||
github.com/spf13/pflag v1.0.5
|
||||
github.com/stretchr/testify v1.9.0
|
||||
github.com/xeipuuv/gojsonschema v1.2.0
|
||||
go.uber.org/multierr v1.11.0
|
||||
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225
|
||||
k8s.io/api v0.29.4
|
||||
k8s.io/apimachinery v0.29.4
|
||||
k8s.io/client-go v0.29.4
|
||||
k8s.io/utils v0.0.0-20240102154912-e7106e64919e
|
||||
sigs.k8s.io/controller-runtime v0.17.3
|
||||
sigs.k8s.io/kubectl-validate v0.0.3
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
k8s.io/api v0.31.1
|
||||
k8s.io/apimachinery v0.31.1
|
||||
k8s.io/client-go v0.31.1
|
||||
k8s.io/utils v0.0.0-20240821151609-f90d01438635
|
||||
sigs.k8s.io/controller-runtime v0.19.0
|
||||
sigs.k8s.io/kubectl-validate v0.0.5-0.20240827210056-ce13d95db263
|
||||
sigs.k8s.io/yaml v1.4.0
|
||||
)
|
||||
|
||||
require (
|
||||
cloud.google.com/go v0.112.0 // indirect
|
||||
cloud.google.com/go/compute v1.24.0 // indirect
|
||||
cloud.google.com/go/compute/metadata v0.2.3 // indirect
|
||||
cloud.google.com/go/iam v1.1.6 // indirect
|
||||
cloud.google.com/go/storage v1.38.0 // indirect
|
||||
cloud.google.com/go v0.115.1 // indirect
|
||||
cloud.google.com/go/auth v0.9.1 // indirect
|
||||
cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect
|
||||
cloud.google.com/go/compute/metadata v0.5.0 // indirect
|
||||
cloud.google.com/go/iam v1.2.0 // indirect
|
||||
cloud.google.com/go/storage v1.43.0 // indirect
|
||||
github.com/IGLOU-EU/go-wildcard v1.0.3 // indirect
|
||||
github.com/Masterminds/goutils v1.1.1 // indirect
|
||||
github.com/Masterminds/semver v1.5.0 // indirect
|
||||
github.com/NYTimes/gziphandler v1.1.1 // indirect
|
||||
github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df // indirect
|
||||
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
|
||||
github.com/aquilax/truncate v1.0.0 // indirect
|
||||
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
|
||||
github.com/aws/aws-sdk-go v1.50.20 // indirect
|
||||
github.com/aws/aws-sdk-go v1.55.5 // indirect
|
||||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // 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.2.0 // indirect
|
||||
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||
github.com/coreos/go-semver v0.3.1 // indirect
|
||||
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
||||
github.com/emicklei/go-restful/v3 v3.11.2 // indirect
|
||||
github.com/evanphx/json-patch v5.9.0+incompatible // indirect
|
||||
github.com/emicklei/go-restful/v3 v3.12.1 // indirect
|
||||
github.com/evanphx/json-patch/v5 v5.9.0 // indirect
|
||||
github.com/felixge/httpsnoop v1.0.4 // indirect
|
||||
github.com/fsnotify/fsnotify v1.7.0 // indirect
|
||||
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
|
||||
github.com/go-logr/stdr v1.2.2 // indirect
|
||||
github.com/go-openapi/jsonpointer v0.20.2 // indirect
|
||||
github.com/go-openapi/jsonreference v0.20.4 // indirect
|
||||
github.com/go-openapi/swag v0.22.9 // indirect
|
||||
github.com/go-openapi/jsonpointer v0.21.0 // indirect
|
||||
github.com/go-openapi/jsonreference v0.21.0 // indirect
|
||||
github.com/go-openapi/swag v0.23.0 // indirect
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||
github.com/golang/protobuf v1.5.4 // indirect
|
||||
github.com/google/cel-go v0.17.7 // indirect
|
||||
github.com/google/cel-go v0.20.1 // indirect
|
||||
github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 // indirect
|
||||
github.com/google/go-cmp v0.6.0 // indirect
|
||||
github.com/google/gofuzz v1.2.0 // indirect
|
||||
github.com/google/s2a-go v0.1.7 // indirect
|
||||
github.com/google/s2a-go v0.1.8 // indirect
|
||||
github.com/google/uuid v1.6.0 // indirect
|
||||
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
|
||||
github.com/googleapis/gax-go/v2 v2.12.1 // indirect
|
||||
github.com/googleapis/enterprise-certificate-proxy v0.3.3 // indirect
|
||||
github.com/googleapis/gax-go/v2 v2.13.0 // indirect
|
||||
github.com/gopherjs/gopherjs v1.17.2 // indirect
|
||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c99 // indirect
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect
|
||||
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
||||
github.com/hashicorp/go-safetemp v1.0.0 // indirect
|
||||
github.com/hashicorp/go-version v1.6.0 // indirect
|
||||
github.com/huandu/xstrings v1.4.0 // indirect
|
||||
github.com/hashicorp/go-version v1.7.0 // indirect
|
||||
github.com/huandu/xstrings v1.5.0 // indirect
|
||||
github.com/imdario/mergo v0.3.16 // indirect
|
||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||
github.com/jinzhu/copier v0.4.0 // indirect
|
||||
|
@ -86,7 +90,8 @@ require (
|
|||
github.com/josharian/intern v1.0.0 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/jtolds/gls v4.20.0+incompatible // indirect
|
||||
github.com/klauspost/compress v1.17.6 // indirect
|
||||
github.com/klauspost/compress v1.17.9 // indirect
|
||||
github.com/kylelemons/godebug v1.1.0 // indirect
|
||||
github.com/mailru/easyjson v0.7.7 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
|
@ -97,55 +102,56 @@ require (
|
|||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
||||
github.com/onsi/gomega v1.34.1 // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/prometheus/client_golang v1.18.0 // indirect
|
||||
github.com/prometheus/client_model v0.6.0 // indirect
|
||||
github.com/prometheus/common v0.47.0 // indirect
|
||||
github.com/prometheus/procfs v0.12.0 // indirect
|
||||
github.com/prometheus/client_golang v1.20.2 // indirect
|
||||
github.com/prometheus/client_model v0.6.1 // indirect
|
||||
github.com/prometheus/procfs v0.15.1 // indirect
|
||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||
github.com/stoewer/go-strcase v1.3.0 // indirect
|
||||
github.com/ulikunitz/xz v0.5.11 // indirect
|
||||
github.com/ulikunitz/xz v0.5.12 // indirect
|
||||
github.com/x448/float16 v0.8.4 // indirect
|
||||
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
|
||||
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
|
||||
github.com/zach-klippenstein/goregen v0.0.0-20160303162051-795b5e3961ea // indirect
|
||||
go.etcd.io/etcd/api/v3 v3.5.11 // indirect
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.11 // indirect
|
||||
go.etcd.io/etcd/client/v3 v3.5.11 // indirect
|
||||
go.etcd.io/etcd/api/v3 v3.5.15 // indirect
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.15 // indirect
|
||||
go.etcd.io/etcd/client/v3 v3.5.15 // indirect
|
||||
go.opencensus.io v0.24.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0 // indirect
|
||||
go.opentelemetry.io/otel v1.23.1 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.23.1 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.23.1 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.23.1 // indirect
|
||||
go.opentelemetry.io/otel/sdk v1.23.1 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.23.1 // indirect
|
||||
go.opentelemetry.io/proto/otlp v1.1.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect
|
||||
go.opentelemetry.io/otel v1.29.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.29.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk v1.29.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.29.0 // indirect
|
||||
go.opentelemetry.io/proto/otlp v1.3.1 // indirect
|
||||
go.uber.org/zap v1.27.0 // indirect
|
||||
golang.org/x/crypto v0.21.0 // indirect
|
||||
golang.org/x/net v0.23.0 // indirect
|
||||
golang.org/x/oauth2 v0.17.0 // indirect
|
||||
golang.org/x/sync v0.6.0 // indirect
|
||||
golang.org/x/sys v0.18.0 // indirect
|
||||
golang.org/x/term v0.18.0 // indirect
|
||||
golang.org/x/text v0.14.0 // indirect
|
||||
golang.org/x/time v0.5.0 // indirect
|
||||
google.golang.org/api v0.165.0 // indirect
|
||||
google.golang.org/appengine v1.6.8 // indirect
|
||||
google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240213162025-012b6fc9bca9 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240213162025-012b6fc9bca9 // indirect
|
||||
google.golang.org/grpc v1.61.1 // indirect
|
||||
google.golang.org/protobuf v1.33.0 // indirect
|
||||
golang.org/x/crypto v0.26.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 // indirect
|
||||
golang.org/x/net v0.28.0 // indirect
|
||||
golang.org/x/oauth2 v0.22.0 // indirect
|
||||
golang.org/x/sync v0.8.0 // indirect
|
||||
golang.org/x/sys v0.24.0 // indirect
|
||||
golang.org/x/term v0.23.0 // indirect
|
||||
golang.org/x/text v0.17.0 // indirect
|
||||
golang.org/x/time v0.6.0 // indirect
|
||||
google.golang.org/api v0.194.0 // indirect
|
||||
google.golang.org/genproto v0.0.0-20240827150818-7e3bb234dfed // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed // indirect
|
||||
google.golang.org/grpc v1.65.0 // indirect
|
||||
google.golang.org/protobuf v1.34.2 // indirect
|
||||
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
|
||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
k8s.io/apiextensions-apiserver v0.29.2 // indirect
|
||||
k8s.io/apiserver v0.29.2 // indirect
|
||||
k8s.io/component-base v0.29.2 // indirect
|
||||
k8s.io/klog/v2 v2.120.1 // indirect
|
||||
k8s.io/kube-openapi v0.0.0-20240221221325-2ac9dc51f3f1 // indirect
|
||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0 // indirect
|
||||
k8s.io/apiextensions-apiserver v0.31.0 // indirect
|
||||
k8s.io/apiserver v0.31.0 // indirect
|
||||
k8s.io/component-base v0.31.0 // indirect
|
||||
k8s.io/klog/v2 v2.130.1 // indirect
|
||||
k8s.io/kube-openapi v0.0.0-20240827152857-f7e401e7b4c2 // indirect
|
||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3 // indirect
|
||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
|
||||
)
|
||||
|
|
370
go.sum
370
go.sum
|
@ -30,8 +30,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9
|
|||
cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc=
|
||||
cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU=
|
||||
cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA=
|
||||
cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM=
|
||||
cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4=
|
||||
cloud.google.com/go v0.115.1 h1:Jo0SM9cQnSkYfp44+v+NQXHpcHqlnRJk2qxh6yvxxxQ=
|
||||
cloud.google.com/go v0.115.1/go.mod h1:DuujITeaufu3gL68/lOFIirVNJwQeyf5UXyi+Wbgknc=
|
||||
cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw=
|
||||
cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY=
|
||||
cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI=
|
||||
|
@ -46,6 +46,10 @@ cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjby
|
|||
cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY=
|
||||
cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw=
|
||||
cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI=
|
||||
cloud.google.com/go/auth v0.9.1 h1:+pMtLEV2k0AXKvs/tGZojuj6QaioxfUjOpMsG5Gtx+w=
|
||||
cloud.google.com/go/auth v0.9.1/go.mod h1:Sw8ocT5mhhXxFklyhT12Eiy0ed6tTrPMCJjSI8KhYLk=
|
||||
cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY=
|
||||
cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc=
|
||||
cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0=
|
||||
cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8=
|
||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
||||
|
@ -68,10 +72,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz
|
|||
cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU=
|
||||
cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U=
|
||||
cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU=
|
||||
cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg=
|
||||
cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40=
|
||||
cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
|
||||
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
|
||||
cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY=
|
||||
cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY=
|
||||
cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I=
|
||||
cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4=
|
||||
cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0=
|
||||
|
@ -109,12 +111,14 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97
|
|||
cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc=
|
||||
cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY=
|
||||
cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc=
|
||||
cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc=
|
||||
cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI=
|
||||
cloud.google.com/go/iam v1.2.0 h1:kZKMKVNk/IsSSc/udOb83K0hL/Yh/Gcqpz+oAkoIFN8=
|
||||
cloud.google.com/go/iam v1.2.0/go.mod h1:zITGuWgsLZxd8OwAlX+eMFgZDXzBm7icj1PVTYG766Q=
|
||||
cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic=
|
||||
cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI=
|
||||
cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8=
|
||||
cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08=
|
||||
cloud.google.com/go/longrunning v0.6.0 h1:mM1ZmaNsQsnb+5n1DNPeL0KwQd9jQRqSqSDEkBZr+aI=
|
||||
cloud.google.com/go/longrunning v0.6.0/go.mod h1:uHzSZqW89h7/pasCWNYdUpwGz3PcVWhrWupreVPYLts=
|
||||
cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4=
|
||||
cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w=
|
||||
cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE=
|
||||
|
@ -171,8 +175,8 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9
|
|||
cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y=
|
||||
cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc=
|
||||
cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s=
|
||||
cloud.google.com/go/storage v1.38.0 h1:Az68ZRGlnNTpIBbLjSMIV2BDcwwXYlRlQzis0llkpJg=
|
||||
cloud.google.com/go/storage v1.38.0/go.mod h1:tlUADB0mAb9BgYls9lq+8MGkfzOXuLrnHXlpHmvFJoY=
|
||||
cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs=
|
||||
cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0=
|
||||
cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw=
|
||||
cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g=
|
||||
cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU=
|
||||
|
@ -199,15 +203,15 @@ github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cq
|
|||
github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
|
||||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
||||
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
|
||||
github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df h1:7RFfzj4SSt6nnvCPbCqijJi1nWCd+TqAT3bYCStRC18=
|
||||
github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM=
|
||||
github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ=
|
||||
github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw=
|
||||
github.com/aquilax/truncate v1.0.0 h1:UgIGS8U/aZ4JyOJ2h3xcF5cSQ06+gGBnjxH2RUHJe0U=
|
||||
github.com/aquilax/truncate v1.0.0/go.mod h1:BeMESIDMlvlS3bmg4BVvBbbZUNwWtS8uzYPAKXwwhLw=
|
||||
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so=
|
||||
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
|
||||
github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
|
||||
github.com/aws/aws-sdk-go v1.50.20 h1:xfAnSDVf/azIWTVQXQODp89bubvCS85r70O3nuQ4dnE=
|
||||
github.com/aws/aws-sdk-go v1.50.20/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
|
||||
github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU=
|
||||
github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
|
||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||
|
@ -215,13 +219,13 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1U
|
|||
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4=
|
||||
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
|
||||
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
|
||||
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
|
||||
github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
||||
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
|
||||
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
|
||||
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
||||
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s=
|
||||
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
||||
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
|
||||
|
@ -236,24 +240,22 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH
|
|||
github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/cncf/xds/go v0.0.0-20231109132714-523115ebc101 h1:7To3pQ+pZo0i3dsWEbinPNFs5gPSBOsJtx3wTT94VBY=
|
||||
github.com/cncf/xds/go v0.0.0-20231109132714-523115ebc101/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4=
|
||||
github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
|
||||
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
|
||||
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
|
||||
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
|
||||
github.com/dustinkirkland/golang-petname v0.0.0-20231002161417-6a283f1aaaf2 h1:S6Dco8FtAhEI/qkg/00H6RdEGC+MCy5GPiQ+xweNRFE=
|
||||
github.com/dustinkirkland/golang-petname v0.0.0-20231002161417-6a283f1aaaf2/go.mod h1:8AuBTZBRSFqEYBPYULd+NN474/zZBLP+6WeT5S9xlAc=
|
||||
github.com/emicklei/go-restful/v3 v3.11.2 h1:1onLa9DcsMYO9P+CXaL0dStDqQ2EHHXLiz+BtnqkLAU=
|
||||
github.com/emicklei/go-restful/v3 v3.11.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
|
||||
github.com/dustinkirkland/golang-petname v0.0.0-20240428194347-eebcea082ee0 h1:aYo8nnk3ojoQkP5iErif5Xxv0Mo0Ga/FR5+ffl/7+Nk=
|
||||
github.com/dustinkirkland/golang-petname v0.0.0-20240428194347-eebcea082ee0/go.mod h1:8AuBTZBRSFqEYBPYULd+NN474/zZBLP+6WeT5S9xlAc=
|
||||
github.com/emicklei/go-restful/v3 v3.12.1 h1:PJMDIM/ak7btuL8Ex0iYET9hxM3CI2sjZtzpL63nKAU=
|
||||
github.com/emicklei/go-restful/v3 v3.12.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
|
||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||
|
@ -264,38 +266,38 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m
|
|||
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
|
||||
github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA=
|
||||
github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE=
|
||||
github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls=
|
||||
github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||
github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg=
|
||||
github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ=
|
||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
|
||||
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
|
||||
github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4=
|
||||
github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI=
|
||||
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
|
||||
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
||||
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
|
||||
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
|
||||
github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
|
||||
github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
|
||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
|
||||
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
|
||||
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||
github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ=
|
||||
github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg=
|
||||
github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q=
|
||||
github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs=
|
||||
github.com/go-openapi/jsonreference v0.20.4 h1:bKlDxQxQJgwpUSgOENiMPzCTBVuc7vTdXSSgNeAhojU=
|
||||
github.com/go-openapi/jsonreference v0.20.4/go.mod h1:5pZJyJP2MnYCpoeoMAql78cCHauHj0V9Lhc506VOpw4=
|
||||
github.com/go-openapi/swag v0.22.9 h1:XX2DssF+mQKM2DHsbgZK74y/zj4mo9I99+89xUmuZCE=
|
||||
github.com/go-openapi/swag v0.22.9/go.mod h1:3/OXnFfnMAwBD099SwYRk7GD3xOrr1iL7d/XNLXVVwE=
|
||||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
|
||||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
|
||||
github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
|
||||
github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
|
||||
github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=
|
||||
github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4=
|
||||
github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
|
||||
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
|
||||
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
|
||||
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
|
||||
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||
|
@ -340,8 +342,8 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z
|
|||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||
github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU=
|
||||
github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
|
||||
github.com/google/cel-go v0.17.7 h1:6ebJFzu1xO2n7TLtN+UBqShGBhlD85bhvglh5DpcfqQ=
|
||||
github.com/google/cel-go v0.17.7/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY=
|
||||
github.com/google/cel-go v0.20.1 h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84=
|
||||
github.com/google/cel-go v0.20.1/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg=
|
||||
github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 h1:0VpGH+cDhbDtdcweoyCVsF3fhN8kejK6rFe/2FFX2nU=
|
||||
github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49/go.mod h1:BkkQ4L1KS1xMt2aWSPStnn55ChGC0DPOn2FQYj+f25M=
|
||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||
|
@ -371,8 +373,8 @@ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXi
|
|||
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
|
||||
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
|
||||
github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
|
||||
github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw=
|
||||
github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
|
||||
github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc=
|
||||
github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0=
|
||||
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
|
||||
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
|
||||
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||
|
@ -387,11 +389,11 @@ github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLe
|
|||
github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||
github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||
github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5 h1:E/LAvt58di64hlYjx7AsNS6C/ysHWYo+2qPCZKTQhRo=
|
||||
github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
|
||||
github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k=
|
||||
github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo=
|
||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||
github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
|
||||
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
|
||||
github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM=
|
||||
github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA=
|
||||
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
|
||||
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
|
||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
|
@ -401,8 +403,8 @@ github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
|
|||
github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=
|
||||
github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=
|
||||
github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg=
|
||||
github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
|
||||
github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
|
||||
github.com/googleapis/enterprise-certificate-proxy v0.3.3 h1:QRje2j5GZimBzlbhGA2V2QlGNgL8G6e+wGo/+/2bWI0=
|
||||
github.com/googleapis/enterprise-certificate-proxy v0.3.3/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA=
|
||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
||||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
||||
github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=
|
||||
|
@ -412,8 +414,8 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99
|
|||
github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c=
|
||||
github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo=
|
||||
github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY=
|
||||
github.com/googleapis/gax-go/v2 v2.12.1 h1:9F8GV9r9ztXyAi00gsMQHNoF51xPZm8uj1dpYt2ZETM=
|
||||
github.com/googleapis/gax-go/v2 v2.12.1/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc=
|
||||
github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s=
|
||||
github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A=
|
||||
github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4=
|
||||
github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g=
|
||||
github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k=
|
||||
|
@ -425,20 +427,21 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c9
|
|||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c99/go.mod h1:3bDW6wMZJB7tiONtC/1Xpicra6Wp5GgbTbQWCbI5fkc=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I=
|
||||
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
|
||||
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
|
||||
github.com/hashicorp/go-getter v1.7.4 h1:3yQjWuxICvSpYwqSayAdKRFcvBl1y/vogCxczWSmix0=
|
||||
github.com/hashicorp/go-getter v1.7.4/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744=
|
||||
github.com/hashicorp/go-getter v1.7.6 h1:5jHuM+aH373XNtXl9TNTUH5Qd69Trve11tHIrB+6yj4=
|
||||
github.com/hashicorp/go-getter v1.7.6/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744=
|
||||
github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo=
|
||||
github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I=
|
||||
github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
|
||||
github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
||||
github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=
|
||||
github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||
github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU=
|
||||
github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
|
||||
github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI=
|
||||
github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
|
||||
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||
github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
|
||||
|
@ -447,8 +450,8 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2
|
|||
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||
github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8=
|
||||
github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=
|
||||
github.com/jmespath-community/go-jmespath v1.1.2-0.20240117150817-e430401a2172 h1:XQYEhx+bEiWn6eiHFivu4wEHm91FoZ/gCvoLZK6Ze5Y=
|
||||
github.com/jmespath-community/go-jmespath v1.1.2-0.20240117150817-e430401a2172/go.mod h1:j4OeykGPBbhX3rw4AOPGXSmX2/zuWXktm704A4MtHFs=
|
||||
github.com/jmespath-community/go-jmespath v1.1.2-0.20240627155901-bdbb290f571e h1:e9zkuKm+DRAW1xGu90nokWkxOAWhOPYkMNojmTmtvPE=
|
||||
github.com/jmespath-community/go-jmespath v1.1.2-0.20240627155901-bdbb290f571e/go.mod h1:YlGIjNhh2pH+qyifSpVtQQIbI8YUoVytgZyKBVAMVX4=
|
||||
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
|
||||
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
|
||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
|
||||
|
@ -461,13 +464,15 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
|
|||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
|
||||
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
|
||||
github.com/jstemmer/go-junit-report/v2 v2.1.0 h1:X3+hPYlSczH9IMIpSC9CQSZA0L+BipYafciZUWHEmsc=
|
||||
github.com/jstemmer/go-junit-report/v2 v2.1.0/go.mod h1:mgHVr7VUo5Tn8OLVr1cKnLuEy0M92wdRntM99h7RkgQ=
|
||||
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
|
||||
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=
|
||||
github.com/klauspost/compress v1.17.6 h1:60eq2E/jlfwQXtvZEeBUYADs+BwKBWURIY+Gj2eRGjI=
|
||||
github.com/klauspost/compress v1.17.6/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
|
||||
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
|
||||
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||
|
@ -475,10 +480,12 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
|||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/kudobuilder/kuttl v0.15.0 h1:OmCbpY3ebn+myJaatD+IT1AL1OTz34+Cv6ettiXd/hI=
|
||||
github.com/kudobuilder/kuttl v0.15.0/go.mod h1:UtAOt+GE8HQZFveEN8p1fk3j+H1Cp5Fk1eMdQkXPqH0=
|
||||
github.com/kyverno/kyverno-json v0.0.3-alpha.2.0.20240418134117-384bc5db5ad7 h1:09UL+pBN0LHYrv22dBmRKAQ0xBKCdkFMTJc0enyTj1o=
|
||||
github.com/kyverno/kyverno-json v0.0.3-alpha.2.0.20240418134117-384bc5db5ad7/go.mod h1:RwCdE0qkkKmMTgcci23U0Ffntfdbo5tOS7Ht6YLtxlY=
|
||||
github.com/kudobuilder/kuttl v0.19.0 h1:6fJ20R5lqCtY1c5K2UkCZH50kEHMoyuzpz+8+MobvhQ=
|
||||
github.com/kudobuilder/kuttl v0.19.0/go.mod h1:LgyzxMNqEpxev3N7Lu1T6mbo5E1ABiTzpXiekkhxx64=
|
||||
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
|
||||
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
|
||||
github.com/kyverno/kyverno-json v0.0.4-0.20240730143747-aade3d42fc0e h1:gh9iMuJS8yloxo3JIzvgLWZWwy5iRjEkA8/U7rK3iu8=
|
||||
github.com/kyverno/kyverno-json v0.0.4-0.20240730143747-aade3d42fc0e/go.mod h1:3LgZogzltja+Sx0o5CIa7d7+991v8sWXHskU0fWSOsQ=
|
||||
github.com/kyverno/pkg/ext v0.0.0-20240418121121-df8add26c55c h1:lAolpR9H8BwM5lRRvgCQ8JowswyxZRH+fgtIQzHFVCk=
|
||||
github.com/kyverno/pkg/ext v0.0.0-20240418121121-df8add26c55c/go.mod h1:02vxM0GNXz9+B/i6+rMfWAIwibUuAH+qFsd73IFskgQ=
|
||||
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
|
||||
|
@ -507,33 +514,33 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
|
|||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||
github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY=
|
||||
github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM=
|
||||
github.com/onsi/gomega v1.31.1 h1:KYppCUK+bUgAZwHOu7EXVBKyQA6ILvOESHkn/tgoqvo=
|
||||
github.com/onsi/gomega v1.31.1/go.mod h1:y40C95dwAD1Nz36SsEnxvfFe8FFfNxzI5eJ0EYGyAy0=
|
||||
github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA=
|
||||
github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To=
|
||||
github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k=
|
||||
github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM=
|
||||
github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk=
|
||||
github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA=
|
||||
github.com/prometheus/client_golang v1.20.2 h1:5ctymQzZlyOON1666svgwn3s6IKWgfbjsejTMiXIyjg=
|
||||
github.com/prometheus/client_golang v1.20.2/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
|
||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/client_model v0.6.0 h1:k1v3CzpSRUTrKMppY35TLwPvxHqBu0bYgxZzqGIgaos=
|
||||
github.com/prometheus/client_model v0.6.0/go.mod h1:NTQHnmxFpouOD0DpvP4XujX3CdOAGQPoaGhyTchlyt8=
|
||||
github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
|
||||
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
|
||||
github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
|
||||
github.com/prometheus/common v0.47.0 h1:p5Cz0FNHo7SnWOmWmoRozVcjEp0bIVU8cV7OShpjL1k=
|
||||
github.com/prometheus/common v0.47.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
|
||||
github.com/prometheus/common v0.59.1 h1:LXb1quJHWm1P6wq/U824uxYi4Sg0oGvNeUm1z5dJoX0=
|
||||
github.com/prometheus/common v0.59.1/go.mod h1:GpWM7dewqmVYcd7SmRaiWVe9SSqjf0UrwnYnpEZNuT0=
|
||||
github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
|
||||
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
|
||||
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
|
||||
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
|
||||
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
|
||||
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
|
||||
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
|
||||
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
|
||||
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
|
||||
|
@ -545,8 +552,8 @@ github.com/smartystreets/goconvey v1.8.1/go.mod h1:+/u4qLyY6x1jReYOp7GOM2FSt8aP9
|
|||
github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js=
|
||||
github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0=
|
||||
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
||||
github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
|
||||
github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
|
||||
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
|
||||
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/stoewer/go-strcase v1.3.0 h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs=
|
||||
|
@ -567,8 +574,10 @@ github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8
|
|||
github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 h1:6fotK7otjonDflCTK0BCfls4SPy3NcCVb5dqqmbRknE=
|
||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75/go.mod h1:KO6IkyS8Y3j8OdNO85qEYBsRPuteD+YciPomcXdrMnk=
|
||||
github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
|
||||
github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8=
|
||||
github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
|
||||
github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc=
|
||||
github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
|
||||
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
|
||||
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
|
||||
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
|
||||
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
|
||||
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
|
||||
|
@ -586,22 +595,22 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1
|
|||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
github.com/zach-klippenstein/goregen v0.0.0-20160303162051-795b5e3961ea h1:CyhwejzVGvZ3Q2PSbQ4NRRYn+ZWv5eS1vlaEusT+bAI=
|
||||
github.com/zach-klippenstein/goregen v0.0.0-20160303162051-795b5e3961ea/go.mod h1:eNr558nEUjP8acGw8FFjTeWvSgU1stO7FAO6eknhHe4=
|
||||
go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA=
|
||||
go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
|
||||
go.etcd.io/etcd/api/v3 v3.5.11 h1:B54KwXbWDHyD3XYAwprxNzTe7vlhR69LuBgZnMVvS7E=
|
||||
go.etcd.io/etcd/api/v3 v3.5.11/go.mod h1:Ot+o0SWSyT6uHhA56al1oCED0JImsRiU9Dc26+C2a+4=
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.11 h1:bT2xVspdiCj2910T0V+/KHcVKjkUrCZVtk8J2JF2z1A=
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.11/go.mod h1:seTzl2d9APP8R5Y2hFL3NVlD6qC/dOT+3kvrqPyTas4=
|
||||
go.etcd.io/etcd/client/v2 v2.305.10 h1:MrmRktzv/XF8CvtQt+P6wLUlURaNpSDJHFZhe//2QE4=
|
||||
go.etcd.io/etcd/client/v2 v2.305.10/go.mod h1:m3CKZi69HzilhVqtPDcjhSGp+kA1OmbNn0qamH80xjA=
|
||||
go.etcd.io/etcd/client/v3 v3.5.11 h1:ajWtgoNSZJ1gmS8k+icvPtqsqEav+iUorF7b0qozgUU=
|
||||
go.etcd.io/etcd/client/v3 v3.5.11/go.mod h1:a6xQUEqFJ8vztO1agJh/KQKOMfFI8og52ZconzcDJwE=
|
||||
go.etcd.io/etcd/pkg/v3 v3.5.10 h1:WPR8K0e9kWl1gAhB5A7gEa5ZBTNkT9NdNWrR8Qpo1CM=
|
||||
go.etcd.io/etcd/pkg/v3 v3.5.10/go.mod h1:TKTuCKKcF1zxmfKWDkfz5qqYaE3JncKKZPFf8c1nFUs=
|
||||
go.etcd.io/etcd/raft/v3 v3.5.10 h1:cgNAYe7xrsrn/5kXMSaH8kM/Ky8mAdMqGOxyYwpP0LA=
|
||||
go.etcd.io/etcd/raft/v3 v3.5.10/go.mod h1:odD6kr8XQXTy9oQnyMPBOr0TVe+gT0neQhElQ6jbGRc=
|
||||
go.etcd.io/etcd/server/v3 v3.5.10 h1:4NOGyOwD5sUZ22PiWYKmfxqoeh72z6EhYjNosKGLmZg=
|
||||
go.etcd.io/etcd/server/v3 v3.5.10/go.mod h1:gBplPHfs6YI0L+RpGkTQO7buDbHv5HJGG/Bst0/zIPo=
|
||||
go.etcd.io/bbolt v1.3.9 h1:8x7aARPEXiXbHmtUwAIv7eV2fQFHrLLavdiJ3uzJXoI=
|
||||
go.etcd.io/bbolt v1.3.9/go.mod h1:zaO32+Ti0PK1ivdPtgMESzuzL2VPoIG1PCQNvOdo/dE=
|
||||
go.etcd.io/etcd/api/v3 v3.5.15 h1:3KpLJir1ZEBrYuV2v+Twaa/e2MdDCEZ/70H+lzEiwsk=
|
||||
go.etcd.io/etcd/api/v3 v3.5.15/go.mod h1:N9EhGzXq58WuMllgH9ZvnEr7SI9pS0k0+DHZezGp7jM=
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.15 h1:fo0HpWz/KlHGMCC+YejpiCmyWDEuIpnTDzpJLB5fWlA=
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.15/go.mod h1:mXDI4NAOwEiszrHCb0aqfAYNCrZP4e9hRca3d1YK8EU=
|
||||
go.etcd.io/etcd/client/v2 v2.305.13 h1:RWfV1SX5jTU0lbCvpVQe3iPQeAHETWdOTb6pxhd77C8=
|
||||
go.etcd.io/etcd/client/v2 v2.305.13/go.mod h1:iQnL7fepbiomdXMb3om1rHq96htNNGv2sJkEcZGDRRg=
|
||||
go.etcd.io/etcd/client/v3 v3.5.15 h1:23M0eY4Fd/inNv1ZfU3AxrbbOdW79r9V9Rl62Nm6ip4=
|
||||
go.etcd.io/etcd/client/v3 v3.5.15/go.mod h1:CLSJxrYjvLtHsrPKsy7LmZEE+DK2ktfd2bN4RhBMwlU=
|
||||
go.etcd.io/etcd/pkg/v3 v3.5.13 h1:st9bDWNsKkBNpP4PR1MvM/9NqUPfvYZx/YXegsYEH8M=
|
||||
go.etcd.io/etcd/pkg/v3 v3.5.13/go.mod h1:N+4PLrp7agI/Viy+dUYpX7iRtSPvKq+w8Y14d1vX+m0=
|
||||
go.etcd.io/etcd/raft/v3 v3.5.13 h1:7r/NKAOups1YnKcfro2RvGGo2PTuizF/xh26Z2CTAzA=
|
||||
go.etcd.io/etcd/raft/v3 v3.5.13/go.mod h1:uUFibGLn2Ksm2URMxN1fICGhk8Wu96EfDQyuLhAcAmw=
|
||||
go.etcd.io/etcd/server/v3 v3.5.13 h1:V6KG+yMfMSqWt+lGnhFpP5z5dRUj1BDRJ5k1fQ9DFok=
|
||||
go.etcd.io/etcd/server/v3 v3.5.13/go.mod h1:K/8nbsGupHqmr5MkgaZpLlH1QdX1pcNQLAkODy44XcQ=
|
||||
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
||||
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
|
||||
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||
|
@ -611,25 +620,25 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
|
|||
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
|
||||
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
|
||||
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0 h1:P+/g8GpuJGYbOp2tAdKrIPUX9JO02q8Q0YNlHolpibA=
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0/go.mod h1:tIKj3DbO8N9Y2xo52og3irLsPI4GW02DSMtrVgNMgxg=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0 h1:doUP+ExOpH3spVTLS0FcWGLnQrPct/hD/bCPbDRUEAU=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0/go.mod h1:rdENBZMT2OE6Ne/KLwpiXudnAsbdrdBaqBvTN8M8BgA=
|
||||
go.opentelemetry.io/otel v1.23.1 h1:Za4UzOqJYS+MUczKI320AtqZHZb7EqxO00jAHE0jmQY=
|
||||
go.opentelemetry.io/otel v1.23.1/go.mod h1:Td0134eafDLcTS4y+zQ26GE8u3dEuRBiBCTUIRHaikA=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.23.1 h1:o8iWeVFa1BcLtVEV0LzrCxV2/55tB3xLxADr6Kyoey4=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.23.1/go.mod h1:SEVfdK4IoBnbT2FXNM/k8yC08MrfbhWk3U4ljM8B3HE=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.23.1 h1:p3A5+f5l9e/kuEBwLOrnpkIDHQFlHmbiVxMURWRK6gQ=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.23.1/go.mod h1:OClrnXUjBqQbInvjJFjYSnMxBSCXBF8r3b34WqjiIrQ=
|
||||
go.opentelemetry.io/otel/metric v1.23.1 h1:PQJmqJ9u2QaJLBOELl1cxIdPcpbwzbkjfEyelTl2rlo=
|
||||
go.opentelemetry.io/otel/metric v1.23.1/go.mod h1:mpG2QPlAfnK8yNhNJAxDZruU9Y1/HubbC+KyH8FaCWI=
|
||||
go.opentelemetry.io/otel/sdk v1.23.1 h1:O7JmZw0h76if63LQdsBMKQDWNb5oEcOThG9IrxscV+E=
|
||||
go.opentelemetry.io/otel/sdk v1.23.1/go.mod h1:LzdEVR5am1uKOOwfBWFef2DCi1nu3SA8XQxx2IerWFk=
|
||||
go.opentelemetry.io/otel/trace v1.23.1 h1:4LrmmEd8AU2rFvU1zegmvqW7+kWarxtNOPyeL6HmYY8=
|
||||
go.opentelemetry.io/otel/trace v1.23.1/go.mod h1:4IpnpJFwr1mo/6HL8XIPJaE9y0+u1KcVmuW7dwFSVrI=
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc=
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8=
|
||||
go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw=
|
||||
go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 h1:dIIDULZJpgdiHz5tXrTgKIMLkus6jEFa7x5SOKcyR7E=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0/go.mod h1:jlRVBe7+Z1wyxFSUs48L6OBQZ5JwH2Hg/Vbl+t9rAgI=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0 h1:nSiV3s7wiCam610XcLbYOmMfJxB9gO4uK3Xgv5gmTgg=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0/go.mod h1:hKn/e/Nmd19/x1gvIHwtOwVWM+VhuITSWip3JUDghj0=
|
||||
go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc=
|
||||
go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8=
|
||||
go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo=
|
||||
go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok=
|
||||
go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4=
|
||||
go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ=
|
||||
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
|
||||
go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
|
||||
go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
|
||||
go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0=
|
||||
go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8=
|
||||
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
||||
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
|
||||
|
@ -642,8 +651,8 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
|
|||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
|
||||
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
|
||||
golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
|
||||
golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||
|
@ -654,8 +663,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
|
|||
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
|
||||
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
|
||||
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
|
||||
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 h1:LfspQV/FYTatPTr/3HzIcmiUFH7PGP+OQ6mgDYo3yuQ=
|
||||
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc=
|
||||
golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 h1:kx6Ds3MlpiUHKj7syVnbp57++8WpuKPcR5yjLBjvLEA=
|
||||
golang.org/x/exp v0.0.0-20240823005443-9b4947da3948/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ=
|
||||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
||||
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
|
@ -730,8 +739,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
|
|||
golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
|
||||
golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
|
||||
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
|
||||
golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
|
||||
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
|
||||
golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE=
|
||||
golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
|
@ -757,8 +766,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri
|
|||
golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
|
||||
golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
|
||||
golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A=
|
||||
golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ=
|
||||
golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA=
|
||||
golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA=
|
||||
golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
|
@ -773,8 +782,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ
|
|||
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
|
||||
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
|
||||
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
|
@ -840,13 +849,13 @@ golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
|
||||
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
|
||||
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
|
||||
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
|
||||
golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU=
|
||||
golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk=
|
||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
|
@ -856,15 +865,14 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
|||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
||||
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
|
||||
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
|
||||
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||
golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
|
||||
golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
|
@ -920,8 +928,8 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
|||
golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ=
|
||||
golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg=
|
||||
golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24=
|
||||
golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
|
@ -930,8 +938,6 @@ golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8T
|
|||
golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
|
||||
golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
|
||||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
|
||||
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=
|
||||
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
|
||||
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
|
||||
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
|
||||
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
|
||||
|
@ -980,8 +986,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ
|
|||
google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=
|
||||
google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=
|
||||
google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70=
|
||||
google.golang.org/api v0.165.0 h1:zd5d4JIIIaYYsfVy1HzoXYZ9rWCSBxxAglbczzo7Bgc=
|
||||
google.golang.org/api v0.165.0/go.mod h1:2OatzO7ZDQsoS7IFf3rvsE17/TldiU3F/zxFHeqUB5o=
|
||||
google.golang.org/api v0.194.0 h1:dztZKG9HgtIpbI35FhfuSNR/zmaMVdxNlntHj1sIS4s=
|
||||
google.golang.org/api v0.194.0/go.mod h1:AgvUFdojGANh3vI+P7EVnxj3AISHllxGCJSFmggmnd0=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
|
@ -989,8 +995,6 @@ google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww
|
|||
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
||||
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
||||
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
||||
google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
|
||||
google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
|
||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||
|
@ -1092,12 +1096,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw
|
|||
google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=
|
||||
google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=
|
||||
google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=
|
||||
google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 h1:9+tzLLstTlPTRyJTh+ah5wIMsBW5c4tQwGTN3thOW9Y=
|
||||
google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240213162025-012b6fc9bca9 h1:4++qSzdWBUy9/2x8L5KZgwZw+mjJZ2yDSCGMVM0YzRs=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:PVreiBMirk8ypES6aw9d4p6iiBNSIfZEBqr3UGoAi2E=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240213162025-012b6fc9bca9 h1:hZB7eLIaYlW9qXRfCq/qDaPdbeY3757uARz5Vvfv+cY=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:YUWgXUFRPfoYK1IHMuxH5K6nPEXSCzIMljnQ59lLRCk=
|
||||
google.golang.org/genproto v0.0.0-20240827150818-7e3bb234dfed h1:4C4dbrVFtfIp3GXJdMX1Sj25mahfn5DywOo65/2ISQ8=
|
||||
google.golang.org/genproto v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:ICjniACoWvcDz8c8bOsHVKuuSGDJy1z5M4G0DM3HzTc=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed h1:3RgNmBoI9MZhsj3QxC+AP/qQhNwpCLOvYDYYsFrhFt0=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:OCdP9MfskevB/rbYvHTsXTtKC+3bHWajPdoKgjcYkfo=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed h1:J6izYgfBXAI3xTKLgxzTmUltdYaLsuBxFCgDHWJ/eXg=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
|
||||
google.golang.org/grpc v1.18.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||
|
@ -1134,8 +1138,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu
|
|||
google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
|
||||
google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
|
||||
google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
|
||||
google.golang.org/grpc v1.61.1 h1:kLAiWrZs7YeDM6MumDe7m3y4aM6wacLzM1Y/wiLP9XY=
|
||||
google.golang.org/grpc v1.61.1/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs=
|
||||
google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc=
|
||||
google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ=
|
||||
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
|
@ -1152,14 +1156,16 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ
|
|||
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
|
||||
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
|
||||
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
|
||||
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
|
||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||
gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
|
||||
gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
|
||||
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
|
||||
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
||||
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
|
||||
|
@ -1182,37 +1188,37 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
|
|||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||
k8s.io/api v0.29.4 h1:WEnF/XdxuCxdG3ayHNRR8yH3cI1B/llkWBma6bq4R3w=
|
||||
k8s.io/api v0.29.4/go.mod h1:DetSv0t4FBTcEpfA84NJV3g9a7+rSzlUHk5ADAYHUv0=
|
||||
k8s.io/apiextensions-apiserver v0.29.2 h1:UK3xB5lOWSnhaCk0RFZ0LUacPZz9RY4wi/yt2Iu+btg=
|
||||
k8s.io/apiextensions-apiserver v0.29.2/go.mod h1:aLfYjpA5p3OwtqNXQFkhJ56TB+spV8Gc4wfMhUA3/b8=
|
||||
k8s.io/apimachinery v0.29.4 h1:RaFdJiDmuKs/8cm1M6Dh1Kvyh59YQFDcFuFTSmXes6Q=
|
||||
k8s.io/apimachinery v0.29.4/go.mod h1:i3FJVwhvSp/6n8Fl4K97PJEP8C+MM+aoDq4+ZJBf70Y=
|
||||
k8s.io/apiserver v0.29.2 h1:+Z9S0dSNr+CjnVXQePG8TcBWHr3Q7BmAr7NraHvsMiQ=
|
||||
k8s.io/apiserver v0.29.2/go.mod h1:B0LieKVoyU7ykQvPFm7XSdIHaCHSzCzQWPFa5bqbeMQ=
|
||||
k8s.io/client-go v0.29.4 h1:79ytIedxVfyXV8rpH3jCBW0u+un0fxHDwX5F9K8dPR8=
|
||||
k8s.io/client-go v0.29.4/go.mod h1:kC1thZQ4zQWYwldsfI088BbK6RkxK+aF5ebV8y9Q4tk=
|
||||
k8s.io/component-base v0.29.2 h1:lpiLyuvPA9yV1aQwGLENYyK7n/8t6l3nn3zAtFTJYe8=
|
||||
k8s.io/component-base v0.29.2/go.mod h1:BfB3SLrefbZXiBfbM+2H1dlat21Uewg/5qtKOl8degM=
|
||||
k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw=
|
||||
k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
|
||||
k8s.io/kms v0.29.2 h1:MDsbp98gSlEQs7K7dqLKNNTwKFQRYYvO4UOlBOjNy6Y=
|
||||
k8s.io/kms v0.29.2/go.mod h1:s/9RC4sYRZ/6Tn6yhNjbfJuZdb8LzlXhdlBnKizeFDo=
|
||||
k8s.io/kube-openapi v0.0.0-20240221221325-2ac9dc51f3f1 h1:rtdnaWfP40MTKv7izH81gkWpZB45pZrwIxyZdPSn1mI=
|
||||
k8s.io/kube-openapi v0.0.0-20240221221325-2ac9dc51f3f1/go.mod h1:Pa1PvrP7ACSkuX6I7KYomY6cmMA0Tx86waBhDUgoKPw=
|
||||
k8s.io/utils v0.0.0-20240102154912-e7106e64919e h1:eQ/4ljkx21sObifjzXwlPKpdGLrCfRziVtos3ofG/sQ=
|
||||
k8s.io/utils v0.0.0-20240102154912-e7106e64919e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
||||
k8s.io/api v0.31.1 h1:Xe1hX/fPW3PXYYv8BlozYqw63ytA92snr96zMW9gWTU=
|
||||
k8s.io/api v0.31.1/go.mod h1:sbN1g6eY6XVLeqNsZGLnI5FwVseTrZX7Fv3O26rhAaI=
|
||||
k8s.io/apiextensions-apiserver v0.31.0 h1:fZgCVhGwsclj3qCw1buVXCV6khjRzKC5eCFt24kyLSk=
|
||||
k8s.io/apiextensions-apiserver v0.31.0/go.mod h1:b9aMDEYaEe5sdK+1T0KU78ApR/5ZVp4i56VacZYEHxk=
|
||||
k8s.io/apimachinery v0.31.1 h1:mhcUBbj7KUjaVhyXILglcVjuS4nYXiwC+KKFBgIVy7U=
|
||||
k8s.io/apimachinery v0.31.1/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo=
|
||||
k8s.io/apiserver v0.31.0 h1:p+2dgJjy+bk+B1Csz+mc2wl5gHwvNkC9QJV+w55LVrY=
|
||||
k8s.io/apiserver v0.31.0/go.mod h1:KI9ox5Yu902iBnnyMmy7ajonhKnkeZYJhTZ/YI+WEMk=
|
||||
k8s.io/client-go v0.31.1 h1:f0ugtWSbWpxHR7sjVpQwuvw9a3ZKLXX0u0itkFXufb0=
|
||||
k8s.io/client-go v0.31.1/go.mod h1:sKI8871MJN2OyeqRlmA4W4KM9KBdBUpDLu/43eGemCg=
|
||||
k8s.io/component-base v0.31.0 h1:/KIzGM5EvPNQcYgwq5NwoQBaOlVFrghoVGr8lG6vNRs=
|
||||
k8s.io/component-base v0.31.0/go.mod h1:TYVuzI1QmN4L5ItVdMSXKvH7/DtvIuas5/mm8YT3rTo=
|
||||
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
|
||||
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
|
||||
k8s.io/kms v0.31.0 h1:KchILPfB1ZE+ka7223mpU5zeFNkmb45jl7RHnlImUaI=
|
||||
k8s.io/kms v0.31.0/go.mod h1:OZKwl1fan3n3N5FFxnW5C4V3ygrah/3YXeJWS3O6+94=
|
||||
k8s.io/kube-openapi v0.0.0-20240827152857-f7e401e7b4c2 h1:GKE9U8BH16uynoxQii0auTjmmmuZ3O0LFMN6S0lPPhI=
|
||||
k8s.io/kube-openapi v0.0.0-20240827152857-f7e401e7b4c2/go.mod h1:coRQXBK9NxO98XUv3ZD6AK3xzHCxV6+b7lrquKwaKzA=
|
||||
k8s.io/utils v0.0.0-20240821151609-f90d01438635 h1:2wThSvJoW/Ncn9TmQEYXRnevZXi2duqHWf5OX9S3zjI=
|
||||
k8s.io/utils v0.0.0-20240821151609-f90d01438635/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0 h1:/U5vjBbQn3RChhv7P11uhYvCSm5G2GaIi5AIGBS6r4c=
|
||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0/go.mod h1:z7+wmGM2dfIiLRfrC6jb5kV2Mq/sK1ZP303cxzkV5Y4=
|
||||
sigs.k8s.io/controller-runtime v0.17.3 h1:65QmN7r3FWgTxDMz9fvGnO1kbf2nu+acg9p2R9oYYYk=
|
||||
sigs.k8s.io/controller-runtime v0.17.3/go.mod h1:N0jpP5Lo7lMTF9aL56Z/B2oWBJjey6StQM0jRbKQXtY=
|
||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3 h1:2770sDpzrjjsAtVhSeUFseziht227YAWYHLGNM8QPwY=
|
||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw=
|
||||
sigs.k8s.io/controller-runtime v0.19.0 h1:nWVM7aq+Il2ABxwiCizrVDSlmDcshi9llbaFbC0ji/Q=
|
||||
sigs.k8s.io/controller-runtime v0.19.0/go.mod h1:iRmWllt8IlaLjvTTDLhRBXIEtkCK6hwVBJJsYS9Ajf4=
|
||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
|
||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
|
||||
sigs.k8s.io/kubectl-validate v0.0.3 h1:wcbx6dPXF7BWoWSyih295mEOLBbzZA6CaEHoCufutUo=
|
||||
sigs.k8s.io/kubectl-validate v0.0.3/go.mod h1:Y67xSi06L5XSl+jSGFamNoa117yq6SnN4yXIzWHWxU8=
|
||||
sigs.k8s.io/kubectl-validate v0.0.5-0.20240827210056-ce13d95db263 h1:ju7xWt2VnWuZPh0ffWJtsC40ki1BW/pLy6DZRyoEB30=
|
||||
sigs.k8s.io/kubectl-validate v0.0.5-0.20240827210056-ce13d95db263/go.mod h1:ex3aZREdgXoEH7+v6azT7Xm0J9rpWIDr1micQCzdomY=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
|
||||
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
module github.com/kyverno/chainsaw/hack/controller-gen
|
||||
|
||||
go 1.22.0
|
||||
|
||||
require (
|
||||
github.com/spf13/cobra v1.8.1
|
||||
k8s.io/apiextensions-apiserver v0.31.1
|
||||
sigs.k8s.io/controller-tools v0.16.3
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
|
||||
github.com/go-logr/logr v1.4.2 // indirect
|
||||
github.com/gobuffalo/flect v1.0.2 // indirect
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/google/gofuzz v1.2.0 // indirect
|
||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/kr/text v0.2.0 // indirect
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/spf13/pflag v1.0.5 // indirect
|
||||
github.com/x448/float16 v0.8.4 // indirect
|
||||
golang.org/x/mod v0.20.0 // indirect
|
||||
golang.org/x/net v0.28.0 // indirect
|
||||
golang.org/x/sync v0.8.0 // indirect
|
||||
golang.org/x/text v0.17.0 // indirect
|
||||
golang.org/x/tools v0.24.0 // indirect
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
|
||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
k8s.io/apimachinery v0.31.1 // indirect
|
||||
k8s.io/klog/v2 v2.130.1 // indirect
|
||||
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect
|
||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
|
||||
)
|
|
@ -0,0 +1,135 @@
|
|||
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
|
||||
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
|
||||
github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
|
||||
github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
|
||||
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
|
||||
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/gobuffalo/flect v1.0.2 h1:eqjPGSo2WmjgY2XlpGwo2NXgL3RucAKo4k4qQMNA5sA=
|
||||
github.com/gobuffalo/flect v1.0.2/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
|
||||
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
|
||||
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
|
||||
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
|
||||
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
|
||||
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
|
||||
github.com/onsi/gomega v1.34.2 h1:pNCwDkzrsv7MS9kpaQvVb1aVLahQXyJ/Tv5oAZMI3i8=
|
||||
github.com/onsi/gomega v1.34.2/go.mod h1:v1xfxRgk0KIsG+QOdm7p8UosrOzPYRo60fd3B/1Dukc=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
|
||||
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
|
||||
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
|
||||
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
|
||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0=
|
||||
golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE=
|
||||
golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
|
||||
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
|
||||
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
|
||||
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24=
|
||||
golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
|
||||
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
k8s.io/apiextensions-apiserver v0.31.1 h1:L+hwULvXx+nvTYX/MKM3kKMZyei+UiSXQWciX/N6E40=
|
||||
k8s.io/apiextensions-apiserver v0.31.1/go.mod h1:tWMPR3sgW+jsl2xm9v7lAyRF1rYEK71i9G5dRtkknoQ=
|
||||
k8s.io/apimachinery v0.31.1 h1:mhcUBbj7KUjaVhyXILglcVjuS4nYXiwC+KKFBgIVy7U=
|
||||
k8s.io/apimachinery v0.31.1/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo=
|
||||
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
|
||||
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
|
||||
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A=
|
||||
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
||||
sigs.k8s.io/controller-tools v0.16.3 h1:z48C5/d4jCVQQvtiSBL5MYyZ3EO2eFIOXrIKMgHVhFY=
|
||||
sigs.k8s.io/controller-tools v0.16.3/go.mod h1:AEj6k+w1kYpLZv2einOH3mj52ips4W/6FUjnB5tkJGs=
|
||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
|
||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
|
||||
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
|
||||
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
|
|
@ -0,0 +1,116 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"sigs.k8s.io/controller-tools/pkg/crd"
|
||||
"sigs.k8s.io/controller-tools/pkg/genall"
|
||||
"sigs.k8s.io/controller-tools/pkg/markers"
|
||||
)
|
||||
|
||||
var (
|
||||
allGenerators = map[string]genall.Generator{
|
||||
"crd": crd.Generator{},
|
||||
}
|
||||
allOutputRules = map[string]genall.OutputRule{
|
||||
"dir": genall.OutputToDirectory(""),
|
||||
"none": genall.OutputToNothing,
|
||||
"stdout": genall.OutputToStdout,
|
||||
"artifacts": genall.OutputArtifacts{},
|
||||
}
|
||||
optionsRegistry = &markers.Registry{}
|
||||
)
|
||||
|
||||
func init() { //nolint:gochecknoinits
|
||||
for genName, gen := range allGenerators {
|
||||
// make the generator options marker itself
|
||||
defn := markers.Must(markers.MakeDefinition(genName, markers.DescribesPackage, gen))
|
||||
if err := optionsRegistry.Register(defn); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if helpGiver, hasHelp := gen.(genall.HasHelp); hasHelp {
|
||||
if help := helpGiver.Help(); help != nil {
|
||||
optionsRegistry.AddHelp(defn, help)
|
||||
}
|
||||
}
|
||||
// make per-generation output rule markers
|
||||
for ruleName, rule := range allOutputRules {
|
||||
ruleMarker := markers.Must(markers.MakeDefinition(fmt.Sprintf("output:%s:%s", genName, ruleName), markers.DescribesPackage, rule))
|
||||
if err := optionsRegistry.Register(ruleMarker); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if helpGiver, hasHelp := rule.(genall.HasHelp); hasHelp {
|
||||
if help := helpGiver.Help(); help != nil {
|
||||
optionsRegistry.AddHelp(ruleMarker, help)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// make "default output" output rule markers
|
||||
for ruleName, rule := range allOutputRules {
|
||||
ruleMarker := markers.Must(markers.MakeDefinition("output:"+ruleName, markers.DescribesPackage, rule))
|
||||
if err := optionsRegistry.Register(ruleMarker); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if helpGiver, hasHelp := rule.(genall.HasHelp); hasHelp {
|
||||
if help := helpGiver.Help(); help != nil {
|
||||
optionsRegistry.AddHelp(ruleMarker, help)
|
||||
}
|
||||
}
|
||||
}
|
||||
// add in the common options markers
|
||||
if err := genall.RegisterOptionsMarkers(optionsRegistry); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
type noUsageError struct{ error }
|
||||
|
||||
func main() {
|
||||
cmd := &cobra.Command{
|
||||
Use: "controller-gen",
|
||||
RunE: func(c *cobra.Command, rawOpts []string) error {
|
||||
oneOf, err := markers.MakeAnyTypeDefinition("kubebuilder:oneOf", markers.DescribesType, OneOf{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
not, err := markers.MakeAnyTypeDefinition("kubebuilder:not", markers.DescribesType, Not{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// otherwise, set up the runtime for actually running the generators
|
||||
rt, err := genall.FromOptions(optionsRegistry, rawOpts)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := rt.Collector.Registry.Register(oneOf); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := rt.Collector.Registry.Register(not); err != nil {
|
||||
return err
|
||||
}
|
||||
if len(rt.Generators) == 0 {
|
||||
return fmt.Errorf("no generators specified")
|
||||
}
|
||||
if hadErrs := rt.Run(); hadErrs {
|
||||
// don't obscure the actual error with a bunch of usage
|
||||
return noUsageError{fmt.Errorf("not all generators ran successfully")}
|
||||
}
|
||||
return nil
|
||||
},
|
||||
SilenceUsage: true, // silence the usage, then print it out ourselves if it wasn't suppressed
|
||||
}
|
||||
if err := cmd.Execute(); err != nil {
|
||||
if _, noUsage := err.(noUsageError); !noUsage {
|
||||
// print the usage unless we suppressed it
|
||||
if err := cmd.Usage(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
fmt.Fprintf(cmd.OutOrStderr(), "run `%[1]s %[2]s -w` to see all available markers, or `%[1]s %[2]s -h` for usage\n", cmd.CalledAs(), strings.Join(os.Args[1:], " "))
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
apiext "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
|
||||
)
|
||||
|
||||
type OneOf struct {
|
||||
Value any
|
||||
}
|
||||
|
||||
func (m OneOf) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
var props apiext.JSONSchemaProps
|
||||
if data, err := json.Marshal(m.Value); err != nil {
|
||||
return err
|
||||
} else if err := json.Unmarshal(data, &props); err != nil {
|
||||
return err
|
||||
}
|
||||
schema.OneOf = append(schema.OneOf, props)
|
||||
return nil
|
||||
}
|
||||
|
||||
type Not struct {
|
||||
Value any
|
||||
}
|
||||
|
||||
func (m Not) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
var props apiext.JSONSchemaProps
|
||||
if data, err := json.Marshal(m.Value); err != nil {
|
||||
return err
|
||||
} else if err := json.Unmarshal(data, &props); err != nil {
|
||||
return err
|
||||
}
|
||||
schema.Not = &props
|
||||
return nil
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
package conversion
|
||||
|
||||
import (
|
||||
"github.com/kyverno/chainsaw/pkg/apis/v1alpha1"
|
||||
"github.com/kyverno/chainsaw/pkg/apis/v1alpha2"
|
||||
"k8s.io/apimachinery/pkg/conversion"
|
||||
)
|
||||
|
||||
func Convert_v1alpha2_ConfigurationSpec_To_v1alpha1_ConfigurationSpec(in *v1alpha2.ConfigurationSpec, out *v1alpha1.ConfigurationSpec, _ conversion.Scope) error {
|
||||
out.SkipDelete = in.Cleanup.SkipDelete
|
||||
out.DelayBeforeCleanup = in.Cleanup.DelayBeforeCleanup
|
||||
out.Clusters = in.Clusters
|
||||
out.DeletionPropagationPolicy = in.Deletion.Propagation
|
||||
out.ExcludeTestRegex = in.Discovery.ExcludeTestRegex
|
||||
out.IncludeTestRegex = in.Discovery.IncludeTestRegex
|
||||
out.TestFile = in.Discovery.TestFile
|
||||
out.FullName = in.Discovery.FullName
|
||||
out.Catch = in.Error.Catch
|
||||
out.FailFast = in.Execution.FailFast
|
||||
out.Parallel = in.Execution.Parallel
|
||||
out.RepeatCount = in.Execution.RepeatCount
|
||||
out.ForceTerminationGracePeriod = in.Execution.ForceTerminationGracePeriod
|
||||
out.Namespace = in.Namespace.Name
|
||||
out.NamespaceTemplate = in.Namespace.Template
|
||||
if in := in.Report; in != nil {
|
||||
out.ReportFormat = v1alpha1.ReportFormatType(in.Format)
|
||||
out.ReportPath = in.Path
|
||||
out.ReportName = in.Name
|
||||
}
|
||||
out.Template = in.Templating.Enabled
|
||||
out.Timeouts = in.Timeouts
|
||||
return nil
|
||||
}
|
||||
|
||||
func Convert_v1alpha1_ConfigurationSpec_To_v1alpha2_ConfigurationSpec(in *v1alpha1.ConfigurationSpec, out *v1alpha2.ConfigurationSpec, _ conversion.Scope) error {
|
||||
out.Cleanup = v1alpha2.CleanupOptions{
|
||||
SkipDelete: in.SkipDelete,
|
||||
DelayBeforeCleanup: in.DelayBeforeCleanup,
|
||||
}
|
||||
out.Clusters = in.Clusters
|
||||
out.Deletion = v1alpha2.DeletionOptions{
|
||||
Propagation: in.DeletionPropagationPolicy,
|
||||
}
|
||||
out.Discovery = v1alpha2.DiscoveryOptions{
|
||||
ExcludeTestRegex: in.ExcludeTestRegex,
|
||||
IncludeTestRegex: in.IncludeTestRegex,
|
||||
TestFile: in.TestFile,
|
||||
FullName: in.FullName,
|
||||
}
|
||||
out.Error = v1alpha2.ErrorOptions{
|
||||
Catch: in.Catch,
|
||||
}
|
||||
out.Execution = v1alpha2.ExecutionOptions{
|
||||
FailFast: in.FailFast,
|
||||
Parallel: in.Parallel,
|
||||
RepeatCount: in.RepeatCount,
|
||||
ForceTerminationGracePeriod: in.ForceTerminationGracePeriod,
|
||||
}
|
||||
out.Namespace = v1alpha2.NamespaceOptions{
|
||||
Name: in.Namespace,
|
||||
Template: in.NamespaceTemplate,
|
||||
}
|
||||
out.Report = &v1alpha2.ReportOptions{
|
||||
Format: v1alpha2.ReportFormatType(in.ReportFormat),
|
||||
Path: in.ReportPath,
|
||||
Name: in.ReportName,
|
||||
}
|
||||
out.Templating = v1alpha2.TemplatingOptions{
|
||||
Enabled: in.Template,
|
||||
}
|
||||
out.Timeouts = in.Timeouts
|
||||
return nil
|
||||
}
|
||||
|
||||
func autoConvert_v1alpha2_Configuration_To_v1alpha1_Configuration(in *v1alpha2.Configuration, out *v1alpha1.Configuration, s conversion.Scope) error {
|
||||
out.ObjectMeta = in.ObjectMeta
|
||||
if err := Convert_v1alpha2_ConfigurationSpec_To_v1alpha1_ConfigurationSpec(&in.Spec, &out.Spec, s); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1alpha2_Configuration_To_v1alpha1_Configuration is an autogenerated conversion function.
|
||||
func Convert_v1alpha2_Configuration_To_v1alpha1_Configuration(in *v1alpha2.Configuration, out *v1alpha1.Configuration, s conversion.Scope) error {
|
||||
return autoConvert_v1alpha2_Configuration_To_v1alpha1_Configuration(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_v1alpha1_Configuration_To_v1alpha2_Configuration(in *v1alpha1.Configuration, out *v1alpha2.Configuration, s conversion.Scope) error {
|
||||
out.ObjectMeta = in.ObjectMeta
|
||||
if err := Convert_v1alpha1_ConfigurationSpec_To_v1alpha2_ConfigurationSpec(&in.Spec, &out.Spec, s); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1alpha1_Configuration_To_v1alpha2_Configuration is an autogenerated conversion function.
|
||||
func Convert_v1alpha1_Configuration_To_v1alpha2_Configuration(in *v1alpha1.Configuration, out *v1alpha2.Configuration, s conversion.Scope) error {
|
||||
return autoConvert_v1alpha1_Configuration_To_v1alpha2_Configuration(in, out, s)
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package conversion
|
||||
|
||||
import (
|
||||
"github.com/kyverno/chainsaw/pkg/apis/v1alpha1"
|
||||
"github.com/kyverno/chainsaw/pkg/apis/v1alpha2"
|
||||
"k8s.io/apimachinery/pkg/conversion"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
)
|
||||
|
||||
func RegisterConversions(s *runtime.Scheme) error {
|
||||
if err := s.AddGeneratedConversionFunc((*v1alpha2.Configuration)(nil), (*v1alpha1.Configuration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1alpha2_Configuration_To_v1alpha1_Configuration(a.(*v1alpha2.Configuration), b.(*v1alpha1.Configuration), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*v1alpha1.Configuration)(nil), (*v1alpha2.Configuration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1alpha1_Configuration_To_v1alpha2_Configuration(a.(*v1alpha1.Configuration), b.(*v1alpha2.Configuration), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
|
@ -0,0 +1,390 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
)
|
||||
|
||||
// ActionBindings contains bindings options for an action.
|
||||
type ActionBindings struct {
|
||||
// Bindings defines additional binding key/values.
|
||||
// +optional
|
||||
Bindings []Binding `json:"bindings,omitempty"`
|
||||
}
|
||||
|
||||
// ActionCheck contains check for an action.
|
||||
type ActionCheck struct {
|
||||
// Check is an assertion tree to validate the operation outcome.
|
||||
// +optional
|
||||
Check *Check `json:"check,omitempty"`
|
||||
}
|
||||
|
||||
// ActionCheckRef contains check reference options for an action.
|
||||
// +kubebuilder:not:={required:{file,resource}}
|
||||
type ActionCheckRef struct {
|
||||
FileRef `json:",inline"`
|
||||
|
||||
// Check provides a check used in assertions.
|
||||
// +optional
|
||||
Check *Check `json:"resource,omitempty"`
|
||||
|
||||
// Template determines whether resources should be considered for templating.
|
||||
// +optional
|
||||
Template *bool `json:"template,omitempty"`
|
||||
}
|
||||
|
||||
// ActionClusters contains clusters options for an action.
|
||||
type ActionClusters struct {
|
||||
// Cluster defines the target cluster (will be inherited if not specified).
|
||||
// +optional
|
||||
Cluster *string `json:"cluster,omitempty"`
|
||||
|
||||
// Clusters holds a registry to clusters to support multi-cluster tests.
|
||||
// +optional
|
||||
Clusters Clusters `json:"clusters,omitempty"`
|
||||
}
|
||||
|
||||
// ActionDryRun contains dry run options for an action.
|
||||
type ActionDryRun struct {
|
||||
// DryRun determines whether the file should be applied in dry run mode.
|
||||
// +optional
|
||||
DryRun *bool `json:"dryRun,omitempty"`
|
||||
}
|
||||
|
||||
// ActionEnv contains environment options for an action.
|
||||
type ActionEnv struct {
|
||||
// Env defines additional environment variables.
|
||||
// +optional
|
||||
Env []Binding `json:"env,omitempty"`
|
||||
|
||||
// SkipLogOutput removes the output from the command. Useful for sensitive logs or to reduce noise.
|
||||
// +optional
|
||||
SkipLogOutput bool `json:"skipLogOutput,omitempty"`
|
||||
}
|
||||
|
||||
// ActionExpectations contains expectations for an action.
|
||||
type ActionExpectations struct {
|
||||
// Expect defines a list of matched checks to validate the operation outcome.
|
||||
// +optional
|
||||
Expect []Expectation `json:"expect,omitempty"`
|
||||
}
|
||||
|
||||
// ActionFormat contains format for an action.
|
||||
type ActionFormat struct {
|
||||
// Format determines the output format (json or yaml).
|
||||
// +optional
|
||||
Format Format `json:"format,omitempty"`
|
||||
}
|
||||
|
||||
type ActionInlineResource struct {
|
||||
// Resource provides a resource to be applied.
|
||||
// +kubebuilder:validation:XEmbeddedResource
|
||||
// +kubebuilder:pruning:PreserveUnknownFields
|
||||
// +optional
|
||||
Resource *unstructured.Unstructured `json:"resource,omitempty"`
|
||||
}
|
||||
|
||||
// ActionObject contains object selector options for an action.
|
||||
type ActionObject struct {
|
||||
ObjectType `json:",inline"`
|
||||
ActionObjectSelector `json:",inline"`
|
||||
}
|
||||
|
||||
// ActionObjectSelector contains object selector options for an action.
|
||||
// +kubebuilder:not:={required:{name,selector}}
|
||||
type ActionObjectSelector struct {
|
||||
ObjectName `json:",inline"`
|
||||
|
||||
// Selector defines labels selector.
|
||||
// +optional
|
||||
Selector Expression `json:"selector,omitempty"`
|
||||
}
|
||||
|
||||
// ActionOutputs contains outputs options for an action.
|
||||
type ActionOutputs struct {
|
||||
// Outputs defines output bindings.
|
||||
// +optional
|
||||
Outputs []Output `json:"outputs,omitempty"`
|
||||
}
|
||||
|
||||
// FileRef represents a file reference.
|
||||
type FileRef struct {
|
||||
// File is the path to the referenced file. This can be a direct path to a file
|
||||
// or an expression that matches multiple files, such as "manifest/*.yaml" for all YAML
|
||||
// files within the "manifest" directory.
|
||||
File Expression `json:"file,omitempty"`
|
||||
}
|
||||
|
||||
// ActionResourceRef contains resource reference options for an action.
|
||||
// +kubebuilder:not:={required:{file,resource}}
|
||||
type ActionResourceRef struct {
|
||||
FileRef `json:",inline"`
|
||||
// Resource provides a resource to be applied.
|
||||
// +kubebuilder:validation:XEmbeddedResource
|
||||
// +kubebuilder:pruning:PreserveUnknownFields
|
||||
// +optional
|
||||
Resource *unstructured.Unstructured `json:"resource,omitempty"`
|
||||
// ActionInlineResource `json:",inline"`
|
||||
|
||||
// Template determines whether resources should be considered for templating.
|
||||
// +optional
|
||||
Template *bool `json:"template,omitempty"`
|
||||
}
|
||||
|
||||
// ActionTimeout contains timeout options for an action.
|
||||
type ActionTimeout struct {
|
||||
// Timeout for the operation. Overrides the global timeout set in the Configuration.
|
||||
// +optional
|
||||
Timeout *metav1.Duration `json:"timeout,omitempty"`
|
||||
}
|
||||
|
||||
// Apply represents a set of configurations or resources that
|
||||
// should be applied during testing.
|
||||
type Apply struct {
|
||||
ActionBindings `json:",inline"`
|
||||
ActionClusters `json:",inline"`
|
||||
ActionDryRun `json:",inline"`
|
||||
ActionExpectations `json:",inline"`
|
||||
ActionOutputs `json:",inline"`
|
||||
ActionResourceRef `json:",inline"`
|
||||
ActionTimeout `json:",inline"`
|
||||
}
|
||||
|
||||
// Assert represents a test condition that is expected to hold true
|
||||
// during the testing process.
|
||||
type Assert struct {
|
||||
ActionBindings `json:",inline"`
|
||||
ActionCheckRef `json:",inline"`
|
||||
ActionClusters `json:",inline"`
|
||||
ActionTimeout `json:",inline"`
|
||||
}
|
||||
|
||||
// Command describes a command to run as a part of a test step.
|
||||
type Command struct {
|
||||
ActionBindings `json:",inline"`
|
||||
ActionCheck `json:",inline"`
|
||||
ActionClusters `json:",inline"`
|
||||
ActionEnv `json:",inline"`
|
||||
ActionOutputs `json:",inline"`
|
||||
ActionTimeout `json:",inline"`
|
||||
|
||||
// Entrypoint is the command entry point to run.
|
||||
Entrypoint string `json:"entrypoint"`
|
||||
|
||||
// Args is the command arguments.
|
||||
// +optional
|
||||
Args []string `json:"args,omitempty"`
|
||||
|
||||
// WorkDir is the working directory for command.
|
||||
// +optional
|
||||
WorkDir *string `json:"workDir,omitempty"`
|
||||
}
|
||||
|
||||
// Create represents a set of resources that should be created.
|
||||
// If a resource already exists in the cluster it will fail.
|
||||
type Create struct {
|
||||
ActionBindings `json:",inline"`
|
||||
ActionClusters `json:",inline"`
|
||||
ActionDryRun `json:",inline"`
|
||||
ActionExpectations `json:",inline"`
|
||||
ActionOutputs `json:",inline"`
|
||||
ActionResourceRef `json:",inline"`
|
||||
ActionTimeout `json:",inline"`
|
||||
}
|
||||
|
||||
// Delete is a reference to an object that should be deleted
|
||||
// +kubebuilder:not:={required:{file,ref}}
|
||||
type Delete struct {
|
||||
ActionBindings `json:",inline"`
|
||||
ActionClusters `json:",inline"`
|
||||
ActionExpectations `json:",inline"`
|
||||
ActionTimeout `json:",inline"`
|
||||
|
||||
// Template determines whether resources should be considered for templating.
|
||||
// +optional
|
||||
Template *bool `json:"template,omitempty"`
|
||||
|
||||
// File is the path to the referenced file. This can be a direct path to a file
|
||||
// or an expression that matches multiple files, such as "manifest/*.yaml" for all YAML
|
||||
// files within the "manifest" directory.
|
||||
// +optional
|
||||
File Expression `json:"file,omitempty"`
|
||||
|
||||
// Ref determines objects to be deleted.
|
||||
// +optional
|
||||
Ref *ObjectReference `json:"ref,omitempty"`
|
||||
|
||||
// DeletionPropagationPolicy decides if a deletion will propagate to the dependents of
|
||||
// the object, and how the garbage collector will handle the propagation.
|
||||
// Overrides the deletion propagation policy set in the Configuration, the Test and the TestStep.
|
||||
// +optional
|
||||
// +kubebuilder:validation:Enum:=Orphan;Background;Foreground
|
||||
DeletionPropagationPolicy *metav1.DeletionPropagation `json:"deletionPropagationPolicy,omitempty"`
|
||||
}
|
||||
|
||||
// Describe defines how to describe resources.
|
||||
type Describe struct {
|
||||
ActionClusters `json:",inline"`
|
||||
ActionObject `json:",inline"`
|
||||
ActionTimeout `json:",inline"`
|
||||
|
||||
// Show Events indicates whether to include related events.
|
||||
// +optional
|
||||
ShowEvents *bool `json:"showEvents,omitempty"`
|
||||
}
|
||||
|
||||
// Error represents an anticipated error condition that may arise during testing.
|
||||
// Instead of treating such an error as a test failure, it acknowledges it as expected.
|
||||
type Error struct {
|
||||
ActionBindings `json:",inline"`
|
||||
ActionCheckRef `json:",inline"`
|
||||
ActionClusters `json:",inline"`
|
||||
ActionTimeout `json:",inline"`
|
||||
}
|
||||
|
||||
// Events defines how to collect events.
|
||||
type Events struct {
|
||||
ActionClusters `json:",inline"`
|
||||
ActionFormat `json:",inline"`
|
||||
ActionObjectSelector `json:",inline"`
|
||||
ActionTimeout `json:",inline"`
|
||||
}
|
||||
|
||||
// Get defines how to get resources.
|
||||
type Get struct {
|
||||
ActionClusters `json:",inline"`
|
||||
ActionFormat `json:",inline"`
|
||||
ActionObject `json:",inline"`
|
||||
ActionTimeout `json:",inline"`
|
||||
}
|
||||
|
||||
// Patch represents a set of resources that should be patched.
|
||||
// If a resource doesn't exist yet in the cluster it will fail.
|
||||
type Patch struct {
|
||||
ActionBindings `json:",inline"`
|
||||
ActionClusters `json:",inline"`
|
||||
ActionDryRun `json:",inline"`
|
||||
ActionExpectations `json:",inline"`
|
||||
ActionOutputs `json:",inline"`
|
||||
ActionResourceRef `json:",inline"`
|
||||
ActionTimeout `json:",inline"`
|
||||
}
|
||||
|
||||
// PodLogs defines how to collect pod logs.
|
||||
type PodLogs struct {
|
||||
ActionClusters `json:",inline"`
|
||||
ActionObjectSelector `json:",inline"`
|
||||
ActionTimeout `json:",inline"`
|
||||
|
||||
// Container in pod to get logs from else --all-containers is used.
|
||||
// +optional
|
||||
Container Expression `json:"container,omitempty"`
|
||||
|
||||
// Tail is the number of last lines to collect from pods. If omitted or zero,
|
||||
// then the default is 10 if you use a selector, or -1 (all) if you use a pod name.
|
||||
// This matches default behavior of `kubectl logs`.
|
||||
// +optional
|
||||
Tail *int `json:"tail,omitempty"`
|
||||
}
|
||||
|
||||
// Proxy defines how to get resources.
|
||||
type Proxy struct {
|
||||
ActionClusters `json:",inline"`
|
||||
ActionOutputs `json:",inline"`
|
||||
ActionTimeout `json:",inline"`
|
||||
ObjectName `json:",inline"`
|
||||
ObjectType `json:",inline"`
|
||||
|
||||
// TargetPort defines the target port to proxy the request.
|
||||
// +optional
|
||||
TargetPort Expression `json:"port,omitempty"`
|
||||
|
||||
// TargetPath defines the target path to proxy the request.
|
||||
// +optional
|
||||
TargetPath Expression `json:"path,omitempty"`
|
||||
}
|
||||
|
||||
// Script describes a script to run as a part of a test step.
|
||||
type Script struct {
|
||||
ActionBindings `json:",inline"`
|
||||
ActionCheck `json:",inline"`
|
||||
ActionClusters `json:",inline"`
|
||||
ActionEnv `json:",inline"`
|
||||
ActionOutputs `json:",inline"`
|
||||
ActionTimeout `json:",inline"`
|
||||
|
||||
// Content defines a shell script (run with "sh -c ...").
|
||||
// +optional
|
||||
Content string `json:"content,omitempty"`
|
||||
|
||||
// WorkDir is the working directory for script.
|
||||
// +optional
|
||||
WorkDir *string `json:"workDir,omitempty"`
|
||||
}
|
||||
|
||||
// Sleep represents a duration while nothing happens.
|
||||
type Sleep struct {
|
||||
// Duration is the delay used for sleeping.
|
||||
Duration metav1.Duration `json:"duration"`
|
||||
}
|
||||
|
||||
// Update represents a set of resources that should be updated.
|
||||
// If a resource does not exist in the cluster it will fail.
|
||||
type Update struct {
|
||||
ActionBindings `json:",inline"`
|
||||
ActionClusters `json:",inline"`
|
||||
ActionDryRun `json:",inline"`
|
||||
ActionExpectations `json:",inline"`
|
||||
ActionOutputs `json:",inline"`
|
||||
ActionResourceRef `json:",inline"`
|
||||
ActionTimeout `json:",inline"`
|
||||
}
|
||||
|
||||
// Wait specifies how to perform wait operations on resources.
|
||||
type Wait struct {
|
||||
ActionTimeout `json:",inline"`
|
||||
ActionFormat `json:",inline"`
|
||||
ActionClusters `json:",inline"`
|
||||
ActionObject `json:",inline"`
|
||||
|
||||
// WaitFor specifies the condition to wait for.
|
||||
WaitFor `json:"for"`
|
||||
}
|
||||
|
||||
// WaitFor specifies the condition to wait for.
|
||||
type WaitFor struct {
|
||||
// Deletion specifies parameters for waiting on a resource's deletion.
|
||||
// +optional
|
||||
Deletion *WaitForDeletion `json:"deletion,omitempty"`
|
||||
|
||||
// Condition specifies the condition to wait for.
|
||||
// +optional
|
||||
Condition *WaitForCondition `json:"condition,omitempty"`
|
||||
|
||||
// JsonPath specifies the json path condition to wait for.
|
||||
// +optional
|
||||
JsonPath *WaitForJsonPath `json:"jsonPath,omitempty"`
|
||||
}
|
||||
|
||||
// WaitForCondition represents parameters for waiting on a specific condition of a resource.
|
||||
type WaitForCondition struct {
|
||||
// Name defines the specific condition to wait for, e.g., "Available", "Ready".
|
||||
Name Expression `json:"name"`
|
||||
|
||||
// Value defines the specific condition status to wait for, e.g., "True", "False".
|
||||
// +optional
|
||||
Value *Expression `json:"value,omitempty"`
|
||||
}
|
||||
|
||||
// WaitForDeletion represents parameters for waiting on a resource's deletion.
|
||||
type WaitForDeletion struct{}
|
||||
|
||||
// WaitForJsonPath represents parameters for waiting on a json path of a resource.
|
||||
type WaitForJsonPath struct {
|
||||
// Path defines the json path to wait for, e.g. '{.status.phase}'.
|
||||
Path Expression `json:"path"`
|
||||
|
||||
// Value defines the expected value to wait for, e.g., "Running".
|
||||
// +optional
|
||||
Value *Expression `json:"value,omitempty"`
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
"github.com/kyverno/kyverno-json/pkg/apis/policy/v1alpha1"
|
||||
)
|
||||
|
||||
// Any represents any type.
|
||||
type Any = v1alpha1.Any
|
|
@ -1,40 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// Apply represents a set of configurations or resources that
|
||||
// should be applied during testing.
|
||||
type Apply struct {
|
||||
// Timeout for the operation. Overrides the global timeout set in the Configuration.
|
||||
// +optional
|
||||
Timeout *metav1.Duration `json:"timeout,omitempty"`
|
||||
|
||||
// Bindings defines additional binding key/values.
|
||||
// +optional
|
||||
Bindings []Binding `json:"bindings,omitempty"`
|
||||
|
||||
// Outputs defines output bindings.
|
||||
// +optional
|
||||
Outputs []Output `json:"outputs,omitempty"`
|
||||
|
||||
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
|
||||
// +optional
|
||||
Cluster string `json:"cluster,omitempty"`
|
||||
|
||||
// FileRefOrResource provides a reference to the resources to be applied.
|
||||
FileRefOrResource `json:",inline"`
|
||||
|
||||
// Template determines whether resources should be considered for templating.
|
||||
// +optional
|
||||
Template *bool `json:"template,omitempty"`
|
||||
|
||||
// DryRun determines whether the file should be applied in dry run mode.
|
||||
// +optional
|
||||
DryRun *bool `json:"dryRun,omitempty"`
|
||||
|
||||
// Expect defines a list of matched checks to validate the operation outcome.
|
||||
// +optional
|
||||
Expect []Expectation `json:"expect,omitempty"`
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// Assert represents a test condition that is expected to hold true
|
||||
// during the testing process.
|
||||
type Assert struct {
|
||||
// Timeout for the operation. Overrides the global timeout set in the Configuration.
|
||||
// +optional
|
||||
Timeout *metav1.Duration `json:"timeout,omitempty"`
|
||||
|
||||
// Bindings defines additional binding key/values.
|
||||
// +optional
|
||||
Bindings []Binding `json:"bindings,omitempty"`
|
||||
|
||||
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
|
||||
// +optional
|
||||
Cluster string `json:"cluster,omitempty"`
|
||||
|
||||
// FileRefOrAssert provides a reference to the assertion.
|
||||
FileRefOrCheck `json:",inline"`
|
||||
|
||||
// Template determines whether resources should be considered for templating.
|
||||
// +optional
|
||||
Template *bool `json:"template,omitempty"`
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"regexp"
|
||||
)
|
||||
|
||||
var identifier = regexp.MustCompile(`^(?:\w+|\(.+\))$`)
|
||||
|
||||
// Binding represents a key/value set as a binding in an executing test.
|
||||
type Binding struct {
|
||||
// Name the name of the binding.
|
||||
// +kubebuilder:validation:Pattern=`^(?:\w+|\(.+\))$`
|
||||
Name string `json:"name"`
|
||||
|
||||
// Value value of the binding.
|
||||
// +kubebuilder:validation:Schemaless
|
||||
// +kubebuilder:pruning:PreserveUnknownFields
|
||||
Value Any `json:"value"`
|
||||
}
|
||||
|
||||
func (b Binding) CheckName() error {
|
||||
if !identifier.MatchString(b.Name) {
|
||||
return fmt.Errorf("invalid name %s", b.Name)
|
||||
}
|
||||
return nil
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestBinding_CheckName(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
bindingName string
|
||||
bindingValue Any
|
||||
wantErr bool
|
||||
}{{
|
||||
name: "empty",
|
||||
wantErr: true,
|
||||
}, {
|
||||
name: "simple",
|
||||
bindingName: "simple",
|
||||
wantErr: false,
|
||||
}, {
|
||||
name: "with dollar",
|
||||
bindingName: "$simple",
|
||||
wantErr: true,
|
||||
}, {
|
||||
name: "with space",
|
||||
bindingName: "simple one",
|
||||
wantErr: true,
|
||||
}, {
|
||||
name: "with dot",
|
||||
bindingName: "simple.one",
|
||||
wantErr: true,
|
||||
}, {
|
||||
name: "good expression",
|
||||
bindingName: "('test')",
|
||||
wantErr: false,
|
||||
}, {
|
||||
name: "bad expression",
|
||||
bindingName: "('test'",
|
||||
wantErr: true,
|
||||
}}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
b := Binding{
|
||||
Name: tt.bindingName,
|
||||
Value: tt.bindingValue,
|
||||
}
|
||||
err := b.CheckName()
|
||||
if tt.wantErr {
|
||||
assert.Error(t, err)
|
||||
} else {
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
|
@ -1,92 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
// Catch defines actions to be executed on failure.
|
||||
type Catch struct {
|
||||
// Description contains a description of the operation.
|
||||
// +optional
|
||||
Description string `json:"description,omitempty"`
|
||||
|
||||
// PodLogs determines the pod logs collector to execute.
|
||||
// +optional
|
||||
PodLogs *PodLogs `json:"podLogs,omitempty"`
|
||||
|
||||
// Events determines the events collector to execute.
|
||||
// +optional
|
||||
Events *Events `json:"events,omitempty"`
|
||||
|
||||
// Describe determines the resource describe collector to execute.
|
||||
// +optional
|
||||
Describe *Describe `json:"describe,omitempty"`
|
||||
|
||||
// Wait determines the resource wait collector to execute.
|
||||
// +optional
|
||||
Wait *Wait `json:"wait,omitempty"`
|
||||
|
||||
// Get determines the resource get collector to execute.
|
||||
// +optional
|
||||
Get *Get `json:"get,omitempty"`
|
||||
|
||||
// Delete represents a deletion operation.
|
||||
// +optional
|
||||
Delete *Delete `json:"delete,omitempty"`
|
||||
|
||||
// Command defines a command to run.
|
||||
// +optional
|
||||
Command *Command `json:"command,omitempty"`
|
||||
|
||||
// Script defines a script to run.
|
||||
// +optional
|
||||
Script *Script `json:"script,omitempty"`
|
||||
|
||||
// Sleep defines zzzz.
|
||||
// +optional
|
||||
Sleep *Sleep `json:"sleep,omitempty"`
|
||||
}
|
||||
|
||||
func (c *Catch) Bindings() []Binding {
|
||||
switch {
|
||||
case c.Command != nil:
|
||||
return c.Command.Bindings
|
||||
case c.Delete != nil:
|
||||
return c.Delete.Bindings
|
||||
case c.Describe != nil:
|
||||
return nil
|
||||
case c.Events != nil:
|
||||
return nil
|
||||
case c.Get != nil:
|
||||
return nil
|
||||
case c.PodLogs != nil:
|
||||
return nil
|
||||
case c.Script != nil:
|
||||
return c.Script.Bindings
|
||||
case c.Sleep != nil:
|
||||
return nil
|
||||
case c.Wait != nil:
|
||||
return nil
|
||||
}
|
||||
panic("missing binding operation type handler")
|
||||
}
|
||||
|
||||
func (c *Catch) Outputs() []Output {
|
||||
switch {
|
||||
case c.Command != nil:
|
||||
return c.Command.Outputs
|
||||
case c.Delete != nil:
|
||||
return nil
|
||||
case c.Describe != nil:
|
||||
return nil
|
||||
case c.Events != nil:
|
||||
return nil
|
||||
case c.Get != nil:
|
||||
return nil
|
||||
case c.PodLogs != nil:
|
||||
return nil
|
||||
case c.Script != nil:
|
||||
return c.Script.Outputs
|
||||
case c.Sleep != nil:
|
||||
return nil
|
||||
case c.Wait != nil:
|
||||
return nil
|
||||
}
|
||||
panic("missing output operation type handler")
|
||||
}
|
|
@ -1,7 +1,16 @@
|
|||
package v1alpha1
|
||||
|
||||
// Finally defines actions to be executed at the end of a test.
|
||||
type Finally struct {
|
||||
// CatchFinally defines actions to be executed in catch, finally and cleanup blocks.
|
||||
// +kubebuilder:oneOf:={required:{command}}
|
||||
// +kubebuilder:oneOf:={required:{delete}}
|
||||
// +kubebuilder:oneOf:={required:{describe}}
|
||||
// +kubebuilder:oneOf:={required:{events}}
|
||||
// +kubebuilder:oneOf:={required:{get}}
|
||||
// +kubebuilder:oneOf:={required:{podLogs}}
|
||||
// +kubebuilder:oneOf:={required:{script}}
|
||||
// +kubebuilder:oneOf:={required:{sleep}}
|
||||
// +kubebuilder:oneOf:={required:{wait}}
|
||||
type CatchFinally struct {
|
||||
// Description contains a description of the operation.
|
||||
// +optional
|
||||
Description string `json:"description,omitempty"`
|
||||
|
@ -43,7 +52,7 @@ type Finally struct {
|
|||
Sleep *Sleep `json:"sleep,omitempty"`
|
||||
}
|
||||
|
||||
func (f *Finally) Bindings() []Binding {
|
||||
func (f *CatchFinally) Bindings() []Binding {
|
||||
switch {
|
||||
case f.Command != nil:
|
||||
return f.Command.Bindings
|
||||
|
@ -67,7 +76,7 @@ func (f *Finally) Bindings() []Binding {
|
|||
panic("missing binding operation type handler")
|
||||
}
|
||||
|
||||
func (f *Finally) Outputs() []Output {
|
||||
func (f *CatchFinally) Outputs() []Output {
|
||||
switch {
|
||||
case f.Command != nil:
|
||||
return f.Command.Outputs
|
|
@ -25,14 +25,14 @@ func TestFinally_Bindings(t *testing.T) {
|
|||
}{{
|
||||
fields: fields{
|
||||
Command: &Command{
|
||||
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
|
||||
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
Delete: &Delete{
|
||||
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
|
||||
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
|
@ -55,7 +55,7 @@ func TestFinally_Bindings(t *testing.T) {
|
|||
}, {
|
||||
fields: fields{
|
||||
Script: &Script{
|
||||
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
|
||||
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
|
@ -70,7 +70,7 @@ func TestFinally_Bindings(t *testing.T) {
|
|||
}}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
c := &Finally{
|
||||
c := &CatchFinally{
|
||||
PodLogs: tt.fields.PodLogs,
|
||||
Events: tt.fields.Events,
|
||||
Describe: tt.fields.Describe,
|
||||
|
@ -85,7 +85,7 @@ func TestFinally_Bindings(t *testing.T) {
|
|||
assert.Equal(t, tt.want, len(got))
|
||||
})
|
||||
}
|
||||
assert.Panics(t, func() { (&Finally{}).Bindings() })
|
||||
assert.Panics(t, func() { (&CatchFinally{}).Bindings() })
|
||||
}
|
||||
|
||||
func TestFinally_Outputs(t *testing.T) {
|
||||
|
@ -107,7 +107,7 @@ func TestFinally_Outputs(t *testing.T) {
|
|||
}{{
|
||||
fields: fields{
|
||||
Command: &Command{
|
||||
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
|
||||
ActionOutputs: ActionOutputs{Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
|
@ -134,7 +134,7 @@ func TestFinally_Outputs(t *testing.T) {
|
|||
}, {
|
||||
fields: fields{
|
||||
Script: &Script{
|
||||
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
|
||||
ActionOutputs: ActionOutputs{Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
|
@ -149,7 +149,7 @@ func TestFinally_Outputs(t *testing.T) {
|
|||
}}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
c := &Finally{
|
||||
c := &CatchFinally{
|
||||
PodLogs: tt.fields.PodLogs,
|
||||
Events: tt.fields.Events,
|
||||
Describe: tt.fields.Describe,
|
||||
|
@ -164,5 +164,5 @@ func TestFinally_Outputs(t *testing.T) {
|
|||
assert.Equal(t, tt.want, len(got))
|
||||
})
|
||||
}
|
||||
assert.Panics(t, func() { (&Finally{}).Outputs() })
|
||||
assert.Panics(t, func() { (&CatchFinally{}).Outputs() })
|
||||
}
|
|
@ -1,168 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestCatch_Bindings(t *testing.T) {
|
||||
type fields struct {
|
||||
PodLogs *PodLogs
|
||||
Events *Events
|
||||
Describe *Describe
|
||||
Wait *Wait
|
||||
Get *Get
|
||||
Delete *Delete
|
||||
Command *Command
|
||||
Script *Script
|
||||
Sleep *Sleep
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
fields fields
|
||||
want int
|
||||
}{{
|
||||
fields: fields{
|
||||
Command: &Command{
|
||||
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
Delete: &Delete{
|
||||
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
Describe: &Describe{},
|
||||
},
|
||||
}, {
|
||||
fields: fields{
|
||||
Events: &Events{},
|
||||
},
|
||||
}, {
|
||||
fields: fields{
|
||||
Get: &Get{},
|
||||
},
|
||||
}, {
|
||||
fields: fields{
|
||||
PodLogs: &PodLogs{},
|
||||
},
|
||||
}, {
|
||||
fields: fields{
|
||||
Script: &Script{
|
||||
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
Sleep: &Sleep{},
|
||||
},
|
||||
}, {
|
||||
fields: fields{
|
||||
Wait: &Wait{},
|
||||
},
|
||||
}}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
c := &Catch{
|
||||
PodLogs: tt.fields.PodLogs,
|
||||
Events: tt.fields.Events,
|
||||
Describe: tt.fields.Describe,
|
||||
Wait: tt.fields.Wait,
|
||||
Get: tt.fields.Get,
|
||||
Delete: tt.fields.Delete,
|
||||
Command: tt.fields.Command,
|
||||
Script: tt.fields.Script,
|
||||
Sleep: tt.fields.Sleep,
|
||||
}
|
||||
got := c.Bindings()
|
||||
assert.Equal(t, tt.want, len(got))
|
||||
})
|
||||
}
|
||||
assert.Panics(t, func() { (&Catch{}).Bindings() })
|
||||
}
|
||||
|
||||
func TestCatch_Outputs(t *testing.T) {
|
||||
type fields struct {
|
||||
PodLogs *PodLogs
|
||||
Events *Events
|
||||
Describe *Describe
|
||||
Wait *Wait
|
||||
Get *Get
|
||||
Delete *Delete
|
||||
Command *Command
|
||||
Script *Script
|
||||
Sleep *Sleep
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
fields fields
|
||||
want int
|
||||
}{{
|
||||
fields: fields{
|
||||
Command: &Command{
|
||||
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
Delete: &Delete{},
|
||||
},
|
||||
}, {
|
||||
fields: fields{
|
||||
Describe: &Describe{},
|
||||
},
|
||||
}, {
|
||||
fields: fields{
|
||||
Events: &Events{},
|
||||
},
|
||||
}, {
|
||||
fields: fields{
|
||||
Get: &Get{},
|
||||
},
|
||||
}, {
|
||||
fields: fields{
|
||||
PodLogs: &PodLogs{},
|
||||
},
|
||||
}, {
|
||||
fields: fields{
|
||||
Script: &Script{
|
||||
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
Sleep: &Sleep{},
|
||||
},
|
||||
}, {
|
||||
fields: fields{
|
||||
Wait: &Wait{},
|
||||
},
|
||||
}}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
c := &Catch{
|
||||
PodLogs: tt.fields.PodLogs,
|
||||
Events: tt.fields.Events,
|
||||
Describe: tt.fields.Describe,
|
||||
Wait: tt.fields.Wait,
|
||||
Get: tt.fields.Get,
|
||||
Delete: tt.fields.Delete,
|
||||
Command: tt.fields.Command,
|
||||
Script: tt.fields.Script,
|
||||
Sleep: tt.fields.Sleep,
|
||||
}
|
||||
got := c.Outputs()
|
||||
assert.Equal(t, tt.want, len(got))
|
||||
})
|
||||
}
|
||||
assert.Panics(t, func() { (&Catch{}).Outputs() })
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
// Check represents a check to be applied on the result of an operation.
|
||||
type Check = Any
|
|
@ -1,11 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
// Cluster defines cluster config and context.
|
||||
type Cluster struct {
|
||||
// Kubeconfig is the path to the referenced file.
|
||||
Kubeconfig string `json:"kubeconfig"`
|
||||
|
||||
// Context is the name of the context to use.
|
||||
// +optional
|
||||
Context string `json:"context,omitempty"`
|
||||
}
|
|
@ -1,43 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// Command describes a command to run as a part of a test step.
|
||||
type Command struct {
|
||||
// Timeout for the operation. Overrides the global timeout set in the Configuration.
|
||||
// +optional
|
||||
Timeout *metav1.Duration `json:"timeout,omitempty"`
|
||||
|
||||
// Bindings defines additional binding key/values.
|
||||
// +optional
|
||||
Bindings []Binding `json:"bindings,omitempty"`
|
||||
|
||||
// Outputs defines output bindings.
|
||||
// +optional
|
||||
Outputs []Output `json:"outputs,omitempty"`
|
||||
|
||||
// Env defines additional environment variables.
|
||||
// +optional
|
||||
Env []Binding `json:"env,omitempty"`
|
||||
|
||||
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
|
||||
// +optional
|
||||
Cluster string `json:"cluster,omitempty"`
|
||||
|
||||
// Entrypoint is the command entry point to run.
|
||||
Entrypoint string `json:"entrypoint"`
|
||||
|
||||
// Args is the command arguments.
|
||||
// +optional
|
||||
Args []string `json:"args,omitempty"`
|
||||
|
||||
// SkipLogOutput removes the output from the command. Useful for sensitive logs or to reduce noise.
|
||||
// +optional
|
||||
SkipLogOutput bool `json:"skipLogOutput,omitempty"`
|
||||
|
||||
// Check is an assertion tree to validate the operation outcome.
|
||||
// +optional
|
||||
Check *Check `json:"check,omitempty"`
|
||||
}
|
|
@ -8,7 +8,6 @@ import (
|
|||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
// +kubebuilder:object:root=true
|
||||
// +kubebuilder:resource:scope=Cluster
|
||||
// +kubebuilder:storageversion
|
||||
|
||||
// Configuration is the resource that contains the configuration used to run tests.
|
||||
type Configuration struct {
|
||||
|
@ -21,3 +20,114 @@ type Configuration struct {
|
|||
// Configuration spec.
|
||||
Spec ConfigurationSpec `json:"spec"`
|
||||
}
|
||||
|
||||
// ConfigurationSpec contains the configuration used to run tests.
|
||||
type ConfigurationSpec struct {
|
||||
// Global timeouts configuration. Applies to all tests/test steps if not overridden.
|
||||
// +optional
|
||||
// +kubebuilder:default:={}
|
||||
Timeouts DefaultTimeouts `json:"timeouts"`
|
||||
|
||||
// If set, do not delete the resources after running the tests (implies SkipClusterDelete).
|
||||
// +optional
|
||||
SkipDelete bool `json:"skipDelete,omitempty"`
|
||||
|
||||
// Template determines whether resources should be considered for templating.
|
||||
// +optional
|
||||
// +kubebuilder:default:=true
|
||||
Template bool `json:"template"`
|
||||
|
||||
// FailFast determines whether the test should stop upon encountering the first failure.
|
||||
// +optional
|
||||
FailFast bool `json:"failFast,omitempty"`
|
||||
|
||||
// The maximum number of tests to run at once.
|
||||
// +kubebuilder:validation:Format:=int
|
||||
// +kubebuilder:validation:Minimum:=1
|
||||
// +optional
|
||||
Parallel *int `json:"parallel,omitempty"`
|
||||
|
||||
// DeletionPropagationPolicy decides if a deletion will propagate to the dependents of
|
||||
// the object, and how the garbage collector will handle the propagation.
|
||||
// +optional
|
||||
// +kubebuilder:validation:Enum:=Orphan;Background;Foreground
|
||||
// +kubebuilder:default:=Background
|
||||
DeletionPropagationPolicy metav1.DeletionPropagation `json:"deletionPropagationPolicy,omitempty"`
|
||||
|
||||
// ReportFormat determines test report format (JSON|XML|JUNIT-TEST|JUNIT-STEP|JUNIT-OPERATION|nil) nil == no report.
|
||||
// maps to report.Type, however we don't want generated.deepcopy to have reference to it.
|
||||
// +optional
|
||||
// +kubebuilder:validation:Enum:=JSON;XML;JUNIT-TEST;JUNIT-STEP;JUNIT-OPERATION;
|
||||
ReportFormat ReportFormatType `json:"reportFormat,omitempty"`
|
||||
|
||||
// ReportPath defines the path.
|
||||
// +optional
|
||||
ReportPath string `json:"reportPath,omitempty"`
|
||||
|
||||
// ReportName defines the name of report to create. It defaults to "chainsaw-report".
|
||||
// +optional
|
||||
// +kubebuilder:default:="chainsaw-report"
|
||||
ReportName string `json:"reportName,omitempty"`
|
||||
|
||||
// Namespace defines the namespace to use for tests.
|
||||
// If not specified, every test will execute in a random ephemeral namespace
|
||||
// unless the namespace is overridden in a the test spec.
|
||||
// +optional
|
||||
Namespace string `json:"namespace,omitempty"`
|
||||
|
||||
// NamespaceTemplate defines a template to create the test namespace.
|
||||
// +optional
|
||||
NamespaceTemplate *Any `json:"namespaceTemplate,omitempty"`
|
||||
|
||||
// FullName makes use of the full test case folder path instead of the folder name.
|
||||
// +optional
|
||||
FullName bool `json:"fullName,omitempty"`
|
||||
|
||||
// ExcludeTestRegex is used to exclude tests based on a regular expression.
|
||||
// +optional
|
||||
ExcludeTestRegex string `json:"excludeTestRegex,omitempty"`
|
||||
|
||||
// IncludeTestRegex is used to include tests based on a regular expression.
|
||||
// +optional
|
||||
IncludeTestRegex string `json:"includeTestRegex,omitempty"`
|
||||
|
||||
// RepeatCount indicates how many times the tests should be executed.
|
||||
// +kubebuilder:validation:Format:=int
|
||||
// +kubebuilder:validation:Minimum:=1
|
||||
// +optional
|
||||
RepeatCount *int `json:"repeatCount,omitempty"`
|
||||
|
||||
// TestFile is the name of the file containing the test to run.
|
||||
// If no extension is provided, chainsaw will try with .yaml first and .yml if needed.
|
||||
// +kubebuilder:default:="chainsaw-test"
|
||||
// +optional
|
||||
TestFile string `json:"testFile,omitempty"`
|
||||
|
||||
// ForceTerminationGracePeriod forces the termination grace period on pods, statefulsets, daemonsets and deployments.
|
||||
// +optional
|
||||
ForceTerminationGracePeriod *metav1.Duration `json:"forceTerminationGracePeriod,omitempty"`
|
||||
|
||||
// DelayBeforeCleanup adds a delay between the time a test ends and the time cleanup starts.
|
||||
// +optional
|
||||
DelayBeforeCleanup *metav1.Duration `json:"delayBeforeCleanup,omitempty"`
|
||||
|
||||
// Clusters holds a registry to clusters to support multi-cluster tests.
|
||||
// +optional
|
||||
Clusters Clusters `json:"clusters,omitempty"`
|
||||
|
||||
// Catch defines what the tests steps will execute when an error happens.
|
||||
// This will be combined with catch handlers defined at the test and step levels.
|
||||
// +optional
|
||||
Catch []CatchFinally `json:"catch,omitempty"`
|
||||
}
|
||||
|
||||
type ReportFormatType string
|
||||
|
||||
const (
|
||||
JSONFormat ReportFormatType = "JSON"
|
||||
XMLFormat ReportFormatType = "XML"
|
||||
JUnitTestFormat ReportFormatType = "JUNIT-TEST"
|
||||
JUnitStepFormat ReportFormatType = "JUNIT-STEP"
|
||||
JUnitOperationFormat ReportFormatType = "JUNIT-OPERATION"
|
||||
NoReport ReportFormatType = ""
|
||||
)
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// Create represents a set of resources that should be created.
|
||||
// If a resource already exists in the cluster it will fail.
|
||||
type Create struct {
|
||||
// Timeout for the operation. Overrides the global timeout set in the Configuration.
|
||||
// +optional
|
||||
Timeout *metav1.Duration `json:"timeout,omitempty"`
|
||||
|
||||
// Bindings defines additional binding key/values.
|
||||
// +optional
|
||||
Bindings []Binding `json:"bindings,omitempty"`
|
||||
|
||||
// Outputs defines output bindings.
|
||||
// +optional
|
||||
Outputs []Output `json:"outputs,omitempty"`
|
||||
|
||||
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
|
||||
// +optional
|
||||
Cluster string `json:"cluster,omitempty"`
|
||||
|
||||
// FileRefOrResource provides a reference to the file containing the resources to be created.
|
||||
FileRefOrResource `json:",inline"`
|
||||
|
||||
// Template determines whether resources should be considered for templating.
|
||||
// +optional
|
||||
Template *bool `json:"template,omitempty"`
|
||||
|
||||
// DryRun determines whether the file should be applied in dry run mode.
|
||||
// +optional
|
||||
DryRun *bool `json:"dryRun,omitempty"`
|
||||
|
||||
// Expect defines a list of matched checks to validate the operation outcome.
|
||||
// +optional
|
||||
Expect []Expectation `json:"expect,omitempty"`
|
||||
}
|
|
@ -1,31 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// Delete is a reference to an object that should be deleted
|
||||
type Delete struct {
|
||||
// Timeout for the operation. Overrides the global timeout set in the Configuration.
|
||||
// +optional
|
||||
Timeout *metav1.Duration `json:"timeout,omitempty"`
|
||||
|
||||
// Bindings defines additional binding key/values.
|
||||
// +optional
|
||||
Bindings []Binding `json:"bindings,omitempty"`
|
||||
|
||||
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
|
||||
// +optional
|
||||
Cluster string `json:"cluster,omitempty"`
|
||||
|
||||
// Template determines whether resources should be considered for templating.
|
||||
// +optional
|
||||
Template *bool `json:"template,omitempty"`
|
||||
|
||||
// ObjectReference determines objects to be deleted.
|
||||
ObjectReference `json:"ref"`
|
||||
|
||||
// Expect defines a list of matched checks to validate the operation outcome.
|
||||
// +optional
|
||||
Expect []Expectation `json:"expect,omitempty"`
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// Describe defines how to describe resources.
|
||||
type Describe struct {
|
||||
// Timeout for the operation. Overrides the global timeout set in the Configuration.
|
||||
// +optional
|
||||
Timeout *metav1.Duration `json:"timeout,omitempty"`
|
||||
|
||||
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
|
||||
// +optional
|
||||
Cluster string `json:"cluster,omitempty"`
|
||||
|
||||
// ResourceReference referenced resource type.
|
||||
ResourceReference `json:",inline"`
|
||||
|
||||
// ObjectLabelsSelector determines the selection process of referenced objects.
|
||||
ObjectLabelsSelector `json:",inline"`
|
||||
|
||||
// Show Events indicates whether to include related events.
|
||||
// +optional
|
||||
ShowEvents *bool `json:"showEvents,omitempty"`
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// Error represents an anticipated error condition that may arise during testing.
|
||||
// Instead of treating such an error as a test failure, it acknowledges it as expected.
|
||||
type Error struct {
|
||||
// Timeout for the operation. Overrides the global timeout set in the Configuration.
|
||||
// +optional
|
||||
Timeout *metav1.Duration `json:"timeout,omitempty"`
|
||||
|
||||
// Bindings defines additional binding key/values.
|
||||
// +optional
|
||||
Bindings []Binding `json:"bindings,omitempty"`
|
||||
|
||||
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
|
||||
// +optional
|
||||
Cluster string `json:"cluster,omitempty"`
|
||||
|
||||
// FileRefOrAssert provides a reference to the expected error.
|
||||
FileRefOrCheck `json:",inline"`
|
||||
|
||||
// Template determines whether resources should be considered for templating.
|
||||
// +optional
|
||||
Template *bool `json:"template,omitempty"`
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// Events defines how to collect events.
|
||||
type Events struct {
|
||||
// Timeout for the operation. Overrides the global timeout set in the Configuration.
|
||||
// +optional
|
||||
Timeout *metav1.Duration `json:"timeout,omitempty"`
|
||||
|
||||
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
|
||||
// +optional
|
||||
Cluster string `json:"cluster,omitempty"`
|
||||
|
||||
// ObjectLabelsSelector determines the selection process of referenced objects.
|
||||
ObjectLabelsSelector `json:",inline"`
|
||||
|
||||
// Format determines the output format (json or yaml).
|
||||
// +optional
|
||||
Format Format `json:"format,omitempty"`
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
// Expectation represents a check to be applied on the result of an operation
|
||||
// with a match filter to determine if the verification should be considered.
|
||||
type Expectation struct {
|
||||
// Match defines the matching statement.
|
||||
// +optional
|
||||
Match *Match `json:"match,omitempty"`
|
||||
|
||||
// Check defines the verification statement.
|
||||
Check Check `json:"check"`
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
// FileRef represents a file reference.
|
||||
type FileRef struct {
|
||||
// File is the path to the referenced file. This can be a direct path to a file
|
||||
// or an expression that matches multiple files, such as "manifest/*.yaml" for all YAML
|
||||
// files within the "manifest" directory.
|
||||
File string `json:"file,omitempty"`
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
// FileRefOrCheck represents a file reference or resource.
|
||||
type FileRefOrCheck struct {
|
||||
// FileRef provides a reference to the file containing the resources to be applied.
|
||||
// +optional
|
||||
FileRef `json:",inline"`
|
||||
|
||||
// Check provides a check used in assertions.
|
||||
// +optional
|
||||
Check *Check `json:"resource,omitempty"`
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
)
|
||||
|
||||
// FileRefOrResource represents a file reference or resource.
|
||||
type FileRefOrResource struct {
|
||||
// FileRef provides a reference to the file containing the resources to be applied.
|
||||
// +optional
|
||||
FileRef `json:",inline"`
|
||||
|
||||
// Resource provides a resource to be applied.
|
||||
// +kubebuilder:validation:XEmbeddedResource
|
||||
// +kubebuilder:pruning:PreserveUnknownFields
|
||||
// +optional
|
||||
Resource *unstructured.Unstructured `json:"resource,omitempty"`
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
// Format determines the output format (json or yaml).
|
||||
// +kubebuilder:validation:Pattern=`^(?:json|yaml|\(.+\))$`
|
||||
type Format string
|
|
@ -1,26 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// Get defines how to get resources.
|
||||
type Get struct {
|
||||
// Timeout for the operation. Overrides the global timeout set in the Configuration.
|
||||
// +optional
|
||||
Timeout *metav1.Duration `json:"timeout,omitempty"`
|
||||
|
||||
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
|
||||
// +optional
|
||||
Cluster string `json:"cluster,omitempty"`
|
||||
|
||||
// ResourceReference referenced resource type.
|
||||
ResourceReference `json:",inline"`
|
||||
|
||||
// ObjectLabelsSelector determines the selection process of referenced objects.
|
||||
ObjectLabelsSelector `json:",inline"`
|
||||
|
||||
// Format determines the output format (json or yaml).
|
||||
// +optional
|
||||
Format Format `json:"format,omitempty"`
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
// Match represents a match condition against an evaluated object.
|
||||
type Match = Any
|
|
@ -1,20 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
// ObjectLabelsSelector represents a strategy to select objects.
|
||||
// For a single object name and namespace are used to identify the object.
|
||||
// For multiple objects use selector.
|
||||
type ObjectLabelsSelector struct {
|
||||
// Namespace of the referent.
|
||||
// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
|
||||
// +optional
|
||||
Namespace string `json:"namespace,omitempty"`
|
||||
|
||||
// Name of the referent.
|
||||
// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
|
||||
// +optional
|
||||
Name string `json:"name,omitempty"`
|
||||
|
||||
// Selector defines labels selector.
|
||||
// +optional
|
||||
Selector string `json:"selector,omitempty"`
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
// ObjectReference represents one or more objects with a specific apiVersion and kind.
|
||||
// For a single object name and namespace are used to identify the object.
|
||||
// For multiple objects use labels.
|
||||
type ObjectReference struct {
|
||||
// ObjectType determines the type of referenced objects.
|
||||
ObjectType `json:",inline"`
|
||||
|
||||
// ObjectSelector determines the selection process of referenced objects.
|
||||
ObjectSelector `json:",inline"`
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
// ObjectSelector represents a strategy to select objects.
|
||||
// For a single object name and namespace are used to identify the object.
|
||||
// For multiple objects use labels.
|
||||
type ObjectSelector struct {
|
||||
// Namespace of the referent.
|
||||
// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
|
||||
// +optional
|
||||
Namespace string `json:"namespace,omitempty"`
|
||||
|
||||
// Name of the referent.
|
||||
// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
|
||||
// +optional
|
||||
Name string `json:"name,omitempty"`
|
||||
|
||||
// Label selector to match objects to delete
|
||||
// +optional
|
||||
Labels map[string]string `json:"labels,omitempty"`
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
// ObjectType represents a specific apiVersion and kind.
|
||||
type ObjectType struct {
|
||||
// API version of the referent.
|
||||
APIVersion string `json:"apiVersion"`
|
||||
|
||||
// Kind of the referent.
|
||||
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
|
||||
Kind string `json:"kind"`
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
package v1alpha1
|
||||
|
||||
// Operation defines a single operation, only one action is permitted for a given operation.
|
||||
type Operation struct {
|
||||
// OperationBase defines common elements to all operations.
|
||||
type OperationBase struct {
|
||||
// Description contains a description of the operation.
|
||||
// +optional
|
||||
Description string `json:"description,omitempty"`
|
||||
|
@ -10,6 +10,28 @@ type Operation struct {
|
|||
// Even if the test continues executing, it will still be reported as failed.
|
||||
// +optional
|
||||
ContinueOnError *bool `json:"continueOnError,omitempty"`
|
||||
}
|
||||
|
||||
// Operation defines a single operation, only one action is permitted for a given operation.
|
||||
// +kubebuilder:oneOf:={required:{apply}}
|
||||
// +kubebuilder:oneOf:={required:{assert}}
|
||||
// +kubebuilder:oneOf:={required:{command}}
|
||||
// +kubebuilder:oneOf:={required:{create}}
|
||||
// +kubebuilder:oneOf:={required:{delete}}
|
||||
// +kubebuilder:oneOf:={required:{describe}}
|
||||
// +kubebuilder:oneOf:={required:{error}}
|
||||
// +kubebuilder:oneOf:={required:{events}}
|
||||
// +kubebuilder:oneOf:={required:{patch}}
|
||||
// +kubebuilder:oneOf:={required:{podLogs}}
|
||||
// +kubebuilder:oneOf:={required:{proxy}}
|
||||
// +kubebuilder:oneOf:={required:{script}}
|
||||
// +kubebuilder:oneOf:={required:{sleep}}
|
||||
// +kubebuilder:oneOf:={required:{update}}
|
||||
// +kubebuilder:oneOf:={required:{wait}}
|
||||
type Operation struct {
|
||||
// OperationBase defines common elements to all operations.
|
||||
// +optional
|
||||
OperationBase `json:",inline"`
|
||||
|
||||
// Apply represents resources that should be applied for this test step. This can include things
|
||||
// like configuration settings or any other resources that need to be available during the test.
|
||||
|
@ -32,15 +54,35 @@ type Operation struct {
|
|||
// +optional
|
||||
Delete *Delete `json:"delete,omitempty"`
|
||||
|
||||
// Describe determines the resource describe collector to execute.
|
||||
// +optional
|
||||
Describe *Describe `json:"describe,omitempty"`
|
||||
|
||||
// Error represents the expected errors for this test step. If any of these errors occur, the test
|
||||
// will consider them as expected; otherwise, they will be treated as test failures.
|
||||
// +optional
|
||||
Error *Error `json:"error,omitempty"`
|
||||
|
||||
// Events determines the events collector to execute.
|
||||
// +optional
|
||||
Events *Events `json:"events,omitempty"`
|
||||
|
||||
// Get determines the resource get collector to execute.
|
||||
// +optional
|
||||
Get *Get `json:"get,omitempty"`
|
||||
|
||||
// Patch represents a patch operation.
|
||||
// +optional
|
||||
Patch *Patch `json:"patch,omitempty"`
|
||||
|
||||
// PodLogs determines the pod logs collector to execute.
|
||||
// +optional
|
||||
PodLogs *PodLogs `json:"podLogs,omitempty"`
|
||||
|
||||
// Proxy runs a proxy request.
|
||||
// +optional
|
||||
Proxy *Proxy `json:"proxy,omitempty"`
|
||||
|
||||
// Script defines a script to run.
|
||||
// +optional
|
||||
Script *Script `json:"script,omitempty"`
|
||||
|
@ -70,10 +112,20 @@ func (o *Operation) Bindings() []Binding {
|
|||
return o.Create.Bindings
|
||||
case o.Delete != nil:
|
||||
return o.Delete.Bindings
|
||||
case o.Describe != nil:
|
||||
return nil
|
||||
case o.Error != nil:
|
||||
return o.Error.Bindings
|
||||
case o.Events != nil:
|
||||
return nil
|
||||
case o.Get != nil:
|
||||
return nil
|
||||
case o.Patch != nil:
|
||||
return o.Patch.Bindings
|
||||
case o.PodLogs != nil:
|
||||
return nil
|
||||
case o.Proxy != nil:
|
||||
return nil
|
||||
case o.Script != nil:
|
||||
return o.Script.Bindings
|
||||
case o.Sleep != nil:
|
||||
|
@ -98,10 +150,20 @@ func (o *Operation) Outputs() []Output {
|
|||
return o.Create.Outputs
|
||||
case o.Delete != nil:
|
||||
return nil
|
||||
case o.Describe != nil:
|
||||
return nil
|
||||
case o.Error != nil:
|
||||
return nil
|
||||
case o.Events != nil:
|
||||
return nil
|
||||
case o.Get != nil:
|
||||
return nil
|
||||
case o.Patch != nil:
|
||||
return o.Patch.Outputs
|
||||
case o.PodLogs != nil:
|
||||
return nil
|
||||
case o.Proxy != nil:
|
||||
return o.Proxy.Outputs
|
||||
case o.Script != nil:
|
||||
return o.Script.Outputs
|
||||
case o.Sleep != nil:
|
||||
|
|
|
@ -7,111 +7,110 @@ import (
|
|||
)
|
||||
|
||||
func TestOperation_Bindings(t *testing.T) {
|
||||
type fields struct {
|
||||
Apply *Apply
|
||||
Assert *Assert
|
||||
Command *Command
|
||||
Create *Create
|
||||
Delete *Delete
|
||||
Error *Error
|
||||
Patch *Patch
|
||||
Script *Script
|
||||
Sleep *Sleep
|
||||
Update *Update
|
||||
Wait *Wait
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
fields fields
|
||||
want int
|
||||
name string
|
||||
operation Operation
|
||||
want int
|
||||
}{{
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Apply: &Apply{
|
||||
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
|
||||
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Assert: &Assert{
|
||||
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
|
||||
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Command: &Command{
|
||||
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
|
||||
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Create: &Create{
|
||||
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
|
||||
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Delete: &Delete{
|
||||
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
|
||||
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Describe: &Describe{},
|
||||
},
|
||||
want: 0,
|
||||
}, {
|
||||
operation: Operation{
|
||||
Error: &Error{
|
||||
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
|
||||
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Events: &Events{},
|
||||
},
|
||||
want: 0,
|
||||
}, {
|
||||
operation: Operation{
|
||||
Get: &Get{},
|
||||
},
|
||||
want: 0,
|
||||
}, {
|
||||
operation: Operation{
|
||||
Patch: &Patch{
|
||||
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
|
||||
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
PodLogs: &PodLogs{},
|
||||
},
|
||||
want: 0,
|
||||
}, {
|
||||
operation: Operation{
|
||||
Proxy: &Proxy{},
|
||||
},
|
||||
want: 0,
|
||||
}, {
|
||||
operation: Operation{
|
||||
Script: &Script{
|
||||
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
|
||||
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Sleep: &Sleep{},
|
||||
},
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Update: &Update{
|
||||
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
|
||||
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Wait: &Wait{},
|
||||
},
|
||||
}}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
c := &Operation{
|
||||
Apply: tt.fields.Apply,
|
||||
Assert: tt.fields.Assert,
|
||||
Command: tt.fields.Command,
|
||||
Create: tt.fields.Create,
|
||||
Delete: tt.fields.Delete,
|
||||
Error: tt.fields.Error,
|
||||
Patch: tt.fields.Patch,
|
||||
Script: tt.fields.Script,
|
||||
Sleep: tt.fields.Sleep,
|
||||
Update: tt.fields.Update,
|
||||
Wait: tt.fields.Wait,
|
||||
}
|
||||
got := c.Bindings()
|
||||
got := tt.operation.Bindings()
|
||||
assert.Equal(t, tt.want, len(got))
|
||||
})
|
||||
}
|
||||
|
@ -119,102 +118,96 @@ func TestOperation_Bindings(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestOperation_Outputs(t *testing.T) {
|
||||
type fields struct {
|
||||
Apply *Apply
|
||||
Assert *Assert
|
||||
Command *Command
|
||||
Create *Create
|
||||
Delete *Delete
|
||||
Error *Error
|
||||
Patch *Patch
|
||||
Script *Script
|
||||
Sleep *Sleep
|
||||
Update *Update
|
||||
Wait *Wait
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
fields fields
|
||||
want int
|
||||
name string
|
||||
operation Operation
|
||||
want int
|
||||
}{{
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Apply: &Apply{
|
||||
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
|
||||
ActionOutputs: ActionOutputs{Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Assert: &Assert{},
|
||||
},
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Command: &Command{
|
||||
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
|
||||
ActionOutputs: ActionOutputs{Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Create: &Create{
|
||||
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
|
||||
ActionOutputs: ActionOutputs{Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Delete: &Delete{},
|
||||
},
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Describe: &Describe{},
|
||||
},
|
||||
}, {
|
||||
operation: Operation{
|
||||
Error: &Error{},
|
||||
},
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Events: &Events{},
|
||||
},
|
||||
}, {
|
||||
operation: Operation{
|
||||
Get: &Get{},
|
||||
},
|
||||
}, {
|
||||
operation: Operation{
|
||||
Patch: &Patch{
|
||||
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
|
||||
ActionOutputs: ActionOutputs{Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
PodLogs: &PodLogs{},
|
||||
},
|
||||
}, {
|
||||
operation: Operation{
|
||||
Proxy: &Proxy{},
|
||||
},
|
||||
}, {
|
||||
operation: Operation{
|
||||
Script: &Script{
|
||||
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
|
||||
ActionOutputs: ActionOutputs{Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Sleep: &Sleep{},
|
||||
},
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Update: &Update{
|
||||
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
|
||||
ActionOutputs: ActionOutputs{Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}}},
|
||||
},
|
||||
},
|
||||
want: 1,
|
||||
}, {
|
||||
fields: fields{
|
||||
operation: Operation{
|
||||
Wait: &Wait{},
|
||||
},
|
||||
}}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
c := &Operation{
|
||||
Apply: tt.fields.Apply,
|
||||
Assert: tt.fields.Assert,
|
||||
Command: tt.fields.Command,
|
||||
Create: tt.fields.Create,
|
||||
Delete: tt.fields.Delete,
|
||||
Error: tt.fields.Error,
|
||||
Patch: tt.fields.Patch,
|
||||
Script: tt.fields.Script,
|
||||
Sleep: tt.fields.Sleep,
|
||||
Update: tt.fields.Update,
|
||||
Wait: tt.fields.Wait,
|
||||
}
|
||||
got := c.Outputs()
|
||||
got := tt.operation.Outputs()
|
||||
assert.Equal(t, tt.want, len(got))
|
||||
})
|
||||
}
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
// Output represents an output binding with a match to determine if the binding must be considered or not.
|
||||
type Output struct {
|
||||
// Binding determines the binding to create when the match succeeds.
|
||||
Binding `json:",inline"`
|
||||
|
||||
// Match defines the matching statement.
|
||||
// +optional
|
||||
Match *Match `json:"match,omitempty"`
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// Patch represents a set of resources that should be patched.
|
||||
// If a resource doesn't exist yet in the cluster it will fail.
|
||||
type Patch struct {
|
||||
// Timeout for the operation. Overrides the global timeout set in the Configuration.
|
||||
// +optional
|
||||
Timeout *metav1.Duration `json:"timeout,omitempty"`
|
||||
|
||||
// Bindings defines additional binding key/values.
|
||||
// +optional
|
||||
Bindings []Binding `json:"bindings,omitempty"`
|
||||
|
||||
// Outputs defines output bindings.
|
||||
// +optional
|
||||
Outputs []Output `json:"outputs,omitempty"`
|
||||
|
||||
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
|
||||
// +optional
|
||||
Cluster string `json:"cluster,omitempty"`
|
||||
|
||||
// FileRefOrResource provides a reference to the file containing the resources to be patched.
|
||||
FileRefOrResource `json:",inline"`
|
||||
|
||||
// Template determines whether resources should be considered for templating.
|
||||
// +optional
|
||||
Template *bool `json:"template,omitempty"`
|
||||
|
||||
// DryRun determines whether the file should be applied in dry run mode.
|
||||
// +optional
|
||||
DryRun *bool `json:"dryRun,omitempty"`
|
||||
|
||||
// Expect defines a list of matched checks to validate the operation outcome.
|
||||
// +optional
|
||||
Expect []Expectation `json:"expect,omitempty"`
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// PodLogs defines how to collect pod logs.
|
||||
type PodLogs struct {
|
||||
// Timeout for the operation. Overrides the global timeout set in the Configuration.
|
||||
// +optional
|
||||
Timeout *metav1.Duration `json:"timeout,omitempty"`
|
||||
|
||||
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
|
||||
// +optional
|
||||
Cluster string `json:"cluster,omitempty"`
|
||||
|
||||
// ObjectLabelsSelector determines the selection process of referenced objects.
|
||||
ObjectLabelsSelector `json:",inline"`
|
||||
|
||||
// Container in pod to get logs from else --all-containers is used.
|
||||
// +optional
|
||||
Container string `json:"container,omitempty"`
|
||||
|
||||
// Tail is the number of last lines to collect from pods. If omitted or zero,
|
||||
// then the default is 10 if you use a selector, or -1 (all) if you use a pod name.
|
||||
// This matches default behavior of `kubectl logs`.
|
||||
// +optional
|
||||
Tail *int `json:"tail,omitempty"`
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
// ResourceReference represents a resource (API), it can be represented with a resource or a kind.
|
||||
// Optionally an apiVersion can be specified.
|
||||
type ResourceReference struct {
|
||||
// API version of the referent.
|
||||
// +optional
|
||||
APIVersion string `json:"apiVersion,omitempty"`
|
||||
|
||||
// Kind of the referent.
|
||||
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
|
||||
// +optional
|
||||
Kind string `json:"kind,omitempty"`
|
||||
|
||||
// Resource name of the referent.
|
||||
// +optional
|
||||
Resource string `json:"resource,omitempty"`
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// Script describes a script to run as a part of a test step.
|
||||
type Script struct {
|
||||
// Timeout for the operation. Overrides the global timeout set in the Configuration.
|
||||
// +optional
|
||||
Timeout *metav1.Duration `json:"timeout,omitempty"`
|
||||
|
||||
// Bindings defines additional binding key/values.
|
||||
// +optional
|
||||
Bindings []Binding `json:"bindings,omitempty"`
|
||||
|
||||
// Outputs defines output bindings.
|
||||
// +optional
|
||||
Outputs []Output `json:"outputs,omitempty"`
|
||||
|
||||
// Env defines additional environment variables.
|
||||
// +optional
|
||||
Env []Binding `json:"env,omitempty"`
|
||||
|
||||
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
|
||||
// +optional
|
||||
Cluster string `json:"cluster,omitempty"`
|
||||
|
||||
// Content defines a shell script (run with "sh -c ...").
|
||||
// +optional
|
||||
Content string `json:"content,omitempty"`
|
||||
|
||||
// SkipLogOutput removes the output from the command. Useful for sensitive logs or to reduce noise.
|
||||
// +optional
|
||||
SkipLogOutput bool `json:"skipLogOutput,omitempty"`
|
||||
|
||||
// Check is an assertion tree to validate the operation outcome.
|
||||
// +optional
|
||||
Check *Check `json:"check,omitempty"`
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// Sleep represents a duration while nothing happens.
|
||||
type Sleep struct {
|
||||
// Duration is the delay used for sleeping.
|
||||
Duration metav1.Duration `json:"duration"`
|
||||
}
|
|
@ -0,0 +1,133 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// +genclient
|
||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
// +kubebuilder:object:root=true
|
||||
// +kubebuilder:resource:scope=Cluster
|
||||
// +kubebuilder:storageversion
|
||||
|
||||
// StepTemplate is the resource that contains a step definition.
|
||||
type StepTemplate struct {
|
||||
metav1.TypeMeta `json:",inline"`
|
||||
|
||||
// Standard object's metadata.
|
||||
// +optional
|
||||
metav1.ObjectMeta `json:"metadata,omitempty"`
|
||||
|
||||
// Test step spec.
|
||||
Spec StepTemplateSpec `json:"spec"`
|
||||
}
|
||||
|
||||
// StepTemplateSpec defines the spec of a step template.
|
||||
type StepTemplateSpec struct {
|
||||
// Bindings defines additional binding key/values.
|
||||
// +optional
|
||||
Bindings []Binding `json:"bindings,omitempty"`
|
||||
|
||||
// Try defines what the step will try to execute.
|
||||
// +kubebuilder:validation:MinItems:=1
|
||||
Try []Operation `json:"try"`
|
||||
|
||||
// Catch defines what the step will execute when an error happens.
|
||||
// +optional
|
||||
Catch []CatchFinally `json:"catch,omitempty"`
|
||||
|
||||
// Finally defines what the step will execute after the step is terminated.
|
||||
// +optional
|
||||
Finally []CatchFinally `json:"finally,omitempty"`
|
||||
|
||||
// Cleanup defines what will be executed after the test is terminated.
|
||||
// +optional
|
||||
Cleanup []CatchFinally `json:"cleanup,omitempty"`
|
||||
}
|
||||
|
||||
// TestStep contains the test step definition used in a test spec.
|
||||
// +kubebuilder:not:={required:{use},anyOf:{{required:{try}},{required:{catch}},{required:{finally}},{required:{cleanup}}}}
|
||||
type TestStep struct {
|
||||
// Name of the step.
|
||||
// +optional
|
||||
Name string `json:"name,omitempty"`
|
||||
|
||||
// Use defines a reference to a step template.
|
||||
Use *Use `json:"use,omitempty"`
|
||||
|
||||
// TestStepSpec of the step.
|
||||
TestStepSpec `json:",inline"`
|
||||
}
|
||||
|
||||
// Use defines a reference to a step template.
|
||||
type Use struct {
|
||||
// Template references a step template.
|
||||
Template string `json:"template"`
|
||||
|
||||
// With defines arguments passed to the step template.
|
||||
// +optional
|
||||
// +kubebuilder:default:={}
|
||||
With With `json:"with"`
|
||||
}
|
||||
|
||||
// With defines arguments passed to step templates.
|
||||
type With struct {
|
||||
// Bindings defines additional binding key/values.
|
||||
// +optional
|
||||
Bindings []Binding `json:"bindings,omitempty"`
|
||||
}
|
||||
|
||||
// TestStepSpec defines the desired state and behavior for each test step.
|
||||
type TestStepSpec struct {
|
||||
// Description contains a description of the test step.
|
||||
// +optional
|
||||
Description string `json:"description,omitempty"`
|
||||
|
||||
// Timeouts for the test step. Overrides the global timeouts set in the Configuration and the timeouts eventually set in the Test.
|
||||
// +optional
|
||||
Timeouts *Timeouts `json:"timeouts,omitempty"`
|
||||
|
||||
// DeletionPropagationPolicy decides if a deletion will propagate to the dependents of
|
||||
// the object, and how the garbage collector will handle the propagation.
|
||||
// Overrides the deletion propagation policy set in both the Configuration and the Test.
|
||||
// +optional
|
||||
// +kubebuilder:validation:Enum:=Orphan;Background;Foreground
|
||||
DeletionPropagationPolicy *metav1.DeletionPropagation `json:"deletionPropagationPolicy,omitempty"`
|
||||
|
||||
// Cluster defines the target cluster (will be inherited if not specified).
|
||||
// +optional
|
||||
Cluster *string `json:"cluster,omitempty"`
|
||||
|
||||
// Clusters holds a registry to clusters to support multi-cluster tests.
|
||||
// +optional
|
||||
Clusters Clusters `json:"clusters,omitempty"`
|
||||
|
||||
// SkipDelete determines whether the resources created by the step should be deleted after the test step is executed.
|
||||
// +optional
|
||||
SkipDelete *bool `json:"skipDelete,omitempty"`
|
||||
|
||||
// Template determines whether resources should be considered for templating.
|
||||
// +optional
|
||||
Template *bool `json:"template,omitempty"`
|
||||
|
||||
// Bindings defines additional binding key/values.
|
||||
// +optional
|
||||
Bindings []Binding `json:"bindings,omitempty"`
|
||||
|
||||
// Try defines what the step will try to execute.
|
||||
// +kubebuilder:validation:MinItems:=1
|
||||
// +optional
|
||||
Try []Operation `json:"try"`
|
||||
|
||||
// Catch defines what the step will execute when an error happens.
|
||||
// +optional
|
||||
Catch []CatchFinally `json:"catch,omitempty"`
|
||||
|
||||
// Finally defines what the step will execute after the step is terminated.
|
||||
// +optional
|
||||
Finally []CatchFinally `json:"finally,omitempty"`
|
||||
|
||||
// Cleanup defines what will be executed after the test is terminated.
|
||||
// +optional
|
||||
Cleanup []CatchFinally `json:"cleanup,omitempty"`
|
||||
}
|
|
@ -8,6 +8,7 @@ import (
|
|||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
// +kubebuilder:object:root=true
|
||||
// +kubebuilder:resource:scope=Cluster
|
||||
// +kubebuilder:storageversion
|
||||
|
||||
// Test is the resource that contains a test definition.
|
||||
type Test struct {
|
||||
|
@ -20,3 +21,88 @@ type Test struct {
|
|||
// Test spec.
|
||||
Spec TestSpec `json:"spec"`
|
||||
}
|
||||
|
||||
// TestSpec contains the test spec.
|
||||
type TestSpec struct {
|
||||
// Description contains a description of the test.
|
||||
// +optional
|
||||
Description string `json:"description,omitempty"`
|
||||
|
||||
// FailFast determines whether the test should stop upon encountering the first failure.
|
||||
// +optional
|
||||
FailFast *bool `json:"failFast,omitempty"`
|
||||
|
||||
// Timeouts for the test. Overrides the global timeouts set in the Configuration on a per operation basis.
|
||||
// +optional
|
||||
Timeouts *Timeouts `json:"timeouts,omitempty"`
|
||||
|
||||
// Cluster defines the target cluster (will be inherited if not specified).
|
||||
// +optional
|
||||
Cluster *string `json:"cluster,omitempty"`
|
||||
|
||||
// Clusters holds a registry to clusters to support multi-cluster tests.
|
||||
// +optional
|
||||
Clusters Clusters `json:"clusters,omitempty"`
|
||||
|
||||
// Skip determines whether the test should skipped.
|
||||
// +optional
|
||||
Skip *bool `json:"skip,omitempty"`
|
||||
|
||||
// Concurrent determines whether the test should run concurrently with other tests.
|
||||
// +optional
|
||||
Concurrent *bool `json:"concurrent,omitempty"`
|
||||
|
||||
// SkipDelete determines whether the resources created by the test should be deleted after the test is executed.
|
||||
// +optional
|
||||
SkipDelete *bool `json:"skipDelete,omitempty"`
|
||||
|
||||
// Template determines whether resources should be considered for templating.
|
||||
// +optional
|
||||
Template *bool `json:"template,omitempty"`
|
||||
|
||||
// Namespace determines whether the test should run in a random ephemeral namespace or not.
|
||||
// +optional
|
||||
Namespace string `json:"namespace,omitempty"`
|
||||
|
||||
// NamespaceTemplate defines a template to create the test namespace.
|
||||
// +optional
|
||||
NamespaceTemplate *Any `json:"namespaceTemplate,omitempty"`
|
||||
|
||||
// Scenarios defines test scenarios.
|
||||
// +optional
|
||||
Scenarios []Scenario `json:"scenarios,omitempty"`
|
||||
|
||||
// Bindings defines additional binding key/values.
|
||||
// +optional
|
||||
Bindings []Binding `json:"bindings,omitempty"`
|
||||
|
||||
// Steps defining the test.
|
||||
Steps []TestStep `json:"steps"`
|
||||
|
||||
// Catch defines what the steps will execute when an error happens.
|
||||
// This will be combined with catch handlers defined at the step level.
|
||||
// +optional
|
||||
Catch []CatchFinally `json:"catch,omitempty"`
|
||||
|
||||
// ForceTerminationGracePeriod forces the termination grace period on pods, statefulsets, daemonsets and deployments.
|
||||
// +optional
|
||||
ForceTerminationGracePeriod *metav1.Duration `json:"forceTerminationGracePeriod,omitempty"`
|
||||
|
||||
// DelayBeforeCleanup adds a delay between the time a test ends and the time cleanup starts.
|
||||
// +optional
|
||||
DelayBeforeCleanup *metav1.Duration `json:"delayBeforeCleanup,omitempty"`
|
||||
|
||||
// DeletionPropagationPolicy decides if a deletion will propagate to the dependents of
|
||||
// the object, and how the garbage collector will handle the propagation.
|
||||
// Overrides the deletion propagation policy set in the Configuration.
|
||||
// +optional
|
||||
// +kubebuilder:validation:Enum:=Orphan;Background;Foreground
|
||||
DeletionPropagationPolicy *metav1.DeletionPropagation `json:"deletionPropagationPolicy,omitempty"`
|
||||
}
|
||||
|
||||
// Scenario defines per scenario bindings.
|
||||
type Scenario struct {
|
||||
// Bindings defines binding key/values.
|
||||
// +optional
|
||||
Bindings []Binding `json:"bindings,omitempty"`
|
||||
}
|
||||
|
|
|
@ -1,64 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// TestSpec contains the test spec.
|
||||
type TestSpec struct {
|
||||
// Description contains a description of the test.
|
||||
// +optional
|
||||
Description string `json:"description,omitempty"`
|
||||
|
||||
// Timeouts for the test. Overrides the global timeouts set in the Configuration on a per operation basis.
|
||||
// +optional
|
||||
Timeouts *Timeouts `json:"timeouts,omitempty"`
|
||||
|
||||
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
|
||||
// +optional
|
||||
Cluster string `json:"cluster,omitempty"`
|
||||
|
||||
// Skip determines whether the test should skipped.
|
||||
// +optional
|
||||
Skip *bool `json:"skip,omitempty"`
|
||||
|
||||
// Concurrent determines whether the test should run concurrently with other tests.
|
||||
// +optional
|
||||
Concurrent *bool `json:"concurrent,omitempty"`
|
||||
|
||||
// SkipDelete determines whether the resources created by the test should be deleted after the test is executed.
|
||||
// +optional
|
||||
SkipDelete *bool `json:"skipDelete,omitempty"`
|
||||
|
||||
// Template determines whether resources should be considered for templating.
|
||||
// +optional
|
||||
Template *bool `json:"template,omitempty"`
|
||||
|
||||
// Namespace determines whether the test should run in a random ephemeral namespace or not.
|
||||
// +optional
|
||||
Namespace string `json:"namespace,omitempty"`
|
||||
|
||||
// NamespaceTemplate defines a template to create the test namespace.
|
||||
// +optional
|
||||
NamespaceTemplate *Any `json:"namespaceTemplate,omitempty"`
|
||||
|
||||
// Bindings defines additional binding key/values.
|
||||
// +optional
|
||||
Bindings []Binding `json:"bindings,omitempty"`
|
||||
|
||||
// Steps defining the test.
|
||||
Steps []TestStep `json:"steps"`
|
||||
|
||||
// Catch defines what the steps will execute when an error happens.
|
||||
// This will be combined with catch handlers defined at the step level.
|
||||
// +optional
|
||||
Catch []Catch `json:"catch,omitempty"`
|
||||
|
||||
// ForceTerminationGracePeriod forces the termination grace period on pods, statefulsets, daemonsets and deployments.
|
||||
// +optional
|
||||
ForceTerminationGracePeriod *metav1.Duration `json:"forceTerminationGracePeriod,omitempty"`
|
||||
|
||||
// DelayBeforeCleanup adds a delay between the time a test ends and the time cleanup starts.
|
||||
// +optional
|
||||
DelayBeforeCleanup *metav1.Duration `json:"delayBeforeCleanup,omitempty"`
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
// TestStep contains the test step definition used in a test spec.
|
||||
type TestStep struct {
|
||||
// Name of the step.
|
||||
// +optional
|
||||
Name string `json:"name,omitempty"`
|
||||
|
||||
// TestStepSpec of the step.
|
||||
TestStepSpec `json:",inline"`
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
// TestStepSpec defines the desired state and behavior for each test step.
|
||||
type TestStepSpec struct {
|
||||
// Description contains a description of the test step.
|
||||
// +optional
|
||||
Description string `json:"description,omitempty"`
|
||||
|
||||
// Timeouts for the test step. Overrides the global timeouts set in the Configuration and the timeouts eventually set in the Test.
|
||||
// +optional
|
||||
Timeouts *Timeouts `json:"timeouts,omitempty"`
|
||||
|
||||
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
|
||||
// +optional
|
||||
Cluster string `json:"cluster,omitempty"`
|
||||
|
||||
// SkipDelete determines whether the resources created by the step should be deleted after the test step is executed.
|
||||
// +optional
|
||||
SkipDelete *bool `json:"skipDelete,omitempty"`
|
||||
|
||||
// Template determines whether resources should be considered for templating.
|
||||
// +optional
|
||||
Template *bool `json:"template,omitempty"`
|
||||
|
||||
// Bindings defines additional binding key/values.
|
||||
// +optional
|
||||
Bindings []Binding `json:"bindings,omitempty"`
|
||||
|
||||
// Try defines what the step will try to execute.
|
||||
// +kubebuilder:validation:MinItems:=1
|
||||
Try []Operation `json:"try"`
|
||||
|
||||
// Catch defines what the step will execute when an error happens.
|
||||
// +optional
|
||||
Catch []Catch `json:"catch,omitempty"`
|
||||
|
||||
// Finally defines what the step will execute after the step is terminated.
|
||||
// +optional
|
||||
Finally []Finally `json:"finally,omitempty"`
|
||||
}
|
|
@ -1,93 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
const (
|
||||
DefaultApplyTimeout = 5 * time.Second
|
||||
DefaultAssertTimeout = 30 * time.Second
|
||||
DefaultCleanupTimeout = 30 * time.Second
|
||||
DefaultDeleteTimeout = 15 * time.Second
|
||||
DefaultErrorTimeout = 30 * time.Second
|
||||
DefaultExecTimeout = 5 * time.Second
|
||||
)
|
||||
|
||||
// Timeouts contains timeouts per operation.
|
||||
type Timeouts struct {
|
||||
// Apply defines the timeout for the apply operation
|
||||
Apply *metav1.Duration `json:"apply,omitempty"`
|
||||
|
||||
// Assert defines the timeout for the assert operation
|
||||
Assert *metav1.Duration `json:"assert,omitempty"`
|
||||
|
||||
// Cleanup defines the timeout for the cleanup operation
|
||||
Cleanup *metav1.Duration `json:"cleanup,omitempty"`
|
||||
|
||||
// Delete defines the timeout for the delete operation
|
||||
Delete *metav1.Duration `json:"delete,omitempty"`
|
||||
|
||||
// Error defines the timeout for the error operation
|
||||
Error *metav1.Duration `json:"error,omitempty"`
|
||||
|
||||
// Exec defines the timeout for exec operations
|
||||
Exec *metav1.Duration `json:"exec,omitempty"`
|
||||
}
|
||||
|
||||
func durationOrDefault(to *metav1.Duration, def time.Duration) time.Duration {
|
||||
if to != nil {
|
||||
return to.Duration
|
||||
}
|
||||
return def
|
||||
}
|
||||
|
||||
func (t Timeouts) ApplyDuration() time.Duration {
|
||||
return durationOrDefault(t.Apply, DefaultApplyTimeout)
|
||||
}
|
||||
|
||||
func (t Timeouts) AssertDuration() time.Duration {
|
||||
return durationOrDefault(t.Assert, DefaultAssertTimeout)
|
||||
}
|
||||
|
||||
func (t Timeouts) CleanupDuration() time.Duration {
|
||||
return durationOrDefault(t.Cleanup, DefaultCleanupTimeout)
|
||||
}
|
||||
|
||||
func (t Timeouts) DeleteDuration() time.Duration {
|
||||
return durationOrDefault(t.Delete, DefaultDeleteTimeout)
|
||||
}
|
||||
|
||||
func (t Timeouts) ErrorDuration() time.Duration {
|
||||
return durationOrDefault(t.Error, DefaultErrorTimeout)
|
||||
}
|
||||
|
||||
func (t Timeouts) ExecDuration() time.Duration {
|
||||
return durationOrDefault(t.Exec, DefaultExecTimeout)
|
||||
}
|
||||
|
||||
func (t Timeouts) Combine(override *Timeouts) Timeouts {
|
||||
if override == nil {
|
||||
return t
|
||||
}
|
||||
if override.Apply != nil {
|
||||
t.Apply = override.Apply
|
||||
}
|
||||
if override.Assert != nil {
|
||||
t.Assert = override.Assert
|
||||
}
|
||||
if override.Error != nil {
|
||||
t.Error = override.Error
|
||||
}
|
||||
if override.Delete != nil {
|
||||
t.Delete = override.Delete
|
||||
}
|
||||
if override.Cleanup != nil {
|
||||
t.Cleanup = override.Cleanup
|
||||
}
|
||||
if override.Exec != nil {
|
||||
t.Exec = override.Exec
|
||||
}
|
||||
return t
|
||||
}
|
|
@ -1,103 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
func Test_durationOrDefault(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
to *metav1.Duration
|
||||
def time.Duration
|
||||
want time.Duration
|
||||
}{{
|
||||
name: "nil",
|
||||
to: nil,
|
||||
def: time.Second * 3,
|
||||
want: time.Second * 3,
|
||||
}, {
|
||||
name: "not nil",
|
||||
to: &metav1.Duration{Duration: time.Second * 2},
|
||||
def: time.Second * 3,
|
||||
want: time.Second * 2,
|
||||
}}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got := durationOrDefault(tt.to, tt.def)
|
||||
assert.Equal(t, tt.want, got)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestTimeouts_Defaults(t *testing.T) {
|
||||
var timeouts Timeouts
|
||||
assert.Equal(t, DefaultApplyTimeout, timeouts.ApplyDuration())
|
||||
assert.Equal(t, DefaultAssertTimeout, timeouts.AssertDuration())
|
||||
assert.Equal(t, DefaultCleanupTimeout, timeouts.CleanupDuration())
|
||||
assert.Equal(t, DefaultDeleteTimeout, timeouts.DeleteDuration())
|
||||
assert.Equal(t, DefaultErrorTimeout, timeouts.ErrorDuration())
|
||||
assert.Equal(t, DefaultExecTimeout, timeouts.ExecDuration())
|
||||
}
|
||||
|
||||
func TestTimeouts_NoyDefaults(t *testing.T) {
|
||||
to := &metav1.Duration{Duration: time.Hour * 2}
|
||||
timeouts := Timeouts{
|
||||
Apply: to,
|
||||
Assert: to,
|
||||
Cleanup: to,
|
||||
Delete: to,
|
||||
Error: to,
|
||||
Exec: to,
|
||||
}
|
||||
assert.Equal(t, time.Hour*2, timeouts.ApplyDuration())
|
||||
assert.Equal(t, time.Hour*2, timeouts.AssertDuration())
|
||||
assert.Equal(t, time.Hour*2, timeouts.CleanupDuration())
|
||||
assert.Equal(t, time.Hour*2, timeouts.DeleteDuration())
|
||||
assert.Equal(t, time.Hour*2, timeouts.ErrorDuration())
|
||||
assert.Equal(t, time.Hour*2, timeouts.ExecDuration())
|
||||
}
|
||||
|
||||
func TestTimeouts_Combine(t *testing.T) {
|
||||
base := Timeouts{
|
||||
Apply: &metav1.Duration{Duration: 1 * time.Minute},
|
||||
Assert: &metav1.Duration{Duration: 1 * time.Minute},
|
||||
Cleanup: &metav1.Duration{Duration: 1 * time.Minute},
|
||||
Delete: &metav1.Duration{Duration: 1 * time.Minute},
|
||||
Error: &metav1.Duration{Duration: 1 * time.Minute},
|
||||
Exec: &metav1.Duration{Duration: 1 * time.Minute},
|
||||
}
|
||||
override := Timeouts{
|
||||
Apply: &metav1.Duration{Duration: 2 * time.Minute},
|
||||
Assert: &metav1.Duration{Duration: 2 * time.Minute},
|
||||
Cleanup: &metav1.Duration{Duration: 2 * time.Minute},
|
||||
Delete: &metav1.Duration{Duration: 2 * time.Minute},
|
||||
Error: &metav1.Duration{Duration: 2 * time.Minute},
|
||||
Exec: &metav1.Duration{Duration: 2 * time.Minute},
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
base Timeouts
|
||||
override *Timeouts
|
||||
want Timeouts
|
||||
}{{
|
||||
name: "nil",
|
||||
base: base,
|
||||
override: nil,
|
||||
want: base,
|
||||
}, {
|
||||
name: "override",
|
||||
base: base,
|
||||
override: &override,
|
||||
want: override,
|
||||
}}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got := tt.base.Combine(tt.override)
|
||||
assert.Equal(t, tt.want, got)
|
||||
})
|
||||
}
|
||||
}
|
|
@ -0,0 +1,233 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"regexp"
|
||||
|
||||
"github.com/jmespath-community/go-jmespath/pkg/binding"
|
||||
"github.com/jmespath-community/go-jmespath/pkg/parsing"
|
||||
"github.com/kyverno/chainsaw/pkg/expressions"
|
||||
"github.com/kyverno/kyverno-json/pkg/apis/policy/v1alpha1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
var identifier = regexp.MustCompile(`^(?:\w+|\(.+\))$`)
|
||||
|
||||
// Any represents any type.
|
||||
type Any = v1alpha1.Any
|
||||
|
||||
// Binding represents a key/value set as a binding in an executing test.
|
||||
type Binding struct {
|
||||
// Name the name of the binding.
|
||||
// +kubebuilder:validation:Type:=string
|
||||
// +kubebuilder:validation:Pattern:=`^(?:\w+|\(.+\))$`
|
||||
Name Expression `json:"name"`
|
||||
|
||||
// Value value of the binding.
|
||||
// +kubebuilder:validation:Schemaless
|
||||
// +kubebuilder:pruning:PreserveUnknownFields
|
||||
Value Any `json:"value"`
|
||||
}
|
||||
|
||||
func (b Binding) CheckName() error {
|
||||
if !identifier.MatchString(string(b.Name)) {
|
||||
return fmt.Errorf("invalid name %s", b.Name)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Check represents a check to be applied on the result of an operation.
|
||||
type Check = Any
|
||||
|
||||
// Cluster defines cluster config and context.
|
||||
type Cluster struct {
|
||||
// Kubeconfig is the path to the referenced file.
|
||||
Kubeconfig string `json:"kubeconfig"`
|
||||
|
||||
// Context is the name of the context to use.
|
||||
// +optional
|
||||
Context string `json:"context,omitempty"`
|
||||
}
|
||||
|
||||
// Clusters defines a cluster map.
|
||||
type Clusters map[string]Cluster
|
||||
|
||||
// Expectation represents a check to be applied on the result of an operation
|
||||
// with a match filter to determine if the verification should be considered.
|
||||
type Expectation struct {
|
||||
// Match defines the matching statement.
|
||||
// +optional
|
||||
Match *Match `json:"match,omitempty"`
|
||||
|
||||
// Check defines the verification statement.
|
||||
Check Check `json:"check"`
|
||||
}
|
||||
|
||||
// Expression defines an expression to be used in string fields.
|
||||
type Expression string
|
||||
|
||||
func (e *Expression) MarshalJSON() ([]byte, error) {
|
||||
if e == nil {
|
||||
return nil, nil
|
||||
}
|
||||
return json.Marshal(string(*e))
|
||||
}
|
||||
|
||||
func (e *Expression) UnmarshalJSON(data []byte) error {
|
||||
var statement string
|
||||
err := json.Unmarshal(data, &statement)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
*e = Expression(statement)
|
||||
expression := expressions.Parse(context.TODO(), statement)
|
||||
if expression == nil {
|
||||
return nil
|
||||
}
|
||||
if expression.Engine == "" {
|
||||
return nil
|
||||
}
|
||||
parser := parsing.NewParser()
|
||||
if _, err := parser.Parse(statement); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (e Expression) Value(ctx context.Context, bindings binding.Bindings) (string, error) {
|
||||
return expressions.String(ctx, string(e), bindings)
|
||||
}
|
||||
|
||||
// Format determines the output format (json or yaml).
|
||||
// +kubebuilder:validation:Type:=string
|
||||
// +kubebuilder:validation:Pattern:=`^(?:json|yaml|\(.+\))$`
|
||||
type Format Expression
|
||||
|
||||
// Match represents a match condition against an evaluated object.
|
||||
type Match = Any
|
||||
|
||||
// ObjectName represents an object namespace and name.
|
||||
type ObjectName struct {
|
||||
// Namespace of the referent.
|
||||
// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
|
||||
// +optional
|
||||
Namespace Expression `json:"namespace,omitempty"`
|
||||
|
||||
// Name of the referent.
|
||||
// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
|
||||
// +optional
|
||||
Name Expression `json:"name,omitempty"`
|
||||
}
|
||||
|
||||
// ObjectReference represents one or more objects with a specific apiVersion and kind.
|
||||
// For a single object name and namespace are used to identify the object.
|
||||
// For multiple objects use labels.
|
||||
type ObjectReference struct {
|
||||
ObjectType `json:",inline"`
|
||||
ObjectName `json:",inline"`
|
||||
|
||||
// Label selector to match objects to delete
|
||||
// +optional
|
||||
Labels map[string]string `json:"labels,omitempty"`
|
||||
}
|
||||
|
||||
// ObjectType represents a specific apiVersion and kind.
|
||||
type ObjectType struct {
|
||||
// API version of the referent.
|
||||
APIVersion Expression `json:"apiVersion"`
|
||||
|
||||
// Kind of the referent.
|
||||
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
|
||||
Kind Expression `json:"kind"`
|
||||
}
|
||||
|
||||
// Output represents an output binding with a match to determine if the binding must be considered or not.
|
||||
type Output struct {
|
||||
// Binding determines the binding to create when the match succeeds.
|
||||
Binding `json:",inline"`
|
||||
|
||||
// Match defines the matching statement.
|
||||
// +optional
|
||||
Match *Match `json:"match,omitempty"`
|
||||
}
|
||||
|
||||
// DefaultTimeouts contains defautl timeouts per operation.
|
||||
type DefaultTimeouts struct {
|
||||
// Apply defines the timeout for the apply operation
|
||||
// +optional
|
||||
// +kubebuilder:default:="5s"
|
||||
Apply metav1.Duration `json:"apply"`
|
||||
|
||||
// Assert defines the timeout for the assert operation
|
||||
// +optional
|
||||
// +kubebuilder:default:="30s"
|
||||
Assert metav1.Duration `json:"assert"`
|
||||
|
||||
// Cleanup defines the timeout for the cleanup operation
|
||||
// +optional
|
||||
// +kubebuilder:default:="30s"
|
||||
Cleanup metav1.Duration `json:"cleanup"`
|
||||
|
||||
// Delete defines the timeout for the delete operation
|
||||
// +optional
|
||||
// +kubebuilder:default:="15s"
|
||||
Delete metav1.Duration `json:"delete"`
|
||||
|
||||
// Error defines the timeout for the error operation
|
||||
// +optional
|
||||
// +kubebuilder:default:="30s"
|
||||
Error metav1.Duration `json:"error"`
|
||||
|
||||
// Exec defines the timeout for exec operations
|
||||
// +optional
|
||||
// +kubebuilder:default:="5s"
|
||||
Exec metav1.Duration `json:"exec"`
|
||||
}
|
||||
|
||||
func (t DefaultTimeouts) Combine(override *Timeouts) DefaultTimeouts {
|
||||
if override == nil {
|
||||
return t
|
||||
}
|
||||
if override.Apply != nil {
|
||||
t.Apply = *override.Apply
|
||||
}
|
||||
if override.Assert != nil {
|
||||
t.Assert = *override.Assert
|
||||
}
|
||||
if override.Error != nil {
|
||||
t.Error = *override.Error
|
||||
}
|
||||
if override.Delete != nil {
|
||||
t.Delete = *override.Delete
|
||||
}
|
||||
if override.Cleanup != nil {
|
||||
t.Cleanup = *override.Cleanup
|
||||
}
|
||||
if override.Exec != nil {
|
||||
t.Exec = *override.Exec
|
||||
}
|
||||
return t
|
||||
}
|
||||
|
||||
// Timeouts contains timeouts per operation.
|
||||
type Timeouts struct {
|
||||
// Apply defines the timeout for the apply operation
|
||||
Apply *metav1.Duration `json:"apply,omitempty"`
|
||||
|
||||
// Assert defines the timeout for the assert operation
|
||||
Assert *metav1.Duration `json:"assert,omitempty"`
|
||||
|
||||
// Cleanup defines the timeout for the cleanup operation
|
||||
Cleanup *metav1.Duration `json:"cleanup,omitempty"`
|
||||
|
||||
// Delete defines the timeout for the delete operation
|
||||
Delete *metav1.Duration `json:"delete,omitempty"`
|
||||
|
||||
// Error defines the timeout for the error operation
|
||||
Error *metav1.Duration `json:"error,omitempty"`
|
||||
|
||||
// Exec defines the timeout for exec operations
|
||||
Exec *metav1.Duration `json:"exec,omitempty"`
|
||||
}
|
|
@ -0,0 +1,107 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
func TestBinding_CheckName(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
bindingName Expression
|
||||
bindingValue Any
|
||||
wantErr bool
|
||||
}{{
|
||||
name: "empty",
|
||||
wantErr: true,
|
||||
}, {
|
||||
name: "simple",
|
||||
bindingName: "simple",
|
||||
wantErr: false,
|
||||
}, {
|
||||
name: "with dollar",
|
||||
bindingName: "$simple",
|
||||
wantErr: true,
|
||||
}, {
|
||||
name: "with space",
|
||||
bindingName: "simple one",
|
||||
wantErr: true,
|
||||
}, {
|
||||
name: "with dot",
|
||||
bindingName: "simple.one",
|
||||
wantErr: true,
|
||||
}, {
|
||||
name: "good expression",
|
||||
bindingName: "('test')",
|
||||
wantErr: false,
|
||||
}, {
|
||||
name: "bad expression",
|
||||
bindingName: "('test'",
|
||||
wantErr: true,
|
||||
}}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
b := Binding{
|
||||
Name: tt.bindingName,
|
||||
Value: tt.bindingValue,
|
||||
}
|
||||
err := b.CheckName()
|
||||
if tt.wantErr {
|
||||
assert.Error(t, err)
|
||||
} else {
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestTimeouts_Combine(t *testing.T) {
|
||||
base := DefaultTimeouts{
|
||||
Apply: metav1.Duration{Duration: 1 * time.Minute},
|
||||
Assert: metav1.Duration{Duration: 1 * time.Minute},
|
||||
Cleanup: metav1.Duration{Duration: 1 * time.Minute},
|
||||
Delete: metav1.Duration{Duration: 1 * time.Minute},
|
||||
Error: metav1.Duration{Duration: 1 * time.Minute},
|
||||
Exec: metav1.Duration{Duration: 1 * time.Minute},
|
||||
}
|
||||
override := Timeouts{
|
||||
Apply: &metav1.Duration{Duration: 2 * time.Minute},
|
||||
Assert: &metav1.Duration{Duration: 2 * time.Minute},
|
||||
Cleanup: &metav1.Duration{Duration: 2 * time.Minute},
|
||||
Delete: &metav1.Duration{Duration: 2 * time.Minute},
|
||||
Error: &metav1.Duration{Duration: 2 * time.Minute},
|
||||
Exec: &metav1.Duration{Duration: 2 * time.Minute},
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
base DefaultTimeouts
|
||||
override *Timeouts
|
||||
want DefaultTimeouts
|
||||
}{{
|
||||
name: "nil",
|
||||
base: base,
|
||||
override: nil,
|
||||
want: base,
|
||||
}, {
|
||||
name: "override",
|
||||
base: base,
|
||||
override: &override,
|
||||
want: DefaultTimeouts{
|
||||
Apply: metav1.Duration{Duration: 2 * time.Minute},
|
||||
Assert: metav1.Duration{Duration: 2 * time.Minute},
|
||||
Cleanup: metav1.Duration{Duration: 2 * time.Minute},
|
||||
Delete: metav1.Duration{Duration: 2 * time.Minute},
|
||||
Error: metav1.Duration{Duration: 2 * time.Minute},
|
||||
Exec: metav1.Duration{Duration: 2 * time.Minute},
|
||||
},
|
||||
}}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got := tt.base.Combine(tt.override)
|
||||
assert.Equal(t, tt.want, got)
|
||||
})
|
||||
}
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// Update represents a set of resources that should be updated.
|
||||
// If a resource does not exist in the cluster it will fail.
|
||||
type Update struct {
|
||||
// Timeout for the operation. Overrides the global timeout set in the Configuration.
|
||||
// +optional
|
||||
Timeout *metav1.Duration `json:"timeout,omitempty"`
|
||||
|
||||
// Bindings defines additional binding key/values.
|
||||
// +optional
|
||||
Bindings []Binding `json:"bindings,omitempty"`
|
||||
|
||||
// Outputs defines output bindings.
|
||||
// +optional
|
||||
Outputs []Output `json:"outputs,omitempty"`
|
||||
|
||||
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
|
||||
// +optional
|
||||
Cluster string `json:"cluster,omitempty"`
|
||||
|
||||
// FileRefOrResource provides a reference to the file containing the resources to be created.
|
||||
FileRefOrResource `json:",inline"`
|
||||
|
||||
// Template determines whether resources should be considered for templating.
|
||||
// +optional
|
||||
Template *bool `json:"template,omitempty"`
|
||||
|
||||
// DryRun determines whether the file should be applied in dry run mode.
|
||||
// +optional
|
||||
DryRun *bool `json:"dryRun,omitempty"`
|
||||
|
||||
// Expect defines a list of matched checks to validate the operation outcome.
|
||||
// +optional
|
||||
Expect []Expectation `json:"expect,omitempty"`
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// Wait specifies how to perform wait operations on resources.
|
||||
type Wait struct {
|
||||
// Timeout for the operation. Specifies how long to wait for the condition to be met before timing out.
|
||||
// +optional
|
||||
Timeout *metav1.Duration `json:"timeout,omitempty"`
|
||||
|
||||
// Cluster defines the target cluster where the wait operation will be performed (default cluster will be used if not specified).
|
||||
// +optional
|
||||
Cluster string `json:"cluster,omitempty"`
|
||||
|
||||
// ResourceReference referenced resource type.
|
||||
ResourceReference `json:",inline"`
|
||||
|
||||
// ObjectLabelsSelector determines the selection process of referenced objects.
|
||||
ObjectLabelsSelector `json:",inline"`
|
||||
|
||||
// For specifies the condition to wait for.
|
||||
For `json:"for"`
|
||||
|
||||
// Format determines the output format (json or yaml).
|
||||
// +optional
|
||||
Format Format `json:"format,omitempty"`
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
// Condition represents parameters for waiting on a specific condition of a resource.
|
||||
type Condition struct {
|
||||
// Name defines the specific condition to wait for, e.g., "Available", "Ready".
|
||||
Name string `json:"name"`
|
||||
|
||||
// Value defines the specific condition status to wait for, e.g., "True", "False".
|
||||
// +optional
|
||||
Value *string `json:"value,omitempty"`
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
// Deletion represents parameters for waiting on a resource's deletion.
|
||||
type Deletion struct{}
|
|
@ -1,16 +0,0 @@
|
|||
package v1alpha1
|
||||
|
||||
// For specifies the condition to wait for.
|
||||
type For struct {
|
||||
// Deletion specifies parameters for waiting on a resource's deletion.
|
||||
// +optional
|
||||
Deletion *Deletion `json:"deletion,omitempty"`
|
||||
|
||||
// Condition specifies the condition to wait for.
|
||||
// +optional
|
||||
Condition *Condition `json:"condition,omitempty"`
|
||||
|
||||
// JsonPath specifies the json path condition to wait for.
|
||||
// +optional
|
||||
JsonPath *JsonPath `json:"jsonPath,omitempty"`
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue