Compare commits

...
28 Commits
Author SHA1 Message Date
Sanket SudakeandGitHub 7e8d5dd7ef Add kubernetes version constraint and update version 1.20.1 in helm chart (#2901)
Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2024-01-14 15:38:42 +05:30
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
796c7a48e8 Bump github.com/cloudflare/circl from 1.3.3 to 1.3.7 (#2898)
Bumps [github.com/cloudflare/circl](https://github.com/cloudflare/circl) from 1.3.3 to 1.3.7.
- [Release notes](https://github.com/cloudflare/circl/releases)
- [Commits](https://github.com/cloudflare/circl/compare/v1.3.3...v1.3.7)

---
updated-dependencies:
- dependency-name: github.com/cloudflare/circl
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-14 14:25:05 +05:30
Sanket SudakeandGitHub b0e4440328 Update Go modules (#2900)
- Update go modules
    + github.com/prometheus/client_golang v1.17.0 [v1.18.0]
   + golang.org/x/net v0.19.0 [v0.20.0]
    + sigs.k8s.io/controller-tools v0.13.0 [v0.14.0]
- Remove Kafka tests disabled.

Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2024-01-14 11:48:40 +05:30
Sanket SudakeandGitHub b801c77432 Add kubernetes QPS and Burst limit configuration (#2899)
Added configurable kubernetes client limits burst and QPS
Default QPS 200 and burst 500. Configurable via helm chart values.

Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2024-01-12 22:21:12 +05:30
Sanket SudakeandGitHub 82b2848eb7 Set default package status to none if deployment exists (#2894)
If package has deployment already, we should set package status to none instead of pending.
If we have package has source, we set status to pending.
If both source and deployment are empty, package marked as failure.

Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2024-01-05 18:31:13 +05:30
dk03051996andGitHub 0c1b03b862 added annotation for signing (#2895) 2024-01-04 10:47:18 +05:30
Sanket SudakeandGitHub 0c8573467b Make common cache typed with generics (#2896)
Making typed common cache so that we don't use wrong types
across set/get methods and more higher-level methods can be
defined for cache.
Currently, we are not able to operate over all keys of the cache
due to generic types.
I also removed code comments around the cache.

Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2024-01-04 10:46:32 +05:30
Vardhaman SuranaandGitHub 12f8017d9b added fetcher test cases (#2893)
* added fetcher test cases

* error message formatting fix

* error message formatting fix for e2e framework
2023-12-21 17:02:39 +05:30
Sanket SudakeandGitHub 29b0cf24ac Update Go dependencies (#2889)
* Update Go dependencies

---

github.com/go-git/go-git/v5 v5.10.1 [v5.11.0]
github.com/google/uuid v1.4.0 [v1.5.0]
google.golang.org/grpc v1.59.0 [v1.60.0]
k8s.io/api v0.28.4 [v0.29.0]
k8s.io/apiextensions-apiserver v0.28.4 [v0.29.0]
k8s.io/apimachinery v0.28.4 [v0.29.0]
k8s.io/client-go v0.28.4 [v0.29.0]
k8s.io/metrics v0.28.4 [v0.29.0]

Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>

* update deps

Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>

---------

Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2023-12-21 10:57:00 +05:30
Dada GoreandGitHub d4aba532f3 Router authentication jwtSigningKey unique for every Fission installation 2023-12-06 10:11:36 +05:30
Sanket SudakeandGitHub 9b57f1f2e7 Update chart version to v1.20.0 (#2886)
Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2023-11-30 17:32:04 +05:30
Dada GoreandGitHub 1fe13624f2 seperated events permission in keda and executor linked roles to remove delete permission (#2885) 2023-11-30 14:19:59 +05:30
Sanket SudakeandGitHub fdecc98775 Auto-approve goreleaser docker builds with cosign (#2883)
Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2023-11-27 14:01:30 +05:30
Sanket SudakeandGitHub 10852c90a5 Update goreleaser cosign prompt approval (#2882) 2023-11-25 19:54:16 +05:30
Sanket SudakeandGitHub 62f729727a Change container base image to cgr.dev/chainguard/static (#2881)
* Change container base image to cgr.dev/chainguard/static
* Lint fixes
* fix test failure
* Add router deployment wait
* add check command in upgrade script

---------

Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2023-11-24 19:01:31 +05:30
Sanket SudakeandGitHub 95faf60959 Update keda connectors images (#2880)
Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2023-11-24 14:22:47 +05:30
Sanket SudakeandGitHub 17fbe42fcc Update fission version v1.20.0-rc2 (#2879)
Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2023-11-23 13:00:50 +05:30
Sanket SudakeandGitHub f44174debc Remove deprecated mqtrigger with kind fission (#2875)
* Remove deprecated mqtrigger with kind fission
* Remove unused deps

---------

Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2023-11-21 17:52:37 +05:30
Sanket SudakeandGitHub efeb6951dc Update Go dependencies (#2878)
* Update Go dependencies
* Pin all github workflows dependencies

---------

Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2023-11-21 16:15:49 +05:30
Sanket SudakeandGitHub b85ba9e419 Use concurrency in poolmanager as per old behaviour (#2876)
* Use concurrency in poolmanager as per old behaviour
* Update code comments

---------

Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2023-11-21 13:34:17 +05:30
Sanket SudakeandGitHub d23ed572f9 Add tests for preupgradchecks and spec/archive CLI (#2874)
* Add tests for preupgradchecks
* Add spec tests
* Add package archive tests
* Wait for cleanup
* Fix test and coverage

---------

Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2023-11-17 14:08:38 +05:30
Sanket SudakeandGitHub e7d6381876 Add webhook server to tests (#2873)
* Add webhook server to tests
* fix config for webhoook service
* Fix logger in webhook manager
* Use interface for webhook manager
* single reference for router url
* Cleanup token code

---------

Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2023-11-16 14:16:28 +05:30
Sanket SudakeandGitHub 57b537f09e Add CLI tests for mqtrigger/timetrigger (#2872)
* Add tests for mqtrigger/timetrigger
* Change command to run tests
* correct coverage command
* update coverpkg

---------

Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2023-11-13 17:14:47 +05:30
Sanket SudakeandGitHub 2e4825def0 Add function test CLI tests (#2871)
* Add function test CLI tests
* Add few more services to tests

Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2023-11-13 14:34:56 +05:30
Vardhaman SuranaandGitHub 3fabf64b3c Add informers and internal go routines in manager (#2870)
* used manager's Add function in more places
* exit when ctx.Done is received in archivePruner go routines
* fix manager tests
* fix data race
* added more gpm function in manager and removed manager from a util function
* closed unused channel and stopped ticker after context is done
* added log statements
* used context.Done inside function instead of stopper channel
2023-11-10 12:42:21 +05:30
Vardhaman SuranaandGitHub 2a40b4538c added manger to keep track of go routines in the services (#2869)
- added manager to wait for all go routines to end before exit
- code refactor
- renamed Manafer to Interface and GoRoutineManager to GroupManager
- replaced some go routine calls with manager Add func
- added unit tests for manager
2023-11-07 15:30:48 +05:30
Sanket SudakeandGitHub 27132975c4 Add interfaces for executor/fetcher/storagesvc clients (#2867)
Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2023-11-06 16:09:51 +05:30
Sanket SudakeandGitHub b099db38d7 Update Go deps (#2868)
---

github.com/IBM/sarama v1.41.3 [v1.42.0]
github.com/gorilla/mux v1.8.0 [v1.8.1]
github.com/spf13/cobra v1.7.0 [v1.8.0]

Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
2023-11-05 11:33:45 +05:30
171 changed files with 17989 additions and 17963 deletions
+3 -5
View File
@@ -1,11 +1,9 @@
ignore: ignore:
- "charts" - "charts"
- "demos" - "test/"
- "Documentation"
- "examples"
- "test"
- "tools" - "tools"
- "pkg/apis/genclient" - "pkg/generated" # generated code
- "pkg/apis/*/*/zz_generated*" # generated code
coverage: coverage:
status: status:
project: project:
+4 -4
View File
@@ -25,18 +25,18 @@ jobs:
if: ${{ !contains(github.event.pull_request.labels.*.name, 'skip-ci') }} if: ${{ !contains(github.event.pull_request.labels.*.name, 'skip-ci') }}
steps: steps:
- name: Check out code - name: Check out code
uses: actions/checkout@v4 uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: setup go - name: setup go
uses: actions/setup-go@v4 uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0
with: with:
go-version-file: "go.mod" go-version-file: "go.mod"
cache: true cache: true
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@v2 uses: github/codeql-action/init@66b90a5db151a8042fa97405c6cf843bbe433f7b # v2.22.7
with: with:
languages: go languages: go
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2 uses: github/codeql-action/analyze@66b90a5db151a8042fa97405c6cf843bbe433f7b # v2.22.7
+2 -2
View File
@@ -19,10 +19,10 @@ jobs:
if: ${{ !contains(github.event.pull_request.labels.*.name, 'skip-ci') }} if: ${{ !contains(github.event.pull_request.labels.*.name, 'skip-ci') }}
steps: steps:
- name: Check out code - name: Check out code
uses: actions/checkout@v4 uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Set up Go - name: Set up Go
uses: actions/setup-go@v4 uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0
with: with:
go-version-file: "go.mod" go-version-file: "go.mod"
+6 -6
View File
@@ -18,19 +18,19 @@ on:
workflow_dispatch: workflow_dispatch:
env: env:
GOLANGCI_LINT_VERSION: v1.51.1 GOLANGCI_LINT_VERSION: v1.55.2
GOLANGCI_LINT_TIMEOUT: 5m GOLANGCI_LINT_TIMEOUT: 5m
jobs: jobs:
lint: lint:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: ${{ !contains(github.event.pull_request.labels.*.name, 'skip-ci') }} # if: ${{ !contains(github.event.pull_request.labels.*.name, 'skip-ci') }}
steps: steps:
- name: Check out code - name: Check out code
uses: actions/checkout@v4 uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Set up Go - name: Set up Go
uses: actions/setup-go@v4 uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0
with: with:
go-version-file: "go.mod" go-version-file: "go.mod"
cache: true cache: true
@@ -41,7 +41,7 @@ jobs:
go mod download go mod download
- name: Run golangci-lint - name: Run golangci-lint
uses: golangci/golangci-lint-action@v3 uses: golangci/golangci-lint-action@3a919529898de77ec3da873e3063ca4b10e7f5cc # v3.7.0
with: with:
version: ${{ env.GOLANGCI_LINT_VERSION }} version: ${{ env.GOLANGCI_LINT_VERSION }}
args: --timeout=${{ env.GOLANGCI_LINT_TIMEOUT }} args: --timeout=${{ env.GOLANGCI_LINT_TIMEOUT }}
@@ -61,7 +61,7 @@ jobs:
run: ./hack/runtests.sh run: ./hack/runtests.sh
- name: Upload Coverage report to CodeCov - name: Upload Coverage report to CodeCov
uses: codecov/codecov-action@v2 uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # v3.1.4
with: with:
token: ${{secrets.CODECOV_TOKEN}} token: ${{secrets.CODECOV_TOKEN}}
flags: unittests flags: unittests
+18 -18
View File
@@ -38,27 +38,27 @@ jobs:
os: [ubuntu-latest] os: [ubuntu-latest]
steps: steps:
- name: Checkout sources - name: Checkout sources
uses: actions/checkout@v4 uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: setup go - name: setup go
uses: actions/setup-go@v4 uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0
with: with:
go-version-file: "go.mod" go-version-file: "go.mod"
cache: true cache: true
- name: Checkout sources - name: Checkout sources
uses: actions/checkout@v4 uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with: with:
repository: fission/examples repository: fission/examples
path: examples path: examples
- name: Helm installation - name: Helm installation
uses: Azure/setup-helm@v3 uses: Azure/setup-helm@5119fcb9089d432beecbf79bb2c7915207344b78 # v3.5
with: with:
version: ${{ env.HELM_VERSION }} version: ${{ env.HELM_VERSION }}
- name: Kind Cluster - name: Kind Cluster
uses: helm/kind-action@v1.8.0 uses: helm/kind-action@dda0770415bac9fc20092cacbc54aa298604d140 # v1.8.0
with: with:
node_image: kindest/node:${{ matrix.kindversion }} node_image: kindest/node:${{ matrix.kindversion }}
version: ${{ env.KIND_VERSION }} version: ${{ env.KIND_VERSION }}
@@ -84,7 +84,7 @@ jobs:
skaffold version skaffold version
- name: Install GoReleaser - name: Install GoReleaser
uses: goreleaser/goreleaser-action@v5 uses: goreleaser/goreleaser-action@7ec5c2b0c6cdda6e8bbb49444bc797dd33d74dd8 # v5.0.0
with: with:
install-only: true install-only: true
@@ -144,7 +144,7 @@ jobs:
- name: Archive fission dump - name: Archive fission dump
timeout-minutes: 10 timeout-minutes: 10
if: ${{ failure() || cancelled() }} if: ${{ failure() || cancelled() }}
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
with: with:
name: fission-dump-${{ github.run_id }}-${{ matrix.kindversion }} name: fission-dump-${{ github.run_id }}-${{ matrix.kindversion }}
path: fission-dump/*.zip path: fission-dump/*.zip
@@ -153,7 +153,7 @@ jobs:
- name: Archive prometheus dump - name: Archive prometheus dump
timeout-minutes: 10 timeout-minutes: 10
if: ${{ always() }} if: ${{ always() }}
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
with: with:
name: prom-dump-${{ github.run_id }}-${{ matrix.kindversion }} name: prom-dump-${{ github.run_id }}-${{ matrix.kindversion }}
path: /tmp/prometheus/* path: /tmp/prometheus/*
@@ -162,7 +162,7 @@ jobs:
- name: Archive kind logs - name: Archive kind logs
timeout-minutes: 10 timeout-minutes: 10
if: ${{ always() }} if: ${{ always() }}
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
with: with:
name: kind-logs-${{ github.run_id }}-${{ matrix.kindversion }} name: kind-logs-${{ github.run_id }}-${{ matrix.kindversion }}
path: kind-logs/* path: kind-logs/*
@@ -180,27 +180,27 @@ jobs:
os: [ubuntu-latest] os: [ubuntu-latest]
steps: steps:
- name: Checkout sources - name: Checkout sources
uses: actions/checkout@v4 uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: setup go - name: setup go
uses: actions/setup-go@v4 uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0
with: with:
go-version-file: "go.mod" go-version-file: "go.mod"
cache: true cache: true
- name: Checkout sources - name: Checkout sources
uses: actions/checkout@v4 uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with: with:
repository: fission/examples repository: fission/examples
path: examples path: examples
- name: Helm installation - name: Helm installation
uses: Azure/setup-helm@v3 uses: Azure/setup-helm@5119fcb9089d432beecbf79bb2c7915207344b78 # v3.5
with: with:
version: ${{ env.HELM_VERSION }} version: ${{ env.HELM_VERSION }}
- name: Kind Cluster - name: Kind Cluster
uses: helm/kind-action@v1.8.0 uses: helm/kind-action@dda0770415bac9fc20092cacbc54aa298604d140 # v1.8.0
with: with:
node_image: kindest/node:${{ matrix.kindversion }} node_image: kindest/node:${{ matrix.kindversion }}
version: ${{ env.KIND_VERSION }} version: ${{ env.KIND_VERSION }}
@@ -226,7 +226,7 @@ jobs:
skaffold version skaffold version
- name: Install GoReleaser - name: Install GoReleaser
uses: goreleaser/goreleaser-action@v5 uses: goreleaser/goreleaser-action@7ec5c2b0c6cdda6e8bbb49444bc797dd33d74dd8 # v5.0.0
with: with:
install-only: true install-only: true
@@ -289,7 +289,7 @@ jobs:
- name: Archive fission dump - name: Archive fission dump
timeout-minutes: 10 timeout-minutes: 10
if: ${{ failure() || cancelled() }} if: ${{ failure() || cancelled() }}
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
with: with:
name: fission-dump-${{ github.run_id }}-${{ github.job_id }}-${{ matrix.kindversion }} name: fission-dump-${{ github.run_id }}-${{ github.job_id }}-${{ matrix.kindversion }}
path: fission-dump/*.zip path: fission-dump/*.zip
@@ -298,7 +298,7 @@ jobs:
- name: Archive prometheus dump - name: Archive prometheus dump
timeout-minutes: 10 timeout-minutes: 10
if: ${{ always() }} if: ${{ always() }}
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
with: with:
name: prom-dump-${{ github.run_id }}-${{ github.job_id }}-${{ matrix.kindversion }} name: prom-dump-${{ github.run_id }}-${{ github.job_id }}-${{ matrix.kindversion }}
path: /tmp/prometheus/* path: /tmp/prometheus/*
@@ -307,7 +307,7 @@ jobs:
- name: Archive kind logs - name: Archive kind logs
timeout-minutes: 10 timeout-minutes: 10
if: ${{ always() }} if: ${{ always() }}
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
with: with:
name: kind-logs-${{ github.run_id }}-${{ github.job_id }}-${{ matrix.kindversion }} name: kind-logs-${{ github.run_id }}-${{ github.job_id }}-${{ matrix.kindversion }}
path: kind-logs/* path: kind-logs/*
+11 -10
View File
@@ -15,12 +15,12 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Check out code - name: Check out code
uses: actions/checkout@v4 uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Setup go - name: Setup go
uses: actions/setup-go@v4 uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0
with: with:
go-version-file: "go.mod" go-version-file: "go.mod"
cache: true cache: true
@@ -30,12 +30,12 @@ jobs:
run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//} run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
- name: Install GoReleaser - name: Install GoReleaser
uses: goreleaser/goreleaser-action@v5 uses: goreleaser/goreleaser-action@7ec5c2b0c6cdda6e8bbb49444bc797dd33d74dd8 # v5.0.0
with: with:
install-only: true install-only: true
- name: Kind Clutser - name: Kind Clutser
uses: helm/kind-action@v1.8.0 uses: helm/kind-action@dda0770415bac9fc20092cacbc54aa298604d140 # v1.8.0
with: with:
node_image: kindest/node:${{ env.KIND_NODE_IMAGE_TAG }} node_image: kindest/node:${{ env.KIND_NODE_IMAGE_TAG }}
version: ${{ env.KIND_VERSION }} version: ${{ env.KIND_VERSION }}
@@ -43,25 +43,26 @@ jobs:
cluster_name: ${{ env.KIND_CLUSTER_NAME }} cluster_name: ${{ env.KIND_CLUSTER_NAME }}
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v3 uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0
- name: Login to ghcr.io - name: Login to ghcr.io
uses: docker/login-action@v3 uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0
with: with:
registry: ghcr.io registry: ghcr.io
username: ${{ github.repository_owner }} username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to docker.io - name: Login to docker.io
uses: docker/login-action@v3 uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0
with: with:
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Install Cosign - name: Install Cosign
uses: sigstore/cosign-installer@main uses: sigstore/cosign-installer@1fc5bd396d372bee37d608f955b336615edf79c8 # v3.2.0
with: with:
cosign-release: 'v1.12.0' cosign-release: "v2.2.1"
- name: Check cosign install! - name: Check cosign install!
run: cosign version run: cosign version
@@ -78,7 +79,7 @@ jobs:
shell: bash shell: bash
- name: Run GoReleaser - name: Run GoReleaser
uses: goreleaser/goreleaser-action@v5 uses: goreleaser/goreleaser-action@7ec5c2b0c6cdda6e8bbb49444bc797dd33d74dd8 # v5.0.0
with: with:
version: latest version: latest
args: release args: release
+7 -7
View File
@@ -37,28 +37,28 @@ jobs:
os: [ubuntu-latest] os: [ubuntu-latest]
steps: steps:
- name: Checkout action sources - name: Checkout action sources
uses: actions/checkout@v4 uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Setup go - name: Setup go
uses: actions/setup-go@v4 uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0
with: with:
go-version-file: "go.mod" go-version-file: "go.mod"
cache: true cache: true
- name: Setup Helm - name: Setup Helm
uses: Azure/setup-helm@v3 uses: Azure/setup-helm@5119fcb9089d432beecbf79bb2c7915207344b78 # v3.5
with: with:
version: ${{ env.HELM_VERSION }} version: ${{ env.HELM_VERSION }}
- name: Setup Kind Clutser - name: Setup Kind Clutser
uses: helm/kind-action@v1.8.0 uses: helm/kind-action@dda0770415bac9fc20092cacbc54aa298604d140 # v1.8.0
with: with:
node_image: ${{ matrix.kindimage }} node_image: ${{ matrix.kindimage }}
version: ${{ env.KIND_VERSION }} version: ${{ env.KIND_VERSION }}
cluster_name: ${{ env.KIND_CLUSTER_NAME }} cluster_name: ${{ env.KIND_CLUSTER_NAME }}
- name: Install GoReleaser - name: Install GoReleaser
uses: goreleaser/goreleaser-action@v5 uses: goreleaser/goreleaser-action@7ec5c2b0c6cdda6e8bbb49444bc797dd33d74dd8 # v5.0.0
with: with:
install-only: true install-only: true
@@ -105,7 +105,7 @@ jobs:
- name: Archive fission dump - name: Archive fission dump
if: ${{ failure() || cancelled() }} if: ${{ failure() || cancelled() }}
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
with: with:
name: fission-dump-${{ github.run_id }}-${{ matrix.kindversion }} name: fission-dump-${{ github.run_id }}-${{ matrix.kindversion }}
path: fission-dump/*.zip path: fission-dump/*.zip
@@ -113,7 +113,7 @@ jobs:
- name: Archive kind logs - name: Archive kind logs
if: ${{ always() }} if: ${{ always() }}
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
with: with:
name: kind-logs-${{ github.run_id }}-${{ matrix.kindversion }} name: kind-logs-${{ github.run_id }}-${{ matrix.kindversion }}
path: kind-logs/* path: kind-logs/*
+1
View File
@@ -9,6 +9,7 @@ cmd/reporter/reporter
# Logs # Logs
test/logs/ test/logs/
test/e2e/cli/fission-dump/
# Pycharm IDE # Pycharm IDE
.idea .idea
+3 -1
View File
@@ -436,6 +436,7 @@ signs:
- '--output-certificate=${certificate}' - '--output-certificate=${certificate}'
- '--output-signature=${signature}' - '--output-signature=${signature}'
- '${artifact}' - '${artifact}'
- '--yes' # needed for cosign 2.0.0+
# signs our docker image # signs our docker image
# https://goreleaser.com/customization/docker_sign # https://goreleaser.com/customization/docker_sign
@@ -447,4 +448,5 @@ docker_signs:
args: args:
- 'sign' - 'sign'
- '--key=cosign.key' - '--key=cosign.key'
- '${artifact}' - '${artifact}'
- '--yes' # needed for cosign 2.0.0+
+2 -2
View File
@@ -64,7 +64,7 @@ codegen: controller-gen-install
### CRDs ### CRDs
controller-gen-install: controller-gen-install:
go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.13.0 go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.14.0
generate-crds: controller-gen-install generate-crds: controller-gen-install
controller-gen crd \ controller-gen crd \
@@ -99,7 +99,7 @@ generate-cli-docs:
go run tools/cmd-docs/main.go -o "../fission.io/content/en/docs/reference/fission-cli" go run tools/cmd-docs/main.go -o "../fission.io/content/en/docs/reference/fission-cli"
install-crd-ref-docs: install-crd-ref-docs:
go install github.com/elastic/crd-ref-docs@v0.0.9 go install github.com/elastic/crd-ref-docs@v0.0.10
generate-crd-ref-docs: install-crd-ref-docs generate-crd-ref-docs: install-crd-ref-docs
# crd-ref-docs: https://github.com/elastic/crd-ref-docs # crd-ref-docs: https://github.com/elastic/crd-ref-docs
+8 -3
View File
@@ -1,8 +1,9 @@
apiVersion: v2 apiVersion: v2
name: fission-all name: fission-all
version: v1.20.0-rc1 version: v1.20.1
appVersion: v1.20.0-rc1 appVersion: v1.20.1
description: Fission is a fast serverless framework for Kubernetes. description: Fission is a fast serverless framework for Kubernetes.
kubeVersion: ">=1.23.0-0"
home: https://fission.io/ home: https://fission.io/
icon: https://fission.io/images/fission-logo-white.svg icon: https://fission.io/images/fission-logo-white.svg
sources: sources:
@@ -21,4 +22,8 @@ maintainers:
- name: Sanket Sudake - name: Sanket Sudake
email: sanket@infracloud.io email: sanket@infracloud.io
engine: gotpl engine: gotpl
type: application type: application
annotations:
artifacthub.io/signKey: |
fingerprint: 2EAE29FDF8A387050C82CD5ABBDD4FD6A1FFCBF6
url: https://raw.githubusercontent.com/fission/fission-charts/main/public_key/pgp_keys.asc
@@ -50,24 +50,6 @@ rules:
- patch - patch
- delete - delete
{{- end }} {{- end }}
{{- define "kafka-rules" }}
rules:
- apiGroups:
- fission.io
resources:
- environments
- functions
- messagequeuetriggers
- packages
verbs:
- create
- get
- list
- watch
- update
- patch
- delete
{{- end }}
{{- define "keda-rules" }} {{- define "keda-rules" }}
rules: rules:
- apiGroups: - apiGroups:
@@ -71,7 +71,6 @@ rules:
- pods - pods
- services - services
- replicationcontrollers - replicationcontrollers
- events
verbs: verbs:
- create - create
- delete - delete
@@ -79,6 +78,16 @@ rules:
- list - list
- watch - watch
- patch - patch
- apiGroups:
- ""
resources:
- events
verbs:
- create
- get
- list
- watch
- patch
- apiGroups: - apiGroups:
- "" - ""
resources: resources:
@@ -195,54 +204,6 @@ rules:
- list - list
- watch - watch
{{- end }} {{- end }}
{{- define "kafka-kuberules" }}
rules:
- apiGroups:
- ""
resources:
- configmaps
- pods
- secrets
- services
- replicationcontrollers
- events
verbs:
- create
- delete
- get
- list
- watch
- patch
- apiGroups:
- ""
resources:
- configmaps
- secrets
verbs:
- get
- apiGroups:
- apps
resources:
- deployments
- deployments/scale
- replicasets
verbs:
- create
- get
- list
- watch
- update
- patch
- delete
- apiGroups:
- apiextensions.k8s.io
resources:
- customresourcedefinitions
verbs:
- get
- list
- watch
{{- end }}
{{- define "keda-kuberules" }} {{- define "keda-kuberules" }}
rules: rules:
- apiGroups: - apiGroups:
@@ -251,7 +212,6 @@ rules:
- pods - pods
- services - services
- replicationcontrollers - replicationcontrollers
- events
verbs: verbs:
- create - create
- delete - delete
@@ -259,6 +219,16 @@ rules:
- list - list
- watch - watch
- patch - patch
- apiGroups:
- ""
resources:
- events
verbs:
- create
- get
- list
- watch
- patch
- apiGroups: - apiGroups:
- "" - ""
resources: resources:
@@ -26,9 +26,6 @@ metadata:
{{- if eq "kubewatcher" .component }} {{- if eq "kubewatcher" .component }}
{{- include "kubewatcher-kuberules" . }} {{- include "kubewatcher-kuberules" . }}
{{- end }} {{- end }}
{{- if eq "kafka" .component }}
{{- include "kafka-kuberules" . }}
{{- end }}
{{- if eq "keda" .component }} {{- if eq "keda" .component }}
{{- include "keda-kuberules" . }} {{- include "keda-kuberules" . }}
{{- end }} {{- end }}
@@ -20,9 +20,6 @@ metadata:
{{- if eq "kubewatcher" .component }} {{- if eq "kubewatcher" .component }}
{{- include "kubewatcher-rules" . }} {{- include "kubewatcher-rules" . }}
{{- end }} {{- end }}
{{- if eq "kafka" .component }}
{{- include "kafka-rules" . }}
{{- end }}
{{- if eq "keda" .component }} {{- if eq "keda" .component }}
{{- include "keda-rules" . }} {{- include "keda-rules" . }}
{{- end }} {{- end }}
@@ -103,6 +103,13 @@ This template generates the image name for the deployment depending on the value
{{- end }} {{- end }}
{{- end }} {{- end }}
{{- define "kube_client.envs" }}
- name: KUBE_CLIENT_QPS
value: "{{ .Values.kubernetesClientQPS }}"
- name: KUBE_CLIENT_BURST
value: "{{ .Values.kubernetesClientBurst }}"
{{- end}}
{{/* {{/*
Define the svc's name Define the svc's name
*/}} */}}
@@ -56,6 +56,7 @@ spec:
- name: HELM_RELEASE_NAME - name: HELM_RELEASE_NAME
value: {{ .Release.Name | quote }} value: {{ .Release.Name | quote }}
{{- include "fission-resource-namespace.envs" . | indent 8 }} {{- include "fission-resource-namespace.envs" . | indent 8 }}
{{- include "kube_client.envs" . | indent 8 }}
{{- include "opentelemtry.envs" . | indent 8 }} {{- include "opentelemtry.envs" . | indent 8 }}
{{- if .Values.builderPodSpec.enabled }} {{- if .Values.builderPodSpec.enabled }}
volumeMounts: volumeMounts:
@@ -37,7 +37,8 @@ spec:
value: {{ .Values.debugEnv | quote }} value: {{ .Values.debugEnv | quote }}
- name: PPROF_ENABLED - name: PPROF_ENABLED
value: {{ .Values.pprof.enabled | quote }} value: {{ .Values.pprof.enabled | quote }}
{{- include "fission-resource-namespace.envs" . | indent 8 }} {{- include "fission-resource-namespace.envs" . | indent 8 }}
{{- include "kube_client.envs" . | indent 8 }}
- name: POD_NAMESPACE - name: POD_NAMESPACE
valueFrom: valueFrom:
fieldRef: fieldRef:
@@ -78,6 +78,7 @@ spec:
value: {{ .Values.executor.serviceAccountCheck.interval | quote }} value: {{ .Values.executor.serviceAccountCheck.interval | quote }}
{{- end}} {{- end}}
{{- include "fission-resource-namespace.envs" . | indent 8 }} {{- include "fission-resource-namespace.envs" . | indent 8 }}
{{- include "kube_client.envs" . | indent 8 }}
- name: HELM_RELEASE_NAME - name: HELM_RELEASE_NAME
value: {{ .Release.Name | quote }} value: {{ .Release.Name | quote }}
{{- include "opentelemtry.envs" . | indent 8 }} {{- include "opentelemtry.envs" . | indent 8 }}
@@ -29,7 +29,8 @@ spec:
value: {{ .Values.debugEnv | quote }} value: {{ .Values.debugEnv | quote }}
- name: PPROF_ENABLED - name: PPROF_ENABLED
value: {{ .Values.pprof.enabled | quote }} value: {{ .Values.pprof.enabled | quote }}
{{- include "fission-resource-namespace.envs" . | indent 8 }} {{- include "fission-resource-namespace.envs" . | indent 8 }}
{{- include "kube_client.envs" . | indent 8 }}
{{- include "opentelemtry.envs" . | indent 8 }} {{- include "opentelemtry.envs" . | indent 8 }}
resources: resources:
{{- toYaml .Values.kubewatcher.resources | nindent 10 }} {{- toYaml .Values.kubewatcher.resources | nindent 10 }}
@@ -1,108 +0,0 @@
{{- if .Values.kafka.enabled }}
apiVersion: apps/v1
kind: Deployment
metadata:
name: mqtrigger-kafka
labels:
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
svc: mqtrigger
messagequeue: kafka
spec:
replicas: 1
selector:
matchLabels:
svc: mqtrigger
messagequeue: kafka
template:
metadata:
labels:
svc: mqtrigger
messagequeue: kafka
annotations:
prometheus.io/scrape: "true"
prometheus.io/path: "/metrics"
prometheus.io/port: "8080"
spec:
containers:
- name: mqtrigger
image: {{ include "fission-bundleImage" . | quote }}
imagePullPolicy: {{ .Values.pullPolicy }}
command: ["/fission-bundle"]
args: ["--mqt", "--routerUrl", "http://router.{{ .Release.Namespace }}"]
ports:
- containerPort: 8080
name: metrics
env:
- name: MESSAGE_QUEUE_TYPE
value: kafka
- name: MESSAGE_QUEUE_URL
value: "{{.Values.kafka.brokers}}"
- name: MESSAGE_QUEUE_KAFKA_VERSION
value: "{{.Values.kafka.version}}"
- name: DEBUG_ENV
value: {{ .Values.debugEnv | quote }}
- name: PPROF_ENABLED
value: {{ .Values.pprof.enabled | quote }}
{{- include "fission-resource-namespace.envs" . | indent 8 }}
{{- include "opentelemtry.envs" . | indent 8 }}
# TLS authentication is TLS with authentication (2 way)
# More info: https://docs.confluent.io/current/kafka/authentication_ssl.html#ssl-overview
{{- if .Values.kafka.authentication.tls.enabled }}
- name: TLS_ENABLED
value: "true"
- name: MESSAGE_QUEUE_SECRETS
value: /etc/fission/secrets
- name: INSECURE_SKIP_VERIFY
value: "{{ .Values.kafka.authentication.tls.insecureSkipVerify }}"
volumeMounts:
- name: kafka-secrets
mountPath: /etc/fission/secrets
{{- end }}
{{- if .Values.terminationMessagePath }}
terminationMessagePath: {{ .Values.terminationMessagePath }}
{{- end }}
{{- if .Values.terminationMessagePolicy }}
terminationMessagePolicy: {{ .Values.terminationMessagePolicy }}
{{- end }}
serviceAccountName: fission-kafka
{{- if .Values.kafka.authentication.tls.enabled }}
volumes:
- name: kafka-secrets
secret:
secretName: mqtrigger-kafka-secrets
{{- end }}
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
---
{{- if .Values.kafka.authentication.tls.enabled }}
apiVersion: v1
kind: Secret
metadata:
name: mqtrigger-kafka-secrets
labels:
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
data:
{{- if .Files.Get (printf "%s" .Values.kafka.authentication.tls.caCert) }}
caCert: {{ .Files.Get (printf "%s" .Values.kafka.authentication.tls.caCert) | b64enc }}
{{- else }}
{{ fail "Invalid chart. CA Certificate not found." }}
{{- end }}
{{- if .Files.Get (printf "%s" .Values.kafka.authentication.tls.userCert) }}
userCert: {{ .Files.Get (printf "%s" .Values.kafka.authentication.tls.userCert) | b64enc }}
{{- else }}
{{ fail "Invalid chart. User Certificate not found." }}
{{- end }}
{{- if .Files.Get (printf "%s" .Values.kafka.authentication.tls.userKey) }}
userKey: {{ .Files.Get (printf "%s" .Values.kafka.authentication.tls.userKey) | b64enc }}
{{- else }}
{{ fail "Invalid chart. User Key not found." }}
{{- end }}
{{- end }}
{{- if .Values.extraCoreComponentPodConfig }}
{{ toYaml .Values.extraCoreComponentPodConfig | indent 6 -}}
{{- end }}
{{- end }}
@@ -1,23 +0,0 @@
{{- if .Values.podMonitor.enabled }}
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: mqt-fission-kafka-monitor
{{- if .Values.podMonitor.namespace }}
namespace: {{ .Values.podMonitor.namespace }}
{{- end }}
{{- with .Values.podMonitor.additionalPodMonitorLabels }}
labels:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
namespaceSelector:
matchNames:
- {{ .Release.Namespace }}
selector:
matchLabels:
svc: mqtrigger
podMetricsEndpoints:
- port: "metrics"
path: "/metrics"
{{- end -}}
@@ -1,7 +0,0 @@
{{- include "fission-role-generator" (merge (dict "namespace" .Values.defaultNamespace "component" "kafka") .) }}
{{- if gt (len .Values.additionalFissionNamespaces) 0 }}
{{- range $namespace := $.Values.additionalFissionNamespaces }}
{{ include "fission-role-generator" (merge (dict "namespace" $namespace "component" "kafka") $) }}
{{- end }}
{{- end }}
@@ -1,7 +0,0 @@
{{- include "kubernetes-role-generator" (merge (dict "namespace" .Values.defaultNamespace "component" "kafka") .) }}
{{- if gt (len .Values.additionalFissionNamespaces) 0 }}
{{- range $namespace := $.Values.additionalFissionNamespaces }}
{{ include "kubernetes-role-generator" (merge (dict "namespace" $namespace "component" "kafka") $) }}
{{- end }}
{{- end }}
@@ -1,5 +0,0 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: fission-kafka
namespace: {{ .Release.Namespace }}
@@ -47,6 +47,7 @@ spec:
- name: REDIS_IMAGE - name: REDIS_IMAGE
value: "{{ .Values.mqt_keda.connector_images.redis.image }}:{{ .Values.mqt_keda.connector_images.redis.tag }}" value: "{{ .Values.mqt_keda.connector_images.redis.image }}:{{ .Values.mqt_keda.connector_images.redis.tag }}"
{{- include "fission-resource-namespace.envs" . | indent 8 }} {{- include "fission-resource-namespace.envs" . | indent 8 }}
{{- include "kube_client.envs" . | indent 8 }}
{{- include "opentelemtry.envs" . | indent 8 }} {{- include "opentelemtry.envs" . | indent 8 }}
resources: resources:
{{- toYaml .Values.mqt_keda.resources | nindent 10 }} {{- toYaml .Values.mqt_keda.resources | nindent 10 }}
@@ -37,6 +37,7 @@ spec:
command: [ "/pre-upgrade-checks" ] command: [ "/pre-upgrade-checks" ]
env: env:
{{- include "fission-resource-namespace.envs" . | indent 8 }} {{- include "fission-resource-namespace.envs" . | indent 8 }}
{{- include "kube_client.envs" . | indent 8 }}
{{- if .Values.terminationMessagePath }} {{- if .Values.terminationMessagePath }}
terminationMessagePath: {{ .Values.terminationMessagePath }} terminationMessagePath: {{ .Values.terminationMessagePath }}
{{- end }} {{- end }}
@@ -83,7 +83,8 @@ spec:
value: {{ .Values.pprof.enabled | quote }} value: {{ .Values.pprof.enabled | quote }}
- name: DISPLAY_ACCESS_LOG - name: DISPLAY_ACCESS_LOG
value: {{ .Values.router.displayAccessLog | default false | quote }} value: {{ .Values.router.displayAccessLog | default false | quote }}
{{- include "fission-resource-namespace.envs" . | indent 8 }} {{- include "fission-resource-namespace.envs" . | indent 8 }}
{{- include "kube_client.envs" . | indent 8 }}
{{- include "opentelemtry.envs" . | indent 8 }} {{- include "opentelemtry.envs" . | indent 8 }}
resources: resources:
{{- toYaml .Values.router.resources | nindent 10 }} {{- toYaml .Values.router.resources | nindent 10 }}
@@ -10,5 +10,5 @@ metadata:
data: data:
username: {{ .Values.authentication.authUsername | b64enc | quote }} username: {{ .Values.authentication.authUsername | b64enc | quote }}
password: {{ randAlphaNum 20 | b64enc | quote }} password: {{ randAlphaNum 20 | b64enc | quote }}
jwtSigningKey: {{ .Values.authentication.jwtSigningKey | b64enc | quote }} jwtSigningKey: {{ default (randAlphaNum 20) .Values.authentication.jwtSigningKey | b64enc | quote }}
{{- end }} {{- end }}
@@ -61,6 +61,7 @@ spec:
value: {{ .Values.persistence.s3.region }} value: {{ .Values.persistence.s3.region }}
{{- end }} {{- end }}
{{- include "fission-resource-namespace.envs" . | indent 8 }} {{- include "fission-resource-namespace.envs" . | indent 8 }}
{{- include "kube_client.envs" . | indent 8 }}
{{- include "opentelemtry.envs" . | indent 8 }} {{- include "opentelemtry.envs" . | indent 8 }}
resources: resources:
{{- toYaml .Values.storagesvc.resources | nindent 10 }} {{- toYaml .Values.storagesvc.resources | nindent 10 }}
@@ -30,6 +30,7 @@ spec:
- name: PPROF_ENABLED - name: PPROF_ENABLED
value: {{ .Values.pprof.enabled | quote }} value: {{ .Values.pprof.enabled | quote }}
{{- include "fission-resource-namespace.envs" . | indent 8 }} {{- include "fission-resource-namespace.envs" . | indent 8 }}
{{- include "kube_client.envs" . | indent 8 }}
{{- include "opentelemtry.envs" . | indent 8 }} {{- include "opentelemtry.envs" . | indent 8 }}
resources: resources:
{{- toYaml .Values.timer.resources | nindent 10 }} {{- toYaml .Values.timer.resources | nindent 10 }}
+30 -65
View File
@@ -25,7 +25,7 @@ image: fission/fission-bundle
## It is also used by the chart to identify version of the few more images apart from fission-bundle. ## It is also used by the chart to identify version of the few more images apart from fission-bundle.
## Keep it empty for using latest tag. ## Keep it empty for using latest tag.
## ##
imageTag: v1.20.0-rc1 imageTag: v1.20.0
## pullPolicy represents the pull policy to use for images in the chart. ## pullPolicy represents the pull policy to use for images in the chart.
## ##
@@ -92,6 +92,13 @@ createNamespace: true
## ##
enableIstio: false enableIstio: false
## Kubernetes client QPS and Burst settings
##
## kubernetesClientQPS represents the maximum queries per second to the kubernetes api server from client instances of fission components.
kubernetesClientQPS: 200
## kubernetesClientBurst represents the maximum burst queries to the kubernetes api server from client instances of fission components.
kubernetesClientBurst: 500
## fetcher is a light weight component that helps in running functions. ## fetcher is a light weight component that helps in running functions.
## fetcher helps in fetching function source code/build and uploading it when function is invoked. ## fetcher helps in fetching function source code/build and uploading it when function is invoked.
## ##
@@ -99,7 +106,7 @@ fetcher:
## image represents the image of the fetcher component. ## image represents the image of the fetcher component.
image: fission/fetcher image: fission/fetcher
## imageTag represents the tag of the image of the fetcher component. ## imageTag represents the tag of the image of the fetcher component.
imageTag: v1.20.0-rc1 imageTag: v1.20.0
## Fetcher is only for to downloading or uploading archive. ## Fetcher is only for to downloading or uploading archive.
## Normally, you don't need to change the value here, unless necessary. ## Normally, you don't need to change the value here, unless necessary.
@@ -459,48 +466,6 @@ timer:
runAsUser: 10001 runAsUser: 10001
runAsGroup: 10001 runAsGroup: 10001
## Kafka: enable and configure the details
##
kafka:
enabled: false
## note: below link is only for reference.
## Please use the brokers link for your kafka here.
##
brokers: "broker.kafka:9092" # or your-bootstrap-server.kafka:9092/9093
## Sample config for authentication
## authentication:
## tls:
## enabled: true
## caCert: 'auth/kafka/ca.crt'
## userCert: 'auth/kafka/user.crt'
## userKey: 'auth/kafka/user.key'
##
authentication:
tls:
enabled: false
## InsecureSkipVerify controls whether a client verifies the server's certificate chain and host name.
## Warning: Setting this to true, makes TLS susceptible to man-in-the-middle attacks
##
insecureSkipVerify: false
## path to certificate containing public key of CA authority
##
caCert: ""
## path to certificate containing public key of the user signed by CA authority
##
userCert: ""
## path to private key of the user
##
userKey: ""
## version of Kafka broker
## For 0.x it must be a string in the format
## "major.minor.veryMinor.patch" example: 0.8.2.0
## For 1.x it must be a string in the format
## "major.major.veryMinor" example: 2.0.1
## Should be >= 0.11.2.0 to enable Kafka record headers support
##
# version: "0.11.2.0"
# The following components expose Prometheus metrics and have servicemonitors in this chart (disabled by default) # The following components expose Prometheus metrics and have servicemonitors in this chart (disabled by default)
# router, executor, storage svc # router, executor, storage svc
serviceMonitor: serviceMonitor:
@@ -656,7 +621,7 @@ preUpgradeChecks:
image: fission/pre-upgrade-checks image: fission/pre-upgrade-checks
## pre-install/pre-upgrade checks image version ## pre-install/pre-upgrade checks image version
## ##
imageTag: v1.20.0-rc1 imageTag: v1.20.0
## Fission post-install/post-upgrade reporting live in this image ## Fission post-install/post-upgrade reporting live in this image
## ##
@@ -724,7 +689,7 @@ authentication:
## jwtSigningKey is the signing key used for ## jwtSigningKey is the signing key used for
## signing the JWT token ## signing the JWT token
## ##
jwtSigningKey: serverless jwtSigningKey:
## jwtExpiryTime is the JWT expiry time ## jwtExpiryTime is the JWT expiry time
## in seconds ## in seconds
## default '120' ## default '120'
@@ -787,29 +752,29 @@ mqt_keda:
enabled: true enabled: true
connector_images: connector_images:
kafka: kafka:
image: fission/keda-kafka-http-connector image: ghcr.io/fission/keda-kafka-http-connector
tag: v0.12
rabbitmq:
image: fission/keda-rabbitmq-http-connector
tag: v0.10
awskinesis:
image: fission/keda-aws-kinesis-http-connector
tag: v0.10
aws_sqs:
image: fission/keda-aws-sqs-http-connector
tag: v0.11
nats_steaming:
image: fission/keda-nats-streaming-http-connector
tag: v0.13 tag: v0.13
rabbitmq:
image: ghcr.io/fission/keda-rabbitmq-http-connector
tag: v0.11
awskinesis:
image: ghcr.io/fission/keda-aws-kinesis-http-connector
tag: v0.11
aws_sqs:
image: ghcr.io/fission/keda-aws-sqs-http-connector
tag: v0.12
nats_steaming:
image: ghcr.io/fission/keda-nats-streaming-http-connector
tag: v0.14
nats_jetstream: nats_jetstream:
image: fission/keda-nats-jetstream-http-connector image: ghcr.io/fission/keda-nats-jetstream-http-connector
tag: v0.4 tag: v0.5
gcp_pubsub: gcp_pubsub:
image: fission/keda-gcp-pubsub-http-connector image: ghcr.io/fission/keda-gcp-pubsub-http-connector
tag: v0.6 tag: v0.7
redis: redis:
image: fission/keda-redis-http-connector image: ghcr.io/fission/keda-redis-http-connector
tag: v0.3 tag: v0.4
## Pod resources as: ## Pod resources as:
## resources: ## resources:
+1 -2
View File
@@ -1,4 +1,3 @@
FROM alpine:3.18 FROM cgr.dev/chainguard/static:latest
RUN apk add --update ca-certificates
COPY builder /builder COPY builder /builder
ENTRYPOINT ["/builder"] ENTRYPOINT ["/builder"]
+3 -2
View File
@@ -24,10 +24,11 @@ import (
builder "github.com/fission/fission/pkg/builder" builder "github.com/fission/fission/pkg/builder"
"github.com/fission/fission/pkg/utils/httpserver" "github.com/fission/fission/pkg/utils/httpserver"
"github.com/fission/fission/pkg/utils/manager"
) )
// Usage: builder <shared volume path> // Usage: builder <shared volume path>
func Run(ctx context.Context, logger *zap.Logger, shareVolume string) { func Run(ctx context.Context, logger *zap.Logger, mgr manager.Interface, shareVolume string) {
builder := builder.MakeBuilder(logger, shareVolume) builder := builder.MakeBuilder(logger, shareVolume)
mux := http.NewServeMux() mux := http.NewServeMux()
mux.HandleFunc("/", builder.Handler) mux.HandleFunc("/", builder.Handler)
@@ -35,5 +36,5 @@ func Run(ctx context.Context, logger *zap.Logger, shareVolume string) {
mux.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) { mux.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK) w.WriteHeader(http.StatusOK)
}) })
httpserver.StartServer(ctx, logger, "builder", "8001", mux) httpserver.StartServer(ctx, logger, mgr, "builder", "8001", mux)
} }
+8 -2
View File
@@ -24,15 +24,21 @@ import (
"github.com/fission/fission/cmd/builder/app" "github.com/fission/fission/cmd/builder/app"
"github.com/fission/fission/pkg/utils/loggerfactory" "github.com/fission/fission/pkg/utils/loggerfactory"
"github.com/fission/fission/pkg/utils/manager"
"github.com/fission/fission/pkg/utils/profile" "github.com/fission/fission/pkg/utils/profile"
) )
// Usage: builder <shared volume path> // Usage: builder <shared volume path>
func main() { func main() {
mgr := manager.New()
defer mgr.Wait()
logger := loggerfactory.GetLogger() logger := loggerfactory.GetLogger()
defer logger.Sync() defer logger.Sync()
ctx := signals.SetupSignalHandler() ctx := signals.SetupSignalHandler()
profile.ProfileIfEnabled(ctx, logger) profile.ProfileIfEnabled(ctx, logger, mgr)
shareVolume := os.Args[1] shareVolume := os.Args[1]
if _, err := os.Stat(shareVolume); err != nil { if _, err := os.Stat(shareVolume); err != nil {
if os.IsNotExist(err) { if os.IsNotExist(err) {
@@ -42,5 +48,5 @@ func main() {
} }
} }
} }
app.Run(ctx, logger, shareVolume) app.Run(ctx, logger, mgr, shareVolume)
} }
+1 -2
View File
@@ -1,4 +1,3 @@
FROM alpine:3.18 FROM cgr.dev/chainguard/static:latest
RUN apk add --update ca-certificates
COPY fetcher / COPY fetcher /
ENTRYPOINT ["/fetcher"] ENTRYPOINT ["/fetcher"]
+6 -5
View File
@@ -31,6 +31,7 @@ import (
"github.com/fission/fission/pkg/crd" "github.com/fission/fission/pkg/crd"
"github.com/fission/fission/pkg/fetcher" "github.com/fission/fission/pkg/fetcher"
"github.com/fission/fission/pkg/utils/httpserver" "github.com/fission/fission/pkg/utils/httpserver"
"github.com/fission/fission/pkg/utils/manager"
otelUtils "github.com/fission/fission/pkg/utils/otel" otelUtils "github.com/fission/fission/pkg/utils/otel"
) )
@@ -38,7 +39,7 @@ var (
readyToServe uint32 readyToServe uint32
) )
func Run(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger) { func Run(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, mgr manager.Interface, port string, podInfoMountDir string) {
flag.Usage = fetcherUsage flag.Usage = fetcherUsage
specializeOnStart := flag.Bool("specialize-on-startup", false, "Flag to activate specialize process at pod startup") specializeOnStart := flag.Bool("specialize-on-startup", false, "Flag to activate specialize process at pod startup")
specializePayload := flag.String("specialize-request", "", "JSON payload for specialize request") specializePayload := flag.String("specialize-request", "", "JSON payload for specialize request")
@@ -73,13 +74,13 @@ func Run(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *za
ctx, span := tracer.Start(ctx, "fetcher/Run") ctx, span := tracer.Start(ctx, "fetcher/Run")
defer span.End() defer span.End()
f, err := fetcher.MakeFetcher(logger, clientGen, dir, *secretDir, *configDir) f, err := fetcher.MakeFetcher(logger, clientGen, dir, *secretDir, *configDir, podInfoMountDir)
if err != nil { if err != nil {
logger.Fatal("error making fetcher", zap.Error(err)) logger.Fatal("error making fetcher", zap.Error(err))
} }
// do specialization in other goroutine to prevent blocking in newdeploy // do specialization in other goroutine to prevent blocking in newdeploy
go func() { mgr.Add(ctx, func(_ context.Context) {
if *specializeOnStart { if *specializeOnStart {
var specializeReq fetcher.FunctionSpecializeRequest var specializeReq fetcher.FunctionSpecializeRequest
@@ -94,7 +95,7 @@ func Run(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *za
} }
} }
atomic.StoreUint32(&readyToServe, 1) atomic.StoreUint32(&readyToServe, 1)
}() })
mux := http.NewServeMux() mux := http.NewServeMux()
mux.HandleFunc("/fetch", f.FetchHandler) mux.HandleFunc("/fetch", f.FetchHandler)
@@ -120,7 +121,7 @@ func Run(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *za
logger.Info("fetcher ready to receive requests") logger.Info("fetcher ready to receive requests")
handler := otelUtils.GetHandlerWithOTEL(mux, "fission-fetcher", otelUtils.UrlsToIgnore("/healthz", "/readiness-healthz")) handler := otelUtils.GetHandlerWithOTEL(mux, "fission-fetcher", otelUtils.UrlsToIgnore("/healthz", "/readiness-healthz"))
httpserver.StartServer(ctx, logger, "fetcher", "8000", handler) httpserver.StartServer(ctx, logger, mgr, "fetcher", port, handler)
} }
func fetcherUsage() { func fetcherUsage() {
+11 -2
View File
@@ -20,17 +20,26 @@ import (
"sigs.k8s.io/controller-runtime/pkg/manager/signals" "sigs.k8s.io/controller-runtime/pkg/manager/signals"
"github.com/fission/fission/cmd/fetcher/app" "github.com/fission/fission/cmd/fetcher/app"
fv1 "github.com/fission/fission/pkg/apis/core/v1"
"github.com/fission/fission/pkg/crd" "github.com/fission/fission/pkg/crd"
"github.com/fission/fission/pkg/utils/loggerfactory" "github.com/fission/fission/pkg/utils/loggerfactory"
"github.com/fission/fission/pkg/utils/manager"
"github.com/fission/fission/pkg/utils/profile" "github.com/fission/fission/pkg/utils/profile"
) )
const fetcherPort = "8000"
// Usage: fetcher <shared volume path> // Usage: fetcher <shared volume path>
func main() { func main() {
mgr := manager.New()
defer mgr.Wait()
logger := loggerfactory.GetLogger() logger := loggerfactory.GetLogger()
defer logger.Sync() defer logger.Sync()
ctx := signals.SetupSignalHandler() ctx := signals.SetupSignalHandler()
profile.ProfileIfEnabled(ctx, logger) profile.ProfileIfEnabled(ctx, logger, mgr)
app.Run(ctx, crd.NewClientGenerator(), logger)
app.Run(ctx, crd.NewClientGenerator(), logger, mgr, fetcherPort, fv1.PodInfoMount)
} }
+1 -2
View File
@@ -1,4 +1,3 @@
FROM alpine:3.18 FROM cgr.dev/chainguard/static:latest
RUN apk add --update ca-certificates
COPY fission-bundle / COPY fission-bundle /
ENTRYPOINT ["/fission-bundle"] ENTRYPOINT ["/fission-bundle"]
+36 -45
View File
@@ -26,12 +26,13 @@ import (
docopt "github.com/docopt/docopt-go" docopt "github.com/docopt/docopt-go"
"go.uber.org/zap" "go.uber.org/zap"
"sigs.k8s.io/controller-runtime/pkg/manager/signals" "sigs.k8s.io/controller-runtime/pkg/manager/signals"
cnwebhook "sigs.k8s.io/controller-runtime/pkg/webhook"
"github.com/fission/fission/cmd/fission-bundle/mqtrigger"
"github.com/fission/fission/pkg/buildermgr" "github.com/fission/fission/pkg/buildermgr"
"github.com/fission/fission/pkg/canaryconfigmgr" "github.com/fission/fission/pkg/canaryconfigmgr"
"github.com/fission/fission/pkg/crd" "github.com/fission/fission/pkg/crd"
"github.com/fission/fission/pkg/executor" "github.com/fission/fission/pkg/executor"
eclient "github.com/fission/fission/pkg/executor/client"
"github.com/fission/fission/pkg/info" "github.com/fission/fission/pkg/info"
"github.com/fission/fission/pkg/kubewatcher" "github.com/fission/fission/pkg/kubewatcher"
functionLogger "github.com/fission/fission/pkg/logger" functionLogger "github.com/fission/fission/pkg/logger"
@@ -40,51 +41,50 @@ import (
"github.com/fission/fission/pkg/storagesvc" "github.com/fission/fission/pkg/storagesvc"
"github.com/fission/fission/pkg/timer" "github.com/fission/fission/pkg/timer"
"github.com/fission/fission/pkg/utils/loggerfactory" "github.com/fission/fission/pkg/utils/loggerfactory"
"github.com/fission/fission/pkg/utils/manager"
"github.com/fission/fission/pkg/utils/otel" "github.com/fission/fission/pkg/utils/otel"
"github.com/fission/fission/pkg/utils/profile" "github.com/fission/fission/pkg/utils/profile"
"github.com/fission/fission/pkg/webhook" "github.com/fission/fission/pkg/webhook"
) )
// runWebhook starts admission webhook server // runWebhook starts admission webhook server
func runWebhook(ctx context.Context, logger *zap.Logger, port int) error { func runWebhook(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, port int) error {
return webhook.Start(ctx, logger, port) return webhook.Start(ctx, clientGen, logger, cnwebhook.Options{
Port: port,
})
} }
func runCanaryConfigServer(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger) error { func runCanaryConfigServer(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, mgr manager.Interface) error {
return canaryconfigmgr.StartCanaryServer(ctx, clientGen, logger, false) return canaryconfigmgr.StartCanaryServer(ctx, clientGen, logger, mgr, false)
} }
func runRouter(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, port int, executorUrl string) error { func runRouter(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, mgr manager.Interface, port int, executorUrl string) error {
return router.Start(ctx, clientGen, logger, port, executorUrl) return router.Start(ctx, clientGen, logger, mgr, port, eclient.MakeClient(logger, executorUrl))
} }
func runExecutor(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, port int) error { func runExecutor(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, mgr manager.Interface, port int) error {
return executor.StartExecutor(ctx, clientGen, logger, port) return executor.StartExecutor(ctx, clientGen, logger, mgr, port)
} }
func runKubeWatcher(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, routerUrl string) error { func runKubeWatcher(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, mgr manager.Interface, routerUrl string) error {
return kubewatcher.Start(ctx, clientGen, logger, routerUrl) return kubewatcher.Start(ctx, clientGen, logger, mgr, routerUrl)
} }
func runTimer(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, routerUrl string) error { func runTimer(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, mgr manager.Interface, routerUrl string) error {
return timer.Start(ctx, clientGen, logger, routerUrl) return timer.Start(ctx, clientGen, logger, mgr, routerUrl)
}
func runMessageQueueMgr(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, routerUrl string) error {
return mqtrigger.Start(ctx, clientGen, logger, routerUrl)
} }
// KEDA based MessageQueue Trigger Manager // KEDA based MessageQueue Trigger Manager
func runMQManager(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, routerURL string) error { func runMQManager(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, mgr manager.Interface, routerURL string) error {
return mqt.StartScalerManager(ctx, clientGen, logger, routerURL) return mqt.StartScalerManager(ctx, clientGen, logger, mgr, routerURL)
} }
func runStorageSvc(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, port int, storage storagesvc.Storage) error { func runStorageSvc(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, mgr manager.Interface, port int, storage storagesvc.Storage) error {
return storagesvc.Start(ctx, clientGen, logger, storage, port) return storagesvc.Start(ctx, clientGen, logger, storage, mgr, port)
} }
func runBuilderMgr(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, storageSvcUrl string) error { func runBuilderMgr(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, mgr manager.Interface, storageSvcUrl string) error {
return buildermgr.Start(ctx, clientGen, logger, storageSvcUrl) return buildermgr.Start(ctx, clientGen, logger, mgr, storageSvcUrl)
} }
func runLogger(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger) error { func runLogger(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger) error {
@@ -119,8 +119,6 @@ func getServiceName(arguments map[string]interface{}) string {
serviceName = "Fission-KubeWatcher" serviceName = "Fission-KubeWatcher"
} else if arguments["--timer"] == true { } else if arguments["--timer"] == true {
serviceName = "Fission-Timer" serviceName = "Fission-Timer"
} else if arguments["--mqt"] == true {
serviceName = "Fission-MessageQueueTrigger"
} else if arguments["--builderMgr"] == true { } else if arguments["--builderMgr"] == true {
serviceName = "Fission-BuilderMgr" serviceName = "Fission-BuilderMgr"
} else if arguments["--storageServicePort"] != nil { } else if arguments["--storageServicePort"] != nil {
@@ -139,6 +137,9 @@ func exitWithSync(logger *zap.Logger) {
} }
func main() { func main() {
mgr := manager.New()
defer mgr.Wait()
var err error var err error
// From https://github.com/containous/traefik/pull/1817/files // From https://github.com/containous/traefik/pull/1817/files
@@ -177,7 +178,6 @@ Usage:
fission-bundle --storageServicePort=<port> --storageType=<storateType> fission-bundle --storageServicePort=<port> --storageType=<storateType>
fission-bundle --builderMgr [--storageSvcUrl=<url>] [--envbuilder-namespace=<namespace>] fission-bundle --builderMgr [--storageSvcUrl=<url>] [--envbuilder-namespace=<namespace>]
fission-bundle --timer [--routerUrl=<url>] fission-bundle --timer [--routerUrl=<url>]
fission-bundle --mqt [--routerUrl=<url>]
fission-bundle --mqt_keda [--routerUrl=<url>] fission-bundle --mqt_keda [--routerUrl=<url>]
fission-bundle --webhookPort=<port> fission-bundle --webhookPort=<port>
fission-bundle --logger fission-bundle --logger
@@ -196,7 +196,6 @@ Options:
--namespace=<namespace> Kubernetes namespace in which to run function containers. Defaults to 'fission-function'. --namespace=<namespace> Kubernetes namespace in which to run function containers. Defaults to 'fission-function'.
--kubewatcher Start Kubernetes events watcher. --kubewatcher Start Kubernetes events watcher.
--timer Start Timer. --timer Start Timer.
--mqt Start message queue trigger.
--mqt_keda Start message queue trigger of kind KEDA --mqt_keda Start message queue trigger of kind KEDA
--builderMgr Start builder manager. --builderMgr Start builder manager.
--version Print version information --version Print version information
@@ -205,7 +204,7 @@ Options:
defer exitWithSync(logger) defer exitWithSync(logger)
ctx := signals.SetupSignalHandler() ctx := signals.SetupSignalHandler()
profile.ProfileIfEnabled(ctx, logger) profile.ProfileIfEnabled(ctx, logger, mgr)
version := fmt.Sprintf("Fission Bundle Version: %s", info.BuildInfo().String()) version := fmt.Sprintf("Fission Bundle Version: %s", info.BuildInfo().String())
arguments, err := docopt.ParseArgs(usage, nil, version) arguments, err := docopt.ParseArgs(usage, nil, version)
@@ -230,13 +229,13 @@ Options:
if arguments["--webhookPort"] != nil { if arguments["--webhookPort"] != nil {
port := getPort(logger, arguments["--webhookPort"]) port := getPort(logger, arguments["--webhookPort"])
err = runWebhook(ctx, logger, port) err = runWebhook(ctx, clientGen, logger, port)
logger.Error("webhook server exited:", zap.Error(err)) logger.Error("webhook server exited:", zap.Error(err))
return return
} }
if arguments["--canaryConfig"] == true { if arguments["--canaryConfig"] == true {
err := runCanaryConfigServer(ctx, clientGen, logger) err := runCanaryConfigServer(ctx, clientGen, logger, mgr)
if err != nil { if err != nil {
logger.Error("canary config server exited with error: ", zap.Error(err)) logger.Error("canary config server exited with error: ", zap.Error(err))
return return
@@ -245,7 +244,7 @@ Options:
if arguments["--routerPort"] != nil { if arguments["--routerPort"] != nil {
port := getPort(logger, arguments["--routerPort"]) port := getPort(logger, arguments["--routerPort"])
err = runRouter(ctx, clientGen, logger, port, executorUrl) err = runRouter(ctx, clientGen, logger, mgr, port, executorUrl)
if err != nil { if err != nil {
logger.Error("router exited", zap.Error(err)) logger.Error("router exited", zap.Error(err))
return return
@@ -254,7 +253,7 @@ Options:
if arguments["--executorPort"] != nil { if arguments["--executorPort"] != nil {
port := getPort(logger, arguments["--executorPort"]) port := getPort(logger, arguments["--executorPort"])
err = runExecutor(ctx, clientGen, logger, port) err = runExecutor(ctx, clientGen, logger, mgr, port)
if err != nil { if err != nil {
logger.Error("executor exited", zap.Error(err)) logger.Error("executor exited", zap.Error(err))
return return
@@ -262,7 +261,7 @@ Options:
} }
if arguments["--kubewatcher"] == true { if arguments["--kubewatcher"] == true {
err = runKubeWatcher(ctx, clientGen, logger, routerUrl) err = runKubeWatcher(ctx, clientGen, logger, mgr, routerUrl)
if err != nil { if err != nil {
logger.Error("kubewatcher exited", zap.Error(err)) logger.Error("kubewatcher exited", zap.Error(err))
return return
@@ -270,23 +269,15 @@ Options:
} }
if arguments["--timer"] == true { if arguments["--timer"] == true {
err = runTimer(ctx, clientGen, logger, routerUrl) err = runTimer(ctx, clientGen, logger, mgr, routerUrl)
if err != nil { if err != nil {
logger.Error("timer exited", zap.Error(err)) logger.Error("timer exited", zap.Error(err))
return return
} }
} }
if arguments["--mqt"] == true {
err = runMessageQueueMgr(ctx, clientGen, logger, routerUrl)
if err != nil {
logger.Error("message queue manager exited", zap.Error(err))
return
}
}
if arguments["--mqt_keda"] == true { if arguments["--mqt_keda"] == true {
err = runMQManager(ctx, clientGen, logger, routerUrl) err = runMQManager(ctx, clientGen, logger, mgr, routerUrl)
if err != nil { if err != nil {
logger.Error("mqt scaler manager exited", zap.Error(err)) logger.Error("mqt scaler manager exited", zap.Error(err))
return return
@@ -294,7 +285,7 @@ Options:
} }
if arguments["--builderMgr"] == true { if arguments["--builderMgr"] == true {
err = runBuilderMgr(ctx, clientGen, logger, storageSvcUrl) err = runBuilderMgr(ctx, clientGen, logger, mgr, storageSvcUrl)
if err != nil { if err != nil {
logger.Error("builder manager exited", zap.Error(err)) logger.Error("builder manager exited", zap.Error(err))
return return
@@ -319,7 +310,7 @@ Options:
} else if arguments["--storageType"] == string(storagesvc.StorageTypeLocal) { } else if arguments["--storageType"] == string(storagesvc.StorageTypeLocal) {
storage = storagesvc.NewLocalStorage("/fission") storage = storagesvc.NewLocalStorage("/fission")
} }
err := runStorageSvc(ctx, clientGen, logger, port, storage) err := runStorageSvc(ctx, clientGen, logger, mgr, port, storage)
if err != nil { if err != nil {
logger.Error("storage service exited", zap.Error(err)) logger.Error("storage service exited", zap.Error(err))
return return
-114
View File
@@ -1,114 +0,0 @@
/*
Copyright 2016 The Fission Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package mqtrigger
import (
"context"
"fmt"
"os"
"path"
"strings"
"github.com/pkg/errors"
"go.uber.org/zap"
fv1 "github.com/fission/fission/pkg/apis/core/v1"
"github.com/fission/fission/pkg/crd"
"github.com/fission/fission/pkg/mqtrigger"
"github.com/fission/fission/pkg/mqtrigger/factory"
"github.com/fission/fission/pkg/mqtrigger/messageQueue"
_ "github.com/fission/fission/pkg/mqtrigger/messageQueue/kafka"
)
func Start(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, routerUrl string) error {
fissionClient, err := clientGen.GetFissionClient()
if err != nil {
return errors.Wrap(err, "failed to get fission client")
}
err = crd.WaitForCRDs(ctx, logger, fissionClient)
if err != nil {
return errors.Wrap(err, "error waiting for CRDs")
}
mqType := (fv1.MessageQueueType)(os.Getenv("MESSAGE_QUEUE_TYPE"))
mqUrl := os.Getenv("MESSAGE_QUEUE_URL")
secretsPath := strings.TrimSpace(os.Getenv("MESSAGE_QUEUE_SECRETS"))
var secrets map[string][]byte
if len(secretsPath) > 0 {
// For authentication with message queue
secrets, err = readSecrets(logger, secretsPath)
if err != nil {
return err
}
}
mq, err := factory.Create(
logger,
mqType,
messageQueue.Config{
MQType: (string)(mqType),
Url: mqUrl,
Secrets: secrets,
},
routerUrl,
)
if err != nil {
logger.Fatal("failed to connect to remote message queue server", zap.Error(err))
}
mqtMgr := mqtrigger.MakeMessageQueueTriggerManager(logger, fissionClient, mqType, mq)
err = mqtMgr.Run(ctx)
if err != nil {
return err
}
return nil
}
func readSecrets(logger *zap.Logger, secretsPath string) (map[string][]byte, error) {
// return if no secrets exist
if _, err := os.Stat(secretsPath); os.IsNotExist(err) {
return nil, err
}
secretFiles, err := os.ReadDir(secretsPath)
if err != nil {
return nil, err
}
secrets := make(map[string][]byte)
for _, secretFile := range secretFiles {
fileName := secretFile.Name()
// /etc/secrets contain some hidden directories (like .data)
// ignore them
if !secretFile.IsDir() && !strings.HasPrefix(fileName, ".") {
logger.Info(fmt.Sprintf("Reading secret from %s", fileName))
filePath := path.Join(secretsPath, fileName)
secret, fileReadErr := os.ReadFile(filePath)
if fileReadErr != nil {
return nil, fileReadErr
}
secrets[fileName] = secret
}
}
return secrets, nil
}
+1 -2
View File
@@ -38,7 +38,6 @@ import (
"github.com/fission/fission/pkg/fission-cli/console" "github.com/fission/fission/pkg/fission-cli/console"
"github.com/fission/fission/pkg/fission-cli/flag" "github.com/fission/fission/pkg/fission-cli/flag"
flagkey "github.com/fission/fission/pkg/fission-cli/flag/key" flagkey "github.com/fission/fission/pkg/fission-cli/flag/key"
_ "github.com/fission/fission/pkg/mqtrigger/messageQueue/kafka"
) )
const ( const (
@@ -81,7 +80,7 @@ func App(clientOptions cmd.ClientOptions) *cobra.Command {
}) })
wrapper.SetFlags(rootCmd, flag.FlagSet{ wrapper.SetFlags(rootCmd, flag.FlagSet{
Global: []flag.Flag{flag.GlobalServer, flag.GlobalVerbosity, flag.KubeContext, flag.Namespace}, Global: []flag.Flag{flag.GlobalVerbosity, flag.KubeContext, flag.Namespace},
}) })
groups := helptemplate.CommandGroups{} groups := helptemplate.CommandGroups{}
+1 -2
View File
@@ -1,4 +1,3 @@
FROM alpine:3.18 FROM cgr.dev/chainguard/static:latest
RUN apk add --update ca-certificates
COPY pre-upgrade-checks / COPY pre-upgrade-checks /
ENTRYPOINT ["/pre-upgrade-checks"] ENTRYPOINT ["/pre-upgrade-checks"]
+6 -6
View File
@@ -124,7 +124,7 @@ func (client *PreUpgradeTaskClient) LatestSchemaApplied(ctx context.Context) err
// VerifyFunctionSpecReferences verifies that a function references secrets, configmaps, pkgs in its own namespace and // VerifyFunctionSpecReferences verifies that a function references secrets, configmaps, pkgs in its own namespace and
// outputs a list of functions that don't adhere to this requirement. // outputs a list of functions that don't adhere to this requirement.
func (client *PreUpgradeTaskClient) VerifyFunctionSpecReferences(ctx context.Context) { func (client *PreUpgradeTaskClient) VerifyFunctionSpecReferences(ctx context.Context) error {
client.logger.Info("verifying function spec references for all functions in the cluster") client.logger.Info("verifying function spec references for all functions in the cluster")
var err error var err error
@@ -140,9 +140,11 @@ func (client *PreUpgradeTaskClient) VerifyFunctionSpecReferences(ctx context.Con
} }
if err != nil { if err != nil {
client.logger.Fatal("error listing functions after max retries", client.logger.Error("error listing functions after max retries",
zap.Error(err), zap.Error(err),
zap.Int("max_retries", maxRetries)) zap.Int("max_retries", maxRetries))
errs = errors.Join(errs, fmt.Errorf("error listing functions in namespace : %s", namespace))
continue
} }
// check that all secrets, configmaps, packages are in the same namespace // check that all secrets, configmaps, packages are in the same namespace
@@ -169,10 +171,8 @@ func (client *PreUpgradeTaskClient) VerifyFunctionSpecReferences(ctx context.Con
} }
if errs != nil { if errs != nil {
client.logger.Fatal("installation failed", return errs
zap.Error(errs),
zap.String("summary", "a function cannot reference secrets, configmaps and packages outside it's own namespace"))
} }
client.logger.Info("function spec references verified") client.logger.Info("function spec references verified")
return nil
} }
+31
View File
@@ -0,0 +1,31 @@
package main
import (
"context"
"testing"
"github.com/stretchr/testify/require"
"github.com/fission/fission/test/e2e/framework"
)
func TestPreUpgradeTaskClient(t *testing.T) {
f := framework.NewFramework()
defer f.Logger().Sync()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
err := f.Start(ctx)
require.NoError(t, err)
preupgradeClient, err := makePreUpgradeTaskClient(f.ClientGen(), f.Logger())
require.NoError(t, err)
crd := preupgradeClient.GetFunctionCRD(ctx)
require.NotNil(t, crd)
err = preupgradeClient.LatestSchemaApplied(ctx)
require.NoError(t, err)
err = preupgradeClient.VerifyFunctionSpecReferences(ctx)
require.NoError(t, err)
}
+9 -6
View File
@@ -28,22 +28,25 @@ func main() {
logger := loggerfactory.GetLogger() logger := loggerfactory.GetLogger()
defer logger.Sync() defer logger.Sync()
crdBackedClient, err := makePreUpgradeTaskClient(crd.NewClientGenerator(), logger) ctx := signals.SetupSignalHandler()
preupgradeClient, err := makePreUpgradeTaskClient(crd.NewClientGenerator(), logger)
if err != nil { if err != nil {
logger.Fatal("error creating a crd client, please retry helm upgrade", logger.Fatal("error creating a crd client, please retry helm upgrade",
zap.Error(err)) zap.Error(err))
} }
ctx := signals.SetupSignalHandler() crd := preupgradeClient.GetFunctionCRD(ctx)
crd := crdBackedClient.GetFunctionCRD(ctx)
if crd == nil { if crd == nil {
logger.Info("nothing to do since CRDs are not present on the cluster") logger.Info("nothing to do since CRDs are not present on the cluster")
return return
} }
err = preupgradeClient.LatestSchemaApplied(ctx)
err = crdBackedClient.LatestSchemaApplied(ctx)
if err != nil { if err != nil {
logger.Fatal("New CRDs are not applied", zap.Error(err)) logger.Fatal("New CRDs are not applied", zap.Error(err))
} }
crdBackedClient.VerifyFunctionSpecReferences(ctx) err = preupgradeClient.VerifyFunctionSpecReferences(ctx)
if err != nil {
logger.Fatal("Function spec references are not valid", zap.Error(err))
}
} }
+2 -3
View File
@@ -1,4 +1,3 @@
FROM alpine:3.18 FROM cgr.dev/chainguard/static:latest
RUN apk add --update ca-certificates
COPY reporter / COPY reporter /
ENTRYPOINT ["/reporter"] ENTRYPOINT ["/reporter"]
+12 -7
View File
@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition kind: CustomResourceDefinition
metadata: metadata:
annotations: annotations:
controller-gen.kubebuilder.io/version: v0.13.0 controller-gen.kubebuilder.io/version: v0.14.0
name: canaryconfigs.fission.io name: canaryconfigs.fission.io
spec: spec:
group: fission.io group: fission.io
@@ -20,14 +20,19 @@ spec:
description: CanaryConfig is for canary deployment of two functions. description: CanaryConfig is for canary deployment of two functions.
properties: properties:
apiVersion: apiVersion:
description: 'APIVersion defines the versioned schema of this representation description: |-
of an object. Servers should convert recognized schemas to the latest APIVersion defines the versioned schema of this representation of an object.
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string type: string
kind: kind:
description: 'Kind is a string value representing the REST resource this description: |-
object represents. Servers may infer this from the endpoint the client Kind is a string value representing the REST resource this object represents.
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string type: string
metadata: metadata:
type: object type: object
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+53 -36
View File
@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition kind: CustomResourceDefinition
metadata: metadata:
annotations: annotations:
controller-gen.kubebuilder.io/version: v0.13.0 controller-gen.kubebuilder.io/version: v0.14.0
name: httptriggers.fission.io name: httptriggers.fission.io
spec: spec:
group: fission.io group: fission.io
@@ -21,14 +21,19 @@ spec:
HTTP requests. HTTP requests.
properties: properties:
apiVersion: apiVersion:
description: 'APIVersion defines the versioned schema of this representation description: |-
of an object. Servers should convert recognized schemas to the latest APIVersion defines the versioned schema of this representation of an object.
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string type: string
kind: kind:
description: 'Kind is a string value representing the REST resource this description: |-
object represents. Servers may infer this from the endpoint the client Kind is a string value representing the REST resource this object represents.
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string type: string
metadata: metadata:
type: object type: object
@@ -46,35 +51,39 @@ spec:
functionweights: functionweights:
additionalProperties: additionalProperties:
type: integer type: integer
description: Function Reference by weight. this map contains function description: |-
name as key and its weight as the value. This is for canary Function Reference by weight. this map contains function name as key and its weight
upgrade purpose. as the value. This is for canary upgrade purpose.
nullable: true nullable: true
type: object type: object
name: name:
description: Name of the function. description: Name of the function.
type: string type: string
type: type:
description: 'Type indicates whether this function reference is description: |-
by name or selector. For now, the only supported reference type Type indicates whether this function reference is by name or selector. For now,
is by "name". Future reference types: * Function by label or the only supported reference type is by "name". Future reference types:
annotation * Branch or tag of a versioned function * A "rolling * Function by label or annotation
upgrade" from one version of a function to another Available * Branch or tag of a versioned function
value: - name - function-weights' * A "rolling upgrade" from one version of a function to another
Available value:
- name
- function-weights
type: string type: string
required: required:
- name - name
- type - type
type: object type: object
host: host:
description: 'TODO: remove this field since we have IngressConfig description: |-
already Deprecated: the original idea of this field is not for setting TODO: remove this field since we have IngressConfig already
Ingress. Since we have IngressConfig now, remove Host after couple Deprecated: the original idea of this field is not for setting Ingress.
releases.' Since we have IngressConfig now, remove Host after couple releases.
type: string type: string
ingressconfig: ingressconfig:
description: 'TODO: make IngressConfig an independent Fission resource description: |-
IngressConfig for router to set up Ingress.' TODO: make IngressConfig an independent Fission resource
IngressConfig for router to set up Ingress.
properties: properties:
annotations: annotations:
additionalProperties: additionalProperties:
@@ -84,26 +93,32 @@ spec:
nullable: true nullable: true
type: object type: object
host: host:
description: Host is for ingress controller to apply rules. If description: |-
host is empty or "*", the rule applies to all inbound HTTP traffic. Host is for ingress controller to apply rules. If
host is empty or "*", the rule applies to all
inbound HTTP traffic.
type: string type: string
path: path:
description: Path is for path matching. The format of path depends description: |-
on what ingress controller you used. Path is for path matching. The format of path
depends on what ingress controller you used.
type: string type: string
tls: tls:
description: TLS is for user to specify a Secret that contains description: |-
TLS key and certificate. The domain name in the key and crt TLS is for user to specify a Secret that contains
must match the value of Host field. TLS key and certificate. The domain name in the
key and crt must match the value of Host field.
type: string type: string
type: object type: object
keepPrefix: keepPrefix:
description: When function is exposed with Prefix based path, keepPrefix description: |-
decides whether to keep or trim prefix in URL while invoking function. When function is exposed with Prefix based path,
keepPrefix decides whether to keep or trim prefix in URL while invoking function.
type: boolean type: boolean
method: method:
description: Use Methods instead of Method. This field is going to description: |-
be deprecated in a future release HTTP method to access a function. Use Methods instead of Method. This field is going to be deprecated in a future release
HTTP method to access a function.
type: string type: string
methods: methods:
description: HTTP methods to access a function description: HTTP methods to access a function
@@ -111,9 +126,11 @@ spec:
type: string type: string
type: array type: array
prefix: prefix:
description: 'Prefix with which functions are exposed. NOTE: Prefix description: |-
takes precedence over URL/RelativeURL. Note that it does not treat Prefix with which functions are exposed.
slashes specially ("/foobar/" will be matched by the prefix "/foobar").' NOTE: Prefix takes precedence over URL/RelativeURL.
Note that it does not treat slashes specially ("/foobar/" will be matched by
the prefix "/foobar").
type: string type: string
relativeurl: relativeurl:
description: RelativeURL is the exposed URL for external client to description: RelativeURL is the exposed URL for external client to
+27 -18
View File
@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition kind: CustomResourceDefinition
metadata: metadata:
annotations: annotations:
controller-gen.kubebuilder.io/version: v0.13.0 controller-gen.kubebuilder.io/version: v0.14.0
name: kuberneteswatchtriggers.fission.io name: kuberneteswatchtriggers.fission.io
spec: spec:
group: fission.io group: fission.io
@@ -21,14 +21,19 @@ spec:
invokes functions. invokes functions.
properties: properties:
apiVersion: apiVersion:
description: 'APIVersion defines the versioned schema of this representation description: |-
of an object. Servers should convert recognized schemas to the latest APIVersion defines the versioned schema of this representation of an object.
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string type: string
kind: kind:
description: 'Kind is a string value representing the REST resource this description: |-
object represents. Servers may infer this from the endpoint the client Kind is a string value representing the REST resource this object represents.
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string type: string
metadata: metadata:
type: object type: object
@@ -36,27 +41,31 @@ spec:
description: KubernetesWatchTriggerSpec defines spec of KuberenetesWatchTrigger description: KubernetesWatchTriggerSpec defines spec of KuberenetesWatchTrigger
properties: properties:
functionref: functionref:
description: The reference to a function for kubewatcher to invoke description: |-
with when receiving events. The reference to a function for kubewatcher to invoke with
when receiving events.
properties: properties:
functionweights: functionweights:
additionalProperties: additionalProperties:
type: integer type: integer
description: Function Reference by weight. this map contains function description: |-
name as key and its weight as the value. This is for canary Function Reference by weight. this map contains function name as key and its weight
upgrade purpose. as the value. This is for canary upgrade purpose.
nullable: true nullable: true
type: object type: object
name: name:
description: Name of the function. description: Name of the function.
type: string type: string
type: type:
description: 'Type indicates whether this function reference is description: |-
by name or selector. For now, the only supported reference type Type indicates whether this function reference is by name or selector. For now,
is by "name". Future reference types: * Function by label or the only supported reference type is by "name". Future reference types:
annotation * Branch or tag of a versioned function * A "rolling * Function by label or annotation
upgrade" from one version of a function to another Available * Branch or tag of a versioned function
value: - name - function-weights' * A "rolling upgrade" from one version of a function to another
Available value:
- name
- function-weights
type: string type: string
required: required:
- name - name
File diff suppressed because it is too large Load Diff
+46 -28
View File
@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition kind: CustomResourceDefinition
metadata: metadata:
annotations: annotations:
controller-gen.kubebuilder.io/version: v0.13.0 controller-gen.kubebuilder.io/version: v0.14.0
name: packages.fission.io name: packages.fission.io
spec: spec:
group: fission.io group: fission.io
@@ -22,14 +22,19 @@ spec:
description: Package Think of these as function-level images. description: Package Think of these as function-level images.
properties: properties:
apiVersion: apiVersion:
description: 'APIVersion defines the versioned schema of this representation description: |-
of an object. Servers should convert recognized schemas to the latest APIVersion defines the versioned schema of this representation of an object.
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string type: string
kind: kind:
description: 'Kind is a string value representing the REST resource this description: |-
object represents. Servers may infer this from the endpoint the client Kind is a string value representing the REST resource this object represents.
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string type: string
metadata: metadata:
type: object type: object
@@ -46,24 +51,30 @@ spec:
runtime used to run user function. runtime used to run user function.
properties: properties:
checksum: checksum:
description: Checksum ensures the integrity of packages referenced description: |-
by URL. Ignored for literals. Checksum ensures the integrity of packages
referenced by URL. Ignored for literals.
properties: properties:
sum: sum:
type: string type: string
type: type:
description: ChecksumType specifies the checksum algorithm, description: |-
such as sha256, used for a checksum. ChecksumType specifies the checksum algorithm, such as
sha256, used for a checksum.
type: string type: string
type: object type: object
literal: literal:
description: Literal contents of the package. Can be used for description: |-
Literal contents of the package. Can be used for
encoding packages below TODO (256 KB?) size. encoding packages below TODO (256 KB?) size.
format: byte format: byte
type: string type: string
type: type:
description: 'Type defines how the package is specified: literal description: |-
or URL. Available value: - literal - url' Type defines how the package is specified: literal or URL.
Available value:
- literal
- url
type: string type: string
url: url:
description: URL references a package. description: URL references a package.
@@ -82,30 +93,36 @@ spec:
- namespace - namespace
type: object type: object
source: source:
description: Source is the archive contains source code and dependencies description: |-
file. If the package status is in PENDING state, builder manager Source is the archive contains source code and dependencies file.
will then notify builder to compile source and save the result as If the package status is in PENDING state, builder manager will then
deployable archive. notify builder to compile source and save the result as deployable archive.
properties: properties:
checksum: checksum:
description: Checksum ensures the integrity of packages referenced description: |-
by URL. Ignored for literals. Checksum ensures the integrity of packages
referenced by URL. Ignored for literals.
properties: properties:
sum: sum:
type: string type: string
type: type:
description: ChecksumType specifies the checksum algorithm, description: |-
such as sha256, used for a checksum. ChecksumType specifies the checksum algorithm, such as
sha256, used for a checksum.
type: string type: string
type: object type: object
literal: literal:
description: Literal contents of the package. Can be used for description: |-
Literal contents of the package. Can be used for
encoding packages below TODO (256 KB?) size. encoding packages below TODO (256 KB?) size.
format: byte format: byte
type: string type: string
type: type:
description: 'Type defines how the package is specified: literal description: |-
or URL. Available value: - literal - url' Type defines how the package is specified: literal or URL.
Available value:
- literal
- url
type: string type: string
url: url:
description: URL references a package. description: URL references a package.
@@ -125,9 +142,10 @@ spec:
description: BuildStatus is the package build status. description: BuildStatus is the package build status.
type: string type: string
lastUpdateTimestamp: lastUpdateTimestamp:
description: LastUpdateTimestamp will store the timestamp the package description: |-
was last updated metav1.Time is a wrapper around time.Time which LastUpdateTimestamp will store the timestamp the package was last updated
supports correct marshaling to YAML and JSON. https://github.com/kubernetes/apimachinery/blob/44bd77c24ef93cd3a5eb6fef64e514025d10d44e/pkg/apis/meta/v1/time.go#L26-L35 metav1.Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON.
https://github.com/kubernetes/apimachinery/blob/44bd77c24ef93cd3a5eb6fef64e514025d10d44e/pkg/apis/meta/v1/time.go#L26-L35
format: date-time format: date-time
nullable: true nullable: true
type: string type: string
+26 -17
View File
@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition kind: CustomResourceDefinition
metadata: metadata:
annotations: annotations:
controller-gen.kubebuilder.io/version: v0.13.0 controller-gen.kubebuilder.io/version: v0.14.0
name: timetriggers.fission.io name: timetriggers.fission.io
spec: spec:
group: fission.io group: fission.io
@@ -20,19 +20,25 @@ spec:
description: TimeTrigger invokes functions based on given cron schedule. description: TimeTrigger invokes functions based on given cron schedule.
properties: properties:
apiVersion: apiVersion:
description: 'APIVersion defines the versioned schema of this representation description: |-
of an object. Servers should convert recognized schemas to the latest APIVersion defines the versioned schema of this representation of an object.
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string type: string
kind: kind:
description: 'Kind is a string value representing the REST resource this description: |-
object represents. Servers may infer this from the endpoint the client Kind is a string value representing the REST resource this object represents.
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string type: string
metadata: metadata:
type: object type: object
spec: spec:
description: TimeTriggerSpec invokes the specific function at a time or description: |-
TimeTriggerSpec invokes the specific function at a time or
times specified by a cron string. times specified by a cron string.
properties: properties:
cron: cron:
@@ -44,21 +50,24 @@ spec:
functionweights: functionweights:
additionalProperties: additionalProperties:
type: integer type: integer
description: Function Reference by weight. this map contains function description: |-
name as key and its weight as the value. This is for canary Function Reference by weight. this map contains function name as key and its weight
upgrade purpose. as the value. This is for canary upgrade purpose.
nullable: true nullable: true
type: object type: object
name: name:
description: Name of the function. description: Name of the function.
type: string type: string
type: type:
description: 'Type indicates whether this function reference is description: |-
by name or selector. For now, the only supported reference type Type indicates whether this function reference is by name or selector. For now,
is by "name". Future reference types: * Function by label or the only supported reference type is by "name". Future reference types:
annotation * Branch or tag of a versioned function * A "rolling * Function by label or annotation
upgrade" from one version of a function to another Available * Branch or tag of a versioned function
value: - name - function-weights' * A "rolling upgrade" from one version of a function to another
Available value:
- name
- function-weights
type: string type: string
required: required:
- name - name
+54 -65
View File
@@ -4,52 +4,52 @@ go 1.21
require ( require (
dario.cat/mergo v1.0.0 dario.cat/mergo v1.0.0
github.com/IBM/sarama v1.41.3
github.com/bep/debounce v1.2.1 github.com/bep/debounce v1.2.1
github.com/dchest/uniuri v1.2.0 github.com/dchest/uniuri v1.2.0
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815
github.com/dustin/go-humanize v1.0.1 github.com/dustin/go-humanize v1.0.1
github.com/elastic/crd-ref-docs v0.0.10 github.com/elastic/crd-ref-docs v0.0.10
github.com/fatih/color v1.15.0 github.com/fatih/color v1.16.0
github.com/fsnotify/fsnotify v1.7.0 github.com/fsnotify/fsnotify v1.7.0
github.com/go-git/go-git/v5 v5.10.0 github.com/go-git/go-git/v5 v5.11.0
github.com/go-logr/zapr v1.3.0
github.com/golang-jwt/jwt/v4 v4.5.0 github.com/golang-jwt/jwt/v4 v4.5.0
github.com/google/go-cmp v0.6.0 github.com/google/go-cmp v0.6.0
github.com/google/uuid v1.4.0 github.com/google/uuid v1.5.0
github.com/gorilla/mux v1.8.0 github.com/gorilla/mux v1.8.1
github.com/graymeta/stow v0.2.8 github.com/graymeta/stow v0.2.8
github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/go-multierror v1.1.1
github.com/hashicorp/go-retryablehttp v0.7.4 github.com/hashicorp/go-retryablehttp v0.7.5
github.com/influxdata/influxdb v1.11.2 github.com/influxdata/influxdb v1.11.4
github.com/mholt/archiver/v3 v3.5.1 github.com/mholt/archiver/v3 v3.5.1
github.com/minio/minio-go v6.0.14+incompatible github.com/minio/minio-go v6.0.14+incompatible
github.com/ory/dockertest v3.3.5+incompatible github.com/ory/dockertest v3.3.5+incompatible
github.com/pkg/errors v0.9.1 github.com/pkg/errors v0.9.1
github.com/prometheus/client_golang v1.17.0 github.com/prometheus/client_golang v1.18.0
github.com/prometheus/common v0.45.0 github.com/prometheus/common v0.45.0
github.com/robfig/cron/v3 v3.0.1 github.com/robfig/cron/v3 v3.0.1
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06
github.com/spf13/cobra v1.7.0 github.com/spf13/cobra v1.8.0
github.com/spf13/pflag v1.0.5 github.com/spf13/pflag v1.0.5
github.com/stretchr/testify v1.8.4 github.com/stretchr/testify v1.8.4
github.com/wcharczuk/go-chart v2.0.1+incompatible github.com/wcharczuk/go-chart v2.0.1+incompatible
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1
go.opentelemetry.io/contrib/propagators/autoprop v0.45.0 go.opentelemetry.io/contrib/propagators/autoprop v0.46.1
go.opentelemetry.io/otel v1.19.0 go.opentelemetry.io/otel v1.21.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.21.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.0
go.opentelemetry.io/otel/sdk v1.19.0 go.opentelemetry.io/otel/sdk v1.21.0
go.opentelemetry.io/otel/trace v1.19.0 go.opentelemetry.io/otel/trace v1.21.0
go.uber.org/zap v1.26.0 go.uber.org/zap v1.26.0
golang.org/x/net v0.17.0 golang.org/x/net v0.20.0
google.golang.org/grpc v1.59.0 google.golang.org/grpc v1.60.1
k8s.io/api v0.28.3 k8s.io/api v0.29.0
k8s.io/apiextensions-apiserver v0.28.3 k8s.io/apiextensions-apiserver v0.29.0
k8s.io/apimachinery v0.28.3 k8s.io/apimachinery v0.29.0
k8s.io/client-go v0.28.3 k8s.io/client-go v0.29.0
k8s.io/metrics v0.28.3 k8s.io/metrics v0.29.0
sigs.k8s.io/controller-runtime v0.16.3 sigs.k8s.io/controller-runtime v0.16.3
sigs.k8s.io/controller-tools v0.13.0 sigs.k8s.io/controller-tools v0.14.0
sigs.k8s.io/yaml v1.4.0 sigs.k8s.io/yaml v1.4.0
) )
@@ -61,7 +61,6 @@ require (
github.com/Microsoft/go-winio v0.6.1 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect
github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect
github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect
github.com/acomagu/bufpipe v1.0.4 // indirect
github.com/andybalholm/brotli v1.0.1 // indirect github.com/andybalholm/brotli v1.0.1 // indirect
github.com/aws/aws-sdk-go v1.42.34 // indirect github.com/aws/aws-sdk-go v1.42.34 // indirect
github.com/beorn7/perks v1.0.1 // indirect github.com/beorn7/perks v1.0.1 // indirect
@@ -69,28 +68,24 @@ require (
github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect
github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/cloudflare/circl v1.3.3 // indirect github.com/cloudflare/circl v1.3.7 // indirect
github.com/containerd/continuity v0.2.2 // indirect github.com/containerd/continuity v0.2.2 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect
github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/cyphar/filepath-securejoin v0.2.4 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect
github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-connections v0.4.0 // indirect
github.com/docker/go-units v0.4.0 // indirect github.com/docker/go-units v0.4.0 // indirect
github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect
github.com/eapache/go-resiliency v1.4.0 // indirect
github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 // indirect
github.com/eapache/queue v1.1.0 // indirect
github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/emicklei/go-restful/v3 v3.11.0 // indirect
github.com/emirpasic/gods v1.18.1 // indirect github.com/emirpasic/gods v1.18.1 // indirect
github.com/evanphx/json-patch v5.6.0+incompatible // indirect github.com/evanphx/json-patch v5.6.0+incompatible // indirect
github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect
github.com/felixge/httpsnoop v1.0.3 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
github.com/go-git/go-billy/v5 v5.5.0 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect
github.com/go-ini/ini v1.66.4 // indirect github.com/go-ini/ini v1.66.4 // indirect
github.com/go-logr/logr v1.2.4 // indirect github.com/go-logr/logr v1.3.0 // indirect
github.com/go-logr/stdr v1.2.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-logr/zapr v1.2.4 // indirect
github.com/go-openapi/jsonpointer v0.19.6 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect
github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect
github.com/go-openapi/swag v0.22.3 // indirect github.com/go-openapi/swag v0.22.3 // indirect
@@ -107,16 +102,10 @@ require (
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect
github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-uuid v1.0.3 // indirect
github.com/huandu/xstrings v1.3.3 // indirect github.com/huandu/xstrings v1.3.3 // indirect
github.com/imdario/mergo v0.3.11 // indirect github.com/imdario/mergo v0.3.11 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
github.com/jcmturner/aescts/v2 v2.0.0 // indirect
github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect
github.com/jcmturner/gofork v1.7.6 // indirect
github.com/jcmturner/gokrb5/v8 v8.4.4 // indirect
github.com/jcmturner/rpc/v2 v2.0.3 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/josharian/intern v1.0.0 // indirect github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect github.com/json-iterator/go v1.1.12 // indirect
@@ -126,7 +115,7 @@ require (
github.com/lib/pq v1.10.4 // indirect github.com/lib/pq v1.10.4 // indirect
github.com/mailru/easyjson v0.7.7 // indirect github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.17 // indirect github.com/mattn/go-isatty v0.0.20 // indirect
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect
@@ -135,6 +124,7 @@ require (
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
github.com/nwaples/rardecode v1.1.0 // indirect github.com/nwaples/rardecode v1.1.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.0.2 // indirect github.com/opencontainers/image-spec v1.0.2 // indirect
@@ -142,48 +132,47 @@ require (
github.com/pierrec/lz4/v4 v4.1.18 // indirect github.com/pierrec/lz4/v4 v4.1.18 // indirect
github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect github.com/prometheus/client_model v0.5.0 // indirect
github.com/prometheus/procfs v0.11.1 // indirect github.com/prometheus/procfs v0.12.0 // indirect
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/sergi/go-diff v1.1.0 // indirect github.com/sergi/go-diff v1.1.0 // indirect
github.com/sirupsen/logrus v1.9.0 // indirect github.com/sirupsen/logrus v1.9.0 // indirect
github.com/skeema/knownhosts v1.2.0 // indirect github.com/skeema/knownhosts v1.2.1 // indirect
github.com/ulikunitz/xz v0.5.9 // indirect github.com/ulikunitz/xz v0.5.9 // indirect
github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect
go.opentelemetry.io/contrib/propagators/aws v1.20.0 // indirect go.opentelemetry.io/contrib/propagators/aws v1.21.1 // indirect
go.opentelemetry.io/contrib/propagators/b3 v1.20.0 // indirect go.opentelemetry.io/contrib/propagators/b3 v1.21.1 // indirect
go.opentelemetry.io/contrib/propagators/jaeger v1.20.0 // indirect go.opentelemetry.io/contrib/propagators/jaeger v1.21.1 // indirect
go.opentelemetry.io/contrib/propagators/ot v1.20.0 // indirect go.opentelemetry.io/contrib/propagators/ot v1.21.1 // indirect
go.opentelemetry.io/otel/metric v1.19.0 // indirect go.opentelemetry.io/otel/metric v1.21.0 // indirect
go.opentelemetry.io/proto/otlp v1.0.0 // indirect go.opentelemetry.io/proto/otlp v1.0.0 // indirect
go.uber.org/multierr v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect
golang.org/x/crypto v0.14.0 // indirect golang.org/x/crypto v0.18.0 // indirect
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect
golang.org/x/image v0.5.0 // indirect golang.org/x/image v0.10.0 // indirect
golang.org/x/mod v0.12.0 // indirect golang.org/x/mod v0.14.0 // indirect
golang.org/x/oauth2 v0.12.0 // indirect golang.org/x/oauth2 v0.13.0 // indirect
golang.org/x/sys v0.13.0 // indirect golang.org/x/sys v0.16.0 // indirect
golang.org/x/term v0.13.0 // indirect golang.org/x/term v0.16.0 // indirect
golang.org/x/text v0.13.0 // indirect golang.org/x/text v0.14.0 // indirect
golang.org/x/time v0.3.0 // indirect golang.org/x/time v0.3.0 // indirect
golang.org/x/tools v0.13.0 // indirect golang.org/x/tools v0.16.1 // indirect
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
google.golang.org/appengine v1.6.7 // indirect google.golang.org/appengine v1.6.8 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97 // indirect
google.golang.org/protobuf v1.31.0 // indirect google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect
gotest.tools v2.2.0+incompatible // indirect gotest.tools v2.2.0+incompatible // indirect
k8s.io/component-base v0.28.3 // indirect k8s.io/component-base v0.29.0 // indirect
k8s.io/klog/v2 v2.100.1 // indirect k8s.io/klog/v2 v2.110.1 // indirect
k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 // indirect k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
) )
+121 -166
View File
@@ -17,8 +17,6 @@ github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcP
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/IBM/sarama v1.41.3 h1:MWBEJ12vHC8coMjdEXFq/6ftO6DUZnQlFYcxtOJFa7c=
github.com/IBM/sarama v1.41.3/go.mod h1:Xxho9HkHd4K/MDUo/T/sOqwtX/17D33++E9Wib6hUdQ=
github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
@@ -34,8 +32,6 @@ github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg=
github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0=
github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ=
github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/andybalholm/brotli v1.0.1 h1:KqhlKozYbRtJvsPrrEeXcO+N2l6NYT5A2QAFmSULpEc= github.com/andybalholm/brotli v1.0.1 h1:KqhlKozYbRtJvsPrrEeXcO+N2l6NYT5A2QAFmSULpEc=
@@ -48,7 +44,6 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkY
github.com/aws/aws-sdk-go v1.23.4/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.23.4/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
github.com/aws/aws-sdk-go v1.42.34 h1:fqGAiKmCSRY1rEa4G9VqgkKKbNmLKYq5dKmLtQkvYi8= github.com/aws/aws-sdk-go v1.42.34 h1:fqGAiKmCSRY1rEa4G9VqgkKKbNmLKYq5dKmLtQkvYi8=
github.com/aws/aws-sdk-go v1.42.34/go.mod h1:OGr6lGMAKGlG9CVrYnWYDKIyb829c6EVBRjxqjmPepc= github.com/aws/aws-sdk-go v1.42.34/go.mod h1:OGr6lGMAKGlG9CVrYnWYDKIyb829c6EVBRjxqjmPepc=
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
@@ -70,8 +65,9 @@ github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927 h1:SKI1/fuSdodxmNNyV
github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U=
github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs=
github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU=
github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA=
github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U=
github.com/containerd/continuity v0.2.2 h1:QSqfxcn8c+12slxwu00AtzXrsami0MJb/MQs9lOLHLA= github.com/containerd/continuity v0.2.2 h1:QSqfxcn8c+12slxwu00AtzXrsami0MJb/MQs9lOLHLA=
github.com/containerd/continuity v0.2.2/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk= github.com/containerd/continuity v0.2.2/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk=
@@ -83,8 +79,8 @@ github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg=
@@ -109,12 +105,6 @@ github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdf
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/eapache/go-resiliency v1.4.0 h1:3OK9bWpPk5q6pbFAaYSEwD9CLUSHG8bnZuqX2yMt3B0=
github.com/eapache/go-resiliency v1.4.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho=
github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 h1:Oy0F4ALJ04o5Qqpdz8XLIpNA3WM/iSIXqxtqo7UGVws=
github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3/go.mod h1:YvSRo5mw33fLEx1+DlK6L2VV43tJt5Eyel9n9XBcR+0=
github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/elastic/crd-ref-docs v0.0.10 h1:FAc9oCxxY4+rMCLSLtTGrEaPyuxmp3LNlQ+dZfG9Ujc= github.com/elastic/crd-ref-docs v0.0.10 h1:FAc9oCxxY4+rMCLSLtTGrEaPyuxmp3LNlQ+dZfG9Ujc=
github.com/elastic/crd-ref-docs v0.0.10/go.mod h1:zha4djxzWirfx+c4fl/Kmk9Rc7Fv7XBoOi9CL9kne+M= github.com/elastic/crd-ref-docs v0.0.10/go.mod h1:zha4djxzWirfx+c4fl/Kmk9Rc7Fv7XBoOi9CL9kne+M=
github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU=
@@ -127,12 +117,10 @@ github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCv
github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww=
github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4=
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
@@ -146,21 +134,20 @@ github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+
github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow=
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4=
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII=
github.com/go-git/go-git/v5 v5.10.0 h1:F0x3xXrAWmhwtzoCokU4IMPcBdncG+HAAqi9FcOOjbQ= github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4=
github.com/go-git/go-git/v5 v5.10.0/go.mod h1:1FOZ/pQnqw24ghP2n7cunVl0ON55BsjPYvhWHvZGhoo= github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY=
github.com/go-ini/ini v1.66.4 h1:dKjMqkcbkzfddhIhyglTPgMoJnkvmG+bSLrU9cTHc5M= github.com/go-ini/ini v1.66.4 h1:dKjMqkcbkzfddhIhyglTPgMoJnkvmG+bSLrU9cTHc5M=
github.com/go-ini/ini v1.66.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-ini/ini v1.66.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ=
github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA= github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg=
github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE=
github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
@@ -202,6 +189,7 @@ github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
@@ -226,14 +214,12 @@ github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OI
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec=
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/readahead v0.0.0-20161222183148-eaceba169032/go.mod h1:qYysrqQXuV4tzsizt4oOQ6mrBZQ0xnQXP3ylXX8Jk5Y= github.com/google/readahead v0.0.0-20161222183148-eaceba169032/go.mod h1:qYysrqQXuV4tzsizt4oOQ6mrBZQ0xnQXP3ylXX8Jk5Y=
github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU=
github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gotestyourself/gotestyourself v2.2.0+incompatible h1:AQwinXlbQR2HvPjQZOmDhRqsv5mZf+Jb1RnSLxcqZcI= github.com/gotestyourself/gotestyourself v2.2.0+incompatible h1:AQwinXlbQR2HvPjQZOmDhRqsv5mZf+Jb1RnSLxcqZcI=
@@ -254,11 +240,8 @@ github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrj
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
github.com/hashicorp/go-retryablehttp v0.7.4 h1:ZQgVdpTdAL7WpMIwLzCfbalOcSUdkDZnpUv3/+BxzFA= github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M=
github.com/hashicorp/go-retryablehttp v0.7.4/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8=
github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8=
github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
@@ -269,22 +252,10 @@ github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/influxdata/influxdb v1.11.2 h1:qOF3uQN1mDfJNEKwbAgJsqehf8IXgKok2vlGm736oGo= github.com/influxdata/influxdb v1.11.4 h1:H3pVW+/tWQ4lkHhZxVQ13Ov1hmhHYaAzz8L5aq3ZNtw=
github.com/influxdata/influxdb v1.11.2/go.mod h1:eUMkLTE2vQwvSk6KGMrTBLKPaqSuczuelGbggigMPFw= github.com/influxdata/influxdb v1.11.4/go.mod h1:VO6X2zlamfmEf+Esc9dR+7UQhdE/krspWNEZPwxCrp0=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8=
github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs=
github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo=
github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM=
github.com/jcmturner/gofork v1.7.6 h1:QH0l3hzAU1tfT3rZCnW5zXl+orbkNMMRGJfdJjHVETg=
github.com/jcmturner/gofork v1.7.6/go.mod h1:1622LH6i/EZqLloHfE7IeZ0uEJwMSUyQ/nDd82IeqRo=
github.com/jcmturner/goidentity/v6 v6.0.1 h1:VKnZd2oEIMorCTsFBnJWbExfNN7yZr3EhJAxwOkZg6o=
github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg=
github.com/jcmturner/gokrb5/v8 v8.4.4 h1:x1Sv4HaTpepFkXbt2IkL29DXRf8sOfZXo8eRKh687T8=
github.com/jcmturner/gokrb5/v8 v8.4.4/go.mod h1:1btQEpgT6k+unzCwX1KdWMEwPPkkgBtP+F6aCACiMrs=
github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY=
github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
@@ -330,13 +301,11 @@ github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A=
github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
@@ -366,6 +335,8 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
github.com/ncw/swift v1.0.49/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= github.com/ncw/swift v1.0.49/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
github.com/nwaples/rardecode v1.1.0 h1:vSxaY8vQhOcVr4mm5e8XllHWTiM4JF507A0Katqw7MQ= github.com/nwaples/rardecode v1.1.0 h1:vSxaY8vQhOcVr4mm5e8XllHWTiM4JF507A0Katqw7MQ=
github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0=
@@ -374,10 +345,10 @@ github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= 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 v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4=
github.com/onsi/ginkgo/v2 v2.11.0/go.mod h1:ZhrRA5XmEE3x3rhlzamx/JJvujdZoJ2uvgI7kR0iZvM= github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o=
github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8=
github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM=
@@ -404,23 +375,21 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
github.com/pquerna/ffjson v0.0.0-20190813045741-dac163c6c0a9/go.mod h1:YARuvh7BUWHNhzDq2OM5tzR2RiCcN2D7sapiKyCel/M= github.com/pquerna/ffjson v0.0.0-20190813045741-dac163c6c0a9/go.mod h1:YARuvh7BUWHNhzDq2OM5tzR2RiCcN2D7sapiKyCel/M=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk=
github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 h1:v7DLqVdK4VrYkVD5diGdl4sxJurKJEMnODWRJlxV9oM= github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM=
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
@@ -441,15 +410,15 @@ github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM= github.com/skeema/knownhosts v1.2.1 h1:SHWdIUa82uGZz+F+47k8SY4QhhI291cXCpopT1lK2AQ=
github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= github.com/skeema/knownhosts v1.2.1/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
@@ -489,47 +458,42 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0 h1:x8Z78aZx8cOF0+Kkazoc7lwUNMGy0LrzEMxTm4BbTxg= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 h1:aFJWCqJMNjENlcleuuOkGAPH82y0yULBScfXcIEdS24=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0/go.mod h1:62CPTSry9QZtOaSsE3tOzhx6LzDhHnXJ6xHeMNNiM6Q= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1/go.mod h1:sEGXWArGqc3tVa+ekntsN65DmVbVeW+7lTKTjZF3/Fo=
go.opentelemetry.io/contrib/propagators/autoprop v0.45.0 h1:FT/JCFzjzXgyp/aXkQeywnI/Tl8ZtKhvusVtZOokmFM= go.opentelemetry.io/contrib/propagators/autoprop v0.46.1 h1:cXTYcMjY0dsYokAuo8LbNBQxpF8VgTHdiHJJ1zlIXl4=
go.opentelemetry.io/contrib/propagators/autoprop v0.45.0/go.mod h1:L/2JIbqAmGzBvGJ3rXA+KXmWXUuUYUDZnhXeJttjJRg= go.opentelemetry.io/contrib/propagators/autoprop v0.46.1/go.mod h1:WZxgny1/6+j67B1s72PLJ4bGjidoWFzSmLNfJKVt2bo=
go.opentelemetry.io/contrib/propagators/aws v1.20.0 h1:PByDRx6xPygwFP+L3FTlOifJoCB10T2LdRBZcDYMTJw= go.opentelemetry.io/contrib/propagators/aws v1.21.1 h1:uQIQIDWb0gzyvon2ICnghpLAf9w7ADOCUiIiwCQgR2o=
go.opentelemetry.io/contrib/propagators/aws v1.20.0/go.mod h1:MPJhNHiRW57k/q+apqUJqWxs2pfrGMCZ2nhh9/2imko= go.opentelemetry.io/contrib/propagators/aws v1.21.1/go.mod h1:kCcto3ACQxm+VrkQX/NK/TkDmAd99MQhvffzyTKhzL4=
go.opentelemetry.io/contrib/propagators/b3 v1.20.0 h1:Yty9Vs4F3D6/liF1o6FNt0PvN85h/BJJ6DQKJ3nrcM0= go.opentelemetry.io/contrib/propagators/b3 v1.21.1 h1:WPYiUgmw3+b7b3sQ1bFBFAf0q+Di9dvNc3AtYfnT4RQ=
go.opentelemetry.io/contrib/propagators/b3 v1.20.0/go.mod h1:On4VgbkqYL18kbJlWsa18+cMNe6rYpBnPi1ARI/BrsU= go.opentelemetry.io/contrib/propagators/b3 v1.21.1/go.mod h1:EmzokPoSqsYMBVK4nRnhsfm5mbn8J1eDuz/U1UaQaWg=
go.opentelemetry.io/contrib/propagators/jaeger v1.20.0 h1:iVhNKkMIpzyZqxk8jkDU2n4DFTD+FbpGacvooxEvyyc= go.opentelemetry.io/contrib/propagators/jaeger v1.21.1 h1:f4beMGDKiVzg9IcX7/VuWVy+oGdjx3dNJ72YehmtY5k=
go.opentelemetry.io/contrib/propagators/jaeger v1.20.0/go.mod h1:cpSABr0cm/AH/HhbJjn+AudBVUMgZWdfN3Gb+ZqxSZc= go.opentelemetry.io/contrib/propagators/jaeger v1.21.1/go.mod h1:U9jhkEl8d1LL+QXY7q3kneJWJugiN3kZJV2OWz3hkBY=
go.opentelemetry.io/contrib/propagators/ot v1.20.0 h1:duH7mgL6VGQH7e7QEAVOFkCQXWpCb4PjTtrhdrYrJRQ= go.opentelemetry.io/contrib/propagators/ot v1.21.1 h1:3TN5vkXjKYWp0YdMcnUEC/A+pBPvqz9V3nCS2xmcurk=
go.opentelemetry.io/contrib/propagators/ot v1.20.0/go.mod h1:gijQzxOq0JLj9lyZhTvqjDddGV/zaNagpPIn+2r8CEI= go.opentelemetry.io/contrib/propagators/ot v1.21.1/go.mod h1:oy0MYCbS/b3cqUDW37wBWtlwBIsutngS++Lklpgh+fc=
go.opentelemetry.io/otel v1.19.0 h1:MuS/TNf4/j4IXsZuJegVzI1cwut7Qc00344rgH7p8bs= go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc=
go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY= go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 h1:Mne5On7VWdx7omSrSSZvM4Kw7cS7NQkOOmLcgscI51U= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.21.0 h1:cl5P5/GIfFh4t6xyruOgJP5QiA1pw4fYYdv6nc6CBWw=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0/go.mod h1:IPtUMKL4O3tH5y+iXVyAXqpAwMuzC1IrxVS81rummfE= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.21.0/go.mod h1:zgBdWWAu7oEEMC06MMKc5NLbA/1YDXV1sMpSqEeLQLg=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0 h1:3d+S281UTjM+AbF31XSOYn1qXn3BgIdWl8HNEpx08Jk= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.0 h1:tIqheXEFWAZ7O8A7m+J0aPTmpJN3YQ7qetUAdkkkKpk=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0/go.mod h1:0+KuTDyKL4gjKCF75pHOX4wuzYDUZYfAQdSu43o+Z2I= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.0/go.mod h1:nUeKExfxAQVbiVFn32YXpXZZHZ61Cc3s3Rn1pDBGAb0=
go.opentelemetry.io/otel/metric v1.19.0 h1:aTzpGtV0ar9wlV4Sna9sdJyII5jTVJEvKETPiOKwvpE= go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4=
go.opentelemetry.io/otel/metric v1.19.0/go.mod h1:L5rUsV9kM1IxCj1MmSdS+JQAcVm319EUrDVLrt7jqt8= go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM=
go.opentelemetry.io/otel/sdk v1.19.0 h1:6USY6zH+L8uMH8L3t1enZPR3WFEmSTADlqldyHtJi3o= go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8=
go.opentelemetry.io/otel/sdk v1.19.0/go.mod h1:NedEbbS4w3C6zElbLdPJKOpJQOrGUJ+GfzpjUvI0v1A= go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E=
go.opentelemetry.io/otel/trace v1.19.0 h1:DFVQmlVbfVeOuBRrwdtaehRrWiL1JoVs9CPIQ1Dzxpg= go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc=
go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo= go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ=
go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I=
go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg=
go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
@@ -540,28 +504,25 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc=
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA=
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA=
golang.org/x/image v0.5.0 h1:5JMiNunQeQw++mMOz48/ISeNu3Iweh/JaZU8ZLqHRrI= golang.org/x/image v0.10.0 h1:gXjUUtwtx5yOE0VKWq1CH4IJAClq4UGgUA3i+rpON9M=
golang.org/x/image v0.5.0/go.mod h1:FVC7BI/5Ym8R25iw5OLsgshdUBbT1h5jZTpA+mvAdZ4= golang.org/x/image v0.10.0/go.mod h1:jtrku+n79PfroUbvDdeUWMAI+heR786BofxrbiSF+J0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.3.0/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.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -572,29 +533,25 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 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.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.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.7.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.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo=
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY=
golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -603,11 +560,10 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -622,9 +578,7 @@ golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -638,26 +592,28 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.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.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-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.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.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= 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.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE=
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/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.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.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.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.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.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
@@ -672,11 +628,10 @@ golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBn
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.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.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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-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-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -690,23 +645,23 @@ google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEn
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d h1:VBu5YqKPv6XiJ199exd8Br+Aetz+o08F+PLMnwJQHAY= google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97 h1:SeZZZx0cP0fqUyA+oRzP9k7cSwJlvDFiROO72uwD6i0=
google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97/go.mod h1:t1VqOqqvce95G3hIDCT5FeO3YUc6Q4Oe24L/+rNMxRk=
google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q= google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 h1:W18sezcAYs+3tDZX4F80yctqa12jcP1PUS2gQu1zTPU=
google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4= google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97 h1:6GQBEOdGkX6MMTLT9V+TjtIRZCw9VPD5Z+yHY9wMgS0=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97/go.mod h1:v7nGkzlmW8P3n/bKmWBn2WpBjpOEx8Q6gMueudAmKfY=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU=
google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
@@ -742,31 +697,31 @@ gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
k8s.io/api v0.28.3 h1:Gj1HtbSdB4P08C8rs9AR94MfSGpRhJgsS+GF9V26xMM= k8s.io/api v0.29.0 h1:NiCdQMY1QOp1H8lfRyeEf8eOwV6+0xA6XEE44ohDX2A=
k8s.io/api v0.28.3/go.mod h1:MRCV/jr1dW87/qJnZ57U5Pak65LGmQVkKTzf3AtKFHc= k8s.io/api v0.29.0/go.mod h1:sdVmXoz2Bo/cb77Pxi71IPTSErEW32xa4aXwKH7gfBA=
k8s.io/apiextensions-apiserver v0.28.3 h1:Od7DEnhXHnHPZG+W9I97/fSQkVpVPQx2diy+2EtmY08= k8s.io/apiextensions-apiserver v0.29.0 h1:0VuspFG7Hj+SxyF/Z/2T0uFbI5gb5LRgEyUVE3Q4lV0=
k8s.io/apiextensions-apiserver v0.28.3/go.mod h1:NE1XJZ4On0hS11aWWJUTNkmVB03j9LM7gJSisbRt8Lc= k8s.io/apiextensions-apiserver v0.29.0/go.mod h1:TKmpy3bTS0mr9pylH0nOt/QzQRrW7/h7yLdRForMZwc=
k8s.io/apimachinery v0.28.3 h1:B1wYx8txOaCQG0HmYF6nbpU8dg6HvA06x5tEffvOe7A= k8s.io/apimachinery v0.29.0 h1:+ACVktwyicPz0oc6MTMLwa2Pw3ouLAfAon1wPLtG48o=
k8s.io/apimachinery v0.28.3/go.mod h1:uQTKmIqs+rAYaq+DFaoD2X7pcjLOqbQX2AOiO0nIpb8= k8s.io/apimachinery v0.29.0/go.mod h1:eVBxQ/cwiJxH58eK/jd/vAk4mrxmVlnpBH5J2GbMeis=
k8s.io/client-go v0.28.3 h1:2OqNb72ZuTZPKCl+4gTKvqao0AMOl9f3o2ijbAj3LI4= k8s.io/client-go v0.29.0 h1:KmlDtFcrdUzOYrBhXHgKw5ycWzc3ryPX5mQe0SkG3y8=
k8s.io/client-go v0.28.3/go.mod h1:LTykbBp9gsA7SwqirlCXBWtK0guzfhpoW4qSm7i9dxo= k8s.io/client-go v0.29.0/go.mod h1:yLkXH4HKMAywcrD82KMSmfYg2DlE8mepPR4JGSo5n38=
k8s.io/component-base v0.28.3 h1:rDy68eHKxq/80RiMb2Ld/tbH8uAE75JdCqJyi6lXMzI= k8s.io/component-base v0.29.0 h1:T7rjd5wvLnPBV1vC4zWd/iWRbV8Mdxs+nGaoaFzGw3s=
k8s.io/component-base v0.28.3/go.mod h1:fDJ6vpVNSk6cRo5wmDa6eKIG7UlIQkaFmZN2fYgIUD8= k8s.io/component-base v0.29.0/go.mod h1:sADonFTQ9Zc9yFLghpDpmNXEdHyQmFIGbiuZbqAXQ1M=
k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0=
k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo=
k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ= k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780=
k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM= k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
k8s.io/metrics v0.28.3 h1:w2s3kVi7HulXqCVDFkF4hN/OsL1tXTTb4Biif995h/g= k8s.io/metrics v0.29.0 h1:a6dWcNM+EEowMzMZ8trka6wZtSRIfEA/9oLjuhBksGc=
k8s.io/metrics v0.28.3/go.mod h1:OZZ23AHFojPzU6r3xoHGRUcV3I9pauLua+07sAUbwLc= k8s.io/metrics v0.29.0/go.mod h1:UCuTT4dC/x/x6ODSk87IWIZQnuAfcwxOjb1gjWJdjMA=
k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk= k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI=
k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4=
sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0=
sigs.k8s.io/controller-tools v0.13.0 h1:NfrvuZ4bxyolhDBt/rCZhDnx3M2hzlhgo5n3Iv2RykI= sigs.k8s.io/controller-tools v0.14.0 h1:rnNoCC5wSXlrNoBKKzL70LNJKIQKEzT6lloG6/LF73A=
sigs.k8s.io/controller-tools v0.13.0/go.mod h1:5vw3En2NazbejQGCeWKRrE7q4P+CW8/klfVqP8QZkgA= sigs.k8s.io/controller-tools v0.14.0/go.mod h1:TV7uOtNNnnR72SpzhStvPkoS/U5ir0nMudrkrC4M9Sc=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
+10 -8
View File
@@ -34,11 +34,13 @@ export KUBEBUILDER_ASSETS
# The executor unit test only works with NodePort-type services for # The executor unit test only works with NodePort-type services for
# now. So disable it for our travis ci tests except some partial tests. # now. So disable it for our travis ci tests except some partial tests.
for d in $(go list ./... | grep -v '/vendor/' | grep -v 'examples/go' | grep -v 'benchmark'); do # for d in $(go list ./... | grep -v '/vendor/' | grep -v 'examples/go' | grep -v 'benchmark'); do
echo "Running tests in $d" # echo "Running tests in $d"
go test -race -v -coverprofile=profile.out -covermode=atomic $d # go test -race -v -coverprofile=profile.out -covermode=atomic $d
if [ -f profile.out ]; then # if [ -f profile.out ]; then
cat profile.out >> coverage.txt # cat profile.out >> coverage.txt
rm profile.out # rm profile.out
fi # fi
done # done
echo "Running tests ..."
go test -race -v -coverprofile=coverage.txt -covermode=atomic --coverpkg=./... ./...
-4
View File
@@ -80,10 +80,6 @@ const (
PodInfoMount = "/etc/podinfo" PodInfoMount = "/etc/podinfo"
) )
const (
MessageQueueTypeKafka = "kafka"
)
const ( const (
// FunctionReferenceFunctionName means that the function // FunctionReferenceFunctionName means that the function
// reference is simply by function name. // reference is simply by function name.
+10 -1
View File
@@ -47,7 +47,16 @@ var _ webhook.Defaulter = &Package{}
func (r *Package) Default() { func (r *Package) Default() {
packagelog.Debug("default", zap.String("name", r.Name)) packagelog.Debug("default", zap.String("name", r.Name))
if r.Status.BuildStatus == "" { if r.Status.BuildStatus == "" {
r.Status.BuildStatus = BuildStatusPending if !r.Spec.Deployment.IsEmpty() {
// deployment package exists
r.Status.BuildStatus = BuildStatusNone
} else if !r.Spec.Source.IsEmpty() {
// source package with no deployment is a pending build
r.Status.BuildStatus = BuildStatusPending
} else {
r.Status.BuildStatus = BuildStatusFailed // empty package
r.Status.BuildLog = "Both source and deployment are empty"
}
} }
} }
+1 -1
View File
@@ -751,7 +751,7 @@ type (
// +optional // +optional
FunctionReference FunctionReference `json:"functionref"` FunctionReference FunctionReference `json:"functionref"`
// Type of message queue (NATS, Kafka, AzureQueue) // Type of message queue
// +optional // +optional
MessageQueueType MessageQueueType `json:"messageQueueType"` MessageQueueType MessageQueueType `json:"messageQueueType"`
+3 -3
View File
@@ -337,7 +337,7 @@ func (es ExecutionStrategy) Validate() error {
} }
// TODO Add validation warning // TODO Add validation warning
//if es.SpecializationTimeout < 120 { // if es.SpecializationTimeout < 120 {
// result = multierror.Append(result, MakeValidationErr(ErrorInvalidValue, "ExecutionStrategy.SpecializationTimeout", es.SpecializationTimeout, "SpecializationTimeout must be a value equal to or greater than 120")) // result = multierror.Append(result, MakeValidationErr(ErrorInvalidValue, "ExecutionStrategy.SpecializationTimeout", es.SpecializationTimeout, "SpecializationTimeout must be a value equal to or greater than 120"))
//} //}
} }
@@ -523,11 +523,11 @@ func (spec MessageQueueTriggerSpec) Validate() error {
if !validator.IsValidMessageQueue((string)(spec.MessageQueueType), spec.MqtKind) { if !validator.IsValidMessageQueue((string)(spec.MessageQueueType), spec.MqtKind) {
result = multierror.Append(result, MakeValidationErr(ErrorUnsupportedType, "MessageQueueTriggerSpec.MessageQueueType", spec.MessageQueueType, "not a supported message queue type")) result = multierror.Append(result, MakeValidationErr(ErrorUnsupportedType, "MessageQueueTriggerSpec.MessageQueueType", spec.MessageQueueType, "not a supported message queue type"))
} else { } else {
if !validator.IsValidTopic((string)(spec.MessageQueueType), spec.Topic, spec.MqtKind) { if !validator.IsValidTopic(spec.MqtKind) {
result = multierror.Append(result, MakeValidationErr(ErrorInvalidValue, "MessageQueueTriggerSpec.Topic", spec.Topic, "not a valid topic")) result = multierror.Append(result, MakeValidationErr(ErrorInvalidValue, "MessageQueueTriggerSpec.Topic", spec.Topic, "not a valid topic"))
} }
if len(spec.ResponseTopic) > 0 && !validator.IsValidTopic((string)(spec.MessageQueueType), spec.ResponseTopic, spec.MqtKind) { if len(spec.ResponseTopic) > 0 && !validator.IsValidTopic(spec.MqtKind) {
result = multierror.Append(result, MakeValidationErr(ErrorInvalidValue, "MessageQueueTriggerSpec.ResponseTopic", spec.ResponseTopic, "not a valid topic")) result = multierror.Append(result, MakeValidationErr(ErrorInvalidValue, "MessageQueueTriggerSpec.ResponseTopic", spec.ResponseTopic, "not a valid topic"))
} }
} }
@@ -312,7 +312,7 @@ func (MessageQueueTriggerList) SwaggerDoc() map[string]string {
var map_MessageQueueTriggerSpec = map[string]string{ var map_MessageQueueTriggerSpec = map[string]string{
"": "MessageQueueTriggerSpec defines a binding from a topic in a message queue to a function.", "": "MessageQueueTriggerSpec defines a binding from a topic in a message queue to a function.",
"functionref": "The reference to a function for message queue trigger to invoke with when receiving messages from subscribed topic.", "functionref": "The reference to a function for message queue trigger to invoke with when receiving messages from subscribed topic.",
"messageQueueType": "Type of message queue (NATS, Kafka, AzureQueue)", "messageQueueType": "Type of message queue",
"topic": "Subscribed topic", "topic": "Subscribed topic",
"respTopic": "Topic for message queue trigger to sent response from function.", "respTopic": "Topic for message queue trigger to sent response from function.",
"errorTopic": "Topic to collect error response sent from function", "errorTopic": "Topic to collect error response sent from function",
+8 -4
View File
@@ -35,25 +35,29 @@ import (
) )
type ( type (
Client struct { ClientInterface interface {
Build(context.Context, *builder.PackageBuildRequest) (*builder.PackageBuildResponse, error)
}
client struct {
logger *zap.Logger logger *zap.Logger
url string url string
httpClient *retryablehttp.Client httpClient *retryablehttp.Client
} }
) )
func MakeClient(logger *zap.Logger, builderUrl string) *Client { func MakeClient(logger *zap.Logger, builderUrl string) ClientInterface {
hc := retryablehttp.NewClient() hc := retryablehttp.NewClient()
hc.ErrorHandler = retryablehttp.PassthroughErrorHandler hc.ErrorHandler = retryablehttp.PassthroughErrorHandler
hc.HTTPClient.Transport = otelhttp.NewTransport(hc.HTTPClient.Transport) hc.HTTPClient.Transport = otelhttp.NewTransport(hc.HTTPClient.Transport)
return &Client{ return &client{
logger: logger.Named("builder_client"), logger: logger.Named("builder_client"),
url: strings.TrimSuffix(builderUrl, "/"), url: strings.TrimSuffix(builderUrl, "/"),
httpClient: hc, httpClient: hc,
} }
} }
func (c *Client) Build(ctx context.Context, req *builder.PackageBuildRequest) (*builder.PackageBuildResponse, error) { func (c *client) Build(ctx context.Context, req *builder.PackageBuildRequest) (*builder.PackageBuildResponse, error) {
logger := otelUtils.LoggerWithTraceID(ctx, c.logger) logger := otelUtils.LoggerWithTraceID(ctx, c.logger)
body, err := json.Marshal(req) body, err := json.Marshal(req)
+5 -4
View File
@@ -29,10 +29,11 @@ import (
"github.com/fission/fission/pkg/executor/util" "github.com/fission/fission/pkg/executor/util"
fetcherConfig "github.com/fission/fission/pkg/fetcher/config" fetcherConfig "github.com/fission/fission/pkg/fetcher/config"
"github.com/fission/fission/pkg/utils" "github.com/fission/fission/pkg/utils"
"github.com/fission/fission/pkg/utils/manager"
) )
// Start the buildermgr service. // Start the buildermgr service.
func Start(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, storageSvcUrl string) error { func Start(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, mgr manager.Interface, storageSvcUrl string) error {
bmLogger := logger.Named("builder_manager") bmLogger := logger.Named("builder_manager")
fissionClient, err := clientGen.GetFissionClient() fissionClient, err := clientGen.GetFissionClient()
@@ -44,7 +45,7 @@ func Start(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *
return errors.Wrap(err, "failed to get kubernetes client") return errors.Wrap(err, "failed to get kubernetes client")
} }
err = crd.WaitForCRDs(ctx, logger, fissionClient) err = crd.WaitForFunctionCRDs(ctx, logger, fissionClient)
if err != nil { if err != nil {
return errors.Wrap(err, "error waiting for CRDs") return errors.Wrap(err, "error waiting for CRDs")
} }
@@ -60,16 +61,16 @@ func Start(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *
} }
envWatcher, err := makeEnvironmentWatcher(ctx, bmLogger, fissionClient, kubernetesClient, fetcherConfig, podSpecPatch) envWatcher, err := makeEnvironmentWatcher(ctx, bmLogger, fissionClient, kubernetesClient, fetcherConfig, podSpecPatch)
envWatcher.Run(ctx)
if err != nil { if err != nil {
return err return err
} }
envWatcher.Run(ctx, mgr)
pkgWatcher := makePackageWatcher(bmLogger, fissionClient, pkgWatcher := makePackageWatcher(bmLogger, fissionClient,
kubernetesClient, storageSvcUrl, kubernetesClient, storageSvcUrl,
utils.GetK8sInformersForNamespaces(kubernetesClient, time.Minute*30, fv1.Pods), utils.GetK8sInformersForNamespaces(kubernetesClient, time.Minute*30, fv1.Pods),
utils.GetInformersForNamespaces(fissionClient, time.Minute*30, fv1.PackagesResource)) utils.GetInformersForNamespaces(fissionClient, time.Minute*30, fv1.PackagesResource))
err = pkgWatcher.Run(ctx) err = pkgWatcher.Run(ctx, mgr)
if err != nil { if err != nil {
return err return err
} }
+4 -5
View File
@@ -39,6 +39,7 @@ import (
fetcherConfig "github.com/fission/fission/pkg/fetcher/config" fetcherConfig "github.com/fission/fission/pkg/fetcher/config"
"github.com/fission/fission/pkg/generated/clientset/versioned" "github.com/fission/fission/pkg/generated/clientset/versioned"
"github.com/fission/fission/pkg/utils" "github.com/fission/fission/pkg/utils"
"github.com/fission/fission/pkg/utils/manager"
) )
const ( const (
@@ -131,10 +132,8 @@ func (envw *environmentWatcher) getLabels(envName string, envNamespace string, e
} }
} }
func (envw *environmentWatcher) Run(ctx context.Context) { func (envw *environmentWatcher) Run(ctx context.Context, mgr manager.Interface) {
for _, informer := range envw.envWatchInformer { mgr.AddInformers(ctx, envw.envWatchInformer)
go informer.Run(ctx.Done())
}
} }
func (envw *environmentWatcher) EnvWatchEventHandlers(ctx context.Context) error { func (envw *environmentWatcher) EnvWatchEventHandlers(ctx context.Context) error {
@@ -164,7 +163,7 @@ func (envw *environmentWatcher) EnvWatchEventHandlers(ctx context.Context) error
} }
func (envw *environmentWatcher) AddUpdateBuilder(ctx context.Context, env *fv1.Environment) { func (envw *environmentWatcher) AddUpdateBuilder(ctx context.Context, env *fv1.Environment) {
//builder is not supported with v1 interface and ignore env without builder image // builder is not supported with v1 interface and ignore env without builder image
if env.Spec.Version != 1 && len(env.Spec.Builder.Image) != 0 { if env.Spec.Version != 1 && len(env.Spec.Builder.Image) != 0 {
if _, ok := envw.cache[crd.CacheKeyUIDFromMeta(&env.ObjectMeta)]; !ok { if _, ok := envw.cache[crd.CacheKeyUIDFromMeta(&env.ObjectMeta)]; !ok {
builderInfo, err := envw.createBuilder(ctx, env, envw.nsResolver.GetBuilderNS(env.ObjectMeta.Namespace)) builderInfo, err := envw.createBuilder(ctx, env, envw.nsResolver.GetBuilderNS(env.ObjectMeta.Namespace))
+44 -62
View File
@@ -30,8 +30,10 @@ import (
fv1 "github.com/fission/fission/pkg/apis/core/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1"
"github.com/fission/fission/pkg/cache" "github.com/fission/fission/pkg/cache"
"github.com/fission/fission/pkg/crd"
"github.com/fission/fission/pkg/generated/clientset/versioned" "github.com/fission/fission/pkg/generated/clientset/versioned"
"github.com/fission/fission/pkg/utils" "github.com/fission/fission/pkg/utils"
"github.com/fission/fission/pkg/utils/manager"
"github.com/fission/fission/pkg/utils/metrics" "github.com/fission/fission/pkg/utils/metrics"
) )
@@ -44,7 +46,7 @@ type (
podInformer map[string]k8sCache.SharedIndexInformer podInformer map[string]k8sCache.SharedIndexInformer
pkgInformer map[string]k8sCache.SharedIndexInformer pkgInformer map[string]k8sCache.SharedIndexInformer
storageSvcUrl string storageSvcUrl string
buildCache *cache.Cache buildCache *cache.Cache[crd.CacheKeyUR, *fv1.Package]
} }
) )
@@ -59,13 +61,13 @@ func makePackageWatcher(logger *zap.Logger, fissionClient versioned.Interface, k
podInformer: podInformer, podInformer: podInformer,
pkgInformer: pkgInformer, pkgInformer: pkgInformer,
storageSvcUrl: storageSvcUrl, storageSvcUrl: storageSvcUrl,
buildCache: cache.MakeCache(0, 0), buildCache: cache.MakeCache[crd.CacheKeyUR, *fv1.Package](0, 0),
} }
return pkgw return pkgw
} }
func (pkgw *packageWatcher) buildCacheKey(obj metav1.ObjectMeta) string { func (pkgw *packageWatcher) buildCacheKey(obj metav1.ObjectMeta) crd.CacheKeyUR {
return fmt.Sprintf("%s-%s-%s", obj.Namespace, obj.Name, obj.ResourceVersion) return crd.CacheKeyURFromMeta(&obj)
} }
func (pkgw *packageWatcher) buildWithCache(ctx context.Context, srcpkg *fv1.Package) { func (pkgw *packageWatcher) buildWithCache(ctx context.Context, srcpkg *fv1.Package) {
@@ -89,33 +91,33 @@ func (pkgw *packageWatcher) buildWithCache(ctx context.Context, srcpkg *fv1.Pack
// 6. Update package status to succeed state // 6. Update package status to succeed state
// *. Update package status to failed state,if any one of steps above failed/time out // *. Update package status to failed state,if any one of steps above failed/time out
func (pkgw *packageWatcher) build(ctx context.Context, srcpkg *fv1.Package) { func (pkgw *packageWatcher) build(ctx context.Context, srcpkg *fv1.Package) {
key := pkgw.buildCacheKey(srcpkg.ObjectMeta)
logger := pkgw.logger.With(zap.String("package", srcpkg.Name), zap.String("namespace", srcpkg.Namespace), zap.String("resource_version", srcpkg.ResourceVersion), zap.String("key", key.String()))
defer func() { defer func() {
key := pkgw.buildCacheKey(srcpkg.ObjectMeta)
err := pkgw.buildCache.Delete(key) err := pkgw.buildCache.Delete(key)
if err != nil { if err != nil {
pkgw.logger.Error("error deleting key from cache", zap.String("key", key), zap.Error(err)) logger.Error("error deleting key from cache", zap.Any("key", key), zap.Error(err))
} }
}() }()
pkgw.logger.Info("starting build for package", zap.String("package_name", srcpkg.ObjectMeta.Name), zap.String("resource_version", srcpkg.ObjectMeta.ResourceVersion)) logger.Info("starting build for package")
pkg, err := updatePackage(ctx, pkgw.logger, pkgw.fissionClient, srcpkg, fv1.BuildStatusRunning, "", nil) pkg, err := updatePackage(ctx, logger, pkgw.fissionClient, srcpkg, fv1.BuildStatusRunning, "", nil)
if err != nil { if err != nil {
pkgw.logger.Error("error setting package pending state", zap.Error(err)) logger.Error("error setting package pending state", zap.Error(err))
return return
} }
env, err := pkgw.fissionClient.CoreV1().Environments(pkg.Spec.Environment.Namespace).Get(ctx, pkg.Spec.Environment.Name, metav1.GetOptions{}) env, err := pkgw.fissionClient.CoreV1().Environments(pkg.Spec.Environment.Namespace).Get(ctx, pkg.Spec.Environment.Name, metav1.GetOptions{})
if k8serrors.IsNotFound(err) { if k8serrors.IsNotFound(err) {
e := "environment does not exist" e := "environment does not exist"
pkgw.logger.Error(e, zap.String("environment", pkg.Spec.Environment.Name)) logger.Error(e, zap.String("environment", pkg.Spec.Environment.Name))
_, er := updatePackage(ctx, pkgw.logger, pkgw.fissionClient, pkg, _, er := updatePackage(ctx, logger, pkgw.fissionClient, pkg,
fv1.BuildStatusFailed, fmt.Sprintf("%s: %q", e, pkg.Spec.Environment.Name), nil) fv1.BuildStatusFailed, fmt.Sprintf("%s: %q", e, pkg.Spec.Environment.Name), nil)
if er != nil { if er != nil {
pkgw.logger.Error( logger.Error(
"error updating package", "error updating package",
zap.String("package_name", pkg.ObjectMeta.Name),
zap.String("resource_version", pkg.ObjectMeta.ResourceVersion),
zap.Error(er), zap.Error(er),
) )
} }
@@ -126,7 +128,9 @@ func (pkgw *packageWatcher) build(ctx context.Context, srcpkg *fv1.Package) {
healthCheckBackOff := utils.NewDefaultBackOff() healthCheckBackOff := utils.NewDefaultBackOff()
builderNs := pkgw.nsResolver.GetBuilderNS(env.ObjectMeta.Namespace) builderNs := pkgw.nsResolver.GetBuilderNS(env.ObjectMeta.Namespace)
//if err != nil { logger = logger.With(zap.String("environment", env.Name), zap.String("builder_namespace", builderNs), zap.String("environment_namespace", env.Namespace))
// if err != nil {
// pkgw.logger.Error("Unable to create BackOff for Health Check", zap.Error(err)) // pkgw.logger.Error("Unable to create BackOff for Health Check", zap.Error(err))
//} //}
// Do health check for environment builder pod // Do health check for environment builder pod
@@ -135,12 +139,12 @@ func (pkgw *packageWatcher) build(ctx context.Context, srcpkg *fv1.Package) {
// iterate all available environment builders. // iterate all available environment builders.
items := pkgw.podInformer[builderNs].GetStore().List() items := pkgw.podInformer[builderNs].GetStore().List()
if err != nil { if err != nil {
pkgw.logger.Error("error retrieving pod information for environment", zap.Error(err), zap.String("environment", env.ObjectMeta.Name)) logger.Error("error retrieving pod information for environment", zap.Error(err))
return return
} }
if len(items) == 0 { if len(items) == 0 {
pkgw.logger.Info("builder pod does not exist for environment, will retry again later", zap.String("environment", pkg.Spec.Environment.Name)) logger.Info("builder pod does not exist for environment, will retry again later")
time.Sleep(healthCheckBackOff.GetCurrentBackoffDuration()) time.Sleep(healthCheckBackOff.GetCurrentBackoffDuration())
continue continue
} }
@@ -164,27 +168,22 @@ func (pkgw *packageWatcher) build(ctx context.Context, srcpkg *fv1.Package) {
} }
if !podIsReady { if !podIsReady {
pkgw.logger.Info("builder pod is not ready for environment, will retry again later", zap.String("environment", pkg.Spec.Environment.Name)) logger.Info("builder pod is not ready for environment, will retry again later")
time.Sleep(healthCheckBackOff.GetCurrentBackoffDuration()) time.Sleep(healthCheckBackOff.GetCurrentBackoffDuration())
break break
} }
uploadResp, buildLogs, err := buildPackage(ctx, pkgw.logger, pkgw.fissionClient, builderNs, pkgw.storageSvcUrl, pkg) uploadResp, buildLogs, err := buildPackage(ctx, pkgw.logger, pkgw.fissionClient, builderNs, pkgw.storageSvcUrl, pkg)
if err != nil { if err != nil {
pkgw.logger.Error("error building package", zap.Error(err), zap.String("package_name", pkg.ObjectMeta.Name)) logger.Error("error building package", zap.Error(err))
_, er := updatePackage(ctx, pkgw.logger, pkgw.fissionClient, pkg, fv1.BuildStatusFailed, buildLogs, nil) _, er := updatePackage(ctx, logger, pkgw.fissionClient, pkg, fv1.BuildStatusFailed, buildLogs, nil)
if er != nil { if er != nil {
pkgw.logger.Error( logger.Error("error updating package", zap.Error(er))
"error updating package",
zap.String("package_name", pkg.ObjectMeta.Name),
zap.String("resource_version", pkg.ObjectMeta.ResourceVersion),
zap.Error(er),
)
} }
return return
} }
pkgw.logger.Info("starting package info update", zap.String("package_name", pkg.ObjectMeta.Name)) logger.Info("starting package info update")
fnList, err := pkgw.fissionClient.CoreV1(). fnList, err := pkgw.fissionClient.CoreV1().
Functions(pkg.Namespace).List(ctx, metav1.ListOptions{}) Functions(pkg.Namespace).List(ctx, metav1.ListOptions{})
@@ -196,8 +195,6 @@ func (pkgw *packageWatcher) build(ctx context.Context, srcpkg *fv1.Package) {
if er != nil { if er != nil {
pkgw.logger.Error( pkgw.logger.Error(
"error updating package", "error updating package",
zap.String("package_name", pkg.ObjectMeta.Name),
zap.String("resource_version", pkg.ObjectMeta.ResourceVersion),
zap.Error(er), zap.Error(er),
) )
} }
@@ -214,57 +211,41 @@ func (pkgw *packageWatcher) build(ctx context.Context, srcpkg *fv1.Package) {
_, err = pkgw.fissionClient.CoreV1().Functions(fn.ObjectMeta.Namespace).Update(ctx, &fn, metav1.UpdateOptions{}) _, err = pkgw.fissionClient.CoreV1().Functions(fn.ObjectMeta.Namespace).Update(ctx, &fn, metav1.UpdateOptions{})
if err != nil { if err != nil {
e := "error updating function package resource version" e := "error updating function package resource version"
pkgw.logger.Error(e, zap.Error(err)) logger.Error(e, zap.Error(err))
buildLogs += fmt.Sprintf("%s: %v\n", e, err) buildLogs += fmt.Sprintf("%s: %v\n", e, err)
_, er := updatePackage(ctx, pkgw.logger, pkgw.fissionClient, pkg, fv1.BuildStatusFailed, buildLogs, nil) _, er := updatePackage(ctx, logger, pkgw.fissionClient, pkg, fv1.BuildStatusFailed, buildLogs, nil)
if er != nil { if er != nil {
pkgw.logger.Error( logger.Error("error updating package", zap.Error(er))
"error updating package",
zap.String("package_name", pkg.ObjectMeta.Name),
zap.String("resource_version", pkg.ObjectMeta.ResourceVersion),
zap.Error(er),
)
} }
return return
} }
} }
} }
_, err = updatePackage(ctx, pkgw.logger, pkgw.fissionClient, pkg, _, err = updatePackage(ctx, logger, pkgw.fissionClient, pkg,
fv1.BuildStatusSucceeded, buildLogs, uploadResp) fv1.BuildStatusSucceeded, buildLogs, uploadResp)
if err != nil { if err != nil {
pkgw.logger.Error("error updating package info", zap.Error(err), zap.String("package_name", pkg.ObjectMeta.Name)) logger.Error("error updating package info", zap.Error(err))
_, er := updatePackage(ctx, pkgw.logger, pkgw.fissionClient, pkg, fv1.BuildStatusFailed, buildLogs, nil) _, er := updatePackage(ctx, logger, pkgw.fissionClient, pkg, fv1.BuildStatusFailed, buildLogs, nil)
if er != nil { if er != nil {
pkgw.logger.Error( logger.Error("error updating package", zap.Error(er))
"error updating package",
zap.String("package_name", pkg.ObjectMeta.Name),
zap.String("resource_version", pkg.ObjectMeta.ResourceVersion),
zap.Error(er),
)
} }
return return
} }
pkgw.logger.Info("completed package build request", zap.String("package_name", pkg.ObjectMeta.Name)) logger.Info("completed package build request")
return return
} }
time.Sleep(healthCheckBackOff.GetNext()) time.Sleep(healthCheckBackOff.GetNext())
} }
// build timeout // build timeout
_, err = updatePackage(ctx, pkgw.logger, pkgw.fissionClient, pkg, _, err = updatePackage(ctx, logger, pkgw.fissionClient, pkg,
fv1.BuildStatusFailed, "Build timeout due to environment builder not ready", nil) fv1.BuildStatusFailed, "Build timeout due to environment builder not ready", nil)
if err != nil { if err != nil {
pkgw.logger.Error( logger.Error("error updating package", zap.Error(err))
"error updating package",
zap.String("package_name", pkg.ObjectMeta.Name),
zap.String("resource_version", pkg.ObjectMeta.ResourceVersion),
zap.Error(err),
)
} }
pkgw.logger.Error("max retries exceeded in building source package, timeout due to environment builder not ready", logger.Error("max retries exceeded in building source package, timeout due to environment builder not ready")
zap.String("package", fmt.Sprintf("%s.%s", pkg.ObjectMeta.Name, pkg.ObjectMeta.Namespace)))
} }
func (pkgw *packageWatcher) packageInformerHandler(ctx context.Context) k8sCache.ResourceEventHandlerFuncs { func (pkgw *packageWatcher) packageInformerHandler(ctx context.Context) k8sCache.ResourceEventHandlerFuncs {
@@ -308,19 +289,20 @@ func (pkgw *packageWatcher) packageInformerHandler(ctx context.Context) k8sCache
} }
} }
func (pkgw *packageWatcher) Run(ctx context.Context) error { func (pkgw *packageWatcher) Run(ctx context.Context, mgr manager.Interface) error {
go metrics.ServeMetrics(ctx, "buildermgr", pkgw.logger)
for _, podInformer := range pkgw.podInformer { mgr.Add(ctx, func(ctx context.Context) {
go podInformer.Run(ctx.Done()) metrics.ServeMetrics(ctx, "buildermgr", pkgw.logger, mgr)
} })
mgr.AddInformers(ctx, pkgw.podInformer)
for _, pkgInformer := range pkgw.pkgInformer { for _, pkgInformer := range pkgw.pkgInformer {
_, err := pkgInformer.AddEventHandler(pkgw.packageInformerHandler(ctx)) _, err := pkgInformer.AddEventHandler(pkgw.packageInformerHandler(ctx))
if err != nil { if err != nil {
pkgw.logger.Fatal("error adding package informer handler", zap.Error(err)) pkgw.logger.Fatal("error adding package informer handler", zap.Error(err))
return err return err
} }
go pkgInformer.Run(ctx.Done())
} }
mgr.AddInformers(ctx, pkgw.pkgInformer)
return nil return nil
} }
+36 -36
View File
@@ -34,33 +34,33 @@ const (
) )
type ( type (
Value struct { Value[V any] struct {
ctime time.Time ctime time.Time
atime time.Time atime time.Time
value interface{} value V
} }
Cache struct { Cache[K comparable, V any] struct {
cache map[interface{}]*Value cache map[K]*Value[V]
ctimeExpiry time.Duration ctimeExpiry time.Duration
atimeExpiry time.Duration atimeExpiry time.Duration
requestChannel chan *request requestChannel chan *request[K, V]
} }
request struct { request[K comparable, V any] struct {
requestType requestType
key interface{} key K
value interface{} value V
responseChannel chan *response responseChannel chan *response[K, V]
} }
response struct { response[K comparable, V any] struct {
error error
existingValue interface{} existingValue V
mapCopy map[interface{}]interface{} mapCopy map[K]V
value interface{} value V
} }
) )
func (c *Cache) IsOld(v *Value) bool { func (c *Cache[K, V]) IsOld(v *Value[V]) bool {
if (c.ctimeExpiry != time.Duration(0)) && (time.Since(v.ctime) > c.ctimeExpiry) { if (c.ctimeExpiry != time.Duration(0)) && (time.Since(v.ctime) > c.ctimeExpiry) {
return true return true
} }
@@ -72,12 +72,12 @@ func (c *Cache) IsOld(v *Value) bool {
return false return false
} }
func MakeCache(ctimeExpiry, atimeExpiry time.Duration) *Cache { func MakeCache[K comparable, V any](ctimeExpiry, atimeExpiry time.Duration) *Cache[K, V] {
c := &Cache{ c := &Cache[K, V]{
cache: make(map[interface{}]*Value), cache: make(map[K]*Value[V]),
ctimeExpiry: ctimeExpiry, ctimeExpiry: ctimeExpiry,
atimeExpiry: atimeExpiry, atimeExpiry: atimeExpiry,
requestChannel: make(chan *request), requestChannel: make(chan *request[K, V]),
} }
go c.service() go c.service()
if ctimeExpiry != time.Duration(0) || atimeExpiry != time.Duration(0) { if ctimeExpiry != time.Duration(0) || atimeExpiry != time.Duration(0) {
@@ -86,10 +86,10 @@ func MakeCache(ctimeExpiry, atimeExpiry time.Duration) *Cache {
return c return c
} }
func (c *Cache) service() { func (c *Cache[K, V]) service() {
for { for {
req := <-c.requestChannel req := <-c.requestChannel
resp := &response{} resp := &response[K, V]{}
switch req.requestType { switch req.requestType {
case GET: case GET:
val, ok := c.cache[req.key] val, ok := c.cache[req.key]
@@ -115,7 +115,7 @@ func (c *Cache) service() {
resp.existingValue = val.value resp.existingValue = val.value
resp.error = ferror.MakeError(ferror.ErrorNameExists, "key already exists") resp.error = ferror.MakeError(ferror.ErrorNameExists, "key already exists")
} else { } else {
c.cache[req.key] = &Value{ c.cache[req.key] = &Value[V]{
value: req.value, value: req.value,
ctime: now, ctime: now,
atime: now, atime: now,
@@ -133,7 +133,7 @@ func (c *Cache) service() {
} }
// no response // no response
case COPY: case COPY:
resp.mapCopy = make(map[interface{}]interface{}) resp.mapCopy = make(map[K]V)
for k, v := range c.cache { for k, v := range c.cache {
resp.mapCopy[k] = v.value resp.mapCopy[k] = v.value
} }
@@ -146,9 +146,9 @@ func (c *Cache) service() {
} }
} }
func (c *Cache) Get(key interface{}) (interface{}, error) { func (c *Cache[K, V]) Get(key K) (V, error) {
respChannel := make(chan *response) respChannel := make(chan *response[K, V])
c.requestChannel <- &request{ c.requestChannel <- &request[K, V]{
requestType: GET, requestType: GET,
key: key, key: key,
responseChannel: respChannel, responseChannel: respChannel,
@@ -159,9 +159,9 @@ func (c *Cache) Get(key interface{}) (interface{}, error) {
// if key exists in the cache, the new value is NOT set; instead an // if key exists in the cache, the new value is NOT set; instead an
// error and the old value are returned // error and the old value are returned
func (c *Cache) Set(key interface{}, value interface{}) (interface{}, error) { func (c *Cache[K, V]) Set(key K, value V) (V, error) {
respChannel := make(chan *response) respChannel := make(chan *response[K, V])
c.requestChannel <- &request{ c.requestChannel <- &request[K, V]{
requestType: SET, requestType: SET,
key: key, key: key,
value: value, value: value,
@@ -171,9 +171,9 @@ func (c *Cache) Set(key interface{}, value interface{}) (interface{}, error) {
return resp.existingValue, resp.error return resp.existingValue, resp.error
} }
func (c *Cache) Delete(key interface{}) error { func (c *Cache[K, V]) Delete(key K) error {
respChannel := make(chan *response) respChannel := make(chan *response[K, V])
c.requestChannel <- &request{ c.requestChannel <- &request[K, V]{
requestType: DELETE, requestType: DELETE,
key: key, key: key,
responseChannel: respChannel, responseChannel: respChannel,
@@ -182,9 +182,9 @@ func (c *Cache) Delete(key interface{}) error {
return resp.error return resp.error
} }
func (c *Cache) Copy() map[interface{}]interface{} { func (c *Cache[K, V]) Copy() map[K]V {
respChannel := make(chan *response) respChannel := make(chan *response[K, V])
c.requestChannel <- &request{ c.requestChannel <- &request[K, V]{
requestType: COPY, requestType: COPY,
responseChannel: respChannel, responseChannel: respChannel,
} }
@@ -192,10 +192,10 @@ func (c *Cache) Copy() map[interface{}]interface{} {
return resp.mapCopy return resp.mapCopy
} }
func (c *Cache) expiryService() { func (c *Cache[K, V]) expiryService() {
for { for {
time.Sleep(time.Minute) time.Sleep(time.Minute)
c.requestChannel <- &request{ c.requestChannel <- &request[K, V]{
requestType: EXPIRE, requestType: EXPIRE,
} }
} }
+1 -1
View File
@@ -29,7 +29,7 @@ func checkErr(err error) {
} }
func TestCache(t *testing.T) { func TestCache(t *testing.T) {
c := MakeCache(100*time.Millisecond, 100*time.Millisecond) c := MakeCache[string, string](100*time.Millisecond, 100*time.Millisecond)
_, err := c.Set("a", "b") _, err := c.Set("a", "b")
checkErr(err) checkErr(err)
+3 -4
View File
@@ -27,7 +27,7 @@ import (
type ( type (
canaryConfigCancelFuncMap struct { canaryConfigCancelFuncMap struct {
cache *cache.Cache // map[metadataKey]*context.Context cache *cache.Cache[metadataKey, *CanaryProcessingInfo]
} }
// metav1.ObjectMeta is not hashable, so we make a hashable copy // metav1.ObjectMeta is not hashable, so we make a hashable copy
@@ -45,7 +45,7 @@ type (
func makecanaryConfigCancelFuncMap() *canaryConfigCancelFuncMap { func makecanaryConfigCancelFuncMap() *canaryConfigCancelFuncMap {
return &canaryConfigCancelFuncMap{ return &canaryConfigCancelFuncMap{
cache: cache.MakeCache(0, 0), cache: cache.MakeCache[metadataKey, *CanaryProcessingInfo](0, 0),
} }
} }
@@ -62,8 +62,7 @@ func (cancelFuncMap *canaryConfigCancelFuncMap) lookup(f *metav1.ObjectMeta) (*C
if err != nil { if err != nil {
return nil, err return nil, err
} }
value := item.(*CanaryProcessingInfo) return item, nil
return value, nil
} }
func (cancelFuncMap *canaryConfigCancelFuncMap) assign(f *metav1.ObjectMeta, value *CanaryProcessingInfo) error { func (cancelFuncMap *canaryConfigCancelFuncMap) assign(f *metav1.ObjectMeta, value *CanaryProcessingInfo) error {
+5 -6
View File
@@ -35,6 +35,7 @@ import (
"github.com/fission/fission/pkg/crd" "github.com/fission/fission/pkg/crd"
"github.com/fission/fission/pkg/generated/clientset/versioned" "github.com/fission/fission/pkg/generated/clientset/versioned"
"github.com/fission/fission/pkg/utils" "github.com/fission/fission/pkg/utils"
"github.com/fission/fission/pkg/utils/manager"
) )
const ( const (
@@ -136,10 +137,8 @@ func (canaryCfgMgr *canaryConfigMgr) CanaryConfigEventHandlers(ctx context.Conte
return nil return nil
} }
func (canaryCfgMgr *canaryConfigMgr) Run(ctx context.Context) { func (canaryCfgMgr *canaryConfigMgr) Run(ctx context.Context, mgr manager.Interface) {
for _, informer := range canaryCfgMgr.canaryConfigInformer { mgr.AddInformers(ctx, canaryCfgMgr.canaryConfigInformer)
go informer.Run(ctx.Done())
}
canaryCfgMgr.logger.Info("started canary configmgr controller") canaryCfgMgr.logger.Info("started canary configmgr controller")
} }
@@ -558,7 +557,7 @@ func getEnvValue(envVar string) string {
return envVarSplit[1] return envVarSplit[1]
} }
func StartCanaryServer(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, unitTestFlag bool) error { func StartCanaryServer(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, mgr manager.Interface, unitTestFlag bool) error {
cLogger := logger.Named("CanaryServer") cLogger := logger.Named("CanaryServer")
fissionClient, err := clientGen.GetFissionClient() fissionClient, err := clientGen.GetFissionClient()
@@ -570,7 +569,7 @@ func StartCanaryServer(ctx context.Context, clientGen crd.ClientGeneratorInterfa
return fmt.Errorf("failed to get kubernetes client: %w", err) return fmt.Errorf("failed to get kubernetes client: %w", err)
} }
err = ConfigureFeatures(ctx, cLogger, unitTestFlag, fissionClient, kubernetesClient) err = ConfigureFeatures(ctx, cLogger, unitTestFlag, fissionClient, kubernetesClient, mgr)
if err != nil { if err != nil {
cLogger.Error("error configuring features - proceeding without optional features", zap.Error(err)) cLogger.Error("error configuring features - proceeding without optional features", zap.Error(err))
} }
+4 -2
View File
@@ -25,10 +25,12 @@ import (
config "github.com/fission/fission/pkg/featureconfig" config "github.com/fission/fission/pkg/featureconfig"
"github.com/fission/fission/pkg/generated/clientset/versioned" "github.com/fission/fission/pkg/generated/clientset/versioned"
"github.com/fission/fission/pkg/utils/manager"
) )
// ConfigureFeatures gets the feature config and configures the features that are enabled // ConfigureFeatures gets the feature config and configures the features that are enabled
func ConfigureFeatures(ctx context.Context, logger *zap.Logger, unitTestMode bool, fissionClient versioned.Interface, kubeClient kubernetes.Interface) error { func ConfigureFeatures(ctx context.Context, logger *zap.Logger, unitTestMode bool, fissionClient versioned.Interface,
kubeClient kubernetes.Interface, mgr manager.Interface) error {
// set feature enabled to false if unitTestMode // set feature enabled to false if unitTestMode
if unitTestMode { if unitTestMode {
return nil return nil
@@ -47,7 +49,7 @@ func ConfigureFeatures(ctx context.Context, logger *zap.Logger, unitTestMode boo
if err != nil { if err != nil {
return errors.Wrap(err, "failed to start canary config manager") return errors.Wrap(err, "failed to start canary config manager")
} }
canaryCfgMgr.Run(ctx) canaryCfgMgr.Run(ctx, mgr)
return err return err
} }
+31 -8
View File
@@ -18,7 +18,7 @@ package crd
import ( import (
"context" "context"
"errors" "fmt"
"time" "time"
"go.uber.org/zap" "go.uber.org/zap"
@@ -35,8 +35,14 @@ import (
"github.com/fission/fission/pkg/utils" "github.com/fission/fission/pkg/utils"
) )
const (
EnvKubeClientQps = "KUBE_CLIENT_QPS"
EnvKubeClientBurst = "KUBE_CLIENT_BURST"
)
type ( type (
ClientGeneratorInterface interface { ClientGeneratorInterface interface {
GetRestConfig() (*rest.Config, error)
GetFissionClient() (versioned.Interface, error) GetFissionClient() (versioned.Interface, error)
GetKubernetesClient() (kubernetes.Interface, error) GetKubernetesClient() (kubernetes.Interface, error)
GetApiExtensionsClient() (apiextensionsclient.Interface, error) GetApiExtensionsClient() (apiextensionsclient.Interface, error)
@@ -59,9 +65,27 @@ func (cg *ClientGenerator) getRestConfig() (*rest.Config, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
qps, _ := utils.GetUIntValueFromEnv(EnvKubeClientQps)
burst, _ := utils.GetIntValueFromEnv(EnvKubeClientBurst)
// Set QPS and Burst to higher values to avoid throttling
if qps == 0 {
qps = 200
}
if burst == 0 {
burst = 500
}
cg.restConfig.QPS = float32(qps)
cg.restConfig.Burst = burst
return cg.restConfig, nil return cg.restConfig, nil
} }
func (cg *ClientGenerator) GetRestConfig() (*rest.Config, error) {
return cg.getRestConfig()
}
func (cg *ClientGenerator) GetFissionClient() (versioned.Interface, error) { func (cg *ClientGenerator) GetFissionClient() (versioned.Interface, error) {
config, err := cg.getRestConfig() config, err := cg.getRestConfig()
if err != nil { if err != nil {
@@ -110,25 +134,24 @@ func NewClientGeneratorWithRestConfig(restConfig *rest.Config) *ClientGenerator
return &ClientGenerator{restConfig: restConfig} return &ClientGenerator{restConfig: restConfig}
} }
// WaitForCRDs does a timeout to check if CRDs have been installed // WaitForFunctionCRDs does a timeout to check if CRDs have been installed
func WaitForCRDs(ctx context.Context, logger *zap.Logger, fissionClient versioned.Interface) error { func WaitForFunctionCRDs(ctx context.Context, logger *zap.Logger, fissionClient versioned.Interface) error {
logger.Info("Waiting for CRDs to be installed")
defaultNs := utils.DefaultNSResolver().DefaultNamespace defaultNs := utils.DefaultNSResolver().DefaultNamespace
if defaultNs == "" { if defaultNs == "" {
defaultNs = metav1.NamespaceDefault defaultNs = metav1.NamespaceDefault
} }
logger.Info("Checking function CRD access", zap.String("namespace", defaultNs), zap.String("timeout", "30s"))
start := time.Now() start := time.Now()
for { for {
fi := fissionClient.CoreV1().Functions(defaultNs) fi := fissionClient.CoreV1().Functions(defaultNs)
_, err := fi.List(ctx, metav1.ListOptions{}) _, err := fi.List(ctx, metav1.ListOptions{})
if err != nil { if err == nil {
time.Sleep(100 * time.Millisecond)
} else {
return nil return nil
} }
time.Sleep(100 * time.Millisecond)
if time.Since(start) > 30*time.Second { if time.Since(start) > 30*time.Second {
return errors.New("timeout waiting for CRDs") return fmt.Errorf("timeout waiting for function CRD access")
} }
} }
} }
+3 -3
View File
@@ -34,6 +34,7 @@ import (
"github.com/fission/fission/pkg/executor/client" "github.com/fission/fission/pkg/executor/client"
"github.com/fission/fission/pkg/executor/fscache" "github.com/fission/fission/pkg/executor/fscache"
"github.com/fission/fission/pkg/utils/httpserver" "github.com/fission/fission/pkg/utils/httpserver"
"github.com/fission/fission/pkg/utils/manager"
"github.com/fission/fission/pkg/utils/metrics" "github.com/fission/fission/pkg/utils/metrics"
otelUtils "github.com/fission/fission/pkg/utils/otel" otelUtils "github.com/fission/fission/pkg/utils/otel"
) )
@@ -286,8 +287,7 @@ func (executor *Executor) GetHandler() http.Handler {
} }
// Serve starts an HTTP server. // Serve starts an HTTP server.
func (executor *Executor) Serve(ctx context.Context, port int) { func (executor *Executor) Serve(ctx context.Context, mgr manager.Interface, port int) {
handler := otelUtils.GetHandlerWithOTEL(executor.GetHandler(), "fission-executor", otelUtils.UrlsToIgnore("/healthz")) handler := otelUtils.GetHandlerWithOTEL(executor.GetHandler(), "fission-executor", otelUtils.UrlsToIgnore("/healthz"))
httpserver.StartServer(ctx, executor.logger, "executor", fmt.Sprintf("%d", port), handler) httpserver.StartServer(ctx, executor.logger, mgr, "executor", fmt.Sprintf("%d", port), handler)
} }
+15 -9
View File
@@ -36,8 +36,14 @@ import (
) )
type ( type (
// Client is wrapper on a HTTP client. // ClientInterface is the interface for executor client.
Client struct { ClientInterface interface {
GetServiceForFunction(ctx context.Context, fn *fv1.Function) (string, error)
TapService(fnMeta metav1.ObjectMeta, executorType fv1.ExecutorType, serviceURL url.URL)
UnTapService(ctx context.Context, fnMeta metav1.ObjectMeta, executorType fv1.ExecutorType, serviceURL *url.URL) error
}
// client is wrapper on a HTTP client.
client struct {
logger *zap.Logger logger *zap.Logger
executorURL string executorURL string
tappedByURL map[string]TapServiceRequest tappedByURL map[string]TapServiceRequest
@@ -54,10 +60,10 @@ type (
) )
// MakeClient initializes and returns a Client instance. // MakeClient initializes and returns a Client instance.
func MakeClient(logger *zap.Logger, executorURL string) *Client { func MakeClient(logger *zap.Logger, executorURL string) ClientInterface {
hc := retryablehttp.NewClient() hc := retryablehttp.NewClient()
hc.HTTPClient.Transport = otelhttp.NewTransport(hc.HTTPClient.Transport) hc.HTTPClient.Transport = otelhttp.NewTransport(hc.HTTPClient.Transport)
c := &Client{ c := &client{
logger: logger.Named("executor_client"), logger: logger.Named("executor_client"),
executorURL: strings.TrimSuffix(executorURL, "/"), executorURL: strings.TrimSuffix(executorURL, "/"),
tappedByURL: make(map[string]TapServiceRequest), tappedByURL: make(map[string]TapServiceRequest),
@@ -69,7 +75,7 @@ func MakeClient(logger *zap.Logger, executorURL string) *Client {
} }
// GetServiceForFunction returns the service name for a given function. // GetServiceForFunction returns the service name for a given function.
func (c *Client) GetServiceForFunction(ctx context.Context, fn *fv1.Function) (string, error) { func (c *client) GetServiceForFunction(ctx context.Context, fn *fv1.Function) (string, error) {
executorURL := c.executorURL + "/v2/getServiceForFunction" executorURL := c.executorURL + "/v2/getServiceForFunction"
body, err := json.Marshal(fn) body, err := json.Marshal(fn)
@@ -102,7 +108,7 @@ func (c *Client) GetServiceForFunction(ctx context.Context, fn *fv1.Function) (s
} }
// UnTapService sends a request to /v2/unTapService. // UnTapService sends a request to /v2/unTapService.
func (c *Client) UnTapService(ctx context.Context, fnMeta metav1.ObjectMeta, executorType fv1.ExecutorType, serviceURL *url.URL) error { func (c *client) UnTapService(ctx context.Context, fnMeta metav1.ObjectMeta, executorType fv1.ExecutorType, serviceURL *url.URL) error {
url := c.executorURL + "/v2/unTapService" url := c.executorURL + "/v2/unTapService"
tapSvc := TapServiceRequest{ tapSvc := TapServiceRequest{
FnMetadata: fnMeta, FnMetadata: fnMeta,
@@ -133,7 +139,7 @@ func (c *Client) UnTapService(ctx context.Context, fnMeta metav1.ObjectMeta, exe
return nil return nil
} }
func (c *Client) service() { func (c *client) service() {
ticker := time.NewTicker(time.Second * 5) ticker := time.NewTicker(time.Second * 5)
for { for {
select { select {
@@ -163,7 +169,7 @@ func (c *Client) service() {
} }
// TapService sends a TapServiceRequest over the request channel. // TapService sends a TapServiceRequest over the request channel.
func (c *Client) TapService(fnMeta metav1.ObjectMeta, executorType fv1.ExecutorType, serviceURL url.URL) { func (c *client) TapService(fnMeta metav1.ObjectMeta, executorType fv1.ExecutorType, serviceURL url.URL) {
c.requestChan <- TapServiceRequest{ c.requestChan <- TapServiceRequest{
FnMetadata: metav1.ObjectMeta{ FnMetadata: metav1.ObjectMeta{
Name: fnMeta.Name, Name: fnMeta.Name,
@@ -178,7 +184,7 @@ func (c *Client) TapService(fnMeta metav1.ObjectMeta, executorType fv1.ExecutorT
} }
} }
func (c *Client) _tapService(ctx context.Context, tapSvcReqs []TapServiceRequest) error { func (c *client) _tapService(ctx context.Context, tapSvcReqs []TapServiceRequest) error {
executorURL := c.executorURL + "/v2/tapServices" executorURL := c.executorURL + "/v2/tapServices"
body, err := json.Marshal(tapSvcReqs) body, err := json.Marshal(tapSvcReqs)
+30 -15
View File
@@ -43,6 +43,7 @@ import (
"github.com/fission/fission/pkg/generated/clientset/versioned" "github.com/fission/fission/pkg/generated/clientset/versioned"
genInformer "github.com/fission/fission/pkg/generated/informers/externalversions" genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"
"github.com/fission/fission/pkg/utils" "github.com/fission/fission/pkg/utils"
"github.com/fission/fission/pkg/utils/manager"
"github.com/fission/fission/pkg/utils/metrics" "github.com/fission/fission/pkg/utils/metrics"
otelUtils "github.com/fission/fission/pkg/utils/otel" otelUtils "github.com/fission/fission/pkg/utils/otel"
) )
@@ -73,7 +74,7 @@ type (
) )
// MakeExecutor returns an Executor for given ExecutorType(s). // MakeExecutor returns an Executor for given ExecutorType(s).
func MakeExecutor(ctx context.Context, logger *zap.Logger, cms *cms.ConfigSecretController, func MakeExecutor(ctx context.Context, logger *zap.Logger, mgr manager.Interface, cms *cms.ConfigSecretController,
fissionClient versioned.Interface, types map[fv1.ExecutorType]executortype.ExecutorType, fissionClient versioned.Interface, types map[fv1.ExecutorType]executortype.ExecutorType,
informers ...k8sCache.SharedIndexInformer) (*Executor, error) { informers ...k8sCache.SharedIndexInformer) (*Executor, error) {
executor := &Executor{ executor := &Executor{
@@ -87,17 +88,21 @@ func MakeExecutor(ctx context.Context, logger *zap.Logger, cms *cms.ConfigSecret
// Run all informers // Run all informers
for _, informer := range informers { for _, informer := range informers {
go informer.Run(ctx.Done()) informer := informer
mgr.Add(ctx, func(ctx context.Context) {
informer.Run(ctx.Done())
})
} }
for _, et := range types { for _, et := range types {
go func(et executortype.ExecutorType) { et := et
et.Run(ctx) mgr.Add(ctx, func(ctx context.Context) {
}(et) et.Run(ctx, mgr)
})
} }
mgr.Add(ctx, func(ctx context.Context) {
go executor.serveCreateFuncServices() executor.serveCreateFuncServices(ctx)
})
return executor, nil return executor, nil
} }
@@ -107,9 +112,14 @@ func MakeExecutor(ctx context.Context, logger *zap.Logger, cms *cms.ConfigSecret
// get specialized. In other words, it ensures that when there's an // get specialized. In other words, it ensures that when there's an
// ongoing request for a certain function, all other requests wait for // ongoing request for a certain function, all other requests wait for
// that request to complete. // that request to complete.
func (executor *Executor) serveCreateFuncServices() { func (executor *Executor) serveCreateFuncServices(ctx context.Context) {
for { for {
req := <-executor.requestChan var req *createFuncServiceRequest
select {
case <-ctx.Done():
return
case req = <-executor.requestChan:
}
function := req.function function := req.function
fnName := k8sCache.MetaObjectToName(function) fnName := k8sCache.MetaObjectToName(function)
fnkeyUR := crd.CacheKeyURFromObject(function) fnkeyUR := crd.CacheKeyURFromObject(function)
@@ -251,7 +261,7 @@ func (executor *Executor) getFunctionServiceFromCache(ctx context.Context, fn *f
// StartExecutor Starts executor and the executor components such as Poolmgr, // StartExecutor Starts executor and the executor components such as Poolmgr,
// deploymgr and potential future executor types // deploymgr and potential future executor types
func StartExecutor(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, port int) error { func StartExecutor(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, mgr manager.Interface, port int) error {
fissionClient, err := clientGen.GetFissionClient() fissionClient, err := clientGen.GetFissionClient()
if err != nil { if err != nil {
@@ -266,7 +276,7 @@ func StartExecutor(ctx context.Context, clientGen crd.ClientGeneratorInterface,
logger.Error("error making the metrics client", zap.Error(err)) logger.Error("error making the metrics client", zap.Error(err))
} }
err = crd.WaitForCRDs(ctx, logger, fissionClient) err = crd.WaitForFunctionCRDs(ctx, logger, fissionClient)
if err != nil { if err != nil {
return errors.Wrap(err, "error waiting for CRDs") return errors.Wrap(err, "error waiting for CRDs")
} }
@@ -383,7 +393,7 @@ func StartExecutor(ctx context.Context, clientGen crd.ClientGeneratorInterface,
informerFactory.Start(ctx.Done()) informerFactory.Start(ctx.Done())
} }
api, err := MakeExecutor(ctx, logger, cms, fissionClient, executorTypes, api, err := MakeExecutor(ctx, logger, mgr, cms, fissionClient, executorTypes,
fissionInformers..., fissionInformers...,
) )
if err != nil { if err != nil {
@@ -392,8 +402,13 @@ func StartExecutor(ctx context.Context, clientGen crd.ClientGeneratorInterface,
utils.CreateMissingPermissionForSA(ctx, kubernetesClient, logger) utils.CreateMissingPermissionForSA(ctx, kubernetesClient, logger)
go metrics.ServeMetrics(ctx, "executor", logger) mgr.Add(ctx, func(ctx context.Context) {
go api.Serve(ctx, port) metrics.ServeMetrics(ctx, "executor", logger, mgr)
})
mgr.Add(ctx, func(ctx context.Context) {
api.Serve(ctx, mgr, port)
})
return nil return nil
} }
@@ -51,6 +51,7 @@ import (
genInformer "github.com/fission/fission/pkg/generated/informers/externalversions" genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"
"github.com/fission/fission/pkg/throttler" "github.com/fission/fission/pkg/throttler"
"github.com/fission/fission/pkg/utils" "github.com/fission/fission/pkg/utils"
"github.com/fission/fission/pkg/utils/manager"
"github.com/fission/fission/pkg/utils/maps" "github.com/fission/fission/pkg/utils/maps"
otelUtils "github.com/fission/fission/pkg/utils/otel" otelUtils "github.com/fission/fission/pkg/utils/otel"
) )
@@ -148,7 +149,7 @@ func MakeContainer(
} }
// Run start the function along with an object reaper. // Run start the function along with an object reaper.
func (caaf *Container) Run(ctx context.Context) { func (caaf *Container) Run(ctx context.Context, mgr manager.Interface) {
waitSynced := make([]k8sCache.InformerSynced, 0) waitSynced := make([]k8sCache.InformerSynced, 0)
for _, deplListerSynced := range caaf.deplListerSynced { for _, deplListerSynced := range caaf.deplListerSynced {
waitSynced = append(waitSynced, deplListerSynced) waitSynced = append(waitSynced, deplListerSynced)
@@ -160,7 +161,9 @@ func (caaf *Container) Run(ctx context.Context) {
if ok := k8sCache.WaitForCacheSync(ctx.Done(), waitSynced...); !ok { if ok := k8sCache.WaitForCacheSync(ctx.Done(), waitSynced...); !ok {
caaf.logger.Fatal("failed to wait for caches to sync") caaf.logger.Fatal("failed to wait for caches to sync")
} }
go caaf.idleObjectReaper(ctx) mgr.Add(ctx, func(ctx context.Context) {
caaf.idleObjectReaper(ctx)
})
} }
// GetTypeName returns the executor type name. // GetTypeName returns the executor type name.
@@ -427,7 +430,7 @@ func (caaf *Container) fnCreate(ctx context.Context, fn *fv1.Function) (*fscache
kubeObjRefs := []apiv1.ObjectReference{ kubeObjRefs := []apiv1.ObjectReference{
{ {
//obj.TypeMeta.Kind does not work hence this, needs investigation and a fix // obj.TypeMeta.Kind does not work hence this, needs investigation and a fix
Kind: "deployment", Kind: "deployment",
Name: depl.ObjectMeta.Name, Name: depl.ObjectMeta.Name,
APIVersion: depl.TypeMeta.APIVersion, APIVersion: depl.TypeMeta.APIVersion,
+2 -1
View File
@@ -25,11 +25,12 @@ import (
fv1 "github.com/fission/fission/pkg/apis/core/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1"
"github.com/fission/fission/pkg/executor/fscache" "github.com/fission/fission/pkg/executor/fscache"
"github.com/fission/fission/pkg/utils/manager"
) )
type ExecutorType interface { type ExecutorType interface {
// Run runs background job. // Run runs background job.
Run(context.Context) Run(context.Context, manager.Interface)
// GetTypeName returns the name of executor type // GetTypeName returns the name of executor type
GetTypeName(context.Context) fv1.ExecutorType GetTypeName(context.Context) fv1.ExecutorType
@@ -53,6 +53,7 @@ import (
genInformer "github.com/fission/fission/pkg/generated/informers/externalversions" genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"
"github.com/fission/fission/pkg/throttler" "github.com/fission/fission/pkg/throttler"
"github.com/fission/fission/pkg/utils" "github.com/fission/fission/pkg/utils"
"github.com/fission/fission/pkg/utils/manager"
"github.com/fission/fission/pkg/utils/maps" "github.com/fission/fission/pkg/utils/maps"
otelUtils "github.com/fission/fission/pkg/utils/otel" otelUtils "github.com/fission/fission/pkg/utils/otel"
) )
@@ -162,7 +163,7 @@ func MakeNewDeploy(
} }
// Run start the function and environment controller along with an object reaper. // Run start the function and environment controller along with an object reaper.
func (deploy *NewDeploy) Run(ctx context.Context) { func (deploy *NewDeploy) Run(ctx context.Context, mgr manager.Interface) {
waitSynced := make([]k8sCache.InformerSynced, 0) waitSynced := make([]k8sCache.InformerSynced, 0)
for _, deplListerSynced := range deploy.deplListerSynced { for _, deplListerSynced := range deploy.deplListerSynced {
waitSynced = append(waitSynced, deplListerSynced) waitSynced = append(waitSynced, deplListerSynced)
@@ -174,7 +175,9 @@ func (deploy *NewDeploy) Run(ctx context.Context) {
if ok := k8sCache.WaitForCacheSync(ctx.Done(), waitSynced...); !ok { if ok := k8sCache.WaitForCacheSync(ctx.Done(), waitSynced...); !ok {
deploy.logger.Fatal("failed to wait for caches to sync") deploy.logger.Fatal("failed to wait for caches to sync")
} }
go deploy.idleObjectReaper(ctx) mgr.Add(ctx, func(ctx context.Context) {
deploy.idleObjectReaper(ctx)
})
} }
// GetTypeName returns the executor type name. // GetTypeName returns the executor type name.
@@ -21,6 +21,7 @@ import (
genInformer "github.com/fission/fission/pkg/generated/informers/externalversions" genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"
"github.com/fission/fission/pkg/utils" "github.com/fission/fission/pkg/utils"
"github.com/fission/fission/pkg/utils/loggerfactory" "github.com/fission/fission/pkg/utils/loggerfactory"
"github.com/fission/fission/pkg/utils/manager"
"github.com/fission/fission/pkg/utils/uuid" "github.com/fission/fission/pkg/utils/uuid"
) )
@@ -35,6 +36,8 @@ const (
func TestRefreshFuncPods(t *testing.T) { func TestRefreshFuncPods(t *testing.T) {
os.Setenv("DEBUG_ENV", "true") os.Setenv("DEBUG_ENV", "true")
mgr := manager.New()
defer mgr.Wait()
logger := loggerfactory.GetLogger() logger := loggerfactory.GetLogger()
kubernetesClient := fake.NewSimpleClientset() kubernetesClient := fake.NewSimpleClientset()
fissionClient := fClient.NewSimpleClientset() fissionClient := fClient.NewSimpleClientset()
@@ -70,7 +73,9 @@ func TestRefreshFuncPods(t *testing.T) {
} }
ndm.nsResolver = &nsResolver ndm.nsResolver = &nsResolver
go ndm.Run(ctx) mgr.Add(ctx, func(ctx context.Context) {
ndm.Run(ctx, mgr)
})
t.Log("New deploy manager started") t.Log("New deploy manager started")
for _, f := range factory { for _, f := range factory {
+12 -3
View File
@@ -203,9 +203,18 @@ func (gp *GenericPool) updateCPUUtilizationSvc(ctx context.Context) {
} }
if value, ok := gp.podFSVCMap.Load(val.ObjectMeta.Name); ok { if value, ok := gp.podFSVCMap.Load(val.ObjectMeta.Name); ok {
if valArray, ok1 := value.([]interface{}); ok1 { if valArray, ok1 := value.([]interface{}); ok1 {
function, address := valArray[0], valArray[1] function, ok2 := valArray[0].(crd.CacheKeyURG)
gp.fsCache.SetCPUUtilizaton(function.(crd.CacheKeyURG), address.(string), p) if !ok2 {
gp.logger.Info(fmt.Sprintf("updated function %s, address %s, cpuUsage %+v", function.(string), address.(string), p)) gp.logger.Error("failed to convert function to type", zap.Any("function", function))
return
}
address, ok2 := valArray[1].(string)
if !ok2 {
gp.logger.Error("failed to convert address to string", zap.Any("address", address))
return
}
gp.fsCache.SetCPUUtilizaton(function, address, p)
gp.logger.Info("updated function cpu usage", zap.Any("function", function), zap.String("address", address), zap.Any("cpuUsage", p))
} }
} }
} }
@@ -43,7 +43,7 @@ func getPoolName(env *fv1.Environment) string {
return a return a
} }
//To fit the 63 character limit // To fit the 63 character limit
if len(env.ObjectMeta.Name)+len(env.ObjectMeta.Namespace) < 37 { if len(env.ObjectMeta.Name)+len(env.ObjectMeta.Namespace) < 37 {
envPodName = env.ObjectMeta.Name + "-" + env.ObjectMeta.Namespace envPodName = env.ObjectMeta.Name + "-" + env.ObjectMeta.Namespace
} else { } else {
+26 -17
View File
@@ -53,6 +53,7 @@ import (
"github.com/fission/fission/pkg/generated/clientset/versioned" "github.com/fission/fission/pkg/generated/clientset/versioned"
genInformer "github.com/fission/fission/pkg/generated/informers/externalversions" genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"
"github.com/fission/fission/pkg/utils" "github.com/fission/fission/pkg/utils"
"github.com/fission/fission/pkg/utils/manager"
otelUtils "github.com/fission/fission/pkg/utils/otel" otelUtils "github.com/fission/fission/pkg/utils/otel"
) )
@@ -77,7 +78,7 @@ type (
nsResolver *utils.NamespaceResolver nsResolver *utils.NamespaceResolver
fissionClient versioned.Interface fissionClient versioned.Interface
functionEnv *cache.Cache functionEnv *cache.Cache[crd.CacheKeyUR, *fv1.Environment]
fsCache *fscache.FunctionServiceCache fsCache *fscache.FunctionServiceCache
instanceID string instanceID string
requestChannel chan *request requestChannel chan *request
@@ -146,7 +147,7 @@ func MakeGenericPoolManager(ctx context.Context,
nsResolver: utils.DefaultNSResolver(), nsResolver: utils.DefaultNSResolver(),
metricsClient: metricsClient, metricsClient: metricsClient,
fissionClient: fissionClient, fissionClient: fissionClient,
functionEnv: cache.MakeCache(10*time.Second, 0), functionEnv: cache.MakeCache[crd.CacheKeyUR, *fv1.Environment](10*time.Second, 0),
fsCache: fscache.MakeFunctionServiceCache(gpmLogger), fsCache: fscache.MakeFunctionServiceCache(gpmLogger),
instanceID: instanceID, instanceID: instanceID,
requestChannel: make(chan *request), requestChannel: make(chan *request),
@@ -169,7 +170,7 @@ func MakeGenericPoolManager(ctx context.Context,
return gpm, nil return gpm, nil
} }
func (gpm *GenericPoolManager) Run(ctx context.Context) { func (gpm *GenericPoolManager) Run(ctx context.Context, mgr manager.Interface) {
waitSynced := make([]k8sCache.InformerSynced, 0) waitSynced := make([]k8sCache.InformerSynced, 0)
for _, podListerSynced := range gpm.podListerSynced { for _, podListerSynced := range gpm.podListerSynced {
waitSynced = append(waitSynced, podListerSynced) waitSynced = append(waitSynced, podListerSynced)
@@ -179,10 +180,25 @@ func (gpm *GenericPoolManager) Run(ctx context.Context) {
} }
go gpm.service() go gpm.service()
gpm.poolPodC.InjectGpm(gpm) gpm.poolPodC.InjectGpm(gpm)
go gpm.WebsocketStartEventChecker(ctx, gpm.kubernetesClient) //nolint:errcheck
go gpm.NoActiveConnectionEventChecker(ctx, gpm.kubernetesClient) //nolint:errcheck mgr.Add(ctx, func(ctx context.Context) {
go gpm.idleObjectReaper(ctx) err := gpm.WebsocketStartEventChecker(ctx, gpm.kubernetesClient)
go gpm.poolPodC.Run(ctx, ctx.Done()) if err != nil {
gpm.logger.Error("error in checking websocket start event from pod: ", zap.Error(err))
}
})
mgr.Add(ctx, func(ctx context.Context) {
err := gpm.NoActiveConnectionEventChecker(ctx, gpm.kubernetesClient) //nolint:errcheck
if err != nil {
gpm.logger.Error("error in checking inactive event from pod: ", zap.Error(err))
}
})
mgr.Add(ctx, func(ctx context.Context) {
gpm.idleObjectReaper(ctx)
})
mgr.Add(ctx, func(ctx context.Context) {
gpm.poolPodC.Run(ctx, ctx.Done(), mgr)
})
} }
func (gpm *GenericPoolManager) GetTypeName(ctx context.Context) fv1.ExecutorType { func (gpm *GenericPoolManager) GetTypeName(ctx context.Context) fv1.ExecutorType {
@@ -579,8 +595,7 @@ func (gpm *GenericPoolManager) getFunctionEnv(ctx context.Context, fn *fv1.Funct
// TODO: the cache should be able to search by <env name, fn namespace> instead of function metadata. // TODO: the cache should be able to search by <env name, fn namespace> instead of function metadata.
result, err := gpm.functionEnv.Get(crd.CacheKeyURFromMeta(&fn.ObjectMeta)) result, err := gpm.functionEnv.Get(crd.CacheKeyURFromMeta(&fn.ObjectMeta))
if err == nil { if err == nil {
env = result.(*fv1.Environment) return result, nil
return env, nil
} }
// Get env from controller // Get env from controller
@@ -702,9 +717,6 @@ func (gpm *GenericPoolManager) doIdleObjectReaper(ctx context.Context) {
// WebsocketStartEventChecker checks if the pod has emitted a websocket connection start event // WebsocketStartEventChecker checks if the pod has emitted a websocket connection start event
func (gpm *GenericPoolManager) WebsocketStartEventChecker(ctx context.Context, kubeClient kubernetes.Interface) error { func (gpm *GenericPoolManager) WebsocketStartEventChecker(ctx context.Context, kubeClient kubernetes.Interface) error {
stopper := make(chan struct{})
defer close(stopper)
var wg wait.Group var wg wait.Group
for _, informer := range utils.GetInformerEventChecker(ctx, kubeClient, "WsConnectionStarted") { for _, informer := range utils.GetInformerEventChecker(ctx, kubeClient, "WsConnectionStarted") {
_, err := informer.AddEventHandler(k8sCache.ResourceEventHandlerFuncs{ _, err := informer.AddEventHandler(k8sCache.ResourceEventHandlerFuncs{
@@ -727,7 +739,7 @@ func (gpm *GenericPoolManager) WebsocketStartEventChecker(ctx context.Context, k
if err != nil { if err != nil {
return err return err
} }
wg.StartWithChannel(stopper, informer.Run) wg.StartWithChannel(ctx.Done(), informer.Run)
} }
wg.Wait() wg.Wait()
return nil return nil
@@ -735,9 +747,6 @@ func (gpm *GenericPoolManager) WebsocketStartEventChecker(ctx context.Context, k
// NoActiveConnectionEventChecker checks if the pod has emitted an inactive event // NoActiveConnectionEventChecker checks if the pod has emitted an inactive event
func (gpm *GenericPoolManager) NoActiveConnectionEventChecker(ctx context.Context, kubeClient kubernetes.Interface) error { func (gpm *GenericPoolManager) NoActiveConnectionEventChecker(ctx context.Context, kubeClient kubernetes.Interface) error {
stopper := make(chan struct{})
defer close(stopper)
var wg wait.Group var wg wait.Group
for _, informer := range utils.GetInformerEventChecker(ctx, kubeClient, "NoActiveConnections") { for _, informer := range utils.GetInformerEventChecker(ctx, kubeClient, "NoActiveConnections") {
_, err := informer.AddEventHandler(k8sCache.ResourceEventHandlerFuncs{ _, err := informer.AddEventHandler(k8sCache.ResourceEventHandlerFuncs{
@@ -771,7 +780,7 @@ func (gpm *GenericPoolManager) NoActiveConnectionEventChecker(ctx context.Contex
if err != nil { if err != nil {
return err return err
} }
wg.StartWithChannel(stopper, informer.Run) wg.StartWithChannel(ctx.Done(), informer.Run)
} }
wg.Wait() wg.Wait()
return nil return nil
@@ -41,6 +41,7 @@ import (
genInformer "github.com/fission/fission/pkg/generated/informers/externalversions" genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"
flisterv1 "github.com/fission/fission/pkg/generated/listers/core/v1" flisterv1 "github.com/fission/fission/pkg/generated/listers/core/v1"
"github.com/fission/fission/pkg/utils" "github.com/fission/fission/pkg/utils"
"github.com/fission/fission/pkg/utils/manager"
) )
type ( type (
@@ -246,7 +247,7 @@ func (p *PoolPodController) enqueueEnvDelete(obj interface{}) {
p.envDeleteQueue.Add(env) p.envDeleteQueue.Add(env)
} }
func (p *PoolPodController) Run(ctx context.Context, stopCh <-chan struct{}) { func (p *PoolPodController) Run(ctx context.Context, stopCh <-chan struct{}, mgr manager.Interface) {
defer utilruntime.HandleCrash() defer utilruntime.HandleCrash()
defer p.envCreateUpdateQueue.ShutDown() defer p.envCreateUpdateQueue.ShutDown()
defer p.envDeleteQueue.ShutDown() defer p.envDeleteQueue.ShutDown()
@@ -265,10 +266,16 @@ func (p *PoolPodController) Run(ctx context.Context, stopCh <-chan struct{}) {
p.logger.Fatal("failed to wait for caches to sync") p.logger.Fatal("failed to wait for caches to sync")
} }
for i := 0; i < 4; i++ { for i := 0; i < 4; i++ {
go wait.Until(p.workerRun(ctx, "envCreateUpdate", p.envCreateUpdateQueueProcessFunc), time.Second, stopCh) mgr.Add(ctx, func(ctx context.Context) {
wait.Until(p.workerRun(ctx, "envCreateUpdate", p.envCreateUpdateQueueProcessFunc), time.Second, stopCh)
})
} }
go wait.Until(p.workerRun(ctx, "envDeleteQueue", p.envDeleteQueueProcessFunc), time.Second, stopCh) mgr.Add(ctx, func(ctx context.Context) {
go wait.Until(p.workerRun(ctx, "spCleanupPodQueue", p.spCleanupPodQueueProcessFunc), time.Second, stopCh) wait.Until(p.workerRun(ctx, "envDeleteQueue", p.envDeleteQueueProcessFunc), time.Second, stopCh)
})
mgr.Add(ctx, func(ctx context.Context) {
wait.Until(p.workerRun(ctx, "spCleanupPodQueue", p.spCleanupPodQueueProcessFunc), time.Second, stopCh)
})
p.logger.Info("Started workers for poolPodController") p.logger.Info("Started workers for poolPodController")
<-stopCh <-stopCh
p.logger.Info("Shutting down workers for poolPodController") p.logger.Info("Shutting down workers for poolPodController")
@@ -34,9 +34,12 @@ import (
genInformer "github.com/fission/fission/pkg/generated/informers/externalversions" genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"
"github.com/fission/fission/pkg/utils" "github.com/fission/fission/pkg/utils"
"github.com/fission/fission/pkg/utils/loggerfactory" "github.com/fission/fission/pkg/utils/loggerfactory"
"github.com/fission/fission/pkg/utils/manager"
) )
func TestPoolPodControllerPodCleanup(t *testing.T) { func TestPoolPodControllerPodCleanup(t *testing.T) {
mgr := manager.New()
defer mgr.Wait()
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
defer cancel() defer cancel()
logger := loggerfactory.GetLogger() logger := loggerfactory.GetLogger()
@@ -74,7 +77,7 @@ func TestPoolPodControllerPodCleanup(t *testing.T) {
gpm := executor.(*GenericPoolManager) gpm := executor.(*GenericPoolManager)
ppc.InjectGpm(gpm) ppc.InjectGpm(gpm)
go ppc.Run(ctx, ctx.Done()) go ppc.Run(ctx, ctx.Done(), mgr)
for _, f := range factory { for _, f := range factory {
f.Start(ctx.Done()) f.Start(ctx.Done())
+20 -30
View File
@@ -40,7 +40,7 @@ import (
type fscRequestType int type fscRequestType int
//type executorType int // type executorType int
// FunctionServiceCache Request Types // FunctionServiceCache Request Types
const ( const (
@@ -68,12 +68,12 @@ type (
// FunctionServiceCache represents the function service cache // FunctionServiceCache represents the function service cache
FunctionServiceCache struct { FunctionServiceCache struct {
logger *zap.Logger logger *zap.Logger
byFunction *cache.Cache // function-key -> funcSvc : map[string]*funcSvc byFunction *cache.Cache[crd.CacheKeyUR, *FuncSvc]
byAddress *cache.Cache // address -> function : map[string]metav1.ObjectMeta byAddress *cache.Cache[string, metav1.ObjectMeta]
byFunctionUID *cache.Cache // function uid -> function : map[string]metav1.ObjectMeta byFunctionUID *cache.Cache[types.UID, metav1.ObjectMeta]
connFunctionCache *PoolCache // function-key -> funcSvc : map[string]*funcSvc connFunctionCache *PoolCache // function-key -> funcSvc : map[string]*funcSvc
PodToFsvc sync.Map // pod-name -> funcSvc: map[string]*FuncSvc PodToFsvc sync.Map // pod-name -> funcSvc: map[string]*FuncSvc
WebsocketFsvc sync.Map // funcSvc-name -> bool: map[string]bool WebsocketFsvc sync.Map // funcSvc-name -> bool: map[string]bool
requestChannel chan *fscRequest requestChannel chan *fscRequest
} }
@@ -110,9 +110,9 @@ func IsNameExistError(err error) bool {
func MakeFunctionServiceCache(logger *zap.Logger) *FunctionServiceCache { func MakeFunctionServiceCache(logger *zap.Logger) *FunctionServiceCache {
fsc := &FunctionServiceCache{ fsc := &FunctionServiceCache{
logger: logger.Named("function_service_cache"), logger: logger.Named("function_service_cache"),
byFunction: cache.MakeCache(0, 0), byFunction: cache.MakeCache[crd.CacheKeyUR, *FuncSvc](0, 0),
byAddress: cache.MakeCache(0, 0), byAddress: cache.MakeCache[string, metav1.ObjectMeta](0, 0),
byFunctionUID: cache.MakeCache(0, 0), byFunctionUID: cache.MakeCache[types.UID, metav1.ObjectMeta](0, 0),
connFunctionCache: NewPoolCache(logger.Named("conn_function_cache")), connFunctionCache: NewPoolCache(logger.Named("conn_function_cache")),
requestChannel: make(chan *fscRequest), requestChannel: make(chan *fscRequest),
} }
@@ -132,14 +132,12 @@ func (fsc *FunctionServiceCache) service() {
// get svcs idle for > req.age // get svcs idle for > req.age
fscs := fsc.byFunctionUID.Copy() fscs := fsc.byFunctionUID.Copy()
funcObjects := make([]*FuncSvc, 0) funcObjects := make([]*FuncSvc, 0)
for _, funcSvc := range fscs { for _, m := range fscs {
mI := funcSvc.(metav1.ObjectMeta) fsvc, err := fsc.byFunction.Get(crd.CacheKeyURFromMeta(&m))
fsvcI, err := fsc.byFunction.Get(crd.CacheKeyURFromMeta(&mI))
if err != nil { if err != nil {
fsc.logger.Error("error while getting service", zap.String("error", err.Error())) fsc.logger.Error("error while getting service", zap.String("error", err.Error()))
return return
} }
fsvc := fsvcI.(*FuncSvc)
if time.Since(fsvc.Atime) > req.age { if time.Since(fsvc.Atime) > req.age {
funcObjects = append(funcObjects, fsvc) funcObjects = append(funcObjects, fsvc)
} }
@@ -149,8 +147,7 @@ func (fsc *FunctionServiceCache) service() {
fsc.logger.Info("dumping function service cache") fsc.logger.Info("dumping function service cache")
funcCopy := fsc.byFunction.Copy() funcCopy := fsc.byFunction.Copy()
info := []string{} info := []string{}
for key, fsvcI := range funcCopy { for key, fsvc := range funcCopy {
fsvc := fsvcI.(*FuncSvc)
for _, kubeObj := range fsvc.KubernetesObjects { for _, kubeObj := range fsvc.KubernetesObjects {
info = append(info, fmt.Sprintf("%v\t%v\t%v", key, kubeObj.Kind, kubeObj.Name)) info = append(info, fmt.Sprintf("%v\t%v\t%v", key, kubeObj.Kind, kubeObj.Name))
} }
@@ -196,13 +193,12 @@ func (fsc *FunctionServiceCache) DumpDebugInfo(ctx context.Context) error {
func (fsc *FunctionServiceCache) GetByFunction(m *metav1.ObjectMeta) (*FuncSvc, error) { func (fsc *FunctionServiceCache) GetByFunction(m *metav1.ObjectMeta) (*FuncSvc, error) {
key := crd.CacheKeyURFromMeta(m) key := crd.CacheKeyURFromMeta(m)
fsvcI, err := fsc.byFunction.Get(key) fsvc, err := fsc.byFunction.Get(key)
if err != nil { if err != nil {
return nil, err return nil, err
} }
// update atime // update atime
fsvc := fsvcI.(*FuncSvc)
fsvc.Atime = time.Now() fsvc.Atime = time.Now()
fsvcCopy := *fsvc fsvcCopy := *fsvc
@@ -228,20 +224,17 @@ func (fsc *FunctionServiceCache) GetFuncSvc(ctx context.Context, m *metav1.Objec
// GetByFunctionUID gets a function service from cache using function UUID. // GetByFunctionUID gets a function service from cache using function UUID.
func (fsc *FunctionServiceCache) GetByFunctionUID(uid types.UID) (*FuncSvc, error) { func (fsc *FunctionServiceCache) GetByFunctionUID(uid types.UID) (*FuncSvc, error) {
mI, err := fsc.byFunctionUID.Get(uid) m, err := fsc.byFunctionUID.Get(uid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
m := mI.(metav1.ObjectMeta) fsvc, err := fsc.byFunction.Get(crd.CacheKeyURFromMeta(&m))
fsvcI, err := fsc.byFunction.Get(crd.CacheKeyURFromMeta(&m))
if err != nil { if err != nil {
return nil, err return nil, err
} }
// update atime // update atime
fsvc := fsvcI.(*FuncSvc)
fsvc.Atime = time.Now() fsvc.Atime = time.Now()
fsvcCopy := *fsvc fsvcCopy := *fsvc
@@ -279,12 +272,11 @@ func (fsc *FunctionServiceCache) Add(fsvc FuncSvc) (*FuncSvc, error) {
existing, err := fsc.byFunction.Set(crd.CacheKeyURFromMeta(fsvc.Function), &fsvc) existing, err := fsc.byFunction.Set(crd.CacheKeyURFromMeta(fsvc.Function), &fsvc)
if err != nil { if err != nil {
if IsNameExistError(err) { if IsNameExistError(err) {
f := existing.(*FuncSvc) err2 := fsc.TouchByAddress(existing.Address)
err2 := fsc.TouchByAddress(f.Address)
if err2 != nil { if err2 != nil {
return nil, err2 return nil, err2
} }
fCopy := *f fCopy := *existing
return &fCopy, nil return &fCopy, nil
} }
return nil, err return nil, err
@@ -333,16 +325,14 @@ func (fsc *FunctionServiceCache) TouchByAddress(address string) error {
} }
func (fsc *FunctionServiceCache) _touchByAddress(address string) error { func (fsc *FunctionServiceCache) _touchByAddress(address string) error {
mI, err := fsc.byAddress.Get(address) m, err := fsc.byAddress.Get(address)
if err != nil { if err != nil {
return err return err
} }
m := mI.(metav1.ObjectMeta) fsvc, err := fsc.byFunction.Get(crd.CacheKeyURFromMeta(&m))
fsvcI, err := fsc.byFunction.Get(crd.CacheKeyURFromMeta(&m))
if err != nil { if err != nil {
return err return err
} }
fsvc := fsvcI.(*FuncSvc)
fsvc.Atime = time.Now() fsvc.Atime = time.Now()
return nil return nil
} }
@@ -165,7 +165,7 @@ func TestFunctionServiceNewCache(t *testing.T) {
_, err = fsc.GetFuncSvc(ctx, fsvc.Function, 5, concurrency) _, err = fsc.GetFuncSvc(ctx, fsvc.Function, 5, concurrency)
require.NoError(t, err) require.NoError(t, err)
//key := fmt.Sprintf("%v_%v", cancel.UID, fn.ObjectMeta.ResourceVersion) // key := fmt.Sprintf("%v_%v", cancel.UID, fn.ObjectMeta.ResourceVersion)
key := crd.CacheKeyURGFromMeta(&fn.ObjectMeta) key := crd.CacheKeyURGFromMeta(&fn.ObjectMeta)
fsc.MarkAvailable(key, fsvc.Address) fsc.MarkAvailable(key, fsvc.Address)
+16 -5
View File
@@ -96,7 +96,6 @@ type (
) )
// NewPoolCache create a Cache object // NewPoolCache create a Cache object
func NewPoolCache(logger *zap.Logger) *PoolCache { func NewPoolCache(logger *zap.Logger) *PoolCache {
c := &PoolCache{ c := &PoolCache{
cache: make(map[crd.CacheKeyURG]*funcSvcGroup), cache: make(map[crd.CacheKeyURG]*funcSvcGroup),
@@ -122,6 +121,7 @@ func (c *PoolCache) service() {
case getValue: case getValue:
funcSvcGroup, ok := c.cache[req.function] funcSvcGroup, ok := c.cache[req.function]
if !ok { if !ok {
// first request for this function, create a new group
c.cache[req.function] = NewFuncSvcGroup() c.cache[req.function] = NewFuncSvcGroup()
c.cache[req.function].svcWaiting++ c.cache[req.function].svcWaiting++
resp.error = ferror.MakeError(ferror.ErrorNotFound, resp.error = ferror.MakeError(ferror.ErrorNotFound,
@@ -131,6 +131,7 @@ func (c *PoolCache) service() {
} }
found := false found := false
totalActiveRequests := 0 totalActiveRequests := 0
// check if any specialized pod is available
for addr := range funcSvcGroup.svcs { for addr := range funcSvcGroup.svcs {
totalActiveRequests += funcSvcGroup.svcs[addr].activeRequests totalActiveRequests += funcSvcGroup.svcs[addr].activeRequests
if funcSvcGroup.svcs[addr].activeRequests < req.requestsPerPod && if funcSvcGroup.svcs[addr].activeRequests < req.requestsPerPod &&
@@ -145,12 +146,22 @@ func (c *PoolCache) service() {
break break
} }
} }
// if specialized pod is available then return svc
if found { if found {
req.responseChannel <- resp req.responseChannel <- resp
continue continue
} }
specializationInProgress := funcSvcGroup.svcWaiting - funcSvcGroup.queue.Len() concurrencyUsed := len(funcSvcGroup.svcs) + (funcSvcGroup.svcWaiting - funcSvcGroup.queue.Len())
capacity := ((specializationInProgress + len(funcSvcGroup.svcs)) * req.requestsPerPod) - (totalActiveRequests + funcSvcGroup.svcWaiting) // if concurrency is available then be aggressive and use it as we are not sure if specialization will complete for other requests
if req.concurrency > 0 && concurrencyUsed < req.concurrency {
funcSvcGroup.svcWaiting++
resp.error = ferror.MakeError(ferror.ErrorNotFound, fmt.Sprintf("function '%s' not found", req.function))
req.responseChannel <- resp
continue
}
// if no concurrency is available then check if there is any virtual capacity in the existing pods to serve the request in future
// if specialization doesnt complete within request then request will be timeout
capacity := (concurrencyUsed * req.requestsPerPod) - (totalActiveRequests + funcSvcGroup.svcWaiting)
if capacity > 0 { if capacity > 0 {
funcSvcGroup.svcWaiting++ funcSvcGroup.svcWaiting++
svcWait := &svcWait{ svcWait := &svcWait{
@@ -164,8 +175,8 @@ func (c *PoolCache) service() {
} }
// concurrency should not be set to zero and // concurrency should not be set to zero and
//sum of specialization in progress and specialized pods should be less then req.concurrency // sum of specialization in progress and specialized pods should be less then req.concurrency
if req.concurrency > 0 && (specializationInProgress+len(funcSvcGroup.svcs)) >= req.concurrency { if req.concurrency > 0 && concurrencyUsed >= req.concurrency {
resp.error = ferror.MakeError(ferror.ErrorTooManyRequests, fmt.Sprintf("function '%s' concurrency '%d' limit reached.", req.function, req.concurrency)) resp.error = ferror.MakeError(ferror.ErrorTooManyRequests, fmt.Sprintf("function '%s' concurrency '%d' limit reached.", req.function, req.concurrency))
} else { } else {
funcSvcGroup.svcWaiting++ funcSvcGroup.svcWaiting++
+17 -10
View File
@@ -224,6 +224,7 @@ func TestPoolCacheRequests(t *testing.T) {
simultaneous = 1 simultaneous = 1
} }
for i := 1; i <= tt.requests; i++ { for i := 1; i <= tt.requests; i++ {
reqno := i
wg.Add(1) wg.Add(1)
go func(reqno int) { go func(reqno int) {
defer wg.Done() defer wg.Done()
@@ -231,10 +232,11 @@ func TestPoolCacheRequests(t *testing.T) {
if err != nil { if err != nil {
code, _ := ferror.GetHTTPError(err) code, _ := ferror.GetHTTPError(err)
if code == http.StatusNotFound { if code == http.StatusNotFound {
p.SetSvcValue(context.Background(), key, fmt.Sprintf("svc-%d", svcCounter), &FuncSvc{
Name: "value",
}, resource.MustParse("45m"), tt.rpp, tt.retainPods)
atomic.AddUint64(&svcCounter, 1) atomic.AddUint64(&svcCounter, 1)
address := fmt.Sprintf("svc-%d", atomic.LoadUint64(&svcCounter))
p.SetSvcValue(context.Background(), key, address, &FuncSvc{
Name: address,
}, resource.MustParse("45m"), tt.rpp, tt.retainPods)
} else { } else {
t.Log(reqno, "=>", err) t.Log(reqno, "=>", err)
atomic.AddUint64(&failedRequests, 1) atomic.AddUint64(&failedRequests, 1)
@@ -244,9 +246,12 @@ func TestPoolCacheRequests(t *testing.T) {
t.Log(reqno, "=>", "svc is nil") t.Log(reqno, "=>", "svc is nil")
atomic.AddUint64(&failedRequests, 1) atomic.AddUint64(&failedRequests, 1)
} }
// } else {
// t.Log(reqno, "=>", svc.Name)
// }
} }
}(i) }(reqno)
if i%simultaneous == 0 { if reqno%simultaneous == 0 {
wg.Wait() wg.Wait()
} }
} }
@@ -258,10 +263,11 @@ func TestPoolCacheRequests(t *testing.T) {
for i := 0; i < tt.concurrency; i++ { for i := 0; i < tt.concurrency; i++ {
for j := 0; j < tt.rpp; j++ { for j := 0; j < tt.rpp; j++ {
wg.Add(1) wg.Add(1)
go func(i int) { svcno := i
go func(svcno int) {
defer wg.Done() defer wg.Done()
p.MarkAvailable(key, fmt.Sprintf("svc-%d", i)) p.MarkAvailable(key, fmt.Sprintf("svc-%d", svcno+1))
}(i) }(svcno)
} }
} }
wg.Wait() wg.Wait()
@@ -270,8 +276,9 @@ func TestPoolCacheRequests(t *testing.T) {
UID: "func", UID: "func",
Generation: 2, Generation: 2,
} }
p.SetSvcValue(context.Background(), newKey, fmt.Sprintf("svc-%d", svcCounter), &FuncSvc{ address := fmt.Sprintf("svc-%d", svcCounter)
Name: "value", p.SetSvcValue(context.Background(), newKey, address, &FuncSvc{
Name: address,
}, resource.MustParse("45m"), tt.rpp, tt.retainPods) }, resource.MustParse("45m"), tt.rpp, tt.retainPods)
funcSvc := p.ListAvailableValue() funcSvc := p.ListAvailableValue()
require.Equal(t, tt.concurrency, len(funcSvc)) require.Equal(t, tt.concurrency, len(funcSvc))
+1 -1
View File
@@ -218,7 +218,7 @@ func CleanupHpa(ctx context.Context, logger *zap.Logger, client kubernetes.Inter
func GetReaperNamespace() map[string]string { func GetReaperNamespace() map[string]string {
ns := utils.DefaultNSResolver() ns := utils.DefaultNSResolver()
//to support backward compatibility we need to cleanup deployment and rolebinding created in function, buidler and default namespace as well // to support backward compatibility we need to cleanup deployment and rolebinding created in function, buidler and default namespace as well
fissionResourceNs := ns.FissionNSWithOptions(utils.WithBuilderNs(), utils.WithFunctionNs(), utils.WithDefaultNs()) fissionResourceNs := ns.FissionNSWithOptions(utils.WithBuilderNs(), utils.WithFunctionNs(), utils.WithDefaultNs())
return fissionResourceNs return fissionResourceNs
} }
+2 -2
View File
@@ -112,12 +112,12 @@ func MergePodSpec(srcPodSpec *apiv1.PodSpec, targetPodSpec *apiv1.PodSpec) (*api
srcPodSpec.EnableServiceLinks = targetPodSpec.EnableServiceLinks srcPodSpec.EnableServiceLinks = targetPodSpec.EnableServiceLinks
} }
//TODO - Security context should be merged instead of overriding. // TODO - Security context should be merged instead of overriding.
if targetPodSpec.SecurityContext != nil { if targetPodSpec.SecurityContext != nil {
srcPodSpec.SecurityContext = targetPodSpec.SecurityContext srcPodSpec.SecurityContext = targetPodSpec.SecurityContext
} }
//TODO - Affinity should be merged instead of overriding. // TODO - Affinity should be merged instead of overriding.
if targetPodSpec.Affinity != nil { if targetPodSpec.Affinity != nil {
srcPodSpec.Affinity = targetPodSpec.Affinity srcPodSpec.Affinity = targetPodSpec.Affinity
} }
+14 -9
View File
@@ -19,45 +19,50 @@ import (
) )
type ( type (
Client struct { ClientInterface interface {
Specialize(context.Context, *fetcher.FunctionSpecializeRequest) error
Fetch(context.Context, *fetcher.FunctionFetchRequest) error
Upload(context.Context, *fetcher.ArchiveUploadRequest) (*fetcher.ArchiveUploadResponse, error)
}
client struct {
logger *zap.Logger logger *zap.Logger
url string url string
httpClient *http.Client httpClient *http.Client
} }
) )
func MakeClient(logger *zap.Logger, fetcherUrl string) *Client { func MakeClient(logger *zap.Logger, fetcherUrl string) ClientInterface {
hc := &http.Client{Transport: otelhttp.NewTransport(http.DefaultTransport)} hc := &http.Client{Transport: otelhttp.NewTransport(http.DefaultTransport)}
return &Client{ return &client{
logger: logger.Named("fetcher_client"), logger: logger.Named("fetcher_client"),
url: strings.TrimSuffix(fetcherUrl, "/"), url: strings.TrimSuffix(fetcherUrl, "/"),
httpClient: hc, httpClient: hc,
} }
} }
func (c *Client) getSpecializeUrl() string { func (c *client) getSpecializeUrl() string {
return c.url + "/specialize" return c.url + "/specialize"
} }
func (c *Client) getFetchUrl() string { func (c *client) getFetchUrl() string {
return c.url + "/fetch" return c.url + "/fetch"
} }
func (c *Client) getUploadUrl() string { func (c *client) getUploadUrl() string {
return c.url + "/upload" return c.url + "/upload"
} }
func (c *Client) Specialize(ctx context.Context, req *fetcher.FunctionSpecializeRequest) error { func (c *client) Specialize(ctx context.Context, req *fetcher.FunctionSpecializeRequest) error {
_, err := sendRequest(c.logger, ctx, c.httpClient, req, c.getSpecializeUrl()) _, err := sendRequest(c.logger, ctx, c.httpClient, req, c.getSpecializeUrl())
return err return err
} }
func (c *Client) Fetch(ctx context.Context, fr *fetcher.FunctionFetchRequest) error { func (c *client) Fetch(ctx context.Context, fr *fetcher.FunctionFetchRequest) error {
_, err := sendRequest(c.logger, ctx, c.httpClient, fr, c.getFetchUrl()) _, err := sendRequest(c.logger, ctx, c.httpClient, fr, c.getFetchUrl())
return err return err
} }
func (c *Client) Upload(ctx context.Context, fr *fetcher.ArchiveUploadRequest) (*fetcher.ArchiveUploadResponse, error) { func (c *client) Upload(ctx context.Context, fr *fetcher.ArchiveUploadRequest) (*fetcher.ArchiveUploadResponse, error) {
body, err := sendRequest(c.logger, ctx, c.httpClient, fr, c.getUploadUrl()) body, err := sendRequest(c.logger, ctx, c.httpClient, fr, c.getUploadUrl())
if err != nil { if err != nil {
return nil, err return nil, err
+5 -4
View File
@@ -75,7 +75,8 @@ func makeVolumeDir(dirPath string) error {
return os.MkdirAll(dirPath, os.ModeDir|0750) return os.MkdirAll(dirPath, os.ModeDir|0750)
} }
func MakeFetcher(logger *zap.Logger, clientGen crd.ClientGeneratorInterface, sharedVolumePath string, sharedSecretPath string, sharedConfigPath string) (*Fetcher, error) { func MakeFetcher(logger *zap.Logger, clientGen crd.ClientGeneratorInterface, sharedVolumePath string, sharedSecretPath string,
sharedConfigPath string, podInfoMountDir string) (*Fetcher, error) {
fLogger := logger.Named("fetcher") fLogger := logger.Named("fetcher")
err := makeVolumeDir(sharedVolumePath) err := makeVolumeDir(sharedVolumePath)
if err != nil { if err != nil {
@@ -99,12 +100,12 @@ func MakeFetcher(logger *zap.Logger, clientGen crd.ClientGeneratorInterface, sha
return nil, errors.Wrap(err, "error making the kube client") return nil, errors.Wrap(err, "error making the kube client")
} }
name, err := os.ReadFile(fv1.PodInfoMount + "/name") name, err := os.ReadFile(podInfoMountDir + "/name")
if err != nil { if err != nil {
return nil, errors.Wrap(err, "error reading pod name from downward volume") return nil, errors.Wrap(err, "error reading pod name from downward volume")
} }
namespace, err := os.ReadFile(fv1.PodInfoMount + "/namespace") namespace, err := os.ReadFile(podInfoMountDir + "/namespace")
if err != nil { if err != nil {
return nil, errors.Wrap(err, "error reading pod namespace from downward volume") return nil, errors.Wrap(err, "error reading pod namespace from downward volume")
} }
@@ -348,7 +349,7 @@ func (fetcher *Fetcher) Fetch(ctx context.Context, pkg *fv1.Package, req Functio
} }
} }
//checking if file is a zip // checking if file is a zip
if match, _ := utils.IsZip(tmpPath); match && !req.KeepArchive { if match, _ := utils.IsZip(tmpPath); match && !req.KeepArchive {
// unarchive tmp file to a tmp unarchive path // unarchive tmp file to a tmp unarchive path
tmpUnarchivePath := filepath.Join(fetcher.sharedVolumePath, uuid.NewString()) tmpUnarchivePath := filepath.Join(fetcher.sharedVolumePath, uuid.NewString())
+8 -1
View File
@@ -18,6 +18,7 @@ package cli
import ( import (
"context" "context"
"io"
"time" "time"
) )
@@ -25,7 +26,7 @@ type (
Input interface { Input interface {
Context() context.Context Context() context.Context
//Parse(input interface{}) error // Parse(input interface{}) error
// IsSet checks whether a flag has been set by the user // IsSet checks whether a flag has been set by the user
IsSet(key string) bool IsSet(key string) bool
@@ -76,5 +77,11 @@ type (
// Duration returns time duration of given flag. // Duration returns time duration of given flag.
Duration(key string) time.Duration Duration(key string) time.Duration
// Stdout returns io.Writer for stdout.
Stdout() io.Writer
// Stderr returns io.Writer for stderr.
Stderr() io.Writer
} }
) )
@@ -19,6 +19,7 @@ package cobra
import ( import (
"context" "context"
"fmt" "fmt"
"io"
"strings" "strings"
"time" "time"
@@ -311,3 +312,11 @@ func (u Cli) Duration(key string) time.Duration {
v, _ := u.c.Flags().GetDuration(key) v, _ := u.c.Flags().GetDuration(key)
return v return v
} }
func (u Cli) Stdout() io.Writer {
return u.c.OutOrStdout()
}
func (u Cli) Stderr() io.Writer {
return u.c.OutOrStderr()
}
@@ -18,6 +18,8 @@ package dummy
import ( import (
"context" "context"
"io"
"os"
"time" "time"
fCli "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" fCli "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli"
@@ -169,3 +171,11 @@ func (u Cli) Duration(key string) time.Duration {
} }
return val.(time.Duration) return val.(time.Duration)
} }
func (u Cli) Stdout() io.Writer {
return os.Stdout
}
func (u Cli) Stderr() io.Writer {
return os.Stderr
}
+1 -1
View File
@@ -50,7 +50,7 @@ func (opts *DeleteSubCommand) do(input cli.Input) error {
return err return err
} }
fmt.Printf("Deleted archive with id: %s", archiveID) fmt.Printf("Deleted archive with id: %s\n", archiveID)
return nil return nil
} }
+2 -3
View File
@@ -66,12 +66,11 @@ func (opts *GetURLSubCommand) do(input cli.Input) error {
storageType := resp.Header.Get("X-FISSION-STORAGETYPE") storageType := resp.Header.Get("X-FISSION-STORAGETYPE")
if storageType == "local" { if storageType == "local" {
storageSvc, err := util.GetSvcName(input.Context(), opts.Client().KubernetesClient, "fission-storage") storagesvcURL, err := util.GetStorageURL(input.Context(), opts.Client())
if err != nil { if err != nil {
return err return err
} }
storagesvcURL := "http://" + storageSvc client := storagesvcClient.MakeClient(storagesvcURL.String())
client := storagesvcClient.MakeClient(storagesvcURL)
fmt.Printf("URL: %s", client.GetUrl(archiveID)) fmt.Printf("URL: %s", client.GetUrl(archiveID))
} else if storageType == "s3" { } else if storageType == "s3" {
storageBucket := resp.Header.Get("X-FISSION-BUCKET") storageBucket := resp.Header.Get("X-FISSION-BUCKET")
+1 -2
View File
@@ -49,7 +49,6 @@ func (opts *UploadSubCommand) do(input cli.Input) error {
return err return err
} }
fmt.Printf("File successfully uploaded with ID: %s ", archiveID) fmt.Fprintf(input.Stdout(), "File successfully uploaded with ID: %s\n", archiveID)
return nil return nil
} }
+3 -3
View File
@@ -70,7 +70,7 @@ func (opts *LogSubCommand) do(input cli.Input) error {
// request the controller to establish a proxy server to the database. // request the controller to establish a proxy server to the database.
logDB, err := logdb.GetLogDB(dbType, input.Context(), logDBOptions) logDB, err := logdb.GetLogDB(dbType, input.Context(), logDBOptions)
if err != nil { if err != nil {
return errors.Wrapf(err, "failed to get log database") return errors.Wrapf(err, "failed to get log from %s", dbType)
} }
requestChan := make(chan struct{}) requestChan := make(chan struct{})
@@ -103,7 +103,7 @@ func (opts *LogSubCommand) do(input cli.Input) error {
t = time.Now().UTC() // next time fetch values from this time t = time.Now().UTC() // next time fetch values from this time
if err != nil { if err != nil {
console.Verbose(2, "error querying logs: %s", err) console.Verbose(2, "error querying logs: %s", err)
if dbType == logdb.KUBERNETES { //in case of Kubernetes log we print pod namespace warning once if dbType == logdb.KUBERNETES { // in case of Kubernetes log we print pod namespace warning once
warn = false warn = false
} }
responseChan <- struct{}{} responseChan <- struct{}{}
@@ -116,7 +116,7 @@ func (opts *LogSubCommand) do(input cli.Input) error {
continue continue
} }
if dbType == logdb.KUBERNETES { //in case of Kubernetes log we print pods info only once. And then print new logs if dbType == logdb.KUBERNETES { // in case of Kubernetes log we print pods info only once. And then print new logs
detail = false detail = false
} }
responseChan <- struct{}{} responseChan <- struct{}{}

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