Compare commits

...

80 Commits

Author SHA1 Message Date
Kubernetes Prow Robot 9ed63e10f7
Merge pull request #17599 from kubernetes/dependabot/github_actions/actions/dependency-review-action-4.7.3
build(deps): bump actions/dependency-review-action from 4.7.2 to 4.7.3
2025-08-31 08:51:09 -07:00
dependabot[bot] 416f9f5034
build(deps): bump actions/dependency-review-action from 4.7.2 to 4.7.3
Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 4.7.2 to 4.7.3.
- [Release notes](https://github.com/actions/dependency-review-action/releases)
- [Commits](bc41886e18...595b5aeba7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-31 06:01:14 +00:00
Kubernetes Prow Robot 4d977166f3
Merge pull request #17598 from hakman/remove-k8s-1-28
chore: Remove support for Kubernetes 1.28 in kOps 1.34
2025-08-30 09:49:10 -07:00
Ciprian Hacman 04fd259a7d Skip failing tests
Signed-off-by: Ciprian Hacman <ciprian@hakman.dev>
2025-08-30 16:57:49 +03:00
Kubernetes Prow Robot 1a8ce9b027
Merge pull request #17597 from hakman/release-notes-1.33
Update release notes for kOps 1.33
2025-08-30 06:41:09 -07:00
Kubernetes Prow Robot 447395427f
Merge pull request #17596 from hakman/bump-channels
chore: Bump channels with the latest releases
2025-08-30 05:49:08 -07:00
Ciprian Hacman 092073eb0c hack/update-expected.sh
Signed-off-by: Ciprian Hacman <ciprian@hakman.dev>
2025-08-30 15:37:49 +03:00
Ciprian Hacman d3b5bfceff chore: Remove support for Kubernetes 1.28
Signed-off-by: Ciprian Hacman <ciprian@hakman.dev>
2025-08-30 15:37:09 +03:00
Ciprian Hacman 285e110ed2 chore: Bump channels with the latest releases
Signed-off-by: Ciprian Hacman <ciprian@hakman.dev>
2025-08-30 14:56:48 +03:00
Kubernetes Prow Robot adfdc7797e
Merge pull request #17592 from hakman/update-asset-hashe
Update Kubernetes hashes with latest releases
2025-08-29 23:55:09 -07:00
Ciprian Hacman 6ede243f40 Update release notes for kOps 1.33
Signed-off-by: Ciprian Hacman <ciprian@hakman.dev>
2025-08-30 09:33:37 +03:00
Ciprian Hacman 66bc1860e8 Update Kubernetes hashes with latest releases 2025-08-30 08:11:17 +03:00
Kubernetes Prow Robot 7769558a63
Merge pull request #17588 from ameukam/1-34-note-packages-removal
Update 1.34 release notes
2025-08-29 21:41:09 -07:00
Arnaud Meukam 5391dbced8
Update 1.34 release notes
Follow-up of:
 - https://github.com/kubernetes/kops/pull/17587

Signed-off-by: Arnaud Meukam <ameukam@gmail.com>
2025-08-29 22:08:31 +02:00
Kubernetes Prow Robot 6bd7b39827
Merge pull request #17587 from ameukam/drop-ebtables-socat
Drop ebtables, ethtool and socat
2025-08-29 12:47:09 -07:00
Kubernetes Prow Robot 62ed422629
Merge pull request #17586 from hakman/amazon-ec2-instance-selector-v3.1.1
Update amazon-ec2-instance-selector to v3.1.1
2025-08-29 08:05:10 -07:00
Arnaud Meukam 25519c973f
Drop ebtables, ethtool and socat
Those packages are no longer required according to:
 - https://github.com/kubernetes/kubernetes/pull/127151
 - https://github.com/kubernetes/kubernetes/pull/129131

Signed-off-by: Arnaud Meukam <ameukam@gmail.com>
2025-08-29 16:57:05 +02:00
Ciprian Hacman 60ab99c154 Update amazon-ec2-instance-selector to v3.1.1 2025-08-29 17:09:37 +03:00
Kubernetes Prow Robot cd4d7ae8e4
Merge pull request #17583 from ameukam/add-nftables-package
Add nftables package
2025-08-29 03:37:09 -07:00
Arnaud Meukam 3940478b9a
Add nftables package
NFtables proxy mode is GA in Kubernetes 1.33. See: https://kubernetes.io/blog/2025/02/28/nftables-kube-proxy/
We ensure the nftables package is installed if the cluster is created if
kube-proxy mode is `nftables`.

Signed-off-by: Arnaud Meukam <ameukam@gmail.com>
2025-08-29 11:38:12 +02:00
Kubernetes Prow Robot 72d999e22d
Merge pull request #17554 from hakman/fix-coredns
coredns: Relax zonal topologySpreadConstraints
2025-08-29 00:45:09 -07:00
Ciprian Hacman 4eeb347aaa hack/update-expected.sh 2025-08-29 09:45:52 +03:00
Ciprian Hacman cbd4667d38 coredns: Relax zonal topologySpreadConstraints 2025-08-29 09:45:52 +03:00
Kubernetes Prow Robot 665265a338
Merge pull request #17547 from hakman/no-crictl-nerdctl
containerd: Don't install crictl and nerdctl by default
2025-08-28 12:45:11 -07:00
Ciprian Hacman e8419e29c4 Update docs 2025-08-28 18:58:17 +03:00
Ciprian Hacman 5bce5f397a hack/update-expected.sh 2025-08-28 18:58:17 +03:00
Ciprian Hacman 96a7fd8988 containerd: Don't install crictl and nerdctl by default 2025-08-28 18:53:20 +03:00
Arnaud M. a8001b8fba
Remove unused const, variables and function reported by Golangci-lint (#17582)
* Remove unused const, variables and function reported by Golangci-lint

Signed-off-by: Arnaud Meukam <ameukam@gmail.com>

* make gomod executed
Signed-off-by: Arnaud Meukam <ameukam@gmail.com>

---------

Signed-off-by: Arnaud Meukam <ameukam@gmail.com>
2025-08-28 07:53:13 -07:00
Kubernetes Prow Robot d8a9697152
Merge pull request #17581 from ameukam/custom-install-cgrougfs-mount
Install cgroupfs-mount for distros lower than Debian Trixie
2025-08-28 05:03:10 -07:00
Arnaud Meukam b336829add
Add detection of Debian distribution
Signed-off-by: Arnaud Meukam <ameukam@gmail.com>
2025-08-28 12:35:29 +02:00
Arnaud Meukam ddc21c750f
Install cgroupfs-mount for distros lower than Debian Trixie
According to https://tracker.debian.org/pkg/cgroupfs-mount, the package
has been removed starting with Debian 13.
Based on this, we believe it's unlikely it make it to Ubuntu 26.04.

Signed-off-by: Arnaud Meukam <ameukam@gmail.com>
2025-08-28 12:34:38 +02:00
Kubernetes Prow Robot 7850359c2f
Merge pull request #17577 from hakman/simplify-nodeup-template
nodeup: Simplify the template by removing split-commas
2025-08-24 23:51:08 -07:00
Ciprian Hacman b058094b78 hack/update-expected.sh 2025-08-25 00:25:45 +03:00
Ciprian Hacman 4e008ffe7a nodeup: Simplify the template by removing split-commas 2025-08-25 00:25:45 +03:00
Kubernetes Prow Robot 633a9b757b
Merge pull request #17571 from cloud303-pdavis/master
Upgrade AWS Load Balancer Controller to v2.13.4
2025-08-24 10:53:06 -07:00
Kubernetes Prow Robot 237479701a
Merge pull request #17562 from ameukam/bump-golangci-lint
Bump golangci-lint to v2
2025-08-24 07:39:05 -07:00
Arnaud Meukam 60895f55d7
Bump golangci-lint to v2
bumping golangci-lint to a version that support Go 1.25

Signed-off-by: Arnaud Meukam <ameukam@gmail.com>
2025-08-24 15:46:08 +02:00
Kubernetes Prow Robot dec7d23d10
Merge pull request #17576 from kubernetes/dependabot/github_actions/actions/dependency-review-action-4.7.2
build(deps): bump actions/dependency-review-action from 4.7.1 to 4.7.2
2025-08-24 01:19:06 -07:00
dependabot[bot] 47592cb53e
build(deps): bump actions/dependency-review-action from 4.7.1 to 4.7.2
Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 4.7.1 to 4.7.2.
- [Release notes](https://github.com/actions/dependency-review-action/releases)
- [Commits](da24556b54...bc41886e18)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-24 06:50:52 +00:00
Kubernetes Prow Robot 91e5ba54ea
Merge pull request #17557 from ConnorJC3/fix-al2-dnf
Use yum instead of dnf on Amazon Linux 2
2025-08-23 03:09:08 -07:00
Kubernetes Prow Robot d3a7607637
Merge pull request #17573 from rifelpet/golangcilint-fixes
Golangci-lint v2 fixes
2025-08-23 00:07:05 -07:00
Peter Rifel 2de74a73ce
Consolidate for expressions 2025-08-22 20:56:54 -05:00
Peter Rifel c98fb47eb8
Merge conditional boolean assignments 2025-08-22 20:56:53 -05:00
Peter Rifel 24f2701152
Use ReplaceAll 2025-08-22 20:52:44 -05:00
Peter Rifel 05099d65d3
Use fmt.Fprintf 2025-08-22 20:41:50 -05:00
Peter Rifel 4569dd4f98
Remove unnecessary declaration 2025-08-22 20:36:11 -05:00
Peter Rifel dc8f27f356
Remove redundant type assertions 2025-08-22 20:36:10 -05:00
Peter Rifel 669c47c4ed
Simplify boolean returns 2025-08-22 20:36:09 -05:00
Peter Rifel b9448cabe5
Remove redundant nil checks 2025-08-22 20:36:08 -05:00
Peter Rifel 3f519b48c3
Append lists 2025-08-22 20:36:07 -05:00
Peter Rifel 0338832c51
Remove redundant return 2025-08-22 20:36:07 -05:00
Peter Rifel 7694fce7cd
Simplify boolean expression 2025-08-22 20:36:06 -05:00
Peter Rifel 9d41b64f2e
Use sort.Strings 2025-08-22 20:36:05 -05:00
Peter Rifel ec67c4acdc
Simplify boolean conditionals 2025-08-22 20:36:04 -05:00
Peter Rifel 701f01a26b
Use switch/case statement 2025-08-22 20:36:02 -05:00
Peter Rifel af86a55c81
Remove duplicate imports 2025-08-22 20:05:59 -05:00
Kubernetes Prow Robot 3b3df48117
Merge pull request #17569 from ameukam/ai-agent-avoiding-loop
Add instructions to avoid loops
2025-08-22 09:15:06 -07:00
cloud303-pdavis 99b8ff05df ./hack/update-expected.sh 2025-08-21 16:07:32 -06:00
cloud303-pdavis df39d62034 Upgrade LBC manifest to v2.13.4 2025-08-21 16:03:50 -06:00
Arnaud Meukam 5c0e35e4e2
Add instructions to avoid loops
In some cases, the AI agent will loop on the same tasks.

Signed-off-by: Arnaud Meukam <ameukam@gmail.com>
2025-08-20 13:09:34 +02:00
Kubernetes Prow Robot bd203fb693
Merge pull request #17566 from kubernetes/dependabot/github_actions/actions/checkout-5.0.0
build(deps): bump actions/checkout from 4.2.2 to 5.0.0
2025-08-17 02:29:08 -07:00
dependabot[bot] 6d8aeb0144
build(deps): bump actions/checkout from 4.2.2 to 5.0.0
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.2.2 to 5.0.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](11bd71901b...08c6903cd8)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-17 06:50:33 +00:00
Kubernetes Prow Robot 1c64206d0e
Merge pull request #17561 from ameukam/introduce-agents
Add AGENTS.md
2025-08-14 13:37:07 -07:00
Kubernetes Prow Robot cac9dcfca0
Merge pull request #17560 from ameukam/bump-golang-1.25
Bump Golang to 1.25
2025-08-14 07:45:09 -07:00
Arnaud Meukam 1ad9b17968
Add AGENTS.md
Provide a starting place for AI code assistance.

Add a baseline AGENTS.md file.
Add symlinks for Gemini, Claude and Qwen

Signed-off-by: Arnaud Meukam <ameukam@gmail.com>
2025-08-14 15:23:37 +02:00
Arnaud Meukam 237b19ef44
Bump Golang to 1.25
Signed-off-by: Arnaud Meukam <ameukam@gmail.com>
2025-08-14 15:03:37 +02:00
Kubernetes Prow Robot a0b5174c85
Merge pull request #17559 from ameukam/bump-ko-build
Bump ko-build
2025-08-14 05:25:12 -07:00
Arnaud Meukam 4aaeb5f92f
Bump ko-build
See changes: https://github.com/ko-build/ko/compare/v0.14.1...v0.18.0

Signed-off-by: Arnaud Meukam <ameukam@gmail.com>
2025-08-14 12:44:47 +02:00
Connor Catlett d4fe130e78
Use yum instead of dnf on Amazon Linux 2
Signed-off-by: Connor Catlett <conncatl@amazon.com>
2025-08-13 20:08:04 +00:00
Kubernetes Prow Robot fb666c7924
Merge pull request #17553 from hakman/fix-image-volumes
etcd-manager: Keep the ImageVolume feature gate for K8s 1.35
2025-08-11 12:09:09 -07:00
Ciprian Hacman 8c6ac690b1 Bump skip.regex for failing tests to 1.35 2025-08-11 20:16:15 +03:00
Kubernetes Prow Robot 896dbb28d9
Merge pull request #17552 from hakman/ebs-csi-driver-1.47.0
aws: Update EBS CSI driver to v1.47.0
2025-08-11 09:53:09 -07:00
Ciprian Hacman 9547347a04 etcd-manager: Keep the ImageVolume feature gate for K8s 1.35 2025-08-11 19:07:06 +03:00
Ciprian Hacman b97df8de6e hack/update-expected.sh 2025-08-11 18:49:46 +03:00
Ciprian Hacman e54132c827 aws: Update EBS CSI driver to v1.47.0 2025-08-11 18:49:46 +03:00
Kubernetes Prow Robot 93c7490597
Merge pull request #17550 from rifelpet/debian13
Recognize Debian 13
2025-08-10 19:31:54 -07:00
Peter Rifel d38b89e0c5
Recognize Debian 13 2025-08-10 16:26:47 -05:00
Kubernetes Prow Robot a758ae0e9f
Merge pull request #17539 from hakman/etcd-manager-image-volumes
etcd-manager: Use image volumes to mount etcd images
2025-08-10 07:29:53 -07:00
Ciprian Hacman da4af99967 hack/update-expected.sh 2025-08-10 16:17:05 +03:00
Ciprian Hacman 3f99d04ca5 etcd-manager: Use image volumes to mount etcd images 2025-08-10 16:17:05 +03:00
1271 changed files with 42341 additions and 40628 deletions

View File

@ -14,6 +14,6 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: 'Checkout Repository'
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
- name: 'Review Dependencies'
uses: actions/dependency-review-action@da24556b548a50705dd671f47852072ea4c105d9
uses: actions/dependency-review-action@595b5aeba73380359d98a5e087f648dbb0edce1b

View File

@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-24.04
timeout-minutes: 70
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
with:
path: ${{ env.GOPATH }}/src/k8s.io/kops
fetch-depth: 3
@ -51,7 +51,7 @@ jobs:
runs-on: ubuntu-24.04
timeout-minutes: 70
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
with:
path: ${{ env.GOPATH }}/src/k8s.io/kops
fetch-depth: 3

View File

@ -26,7 +26,7 @@ jobs:
name: build-linux-${{ matrix.os.arch }}
runs-on: ${{ matrix.os.runs-on }}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
with:
path: ${{ env.GOPATH }}/src/k8s.io/kops
@ -43,7 +43,7 @@ jobs:
build-macos-amd64:
runs-on: macos-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
with:
path: ${{ env.GOPATH }}/src/k8s.io/kops
@ -60,7 +60,7 @@ jobs:
build-windows-amd64:
runs-on: windows-2022
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
with:
path: ${{ env.GOPATH }}/src/k8s.io/kops
@ -87,7 +87,7 @@ jobs:
name: verify-${{ matrix.os.arch }}
runs-on: ${{ matrix.os.runs-on }}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
with:
path: ${{ env.GOPATH }}/src/k8s.io/kops

View File

@ -17,7 +17,7 @@ jobs:
contents: write
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
- run: /usr/bin/git config --global user.email actions@github.com
- run: /usr/bin/git config --global user.name 'GitHub Actions Release Tagger'
- run: hack/tag-release.sh

View File

@ -1,35 +1,46 @@
version: "2"
run:
timeout: 30m
go: "1.24"
issues:
max-same-issues: 0
# Excluding configuration per-path, per-linter, per-text and per-source
exclude-rules:
# exclude ineffassing linter for generated files for conversion
- path: conversion\.go
linters:
- ineffassign
exclude-files:
- "^zz_generated.*"
go: "1.25"
linters:
disable-all: true
default: none
enable:
- govet
- ineffassign
- staticcheck
- tenv
linters-settings: # please keep this alphabetized
staticcheck:
checks: [
"all",
"-ST1000", # Incorrect or missing package comment
"-ST1003", # Poorly chosen identifier
"-ST1005", # Incorrectly formatted error string
"-ST1006", # Poorly chosen receiver name
"-ST1012", # Poorly chosen name for error variable
"-ST1016", # Use consistent method receiver names
"-SA1019", # Using a deprecated function, variable, constant or field
]
settings:
staticcheck:
checks:
- all
- -QF1008 # ignore omit embbed fields from selector expressions
- -ST1000 # Incorrect or missing package comment
- -ST1003 # Poorly chosen identifier
- -ST1005 # Incorrectly formatted error string
- -ST1006 # Poorly chosen receiver name
- -ST1012 # Poorly chosen name for error variable
- -ST1016 # Use consistent method receiver names
- -SA1019 # Using a deprecated function, variable, constant or field
exclusions:
generated: lax
presets:
- comments
- common-false-positives
- legacy
- std-error-handling
rules:
- linters:
- ineffassign
path: conversion\.go
paths:
- ^zz_generated.*
- third_party$
- builtin$
- examples$
issues:
max-same-issues: 0
formatters:
exclusions:
generated: lax
paths:
- third_party$
- builtin$
- examples$

115
AGENTS.md Normal file
View File

@ -0,0 +1,115 @@
# kOps Project Overview
kOps is a command-line tool for creating, destroying, upgrading, and maintaining production-grade, highly available Kubernetes clusters. It is written in Go and supports multiple cloud providers, including AWS, GCP, DigitalOcean, Hetzner, OpenStack, and Azure.
The project is well-structured, with a clear separation of concerns between the different packages. The `cmd` directory contains the main entry points for the `kops` CLI and other related commands. The `pkg` directory contains the core logic for managing clusters, and the `upup` directory contains the code for provisioning cloud infrastructure.
The project has a comprehensive test suite, including unit tests, integration tests, and end-to-end tests. It also has a robust CI/CD pipeline that runs these tests on every pull request.
## Building and Running
### Prerequisites
* `make`
### Building
To build the `kops` binary, run the following command:
```bash
make kops
```
This will create the `kops` binary in the `.build/dist/<os>/<arch>` directory.
To build all the binaries, including `kops`, `protokube`, `nodeup`, and `channels`, run the following command:
```bash
make all
```
### Running
To run the `kops` binary, you can either run it directly from the `dist` directory or install it to your `$GOPATH/bin` directory by running the following command:
```bash
make install
```
### Testing
To run the unit tests, run the following command:
```bash
make test
```
To run the verification scripts, run the following command:
```bash
make verify
```
To run the full suite of CI checks, run the following command:
```bash
make ci
```
## Development Conventions
### Guidelines for Programming Assistance
When assisting with programming tasks, you will adhere to the following principles:
* **Follow Requirements**: Carefully follow the user's requirements to the letter.
* **Plan First**: For any non-trivial change, first describe a detailed, step-by-step plan, including the files you intend to modify and the tests you will add or update.
* **Test Thoroughly**: Implement comprehensive tests to ensure correctness and prevent regressions.
* **Comment Intelligently**: Add comments to explain the "why" behind complex or non-obvious code, keeping in mind that the reader may not be a Kubernetes expert.
* **No TODOs**: Leave no `TODO` comments, placeholders, or incomplete implementations.
* **Prioritize Correctness**: Always prioritize security, scalability, and maintainability in your implementations.
### Avoiding Loops
When performing complex tasks, especially those involving code modifications and verification, it's important to avoid getting into loops. A loop can occur when the agent repeatedly tries the same action without success, or when it gets stuck in a cycle of analysis, action, and failure.
To avoid loops:
* **Analyze the problem carefully**: Before taking any action, make sure you understand the problem and have a clear plan to solve it.
* **Break down the problem**: Break down complex problems into smaller, more manageable steps.
* **Verify each step**: After each step, verify that it was successful before moving on to the next one.
* **Don't repeat failed actions**: If an action fails, don't just repeat it. Analyze the cause of the failure and try a different approach.
* **Ask for help**: If you're stuck, don't hesitate to ask for help from the user.
### Code Style
The project follows the standard Go code style and the official [Kubernetes coding conventions](https://www.k8s.dev/docs/guide/coding-convention/). All code should be formatted with `gofmt` and `goimports`. You can format the code by running the following commands:
```bash
make gofmt
make goimports
```
### Linting
The project uses `golangci-lint` to lint the code. You can run the linter by running the following command:
```bash
make verify-golangci-lint
```
### Dependencies
The project uses Go modules to manage dependencies. To add a new dependency, add it to the `go.mod` file and then run the following command:
```bash
make gomod
```
### Commits
The project follows the conventional commit message format.
### Contributions
Contributions are welcome! Before submitting a pull request, please open an issue to discuss your proposed changes. All pull requests must be reviewed and approved by a maintainer before they can be merged.

1
CLAUDE.md Normal file
View File

@ -0,0 +1 @@
AGENTS.md

1
GEMINI.md Normal file
View File

@ -0,0 +1 @@
AGENTS.md

View File

@ -42,7 +42,7 @@ endif
# CODEGEN_VERSION is the version of k8s.io/code-generator to use
CODEGEN_VERSION=v0.29.0
KO=go run github.com/google/ko@v0.14.1
KO=go run github.com/google/ko@v0.18.0
UPLOAD_CMD=$(KOPS_ROOT)/hack/upload ${UPLOAD_ARGS}

1
QWEN.md Normal file
View File

@ -0,0 +1 @@
AGENTS.md

View File

@ -119,14 +119,20 @@ spec:
networking:
kubenet: {}
kubernetesVersions:
- range: ">=1.34.0"
recommendedVersion: 1.34.0
requiredVersion: 1.34.0
- range: ">=1.33.0"
recommendedVersion: 1.33.4
requiredVersion: 1.33.0
- range: ">=1.32.0"
recommendedVersion: 1.32.4
recommendedVersion: 1.32.8
requiredVersion: 1.32.0
- range: ">=1.31.0"
recommendedVersion: 1.31.8
recommendedVersion: 1.31.12
requiredVersion: 1.31.0
- range: ">=1.30.0"
recommendedVersion: 1.30.12
recommendedVersion: 1.30.14
requiredVersion: 1.30.0
- range: ">=1.29.0"
recommendedVersion: 1.29.15
@ -189,36 +195,44 @@ spec:
recommendedVersion: 1.11.10
requiredVersion: 1.11.10
kopsVersions:
- range: ">=1.34.0-alpha.1"
recommendedVersion: "1.33.1"
#requiredVersion: 1.34.0
kubernetesVersion: 1.34.0
- range: ">=1.33.0-alpha.1"
recommendedVersion: "1.33.1"
#requiredVersion: 1.33.0
kubernetesVersion: 1.33.4
- range: ">=1.32.0-alpha.1"
recommendedVersion: "1.31.0-beta.1"
recommendedVersion: "1.33.1"
#requiredVersion: 1.32.0
kubernetesVersion: 1.32.4
kubernetesVersion: 1.32.8
- range: ">=1.31.0-alpha.1"
recommendedVersion: "1.31.0-beta.1"
recommendedVersion: "1.33.1"
#requiredVersion: 1.31.0
kubernetesVersion: 1.31.8
kubernetesVersion: 1.31.12
- range: ">=1.30.0-alpha.1"
recommendedVersion: "1.30.3"
recommendedVersion: "1.33.1"
#requiredVersion: 1.30.0
kubernetesVersion: 1.30.12
kubernetesVersion: 1.30.14
- range: ">=1.29.0-alpha.1"
recommendedVersion: "1.30.3"
recommendedVersion: "1.33.1"
#requiredVersion: 1.29.0
kubernetesVersion: 1.29.15
- range: ">=1.28.0-alpha.1"
recommendedVersion: "1.30.3"
recommendedVersion: "1.33.1"
#requiredVersion: 1.28.0
kubernetesVersion: 1.28.15
- range: ">=1.27.0-alpha.1"
recommendedVersion: "1.30.3"
recommendedVersion: "1.32.2"
#requiredVersion: 1.27.0
kubernetesVersion: 1.27.16
- range: ">=1.26.0-alpha.1"
recommendedVersion: "1.30.3"
recommendedVersion: "1.31.0"
#requiredVersion: 1.26.0
kubernetesVersion: 1.26.15
- range: ">=1.25.0-alpha.1"
recommendedVersion: "1.30.3"
recommendedVersion: "1.30.4"
#requiredVersion: 1.25.0
kubernetesVersion: 1.25.16
- range: ">=1.24.0-alpha.1"

View File

@ -24,12 +24,10 @@ import (
"os"
"github.com/blang/semver/v4"
"github.com/cert-manager/cert-manager/pkg/client/clientset/versioned"
certmanager "github.com/cert-manager/cert-manager/pkg/client/clientset/versioned"
"github.com/spf13/cobra"
"go.uber.org/multierr"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/client-go/dynamic"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/restmapper"
@ -41,8 +39,6 @@ import (
type ApplyChannelOptions struct {
Yes bool
configFlags genericclioptions.ConfigFlags
}
func NewCmdApplyChannel(f *ChannelsFactory, out io.Writer) *cobra.Command {
@ -120,7 +116,7 @@ func RunApplyChannel(ctx context.Context, f *ChannelsFactory, out io.Writer, opt
return applyMenu(ctx, menu, f.VFSContext(), k8sClient, cmClient, dynamicClient, restMapper, options.Yes)
}
func applyMenu(ctx context.Context, menu *channels.AddonMenu, vfsContext *vfs.VFSContext, k8sClient kubernetes.Interface, cmClient versioned.Interface, dynamicClient dynamic.Interface, restMapper *restmapper.DeferredDiscoveryRESTMapper, apply bool) error {
func applyMenu(ctx context.Context, menu *channels.AddonMenu, vfsContext *vfs.VFSContext, k8sClient kubernetes.Interface, cmClient certmanager.Interface, dynamicClient dynamic.Interface, restMapper *restmapper.DeferredDiscoveryRESTMapper, apply bool) error {
// channelVersions is the list of installed addons in the cluster.
// It is keyed by <namespace>:<addon name>.
channelVersions, err := getChannelVersions(ctx, k8sClient)
@ -198,7 +194,7 @@ func applyMenu(ctx context.Context, menu *channels.AddonMenu, vfsContext *vfs.VF
return merr
}
func getUpdates(ctx context.Context, menu *channels.AddonMenu, k8sClient kubernetes.Interface, cmClient versioned.Interface, channelVersions map[string]*channels.ChannelVersion) ([]*channels.AddonUpdate, []*channels.Addon, error) {
func getUpdates(ctx context.Context, menu *channels.AddonMenu, k8sClient kubernetes.Interface, cmClient certmanager.Interface, channelVersions map[string]*channels.ChannelVersion) ([]*channels.AddonUpdate, []*channels.Addon, error) {
var updates []*channels.AddonUpdate
var needUpdates []*channels.Addon
for _, addon := range menu.Addons {

View File

@ -119,14 +119,20 @@ spec:
networking:
kubenet: {}
kubernetesVersions:
- range: ">=1.34.0"
recommendedVersion: 1.34.0
requiredVersion: 1.34.0
- range: ">=1.33.0"
recommendedVersion: 1.33.4
requiredVersion: 1.33.0
- range: ">=1.32.0"
recommendedVersion: 1.32.4
recommendedVersion: 1.32.8
requiredVersion: 1.32.0
- range: ">=1.31.0"
recommendedVersion: 1.31.8
recommendedVersion: 1.31.12
requiredVersion: 1.31.0
- range: ">=1.30.0"
recommendedVersion: 1.30.12
recommendedVersion: 1.30.14
requiredVersion: 1.30.0
- range: ">=1.29.0"
recommendedVersion: 1.29.15
@ -189,36 +195,44 @@ spec:
recommendedVersion: 1.11.10
requiredVersion: 1.11.10
kopsVersions:
- range: ">=1.34.0-alpha.1"
recommendedVersion: "1.33.1"
#requiredVersion: 1.34.0
kubernetesVersion: 1.34.0
- range: ">=1.33.0-alpha.1"
recommendedVersion: "1.33.1"
#requiredVersion: 1.33.0
kubernetesVersion: 1.33.4
- range: ">=1.32.0-alpha.1"
recommendedVersion: "1.31.0-beta.1"
recommendedVersion: "1.33.1"
#requiredVersion: 1.32.0
kubernetesVersion: 1.32.4
kubernetesVersion: 1.32.8
- range: ">=1.31.0-alpha.1"
recommendedVersion: "1.31.0-beta.1"
recommendedVersion: "1.33.1"
#requiredVersion: 1.31.0
kubernetesVersion: 1.31.8
kubernetesVersion: 1.31.12
- range: ">=1.30.0-alpha.1"
recommendedVersion: "1.30.3"
recommendedVersion: "1.33.1"
#requiredVersion: 1.30.0
kubernetesVersion: 1.30.12
kubernetesVersion: 1.30.14
- range: ">=1.29.0-alpha.1"
recommendedVersion: "1.30.3"
recommendedVersion: "1.33.1"
#requiredVersion: 1.29.0
kubernetesVersion: 1.29.15
- range: ">=1.28.0-alpha.1"
recommendedVersion: "1.30.3"
recommendedVersion: "1.33.1"
#requiredVersion: 1.28.0
kubernetesVersion: 1.28.15
- range: ">=1.27.0-alpha.1"
recommendedVersion: "1.30.3"
recommendedVersion: "1.32.2"
#requiredVersion: 1.27.0
kubernetesVersion: 1.27.16
- range: ">=1.26.0-alpha.1"
recommendedVersion: "1.30.3"
recommendedVersion: "1.31.0"
#requiredVersion: 1.26.0
kubernetesVersion: 1.26.15
- range: ">=1.25.0-alpha.1"
recommendedVersion: "1.30.3"
recommendedVersion: "1.30.4"
#requiredVersion: 1.25.0
kubernetesVersion: 1.25.16
- range: ">=1.24.0-alpha.1"

View File

@ -5,7 +5,7 @@ options:
machineType: "E2_HIGHCPU_32"
steps:
# Push the images
- name: "mirror.gcr.io/library/golang:1.24.4-bookworm"
- name: "mirror.gcr.io/library/golang:1.25.0-trixie"
id: images
entrypoint: make
env:
@ -21,7 +21,7 @@ steps:
- dns-controller-push
- kube-apiserver-healthcheck-push
# Push the artifacts
- name: "mirror.gcr.io/library/golang:1.24.4-bookworm"
- name: "mirror.gcr.io/library/golang:1.25.0-trixie"
id: artifacts
entrypoint: make
env:
@ -36,7 +36,7 @@ steps:
args:
- gcs-upload-and-tag
# Build cloudbuild artifacts (for attestation)
- name: "mirror.gcr.io/library/golang:1.24.4-bookworm"
- name: "mirror.gcr.io/library/golang:1.25.0-trixie"
id: cloudbuild-artifacts
entrypoint: make
env:

View File

@ -20,8 +20,6 @@ import (
"net/http/httptest"
"sync"
"github.com/gophercloud/gophercloud/v2/openstack/compute/v2/instanceactions"
"github.com/gophercloud/gophercloud/v2"
"github.com/gophercloud/gophercloud/v2/openstack/compute/v2/flavors"
@ -37,13 +35,12 @@ type MockClient struct {
openstack.MockOpenstackServer
mutex sync.Mutex
serverGroups map[string]servergroups.ServerGroup
servers map[string]servers.Server
keyPairs map[string]keypairs.KeyPair
images map[string]images.Image
flavors map[string]flavors.Flavor
instanceActions map[string]instanceactions.InstanceAction
networkClient *gophercloud.ServiceClient
serverGroups map[string]servergroups.ServerGroup
servers map[string]servers.Server
keyPairs map[string]keypairs.KeyPair
images map[string]images.Image
flavors map[string]flavors.Flavor
networkClient *gophercloud.ServiceClient
}
// CreateClient will create a new mock networking client

View File

@ -181,7 +181,8 @@ func (m *MockClient) routerInterface(w http.ResponseWriter, r *http.Request) {
if err != nil {
panic("error decoding create router interface request")
}
if parts[2] == "add_router_interface" {
switch parts[2] {
case "add_router_interface":
subnet := m.subnets[createInterface.SubnetID]
interfaces := m.routerInterfaces[routerID]
interfaces = append(interfaces, routers.InterfaceInfo{
@ -201,7 +202,7 @@ func (m *MockClient) routerInterface(w http.ResponseWriter, r *http.Request) {
},
}
m.ports[port.ID] = port
} else if parts[2] == "remove_router_interface" {
case "remove_router_interface":
interfaces := make([]routers.InterfaceInfo, 0)
for _, i := range m.routerInterfaces[routerID] {
if i.SubnetID != createInterface.SubnetID {
@ -209,7 +210,7 @@ func (m *MockClient) routerInterface(w http.ResponseWriter, r *http.Request) {
}
}
m.routerInterfaces[routerID] = interfaces
} else {
default:
w.WriteHeader(http.StatusBadRequest)
return
}

View File

@ -107,7 +107,7 @@ func (f *FakeDomainAPI) UpdateDNSZoneRecords(req *domain.UpdateDNSZoneRecordsReq
break
}
}
if found == false {
if !found {
return nil, fmt.Errorf("could not find record %s to delete", *change.Delete.ID)
}

View File

@ -161,7 +161,7 @@ func (s *Server) bootstrap(w http.ResponseWriter, r *http.Request) {
if err != nil {
klog.Infof("bootstrap %s read err: %v", r.RemoteAddr, err)
w.WriteHeader(http.StatusBadRequest)
_, _ = w.Write([]byte(fmt.Sprintf("bootstrap %s failed to read body: %v", r.RemoteAddr, err)))
_, _ = fmt.Fprintf(w, "bootstrap %s failed to read body: %v", r.RemoteAddr, err)
return
}
@ -208,7 +208,7 @@ func (s *Server) bootstrap(w http.ResponseWriter, r *http.Request) {
if err := json.Unmarshal(body, req); err != nil {
klog.Infof("bootstrap %s decode err: %v", r.RemoteAddr, err)
w.WriteHeader(http.StatusBadRequest)
_, _ = w.Write([]byte(fmt.Sprintf("failed to decode: %v", err)))
_, _ = fmt.Fprintf(w, "failed to decode: %v", err)
return
}
@ -264,7 +264,7 @@ func (s *Server) bootstrap(w http.ResponseWriter, r *http.Request) {
if err != nil {
klog.Infof("bootstrap %s cert %q issue err: %v", r.RemoteAddr, name, err)
w.WriteHeader(http.StatusBadRequest)
_, _ = w.Write([]byte(fmt.Sprintf("failed to issue %q: %v", name, err)))
_, _ = fmt.Fprintf(w, "failed to issue %q: %v", name, err)
return
}
resp.Certs[name] = cert

View File

@ -858,7 +858,7 @@ func parseCloudLabels(s string) (map[string]string, error) {
// Replace commas with newlines to allow a single pass with csv.Reader.
// We can't use csv.Reader for the initial split because it would see each key=value record as a single field
// and significantly complicates using quoted fields as keys or values.
records := strings.Replace(s, ",", "\n", -1)
records := strings.ReplaceAll(s, ",", "\n")
// Let the CSV library do the heavy-lifting in handling nested ='s
r := csv.NewReader(strings.NewReader(records))

View File

@ -46,8 +46,6 @@ var MagicTimestamp = metav1.Time{Time: time.Date(2017, 1, 1, 0, 0, 0, 0, time.UT
// TestCreateClusterMinimal runs kops create cluster minimal.example.com --zones us-test-1a
func TestCreateClusterMinimal(t *testing.T) {
runCreateClusterIntegrationTest(t, "../../tests/integration/create_cluster/minimal-1.27", "v1alpha2")
runCreateClusterIntegrationTest(t, "../../tests/integration/create_cluster/minimal-1.28", "v1alpha2")
runCreateClusterIntegrationTest(t, "../../tests/integration/create_cluster/minimal-1.29", "v1alpha2")
runCreateClusterIntegrationTest(t, "../../tests/integration/create_cluster/minimal-1.30", "v1alpha2")
runCreateClusterIntegrationTest(t, "../../tests/integration/create_cluster/minimal-1.31", "v1alpha2")

View File

@ -246,28 +246,6 @@ func TestMinimalAWS(t *testing.T) {
runTestTerraformAWS(t)
}
// TestMinimal runs the test on a minimum configuration
func TestMinimal_v1_27(t *testing.T) {
newIntegrationTest("minimal.example.com", "minimal-1.27").
withAddons(
awsEBSCSIAddon,
dnsControllerAddon,
awsCCMAddon,
).
runTestTerraformAWS(t)
}
// TestMinimal runs the test on a minimum configuration
func TestMinimal_v1_28(t *testing.T) {
newIntegrationTest("minimal.example.com", "minimal-1.28").
withAddons(
awsEBSCSIAddon,
dnsControllerAddon,
awsCCMAddon,
).
runTestTerraformAWS(t)
}
// TestMinimal runs the test on a minimum configuration
func TestMinimal_v1_29(t *testing.T) {
newIntegrationTest("minimal.example.com", "minimal-1.29").
@ -722,15 +700,6 @@ func TestPrivateCiliumENI(t *testing.T) {
runTestTerraformAWS(t)
}
// TestPrivateCanal runs the test on a configuration with private topology, canal networking
func TestPrivateCanal(t *testing.T) {
newIntegrationTest("privatecanal.example.com", "privatecanal").
withPrivate().
withDefaultAddons30().
withAddons(canalAddon).
runTestTerraformAWS(t)
}
const kopeioNetworkingAddon = "networking.kope.io-k8s-1.12"
// TestPrivateKopeio runs the test on a configuration with private topology, kopeio networking
@ -1605,7 +1574,7 @@ func (i *integrationTest) runTestTerraformAWS(t *testing.T) {
"aws_cloudwatch_event_rule_" + awsup.GetClusterName40(i.clusterName) + "-SpotInterruption_event_pattern",
"aws_cloudwatch_event_rule_" + awsup.GetClusterName40(i.clusterName) + "-InstanceStateChange_event_pattern",
"aws_cloudwatch_event_rule_" + awsup.GetClusterName40(i.clusterName) + "-InstanceScheduledChange_event_pattern",
"aws_sqs_queue_" + strings.Replace(i.clusterName, ".", "-", -1) + "-nth_policy",
"aws_sqs_queue_" + strings.ReplaceAll(i.clusterName, ".", "-") + "-nth_policy",
}...)
}
if i.nthRebalance {
@ -1633,7 +1602,8 @@ func (i *integrationTest) runTestPhase(t *testing.T, phase cloudup.Phase) {
expectedFilenames := i.expectTerraformFilenames
if phase == cloudup.PhaseSecurity {
switch phase {
case cloudup.PhaseSecurity:
expectedFilenames = []string{
"aws_iam_role_masters." + i.clusterName + "_policy",
"aws_iam_role_nodes." + i.clusterName + "_policy",
@ -1648,7 +1618,7 @@ func (i *integrationTest) runTestPhase(t *testing.T, phase cloudup.Phase) {
"aws_launch_template_bastion." + i.clusterName + "_user_data",
}...)
}
} else if phase == cloudup.PhaseCluster {
case cloudup.PhaseCluster:
expectedFilenames = []string{
"aws_launch_template_nodes." + i.clusterName + "_user_data",
}

View File

@ -56,7 +56,7 @@ func (o *LifecycleTestOptions) AddDefaults() {
o.Version = "v1alpha2"
}
if o.ClusterName == "" {
o.ClusterName = strings.Replace(o.SrcDir, "_", "", -1) + ".example.com"
o.ClusterName = strings.ReplaceAll(o.SrcDir, "_", "") + ".example.com"
}
o.SrcDir = "../../tests/integration/update_cluster/" + o.SrcDir

View File

@ -22,8 +22,8 @@ import (
"io"
"strings"
"github.com/aws/amazon-ec2-instance-selector/v2/pkg/cli"
"github.com/aws/amazon-ec2-instance-selector/v2/pkg/selector"
"github.com/aws/amazon-ec2-instance-selector/v3/pkg/cli"
"github.com/aws/amazon-ec2-instance-selector/v3/pkg/selector"
ec2types "github.com/aws/aws-sdk-go-v2/service/ec2/types"
"github.com/spf13/cobra"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@ -520,7 +520,8 @@ func decorateWithMixedInstancesPolicy(instanceGroup *kops.InstanceGroup, usageCl
ig := instanceGroup
ig.Spec.MachineType = instanceSelections[0]
if usageClass == ec2types.UsageClassTypeSpot {
switch usageClass {
case ec2types.UsageClassTypeSpot:
ondemandBase := int64(0)
ondemandAboveBase := int64(0)
spotAllocationStrategy := "capacity-optimized"
@ -530,11 +531,11 @@ func decorateWithMixedInstancesPolicy(instanceGroup *kops.InstanceGroup, usageCl
OnDemandAboveBase: &ondemandAboveBase,
SpotAllocationStrategy: &spotAllocationStrategy,
}
} else if usageClass == ec2types.UsageClassTypeOnDemand {
case ec2types.UsageClassTypeOnDemand:
ig.Spec.MixedInstancesPolicy = &kops.MixedInstancesPolicySpec{
Instances: instanceSelections,
}
} else {
default:
return nil, fmt.Errorf("error node usage class not supported")
}

View File

@ -21,7 +21,7 @@ import (
"regexp"
"testing"
"github.com/aws/amazon-ec2-instance-selector/v2/pkg/cli"
"github.com/aws/amazon-ec2-instance-selector/v3/pkg/cli"
ec2types "github.com/aws/aws-sdk-go-v2/service/ec2/types"
"k8s.io/kops/pkg/apis/kops"
)

View File

@ -36,7 +36,6 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/klog/v2"
"k8s.io/kops/cmd/kops/util"
"k8s.io/kops/pkg/apis/kops"
kopsapi "k8s.io/kops/pkg/apis/kops"
"k8s.io/kops/pkg/validation"
"k8s.io/kops/util/pkg/tables"
@ -63,7 +62,7 @@ var (
type ValidateClusterOptions struct {
ClusterName string
InstanceGroupRoles []kops.InstanceGroupRole
InstanceGroupRoles []kopsapi.InstanceGroupRole
output string
wait time.Duration
count int
@ -71,7 +70,7 @@ type ValidateClusterOptions struct {
kubeconfig string
// filterInstanceGroups is a function that returns true if the instance group should be validated
filterInstanceGroups func(ig *kops.InstanceGroup) bool
filterInstanceGroups func(ig *kopsapi.InstanceGroup) bool
// filterPodsForValidation is a function that returns true if the pod should be validated
filterPodsForValidation func(pod *v1.Pod) bool

View File

@ -201,9 +201,10 @@ func (c *NodeController) updateNodeRecords(node *v1.Node) string {
for _, a := range node.Status.Addresses {
var roleType string
if a.Type == v1.NodeInternalIP {
switch a.Type {
case v1.NodeInternalIP:
roleType = dns.RoleTypeInternal
} else if a.Type == v1.NodeExternalIP {
case v1.NodeExternalIP:
roleType = dns.RoleTypeExternal
}
var recordType dns.RecordType = dns.RecordTypeA

View File

@ -152,7 +152,8 @@ func (c *ServiceController) updateServiceRecords(service *v1.Service) string {
if len(specExternal) != 0 || len(specInternal) != 0 {
var ingresses []dns.Record
if service.Spec.Type == v1.ServiceTypeLoadBalancer {
switch service.Spec.Type {
case v1.ServiceTypeLoadBalancer:
for i := range service.Status.LoadBalancer.Ingress {
ingress := &service.Status.LoadBalancer.Ingress[i]
if ingress.Hostname != "" {
@ -175,7 +176,7 @@ func (c *ServiceController) updateServiceRecords(service *v1.Service) string {
klog.V(4).Infof("Found A record for service %s/%s: %q", service.Namespace, service.Name, ingress.IP)
}
}
} else if service.Spec.Type == v1.ServiceTypeNodePort {
case v1.ServiceTypeNodePort:
var roleType string
if len(specExternal) != 0 && len(specInternal) != 0 {
klog.Warningln("DNS Records not possible for both Internal and Externals IPs.")
@ -190,7 +191,7 @@ func (c *ServiceController) updateServiceRecords(service *v1.Service) string {
Value: dns.AliasForNodesInRole("node", roleType),
})
klog.V(4).Infof("Setting internal alias for NodePort service %s/%s", service.Namespace, service.Name)
} else {
default:
// TODO: Emit event so that users are informed of this
klog.V(2).Infof("Cannot expose service %s/%s of type %q", service.Namespace, service.Name, service.Spec.Type)
}

View File

@ -46,6 +46,6 @@ func (m *ManagedZonesService) List(project string) interfaces.ManagedZonesListCa
}
func (m *ManagedZonesService) NewManagedZone(dnsName string) interfaces.ManagedZone {
name := "x" + strings.Replace(string(uuid.NewUUID()), "-", "", -1)[0:30] // Unique name, strip out the "-" chars to shorten it, start with a lower case alpha, and truncate to Cloud DNS 32 character limit
name := "x" + strings.ReplaceAll(string(uuid.NewUUID()), "-", "")[0:30] // Unique name, strip out the "-" chars to shorten it, start with a lower case alpha, and truncate to Cloud DNS 32 character limit
return &ManagedZone{impl: &dns.ManagedZone{Name: name, Description: "Kubernetes Federated Service", DnsName: dnsName}}
}

View File

@ -1,45 +1,120 @@
## Release notes for kOps 1.33 series
**&#9888; kOps 1.33 has not been released yet! &#9888;**
This is a document to gather the release notes prior to the release.
kOps 1.33.0 introduces significant improvements to cloud provider support, networking capabilities, and Kubernetes integration. This release adds new features for AWS ECR, Hetzner Cloud, and Cilium while removing deprecated legacy components.
# Significant changes
* TODO
## New Features
## Some Feature
### AWS ECR Pull-Through Cache Support
* Add support for using ECR as pull-through image cache ([#16593](https://github.com/kubernetes/kops/pull/16593))
- Enables faster container image pulls by caching images in ECR
- Reduces external registry dependencies and improves reliability
* TODO
### Hetzner Cloud Object Storage
* Add support for Object Storage ([#17453](https://github.com/kubernetes/kops/pull/17453))
- Enables state store configuration using Hetzner Cloud Object Storage
- Provides alternative to S3 for Hetzner Cloud users
## AWS
### Cilium Gateway API Support
* Add support for Gateway API within Cilium ([#17358](https://github.com/kubernetes/kops/pull/17358))
- Enables modern Kubernetes networking with Gateway API
- Provides advanced traffic management capabilities
* TODO
## Cloud Provider Improvements
## GCP
### Kubernetes 1.33 Cloud Provider Changes
* Remove cloud-config and cloud-provider flags from kubelet and kube-apiserver for Kubernetes 1.33+ ([#17412](https://github.com/kubernetes/kops/pull/17412), [#17270](https://github.com/kubernetes/kops/pull/17270))
- Aligns with Kubernetes deprecation of in-tree cloud providers
- Mandatory for Kubernetes 1.33+ compatibility
* TODO
### Azure Enhancements
* Deploy cloud-node-manager for Kubernetes 1.31+
- Ensures proper node management for newer Kubernetes versions
- Improves Azure cloud integration
## Openstack
### GCP Updates
* Do not reset MIG target size on cluster updates
- Prevents unwanted scaling during cluster operations
- Improves autoscaler compatibility
* TODO
## Container Runtime and Component Updates
# Other changes of note
### Major Version Updates
* Update Cilium to v1.16.7
* Update Calico to v3.29.4
* Update CoreDNS to v1.11.4
* Update containerd to v1.7.28
* Update etcd to v3.5.21
* Update etcd-manager to v3.0.20250803
* Update metrics-server to v0.7.2
* Update flannel to v0.26.4
* Update kube-router from v2.1.1 to v2.5.0
* Update Amazon VPC CNI to v1.19.3
* TODO
### Flannel Support Restored
* Re-enable Flannel and remove deprecation notice
- Flannel continues to be supported as a networking option
- Updates documentation to reflect continued support
# Breaking changes
## Other breaking changes
## Legacy Addon Removal
* Remove legacy addons from kOps repository ([#17332](https://github.com/kubernetes/kops/pull/17332))
- Only affects clusters using kOps versions prior to 1.22
- Modern clusters using managed addons are unaffected
* Legacy addons have been removed from the kOps repo. These were only referenced by kOps <1.22 ([17322](https://github.com/kubernetes/kops/pull/17332))
## Cloud Provider Flag Removal
* Remove cloud-config and cloud-provider flags for Kubernetes 1.33+
- **Breaking change** for clusters upgrading to Kubernetes 1.33
- External cloud providers must be configured separately
- Ensures compliance with Kubernetes 1.33 requirements
# Other notable changes
## Networking Enhancements
* Add CNI-exclusive setting for Cilium
* Allow setup of CoreDNS pod annotations ([#17315](https://github.com/kubernetes/kops/pull/17315))
* Prevent systemd-networkd from removing Cilium routes on restart
* Support systemd config on Ubuntu 22.04+ for Amazon VPC CNI
## Security and Configuration
* Use official etcd images from registry.k8s.io
* Increase key size for KubeConfig private key
* Enable more admission controllers by default
* Add goaway-chance parameter for kube-apiserver
## Testing and Infrastructure
* Use ephemeral S3 buckets for E2E tests ([#17157](https://github.com/kubernetes/kops/pull/17157))
- Improves test isolation and cleanup
- Reduces testing infrastructure costs
## OpenStack Support
* Fix: determine ports to delete based on tags
- Improves resource cleanup accuracy
- Prevents deletion of unmanaged ports
# Known Issues
* TODO
* None at this time
# Deprecations
* Support for Kubernetes version 1.27 is removed in kOps 1.33.
* Support for Kubernetes version 1.27 is removed in kOps 1.33
* Support for Kubernetes version 1.28 is deprecated and will be removed in kOps 1.34
* Support for Kubernetes version 1.28 is deprecated and will be removed in kOps 1.34.
# Installation and Upgrade Notes
## Kubernetes 1.33 Upgrade Requirements
* **Important**: Clusters upgrading to Kubernetes 1.33 must use external cloud providers
* The cloud-config and cloud-provider flags are no longer supported in Kubernetes 1.33
* Plan your upgrade carefully and test in non-production environments first
## Recommended Upgrade Process
* Use the `kops reconcile cluster` command for Kubernetes minor version upgrades
* Review breaking changes before upgrading production clusters
* Ensure proper testing of cloud provider configuration changes
---
This release includes contributions from the kOps community. Thank you to all contributors who made this release possible!

View File

@ -7,6 +7,8 @@ This is a document to gather the release notes prior to the release.
# Significant changes
* Default SSH key is now `~/.ssh/id_ed25519.pub`, instead of the less secure `~/.ssh/id_rsa.pub`.
* `crictl` and `nerdctl` are now only installed on demand, by setting `spec.containerd.installCriCtl=true` and `spec.containerd.installNerdCtl=true`.
* `ebtables`, `ethtool` and `socat` are no longer installed by default.
## Some Feature

47
go.mod
View File

@ -1,9 +1,9 @@
module k8s.io/kops
// This should be kept in sync with cloudbuild.yaml and the other go.mod files
go 1.24.4
go 1.25.0
godebug default=go1.24
godebug default=go1.25
require (
cloud.google.com/go/compute/metadata v0.7.0
@ -18,7 +18,7 @@ require (
github.com/MakeNowJust/heredoc/v2 v2.0.1
github.com/Masterminds/sprig/v3 v3.3.0
github.com/apparentlymart/go-cidr v1.1.0
github.com/aws/amazon-ec2-instance-selector/v2 v2.4.2-0.20231216170552-14d4dfcbaadf
github.com/aws/amazon-ec2-instance-selector/v3 v3.1.1
github.com/aws/aws-sdk-go-v2 v1.36.5
github.com/aws/aws-sdk-go-v2/config v1.29.17
github.com/aws/aws-sdk-go-v2/credentials v1.17.70
@ -70,12 +70,12 @@ require (
go.opentelemetry.io/otel/trace v1.37.0
go.opentelemetry.io/proto/otlp v1.7.0
go.uber.org/multierr v1.11.0
golang.org/x/crypto v0.39.0
golang.org/x/crypto v0.41.0
golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b
golang.org/x/net v0.41.0
golang.org/x/net v0.43.0
golang.org/x/oauth2 v0.30.0
golang.org/x/sync v0.15.0
golang.org/x/sys v0.33.0
golang.org/x/sync v0.16.0
golang.org/x/sys v0.35.0
google.golang.org/api v0.239.0
google.golang.org/grpc v1.73.0
google.golang.org/protobuf v1.36.6
@ -123,17 +123,18 @@ require (
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.4 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.17 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.17 // indirect
github.com/aws/aws-sdk-go-v2/service/pricing v1.21.6 // indirect
github.com/aws/aws-sdk-go-v2/service/pricing v1.32.17 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.25.5 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.3 // indirect
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/chai2010/gettext-go v1.0.2 // indirect
github.com/charmbracelet/bubbles v0.16.1 // indirect
github.com/charmbracelet/bubbletea v0.24.2 // indirect
github.com/charmbracelet/lipgloss v0.7.1 // indirect
github.com/containerd/console v1.0.4 // indirect
github.com/charmbracelet/bubbles v0.20.0 // indirect
github.com/charmbracelet/bubbletea v1.3.3 // indirect
github.com/charmbracelet/lipgloss v1.0.0 // indirect
github.com/charmbracelet/x/ansi v0.8.0 // indirect
github.com/charmbracelet/x/term v0.2.1 // indirect
github.com/containerd/containerd v1.7.27 // indirect
github.com/containerd/errdefs v1.0.0 // indirect
github.com/containerd/log v0.1.0 // indirect
@ -146,9 +147,10 @@ require (
github.com/docker/docker-credential-helpers v0.9.3 // indirect
github.com/docker/go-events v0.0.0-20250114142523-c867878c5e32 // indirect
github.com/emicklei/go-restful/v3 v3.12.1 // indirect
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
github.com/evanphx/json-patch v5.9.11+incompatible // indirect
github.com/evanphx/json-patch/v5 v5.9.11 // indirect
github.com/evertras/bubble-table v0.15.2 // indirect
github.com/evertras/bubble-table v0.17.1 // indirect
github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.8.0 // indirect
@ -183,7 +185,6 @@ require (
github.com/hashicorp/golang-lru v0.5.4 // indirect
github.com/hashicorp/memberlist v0.3.1 // 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/jmespath/go-jmespath v0.4.1-0.20220621161143-b0104c826a24 // indirect
github.com/josharian/intern v1.0.0 // indirect
@ -196,7 +197,7 @@ require (
github.com/mailru/easyjson v0.9.0 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-localereader v0.0.1 // indirect
github.com/mattn/go-runewidth v0.0.14 // indirect
github.com/mattn/go-runewidth v0.0.16 // indirect
github.com/miekg/dns v1.1.62 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
@ -209,10 +210,10 @@ require (
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect
github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b // indirect
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
github.com/muesli/cancelreader v0.2.2 // indirect
github.com/muesli/reflow v0.3.0 // indirect
github.com/muesli/termenv v0.15.2 // indirect
github.com/muesli/termenv v0.16.0 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
github.com/oklog/ulid v1.3.1 // indirect
@ -228,10 +229,10 @@ require (
github.com/prometheus/client_model v0.6.2 // indirect
github.com/prometheus/common v0.62.0 // indirect
github.com/prometheus/procfs v0.15.1 // indirect
github.com/rivo/uniseg v0.2.0 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/sagikazarmark/locafero v0.7.0 // indirect
github.com/sahilm/fuzzy v0.1.0 // indirect
github.com/sahilm/fuzzy v0.1.1 // indirect
github.com/samber/lo v1.50.0 // indirect
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect
github.com/shopspring/decimal v1.4.0 // indirect
@ -248,11 +249,11 @@ require (
go.opentelemetry.io/otel/metric v1.37.0 // indirect
go.yaml.in/yaml/v2 v2.4.2 // indirect
go.yaml.in/yaml/v3 v3.0.3 // indirect
golang.org/x/mod v0.25.0 // indirect
golang.org/x/term v0.32.0 // indirect
golang.org/x/text v0.26.0 // indirect
golang.org/x/mod v0.27.0 // indirect
golang.org/x/term v0.34.0 // indirect
golang.org/x/text v0.28.0 // indirect
golang.org/x/time v0.12.0 // indirect
golang.org/x/tools v0.34.0 // indirect
golang.org/x/tools v0.36.0 // indirect
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250528174236-200df99c418a // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect

92
go.sum
View File

@ -71,11 +71,10 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
github.com/aws/amazon-ec2-instance-selector/v2 v2.4.2-0.20231216170552-14d4dfcbaadf h1:1zems5/6/Fs+1dFsjTZ+oSogVHkfGl1VWuttRXYGx+0=
github.com/aws/amazon-ec2-instance-selector/v2 v2.4.2-0.20231216170552-14d4dfcbaadf/go.mod h1:zsxolOKwtNEvoOPScJy5+Bu8F72LZy7pqVJNhP8tqVE=
github.com/aws/amazon-ec2-instance-selector/v3 v3.1.1 h1:8pw8T4Ae8tiXbxTxXhVStJSUJpEv29+YOQaDxIv3EaI=
github.com/aws/amazon-ec2-instance-selector/v3 v3.1.1/go.mod h1:RU/lVVsYHNN7Bwr2UmCw5z2aWPcNIHADY49bj082oYM=
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/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M=
github.com/aws/aws-sdk-go-v2 v1.36.5 h1:0OF9RiEMEdDdZEMqF9MRjevyxAQcf6gY+E7vwBILFj0=
github.com/aws/aws-sdk-go-v2 v1.36.5/go.mod h1:EYrzvCCN9CMUTa5+6lf6MM4tq3Zjp8UhSGR/cBsjai0=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.11 h1:12SpdwU8Djs+YGklkinSSlcrPyj3H4VifVsKf78KbwA=
@ -86,10 +85,8 @@ github.com/aws/aws-sdk-go-v2/credentials v1.17.70 h1:ONnH5CM16RTXRkS8Z1qg7/s2eDO
github.com/aws/aws-sdk-go-v2/credentials v1.17.70/go.mod h1:M+lWhhmomVGgtuPOhO85u4pEa3SmssPTdcYpP/5J/xc=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.32 h1:KAXP9JSHO1vKGCr5f4O6WmlVKLFFXgWYAGoJosorxzU=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.32/go.mod h1:h4Sg6FQdexC1yYG9RDnOvLbW1a/P986++/Y/a+GyEM8=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41/go.mod h1:CrObHAuPneJBlfEJ5T3szXOUkLEThaGfvnhTf33buas=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.36 h1:SsytQyTMHMDPspp+spo7XwXTP44aJZZAC7fBV2C5+5s=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.36/go.mod h1:Q1lnJArKRXkenyog6+Y+zr7WDpk4e6XlR6gs20bbeNo=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35/go.mod h1:SJC1nEVVva1g3pHAIdCp7QsRIkMmLAgoDquQ9Rr8kYw=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.36 h1:i2vNHQiXUvKhs3quBR6aqlgJaiaexz/aNvdCktW/kAM=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.36/go.mod h1:UdyGa7Q91id/sdyHPwth+043HhmP6yP9MBHgbZM0xo8=
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo=
@ -118,8 +115,8 @@ github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.17 h1:qcLWgdhq45sDM
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.17/go.mod h1:M+jkjBFZ2J6DJrjMv2+vkBbuht6kxJYtJiwoVgX4p4U=
github.com/aws/aws-sdk-go-v2/service/kms v1.41.2 h1:zJeUxFP7+XP52u23vrp4zMcVhShTWbNO8dHV6xCSvFo=
github.com/aws/aws-sdk-go-v2/service/kms v1.41.2/go.mod h1:Pqd9k4TuespkireN206cK2QBsaBTL6X+VPAez5Qcijk=
github.com/aws/aws-sdk-go-v2/service/pricing v1.21.6 h1:k/f3T13s7wx/By6aKovlVsjdNkRVT0QRR2RlZEvaTGg=
github.com/aws/aws-sdk-go-v2/service/pricing v1.21.6/go.mod h1:9n3tkRCngy3+Iw/8vK3C69iXh22SCGsy3yn16nTxH+s=
github.com/aws/aws-sdk-go-v2/service/pricing v1.32.17 h1:EtZFyL/uhaXlHjIwHW0KSJvppg+Ie1fzQ3wEXLEUj0I=
github.com/aws/aws-sdk-go-v2/service/pricing v1.32.17/go.mod h1:l7bufyRvU+8mY0Z1BNWbWvjr59dlj9YrLKmeiz5CJ30=
github.com/aws/aws-sdk-go-v2/service/route53 v1.52.2 h1:dXHWVVPx2W2fq2PTugj8QXpJ0YTRAGx0KLPKhMBmcsY=
github.com/aws/aws-sdk-go-v2/service/route53 v1.52.2/go.mod h1:wi1naoiPnCQG3cyjsivwPON1ZmQt/EJGxFqXzubBTAw=
github.com/aws/aws-sdk-go-v2/service/s3 v1.82.0 h1:JubM8CGDDFaAOmBrd8CRYNr49ZNgEAiLwGwgNMdS0nw=
@ -134,7 +131,6 @@ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.3 h1:BpOxT3yhLwSJ77qIY3DoHAQj
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.3/go.mod h1:vq/GQR1gOFLquZMSrxUK/cpvKCNVYibNyJ1m7JrU88E=
github.com/aws/aws-sdk-go-v2/service/sts v1.34.0 h1:NFOJ/NXEGV4Rq//71Hs1jC/NvPs1ezajK+yQmkwnPV0=
github.com/aws/aws-sdk-go-v2/service/sts v1.34.0/go.mod h1:7ph2tGpfQvwzgistp2+zga9f+bCjlQJPkPUmMgDSD7w=
github.com/aws/smithy-go v1.14.2/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
github.com/aws/smithy-go v1.22.4 h1:uqXzVZNuNexwc/xrh6Tb56u89WDlJY6HS+KC0S4QSjw=
github.com/aws/smithy-go v1.22.4/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI=
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
@ -157,16 +153,18 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UF
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk=
github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA=
github.com/charmbracelet/bubbles v0.16.1 h1:6uzpAAaT9ZqKssntbvZMlksWHruQLNxg49H5WdeuYSY=
github.com/charmbracelet/bubbles v0.16.1/go.mod h1:2QCp9LFlEsBQMvIYERr7Ww2H2bA7xen1idUDIzm/+Xc=
github.com/charmbracelet/bubbletea v0.24.2 h1:uaQIKx9Ai6Gdh5zpTbGiWpytMU+CfsPp06RaW2cx/SY=
github.com/charmbracelet/bubbletea v0.24.2/go.mod h1:XdrNrV4J8GiyshTtx3DNuYkR1FDaJmO3l2nejekbsgg=
github.com/charmbracelet/lipgloss v0.7.1 h1:17WMwi7N1b1rVWOjMT+rCh7sQkvDU75B2hbZpc5Kc1E=
github.com/charmbracelet/lipgloss v0.7.1/go.mod h1:yG0k3giv8Qj8edTCbbg6AlQ5e8KNWpFujkNawKNhE2c=
github.com/charmbracelet/bubbles v0.20.0 h1:jSZu6qD8cRQ6k9OMfR1WlM+ruM8fkPWkHvQWD9LIutE=
github.com/charmbracelet/bubbles v0.20.0/go.mod h1:39slydyswPy+uVOHZ5x/GjwVAFkCsV8IIVy+4MhzwwU=
github.com/charmbracelet/bubbletea v1.3.3 h1:WpU6fCY0J2vDWM3zfS3vIDi/ULq3SYphZhkAGGvmEUY=
github.com/charmbracelet/bubbletea v1.3.3/go.mod h1:dtcUCyCGEX3g9tosuYiut3MXgY/Jsv9nKVdibKKRRXo=
github.com/charmbracelet/lipgloss v1.0.0 h1:O7VkGDvqEdGi93X+DeqsQ7PKHDgtQfF8j8/O2qFMQNg=
github.com/charmbracelet/lipgloss v1.0.0/go.mod h1:U5fy9Z+C38obMs+T+tJqst9VGzlOYGj4ri9reL3qUlo=
github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE=
github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q=
github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
github.com/containerd/console v1.0.4 h1:F2g4+oChYvBTsASRTz8NP6iIAi97J3TtSAsLbIFn4ro=
github.com/containerd/console v1.0.4/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk=
github.com/containerd/containerd v1.7.27 h1:yFyEyojddO3MIGVER2xJLWoCIn+Up4GaHFquP7hsFII=
github.com/containerd/containerd v1.7.27/go.mod h1:xZmPnl75Vc+BLGt4MIfu6bp+fy03gdHAn9bz+FreFR0=
github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI=
@ -210,12 +208,14 @@ github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQ
github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw=
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/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4=
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM=
github.com/evanphx/json-patch v5.9.11+incompatible h1:ixHHqfcGvxhWkniF1tWxBHA0yb4Z+d1UQi45df52xW8=
github.com/evanphx/json-patch v5.9.11+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU=
github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM=
github.com/evertras/bubble-table v0.15.2 h1:hVj27V9tk5TD5p6mVv0RK/KJu2sHq0U+mBMux/HptkU=
github.com/evertras/bubble-table v0.15.2/go.mod h1:SPOZKbIpyYWPHBNki3fyNpiPBQkvkULAtOT7NTD5fKY=
github.com/evertras/bubble-table v0.17.1 h1:HJwq3iQrZulXDE93ZcqJNiUVQCBbN4IJ2CkB/IxO3kk=
github.com/evertras/bubble-table v0.17.1/go.mod h1:ifHujS1YxwnYSOgcR2+m3GnJ84f7CVU/4kUOxUCjEbQ=
github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f h1:Wl78ApPPB2Wvf/TIe2xdyJxTlb6obmF18d8QdkxNDu4=
github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f/go.mod h1:OSYXu++VVOHnXeitef/D8n/6y4QV8uLHSFXX4NeXMGc=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
@ -287,7 +287,6 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
@ -379,13 +378,10 @@ github.com/hetznercloud/hcloud-go/v2 v2.21.1 h1:IH3liW8/cCRjfJ4cyqYvw3s1ek+KWP8d
github.com/hetznercloud/hcloud-go/v2 v2.21.1/go.mod h1:XOaYycZJ3XKMVWzmqQ24/+1V7ormJHmPdck/kxrNnQA=
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/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/jacksontj/memberlistmesh v0.0.0-20190905163944-93462b9d2bb7 h1:q9rwMYjPWIFOSijnxXre4+RGo8xS0NVbJzXg+F0NMHc=
github.com/jacksontj/memberlistmesh v0.0.0-20190905163944-93462b9d2bb7/go.mod h1:fFX3XoduobgoJsVtpzIFRTgKZAbNhsSJIDNOgeUU5g4=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jmespath/go-jmespath v0.4.1-0.20220621161143-b0104c826a24 h1:liMMTbpW34dhU4az1GN0pTPADwNmvoRSeoZ6PItiqnY=
github.com/jmespath/go-jmespath v0.4.1-0.20220621161143-b0104c826a24/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
@ -432,8 +428,8 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D
github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4=
github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88=
github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU=
github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
@ -466,14 +462,14 @@ 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/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0=
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4=
github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b h1:1XF24mVaiu7u+CFywTdcDo2ie1pzzhwjt6RHqzpMU34=
github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b/go.mod h1:fQuZ0gauxyBcmsdE3ZT4NasjaRdxmbCS0jRHsrWu3Ho=
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI=
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo=
github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s=
github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8=
github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo=
github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8=
github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc=
github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk=
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/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
@ -545,8 +541,9 @@ github.com/redis/go-redis/extra/redisotel/v9 v9.0.5/go.mod h1:WZjPDy7VNzn77AAfnA
github.com/redis/go-redis/v9 v9.8.0 h1:q3nRvjrlge/6UD7eTu/DSg2uYiU2mCL0G/uzBWqhicI=
github.com/redis/go-redis/v9 v9.8.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw=
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
@ -554,8 +551,8 @@ github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD
github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/sagikazarmark/locafero v0.7.0 h1:5MqpDsTGNDhY8sGp0Aowyf0qKsPrhewaLSsFaodPcyo=
github.com/sagikazarmark/locafero v0.7.0/go.mod h1:2za3Cg5rMaTMoG/2Ulr9AwtFaIppKXTRYnozin4aB5k=
github.com/sahilm/fuzzy v0.1.0 h1:FzWGaw2Opqyu+794ZQ9SYifWv2EIXpwP4q8dY1kDAwI=
github.com/sahilm/fuzzy v0.1.0/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y=
github.com/sahilm/fuzzy v0.1.1 h1:ceu5RHF8DGgoi+/dR5PsECjCDH1BE3Fnmpo7aVXOdRA=
github.com/sahilm/fuzzy v0.1.1/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y=
github.com/samber/lo v1.50.0 h1:XrG0xOeHs+4FQ8gJR97zDz5uOFMW7OwFWiFVzqopKgY=
github.com/samber/lo v1.50.0/go.mod h1:RjZyNk6WSnUFRKK6EyOhsRJMqft3G+pg7dCWHQCWvsc=
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.33 h1:KhF0WejiUTDbL5X55nXowP7zNopwpowa6qaMAWyIE+0=
@ -683,8 +680,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM=
golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U=
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b h1:M2rDM6z3Fhozi9O7NWsxAkg/yqS/lQJ6PmkyIV3YP+o=
golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b/go.mod h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
@ -694,8 +691,8 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w=
golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ=
golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@ -712,8 +709,8 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@ -727,8 +724,8 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@ -745,6 +742,7 @@ golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@ -756,8 +754,8 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
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=
@ -767,8 +765,8 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4=
golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@ -779,8 +777,8 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@ -794,8 +792,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo=
golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg=
golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
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=

View File

@ -161,9 +161,10 @@ generate_k8s_hashes 1.27 16
generate_k8s_hashes 1.28 15
generate_k8s_hashes 1.29 15
generate_k8s_hashes 1.30 14
generate_k8s_hashes 1.31 11
generate_k8s_hashes 1.32 7
generate_k8s_hashes 1.33 3
generate_k8s_hashes 1.31 12
generate_k8s_hashes 1.32 8
generate_k8s_hashes 1.33 4
generate_k8s_hashes 1.34 0
# Generate runc hashes.
# The first argument is the major and minor version, the second is the maximum patch version.

View File

@ -1,11 +1,11 @@
module k8s.io/kops/hack
go 1.24.4
go 1.25.0
require (
github.com/client9/misspell v0.3.4
github.com/golangci/golangci-lint v1.64.8
golang.org/x/tools v0.34.0
github.com/golangci/golangci-lint/v2 v2.4.0
golang.org/x/tools v0.36.0
honnef.co/go/tools v0.6.1
sigs.k8s.io/controller-tools v0.18.0
)
@ -13,52 +13,64 @@ require (
require (
4d63.com/gocheckcompilerdirectives v1.3.0 // indirect
4d63.com/gochecknoglobals v0.2.2 // indirect
github.com/4meepo/tagalign v1.4.2 // indirect
github.com/Abirdcfly/dupword v0.1.3 // indirect
github.com/Antonboom/errname v1.0.0 // indirect
github.com/Antonboom/nilnil v1.0.1 // indirect
github.com/Antonboom/testifylint v1.5.2 // indirect
github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c // indirect
github.com/Crocmagnon/fatcontext v0.7.1 // indirect
codeberg.org/chavacava/garif v0.2.0 // indirect
dev.gaijin.team/go/exhaustruct/v4 v4.0.0 // indirect
dev.gaijin.team/go/golib v0.6.0 // indirect
github.com/4meepo/tagalign v1.4.3 // indirect
github.com/Abirdcfly/dupword v0.1.6 // indirect
github.com/AlwxSin/noinlineerr v1.0.5 // indirect
github.com/Antonboom/errname v1.1.0 // indirect
github.com/Antonboom/nilnil v1.1.0 // indirect
github.com/Antonboom/testifylint v1.6.1 // indirect
github.com/BurntSushi/toml v1.5.0 // indirect
github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 // indirect
github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.1 // indirect
github.com/Masterminds/semver/v3 v3.3.0 // indirect
github.com/Masterminds/semver/v3 v3.3.1 // indirect
github.com/OpenPeeDeeP/depguard/v2 v2.2.1 // indirect
github.com/alecthomas/chroma/v2 v2.20.0 // indirect
github.com/alecthomas/go-check-sumtype v0.3.1 // indirect
github.com/alexkohler/nakedret/v2 v2.0.5 // indirect
github.com/alexkohler/nakedret/v2 v2.0.6 // indirect
github.com/alexkohler/prealloc v1.0.0 // indirect
github.com/alfatraining/structtag v1.0.0 // indirect
github.com/alingse/asasalint v0.0.11 // indirect
github.com/alingse/nilnesserr v0.1.2 // indirect
github.com/ashanbrown/forbidigo v1.6.0 // indirect
github.com/ashanbrown/makezero v1.2.0 // indirect
github.com/alingse/nilnesserr v0.2.0 // indirect
github.com/ashanbrown/forbidigo/v2 v2.1.0 // indirect
github.com/ashanbrown/makezero/v2 v2.0.1 // indirect
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bkielbasa/cyclop v1.2.3 // indirect
github.com/blizzy78/varnamelen v0.8.0 // indirect
github.com/bombsimon/wsl/v4 v4.5.0 // indirect
github.com/breml/bidichk v0.3.2 // indirect
github.com/breml/errchkjson v0.4.0 // indirect
github.com/butuzov/ireturn v0.3.1 // indirect
github.com/bombsimon/wsl/v4 v4.7.0 // indirect
github.com/bombsimon/wsl/v5 v5.1.1 // indirect
github.com/breml/bidichk v0.3.3 // indirect
github.com/breml/errchkjson v0.4.1 // indirect
github.com/butuzov/ireturn v0.4.0 // indirect
github.com/butuzov/mirror v1.3.0 // indirect
github.com/catenacyber/perfsprint v0.8.2 // indirect
github.com/ccojocar/zxcvbn-go v1.0.2 // indirect
github.com/catenacyber/perfsprint v0.9.1 // indirect
github.com/ccojocar/zxcvbn-go v1.0.4 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/charithe/durationcheck v0.0.10 // indirect
github.com/chavacava/garif v0.1.0 // indirect
github.com/ckaznocha/intrange v0.3.0 // indirect
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect
github.com/charmbracelet/lipgloss v1.1.0 // indirect
github.com/charmbracelet/x/ansi v0.8.0 // indirect
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect
github.com/charmbracelet/x/term v0.2.1 // indirect
github.com/ckaznocha/intrange v0.3.1 // indirect
github.com/curioswitch/go-reassign v0.3.0 // indirect
github.com/daixiang0/gci v0.13.5 // indirect
github.com/daixiang0/gci v0.13.7 // indirect
github.com/dave/dst v0.27.3 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/denis-tingaikin/go-header v0.5.0 // indirect
github.com/dlclark/regexp2 v1.11.5 // indirect
github.com/ettle/strcase v0.2.0 // indirect
github.com/fatih/color v1.18.0 // indirect
github.com/fatih/structtag v1.2.0 // indirect
github.com/firefart/nonamedreturns v1.0.5 // indirect
github.com/firefart/nonamedreturns v1.0.6 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
github.com/fzipp/gocyclo v0.6.0 // indirect
github.com/ghostiam/protogetter v0.3.9 // indirect
github.com/go-critic/go-critic v0.12.0 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/ghostiam/protogetter v0.3.15 // indirect
github.com/go-critic/go-critic v0.13.0 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-openapi/jsonpointer v0.21.0 // indirect
github.com/go-openapi/jsonreference v0.20.2 // indirect
github.com/go-openapi/swag v0.23.0 // indirect
@ -69,7 +81,7 @@ require (
github.com/go-toolsmith/astp v1.1.0 // indirect
github.com/go-toolsmith/strparse v1.1.0 // indirect
github.com/go-toolsmith/typep v1.1.0 // indirect
github.com/go-viper/mapstructure/v2 v2.2.1 // indirect
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
github.com/go-xmlfmt/xmlfmt v1.1.3 // indirect
github.com/gobuffalo/flect v1.0.3 // indirect
github.com/gobwas/glob v0.2.3 // indirect
@ -78,10 +90,12 @@ require (
github.com/golangci/dupl v0.0.0-20250308024227-f665c8d69b32 // indirect
github.com/golangci/go-printf-func-name v0.1.0 // indirect
github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d // indirect
github.com/golangci/misspell v0.6.0 // indirect
github.com/golangci/plugin-module-register v0.1.1 // indirect
github.com/golangci/golines v0.0.0-20250217134842-442fd0091d95 // indirect
github.com/golangci/misspell v0.7.0 // indirect
github.com/golangci/plugin-module-register v0.1.2 // indirect
github.com/golangci/revgrep v0.8.0 // indirect
github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed // indirect
github.com/golangci/swaggoswag v0.0.0-20250504205917-77f2aca3143e // indirect
github.com/golangci/unconvert v0.0.0-20250410112200-a129a6e6413e // indirect
github.com/google/gnostic-models v0.6.9 // indirect
github.com/google/go-cmp v0.7.0 // indirect
github.com/gordonklaus/ineffassign v0.1.0 // indirect
@ -95,9 +109,9 @@ require (
github.com/hashicorp/hcl v1.0.1-vault-5 // indirect
github.com/hexops/gotextdiff v1.0.3 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jgautheron/goconst v1.7.1 // indirect
github.com/jgautheron/goconst v1.8.2 // indirect
github.com/jingyugao/rowserrcheck v1.1.1 // indirect
github.com/jjti/go-spancheck v0.6.4 // indirect
github.com/jjti/go-spancheck v0.6.5 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/julz/importas v0.2.0 // indirect
@ -105,43 +119,46 @@ require (
github.com/kisielk/errcheck v1.9.0 // indirect
github.com/kkHAIKE/contextcheck v1.1.6 // indirect
github.com/kulti/thelper v0.6.3 // indirect
github.com/kunwardeep/paralleltest v1.0.10 // indirect
github.com/kunwardeep/paralleltest v1.0.14 // indirect
github.com/lasiar/canonicalheader v1.1.2 // indirect
github.com/ldez/exptostd v0.4.2 // indirect
github.com/ldez/gomoddirectives v0.6.1 // indirect
github.com/ldez/grignotin v0.9.0 // indirect
github.com/ldez/exptostd v0.4.4 // indirect
github.com/ldez/gomoddirectives v0.7.0 // indirect
github.com/ldez/grignotin v0.10.0 // indirect
github.com/ldez/tagliatelle v0.7.1 // indirect
github.com/ldez/usetesting v0.4.2 // indirect
github.com/ldez/usetesting v0.5.0 // indirect
github.com/leonklingele/grouper v1.1.2 // indirect
github.com/macabu/inamedparam v0.1.3 // indirect
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
github.com/macabu/inamedparam v0.2.0 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/manuelarte/embeddedstructfieldcheck v0.3.0 // indirect
github.com/manuelarte/funcorder v0.5.0 // indirect
github.com/maratori/testableexamples v1.0.0 // indirect
github.com/maratori/testpackage v1.1.1 // indirect
github.com/matoous/godox v1.1.0 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.16 // indirect
github.com/mgechev/revive v1.7.0 // indirect
github.com/mgechev/revive v1.11.0 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/moricho/tparallel v0.3.2 // indirect
github.com/muesli/termenv v0.16.0 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/nakabonne/nestif v0.3.1 // indirect
github.com/nishanths/exhaustive v0.12.0 // indirect
github.com/nishanths/predeclared v0.2.2 // indirect
github.com/nunnatsa/ginkgolinter v0.19.1 // indirect
github.com/olekukonko/tablewriter v0.0.5 // indirect
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
github.com/nunnatsa/ginkgolinter v0.20.0 // indirect
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/polyfloyd/go-errorlint v1.7.1 // indirect
github.com/polyfloyd/go-errorlint v1.8.0 // indirect
github.com/prometheus/client_golang v1.22.0 // indirect
github.com/prometheus/client_model v0.6.1 // indirect
github.com/prometheus/common v0.62.0 // indirect
github.com/prometheus/procfs v0.15.1 // indirect
github.com/quasilyte/go-ruleguard v0.4.3-0.20240823090925-0fe6f58b47b1 // indirect
github.com/quasilyte/go-ruleguard v0.4.4 // indirect
github.com/quasilyte/go-ruleguard/dsl v0.3.22 // indirect
github.com/quasilyte/gogrep v0.5.0 // indirect
github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 // indirect
@ -149,25 +166,24 @@ require (
github.com/raeperd/recvcheck v0.2.0 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/rogpeppe/go-internal v1.14.1 // indirect
github.com/ryancurrah/gomodguard v1.3.5 // indirect
github.com/ryancurrah/gomodguard v1.4.1 // indirect
github.com/ryanrolds/sqlclosecheck v0.5.1 // indirect
github.com/sagikazarmark/locafero v0.4.0 // indirect
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/sanposhiho/wastedassign/v2 v2.1.0 // indirect
github.com/santhosh-tekuri/jsonschema/v6 v6.0.1 // indirect
github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 // indirect
github.com/sashamelentyev/interfacebloat v1.1.0 // indirect
github.com/sashamelentyev/usestdlibvars v1.28.0 // indirect
github.com/securego/gosec/v2 v2.22.2 // indirect
github.com/sashamelentyev/usestdlibvars v1.29.0 // indirect
github.com/securego/gosec/v2 v2.22.7 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/sivchari/containedctx v1.0.3 // indirect
github.com/sivchari/tenv v1.12.1 // indirect
github.com/sonatard/noctx v0.1.0 // indirect
github.com/sonatard/noctx v0.4.0 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
github.com/sourcegraph/go-diff v0.7.0 // indirect
github.com/spf13/afero v1.12.0 // indirect
github.com/spf13/afero v1.14.0 // indirect
github.com/spf13/cast v1.7.0 // indirect
github.com/spf13/cobra v1.9.1 // indirect
github.com/spf13/pflag v1.0.6 // indirect
github.com/spf13/pflag v1.0.7 // indirect
github.com/spf13/viper v1.19.0 // indirect
github.com/ssgreg/nlreturn/v2 v2.2.1 // indirect
github.com/stbenjam/no-sprintf-host-port v0.2.0 // indirect
@ -175,34 +191,37 @@ require (
github.com/stretchr/testify v1.10.0 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
github.com/tdakkota/asciicheck v0.4.1 // indirect
github.com/tetafro/godot v1.5.0 // indirect
github.com/timakin/bodyclose v0.0.0-20241017074812-ed6a65f985e3 // indirect
github.com/timonwong/loggercheck v0.10.1 // indirect
github.com/tomarrell/wrapcheck/v2 v2.10.0 // indirect
github.com/tetafro/godot v1.5.1 // indirect
github.com/timakin/bodyclose v0.0.0-20241222091800-1db5c5ca4d67 // indirect
github.com/timonwong/loggercheck v0.11.0 // indirect
github.com/tomarrell/wrapcheck/v2 v2.11.0 // indirect
github.com/tommy-muehle/go-mnd/v2 v2.5.1 // indirect
github.com/ultraware/funlen v0.2.0 // indirect
github.com/ultraware/whitespace v0.2.0 // indirect
github.com/uudashr/gocognit v1.2.0 // indirect
github.com/uudashr/iface v1.3.1 // indirect
github.com/uudashr/iface v1.4.1 // indirect
github.com/x448/float16 v0.8.4 // indirect
github.com/xen0n/gosmopolitan v1.2.2 // indirect
github.com/xen0n/gosmopolitan v1.3.0 // indirect
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
github.com/yagipy/maintidx v1.0.0 // indirect
github.com/yeya24/promlinter v0.3.0 // indirect
github.com/ykadowak/zerologlint v0.1.5 // indirect
gitlab.com/bosi/decorder v0.4.2 // indirect
go-simpler.org/musttag v0.13.0 // indirect
go-simpler.org/sloglint v0.9.0 // indirect
go-simpler.org/musttag v0.13.1 // indirect
go-simpler.org/sloglint v0.11.1 // indirect
go.augendre.info/arangolint v0.2.0 // indirect
go.augendre.info/fatcontext v0.8.0 // indirect
go.uber.org/automaxprocs v1.6.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect
golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac // indirect
golang.org/x/mod v0.25.0 // indirect
golang.org/x/net v0.41.0 // indirect
golang.org/x/sync v0.15.0 // indirect
golang.org/x/sys v0.33.0 // indirect
golang.org/x/text v0.26.0 // indirect
google.golang.org/protobuf v1.36.5 // indirect
golang.org/x/exp/typeparams v0.0.0-20250620022241-b7579e27df2b // indirect
golang.org/x/mod v0.27.0 // indirect
golang.org/x/net v0.43.0 // indirect
golang.org/x/sync v0.16.0 // indirect
golang.org/x/sys v0.35.0 // indirect
golang.org/x/text v0.28.0 // indirect
google.golang.org/protobuf v1.36.6 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
@ -215,8 +234,8 @@ require (
k8s.io/klog/v2 v2.130.1 // indirect
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect
mvdan.cc/gofumpt v0.7.0 // indirect
mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f // indirect
mvdan.cc/gofumpt v0.8.0 // indirect
mvdan.cc/unparam v0.0.0-20250301125049-0df0534333a4 // indirect
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
sigs.k8s.io/randfill v1.0.0 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.6.0 // indirect

View File

@ -2,98 +2,122 @@
4d63.com/gocheckcompilerdirectives v1.3.0/go.mod h1:ofsJ4zx2QAuIP/NO/NAh1ig6R1Fb18/GI7RVMwz7kAY=
4d63.com/gochecknoglobals v0.2.2 h1:H1vdnwnMaZdQW/N+NrkT1SZMTBmcwHe9Vq8lJcYYTtU=
4d63.com/gochecknoglobals v0.2.2/go.mod h1:lLxwTQjL5eIesRbvnzIP3jZtG140FnTdz+AlMa+ogt0=
github.com/4meepo/tagalign v1.4.2 h1:0hcLHPGMjDyM1gHG58cS73aQF8J4TdVR96TZViorO9E=
github.com/4meepo/tagalign v1.4.2/go.mod h1:+p4aMyFM+ra7nb41CnFG6aSDXqRxU/w1VQqScKqDARI=
github.com/Abirdcfly/dupword v0.1.3 h1:9Pa1NuAsZvpFPi9Pqkd93I7LIYRURj+A//dFd5tgBeE=
github.com/Abirdcfly/dupword v0.1.3/go.mod h1:8VbB2t7e10KRNdwTVoxdBaxla6avbhGzb8sCTygUMhw=
github.com/Antonboom/errname v1.0.0 h1:oJOOWR07vS1kRusl6YRSlat7HFnb3mSfMl6sDMRoTBA=
github.com/Antonboom/errname v1.0.0/go.mod h1:gMOBFzK/vrTiXN9Oh+HFs+e6Ndl0eTFbtsRTSRdXyGI=
github.com/Antonboom/nilnil v1.0.1 h1:C3Tkm0KUxgfO4Duk3PM+ztPncTFlOf0b2qadmS0s4xs=
github.com/Antonboom/nilnil v1.0.1/go.mod h1:CH7pW2JsRNFgEh8B2UaPZTEPhCMuFowP/e8Udp9Nnb0=
github.com/Antonboom/testifylint v1.5.2 h1:4s3Xhuv5AvdIgbd8wOOEeo0uZG7PbDKQyKY5lGoQazk=
github.com/Antonboom/testifylint v1.5.2/go.mod h1:vxy8VJ0bc6NavlYqjZfmp6EfqXMtBgQ4+mhCojwC1P8=
github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs=
github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/Crocmagnon/fatcontext v0.7.1 h1:SC/VIbRRZQeQWj/TcQBS6JmrXcfA+BU4OGSVUt54PjM=
github.com/Crocmagnon/fatcontext v0.7.1/go.mod h1:1wMvv3NXEBJucFGfwOJBxSVWcoIO6emV215SMkW9MFU=
codeberg.org/chavacava/garif v0.2.0 h1:F0tVjhYbuOCnvNcU3YSpO6b3Waw6Bimy4K0mM8y6MfY=
codeberg.org/chavacava/garif v0.2.0/go.mod h1:P2BPbVbT4QcvLZrORc2T29szK3xEOlnl0GiPTJmEqBQ=
dev.gaijin.team/go/exhaustruct/v4 v4.0.0 h1:873r7aNneqoBB3IaFIzhvt2RFYTuHgmMjoKfwODoI1Y=
dev.gaijin.team/go/exhaustruct/v4 v4.0.0/go.mod h1:aZ/k2o4Y05aMJtiux15x8iXaumE88YdiB0Ai4fXOzPI=
dev.gaijin.team/go/golib v0.6.0 h1:v6nnznFTs4bppib/NyU1PQxobwDHwCXXl15P7DV5Zgo=
dev.gaijin.team/go/golib v0.6.0/go.mod h1:uY1mShx8Z/aNHWDyAkZTkX+uCi5PdX7KsG1eDQa2AVE=
github.com/4meepo/tagalign v1.4.3 h1:Bnu7jGWwbfpAie2vyl63Zup5KuRv21olsPIha53BJr8=
github.com/4meepo/tagalign v1.4.3/go.mod h1:00WwRjiuSbrRJnSVeGWPLp2epS5Q/l4UEy0apLLS37c=
github.com/Abirdcfly/dupword v0.1.6 h1:qeL6u0442RPRe3mcaLcbaCi2/Y/hOcdtw6DE9odjz9c=
github.com/Abirdcfly/dupword v0.1.6/go.mod h1:s+BFMuL/I4YSiFv29snqyjwzDp4b65W2Kvy+PKzZ6cw=
github.com/AlwxSin/noinlineerr v1.0.5 h1:RUjt63wk1AYWTXtVXbSqemlbVTb23JOSRiNsshj7TbY=
github.com/AlwxSin/noinlineerr v1.0.5/go.mod h1:+QgkkoYrMH7RHvcdxdlI7vYYEdgeoFOVjU9sUhw/rQc=
github.com/Antonboom/errname v1.1.0 h1:A+ucvdpMwlo/myWrkHEUEBWc/xuXdud23S8tmTb/oAE=
github.com/Antonboom/errname v1.1.0/go.mod h1:O1NMrzgUcVBGIfi3xlVuvX8Q/VP/73sseCaAppfjqZw=
github.com/Antonboom/nilnil v1.1.0 h1:jGxJxjgYS3VUUtOTNk8Z1icwT5ESpLH/426fjmQG+ng=
github.com/Antonboom/nilnil v1.1.0/go.mod h1:b7sAlogQjFa1wV8jUW3o4PMzDVFLbTux+xnQdvzdcIE=
github.com/Antonboom/testifylint v1.6.1 h1:6ZSytkFWatT8mwZlmRCHkWz1gPi+q6UBSbieji2Gj/o=
github.com/Antonboom/testifylint v1.6.1/go.mod h1:k+nEkathI2NFjKO6HvwmSrbzUcQ6FAnbZV+ZRrnXPLI=
github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM=
github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs=
github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.1 h1:Sz1JIXEcSfhz7fUi7xHnhpIE0thVASYjvosApmHuD2k=
github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.1/go.mod h1:n/LSCXNuIYqVfBlVXyHfMQkZDdp1/mmxfSjADd3z1Zg=
github.com/Masterminds/semver/v3 v3.3.0 h1:B8LGeaivUe71a5qox1ICM/JLl0NqZSW5CHyL+hmvYS0=
github.com/Masterminds/semver/v3 v3.3.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
github.com/Masterminds/semver/v3 v3.3.1 h1:QtNSWtVZ3nBfk8mAOu/B6v7FMJ+NHTIgUPi7rj+4nv4=
github.com/Masterminds/semver/v3 v3.3.1/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
github.com/OpenPeeDeeP/depguard/v2 v2.2.1 h1:vckeWVESWp6Qog7UZSARNqfu/cZqvki8zsuj3piCMx4=
github.com/OpenPeeDeeP/depguard/v2 v2.2.1/go.mod h1:q4DKzC4UcVaAvcfd41CZh0PWpGgzrVxUYBlgKNGquUo=
github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0=
github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k=
github.com/alecthomas/chroma/v2 v2.20.0 h1:sfIHpxPyR07/Oylvmcai3X/exDlE8+FA820NTz+9sGw=
github.com/alecthomas/chroma/v2 v2.20.0/go.mod h1:e7tViK0xh/Nf4BYHl00ycY6rV7b8iXBksI9E359yNmA=
github.com/alecthomas/go-check-sumtype v0.3.1 h1:u9aUvbGINJxLVXiFvHUlPEaD7VDULsrxJb4Aq31NLkU=
github.com/alecthomas/go-check-sumtype v0.3.1/go.mod h1:A8TSiN3UPRw3laIgWEUOHHLPa6/r9MtoigdlP5h3K/E=
github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc=
github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
github.com/alexkohler/nakedret/v2 v2.0.5 h1:fP5qLgtwbx9EJE8dGEERT02YwS8En4r9nnZ71RK+EVU=
github.com/alexkohler/nakedret/v2 v2.0.5/go.mod h1:bF5i0zF2Wo2o4X4USt9ntUWve6JbFv02Ff4vlkmS/VU=
github.com/alecthomas/repr v0.5.1 h1:E3G4t2QbHTSNpPKBgMTln5KLkZHLOcU7r37J4pXBuIg=
github.com/alecthomas/repr v0.5.1/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
github.com/alexkohler/nakedret/v2 v2.0.6 h1:ME3Qef1/KIKr3kWX3nti3hhgNxw6aqN5pZmQiFSsuzQ=
github.com/alexkohler/nakedret/v2 v2.0.6/go.mod h1:l3RKju/IzOMQHmsEvXwkqMDzHHvurNQfAgE1eVmT40Q=
github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw=
github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE=
github.com/alfatraining/structtag v1.0.0 h1:2qmcUqNcCoyVJ0up879K614L9PazjBSFruTB0GOFjCc=
github.com/alfatraining/structtag v1.0.0/go.mod h1:p3Xi5SwzTi+Ryj64DqjLWz7XurHxbGsq6y3ubePJPus=
github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw=
github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I=
github.com/alingse/nilnesserr v0.1.2 h1:Yf8Iwm3z2hUUrP4muWfW83DF4nE3r1xZ26fGWUKCZlo=
github.com/alingse/nilnesserr v0.1.2/go.mod h1:1xJPrXonEtX7wyTq8Dytns5P2hNzoWymVUIaKm4HNFg=
github.com/ashanbrown/forbidigo v1.6.0 h1:D3aewfM37Yb3pxHujIPSpTf6oQk9sc9WZi8gerOIVIY=
github.com/ashanbrown/forbidigo v1.6.0/go.mod h1:Y8j9jy9ZYAEHXdu723cUlraTqbzjKF1MUyfOKL+AjcU=
github.com/ashanbrown/makezero v1.2.0 h1:/2Lp1bypdmK9wDIq7uWBlDF1iMUpIIS4A+pF6C9IEUU=
github.com/ashanbrown/makezero v1.2.0/go.mod h1:dxlPhHbDMC6N6xICzFBSK+4njQDdK8euNO0qjQMtGY4=
github.com/alingse/nilnesserr v0.2.0 h1:raLem5KG7EFVb4UIDAXgrv3N2JIaffeKNtcEXkEWd/w=
github.com/alingse/nilnesserr v0.2.0/go.mod h1:1xJPrXonEtX7wyTq8Dytns5P2hNzoWymVUIaKm4HNFg=
github.com/ashanbrown/forbidigo/v2 v2.1.0 h1:NAxZrWqNUQiDz19FKScQ/xvwzmij6BiOw3S0+QUQ+Hs=
github.com/ashanbrown/forbidigo/v2 v2.1.0/go.mod h1:0zZfdNAuZIL7rSComLGthgc/9/n2FqspBOH90xlCHdA=
github.com/ashanbrown/makezero/v2 v2.0.1 h1:r8GtKetWOgoJ4sLyUx97UTwyt2dO7WkGFHizn/Lo8TY=
github.com/ashanbrown/makezero/v2 v2.0.1/go.mod h1:kKU4IMxmYW1M4fiEHMb2vc5SFoPzXvgbMR9gIp5pjSw=
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bkielbasa/cyclop v1.2.3 h1:faIVMIGDIANuGPWH031CZJTi2ymOQBULs9H21HSMa5w=
github.com/bkielbasa/cyclop v1.2.3/go.mod h1:kHTwA9Q0uZqOADdupvcFJQtp/ksSnytRMe8ztxG8Fuo=
github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M=
github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k=
github.com/bombsimon/wsl/v4 v4.5.0 h1:iZRsEvDdyhd2La0FVi5k6tYehpOR/R7qIUjmKk7N74A=
github.com/bombsimon/wsl/v4 v4.5.0/go.mod h1:NOQ3aLF4nD7N5YPXMruR6ZXDOAqLoM0GEpLwTdvmOSc=
github.com/breml/bidichk v0.3.2 h1:xV4flJ9V5xWTqxL+/PMFF6dtJPvZLPsyixAoPe8BGJs=
github.com/breml/bidichk v0.3.2/go.mod h1:VzFLBxuYtT23z5+iVkamXO386OB+/sVwZOpIj6zXGos=
github.com/breml/errchkjson v0.4.0 h1:gftf6uWZMtIa/Is3XJgibewBm2ksAQSY/kABDNFTAdk=
github.com/breml/errchkjson v0.4.0/go.mod h1:AuBOSTHyLSaaAFlWsRSuRBIroCh3eh7ZHh5YeelDIk8=
github.com/butuzov/ireturn v0.3.1 h1:mFgbEI6m+9W8oP/oDdfA34dLisRFCj2G6o/yiI1yZrY=
github.com/butuzov/ireturn v0.3.1/go.mod h1:ZfRp+E7eJLC0NQmk1Nrm1LOrn/gQlOykv+cVPdiXH5M=
github.com/bombsimon/wsl/v4 v4.7.0 h1:1Ilm9JBPRczjyUs6hvOPKvd7VL1Q++PL8M0SXBDf+jQ=
github.com/bombsimon/wsl/v4 v4.7.0/go.mod h1:uV/+6BkffuzSAVYD+yGyld1AChO7/EuLrCF/8xTiapg=
github.com/bombsimon/wsl/v5 v5.1.1 h1:cQg5KJf9FlctAH4cpL9vLKnziYknoCMCdqXl0wjl72Q=
github.com/bombsimon/wsl/v5 v5.1.1/go.mod h1:Gp8lD04z27wm3FANIUPZycXp+8huVsn0oxc+n4qfV9I=
github.com/breml/bidichk v0.3.3 h1:WSM67ztRusf1sMoqH6/c4OBCUlRVTKq+CbSeo0R17sE=
github.com/breml/bidichk v0.3.3/go.mod h1:ISbsut8OnjB367j5NseXEGGgO/th206dVa427kR8YTE=
github.com/breml/errchkjson v0.4.1 h1:keFSS8D7A2T0haP9kzZTi7o26r7kE3vymjZNeNDRDwg=
github.com/breml/errchkjson v0.4.1/go.mod h1:a23OvR6Qvcl7DG/Z4o0el6BRAjKnaReoPQFciAl9U3s=
github.com/butuzov/ireturn v0.4.0 h1:+s76bF/PfeKEdbG8b54aCocxXmi0wvYdOVsWxVO7n8E=
github.com/butuzov/ireturn v0.4.0/go.mod h1:ghI0FrCmap8pDWZwfPisFD1vEc56VKH4NpQUxDHta70=
github.com/butuzov/mirror v1.3.0 h1:HdWCXzmwlQHdVhwvsfBb2Au0r3HyINry3bDWLYXiKoc=
github.com/butuzov/mirror v1.3.0/go.mod h1:AEij0Z8YMALaq4yQj9CPPVYOyJQyiexpQEQgihajRfI=
github.com/catenacyber/perfsprint v0.8.2 h1:+o9zVmCSVa7M4MvabsWvESEhpsMkhfE7k0sHNGL95yw=
github.com/catenacyber/perfsprint v0.8.2/go.mod h1:q//VWC2fWbcdSLEY1R3l8n0zQCDPdE4IjZwyY1HMunM=
github.com/ccojocar/zxcvbn-go v1.0.2 h1:na/czXU8RrhXO4EZme6eQJLR4PzcGsahsBOAwU6I3Vg=
github.com/ccojocar/zxcvbn-go v1.0.2/go.mod h1:g1qkXtUSvHP8lhHp5GrSmTz6uWALGRMQdw6Qnz/hi60=
github.com/catenacyber/perfsprint v0.9.1 h1:5LlTp4RwTooQjJCvGEFV6XksZvWE7wCOUvjD2z0vls0=
github.com/catenacyber/perfsprint v0.9.1/go.mod h1:q//VWC2fWbcdSLEY1R3l8n0zQCDPdE4IjZwyY1HMunM=
github.com/ccojocar/zxcvbn-go v1.0.4 h1:FWnCIRMXPj43ukfX000kvBZvV6raSxakYr1nzyNrUcc=
github.com/ccojocar/zxcvbn-go v1.0.4/go.mod h1:3GxGX+rHmueTUMvm5ium7irpyjmm7ikxYFOSJB21Das=
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/charithe/durationcheck v0.0.10 h1:wgw73BiocdBDQPik+zcEoBG/ob8uyBHf2iyoHGPf5w4=
github.com/charithe/durationcheck v0.0.10/go.mod h1:bCWXb7gYRysD1CU3C+u4ceO49LoGOY1C1L6uouGNreQ=
github.com/chavacava/garif v0.1.0 h1:2JHa3hbYf5D9dsgseMKAmc/MZ109otzgNFk5s87H9Pc=
github.com/chavacava/garif v0.1.0/go.mod h1:XMyYCkEL58DF0oyW4qDjjnPWONs2HBqYKI+UIPD+Gww=
github.com/ckaznocha/intrange v0.3.0 h1:VqnxtK32pxgkhJgYQEeOArVidIPg+ahLP7WBOXZd5ZY=
github.com/ckaznocha/intrange v0.3.0/go.mod h1:+I/o2d2A1FBHgGELbGxzIcyd3/9l9DuwjM8FsbSS3Lo=
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs=
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk=
github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE=
github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q=
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd h1:vy0GVL4jeHEwG5YOXDmi86oYw2yuYUGqz6a8sLwg0X8=
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs=
github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
github.com/ckaznocha/intrange v0.3.1 h1:j1onQyXvHUsPWujDH6WIjhyH26gkRt/txNlV7LspvJs=
github.com/ckaznocha/intrange v0.3.1/go.mod h1:QVepyz1AkUoFQkpEqksSYpNpUo3c5W7nWh/s6SHIJJk=
github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/curioswitch/go-reassign v0.3.0 h1:dh3kpQHuADL3cobV/sSGETA8DOv457dwl+fbBAhrQPs=
github.com/curioswitch/go-reassign v0.3.0/go.mod h1:nApPCCTtqLJN/s8HfItCcKV0jIPwluBOvZP+dsJGA88=
github.com/daixiang0/gci v0.13.5 h1:kThgmH1yBmZSBCh1EJVxQ7JsHpm5Oms0AMed/0LaH4c=
github.com/daixiang0/gci v0.13.5/go.mod h1:12etP2OniiIdP4q+kjUGrC/rUagga7ODbqsom5Eo5Yk=
github.com/daixiang0/gci v0.13.7 h1:+0bG5eK9vlI08J+J/NWGbWPTNiXPG4WhNLJOkSxWITQ=
github.com/daixiang0/gci v0.13.7/go.mod h1:812WVN6JLFY9S6Tv76twqmNqevN0pa3SX3nih0brVzQ=
github.com/dave/dst v0.27.3 h1:P1HPoMza3cMEquVf9kKy8yXsFirry4zEnWOdYPOoIzY=
github.com/dave/dst v0.27.3/go.mod h1:jHh6EOibnHgcUW3WjKHisiooEkYwqpHLBSX1iOBhEyc=
github.com/dave/jennifer v1.7.1 h1:B4jJJDHelWcDhlRQxWeo0Npa/pYKBLrirAQoTN45txo=
github.com/dave/jennifer v1.7.1/go.mod h1:nXbxhEmQfOZhWml3D1cDK5M1FLnMSozpbFN/m3RmGZc=
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/denis-tingaikin/go-header v0.5.0 h1:SRdnP5ZKvcO9KKRP1KJrhFR3RrlGuD+42t4429eC9k8=
github.com/denis-tingaikin/go-header v0.5.0/go.mod h1:mMenU5bWrok6Wl2UsZjy+1okegmwQ3UgWl4V1D8gjlY=
github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI=
github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ=
github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
github.com/ettle/strcase v0.2.0 h1:fGNiVF21fHXpX1niBgk0aROov1LagYsOwV/xqKDKR/Q=
github.com/ettle/strcase v0.2.0/go.mod h1:DajmHElDSaX76ITe3/VHVyMin4LWSJN5Z909Wp+ED1A=
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4=
github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94=
github.com/firefart/nonamedreturns v1.0.5 h1:tM+Me2ZaXs8tfdDw3X6DOX++wMCOqzYUho6tUTYIdRA=
github.com/firefart/nonamedreturns v1.0.5/go.mod h1:gHJjDqhGM4WyPt639SOZs+G89Ko7QKH5R5BhnO6xJhw=
github.com/firefart/nonamedreturns v1.0.6 h1:vmiBcKV/3EqKY3ZiPxCINmpS431OcE1S47AQUwhrg8E=
github.com/firefart/nonamedreturns v1.0.6/go.mod h1:R8NisJnSIpvPWheCq0mNRXJok6D8h7fagJTF8EMEwCo=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
@ -102,12 +126,12 @@ github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv
github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo=
github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA=
github.com/ghostiam/protogetter v0.3.9 h1:j+zlLLWzqLay22Cz/aYwTHKQ88GE2DQ6GkWSYFOI4lQ=
github.com/ghostiam/protogetter v0.3.9/go.mod h1:WZ0nw9pfzsgxuRsPOFQomgDVSWtDLJRfQJEhsGbmQMA=
github.com/go-critic/go-critic v0.12.0 h1:iLosHZuye812wnkEz1Xu3aBwn5ocCPfc9yqmFG9pa6w=
github.com/go-critic/go-critic v0.12.0/go.mod h1:DpE0P6OVc6JzVYzmM5gq5jMU31zLr4am5mB/VfFK64w=
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/ghostiam/protogetter v0.3.15 h1:1KF5sXel0HE48zh1/vn0Loiw25A9ApyseLzQuif1mLY=
github.com/ghostiam/protogetter v0.3.15/go.mod h1:WZ0nw9pfzsgxuRsPOFQomgDVSWtDLJRfQJEhsGbmQMA=
github.com/go-critic/go-critic v0.13.0 h1:kJzM7wzltQasSUXtYyTl6UaPVySO6GkaR1thFnJ6afY=
github.com/go-critic/go-critic v0.13.0/go.mod h1:M/YeuJ3vOCQDnP2SU+ZhjgRzwzcBW87JqLpMJLrZDLI=
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
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=
@ -139,8 +163,8 @@ github.com/go-toolsmith/strparse v1.1.0 h1:GAioeZUK9TGxnLS+qfdqNbA4z0SSm5zVNtCQi
github.com/go-toolsmith/strparse v1.1.0/go.mod h1:7ksGy58fsaQkGQlY8WVoBFNyEPMGuJin1rfoPS4lBSQ=
github.com/go-toolsmith/typep v1.1.0 h1:fIRYDyF+JywLfqzyhdiHzRop/GQDxxNhLGQ6gFUNHus=
github.com/go-toolsmith/typep v1.1.0/go.mod h1:fVIw+7zjdsMxDA3ITWnH1yOiw1rnTQKCsF/sk2H/qig=
github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss=
github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=
github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/go-xmlfmt/xmlfmt v1.1.3 h1:t8Ey3Uy7jDSEisW2K3somuMKIpzktkWptA0iFCnRUWY=
github.com/go-xmlfmt/xmlfmt v1.1.3/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM=
github.com/gobuffalo/flect v1.0.3 h1:xeWBM2nui+qnVvNM4S3foBhCAL2XgPU+a7FdpelbTq4=
@ -157,29 +181,32 @@ github.com/golangci/go-printf-func-name v0.1.0 h1:dVokQP+NMTO7jwO4bwsRwLWeudOVUP
github.com/golangci/go-printf-func-name v0.1.0/go.mod h1:wqhWFH5mUdJQhweRnldEywnR5021wTdZSNgwYceV14s=
github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d h1:viFft9sS/dxoYY0aiOTsLKO2aZQAPT4nlQCsimGcSGE=
github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d/go.mod h1:ivJ9QDg0XucIkmwhzCDsqcnxxlDStoTl89jDMIoNxKY=
github.com/golangci/golangci-lint v1.64.8 h1:y5TdeVidMtBGG32zgSC7ZXTFNHrsJkDnpO4ItB3Am+I=
github.com/golangci/golangci-lint v1.64.8/go.mod h1:5cEsUQBSr6zi8XI8OjmcY2Xmliqc4iYL7YoPrL+zLJ4=
github.com/golangci/misspell v0.6.0 h1:JCle2HUTNWirNlDIAUO44hUsKhOFqGPoC4LZxlaSXDs=
github.com/golangci/misspell v0.6.0/go.mod h1:keMNyY6R9isGaSAu+4Q8NMBwMPkh15Gtc8UCVoDtAWo=
github.com/golangci/plugin-module-register v0.1.1 h1:TCmesur25LnyJkpsVrupv1Cdzo+2f7zX0H6Jkw1Ol6c=
github.com/golangci/plugin-module-register v0.1.1/go.mod h1:TTpqoB6KkwOJMV8u7+NyXMrkwwESJLOkfl9TxR1DGFc=
github.com/golangci/golangci-lint/v2 v2.4.0 h1:qz6O6vr7kVzXJqyvHjHSz5fA3D+PM8v96QU5gxZCNWM=
github.com/golangci/golangci-lint/v2 v2.4.0/go.mod h1:Oq7vuAf6L1iNL34uHDcsIF6Mnc0amOPdsT3/GlpHD+I=
github.com/golangci/golines v0.0.0-20250217134842-442fd0091d95 h1:AkK+w9FZBXlU/xUmBtSJN1+tAI4FIvy5WtnUnY8e4p8=
github.com/golangci/golines v0.0.0-20250217134842-442fd0091d95/go.mod h1:k9mmcyWKSTMcPPvQUCfRWWQ9VHJ1U9Dc0R7kaXAgtnQ=
github.com/golangci/misspell v0.7.0 h1:4GOHr/T1lTW0hhR4tgaaV1WS/lJ+ncvYCoFKmqJsj0c=
github.com/golangci/misspell v0.7.0/go.mod h1:WZyyI2P3hxPY2UVHs3cS8YcllAeyfquQcKfdeE9AFVg=
github.com/golangci/plugin-module-register v0.1.2 h1:e5WM6PO6NIAEcij3B053CohVp3HIYbzSuP53UAYgOpg=
github.com/golangci/plugin-module-register v0.1.2/go.mod h1:1+QGTsKBvAIvPvoY/os+G5eoqxWn70HYDm2uvUyGuVw=
github.com/golangci/revgrep v0.8.0 h1:EZBctwbVd0aMeRnNUsFogoyayvKHyxlV3CdUA46FX2s=
github.com/golangci/revgrep v0.8.0/go.mod h1:U4R/s9dlXZsg8uJmaR1GrloUr14D7qDl8gi2iPXJH8k=
github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed h1:IURFTjxeTfNFP0hTEi1YKjB/ub8zkpaOqFFMApi2EAs=
github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed/go.mod h1:XLXN8bNw4CGRPaqgl3bv/lhz7bsGPh4/xSaMTbo2vkQ=
github.com/golangci/swaggoswag v0.0.0-20250504205917-77f2aca3143e h1:ai0EfmVYE2bRA5htgAG9r7s3tHsfjIhN98WshBTJ9jM=
github.com/golangci/swaggoswag v0.0.0-20250504205917-77f2aca3143e/go.mod h1:Vrn4B5oR9qRwM+f54koyeH3yzphlecwERs0el27Fr/s=
github.com/golangci/unconvert v0.0.0-20250410112200-a129a6e6413e h1:gD6P7NEo7Eqtt0ssnqSJNNndxe69DOQ24A5h7+i3KpM=
github.com/golangci/unconvert v0.0.0-20250410112200-a129a6e6413e/go.mod h1:h+wZwLjUTJnm/P2rwlbJdRPZXOzaT36/FwnPnY2inzc=
github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw=
github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg=
github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a h1://KbezygeMJZCSHH+HgUZiTeSoiuFspbMg1ge+eFj18=
github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA=
github.com/gordonklaus/ineffassign v0.1.0 h1:y2Gd/9I7MdY1oEIt+n+rowjBNDcLQq3RsH5hwJd0f9s=
github.com/gordonklaus/ineffassign v0.1.0/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0=
github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk=
@ -210,12 +237,12 @@ github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUq
github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/jgautheron/goconst v1.7.1 h1:VpdAG7Ca7yvvJk5n8dMwQhfEZJh95kl/Hl9S1OI5Jkk=
github.com/jgautheron/goconst v1.7.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4=
github.com/jgautheron/goconst v1.8.2 h1:y0XF7X8CikZ93fSNT6WBTb/NElBu9IjaY7CCYQrCMX4=
github.com/jgautheron/goconst v1.8.2/go.mod h1:A0oxgBCHy55NQn6sYpO7UdnA9p+h7cPtoOZUmvNIako=
github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs=
github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c=
github.com/jjti/go-spancheck v0.6.4 h1:Tl7gQpYf4/TMU7AT84MN83/6PutY21Nb9fuQjFTpRRc=
github.com/jjti/go-spancheck v0.6.4/go.mod h1:yAEYdKJ2lRkDA8g7X+oKUHXOWVAXSBJRv04OhF+QUjk=
github.com/jjti/go-spancheck v0.6.5 h1:lmi7pKxa37oKYIMScialXUK6hP3iY5F1gu+mLBPgYB8=
github.com/jjti/go-spancheck v0.6.5/go.mod h1:aEogkeatBrbYsyW6y5TgDfihCulDYciL1B7rG2vSsrU=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
@ -239,28 +266,34 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kulti/thelper v0.6.3 h1:ElhKf+AlItIu+xGnI990no4cE2+XaSu1ULymV2Yulxs=
github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I=
github.com/kunwardeep/paralleltest v1.0.10 h1:wrodoaKYzS2mdNVnc4/w31YaXFtsc21PCTdvWJ/lDDs=
github.com/kunwardeep/paralleltest v1.0.10/go.mod h1:2C7s65hONVqY7Q5Efj5aLzRCNLjw2h4eMc9EcypGjcY=
github.com/kunwardeep/paralleltest v1.0.14 h1:wAkMoMeGX/kGfhQBPODT/BL8XhK23ol/nuQ3SwFaUw8=
github.com/kunwardeep/paralleltest v1.0.14/go.mod h1:di4moFqtfz3ToSKxhNjhOZL+696QtJGCFe132CbBLGk=
github.com/lasiar/canonicalheader v1.1.2 h1:vZ5uqwvDbyJCnMhmFYimgMZnJMjwljN5VGY0VKbMXb4=
github.com/lasiar/canonicalheader v1.1.2/go.mod h1:qJCeLFS0G/QlLQ506T+Fk/fWMa2VmBUiEI2cuMK4djI=
github.com/ldez/exptostd v0.4.2 h1:l5pOzHBz8mFOlbcifTxzfyYbgEmoUqjxLFHZkjlbHXs=
github.com/ldez/exptostd v0.4.2/go.mod h1:iZBRYaUmcW5jwCR3KROEZ1KivQQp6PHXbDPk9hqJKCQ=
github.com/ldez/gomoddirectives v0.6.1 h1:Z+PxGAY+217f/bSGjNZr/b2KTXcyYLgiWI6geMBN2Qc=
github.com/ldez/gomoddirectives v0.6.1/go.mod h1:cVBiu3AHR9V31em9u2kwfMKD43ayN5/XDgr+cdaFaKs=
github.com/ldez/grignotin v0.9.0 h1:MgOEmjZIVNn6p5wPaGp/0OKWyvq42KnzAt/DAb8O4Ow=
github.com/ldez/grignotin v0.9.0/go.mod h1:uaVTr0SoZ1KBii33c47O1M8Jp3OP3YDwhZCmzT9GHEk=
github.com/ldez/exptostd v0.4.4 h1:58AtQjnLcT/tI5W/1KU7xE/O7zW9RAWB6c/ScQAnfus=
github.com/ldez/exptostd v0.4.4/go.mod h1:QfdzPw6oHjFVdNV7ILoPu5sw3OZ3OG1JS0I5JN3J4Js=
github.com/ldez/gomoddirectives v0.7.0 h1:EOx8Dd56BZYSez11LVgdj025lKwlP0/E5OLSl9HDwsY=
github.com/ldez/gomoddirectives v0.7.0/go.mod h1:wR4v8MN9J8kcwvrkzrx6sC9xe9Cp68gWYCsda5xvyGc=
github.com/ldez/grignotin v0.10.0 h1:NQPeh1E/Eza4F0exCeC1WkpnLvgUcQDT8MQ1vOLML0E=
github.com/ldez/grignotin v0.10.0/go.mod h1:oR4iCKUP9fwoeO6vCQeD7M5SMxCT6xdVas4vg0h1LaI=
github.com/ldez/tagliatelle v0.7.1 h1:bTgKjjc2sQcsgPiT902+aadvMjCeMHrY7ly2XKFORIk=
github.com/ldez/tagliatelle v0.7.1/go.mod h1:3zjxUpsNB2aEZScWiZTHrAXOl1x25t3cRmzfK1mlo2I=
github.com/ldez/usetesting v0.4.2 h1:J2WwbrFGk3wx4cZwSMiCQQ00kjGR0+tuuyW0Lqm4lwA=
github.com/ldez/usetesting v0.4.2/go.mod h1:eEs46T3PpQ+9RgN9VjpY6qWdiw2/QmfiDeWmdZdrjIQ=
github.com/ldez/usetesting v0.5.0 h1:3/QtzZObBKLy1F4F8jLuKJiKBjjVFi1IavpoWbmqLwc=
github.com/ldez/usetesting v0.5.0/go.mod h1:Spnb4Qppf8JTuRgblLrEWb7IE6rDmUpGvxY3iRrzvDQ=
github.com/leonklingele/grouper v1.1.2 h1:o1ARBDLOmmasUaNDesWqWCIFH3u7hoFlM84YrjT3mIY=
github.com/leonklingele/grouper v1.1.2/go.mod h1:6D0M/HVkhs2yRKRFZUoGjeDy7EZTfFBE9gl4kjmIGkA=
github.com/macabu/inamedparam v0.1.3 h1:2tk/phHkMlEL/1GNe/Yf6kkR/hkcUdAEY3L0hjYV1Mk=
github.com/macabu/inamedparam v0.1.3/go.mod h1:93FLICAIk/quk7eaPPQvbzihUdn/QkGDwIZEoLtpH6I=
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
github.com/macabu/inamedparam v0.2.0 h1:VyPYpOc10nkhI2qeNUdh3Zket4fcZjEWe35poddBCpE=
github.com/macabu/inamedparam v0.2.0/go.mod h1:+Pee9/YfGe5LJ62pYXqB89lJ+0k5bsR8Wgz/C0Zlq3U=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/manuelarte/embeddedstructfieldcheck v0.3.0 h1:VhGqK8gANDvFYDxQkjPbv7/gDJtsGU9k6qj/hC2hgso=
github.com/manuelarte/embeddedstructfieldcheck v0.3.0/go.mod h1:LSo/IQpPfx1dXMcX4ibZCYA7Yy6ayZHIaOGM70+1Wy8=
github.com/manuelarte/funcorder v0.5.0 h1:llMuHXXbg7tD0i/LNw8vGnkDTHFpTnWqKPI85Rknc+8=
github.com/manuelarte/funcorder v0.5.0/go.mod h1:Yt3CiUQthSBMBxjShjdXMexmzpP8YGvGLjrxJNkO2hA=
github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI=
github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE=
github.com/maratori/testpackage v1.1.1 h1:S58XVV5AD7HADMmD0fNnziNHqKvSdDuEKdPD1rNTU04=
@ -273,11 +306,10 @@ github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHP
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mgechev/revive v1.7.0 h1:JyeQ4yO5K8aZhIKf5rec56u0376h8AlKNQEmjfkjKlY=
github.com/mgechev/revive v1.7.0/go.mod h1:qZnwcNhoguE58dfi96IJeSTPeZQejNeoMQLUZGi4SW4=
github.com/mgechev/revive v1.11.0 h1:b/gLLpBE427o+Xmd8G58gSA+KtBwxWinH/A565Awh0w=
github.com/mgechev/revive v1.11.0/go.mod h1:tI0oLF/2uj+InHCBLrrqfTKfjtFTBCFFfG05auyzgdw=
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
@ -289,6 +321,8 @@ 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/moricho/tparallel v0.3.2 h1:odr8aZVFA3NZrNybggMkYO3rgPRcqjeQUlBBFVxKHTI=
github.com/moricho/tparallel v0.3.2/go.mod h1:OQ+K3b4Ln3l2TZveGCywybl68glfLEwFGqvnjok8b+U=
github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc=
github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk=
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/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U=
@ -297,16 +331,14 @@ github.com/nishanths/exhaustive v0.12.0 h1:vIY9sALmw6T/yxiASewa4TQcFsVYZQQRUQJhK
github.com/nishanths/exhaustive v0.12.0/go.mod h1:mEZ95wPIZW+x8kC4TgC+9YCUgiST7ecevsVDTgc2obs=
github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk=
github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c=
github.com/nunnatsa/ginkgolinter v0.19.1 h1:mjwbOlDQxZi9Cal+KfbEJTCz327OLNfwNvoZ70NJ+c4=
github.com/nunnatsa/ginkgolinter v0.19.1/go.mod h1:jkQ3naZDmxaZMXPWaS9rblH+i+GWXQCaS/JFIWcOH2s=
github.com/nunnatsa/ginkgolinter v0.20.0 h1:OmWLkAFO2HUTYcU6mprnKud1Ey5pVdiVNYGO5HVicx8=
github.com/nunnatsa/ginkgolinter v0.20.0/go.mod h1:dCIuFlTPfQerXgGUju3VygfAFPdC5aE1mdacCDKDJcQ=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
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/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=
github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus=
github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8=
github.com/onsi/gomega v1.37.0 h1:CdEG8g0S133B4OswTDC/5XPSzE1OeP29QOioj2PID2Y=
github.com/onsi/gomega v1.37.0/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0=
github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw=
@ -316,13 +348,13 @@ github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJ
github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs=
github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo=
github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc=
github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
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/polyfloyd/go-errorlint v1.7.1 h1:RyLVXIbosq1gBdk/pChWA8zWYLsq9UEw7a1L5TVMCnA=
github.com/polyfloyd/go-errorlint v1.7.1/go.mod h1:aXjNb1x2TNhoLsk26iv1yl7a+zTnXPhwEMtEXukiLR8=
github.com/polyfloyd/go-errorlint v1.8.0 h1:DL4RestQqRLr8U4LygLw8g2DX6RN1eBJOpa2mzsrl1Q=
github.com/polyfloyd/go-errorlint v1.8.0/go.mod h1:G2W0Q5roxbLCt0ZQbdoxQxXktTjwNyDbEaj3n7jvl4s=
github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U=
github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q=
@ -333,8 +365,8 @@ github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ
github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I=
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/quasilyte/go-ruleguard v0.4.3-0.20240823090925-0fe6f58b47b1 h1:+Wl/0aFp0hpuHM3H//KMft64WQ1yX9LdJY64Qm/gFCo=
github.com/quasilyte/go-ruleguard v0.4.3-0.20240823090925-0fe6f58b47b1/go.mod h1:GJLgqsLeo4qgavUoL8JeGFNS7qcisx3awV/w9eWTmNI=
github.com/quasilyte/go-ruleguard v0.4.4 h1:53DncefIeLX3qEpjzlS1lyUmQoUEeOWPFWqaTJq9eAQ=
github.com/quasilyte/go-ruleguard v0.4.4/go.mod h1:Vl05zJ538vcEEwu16V/Hdu7IYZWyKSwIy4c88Ro1kRE=
github.com/quasilyte/go-ruleguard/dsl v0.3.22 h1:wd8zkOhSNr+I+8Qeciml08ivDt1pSXe60+5DqOpCjPE=
github.com/quasilyte/go-ruleguard/dsl v0.3.22/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU=
github.com/quasilyte/gogrep v0.5.0 h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo=
@ -351,8 +383,8 @@ github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUc
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryancurrah/gomodguard v1.3.5 h1:cShyguSwUEeC0jS7ylOiG/idnd1TpJ1LfHGpV3oJmPU=
github.com/ryancurrah/gomodguard v1.3.5/go.mod h1:MXlEPQRxgfPQa62O8wzK3Ozbkv9Rkqr+wKjSxTdsNJE=
github.com/ryancurrah/gomodguard v1.4.1 h1:eWC8eUMNZ/wM/PWuZBv7JxxqT5fiIKSIyTvjb7Elr+g=
github.com/ryancurrah/gomodguard v1.4.1/go.mod h1:qnMJwV1hX9m+YJseXEBhd2s90+1Xn6x9dLz11ualI1I=
github.com/ryanrolds/sqlclosecheck v0.5.1 h1:dibWW826u0P8jNLsLN+En7+RqWWTYrjCB9fJfSfdyCU=
github.com/ryanrolds/sqlclosecheck v0.5.1/go.mod h1:2g3dUjoS6AL4huFdv6wn55WpLIDjY7ZgUR4J8HOO/XQ=
github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
@ -361,37 +393,38 @@ github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6g
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
github.com/sanposhiho/wastedassign/v2 v2.1.0 h1:crurBF7fJKIORrV85u9UUpePDYGWnwvv3+A96WvwXT0=
github.com/sanposhiho/wastedassign/v2 v2.1.0/go.mod h1:+oSmSC+9bQ+VUAxA66nBb0Z7N8CK7mscKTDYC6aIek4=
github.com/santhosh-tekuri/jsonschema/v6 v6.0.1 h1:PKK9DyHxif4LZo+uQSgXNqs0jj5+xZwwfKHgph2lxBw=
github.com/santhosh-tekuri/jsonschema/v6 v6.0.1/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU=
github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 h1:KRzFb2m7YtdldCEkzs6KqmJw4nqEVZGK7IN2kJkjTuQ=
github.com/santhosh-tekuri/jsonschema/v6 v6.0.2/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU=
github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw=
github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ=
github.com/sashamelentyev/usestdlibvars v1.28.0 h1:jZnudE2zKCtYlGzLVreNp5pmCdOxXUzwsMDBkR21cyQ=
github.com/sashamelentyev/usestdlibvars v1.28.0/go.mod h1:9nl0jgOfHKWNFS43Ojw0i7aRoS4j6EBye3YBhmAIRF8=
github.com/securego/gosec/v2 v2.22.2 h1:IXbuI7cJninj0nRpZSLCUlotsj8jGusohfONMrHoF6g=
github.com/securego/gosec/v2 v2.22.2/go.mod h1:UEBGA+dSKb+VqM6TdehR7lnQtIIMorYJ4/9CW1KVQBE=
github.com/sashamelentyev/usestdlibvars v1.29.0 h1:8J0MoRrw4/NAXtjQqTHrbW9NN+3iMf7Knkq057v4XOQ=
github.com/sashamelentyev/usestdlibvars v1.29.0/go.mod h1:8PpnjHMk5VdeWlVb4wCdrB8PNbLqZ3wBZTZWkrpZZL8=
github.com/securego/gosec/v2 v2.22.7 h1:8/9P+oTYI4yIpAzccQKVsg1/90Po+JzGtAhqoHImDeM=
github.com/securego/gosec/v2 v2.22.7/go.mod h1:510TFNDMrIPytokyHQAVLvPeDr41Yihn2ak8P+XQfNE=
github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=
github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/sivchari/containedctx v1.0.3 h1:x+etemjbsh2fB5ewm5FeLNi5bUjK0V8n0RB+Wwfd0XE=
github.com/sivchari/containedctx v1.0.3/go.mod h1:c1RDvCbnJLtH4lLcYD/GqwiBSSf4F5Qk0xld2rBqzJ4=
github.com/sivchari/tenv v1.12.1 h1:+E0QzjktdnExv/wwsnnyk4oqZBUfuh89YMQT1cyuvSY=
github.com/sivchari/tenv v1.12.1/go.mod h1:1LjSOUCc25snIr5n3DtGGrENhX3LuWefcplwVGC24mw=
github.com/sonatard/noctx v0.1.0 h1:JjqOc2WN16ISWAjAk8M5ej0RfExEXtkEyExl2hLW+OM=
github.com/sonatard/noctx v0.1.0/go.mod h1:0RvBxqY8D4j9cTTTWE8ylt2vqj2EPI8fHmrxHdsaZ2c=
github.com/sonatard/noctx v0.4.0 h1:7MC/5Gg4SQ4lhLYR6mvOP6mQVSxCrdyiExo7atBs27o=
github.com/sonatard/noctx v0.4.0/go.mod h1:64XdbzFb18XL4LporKXp8poqZtPKbCrqQ402CV+kJas=
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
github.com/sourcegraph/go-diff v0.7.0 h1:9uLlrd5T46OXs5qpp8L/MTltk0zikUGi0sNNyCpA8G0=
github.com/sourcegraph/go-diff v0.7.0/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs=
github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs=
github.com/spf13/afero v1.12.0/go.mod h1:ZTlWwG4/ahT8W7T0WQ5uYmjI9duaLQGy3Q2OAl4sk/4=
github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA=
github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo=
github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w=
github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/pflag v1.0.7 h1:vN6T9TfwStFPFM5XzjsvmzZkLuaLX+HS+0SeFLRgU6M=
github.com/spf13/pflag v1.0.7/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI=
github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg=
github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0=
@ -405,12 +438,10 @@ github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
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.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
@ -421,14 +452,14 @@ github.com/tenntenn/modver v1.0.1 h1:2klLppGhDgzJrScMpkj9Ujy3rXPUspSjAcev9tSEBgA
github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0=
github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpRQGxTSkNYKJ51yaw6ChIqO+Je8UqsTKN/cDag=
github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY=
github.com/tetafro/godot v1.5.0 h1:aNwfVI4I3+gdxjMgYPus9eHmoBeJIbnajOyqZYStzuw=
github.com/tetafro/godot v1.5.0/go.mod h1:2oVxTBSftRTh4+MVfUaUXR6bn2GDXCaMcOG4Dk3rfio=
github.com/timakin/bodyclose v0.0.0-20241017074812-ed6a65f985e3 h1:y4mJRFlM6fUyPhoXuFg/Yu02fg/nIPFMOY8tOqppoFg=
github.com/timakin/bodyclose v0.0.0-20241017074812-ed6a65f985e3/go.mod h1:mkjARE7Yr8qU23YcGMSALbIxTQ9r9QBVahQOBRfU460=
github.com/timonwong/loggercheck v0.10.1 h1:uVZYClxQFpw55eh+PIoqM7uAOHMrhVcDoWDery9R8Lg=
github.com/timonwong/loggercheck v0.10.1/go.mod h1:HEAWU8djynujaAVX7QI65Myb8qgfcZ1uKbdpg3ZzKl8=
github.com/tomarrell/wrapcheck/v2 v2.10.0 h1:SzRCryzy4IrAH7bVGG4cK40tNUhmVmMDuJujy4XwYDg=
github.com/tomarrell/wrapcheck/v2 v2.10.0/go.mod h1:g9vNIyhb5/9TQgumxQyOEqDHsmGYcGsVMOx/xGkqdMo=
github.com/tetafro/godot v1.5.1 h1:PZnjCol4+FqaEzvZg5+O8IY2P3hfY9JzRBNPv1pEDS4=
github.com/tetafro/godot v1.5.1/go.mod h1:cCdPtEndkmqqrhiCfkmxDodMQJ/f3L1BCNskCUZdTwk=
github.com/timakin/bodyclose v0.0.0-20241222091800-1db5c5ca4d67 h1:9LPGD+jzxMlnk5r6+hJnar67cgpDIz/iyD+rfl5r2Vk=
github.com/timakin/bodyclose v0.0.0-20241222091800-1db5c5ca4d67/go.mod h1:mkjARE7Yr8qU23YcGMSALbIxTQ9r9QBVahQOBRfU460=
github.com/timonwong/loggercheck v0.11.0 h1:jdaMpYBl+Uq9mWPXv1r8jc5fC3gyXx4/WGwTnnNKn4M=
github.com/timonwong/loggercheck v0.11.0/go.mod h1:HEAWU8djynujaAVX7QI65Myb8qgfcZ1uKbdpg3ZzKl8=
github.com/tomarrell/wrapcheck/v2 v2.11.0 h1:BJSt36snX9+4WTIXeJ7nvHBQBcm1h2SjQMSlmQ6aFSU=
github.com/tomarrell/wrapcheck/v2 v2.11.0/go.mod h1:wFL9pDWDAbXhhPZZt+nG8Fu+h29TtnZ2MW6Lx4BRXIU=
github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw=
github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw=
github.com/ultraware/funlen v0.2.0 h1:gCHmCn+d2/1SemTdYMiKLAHFYxTYz7z9VIDRaTGyLkI=
@ -437,12 +468,14 @@ github.com/ultraware/whitespace v0.2.0 h1:TYowo2m9Nfj1baEQBjuHzvMRbp19i+RCcRYrSW
github.com/ultraware/whitespace v0.2.0/go.mod h1:XcP1RLD81eV4BW8UhQlpaR+SDc2givTvyI8a586WjW8=
github.com/uudashr/gocognit v1.2.0 h1:3BU9aMr1xbhPlvJLSydKwdLN3tEUUrzPSSM8S4hDYRA=
github.com/uudashr/gocognit v1.2.0/go.mod h1:k/DdKPI6XBZO1q7HgoV2juESI2/Ofj9AcHPZhBBdrTU=
github.com/uudashr/iface v1.3.1 h1:bA51vmVx1UIhiIsQFSNq6GZ6VPTk3WNMZgRiCe9R29U=
github.com/uudashr/iface v1.3.1/go.mod h1:4QvspiRd3JLPAEXBQ9AiZpLbJlrWWgRChOKDJEuQTdg=
github.com/uudashr/iface v1.4.1 h1:J16Xl1wyNX9ofhpHmQ9h9gk5rnv2A6lX/2+APLTo0zU=
github.com/uudashr/iface v1.4.1/go.mod h1:pbeBPlbuU2qkNDn0mmfrxP2X+wjPMIQAy+r1MBXSXtg=
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/xen0n/gosmopolitan v1.2.2 h1:/p2KTnMzwRexIW8GlKawsTWOxn7UHA+jCMF/V8HHtvU=
github.com/xen0n/gosmopolitan v1.2.2/go.mod h1:7XX7Mj61uLYrj0qmeN0zi7XDon9JRAEhYQqAPLVNTeg=
github.com/xen0n/gosmopolitan v1.3.0 h1:zAZI1zefvo7gcpbCOrPSHJZJYA9ZgLfJqtKzZ5pHqQM=
github.com/xen0n/gosmopolitan v1.3.0/go.mod h1:rckfr5T6o4lBtM1ga7mLGKZmLxswUoH1zxHgNXOsEt4=
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM=
github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk=
github.com/yeya24/promlinter v0.3.0 h1:JVDbMp08lVCP7Y6NP3qHroGAO6z2yGKQtS5JsjqtoFs=
@ -460,10 +493,14 @@ gitlab.com/bosi/decorder v0.4.2 h1:qbQaV3zgwnBZ4zPMhGLW4KZe7A7NwxEhJx39R3shffo=
gitlab.com/bosi/decorder v0.4.2/go.mod h1:muuhHoaJkA9QLcYHq4Mj8FJUwDZ+EirSHRiaTcTf6T8=
go-simpler.org/assert v0.9.0 h1:PfpmcSvL7yAnWyChSjOz6Sp6m9j5lyK8Ok9pEL31YkQ=
go-simpler.org/assert v0.9.0/go.mod h1:74Eqh5eI6vCK6Y5l3PI8ZYFXG4Sa+tkr70OIPJAUr28=
go-simpler.org/musttag v0.13.0 h1:Q/YAW0AHvaoaIbsPj3bvEI5/QFP7w696IMUpnKXQfCE=
go-simpler.org/musttag v0.13.0/go.mod h1:FTzIGeK6OkKlUDVpj0iQUXZLUO1Js9+mvykDQy9C5yM=
go-simpler.org/sloglint v0.9.0 h1:/40NQtjRx9txvsB/RN022KsUJU+zaaSb/9q9BSefSrE=
go-simpler.org/sloglint v0.9.0/go.mod h1:G/OrAF6uxj48sHahCzrbarVMptL2kjWTaUeC8+fOGww=
go-simpler.org/musttag v0.13.1 h1:lw2sJyu7S1X8lc8zWUAdH42y+afdcCnHhWpnkWvd6vU=
go-simpler.org/musttag v0.13.1/go.mod h1:8r450ehpMLQgvpb6sg+hV5Ur47eH6olp/3yEanfG97k=
go-simpler.org/sloglint v0.11.1 h1:xRbPepLT/MHPTCA6TS/wNfZrDzkGvCCqUv4Bdwc3H7s=
go-simpler.org/sloglint v0.11.1/go.mod h1:2PowwiCOK8mjiF+0KGifVOT8ZsCNiFzvfyJeJOIt8MQ=
go.augendre.info/arangolint v0.2.0 h1:2NP/XudpPmfBhQKX4rMk+zDYIj//qbt4hfZmSSTcpj8=
go.augendre.info/arangolint v0.2.0/go.mod h1:Vx4KSJwu48tkE+8uxuf0cbBnAPgnt8O1KWiT7bljq7w=
go.augendre.info/fatcontext v0.8.0 h1:2dfk6CQbDGeu1YocF59Za5Pia7ULeAM6friJ3LP7lmk=
go.augendre.info/fatcontext v0.8.0/go.mod h1:oVJfMgwngMsHO+KB2MdgzcO+RvtNdiCEOlWvSFtax/s=
go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs=
go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
@ -482,21 +519,19 @@ golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWB
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY=
golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac h1:TSSpLIG4v+p0rPv1pNOQtl1I8knsO4S9trOxNMOLVP4=
golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
golang.org/x/exp/typeparams v0.0.0-20250620022241-b7579e27df2b h1:KdrhdYPDUvJTvrDK9gdjfFd6JTk8vA1WJoldYSi0kHo=
golang.org/x/exp/typeparams v0.0.0-20250620022241-b7579e27df2b/go.mod h1:LKZHyeOpPuZcMgxeHjJp4p5yvxrCX1xDvH10zYHhjjQ=
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.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w=
golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ=
golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
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=
@ -506,14 +541,12 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
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-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@ -523,8 +556,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
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-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@ -540,19 +573,16 @@ golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
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.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
@ -561,13 +591,11 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/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.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
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-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
@ -583,19 +611,21 @@ golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo=
golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg=
golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM=
golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM=
golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
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=
google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM=
google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
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=
@ -629,10 +659,10 @@ k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff h1:/usPimJzUKKu+m+TE36gUy
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8=
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro=
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
mvdan.cc/gofumpt v0.7.0 h1:bg91ttqXmi9y2xawvkuMXyvAA/1ZGJqYAEGjXuP0JXU=
mvdan.cc/gofumpt v0.7.0/go.mod h1:txVFJy/Sc/mvaycET54pV8SW8gWxTlUuGHVEcncmNUo=
mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f h1:lMpcwN6GxNbWtbpI1+xzFLSW8XzX0u72NttUGVFjO3U=
mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f/go.mod h1:RSLa7mKKCNeTTMHBw5Hsy2rfJmd6O2ivt9Dw9ZqCQpQ=
mvdan.cc/gofumpt v0.8.0 h1:nZUCeC2ViFaerTcYKstMmfysj6uhQrA2vJe+2vwGU6k=
mvdan.cc/gofumpt v0.8.0/go.mod h1:vEYnSzyGPmjvFkqJWtXkh79UwPWP9/HMxQdGEXZHjpg=
mvdan.cc/unparam v0.0.0-20250301125049-0df0534333a4 h1:WjUu4yQoT5BHT1w8Zu56SP8367OuBV5jvo+4Ulppyf8=
mvdan.cc/unparam v0.0.0-20250301125049-0df0534333a4/go.mod h1:rthT7OuvRbaGcd5ginj6dA2oLE7YNlta9qhBNNdCaLE=
sigs.k8s.io/controller-tools v0.18.0 h1:rGxGZCZTV2wJreeRgqVoWab/mfcumTMmSwKzoM9xrsE=
sigs.k8s.io/controller-tools v0.18.0/go.mod h1:gLKoiGBriyNh+x1rWtUQnakUYEujErjXs9pf+x/8n1U=
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=

View File

@ -25,5 +25,5 @@ import (
_ "sigs.k8s.io/controller-tools/cmd/controller-gen"
_ "github.com/golangci/golangci-lint/cmd/golangci-lint"
_ "github.com/golangci/golangci-lint/v2/cmd/golangci-lint"
)

View File

@ -28,9 +28,11 @@ export GOBIN="${TOOLS_BIN}"
PATH="${GOBIN}:${PATH}"
# Install golangci-lint
if ! command -v golangci-lint &> /dev/null; then
if ! command -v golangci-lint &>/dev/null; then
cd "${KOPS_ROOT}/hack" || exit 1
go install github.com/golangci/golangci-lint/cmd/golangci-lint
go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint
GOLANGCI_LINT_VERSION=$(go list -m -f '{{.Version}}' github.com/golangci/golangci-lint/v2)
echo "golangci-lint version: ${GOLANGCI_LINT_VERSION}"
fi
cd "${KOPS_ROOT}"
@ -39,9 +41,9 @@ cd "${KOPS_ROOT}"
echo 'running golangci-lint ' >&2
res=0
if [[ "$#" -gt 0 ]]; then
golangci-lint run "$@" >&2 || res=$?
golangci-lint run "$@" >&2 || res=$?
else
golangci-lint run ./... >&2 || res=$?
golangci-lint run ./... >&2 || res=$?
fi
# print a message based on the result

View File

@ -897,6 +897,12 @@ spec:
description: ConfigOverride is the complete containerd config
file provided by the user.
type: string
installCriCtl:
description: InstallCriCtl installs crictl (default "false").
type: boolean
installNerdCtl:
description: InstallNerdCtl installs nerdctl (default "false").
type: boolean
logLevel:
description: LogLevel controls the logging details [trace, debug,
info, warn, error, fatal, panic] (default "info").

View File

@ -133,6 +133,12 @@ spec:
description: ConfigOverride is the complete containerd config
file provided by the user.
type: string
installCriCtl:
description: InstallCriCtl installs crictl (default "false").
type: boolean
installNerdCtl:
description: InstallNerdCtl installs nerdctl (default "false").
type: boolean
logLevel:
description: LogLevel controls the logging details [trace, debug,
info, warn, error, fatal, panic] (default "info").

View File

@ -173,6 +173,7 @@ nav:
- Ports: "contributing/ports.md"
- Cluster Addons & Manager : "contributing/addons.md"
- Releases:
- "1.33": releases/1.33-NOTES.md
- "1.32": releases/1.32-NOTES.md
- "1.31": releases/1.31-NOTES.md
- "1.30": releases/1.30-NOTES.md

View File

@ -33,6 +33,11 @@ type CrictlBuilder struct {
var _ fi.NodeupModelBuilder = &CrictlBuilder{}
func (b *CrictlBuilder) Build(c *fi.NodeupModelBuilderContext) error {
if b.skipInstall() {
klog.V(8).Info("won't install crictl")
return nil
}
assets := b.Assets.FindMatches(regexp.MustCompile(`^crictl$`))
if len(assets) == 0 {
klog.Warning("unable to find any crictl binaries in assets")
@ -65,3 +70,13 @@ func (b *CrictlBuilder) binaryPath() string {
}
return path
}
func (b *CrictlBuilder) skipInstall() bool {
containerd := b.NodeupConfig.ContainerdConfig
if containerd == nil {
return false
}
return containerd.SkipInstall && !containerd.InstallCriCtl
}

View File

@ -795,7 +795,7 @@ func (b *KubeAPIServerBuilder) buildPod(ctx context.Context, kubeAPIServer *kops
}
for _, path := range b.SSLHostPaths() {
name := strings.Replace(path, "/", "", -1)
name := strings.ReplaceAll(path, "/", "")
kubemanifest.AddHostPathMapping(pod, container, name, path)
}

View File

@ -261,7 +261,7 @@ func (b *KubeControllerManagerBuilder) buildPod(kcm *kops.KubeControllerManagerC
container.Args = append(container.Args, sortedStrings(flags)...)
}
for _, path := range b.SSLHostPaths() {
name := strings.Replace(path, "/", "", -1)
name := strings.ReplaceAll(path, "/", "")
kubemanifest.AddHostPathMapping(pod, container, name, path)
}

View File

@ -48,7 +48,7 @@ func TestTaintsApplied(t *testing.T) {
expectTaints []string
}{
{
version: "1.28.0",
version: "1.29.0",
taints: []string{"foo", "bar", "baz"},
expectTaints: []string{"foo", "bar", "baz", "node-role.kubernetes.io/control-plane=:NoSchedule"},
},
@ -101,8 +101,8 @@ func TestTaintsApplied(t *testing.T) {
}
func stringSlicesEqual(exp, other []string) bool {
sort.Sort(sort.StringSlice(exp))
sort.Sort(sort.StringSlice(other))
sort.Strings(exp)
sort.Strings(other)
if exp == nil && other != nil {
return false
}

View File

@ -18,6 +18,7 @@ package model
import (
"path/filepath"
"regexp"
"k8s.io/klog/v2"
"k8s.io/kops/upup/pkg/fi"
@ -33,24 +34,28 @@ var _ fi.NodeupModelBuilder = &NerdctlBuilder{}
func (b *NerdctlBuilder) Build(c *fi.NodeupModelBuilderContext) error {
if b.skipInstall() {
klog.Info("containerd.skipInstall is set to true; won't install nerdctl")
klog.V(8).Info("won't install nerdctl")
return nil
}
assetName := "nerdctl"
assetPath := ""
asset, err := b.Assets.Find(assetName, assetPath)
if err != nil {
klog.Warningf("unable to locate asset %q: %v", assetName, err)
assets := b.Assets.FindMatches(regexp.MustCompile(`^nerdctl$`))
if len(assets) == 0 {
klog.Warning("unable to find any nerdctl binaries in assets")
return nil
}
if len(assets) > 1 {
klog.Warning("multiple nerdctl binaries are found")
return nil
}
c.AddTask(&nodetasks.File{
Path: b.nerdctlPath(),
Contents: asset,
Type: nodetasks.FileType_File,
Mode: s("0755"),
})
for k, v := range assets {
c.AddTask(&nodetasks.File{
Path: filepath.Join(b.binaryPath(), k),
Contents: v,
Type: nodetasks.FileType_File,
Mode: s("0755"),
})
}
return nil
}
@ -64,19 +69,14 @@ func (b *NerdctlBuilder) binaryPath() string {
path = "/home/kubernetes/bin"
}
return path
}
func (b *NerdctlBuilder) nerdctlPath() string {
return filepath.Join(b.binaryPath(), "nerdctl")
}
func (b *NerdctlBuilder) skipInstall() bool {
d := b.NodeupConfig.ContainerdConfig
containerd := b.NodeupConfig.ContainerdConfig
if d == nil {
if containerd == nil {
return false
}
return d.SkipInstall
return containerd.SkipInstall && !containerd.InstallNerdCtl
}

View File

@ -35,21 +35,21 @@ var _ fi.NodeupModelBuilder = &PackagesBuilder{}
func (b *PackagesBuilder) Build(c *fi.NodeupModelBuilderContext) error {
// kubelet needs:
// conntrack - kops #5671
// ebtables - kops #1711
// ethtool - kops #1830
if b.Distribution.IsDebianFamily() {
// From containerd: https://github.com/containerd/cri/blob/master/contrib/ansible/tasks/bootstrap_ubuntu.yaml
c.AddTask(&nodetasks.Package{Name: "bridge-utils"})
c.AddTask(&nodetasks.Package{Name: "cgroupfs-mount"})
if (b.Distribution.IsDebian() && b.Distribution.Version() < 13) || (b.Distribution.IsUbuntu() && b.Distribution.Version() < 25.10) {
c.AddTask(&nodetasks.Package{Name: "cgroupfs-mount"})
}
c.AddTask(&nodetasks.Package{Name: "conntrack"})
c.AddTask(&nodetasks.Package{Name: "ebtables"})
c.AddTask(&nodetasks.Package{Name: "ethtool"})
c.AddTask(&nodetasks.Package{Name: "iptables"})
c.AddTask(&nodetasks.Package{Name: "libapparmor1"})
c.AddTask(&nodetasks.Package{Name: "libseccomp2"})
c.AddTask(&nodetasks.Package{Name: "libltdl7"})
if b.NodeupConfig.KubeProxy != nil && fi.ValueOf(b.NodeupConfig.KubeProxy.Enabled) && b.NodeupConfig.KubeProxy.ProxyMode == "nftables" {
c.AddTask(&nodetasks.Package{Name: "nftables"})
}
c.AddTask(&nodetasks.Package{Name: "pigz"})
c.AddTask(&nodetasks.Package{Name: "socat"})
c.AddTask(&nodetasks.Package{Name: "util-linux"})
// Additional packages
for _, additionalPackage := range b.NodeupConfig.Packages {
@ -58,8 +58,6 @@ func (b *PackagesBuilder) Build(c *fi.NodeupModelBuilderContext) error {
} else if b.Distribution.IsRHELFamily() {
// From containerd: https://github.com/containerd/cri/blob/master/contrib/ansible/tasks/bootstrap_centos.yaml
c.AddTask(&nodetasks.Package{Name: "conntrack-tools"})
c.AddTask(&nodetasks.Package{Name: "ebtables"})
c.AddTask(&nodetasks.Package{Name: "ethtool"})
if b.Distribution == distributions.DistributionAmazonLinux2023 {
// install iptables-nft in al2023 (NOT the iptables-legacy!)
c.AddTask(&nodetasks.Package{Name: "iptables-nft"})
@ -68,7 +66,9 @@ func (b *PackagesBuilder) Build(c *fi.NodeupModelBuilderContext) error {
}
c.AddTask(&nodetasks.Package{Name: "libseccomp"})
c.AddTask(&nodetasks.Package{Name: "libtool-ltdl"})
c.AddTask(&nodetasks.Package{Name: "socat"})
if b.NodeupConfig.KubeProxy != nil && fi.ValueOf(b.NodeupConfig.KubeProxy.Enabled) && b.NodeupConfig.KubeProxy.ProxyMode == "nftables" {
c.AddTask(&nodetasks.Package{Name: "nftables"})
}
c.AddTask(&nodetasks.Package{Name: "util-linux"})
// Handle some packages differently for each distro
// Amazon Linux 2 doesn't have SELinux enabled by default

View File

@ -54,7 +54,7 @@ contents: |
- --etcd-keyfile=/srv/kubernetes/kube-apiserver/etcd-client.key
- --etcd-servers-overrides=/events#https://127.0.0.1:4002
- --etcd-servers=https://127.0.0.1:4001
- --feature-gates=CSIMigrationAWS=true,InTreePluginAWSUnregister=true
- --feature-gates=InTreePluginAWSUnregister=true
- --kubelet-client-certificate=/srv/kubernetes/kube-apiserver/kubelet-api.crt
- --kubelet-client-key=/srv/kubernetes/kube-apiserver/kubelet-api.key
- --kubelet-preferred-address-types=InternalIP,Hostname,ExternalIP

View File

@ -32,7 +32,7 @@ contents: |
- --etcd-keyfile=/srv/kubernetes/kube-apiserver/etcd-client.key
- --etcd-servers-overrides=/events#https://events.etcd.internal.minimal.example.com:4002
- --etcd-servers=https://main.etcd.internal.minimal.example.com:4001
- --feature-gates=CSIMigrationAWS=true,InTreePluginAWSUnregister=true
- --feature-gates=InTreePluginAWSUnregister=true
- --kubelet-client-certificate=/srv/kubernetes/kube-apiserver/kubelet-api.crt
- --kubelet-client-key=/srv/kubernetes/kube-apiserver/kubelet-api.key
- --kubelet-preferred-address-types=InternalIP,Hostname,ExternalIP

View File

@ -31,7 +31,7 @@ contents: |
- --etcd-certfile=/srv/kubernetes/kube-apiserver/etcd-client.crt
- --etcd-keyfile=/srv/kubernetes/kube-apiserver/etcd-client.key
- --etcd-servers=https://127.0.0.1:4001
- --feature-gates=CSIMigrationAWS=true,InTreePluginAWSUnregister=true
- --feature-gates=InTreePluginAWSUnregister=true
- --kubelet-client-certificate=/srv/kubernetes/kube-apiserver/kubelet-api.crt
- --kubelet-client-key=/srv/kubernetes/kube-apiserver/kubelet-api.key
- --kubelet-preferred-address-types=InternalIP,Hostname,ExternalIP

View File

@ -3,7 +3,7 @@ path: /etc/kubernetes/manifests
type: directory
---
contents: |
DAEMON_ARGS="--authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --cgroup-root=/ --client-ca-file=/srv/kubernetes/ca.crt --cloud-provider=external --cluster-dns=100.64.0.10 --cluster-domain=cluster.local --enable-debugging-handlers=true --eviction-hard=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%,imagefs.available<10%,imagefs.inodesFree<5% --feature-gates=AllowExtTrafficLocalEndpoints=false,CSIMigrationAWS=true,ExperimentalCriticalPodAnnotation=true,InTreePluginAWSUnregister=true --kubeconfig=/var/lib/kubelet/kubeconfig --pod-infra-container-image=registry.k8s.io/pause:3.9 --pod-manifest-path=/etc/kubernetes/manifests --protect-kernel-defaults=true --register-schedulable=true --resolv-conf=/run/systemd/resolve/resolv.conf --v=2 --volume-plugin-dir=/usr/libexec/kubernetes/kubelet-plugins/volume/exec/ --cloud-config=/etc/kubernetes/in-tree-cloud.config --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock --tls-cert-file=/srv/kubernetes/kubelet-server.crt --tls-private-key-file=/srv/kubernetes/kubelet-server.key --config=/var/lib/kubelet/kubelet.conf"
DAEMON_ARGS="--authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --cgroup-root=/ --client-ca-file=/srv/kubernetes/ca.crt --cloud-provider=external --cluster-dns=100.64.0.10 --cluster-domain=cluster.local --enable-debugging-handlers=true --eviction-hard=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%,imagefs.available<10%,imagefs.inodesFree<5% --feature-gates=AllowExtTrafficLocalEndpoints=false,ExperimentalCriticalPodAnnotation=true,InTreePluginAWSUnregister=true --kubeconfig=/var/lib/kubelet/kubeconfig --pod-infra-container-image=registry.k8s.io/pause:3.9 --pod-manifest-path=/etc/kubernetes/manifests --protect-kernel-defaults=true --register-schedulable=true --resolv-conf=/run/systemd/resolve/resolv.conf --v=2 --volume-plugin-dir=/usr/libexec/kubernetes/kubelet-plugins/volume/exec/ --cloud-config=/etc/kubernetes/in-tree-cloud.config --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock --tls-cert-file=/srv/kubernetes/kubelet-server.crt --tls-private-key-file=/srv/kubernetes/kubelet-server.key --config=/var/lib/kubelet/kubelet.conf --image-credential-provider-config=/var/lib/kubelet/credential-provider.conf --image-credential-provider-bin-dir=/usr/local/bin"
HOME="/root"
path: /etc/sysconfig/kubelet
type: file

View File

@ -3,7 +3,7 @@ path: /etc/kubernetes/manifests
type: directory
---
contents: |
DAEMON_ARGS="--authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --cgroup-root=/ --client-ca-file=/srv/kubernetes/ca.crt --cloud-provider=external --cluster-dns=100.64.0.10 --cluster-domain=cluster.local --enable-debugging-handlers=true --eviction-hard=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%,imagefs.available<10%,imagefs.inodesFree<5% --feature-gates=CSIMigrationAWS=true,InTreePluginAWSUnregister=true --kubeconfig=/var/lib/kubelet/kubeconfig --pod-infra-container-image=registry.k8s.io/pause:3.9 --pod-manifest-path=/etc/kubernetes/manifests --protect-kernel-defaults=true --register-schedulable=true --resolv-conf=/run/systemd/resolve/resolv.conf --v=2 --volume-plugin-dir=/usr/libexec/kubernetes/kubelet-plugins/volume/exec/ --cloud-config=/etc/kubernetes/in-tree-cloud.config --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock --tls-cert-file=/srv/kubernetes/kubelet-server.crt --tls-private-key-file=/srv/kubernetes/kubelet-server.key --config=/var/lib/kubelet/kubelet.conf"
DAEMON_ARGS="--authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --cgroup-root=/ --client-ca-file=/srv/kubernetes/ca.crt --cloud-provider=external --cluster-dns=100.64.0.10 --cluster-domain=cluster.local --enable-debugging-handlers=true --eviction-hard=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%,imagefs.available<10%,imagefs.inodesFree<5% --feature-gates=InTreePluginAWSUnregister=true --kubeconfig=/var/lib/kubelet/kubeconfig --pod-infra-container-image=registry.k8s.io/pause:3.9 --pod-manifest-path=/etc/kubernetes/manifests --protect-kernel-defaults=true --register-schedulable=true --resolv-conf=/run/systemd/resolve/resolv.conf --v=2 --volume-plugin-dir=/usr/libexec/kubernetes/kubelet-plugins/volume/exec/ --cloud-config=/etc/kubernetes/in-tree-cloud.config --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock --tls-cert-file=/srv/kubernetes/kubelet-server.crt --tls-private-key-file=/srv/kubernetes/kubelet-server.key --config=/var/lib/kubelet/kubelet.conf --image-credential-provider-config=/var/lib/kubelet/credential-provider.conf --image-credential-provider-bin-dir=/usr/local/bin"
HOME="/root"
path: /etc/sysconfig/kubelet
type: file

View File

@ -19,6 +19,7 @@ package kops
import (
"fmt"
"github.com/blang/semver/v4"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@ -947,6 +948,29 @@ func (c *Cluster) InstallCNIAssets() bool {
c.Spec.Networking.Cilium == nil
}
func (c *Cluster) HasImageVolumesSupport() bool {
// Image Volumes was added to Kubernetes v1.31
// https://kubernetes.io/blog/2024/08/16/kubernetes-1-31-image-volume-source/
// Image Volumes graduated to beta in Kubernetes v1.33
// https://kubernetes.io/blog/2025/04/29/kubernetes-v1-33-image-volume-beta/
if c.IsKubernetesLT("1.33.0") {
return false
}
if c.Spec.Containerd == nil || c.Spec.Containerd.Version == nil {
return false
}
sv, err := semver.ParseTolerant(*c.Spec.Containerd.Version)
if err != nil {
return false
}
// Image Volumes was released in Containerd v2.1.0
// https://github.com/containerd/containerd/releases/tag/v2.1.0
if sv.LT(semver.MustParse("2.1.0")) {
return false
}
return true
}
func (c *Cluster) APIInternalName() string {
return "api.internal." + c.ObjectMeta.Name
}

View File

@ -60,6 +60,10 @@ type ContainerdConfig struct {
NRI *NRIConfig `json:"nri,omitempty"`
// Enables Kubelet ECR Credential helper to pass credentials to containerd mirrors, to use ECR as a pull-through cache
UseECRCredentialsForMirrors bool `json:"useECRCredentialsForMirrors,omitempty"`
// InstallCriCtl installs crictl (default "false").
InstallCriCtl bool `json:"installCriCtl,omitempty"`
// InstallNerdCtl installs nerdctl (default "false").
InstallNerdCtl bool `json:"installNerdCtl,omitempty"`
}
type NRIConfig struct {

View File

@ -73,7 +73,7 @@ func UseExternalKubeletCredentialProvider(k8sVersion *KubernetesVersion, cloudPr
case kops.CloudProviderGCE:
return k8sVersion.IsGTE("1.29")
case kops.CloudProviderAWS:
return k8sVersion.IsGTE("1.27")
return true
default:
return false
}

View File

@ -53,6 +53,10 @@ type ContainerdConfig struct {
NRI *NRIConfig `json:"nri,omitempty"`
// Enables Kubelet ECR Credential helper to pass credentials to containerd mirrors, to use ECR as a pull-through cache
UseECRCredentialsForMirrors bool `json:"useECRCredentialsForMirrors,omitempty"`
// InstallCriCtl installs crictl (default "false").
InstallCriCtl bool `json:"installCriCtl,omitempty"`
// InstallNerdCtl installs nerdctl (default "false").
InstallNerdCtl bool `json:"installNerdCtl,omitempty"`
}
type NRIConfig struct {

View File

@ -3318,6 +3318,8 @@ func autoConvert_v1alpha2_ContainerdConfig_To_kops_ContainerdConfig(in *Containe
out.NRI = nil
}
out.UseECRCredentialsForMirrors = in.UseECRCredentialsForMirrors
out.InstallCriCtl = in.InstallCriCtl
out.InstallNerdCtl = in.InstallNerdCtl
return nil
}
@ -3374,6 +3376,8 @@ func autoConvert_kops_ContainerdConfig_To_v1alpha2_ContainerdConfig(in *kops.Con
out.NRI = nil
}
out.UseECRCredentialsForMirrors = in.UseECRCredentialsForMirrors
out.InstallCriCtl = in.InstallCriCtl
out.InstallNerdCtl = in.InstallNerdCtl
return nil
}

View File

@ -53,6 +53,10 @@ type ContainerdConfig struct {
NRI *NRIConfig `json:"nri,omitempty"`
// Enables Kubelet ECR Credential helper to pass credentials to containerd mirrors, to use ECR as a pull-through cache
UseECRCredentialsForMirrors bool `json:"useECRCredentialsForMirrors,omitempty"`
// InstallCriCtl installs crictl (default "false").
InstallCriCtl bool `json:"installCriCtl,omitempty"`
// InstallNerdCtl installs nerdctl (default "false").
InstallNerdCtl bool `json:"installNerdCtl,omitempty"`
}
type NRIConfig struct {

View File

@ -3563,6 +3563,8 @@ func autoConvert_v1alpha3_ContainerdConfig_To_kops_ContainerdConfig(in *Containe
out.NRI = nil
}
out.UseECRCredentialsForMirrors = in.UseECRCredentialsForMirrors
out.InstallCriCtl = in.InstallCriCtl
out.InstallNerdCtl = in.InstallNerdCtl
return nil
}
@ -3619,6 +3621,8 @@ func autoConvert_kops_ContainerdConfig_To_v1alpha3_ContainerdConfig(in *kops.Con
out.NRI = nil
}
out.UseECRCredentialsForMirrors = in.UseECRCredentialsForMirrors
out.InstallCriCtl = in.InstallCriCtl
out.InstallNerdCtl = in.InstallNerdCtl
return nil
}

View File

@ -1127,11 +1127,7 @@ func validateNetworking(cluster *kops.Cluster, v *kops.NetworkingSpec, fldPath *
}
if v.Canal != nil {
if cluster.IsKubernetesGTE("1.28") {
allErrs = append(allErrs, field.Forbidden(fldPath.Child("canal"), "Canal is not supported for Kubernetes >= 1.28"))
} else {
allErrs = append(allErrs, validateNetworkingCanal(cluster, v.Canal, fldPath.Child("canal"))...)
}
allErrs = append(allErrs, field.Forbidden(fldPath.Child("canal"), "Canal is not supported for Kubernetes >= 1.28"))
}
if v.KubeRouter != nil {
@ -1629,13 +1625,14 @@ func validateCalicoAutoDetectionMethod(fldPath *field.Path, runtime string, vers
case "can-reach":
destStr := method[1]
ip := netutils.ParseIPSloppy(destStr)
if version == ipv4.Version {
switch version {
case ipv4.Version:
if ip == nil || ip.To4() == nil {
return field.ErrorList{field.Invalid(fldPath, runtime, "must be a valid IPv4 address")}
} else {
return nil
}
} else if version == ipv6.Version {
case ipv6.Version:
if ip == nil || ip.To4() != nil {
return field.ErrorList{field.Invalid(fldPath, runtime, "must be a valid IPv6 address")}
} else {

View File

@ -379,7 +379,7 @@ func TestValidateKubeControllermanager(t *testing.T) {
if g.Cluster == nil {
g.Cluster = &kops.Cluster{
Spec: kops.ClusterSpec{
KubernetesVersion: "1.28.0",
KubernetesVersion: "1.29.0",
},
}
}
@ -436,7 +436,7 @@ func Test_Validate_Networking_Flannel(t *testing.T) {
for _, g := range grid {
cluster := &kops.Cluster{
Spec: kops.ClusterSpec{
KubernetesVersion: "1.27.0",
KubernetesVersion: "1.29.0",
Networking: kops.NetworkingSpec{
NetworkCIDR: "10.0.0.0/8",
NonMasqueradeCIDR: "100.64.0.0/10",
@ -502,7 +502,7 @@ func Test_Validate_Networking_Kindnet(t *testing.T) {
for _, g := range grid {
cluster := &kops.Cluster{
Spec: kops.ClusterSpec{
KubernetesVersion: "1.27.0",
KubernetesVersion: "1.29.0",
Networking: kops.NetworkingSpec{
NetworkCIDR: "10.0.0.0/8",
NonMasqueradeCIDR: "100.64.0.0/10",
@ -596,7 +596,7 @@ func Test_Validate_Networking_OverlappingCIDR(t *testing.T) {
t.Run(g.Name, func(t *testing.T) {
cluster := &kops.Cluster{
Spec: kops.ClusterSpec{
KubernetesVersion: "1.27.0",
KubernetesVersion: "1.29.0",
},
}
cluster.Spec.Networking = g.Networking

View File

@ -62,9 +62,10 @@ func (req *putResource) Run(s *MockKubeAPIServer) error {
var updated *unstructured.Unstructured
if req.SubResource == "" {
switch req.SubResource {
case "":
updated = body
} else if req.SubResource == "status" {
case "status":
updated = existing.DeepCopyObject().(*unstructured.Unstructured)
newStatus := body.Object["status"]
if newStatus == nil {
@ -72,7 +73,7 @@ func (req *putResource) Run(s *MockKubeAPIServer) error {
return fmt.Errorf("status not specified on status subresource update")
}
updated.Object["status"] = newStatus
} else {
default:
// TODO: We need to implement put properly
return fmt.Errorf("unknown subresource %q", req.SubResource)
}

View File

@ -688,3 +688,60 @@ files:
sha256: 3a0e07fd72709736cd85ce64a2f5505b2bb085fe697417b96ff249febd5357b1
- name: v1.31.11/bin/linux/arm64/mounter
sha256: 37730eeba14c4a7d0a3644a7f18da852869b1d0f0837d8e765827f2fdd30049b
# kubernetes 1.31.12
- name: v1.31.12/bin/darwin/amd64/kubectl
sha256: 24b8f2417be0c3b934ac78695ed718c24ca4ba399ad1327d557184d3afa4d70e
- name: v1.31.12/bin/darwin/amd64/kubectl-convert
sha256: 73ce4e133edb670e0308ae05c5766440f6f8e708f42bb399a715e0ec0d0a69bb
- name: v1.31.12/bin/darwin/arm64/kubectl
sha256: 304093083a8525b7f2c0cfedff97fe091fbe97807dcf82c808cf7ee8a997d348
- name: v1.31.12/bin/darwin/arm64/kubectl-convert
sha256: 26d2c5e808c3d81a28d685e02932ee2aaf63cc1de1eba4634713c640387411f2
- name: v1.31.12/bin/linux/amd64/apiextensions-apiserver
sha256: 03271f00ba16a3fecc1c00b3ba95613c617b5662b39c6ce4bac5a61eb44238b5
- name: v1.31.12/bin/linux/amd64/kube-aggregator
sha256: ba390a94fa5daad369aa1968051d0811810fbd286a38305b4cee73a910a4fb32
- name: v1.31.12/bin/linux/amd64/kube-apiserver
sha256: 685a93a9bff18be68ae3f5bba6cb0115d1a21d8fc8afbf68050d2c1db64a263a
- name: v1.31.12/bin/linux/amd64/kube-controller-manager
sha256: b977cb2ef350117525a3a27f45ee7e982123a7e738b7caf95d4a9cdcc21bedab
- name: v1.31.12/bin/linux/amd64/kube-log-runner
sha256: 2e5e38a65586424eeac375c98ce2ff74a63c245516ebf5a19a823118e37eddeb
- name: v1.31.12/bin/linux/amd64/kube-proxy
sha256: 147e51afa6d763ed31b1be80932b9db338f95897c9ff138f9f6f604931804b29
- name: v1.31.12/bin/linux/amd64/kube-scheduler
sha256: b857019850df51739a3353b22e824969aee5ed387fe8153b8869eb304e6b01e5
- name: v1.31.12/bin/linux/amd64/kubeadm
sha256: 3228da53372fb8ffab303e7d8b1b0f78c016e461216b6535609e4f2377424349
- name: v1.31.12/bin/linux/amd64/kubectl
sha256: cf609add577be9c898c52027e800a008331d6b2a202ecc61413e847f7a12ccd0
- name: v1.31.12/bin/linux/amd64/kubectl-convert
sha256: 44aac75128a874fee1a937d98ce96555391de3d693e55498c5a83d7f3cadbe83
- name: v1.31.12/bin/linux/amd64/kubelet
sha256: 43f4a2ff9d5f40419f74977ed6e1939c4f8db51b0f2e63a98546e146d683c299
- name: v1.31.12/bin/linux/amd64/mounter
sha256: b442790a3c19472ac0aa0ad2e9261093bead14a31c6c1db9875acab096c73207
- name: v1.31.12/bin/linux/arm64/apiextensions-apiserver
sha256: 6b9c0c62e36b0fae4a1057fef916fb4f41471007905505883336ccced49fdecd
- name: v1.31.12/bin/linux/arm64/kube-aggregator
sha256: 2344671afc676ceff65b57192d2339b7b1e8c0d286d65a407db032296613c044
- name: v1.31.12/bin/linux/arm64/kube-apiserver
sha256: 3c1e31c7e44688be621b838baf7a0e314329975a97d83526994f0781d1d69e58
- name: v1.31.12/bin/linux/arm64/kube-controller-manager
sha256: eb07d75d25d2b6720415f361f9e606b667015a244befe05d4d805cc1440cc02e
- name: v1.31.12/bin/linux/arm64/kube-log-runner
sha256: d572a72dba60aa212ac18f9b439446499bbf987d4f2f546390ce0c253332380b
- name: v1.31.12/bin/linux/arm64/kube-proxy
sha256: 6bceec8e19da373e6216d9996e410f43f7dd6d629891ed1239bc7066266512b7
- name: v1.31.12/bin/linux/arm64/kube-scheduler
sha256: 2a2e3f44d7b95e827a5331f794f10af0a7cbdcbb8065e9e7094b6f753662f66c
- name: v1.31.12/bin/linux/arm64/kubeadm
sha256: 88fc31963e833d72d1e26159166591aea537d762debb5cc0f0d059fdc717b43b
- name: v1.31.12/bin/linux/arm64/kubectl
sha256: 1c2cc071a6522682f645c5987c0601be92c14848c5123473904e5ede0721039b
- name: v1.31.12/bin/linux/arm64/kubectl-convert
sha256: 6dad32b110b7d1085f71f1f9f8e246b0b8a45b449a906525cceb5a6f8126c7c9
- name: v1.31.12/bin/linux/arm64/kubelet
sha256: 3dab6925a2beb59fbfa7df2897e001af95886145f556cafdbde8c4facd7ca516
- name: v1.31.12/bin/linux/arm64/mounter
sha256: 5220ca9d411b2ab0935ec10d4487780d8f863a2cb17df1a077418a2bea24db8b

View File

@ -460,3 +460,60 @@ files:
sha256: b862a8d550875924c8abed6c15ba22564f7e232c239aa6a2e88caf069a0ab548
- name: v1.32.7/bin/linux/arm64/mounter
sha256: 819e72f4b78e025021bee7dec67b389a01bee50345cecb598391c87ec1c34809
# kubernetes 1.32.8
- name: v1.32.8/bin/darwin/amd64/kubectl
sha256: a00a8fadd4a7ca520e68e88a640ca60b4601695f68b8dcde33293ed709c8c807
- name: v1.32.8/bin/darwin/amd64/kubectl-convert
sha256: 6468990e24d4ce8aa0bf504b29bb78e6267c8558c608e6fba5bbcd5a93974edf
- name: v1.32.8/bin/darwin/arm64/kubectl
sha256: 01e5c58a305f309bd4f268125ba8a9c138a20ca9d602c74cd6b37a0d45fc5818
- name: v1.32.8/bin/darwin/arm64/kubectl-convert
sha256: 1e3b634a4178f712404442869e4b2da61b42591344bfc7c7d0cb7d66e048db68
- name: v1.32.8/bin/linux/amd64/apiextensions-apiserver
sha256: ae3985b504f52759b9228409333e476af6433321e019e3b0301ac7a811d3b695
- name: v1.32.8/bin/linux/amd64/kube-aggregator
sha256: ad9fee71cd0772c40b6cd3a4d1abcd447fb6482d21dadbdd67135737969fcf50
- name: v1.32.8/bin/linux/amd64/kube-apiserver
sha256: 81c675c06a2bf29cdd1d0be35f9d17830efe73ca13547e265da826e891443dc8
- name: v1.32.8/bin/linux/amd64/kube-controller-manager
sha256: 38031e7be9fe12884fc302dd8cb401895ce74b252acb38ae2eee8b6a1e2a383f
- name: v1.32.8/bin/linux/amd64/kube-log-runner
sha256: a8d6ae920c7c5fd711442717205f32d0993f45cabfe2af30630bd182fcb81f5c
- name: v1.32.8/bin/linux/amd64/kube-proxy
sha256: 8a35fed8c013b8e0403483b5b75747862703ca0e6ea463afd4096dadce08fd31
- name: v1.32.8/bin/linux/amd64/kube-scheduler
sha256: bd2e3d4092a5d7dfe270acbe6415a20c198f7f799916e18b45f49ffaf9b31f1c
- name: v1.32.8/bin/linux/amd64/kubeadm
sha256: da4cc996800db14f82fce8813caa55be318e52ef69d82e50e728ef4cfa18b69f
- name: v1.32.8/bin/linux/amd64/kubectl
sha256: 0fc709a8262be523293a18965771fedfba7466eda7ab4337feaa5c028aa46b1b
- name: v1.32.8/bin/linux/amd64/kubectl-convert
sha256: 2e31c4236e36143b1659d7f447ffdc946f521cbe762fefb1d6eab65da6b4f716
- name: v1.32.8/bin/linux/amd64/kubelet
sha256: 7dfca4da9cdf592c0f70800e09fb42553765bc0951cade3d6e0c571daf3f23ee
- name: v1.32.8/bin/linux/amd64/mounter
sha256: 7d64cb9cd6aa5a0368e8e67be8198e85b29fa5683ca5892809abda4b30a93247
- name: v1.32.8/bin/linux/arm64/apiextensions-apiserver
sha256: 7235873ac76c205570c625ffd6788a0d8c03939ed83aeea0c02c9b9e3f8670d0
- name: v1.32.8/bin/linux/arm64/kube-aggregator
sha256: b1bddf28c1f31ff1c479136fc9ec59066acee237245e9f9b7e0b4001bf33fb03
- name: v1.32.8/bin/linux/arm64/kube-apiserver
sha256: b3ca63f26aedf97920563af4242d462dfe3b27da76369b626665f359c66965de
- name: v1.32.8/bin/linux/arm64/kube-controller-manager
sha256: ed9669e35d1b3eeccb49ee2efafcf52c60421357d8189eb20bedff983c40cf0e
- name: v1.32.8/bin/linux/arm64/kube-log-runner
sha256: 47b35e22243df6703f241a3666a9be02720552c8684fe2fd0fc26453b78572ac
- name: v1.32.8/bin/linux/arm64/kube-proxy
sha256: 476862022743ec531746ed5d03834785f77898b0a7f206c154cde3f3c3406bf9
- name: v1.32.8/bin/linux/arm64/kube-scheduler
sha256: 68c7f2c369cbda837d87806253a28ccd13d6ae62a6684715aaaf2ce8f6cbbbfa
- name: v1.32.8/bin/linux/arm64/kubeadm
sha256: 8dbd3fa2d94335d763b983caaf2798caae2d4183f6a95ebff28289f2e86edf68
- name: v1.32.8/bin/linux/arm64/kubectl
sha256: 8a7371e54187249389a9aa222b150d61a4a745c121ab24dbcbb56d1ac2d0b912
- name: v1.32.8/bin/linux/arm64/kubectl-convert
sha256: dcce8e6d774ce93c712f42fff51f5daaede776a56f8b404f337136bb14db475e
- name: v1.32.8/bin/linux/arm64/kubelet
sha256: d5527714fac08eac4c1ddcbd8a3c6db35f3acd335d43360219d733273b672cce
- name: v1.32.8/bin/linux/arm64/mounter
sha256: 2ad21bc8582399cbd074f5b3636b2b643fab37ab0d9caff58b7e29d9a6f0b07c

View File

@ -232,3 +232,60 @@ files:
sha256: 3f69bb32debfaf25fce91aa5e7181e1e32f3550f3257b93c17dfb37bed621a9c
- name: v1.33.3/bin/linux/arm64/mounter
sha256: 79d10821a1e3bad1c76c72891717327ddc92b1cdce51eab89e231beac4e2736f
# kubernetes 1.33.4
- name: v1.33.4/bin/darwin/amd64/kubectl
sha256: 4b39b8bb12e78ce801b39c9ec50421e3d6e144d8e3f113cd18e6d61709b8c73b
- name: v1.33.4/bin/darwin/amd64/kubectl-convert
sha256: 7a2d37d4f2a2f592e7b8d3dc11b19c74a1c9ebae95eea4aae2b0dfebc9e7af84
- name: v1.33.4/bin/darwin/arm64/kubectl
sha256: a44662db083fdd1b19ce55ba77eb64d51206310bbae90df90eb5d9e30ea54603
- name: v1.33.4/bin/darwin/arm64/kubectl-convert
sha256: 1fa5d7a8293fb1c23e6ea0d29b3f8c7e2b57461b47e77f98409a0de19d1bf205
- name: v1.33.4/bin/linux/amd64/apiextensions-apiserver
sha256: c9d6cf5fca579ff33338115a141e0d3326708824fb4d74fb170931f31607142e
- name: v1.33.4/bin/linux/amd64/kube-aggregator
sha256: a7975587e815f5281ab606ba4a8119f5c1291402010668684aeaafc57a401e00
- name: v1.33.4/bin/linux/amd64/kube-apiserver
sha256: d4cf921f007c75a446fc66cd9e73cf245ec049459989a71e3ef2e346ddceed2e
- name: v1.33.4/bin/linux/amd64/kube-controller-manager
sha256: 13d58af4feea90b014c5e931cccdbbeb90c6ba1d509172ff87f91f1fcec05a41
- name: v1.33.4/bin/linux/amd64/kube-log-runner
sha256: fb278d721df3f920fdd3eb1221a085ec6e34b1a30974f4830b7b040202a7b5d0
- name: v1.33.4/bin/linux/amd64/kube-proxy
sha256: 0949a1cac5d7a014767a068d0a637eba46b58d97c6a335a939a6a64bf02a230e
- name: v1.33.4/bin/linux/amd64/kube-scheduler
sha256: e9883a018508dc2e09a86dbd9bee100a5fbf5253b4db05f32d3f2f41c8e31cd4
- name: v1.33.4/bin/linux/amd64/kubeadm
sha256: a109ebcb68e52d3dd605d92f92460c884dcc8b68aebe442404af19b6d9d778ec
- name: v1.33.4/bin/linux/amd64/kubectl
sha256: c2ba72c115d524b72aaee9aab8df8b876e1596889d2f3f27d68405262ce86ca1
- name: v1.33.4/bin/linux/amd64/kubectl-convert
sha256: ce985bd7ed3818dc0e2a0b63f875a0ad81c4b1c5274830f4b0539188f10f847a
- name: v1.33.4/bin/linux/amd64/kubelet
sha256: 109bd2607b054a477ede31c55ae814eae8e75543126dc4cea40b04424d843489
- name: v1.33.4/bin/linux/amd64/mounter
sha256: 0e3c544c0e3514309f369f0eb935ea37fdd2817fcd699d50c541e011f2957abf
- name: v1.33.4/bin/linux/arm64/apiextensions-apiserver
sha256: 551eeb0dd4d8a8d2ea4cf5f568a35e8970480663169402a7cfa363ad3af7f72a
- name: v1.33.4/bin/linux/arm64/kube-aggregator
sha256: 3247d5694c461fa7b8938ed0bb52ce904e218c86fc37edc94153c7ef77774fac
- name: v1.33.4/bin/linux/arm64/kube-apiserver
sha256: 85a03933ab5ce0279a3887017e4cacbe7a63eeee06e067a4b91ee3c860fb8aab
- name: v1.33.4/bin/linux/arm64/kube-controller-manager
sha256: c154fecbac52586a152bfc6226e482177ca8c39be26001e041d1899737220c35
- name: v1.33.4/bin/linux/arm64/kube-log-runner
sha256: 9c598641b69799dce0bd3656875492e7ca443be59dffe0452cf0a964fdbaecf1
- name: v1.33.4/bin/linux/arm64/kube-proxy
sha256: b84fcf33a5cf1565f1de44b085e873b84e824d3905c18276fa91cb62a7dc051d
- name: v1.33.4/bin/linux/arm64/kube-scheduler
sha256: 8052d65c4243df07714b7dcdfe292b335f876af2e55e79cafc372009739cfdda
- name: v1.33.4/bin/linux/arm64/kubeadm
sha256: ef471b454d68ee211e279ddeaebde6ee7a8e14b66ae58e0d0184e967c3595892
- name: v1.33.4/bin/linux/arm64/kubectl
sha256: 76cd7a2aa59571519b68c3943521404cbce55dafb7d8866f8d0ea2995b396eef
- name: v1.33.4/bin/linux/arm64/kubectl-convert
sha256: 3c44f6c5f0442aa5661573a772f92922ff6ecd1ea353dd7805b7ef53dbc390ed
- name: v1.33.4/bin/linux/arm64/kubelet
sha256: 623329b1a5f4858e3a5406d3947807b75144f4e71dde11ef1a71362c3a8619cc
- name: v1.33.4/bin/linux/arm64/mounter
sha256: 28d3a538fd8a5df14cfc67b1a90b4b2daa17b0ba9ce5973c822d8c265c984bec

View File

@ -0,0 +1,63 @@
# This file is generated by generate-asset-hashes.sh
filestores:
- base: https://dl.k8s.io/release/
files:
# kubernetes 1.34.0
- name: v1.34.0/bin/darwin/amd64/kubectl
sha256: a5904061dd5c8e57d55e52c78fa23790e76de30924b26ba31be891e75710d7a9
- name: v1.34.0/bin/darwin/amd64/kubectl-convert
sha256: 6103c0ba68dd4abe49127ac7ca1903ffa2130ab8a4d6a7720d725a0de27c973f
- name: v1.34.0/bin/darwin/arm64/kubectl
sha256: d491f4c47c34856188d38e87a27866bd94a66a57b8db3093a82ae43baf3bb20d
- name: v1.34.0/bin/darwin/arm64/kubectl-convert
sha256: 977540b88b3cfa07fb00da381967ff3f5e11eaa9bee48d92b4281ececaca193a
- name: v1.34.0/bin/linux/amd64/apiextensions-apiserver
sha256: 78e26a8ceb81e7f57097f9a26c2db8832d0a228411cded6d25d340a8a8503046
- name: v1.34.0/bin/linux/amd64/kube-aggregator
sha256: bc4a68b9e0b701056bc23527d87b19e0c9820723d7f68e52ccda3a753bdf4c8b
- name: v1.34.0/bin/linux/amd64/kube-apiserver
sha256: 48da54d0563302fa81101d18f048ce123ca1fb7ef5e429d4245c428594a056df
- name: v1.34.0/bin/linux/amd64/kube-controller-manager
sha256: dd49fc2991df033c1eef6c12574795d64633a95e665d1b369afe0760472c24d1
- name: v1.34.0/bin/linux/amd64/kube-log-runner
sha256: cb170de3aea9199cb1eb90ed6b9081856db4b62e9a2ef5e3ae2b44c929f52784
- name: v1.34.0/bin/linux/amd64/kube-proxy
sha256: daa59c4692a8cd260bcbda0e98180aae322250fae8a8be16619b9ede9ee29c20
- name: v1.34.0/bin/linux/amd64/kube-scheduler
sha256: 956a64e7dbe8fda38abe4a10d785e085108d30dba7319eb2abd2962921eea82e
- name: v1.34.0/bin/linux/amd64/kubeadm
sha256: aecc23726768d1753fd417f6e7395cb1a350373295e8e9d9f80e95ed3618e38e
- name: v1.34.0/bin/linux/amd64/kubectl
sha256: cfda68cba5848bc3b6c6135ae2f20ba2c78de20059f68789c090166d6abc3e2c
- name: v1.34.0/bin/linux/amd64/kubectl-convert
sha256: e9bac458029516603f40574800ce5c87b14e31d11eb403cdd79763238536c925
- name: v1.34.0/bin/linux/amd64/kubelet
sha256: 5c0d28cea2a3a5c91861dda088a29d56c1b027e184dae1d792686f0710750076
- name: v1.34.0/bin/linux/amd64/mounter
sha256: b01a50c801286cc28f2429dad0381e13dabddc27530d9b2885d16fbe28691a25
- name: v1.34.0/bin/linux/arm64/apiextensions-apiserver
sha256: 7bf2ab888581c6b42a66e45409b79967c275e3073a2bf2b4059d7fef0e213359
- name: v1.34.0/bin/linux/arm64/kube-aggregator
sha256: 82e9fdb311a5da457b2e73e69f6f6029953132e0f587e5913c7bb55a1d90c3e0
- name: v1.34.0/bin/linux/arm64/kube-apiserver
sha256: a83b3a8aa7abd3a03788ba38a8b3b7094272117cedf0350508fdf84ea0568f31
- name: v1.34.0/bin/linux/arm64/kube-controller-manager
sha256: 779fccbe119b9a0b4a9852c95d24454314bc5ac4ad6013b472df7ce019129b0d
- name: v1.34.0/bin/linux/arm64/kube-log-runner
sha256: 53e7f0c45db85c5baf1b93ed5c38bf8eaf7724414d97cdc06f265518d34db880
- name: v1.34.0/bin/linux/arm64/kube-proxy
sha256: f6b377d9a942ea4f35398b26c65ecccc881b21cebd3ccd16c2f55a93c8c48569
- name: v1.34.0/bin/linux/arm64/kube-scheduler
sha256: 4efd5c8b6dc1808b32f6efb449e987879deb71cd1df7f1d5ff371eba07abdce1
- name: v1.34.0/bin/linux/arm64/kubeadm
sha256: 6b7108016bb2b74132f7494e200501d6522682c01759db91892051a052079c77
- name: v1.34.0/bin/linux/arm64/kubectl
sha256: 00b182d103a8a73da7a4d11e7526d0543dcf352f06cc63a1fde25ce9243f49a0
- name: v1.34.0/bin/linux/arm64/kubectl-convert
sha256: 24e912cec3e5f7c45e4c0e95963c6bbb66404f40bb470176923a3a91a2e94b76
- name: v1.34.0/bin/linux/arm64/kubelet
sha256: e45a7795391cd62ee226666039153832d3096c0f892266cd968936e18b2b40b0
- name: v1.34.0/bin/linux/arm64/mounter
sha256: ae0b9e6e430133fbb9371e97a0b92327bf7b455465a9dfd0822bd77ba04609df

View File

@ -374,7 +374,7 @@ func NormalizeImage(a *AssetBuilder, image string) string {
if !strings.HasPrefix(normalized, registryMirror+"/") {
// We can't nest arbitrarily
// Some risk of collisions, but also -- and __ in the names appear to be blocked by docker hub
normalized = strings.Replace(normalized, "/", "-", -1)
normalized = strings.ReplaceAll(normalized, "/", "-")
normalized = registryMirror + "/" + normalized
}
image = normalized

View File

@ -22,12 +22,6 @@ import (
"k8s.io/kops"
)
const (
// defaultKopsMirrorBase will be detected and automatically set to pull from the defaultKopsMirrors
kopsDefaultBase = "https://artifacts.k8s.io/binaries/kops/%s/"
githubKopsMirrorBase = "https://github.com/kubernetes/kops/releases/download/v%s/"
)
type mirrorConfig struct {
Base string
Mirrors []string

View File

@ -196,6 +196,6 @@ func restNamespaceForClusterName(clusterName string) string {
// We are not allowed dots, so we map them to dashes
// This can conflict, but this will simply be a limitation that we pass on to the user
// i.e. it will not be possible to create a.b.example.com and a-b.example.com
namespace := strings.Replace(clusterName, ".", "-", -1)
namespace := strings.ReplaceAll(clusterName, ".", "-")
return namespace
}

View File

@ -118,10 +118,7 @@ func RunToolboxEnroll(ctx context.Context, f commandutils.Factory, out io.Writer
return err
}
sudo := true
if options.SSHUser == "root" {
sudo = false
}
sudo := options.SSHUser != "root"
sshTarget, err := NewSSHHost(ctx, options.Host, options.SSHPort, options.SSHUser, sudo)
if err != nil {

View File

@ -607,7 +607,7 @@ func (a ByScoreDescending) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a ByScoreDescending) Less(i, j int) bool {
if a[i].score != a[j].score {
// ! to sort highest score first
return !(a[i].score < a[j].score)
return a[i].score >= a[j].score
}
// Use name to break ties consistently
return a[i].subnet.Name < a[j].subnet.Name

View File

@ -307,15 +307,14 @@ func (b *AutoscalingGroupModelBuilder) buildLaunchTemplateTask(c *fi.CloudupMode
if ig.Spec.InstanceMetadata != nil && ig.Spec.InstanceMetadata.HTTPTokens != nil {
lt.HTTPTokens = fi.PtrTo(ec2types.LaunchTemplateHttpTokensState(fi.ValueOf(ig.Spec.InstanceMetadata.HTTPTokens)))
} else if b.IsKubernetesLT("1.27") {
lt.HTTPTokens = fi.PtrTo(ec2types.LaunchTemplateHttpTokensStateOptional)
}
if rootVolumeType == ec2types.VolumeTypeIo1 || rootVolumeType == ec2types.VolumeTypeIo2 {
switch rootVolumeType {
case ec2types.VolumeTypeIo1, ec2types.VolumeTypeIo2:
if ig.Spec.RootVolume == nil || fi.ValueOf(ig.Spec.RootVolume.IOPS) < 100 {
lt.RootVolumeIops = fi.PtrTo(int32(DefaultVolumeIonIops))
}
} else if rootVolumeType == ec2types.VolumeTypeGp3 {
case ec2types.VolumeTypeGp3:
if ig.Spec.RootVolume == nil || fi.ValueOf(ig.Spec.RootVolume.IOPS) < 3000 {
lt.RootVolumeIops = fi.PtrTo(int32(DefaultVolumeGp3Iops))
}
@ -324,7 +323,7 @@ func (b *AutoscalingGroupModelBuilder) buildLaunchTemplateTask(c *fi.CloudupMode
} else {
lt.RootVolumeThroughput = fi.PtrTo(int32(fi.ValueOf(ig.Spec.RootVolume.Throughput)))
}
} else {
default:
lt.RootVolumeIops = nil
}

View File

@ -194,10 +194,6 @@ func (b *KubeAPIServerOptionsBuilder) BuildOptions(cluster *kops.Cluster) error
if _, found := c.FeatureGates["InTreePluginAWSUnregister"]; !found && b.ControlPlaneKubernetesVersion().IsLT("1.31") {
c.FeatureGates["InTreePluginAWSUnregister"] = "true"
}
if _, found := c.FeatureGates["CSIMigrationAWS"]; !found && b.ControlPlaneKubernetesVersion().IsLT("1.27") {
c.FeatureGates["CSIMigrationAWS"] = "true"
}
}
return nil

View File

@ -43,8 +43,7 @@ func (b *AWSEBSCSIDriverOptionsBuilder) BuildOptions(o *kops.Cluster) error {
c := aws.EBSCSIDriver
if c.Version == nil {
version := "v1.38.1"
c.Version = &version
c.Version = fi.PtrTo("v1.47.0")
}
return nil

View File

@ -42,11 +42,6 @@ func (b *ContainerdOptionsBuilder) BuildOptions(o *kops.Cluster) error {
// Set version based on Kubernetes version
if fi.ValueOf(containerd.Version) == "" {
switch {
case b.IsKubernetesLT("1.27.2"):
containerd.Version = fi.PtrTo("1.6.20")
containerd.Runc = &kops.Runc{
Version: fi.PtrTo("1.1.5"),
}
case b.IsKubernetesLT("1.32"):
containerd.Version = fi.PtrTo("1.7.28")
containerd.Runc = &kops.Runc{

View File

@ -236,7 +236,22 @@ func (b *EtcdManagerBuilder) buildPod(etcdCluster kops.EtcdClusterSpec, instance
}
}
{
if b.Cluster.HasImageVolumesSupport() {
for _, etcdVersion := range etcdSupportedVersions() {
if etcdVersion.SymlinkToVersion == "" {
volume := v1.Volume{
Name: "etcd-v" + strings.ReplaceAll(etcdVersion.Version, ".", "-"),
VolumeSource: v1.VolumeSource{
Image: &v1.ImageVolumeSource{
Reference: b.AssetBuilder.RemapImage(etcdVersion.Image),
PullPolicy: v1.PullIfNotPresent,
},
},
}
pod.Spec.Volumes = append(pod.Spec.Volumes, volume)
}
}
} else {
utilMounts := []v1.VolumeMount{
{
MountPath: "/opt",
@ -331,6 +346,20 @@ func (b *EtcdManagerBuilder) buildPod(etcdCluster kops.EtcdClusterSpec, instance
// Remap image via AssetBuilder
container.Image = b.AssetBuilder.RemapImage(container.Image)
if b.Cluster.HasImageVolumesSupport() {
for _, etcdVersion := range etcdSupportedVersions() {
volumeMount := v1.VolumeMount{
MountPath: "/opt/etcd-v" + etcdVersion.Version,
}
if etcdVersion.SymlinkToVersion == "" {
volumeMount.Name = "etcd-v" + strings.ReplaceAll(etcdVersion.Version, ".", "-")
} else {
volumeMount.Name = "etcd-v" + strings.ReplaceAll(etcdVersion.SymlinkToVersion, ".", "-")
}
container.VolumeMounts = append(container.VolumeMounts, volumeMount)
}
}
}
var clientHost string

View File

@ -40,6 +40,20 @@ var _ loader.ClusterOptionsBuilder = &EtcdManagerOptionsBuilder{}
func (b *EtcdManagerOptionsBuilder) BuildOptions(o *kops.Cluster) error {
clusterSpec := &o.Spec
// Image Volumes will become GA in Kubernetes 1.35
// https://github.com/kubernetes/enhancements/pull/5450
if b.ControlPlaneKubernetesVersion().IsLT("1.36.0") && o.HasImageVolumesSupport() {
if clusterSpec.ControlPlaneKubelet == nil {
clusterSpec.ControlPlaneKubelet = &kops.KubeletConfigSpec{}
}
if clusterSpec.ControlPlaneKubelet.FeatureGates == nil {
clusterSpec.ControlPlaneKubelet.FeatureGates = make(map[string]string)
}
if _, found := clusterSpec.ControlPlaneKubelet.FeatureGates["ImageVolume"]; !found {
clusterSpec.ControlPlaneKubelet.FeatureGates["ImageVolume"] = "true"
}
}
for i := range clusterSpec.EtcdClusters {
etcdCluster := &clusterSpec.EtcdClusters[i]
if etcdCluster.Backups == nil {

View File

@ -28,7 +28,9 @@ spec:
provider: Manager
backups:
backupStore: memfs://clusters.example.com/minimal.example.com/backups/etcd-events
kubernetesVersion: v1.21.0
containerd:
version: 2.1.4
kubernetesVersion: v1.33.0
masterPublicName: api.minimal.example.com
networkCIDR: 172.20.0.0/16
networking:

View File

@ -102,80 +102,34 @@ Contents: |
name: pki
- mountPath: /opt
name: opt
- mountPath: /opt/etcd-v3.4.13
name: etcd-v3-4-13
- mountPath: /opt/etcd-v3.4.3
name: etcd-v3-4-13
- mountPath: /opt/etcd-v3.5.0
name: etcd-v3-5-21
- mountPath: /opt/etcd-v3.5.1
name: etcd-v3-5-21
- mountPath: /opt/etcd-v3.5.13
name: etcd-v3-5-21
- mountPath: /opt/etcd-v3.5.17
name: etcd-v3-5-21
- mountPath: /opt/etcd-v3.5.21
name: etcd-v3-5-21
- mountPath: /opt/etcd-v3.5.3
name: etcd-v3-5-21
- mountPath: /opt/etcd-v3.5.4
name: etcd-v3-5-21
- mountPath: /opt/etcd-v3.5.6
name: etcd-v3-5-21
- mountPath: /opt/etcd-v3.5.7
name: etcd-v3-5-21
- mountPath: /opt/etcd-v3.5.9
name: etcd-v3-5-21
- mountPath: /var/log/etcd.log
name: varlogetcd
hostNetwork: true
hostPID: true
initContainers:
- args:
- --target-dir=/opt/kops-utils/
- --src=/ko-app/kops-utils-cp
command:
- /ko-app/kops-utils-cp
image: registry.k8s.io/kops/kops-utils-cp:1.34.0-alpha.1
name: kops-utils-cp
resources: {}
volumeMounts:
- mountPath: /opt
name: opt
- args:
- --target-dir=/opt/etcd-v3.4.13
- --src=/usr/local/bin/etcd
- --src=/usr/local/bin/etcdctl
command:
- /opt/kops-utils/kops-utils-cp
image: registry.k8s.io/etcd:v3.4.13
name: init-etcd-3-4-13
resources: {}
volumeMounts:
- mountPath: /opt
name: opt
- args:
- --target-dir=/opt/etcd-v3.5.21
- --src=/usr/local/bin/etcd
- --src=/usr/local/bin/etcdctl
command:
- /opt/kops-utils/kops-utils-cp
image: registry.k8s.io/etcd:v3.5.21
name: init-etcd-3-5-21
resources: {}
volumeMounts:
- mountPath: /opt
name: opt
- args:
- --symlink
- --target-dir=/opt/etcd-v3.4.3
- --src=/opt/etcd-v3.4.13/etcd
- --src=/opt/etcd-v3.4.13/etcdctl
command:
- /opt/kops-utils/kops-utils-cp
image: registry.k8s.io/kops/kops-utils-cp:1.34.0-alpha.1
name: init-etcd-symlinks-3-4-13
resources: {}
volumeMounts:
- mountPath: /opt
name: opt
- args:
- --symlink
- --target-dir=/opt/etcd-v3.5.0
- --target-dir=/opt/etcd-v3.5.1
- --target-dir=/opt/etcd-v3.5.13
- --target-dir=/opt/etcd-v3.5.17
- --target-dir=/opt/etcd-v3.5.3
- --target-dir=/opt/etcd-v3.5.4
- --target-dir=/opt/etcd-v3.5.6
- --target-dir=/opt/etcd-v3.5.7
- --target-dir=/opt/etcd-v3.5.9
- --src=/opt/etcd-v3.5.21/etcd
- --src=/opt/etcd-v3.5.21/etcdctl
command:
- /opt/kops-utils/kops-utils-cp
image: registry.k8s.io/kops/kops-utils-cp:1.34.0-alpha.1
name: init-etcd-symlinks-3-5-21
resources: {}
volumeMounts:
- mountPath: /opt
name: opt
priorityClassName: system-cluster-critical
tolerations:
- key: CriticalAddonsOnly
@ -195,6 +149,14 @@ Contents: |
name: pki
- emptyDir: {}
name: opt
- image:
pullPolicy: IfNotPresent
reference: registry.k8s.io/etcd:v3.4.13
name: etcd-v3-4-13
- image:
pullPolicy: IfNotPresent
reference: registry.k8s.io/etcd:v3.5.21
name: etcd-v3-5-21
- hostPath:
path: /var/log/etcd-events.log
type: FileOrCreate
@ -244,80 +206,34 @@ Contents: |
name: pki
- mountPath: /opt
name: opt
- mountPath: /opt/etcd-v3.4.13
name: etcd-v3-4-13
- mountPath: /opt/etcd-v3.4.3
name: etcd-v3-4-13
- mountPath: /opt/etcd-v3.5.0
name: etcd-v3-5-21
- mountPath: /opt/etcd-v3.5.1
name: etcd-v3-5-21
- mountPath: /opt/etcd-v3.5.13
name: etcd-v3-5-21
- mountPath: /opt/etcd-v3.5.17
name: etcd-v3-5-21
- mountPath: /opt/etcd-v3.5.21
name: etcd-v3-5-21
- mountPath: /opt/etcd-v3.5.3
name: etcd-v3-5-21
- mountPath: /opt/etcd-v3.5.4
name: etcd-v3-5-21
- mountPath: /opt/etcd-v3.5.6
name: etcd-v3-5-21
- mountPath: /opt/etcd-v3.5.7
name: etcd-v3-5-21
- mountPath: /opt/etcd-v3.5.9
name: etcd-v3-5-21
- mountPath: /var/log/etcd.log
name: varlogetcd
hostNetwork: true
hostPID: true
initContainers:
- args:
- --target-dir=/opt/kops-utils/
- --src=/ko-app/kops-utils-cp
command:
- /ko-app/kops-utils-cp
image: registry.k8s.io/kops/kops-utils-cp:1.34.0-alpha.1
name: kops-utils-cp
resources: {}
volumeMounts:
- mountPath: /opt
name: opt
- args:
- --target-dir=/opt/etcd-v3.4.13
- --src=/usr/local/bin/etcd
- --src=/usr/local/bin/etcdctl
command:
- /opt/kops-utils/kops-utils-cp
image: registry.k8s.io/etcd:v3.4.13
name: init-etcd-3-4-13
resources: {}
volumeMounts:
- mountPath: /opt
name: opt
- args:
- --target-dir=/opt/etcd-v3.5.21
- --src=/usr/local/bin/etcd
- --src=/usr/local/bin/etcdctl
command:
- /opt/kops-utils/kops-utils-cp
image: registry.k8s.io/etcd:v3.5.21
name: init-etcd-3-5-21
resources: {}
volumeMounts:
- mountPath: /opt
name: opt
- args:
- --symlink
- --target-dir=/opt/etcd-v3.4.3
- --src=/opt/etcd-v3.4.13/etcd
- --src=/opt/etcd-v3.4.13/etcdctl
command:
- /opt/kops-utils/kops-utils-cp
image: registry.k8s.io/kops/kops-utils-cp:1.34.0-alpha.1
name: init-etcd-symlinks-3-4-13
resources: {}
volumeMounts:
- mountPath: /opt
name: opt
- args:
- --symlink
- --target-dir=/opt/etcd-v3.5.0
- --target-dir=/opt/etcd-v3.5.1
- --target-dir=/opt/etcd-v3.5.13
- --target-dir=/opt/etcd-v3.5.17
- --target-dir=/opt/etcd-v3.5.3
- --target-dir=/opt/etcd-v3.5.4
- --target-dir=/opt/etcd-v3.5.6
- --target-dir=/opt/etcd-v3.5.7
- --target-dir=/opt/etcd-v3.5.9
- --src=/opt/etcd-v3.5.21/etcd
- --src=/opt/etcd-v3.5.21/etcdctl
command:
- /opt/kops-utils/kops-utils-cp
image: registry.k8s.io/kops/kops-utils-cp:1.34.0-alpha.1
name: init-etcd-symlinks-3-5-21
resources: {}
volumeMounts:
- mountPath: /opt
name: opt
priorityClassName: system-cluster-critical
tolerations:
- key: CriticalAddonsOnly
@ -337,6 +253,14 @@ Contents: |
name: pki
- emptyDir: {}
name: opt
- image:
pullPolicy: IfNotPresent
reference: registry.k8s.io/etcd:v3.4.13
name: etcd-v3-4-13
- image:
pullPolicy: IfNotPresent
reference: registry.k8s.io/etcd:v3.5.21
name: etcd-v3-5-21
- hostPath:
path: /var/log/etcd.log
type: FileOrCreate

View File

@ -161,10 +161,6 @@ func (b *KubeControllerManagerOptionsBuilder) BuildOptions(o *kops.Cluster) erro
if _, found := kcm.FeatureGates["InTreePluginAWSUnregister"]; !found && b.ControlPlaneKubernetesVersion().IsLT("1.31") {
kcm.FeatureGates["InTreePluginAWSUnregister"] = "true"
}
if _, found := kcm.FeatureGates["CSIMigrationAWS"]; !found && b.ControlPlaneKubernetesVersion().IsLT("1.27") {
kcm.FeatureGates["CSIMigrationAWS"] = "true"
}
}
return nil

View File

@ -183,10 +183,6 @@ func (b *KubeletOptionsBuilder) configureKubelet(cluster *kops.Cluster, kubelet
if _, found := kubelet.FeatureGates["InTreePluginAWSUnregister"]; !found && kubernetesVersion.IsLT("1.31") {
kubelet.FeatureGates["InTreePluginAWSUnregister"] = "true"
}
if _, found := kubelet.FeatureGates["CSIMigrationAWS"]; !found && kubernetesVersion.IsLT("1.27") {
kubelet.FeatureGates["CSIMigrationAWS"] = "true"
}
}
// Set systemd as the default cgroup driver for kubelet

View File

@ -66,10 +66,6 @@ func (b *KubeSchedulerOptionsBuilder) BuildOptions(o *kops.Cluster) error {
if _, found := config.FeatureGates["InTreePluginAWSUnregister"]; !found && b.ControlPlaneKubernetesVersion().IsLT("1.31") {
config.FeatureGates["InTreePluginAWSUnregister"] = "true"
}
if _, found := config.FeatureGates["CSIMigrationAWS"]; !found && b.ControlPlaneKubernetesVersion().IsLT("1.27") {
config.FeatureGates["CSIMigrationAWS"] = "true"
}
}
return nil
}

View File

@ -265,7 +265,7 @@ func (b *KopsModelContext) CloudTags(name string, shared bool) map[string]string
}
case kops.CloudProviderScaleway:
for k, v := range b.Cluster.Spec.CloudLabels {
if k == scaleway.TagClusterName && shared == true {
if k == scaleway.TagClusterName && shared {
klog.V(4).Infof("Skipping %q tag for shared resource", scaleway.TagClusterName)
continue
}

View File

@ -39,7 +39,7 @@ func (b *NetworkModelBuilder) Build(c *fi.CloudupModelBuilderContext) error {
return nil
}
clusterName := strings.Replace(b.ClusterName(), ".", "-", -1)
clusterName := strings.ReplaceAll(b.ClusterName(), ".", "-")
vpcName := "vpc-" + clusterName
// Create a separate vpc for this cluster.

View File

@ -283,10 +283,7 @@ func (b *AutoscalingGroupModelBuilder) splitToZones(ig *kops.InstanceGroup) (map
totalSize += targetSizes[i]
}
i := 0
for {
if totalSize >= minSize {
break
}
for totalSize < minSize {
targetSizes[i]++
totalSize++

View File

@ -287,7 +287,7 @@ func (b *MasterVolumeBuilder) addGCEVolume(c *fi.CloudupModelBuilderContext, pre
tags[gce.GceLabelNameEtcdClusterPrefix+etcd.Name] = gce.EncodeGCELabel(clusterSpec)
// GCE disk names must match the following regular expression: '[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?'
prefix = strings.Replace(prefix, ".", "-", -1)
prefix = strings.ReplaceAll(prefix, ".", "-")
if strings.IndexByte("0123456789-", prefix[0]) != -1 {
prefix = "d" + prefix
}
@ -320,8 +320,6 @@ func (b *MasterVolumeBuilder) addHetznerVolume(c *fi.CloudupModelBuilderContext,
Labels: tags,
}
c.AddTask(t)
return
}
func (b *MasterVolumeBuilder) addOpenstackVolume(c *fi.CloudupModelBuilderContext, name string, volumeSize int32, zone string, etcd kops.EtcdClusterSpec, m kops.EtcdMemberSpec, allMembers []string) error {
@ -430,6 +428,4 @@ func (b *MasterVolumeBuilder) addScalewayVolume(c *fi.CloudupModelBuilderContext
Type: fi.PtrTo(string(instance.VolumeVolumeTypeBSSD)),
}
c.AddTask(t)
return
}

View File

@ -706,10 +706,7 @@ func (b *FirewallModelBuilder) Build(c *fi.CloudupModelBuilderContext) error {
sgMap := make(map[string]*openstacktasks.SecurityGroup)
useVIPACL := false
if b.UseLoadBalancerForAPI() && b.UseVIPACL() {
useVIPACL = true
}
useVIPACL := b.UseLoadBalancerForAPI() && b.UseVIPACL()
sg := &openstacktasks.SecurityGroup{
Name: s(b.APIResourceName()),
Lifecycle: b.Lifecycle,
@ -729,11 +726,12 @@ func (b *FirewallModelBuilder) Build(c *fi.CloudupModelBuilderContext) error {
Lifecycle: b.Lifecycle,
RemoveGroup: false,
}
if role == kops.InstanceGroupRoleBastion {
switch role {
case kops.InstanceGroupRoleBastion:
sg.RemoveExtraRules = []string{"port=22"}
} else if role == kops.InstanceGroupRoleNode {
case kops.InstanceGroupRoleNode:
sg.RemoveExtraRules = []string{"port=22", "port=10250"}
} else if role == kops.InstanceGroupRoleControlPlane {
case kops.InstanceGroupRoleControlPlane:
sg.RemoveExtraRules = []string{"port=22", "port=443", "port=10250"}
}
c.AddTask(sg)

View File

@ -53,12 +53,9 @@ func (b *NetworkModelBuilder) Build(c *fi.CloudupModelBuilderContext) error {
c.AddTask(t)
}
needRouter := true
// Do not need router if there is no external network
if osSpec.Router == nil || osSpec.Router.ExternalNetwork == nil {
needRouter = false
}
routerName := strings.Replace(clusterName, ".", "-", -1)
needRouter := osSpec.Router != nil && osSpec.Router.ExternalNetwork != nil
routerName := strings.ReplaceAll(clusterName, ".", "-")
for _, sp := range b.Cluster.Spec.Networking.Subnets {
// assumes that we do not need to create routers if we use existing subnets
if sp.ID != "" {

View File

@ -88,7 +88,7 @@ func (b *ServerGroupModelBuilder) buildInstances(c *fi.CloudupModelBuilderContex
return err
}
sshKeyName := strings.Replace(sshKeyNameFull, ":", "_", -1)
sshKeyName := strings.ReplaceAll(sshKeyNameFull, ":", "_")
igMeta := make(map[string]string)
cloudTags, err := b.KopsModelContext.CloudTagsForInstanceGroup(ig)
@ -145,8 +145,8 @@ func (b *ServerGroupModelBuilder) buildInstances(c *fi.CloudupModelBuilderContex
for i := int32(0); i < *ig.Spec.MinSize; i++ {
// FIXME: Must ensure 63 or less characters
// replace all dots and _ with -, this is needed to get external cloudprovider working
iName := strings.Replace(strings.ToLower(fmt.Sprintf("%s-%d.%s", ig.Name, i+1, b.ClusterName())), "_", "-", -1)
instanceName := fi.PtrTo(strings.Replace(iName, ".", "-", -1))
iName := strings.ReplaceAll(strings.ToLower(fmt.Sprintf("%s-%d.%s", ig.Name, i+1, b.ClusterName())), "_", "-")
instanceName := fi.PtrTo(strings.ReplaceAll(iName, ".", "-"))
var az *string
var subnets []*openstacktasks.Subnet
@ -175,13 +175,13 @@ func (b *ServerGroupModelBuilder) buildInstances(c *fi.CloudupModelBuilderContex
}
// Create instance port task
portName := fmt.Sprintf("%s-%s", "port", *instanceName)
portTagKopsName := strings.Replace(
strings.Replace(
portTagKopsName := strings.ReplaceAll(
strings.ReplaceAll(
strings.ToLower(
fmt.Sprintf("port-%s-%d", ig.Name, i+1),
),
"_", "-", -1,
), ".", "-", -1,
"_", "-",
), ".", "-",
)
portTask := &openstacktasks.Port{
Name: fi.PtrTo(portName),

View File

@ -74,7 +74,7 @@ download-or-bust() {
local -r file="$1"
local -r hash="$2"
local -a urls
mapfile -t urls < <(split-commas "$3")
IFS=, read -r -a urls <<< "$3"
if [[ -f "${file}" ]]; then
if ! validate-hash "${file}" "${hash}"; then
@ -125,10 +125,6 @@ validate-hash() {
fi
}
function split-commas() {
echo "$1" | tr "," "\n"
}
function download-release() {
case "$(uname -m)" in
x86_64*|i?86_64*|amd64*)
@ -299,7 +295,7 @@ func AWSMultipartMIME(bootScript string, ig *kops.InstanceGroup) (string, error)
return "", err
}
writer.Write([]byte(fmt.Sprintf("Content-Type: multipart/mixed; boundary=\"%s\"\r\n", boundary)))
fmt.Fprintf(writer, "Content-Type: multipart/mixed; boundary=\"%s\"\r\n", boundary)
writer.Write([]byte("MIME-Version: 1.0\r\n\r\n"))
var err error
@ -317,7 +313,7 @@ func AWSMultipartMIME(bootScript string, ig *kops.InstanceGroup) (string, error)
}
}
writer.Write([]byte(fmt.Sprintf("\r\n--%s--\r\n", boundary)))
fmt.Fprintf(writer, "\r\n--%s--\r\n", boundary)
writer.Flush()
mimeWriter.Close()

View File

@ -52,7 +52,7 @@ download-or-bust() {
local -r file="$1"
local -r hash="$2"
local -a urls
mapfile -t urls < <(split-commas "$3")
IFS=, read -r -a urls <<< "$3"
if [[ -f "${file}" ]]; then
if ! validate-hash "${file}" "${hash}"; then
@ -103,10 +103,6 @@ validate-hash() {
fi
}
function split-commas() {
echo "$1" | tr "," "\n"
}
function download-release() {
case "$(uname -m)" in
x86_64*|i?86_64*|amd64*)

View File

@ -52,7 +52,7 @@ download-or-bust() {
local -r file="$1"
local -r hash="$2"
local -a urls
mapfile -t urls < <(split-commas "$3")
IFS=, read -r -a urls <<< "$3"
if [[ -f "${file}" ]]; then
if ! validate-hash "${file}" "${hash}"; then
@ -103,10 +103,6 @@ validate-hash() {
fi
}
function split-commas() {
echo "$1" | tr "," "\n"
}
function download-release() {
case "$(uname -m)" in
x86_64*|i?86_64*|amd64*)

View File

@ -52,7 +52,7 @@ download-or-bust() {
local -r file="$1"
local -r hash="$2"
local -a urls
mapfile -t urls < <(split-commas "$3")
IFS=, read -r -a urls <<< "$3"
if [[ -f "${file}" ]]; then
if ! validate-hash "${file}" "${hash}"; then
@ -103,10 +103,6 @@ validate-hash() {
fi
}
function split-commas() {
echo "$1" | tr "," "\n"
}
function download-release() {
case "$(uname -m)" in
x86_64*|i?86_64*|amd64*)

View File

@ -52,7 +52,7 @@ download-or-bust() {
local -r file="$1"
local -r hash="$2"
local -a urls
mapfile -t urls < <(split-commas "$3")
IFS=, read -r -a urls <<< "$3"
if [[ -f "${file}" ]]; then
if ! validate-hash "${file}" "${hash}"; then
@ -103,10 +103,6 @@ validate-hash() {
fi
}
function split-commas() {
echo "$1" | tr "," "\n"
}
function download-release() {
case "$(uname -m)" in
x86_64*|i?86_64*|amd64*)

View File

@ -52,7 +52,7 @@ download-or-bust() {
local -r file="$1"
local -r hash="$2"
local -a urls
mapfile -t urls < <(split-commas "$3")
IFS=, read -r -a urls <<< "$3"
if [[ -f "${file}" ]]; then
if ! validate-hash "${file}" "${hash}"; then
@ -103,10 +103,6 @@ validate-hash() {
fi
}
function split-commas() {
echo "$1" | tr "," "\n"
}
function download-release() {
case "$(uname -m)" in
x86_64*|i?86_64*|amd64*)

View File

@ -52,7 +52,7 @@ download-or-bust() {
local -r file="$1"
local -r hash="$2"
local -a urls
mapfile -t urls < <(split-commas "$3")
IFS=, read -r -a urls <<< "$3"
if [[ -f "${file}" ]]; then
if ! validate-hash "${file}" "${hash}"; then
@ -103,10 +103,6 @@ validate-hash() {
fi
}
function split-commas() {
echo "$1" | tr "," "\n"
}
function download-release() {
case "$(uname -m)" in
x86_64*|i?86_64*|amd64*)

View File

@ -146,23 +146,25 @@ func BuildKubernetesFileAssets(ig model.InstanceGroup, assetBuilder *assets.Asse
if runcAsset != nil {
kubernetesAssets[arch] = append(kubernetesAssets[arch], assets.BuildMirroredAsset(runcAsset))
}
nerdctlAsset, err := wellknownassets.FindNerdctlAsset(ig, assetBuilder, arch)
if err != nil {
return nil, err
if ig.RawClusterSpec().Containerd.InstallNerdCtl {
nerdctlAsset, err := wellknownassets.FindNerdctlAsset(ig, assetBuilder, arch)
if err != nil {
return nil, err
}
if nerdctlAsset != nil {
kubernetesAssets[arch] = append(kubernetesAssets[arch], assets.BuildMirroredAsset(nerdctlAsset))
}
}
if nerdctlAsset != nil {
kubernetesAssets[arch] = append(kubernetesAssets[arch], assets.BuildMirroredAsset(nerdctlAsset))
if ig.RawClusterSpec().Containerd.InstallCriCtl {
crictlAsset, err := wellknownassets.FindCrictlAsset(ig, assetBuilder, arch)
if err != nil {
return nil, err
}
if crictlAsset != nil {
kubernetesAssets[arch] = append(kubernetesAssets[arch], assets.BuildMirroredAsset(crictlAsset))
}
}
}
crictlAsset, err := wellknownassets.FindCrictlAsset(ig, assetBuilder, arch)
if err != nil {
return nil, err
}
if crictlAsset != nil {
kubernetesAssets[arch] = append(kubernetesAssets[arch], assets.BuildMirroredAsset(crictlAsset))
}
}
return &KubernetesFileAssets{

View File

@ -369,9 +369,7 @@ func (n *nodeUpConfigBuilder) BuildConfig(ig *kops.InstanceGroup, wellKnownAddre
case kops.CloudProviderDO, kops.CloudProviderScaleway, kops.CloudProviderAzure:
// Use any IP address that is found (including public ones)
for _, additionalIP := range wellKnownAddresses[wellknownservices.KubeAPIServer] {
controlPlaneIPs = append(controlPlaneIPs, additionalIP)
}
controlPlaneIPs = append(controlPlaneIPs, wellKnownAddresses[wellknownservices.KubeAPIServer]...)
}
if cluster.UsesNoneDNS() {

View File

@ -95,12 +95,7 @@ func FindCNIAssets(ig model.InstanceGroup, assetBuilder *assets.AssetBuilder, ar
cniAssetURL = defaultCNIAssetAmd64K8s_30
case ig.KubernetesVersion().IsGTE("1.29"):
cniAssetURL = defaultCNIAssetAmd64K8s_29
case ig.KubernetesVersion().IsGTE("1.27"):
cniAssetURL = defaultCNIAssetAmd64K8s_27
default:
cniAssetURL = defaultCNIAssetAmd64K8s_22
}
klog.V(2).Infof("Adding default ARM64 CNI plugin binaries asset: %s", cniAssetURL)
case architectures.ArchitectureArm64:
switch {
case ig.KubernetesVersion().IsGTE("1.32"):
@ -111,16 +106,17 @@ func FindCNIAssets(ig model.InstanceGroup, assetBuilder *assets.AssetBuilder, ar
cniAssetURL = defaultCNIAssetArm64K8s_30
case ig.KubernetesVersion().IsGTE("1.29"):
cniAssetURL = defaultCNIAssetArm64K8s_29
case ig.KubernetesVersion().IsGTE("1.27"):
cniAssetURL = defaultCNIAssetArm64K8s_27
default:
cniAssetURL = defaultCNIAssetArm64K8s_22
}
klog.V(2).Infof("Adding default AMD64 CNI plugin binaries asset: %s", cniAssetURL)
default:
return nil, fmt.Errorf("unknown arch for CNI plugin binaries asset: %s", arch)
}
if cniAssetURL == "" {
return nil, fmt.Errorf("unknown CNI plugin binaries asset: %s", arch)
} else {
klog.V(2).Infof("Adding CNI plugin binaries asset: %s", cniAssetURL)
}
u, err := url.Parse(cniAssetURL)
if err != nil {
return nil, fmt.Errorf("unable to parse CNI plugin binaries asset URL %q: %v", cniAssetURL, err)

View File

@ -59,12 +59,12 @@ func Test_FindCNIAssetFromEnvironmentVariable(t *testing.T) {
}
}
func Test_FindCNIAssetFromDefaults122(t *testing.T) {
desiredCNIVersionURL := "https://storage.googleapis.com/k8s-artifacts-cni/release/v0.9.1/cni-plugins-linux-amd64-v0.9.1.tgz"
desiredCNIVersionHash := "sha256:962100bbc4baeaaa5748cdbfce941f756b1531c2eadb290129401498bfac21e7"
func Test_FindCNIAssetFromDefaults134(t *testing.T) {
desiredCNIVersionURL := "https://storage.googleapis.com/k8s-artifacts-cni/release/v1.6.1/cni-plugins-linux-amd64-v1.6.1.tgz"
desiredCNIVersionHash := "sha256:2503ce29ac445715ebe146073f45468153f9e28f45fa173cb060cfd9e735f563"
cluster := &api.Cluster{}
cluster.Spec.KubernetesVersion = "v1.22.0"
cluster.Spec.KubernetesVersion = "v1.34.0"
ig := &api.InstanceGroup{}

View File

@ -190,20 +190,21 @@ func parsePEMPrivateKey(pemData []byte) (crypto.Signer, error) {
return nil, fmt.Errorf("could not parse private key (unable to decode PEM)")
}
if block.Type == "RSA PRIVATE KEY" {
switch block.Type {
case "RSA PRIVATE KEY":
klog.V(10).Infof("Parsing pem block: %q", block.Type)
return x509.ParsePKCS1PrivateKey(block.Bytes)
} else if block.Type == "EC PRIVATE KEY" {
case "EC PRIVATE KEY":
klog.V(10).Infof("Parsing pem block: %q", block.Type)
return x509.ParseECPrivateKey(block.Bytes)
} else if block.Type == "PRIVATE KEY" {
case "PRIVATE KEY":
klog.V(10).Infof("Parsing pem block: %q", block.Type)
k, err := x509.ParsePKCS8PrivateKey(block.Bytes)
if err != nil {
return nil, err
}
return k.(crypto.Signer), nil
} else {
default:
klog.Infof("Ignoring unexpected PEM block: %q", block.Type)
}

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