Compare commits
3 Commits
0.2.0
..
90d21f1dd8
| Author | SHA1 | Date | |
|---|---|---|---|
|
90d21f1dd8
|
|||
|
93fd4e89d5
|
|||
|
0d160b5f08
|
@@ -1,7 +0,0 @@
|
|||||||
*
|
|
||||||
|
|
||||||
!pkg
|
|
||||||
!controller.go
|
|
||||||
!main.go
|
|
||||||
!go.mod
|
|
||||||
!go.sum
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
name: Go Cache Key
|
|
||||||
description: Create a cache key for Go dependencies
|
|
||||||
|
|
||||||
outputs:
|
|
||||||
hash:
|
|
||||||
description: The cache key for Go dependencies
|
|
||||||
value: ${{ steps.hash-go.outputs.hash }}
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: composite
|
|
||||||
steps:
|
|
||||||
- name: Create cache key
|
|
||||||
shell: bash
|
|
||||||
id: hash-go
|
|
||||||
run: |
|
|
||||||
echo "hash=$(sha256sum go.mod go.sum | sha256sum | cut -d' ' -f1)" >> "$GITHUB_OUTPUT"
|
|
||||||
@@ -1,104 +0,0 @@
|
|||||||
name: CD
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
- "go.mod"
|
|
||||||
- "go.sum"
|
|
||||||
- "**/*.go"
|
|
||||||
- "Dockerfile"
|
|
||||||
- "Makefile"
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
env:
|
|
||||||
DOCKER_REGISTRY: gitea.t000-n.de
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_and_push:
|
|
||||||
name: Build and push
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
arch: [amd64]
|
|
||||||
runs-on:
|
|
||||||
- ubuntu-latest
|
|
||||||
- linux_${{ matrix.arch }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0
|
|
||||||
- name: Login to Registry
|
|
||||||
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
|
|
||||||
with:
|
|
||||||
registry: ${{ env.DOCKER_REGISTRY }}
|
|
||||||
username: ${{ secrets.REGISTRY_USER }}
|
|
||||||
password: ${{ secrets.REGISTRY_PASSWORD }}
|
|
||||||
- name: Get Metadata
|
|
||||||
id: meta
|
|
||||||
run: |
|
|
||||||
echo REPO_NAME=$(echo ${GITHUB_REPOSITORY} | awk -F"/" '{print $2}' | tr '[:upper:]' '[:lower:]') >> $GITHUB_OUTPUT
|
|
||||||
echo REPO_VERSION=$(git describe --tags --always | sed 's/^v//') >> $GITHUB_OUTPUT
|
|
||||||
- name: Build and push
|
|
||||||
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: ./Dockerfile
|
|
||||||
platforms: linux/${{ matrix.arch }}
|
|
||||||
push: true
|
|
||||||
provenance: false
|
|
||||||
build-args: GOARCH=${{ matrix.arch }}
|
|
||||||
tags: |
|
|
||||||
${{ env.DOCKER_REGISTRY }}/t.behrendt/${{ steps.meta.outputs.REPO_NAME }}:${{ steps.meta.outputs.REPO_VERSION }}-${{ matrix.arch }}
|
|
||||||
|
|
||||||
create_tag:
|
|
||||||
name: Create tag
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
outputs:
|
|
||||||
tag: ${{ steps.tag.outputs.new-tag }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: https://gitea.t000-n.de/t.behrendt/conventional-semantic-git-tag-increment@ef0c23189db33220a73022d8c29a27709d0df440 # 0.1.32
|
|
||||||
id: tag
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GITEA_TOKEN }}
|
|
||||||
prerelease: ${{ github.event_name == 'workflow_dispatch' }}
|
|
||||||
- run: |
|
|
||||||
git tag ${{ steps.tag.outputs.new-tag }}
|
|
||||||
git push origin ${{ steps.tag.outputs.new-tag }}
|
|
||||||
- name: Set output
|
|
||||||
run: |
|
|
||||||
echo "tag=${{ steps.tag.outputs.new-tag }}" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
create_manifest:
|
|
||||||
name: Create manifest
|
|
||||||
needs:
|
|
||||||
- build_and_push
|
|
||||||
- create_tag
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
||||||
|
|
||||||
- name: Get Metadata
|
|
||||||
id: meta
|
|
||||||
run: |
|
|
||||||
echo REPO_NAME=$(echo ${GITHUB_REPOSITORY} | awk -F"/" '{print $2}' | tr '[:upper:]' '[:lower:]') >> $GITHUB_OUTPUT
|
|
||||||
echo REPO_VERSION=$(git describe --tags --always | sed 's/^v//') >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Login to Registry
|
|
||||||
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
|
|
||||||
with:
|
|
||||||
registry: ${{ env.DOCKER_REGISTRY }}
|
|
||||||
username: ${{ secrets.REGISTRY_USER }}
|
|
||||||
password: ${{ secrets.REGISTRY_PASSWORD }}
|
|
||||||
|
|
||||||
- name: Create manifest
|
|
||||||
run: |
|
|
||||||
docker manifest create ${{ env.DOCKER_REGISTRY }}/t.behrendt/${{ steps.meta.outputs.REPO_NAME }}:${{ needs.create_tag.outputs.tag }} \
|
|
||||||
${{ env.DOCKER_REGISTRY }}/t.behrendt/${{ steps.meta.outputs.REPO_NAME }}:${{ steps.meta.outputs.REPO_VERSION }}-amd64
|
|
||||||
|
|
||||||
docker manifest push ${{ env.DOCKER_REGISTRY }}/t.behrendt/${{ steps.meta.outputs.REPO_NAME }}:${{ needs.create_tag.outputs.tag }}
|
|
||||||
+20
-34
@@ -8,44 +8,30 @@ env:
|
|||||||
RUNNER_TOOL_CACHE: /toolcache
|
RUNNER_TOOL_CACHE: /toolcache
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
install-dependencies:
|
|
||||||
uses: ./.gitea/workflows/install-go-dependencies.yaml
|
|
||||||
|
|
||||||
build-check:
|
|
||||||
name: build check
|
|
||||||
needs: install-dependencies
|
|
||||||
uses: ./.gitea/workflows/run-go-script.yaml
|
|
||||||
with:
|
|
||||||
script: build
|
|
||||||
|
|
||||||
check-format:
|
|
||||||
name: check format
|
|
||||||
needs: install-dependencies
|
|
||||||
uses: ./.gitea/workflows/run-go-script.yaml
|
|
||||||
with:
|
|
||||||
script: check-format
|
|
||||||
|
|
||||||
check-lint:
|
|
||||||
name: check lint
|
|
||||||
needs: install-dependencies
|
|
||||||
uses: ./.gitea/workflows/run-go-script.yaml
|
|
||||||
with:
|
|
||||||
script: lint
|
|
||||||
|
|
||||||
test:
|
test:
|
||||||
name: test
|
name: test
|
||||||
needs: install-dependencies
|
|
||||||
uses: ./.gitea/workflows/run-go-script.yaml
|
|
||||||
with:
|
|
||||||
script: test
|
|
||||||
|
|
||||||
image-check:
|
|
||||||
name: image check
|
|
||||||
runs-on:
|
runs-on:
|
||||||
- ubuntu-latest
|
- ubuntu-latest
|
||||||
- linux_amd64
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
- name: Build image
|
- name: Setup go
|
||||||
run: make build-image
|
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6
|
||||||
|
with:
|
||||||
|
go-version-file: go.mod
|
||||||
|
check-latest: true
|
||||||
|
- name: Create cache key
|
||||||
|
id: hash-go
|
||||||
|
run: echo "hash=$(sha256sum go.mod go.sum | sha256sum | cut -d' ' -f1)" >> "$GITHUB_OUTPUT"
|
||||||
|
- name: cache go
|
||||||
|
id: cache-go
|
||||||
|
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
/go_path
|
||||||
|
/go_cache
|
||||||
|
key: go_path-${{ steps.hash-go.outputs.hash }}
|
||||||
|
restore-keys: |-
|
||||||
|
go_cache-${{ steps.hash-go.outputs.hash }}
|
||||||
|
- name: build
|
||||||
|
run: make build
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
name: Install Go Dependencies
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
install-dependencies:
|
|
||||||
runs-on:
|
|
||||||
- ubuntu-latest
|
|
||||||
- linux_amd64
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
||||||
- name: Setup go
|
|
||||||
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
|
|
||||||
with:
|
|
||||||
go-version-file: go.mod
|
|
||||||
check-latest: true
|
|
||||||
- name: Create cache key
|
|
||||||
id: go-cache-key
|
|
||||||
uses: ./.gitea/actions/go-cache-key
|
|
||||||
- name: cache go
|
|
||||||
id: cache-go
|
|
||||||
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
/go_path
|
|
||||||
/go_cache
|
|
||||||
key: go_path-${{ steps.go-cache-key.outputs.hash }}
|
|
||||||
restore-keys: |-
|
|
||||||
go_cache-${{ steps.go-cache-key.outputs.hash }}
|
|
||||||
- name: Download dependencies
|
|
||||||
run: go mod download
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
name: Run Go Script
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
script:
|
|
||||||
description: The script to run
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run-script:
|
|
||||||
runs-on:
|
|
||||||
- ubuntu-latest
|
|
||||||
- linux_amd64
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
||||||
- name: Setup go
|
|
||||||
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
|
|
||||||
with:
|
|
||||||
go-version-file: go.mod
|
|
||||||
check-latest: true
|
|
||||||
- name: Create cache key
|
|
||||||
id: go-cache-key
|
|
||||||
uses: ./.gitea/actions/go-cache-key
|
|
||||||
- name: Install dependencies from Cache
|
|
||||||
id: cache-go
|
|
||||||
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
/go_path
|
|
||||||
/go_cache
|
|
||||||
key: go_path-${{ steps.go-cache-key.outputs.hash }}
|
|
||||||
restore-keys: |-
|
|
||||||
go_cache-${{ steps.go-cache-key.outputs.hash }}
|
|
||||||
- name: Run script
|
|
||||||
run: make ${{ inputs.script }}
|
|
||||||
@@ -14,7 +14,6 @@
|
|||||||
|
|
||||||
# Output of the go coverage tool, specifically when used with LiteIDE
|
# Output of the go coverage tool, specifically when used with LiteIDE
|
||||||
*.out
|
*.out
|
||||||
lcov.info
|
|
||||||
|
|
||||||
# Dependency directories (remove the comment below to include it)
|
# Dependency directories (remove the comment below to include it)
|
||||||
# vendor/
|
# vendor/
|
||||||
@@ -31,4 +30,3 @@ vendor/
|
|||||||
|
|
||||||
# build artifacts
|
# build artifacts
|
||||||
main
|
main
|
||||||
__debug_bin*
|
|
||||||
|
|||||||
Vendored
+3
@@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"configurations": [
|
"configurations": [
|
||||||
{
|
{
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
FROM docker.io/library/golang:1.26.3@sha256:313faae491b410a35402c05d35e7518ae99103d957308e940e1ae2cfa0aac29b AS build
|
FROM docker.io/library/golang:1.25-alpine@sha256:04d017a27c481185c169884328a5761d052910fdced8c3b8edd686474efdf59b AS build
|
||||||
|
|
||||||
ARG GOARCH=amd64
|
ARG GOARCH=amd64
|
||||||
|
|
||||||
|
|||||||
@@ -2,39 +2,14 @@ ifneq (,$(wildcard ./.env))
|
|||||||
include .env
|
include .env
|
||||||
export
|
export
|
||||||
endif
|
endif
|
||||||
.PHONY: build run codegen build-image test test-unit test-coverage lint format check-format
|
.PHONY: build run codegen
|
||||||
|
|
||||||
build:
|
build:
|
||||||
go build -o main
|
go build -o main
|
||||||
|
|
||||||
build-image:
|
|
||||||
docker build -t authentik-kubernetes-operator:latest .
|
|
||||||
|
|
||||||
run:
|
run:
|
||||||
make build
|
make build
|
||||||
./main --kubeconfig=/home/tbehrendt/.kube/config
|
./main --kubeconfig=/home/tbehrendt/.kube/config
|
||||||
|
|
||||||
codegen:
|
codegen:
|
||||||
./scripts/codegen.sh
|
./scripts/codegen.sh
|
||||||
|
|
||||||
test: test-unit test-coverage
|
|
||||||
|
|
||||||
test-unit:
|
|
||||||
go test . -coverprofile=coverage.out
|
|
||||||
|
|
||||||
test-coverage:
|
|
||||||
go tool gcov2lcov -infile coverage.out > lcov.info
|
|
||||||
|
|
||||||
lint:
|
|
||||||
go vet ./...
|
|
||||||
|
|
||||||
format:
|
|
||||||
gofmt -w .
|
|
||||||
|
|
||||||
check-format:
|
|
||||||
@OUTPUT=$$(gofmt -l .); \
|
|
||||||
if [ -n "$$OUTPUT" ]; then \
|
|
||||||
echo "Formatter failed for:"; \
|
|
||||||
echo "$$OUTPUT"; \
|
|
||||||
exit 1; \
|
|
||||||
fi
|
|
||||||
|
|||||||
@@ -2,56 +2,4 @@
|
|||||||
|
|
||||||
Authentik Kubernetes Operator allows to manage Authentik resources directly in Kubernetes using Custom Kubernetes Resources.
|
Authentik Kubernetes Operator allows to manage Authentik resources directly in Kubernetes using Custom Kubernetes Resources.
|
||||||
|
|
||||||
The custom resources of this operator ultimately will mirror the Authentik resources. New resources will be added as there is a need for them.
|
## Features
|
||||||
|
|
||||||
Manual changes to the resources in Authentik will be overwritten by the operator. So always manage the resources in Kubernetes.
|
|
||||||
|
|
||||||
## Custom Resources
|
|
||||||
|
|
||||||
| Custom Resource | CRD File | Short Name |
|
|
||||||
| --------------- | ---------------------------------------------------------- | ---------- |
|
|
||||||
| ProxyProvider | [`proxyProvider.yaml`](`artifacts/crd/proxyProvider.yaml`) | pp |
|
|
||||||
|
|
||||||
### ProxyProvider
|
|
||||||
|
|
||||||
Currently only the "Forward Single" ProxyProvider is supported and only a reduced set of fields are exposed by the custom resources.
|
|
||||||
|
|
||||||
Example [`proxyProvider.yaml`](`artifacts/examples/proxyProvider.yaml`):
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
apiVersion: proxyprovider.t000-n.de/v1alpha1
|
|
||||||
kind: ProxyProvider
|
|
||||||
metadata:
|
|
||||||
name: proxy-provider-example
|
|
||||||
namespace: kube-system
|
|
||||||
spec:
|
|
||||||
name: proxy-provider-example
|
|
||||||
# The ID of the authorization flow. In this example: "default-provider-authorization-implicit-consent (Authorize Application)"
|
|
||||||
authorization_flow: 16896c6d-b326-42d1-8d3f-93f32921962e
|
|
||||||
# The ID of the invalidation flow. In this example: "default-provider-invalidation-flow (Logged out of application)"
|
|
||||||
invalidation_flow: 7acac1ef-19e3-4a6f-8d8d-14ca7031d184
|
|
||||||
# The external host of your application.
|
|
||||||
external_host: https://example.t00n.de
|
|
||||||
```
|
|
||||||
|
|
||||||
The ProxyProvider will be created in Authentik, but will not be assigned to an outpost or an application (Resources are TBD).
|
|
||||||
|
|
||||||
## Versioning
|
|
||||||
|
|
||||||
As soon as the operator covers an entire use case, the version will be raised to v1 and follow default versioning rules. Before that, the version will be v1alpha1.
|
|
||||||
|
|
||||||
## Development
|
|
||||||
|
|
||||||
### Guidelines & Tips
|
|
||||||
|
|
||||||
- Only do a single reconciliation at a time and then return.
|
|
||||||
- This is because your references from the k8s API get stale after each update.
|
|
||||||
- Whenever you update a resource, k8s API will send a new event to your controller, which will trigger a new reconciliation.
|
|
||||||
- The API will periodically send a resource to the controller for re-syncing, giving the controller a chance to reconcile the state with the outside world.
|
|
||||||
- Use finalizers to ensure that the controller gets a chance to reconcile the state with the outside world before the object is deleted. If no finalizer is present, the object is deleted immediately without the controller seeing it.
|
|
||||||
- Use the resource's state to keep track of the current state of the outside world, e.g. identifiers of external resources, etc.
|
|
||||||
|
|
||||||
### References
|
|
||||||
|
|
||||||
- [Extend Kubernetes](https://kubernetes.io/docs/concepts/extend-kubernetes/#api-extensions)
|
|
||||||
- [Example Controller Implementation](https://github.com/kubernetes/sample-controller)
|
|
||||||
|
|||||||
@@ -1,56 +0,0 @@
|
|||||||
apiVersion: apiextensions.k8s.io/v1
|
|
||||||
kind: CustomResourceDefinition
|
|
||||||
metadata:
|
|
||||||
name: applications.application.t000-n.de
|
|
||||||
spec:
|
|
||||||
group: application.t000-n.de
|
|
||||||
versions:
|
|
||||||
- name: v1alpha1
|
|
||||||
served: true
|
|
||||||
storage: true
|
|
||||||
subresources:
|
|
||||||
status: {}
|
|
||||||
additionalPrinterColumns:
|
|
||||||
- name: PK
|
|
||||||
type: string
|
|
||||||
jsonPath: .status.pk
|
|
||||||
- name: Name
|
|
||||||
type: string
|
|
||||||
jsonPath: .spec.name
|
|
||||||
- name: Slug
|
|
||||||
type: string
|
|
||||||
jsonPath: .spec.slug
|
|
||||||
schema:
|
|
||||||
openAPIV3Schema:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
spec:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
description: Application's display name
|
|
||||||
slug:
|
|
||||||
type: string
|
|
||||||
description: Internal application name, used in URLs.
|
|
||||||
pattern: ^[-a-zA-Z0-9_]+$
|
|
||||||
provider:
|
|
||||||
type: integer
|
|
||||||
format: int32
|
|
||||||
required:
|
|
||||||
- name
|
|
||||||
- slug
|
|
||||||
status:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
pk:
|
|
||||||
type: string
|
|
||||||
format: uuid
|
|
||||||
required:
|
|
||||||
- pk
|
|
||||||
names:
|
|
||||||
kind: Application
|
|
||||||
plural: applications
|
|
||||||
shortNames:
|
|
||||||
- app
|
|
||||||
scope: Namespaced
|
|
||||||
@@ -2,12 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
|
|||||||
kind: CustomResourceDefinition
|
kind: CustomResourceDefinition
|
||||||
metadata:
|
metadata:
|
||||||
name: proxyproviders.proxyprovider.t000-n.de
|
name: proxyproviders.proxyprovider.t000-n.de
|
||||||
finalizers:
|
|
||||||
- proxyprovider.t000-n.de/delete-authentik-proxyprovider
|
|
||||||
spec:
|
spec:
|
||||||
group: proxyprovider.t000-n.de
|
group: proxyprovider.t000-n.de
|
||||||
versions:
|
versions:
|
||||||
- name: v1alpha1
|
- name: v1
|
||||||
served: true
|
served: true
|
||||||
storage: true
|
storage: true
|
||||||
subresources:
|
subresources:
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
apiVersion: apiextensions.k8s.io/v1
|
|
||||||
kind: CustomResourceDefinition
|
|
||||||
metadata:
|
|
||||||
name: policybindings.policybinding.t000-n.de
|
|
||||||
spec:
|
|
||||||
group: policybinding.t000-n.de
|
|
||||||
versions:
|
|
||||||
- name: v1alpha1
|
|
||||||
served: true
|
|
||||||
storage: true
|
|
||||||
subresources:
|
|
||||||
status: {}
|
|
||||||
additionalPrinterColumns:
|
|
||||||
- name: PK
|
|
||||||
type: string
|
|
||||||
jsonPath: .status.pk
|
|
||||||
schema:
|
|
||||||
openAPIV3Schema:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
spec:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
policy:
|
|
||||||
type: string
|
|
||||||
format: uuid
|
|
||||||
group:
|
|
||||||
type: string
|
|
||||||
format: uuid
|
|
||||||
user:
|
|
||||||
type: integer
|
|
||||||
format: int32
|
|
||||||
target:
|
|
||||||
type: string
|
|
||||||
format: uuid
|
|
||||||
order:
|
|
||||||
type: integer
|
|
||||||
required:
|
|
||||||
- target
|
|
||||||
- order
|
|
||||||
status:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
pk:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- pk
|
|
||||||
names:
|
|
||||||
kind: PolicyBinding
|
|
||||||
plural: policybindings
|
|
||||||
shortNames:
|
|
||||||
- pb
|
|
||||||
scope: Namespaced
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# Example ProxyProvider CRD
|
# Example ProxyProvider CRD
|
||||||
apiVersion: proxyprovider.t000-n.de/v1alpha1
|
apiVersion: proxyprovider.t000-n.de/v1
|
||||||
kind: ProxyProvider
|
kind: ProxyProvider
|
||||||
metadata:
|
metadata:
|
||||||
name: proxy-provider-example
|
name: proxy-provider-example
|
||||||
|
|||||||
@@ -14,36 +14,37 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package proxyprovider
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
|
||||||
"slices"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"golang.org/x/time/rate"
|
"golang.org/x/time/rate"
|
||||||
|
|
||||||
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
|
appsinformers "k8s.io/client-go/informers/apps/v1"
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/client-go/kubernetes/scheme"
|
"k8s.io/client-go/kubernetes/scheme"
|
||||||
typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||||
|
appslisters "k8s.io/client-go/listers/apps/v1"
|
||||||
"k8s.io/client-go/tools/cache"
|
"k8s.io/client-go/tools/cache"
|
||||||
"k8s.io/client-go/tools/record"
|
"k8s.io/client-go/tools/record"
|
||||||
"k8s.io/client-go/util/workqueue"
|
"k8s.io/client-go/util/workqueue"
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
|
|
||||||
v1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1"
|
v1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1"
|
||||||
clientset "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned"
|
clientset "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned"
|
||||||
operatorscheme "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/scheme"
|
operatorscheme "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/scheme"
|
||||||
informers "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/proxyprovider/v1alpha1"
|
informers "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/proxyprovider/v1"
|
||||||
listers "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/listers/proxyprovider/v1alpha1"
|
listers "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/listers/proxyprovider/v1"
|
||||||
authentikapi "goauthentik.io/api/v3"
|
authentikapi "goauthentik.io/api/v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -57,18 +58,15 @@ const (
|
|||||||
FieldManager = controllerAgentName
|
FieldManager = controllerAgentName
|
||||||
)
|
)
|
||||||
|
|
||||||
// Finalizers
|
|
||||||
const (
|
|
||||||
DeleteAuthentikProxyProviderFinalizer = "proxyprovider.t000-n.de/delete-authentik-proxyprovider"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Controller struct {
|
type Controller struct {
|
||||||
kubeclientset kubernetes.Interface
|
kubeclientset kubernetes.Interface
|
||||||
proxyProviderClientset clientset.Interface
|
proxyProviderClientset clientset.Interface
|
||||||
authentik *authentikapi.APIClient
|
authentik *authentikapi.APIClient
|
||||||
|
|
||||||
proxyLister listers.ProxyProviderLister
|
deploymentsLister appslisters.DeploymentLister
|
||||||
proxySynced cache.InformerSynced
|
deploymentsSynced cache.InformerSynced
|
||||||
|
proxyLister listers.ProxyProviderLister
|
||||||
|
proxySynced cache.InformerSynced
|
||||||
|
|
||||||
workqueue workqueue.TypedRateLimitingInterface[cache.ObjectName]
|
workqueue workqueue.TypedRateLimitingInterface[cache.ObjectName]
|
||||||
recorder record.EventRecorder
|
recorder record.EventRecorder
|
||||||
@@ -79,6 +77,7 @@ func NewController(
|
|||||||
kubeclientset kubernetes.Interface,
|
kubeclientset kubernetes.Interface,
|
||||||
proxyProviderClientset clientset.Interface,
|
proxyProviderClientset clientset.Interface,
|
||||||
authentik *authentikapi.APIClient,
|
authentik *authentikapi.APIClient,
|
||||||
|
deploymentInformer appsinformers.DeploymentInformer,
|
||||||
proxyInformer informers.ProxyProviderInformer,
|
proxyInformer informers.ProxyProviderInformer,
|
||||||
) *Controller {
|
) *Controller {
|
||||||
logger := klog.FromContext(ctx)
|
logger := klog.FromContext(ctx)
|
||||||
@@ -99,6 +98,8 @@ func NewController(
|
|||||||
kubeclientset: kubeclientset,
|
kubeclientset: kubeclientset,
|
||||||
proxyProviderClientset: proxyProviderClientset,
|
proxyProviderClientset: proxyProviderClientset,
|
||||||
authentik: authentik,
|
authentik: authentik,
|
||||||
|
deploymentsLister: deploymentInformer.Lister(),
|
||||||
|
deploymentsSynced: deploymentInformer.Informer().HasSynced,
|
||||||
proxyLister: proxyInformer.Lister(),
|
proxyLister: proxyInformer.Lister(),
|
||||||
proxySynced: proxyInformer.Informer().HasSynced,
|
proxySynced: proxyInformer.Informer().HasSynced,
|
||||||
workqueue: workqueue.NewTypedRateLimitingQueue(ratelimiter),
|
workqueue: workqueue.NewTypedRateLimitingQueue(ratelimiter),
|
||||||
@@ -112,6 +113,18 @@ func NewController(
|
|||||||
c.enqueueProxyProvider(newObj)
|
c.enqueueProxyProvider(newObj)
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
deploymentInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
|
||||||
|
AddFunc: c.handleObject,
|
||||||
|
UpdateFunc: func(old, new interface{}) {
|
||||||
|
newDepl := new.(*appsv1.Deployment)
|
||||||
|
oldDepl := old.(*appsv1.Deployment)
|
||||||
|
if newDepl.ResourceVersion == oldDepl.ResourceVersion {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.handleObject(new)
|
||||||
|
},
|
||||||
|
DeleteFunc: c.handleObject,
|
||||||
|
})
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
@@ -124,7 +137,7 @@ func (c *Controller) Run(ctx context.Context, workers int) error {
|
|||||||
logger.Info("Starting ProxyProvider controller")
|
logger.Info("Starting ProxyProvider controller")
|
||||||
|
|
||||||
logger.Info("Waiting for informer caches to sync")
|
logger.Info("Waiting for informer caches to sync")
|
||||||
if ok := cache.WaitForCacheSync(ctx.Done(), c.proxySynced); !ok {
|
if ok := cache.WaitForCacheSync(ctx.Done(), c.deploymentsSynced, c.proxySynced); !ok {
|
||||||
return fmt.Errorf("failed to wait for caches to sync")
|
return fmt.Errorf("failed to wait for caches to sync")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -176,98 +189,54 @@ func (c *Controller) syncHandler(ctx context.Context, objectRef cache.ObjectName
|
|||||||
}
|
}
|
||||||
logger.V(4).Info("sync ProxyProvider", "name", pp.Name)
|
logger.V(4).Info("sync ProxyProvider", "name", pp.Name)
|
||||||
|
|
||||||
if !pp.ObjectMeta.DeletionTimestamp.IsZero() {
|
if pp.Status.PK != "" {
|
||||||
logger.Info("Reconciling deletion of ProxyProvider", "name", pp.Name)
|
// We retrieve the existing PP from the API by slug.
|
||||||
return c.reconcileDelete(ctx, pp)
|
pk, err := strconv.ParseInt(pp.Status.PK, 10, 32)
|
||||||
}
|
if err != nil {
|
||||||
|
return fmt.Errorf("error parsing PK: %v", err)
|
||||||
|
}
|
||||||
|
_, _, err = c.authentik.ProvidersApi.ProvidersAllRetrieve(ctx, int32(pk)).Execute()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error retrieving existing ProxyProvider: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
if pp.Status.PK == "" {
|
// We update the existing PP with the new spec.
|
||||||
logger.Info("Reconciling creation of ProxyProvider", "name", pp.Name)
|
proxyProviderRequest := &authentikapi.ProxyProviderRequest{
|
||||||
return c.reconcileCreate(ctx, pp)
|
Name: pp.Spec.Name,
|
||||||
}
|
AuthorizationFlow: pp.Spec.AuthorizationFlow,
|
||||||
|
InvalidationFlow: pp.Spec.InvalidationFlow,
|
||||||
// Check if all finalizers are present. If not, we add them. Same pattern as above, just needs a helper function to check for presence of a finalizer.
|
ExternalHost: pp.Spec.ExternalHost,
|
||||||
if !slices.Contains(pp.ObjectMeta.Finalizers, DeleteAuthentikProxyProviderFinalizer) {
|
Mode: authentikapi.PROXYMODE_FORWARD_SINGLE.Ptr(),
|
||||||
logger.Info("Ensuring finalizers are present", "name", pp.Name)
|
}
|
||||||
return c.ensureFinalizers(ctx, pp)
|
resp, r, err := c.authentik.ProvidersApi.ProvidersProxyUpdate(ctx, int32(pk)).ProxyProviderRequest(*proxyProviderRequest).Execute()
|
||||||
}
|
if err != nil {
|
||||||
|
return fmt.Errorf("error when calling `ProvidersAPI.ProvidersProxyUpdate`: %w with response %v", err, r)
|
||||||
logger.Info("Reconciling update of ProxyProvider", "name", pp.Name)
|
}
|
||||||
return c.reconcileUpdate(ctx, pp)
|
pp.Status.PK = strconv.Itoa(int(resp.Pk))
|
||||||
}
|
err = c.updateProxyProviderStatus(ctx, pp)
|
||||||
|
if err != nil {
|
||||||
func (c *Controller) ensureFinalizers(ctx context.Context, pp *v1alpha1.ProxyProvider) error {
|
return fmt.Errorf("error updating ProxyProvider status: %v", err)
|
||||||
pp.ObjectMeta.Finalizers = append(pp.ObjectMeta.Finalizers, DeleteAuthentikProxyProviderFinalizer)
|
}
|
||||||
return c.updateProxyProvider(ctx, pp)
|
} else {
|
||||||
}
|
proxyProviderRequest := &authentikapi.ProxyProviderRequest{
|
||||||
|
Name: pp.Spec.Name,
|
||||||
func (c *Controller) reconcileDelete(ctx context.Context, pp *v1alpha1.ProxyProvider) error {
|
AuthorizationFlow: pp.Spec.AuthorizationFlow,
|
||||||
pk, err := strconv.ParseInt(pp.Status.PK, 10, 32)
|
InvalidationFlow: pp.Spec.InvalidationFlow,
|
||||||
if err != nil {
|
ExternalHost: pp.Spec.ExternalHost,
|
||||||
return fmt.Errorf("error parsing PK: %v", err)
|
Mode: authentikapi.PROXYMODE_FORWARD_SINGLE.Ptr(),
|
||||||
}
|
}
|
||||||
|
resp, r, err := c.authentik.ProvidersApi.ProvidersProxyCreate(ctx).ProxyProviderRequest(*proxyProviderRequest).Execute()
|
||||||
r, err := c.authentik.ProvidersApi.ProvidersProxyDestroy(ctx, int32(pk)).Execute()
|
if err != nil {
|
||||||
if err != nil {
|
return fmt.Errorf("error when calling `ProvidersAPI.ProvidersProxyCreate`: %w with response %v", err, r)
|
||||||
// This handles an edge-case, where when the ProxyProvider on Authentik has already been deleted, but the finalizer is still present. We just remove the finalizer and return.
|
}
|
||||||
if r != nil && r.StatusCode != http.StatusNotFound {
|
pp.Status.PK = strconv.Itoa(int(resp.Pk))
|
||||||
return fmt.Errorf("error when calling `ProvidersAPI.ProvidersProxyDestroy`: %w with response %v", err, r)
|
err = c.updateProxyProviderStatus(ctx, pp)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error updating ProxyProvider status: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pp.ObjectMeta.Finalizers = slices.Delete(pp.ObjectMeta.Finalizers, slices.Index(pp.ObjectMeta.Finalizers, DeleteAuthentikProxyProviderFinalizer), 1)
|
return nil
|
||||||
return c.updateProxyProvider(ctx, pp)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) reconcileUpdate(ctx context.Context, pp *v1alpha1.ProxyProvider) error {
|
|
||||||
// We retrieve the existing PP from the API by slug.
|
|
||||||
pk, err := strconv.ParseInt(pp.Status.PK, 10, 32)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("error parsing PK: %v", err)
|
|
||||||
}
|
|
||||||
_, r, err := c.authentik.ProvidersApi.ProvidersAllRetrieve(ctx, int32(pk)).Execute()
|
|
||||||
if err != nil {
|
|
||||||
if r != nil && r.StatusCode == http.StatusNotFound {
|
|
||||||
// This handles an edge-case, where when the PorxyProvider on Authentik has been deleted, e.g. by mistake. We just remove the PK and return.
|
|
||||||
// During the next reconciliation, the ProxyProvider will be re-created.
|
|
||||||
pp.Status.PK = ""
|
|
||||||
return c.updateProxyProviderStatus(ctx, pp)
|
|
||||||
}
|
|
||||||
return fmt.Errorf("error retrieving existing ProxyProvider: %v with response %v", err, r)
|
|
||||||
}
|
|
||||||
|
|
||||||
proxyProviderRequest := &authentikapi.PatchedProxyProviderRequest{
|
|
||||||
Name: &pp.Spec.Name,
|
|
||||||
AuthorizationFlow: &pp.Spec.AuthorizationFlow,
|
|
||||||
InvalidationFlow: &pp.Spec.InvalidationFlow,
|
|
||||||
ExternalHost: &pp.Spec.ExternalHost,
|
|
||||||
Mode: authentikapi.PROXYMODE_FORWARD_SINGLE.Ptr(),
|
|
||||||
}
|
|
||||||
resp, r, err := c.authentik.ProvidersApi.ProvidersProxyPartialUpdate(ctx, int32(pk)).PatchedProxyProviderRequest(*proxyProviderRequest).Execute()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("error when calling `ProvidersAPI.ProvidersProxyPartialUpdate`: %w with response %v", err, r)
|
|
||||||
}
|
|
||||||
|
|
||||||
pp.Status.PK = strconv.Itoa(int(resp.Pk))
|
|
||||||
|
|
||||||
return c.updateProxyProviderStatus(ctx, pp)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) reconcileCreate(ctx context.Context, pp *v1alpha1.ProxyProvider) error {
|
|
||||||
proxyProviderRequest := &authentikapi.ProxyProviderRequest{
|
|
||||||
Name: pp.Spec.Name,
|
|
||||||
AuthorizationFlow: pp.Spec.AuthorizationFlow,
|
|
||||||
InvalidationFlow: pp.Spec.InvalidationFlow,
|
|
||||||
ExternalHost: pp.Spec.ExternalHost,
|
|
||||||
Mode: authentikapi.PROXYMODE_FORWARD_SINGLE.Ptr(),
|
|
||||||
}
|
|
||||||
resp, r, err := c.authentik.ProvidersApi.ProvidersProxyCreate(ctx).ProxyProviderRequest(*proxyProviderRequest).Execute()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("error when calling `ProvidersAPI.ProvidersProxyCreate`: %w with response %v", err, r)
|
|
||||||
}
|
|
||||||
|
|
||||||
pp.Status.PK = strconv.Itoa(int(resp.Pk))
|
|
||||||
return c.updateProxyProviderStatus(ctx, pp)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Controller) enqueueProxyProvider(obj interface{}) {
|
func (c *Controller) enqueueProxyProvider(obj interface{}) {
|
||||||
@@ -279,18 +248,26 @@ func (c *Controller) enqueueProxyProvider(obj interface{}) {
|
|||||||
c.workqueue.Add(objectRef)
|
c.workqueue.Add(objectRef)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Controller) updateProxyProviderStatus(ctx context.Context, pp *v1alpha1.ProxyProvider) error {
|
func (c *Controller) handleObject(obj interface{}) {
|
||||||
ppCopy := pp.DeepCopy()
|
// Optional: resolve Deployment owners back to ProxyProvider and enqueue.
|
||||||
_, err := c.proxyProviderClientset.ProxyproviderV1alpha1().ProxyProviders(ppCopy.Namespace).UpdateStatus(ctx, ppCopy, metav1.UpdateOptions{FieldManager: FieldManager})
|
_, ok := obj.(metav1.Object)
|
||||||
return err
|
if !ok {
|
||||||
|
tombstone, ok := obj.(cache.DeletedFinalStateUnknown)
|
||||||
|
if !ok {
|
||||||
|
utilruntime.HandleError(fmt.Errorf("couldn't get object from tombstone %#v", obj))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, ok = tombstone.Obj.(metav1.Object)
|
||||||
|
if !ok {
|
||||||
|
utilruntime.HandleError(fmt.Errorf("tombstone contained object that is not a metav1.Object %#v", obj))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update metadata, spec, etc. of the ProxyProvider object.
|
func (c *Controller) updateProxyProviderStatus(ctx context.Context, pp *v1.ProxyProvider) error {
|
||||||
func (c *Controller) updateProxyProvider(ctx context.Context, pp *v1alpha1.ProxyProvider) error {
|
|
||||||
ppCopy := pp.DeepCopy()
|
ppCopy := pp.DeepCopy()
|
||||||
_, err := c.proxyProviderClientset.ProxyproviderV1alpha1().ProxyProviders(ppCopy.Namespace).Update(ctx, ppCopy, metav1.UpdateOptions{FieldManager: FieldManager})
|
ppCopy.Status.PK = pp.Status.PK
|
||||||
if err != nil {
|
_, err := c.proxyProviderClientset.ProxyproviderV1().ProxyProviders(pp.Namespace).UpdateStatus(ctx, ppCopy, metav1.UpdateOptions{FieldManager: FieldManager})
|
||||||
return fmt.Errorf("error updating ProxyProvider metadata: %v", err)
|
return err
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
@@ -36,7 +36,6 @@ require (
|
|||||||
github.com/go-openapi/swag/yamlutils v0.25.4 // indirect
|
github.com/go-openapi/swag/yamlutils v0.25.4 // indirect
|
||||||
github.com/google/gnostic-models v0.7.0 // indirect
|
github.com/google/gnostic-models v0.7.0 // indirect
|
||||||
github.com/google/uuid v1.6.0 // indirect
|
github.com/google/uuid v1.6.0 // indirect
|
||||||
github.com/jandelgado/gcov2lcov v1.1.1 // indirect
|
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
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.3-0.20250322232337-35a7c28c31ee // indirect
|
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
|
||||||
@@ -61,5 +60,3 @@ require (
|
|||||||
)
|
)
|
||||||
|
|
||||||
replace k8s.io/code-generator => ./code-generator
|
replace k8s.io/code-generator => ./code-generator
|
||||||
|
|
||||||
tool github.com/jandelgado/gcov2lcov
|
|
||||||
|
|||||||
@@ -49,8 +49,6 @@ github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX
|
|||||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/jandelgado/gcov2lcov v1.1.1 h1:CHUNoAglvb34DqmMoZchnzDbA3yjpzT8EoUvVqcAY+s=
|
|
||||||
github.com/jandelgado/gcov2lcov v1.1.1/go.mod h1:tMVUlMVtS1po2SB8UkADWhOT5Y5Q13XOce2AYU69JuI=
|
|
||||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||||
@@ -73,16 +71,9 @@ github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7
|
|||||||
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
|
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
|
||||||
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
|
||||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
|
||||||
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
|
|
||||||
github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4=
|
github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4=
|
||||||
github.com/stretchr/objx v0.5.3/go.mod h1:rDQraq+vQZU7Fde9LOZLr8Tax6zZvy4kuNKF+QYS+U0=
|
github.com/stretchr/objx v0.5.3/go.mod h1:rDQraq+vQZU7Fde9LOZLr8Tax6zZvy4kuNKF+QYS+U0=
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
|
||||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
|
||||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
|
||||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
|
||||||
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
||||||
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||||
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
|
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
|
||||||
@@ -116,7 +107,6 @@ gopkg.in/evanphx/json-patch.v4 v4.13.0 h1:czT3CmqEaQ1aanPc5SdlgQrrEIb8w/wwCvWWnf
|
|||||||
gopkg.in/evanphx/json-patch.v4 v4.13.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
|
gopkg.in/evanphx/json-patch.v4 v4.13.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
|
||||||
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
|
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
|
||||||
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
k8s.io/api v0.0.0-20260509204538-0dfb117cc6ec h1:xf12Yh3ltN4fnNyP0CyyM0TwNVnZDfLJjV3+bf9fPFY=
|
k8s.io/api v0.0.0-20260509204538-0dfb117cc6ec h1:xf12Yh3ltN4fnNyP0CyyM0TwNVnZDfLJjV3+bf9fPFY=
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
API rule violation: names_match,gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1,ProxyProviderSpec,AuthorizationFlow
|
API rule violation: names_match,gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1,ProxyProviderSpec,AuthorizationFlow
|
||||||
API rule violation: names_match,gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1,ProxyProviderSpec,ExternalHost
|
API rule violation: names_match,gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1,ProxyProviderSpec,ExternalHost
|
||||||
API rule violation: names_match,gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1,ProxyProviderSpec,InvalidationFlow
|
API rule violation: names_match,gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1,ProxyProviderSpec,InvalidationFlow
|
||||||
API rule violation: names_match,k8s.io/apimachinery/pkg/api/resource,Quantity,Format
|
API rule violation: names_match,k8s.io/apimachinery/pkg/api/resource,Quantity,Format
|
||||||
API rule violation: names_match,k8s.io/apimachinery/pkg/api/resource,Quantity,d
|
API rule violation: names_match,k8s.io/apimachinery/pkg/api/resource,Quantity,d
|
||||||
API rule violation: names_match,k8s.io/apimachinery/pkg/api/resource,Quantity,i
|
API rule violation: names_match,k8s.io/apimachinery/pkg/api/resource,Quantity,i
|
||||||
|
|||||||
@@ -21,11 +21,11 @@ import (
|
|||||||
"flag"
|
"flag"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"sync"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/signals"
|
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/signals"
|
||||||
authentikapi "goauthentik.io/api/v3"
|
authentikapi "goauthentik.io/api/v3"
|
||||||
|
kubeinformers "k8s.io/client-go/informers"
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/client-go/tools/clientcmd"
|
"k8s.io/client-go/tools/clientcmd"
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
@@ -33,9 +33,6 @@ import (
|
|||||||
// Uncomment the following line to load the gcp plugin (only required to authenticate against GKE clusters).
|
// Uncomment the following line to load the gcp plugin (only required to authenticate against GKE clusters).
|
||||||
// _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
|
// _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
|
||||||
|
|
||||||
applicationcontroller "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/controllers/application"
|
|
||||||
policybindingcontroller "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/controllers/policybinding"
|
|
||||||
proxyprovidercontroller "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/controllers/proxyprovider"
|
|
||||||
clientset "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned"
|
clientset "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned"
|
||||||
informers "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions"
|
informers "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions"
|
||||||
)
|
)
|
||||||
@@ -65,7 +62,7 @@ func main() {
|
|||||||
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
|
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
clientset, err := clientset.NewForConfig(cfg)
|
proxyProviderClient, err := clientset.NewForConfig(cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(err, "Error building proxy provider clientset")
|
logger.Error(err, "Error building proxy provider clientset")
|
||||||
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
|
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
|
||||||
@@ -77,56 +74,22 @@ func main() {
|
|||||||
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
|
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
proxyProviderInformerFactory := informers.NewSharedInformerFactory(clientset, time.Second*30)
|
kubeInformerFactory := kubeinformers.NewSharedInformerFactory(kubeClient, time.Second*30)
|
||||||
|
proxyProviderInformerFactory := informers.NewSharedInformerFactory(proxyProviderClient, time.Second*30)
|
||||||
|
|
||||||
ppController := proxyprovidercontroller.NewController(ctx, kubeClient, clientset, authentikClient,
|
controller := NewController(ctx, kubeClient, proxyProviderClient, authentikClient,
|
||||||
proxyProviderInformerFactory.Proxyprovider().V1alpha1().ProxyProviders(),
|
kubeInformerFactory.Apps().V1().Deployments(),
|
||||||
)
|
proxyProviderInformerFactory.Proxyprovider().V1().ProxyProviders())
|
||||||
|
|
||||||
applicationInformerFactory := informers.NewSharedInformerFactory(clientset, time.Second*30)
|
|
||||||
appController := applicationcontroller.NewController(ctx, kubeClient, clientset, authentikClient,
|
|
||||||
applicationInformerFactory.Application().V1alpha1().Applications(),
|
|
||||||
)
|
|
||||||
|
|
||||||
policyBindingInformerFactory := informers.NewSharedInformerFactory(clientset, time.Second*30)
|
|
||||||
pbController := policybindingcontroller.NewController(ctx, kubeClient, clientset, authentikClient,
|
|
||||||
policyBindingInformerFactory.PolicyBinding().V1alpha1().PolicyBindings(),
|
|
||||||
)
|
|
||||||
|
|
||||||
// notice that there is no need to run Start methods in a separate goroutine. (i.e. go kubeInformerFactory.Start(ctx.done())
|
// notice that there is no need to run Start methods in a separate goroutine. (i.e. go kubeInformerFactory.Start(ctx.done())
|
||||||
// Start method is non-blocking and runs all registered informers in a dedicated goroutine.
|
// Start method is non-blocking and runs all registered informers in a dedicated goroutine.
|
||||||
|
kubeInformerFactory.Start(ctx.Done())
|
||||||
proxyProviderInformerFactory.Start(ctx.Done())
|
proxyProviderInformerFactory.Start(ctx.Done())
|
||||||
applicationInformerFactory.Start(ctx.Done())
|
|
||||||
policyBindingInformerFactory.Start(ctx.Done())
|
|
||||||
|
|
||||||
var wg sync.WaitGroup
|
if err = controller.Run(ctx, 2); err != nil {
|
||||||
wg.Add(3)
|
logger.Error(err, "Error running controller")
|
||||||
|
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
|
||||||
go func() {
|
}
|
||||||
defer wg.Done()
|
|
||||||
if err := ppController.Run(ctx, 2); err != nil {
|
|
||||||
logger.Error(err, "Error running proxy provider controller")
|
|
||||||
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
defer wg.Done()
|
|
||||||
if err := appController.Run(ctx, 2); err != nil {
|
|
||||||
logger.Error(err, "Error running application controller")
|
|
||||||
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
defer wg.Done()
|
|
||||||
if err := pbController.Run(ctx, 2); err != nil {
|
|
||||||
logger.Error(err, "Error running policy binding controller")
|
|
||||||
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
wg.Wait()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2017 The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// +k8s:deepcopy-gen=package
|
|
||||||
// +k8s:openapi-gen=true
|
|
||||||
// +groupName=application.t000-n.de
|
|
||||||
// +groupGoName=Application
|
|
||||||
|
|
||||||
// Package v1alpha1 is the v1alpha1 version of the application API.
|
|
||||||
package v1alpha1
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2017 The Kubernetes 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 v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
)
|
|
||||||
|
|
||||||
// +genclient
|
|
||||||
// +kubebuilder:subresource:status
|
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
|
||||||
|
|
||||||
type Application struct {
|
|
||||||
metav1.TypeMeta `json:",inline"`
|
|
||||||
metav1.ObjectMeta `json:"metadata,omitempty"`
|
|
||||||
|
|
||||||
Spec ApplicationSpec `json:"spec"`
|
|
||||||
Status ApplicationStatus `json:"status"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type ApplicationSpec struct {
|
|
||||||
Name string `json:"name"`
|
|
||||||
Slug string `json:"slug"`
|
|
||||||
Provider int32 `json:"provider,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type ApplicationStatus struct {
|
|
||||||
PK string `json:"pk"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
|
||||||
|
|
||||||
type ApplicationList struct {
|
|
||||||
metav1.TypeMeta `json:",inline"`
|
|
||||||
metav1.ListMeta `json:"metadata,omitempty"`
|
|
||||||
|
|
||||||
Items []Application `json:"items"`
|
|
||||||
}
|
|
||||||
@@ -1,119 +0,0 @@
|
|||||||
//go:build !ignore_autogenerated
|
|
||||||
// +build !ignore_autogenerated
|
|
||||||
|
|
||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by deepcopy-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
|
||||||
)
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *Application) DeepCopyInto(out *Application) {
|
|
||||||
*out = *in
|
|
||||||
out.TypeMeta = in.TypeMeta
|
|
||||||
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
|
|
||||||
out.Spec = in.Spec
|
|
||||||
out.Status = in.Status
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Application.
|
|
||||||
func (in *Application) DeepCopy() *Application {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(Application)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
|
||||||
func (in *Application) DeepCopyObject() runtime.Object {
|
|
||||||
if c := in.DeepCopy(); c != nil {
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *ApplicationList) DeepCopyInto(out *ApplicationList) {
|
|
||||||
*out = *in
|
|
||||||
out.TypeMeta = in.TypeMeta
|
|
||||||
in.ListMeta.DeepCopyInto(&out.ListMeta)
|
|
||||||
if in.Items != nil {
|
|
||||||
in, out := &in.Items, &out.Items
|
|
||||||
*out = make([]Application, len(*in))
|
|
||||||
for i := range *in {
|
|
||||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationList.
|
|
||||||
func (in *ApplicationList) DeepCopy() *ApplicationList {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(ApplicationList)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
|
||||||
func (in *ApplicationList) DeepCopyObject() runtime.Object {
|
|
||||||
if c := in.DeepCopy(); c != nil {
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *ApplicationSpec) DeepCopyInto(out *ApplicationSpec) {
|
|
||||||
*out = *in
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationSpec.
|
|
||||||
func (in *ApplicationSpec) DeepCopy() *ApplicationSpec {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(ApplicationSpec)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *ApplicationStatus) DeepCopyInto(out *ApplicationStatus) {
|
|
||||||
*out = *in
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationStatus.
|
|
||||||
func (in *ApplicationStatus) DeepCopy() *ApplicationStatus {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(ApplicationStatus)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
//go:build !ignore_autogenerated
|
|
||||||
// +build !ignore_autogenerated
|
|
||||||
|
|
||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by register-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
|
||||||
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
|
||||||
)
|
|
||||||
|
|
||||||
// GroupName specifies the group name used to register the objects.
|
|
||||||
const GroupName = "application.t000-n.de"
|
|
||||||
|
|
||||||
// GroupVersion specifies the group and the version used to register the objects.
|
|
||||||
var GroupVersion = v1.GroupVersion{Group: GroupName, Version: "v1alpha1"}
|
|
||||||
|
|
||||||
// SchemeGroupVersion is group version used to register these objects
|
|
||||||
//
|
|
||||||
// Deprecated: use GroupVersion instead.
|
|
||||||
var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha1"}
|
|
||||||
|
|
||||||
// Resource takes an unqualified resource and returns a Group qualified GroupResource
|
|
||||||
func Resource(resource string) schema.GroupResource {
|
|
||||||
return SchemeGroupVersion.WithResource(resource).GroupResource()
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
// localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes.
|
|
||||||
SchemeBuilder runtime.SchemeBuilder
|
|
||||||
localSchemeBuilder = &SchemeBuilder
|
|
||||||
// Deprecated: use Install instead
|
|
||||||
AddToScheme = localSchemeBuilder.AddToScheme
|
|
||||||
Install = localSchemeBuilder.AddToScheme
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
// We only register manually written functions here. The registration of the
|
|
||||||
// generated functions takes place in the generated files. The separation
|
|
||||||
// makes the code compile even when the generated files are missing.
|
|
||||||
localSchemeBuilder.Register(addKnownTypes)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Adds the list of known types to Scheme.
|
|
||||||
func addKnownTypes(scheme *runtime.Scheme) error {
|
|
||||||
scheme.AddKnownTypes(SchemeGroupVersion,
|
|
||||||
&Application{},
|
|
||||||
&ApplicationList{},
|
|
||||||
)
|
|
||||||
// AddToGroupVersion allows the serialization of client types like ListOptions.
|
|
||||||
v1.AddToGroupVersion(scheme, SchemeGroupVersion)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2017 The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// +k8s:deepcopy-gen=package
|
|
||||||
// +k8s:openapi-gen=true
|
|
||||||
// +groupName=policybinding.t000-n.de
|
|
||||||
// +groupGoName=PolicyBinding
|
|
||||||
|
|
||||||
// Package v1alpha1 is the v1alpha1 version of the policybinding API.
|
|
||||||
package v1alpha1
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2017 The Kubernetes 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 v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
)
|
|
||||||
|
|
||||||
// +genclient
|
|
||||||
// +kubebuilder:subresource:status
|
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
|
||||||
|
|
||||||
type PolicyBinding struct {
|
|
||||||
metav1.TypeMeta `json:",inline"`
|
|
||||||
metav1.ObjectMeta `json:"metadata,omitempty"`
|
|
||||||
|
|
||||||
Spec PolicyBindingSpec `json:"spec"`
|
|
||||||
Status PolicyBindingStatus `json:"status"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type PolicyBindingSpec struct {
|
|
||||||
Policy string `json:"policy,omitempty"`
|
|
||||||
Group string `json:"group,omitempty"`
|
|
||||||
User int32 `json:"user"`
|
|
||||||
Target string `json:"target"`
|
|
||||||
Order int32 `json:"order"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type PolicyBindingStatus struct {
|
|
||||||
PK string `json:"pk"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
|
||||||
|
|
||||||
type PolicyBindingList struct {
|
|
||||||
metav1.TypeMeta `json:",inline"`
|
|
||||||
metav1.ListMeta `json:"metadata,omitempty"`
|
|
||||||
|
|
||||||
Items []PolicyBinding `json:"items"`
|
|
||||||
}
|
|
||||||
@@ -1,119 +0,0 @@
|
|||||||
//go:build !ignore_autogenerated
|
|
||||||
// +build !ignore_autogenerated
|
|
||||||
|
|
||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by deepcopy-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
|
||||||
)
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *PolicyBinding) DeepCopyInto(out *PolicyBinding) {
|
|
||||||
*out = *in
|
|
||||||
out.TypeMeta = in.TypeMeta
|
|
||||||
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
|
|
||||||
out.Spec = in.Spec
|
|
||||||
out.Status = in.Status
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PolicyBinding.
|
|
||||||
func (in *PolicyBinding) DeepCopy() *PolicyBinding {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(PolicyBinding)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
|
||||||
func (in *PolicyBinding) DeepCopyObject() runtime.Object {
|
|
||||||
if c := in.DeepCopy(); c != nil {
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *PolicyBindingList) DeepCopyInto(out *PolicyBindingList) {
|
|
||||||
*out = *in
|
|
||||||
out.TypeMeta = in.TypeMeta
|
|
||||||
in.ListMeta.DeepCopyInto(&out.ListMeta)
|
|
||||||
if in.Items != nil {
|
|
||||||
in, out := &in.Items, &out.Items
|
|
||||||
*out = make([]PolicyBinding, len(*in))
|
|
||||||
for i := range *in {
|
|
||||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PolicyBindingList.
|
|
||||||
func (in *PolicyBindingList) DeepCopy() *PolicyBindingList {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(PolicyBindingList)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
|
||||||
func (in *PolicyBindingList) DeepCopyObject() runtime.Object {
|
|
||||||
if c := in.DeepCopy(); c != nil {
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *PolicyBindingSpec) DeepCopyInto(out *PolicyBindingSpec) {
|
|
||||||
*out = *in
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PolicyBindingSpec.
|
|
||||||
func (in *PolicyBindingSpec) DeepCopy() *PolicyBindingSpec {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(PolicyBindingSpec)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *PolicyBindingStatus) DeepCopyInto(out *PolicyBindingStatus) {
|
|
||||||
*out = *in
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PolicyBindingStatus.
|
|
||||||
func (in *PolicyBindingStatus) DeepCopy() *PolicyBindingStatus {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(PolicyBindingStatus)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
//go:build !ignore_autogenerated
|
|
||||||
// +build !ignore_autogenerated
|
|
||||||
|
|
||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by register-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
|
||||||
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
|
||||||
)
|
|
||||||
|
|
||||||
// GroupName specifies the group name used to register the objects.
|
|
||||||
const GroupName = "policybinding.t000-n.de"
|
|
||||||
|
|
||||||
// GroupVersion specifies the group and the version used to register the objects.
|
|
||||||
var GroupVersion = v1.GroupVersion{Group: GroupName, Version: "v1alpha1"}
|
|
||||||
|
|
||||||
// SchemeGroupVersion is group version used to register these objects
|
|
||||||
//
|
|
||||||
// Deprecated: use GroupVersion instead.
|
|
||||||
var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha1"}
|
|
||||||
|
|
||||||
// Resource takes an unqualified resource and returns a Group qualified GroupResource
|
|
||||||
func Resource(resource string) schema.GroupResource {
|
|
||||||
return SchemeGroupVersion.WithResource(resource).GroupResource()
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
// localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes.
|
|
||||||
SchemeBuilder runtime.SchemeBuilder
|
|
||||||
localSchemeBuilder = &SchemeBuilder
|
|
||||||
// Deprecated: use Install instead
|
|
||||||
AddToScheme = localSchemeBuilder.AddToScheme
|
|
||||||
Install = localSchemeBuilder.AddToScheme
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
// We only register manually written functions here. The registration of the
|
|
||||||
// generated functions takes place in the generated files. The separation
|
|
||||||
// makes the code compile even when the generated files are missing.
|
|
||||||
localSchemeBuilder.Register(addKnownTypes)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Adds the list of known types to Scheme.
|
|
||||||
func addKnownTypes(scheme *runtime.Scheme) error {
|
|
||||||
scheme.AddKnownTypes(SchemeGroupVersion,
|
|
||||||
&PolicyBinding{},
|
|
||||||
&PolicyBindingList{},
|
|
||||||
)
|
|
||||||
// AddToGroupVersion allows the serialization of client types like ListOptions.
|
|
||||||
v1.AddToGroupVersion(scheme, SchemeGroupVersion)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@@ -19,4 +19,4 @@ limitations under the License.
|
|||||||
// +groupName=proxyprovider.t000-n.de
|
// +groupName=proxyprovider.t000-n.de
|
||||||
|
|
||||||
// Package v1 is the v1 version of the API.
|
// Package v1 is the v1 version of the API.
|
||||||
package v1alpha1
|
package v1
|
||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package v1alpha1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
+1
-1
@@ -19,7 +19,7 @@ limitations under the License.
|
|||||||
|
|
||||||
// Code generated by deepcopy-gen. DO NOT EDIT.
|
// Code generated by deepcopy-gen. DO NOT EDIT.
|
||||||
|
|
||||||
package v1alpha1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||||
+5
-5
@@ -19,10 +19,10 @@ limitations under the License.
|
|||||||
|
|
||||||
// Code generated by register-gen. DO NOT EDIT.
|
// Code generated by register-gen. DO NOT EDIT.
|
||||||
|
|
||||||
package v1alpha1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||||
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
)
|
)
|
||||||
@@ -31,12 +31,12 @@ import (
|
|||||||
const GroupName = "proxyprovider.t000-n.de"
|
const GroupName = "proxyprovider.t000-n.de"
|
||||||
|
|
||||||
// GroupVersion specifies the group and the version used to register the objects.
|
// GroupVersion specifies the group and the version used to register the objects.
|
||||||
var GroupVersion = v1.GroupVersion{Group: GroupName, Version: "v1alpha1"}
|
var GroupVersion = metav1.GroupVersion{Group: GroupName, Version: "v1"}
|
||||||
|
|
||||||
// SchemeGroupVersion is group version used to register these objects
|
// SchemeGroupVersion is group version used to register these objects
|
||||||
//
|
//
|
||||||
// Deprecated: use GroupVersion instead.
|
// Deprecated: use GroupVersion instead.
|
||||||
var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha1"}
|
var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"}
|
||||||
|
|
||||||
// Resource takes an unqualified resource and returns a Group qualified GroupResource
|
// Resource takes an unqualified resource and returns a Group qualified GroupResource
|
||||||
func Resource(resource string) schema.GroupResource {
|
func Resource(resource string) schema.GroupResource {
|
||||||
@@ -66,6 +66,6 @@ func addKnownTypes(scheme *runtime.Scheme) error {
|
|||||||
&ProxyProviderList{},
|
&ProxyProviderList{},
|
||||||
)
|
)
|
||||||
// AddToGroupVersion allows the serialization of client types like ListOptions.
|
// AddToGroupVersion allows the serialization of client types like ListOptions.
|
||||||
v1.AddToGroupVersion(scheme, SchemeGroupVersion)
|
metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -1,286 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2017 The Kubernetes 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 application
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"net/http"
|
|
||||||
"slices"
|
|
||||||
"strconv"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"golang.org/x/time/rate"
|
|
||||||
|
|
||||||
corev1 "k8s.io/api/core/v1"
|
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
|
||||||
"k8s.io/client-go/kubernetes"
|
|
||||||
"k8s.io/client-go/kubernetes/scheme"
|
|
||||||
typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
|
||||||
"k8s.io/client-go/tools/cache"
|
|
||||||
"k8s.io/client-go/tools/record"
|
|
||||||
"k8s.io/client-go/util/workqueue"
|
|
||||||
"k8s.io/klog/v2"
|
|
||||||
|
|
||||||
v1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1"
|
|
||||||
clientset "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned"
|
|
||||||
operatorscheme "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/scheme"
|
|
||||||
informers "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/application/v1alpha1"
|
|
||||||
listers "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/listers/application/v1alpha1"
|
|
||||||
authentikapi "goauthentik.io/api/v3"
|
|
||||||
)
|
|
||||||
|
|
||||||
const controllerAgentName = "application-controller"
|
|
||||||
|
|
||||||
const (
|
|
||||||
SuccessSynced = "Synced"
|
|
||||||
ErrResourceExists = "ErrResourceExists"
|
|
||||||
MessageResourceExists = "Resource %q already exists and is not managed by Application"
|
|
||||||
MessageResourceSynced = "Application synced successfully"
|
|
||||||
FieldManager = controllerAgentName
|
|
||||||
)
|
|
||||||
|
|
||||||
// Finalizers
|
|
||||||
const (
|
|
||||||
DeleteAuthentikApplicationFinalizer = "application.t000-n.de/delete-authentik-application"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Controller struct {
|
|
||||||
kubeclientset kubernetes.Interface
|
|
||||||
applicationClientset clientset.Interface
|
|
||||||
authentik *authentikapi.APIClient
|
|
||||||
|
|
||||||
applicationListener listers.ApplicationLister
|
|
||||||
applicationSynced cache.InformerSynced
|
|
||||||
|
|
||||||
workqueue workqueue.TypedRateLimitingInterface[cache.ObjectName]
|
|
||||||
recorder record.EventRecorder
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewController(
|
|
||||||
ctx context.Context,
|
|
||||||
kubeclientset kubernetes.Interface,
|
|
||||||
applicationClientset clientset.Interface,
|
|
||||||
authentik *authentikapi.APIClient,
|
|
||||||
applicationInformer informers.ApplicationInformer,
|
|
||||||
) *Controller {
|
|
||||||
logger := klog.FromContext(ctx)
|
|
||||||
|
|
||||||
utilruntime.Must(operatorscheme.AddToScheme(scheme.Scheme))
|
|
||||||
logger.V(4).Info("Creating event broadcaster")
|
|
||||||
|
|
||||||
eventBroadcaster := record.NewBroadcaster(record.WithContext(ctx))
|
|
||||||
eventBroadcaster.StartStructuredLogging(0)
|
|
||||||
eventBroadcaster.StartRecordingToSink(&typedcorev1.EventSinkImpl{Interface: kubeclientset.CoreV1().Events("")})
|
|
||||||
recorder := eventBroadcaster.NewRecorder(scheme.Scheme, corev1.EventSource{Component: controllerAgentName})
|
|
||||||
ratelimiter := workqueue.NewTypedMaxOfRateLimiter(
|
|
||||||
workqueue.NewTypedItemExponentialFailureRateLimiter[cache.ObjectName](5*time.Millisecond, 1000*time.Second),
|
|
||||||
&workqueue.TypedBucketRateLimiter[cache.ObjectName]{Limiter: rate.NewLimiter(rate.Limit(50), 300)},
|
|
||||||
)
|
|
||||||
|
|
||||||
c := &Controller{
|
|
||||||
kubeclientset: kubeclientset,
|
|
||||||
applicationClientset: applicationClientset,
|
|
||||||
authentik: authentik,
|
|
||||||
applicationListener: applicationInformer.Lister(),
|
|
||||||
applicationSynced: applicationInformer.Informer().HasSynced,
|
|
||||||
workqueue: workqueue.NewTypedRateLimitingQueue(ratelimiter),
|
|
||||||
recorder: recorder,
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.Info("Setting up event handlers")
|
|
||||||
applicationInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
|
|
||||||
AddFunc: c.enqueueApplication,
|
|
||||||
UpdateFunc: func(_, newObj interface{}) {
|
|
||||||
c.enqueueApplication(newObj)
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) Run(ctx context.Context, workers int) error {
|
|
||||||
defer utilruntime.HandleCrash()
|
|
||||||
defer c.workqueue.ShutDown()
|
|
||||||
logger := klog.FromContext(ctx)
|
|
||||||
|
|
||||||
logger.Info("Starting Application controller")
|
|
||||||
|
|
||||||
logger.Info("Waiting for informer caches to sync")
|
|
||||||
if ok := cache.WaitForCacheSync(ctx.Done(), c.applicationSynced); !ok {
|
|
||||||
return fmt.Errorf("failed to wait for caches to sync")
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.Info("Starting workers", "count", workers)
|
|
||||||
for i := 0; i < workers; i++ {
|
|
||||||
go wait.UntilWithContext(ctx, c.runWorker, time.Second)
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.Info("Started workers")
|
|
||||||
<-ctx.Done()
|
|
||||||
logger.Info("Shutting down workers")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) runWorker(ctx context.Context) {
|
|
||||||
for c.processNextWorkItem(ctx) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) processNextWorkItem(ctx context.Context) bool {
|
|
||||||
objRef, shutdown := c.workqueue.Get()
|
|
||||||
logger := klog.FromContext(ctx)
|
|
||||||
if shutdown {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
defer c.workqueue.Done(objRef)
|
|
||||||
|
|
||||||
err := c.syncHandler(ctx, objRef)
|
|
||||||
if err == nil {
|
|
||||||
c.workqueue.Forget(objRef)
|
|
||||||
logger.Info("Successfully synced", "objectName", objRef)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
utilruntime.HandleErrorWithContext(ctx, err, "Error syncing; requeuing for later retry", "objectReference", objRef)
|
|
||||||
c.workqueue.AddRateLimited(objRef)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) syncHandler(ctx context.Context, objectRef cache.ObjectName) error {
|
|
||||||
logger := klog.LoggerWithValues(klog.FromContext(ctx), "objectRef", objectRef)
|
|
||||||
|
|
||||||
app, err := c.applicationListener.Applications(objectRef.Namespace).Get(objectRef.Name)
|
|
||||||
if err != nil {
|
|
||||||
if errors.IsNotFound(err) {
|
|
||||||
logger.V(4).Info("Application no longer exists")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
logger.V(4).Info("sync Application", "name", app.Name)
|
|
||||||
|
|
||||||
if !app.ObjectMeta.DeletionTimestamp.IsZero() {
|
|
||||||
logger.Info("Reconciling deletion of Application", "name", app.Name)
|
|
||||||
return c.reconcileDelete(ctx, app)
|
|
||||||
}
|
|
||||||
|
|
||||||
if app.Status.PK == "" {
|
|
||||||
logger.Info("Reconciling creation of Application", "name", app.Name)
|
|
||||||
return c.reconcileCreate(ctx, app)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if all finalizers are present. If not, we add them. Same pattern as above, just needs a helper function to check for presence of a finalizer.
|
|
||||||
if !slices.Contains(app.ObjectMeta.Finalizers, DeleteAuthentikApplicationFinalizer) {
|
|
||||||
logger.Info("Ensuring finalizers are present", "name", app.Name)
|
|
||||||
return c.ensureFinalizers(ctx, app)
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.Info("Reconciling update of Application", "name", app.Name)
|
|
||||||
return c.reconcileUpdate(ctx, app)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) ensureFinalizers(ctx context.Context, app *v1alpha1.Application) error {
|
|
||||||
app.ObjectMeta.Finalizers = append(app.ObjectMeta.Finalizers, DeleteAuthentikApplicationFinalizer)
|
|
||||||
return c.updateApplication(ctx, app)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) reconcileDelete(ctx context.Context, app *v1alpha1.Application) error {
|
|
||||||
pk, err := strconv.ParseInt(app.Status.PK, 10, 32)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("error parsing PK: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
r, err := c.authentik.ProvidersApi.ProvidersProxyDestroy(ctx, int32(pk)).Execute()
|
|
||||||
if err != nil {
|
|
||||||
// This handles an edge-case, where when the ProxyProvider on Authentik has already been deleted, but the finalizer is still present. We just remove the finalizer and return.
|
|
||||||
if r != nil && r.StatusCode != http.StatusNotFound {
|
|
||||||
return fmt.Errorf("error when calling `ProvidersAPI.ProvidersProxyDestroy`: %w with response %v", err, r)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
app.ObjectMeta.Finalizers = slices.Delete(app.ObjectMeta.Finalizers, slices.Index(app.ObjectMeta.Finalizers, DeleteAuthentikApplicationFinalizer), 1)
|
|
||||||
return c.updateApplication(ctx, app)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) reconcileUpdate(ctx context.Context, app *v1alpha1.Application) error {
|
|
||||||
_, r, err := c.authentik.CoreApi.CoreApplicationsRetrieve(ctx, app.Spec.Slug).Execute()
|
|
||||||
if err != nil {
|
|
||||||
if r != nil && r.StatusCode == http.StatusNotFound {
|
|
||||||
// This handles an edge-case, where when the Application on Authentik has been deleted, e.g. by mistake. We just remove the PK and return.
|
|
||||||
// During the next reconciliation, the Application will be re-created.
|
|
||||||
app.Status.PK = ""
|
|
||||||
return c.updateApplicationStatus(ctx, app)
|
|
||||||
}
|
|
||||||
return fmt.Errorf("error retrieving existing Application: %v with response %v", err, r)
|
|
||||||
}
|
|
||||||
|
|
||||||
patchedApplicationRequest := &authentikapi.PatchedApplicationRequest{
|
|
||||||
Name: &app.Spec.Name,
|
|
||||||
Slug: &app.Spec.Slug,
|
|
||||||
Provider: *authentikapi.NewNullableInt32(&app.Spec.Provider),
|
|
||||||
}
|
|
||||||
resp, r, err := c.authentik.CoreApi.CoreApplicationsPartialUpdate(ctx, app.Spec.Slug).PatchedApplicationRequest(*patchedApplicationRequest).Execute()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("error when calling `ProvidersAPI.ProvidersProxyPartialUpdate`: %w with response %v", err, r)
|
|
||||||
}
|
|
||||||
|
|
||||||
app.Status.PK = resp.Pk
|
|
||||||
return c.updateApplicationStatus(ctx, app)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) reconcileCreate(ctx context.Context, app *v1alpha1.Application) error {
|
|
||||||
applicationRequest := &authentikapi.ApplicationRequest{
|
|
||||||
Name: app.Spec.Name,
|
|
||||||
Slug: app.Spec.Slug,
|
|
||||||
Provider: *authentikapi.NewNullableInt32(&app.Spec.Provider),
|
|
||||||
}
|
|
||||||
resp, r, err := c.authentik.CoreApi.CoreApplicationsCreate(ctx).ApplicationRequest(*applicationRequest).Execute()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("error when calling `CoreAPI.CoreApplicationsCreate`: %w with response %v", err, r)
|
|
||||||
}
|
|
||||||
|
|
||||||
app.Status.PK = resp.Pk
|
|
||||||
return c.updateApplicationStatus(ctx, app)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) enqueueApplication(obj interface{}) {
|
|
||||||
objectRef, err := cache.ObjectToName(obj)
|
|
||||||
if err != nil {
|
|
||||||
utilruntime.HandleError(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
c.workqueue.Add(objectRef)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) updateApplicationStatus(ctx context.Context, app *v1alpha1.Application) error {
|
|
||||||
appCopy := app.DeepCopy()
|
|
||||||
_, err := c.applicationClientset.ApplicationV1alpha1().Applications(appCopy.Namespace).UpdateStatus(ctx, appCopy, metav1.UpdateOptions{FieldManager: FieldManager})
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update metadata, spec, etc. of the Application object.
|
|
||||||
func (c *Controller) updateApplication(ctx context.Context, app *v1alpha1.Application) error {
|
|
||||||
appCopy := app.DeepCopy()
|
|
||||||
_, err := c.applicationClientset.ApplicationV1alpha1().Applications(appCopy.Namespace).Update(ctx, appCopy, metav1.UpdateOptions{FieldManager: FieldManager})
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("error updating Application metadata: %v", err)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@@ -1,395 +0,0 @@
|
|||||||
// AI generated tests and not yet reviewed.
|
|
||||||
package application
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"encoding/json"
|
|
||||||
"net/http"
|
|
||||||
"net/http/httptest"
|
|
||||||
"net/url"
|
|
||||||
"slices"
|
|
||||||
"strings"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
v1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1"
|
|
||||||
operatorfake "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/fake"
|
|
||||||
operatorinformers "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions"
|
|
||||||
authentikapi "goauthentik.io/api/v3"
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
|
||||||
"k8s.io/client-go/kubernetes/fake"
|
|
||||||
"k8s.io/client-go/tools/cache"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestController_syncHandler_create(t *testing.T) {
|
|
||||||
const wantPK = "42"
|
|
||||||
|
|
||||||
server := newAuthentikTestServer(t, authentikTestHandlers{
|
|
||||||
applicationCreate: func(w http.ResponseWriter, _ *http.Request) {
|
|
||||||
writeJSON(t, w, http.StatusCreated, map[string]any{"pk": wantPK})
|
|
||||||
},
|
|
||||||
})
|
|
||||||
t.Cleanup(server.Close)
|
|
||||||
|
|
||||||
ctrl, ctx, cancel := newTestController(t, testApplication(), server.URL)
|
|
||||||
t.Cleanup(cancel)
|
|
||||||
|
|
||||||
err := ctrl.syncHandler(ctx, cache.ObjectName{Namespace: "default", Name: "test-app"})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("syncHandler() error = %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
got := getApplication(t, ctrl, "default", "test-app")
|
|
||||||
if got.Status.PK != wantPK {
|
|
||||||
t.Fatalf("status.pk = %q, want %q", got.Status.PK, wantPK)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestController_syncHandler_ensureFinalizers(t *testing.T) {
|
|
||||||
app := testApplication()
|
|
||||||
app.Status.PK = "42"
|
|
||||||
|
|
||||||
server := newAuthentikTestServer(t, authentikTestHandlers{})
|
|
||||||
t.Cleanup(server.Close)
|
|
||||||
|
|
||||||
ctrl, ctx, cancel := newTestController(t, app, server.URL)
|
|
||||||
t.Cleanup(cancel)
|
|
||||||
|
|
||||||
err := ctrl.syncHandler(ctx, cache.ObjectName{Namespace: app.Namespace, Name: app.Name})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("syncHandler() error = %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
got := getApplication(t, ctrl, app.Namespace, app.Name)
|
|
||||||
if !slices.Contains(got.Finalizers, DeleteAuthentikApplicationFinalizer) {
|
|
||||||
t.Fatalf("finalizers = %v, want %q", got.Finalizers, DeleteAuthentikApplicationFinalizer)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestController_syncHandler_update(t *testing.T) {
|
|
||||||
app := testApplication()
|
|
||||||
app.Status.PK = "42"
|
|
||||||
app.Finalizers = []string{DeleteAuthentikApplicationFinalizer}
|
|
||||||
|
|
||||||
server := newAuthentikTestServer(t, authentikTestHandlers{
|
|
||||||
applicationRetrieve: func(w http.ResponseWriter, _ *http.Request) {
|
|
||||||
writeJSON(t, w, http.StatusOK, map[string]any{"pk": "42"})
|
|
||||||
},
|
|
||||||
applicationPartialUpdate: func(w http.ResponseWriter, _ *http.Request) {
|
|
||||||
writeJSON(t, w, http.StatusOK, map[string]any{"pk": "42"})
|
|
||||||
},
|
|
||||||
})
|
|
||||||
t.Cleanup(server.Close)
|
|
||||||
|
|
||||||
ctrl, ctx, cancel := newTestController(t, app, server.URL)
|
|
||||||
t.Cleanup(cancel)
|
|
||||||
|
|
||||||
err := ctrl.syncHandler(ctx, cache.ObjectName{Namespace: app.Namespace, Name: app.Name})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("syncHandler() error = %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
got := getApplication(t, ctrl, app.Namespace, app.Name)
|
|
||||||
if got.Status.PK != "42" {
|
|
||||||
t.Fatalf("status.pk = %q, want 42", got.Status.PK)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestController_syncHandler_update_applicationNotFound(t *testing.T) {
|
|
||||||
app := testApplication()
|
|
||||||
app.Status.PK = "42"
|
|
||||||
app.Finalizers = []string{DeleteAuthentikApplicationFinalizer}
|
|
||||||
|
|
||||||
server := newAuthentikTestServer(t, authentikTestHandlers{
|
|
||||||
applicationRetrieve: func(w http.ResponseWriter, _ *http.Request) {
|
|
||||||
http.NotFound(w, nil)
|
|
||||||
},
|
|
||||||
})
|
|
||||||
t.Cleanup(server.Close)
|
|
||||||
|
|
||||||
ctrl, ctx, cancel := newTestController(t, app, server.URL)
|
|
||||||
t.Cleanup(cancel)
|
|
||||||
|
|
||||||
err := ctrl.syncHandler(ctx, cache.ObjectName{Namespace: app.Namespace, Name: app.Name})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("syncHandler() error = %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
got := getApplication(t, ctrl, app.Namespace, app.Name)
|
|
||||||
if got.Status.PK != "" {
|
|
||||||
t.Fatalf("status.pk = %q, want empty after application not found", got.Status.PK)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestController_syncHandler_delete(t *testing.T) {
|
|
||||||
now := metav1.Now()
|
|
||||||
app := testApplication()
|
|
||||||
app.Status.PK = "42"
|
|
||||||
app.DeletionTimestamp = &now
|
|
||||||
app.Finalizers = []string{DeleteAuthentikApplicationFinalizer}
|
|
||||||
|
|
||||||
var destroyCalled bool
|
|
||||||
server := newAuthentikTestServer(t, authentikTestHandlers{
|
|
||||||
proxyDestroy: func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
destroyCalled = true
|
|
||||||
if r.Method != http.MethodDelete {
|
|
||||||
t.Errorf("destroy method = %s, want DELETE", r.Method)
|
|
||||||
}
|
|
||||||
w.WriteHeader(http.StatusNoContent)
|
|
||||||
},
|
|
||||||
})
|
|
||||||
t.Cleanup(server.Close)
|
|
||||||
|
|
||||||
ctrl, ctx, cancel := newTestController(t, app, server.URL)
|
|
||||||
t.Cleanup(cancel)
|
|
||||||
|
|
||||||
err := ctrl.syncHandler(ctx, cache.ObjectName{Namespace: app.Namespace, Name: app.Name})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("syncHandler() error = %v", err)
|
|
||||||
}
|
|
||||||
if !destroyCalled {
|
|
||||||
t.Fatal("expected Authentik destroy call")
|
|
||||||
}
|
|
||||||
|
|
||||||
got := getApplication(t, ctrl, app.Namespace, app.Name)
|
|
||||||
if slices.Contains(got.Finalizers, DeleteAuthentikApplicationFinalizer) {
|
|
||||||
t.Fatalf("finalizers = %v, want finalizer removed", got.Finalizers)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestController_syncHandler_delete_providerAlreadyGone(t *testing.T) {
|
|
||||||
now := metav1.Now()
|
|
||||||
app := testApplication()
|
|
||||||
app.Status.PK = "42"
|
|
||||||
app.DeletionTimestamp = &now
|
|
||||||
app.Finalizers = []string{DeleteAuthentikApplicationFinalizer}
|
|
||||||
|
|
||||||
server := newAuthentikTestServer(t, authentikTestHandlers{
|
|
||||||
proxyDestroy: func(w http.ResponseWriter, _ *http.Request) {
|
|
||||||
http.NotFound(w, nil)
|
|
||||||
},
|
|
||||||
})
|
|
||||||
t.Cleanup(server.Close)
|
|
||||||
|
|
||||||
ctrl, ctx, cancel := newTestController(t, app, server.URL)
|
|
||||||
t.Cleanup(cancel)
|
|
||||||
|
|
||||||
err := ctrl.syncHandler(ctx, cache.ObjectName{Namespace: app.Namespace, Name: app.Name})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("syncHandler() error = %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
got := getApplication(t, ctrl, app.Namespace, app.Name)
|
|
||||||
if slices.Contains(got.Finalizers, DeleteAuthentikApplicationFinalizer) {
|
|
||||||
t.Fatalf("finalizers = %v, want finalizer removed after 404", got.Finalizers)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestController_syncHandler_notFound(t *testing.T) {
|
|
||||||
server := newAuthentikTestServer(t, authentikTestHandlers{})
|
|
||||||
t.Cleanup(server.Close)
|
|
||||||
|
|
||||||
ctrl, ctx, cancel := newTestController(t, nil, server.URL)
|
|
||||||
t.Cleanup(cancel)
|
|
||||||
|
|
||||||
err := ctrl.syncHandler(ctx, cache.ObjectName{Namespace: "default", Name: "missing"})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("syncHandler() error = %v, want nil for missing object", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestController_syncHandler_invalidPK(t *testing.T) {
|
|
||||||
now := metav1.Now()
|
|
||||||
app := testApplication()
|
|
||||||
app.Status.PK = "not-a-number"
|
|
||||||
app.DeletionTimestamp = &now
|
|
||||||
app.Finalizers = []string{DeleteAuthentikApplicationFinalizer}
|
|
||||||
|
|
||||||
server := newAuthentikTestServer(t, authentikTestHandlers{})
|
|
||||||
t.Cleanup(server.Close)
|
|
||||||
|
|
||||||
ctrl, ctx, cancel := newTestController(t, app, server.URL)
|
|
||||||
t.Cleanup(cancel)
|
|
||||||
|
|
||||||
err := ctrl.syncHandler(ctx, cache.ObjectName{Namespace: app.Namespace, Name: app.Name})
|
|
||||||
if err == nil {
|
|
||||||
t.Fatal("syncHandler() error = nil, want parse error")
|
|
||||||
}
|
|
||||||
if !strings.Contains(err.Error(), "error parsing PK") {
|
|
||||||
t.Fatalf("syncHandler() error = %v, want PK parse error", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestController_enqueueApplication(t *testing.T) {
|
|
||||||
server := newAuthentikTestServer(t, authentikTestHandlers{})
|
|
||||||
t.Cleanup(server.Close)
|
|
||||||
|
|
||||||
ctrl, _, cancel := newTestController(t, testApplication(), server.URL)
|
|
||||||
t.Cleanup(cancel)
|
|
||||||
|
|
||||||
ctrl.enqueueApplication(testApplication())
|
|
||||||
|
|
||||||
if ctrl.workqueue.Len() != 1 {
|
|
||||||
t.Fatalf("workqueue length = %d, want 1", ctrl.workqueue.Len())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- test helpers ---
|
|
||||||
|
|
||||||
func testApplication() *v1alpha1.Application {
|
|
||||||
return &v1alpha1.Application{
|
|
||||||
TypeMeta: metav1.TypeMeta{
|
|
||||||
APIVersion: v1alpha1.SchemeGroupVersion.String(),
|
|
||||||
Kind: "Application",
|
|
||||||
},
|
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
|
||||||
Name: "test-app",
|
|
||||||
Namespace: "default",
|
|
||||||
},
|
|
||||||
Spec: v1alpha1.ApplicationSpec{
|
|
||||||
Name: "My Application",
|
|
||||||
Slug: "my-app",
|
|
||||||
Provider: 7,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func newTestController(t *testing.T, app *v1alpha1.Application, authentikURL string) (*Controller, context.Context, context.CancelFunc) {
|
|
||||||
t.Helper()
|
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
|
||||||
ctrl, _, stop := newTestControllerWithContext(t, ctx, app, authentikURL)
|
|
||||||
return ctrl, ctx, func() {
|
|
||||||
cancel()
|
|
||||||
stop()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func newTestControllerWithContext(t *testing.T, ctx context.Context, app *v1alpha1.Application, authentikURL string) (*Controller, context.Context, func()) {
|
|
||||||
t.Helper()
|
|
||||||
|
|
||||||
authentikClient := newAuthentikAPIClientForTest(t, authentikURL)
|
|
||||||
|
|
||||||
var objects []runtime.Object
|
|
||||||
if app != nil {
|
|
||||||
objects = append(objects, app)
|
|
||||||
}
|
|
||||||
applicationClient := operatorfake.NewSimpleClientset(objects...)
|
|
||||||
|
|
||||||
informerFactory := operatorinformers.NewSharedInformerFactory(applicationClient, 0)
|
|
||||||
applicationInformer := informerFactory.Application().V1alpha1().Applications()
|
|
||||||
|
|
||||||
ctrl := NewController(ctx, fake.NewClientset(), applicationClient, authentikClient, applicationInformer)
|
|
||||||
|
|
||||||
informerFactory.Start(ctx.Done())
|
|
||||||
for informerType, synced := range informerFactory.WaitForCacheSync(ctx.Done()) {
|
|
||||||
if !synced {
|
|
||||||
t.Fatalf("informer %v failed to sync", informerType)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ctrl, ctx, func() {}
|
|
||||||
}
|
|
||||||
|
|
||||||
func newAuthentikAPIClientForTest(t *testing.T, serverURL string) *authentikapi.APIClient {
|
|
||||||
t.Helper()
|
|
||||||
|
|
||||||
u, err := url.Parse(serverURL)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("parse server URL: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
cfg := authentikapi.NewConfiguration()
|
|
||||||
cfg.Scheme = u.Scheme
|
|
||||||
cfg.Host = u.Host
|
|
||||||
|
|
||||||
return authentikapi.NewAPIClient(cfg)
|
|
||||||
}
|
|
||||||
|
|
||||||
type authentikTestHandlers struct {
|
|
||||||
applicationCreate http.HandlerFunc
|
|
||||||
applicationRetrieve http.HandlerFunc
|
|
||||||
applicationPartialUpdate http.HandlerFunc
|
|
||||||
proxyDestroy http.HandlerFunc
|
|
||||||
}
|
|
||||||
|
|
||||||
func newAuthentikTestServer(t *testing.T, handlers authentikTestHandlers) *httptest.Server {
|
|
||||||
t.Helper()
|
|
||||||
|
|
||||||
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
path := r.URL.Path
|
|
||||||
|
|
||||||
switch {
|
|
||||||
case path == "/api/v3/core/applications/" && r.Method == http.MethodPost:
|
|
||||||
if handlers.applicationCreate != nil {
|
|
||||||
handlers.applicationCreate(w, r)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
http.NotFound(w, r)
|
|
||||||
|
|
||||||
case strings.HasPrefix(path, "/api/v3/core/applications/") && strings.HasSuffix(path, "/"):
|
|
||||||
slugPath := strings.TrimPrefix(path, "/api/v3/core/applications/")
|
|
||||||
if slugPath == "" {
|
|
||||||
http.NotFound(w, r)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
switch r.Method {
|
|
||||||
case http.MethodGet:
|
|
||||||
if handlers.applicationRetrieve != nil {
|
|
||||||
handlers.applicationRetrieve(w, r)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
http.NotFound(w, r)
|
|
||||||
case http.MethodPatch:
|
|
||||||
if handlers.applicationPartialUpdate != nil {
|
|
||||||
handlers.applicationPartialUpdate(w, r)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
http.NotFound(w, r)
|
|
||||||
default:
|
|
||||||
http.Error(w, "unexpected method on application instance", http.StatusMethodNotAllowed)
|
|
||||||
}
|
|
||||||
|
|
||||||
case strings.HasPrefix(path, "/api/v3/providers/proxy/") && strings.HasSuffix(path, "/"):
|
|
||||||
idPath := strings.TrimPrefix(path, "/api/v3/providers/proxy/")
|
|
||||||
if idPath == "" {
|
|
||||||
http.NotFound(w, r)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if r.Method == http.MethodDelete {
|
|
||||||
if handlers.proxyDestroy != nil {
|
|
||||||
handlers.proxyDestroy(w, r)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
http.NotFound(w, r)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
http.Error(w, "unexpected method on proxy instance", http.StatusMethodNotAllowed)
|
|
||||||
|
|
||||||
default:
|
|
||||||
http.NotFound(w, r)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
return httptest.NewServer(handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
func writeJSON(t *testing.T, w http.ResponseWriter, status int, body any) {
|
|
||||||
t.Helper()
|
|
||||||
w.Header().Set("Content-Type", "application/json")
|
|
||||||
w.WriteHeader(status)
|
|
||||||
if err := json.NewEncoder(w).Encode(body); err != nil {
|
|
||||||
t.Fatalf("write JSON response: %v", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func getApplication(t *testing.T, ctrl *Controller, namespace, name string) *v1alpha1.Application {
|
|
||||||
t.Helper()
|
|
||||||
|
|
||||||
got, err := ctrl.applicationClientset.ApplicationV1alpha1().Applications(namespace).Get(
|
|
||||||
context.Background(), name, metav1.GetOptions{},
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("get Application: %v", err)
|
|
||||||
}
|
|
||||||
return got
|
|
||||||
}
|
|
||||||
@@ -1,287 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2017 The Kubernetes 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 policybinding
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"net/http"
|
|
||||||
"slices"
|
|
||||||
"strconv"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"golang.org/x/time/rate"
|
|
||||||
|
|
||||||
corev1 "k8s.io/api/core/v1"
|
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
|
||||||
"k8s.io/client-go/kubernetes"
|
|
||||||
"k8s.io/client-go/kubernetes/scheme"
|
|
||||||
typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
|
||||||
"k8s.io/client-go/tools/cache"
|
|
||||||
"k8s.io/client-go/tools/record"
|
|
||||||
"k8s.io/client-go/util/workqueue"
|
|
||||||
"k8s.io/klog/v2"
|
|
||||||
|
|
||||||
v1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1"
|
|
||||||
clientset "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned"
|
|
||||||
operatorscheme "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/scheme"
|
|
||||||
informers "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/policybinding/v1alpha1"
|
|
||||||
listers "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/listers/policybinding/v1alpha1"
|
|
||||||
authentikapi "goauthentik.io/api/v3"
|
|
||||||
)
|
|
||||||
|
|
||||||
const controllerAgentName = "policybinding-controller"
|
|
||||||
|
|
||||||
const (
|
|
||||||
SuccessSynced = "Synced"
|
|
||||||
ErrResourceExists = "ErrResourceExists"
|
|
||||||
MessageResourceExists = "Resource %q already exists and is not managed by PolicyBinding"
|
|
||||||
MessageResourceSynced = "PolicyBinding synced successfully"
|
|
||||||
FieldManager = controllerAgentName
|
|
||||||
)
|
|
||||||
|
|
||||||
// Finalizers
|
|
||||||
const (
|
|
||||||
DeleteAuthentikPolicyBindingFinalizer = "policybinding.t000-n.de/delete-authentik-policybinding"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Controller struct {
|
|
||||||
kubeclientset kubernetes.Interface
|
|
||||||
policyBindingClientset clientset.Interface
|
|
||||||
authentik *authentikapi.APIClient
|
|
||||||
|
|
||||||
policyBindingListener listers.PolicyBindingLister
|
|
||||||
policyBindingSynced cache.InformerSynced
|
|
||||||
|
|
||||||
workqueue workqueue.TypedRateLimitingInterface[cache.ObjectName]
|
|
||||||
recorder record.EventRecorder
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewController(
|
|
||||||
ctx context.Context,
|
|
||||||
kubeclientset kubernetes.Interface,
|
|
||||||
policyBindingClientset clientset.Interface,
|
|
||||||
authentik *authentikapi.APIClient,
|
|
||||||
policyBindingInformer informers.PolicyBindingInformer,
|
|
||||||
) *Controller {
|
|
||||||
logger := klog.FromContext(ctx)
|
|
||||||
|
|
||||||
utilruntime.Must(operatorscheme.AddToScheme(scheme.Scheme))
|
|
||||||
logger.V(4).Info("Creating event broadcaster")
|
|
||||||
|
|
||||||
eventBroadcaster := record.NewBroadcaster(record.WithContext(ctx))
|
|
||||||
eventBroadcaster.StartStructuredLogging(0)
|
|
||||||
eventBroadcaster.StartRecordingToSink(&typedcorev1.EventSinkImpl{Interface: kubeclientset.CoreV1().Events("")})
|
|
||||||
recorder := eventBroadcaster.NewRecorder(scheme.Scheme, corev1.EventSource{Component: controllerAgentName})
|
|
||||||
ratelimiter := workqueue.NewTypedMaxOfRateLimiter(
|
|
||||||
workqueue.NewTypedItemExponentialFailureRateLimiter[cache.ObjectName](5*time.Millisecond, 1000*time.Second),
|
|
||||||
&workqueue.TypedBucketRateLimiter[cache.ObjectName]{Limiter: rate.NewLimiter(rate.Limit(50), 300)},
|
|
||||||
)
|
|
||||||
|
|
||||||
c := &Controller{
|
|
||||||
kubeclientset: kubeclientset,
|
|
||||||
policyBindingClientset: policyBindingClientset,
|
|
||||||
authentik: authentik,
|
|
||||||
policyBindingListener: policyBindingInformer.Lister(),
|
|
||||||
policyBindingSynced: policyBindingInformer.Informer().HasSynced,
|
|
||||||
workqueue: workqueue.NewTypedRateLimitingQueue(ratelimiter),
|
|
||||||
recorder: recorder,
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.Info("Setting up event handlers")
|
|
||||||
policyBindingInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
|
|
||||||
AddFunc: c.enqueuePolicyBinding,
|
|
||||||
UpdateFunc: func(_, newObj interface{}) {
|
|
||||||
c.enqueuePolicyBinding(newObj)
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) Run(ctx context.Context, workers int) error {
|
|
||||||
defer utilruntime.HandleCrash()
|
|
||||||
defer c.workqueue.ShutDown()
|
|
||||||
logger := klog.FromContext(ctx)
|
|
||||||
|
|
||||||
logger.Info("Starting PolicyBinding controller")
|
|
||||||
|
|
||||||
logger.Info("Waiting for informer caches to sync")
|
|
||||||
if ok := cache.WaitForCacheSync(ctx.Done(), c.policyBindingSynced); !ok {
|
|
||||||
return fmt.Errorf("failed to wait for caches to sync")
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.Info("Starting workers", "count", workers)
|
|
||||||
for i := 0; i < workers; i++ {
|
|
||||||
go wait.UntilWithContext(ctx, c.runWorker, time.Second)
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.Info("Started workers")
|
|
||||||
<-ctx.Done()
|
|
||||||
logger.Info("Shutting down workers")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) runWorker(ctx context.Context) {
|
|
||||||
for c.processNextWorkItem(ctx) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) processNextWorkItem(ctx context.Context) bool {
|
|
||||||
objRef, shutdown := c.workqueue.Get()
|
|
||||||
logger := klog.FromContext(ctx)
|
|
||||||
if shutdown {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
defer c.workqueue.Done(objRef)
|
|
||||||
|
|
||||||
err := c.syncHandler(ctx, objRef)
|
|
||||||
if err == nil {
|
|
||||||
c.workqueue.Forget(objRef)
|
|
||||||
logger.Info("Successfully synced", "objectName", objRef)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
utilruntime.HandleErrorWithContext(ctx, err, "Error syncing; requeuing for later retry", "objectReference", objRef)
|
|
||||||
c.workqueue.AddRateLimited(objRef)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) syncHandler(ctx context.Context, objectRef cache.ObjectName) error {
|
|
||||||
logger := klog.LoggerWithValues(klog.FromContext(ctx), "objectRef", objectRef)
|
|
||||||
|
|
||||||
pb, err := c.policyBindingListener.PolicyBindings(objectRef.Namespace).Get(objectRef.Name)
|
|
||||||
if err != nil {
|
|
||||||
if errors.IsNotFound(err) {
|
|
||||||
logger.V(4).Info("PolicyBinding no longer exists")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
logger.V(4).Info("sync PolicyBinding", "name", pb.Name)
|
|
||||||
|
|
||||||
if !pb.ObjectMeta.DeletionTimestamp.IsZero() {
|
|
||||||
logger.Info("Reconciling deletion of PolicyBinding", "name", pb.Name)
|
|
||||||
return c.reconcileDelete(ctx, pb)
|
|
||||||
}
|
|
||||||
|
|
||||||
if pb.Status.PK == "" {
|
|
||||||
logger.Info("Reconciling creation of PolicyBinding", "name", pb.Name)
|
|
||||||
return c.reconcileCreate(ctx, pb)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if all finalizers are present. If not, we add them. Same pattern as above, just needs a helper function to check for presence of a finalizer.
|
|
||||||
if !slices.Contains(pb.ObjectMeta.Finalizers, DeleteAuthentikPolicyBindingFinalizer) {
|
|
||||||
logger.Info("Ensuring finalizers are present", "name", pb.Name)
|
|
||||||
return c.ensureFinalizers(ctx, pb)
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.Info("Reconciling update of PolicyBinding", "name", pb.Name)
|
|
||||||
return c.reconcileUpdate(ctx, pb)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) ensureFinalizers(ctx context.Context, pb *v1alpha1.PolicyBinding) error {
|
|
||||||
pb.ObjectMeta.Finalizers = append(pb.ObjectMeta.Finalizers, DeleteAuthentikPolicyBindingFinalizer)
|
|
||||||
return c.updatePolicyBinding(ctx, pb)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) reconcileDelete(ctx context.Context, pb *v1alpha1.PolicyBinding) error {
|
|
||||||
pk, err := strconv.ParseInt(pb.Status.PK, 10, 32)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("error parsing PK: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
r, err := c.authentik.ProvidersApi.ProvidersProxyDestroy(ctx, int32(pk)).Execute()
|
|
||||||
if err != nil {
|
|
||||||
// This handles an edge-case, where when the ProxyProvider on Authentik has already been deleted, but the finalizer is still present. We just remove the finalizer and return.
|
|
||||||
if r != nil && r.StatusCode != http.StatusNotFound {
|
|
||||||
return fmt.Errorf("error when calling `ProvidersAPI.ProvidersProxyDestroy`: %w with response %v", err, r)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pb.ObjectMeta.Finalizers = slices.Delete(pb.ObjectMeta.Finalizers, slices.Index(pb.ObjectMeta.Finalizers, DeleteAuthentikPolicyBindingFinalizer), 1)
|
|
||||||
return c.updatePolicyBinding(ctx, pb)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) reconcileUpdate(ctx context.Context, pb *v1alpha1.PolicyBinding) error {
|
|
||||||
_, r, err := c.authentik.PoliciesApi.PoliciesBindingsRetrieve(ctx, pb.Status.PK).Execute()
|
|
||||||
if err != nil {
|
|
||||||
if r != nil && r.StatusCode == http.StatusNotFound {
|
|
||||||
// This handles an edge-case, where when the PolicyBinding on Authentik has been deleted, e.g. by mistake. We just remove the PK and return.
|
|
||||||
// During the next reconciliation, the PolicyBinding will be re-created.
|
|
||||||
pb.Status.PK = ""
|
|
||||||
return c.updatePolicyBindingStatus(ctx, pb)
|
|
||||||
}
|
|
||||||
return fmt.Errorf("error retrieving existing PolicyBinding: %v with response %v", err, r)
|
|
||||||
}
|
|
||||||
|
|
||||||
patchedPolicyBindingRequest := &authentikapi.PatchedPolicyBindingRequest{
|
|
||||||
Policy: *authentikapi.NewNullableString(&pb.Spec.Policy),
|
|
||||||
Group: *authentikapi.NewNullableString(&pb.Spec.Group),
|
|
||||||
User: *authentikapi.NewNullableInt32(&pb.Spec.User),
|
|
||||||
Target: &pb.Spec.Target,
|
|
||||||
Order: &pb.Spec.Order,
|
|
||||||
}
|
|
||||||
resp, r, err := c.authentik.PoliciesApi.PoliciesBindingsPartialUpdate(ctx, pb.Status.PK).PatchedPolicyBindingRequest(*patchedPolicyBindingRequest).Execute()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("error when calling `ProvidersAPI.ProvidersProxyPartialUpdate`: %w with response %v", err, r)
|
|
||||||
}
|
|
||||||
|
|
||||||
pb.Status.PK = resp.Pk
|
|
||||||
return c.updatePolicyBindingStatus(ctx, pb)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) reconcileCreate(ctx context.Context, pb *v1alpha1.PolicyBinding) error {
|
|
||||||
policyBindingRequest := &authentikapi.PolicyBindingRequest{
|
|
||||||
Policy: *authentikapi.NewNullableString(&pb.Spec.Policy),
|
|
||||||
Group: *authentikapi.NewNullableString(&pb.Spec.Group),
|
|
||||||
User: *authentikapi.NewNullableInt32(&pb.Spec.User),
|
|
||||||
Target: pb.Spec.Target,
|
|
||||||
Order: pb.Spec.Order,
|
|
||||||
}
|
|
||||||
resp, r, err := c.authentik.PoliciesApi.PoliciesBindingsCreate(ctx).PolicyBindingRequest(*policyBindingRequest).Execute()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("error when calling `PoliciesAPI.PoliciesBindingsCreate`: %w with response %v", err, r)
|
|
||||||
}
|
|
||||||
|
|
||||||
pb.Status.PK = resp.Pk
|
|
||||||
return c.updatePolicyBindingStatus(ctx, pb)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) enqueuePolicyBinding(obj interface{}) {
|
|
||||||
objectRef, err := cache.ObjectToName(obj)
|
|
||||||
if err != nil {
|
|
||||||
utilruntime.HandleError(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
c.workqueue.Add(objectRef)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Controller) updatePolicyBindingStatus(ctx context.Context, pb *v1alpha1.PolicyBinding) error {
|
|
||||||
pbCopy := pb.DeepCopy()
|
|
||||||
_, err := c.policyBindingClientset.PolicyBindingV1alpha1().PolicyBindings(pbCopy.Namespace).UpdateStatus(ctx, pbCopy, metav1.UpdateOptions{FieldManager: FieldManager})
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update metadata, spec, etc. of the PolicyBinding object.
|
|
||||||
func (c *Controller) updatePolicyBinding(ctx context.Context, pb *v1alpha1.PolicyBinding) error {
|
|
||||||
pbCopy := pb.DeepCopy()
|
|
||||||
_, err := c.policyBindingClientset.PolicyBindingV1alpha1().PolicyBindings(pbCopy.Namespace).Update(ctx, pbCopy, metav1.UpdateOptions{FieldManager: FieldManager})
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
@@ -1,385 +0,0 @@
|
|||||||
// AI generated tests and not yet reviewed.
|
|
||||||
package proxyprovider
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"encoding/json"
|
|
||||||
"net/http"
|
|
||||||
"net/http/httptest"
|
|
||||||
"net/url"
|
|
||||||
"slices"
|
|
||||||
"strings"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
v1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1"
|
|
||||||
operatorfake "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/fake"
|
|
||||||
operatorinformers "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions"
|
|
||||||
authentikapi "goauthentik.io/api/v3"
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
|
||||||
"k8s.io/client-go/kubernetes/fake"
|
|
||||||
"k8s.io/client-go/tools/cache"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestController_syncHandler_create(t *testing.T) {
|
|
||||||
const wantPK = 42
|
|
||||||
|
|
||||||
server := newAuthentikTestServer(t, authentikTestHandlers{
|
|
||||||
proxyCreate: func(w http.ResponseWriter, _ *http.Request) {
|
|
||||||
writeJSON(t, w, http.StatusCreated, map[string]any{"pk": wantPK})
|
|
||||||
},
|
|
||||||
})
|
|
||||||
t.Cleanup(server.Close)
|
|
||||||
|
|
||||||
ctrl, ctx, cancel := newTestController(t, testProxyProvider(), server.URL)
|
|
||||||
t.Cleanup(cancel)
|
|
||||||
|
|
||||||
err := ctrl.syncHandler(ctx, cache.ObjectName{Namespace: "default", Name: "test-pp"})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("syncHandler() error = %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
got := getProxyProvider(t, ctrl, "default", "test-pp")
|
|
||||||
if got.Status.PK != "42" {
|
|
||||||
t.Fatalf("status.pk = %q, want 42", got.Status.PK)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestController_syncHandler_ensureFinalizers(t *testing.T) {
|
|
||||||
pp := testProxyProvider()
|
|
||||||
pp.Status.PK = "42"
|
|
||||||
|
|
||||||
server := newAuthentikTestServer(t, authentikTestHandlers{})
|
|
||||||
t.Cleanup(server.Close)
|
|
||||||
|
|
||||||
ctrl, ctx, cancel := newTestController(t, pp, server.URL)
|
|
||||||
t.Cleanup(cancel)
|
|
||||||
|
|
||||||
err := ctrl.syncHandler(ctx, cache.ObjectName{Namespace: pp.Namespace, Name: pp.Name})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("syncHandler() error = %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
got := getProxyProvider(t, ctrl, pp.Namespace, pp.Name)
|
|
||||||
if !slices.Contains(got.Finalizers, DeleteAuthentikProxyProviderFinalizer) {
|
|
||||||
t.Fatalf("finalizers = %v, want %q", got.Finalizers, DeleteAuthentikProxyProviderFinalizer)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestController_syncHandler_update(t *testing.T) {
|
|
||||||
pp := testProxyProvider()
|
|
||||||
pp.Status.PK = "42"
|
|
||||||
pp.Finalizers = []string{DeleteAuthentikProxyProviderFinalizer}
|
|
||||||
|
|
||||||
server := newAuthentikTestServer(t, authentikTestHandlers{
|
|
||||||
allRetrieve: func(w http.ResponseWriter, _ *http.Request) {
|
|
||||||
writeJSON(t, w, http.StatusOK, map[string]any{"pk": 42})
|
|
||||||
},
|
|
||||||
proxyPartialUpdate: func(w http.ResponseWriter, _ *http.Request) {
|
|
||||||
writeJSON(t, w, http.StatusOK, map[string]any{"pk": 42})
|
|
||||||
},
|
|
||||||
})
|
|
||||||
t.Cleanup(server.Close)
|
|
||||||
|
|
||||||
ctrl, ctx, cancel := newTestController(t, pp, server.URL)
|
|
||||||
t.Cleanup(cancel)
|
|
||||||
|
|
||||||
err := ctrl.syncHandler(ctx, cache.ObjectName{Namespace: pp.Namespace, Name: pp.Name})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("syncHandler() error = %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
got := getProxyProvider(t, ctrl, pp.Namespace, pp.Name)
|
|
||||||
if got.Status.PK != "42" {
|
|
||||||
t.Fatalf("status.pk = %q, want 42", got.Status.PK)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestController_syncHandler_update_providerNotFound(t *testing.T) {
|
|
||||||
pp := testProxyProvider()
|
|
||||||
pp.Status.PK = "42"
|
|
||||||
pp.Finalizers = []string{DeleteAuthentikProxyProviderFinalizer}
|
|
||||||
|
|
||||||
server := newAuthentikTestServer(t, authentikTestHandlers{
|
|
||||||
allRetrieve: func(w http.ResponseWriter, _ *http.Request) {
|
|
||||||
http.NotFound(w, nil)
|
|
||||||
},
|
|
||||||
})
|
|
||||||
t.Cleanup(server.Close)
|
|
||||||
|
|
||||||
ctrl, ctx, cancel := newTestController(t, pp, server.URL)
|
|
||||||
t.Cleanup(cancel)
|
|
||||||
|
|
||||||
err := ctrl.syncHandler(ctx, cache.ObjectName{Namespace: pp.Namespace, Name: pp.Name})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("syncHandler() error = %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
got := getProxyProvider(t, ctrl, pp.Namespace, pp.Name)
|
|
||||||
if got.Status.PK != "" {
|
|
||||||
t.Fatalf("status.pk = %q, want empty after provider not found", got.Status.PK)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestController_syncHandler_delete(t *testing.T) {
|
|
||||||
now := metav1.Now()
|
|
||||||
pp := testProxyProvider()
|
|
||||||
pp.Status.PK = "42"
|
|
||||||
pp.DeletionTimestamp = &now
|
|
||||||
pp.Finalizers = []string{DeleteAuthentikProxyProviderFinalizer}
|
|
||||||
|
|
||||||
var destroyCalled bool
|
|
||||||
server := newAuthentikTestServer(t, authentikTestHandlers{
|
|
||||||
proxyDestroy: func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
destroyCalled = true
|
|
||||||
if r.Method != http.MethodDelete {
|
|
||||||
t.Errorf("destroy method = %s, want DELETE", r.Method)
|
|
||||||
}
|
|
||||||
w.WriteHeader(http.StatusNoContent)
|
|
||||||
},
|
|
||||||
})
|
|
||||||
t.Cleanup(server.Close)
|
|
||||||
|
|
||||||
ctrl, ctx, cancel := newTestController(t, pp, server.URL)
|
|
||||||
t.Cleanup(cancel)
|
|
||||||
|
|
||||||
err := ctrl.syncHandler(ctx, cache.ObjectName{Namespace: pp.Namespace, Name: pp.Name})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("syncHandler() error = %v", err)
|
|
||||||
}
|
|
||||||
if !destroyCalled {
|
|
||||||
t.Fatal("expected Authentik destroy call")
|
|
||||||
}
|
|
||||||
|
|
||||||
got := getProxyProvider(t, ctrl, pp.Namespace, pp.Name)
|
|
||||||
if slices.Contains(got.Finalizers, DeleteAuthentikProxyProviderFinalizer) {
|
|
||||||
t.Fatalf("finalizers = %v, want finalizer removed", got.Finalizers)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestController_syncHandler_delete_providerAlreadyGone(t *testing.T) {
|
|
||||||
now := metav1.Now()
|
|
||||||
pp := testProxyProvider()
|
|
||||||
pp.Status.PK = "42"
|
|
||||||
pp.DeletionTimestamp = &now
|
|
||||||
pp.Finalizers = []string{DeleteAuthentikProxyProviderFinalizer}
|
|
||||||
|
|
||||||
server := newAuthentikTestServer(t, authentikTestHandlers{
|
|
||||||
proxyDestroy: func(w http.ResponseWriter, _ *http.Request) {
|
|
||||||
http.NotFound(w, nil)
|
|
||||||
},
|
|
||||||
})
|
|
||||||
t.Cleanup(server.Close)
|
|
||||||
|
|
||||||
ctrl, ctx, cancel := newTestController(t, pp, server.URL)
|
|
||||||
t.Cleanup(cancel)
|
|
||||||
|
|
||||||
err := ctrl.syncHandler(ctx, cache.ObjectName{Namespace: pp.Namespace, Name: pp.Name})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("syncHandler() error = %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
got := getProxyProvider(t, ctrl, pp.Namespace, pp.Name)
|
|
||||||
if slices.Contains(got.Finalizers, DeleteAuthentikProxyProviderFinalizer) {
|
|
||||||
t.Fatalf("finalizers = %v, want finalizer removed after 404", got.Finalizers)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestController_syncHandler_notFound(t *testing.T) {
|
|
||||||
server := newAuthentikTestServer(t, authentikTestHandlers{})
|
|
||||||
t.Cleanup(server.Close)
|
|
||||||
|
|
||||||
ctrl, ctx, cancel := newTestController(t, nil, server.URL)
|
|
||||||
t.Cleanup(cancel)
|
|
||||||
|
|
||||||
err := ctrl.syncHandler(ctx, cache.ObjectName{Namespace: "default", Name: "missing"})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("syncHandler() error = %v, want nil for missing object", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestController_syncHandler_invalidPK(t *testing.T) {
|
|
||||||
pp := testProxyProvider()
|
|
||||||
pp.Status.PK = "not-a-number"
|
|
||||||
pp.Finalizers = []string{DeleteAuthentikProxyProviderFinalizer}
|
|
||||||
|
|
||||||
server := newAuthentikTestServer(t, authentikTestHandlers{})
|
|
||||||
t.Cleanup(server.Close)
|
|
||||||
|
|
||||||
ctrl, ctx, cancel := newTestController(t, pp, server.URL)
|
|
||||||
t.Cleanup(cancel)
|
|
||||||
|
|
||||||
err := ctrl.syncHandler(ctx, cache.ObjectName{Namespace: pp.Namespace, Name: pp.Name})
|
|
||||||
if err == nil {
|
|
||||||
t.Fatal("syncHandler() error = nil, want parse error")
|
|
||||||
}
|
|
||||||
if !strings.Contains(err.Error(), "error parsing PK") {
|
|
||||||
t.Fatalf("syncHandler() error = %v, want PK parse error", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestController_enqueueProxyProvider(t *testing.T) {
|
|
||||||
server := newAuthentikTestServer(t, authentikTestHandlers{})
|
|
||||||
t.Cleanup(server.Close)
|
|
||||||
|
|
||||||
ctrl, _, cancel := newTestController(t, testProxyProvider(), server.URL)
|
|
||||||
t.Cleanup(cancel)
|
|
||||||
|
|
||||||
ctrl.enqueueProxyProvider(testProxyProvider())
|
|
||||||
|
|
||||||
if ctrl.workqueue.Len() != 1 {
|
|
||||||
t.Fatalf("workqueue length = %d, want 1", ctrl.workqueue.Len())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- test helpers ---
|
|
||||||
|
|
||||||
func testProxyProvider() *v1alpha1.ProxyProvider {
|
|
||||||
return &v1alpha1.ProxyProvider{
|
|
||||||
TypeMeta: metav1.TypeMeta{
|
|
||||||
APIVersion: v1alpha1.SchemeGroupVersion.String(),
|
|
||||||
Kind: "ProxyProvider",
|
|
||||||
},
|
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
|
||||||
Name: "test-pp",
|
|
||||||
Namespace: "default",
|
|
||||||
},
|
|
||||||
Spec: v1alpha1.ProxyProviderSpec{
|
|
||||||
Name: "my-app",
|
|
||||||
AuthorizationFlow: "flow-auth",
|
|
||||||
InvalidationFlow: "flow-invalidate",
|
|
||||||
ExternalHost: "https://app.example.com",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func newTestController(t *testing.T, pp *v1alpha1.ProxyProvider, authentikURL string) (*Controller, context.Context, context.CancelFunc) {
|
|
||||||
t.Helper()
|
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
|
||||||
ctrl, _, stop := newTestControllerWithContext(t, ctx, pp, authentikURL)
|
|
||||||
return ctrl, ctx, func() {
|
|
||||||
cancel()
|
|
||||||
stop()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func newTestControllerWithContext(t *testing.T, ctx context.Context, pp *v1alpha1.ProxyProvider, authentikURL string) (*Controller, context.Context, func()) {
|
|
||||||
t.Helper()
|
|
||||||
|
|
||||||
authentikClient := newAuthentikAPIClientForTest(t, authentikURL)
|
|
||||||
|
|
||||||
var objects []runtime.Object
|
|
||||||
if pp != nil {
|
|
||||||
objects = append(objects, pp)
|
|
||||||
}
|
|
||||||
proxyClient := operatorfake.NewSimpleClientset(objects...)
|
|
||||||
|
|
||||||
informerFactory := operatorinformers.NewSharedInformerFactory(proxyClient, 0)
|
|
||||||
proxyInformer := informerFactory.Proxyprovider().V1alpha1().ProxyProviders()
|
|
||||||
|
|
||||||
ctrl := NewController(ctx, fake.NewClientset(), proxyClient, authentikClient, proxyInformer)
|
|
||||||
|
|
||||||
informerFactory.Start(ctx.Done())
|
|
||||||
for informerType, synced := range informerFactory.WaitForCacheSync(ctx.Done()) {
|
|
||||||
if !synced {
|
|
||||||
t.Fatalf("informer %v failed to sync", informerType)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ctrl, ctx, func() {}
|
|
||||||
}
|
|
||||||
|
|
||||||
func newAuthentikAPIClientForTest(t *testing.T, serverURL string) *authentikapi.APIClient {
|
|
||||||
t.Helper()
|
|
||||||
|
|
||||||
u, err := url.Parse(serverURL)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("parse server URL: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
cfg := authentikapi.NewConfiguration()
|
|
||||||
cfg.Scheme = u.Scheme
|
|
||||||
cfg.Host = u.Host
|
|
||||||
|
|
||||||
return authentikapi.NewAPIClient(cfg)
|
|
||||||
}
|
|
||||||
|
|
||||||
type authentikTestHandlers struct {
|
|
||||||
proxyCreate http.HandlerFunc
|
|
||||||
proxyDestroy http.HandlerFunc
|
|
||||||
proxyPartialUpdate http.HandlerFunc
|
|
||||||
allRetrieve http.HandlerFunc
|
|
||||||
}
|
|
||||||
|
|
||||||
func newAuthentikTestServer(t *testing.T, handlers authentikTestHandlers) *httptest.Server {
|
|
||||||
t.Helper()
|
|
||||||
|
|
||||||
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
path := r.URL.Path
|
|
||||||
|
|
||||||
switch {
|
|
||||||
case path == "/api/v3/providers/proxy/" && r.Method == http.MethodPost:
|
|
||||||
if handlers.proxyCreate != nil {
|
|
||||||
handlers.proxyCreate(w, r)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
http.NotFound(w, r)
|
|
||||||
|
|
||||||
case strings.HasPrefix(path, "/api/v3/providers/proxy/") && strings.HasSuffix(path, "/"):
|
|
||||||
idPath := strings.TrimPrefix(path, "/api/v3/providers/proxy/")
|
|
||||||
if idPath == "" {
|
|
||||||
http.NotFound(w, r)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
switch r.Method {
|
|
||||||
case http.MethodDelete:
|
|
||||||
if handlers.proxyDestroy != nil {
|
|
||||||
handlers.proxyDestroy(w, r)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
http.NotFound(w, r)
|
|
||||||
case http.MethodPatch:
|
|
||||||
if handlers.proxyPartialUpdate != nil {
|
|
||||||
handlers.proxyPartialUpdate(w, r)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
http.NotFound(w, r)
|
|
||||||
default:
|
|
||||||
http.Error(w, "unexpected method on proxy instance", http.StatusMethodNotAllowed)
|
|
||||||
}
|
|
||||||
|
|
||||||
case strings.HasPrefix(path, "/api/v3/providers/all/") && strings.HasSuffix(path, "/"):
|
|
||||||
if r.Method == http.MethodGet && handlers.allRetrieve != nil {
|
|
||||||
handlers.allRetrieve(w, r)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
http.NotFound(w, r)
|
|
||||||
|
|
||||||
default:
|
|
||||||
http.NotFound(w, r)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
return httptest.NewServer(handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
func writeJSON(t *testing.T, w http.ResponseWriter, status int, body any) {
|
|
||||||
t.Helper()
|
|
||||||
w.Header().Set("Content-Type", "application/json")
|
|
||||||
w.WriteHeader(status)
|
|
||||||
if err := json.NewEncoder(w).Encode(body); err != nil {
|
|
||||||
t.Fatalf("write JSON response: %v", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func getProxyProvider(t *testing.T, ctrl *Controller, namespace, name string) *v1alpha1.ProxyProvider {
|
|
||||||
t.Helper()
|
|
||||||
|
|
||||||
got, err := ctrl.proxyProviderClientset.ProxyproviderV1alpha1().ProxyProviders(namespace).Get(
|
|
||||||
context.Background(), name, metav1.GetOptions{},
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("get ProxyProvider: %v", err)
|
|
||||||
}
|
|
||||||
return got
|
|
||||||
}
|
|
||||||
@@ -1,243 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
types "k8s.io/apimachinery/pkg/types"
|
|
||||||
v1 "k8s.io/client-go/applyconfigurations/meta/v1"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ApplicationApplyConfiguration represents a declarative configuration of the Application type for use
|
|
||||||
// with apply.
|
|
||||||
type ApplicationApplyConfiguration struct {
|
|
||||||
v1.TypeMetaApplyConfiguration `json:""`
|
|
||||||
*v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"`
|
|
||||||
Spec *ApplicationSpecApplyConfiguration `json:"spec,omitempty"`
|
|
||||||
Status *ApplicationStatusApplyConfiguration `json:"status,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Application constructs a declarative configuration of the Application type for use with
|
|
||||||
// apply.
|
|
||||||
func Application(name, namespace string) *ApplicationApplyConfiguration {
|
|
||||||
b := &ApplicationApplyConfiguration{}
|
|
||||||
b.WithName(name)
|
|
||||||
b.WithNamespace(namespace)
|
|
||||||
b.WithKind("Application")
|
|
||||||
b.WithAPIVersion("application.t000-n.de/v1alpha1")
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b ApplicationApplyConfiguration) IsApplyConfiguration() {}
|
|
||||||
|
|
||||||
// WithKind sets the Kind field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the Kind field is set to the value of the last call.
|
|
||||||
func (b *ApplicationApplyConfiguration) WithKind(value string) *ApplicationApplyConfiguration {
|
|
||||||
b.TypeMetaApplyConfiguration.Kind = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the APIVersion field is set to the value of the last call.
|
|
||||||
func (b *ApplicationApplyConfiguration) WithAPIVersion(value string) *ApplicationApplyConfiguration {
|
|
||||||
b.TypeMetaApplyConfiguration.APIVersion = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithName sets the Name field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the Name field is set to the value of the last call.
|
|
||||||
func (b *ApplicationApplyConfiguration) WithName(value string) *ApplicationApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
b.ObjectMetaApplyConfiguration.Name = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithGenerateName sets the GenerateName field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the GenerateName field is set to the value of the last call.
|
|
||||||
func (b *ApplicationApplyConfiguration) WithGenerateName(value string) *ApplicationApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
b.ObjectMetaApplyConfiguration.GenerateName = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithNamespace sets the Namespace field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the Namespace field is set to the value of the last call.
|
|
||||||
func (b *ApplicationApplyConfiguration) WithNamespace(value string) *ApplicationApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
b.ObjectMetaApplyConfiguration.Namespace = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithUID sets the UID field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the UID field is set to the value of the last call.
|
|
||||||
func (b *ApplicationApplyConfiguration) WithUID(value types.UID) *ApplicationApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
b.ObjectMetaApplyConfiguration.UID = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the ResourceVersion field is set to the value of the last call.
|
|
||||||
func (b *ApplicationApplyConfiguration) WithResourceVersion(value string) *ApplicationApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
b.ObjectMetaApplyConfiguration.ResourceVersion = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithGeneration sets the Generation field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the Generation field is set to the value of the last call.
|
|
||||||
func (b *ApplicationApplyConfiguration) WithGeneration(value int64) *ApplicationApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
b.ObjectMetaApplyConfiguration.Generation = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the CreationTimestamp field is set to the value of the last call.
|
|
||||||
func (b *ApplicationApplyConfiguration) WithCreationTimestamp(value metav1.Time) *ApplicationApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the DeletionTimestamp field is set to the value of the last call.
|
|
||||||
func (b *ApplicationApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *ApplicationApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
|
|
||||||
func (b *ApplicationApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *ApplicationApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithLabels puts the entries into the Labels field in the declarative configuration
|
|
||||||
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the entries provided by each call will be put on the Labels field,
|
|
||||||
// overwriting an existing map entries in Labels field with the same key.
|
|
||||||
func (b *ApplicationApplyConfiguration) WithLabels(entries map[string]string) *ApplicationApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
|
|
||||||
b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
|
|
||||||
}
|
|
||||||
for k, v := range entries {
|
|
||||||
b.ObjectMetaApplyConfiguration.Labels[k] = v
|
|
||||||
}
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithAnnotations puts the entries into the Annotations field in the declarative configuration
|
|
||||||
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the entries provided by each call will be put on the Annotations field,
|
|
||||||
// overwriting an existing map entries in Annotations field with the same key.
|
|
||||||
func (b *ApplicationApplyConfiguration) WithAnnotations(entries map[string]string) *ApplicationApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
|
|
||||||
b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
|
|
||||||
}
|
|
||||||
for k, v := range entries {
|
|
||||||
b.ObjectMetaApplyConfiguration.Annotations[k] = v
|
|
||||||
}
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration
|
|
||||||
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
|
||||||
// If called multiple times, values provided by each call will be appended to the OwnerReferences field.
|
|
||||||
func (b *ApplicationApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *ApplicationApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
for i := range values {
|
|
||||||
if values[i] == nil {
|
|
||||||
panic("nil value passed to WithOwnerReferences")
|
|
||||||
}
|
|
||||||
b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
|
|
||||||
}
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithFinalizers adds the given value to the Finalizers field in the declarative configuration
|
|
||||||
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
|
||||||
// If called multiple times, values provided by each call will be appended to the Finalizers field.
|
|
||||||
func (b *ApplicationApplyConfiguration) WithFinalizers(values ...string) *ApplicationApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
for i := range values {
|
|
||||||
b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
|
|
||||||
}
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *ApplicationApplyConfiguration) ensureObjectMetaApplyConfigurationExists() {
|
|
||||||
if b.ObjectMetaApplyConfiguration == nil {
|
|
||||||
b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithSpec sets the Spec field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the Spec field is set to the value of the last call.
|
|
||||||
func (b *ApplicationApplyConfiguration) WithSpec(value *ApplicationSpecApplyConfiguration) *ApplicationApplyConfiguration {
|
|
||||||
b.Spec = value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithStatus sets the Status field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the Status field is set to the value of the last call.
|
|
||||||
func (b *ApplicationApplyConfiguration) WithStatus(value *ApplicationStatusApplyConfiguration) *ApplicationApplyConfiguration {
|
|
||||||
b.Status = value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetKind retrieves the value of the Kind field in the declarative configuration.
|
|
||||||
func (b *ApplicationApplyConfiguration) GetKind() *string {
|
|
||||||
return b.TypeMetaApplyConfiguration.Kind
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetAPIVersion retrieves the value of the APIVersion field in the declarative configuration.
|
|
||||||
func (b *ApplicationApplyConfiguration) GetAPIVersion() *string {
|
|
||||||
return b.TypeMetaApplyConfiguration.APIVersion
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetName retrieves the value of the Name field in the declarative configuration.
|
|
||||||
func (b *ApplicationApplyConfiguration) GetName() *string {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
return b.ObjectMetaApplyConfiguration.Name
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetNamespace retrieves the value of the Namespace field in the declarative configuration.
|
|
||||||
func (b *ApplicationApplyConfiguration) GetNamespace() *string {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
return b.ObjectMetaApplyConfiguration.Namespace
|
|
||||||
}
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
// ApplicationSpecApplyConfiguration represents a declarative configuration of the ApplicationSpec type for use
|
|
||||||
// with apply.
|
|
||||||
type ApplicationSpecApplyConfiguration struct {
|
|
||||||
Name *string `json:"name,omitempty"`
|
|
||||||
Slug *string `json:"slug,omitempty"`
|
|
||||||
Provider *int32 `json:"provider,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// ApplicationSpecApplyConfiguration constructs a declarative configuration of the ApplicationSpec type for use with
|
|
||||||
// apply.
|
|
||||||
func ApplicationSpec() *ApplicationSpecApplyConfiguration {
|
|
||||||
return &ApplicationSpecApplyConfiguration{}
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithName sets the Name field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the Name field is set to the value of the last call.
|
|
||||||
func (b *ApplicationSpecApplyConfiguration) WithName(value string) *ApplicationSpecApplyConfiguration {
|
|
||||||
b.Name = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithSlug sets the Slug field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the Slug field is set to the value of the last call.
|
|
||||||
func (b *ApplicationSpecApplyConfiguration) WithSlug(value string) *ApplicationSpecApplyConfiguration {
|
|
||||||
b.Slug = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithProvider sets the Provider field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the Provider field is set to the value of the last call.
|
|
||||||
func (b *ApplicationSpecApplyConfiguration) WithProvider(value int32) *ApplicationSpecApplyConfiguration {
|
|
||||||
b.Provider = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
// ApplicationStatusApplyConfiguration represents a declarative configuration of the ApplicationStatus type for use
|
|
||||||
// with apply.
|
|
||||||
type ApplicationStatusApplyConfiguration struct {
|
|
||||||
PK *string `json:"pk,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// ApplicationStatusApplyConfiguration constructs a declarative configuration of the ApplicationStatus type for use with
|
|
||||||
// apply.
|
|
||||||
func ApplicationStatus() *ApplicationStatusApplyConfiguration {
|
|
||||||
return &ApplicationStatusApplyConfiguration{}
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithPK sets the PK field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the PK field is set to the value of the last call.
|
|
||||||
func (b *ApplicationStatusApplyConfiguration) WithPK(value string) *ApplicationStatusApplyConfiguration {
|
|
||||||
b.PK = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
@@ -1,243 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
types "k8s.io/apimachinery/pkg/types"
|
|
||||||
v1 "k8s.io/client-go/applyconfigurations/meta/v1"
|
|
||||||
)
|
|
||||||
|
|
||||||
// PolicyBindingApplyConfiguration represents a declarative configuration of the PolicyBinding type for use
|
|
||||||
// with apply.
|
|
||||||
type PolicyBindingApplyConfiguration struct {
|
|
||||||
v1.TypeMetaApplyConfiguration `json:""`
|
|
||||||
*v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"`
|
|
||||||
Spec *PolicyBindingSpecApplyConfiguration `json:"spec,omitempty"`
|
|
||||||
Status *PolicyBindingStatusApplyConfiguration `json:"status,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// PolicyBinding constructs a declarative configuration of the PolicyBinding type for use with
|
|
||||||
// apply.
|
|
||||||
func PolicyBinding(name, namespace string) *PolicyBindingApplyConfiguration {
|
|
||||||
b := &PolicyBindingApplyConfiguration{}
|
|
||||||
b.WithName(name)
|
|
||||||
b.WithNamespace(namespace)
|
|
||||||
b.WithKind("PolicyBinding")
|
|
||||||
b.WithAPIVersion("policybinding.t000-n.de/v1alpha1")
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b PolicyBindingApplyConfiguration) IsApplyConfiguration() {}
|
|
||||||
|
|
||||||
// WithKind sets the Kind field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the Kind field is set to the value of the last call.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) WithKind(value string) *PolicyBindingApplyConfiguration {
|
|
||||||
b.TypeMetaApplyConfiguration.Kind = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the APIVersion field is set to the value of the last call.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) WithAPIVersion(value string) *PolicyBindingApplyConfiguration {
|
|
||||||
b.TypeMetaApplyConfiguration.APIVersion = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithName sets the Name field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the Name field is set to the value of the last call.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) WithName(value string) *PolicyBindingApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
b.ObjectMetaApplyConfiguration.Name = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithGenerateName sets the GenerateName field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the GenerateName field is set to the value of the last call.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) WithGenerateName(value string) *PolicyBindingApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
b.ObjectMetaApplyConfiguration.GenerateName = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithNamespace sets the Namespace field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the Namespace field is set to the value of the last call.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) WithNamespace(value string) *PolicyBindingApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
b.ObjectMetaApplyConfiguration.Namespace = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithUID sets the UID field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the UID field is set to the value of the last call.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) WithUID(value types.UID) *PolicyBindingApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
b.ObjectMetaApplyConfiguration.UID = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the ResourceVersion field is set to the value of the last call.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) WithResourceVersion(value string) *PolicyBindingApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
b.ObjectMetaApplyConfiguration.ResourceVersion = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithGeneration sets the Generation field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the Generation field is set to the value of the last call.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) WithGeneration(value int64) *PolicyBindingApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
b.ObjectMetaApplyConfiguration.Generation = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the CreationTimestamp field is set to the value of the last call.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) WithCreationTimestamp(value metav1.Time) *PolicyBindingApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the DeletionTimestamp field is set to the value of the last call.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *PolicyBindingApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *PolicyBindingApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithLabels puts the entries into the Labels field in the declarative configuration
|
|
||||||
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the entries provided by each call will be put on the Labels field,
|
|
||||||
// overwriting an existing map entries in Labels field with the same key.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) WithLabels(entries map[string]string) *PolicyBindingApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
|
|
||||||
b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
|
|
||||||
}
|
|
||||||
for k, v := range entries {
|
|
||||||
b.ObjectMetaApplyConfiguration.Labels[k] = v
|
|
||||||
}
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithAnnotations puts the entries into the Annotations field in the declarative configuration
|
|
||||||
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the entries provided by each call will be put on the Annotations field,
|
|
||||||
// overwriting an existing map entries in Annotations field with the same key.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) WithAnnotations(entries map[string]string) *PolicyBindingApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
|
|
||||||
b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
|
|
||||||
}
|
|
||||||
for k, v := range entries {
|
|
||||||
b.ObjectMetaApplyConfiguration.Annotations[k] = v
|
|
||||||
}
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration
|
|
||||||
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
|
||||||
// If called multiple times, values provided by each call will be appended to the OwnerReferences field.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *PolicyBindingApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
for i := range values {
|
|
||||||
if values[i] == nil {
|
|
||||||
panic("nil value passed to WithOwnerReferences")
|
|
||||||
}
|
|
||||||
b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
|
|
||||||
}
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithFinalizers adds the given value to the Finalizers field in the declarative configuration
|
|
||||||
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
|
||||||
// If called multiple times, values provided by each call will be appended to the Finalizers field.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) WithFinalizers(values ...string) *PolicyBindingApplyConfiguration {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
for i := range values {
|
|
||||||
b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
|
|
||||||
}
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *PolicyBindingApplyConfiguration) ensureObjectMetaApplyConfigurationExists() {
|
|
||||||
if b.ObjectMetaApplyConfiguration == nil {
|
|
||||||
b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithSpec sets the Spec field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the Spec field is set to the value of the last call.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) WithSpec(value *PolicyBindingSpecApplyConfiguration) *PolicyBindingApplyConfiguration {
|
|
||||||
b.Spec = value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithStatus sets the Status field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the Status field is set to the value of the last call.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) WithStatus(value *PolicyBindingStatusApplyConfiguration) *PolicyBindingApplyConfiguration {
|
|
||||||
b.Status = value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetKind retrieves the value of the Kind field in the declarative configuration.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) GetKind() *string {
|
|
||||||
return b.TypeMetaApplyConfiguration.Kind
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetAPIVersion retrieves the value of the APIVersion field in the declarative configuration.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) GetAPIVersion() *string {
|
|
||||||
return b.TypeMetaApplyConfiguration.APIVersion
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetName retrieves the value of the Name field in the declarative configuration.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) GetName() *string {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
return b.ObjectMetaApplyConfiguration.Name
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetNamespace retrieves the value of the Namespace field in the declarative configuration.
|
|
||||||
func (b *PolicyBindingApplyConfiguration) GetNamespace() *string {
|
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
|
||||||
return b.ObjectMetaApplyConfiguration.Namespace
|
|
||||||
}
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
// PolicyBindingSpecApplyConfiguration represents a declarative configuration of the PolicyBindingSpec type for use
|
|
||||||
// with apply.
|
|
||||||
type PolicyBindingSpecApplyConfiguration struct {
|
|
||||||
Policy *string `json:"policy,omitempty"`
|
|
||||||
Group *string `json:"group,omitempty"`
|
|
||||||
User *int32 `json:"user,omitempty"`
|
|
||||||
Target *string `json:"target,omitempty"`
|
|
||||||
Order *int32 `json:"order,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// PolicyBindingSpecApplyConfiguration constructs a declarative configuration of the PolicyBindingSpec type for use with
|
|
||||||
// apply.
|
|
||||||
func PolicyBindingSpec() *PolicyBindingSpecApplyConfiguration {
|
|
||||||
return &PolicyBindingSpecApplyConfiguration{}
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithPolicy sets the Policy field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the Policy field is set to the value of the last call.
|
|
||||||
func (b *PolicyBindingSpecApplyConfiguration) WithPolicy(value string) *PolicyBindingSpecApplyConfiguration {
|
|
||||||
b.Policy = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithGroup sets the Group field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the Group field is set to the value of the last call.
|
|
||||||
func (b *PolicyBindingSpecApplyConfiguration) WithGroup(value string) *PolicyBindingSpecApplyConfiguration {
|
|
||||||
b.Group = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithUser sets the User field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the User field is set to the value of the last call.
|
|
||||||
func (b *PolicyBindingSpecApplyConfiguration) WithUser(value int32) *PolicyBindingSpecApplyConfiguration {
|
|
||||||
b.User = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithTarget sets the Target field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the Target field is set to the value of the last call.
|
|
||||||
func (b *PolicyBindingSpecApplyConfiguration) WithTarget(value string) *PolicyBindingSpecApplyConfiguration {
|
|
||||||
b.Target = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithOrder sets the Order field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the Order field is set to the value of the last call.
|
|
||||||
func (b *PolicyBindingSpecApplyConfiguration) WithOrder(value int32) *PolicyBindingSpecApplyConfiguration {
|
|
||||||
b.Order = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
// PolicyBindingStatusApplyConfiguration represents a declarative configuration of the PolicyBindingStatus type for use
|
|
||||||
// with apply.
|
|
||||||
type PolicyBindingStatusApplyConfiguration struct {
|
|
||||||
PK *string `json:"pk,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// PolicyBindingStatusApplyConfiguration constructs a declarative configuration of the PolicyBindingStatus type for use with
|
|
||||||
// apply.
|
|
||||||
func PolicyBindingStatus() *PolicyBindingStatusApplyConfiguration {
|
|
||||||
return &PolicyBindingStatusApplyConfiguration{}
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithPK sets the PK field in the declarative configuration to the given value
|
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
|
||||||
// If called multiple times, the PK field is set to the value of the last call.
|
|
||||||
func (b *PolicyBindingStatusApplyConfiguration) WithPK(value string) *PolicyBindingStatusApplyConfiguration {
|
|
||||||
b.PK = &value
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
+12
-12
@@ -16,21 +16,21 @@ limitations under the License.
|
|||||||
|
|
||||||
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
||||||
|
|
||||||
package v1alpha1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
apismetav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
types "k8s.io/apimachinery/pkg/types"
|
types "k8s.io/apimachinery/pkg/types"
|
||||||
v1 "k8s.io/client-go/applyconfigurations/meta/v1"
|
metav1 "k8s.io/client-go/applyconfigurations/meta/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ProxyProviderApplyConfiguration represents a declarative configuration of the ProxyProvider type for use
|
// ProxyProviderApplyConfiguration represents a declarative configuration of the ProxyProvider type for use
|
||||||
// with apply.
|
// with apply.
|
||||||
type ProxyProviderApplyConfiguration struct {
|
type ProxyProviderApplyConfiguration struct {
|
||||||
v1.TypeMetaApplyConfiguration `json:""`
|
metav1.TypeMetaApplyConfiguration `json:""`
|
||||||
*v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"`
|
*metav1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"`
|
||||||
Spec *ProxyProviderSpecApplyConfiguration `json:"spec,omitempty"`
|
Spec *ProxyProviderSpecApplyConfiguration `json:"spec,omitempty"`
|
||||||
Status *ProxyProviderStatusApplyConfiguration `json:"status,omitempty"`
|
Status *ProxyProviderStatusApplyConfiguration `json:"status,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProxyProvider constructs a declarative configuration of the ProxyProvider type for use with
|
// ProxyProvider constructs a declarative configuration of the ProxyProvider type for use with
|
||||||
@@ -40,7 +40,7 @@ func ProxyProvider(name, namespace string) *ProxyProviderApplyConfiguration {
|
|||||||
b.WithName(name)
|
b.WithName(name)
|
||||||
b.WithNamespace(namespace)
|
b.WithNamespace(namespace)
|
||||||
b.WithKind("ProxyProvider")
|
b.WithKind("ProxyProvider")
|
||||||
b.WithAPIVersion("proxyprovider.t000-n.de/v1alpha1")
|
b.WithAPIVersion("proxyprovider.t000-n.de/v1")
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -119,7 +119,7 @@ func (b *ProxyProviderApplyConfiguration) WithGeneration(value int64) *ProxyProv
|
|||||||
// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value
|
// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
// If called multiple times, the CreationTimestamp field is set to the value of the last call.
|
// If called multiple times, the CreationTimestamp field is set to the value of the last call.
|
||||||
func (b *ProxyProviderApplyConfiguration) WithCreationTimestamp(value metav1.Time) *ProxyProviderApplyConfiguration {
|
func (b *ProxyProviderApplyConfiguration) WithCreationTimestamp(value apismetav1.Time) *ProxyProviderApplyConfiguration {
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
|
b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
|
||||||
return b
|
return b
|
||||||
@@ -128,7 +128,7 @@ func (b *ProxyProviderApplyConfiguration) WithCreationTimestamp(value metav1.Tim
|
|||||||
// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value
|
// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value
|
||||||
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
// If called multiple times, the DeletionTimestamp field is set to the value of the last call.
|
// If called multiple times, the DeletionTimestamp field is set to the value of the last call.
|
||||||
func (b *ProxyProviderApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *ProxyProviderApplyConfiguration {
|
func (b *ProxyProviderApplyConfiguration) WithDeletionTimestamp(value apismetav1.Time) *ProxyProviderApplyConfiguration {
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
|
b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
|
||||||
return b
|
return b
|
||||||
@@ -176,7 +176,7 @@ func (b *ProxyProviderApplyConfiguration) WithAnnotations(entries map[string]str
|
|||||||
// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration
|
// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration
|
||||||
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
||||||
// If called multiple times, values provided by each call will be appended to the OwnerReferences field.
|
// If called multiple times, values provided by each call will be appended to the OwnerReferences field.
|
||||||
func (b *ProxyProviderApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *ProxyProviderApplyConfiguration {
|
func (b *ProxyProviderApplyConfiguration) WithOwnerReferences(values ...*metav1.OwnerReferenceApplyConfiguration) *ProxyProviderApplyConfiguration {
|
||||||
b.ensureObjectMetaApplyConfigurationExists()
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
for i := range values {
|
for i := range values {
|
||||||
if values[i] == nil {
|
if values[i] == nil {
|
||||||
@@ -200,7 +200,7 @@ func (b *ProxyProviderApplyConfiguration) WithFinalizers(values ...string) *Prox
|
|||||||
|
|
||||||
func (b *ProxyProviderApplyConfiguration) ensureObjectMetaApplyConfigurationExists() {
|
func (b *ProxyProviderApplyConfiguration) ensureObjectMetaApplyConfigurationExists() {
|
||||||
if b.ObjectMetaApplyConfiguration == nil {
|
if b.ObjectMetaApplyConfiguration == nil {
|
||||||
b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{}
|
b.ObjectMetaApplyConfiguration = &metav1.ObjectMetaApplyConfiguration{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
+1
-1
@@ -16,7 +16,7 @@ limitations under the License.
|
|||||||
|
|
||||||
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
||||||
|
|
||||||
package v1alpha1
|
package v1
|
||||||
|
|
||||||
// ProxyProviderSpecApplyConfiguration represents a declarative configuration of the ProxyProviderSpec type for use
|
// ProxyProviderSpecApplyConfiguration represents a declarative configuration of the ProxyProviderSpec type for use
|
||||||
// with apply.
|
// with apply.
|
||||||
+1
-1
@@ -16,7 +16,7 @@ limitations under the License.
|
|||||||
|
|
||||||
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
||||||
|
|
||||||
package v1alpha1
|
package v1
|
||||||
|
|
||||||
// ProxyProviderStatusApplyConfiguration represents a declarative configuration of the ProxyProviderStatus type for use
|
// ProxyProviderStatusApplyConfiguration represents a declarative configuration of the ProxyProviderStatus type for use
|
||||||
// with apply.
|
// with apply.
|
||||||
@@ -19,13 +19,9 @@ limitations under the License.
|
|||||||
package applyconfiguration
|
package applyconfiguration
|
||||||
|
|
||||||
import (
|
import (
|
||||||
v1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1"
|
v1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1"
|
||||||
policybindingv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1"
|
|
||||||
proxyproviderv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1"
|
|
||||||
applicationv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/applyconfiguration/application/v1alpha1"
|
|
||||||
internal "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/applyconfiguration/internal"
|
internal "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/applyconfiguration/internal"
|
||||||
applyconfigurationpolicybindingv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/applyconfiguration/policybinding/v1alpha1"
|
proxyproviderv1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/applyconfiguration/proxyprovider/v1"
|
||||||
applyconfigurationproxyproviderv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/applyconfiguration/proxyprovider/v1alpha1"
|
|
||||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||||
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
managedfields "k8s.io/apimachinery/pkg/util/managedfields"
|
managedfields "k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
@@ -35,29 +31,13 @@ import (
|
|||||||
// apply configuration type exists for the given GroupVersionKind.
|
// apply configuration type exists for the given GroupVersionKind.
|
||||||
func ForKind(kind schema.GroupVersionKind) interface{} {
|
func ForKind(kind schema.GroupVersionKind) interface{} {
|
||||||
switch kind {
|
switch kind {
|
||||||
// Group=application.t000-n.de, Version=v1alpha1
|
// Group=proxyprovider.t000-n.de, Version=v1
|
||||||
case v1alpha1.SchemeGroupVersion.WithKind("Application"):
|
case v1.SchemeGroupVersion.WithKind("ProxyProvider"):
|
||||||
return &applicationv1alpha1.ApplicationApplyConfiguration{}
|
return &proxyproviderv1.ProxyProviderApplyConfiguration{}
|
||||||
case v1alpha1.SchemeGroupVersion.WithKind("ApplicationSpec"):
|
case v1.SchemeGroupVersion.WithKind("ProxyProviderSpec"):
|
||||||
return &applicationv1alpha1.ApplicationSpecApplyConfiguration{}
|
return &proxyproviderv1.ProxyProviderSpecApplyConfiguration{}
|
||||||
case v1alpha1.SchemeGroupVersion.WithKind("ApplicationStatus"):
|
case v1.SchemeGroupVersion.WithKind("ProxyProviderStatus"):
|
||||||
return &applicationv1alpha1.ApplicationStatusApplyConfiguration{}
|
return &proxyproviderv1.ProxyProviderStatusApplyConfiguration{}
|
||||||
|
|
||||||
// Group=policybinding.t000-n.de, Version=v1alpha1
|
|
||||||
case policybindingv1alpha1.SchemeGroupVersion.WithKind("PolicyBinding"):
|
|
||||||
return &applyconfigurationpolicybindingv1alpha1.PolicyBindingApplyConfiguration{}
|
|
||||||
case policybindingv1alpha1.SchemeGroupVersion.WithKind("PolicyBindingSpec"):
|
|
||||||
return &applyconfigurationpolicybindingv1alpha1.PolicyBindingSpecApplyConfiguration{}
|
|
||||||
case policybindingv1alpha1.SchemeGroupVersion.WithKind("PolicyBindingStatus"):
|
|
||||||
return &applyconfigurationpolicybindingv1alpha1.PolicyBindingStatusApplyConfiguration{}
|
|
||||||
|
|
||||||
// Group=proxyprovider.t000-n.de, Version=v1alpha1
|
|
||||||
case proxyproviderv1alpha1.SchemeGroupVersion.WithKind("ProxyProvider"):
|
|
||||||
return &applyconfigurationproxyproviderv1alpha1.ProxyProviderApplyConfiguration{}
|
|
||||||
case proxyproviderv1alpha1.SchemeGroupVersion.WithKind("ProxyProviderSpec"):
|
|
||||||
return &applyconfigurationproxyproviderv1alpha1.ProxyProviderSpecApplyConfiguration{}
|
|
||||||
case proxyproviderv1alpha1.SchemeGroupVersion.WithKind("ProxyProviderStatus"):
|
|
||||||
return &applyconfigurationproxyproviderv1alpha1.ProxyProviderStatusApplyConfiguration{}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -22,9 +22,7 @@ import (
|
|||||||
fmt "fmt"
|
fmt "fmt"
|
||||||
http "net/http"
|
http "net/http"
|
||||||
|
|
||||||
applicationv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/application/v1alpha1"
|
proxyproviderv1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/proxyprovider/v1"
|
||||||
policybindingv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/policybinding/v1alpha1"
|
|
||||||
proxyproviderv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/proxyprovider/v1alpha1"
|
|
||||||
discovery "k8s.io/client-go/discovery"
|
discovery "k8s.io/client-go/discovery"
|
||||||
rest "k8s.io/client-go/rest"
|
rest "k8s.io/client-go/rest"
|
||||||
flowcontrol "k8s.io/client-go/util/flowcontrol"
|
flowcontrol "k8s.io/client-go/util/flowcontrol"
|
||||||
@@ -32,32 +30,18 @@ import (
|
|||||||
|
|
||||||
type Interface interface {
|
type Interface interface {
|
||||||
Discovery() discovery.DiscoveryInterface
|
Discovery() discovery.DiscoveryInterface
|
||||||
ApplicationV1alpha1() applicationv1alpha1.ApplicationV1alpha1Interface
|
ProxyproviderV1() proxyproviderv1.ProxyproviderV1Interface
|
||||||
PolicyBindingV1alpha1() policybindingv1alpha1.PolicyBindingV1alpha1Interface
|
|
||||||
ProxyproviderV1alpha1() proxyproviderv1alpha1.ProxyproviderV1alpha1Interface
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clientset contains the clients for groups.
|
// Clientset contains the clients for groups.
|
||||||
type Clientset struct {
|
type Clientset struct {
|
||||||
*discovery.DiscoveryClient
|
*discovery.DiscoveryClient
|
||||||
applicationV1alpha1 *applicationv1alpha1.ApplicationV1alpha1Client
|
proxyproviderV1 *proxyproviderv1.ProxyproviderV1Client
|
||||||
policyBindingV1alpha1 *policybindingv1alpha1.PolicyBindingV1alpha1Client
|
|
||||||
proxyproviderV1alpha1 *proxyproviderv1alpha1.ProxyproviderV1alpha1Client
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ApplicationV1alpha1 retrieves the ApplicationV1alpha1Client
|
// ProxyproviderV1 retrieves the ProxyproviderV1Client
|
||||||
func (c *Clientset) ApplicationV1alpha1() applicationv1alpha1.ApplicationV1alpha1Interface {
|
func (c *Clientset) ProxyproviderV1() proxyproviderv1.ProxyproviderV1Interface {
|
||||||
return c.applicationV1alpha1
|
return c.proxyproviderV1
|
||||||
}
|
|
||||||
|
|
||||||
// PolicyBindingV1alpha1 retrieves the PolicyBindingV1alpha1Client
|
|
||||||
func (c *Clientset) PolicyBindingV1alpha1() policybindingv1alpha1.PolicyBindingV1alpha1Interface {
|
|
||||||
return c.policyBindingV1alpha1
|
|
||||||
}
|
|
||||||
|
|
||||||
// ProxyproviderV1alpha1 retrieves the ProxyproviderV1alpha1Client
|
|
||||||
func (c *Clientset) ProxyproviderV1alpha1() proxyproviderv1alpha1.ProxyproviderV1alpha1Interface {
|
|
||||||
return c.proxyproviderV1alpha1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Discovery retrieves the DiscoveryClient
|
// Discovery retrieves the DiscoveryClient
|
||||||
@@ -104,15 +88,7 @@ func NewForConfigAndClient(c *rest.Config, httpClient *http.Client) (*Clientset,
|
|||||||
|
|
||||||
var cs Clientset
|
var cs Clientset
|
||||||
var err error
|
var err error
|
||||||
cs.applicationV1alpha1, err = applicationv1alpha1.NewForConfigAndClient(&configShallowCopy, httpClient)
|
cs.proxyproviderV1, err = proxyproviderv1.NewForConfigAndClient(&configShallowCopy, httpClient)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
cs.policyBindingV1alpha1, err = policybindingv1alpha1.NewForConfigAndClient(&configShallowCopy, httpClient)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
cs.proxyproviderV1alpha1, err = proxyproviderv1alpha1.NewForConfigAndClient(&configShallowCopy, httpClient)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -137,9 +113,7 @@ func NewForConfigOrDie(c *rest.Config) *Clientset {
|
|||||||
// New creates a new Clientset for the given RESTClient.
|
// New creates a new Clientset for the given RESTClient.
|
||||||
func New(c rest.Interface) *Clientset {
|
func New(c rest.Interface) *Clientset {
|
||||||
var cs Clientset
|
var cs Clientset
|
||||||
cs.applicationV1alpha1 = applicationv1alpha1.New(c)
|
cs.proxyproviderV1 = proxyproviderv1.New(c)
|
||||||
cs.policyBindingV1alpha1 = policybindingv1alpha1.New(c)
|
|
||||||
cs.proxyproviderV1alpha1 = proxyproviderv1alpha1.New(c)
|
|
||||||
|
|
||||||
cs.DiscoveryClient = discovery.NewDiscoveryClient(c)
|
cs.DiscoveryClient = discovery.NewDiscoveryClient(c)
|
||||||
return &cs
|
return &cs
|
||||||
|
|||||||
@@ -21,12 +21,8 @@ package fake
|
|||||||
import (
|
import (
|
||||||
applyconfiguration "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/applyconfiguration"
|
applyconfiguration "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/applyconfiguration"
|
||||||
clientset "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned"
|
clientset "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned"
|
||||||
applicationv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/application/v1alpha1"
|
proxyproviderv1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/proxyprovider/v1"
|
||||||
fakeapplicationv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/application/v1alpha1/fake"
|
fakeproxyproviderv1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/proxyprovider/v1/fake"
|
||||||
policybindingv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/policybinding/v1alpha1"
|
|
||||||
fakepolicybindingv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/policybinding/v1alpha1/fake"
|
|
||||||
proxyproviderv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/proxyprovider/v1alpha1"
|
|
||||||
fakeproxyproviderv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/proxyprovider/v1alpha1/fake"
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/watch"
|
"k8s.io/apimachinery/pkg/watch"
|
||||||
@@ -140,17 +136,7 @@ var (
|
|||||||
_ testing.FakeClient = &Clientset{}
|
_ testing.FakeClient = &Clientset{}
|
||||||
)
|
)
|
||||||
|
|
||||||
// ApplicationV1alpha1 retrieves the ApplicationV1alpha1Client
|
// ProxyproviderV1 retrieves the ProxyproviderV1Client
|
||||||
func (c *Clientset) ApplicationV1alpha1() applicationv1alpha1.ApplicationV1alpha1Interface {
|
func (c *Clientset) ProxyproviderV1() proxyproviderv1.ProxyproviderV1Interface {
|
||||||
return &fakeapplicationv1alpha1.FakeApplicationV1alpha1{Fake: &c.Fake}
|
return &fakeproxyproviderv1.FakeProxyproviderV1{Fake: &c.Fake}
|
||||||
}
|
|
||||||
|
|
||||||
// PolicyBindingV1alpha1 retrieves the PolicyBindingV1alpha1Client
|
|
||||||
func (c *Clientset) PolicyBindingV1alpha1() policybindingv1alpha1.PolicyBindingV1alpha1Interface {
|
|
||||||
return &fakepolicybindingv1alpha1.FakePolicyBindingV1alpha1{Fake: &c.Fake}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ProxyproviderV1alpha1 retrieves the ProxyproviderV1alpha1Client
|
|
||||||
func (c *Clientset) ProxyproviderV1alpha1() proxyproviderv1alpha1.ProxyproviderV1alpha1Interface {
|
|
||||||
return &fakeproxyproviderv1alpha1.FakeProxyproviderV1alpha1{Fake: &c.Fake}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,9 +19,7 @@ limitations under the License.
|
|||||||
package fake
|
package fake
|
||||||
|
|
||||||
import (
|
import (
|
||||||
applicationv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1"
|
proxyproviderv1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1"
|
||||||
policybindingv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1"
|
|
||||||
proxyproviderv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1"
|
|
||||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||||
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
@@ -33,9 +31,7 @@ var scheme = runtime.NewScheme()
|
|||||||
var codecs = serializer.NewCodecFactory(scheme)
|
var codecs = serializer.NewCodecFactory(scheme)
|
||||||
|
|
||||||
var localSchemeBuilder = runtime.SchemeBuilder{
|
var localSchemeBuilder = runtime.SchemeBuilder{
|
||||||
applicationv1alpha1.AddToScheme,
|
proxyproviderv1.AddToScheme,
|
||||||
policybindingv1alpha1.AddToScheme,
|
|
||||||
proxyproviderv1alpha1.AddToScheme,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddToScheme adds all types of this clientset into the given scheme. This allows composition
|
// AddToScheme adds all types of this clientset into the given scheme. This allows composition
|
||||||
|
|||||||
@@ -19,9 +19,7 @@ limitations under the License.
|
|||||||
package scheme
|
package scheme
|
||||||
|
|
||||||
import (
|
import (
|
||||||
applicationv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1"
|
proxyproviderv1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1"
|
||||||
policybindingv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1"
|
|
||||||
proxyproviderv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1"
|
|
||||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||||
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
@@ -33,9 +31,7 @@ var Scheme = runtime.NewScheme()
|
|||||||
var Codecs = serializer.NewCodecFactory(Scheme)
|
var Codecs = serializer.NewCodecFactory(Scheme)
|
||||||
var ParameterCodec = runtime.NewParameterCodec(Scheme)
|
var ParameterCodec = runtime.NewParameterCodec(Scheme)
|
||||||
var localSchemeBuilder = runtime.SchemeBuilder{
|
var localSchemeBuilder = runtime.SchemeBuilder{
|
||||||
applicationv1alpha1.AddToScheme,
|
proxyproviderv1.AddToScheme,
|
||||||
policybindingv1alpha1.AddToScheme,
|
|
||||||
proxyproviderv1alpha1.AddToScheme,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddToScheme adds all types of this clientset into the given scheme. This allows composition
|
// AddToScheme adds all types of this clientset into the given scheme. This allows composition
|
||||||
|
|||||||
@@ -1,74 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by client-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
context "context"
|
|
||||||
|
|
||||||
applicationv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1"
|
|
||||||
applyconfigurationapplicationv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/applyconfiguration/application/v1alpha1"
|
|
||||||
scheme "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/scheme"
|
|
||||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
types "k8s.io/apimachinery/pkg/types"
|
|
||||||
watch "k8s.io/apimachinery/pkg/watch"
|
|
||||||
gentype "k8s.io/client-go/gentype"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ApplicationsGetter has a method to return a ApplicationInterface.
|
|
||||||
// A group's client should implement this interface.
|
|
||||||
type ApplicationsGetter interface {
|
|
||||||
Applications(namespace string) ApplicationInterface
|
|
||||||
}
|
|
||||||
|
|
||||||
// ApplicationInterface has methods to work with Application resources.
|
|
||||||
type ApplicationInterface interface {
|
|
||||||
Create(ctx context.Context, application *applicationv1alpha1.Application, opts v1.CreateOptions) (*applicationv1alpha1.Application, error)
|
|
||||||
Update(ctx context.Context, application *applicationv1alpha1.Application, opts v1.UpdateOptions) (*applicationv1alpha1.Application, error)
|
|
||||||
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
|
|
||||||
UpdateStatus(ctx context.Context, application *applicationv1alpha1.Application, opts v1.UpdateOptions) (*applicationv1alpha1.Application, error)
|
|
||||||
Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
|
|
||||||
DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
|
|
||||||
Get(ctx context.Context, name string, opts v1.GetOptions) (*applicationv1alpha1.Application, error)
|
|
||||||
List(ctx context.Context, opts v1.ListOptions) (*applicationv1alpha1.ApplicationList, error)
|
|
||||||
Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
|
|
||||||
Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *applicationv1alpha1.Application, err error)
|
|
||||||
Apply(ctx context.Context, application *applyconfigurationapplicationv1alpha1.ApplicationApplyConfiguration, opts v1.ApplyOptions) (result *applicationv1alpha1.Application, err error)
|
|
||||||
// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
|
|
||||||
ApplyStatus(ctx context.Context, application *applyconfigurationapplicationv1alpha1.ApplicationApplyConfiguration, opts v1.ApplyOptions) (result *applicationv1alpha1.Application, err error)
|
|
||||||
ApplicationExpansion
|
|
||||||
}
|
|
||||||
|
|
||||||
// applications implements ApplicationInterface
|
|
||||||
type applications struct {
|
|
||||||
*gentype.ClientWithListAndApply[*applicationv1alpha1.Application, *applicationv1alpha1.ApplicationList, *applyconfigurationapplicationv1alpha1.ApplicationApplyConfiguration]
|
|
||||||
}
|
|
||||||
|
|
||||||
// newApplications returns a Applications
|
|
||||||
func newApplications(c *ApplicationV1alpha1Client, namespace string) *applications {
|
|
||||||
return &applications{
|
|
||||||
gentype.NewClientWithListAndApply[*applicationv1alpha1.Application, *applicationv1alpha1.ApplicationList, *applyconfigurationapplicationv1alpha1.ApplicationApplyConfiguration](
|
|
||||||
"applications",
|
|
||||||
c.RESTClient(),
|
|
||||||
scheme.ParameterCodec,
|
|
||||||
namespace,
|
|
||||||
func() *applicationv1alpha1.Application { return &applicationv1alpha1.Application{} },
|
|
||||||
func() *applicationv1alpha1.ApplicationList { return &applicationv1alpha1.ApplicationList{} },
|
|
||||||
),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,101 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by client-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
http "net/http"
|
|
||||||
|
|
||||||
applicationv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1"
|
|
||||||
scheme "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/scheme"
|
|
||||||
rest "k8s.io/client-go/rest"
|
|
||||||
)
|
|
||||||
|
|
||||||
type ApplicationV1alpha1Interface interface {
|
|
||||||
RESTClient() rest.Interface
|
|
||||||
ApplicationsGetter
|
|
||||||
}
|
|
||||||
|
|
||||||
// ApplicationV1alpha1Client is used to interact with features provided by the application.t000-n.de group.
|
|
||||||
type ApplicationV1alpha1Client struct {
|
|
||||||
restClient rest.Interface
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *ApplicationV1alpha1Client) Applications(namespace string) ApplicationInterface {
|
|
||||||
return newApplications(c, namespace)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewForConfig creates a new ApplicationV1alpha1Client for the given config.
|
|
||||||
// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient),
|
|
||||||
// where httpClient was generated with rest.HTTPClientFor(c).
|
|
||||||
func NewForConfig(c *rest.Config) (*ApplicationV1alpha1Client, error) {
|
|
||||||
config := *c
|
|
||||||
setConfigDefaults(&config)
|
|
||||||
httpClient, err := rest.HTTPClientFor(&config)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return NewForConfigAndClient(&config, httpClient)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewForConfigAndClient creates a new ApplicationV1alpha1Client for the given config and http client.
|
|
||||||
// Note the http client provided takes precedence over the configured transport values.
|
|
||||||
func NewForConfigAndClient(c *rest.Config, h *http.Client) (*ApplicationV1alpha1Client, error) {
|
|
||||||
config := *c
|
|
||||||
setConfigDefaults(&config)
|
|
||||||
client, err := rest.RESTClientForConfigAndClient(&config, h)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return &ApplicationV1alpha1Client{client}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewForConfigOrDie creates a new ApplicationV1alpha1Client for the given config and
|
|
||||||
// panics if there is an error in the config.
|
|
||||||
func NewForConfigOrDie(c *rest.Config) *ApplicationV1alpha1Client {
|
|
||||||
client, err := NewForConfig(c)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return client
|
|
||||||
}
|
|
||||||
|
|
||||||
// New creates a new ApplicationV1alpha1Client for the given RESTClient.
|
|
||||||
func New(c rest.Interface) *ApplicationV1alpha1Client {
|
|
||||||
return &ApplicationV1alpha1Client{c}
|
|
||||||
}
|
|
||||||
|
|
||||||
func setConfigDefaults(config *rest.Config) {
|
|
||||||
gv := applicationv1alpha1.SchemeGroupVersion
|
|
||||||
config.GroupVersion = &gv
|
|
||||||
config.APIPath = "/apis"
|
|
||||||
config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion()
|
|
||||||
|
|
||||||
if config.UserAgent == "" {
|
|
||||||
config.UserAgent = rest.DefaultKubernetesUserAgent()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// RESTClient returns a RESTClient that is used to communicate
|
|
||||||
// with API server by this client implementation.
|
|
||||||
func (c *ApplicationV1alpha1Client) RESTClient() rest.Interface {
|
|
||||||
if c == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return c.restClient
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by client-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
// This package has the automatically generated typed clients.
|
|
||||||
package v1alpha1
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by client-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package fake
|
|
||||||
|
|
||||||
import (
|
|
||||||
v1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1"
|
|
||||||
applicationv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/applyconfiguration/application/v1alpha1"
|
|
||||||
typedapplicationv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/application/v1alpha1"
|
|
||||||
gentype "k8s.io/client-go/gentype"
|
|
||||||
)
|
|
||||||
|
|
||||||
// fakeApplications implements ApplicationInterface
|
|
||||||
type fakeApplications struct {
|
|
||||||
*gentype.FakeClientWithListAndApply[*v1alpha1.Application, *v1alpha1.ApplicationList, *applicationv1alpha1.ApplicationApplyConfiguration]
|
|
||||||
Fake *FakeApplicationV1alpha1
|
|
||||||
}
|
|
||||||
|
|
||||||
func newFakeApplications(fake *FakeApplicationV1alpha1, namespace string) typedapplicationv1alpha1.ApplicationInterface {
|
|
||||||
return &fakeApplications{
|
|
||||||
gentype.NewFakeClientWithListAndApply[*v1alpha1.Application, *v1alpha1.ApplicationList, *applicationv1alpha1.ApplicationApplyConfiguration](
|
|
||||||
fake.Fake,
|
|
||||||
namespace,
|
|
||||||
v1alpha1.SchemeGroupVersion.WithResource("applications"),
|
|
||||||
v1alpha1.SchemeGroupVersion.WithKind("Application"),
|
|
||||||
func() *v1alpha1.Application { return &v1alpha1.Application{} },
|
|
||||||
func() *v1alpha1.ApplicationList { return &v1alpha1.ApplicationList{} },
|
|
||||||
func(dst, src *v1alpha1.ApplicationList) { dst.ListMeta = src.ListMeta },
|
|
||||||
func(list *v1alpha1.ApplicationList) []*v1alpha1.Application {
|
|
||||||
return gentype.ToPointerSlice(list.Items)
|
|
||||||
},
|
|
||||||
func(list *v1alpha1.ApplicationList, items []*v1alpha1.Application) {
|
|
||||||
list.Items = gentype.FromPointerSlice(items)
|
|
||||||
},
|
|
||||||
),
|
|
||||||
fake,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-40
@@ -1,40 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by client-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package fake
|
|
||||||
|
|
||||||
import (
|
|
||||||
v1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/application/v1alpha1"
|
|
||||||
rest "k8s.io/client-go/rest"
|
|
||||||
testing "k8s.io/client-go/testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
type FakeApplicationV1alpha1 struct {
|
|
||||||
*testing.Fake
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *FakeApplicationV1alpha1) Applications(namespace string) v1alpha1.ApplicationInterface {
|
|
||||||
return newFakeApplications(c, namespace)
|
|
||||||
}
|
|
||||||
|
|
||||||
// RESTClient returns a RESTClient that is used to communicate
|
|
||||||
// with API server by this client implementation.
|
|
||||||
func (c *FakeApplicationV1alpha1) RESTClient() rest.Interface {
|
|
||||||
var ret *rest.RESTClient
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by client-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
type ApplicationExpansion interface{}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by client-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
// This package has the automatically generated typed clients.
|
|
||||||
package v1alpha1
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by client-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
// Package fake has the automatically generated clients.
|
|
||||||
package fake
|
|
||||||
-53
@@ -1,53 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by client-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package fake
|
|
||||||
|
|
||||||
import (
|
|
||||||
v1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1"
|
|
||||||
policybindingv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/applyconfiguration/policybinding/v1alpha1"
|
|
||||||
typedpolicybindingv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/policybinding/v1alpha1"
|
|
||||||
gentype "k8s.io/client-go/gentype"
|
|
||||||
)
|
|
||||||
|
|
||||||
// fakePolicyBindings implements PolicyBindingInterface
|
|
||||||
type fakePolicyBindings struct {
|
|
||||||
*gentype.FakeClientWithListAndApply[*v1alpha1.PolicyBinding, *v1alpha1.PolicyBindingList, *policybindingv1alpha1.PolicyBindingApplyConfiguration]
|
|
||||||
Fake *FakePolicyBindingV1alpha1
|
|
||||||
}
|
|
||||||
|
|
||||||
func newFakePolicyBindings(fake *FakePolicyBindingV1alpha1, namespace string) typedpolicybindingv1alpha1.PolicyBindingInterface {
|
|
||||||
return &fakePolicyBindings{
|
|
||||||
gentype.NewFakeClientWithListAndApply[*v1alpha1.PolicyBinding, *v1alpha1.PolicyBindingList, *policybindingv1alpha1.PolicyBindingApplyConfiguration](
|
|
||||||
fake.Fake,
|
|
||||||
namespace,
|
|
||||||
v1alpha1.SchemeGroupVersion.WithResource("policybindings"),
|
|
||||||
v1alpha1.SchemeGroupVersion.WithKind("PolicyBinding"),
|
|
||||||
func() *v1alpha1.PolicyBinding { return &v1alpha1.PolicyBinding{} },
|
|
||||||
func() *v1alpha1.PolicyBindingList { return &v1alpha1.PolicyBindingList{} },
|
|
||||||
func(dst, src *v1alpha1.PolicyBindingList) { dst.ListMeta = src.ListMeta },
|
|
||||||
func(list *v1alpha1.PolicyBindingList) []*v1alpha1.PolicyBinding {
|
|
||||||
return gentype.ToPointerSlice(list.Items)
|
|
||||||
},
|
|
||||||
func(list *v1alpha1.PolicyBindingList, items []*v1alpha1.PolicyBinding) {
|
|
||||||
list.Items = gentype.FromPointerSlice(items)
|
|
||||||
},
|
|
||||||
),
|
|
||||||
fake,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-40
@@ -1,40 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by client-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package fake
|
|
||||||
|
|
||||||
import (
|
|
||||||
v1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/policybinding/v1alpha1"
|
|
||||||
rest "k8s.io/client-go/rest"
|
|
||||||
testing "k8s.io/client-go/testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
type FakePolicyBindingV1alpha1 struct {
|
|
||||||
*testing.Fake
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *FakePolicyBindingV1alpha1) PolicyBindings(namespace string) v1alpha1.PolicyBindingInterface {
|
|
||||||
return newFakePolicyBindings(c, namespace)
|
|
||||||
}
|
|
||||||
|
|
||||||
// RESTClient returns a RESTClient that is used to communicate
|
|
||||||
// with API server by this client implementation.
|
|
||||||
func (c *FakePolicyBindingV1alpha1) RESTClient() rest.Interface {
|
|
||||||
var ret *rest.RESTClient
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by client-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
type PolicyBindingExpansion interface{}
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by client-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
context "context"
|
|
||||||
|
|
||||||
policybindingv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1"
|
|
||||||
applyconfigurationpolicybindingv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/applyconfiguration/policybinding/v1alpha1"
|
|
||||||
scheme "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/scheme"
|
|
||||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
types "k8s.io/apimachinery/pkg/types"
|
|
||||||
watch "k8s.io/apimachinery/pkg/watch"
|
|
||||||
gentype "k8s.io/client-go/gentype"
|
|
||||||
)
|
|
||||||
|
|
||||||
// PolicyBindingsGetter has a method to return a PolicyBindingInterface.
|
|
||||||
// A group's client should implement this interface.
|
|
||||||
type PolicyBindingsGetter interface {
|
|
||||||
PolicyBindings(namespace string) PolicyBindingInterface
|
|
||||||
}
|
|
||||||
|
|
||||||
// PolicyBindingInterface has methods to work with PolicyBinding resources.
|
|
||||||
type PolicyBindingInterface interface {
|
|
||||||
Create(ctx context.Context, policyBinding *policybindingv1alpha1.PolicyBinding, opts v1.CreateOptions) (*policybindingv1alpha1.PolicyBinding, error)
|
|
||||||
Update(ctx context.Context, policyBinding *policybindingv1alpha1.PolicyBinding, opts v1.UpdateOptions) (*policybindingv1alpha1.PolicyBinding, error)
|
|
||||||
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
|
|
||||||
UpdateStatus(ctx context.Context, policyBinding *policybindingv1alpha1.PolicyBinding, opts v1.UpdateOptions) (*policybindingv1alpha1.PolicyBinding, error)
|
|
||||||
Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
|
|
||||||
DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
|
|
||||||
Get(ctx context.Context, name string, opts v1.GetOptions) (*policybindingv1alpha1.PolicyBinding, error)
|
|
||||||
List(ctx context.Context, opts v1.ListOptions) (*policybindingv1alpha1.PolicyBindingList, error)
|
|
||||||
Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
|
|
||||||
Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *policybindingv1alpha1.PolicyBinding, err error)
|
|
||||||
Apply(ctx context.Context, policyBinding *applyconfigurationpolicybindingv1alpha1.PolicyBindingApplyConfiguration, opts v1.ApplyOptions) (result *policybindingv1alpha1.PolicyBinding, err error)
|
|
||||||
// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
|
|
||||||
ApplyStatus(ctx context.Context, policyBinding *applyconfigurationpolicybindingv1alpha1.PolicyBindingApplyConfiguration, opts v1.ApplyOptions) (result *policybindingv1alpha1.PolicyBinding, err error)
|
|
||||||
PolicyBindingExpansion
|
|
||||||
}
|
|
||||||
|
|
||||||
// policyBindings implements PolicyBindingInterface
|
|
||||||
type policyBindings struct {
|
|
||||||
*gentype.ClientWithListAndApply[*policybindingv1alpha1.PolicyBinding, *policybindingv1alpha1.PolicyBindingList, *applyconfigurationpolicybindingv1alpha1.PolicyBindingApplyConfiguration]
|
|
||||||
}
|
|
||||||
|
|
||||||
// newPolicyBindings returns a PolicyBindings
|
|
||||||
func newPolicyBindings(c *PolicyBindingV1alpha1Client, namespace string) *policyBindings {
|
|
||||||
return &policyBindings{
|
|
||||||
gentype.NewClientWithListAndApply[*policybindingv1alpha1.PolicyBinding, *policybindingv1alpha1.PolicyBindingList, *applyconfigurationpolicybindingv1alpha1.PolicyBindingApplyConfiguration](
|
|
||||||
"policybindings",
|
|
||||||
c.RESTClient(),
|
|
||||||
scheme.ParameterCodec,
|
|
||||||
namespace,
|
|
||||||
func() *policybindingv1alpha1.PolicyBinding { return &policybindingv1alpha1.PolicyBinding{} },
|
|
||||||
func() *policybindingv1alpha1.PolicyBindingList { return &policybindingv1alpha1.PolicyBindingList{} },
|
|
||||||
),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-101
@@ -1,101 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by client-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
http "net/http"
|
|
||||||
|
|
||||||
policybindingv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1"
|
|
||||||
scheme "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/scheme"
|
|
||||||
rest "k8s.io/client-go/rest"
|
|
||||||
)
|
|
||||||
|
|
||||||
type PolicyBindingV1alpha1Interface interface {
|
|
||||||
RESTClient() rest.Interface
|
|
||||||
PolicyBindingsGetter
|
|
||||||
}
|
|
||||||
|
|
||||||
// PolicyBindingV1alpha1Client is used to interact with features provided by the policybinding.t000-n.de group.
|
|
||||||
type PolicyBindingV1alpha1Client struct {
|
|
||||||
restClient rest.Interface
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *PolicyBindingV1alpha1Client) PolicyBindings(namespace string) PolicyBindingInterface {
|
|
||||||
return newPolicyBindings(c, namespace)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewForConfig creates a new PolicyBindingV1alpha1Client for the given config.
|
|
||||||
// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient),
|
|
||||||
// where httpClient was generated with rest.HTTPClientFor(c).
|
|
||||||
func NewForConfig(c *rest.Config) (*PolicyBindingV1alpha1Client, error) {
|
|
||||||
config := *c
|
|
||||||
setConfigDefaults(&config)
|
|
||||||
httpClient, err := rest.HTTPClientFor(&config)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return NewForConfigAndClient(&config, httpClient)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewForConfigAndClient creates a new PolicyBindingV1alpha1Client for the given config and http client.
|
|
||||||
// Note the http client provided takes precedence over the configured transport values.
|
|
||||||
func NewForConfigAndClient(c *rest.Config, h *http.Client) (*PolicyBindingV1alpha1Client, error) {
|
|
||||||
config := *c
|
|
||||||
setConfigDefaults(&config)
|
|
||||||
client, err := rest.RESTClientForConfigAndClient(&config, h)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return &PolicyBindingV1alpha1Client{client}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewForConfigOrDie creates a new PolicyBindingV1alpha1Client for the given config and
|
|
||||||
// panics if there is an error in the config.
|
|
||||||
func NewForConfigOrDie(c *rest.Config) *PolicyBindingV1alpha1Client {
|
|
||||||
client, err := NewForConfig(c)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return client
|
|
||||||
}
|
|
||||||
|
|
||||||
// New creates a new PolicyBindingV1alpha1Client for the given RESTClient.
|
|
||||||
func New(c rest.Interface) *PolicyBindingV1alpha1Client {
|
|
||||||
return &PolicyBindingV1alpha1Client{c}
|
|
||||||
}
|
|
||||||
|
|
||||||
func setConfigDefaults(config *rest.Config) {
|
|
||||||
gv := policybindingv1alpha1.SchemeGroupVersion
|
|
||||||
config.GroupVersion = &gv
|
|
||||||
config.APIPath = "/apis"
|
|
||||||
config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion()
|
|
||||||
|
|
||||||
if config.UserAgent == "" {
|
|
||||||
config.UserAgent = rest.DefaultKubernetesUserAgent()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// RESTClient returns a RESTClient that is used to communicate
|
|
||||||
// with API server by this client implementation.
|
|
||||||
func (c *PolicyBindingV1alpha1Client) RESTClient() rest.Interface {
|
|
||||||
if c == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return c.restClient
|
|
||||||
}
|
|
||||||
+1
-1
@@ -17,4 +17,4 @@ limitations under the License.
|
|||||||
// Code generated by client-gen. DO NOT EDIT.
|
// Code generated by client-gen. DO NOT EDIT.
|
||||||
|
|
||||||
// This package has the automatically generated typed clients.
|
// This package has the automatically generated typed clients.
|
||||||
package v1alpha1
|
package v1
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
Copyright The Kubernetes 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by client-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package fake
|
||||||
|
|
||||||
|
import (
|
||||||
|
v1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1"
|
||||||
|
proxyproviderv1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/applyconfiguration/proxyprovider/v1"
|
||||||
|
typedproxyproviderv1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/proxyprovider/v1"
|
||||||
|
gentype "k8s.io/client-go/gentype"
|
||||||
|
)
|
||||||
|
|
||||||
|
// fakeProxyProviders implements ProxyProviderInterface
|
||||||
|
type fakeProxyProviders struct {
|
||||||
|
*gentype.FakeClientWithListAndApply[*v1.ProxyProvider, *v1.ProxyProviderList, *proxyproviderv1.ProxyProviderApplyConfiguration]
|
||||||
|
Fake *FakeProxyproviderV1
|
||||||
|
}
|
||||||
|
|
||||||
|
func newFakeProxyProviders(fake *FakeProxyproviderV1, namespace string) typedproxyproviderv1.ProxyProviderInterface {
|
||||||
|
return &fakeProxyProviders{
|
||||||
|
gentype.NewFakeClientWithListAndApply[*v1.ProxyProvider, *v1.ProxyProviderList, *proxyproviderv1.ProxyProviderApplyConfiguration](
|
||||||
|
fake.Fake,
|
||||||
|
namespace,
|
||||||
|
v1.SchemeGroupVersion.WithResource("proxyproviders"),
|
||||||
|
v1.SchemeGroupVersion.WithKind("ProxyProvider"),
|
||||||
|
func() *v1.ProxyProvider { return &v1.ProxyProvider{} },
|
||||||
|
func() *v1.ProxyProviderList { return &v1.ProxyProviderList{} },
|
||||||
|
func(dst, src *v1.ProxyProviderList) { dst.ListMeta = src.ListMeta },
|
||||||
|
func(list *v1.ProxyProviderList) []*v1.ProxyProvider { return gentype.ToPointerSlice(list.Items) },
|
||||||
|
func(list *v1.ProxyProviderList, items []*v1.ProxyProvider) {
|
||||||
|
list.Items = gentype.FromPointerSlice(items)
|
||||||
|
},
|
||||||
|
),
|
||||||
|
fake,
|
||||||
|
}
|
||||||
|
}
|
||||||
+4
-4
@@ -19,22 +19,22 @@ limitations under the License.
|
|||||||
package fake
|
package fake
|
||||||
|
|
||||||
import (
|
import (
|
||||||
v1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/proxyprovider/v1alpha1"
|
v1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/proxyprovider/v1"
|
||||||
rest "k8s.io/client-go/rest"
|
rest "k8s.io/client-go/rest"
|
||||||
testing "k8s.io/client-go/testing"
|
testing "k8s.io/client-go/testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
type FakeProxyproviderV1alpha1 struct {
|
type FakeProxyproviderV1 struct {
|
||||||
*testing.Fake
|
*testing.Fake
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeProxyproviderV1alpha1) ProxyProviders(namespace string) v1alpha1.ProxyProviderInterface {
|
func (c *FakeProxyproviderV1) ProxyProviders(namespace string) v1.ProxyProviderInterface {
|
||||||
return newFakeProxyProviders(c, namespace)
|
return newFakeProxyProviders(c, namespace)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RESTClient returns a RESTClient that is used to communicate
|
// RESTClient returns a RESTClient that is used to communicate
|
||||||
// with API server by this client implementation.
|
// with API server by this client implementation.
|
||||||
func (c *FakeProxyproviderV1alpha1) RESTClient() rest.Interface {
|
func (c *FakeProxyproviderV1) RESTClient() rest.Interface {
|
||||||
var ret *rest.RESTClient
|
var ret *rest.RESTClient
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
+1
-1
@@ -16,6 +16,6 @@ limitations under the License.
|
|||||||
|
|
||||||
// Code generated by client-gen. DO NOT EDIT.
|
// Code generated by client-gen. DO NOT EDIT.
|
||||||
|
|
||||||
package v1alpha1
|
package v1
|
||||||
|
|
||||||
type ProxyProviderExpansion interface{}
|
type ProxyProviderExpansion interface{}
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
Copyright The Kubernetes 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by client-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package v1
|
||||||
|
|
||||||
|
import (
|
||||||
|
context "context"
|
||||||
|
|
||||||
|
proxyproviderv1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1"
|
||||||
|
applyconfigurationproxyproviderv1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/applyconfiguration/proxyprovider/v1"
|
||||||
|
scheme "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/scheme"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
types "k8s.io/apimachinery/pkg/types"
|
||||||
|
watch "k8s.io/apimachinery/pkg/watch"
|
||||||
|
gentype "k8s.io/client-go/gentype"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ProxyProvidersGetter has a method to return a ProxyProviderInterface.
|
||||||
|
// A group's client should implement this interface.
|
||||||
|
type ProxyProvidersGetter interface {
|
||||||
|
ProxyProviders(namespace string) ProxyProviderInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProxyProviderInterface has methods to work with ProxyProvider resources.
|
||||||
|
type ProxyProviderInterface interface {
|
||||||
|
Create(ctx context.Context, proxyProvider *proxyproviderv1.ProxyProvider, opts metav1.CreateOptions) (*proxyproviderv1.ProxyProvider, error)
|
||||||
|
Update(ctx context.Context, proxyProvider *proxyproviderv1.ProxyProvider, opts metav1.UpdateOptions) (*proxyproviderv1.ProxyProvider, error)
|
||||||
|
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
|
||||||
|
UpdateStatus(ctx context.Context, proxyProvider *proxyproviderv1.ProxyProvider, opts metav1.UpdateOptions) (*proxyproviderv1.ProxyProvider, error)
|
||||||
|
Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error
|
||||||
|
DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error
|
||||||
|
Get(ctx context.Context, name string, opts metav1.GetOptions) (*proxyproviderv1.ProxyProvider, error)
|
||||||
|
List(ctx context.Context, opts metav1.ListOptions) (*proxyproviderv1.ProxyProviderList, error)
|
||||||
|
Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error)
|
||||||
|
Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *proxyproviderv1.ProxyProvider, err error)
|
||||||
|
Apply(ctx context.Context, proxyProvider *applyconfigurationproxyproviderv1.ProxyProviderApplyConfiguration, opts metav1.ApplyOptions) (result *proxyproviderv1.ProxyProvider, err error)
|
||||||
|
// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
|
||||||
|
ApplyStatus(ctx context.Context, proxyProvider *applyconfigurationproxyproviderv1.ProxyProviderApplyConfiguration, opts metav1.ApplyOptions) (result *proxyproviderv1.ProxyProvider, err error)
|
||||||
|
ProxyProviderExpansion
|
||||||
|
}
|
||||||
|
|
||||||
|
// proxyProviders implements ProxyProviderInterface
|
||||||
|
type proxyProviders struct {
|
||||||
|
*gentype.ClientWithListAndApply[*proxyproviderv1.ProxyProvider, *proxyproviderv1.ProxyProviderList, *applyconfigurationproxyproviderv1.ProxyProviderApplyConfiguration]
|
||||||
|
}
|
||||||
|
|
||||||
|
// newProxyProviders returns a ProxyProviders
|
||||||
|
func newProxyProviders(c *ProxyproviderV1Client, namespace string) *proxyProviders {
|
||||||
|
return &proxyProviders{
|
||||||
|
gentype.NewClientWithListAndApply[*proxyproviderv1.ProxyProvider, *proxyproviderv1.ProxyProviderList, *applyconfigurationproxyproviderv1.ProxyProviderApplyConfiguration](
|
||||||
|
"proxyproviders",
|
||||||
|
c.RESTClient(),
|
||||||
|
scheme.ParameterCodec,
|
||||||
|
namespace,
|
||||||
|
func() *proxyproviderv1.ProxyProvider { return &proxyproviderv1.ProxyProvider{} },
|
||||||
|
func() *proxyproviderv1.ProxyProviderList { return &proxyproviderv1.ProxyProviderList{} },
|
||||||
|
),
|
||||||
|
}
|
||||||
|
}
|
||||||
+18
-18
@@ -16,34 +16,34 @@ limitations under the License.
|
|||||||
|
|
||||||
// Code generated by client-gen. DO NOT EDIT.
|
// Code generated by client-gen. DO NOT EDIT.
|
||||||
|
|
||||||
package v1alpha1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
http "net/http"
|
http "net/http"
|
||||||
|
|
||||||
proxyproviderv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1"
|
proxyproviderv1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1"
|
||||||
scheme "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/scheme"
|
scheme "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/scheme"
|
||||||
rest "k8s.io/client-go/rest"
|
rest "k8s.io/client-go/rest"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ProxyproviderV1alpha1Interface interface {
|
type ProxyproviderV1Interface interface {
|
||||||
RESTClient() rest.Interface
|
RESTClient() rest.Interface
|
||||||
ProxyProvidersGetter
|
ProxyProvidersGetter
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProxyproviderV1alpha1Client is used to interact with features provided by the proxyprovider.t000-n.de group.
|
// ProxyproviderV1Client is used to interact with features provided by the proxyprovider.t000-n.de group.
|
||||||
type ProxyproviderV1alpha1Client struct {
|
type ProxyproviderV1Client struct {
|
||||||
restClient rest.Interface
|
restClient rest.Interface
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ProxyproviderV1alpha1Client) ProxyProviders(namespace string) ProxyProviderInterface {
|
func (c *ProxyproviderV1Client) ProxyProviders(namespace string) ProxyProviderInterface {
|
||||||
return newProxyProviders(c, namespace)
|
return newProxyProviders(c, namespace)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewForConfig creates a new ProxyproviderV1alpha1Client for the given config.
|
// NewForConfig creates a new ProxyproviderV1Client for the given config.
|
||||||
// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient),
|
// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient),
|
||||||
// where httpClient was generated with rest.HTTPClientFor(c).
|
// where httpClient was generated with rest.HTTPClientFor(c).
|
||||||
func NewForConfig(c *rest.Config) (*ProxyproviderV1alpha1Client, error) {
|
func NewForConfig(c *rest.Config) (*ProxyproviderV1Client, error) {
|
||||||
config := *c
|
config := *c
|
||||||
setConfigDefaults(&config)
|
setConfigDefaults(&config)
|
||||||
httpClient, err := rest.HTTPClientFor(&config)
|
httpClient, err := rest.HTTPClientFor(&config)
|
||||||
@@ -53,21 +53,21 @@ func NewForConfig(c *rest.Config) (*ProxyproviderV1alpha1Client, error) {
|
|||||||
return NewForConfigAndClient(&config, httpClient)
|
return NewForConfigAndClient(&config, httpClient)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewForConfigAndClient creates a new ProxyproviderV1alpha1Client for the given config and http client.
|
// NewForConfigAndClient creates a new ProxyproviderV1Client for the given config and http client.
|
||||||
// Note the http client provided takes precedence over the configured transport values.
|
// Note the http client provided takes precedence over the configured transport values.
|
||||||
func NewForConfigAndClient(c *rest.Config, h *http.Client) (*ProxyproviderV1alpha1Client, error) {
|
func NewForConfigAndClient(c *rest.Config, h *http.Client) (*ProxyproviderV1Client, error) {
|
||||||
config := *c
|
config := *c
|
||||||
setConfigDefaults(&config)
|
setConfigDefaults(&config)
|
||||||
client, err := rest.RESTClientForConfigAndClient(&config, h)
|
client, err := rest.RESTClientForConfigAndClient(&config, h)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return &ProxyproviderV1alpha1Client{client}, nil
|
return &ProxyproviderV1Client{client}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewForConfigOrDie creates a new ProxyproviderV1alpha1Client for the given config and
|
// NewForConfigOrDie creates a new ProxyproviderV1Client for the given config and
|
||||||
// panics if there is an error in the config.
|
// panics if there is an error in the config.
|
||||||
func NewForConfigOrDie(c *rest.Config) *ProxyproviderV1alpha1Client {
|
func NewForConfigOrDie(c *rest.Config) *ProxyproviderV1Client {
|
||||||
client, err := NewForConfig(c)
|
client, err := NewForConfig(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
@@ -75,13 +75,13 @@ func NewForConfigOrDie(c *rest.Config) *ProxyproviderV1alpha1Client {
|
|||||||
return client
|
return client
|
||||||
}
|
}
|
||||||
|
|
||||||
// New creates a new ProxyproviderV1alpha1Client for the given RESTClient.
|
// New creates a new ProxyproviderV1Client for the given RESTClient.
|
||||||
func New(c rest.Interface) *ProxyproviderV1alpha1Client {
|
func New(c rest.Interface) *ProxyproviderV1Client {
|
||||||
return &ProxyproviderV1alpha1Client{c}
|
return &ProxyproviderV1Client{c}
|
||||||
}
|
}
|
||||||
|
|
||||||
func setConfigDefaults(config *rest.Config) {
|
func setConfigDefaults(config *rest.Config) {
|
||||||
gv := proxyproviderv1alpha1.SchemeGroupVersion
|
gv := proxyproviderv1.SchemeGroupVersion
|
||||||
config.GroupVersion = &gv
|
config.GroupVersion = &gv
|
||||||
config.APIPath = "/apis"
|
config.APIPath = "/apis"
|
||||||
config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion()
|
config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion()
|
||||||
@@ -93,7 +93,7 @@ func setConfigDefaults(config *rest.Config) {
|
|||||||
|
|
||||||
// RESTClient returns a RESTClient that is used to communicate
|
// RESTClient returns a RESTClient that is used to communicate
|
||||||
// with API server by this client implementation.
|
// with API server by this client implementation.
|
||||||
func (c *ProxyproviderV1alpha1Client) RESTClient() rest.Interface {
|
func (c *ProxyproviderV1Client) RESTClient() rest.Interface {
|
||||||
if c == nil {
|
if c == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by client-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
// Package fake has the automatically generated clients.
|
|
||||||
package fake
|
|
||||||
-53
@@ -1,53 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by client-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package fake
|
|
||||||
|
|
||||||
import (
|
|
||||||
v1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1"
|
|
||||||
proxyproviderv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/applyconfiguration/proxyprovider/v1alpha1"
|
|
||||||
typedproxyproviderv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/typed/proxyprovider/v1alpha1"
|
|
||||||
gentype "k8s.io/client-go/gentype"
|
|
||||||
)
|
|
||||||
|
|
||||||
// fakeProxyProviders implements ProxyProviderInterface
|
|
||||||
type fakeProxyProviders struct {
|
|
||||||
*gentype.FakeClientWithListAndApply[*v1alpha1.ProxyProvider, *v1alpha1.ProxyProviderList, *proxyproviderv1alpha1.ProxyProviderApplyConfiguration]
|
|
||||||
Fake *FakeProxyproviderV1alpha1
|
|
||||||
}
|
|
||||||
|
|
||||||
func newFakeProxyProviders(fake *FakeProxyproviderV1alpha1, namespace string) typedproxyproviderv1alpha1.ProxyProviderInterface {
|
|
||||||
return &fakeProxyProviders{
|
|
||||||
gentype.NewFakeClientWithListAndApply[*v1alpha1.ProxyProvider, *v1alpha1.ProxyProviderList, *proxyproviderv1alpha1.ProxyProviderApplyConfiguration](
|
|
||||||
fake.Fake,
|
|
||||||
namespace,
|
|
||||||
v1alpha1.SchemeGroupVersion.WithResource("proxyproviders"),
|
|
||||||
v1alpha1.SchemeGroupVersion.WithKind("ProxyProvider"),
|
|
||||||
func() *v1alpha1.ProxyProvider { return &v1alpha1.ProxyProvider{} },
|
|
||||||
func() *v1alpha1.ProxyProviderList { return &v1alpha1.ProxyProviderList{} },
|
|
||||||
func(dst, src *v1alpha1.ProxyProviderList) { dst.ListMeta = src.ListMeta },
|
|
||||||
func(list *v1alpha1.ProxyProviderList) []*v1alpha1.ProxyProvider {
|
|
||||||
return gentype.ToPointerSlice(list.Items)
|
|
||||||
},
|
|
||||||
func(list *v1alpha1.ProxyProviderList, items []*v1alpha1.ProxyProvider) {
|
|
||||||
list.Items = gentype.FromPointerSlice(items)
|
|
||||||
},
|
|
||||||
),
|
|
||||||
fake,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by client-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
context "context"
|
|
||||||
|
|
||||||
proxyproviderv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1"
|
|
||||||
applyconfigurationproxyproviderv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/applyconfiguration/proxyprovider/v1alpha1"
|
|
||||||
scheme "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned/scheme"
|
|
||||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
types "k8s.io/apimachinery/pkg/types"
|
|
||||||
watch "k8s.io/apimachinery/pkg/watch"
|
|
||||||
gentype "k8s.io/client-go/gentype"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ProxyProvidersGetter has a method to return a ProxyProviderInterface.
|
|
||||||
// A group's client should implement this interface.
|
|
||||||
type ProxyProvidersGetter interface {
|
|
||||||
ProxyProviders(namespace string) ProxyProviderInterface
|
|
||||||
}
|
|
||||||
|
|
||||||
// ProxyProviderInterface has methods to work with ProxyProvider resources.
|
|
||||||
type ProxyProviderInterface interface {
|
|
||||||
Create(ctx context.Context, proxyProvider *proxyproviderv1alpha1.ProxyProvider, opts v1.CreateOptions) (*proxyproviderv1alpha1.ProxyProvider, error)
|
|
||||||
Update(ctx context.Context, proxyProvider *proxyproviderv1alpha1.ProxyProvider, opts v1.UpdateOptions) (*proxyproviderv1alpha1.ProxyProvider, error)
|
|
||||||
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
|
|
||||||
UpdateStatus(ctx context.Context, proxyProvider *proxyproviderv1alpha1.ProxyProvider, opts v1.UpdateOptions) (*proxyproviderv1alpha1.ProxyProvider, error)
|
|
||||||
Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
|
|
||||||
DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
|
|
||||||
Get(ctx context.Context, name string, opts v1.GetOptions) (*proxyproviderv1alpha1.ProxyProvider, error)
|
|
||||||
List(ctx context.Context, opts v1.ListOptions) (*proxyproviderv1alpha1.ProxyProviderList, error)
|
|
||||||
Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
|
|
||||||
Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *proxyproviderv1alpha1.ProxyProvider, err error)
|
|
||||||
Apply(ctx context.Context, proxyProvider *applyconfigurationproxyproviderv1alpha1.ProxyProviderApplyConfiguration, opts v1.ApplyOptions) (result *proxyproviderv1alpha1.ProxyProvider, err error)
|
|
||||||
// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus().
|
|
||||||
ApplyStatus(ctx context.Context, proxyProvider *applyconfigurationproxyproviderv1alpha1.ProxyProviderApplyConfiguration, opts v1.ApplyOptions) (result *proxyproviderv1alpha1.ProxyProvider, err error)
|
|
||||||
ProxyProviderExpansion
|
|
||||||
}
|
|
||||||
|
|
||||||
// proxyProviders implements ProxyProviderInterface
|
|
||||||
type proxyProviders struct {
|
|
||||||
*gentype.ClientWithListAndApply[*proxyproviderv1alpha1.ProxyProvider, *proxyproviderv1alpha1.ProxyProviderList, *applyconfigurationproxyproviderv1alpha1.ProxyProviderApplyConfiguration]
|
|
||||||
}
|
|
||||||
|
|
||||||
// newProxyProviders returns a ProxyProviders
|
|
||||||
func newProxyProviders(c *ProxyproviderV1alpha1Client, namespace string) *proxyProviders {
|
|
||||||
return &proxyProviders{
|
|
||||||
gentype.NewClientWithListAndApply[*proxyproviderv1alpha1.ProxyProvider, *proxyproviderv1alpha1.ProxyProviderList, *applyconfigurationproxyproviderv1alpha1.ProxyProviderApplyConfiguration](
|
|
||||||
"proxyproviders",
|
|
||||||
c.RESTClient(),
|
|
||||||
scheme.ParameterCodec,
|
|
||||||
namespace,
|
|
||||||
func() *proxyproviderv1alpha1.ProxyProvider { return &proxyproviderv1alpha1.ProxyProvider{} },
|
|
||||||
func() *proxyproviderv1alpha1.ProxyProviderList { return &proxyproviderv1alpha1.ProxyProviderList{} },
|
|
||||||
),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by informer-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package application
|
|
||||||
|
|
||||||
import (
|
|
||||||
v1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/application/v1alpha1"
|
|
||||||
internalinterfaces "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/internalinterfaces"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Interface provides access to each of this group's versions.
|
|
||||||
type Interface interface {
|
|
||||||
// V1alpha1 provides access to shared informers for resources in V1alpha1.
|
|
||||||
V1alpha1() v1alpha1.Interface
|
|
||||||
}
|
|
||||||
|
|
||||||
type group struct {
|
|
||||||
factory internalinterfaces.SharedInformerFactory
|
|
||||||
namespace string
|
|
||||||
tweakListOptions internalinterfaces.TweakListOptionsFunc
|
|
||||||
}
|
|
||||||
|
|
||||||
// New returns a new Interface.
|
|
||||||
func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface {
|
|
||||||
return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
|
|
||||||
}
|
|
||||||
|
|
||||||
// V1alpha1 returns a new v1alpha1.Interface.
|
|
||||||
func (g *group) V1alpha1() v1alpha1.Interface {
|
|
||||||
return v1alpha1.New(g.factory, g.namespace, g.tweakListOptions)
|
|
||||||
}
|
|
||||||
@@ -1,116 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by informer-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
context "context"
|
|
||||||
time "time"
|
|
||||||
|
|
||||||
apisapplicationv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1"
|
|
||||||
versioned "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned"
|
|
||||||
internalinterfaces "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/internalinterfaces"
|
|
||||||
applicationv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/listers/application/v1alpha1"
|
|
||||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
|
||||||
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
|
||||||
watch "k8s.io/apimachinery/pkg/watch"
|
|
||||||
cache "k8s.io/client-go/tools/cache"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ApplicationInformer provides access to a shared informer and lister for
|
|
||||||
// Applications.
|
|
||||||
type ApplicationInformer interface {
|
|
||||||
Informer() cache.SharedIndexInformer
|
|
||||||
Lister() applicationv1alpha1.ApplicationLister
|
|
||||||
}
|
|
||||||
|
|
||||||
type applicationInformer struct {
|
|
||||||
factory internalinterfaces.SharedInformerFactory
|
|
||||||
tweakListOptions internalinterfaces.TweakListOptionsFunc
|
|
||||||
namespace string
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewApplicationInformer constructs a new informer for Application type.
|
|
||||||
// Always prefer using an informer factory to get a shared informer instead of getting an independent
|
|
||||||
// one. This reduces memory footprint and number of connections to the server.
|
|
||||||
func NewApplicationInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
|
|
||||||
return NewApplicationInformerWithOptions(client, namespace, internalinterfaces.InformerOptions{ResyncPeriod: resyncPeriod, Indexers: indexers})
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewFilteredApplicationInformer constructs a new informer for Application type.
|
|
||||||
// Always prefer using an informer factory to get a shared informer instead of getting an independent
|
|
||||||
// one. This reduces memory footprint and number of connections to the server.
|
|
||||||
func NewFilteredApplicationInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
|
|
||||||
return NewApplicationInformerWithOptions(client, namespace, internalinterfaces.InformerOptions{ResyncPeriod: resyncPeriod, Indexers: indexers, TweakListOptions: tweakListOptions})
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewApplicationInformerWithOptions constructs a new informer for Application type with additional options.
|
|
||||||
// Always prefer using an informer factory to get a shared informer instead of getting an independent
|
|
||||||
// one. This reduces memory footprint and number of connections to the server.
|
|
||||||
func NewApplicationInformerWithOptions(client versioned.Interface, namespace string, options internalinterfaces.InformerOptions) cache.SharedIndexInformer {
|
|
||||||
gvr := schema.GroupVersionResource{Group: "application.t000-n.de", Version: "v1alpha1", Resource: "applications"}
|
|
||||||
identifier := options.InformerName.WithResource(gvr)
|
|
||||||
tweakListOptions := options.TweakListOptions
|
|
||||||
return cache.NewSharedIndexInformerWithOptions(
|
|
||||||
cache.ToListWatcherWithWatchListSemantics(&cache.ListWatch{
|
|
||||||
ListFunc: func(opts v1.ListOptions) (runtime.Object, error) {
|
|
||||||
if tweakListOptions != nil {
|
|
||||||
tweakListOptions(&opts)
|
|
||||||
}
|
|
||||||
return client.ApplicationV1alpha1().Applications(namespace).List(context.Background(), opts)
|
|
||||||
},
|
|
||||||
WatchFunc: func(opts v1.ListOptions) (watch.Interface, error) {
|
|
||||||
if tweakListOptions != nil {
|
|
||||||
tweakListOptions(&opts)
|
|
||||||
}
|
|
||||||
return client.ApplicationV1alpha1().Applications(namespace).Watch(context.Background(), opts)
|
|
||||||
},
|
|
||||||
ListWithContextFunc: func(ctx context.Context, opts v1.ListOptions) (runtime.Object, error) {
|
|
||||||
if tweakListOptions != nil {
|
|
||||||
tweakListOptions(&opts)
|
|
||||||
}
|
|
||||||
return client.ApplicationV1alpha1().Applications(namespace).List(ctx, opts)
|
|
||||||
},
|
|
||||||
WatchFuncWithContext: func(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
|
|
||||||
if tweakListOptions != nil {
|
|
||||||
tweakListOptions(&opts)
|
|
||||||
}
|
|
||||||
return client.ApplicationV1alpha1().Applications(namespace).Watch(ctx, opts)
|
|
||||||
},
|
|
||||||
}, client),
|
|
||||||
&apisapplicationv1alpha1.Application{},
|
|
||||||
cache.SharedIndexInformerOptions{
|
|
||||||
ResyncPeriod: options.ResyncPeriod,
|
|
||||||
Indexers: options.Indexers,
|
|
||||||
Identifier: identifier,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *applicationInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
|
|
||||||
return NewApplicationInformerWithOptions(client, f.namespace, internalinterfaces.InformerOptions{ResyncPeriod: resyncPeriod, Indexers: cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, InformerName: f.factory.InformerName(), TweakListOptions: f.tweakListOptions})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *applicationInformer) Informer() cache.SharedIndexInformer {
|
|
||||||
return f.factory.InformerFor(&apisapplicationv1alpha1.Application{}, f.defaultInformer)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *applicationInformer) Lister() applicationv1alpha1.ApplicationLister {
|
|
||||||
return applicationv1alpha1.NewApplicationLister(f.Informer().GetIndexer())
|
|
||||||
}
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by informer-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
internalinterfaces "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/internalinterfaces"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Interface provides access to all the informers in this group version.
|
|
||||||
type Interface interface {
|
|
||||||
// Applications returns a ApplicationInformer.
|
|
||||||
Applications() ApplicationInformer
|
|
||||||
}
|
|
||||||
|
|
||||||
type version struct {
|
|
||||||
factory internalinterfaces.SharedInformerFactory
|
|
||||||
namespace string
|
|
||||||
tweakListOptions internalinterfaces.TweakListOptionsFunc
|
|
||||||
}
|
|
||||||
|
|
||||||
// New returns a new Interface.
|
|
||||||
func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface {
|
|
||||||
return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Applications returns a ApplicationInformer.
|
|
||||||
func (v *version) Applications() ApplicationInformer {
|
|
||||||
return &applicationInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
|
|
||||||
}
|
|
||||||
@@ -25,9 +25,7 @@ import (
|
|||||||
time "time"
|
time "time"
|
||||||
|
|
||||||
versioned "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned"
|
versioned "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned"
|
||||||
application "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/application"
|
|
||||||
internalinterfaces "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/internalinterfaces"
|
internalinterfaces "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/internalinterfaces"
|
||||||
policybinding "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/policybinding"
|
|
||||||
proxyprovider "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/proxyprovider"
|
proxyprovider "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/proxyprovider"
|
||||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||||
@@ -327,19 +325,9 @@ type SharedInformerFactory interface {
|
|||||||
// client.
|
// client.
|
||||||
InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer
|
InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer
|
||||||
|
|
||||||
Application() application.Interface
|
|
||||||
PolicyBinding() policybinding.Interface
|
|
||||||
Proxyprovider() proxyprovider.Interface
|
Proxyprovider() proxyprovider.Interface
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *sharedInformerFactory) Application() application.Interface {
|
|
||||||
return application.New(f, f.namespace, f.tweakListOptions)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *sharedInformerFactory) PolicyBinding() policybinding.Interface {
|
|
||||||
return policybinding.New(f, f.namespace, f.tweakListOptions)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *sharedInformerFactory) Proxyprovider() proxyprovider.Interface {
|
func (f *sharedInformerFactory) Proxyprovider() proxyprovider.Interface {
|
||||||
return proxyprovider.New(f, f.namespace, f.tweakListOptions)
|
return proxyprovider.New(f, f.namespace, f.tweakListOptions)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,9 +21,7 @@ package externalversions
|
|||||||
import (
|
import (
|
||||||
fmt "fmt"
|
fmt "fmt"
|
||||||
|
|
||||||
v1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1"
|
v1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1"
|
||||||
policybindingv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1"
|
|
||||||
proxyproviderv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1"
|
|
||||||
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
cache "k8s.io/client-go/tools/cache"
|
cache "k8s.io/client-go/tools/cache"
|
||||||
)
|
)
|
||||||
@@ -54,17 +52,9 @@ func (f *genericInformer) Lister() cache.GenericLister {
|
|||||||
// TODO extend this to unknown resources with a client pool
|
// TODO extend this to unknown resources with a client pool
|
||||||
func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) {
|
func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) {
|
||||||
switch resource {
|
switch resource {
|
||||||
// Group=application.t000-n.de, Version=v1alpha1
|
// Group=proxyprovider.t000-n.de, Version=v1
|
||||||
case v1alpha1.SchemeGroupVersion.WithResource("applications"):
|
case v1.SchemeGroupVersion.WithResource("proxyproviders"):
|
||||||
return &genericInformer{resource: resource.GroupResource(), informer: f.Application().V1alpha1().Applications().Informer()}, nil
|
return &genericInformer{resource: resource.GroupResource(), informer: f.Proxyprovider().V1().ProxyProviders().Informer()}, nil
|
||||||
|
|
||||||
// Group=policybinding.t000-n.de, Version=v1alpha1
|
|
||||||
case policybindingv1alpha1.SchemeGroupVersion.WithResource("policybindings"):
|
|
||||||
return &genericInformer{resource: resource.GroupResource(), informer: f.PolicyBinding().V1alpha1().PolicyBindings().Informer()}, nil
|
|
||||||
|
|
||||||
// Group=proxyprovider.t000-n.de, Version=v1alpha1
|
|
||||||
case proxyproviderv1alpha1.SchemeGroupVersion.WithResource("proxyproviders"):
|
|
||||||
return &genericInformer{resource: resource.GroupResource(), informer: f.Proxyprovider().V1alpha1().ProxyProviders().Informer()}, nil
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,46 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by informer-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package policybinding
|
|
||||||
|
|
||||||
import (
|
|
||||||
internalinterfaces "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/internalinterfaces"
|
|
||||||
v1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/policybinding/v1alpha1"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Interface provides access to each of this group's versions.
|
|
||||||
type Interface interface {
|
|
||||||
// V1alpha1 provides access to shared informers for resources in V1alpha1.
|
|
||||||
V1alpha1() v1alpha1.Interface
|
|
||||||
}
|
|
||||||
|
|
||||||
type group struct {
|
|
||||||
factory internalinterfaces.SharedInformerFactory
|
|
||||||
namespace string
|
|
||||||
tweakListOptions internalinterfaces.TweakListOptionsFunc
|
|
||||||
}
|
|
||||||
|
|
||||||
// New returns a new Interface.
|
|
||||||
func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface {
|
|
||||||
return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
|
|
||||||
}
|
|
||||||
|
|
||||||
// V1alpha1 returns a new v1alpha1.Interface.
|
|
||||||
func (g *group) V1alpha1() v1alpha1.Interface {
|
|
||||||
return v1alpha1.New(g.factory, g.namespace, g.tweakListOptions)
|
|
||||||
}
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by informer-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
internalinterfaces "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/internalinterfaces"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Interface provides access to all the informers in this group version.
|
|
||||||
type Interface interface {
|
|
||||||
// PolicyBindings returns a PolicyBindingInformer.
|
|
||||||
PolicyBindings() PolicyBindingInformer
|
|
||||||
}
|
|
||||||
|
|
||||||
type version struct {
|
|
||||||
factory internalinterfaces.SharedInformerFactory
|
|
||||||
namespace string
|
|
||||||
tweakListOptions internalinterfaces.TweakListOptionsFunc
|
|
||||||
}
|
|
||||||
|
|
||||||
// New returns a new Interface.
|
|
||||||
func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface {
|
|
||||||
return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
|
|
||||||
}
|
|
||||||
|
|
||||||
// PolicyBindings returns a PolicyBindingInformer.
|
|
||||||
func (v *version) PolicyBindings() PolicyBindingInformer {
|
|
||||||
return &policyBindingInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
|
|
||||||
}
|
|
||||||
@@ -1,116 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by informer-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
context "context"
|
|
||||||
time "time"
|
|
||||||
|
|
||||||
apispolicybindingv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1"
|
|
||||||
versioned "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned"
|
|
||||||
internalinterfaces "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/internalinterfaces"
|
|
||||||
policybindingv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/listers/policybinding/v1alpha1"
|
|
||||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
|
||||||
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
|
||||||
watch "k8s.io/apimachinery/pkg/watch"
|
|
||||||
cache "k8s.io/client-go/tools/cache"
|
|
||||||
)
|
|
||||||
|
|
||||||
// PolicyBindingInformer provides access to a shared informer and lister for
|
|
||||||
// PolicyBindings.
|
|
||||||
type PolicyBindingInformer interface {
|
|
||||||
Informer() cache.SharedIndexInformer
|
|
||||||
Lister() policybindingv1alpha1.PolicyBindingLister
|
|
||||||
}
|
|
||||||
|
|
||||||
type policyBindingInformer struct {
|
|
||||||
factory internalinterfaces.SharedInformerFactory
|
|
||||||
tweakListOptions internalinterfaces.TweakListOptionsFunc
|
|
||||||
namespace string
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewPolicyBindingInformer constructs a new informer for PolicyBinding type.
|
|
||||||
// Always prefer using an informer factory to get a shared informer instead of getting an independent
|
|
||||||
// one. This reduces memory footprint and number of connections to the server.
|
|
||||||
func NewPolicyBindingInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
|
|
||||||
return NewPolicyBindingInformerWithOptions(client, namespace, internalinterfaces.InformerOptions{ResyncPeriod: resyncPeriod, Indexers: indexers})
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewFilteredPolicyBindingInformer constructs a new informer for PolicyBinding type.
|
|
||||||
// Always prefer using an informer factory to get a shared informer instead of getting an independent
|
|
||||||
// one. This reduces memory footprint and number of connections to the server.
|
|
||||||
func NewFilteredPolicyBindingInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
|
|
||||||
return NewPolicyBindingInformerWithOptions(client, namespace, internalinterfaces.InformerOptions{ResyncPeriod: resyncPeriod, Indexers: indexers, TweakListOptions: tweakListOptions})
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewPolicyBindingInformerWithOptions constructs a new informer for PolicyBinding type with additional options.
|
|
||||||
// Always prefer using an informer factory to get a shared informer instead of getting an independent
|
|
||||||
// one. This reduces memory footprint and number of connections to the server.
|
|
||||||
func NewPolicyBindingInformerWithOptions(client versioned.Interface, namespace string, options internalinterfaces.InformerOptions) cache.SharedIndexInformer {
|
|
||||||
gvr := schema.GroupVersionResource{Group: "policybinding.t000-n.de", Version: "v1alpha1", Resource: "policybindings"}
|
|
||||||
identifier := options.InformerName.WithResource(gvr)
|
|
||||||
tweakListOptions := options.TweakListOptions
|
|
||||||
return cache.NewSharedIndexInformerWithOptions(
|
|
||||||
cache.ToListWatcherWithWatchListSemantics(&cache.ListWatch{
|
|
||||||
ListFunc: func(opts v1.ListOptions) (runtime.Object, error) {
|
|
||||||
if tweakListOptions != nil {
|
|
||||||
tweakListOptions(&opts)
|
|
||||||
}
|
|
||||||
return client.PolicyBindingV1alpha1().PolicyBindings(namespace).List(context.Background(), opts)
|
|
||||||
},
|
|
||||||
WatchFunc: func(opts v1.ListOptions) (watch.Interface, error) {
|
|
||||||
if tweakListOptions != nil {
|
|
||||||
tweakListOptions(&opts)
|
|
||||||
}
|
|
||||||
return client.PolicyBindingV1alpha1().PolicyBindings(namespace).Watch(context.Background(), opts)
|
|
||||||
},
|
|
||||||
ListWithContextFunc: func(ctx context.Context, opts v1.ListOptions) (runtime.Object, error) {
|
|
||||||
if tweakListOptions != nil {
|
|
||||||
tweakListOptions(&opts)
|
|
||||||
}
|
|
||||||
return client.PolicyBindingV1alpha1().PolicyBindings(namespace).List(ctx, opts)
|
|
||||||
},
|
|
||||||
WatchFuncWithContext: func(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
|
|
||||||
if tweakListOptions != nil {
|
|
||||||
tweakListOptions(&opts)
|
|
||||||
}
|
|
||||||
return client.PolicyBindingV1alpha1().PolicyBindings(namespace).Watch(ctx, opts)
|
|
||||||
},
|
|
||||||
}, client),
|
|
||||||
&apispolicybindingv1alpha1.PolicyBinding{},
|
|
||||||
cache.SharedIndexInformerOptions{
|
|
||||||
ResyncPeriod: options.ResyncPeriod,
|
|
||||||
Indexers: options.Indexers,
|
|
||||||
Identifier: identifier,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *policyBindingInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
|
|
||||||
return NewPolicyBindingInformerWithOptions(client, f.namespace, internalinterfaces.InformerOptions{ResyncPeriod: resyncPeriod, Indexers: cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, InformerName: f.factory.InformerName(), TweakListOptions: f.tweakListOptions})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *policyBindingInformer) Informer() cache.SharedIndexInformer {
|
|
||||||
return f.factory.InformerFor(&apispolicybindingv1alpha1.PolicyBinding{}, f.defaultInformer)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *policyBindingInformer) Lister() policybindingv1alpha1.PolicyBindingLister {
|
|
||||||
return policybindingv1alpha1.NewPolicyBindingLister(f.Informer().GetIndexer())
|
|
||||||
}
|
|
||||||
@@ -20,13 +20,13 @@ package proxyprovider
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
internalinterfaces "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/internalinterfaces"
|
internalinterfaces "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/internalinterfaces"
|
||||||
v1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/proxyprovider/v1alpha1"
|
v1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/proxyprovider/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Interface provides access to each of this group's versions.
|
// Interface provides access to each of this group's versions.
|
||||||
type Interface interface {
|
type Interface interface {
|
||||||
// V1alpha1 provides access to shared informers for resources in V1alpha1.
|
// V1 provides access to shared informers for resources in V1.
|
||||||
V1alpha1() v1alpha1.Interface
|
V1() v1.Interface
|
||||||
}
|
}
|
||||||
|
|
||||||
type group struct {
|
type group struct {
|
||||||
@@ -40,7 +40,7 @@ func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakList
|
|||||||
return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
|
return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
|
||||||
}
|
}
|
||||||
|
|
||||||
// V1alpha1 returns a new v1alpha1.Interface.
|
// V1 returns a new v1.Interface.
|
||||||
func (g *group) V1alpha1() v1alpha1.Interface {
|
func (g *group) V1() v1.Interface {
|
||||||
return v1alpha1.New(g.factory, g.namespace, g.tweakListOptions)
|
return v1.New(g.factory, g.namespace, g.tweakListOptions)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -16,7 +16,7 @@ limitations under the License.
|
|||||||
|
|
||||||
// Code generated by informer-gen. DO NOT EDIT.
|
// Code generated by informer-gen. DO NOT EDIT.
|
||||||
|
|
||||||
package v1alpha1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
internalinterfaces "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/internalinterfaces"
|
internalinterfaces "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/internalinterfaces"
|
||||||
+18
-18
@@ -16,17 +16,17 @@ limitations under the License.
|
|||||||
|
|
||||||
// Code generated by informer-gen. DO NOT EDIT.
|
// Code generated by informer-gen. DO NOT EDIT.
|
||||||
|
|
||||||
package v1alpha1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
context "context"
|
context "context"
|
||||||
time "time"
|
time "time"
|
||||||
|
|
||||||
apisproxyproviderv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1"
|
apisproxyproviderv1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1"
|
||||||
versioned "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned"
|
versioned "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned"
|
||||||
internalinterfaces "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/internalinterfaces"
|
internalinterfaces "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions/internalinterfaces"
|
||||||
proxyproviderv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/listers/proxyprovider/v1alpha1"
|
proxyproviderv1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/listers/proxyprovider/v1"
|
||||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||||
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
watch "k8s.io/apimachinery/pkg/watch"
|
watch "k8s.io/apimachinery/pkg/watch"
|
||||||
@@ -37,7 +37,7 @@ import (
|
|||||||
// ProxyProviders.
|
// ProxyProviders.
|
||||||
type ProxyProviderInformer interface {
|
type ProxyProviderInformer interface {
|
||||||
Informer() cache.SharedIndexInformer
|
Informer() cache.SharedIndexInformer
|
||||||
Lister() proxyproviderv1alpha1.ProxyProviderLister
|
Lister() proxyproviderv1.ProxyProviderLister
|
||||||
}
|
}
|
||||||
|
|
||||||
type proxyProviderInformer struct {
|
type proxyProviderInformer struct {
|
||||||
@@ -64,37 +64,37 @@ func NewFilteredProxyProviderInformer(client versioned.Interface, namespace stri
|
|||||||
// Always prefer using an informer factory to get a shared informer instead of getting an independent
|
// Always prefer using an informer factory to get a shared informer instead of getting an independent
|
||||||
// one. This reduces memory footprint and number of connections to the server.
|
// one. This reduces memory footprint and number of connections to the server.
|
||||||
func NewProxyProviderInformerWithOptions(client versioned.Interface, namespace string, options internalinterfaces.InformerOptions) cache.SharedIndexInformer {
|
func NewProxyProviderInformerWithOptions(client versioned.Interface, namespace string, options internalinterfaces.InformerOptions) cache.SharedIndexInformer {
|
||||||
gvr := schema.GroupVersionResource{Group: "proxyprovider.t000-n.de", Version: "v1alpha1", Resource: "proxyproviders"}
|
gvr := schema.GroupVersionResource{Group: "proxyprovider.t000-n.de", Version: "v1", Resource: "proxyproviders"}
|
||||||
identifier := options.InformerName.WithResource(gvr)
|
identifier := options.InformerName.WithResource(gvr)
|
||||||
tweakListOptions := options.TweakListOptions
|
tweakListOptions := options.TweakListOptions
|
||||||
return cache.NewSharedIndexInformerWithOptions(
|
return cache.NewSharedIndexInformerWithOptions(
|
||||||
cache.ToListWatcherWithWatchListSemantics(&cache.ListWatch{
|
cache.ToListWatcherWithWatchListSemantics(&cache.ListWatch{
|
||||||
ListFunc: func(opts v1.ListOptions) (runtime.Object, error) {
|
ListFunc: func(opts metav1.ListOptions) (runtime.Object, error) {
|
||||||
if tweakListOptions != nil {
|
if tweakListOptions != nil {
|
||||||
tweakListOptions(&opts)
|
tweakListOptions(&opts)
|
||||||
}
|
}
|
||||||
return client.ProxyproviderV1alpha1().ProxyProviders(namespace).List(context.Background(), opts)
|
return client.ProxyproviderV1().ProxyProviders(namespace).List(context.Background(), opts)
|
||||||
},
|
},
|
||||||
WatchFunc: func(opts v1.ListOptions) (watch.Interface, error) {
|
WatchFunc: func(opts metav1.ListOptions) (watch.Interface, error) {
|
||||||
if tweakListOptions != nil {
|
if tweakListOptions != nil {
|
||||||
tweakListOptions(&opts)
|
tweakListOptions(&opts)
|
||||||
}
|
}
|
||||||
return client.ProxyproviderV1alpha1().ProxyProviders(namespace).Watch(context.Background(), opts)
|
return client.ProxyproviderV1().ProxyProviders(namespace).Watch(context.Background(), opts)
|
||||||
},
|
},
|
||||||
ListWithContextFunc: func(ctx context.Context, opts v1.ListOptions) (runtime.Object, error) {
|
ListWithContextFunc: func(ctx context.Context, opts metav1.ListOptions) (runtime.Object, error) {
|
||||||
if tweakListOptions != nil {
|
if tweakListOptions != nil {
|
||||||
tweakListOptions(&opts)
|
tweakListOptions(&opts)
|
||||||
}
|
}
|
||||||
return client.ProxyproviderV1alpha1().ProxyProviders(namespace).List(ctx, opts)
|
return client.ProxyproviderV1().ProxyProviders(namespace).List(ctx, opts)
|
||||||
},
|
},
|
||||||
WatchFuncWithContext: func(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
|
WatchFuncWithContext: func(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) {
|
||||||
if tweakListOptions != nil {
|
if tweakListOptions != nil {
|
||||||
tweakListOptions(&opts)
|
tweakListOptions(&opts)
|
||||||
}
|
}
|
||||||
return client.ProxyproviderV1alpha1().ProxyProviders(namespace).Watch(ctx, opts)
|
return client.ProxyproviderV1().ProxyProviders(namespace).Watch(ctx, opts)
|
||||||
},
|
},
|
||||||
}, client),
|
}, client),
|
||||||
&apisproxyproviderv1alpha1.ProxyProvider{},
|
&apisproxyproviderv1.ProxyProvider{},
|
||||||
cache.SharedIndexInformerOptions{
|
cache.SharedIndexInformerOptions{
|
||||||
ResyncPeriod: options.ResyncPeriod,
|
ResyncPeriod: options.ResyncPeriod,
|
||||||
Indexers: options.Indexers,
|
Indexers: options.Indexers,
|
||||||
@@ -108,9 +108,9 @@ func (f *proxyProviderInformer) defaultInformer(client versioned.Interface, resy
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *proxyProviderInformer) Informer() cache.SharedIndexInformer {
|
func (f *proxyProviderInformer) Informer() cache.SharedIndexInformer {
|
||||||
return f.factory.InformerFor(&apisproxyproviderv1alpha1.ProxyProvider{}, f.defaultInformer)
|
return f.factory.InformerFor(&apisproxyproviderv1.ProxyProvider{}, f.defaultInformer)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *proxyProviderInformer) Lister() proxyproviderv1alpha1.ProxyProviderLister {
|
func (f *proxyProviderInformer) Lister() proxyproviderv1.ProxyProviderLister {
|
||||||
return proxyproviderv1alpha1.NewProxyProviderLister(f.Informer().GetIndexer())
|
return proxyproviderv1.NewProxyProviderLister(f.Informer().GetIndexer())
|
||||||
}
|
}
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by lister-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
applicationv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1"
|
|
||||||
labels "k8s.io/apimachinery/pkg/labels"
|
|
||||||
listers "k8s.io/client-go/listers"
|
|
||||||
cache "k8s.io/client-go/tools/cache"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ApplicationLister helps list Applications.
|
|
||||||
// All objects returned here must be treated as read-only.
|
|
||||||
type ApplicationLister interface {
|
|
||||||
// List lists all Applications in the indexer.
|
|
||||||
// Objects returned here must be treated as read-only.
|
|
||||||
List(selector labels.Selector) (ret []*applicationv1alpha1.Application, err error)
|
|
||||||
// Applications returns an object that can list and get Applications.
|
|
||||||
Applications(namespace string) ApplicationNamespaceLister
|
|
||||||
ApplicationListerExpansion
|
|
||||||
}
|
|
||||||
|
|
||||||
// applicationLister implements the ApplicationLister interface.
|
|
||||||
type applicationLister struct {
|
|
||||||
listers.ResourceIndexer[*applicationv1alpha1.Application]
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewApplicationLister returns a new ApplicationLister.
|
|
||||||
func NewApplicationLister(indexer cache.Indexer) ApplicationLister {
|
|
||||||
return &applicationLister{listers.New[*applicationv1alpha1.Application](indexer, applicationv1alpha1.Resource("application"))}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Applications returns an object that can list and get Applications.
|
|
||||||
func (s *applicationLister) Applications(namespace string) ApplicationNamespaceLister {
|
|
||||||
return applicationNamespaceLister{listers.NewNamespaced[*applicationv1alpha1.Application](s.ResourceIndexer, namespace)}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ApplicationNamespaceLister helps list and get Applications.
|
|
||||||
// All objects returned here must be treated as read-only.
|
|
||||||
type ApplicationNamespaceLister interface {
|
|
||||||
// List lists all Applications in the indexer for a given namespace.
|
|
||||||
// Objects returned here must be treated as read-only.
|
|
||||||
List(selector labels.Selector) (ret []*applicationv1alpha1.Application, err error)
|
|
||||||
// Get retrieves the Application from the indexer for a given namespace and name.
|
|
||||||
// Objects returned here must be treated as read-only.
|
|
||||||
Get(name string) (*applicationv1alpha1.Application, error)
|
|
||||||
ApplicationNamespaceListerExpansion
|
|
||||||
}
|
|
||||||
|
|
||||||
// applicationNamespaceLister implements the ApplicationNamespaceLister
|
|
||||||
// interface.
|
|
||||||
type applicationNamespaceLister struct {
|
|
||||||
listers.ResourceIndexer[*applicationv1alpha1.Application]
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by lister-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
// ApplicationListerExpansion allows custom methods to be added to
|
|
||||||
// ApplicationLister.
|
|
||||||
type ApplicationListerExpansion interface{}
|
|
||||||
|
|
||||||
// ApplicationNamespaceListerExpansion allows custom methods to be added to
|
|
||||||
// ApplicationNamespaceLister.
|
|
||||||
type ApplicationNamespaceListerExpansion interface{}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by lister-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
// PolicyBindingListerExpansion allows custom methods to be added to
|
|
||||||
// PolicyBindingLister.
|
|
||||||
type PolicyBindingListerExpansion interface{}
|
|
||||||
|
|
||||||
// PolicyBindingNamespaceListerExpansion allows custom methods to be added to
|
|
||||||
// PolicyBindingNamespaceLister.
|
|
||||||
type PolicyBindingNamespaceListerExpansion interface{}
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The Kubernetes 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by lister-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
policybindingv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1"
|
|
||||||
labels "k8s.io/apimachinery/pkg/labels"
|
|
||||||
listers "k8s.io/client-go/listers"
|
|
||||||
cache "k8s.io/client-go/tools/cache"
|
|
||||||
)
|
|
||||||
|
|
||||||
// PolicyBindingLister helps list PolicyBindings.
|
|
||||||
// All objects returned here must be treated as read-only.
|
|
||||||
type PolicyBindingLister interface {
|
|
||||||
// List lists all PolicyBindings in the indexer.
|
|
||||||
// Objects returned here must be treated as read-only.
|
|
||||||
List(selector labels.Selector) (ret []*policybindingv1alpha1.PolicyBinding, err error)
|
|
||||||
// PolicyBindings returns an object that can list and get PolicyBindings.
|
|
||||||
PolicyBindings(namespace string) PolicyBindingNamespaceLister
|
|
||||||
PolicyBindingListerExpansion
|
|
||||||
}
|
|
||||||
|
|
||||||
// policyBindingLister implements the PolicyBindingLister interface.
|
|
||||||
type policyBindingLister struct {
|
|
||||||
listers.ResourceIndexer[*policybindingv1alpha1.PolicyBinding]
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewPolicyBindingLister returns a new PolicyBindingLister.
|
|
||||||
func NewPolicyBindingLister(indexer cache.Indexer) PolicyBindingLister {
|
|
||||||
return &policyBindingLister{listers.New[*policybindingv1alpha1.PolicyBinding](indexer, policybindingv1alpha1.Resource("policybinding"))}
|
|
||||||
}
|
|
||||||
|
|
||||||
// PolicyBindings returns an object that can list and get PolicyBindings.
|
|
||||||
func (s *policyBindingLister) PolicyBindings(namespace string) PolicyBindingNamespaceLister {
|
|
||||||
return policyBindingNamespaceLister{listers.NewNamespaced[*policybindingv1alpha1.PolicyBinding](s.ResourceIndexer, namespace)}
|
|
||||||
}
|
|
||||||
|
|
||||||
// PolicyBindingNamespaceLister helps list and get PolicyBindings.
|
|
||||||
// All objects returned here must be treated as read-only.
|
|
||||||
type PolicyBindingNamespaceLister interface {
|
|
||||||
// List lists all PolicyBindings in the indexer for a given namespace.
|
|
||||||
// Objects returned here must be treated as read-only.
|
|
||||||
List(selector labels.Selector) (ret []*policybindingv1alpha1.PolicyBinding, err error)
|
|
||||||
// Get retrieves the PolicyBinding from the indexer for a given namespace and name.
|
|
||||||
// Objects returned here must be treated as read-only.
|
|
||||||
Get(name string) (*policybindingv1alpha1.PolicyBinding, error)
|
|
||||||
PolicyBindingNamespaceListerExpansion
|
|
||||||
}
|
|
||||||
|
|
||||||
// policyBindingNamespaceLister implements the PolicyBindingNamespaceLister
|
|
||||||
// interface.
|
|
||||||
type policyBindingNamespaceLister struct {
|
|
||||||
listers.ResourceIndexer[*policybindingv1alpha1.PolicyBinding]
|
|
||||||
}
|
|
||||||
+1
-1
@@ -16,7 +16,7 @@ limitations under the License.
|
|||||||
|
|
||||||
// Code generated by lister-gen. DO NOT EDIT.
|
// Code generated by lister-gen. DO NOT EDIT.
|
||||||
|
|
||||||
package v1alpha1
|
package v1
|
||||||
|
|
||||||
// ProxyProviderListerExpansion allows custom methods to be added to
|
// ProxyProviderListerExpansion allows custom methods to be added to
|
||||||
// ProxyProviderLister.
|
// ProxyProviderLister.
|
||||||
+9
-9
@@ -16,10 +16,10 @@ limitations under the License.
|
|||||||
|
|
||||||
// Code generated by lister-gen. DO NOT EDIT.
|
// Code generated by lister-gen. DO NOT EDIT.
|
||||||
|
|
||||||
package v1alpha1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
proxyproviderv1alpha1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1"
|
proxyproviderv1 "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1"
|
||||||
labels "k8s.io/apimachinery/pkg/labels"
|
labels "k8s.io/apimachinery/pkg/labels"
|
||||||
listers "k8s.io/client-go/listers"
|
listers "k8s.io/client-go/listers"
|
||||||
cache "k8s.io/client-go/tools/cache"
|
cache "k8s.io/client-go/tools/cache"
|
||||||
@@ -30,7 +30,7 @@ import (
|
|||||||
type ProxyProviderLister interface {
|
type ProxyProviderLister interface {
|
||||||
// List lists all ProxyProviders in the indexer.
|
// List lists all ProxyProviders in the indexer.
|
||||||
// Objects returned here must be treated as read-only.
|
// Objects returned here must be treated as read-only.
|
||||||
List(selector labels.Selector) (ret []*proxyproviderv1alpha1.ProxyProvider, err error)
|
List(selector labels.Selector) (ret []*proxyproviderv1.ProxyProvider, err error)
|
||||||
// ProxyProviders returns an object that can list and get ProxyProviders.
|
// ProxyProviders returns an object that can list and get ProxyProviders.
|
||||||
ProxyProviders(namespace string) ProxyProviderNamespaceLister
|
ProxyProviders(namespace string) ProxyProviderNamespaceLister
|
||||||
ProxyProviderListerExpansion
|
ProxyProviderListerExpansion
|
||||||
@@ -38,17 +38,17 @@ type ProxyProviderLister interface {
|
|||||||
|
|
||||||
// proxyProviderLister implements the ProxyProviderLister interface.
|
// proxyProviderLister implements the ProxyProviderLister interface.
|
||||||
type proxyProviderLister struct {
|
type proxyProviderLister struct {
|
||||||
listers.ResourceIndexer[*proxyproviderv1alpha1.ProxyProvider]
|
listers.ResourceIndexer[*proxyproviderv1.ProxyProvider]
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewProxyProviderLister returns a new ProxyProviderLister.
|
// NewProxyProviderLister returns a new ProxyProviderLister.
|
||||||
func NewProxyProviderLister(indexer cache.Indexer) ProxyProviderLister {
|
func NewProxyProviderLister(indexer cache.Indexer) ProxyProviderLister {
|
||||||
return &proxyProviderLister{listers.New[*proxyproviderv1alpha1.ProxyProvider](indexer, proxyproviderv1alpha1.Resource("proxyprovider"))}
|
return &proxyProviderLister{listers.New[*proxyproviderv1.ProxyProvider](indexer, proxyproviderv1.Resource("proxyprovider"))}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProxyProviders returns an object that can list and get ProxyProviders.
|
// ProxyProviders returns an object that can list and get ProxyProviders.
|
||||||
func (s *proxyProviderLister) ProxyProviders(namespace string) ProxyProviderNamespaceLister {
|
func (s *proxyProviderLister) ProxyProviders(namespace string) ProxyProviderNamespaceLister {
|
||||||
return proxyProviderNamespaceLister{listers.NewNamespaced[*proxyproviderv1alpha1.ProxyProvider](s.ResourceIndexer, namespace)}
|
return proxyProviderNamespaceLister{listers.NewNamespaced[*proxyproviderv1.ProxyProvider](s.ResourceIndexer, namespace)}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProxyProviderNamespaceLister helps list and get ProxyProviders.
|
// ProxyProviderNamespaceLister helps list and get ProxyProviders.
|
||||||
@@ -56,15 +56,15 @@ func (s *proxyProviderLister) ProxyProviders(namespace string) ProxyProviderName
|
|||||||
type ProxyProviderNamespaceLister interface {
|
type ProxyProviderNamespaceLister interface {
|
||||||
// List lists all ProxyProviders in the indexer for a given namespace.
|
// List lists all ProxyProviders in the indexer for a given namespace.
|
||||||
// Objects returned here must be treated as read-only.
|
// Objects returned here must be treated as read-only.
|
||||||
List(selector labels.Selector) (ret []*proxyproviderv1alpha1.ProxyProvider, err error)
|
List(selector labels.Selector) (ret []*proxyproviderv1.ProxyProvider, err error)
|
||||||
// Get retrieves the ProxyProvider from the indexer for a given namespace and name.
|
// Get retrieves the ProxyProvider from the indexer for a given namespace and name.
|
||||||
// Objects returned here must be treated as read-only.
|
// Objects returned here must be treated as read-only.
|
||||||
Get(name string) (*proxyproviderv1alpha1.ProxyProvider, error)
|
Get(name string) (*proxyproviderv1.ProxyProvider, error)
|
||||||
ProxyProviderNamespaceListerExpansion
|
ProxyProviderNamespaceListerExpansion
|
||||||
}
|
}
|
||||||
|
|
||||||
// proxyProviderNamespaceLister implements the ProxyProviderNamespaceLister
|
// proxyProviderNamespaceLister implements the ProxyProviderNamespaceLister
|
||||||
// interface.
|
// interface.
|
||||||
type proxyProviderNamespaceLister struct {
|
type proxyProviderNamespaceLister struct {
|
||||||
listers.ResourceIndexer[*proxyproviderv1alpha1.ProxyProvider]
|
listers.ResourceIndexer[*proxyproviderv1.ProxyProvider]
|
||||||
}
|
}
|
||||||
@@ -32,18 +32,10 @@ import (
|
|||||||
|
|
||||||
func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenAPIDefinition {
|
func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenAPIDefinition {
|
||||||
return map[string]common.OpenAPIDefinition{
|
return map[string]common.OpenAPIDefinition{
|
||||||
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1.Application": schema_pkg_apis_application_v1alpha1_Application(ref),
|
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1.ProxyProvider": schema_pkg_apis_proxyprovider_v1_ProxyProvider(ref),
|
||||||
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1.ApplicationList": schema_pkg_apis_application_v1alpha1_ApplicationList(ref),
|
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1.ProxyProviderList": schema_pkg_apis_proxyprovider_v1_ProxyProviderList(ref),
|
||||||
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1.ApplicationSpec": schema_pkg_apis_application_v1alpha1_ApplicationSpec(ref),
|
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1.ProxyProviderSpec": schema_pkg_apis_proxyprovider_v1_ProxyProviderSpec(ref),
|
||||||
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1.ApplicationStatus": schema_pkg_apis_application_v1alpha1_ApplicationStatus(ref),
|
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1.ProxyProviderStatus": schema_pkg_apis_proxyprovider_v1_ProxyProviderStatus(ref),
|
||||||
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1.PolicyBinding": schema_pkg_apis_policybinding_v1alpha1_PolicyBinding(ref),
|
|
||||||
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1.PolicyBindingList": schema_pkg_apis_policybinding_v1alpha1_PolicyBindingList(ref),
|
|
||||||
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1.PolicyBindingSpec": schema_pkg_apis_policybinding_v1alpha1_PolicyBindingSpec(ref),
|
|
||||||
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1.PolicyBindingStatus": schema_pkg_apis_policybinding_v1alpha1_PolicyBindingStatus(ref),
|
|
||||||
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1.ProxyProvider": schema_pkg_apis_proxyprovider_v1alpha1_ProxyProvider(ref),
|
|
||||||
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1.ProxyProviderList": schema_pkg_apis_proxyprovider_v1alpha1_ProxyProviderList(ref),
|
|
||||||
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1.ProxyProviderSpec": schema_pkg_apis_proxyprovider_v1alpha1_ProxyProviderSpec(ref),
|
|
||||||
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1.ProxyProviderStatus": schema_pkg_apis_proxyprovider_v1alpha1_ProxyProviderStatus(ref),
|
|
||||||
resource.Quantity{}.OpenAPIModelName(): schema_apimachinery_pkg_api_resource_Quantity(ref),
|
resource.Quantity{}.OpenAPIModelName(): schema_apimachinery_pkg_api_resource_Quantity(ref),
|
||||||
v1.APIGroup{}.OpenAPIModelName(): schema_pkg_apis_meta_v1_APIGroup(ref),
|
v1.APIGroup{}.OpenAPIModelName(): schema_pkg_apis_meta_v1_APIGroup(ref),
|
||||||
v1.APIGroupList{}.OpenAPIModelName(): schema_pkg_apis_meta_v1_APIGroupList(ref),
|
v1.APIGroupList{}.OpenAPIModelName(): schema_pkg_apis_meta_v1_APIGroupList(ref),
|
||||||
@@ -102,7 +94,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func schema_pkg_apis_application_v1alpha1_Application(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
func schema_pkg_apis_proxyprovider_v1_ProxyProvider(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||||
return common.OpenAPIDefinition{
|
return common.OpenAPIDefinition{
|
||||||
Schema: spec.Schema{
|
Schema: spec.Schema{
|
||||||
SchemaProps: spec.SchemaProps{
|
SchemaProps: spec.SchemaProps{
|
||||||
@@ -131,13 +123,13 @@ func schema_pkg_apis_application_v1alpha1_Application(ref common.ReferenceCallba
|
|||||||
"spec": {
|
"spec": {
|
||||||
SchemaProps: spec.SchemaProps{
|
SchemaProps: spec.SchemaProps{
|
||||||
Default: map[string]interface{}{},
|
Default: map[string]interface{}{},
|
||||||
Ref: ref("gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1.ApplicationSpec"),
|
Ref: ref("gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1.ProxyProviderSpec"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
SchemaProps: spec.SchemaProps{
|
SchemaProps: spec.SchemaProps{
|
||||||
Default: map[string]interface{}{},
|
Default: map[string]interface{}{},
|
||||||
Ref: ref("gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1.ApplicationStatus"),
|
Ref: ref("gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1.ProxyProviderStatus"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -145,11 +137,11 @@ func schema_pkg_apis_application_v1alpha1_Application(ref common.ReferenceCallba
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
Dependencies: []string{
|
Dependencies: []string{
|
||||||
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1.ApplicationSpec", "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1.ApplicationStatus", v1.ObjectMeta{}.OpenAPIModelName()},
|
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1.ProxyProviderSpec", "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1.ProxyProviderStatus", v1.ObjectMeta{}.OpenAPIModelName()},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func schema_pkg_apis_application_v1alpha1_ApplicationList(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
func schema_pkg_apis_proxyprovider_v1_ProxyProviderList(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||||
return common.OpenAPIDefinition{
|
return common.OpenAPIDefinition{
|
||||||
Schema: spec.Schema{
|
Schema: spec.Schema{
|
||||||
SchemaProps: spec.SchemaProps{
|
SchemaProps: spec.SchemaProps{
|
||||||
@@ -181,7 +173,7 @@ func schema_pkg_apis_application_v1alpha1_ApplicationList(ref common.ReferenceCa
|
|||||||
Items: &spec.SchemaOrArray{
|
Items: &spec.SchemaOrArray{
|
||||||
Schema: &spec.Schema{
|
Schema: &spec.Schema{
|
||||||
SchemaProps: spec.SchemaProps{
|
SchemaProps: spec.SchemaProps{
|
||||||
Ref: ref("gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1.Application"),
|
Ref: ref("gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1.ProxyProvider"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -192,318 +184,11 @@ func schema_pkg_apis_application_v1alpha1_ApplicationList(ref common.ReferenceCa
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
Dependencies: []string{
|
Dependencies: []string{
|
||||||
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/application/v1alpha1.Application", v1.ListMeta{}.OpenAPIModelName()},
|
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1.ProxyProvider", v1.ListMeta{}.OpenAPIModelName()},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func schema_pkg_apis_application_v1alpha1_ApplicationSpec(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
func schema_pkg_apis_proxyprovider_v1_ProxyProviderSpec(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||||
return common.OpenAPIDefinition{
|
|
||||||
Schema: spec.Schema{
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Type: []string{"object"},
|
|
||||||
Properties: map[string]spec.Schema{
|
|
||||||
"name": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Default: "",
|
|
||||||
Type: []string{"string"},
|
|
||||||
Format: "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"slug": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Default: "",
|
|
||||||
Type: []string{"string"},
|
|
||||||
Format: "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"provider": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Type: []string{"integer"},
|
|
||||||
Format: "int32",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Required: []string{"name", "slug"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func schema_pkg_apis_application_v1alpha1_ApplicationStatus(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
|
||||||
return common.OpenAPIDefinition{
|
|
||||||
Schema: spec.Schema{
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Type: []string{"object"},
|
|
||||||
Properties: map[string]spec.Schema{
|
|
||||||
"pk": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Default: "",
|
|
||||||
Type: []string{"string"},
|
|
||||||
Format: "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Required: []string{"pk"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func schema_pkg_apis_policybinding_v1alpha1_PolicyBinding(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
|
||||||
return common.OpenAPIDefinition{
|
|
||||||
Schema: spec.Schema{
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Type: []string{"object"},
|
|
||||||
Properties: map[string]spec.Schema{
|
|
||||||
"kind": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Description: "Kind is a string value representing the REST resource this object represents. 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{"string"},
|
|
||||||
Format: "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"apiVersion": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Description: "APIVersion defines the versioned schema of this representation of an object. 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{"string"},
|
|
||||||
Format: "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"metadata": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Default: map[string]interface{}{},
|
|
||||||
Ref: ref(v1.ObjectMeta{}.OpenAPIModelName()),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"spec": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Default: map[string]interface{}{},
|
|
||||||
Ref: ref("gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1.PolicyBindingSpec"),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"status": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Default: map[string]interface{}{},
|
|
||||||
Ref: ref("gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1.PolicyBindingStatus"),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Required: []string{"spec", "status"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Dependencies: []string{
|
|
||||||
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1.PolicyBindingSpec", "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1.PolicyBindingStatus", v1.ObjectMeta{}.OpenAPIModelName()},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func schema_pkg_apis_policybinding_v1alpha1_PolicyBindingList(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
|
||||||
return common.OpenAPIDefinition{
|
|
||||||
Schema: spec.Schema{
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Type: []string{"object"},
|
|
||||||
Properties: map[string]spec.Schema{
|
|
||||||
"kind": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Description: "Kind is a string value representing the REST resource this object represents. 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{"string"},
|
|
||||||
Format: "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"apiVersion": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Description: "APIVersion defines the versioned schema of this representation of an object. 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{"string"},
|
|
||||||
Format: "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"metadata": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Default: map[string]interface{}{},
|
|
||||||
Ref: ref(v1.ListMeta{}.OpenAPIModelName()),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"items": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Type: []string{"array"},
|
|
||||||
Items: &spec.SchemaOrArray{
|
|
||||||
Schema: &spec.Schema{
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Ref: ref("gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1.PolicyBinding"),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Required: []string{"items"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Dependencies: []string{
|
|
||||||
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/policybinding/v1alpha1.PolicyBinding", v1.ListMeta{}.OpenAPIModelName()},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func schema_pkg_apis_policybinding_v1alpha1_PolicyBindingSpec(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
|
||||||
return common.OpenAPIDefinition{
|
|
||||||
Schema: spec.Schema{
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Type: []string{"object"},
|
|
||||||
Properties: map[string]spec.Schema{
|
|
||||||
"policy": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Type: []string{"string"},
|
|
||||||
Format: "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"group": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Type: []string{"string"},
|
|
||||||
Format: "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"user": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Default: 0,
|
|
||||||
Type: []string{"integer"},
|
|
||||||
Format: "int32",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"target": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Default: "",
|
|
||||||
Type: []string{"string"},
|
|
||||||
Format: "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"order": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Default: 0,
|
|
||||||
Type: []string{"integer"},
|
|
||||||
Format: "int32",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Required: []string{"user", "target", "order"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func schema_pkg_apis_policybinding_v1alpha1_PolicyBindingStatus(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
|
||||||
return common.OpenAPIDefinition{
|
|
||||||
Schema: spec.Schema{
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Type: []string{"object"},
|
|
||||||
Properties: map[string]spec.Schema{
|
|
||||||
"pk": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Default: "",
|
|
||||||
Type: []string{"string"},
|
|
||||||
Format: "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Required: []string{"pk"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func schema_pkg_apis_proxyprovider_v1alpha1_ProxyProvider(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
|
||||||
return common.OpenAPIDefinition{
|
|
||||||
Schema: spec.Schema{
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Type: []string{"object"},
|
|
||||||
Properties: map[string]spec.Schema{
|
|
||||||
"kind": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Description: "Kind is a string value representing the REST resource this object represents. 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{"string"},
|
|
||||||
Format: "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"apiVersion": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Description: "APIVersion defines the versioned schema of this representation of an object. 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{"string"},
|
|
||||||
Format: "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"metadata": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Default: map[string]interface{}{},
|
|
||||||
Ref: ref(v1.ObjectMeta{}.OpenAPIModelName()),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"spec": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Default: map[string]interface{}{},
|
|
||||||
Ref: ref("gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1.ProxyProviderSpec"),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"status": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Default: map[string]interface{}{},
|
|
||||||
Ref: ref("gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1.ProxyProviderStatus"),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Required: []string{"spec", "status"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Dependencies: []string{
|
|
||||||
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1.ProxyProviderSpec", "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1.ProxyProviderStatus", v1.ObjectMeta{}.OpenAPIModelName()},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func schema_pkg_apis_proxyprovider_v1alpha1_ProxyProviderList(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
|
||||||
return common.OpenAPIDefinition{
|
|
||||||
Schema: spec.Schema{
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Type: []string{"object"},
|
|
||||||
Properties: map[string]spec.Schema{
|
|
||||||
"kind": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Description: "Kind is a string value representing the REST resource this object represents. 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{"string"},
|
|
||||||
Format: "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"apiVersion": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Description: "APIVersion defines the versioned schema of this representation of an object. 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{"string"},
|
|
||||||
Format: "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"metadata": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Default: map[string]interface{}{},
|
|
||||||
Ref: ref(v1.ListMeta{}.OpenAPIModelName()),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"items": {
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Type: []string{"array"},
|
|
||||||
Items: &spec.SchemaOrArray{
|
|
||||||
Schema: &spec.Schema{
|
|
||||||
SchemaProps: spec.SchemaProps{
|
|
||||||
Ref: ref("gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1.ProxyProvider"),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Required: []string{"items"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Dependencies: []string{
|
|
||||||
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/apis/proxyprovider/v1alpha1.ProxyProvider", v1.ListMeta{}.OpenAPIModelName()},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func schema_pkg_apis_proxyprovider_v1alpha1_ProxyProviderSpec(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
|
||||||
return common.OpenAPIDefinition{
|
return common.OpenAPIDefinition{
|
||||||
Schema: spec.Schema{
|
Schema: spec.Schema{
|
||||||
SchemaProps: spec.SchemaProps{
|
SchemaProps: spec.SchemaProps{
|
||||||
@@ -544,7 +229,7 @@ func schema_pkg_apis_proxyprovider_v1alpha1_ProxyProviderSpec(ref common.Referen
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func schema_pkg_apis_proxyprovider_v1alpha1_ProxyProviderStatus(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
func schema_pkg_apis_proxyprovider_v1_ProxyProviderStatus(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||||
return common.OpenAPIDefinition{
|
return common.OpenAPIDefinition{
|
||||||
Schema: spec.Schema{
|
Schema: spec.Schema{
|
||||||
SchemaProps: spec.SchemaProps{
|
SchemaProps: spec.SchemaProps{
|
||||||
|
|||||||
Reference in New Issue
Block a user