diff --git a/cmd/bridge/main.go b/cmd/bridge/main.go
index 91df7519816..6342a4c02e9 100644
--- a/cmd/bridge/main.go
+++ b/cmd/bridge/main.go
@@ -21,14 +21,20 @@ import (
authopts "github.com/openshift/console/cmd/bridge/config/auth"
"github.com/openshift/console/cmd/bridge/config/session"
"github.com/openshift/console/pkg/auth"
+ "github.com/openshift/console/pkg/controllers"
"github.com/openshift/console/pkg/flags"
"github.com/openshift/console/pkg/knative"
+ "github.com/openshift/console/pkg/olm"
"github.com/openshift/console/pkg/proxy"
"github.com/openshift/console/pkg/server"
"github.com/openshift/console/pkg/serverconfig"
oscrypto "github.com/openshift/library-go/pkg/crypto"
+ ctrlmetrics "sigs.k8s.io/controller-runtime/pkg/metrics/server"
+
+ kruntime "k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/rest"
klog "k8s.io/klog/v2"
+ ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/log/zap"
)
@@ -577,6 +583,34 @@ func main() {
flags.FatalIfFailed(flags.NewInvalidFlagError("k8s-mode", "must be one of: in-cluster, off-cluster"))
}
+ // Controllers are behind Tech Preview flag
+ if *fTechPreview {
+ controllerManagerMetricsOptions := ctrlmetrics.Options{
+ // Disable the metrics server for now. We can enable it later if we want and make it a configurable flag.
+ BindAddress: "0",
+ }
+ mgr, err := ctrl.NewManager(srv.InternalProxiedK8SClientConfig, ctrl.Options{
+ Scheme: kruntime.NewScheme(),
+ Metrics: controllerManagerMetricsOptions,
+ })
+ if err != nil {
+ klog.Errorf("problem creating controller manager: %v", err)
+ }
+
+ catalogService := olm.NewDummyCatalogService()
+ if err = controllers.NewClusterCatalogReconciler(mgr, catalogService).SetupWithManager(mgr); err != nil {
+ klog.Errorf("failed to start ClusterCatalog reconciler: %v", err)
+ }
+
+ klog.Info("starting manager")
+ mgrContext := ctrl.SetupSignalHandler()
+ go func() {
+ if err := mgr.Start(mgrContext); err != nil {
+ klog.Errorf("problem running manager: %v", err)
+ }
+ }()
+ }
+
apiServerEndpoint := *fK8sPublicEndpoint
if apiServerEndpoint == "" {
apiServerEndpoint = srv.K8sProxyConfig.Endpoint.String()
diff --git a/go.mod b/go.mod
index f5d250503bb..0e5cc269e84 100644
--- a/go.mod
+++ b/go.mod
@@ -20,7 +20,8 @@ require (
github.com/openshift/api v3.9.0+incompatible
github.com/openshift/client-go v0.0.0-20230926161409-848405da69e1
github.com/openshift/library-go v0.0.0-20231020125034-5a2d9fe760b3
- github.com/operator-framework/kubectl-operator v0.6.0
+ github.com/operator-framework/kubectl-operator v0.6.1-0.20250318134414-b496b1036eaf
+ github.com/operator-framework/operator-controller v1.2.0
github.com/operator-framework/operator-lifecycle-manager v0.31.0
github.com/prometheus/client_golang v1.22.0
github.com/prometheus/common v0.63.0
@@ -37,8 +38,9 @@ require (
k8s.io/apimachinery v0.33.2
k8s.io/cli-runtime v0.33.2
k8s.io/client-go v0.33.2
+ k8s.io/klog v1.0.0
k8s.io/klog/v2 v2.130.1
- k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738
+ k8s.io/utils v0.0.0-20241210054802-24370beab758
sigs.k8s.io/controller-runtime v0.20.4
sigs.k8s.io/yaml v1.4.0
)
@@ -52,7 +54,7 @@ require (
github.com/MakeNowJust/heredoc v1.0.0 // indirect
github.com/Masterminds/goutils v1.1.1 // indirect
github.com/Masterminds/semver v1.5.0 // indirect
- github.com/Masterminds/semver/v3 v3.3.0 // indirect
+ github.com/Masterminds/semver/v3 v3.3.1 // indirect
github.com/Masterminds/sprig/v3 v3.3.0 // indirect
github.com/Masterminds/squirrel v1.5.4 // indirect
github.com/Microsoft/go-winio v0.6.2 // indirect
@@ -71,9 +73,9 @@ require (
github.com/cyphar/filepath-securejoin v0.4.1 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/distribution/reference v0.6.0 // indirect
- github.com/docker/cli v27.4.1+incompatible // indirect
+ github.com/docker/cli v27.5.0+incompatible // indirect
github.com/docker/distribution v2.8.3+incompatible // indirect
- github.com/docker/docker v27.3.1+incompatible // indirect
+ github.com/docker/docker v27.5.0+incompatible // indirect
github.com/docker/docker-credential-helpers v0.8.2 // indirect
github.com/docker/go-connections v0.5.0 // indirect
github.com/docker/go-metrics v0.0.1 // indirect
@@ -130,7 +132,7 @@ require (
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect
github.com/lib/pq v1.10.9 // indirect
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect
- github.com/mailru/easyjson v0.7.7 // indirect
+ github.com/mailru/easyjson v0.9.0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.16 // indirect
@@ -152,8 +154,7 @@ require (
github.com/opdev/getocprange v0.0.0-20250225145951-42123ecb365d // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.1 // indirect
- github.com/operator-framework/api v0.29.0 // indirect
- github.com/operator-framework/operator-controller v0.15.0 // indirect
+ github.com/operator-framework/api v0.30.0 // indirect
github.com/operator-framework/operator-registry v1.50.0 // indirect
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
@@ -193,15 +194,16 @@ require (
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/crypto v0.39.0 // indirect
- golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect
+ golang.org/x/exp v0.0.0-20250228200357-dead58393ab7 // indirect
golang.org/x/mod v0.25.0 // indirect
golang.org/x/sync v0.15.0 // indirect
golang.org/x/sys v0.33.0 // indirect
golang.org/x/term v0.32.0 // indirect
golang.org/x/text v0.26.0 // indirect
- golang.org/x/time v0.9.0 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8 // indirect
+ golang.org/x/time v0.10.0 // indirect
+ gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20250227231956-55c901821b1e // indirect
google.golang.org/grpc v1.68.1 // indirect
google.golang.org/protobuf v1.36.5 // indirect
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
@@ -210,13 +212,12 @@ require (
gopkg.in/warnings.v0 v0.1.2 // indirect
k8s.io/apiserver v0.33.2 // indirect
k8s.io/component-base v0.33.2 // indirect
- k8s.io/klog v1.0.0 // indirect
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect
k8s.io/kubectl v0.33.2 // indirect
k8s.io/pod-security-admission v0.31.1 // indirect
oras.land/oras-go v1.2.6 // indirect
oras.land/oras-go/v2 v2.6.0 // indirect
- sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
+ sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
sigs.k8s.io/kustomize/api v0.19.0 // indirect
sigs.k8s.io/kustomize/kyaml v0.19.0 // indirect
sigs.k8s.io/randfill v1.0.0 // indirect
diff --git a/go.sum b/go.sum
index 90b7f216db5..cdd3cb83894 100644
--- a/go.sum
+++ b/go.sum
@@ -18,8 +18,8 @@ github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJ
github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
-github.com/Masterminds/semver/v3 v3.3.0 h1:B8LGeaivUe71a5qox1ICM/JLl0NqZSW5CHyL+hmvYS0=
-github.com/Masterminds/semver/v3 v3.3.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
+github.com/Masterminds/semver/v3 v3.3.1 h1:QtNSWtVZ3nBfk8mAOu/B6v7FMJ+NHTIgUPi7rj+4nv4=
+github.com/Masterminds/semver/v3 v3.3.1/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
github.com/Masterminds/sprig/v3 v3.3.0 h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe3tPhs=
github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0=
github.com/Masterminds/squirrel v1.5.4 h1:uUcX/aBc8O7Fg9kaISIUsHXdKuqehiXAMQTYX8afzqM=
@@ -83,14 +83,14 @@ github.com/containerd/typeurl/v2 v2.2.0 h1:6NBDbQzr7I5LHgp34xAXYF5DOTQDn05X58lsP
github.com/containerd/typeurl/v2 v2.2.0/go.mod h1:8XOOxnyatxSWuG8OfsZXVnAF4iZfedjS/8UHSPJnX4g=
github.com/containers/common v0.61.0 h1:j/84PTqZIKKYy42OEJsZmjZ4g4Kq2ERuC3tqp2yWdh4=
github.com/containers/common v0.61.0/go.mod h1:NGRISq2vTFPSbhNqj6MLwyes4tWSlCnqbJg7R77B8xc=
-github.com/containers/image/v5 v5.33.0 h1:6oPEFwTurf7pDTGw7TghqGs8K0+OvPtY/UyzU0B2DfE=
-github.com/containers/image/v5 v5.33.0/go.mod h1:T7HpASmvnp2H1u4cyckMvCzLuYgpD18dSmabSw0AcHk=
+github.com/containers/image/v5 v5.33.1 h1:nTWKwxAlY0aJrilvvhssqssJVnley6VqxkLiLzTEYIs=
+github.com/containers/image/v5 v5.33.1/go.mod h1:/FJiLlvVbeBxWNMPVPPIWJxHTAzwBoFvyN0a51zo1CE=
github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01 h1:Qzk5C6cYglewc+UyGf6lc8Mj2UaPTHy/iF2De0/77CA=
github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01/go.mod h1:9rfv8iPl1ZP7aqh9YA68wnZv2NUDbXdcdPHVz0pFbPY=
github.com/containers/ocicrypt v1.2.0 h1:X14EgRK3xNFvJEfI5O4Qn4T3E25ANudSOZz/sirVuPM=
github.com/containers/ocicrypt v1.2.0/go.mod h1:ZNviigQajtdlxIZGibvblVuIFBKIuUI2M0QM12SD31U=
-github.com/containers/storage v1.56.0 h1:DZ9KSkj6M2tvj/4bBoaJu3QDHRl35BwsZ4kmLJS97ZI=
-github.com/containers/storage v1.56.0/go.mod h1:c6WKowcAlED/DkWGNuL9bvGYqIWCVy7isRMdCSKWNjk=
+github.com/containers/storage v1.56.1 h1:gDZj/S6Zxus4Xx42X6iNB3ODXuh0qoOdH/BABfrvcKo=
+github.com/containers/storage v1.56.1/go.mod h1:c6WKowcAlED/DkWGNuL9bvGYqIWCVy7isRMdCSKWNjk=
github.com/coreos/go-oidc v2.3.0+incompatible h1:+5vEsrgprdLjjQ9FzIKAzQz1wwPD+83hQRfUIPh7rO0=
github.com/coreos/go-oidc v2.3.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
@@ -120,12 +120,12 @@ github.com/distribution/distribution/v3 v3.0.0 h1:q4R8wemdRQDClzoNNStftB2ZAfqOiN
github.com/distribution/distribution/v3 v3.0.0/go.mod h1:tRNuFoZsUdyRVegq8xGNeds4KLjwLCRin/tTo6i1DhU=
github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
-github.com/docker/cli v27.4.1+incompatible h1:VzPiUlRJ/xh+otB75gva3r05isHMo5wXDfPRi5/b4hI=
-github.com/docker/cli v27.4.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
+github.com/docker/cli v27.5.0+incompatible h1:aMphQkcGtpHixwwhAXJT1rrK/detk2JIvDaFkLctbGM=
+github.com/docker/cli v27.5.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=
github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v27.3.1+incompatible h1:KttF0XoteNTicmUtBO0L2tP+J7FGRFTjaEF4k6WdhfI=
-github.com/docker/docker v27.3.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/docker v27.5.0+incompatible h1:um++2NcQtGRTz5eEgO6aJimo6/JxrTXC941hd05JO6U=
+github.com/docker/docker v27.5.0+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo=
github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M=
github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
@@ -321,8 +321,8 @@ github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0=
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE=
-github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
-github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
+github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4=
+github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
@@ -401,12 +401,12 @@ github.com/openshift/client-go v0.0.0-20230926161409-848405da69e1/go.mod h1:ihUJ
github.com/openshift/library-go v0.0.0-20231020125034-5a2d9fe760b3 h1:RmbS0Ea69/ejW0HqUoUjO72EfNc/biuVDjODEDl/EnE=
github.com/openshift/library-go v0.0.0-20231020125034-5a2d9fe760b3/go.mod h1:8UzmrBMCn7+GzouL8DVYkL9COBQTB1Ggd13/mHJQCUg=
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
-github.com/operator-framework/api v0.29.0 h1:TxAR8RCO+I4FjRrY4PSMgnlmbxNWeD8pzHXp7xwHNmw=
-github.com/operator-framework/api v0.29.0/go.mod h1:0whQE4mpMDd2zyHkQe+bFa3DLoRs6oGWCbu8dY/3pyc=
-github.com/operator-framework/kubectl-operator v0.6.0 h1:3RYtYpN8HQgdmzli1pQJ0lPAM35cn83+kL6JrOLuJ9M=
-github.com/operator-framework/kubectl-operator v0.6.0/go.mod h1:38D1o3twwkbLCNYmBLx03se7n5YkoGo/F/aRZSuuveg=
-github.com/operator-framework/operator-controller v0.15.0 h1:qSmdFKbJWQs/CyZ8pBA5YDMbid2wP3XJKBzMOvu/ezQ=
-github.com/operator-framework/operator-controller v0.15.0/go.mod h1:6U2jhRr+T/d1K6nQR3SbIGB0rvDS7zAIAfSDn/hJLSY=
+github.com/operator-framework/api v0.30.0 h1:44hCmGnEnZk/Miol5o44dhSldNH0EToQUG7vZTl29kk=
+github.com/operator-framework/api v0.30.0/go.mod h1:FYxAPhjtlXSAty/fbn5YJnFagt6SpJZJgFNNbvDe5W0=
+github.com/operator-framework/kubectl-operator v0.6.1-0.20250318134414-b496b1036eaf h1:TsqL/iEVSwf2IUx3wDqD664pYC6vYR9/d/gfVO4cgH8=
+github.com/operator-framework/kubectl-operator v0.6.1-0.20250318134414-b496b1036eaf/go.mod h1:GwG7QX2Qu8QD2FV0vLkZ0oN0m2YrLyVqFS10OtwA08Y=
+github.com/operator-framework/operator-controller v1.2.0 h1:5fn41pZuJ41jHUwWSts8igDN/IXILeLyqRKnMpN4S8I=
+github.com/operator-framework/operator-controller v1.2.0/go.mod h1:lDudFGy4YtcMFcUDYLet3mUA/Wzq6pTVrLTBWOZLp/Q=
github.com/operator-framework/operator-lifecycle-manager v0.31.0 h1:E4J0FcMibI4qm7XhseYQcsAa/nqFMrWFQVB+FwPcztE=
github.com/operator-framework/operator-lifecycle-manager v0.31.0/go.mod h1:/BkoD/anOQ3BO77U6SVJkUsjHb0WRANHSTYeYXj9Z/8=
github.com/operator-framework/operator-registry v1.50.0 h1:kMAwsKAEDjuSx5dGchMX+CD3SMHWwOAC/xyK3LQweB4=
@@ -595,8 +595,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM=
golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U=
-golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY=
-golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8=
+golang.org/x/exp v0.0.0-20250228200357-dead58393ab7 h1:aWwlzYV971S4BXRS9AmqwDLAD85ouC6X+pocatKY58c=
+golang.org/x/exp v0.0.0-20250228200357-dead58393ab7/go.mod h1:BHOTPb3L19zxehTsLoJXVaTktb06DFgmdW6Wb9s8jqk=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
@@ -649,8 +649,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
-golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
-golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/time v0.10.0 h1:3usCWA8tQn0L8+hFJQNgzpWbd89begxN66o1Ojdn5L4=
+golang.org/x/time v0.10.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
@@ -662,12 +662,14 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw=
+gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY=
google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 h1:ToEetK57OidYuqD4Q5w+vfEnPvPpuTwedCNVohYJfNk=
google.golang.org/genproto v0.0.0-20241118233622-e639e219e697/go.mod h1:JJrvXBWRZaFMxBufik1a4RpFw4HhgVtBBWQeQgUj2cc=
-google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 h1:CkkIfIt50+lT6NHAVoRYEyAvQGFM7xEwXUUywFvEb3Q=
-google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576/go.mod h1:1R3kvZ1dtP3+4p4d3G8uJ8rFk/fWlScl38vanWACI08=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8 h1:TqExAhdPaB60Ux47Cn0oLV07rGnxZzIsaRhQaqS666A=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8/go.mod h1:lcTa1sDdWEIHMWlITnIczmw5w60CF9ffkb8Z+DVmmjA=
+google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
+google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250227231956-55c901821b1e h1:YA5lmSs3zc/5w+xsRcHqpETkaYyK63ivEPzNTcUUlSA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250227231956-55c901821b1e/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I=
google.golang.org/grpc v1.68.1 h1:oI5oTa11+ng8r8XMMN7jAOmWfPZWbYpCFaMUTACxkM0=
google.golang.org/grpc v1.68.1/go.mod h1:+q1XYFJjShcqn0QZHvCyeR4CXPA+llXIeUIfIe00waw=
google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM=
@@ -722,8 +724,8 @@ k8s.io/kubectl v0.33.2 h1:7XKZ6DYCklu5MZQzJe+CkCjoGZwD1wWl7t/FxzhMz7Y=
k8s.io/kubectl v0.33.2/go.mod h1:8rC67FB8tVTYraovAGNi/idWIK90z2CHFNMmGJZJ3KI=
k8s.io/pod-security-admission v0.31.1 h1:j++ISpfQU0mWpKhoS4tY06Wm5EKdn65teL4lPJhEMIM=
k8s.io/pod-security-admission v0.31.1/go.mod h1:0aE5T6MGm/50Nr/diBrC6+wwpxsT2E7NECe+TepUuEg=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0=
+k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
oras.land/oras-go v1.2.6 h1:z8cmxQXBU8yZ4mkytWqXfo6tZcamPwjsuxYU81xJ8Lk=
oras.land/oras-go v1.2.6/go.mod h1:OVPc1PegSEe/K8YiLfosrlqlqTN9PUyFvOw5Y9gwrT8=
oras.land/oras-go/v2 v2.6.0 h1:X4ELRsiGkrbeox69+9tzTu492FMUu7zJQW6eJU+I2oc=
@@ -732,8 +734,8 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2 h1:jpcvIRr3GLoUo
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw=
sigs.k8s.io/controller-runtime v0.20.4 h1:X3c+Odnxz+iPTRobG4tp092+CvBU9UK0t/bRf+n0DGU=
sigs.k8s.io/controller-runtime v0.20.4/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
+sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE=
+sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
sigs.k8s.io/kustomize/api v0.19.0 h1:F+2HB2mU1MSiR9Hp1NEgoU2q9ItNOaBJl0I4Dlus5SQ=
sigs.k8s.io/kustomize/api v0.19.0/go.mod h1:/BbwnivGVcBh1r+8m3tH1VNxJmHSk1PzP5fkP6lbL1o=
sigs.k8s.io/kustomize/kyaml v0.19.0 h1:RFge5qsO1uHhwJsu3ipV7RNolC7Uozc0jUBC/61XSlA=
diff --git a/pkg/controllers/clustercatalog_controller.go b/pkg/controllers/clustercatalog_controller.go
new file mode 100644
index 00000000000..76d00152cb8
--- /dev/null
+++ b/pkg/controllers/clustercatalog_controller.go
@@ -0,0 +1,86 @@
+package controllers
+
+import (
+ "context"
+
+ "github.com/openshift/console/pkg/olm"
+ ocv1 "github.com/operator-framework/operator-controller/api/v1"
+ apierrors "k8s.io/apimachinery/pkg/api/errors"
+ "k8s.io/apimachinery/pkg/runtime"
+ utilruntime "k8s.io/apimachinery/pkg/util/runtime"
+ "k8s.io/klog"
+ ctrl "sigs.k8s.io/controller-runtime"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/reconcile"
+)
+
+// ClusterCatalogReconciler reconciles ClusterCatalog resources
+type ClusterCatalogReconciler struct {
+ client.Client
+ Scheme *runtime.Scheme
+ catalogService olm.CatalogService
+}
+
+// NewClusterCatalogReconciler creates a new ClusterCatalogReconciler
+func NewClusterCatalogReconciler(mgr ctrl.Manager, cs olm.CatalogService) *ClusterCatalogReconciler {
+ return &ClusterCatalogReconciler{
+ Client: mgr.GetClient(),
+ Scheme: mgr.GetScheme(),
+ catalogService: cs,
+ }
+}
+
+// Reconcile implements the reconcile.Reconciler interface
+func (r *ClusterCatalogReconciler) Reconcile(ctx context.Context, req reconcile.Request) (reconcile.Result, error) {
+ klog.Infof("Starting reconciliation for ClusterCatalog %s", req.Name)
+ defer klog.Infof("Ending reconciliation for ClusterCatalog %s", req.Name)
+
+ clusterCatalog := &ocv1.ClusterCatalog{}
+
+ err := r.Get(ctx, req.NamespacedName, clusterCatalog)
+ if err != nil {
+ if apierrors.IsNotFound(err) {
+ // The ClusterCatalog has been deleted, delete its CatalogItems from the cache
+ klog.Infof("Removing CatalogItems for ClusterCatalog %s from cache", req.Name)
+ err = r.catalogService.RemoveCatalog(req.Name)
+ if err != nil {
+ return ctrl.Result{}, err
+ }
+ return ctrl.Result{}, nil
+ }
+ return ctrl.Result{}, err
+ }
+
+ // The ClusterCatalog has been found on the cluster, attempt to add to or update cache
+ if clusterCatalog.Status.URLs == nil {
+ klog.Infof("ClusterCatalog %s URLs field is empty", req.Name)
+ return ctrl.Result{}, nil
+ }
+
+ baseURL := clusterCatalog.Status.URLs.Base
+
+ if baseURL == "" {
+ klog.Infof("ClusterCatalog %s Base URL is empty", req.Name)
+ return ctrl.Result{}, nil
+ }
+
+ err = r.catalogService.UpdateCatalog(req.Name, baseURL)
+ if err != nil {
+ return ctrl.Result{}, err
+ }
+
+ return ctrl.Result{}, nil
+}
+
+// SetupWithManager sets up the controller with the Manager
+func (r *ClusterCatalogReconciler) SetupWithManager(mgr ctrl.Manager) error {
+ utilruntime.Must(ocv1.AddToScheme(mgr.GetScheme()))
+
+ clusterCatalog := &ocv1.ClusterCatalog{}
+
+ _, err := ctrl.NewControllerManagedBy(mgr).
+ For(clusterCatalog).
+ Build(r)
+
+ return err
+}
diff --git a/pkg/controllers/clustercatalog_controller_test.go b/pkg/controllers/clustercatalog_controller_test.go
new file mode 100644
index 00000000000..185a4df231a
--- /dev/null
+++ b/pkg/controllers/clustercatalog_controller_test.go
@@ -0,0 +1,200 @@
+package controllers
+
+import (
+ "context"
+ "errors"
+ "testing"
+
+ ocv1 "github.com/operator-framework/operator-controller/api/v1"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/types"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/client/fake"
+ "sigs.k8s.io/controller-runtime/pkg/reconcile"
+)
+
+type mockCatalogService struct {
+ updateCatalogCalled bool
+ removeCatalogCalled bool
+ updateError error
+ removeError error
+ lastCatalogName string
+ lastBaseURL string
+}
+
+const testCatalogName = "test-catalog"
+
+func (m *mockCatalogService) UpdateCatalog(catalogName string, baseURL string) error {
+ m.updateCatalogCalled = true
+ m.lastCatalogName = catalogName
+ m.lastBaseURL = baseURL
+ return m.updateError
+}
+
+func (m *mockCatalogService) RemoveCatalog(catalogName string) error {
+ m.removeCatalogCalled = true
+ m.lastCatalogName = catalogName
+ return m.removeError
+}
+
+func createTestReconciler(objects ...client.Object) (*ClusterCatalogReconciler, *mockCatalogService) {
+ scheme := runtime.NewScheme()
+ _ = ocv1.AddToScheme(scheme)
+
+ fakeClient := fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build()
+ mockService := &mockCatalogService{}
+
+ return &ClusterCatalogReconciler{
+ Client: fakeClient,
+ Scheme: scheme,
+ catalogService: mockService,
+ }, mockService
+}
+
+func TestReconcileClusterCatalogNotFound(t *testing.T) {
+ reconciler, mockService := createTestReconciler()
+
+ req := reconcile.Request{
+ NamespacedName: types.NamespacedName{
+ Name: testCatalogName,
+ },
+ }
+
+ result, err := reconciler.Reconcile(context.Background(), req)
+
+ require.NoError(t, err)
+ assert.Equal(t, reconcile.Result{}, result)
+ assert.True(t, mockService.removeCatalogCalled)
+ assert.Equal(t, testCatalogName, mockService.lastCatalogName)
+}
+
+func TestReconcileClusterCatalogNoURLs(t *testing.T) {
+ clusterCatalog := &ocv1.ClusterCatalog{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: testCatalogName,
+ },
+ Status: ocv1.ClusterCatalogStatus{
+ URLs: nil,
+ },
+ }
+
+ reconciler, mockService := createTestReconciler(clusterCatalog)
+
+ req := reconcile.Request{
+ NamespacedName: types.NamespacedName{
+ Name: testCatalogName,
+ },
+ }
+
+ result, err := reconciler.Reconcile(context.Background(), req)
+
+ require.NoError(t, err)
+ assert.Equal(t, reconcile.Result{}, result)
+ assert.False(t, mockService.updateCatalogCalled)
+ assert.False(t, mockService.removeCatalogCalled)
+}
+
+func TestReconcileClusterCatalogEmptyBaseURL(t *testing.T) {
+ clusterCatalog := &ocv1.ClusterCatalog{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: testCatalogName,
+ },
+ Status: ocv1.ClusterCatalogStatus{
+ URLs: &ocv1.ClusterCatalogURLs{
+ Base: "",
+ },
+ },
+ }
+
+ reconciler, mockService := createTestReconciler(clusterCatalog)
+
+ req := reconcile.Request{
+ NamespacedName: types.NamespacedName{
+ Name: testCatalogName,
+ },
+ }
+
+ result, err := reconciler.Reconcile(context.Background(), req)
+
+ require.NoError(t, err)
+ assert.Equal(t, reconcile.Result{}, result)
+ assert.False(t, mockService.updateCatalogCalled)
+ assert.False(t, mockService.removeCatalogCalled)
+}
+
+func TestReconcileClusterCatalogSuccess(t *testing.T) {
+ clusterCatalog := &ocv1.ClusterCatalog{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: testCatalogName,
+ },
+ Status: ocv1.ClusterCatalogStatus{
+ URLs: &ocv1.ClusterCatalogURLs{
+ Base: "https://example.com/catalog",
+ },
+ },
+ }
+
+ reconciler, mockService := createTestReconciler(clusterCatalog)
+
+ req := reconcile.Request{
+ NamespacedName: types.NamespacedName{
+ Name: testCatalogName,
+ },
+ }
+
+ result, err := reconciler.Reconcile(context.Background(), req)
+
+ require.NoError(t, err)
+ assert.Equal(t, reconcile.Result{}, result)
+ assert.True(t, mockService.updateCatalogCalled)
+ assert.Equal(t, testCatalogName, mockService.lastCatalogName)
+ assert.Equal(t, "https://example.com/catalog", mockService.lastBaseURL)
+}
+
+func TestReconcileUpdateCatalogError(t *testing.T) {
+ clusterCatalog := &ocv1.ClusterCatalog{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: testCatalogName,
+ },
+ Status: ocv1.ClusterCatalogStatus{
+ URLs: &ocv1.ClusterCatalogURLs{
+ Base: "https://example.com/catalog",
+ },
+ },
+ }
+
+ reconciler, mockService := createTestReconciler(clusterCatalog)
+ mockService.updateError = errors.New("mock update failed")
+
+ req := reconcile.Request{
+ NamespacedName: types.NamespacedName{
+ Name: testCatalogName,
+ },
+ }
+
+ result, err := reconciler.Reconcile(context.Background(), req)
+
+ require.Error(t, err)
+ assert.Equal(t, reconcile.Result{}, result)
+ assert.True(t, mockService.updateCatalogCalled)
+}
+
+func TestReconcileRemoveCatalogError(t *testing.T) {
+ reconciler, mockService := createTestReconciler()
+ mockService.removeError = errors.New("mock remove failed")
+
+ req := reconcile.Request{
+ NamespacedName: types.NamespacedName{
+ Name: testCatalogName,
+ },
+ }
+
+ result, err := reconciler.Reconcile(context.Background(), req)
+
+ require.Error(t, err)
+ assert.Equal(t, reconcile.Result{}, result)
+ assert.True(t, mockService.removeCatalogCalled)
+}
diff --git a/pkg/olm/service.go b/pkg/olm/service.go
new file mode 100644
index 00000000000..b5f6f74a435
--- /dev/null
+++ b/pkg/olm/service.go
@@ -0,0 +1,22 @@
+package olm
+
+type CatalogService interface {
+ UpdateCatalog(string, string) error
+ RemoveCatalog(string) error
+}
+
+type DummyCatalogService struct{}
+
+func NewDummyCatalogService() *DummyCatalogService {
+ return &DummyCatalogService{}
+}
+
+func (d *DummyCatalogService) UpdateCatalog(catalog string, baseURL string) error {
+ // TODO
+ return nil
+}
+
+func (d *DummyCatalogService) RemoveCatalog(catalog string) error {
+ // TODO
+ return nil
+}
diff --git a/vendor/github.com/Masterminds/semver/v3/version.go b/vendor/github.com/Masterminds/semver/v3/version.go
index ff499fb6640..304edc3422e 100644
--- a/vendor/github.com/Masterminds/semver/v3/version.go
+++ b/vendor/github.com/Masterminds/semver/v3/version.go
@@ -39,9 +39,11 @@ var (
)
// semVerRegex is the regular expression used to parse a semantic version.
-const semVerRegex string = `v?([0-9]+)(\.[0-9]+)?(\.[0-9]+)?` +
- `(-([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` +
- `(\+([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?`
+// This is not the official regex from the semver spec. It has been modified to allow for loose handling
+// where versions like 2.1 are detected.
+const semVerRegex string = `v?(0|[1-9]\d*)(?:\.(0|[1-9]\d*))?(?:\.(0|[1-9]\d*))?` +
+ `(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?` +
+ `(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?`
// Version represents a single semantic version.
type Version struct {
@@ -146,8 +148,8 @@ func NewVersion(v string) (*Version, error) {
}
sv := &Version{
- metadata: m[8],
- pre: m[5],
+ metadata: m[5],
+ pre: m[4],
original: v,
}
@@ -158,7 +160,7 @@ func NewVersion(v string) (*Version, error) {
}
if m[2] != "" {
- sv.minor, err = strconv.ParseUint(strings.TrimPrefix(m[2], "."), 10, 64)
+ sv.minor, err = strconv.ParseUint(m[2], 10, 64)
if err != nil {
return nil, fmt.Errorf("Error parsing version segment: %s", err)
}
@@ -167,7 +169,7 @@ func NewVersion(v string) (*Version, error) {
}
if m[3] != "" {
- sv.patch, err = strconv.ParseUint(strings.TrimPrefix(m[3], "."), 10, 64)
+ sv.patch, err = strconv.ParseUint(m[3], 10, 64)
if err != nil {
return nil, fmt.Errorf("Error parsing version segment: %s", err)
}
@@ -612,7 +614,9 @@ func containsOnly(s string, comp string) bool {
func validatePrerelease(p string) error {
eparts := strings.Split(p, ".")
for _, p := range eparts {
- if containsOnly(p, num) {
+ if p == "" {
+ return ErrInvalidMetadata
+ } else if containsOnly(p, num) {
if len(p) > 1 && p[0] == '0' {
return ErrSegmentStartsZero
}
@@ -631,7 +635,9 @@ func validatePrerelease(p string) error {
func validateMetadata(m string) error {
eparts := strings.Split(m, ".")
for _, p := range eparts {
- if !containsOnly(p, allowed) {
+ if p == "" {
+ return ErrInvalidMetadata
+ } else if !containsOnly(p, allowed) {
return ErrInvalidMetadata
}
}
diff --git a/vendor/github.com/docker/docker/pkg/ioutils/bytespipe.go b/vendor/github.com/docker/docker/pkg/ioutils/bytespipe.go
index c1cfa62fd27..85450bf6b3e 100644
--- a/vendor/github.com/docker/docker/pkg/ioutils/bytespipe.go
+++ b/vendor/github.com/docker/docker/pkg/ioutils/bytespipe.go
@@ -18,6 +18,8 @@ const blockThreshold = 1e6
var (
// ErrClosed is returned when Write is called on a closed BytesPipe.
+ //
+ // Deprecated: this type is only used internally, and will be removed in the next release.
ErrClosed = errors.New("write to closed BytesPipe")
bufPools = make(map[int]*sync.Pool)
@@ -28,6 +30,8 @@ var (
// All written data may be read at most once. Also, BytesPipe allocates
// and releases new byte slices to adjust to current needs, so the buffer
// won't be overgrown after peak loads.
+//
+// Deprecated: this type is only used internally, and will be removed in the next release.
type BytesPipe struct {
mu sync.Mutex
wait *sync.Cond
@@ -40,6 +44,8 @@ type BytesPipe struct {
// NewBytesPipe creates new BytesPipe, initialized by specified slice.
// If buf is nil, then it will be initialized with slice which cap is 64.
// buf will be adjusted in a way that len(buf) == 0, cap(buf) == cap(buf).
+//
+// Deprecated: this function is only used internally, and will be removed in the next release.
func NewBytesPipe() *BytesPipe {
bp := &BytesPipe{}
bp.buf = append(bp.buf, getBuffer(minCap))
diff --git a/vendor/github.com/docker/docker/pkg/ioutils/writeflusher.go b/vendor/github.com/docker/docker/pkg/ioutils/writeflusher.go
index 91b8d182662..d8a8893ff1c 100644
--- a/vendor/github.com/docker/docker/pkg/ioutils/writeflusher.go
+++ b/vendor/github.com/docker/docker/pkg/ioutils/writeflusher.go
@@ -80,13 +80,19 @@ func (wf *WriteFlusher) Close() error {
return nil
}
+// nopFlusher represents a type which flush operation is nop.
+type nopFlusher struct{}
+
+// Flush is a nop operation.
+func (f *nopFlusher) Flush() {}
+
// NewWriteFlusher returns a new WriteFlusher.
func NewWriteFlusher(w io.Writer) *WriteFlusher {
var fl flusher
if f, ok := w.(flusher); ok {
fl = f
} else {
- fl = &NopFlusher{}
+ fl = &nopFlusher{}
}
return &WriteFlusher{w: w, flusher: fl, closed: make(chan struct{}), flushed: make(chan struct{})}
}
diff --git a/vendor/github.com/docker/docker/pkg/ioutils/writers.go b/vendor/github.com/docker/docker/pkg/ioutils/writers.go
index 1f50602f28c..aec8b4c03e5 100644
--- a/vendor/github.com/docker/docker/pkg/ioutils/writers.go
+++ b/vendor/github.com/docker/docker/pkg/ioutils/writers.go
@@ -6,6 +6,8 @@ import (
)
// NopWriter represents a type which write operation is nop.
+//
+// Deprecated: use [io.Discard] instead. This type will be removed in the next release.
type NopWriter struct{}
func (*NopWriter) Write(buf []byte) (int, error) {
@@ -19,15 +21,16 @@ type nopWriteCloser struct {
func (w *nopWriteCloser) Close() error { return nil }
// NopWriteCloser returns a nopWriteCloser.
+//
+// Deprecated: This function is no longer used and will be removed in the next release.
func NopWriteCloser(w io.Writer) io.WriteCloser {
return &nopWriteCloser{w}
}
// NopFlusher represents a type which flush operation is nop.
-type NopFlusher struct{}
-
-// Flush is a nop operation.
-func (f *NopFlusher) Flush() {}
+//
+// Deprecated: NopFlusher is only used internally and will be removed in the next release.
+type NopFlusher = nopFlusher
type writeCloserWrapper struct {
io.Writer
@@ -55,12 +58,16 @@ func NewWriteCloserWrapper(r io.Writer, closer func() error) io.WriteCloser {
// of bytes written to the writer during a "session".
// This can be convenient when write return is masked
// (e.g., json.Encoder.Encode())
+//
+// Deprecated: this type is no longer used and will be removed in the next release.
type WriteCounter struct {
Count int64
Writer io.Writer
}
// NewWriteCounter returns a new WriteCounter.
+//
+// Deprecated: this function is no longer used and will be removed in the next release.
func NewWriteCounter(w io.Writer) *WriteCounter {
return &WriteCounter{
Writer: w,
diff --git a/vendor/github.com/docker/docker/registry/types.go b/vendor/github.com/docker/docker/registry/types.go
index 54aa0bd19df..4926580a6ce 100644
--- a/vendor/github.com/docker/docker/registry/types.go
+++ b/vendor/github.com/docker/docker/registry/types.go
@@ -37,5 +37,7 @@ type RepositoryInfo struct {
Official bool
// Class represents the class of the repository, such as "plugin"
// or "image".
+ //
+ // Deprecated: this field is no longer used, and will be removed in the next release.
Class string
}
diff --git a/vendor/github.com/mailru/easyjson/jlexer/bytestostr.go b/vendor/github.com/mailru/easyjson/jlexer/bytestostr.go
index ff7b27c5b20..e68108f8687 100644
--- a/vendor/github.com/mailru/easyjson/jlexer/bytestostr.go
+++ b/vendor/github.com/mailru/easyjson/jlexer/bytestostr.go
@@ -8,7 +8,6 @@
package jlexer
import (
- "reflect"
"unsafe"
)
@@ -18,7 +17,5 @@ import (
// chunk may be either blocked from being freed by GC because of a single string or the buffer.Data
// may be garbage-collected even when the string exists.
func bytesToStr(data []byte) string {
- h := (*reflect.SliceHeader)(unsafe.Pointer(&data))
- shdr := reflect.StringHeader{Data: h.Data, Len: h.Len}
- return *(*string)(unsafe.Pointer(&shdr))
+ return *(*string)(unsafe.Pointer(&data))
}
diff --git a/vendor/github.com/mailru/easyjson/jlexer/lexer.go b/vendor/github.com/mailru/easyjson/jlexer/lexer.go
index b5f5e261329..a27705b12b5 100644
--- a/vendor/github.com/mailru/easyjson/jlexer/lexer.go
+++ b/vendor/github.com/mailru/easyjson/jlexer/lexer.go
@@ -19,21 +19,21 @@ import (
"github.com/josharian/intern"
)
-// tokenKind determines type of a token.
-type tokenKind byte
+// TokenKind determines type of a token.
+type TokenKind byte
const (
- tokenUndef tokenKind = iota // No token.
- tokenDelim // Delimiter: one of '{', '}', '[' or ']'.
- tokenString // A string literal, e.g. "abc\u1234"
- tokenNumber // Number literal, e.g. 1.5e5
- tokenBool // Boolean literal: true or false.
- tokenNull // null keyword.
+ TokenUndef TokenKind = iota // No token.
+ TokenDelim // Delimiter: one of '{', '}', '[' or ']'.
+ TokenString // A string literal, e.g. "abc\u1234"
+ TokenNumber // Number literal, e.g. 1.5e5
+ TokenBool // Boolean literal: true or false.
+ TokenNull // null keyword.
)
// token describes a single token: type, position in the input and value.
type token struct {
- kind tokenKind // Type of a token.
+ kind TokenKind // Type of a token.
boolValue bool // Value if a boolean literal token.
byteValueCloned bool // true if byteValue was allocated and does not refer to original json body
@@ -47,7 +47,7 @@ type Lexer struct {
start int // Start of the current token.
pos int // Current unscanned position in the input stream.
- token token // Last scanned token, if token.kind != tokenUndef.
+ token token // Last scanned token, if token.kind != TokenUndef.
firstElement bool // Whether current element is the first in array or an object.
wantSep byte // A comma or a colon character, which need to occur before a token.
@@ -59,7 +59,7 @@ type Lexer struct {
// FetchToken scans the input for the next token.
func (r *Lexer) FetchToken() {
- r.token.kind = tokenUndef
+ r.token.kind = TokenUndef
r.start = r.pos
// Check if r.Data has r.pos element
@@ -90,7 +90,7 @@ func (r *Lexer) FetchToken() {
r.errSyntax()
}
- r.token.kind = tokenString
+ r.token.kind = TokenString
r.fetchString()
return
@@ -99,7 +99,7 @@ func (r *Lexer) FetchToken() {
r.errSyntax()
}
r.firstElement = true
- r.token.kind = tokenDelim
+ r.token.kind = TokenDelim
r.token.delimValue = r.Data[r.pos]
r.pos++
return
@@ -109,7 +109,7 @@ func (r *Lexer) FetchToken() {
r.errSyntax()
}
r.wantSep = 0
- r.token.kind = tokenDelim
+ r.token.kind = TokenDelim
r.token.delimValue = r.Data[r.pos]
r.pos++
return
@@ -118,7 +118,7 @@ func (r *Lexer) FetchToken() {
if r.wantSep != 0 {
r.errSyntax()
}
- r.token.kind = tokenNumber
+ r.token.kind = TokenNumber
r.fetchNumber()
return
@@ -127,7 +127,7 @@ func (r *Lexer) FetchToken() {
r.errSyntax()
}
- r.token.kind = tokenNull
+ r.token.kind = TokenNull
r.fetchNull()
return
@@ -136,7 +136,7 @@ func (r *Lexer) FetchToken() {
r.errSyntax()
}
- r.token.kind = tokenBool
+ r.token.kind = TokenBool
r.token.boolValue = true
r.fetchTrue()
return
@@ -146,7 +146,7 @@ func (r *Lexer) FetchToken() {
r.errSyntax()
}
- r.token.kind = tokenBool
+ r.token.kind = TokenBool
r.token.boolValue = false
r.fetchFalse()
return
@@ -391,7 +391,7 @@ func (r *Lexer) fetchString() {
// scanToken scans the next token if no token is currently available in the lexer.
func (r *Lexer) scanToken() {
- if r.token.kind != tokenUndef || r.fatalError != nil {
+ if r.token.kind != TokenUndef || r.fatalError != nil {
return
}
@@ -400,7 +400,7 @@ func (r *Lexer) scanToken() {
// consume resets the current token to allow scanning the next one.
func (r *Lexer) consume() {
- r.token.kind = tokenUndef
+ r.token.kind = TokenUndef
r.token.byteValueCloned = false
r.token.delimValue = 0
}
@@ -443,10 +443,10 @@ func (r *Lexer) errInvalidToken(expected string) {
switch expected {
case "[":
r.token.delimValue = ']'
- r.token.kind = tokenDelim
+ r.token.kind = TokenDelim
case "{":
r.token.delimValue = '}'
- r.token.kind = tokenDelim
+ r.token.kind = TokenDelim
}
r.addNonfatalError(&LexerError{
Reason: fmt.Sprintf("expected %s", expected),
@@ -475,7 +475,7 @@ func (r *Lexer) GetPos() int {
// Delim consumes a token and verifies that it is the given delimiter.
func (r *Lexer) Delim(c byte) {
- if r.token.kind == tokenUndef && r.Ok() {
+ if r.token.kind == TokenUndef && r.Ok() {
r.FetchToken()
}
@@ -489,7 +489,7 @@ func (r *Lexer) Delim(c byte) {
// IsDelim returns true if there was no scanning error and next token is the given delimiter.
func (r *Lexer) IsDelim(c byte) bool {
- if r.token.kind == tokenUndef && r.Ok() {
+ if r.token.kind == TokenUndef && r.Ok() {
r.FetchToken()
}
return !r.Ok() || r.token.delimValue == c
@@ -497,10 +497,10 @@ func (r *Lexer) IsDelim(c byte) bool {
// Null verifies that the next token is null and consumes it.
func (r *Lexer) Null() {
- if r.token.kind == tokenUndef && r.Ok() {
+ if r.token.kind == TokenUndef && r.Ok() {
r.FetchToken()
}
- if !r.Ok() || r.token.kind != tokenNull {
+ if !r.Ok() || r.token.kind != TokenNull {
r.errInvalidToken("null")
}
r.consume()
@@ -508,15 +508,15 @@ func (r *Lexer) Null() {
// IsNull returns true if the next token is a null keyword.
func (r *Lexer) IsNull() bool {
- if r.token.kind == tokenUndef && r.Ok() {
+ if r.token.kind == TokenUndef && r.Ok() {
r.FetchToken()
}
- return r.Ok() && r.token.kind == tokenNull
+ return r.Ok() && r.token.kind == TokenNull
}
// Skip skips a single token.
func (r *Lexer) Skip() {
- if r.token.kind == tokenUndef && r.Ok() {
+ if r.token.kind == TokenUndef && r.Ok() {
r.FetchToken()
}
r.consume()
@@ -621,10 +621,10 @@ func (r *Lexer) Consumed() {
}
func (r *Lexer) unsafeString(skipUnescape bool) (string, []byte) {
- if r.token.kind == tokenUndef && r.Ok() {
+ if r.token.kind == TokenUndef && r.Ok() {
r.FetchToken()
}
- if !r.Ok() || r.token.kind != tokenString {
+ if !r.Ok() || r.token.kind != TokenString {
r.errInvalidToken("string")
return "", nil
}
@@ -664,10 +664,10 @@ func (r *Lexer) UnsafeFieldName(skipUnescape bool) string {
// String reads a string literal.
func (r *Lexer) String() string {
- if r.token.kind == tokenUndef && r.Ok() {
+ if r.token.kind == TokenUndef && r.Ok() {
r.FetchToken()
}
- if !r.Ok() || r.token.kind != tokenString {
+ if !r.Ok() || r.token.kind != TokenString {
r.errInvalidToken("string")
return ""
}
@@ -687,10 +687,10 @@ func (r *Lexer) String() string {
// StringIntern reads a string literal, and performs string interning on it.
func (r *Lexer) StringIntern() string {
- if r.token.kind == tokenUndef && r.Ok() {
+ if r.token.kind == TokenUndef && r.Ok() {
r.FetchToken()
}
- if !r.Ok() || r.token.kind != tokenString {
+ if !r.Ok() || r.token.kind != TokenString {
r.errInvalidToken("string")
return ""
}
@@ -705,10 +705,10 @@ func (r *Lexer) StringIntern() string {
// Bytes reads a string literal and base64 decodes it into a byte slice.
func (r *Lexer) Bytes() []byte {
- if r.token.kind == tokenUndef && r.Ok() {
+ if r.token.kind == TokenUndef && r.Ok() {
r.FetchToken()
}
- if !r.Ok() || r.token.kind != tokenString {
+ if !r.Ok() || r.token.kind != TokenString {
r.errInvalidToken("string")
return nil
}
@@ -731,10 +731,10 @@ func (r *Lexer) Bytes() []byte {
// Bool reads a true or false boolean keyword.
func (r *Lexer) Bool() bool {
- if r.token.kind == tokenUndef && r.Ok() {
+ if r.token.kind == TokenUndef && r.Ok() {
r.FetchToken()
}
- if !r.Ok() || r.token.kind != tokenBool {
+ if !r.Ok() || r.token.kind != TokenBool {
r.errInvalidToken("bool")
return false
}
@@ -744,10 +744,10 @@ func (r *Lexer) Bool() bool {
}
func (r *Lexer) number() string {
- if r.token.kind == tokenUndef && r.Ok() {
+ if r.token.kind == TokenUndef && r.Ok() {
r.FetchToken()
}
- if !r.Ok() || r.token.kind != tokenNumber {
+ if !r.Ok() || r.token.kind != TokenNumber {
r.errInvalidToken("number")
return ""
}
@@ -1151,7 +1151,7 @@ func (r *Lexer) GetNonFatalErrors() []*LexerError {
// JsonNumber fetches and json.Number from 'encoding/json' package.
// Both int, float or string, contains them are valid values
func (r *Lexer) JsonNumber() json.Number {
- if r.token.kind == tokenUndef && r.Ok() {
+ if r.token.kind == TokenUndef && r.Ok() {
r.FetchToken()
}
if !r.Ok() {
@@ -1160,11 +1160,11 @@ func (r *Lexer) JsonNumber() json.Number {
}
switch r.token.kind {
- case tokenString:
+ case TokenString:
return json.Number(r.String())
- case tokenNumber:
+ case TokenNumber:
return json.Number(r.Raw())
- case tokenNull:
+ case TokenNull:
r.Null()
return json.Number("")
default:
@@ -1175,7 +1175,7 @@ func (r *Lexer) JsonNumber() json.Number {
// Interface fetches an interface{} analogous to the 'encoding/json' package.
func (r *Lexer) Interface() interface{} {
- if r.token.kind == tokenUndef && r.Ok() {
+ if r.token.kind == TokenUndef && r.Ok() {
r.FetchToken()
}
@@ -1183,13 +1183,13 @@ func (r *Lexer) Interface() interface{} {
return nil
}
switch r.token.kind {
- case tokenString:
+ case TokenString:
return r.String()
- case tokenNumber:
+ case TokenNumber:
return r.Float64()
- case tokenBool:
+ case TokenBool:
return r.Bool()
- case tokenNull:
+ case TokenNull:
r.Null()
return nil
}
@@ -1242,3 +1242,16 @@ func (r *Lexer) WantColon() {
r.wantSep = ':'
r.firstElement = false
}
+
+// CurrentToken returns current token kind if there were no errors and TokenUndef otherwise
+func (r *Lexer) CurrentToken() TokenKind {
+ if r.token.kind == TokenUndef && r.Ok() {
+ r.FetchToken()
+ }
+
+ if !r.Ok() {
+ return TokenUndef
+ }
+
+ return r.token.kind
+}
diff --git a/vendor/github.com/mailru/easyjson/jwriter/writer.go b/vendor/github.com/mailru/easyjson/jwriter/writer.go
index 2c5b20105bb..34b0ade4685 100644
--- a/vendor/github.com/mailru/easyjson/jwriter/writer.go
+++ b/vendor/github.com/mailru/easyjson/jwriter/writer.go
@@ -67,6 +67,18 @@ func (w *Writer) RawString(s string) {
w.Buffer.AppendString(s)
}
+// RawBytesString appends string from bytes to the buffer.
+func (w *Writer) RawBytesString(data []byte, err error) {
+ switch {
+ case w.Error != nil:
+ return
+ case err != nil:
+ w.Error = err
+ default:
+ w.String(string(data))
+ }
+}
+
// Raw appends raw binary data to the buffer or sets the error if it is given. Useful for
// calling with results of MarshalJSON-like functions.
func (w *Writer) Raw(data []byte, err error) {
diff --git a/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/catalogsource_types.go b/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/catalogsource_types.go
index b5f5e3b7e5a..369ac736916 100644
--- a/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/catalogsource_types.go
+++ b/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/catalogsource_types.go
@@ -134,7 +134,7 @@ type GrpcPodConfig struct {
// specified. Specifying a value other than `legacy` or `restricted` result in a validation error. When using older
// catalog images, which can not run in `restricted` mode, the SecurityContextConfig should be set to `legacy`.
//
- // More information about PSA can be found here: https://kubernetes.io/docs/concepts/security/pod-security-admission/'
+ // More information about PSA can be found here: https://kubernetes.io/docs/concepts/security/pod-security-admission/
// +optional
// +kubebuilder:validation:Enum=legacy;restricted
SecurityContextConfig SecurityConfig `json:"securityContextConfig,omitempty"`
diff --git a/vendor/github.com/operator-framework/kubectl-operator/pkg/action/config.go b/vendor/github.com/operator-framework/kubectl-operator/pkg/action/config.go
index 879c1796c51..8bd849070be 100644
--- a/vendor/github.com/operator-framework/kubectl-operator/pkg/action/config.go
+++ b/vendor/github.com/operator-framework/kubectl-operator/pkg/action/config.go
@@ -11,7 +11,7 @@ import (
v1 "github.com/operator-framework/api/pkg/operators/v1"
"github.com/operator-framework/api/pkg/operators/v1alpha1"
- olmv1 "github.com/operator-framework/operator-controller/api/v1alpha1"
+ olmv1 "github.com/operator-framework/operator-controller/api/v1"
operatorsv1 "github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/apis/operators/v1"
)
@@ -23,6 +23,7 @@ func NewScheme() (*runtime.Scheme, error) {
v1.AddToScheme,
apiextensionsv1.AddToScheme,
olmv1.AddToScheme,
+ olmv1.AddToScheme,
} {
if err := f(sch); err != nil {
return nil, err
diff --git a/vendor/github.com/operator-framework/operator-controller/api/v1/clustercatalog_types.go b/vendor/github.com/operator-framework/operator-controller/api/v1/clustercatalog_types.go
new file mode 100644
index 00000000000..f083c1128e3
--- /dev/null
+++ b/vendor/github.com/operator-framework/operator-controller/api/v1/clustercatalog_types.go
@@ -0,0 +1,344 @@
+/*
+Copyright 2024.
+
+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 v1
+
+import (
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+// SourceType defines the type of source used for catalogs.
+// +enum
+type SourceType string
+
+// AvailabilityMode defines the availability of the catalog
+type AvailabilityMode string
+
+const (
+ SourceTypeImage SourceType = "Image"
+
+ MetadataNameLabel = "olm.operatorframework.io/metadata.name"
+
+ AvailabilityModeAvailable AvailabilityMode = "Available"
+ AvailabilityModeUnavailable AvailabilityMode = "Unavailable"
+)
+
+//+kubebuilder:object:root=true
+//+kubebuilder:resource:scope=Cluster
+//+kubebuilder:subresource:status
+//+kubebuilder:printcolumn:name=LastUnpacked,type=date,JSONPath=`.status.lastUnpacked`
+//+kubebuilder:printcolumn:name="Serving",type=string,JSONPath=`.status.conditions[?(@.type=="Serving")].status`
+//+kubebuilder:printcolumn:name=Age,type=date,JSONPath=`.metadata.creationTimestamp`
+
+// ClusterCatalog enables users to make File-Based Catalog (FBC) catalog data available to the cluster.
+// For more information on FBC, see https://olm.operatorframework.io/docs/reference/file-based-catalogs/#docs
+type ClusterCatalog struct {
+ metav1.TypeMeta `json:",inline"`
+
+ // metadata is the standard object's metadata.
+ // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ metav1.ObjectMeta `json:"metadata"`
+
+ // spec is the desired state of the ClusterCatalog.
+ // spec is required.
+ // The controller will work to ensure that the desired
+ // catalog is unpacked and served over the catalog content HTTP server.
+ // +kubebuilder:validation:Required
+ Spec ClusterCatalogSpec `json:"spec"`
+
+ // status contains information about the state of the ClusterCatalog such as:
+ // - Whether or not the catalog contents are being served via the catalog content HTTP server
+ // - Whether or not the ClusterCatalog is progressing to a new state
+ // - A reference to the source from which the catalog contents were retrieved
+ // +optional
+ Status ClusterCatalogStatus `json:"status,omitempty"`
+}
+
+//+kubebuilder:object:root=true
+
+// ClusterCatalogList contains a list of ClusterCatalog
+type ClusterCatalogList struct {
+ metav1.TypeMeta `json:",inline"`
+
+ // metadata is the standard object's metadata.
+ // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ metav1.ListMeta `json:"metadata"`
+
+ // items is a list of ClusterCatalogs.
+ // items is required.
+ // +kubebuilder:validation:Required
+ Items []ClusterCatalog `json:"items"`
+}
+
+// ClusterCatalogSpec defines the desired state of ClusterCatalog
+type ClusterCatalogSpec struct {
+ // source allows a user to define the source of a catalog.
+ // A "catalog" contains information on content that can be installed on a cluster.
+ // Providing a catalog source makes the contents of the catalog discoverable and usable by
+ // other on-cluster components.
+ // These on-cluster components may do a variety of things with this information, such as
+ // presenting the content in a GUI dashboard or installing content from the catalog on the cluster.
+ // The catalog source must contain catalog metadata in the File-Based Catalog (FBC) format.
+ // For more information on FBC, see https://olm.operatorframework.io/docs/reference/file-based-catalogs/#docs.
+ // source is a required field.
+ //
+ // Below is a minimal example of a ClusterCatalogSpec that sources a catalog from an image:
+ //
+ // source:
+ // type: Image
+ // image:
+ // ref: quay.io/operatorhubio/catalog:latest
+ //
+ // +kubebuilder:validation:Required
+ Source CatalogSource `json:"source"`
+
+ // priority allows the user to define a priority for a ClusterCatalog.
+ // priority is optional.
+ //
+ // A ClusterCatalog's priority is used by clients as a tie-breaker between ClusterCatalogs that meet the client's requirements.
+ // A higher number means higher priority.
+ //
+ // It is up to clients to decide how to handle scenarios where multiple ClusterCatalogs with the same priority meet their requirements.
+ // When deciding how to break the tie in this scenario, it is recommended that clients prompt their users for additional input.
+ //
+ // When omitted, the default priority is 0 because that is the zero value of integers.
+ //
+ // Negative numbers can be used to specify a priority lower than the default.
+ // Positive numbers can be used to specify a priority higher than the default.
+ //
+ // The lowest possible value is -2147483648.
+ // The highest possible value is 2147483647.
+ //
+ // +kubebuilder:default:=0
+ // +kubebuilder:validation:minimum:=-2147483648
+ // +kubebuilder:validation:maximum:=2147483647
+ // +optional
+ Priority int32 `json:"priority"`
+
+ // availabilityMode allows users to define how the ClusterCatalog is made available to clients on the cluster.
+ // availabilityMode is optional.
+ //
+ // Allowed values are "Available" and "Unavailable" and omitted.
+ //
+ // When omitted, the default value is "Available".
+ //
+ // When set to "Available", the catalog contents will be unpacked and served over the catalog content HTTP server.
+ // Setting the availabilityMode to "Available" tells clients that they should consider this ClusterCatalog
+ // and its contents as usable.
+ //
+ // When set to "Unavailable", the catalog contents will no longer be served over the catalog content HTTP server.
+ // When set to this availabilityMode it should be interpreted the same as the ClusterCatalog not existing.
+ // Setting the availabilityMode to "Unavailable" can be useful in scenarios where a user may not want
+ // to delete the ClusterCatalog all together, but would still like it to be treated as if it doesn't exist.
+ //
+ // +kubebuilder:validation:Enum:="Unavailable";"Available"
+ // +kubebuilder:default:="Available"
+ // +optional
+ AvailabilityMode AvailabilityMode `json:"availabilityMode,omitempty"`
+}
+
+// ClusterCatalogStatus defines the observed state of ClusterCatalog
+type ClusterCatalogStatus struct {
+ // conditions is a representation of the current state for this ClusterCatalog.
+ //
+ // The current condition types are Serving and Progressing.
+ //
+ // The Serving condition is used to represent whether or not the contents of the catalog is being served via the HTTP(S) web server.
+ // When it has a status of True and a reason of Available, the contents of the catalog are being served.
+ // When it has a status of False and a reason of Unavailable, the contents of the catalog are not being served because the contents are not yet available.
+ // When it has a status of False and a reason of UserSpecifiedUnavailable, the contents of the catalog are not being served because the catalog has been intentionally marked as unavailable.
+ //
+ // The Progressing condition is used to represent whether or not the ClusterCatalog is progressing or is ready to progress towards a new state.
+ // When it has a status of True and a reason of Retrying, there was an error in the progression of the ClusterCatalog that may be resolved on subsequent reconciliation attempts.
+ // When it has a status of True and a reason of Succeeded, the ClusterCatalog has successfully progressed to a new state and is ready to continue progressing.
+ // When it has a status of False and a reason of Blocked, there was an error in the progression of the ClusterCatalog that requires manual intervention for recovery.
+ //
+ // In the case that the Serving condition is True with reason Available and Progressing is True with reason Retrying, the previously fetched
+ // catalog contents are still being served via the HTTP(S) web server while we are progressing towards serving a new version of the catalog
+ // contents. This could occur when we've initially fetched the latest contents from the source for this catalog and when polling for changes
+ // to the contents we identify that there are updates to the contents.
+ //
+ // +listType=map
+ // +listMapKey=type
+ // +optional
+ Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"`
+ // resolvedSource contains information about the resolved source based on the source type.
+ // +optional
+ ResolvedSource *ResolvedCatalogSource `json:"resolvedSource,omitempty"`
+ // urls contains the URLs that can be used to access the catalog.
+ // +optional
+ URLs *ClusterCatalogURLs `json:"urls,omitempty"`
+ // lastUnpacked represents the last time the contents of the
+ // catalog were extracted from their source format. As an example,
+ // when using an Image source, the OCI image will be pulled and the
+ // image layers written to a file-system backed cache. We refer to the
+ // act of this extraction from the source format as "unpacking".
+ // +optional
+ LastUnpacked *metav1.Time `json:"lastUnpacked,omitempty"`
+}
+
+// ClusterCatalogURLs contains the URLs that can be used to access the catalog.
+type ClusterCatalogURLs struct {
+ // base is a cluster-internal URL that provides endpoints for
+ // accessing the content of the catalog.
+ //
+ // It is expected that clients append the path for the endpoint they wish
+ // to access.
+ //
+ // Currently, only a single endpoint is served and is accessible at the path
+ // /api/v1.
+ //
+ // The endpoints served for the v1 API are:
+ // - /all - this endpoint returns the entirety of the catalog contents in the FBC format
+ //
+ // As the needs of users and clients of the evolve, new endpoints may be added.
+ //
+ // +kubebuilder:validation:Required
+ // +kubebuilder:validation:MaxLength:=525
+ // +kubebuilder:validation:XValidation:rule="isURL(self)",message="must be a valid URL"
+ // +kubebuilder:validation:XValidation:rule="isURL(self) ? (url(self).getScheme() == \"http\" || url(self).getScheme() == \"https\") : true",message="scheme must be either http or https"
+ Base string `json:"base"`
+}
+
+// CatalogSource is a discriminated union of possible sources for a Catalog.
+// CatalogSource contains the sourcing information for a Catalog
+// +union
+// +kubebuilder:validation:XValidation:rule="has(self.type) && self.type == 'Image' ? has(self.image) : !has(self.image)",message="image is required when source type is Image, and forbidden otherwise"
+type CatalogSource struct {
+ // type is a reference to the type of source the catalog is sourced from.
+ // type is required.
+ //
+ // The only allowed value is "Image".
+ //
+ // When set to "Image", the ClusterCatalog content will be sourced from an OCI image.
+ // When using an image source, the image field must be set and must be the only field defined for this type.
+ //
+ // +unionDiscriminator
+ // +kubebuilder:validation:Enum:="Image"
+ // +kubebuilder:validation:Required
+ Type SourceType `json:"type"`
+ // image is used to configure how catalog contents are sourced from an OCI image.
+ // This field is required when type is Image, and forbidden otherwise.
+ // +optional
+ Image *ImageSource `json:"image,omitempty"`
+}
+
+// ResolvedCatalogSource is a discriminated union of resolution information for a Catalog.
+// ResolvedCatalogSource contains the information about a sourced Catalog
+// +union
+// +kubebuilder:validation:XValidation:rule="has(self.type) && self.type == 'Image' ? has(self.image) : !has(self.image)",message="image is required when source type is Image, and forbidden otherwise"
+type ResolvedCatalogSource struct {
+ // type is a reference to the type of source the catalog is sourced from.
+ // type is required.
+ //
+ // The only allowed value is "Image".
+ //
+ // When set to "Image", information about the resolved image source will be set in the 'image' field.
+ //
+ // +unionDiscriminator
+ // +kubebuilder:validation:Enum:="Image"
+ // +kubebuilder:validation:Required
+ Type SourceType `json:"type"`
+ // image is a field containing resolution information for a catalog sourced from an image.
+ // This field must be set when type is Image, and forbidden otherwise.
+ Image *ResolvedImageSource `json:"image"`
+}
+
+// ResolvedImageSource provides information about the resolved source of a Catalog sourced from an image.
+type ResolvedImageSource struct {
+ // ref contains the resolved image digest-based reference.
+ // The digest format is used so users can use other tooling to fetch the exact
+ // OCI manifests that were used to extract the catalog contents.
+ // +kubebuilder:validation:Required
+ // +kubebuilder:validation:MaxLength:=1000
+ // +kubebuilder:validation:XValidation:rule="self.matches('^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])((\\\\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))+)?(:[0-9]+)?\\\\b')",message="must start with a valid domain. valid domains must be alphanumeric characters (lowercase and uppercase) separated by the \".\" character."
+ // +kubebuilder:validation:XValidation:rule="self.find('(\\\\/[a-z0-9]+((([._]|__|[-]*)[a-z0-9]+)+)?((\\\\/[a-z0-9]+((([._]|__|[-]*)[a-z0-9]+)+)?)+)?)') != \"\"",message="a valid name is required. valid names must contain lowercase alphanumeric characters separated only by the \".\", \"_\", \"__\", \"-\" characters."
+ // +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') != \"\"",message="must end with a digest"
+ // +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') != \"\" ? self.find('(@.*:)').matches('(@[A-Za-z][A-Za-z0-9]*([-_+.][A-Za-z][A-Za-z0-9]*)*[:])') : true",message="digest algorithm is not valid. valid algorithms must start with an uppercase or lowercase alpha character followed by alphanumeric characters and may contain the \"-\", \"_\", \"+\", and \".\" characters."
+ // +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') != \"\" ? self.find(':.*$').substring(1).size() >= 32 : true",message="digest is not valid. the encoded string must be at least 32 characters"
+ // +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') != \"\" ? self.find(':.*$').matches(':[0-9A-Fa-f]*$') : true",message="digest is not valid. the encoded string must only contain hex characters (A-F, a-f, 0-9)"
+ Ref string `json:"ref"`
+}
+
+// ImageSource enables users to define the information required for sourcing a Catalog from an OCI image
+//
+// If we see that there is a possibly valid digest-based image reference AND pollIntervalMinutes is specified,
+// reject the resource since there is no use in polling a digest-based image reference.
+// +kubebuilder:validation:XValidation:rule="self.ref.find('(@.*:)') != \"\" ? !has(self.pollIntervalMinutes) : true",message="cannot specify pollIntervalMinutes while using digest-based image"
+type ImageSource struct {
+ // ref allows users to define the reference to a container image containing Catalog contents.
+ // ref is required.
+ // ref can not be more than 1000 characters.
+ //
+ // A reference can be broken down into 3 parts - the domain, name, and identifier.
+ //
+ // The domain is typically the registry where an image is located.
+ // It must be alphanumeric characters (lowercase and uppercase) separated by the "." character.
+ // Hyphenation is allowed, but the domain must start and end with alphanumeric characters.
+ // Specifying a port to use is also allowed by adding the ":" character followed by numeric values.
+ // The port must be the last value in the domain.
+ // Some examples of valid domain values are "registry.mydomain.io", "quay.io", "my-registry.io:8080".
+ //
+ // The name is typically the repository in the registry where an image is located.
+ // It must contain lowercase alphanumeric characters separated only by the ".", "_", "__", "-" characters.
+ // Multiple names can be concatenated with the "/" character.
+ // The domain and name are combined using the "/" character.
+ // Some examples of valid name values are "operatorhubio/catalog", "catalog", "my-catalog.prod".
+ // An example of the domain and name parts of a reference being combined is "quay.io/operatorhubio/catalog".
+ //
+ // The identifier is typically the tag or digest for an image reference and is present at the end of the reference.
+ // It starts with a separator character used to distinguish the end of the name and beginning of the identifier.
+ // For a digest-based reference, the "@" character is the separator.
+ // For a tag-based reference, the ":" character is the separator.
+ // An identifier is required in the reference.
+ //
+ // Digest-based references must contain an algorithm reference immediately after the "@" separator.
+ // The algorithm reference must be followed by the ":" character and an encoded string.
+ // The algorithm must start with an uppercase or lowercase alpha character followed by alphanumeric characters and may contain the "-", "_", "+", and "." characters.
+ // Some examples of valid algorithm values are "sha256", "sha256+b64u", "multihash+base58".
+ // The encoded string following the algorithm must be hex digits (a-f, A-F, 0-9) and must be a minimum of 32 characters.
+ //
+ // Tag-based references must begin with a word character (alphanumeric + "_") followed by word characters or ".", and "-" characters.
+ // The tag must not be longer than 127 characters.
+ //
+ // An example of a valid digest-based image reference is "quay.io/operatorhubio/catalog@sha256:200d4ddb2a73594b91358fe6397424e975205bfbe44614f5846033cad64b3f05"
+ // An example of a valid tag-based image reference is "quay.io/operatorhubio/catalog:latest"
+ //
+ // +kubebuilder:validation:Required
+ // +kubebuilder:validation:MaxLength:=1000
+ // +kubebuilder:validation:XValidation:rule="self.matches('^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])((\\\\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))+)?(:[0-9]+)?\\\\b')",message="must start with a valid domain. valid domains must be alphanumeric characters (lowercase and uppercase) separated by the \".\" character."
+ // +kubebuilder:validation:XValidation:rule="self.find('(\\\\/[a-z0-9]+((([._]|__|[-]*)[a-z0-9]+)+)?((\\\\/[a-z0-9]+((([._]|__|[-]*)[a-z0-9]+)+)?)+)?)') != \"\"",message="a valid name is required. valid names must contain lowercase alphanumeric characters separated only by the \".\", \"_\", \"__\", \"-\" characters."
+ // +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') != \"\" || self.find(':.*$') != \"\"",message="must end with a digest or a tag"
+ // +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') == \"\" ? (self.find(':.*$') != \"\" ? self.find(':.*$').substring(1).size() <= 127 : true) : true",message="tag is invalid. the tag must not be more than 127 characters"
+ // +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') == \"\" ? (self.find(':.*$') != \"\" ? self.find(':.*$').matches(':[\\\\w][\\\\w.-]*$') : true) : true",message="tag is invalid. valid tags must begin with a word character (alphanumeric + \"_\") followed by word characters or \".\", and \"-\" characters"
+ // +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') != \"\" ? self.find('(@.*:)').matches('(@[A-Za-z][A-Za-z0-9]*([-_+.][A-Za-z][A-Za-z0-9]*)*[:])') : true",message="digest algorithm is not valid. valid algorithms must start with an uppercase or lowercase alpha character followed by alphanumeric characters and may contain the \"-\", \"_\", \"+\", and \".\" characters."
+ // +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') != \"\" ? self.find(':.*$').substring(1).size() >= 32 : true",message="digest is not valid. the encoded string must be at least 32 characters"
+ // +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') != \"\" ? self.find(':.*$').matches(':[0-9A-Fa-f]*$') : true",message="digest is not valid. the encoded string must only contain hex characters (A-F, a-f, 0-9)"
+ Ref string `json:"ref"`
+
+ // pollIntervalMinutes allows the user to set the interval, in minutes, at which the image source should be polled for new content.
+ // pollIntervalMinutes is optional.
+ // pollIntervalMinutes can not be specified when ref is a digest-based reference.
+ //
+ // When omitted, the image will not be polled for new content.
+ // +kubebuilder:validation:Minimum:=1
+ // +optional
+ PollIntervalMinutes *int `json:"pollIntervalMinutes,omitempty"`
+}
+
+func init() {
+ SchemeBuilder.Register(&ClusterCatalog{}, &ClusterCatalogList{})
+}
diff --git a/vendor/github.com/operator-framework/operator-controller/api/v1/clusterextension_types.go b/vendor/github.com/operator-framework/operator-controller/api/v1/clusterextension_types.go
new file mode 100644
index 00000000000..0141f1a7a44
--- /dev/null
+++ b/vendor/github.com/operator-framework/operator-controller/api/v1/clusterextension_types.go
@@ -0,0 +1,510 @@
+/*
+Copyright 2022.
+
+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 v1
+
+import (
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+var ClusterExtensionKind = "ClusterExtension"
+
+type (
+ UpgradeConstraintPolicy string
+ CRDUpgradeSafetyEnforcement string
+)
+
+const (
+ // The extension will only upgrade if the new version satisfies
+ // the upgrade constraints set by the package author.
+ UpgradeConstraintPolicyCatalogProvided UpgradeConstraintPolicy = "CatalogProvided"
+
+ // Unsafe option which allows an extension to be
+ // upgraded or downgraded to any available version of the package and
+ // ignore the upgrade path designed by package authors.
+ // This assumes that users independently verify the outcome of the changes.
+ // Use with caution as this can lead to unknown and potentially
+ // disastrous results such as data loss.
+ UpgradeConstraintPolicySelfCertified UpgradeConstraintPolicy = "SelfCertified"
+)
+
+// ClusterExtensionSpec defines the desired state of ClusterExtension
+type ClusterExtensionSpec struct {
+ // namespace is a reference to a Kubernetes namespace.
+ // This is the namespace in which the provided ServiceAccount must exist.
+ // It also designates the default namespace where namespace-scoped resources
+ // for the extension are applied to the cluster.
+ // Some extensions may contain namespace-scoped resources to be applied in other namespaces.
+ // This namespace must exist.
+ //
+ // namespace is required, immutable, and follows the DNS label standard
+ // as defined in [RFC 1123]. It must contain only lowercase alphanumeric characters or hyphens (-),
+ // start and end with an alphanumeric character, and be no longer than 63 characters
+ //
+ // [RFC 1123]: https://tools.ietf.org/html/rfc1123
+ //
+ // +kubebuilder:validation:MaxLength:=63
+ // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="namespace is immutable"
+ // +kubebuilder:validation:XValidation:rule="self.matches(\"^[a-z0-9]([-a-z0-9]*[a-z0-9])?$\")",message="namespace must be a valid DNS1123 label"
+ // +kubebuilder:validation:Required
+ Namespace string `json:"namespace"`
+
+ // serviceAccount is a reference to a ServiceAccount used to perform all interactions
+ // with the cluster that are required to manage the extension.
+ // The ServiceAccount must be configured with the necessary permissions to perform these interactions.
+ // The ServiceAccount must exist in the namespace referenced in the spec.
+ // serviceAccount is required.
+ //
+ // +kubebuilder:validation:Required
+ ServiceAccount ServiceAccountReference `json:"serviceAccount"`
+
+ // source is a required field which selects the installation source of content
+ // for this ClusterExtension. Selection is performed by setting the sourceType.
+ //
+ // Catalog is currently the only implemented sourceType, and setting the
+ // sourcetype to "Catalog" requires the catalog field to also be defined.
+ //
+ // Below is a minimal example of a source definition (in yaml):
+ //
+ // source:
+ // sourceType: Catalog
+ // catalog:
+ // packageName: example-package
+ //
+ // +kubebuilder:validation:Required
+ Source SourceConfig `json:"source"`
+
+ // install is an optional field used to configure the installation options
+ // for the ClusterExtension such as the pre-flight check configuration.
+ //
+ // +optional
+ Install *ClusterExtensionInstallConfig `json:"install,omitempty"`
+}
+
+const SourceTypeCatalog = "Catalog"
+
+// SourceConfig is a discriminated union which selects the installation source.
+//
+// +union
+// +kubebuilder:validation:XValidation:rule="has(self.sourceType) && self.sourceType == 'Catalog' ? has(self.catalog) : !has(self.catalog)",message="catalog is required when sourceType is Catalog, and forbidden otherwise"
+type SourceConfig struct {
+ // sourceType is a required reference to the type of install source.
+ //
+ // Allowed values are "Catalog"
+ //
+ // When this field is set to "Catalog", information for determining the
+ // appropriate bundle of content to install will be fetched from
+ // ClusterCatalog resources existing on the cluster.
+ // When using the Catalog sourceType, the catalog field must also be set.
+ //
+ // +unionDiscriminator
+ // +kubebuilder:validation:Enum:="Catalog"
+ // +kubebuilder:validation:Required
+ SourceType string `json:"sourceType"`
+
+ // catalog is used to configure how information is sourced from a catalog.
+ // This field is required when sourceType is "Catalog", and forbidden otherwise.
+ //
+ // +optional
+ Catalog *CatalogFilter `json:"catalog,omitempty"`
+}
+
+// ClusterExtensionInstallConfig is a union which selects the clusterExtension installation config.
+// ClusterExtensionInstallConfig requires the namespace and serviceAccount which should be used for the installation of packages.
+//
+// +kubebuilder:validation:XValidation:rule="has(self.preflight)",message="at least one of [preflight] are required when install is specified"
+// +union
+type ClusterExtensionInstallConfig struct {
+ // preflight is an optional field that can be used to configure the checks that are
+ // run before installation or upgrade of the content for the package specified in the packageName field.
+ //
+ // When specified, it replaces the default preflight configuration for install/upgrade actions.
+ // When not specified, the default configuration will be used.
+ //
+ // +optional
+ Preflight *PreflightConfig `json:"preflight,omitempty"`
+}
+
+// CatalogFilter defines the attributes used to identify and filter content from a catalog.
+type CatalogFilter struct {
+ // packageName is a reference to the name of the package to be installed
+ // and is used to filter the content from catalogs.
+ //
+ // packageName is required, immutable, and follows the DNS subdomain standard
+ // as defined in [RFC 1123]. It must contain only lowercase alphanumeric characters,
+ // hyphens (-) or periods (.), start and end with an alphanumeric character,
+ // and be no longer than 253 characters.
+ //
+ // Some examples of valid values are:
+ // - some-package
+ // - 123-package
+ // - 1-package-2
+ // - somepackage
+ //
+ // Some examples of invalid values are:
+ // - -some-package
+ // - some-package-
+ // - thisisareallylongpackagenamethatisgreaterthanthemaximumlength
+ // - some.package
+ //
+ // [RFC 1123]: https://tools.ietf.org/html/rfc1123
+ //
+ // +kubebuilder:validation.Required
+ // +kubebuilder:validation:MaxLength:=253
+ // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="packageName is immutable"
+ // +kubebuilder:validation:XValidation:rule="self.matches(\"^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$\")",message="packageName must be a valid DNS1123 subdomain. It must contain only lowercase alphanumeric characters, hyphens (-) or periods (.), start and end with an alphanumeric character, and be no longer than 253 characters"
+ // +kubebuilder:validation:Required
+ PackageName string `json:"packageName"`
+
+ // version is an optional semver constraint (a specific version or range of versions). When unspecified, the latest version available will be installed.
+ //
+ // Acceptable version ranges are no longer than 64 characters.
+ // Version ranges are composed of comma- or space-delimited values and one or
+ // more comparison operators, known as comparison strings. Additional
+ // comparison strings can be added using the OR operator (||).
+ //
+ // # Range Comparisons
+ //
+ // To specify a version range, you can use a comparison string like ">=3.0,
+ // <3.6". When specifying a range, automatic updates will occur within that
+ // range. The example comparison string means "install any version greater than
+ // or equal to 3.0.0 but less than 3.6.0.". It also states intent that if any
+ // upgrades are available within the version range after initial installation,
+ // those upgrades should be automatically performed.
+ //
+ // # Pinned Versions
+ //
+ // To specify an exact version to install you can use a version range that
+ // "pins" to a specific version. When pinning to a specific version, no
+ // automatic updates will occur. An example of a pinned version range is
+ // "0.6.0", which means "only install version 0.6.0 and never
+ // upgrade from this version".
+ //
+ // # Basic Comparison Operators
+ //
+ // The basic comparison operators and their meanings are:
+ // - "=", equal (not aliased to an operator)
+ // - "!=", not equal
+ // - "<", less than
+ // - ">", greater than
+ // - ">=", greater than OR equal to
+ // - "<=", less than OR equal to
+ //
+ // # Wildcard Comparisons
+ //
+ // You can use the "x", "X", and "*" characters as wildcard characters in all
+ // comparison operations. Some examples of using the wildcard characters:
+ // - "1.2.x", "1.2.X", and "1.2.*" is equivalent to ">=1.2.0, < 1.3.0"
+ // - ">= 1.2.x", ">= 1.2.X", and ">= 1.2.*" is equivalent to ">= 1.2.0"
+ // - "<= 2.x", "<= 2.X", and "<= 2.*" is equivalent to "< 3"
+ // - "x", "X", and "*" is equivalent to ">= 0.0.0"
+ //
+ // # Patch Release Comparisons
+ //
+ // When you want to specify a minor version up to the next major version you
+ // can use the "~" character to perform patch comparisons. Some examples:
+ // - "~1.2.3" is equivalent to ">=1.2.3, <1.3.0"
+ // - "~1" and "~1.x" is equivalent to ">=1, <2"
+ // - "~2.3" is equivalent to ">=2.3, <2.4"
+ // - "~1.2.x" is equivalent to ">=1.2.0, <1.3.0"
+ //
+ // # Major Release Comparisons
+ //
+ // You can use the "^" character to make major release comparisons after a
+ // stable 1.0.0 version is published. If there is no stable version published, // minor versions define the stability level. Some examples:
+ // - "^1.2.3" is equivalent to ">=1.2.3, <2.0.0"
+ // - "^1.2.x" is equivalent to ">=1.2.0, <2.0.0"
+ // - "^2.3" is equivalent to ">=2.3, <3"
+ // - "^2.x" is equivalent to ">=2.0.0, <3"
+ // - "^0.2.3" is equivalent to ">=0.2.3, <0.3.0"
+ // - "^0.2" is equivalent to ">=0.2.0, <0.3.0"
+ // - "^0.0.3" is equvalent to ">=0.0.3, <0.0.4"
+ // - "^0.0" is equivalent to ">=0.0.0, <0.1.0"
+ // - "^0" is equivalent to ">=0.0.0, <1.0.0"
+ //
+ // # OR Comparisons
+ // You can use the "||" character to represent an OR operation in the version
+ // range. Some examples:
+ // - ">=1.2.3, <2.0.0 || >3.0.0"
+ // - "^0 || ^3 || ^5"
+ //
+ // For more information on semver, please see https://semver.org/
+ //
+ // +kubebuilder:validation:MaxLength:=64
+ // +kubebuilder:validation:XValidation:rule="self.matches(\"^(\\\\s*(=||!=|>|<|>=|=>|<=|=<|~|~>|\\\\^)\\\\s*(v?(0|[1-9]\\\\d*|[x|X|\\\\*])(\\\\.(0|[1-9]\\\\d*|x|X|\\\\*]))?(\\\\.(0|[1-9]\\\\d*|x|X|\\\\*))?(-([0-9A-Za-z\\\\-]+(\\\\.[0-9A-Za-z\\\\-]+)*))?(\\\\+([0-9A-Za-z\\\\-]+(\\\\.[0-9A-Za-z\\\\-]+)*))?)\\\\s*)((?:\\\\s+|,\\\\s*|\\\\s*\\\\|\\\\|\\\\s*)(=||!=|>|<|>=|=>|<=|=<|~|~>|\\\\^)\\\\s*(v?(0|[1-9]\\\\d*|x|X|\\\\*])(\\\\.(0|[1-9]\\\\d*|x|X|\\\\*))?(\\\\.(0|[1-9]\\\\d*|x|X|\\\\*]))?(-([0-9A-Za-z\\\\-]+(\\\\.[0-9A-Za-z\\\\-]+)*))?(\\\\+([0-9A-Za-z\\\\-]+(\\\\.[0-9A-Za-z\\\\-]+)*))?)\\\\s*)*$\")",message="invalid version expression"
+ // +optional
+ Version string `json:"version,omitempty"`
+
+ // channels is an optional reference to a set of channels belonging to
+ // the package specified in the packageName field.
+ //
+ // A "channel" is a package-author-defined stream of updates for an extension.
+ //
+ // Each channel in the list must follow the DNS subdomain standard
+ // as defined in [RFC 1123]. It must contain only lowercase alphanumeric characters,
+ // hyphens (-) or periods (.), start and end with an alphanumeric character,
+ // and be no longer than 253 characters. No more than 256 channels can be specified.
+ //
+ // When specified, it is used to constrain the set of installable bundles and
+ // the automated upgrade path. This constraint is an AND operation with the
+ // version field. For example:
+ // - Given channel is set to "foo"
+ // - Given version is set to ">=1.0.0, <1.5.0"
+ // - Only bundles that exist in channel "foo" AND satisfy the version range comparison will be considered installable
+ // - Automatic upgrades will be constrained to upgrade edges defined by the selected channel
+ //
+ // When unspecified, upgrade edges across all channels will be used to identify valid automatic upgrade paths.
+ //
+ // Some examples of valid values are:
+ // - 1.1.x
+ // - alpha
+ // - stable
+ // - stable-v1
+ // - v1-stable
+ // - dev-preview
+ // - preview
+ // - community
+ //
+ // Some examples of invalid values are:
+ // - -some-channel
+ // - some-channel-
+ // - thisisareallylongchannelnamethatisgreaterthanthemaximumlength
+ // - original_40
+ // - --default-channel
+ //
+ // [RFC 1123]: https://tools.ietf.org/html/rfc1123
+ //
+ // +kubebuilder:validation:items:MaxLength:=253
+ // +kubebuilder:validation:MaxItems:=256
+ // +kubebuilder:validation:items:XValidation:rule="self.matches(\"^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$\")",message="channels entries must be valid DNS1123 subdomains"
+ // +optional
+ Channels []string `json:"channels,omitempty"`
+
+ // selector is an optional field that can be used
+ // to filter the set of ClusterCatalogs used in the bundle
+ // selection process.
+ //
+ // When unspecified, all ClusterCatalogs will be used in
+ // the bundle selection process.
+ //
+ // +optional
+ Selector *metav1.LabelSelector `json:"selector,omitempty"`
+
+ // upgradeConstraintPolicy is an optional field that controls whether
+ // the upgrade path(s) defined in the catalog are enforced for the package
+ // referenced in the packageName field.
+ //
+ // Allowed values are: "CatalogProvided" or "SelfCertified", or omitted.
+ //
+ // When this field is set to "CatalogProvided", automatic upgrades will only occur
+ // when upgrade constraints specified by the package author are met.
+ //
+ // When this field is set to "SelfCertified", the upgrade constraints specified by
+ // the package author are ignored. This allows for upgrades and downgrades to
+ // any version of the package. This is considered a dangerous operation as it
+ // can lead to unknown and potentially disastrous outcomes, such as data
+ // loss. It is assumed that users have independently verified changes when
+ // using this option.
+ //
+ // When this field is omitted, the default value is "CatalogProvided".
+ //
+ // +kubebuilder:validation:Enum:=CatalogProvided;SelfCertified
+ // +kubebuilder:default:=CatalogProvided
+ // +optional
+ UpgradeConstraintPolicy UpgradeConstraintPolicy `json:"upgradeConstraintPolicy,omitempty"`
+}
+
+// ServiceAccountReference identifies the serviceAccount used fo install a ClusterExtension.
+type ServiceAccountReference struct {
+ // name is a required, immutable reference to the name of the ServiceAccount
+ // to be used for installation and management of the content for the package
+ // specified in the packageName field.
+ //
+ // This ServiceAccount must exist in the installNamespace.
+ //
+ // name follows the DNS subdomain standard as defined in [RFC 1123].
+ // It must contain only lowercase alphanumeric characters,
+ // hyphens (-) or periods (.), start and end with an alphanumeric character,
+ // and be no longer than 253 characters.
+ //
+ // Some examples of valid values are:
+ // - some-serviceaccount
+ // - 123-serviceaccount
+ // - 1-serviceaccount-2
+ // - someserviceaccount
+ // - some.serviceaccount
+ //
+ // Some examples of invalid values are:
+ // - -some-serviceaccount
+ // - some-serviceaccount-
+ //
+ // [RFC 1123]: https://tools.ietf.org/html/rfc1123
+ //
+ // +kubebuilder:validation:MaxLength:=253
+ // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="name is immutable"
+ // +kubebuilder:validation:XValidation:rule="self.matches(\"^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$\")",message="name must be a valid DNS1123 subdomain. It must contain only lowercase alphanumeric characters, hyphens (-) or periods (.), start and end with an alphanumeric character, and be no longer than 253 characters"
+ // +kubebuilder:validation:Required
+ Name string `json:"name"`
+}
+
+// PreflightConfig holds the configuration for the preflight checks. If used, at least one preflight check must be non-nil.
+//
+// +kubebuilder:validation:XValidation:rule="has(self.crdUpgradeSafety)",message="at least one of [crdUpgradeSafety] are required when preflight is specified"
+type PreflightConfig struct {
+ // crdUpgradeSafety is used to configure the CRD Upgrade Safety pre-flight
+ // checks that run prior to upgrades of installed content.
+ //
+ // The CRD Upgrade Safety pre-flight check safeguards from unintended
+ // consequences of upgrading a CRD, such as data loss.
+ CRDUpgradeSafety *CRDUpgradeSafetyPreflightConfig `json:"crdUpgradeSafety"`
+}
+
+// CRDUpgradeSafetyPreflightConfig is the configuration for CRD upgrade safety preflight check.
+type CRDUpgradeSafetyPreflightConfig struct {
+ // enforcement is a required field, used to configure the state of the CRD Upgrade Safety pre-flight check.
+ //
+ // Allowed values are "None" or "Strict". The default value is "Strict".
+ //
+ // When set to "None", the CRD Upgrade Safety pre-flight check will be skipped
+ // when performing an upgrade operation. This should be used with caution as
+ // unintended consequences such as data loss can occur.
+ //
+ // When set to "Strict", the CRD Upgrade Safety pre-flight check will be run when
+ // performing an upgrade operation.
+ //
+ // +kubebuilder:validation:Enum:="None";"Strict"
+ // +kubebuilder:validation:Required
+ Enforcement CRDUpgradeSafetyEnforcement `json:"enforcement"`
+}
+
+const (
+ // TypeDeprecated is a rollup condition that is present when
+ // any of the deprecated conditions are present.
+ TypeDeprecated = "Deprecated"
+ TypePackageDeprecated = "PackageDeprecated"
+ TypeChannelDeprecated = "ChannelDeprecated"
+ TypeBundleDeprecated = "BundleDeprecated"
+
+ // None will not perform CRD upgrade safety checks.
+ CRDUpgradeSafetyEnforcementNone CRDUpgradeSafetyEnforcement = "None"
+ // Strict will enforce the CRD upgrade safety check and block the upgrade if the CRD would not pass the check.
+ CRDUpgradeSafetyEnforcementStrict CRDUpgradeSafetyEnforcement = "Strict"
+)
+
+// BundleMetadata is a representation of the identifying attributes of a bundle.
+type BundleMetadata struct {
+ // name is required and follows the DNS subdomain standard
+ // as defined in [RFC 1123]. It must contain only lowercase alphanumeric characters,
+ // hyphens (-) or periods (.), start and end with an alphanumeric character,
+ // and be no longer than 253 characters.
+ //
+ // +kubebuilder:validation:Required
+ // +kubebuilder:validation:XValidation:rule="self.matches(\"^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$\")",message="packageName must be a valid DNS1123 subdomain. It must contain only lowercase alphanumeric characters, hyphens (-) or periods (.), start and end with an alphanumeric character, and be no longer than 253 characters"
+ Name string `json:"name"`
+
+ // version is a required field and is a reference to the version that this bundle represents
+ // version follows the semantic versioning standard as defined in https://semver.org/.
+ //
+ // +kubebuilder:validation:Required
+ // +kubebuilder:validation:XValidation:rule="self.matches(\"^([0-9]+)(\\\\.[0-9]+)?(\\\\.[0-9]+)?(-([-0-9A-Za-z]+(\\\\.[-0-9A-Za-z]+)*))?(\\\\+([-0-9A-Za-z]+(-\\\\.[-0-9A-Za-z]+)*))?\")",message="version must be well-formed semver"
+ Version string `json:"version"`
+}
+
+// ClusterExtensionStatus defines the observed state of a ClusterExtension.
+type ClusterExtensionStatus struct {
+ // The set of condition types which apply to all spec.source variations are Installed and Progressing.
+ //
+ // The Installed condition represents whether or not the bundle has been installed for this ClusterExtension.
+ // When Installed is True and the Reason is Succeeded, the bundle has been successfully installed.
+ // When Installed is False and the Reason is Failed, the bundle has failed to install.
+ //
+ // The Progressing condition represents whether or not the ClusterExtension is advancing towards a new state.
+ // When Progressing is True and the Reason is Succeeded, the ClusterExtension is making progress towards a new state.
+ // When Progressing is True and the Reason is Retrying, the ClusterExtension has encountered an error that could be resolved on subsequent reconciliation attempts.
+ // When Progressing is False and the Reason is Blocked, the ClusterExtension has encountered an error that requires manual intervention for recovery.
+ //
+ // When the ClusterExtension is sourced from a catalog, if may also communicate a deprecation condition.
+ // These are indications from a package owner to guide users away from a particular package, channel, or bundle.
+ // BundleDeprecated is set if the requested bundle version is marked deprecated in the catalog.
+ // ChannelDeprecated is set if the requested channel is marked deprecated in the catalog.
+ // PackageDeprecated is set if the requested package is marked deprecated in the catalog.
+ // Deprecated is a rollup condition that is present when any of the deprecated conditions are present.
+ //
+ // +patchMergeKey=type
+ // +patchStrategy=merge
+ // +listType=map
+ // +listMapKey=type
+ // +optional
+ Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"`
+
+ // install is a representation of the current installation status for this ClusterExtension.
+ //
+ // +optional
+ Install *ClusterExtensionInstallStatus `json:"install,omitempty"`
+}
+
+// ClusterExtensionInstallStatus is a representation of the status of the identified bundle.
+type ClusterExtensionInstallStatus struct {
+ // bundle is a required field which represents the identifying attributes of a bundle.
+ //
+ // A "bundle" is a versioned set of content that represents the resources that
+ // need to be applied to a cluster to install a package.
+ //
+ // +kubebuilder:validation:Required
+ Bundle BundleMetadata `json:"bundle"`
+}
+
+// +kubebuilder:object:root=true
+// +kubebuilder:resource:scope=Cluster
+// +kubebuilder:subresource:status
+// +kubebuilder:printcolumn:name="Installed Bundle",type=string,JSONPath=`.status.install.bundle.name`
+// +kubebuilder:printcolumn:name=Version,type=string,JSONPath=`.status.install.bundle.version`
+// +kubebuilder:printcolumn:name="Installed",type=string,JSONPath=`.status.conditions[?(@.type=='Installed')].status`
+// +kubebuilder:printcolumn:name="Progressing",type=string,JSONPath=`.status.conditions[?(@.type=='Progressing')].status`
+// +kubebuilder:printcolumn:name=Age,type=date,JSONPath=`.metadata.creationTimestamp`
+
+// ClusterExtension is the Schema for the clusterextensions API
+type ClusterExtension struct {
+ metav1.TypeMeta `json:",inline"`
+ metav1.ObjectMeta `json:"metadata,omitempty"`
+
+ // spec is an optional field that defines the desired state of the ClusterExtension.
+ // +optional
+ Spec ClusterExtensionSpec `json:"spec,omitempty"`
+
+ // status is an optional field that defines the observed state of the ClusterExtension.
+ // +optional
+ Status ClusterExtensionStatus `json:"status,omitempty"`
+}
+
+// +kubebuilder:object:root=true
+
+// ClusterExtensionList contains a list of ClusterExtension
+type ClusterExtensionList struct {
+ metav1.TypeMeta `json:",inline"`
+
+ // +optional
+ metav1.ListMeta `json:"metadata,omitempty"`
+
+ // items is a required list of ClusterExtension objects.
+ //
+ // +kubebuilder:validation:Required
+ Items []ClusterExtension `json:"items"`
+}
+
+func init() {
+ SchemeBuilder.Register(&ClusterExtension{}, &ClusterExtensionList{})
+}
diff --git a/vendor/github.com/operator-framework/operator-controller/api/v1/common_types.go b/vendor/github.com/operator-framework/operator-controller/api/v1/common_types.go
new file mode 100644
index 00000000000..6008d75570a
--- /dev/null
+++ b/vendor/github.com/operator-framework/operator-controller/api/v1/common_types.go
@@ -0,0 +1,37 @@
+/*
+Copyright 2024.
+
+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 v1
+
+const (
+ TypeInstalled = "Installed"
+ TypeProgressing = "Progressing"
+ TypeServing = "Serving"
+
+ // Progressing reasons
+ ReasonSucceeded = "Succeeded"
+ ReasonRetrying = "Retrying"
+ ReasonBlocked = "Blocked"
+
+ // Terminal reasons
+ ReasonDeprecated = "Deprecated"
+ ReasonFailed = "Failed"
+
+ // Serving reasons
+ ReasonAvailable = "Available"
+ ReasonUnavailable = "Unavailable"
+ ReasonUserSpecifiedUnavailable = "UserSpecifiedUnavailable"
+)
diff --git a/vendor/github.com/operator-framework/operator-controller/api/v1alpha1/groupversion_info.go b/vendor/github.com/operator-framework/operator-controller/api/v1/groupversion_info.go
similarity index 89%
rename from vendor/github.com/operator-framework/operator-controller/api/v1alpha1/groupversion_info.go
rename to vendor/github.com/operator-framework/operator-controller/api/v1/groupversion_info.go
index f46abbf3da4..f2e8582ee53 100644
--- a/vendor/github.com/operator-framework/operator-controller/api/v1alpha1/groupversion_info.go
+++ b/vendor/github.com/operator-framework/operator-controller/api/v1/groupversion_info.go
@@ -14,10 +14,10 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-// Package v1alpha1 contains API Schema definitions for the olm v1alpha1 API group
+// Package v1 contains API Schema definitions for the olm v1 API group
// +kubebuilder:object:generate=true
// +groupName=olm.operatorframework.io
-package v1alpha1
+package v1
import (
"k8s.io/apimachinery/pkg/runtime/schema"
@@ -26,7 +26,7 @@ import (
var (
// GroupVersion is group version used to register these objects
- GroupVersion = schema.GroupVersion{Group: "olm.operatorframework.io", Version: "v1alpha1"}
+ GroupVersion = schema.GroupVersion{Group: "olm.operatorframework.io", Version: "v1"}
// SchemeBuilder is used to add go types to the GroupVersionKind scheme
SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion}
diff --git a/vendor/github.com/operator-framework/operator-controller/api/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/operator-framework/operator-controller/api/v1/zz_generated.deepcopy.go
similarity index 57%
rename from vendor/github.com/operator-framework/operator-controller/api/v1alpha1/zz_generated.deepcopy.go
rename to vendor/github.com/operator-framework/operator-controller/api/v1/zz_generated.deepcopy.go
index 0d57be29f2c..37694f61f3a 100644
--- a/vendor/github.com/operator-framework/operator-controller/api/v1alpha1/zz_generated.deepcopy.go
+++ b/vendor/github.com/operator-framework/operator-controller/api/v1/zz_generated.deepcopy.go
@@ -18,10 +18,10 @@ limitations under the License.
// Code generated by controller-gen. DO NOT EDIT.
-package v1alpha1
+package v1
import (
- "k8s.io/apimachinery/pkg/apis/meta/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
runtime "k8s.io/apimachinery/pkg/runtime"
)
@@ -55,10 +55,39 @@ func (in *CRDUpgradeSafetyPreflightConfig) DeepCopy() *CRDUpgradeSafetyPreflight
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *CatalogFilter) DeepCopyInto(out *CatalogFilter) {
+ *out = *in
+ if in.Channels != nil {
+ in, out := &in.Channels, &out.Channels
+ *out = make([]string, len(*in))
+ copy(*out, *in)
+ }
+ if in.Selector != nil {
+ in, out := &in.Selector, &out.Selector
+ *out = new(metav1.LabelSelector)
+ (*in).DeepCopyInto(*out)
+ }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CatalogFilter.
+func (in *CatalogFilter) DeepCopy() *CatalogFilter {
+ if in == nil {
+ return nil
+ }
+ out := new(CatalogFilter)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *CatalogSource) DeepCopyInto(out *CatalogSource) {
*out = *in
- in.Selector.DeepCopyInto(&out.Selector)
+ if in.Image != nil {
+ in, out := &in.Image, &out.Image
+ *out = new(ImageSource)
+ (*in).DeepCopyInto(*out)
+ }
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CatalogSource.
@@ -71,6 +100,132 @@ func (in *CatalogSource) DeepCopy() *CatalogSource {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ClusterCatalog) DeepCopyInto(out *ClusterCatalog) {
+ *out = *in
+ out.TypeMeta = in.TypeMeta
+ in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+ in.Spec.DeepCopyInto(&out.Spec)
+ in.Status.DeepCopyInto(&out.Status)
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterCatalog.
+func (in *ClusterCatalog) DeepCopy() *ClusterCatalog {
+ if in == nil {
+ return nil
+ }
+ out := new(ClusterCatalog)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ClusterCatalog) 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 *ClusterCatalogList) DeepCopyInto(out *ClusterCatalogList) {
+ *out = *in
+ out.TypeMeta = in.TypeMeta
+ in.ListMeta.DeepCopyInto(&out.ListMeta)
+ if in.Items != nil {
+ in, out := &in.Items, &out.Items
+ *out = make([]ClusterCatalog, len(*in))
+ for i := range *in {
+ (*in)[i].DeepCopyInto(&(*out)[i])
+ }
+ }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterCatalogList.
+func (in *ClusterCatalogList) DeepCopy() *ClusterCatalogList {
+ if in == nil {
+ return nil
+ }
+ out := new(ClusterCatalogList)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ClusterCatalogList) 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 *ClusterCatalogSpec) DeepCopyInto(out *ClusterCatalogSpec) {
+ *out = *in
+ in.Source.DeepCopyInto(&out.Source)
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterCatalogSpec.
+func (in *ClusterCatalogSpec) DeepCopy() *ClusterCatalogSpec {
+ if in == nil {
+ return nil
+ }
+ out := new(ClusterCatalogSpec)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ClusterCatalogStatus) DeepCopyInto(out *ClusterCatalogStatus) {
+ *out = *in
+ if in.Conditions != nil {
+ in, out := &in.Conditions, &out.Conditions
+ *out = make([]metav1.Condition, len(*in))
+ for i := range *in {
+ (*in)[i].DeepCopyInto(&(*out)[i])
+ }
+ }
+ if in.ResolvedSource != nil {
+ in, out := &in.ResolvedSource, &out.ResolvedSource
+ *out = new(ResolvedCatalogSource)
+ (*in).DeepCopyInto(*out)
+ }
+ if in.URLs != nil {
+ in, out := &in.URLs, &out.URLs
+ *out = new(ClusterCatalogURLs)
+ **out = **in
+ }
+ if in.LastUnpacked != nil {
+ in, out := &in.LastUnpacked, &out.LastUnpacked
+ *out = (*in).DeepCopy()
+ }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterCatalogStatus.
+func (in *ClusterCatalogStatus) DeepCopy() *ClusterCatalogStatus {
+ if in == nil {
+ return nil
+ }
+ out := new(ClusterCatalogStatus)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ClusterCatalogURLs) DeepCopyInto(out *ClusterCatalogURLs) {
+ *out = *in
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterCatalogURLs.
+func (in *ClusterCatalogURLs) DeepCopy() *ClusterCatalogURLs {
+ if in == nil {
+ return nil
+ }
+ out := new(ClusterCatalogURLs)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ClusterExtension) DeepCopyInto(out *ClusterExtension) {
*out = *in
@@ -101,7 +256,6 @@ func (in *ClusterExtension) DeepCopyObject() runtime.Object {
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ClusterExtensionInstallConfig) DeepCopyInto(out *ClusterExtensionInstallConfig) {
*out = *in
- out.ServiceAccount = in.ServiceAccount
if in.Preflight != nil {
in, out := &in.Preflight, &out.Preflight
*out = new(PreflightConfig)
@@ -122,11 +276,7 @@ func (in *ClusterExtensionInstallConfig) DeepCopy() *ClusterExtensionInstallConf
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ClusterExtensionInstallStatus) DeepCopyInto(out *ClusterExtensionInstallStatus) {
*out = *in
- if in.Bundle != nil {
- in, out := &in.Bundle, &out.Bundle
- *out = new(BundleMetadata)
- **out = **in
- }
+ out.Bundle = in.Bundle
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterExtensionInstallStatus.
@@ -171,31 +321,16 @@ func (in *ClusterExtensionList) DeepCopyObject() runtime.Object {
return nil
}
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ClusterExtensionResolutionStatus) DeepCopyInto(out *ClusterExtensionResolutionStatus) {
- *out = *in
- if in.Bundle != nil {
- in, out := &in.Bundle, &out.Bundle
- *out = new(BundleMetadata)
- **out = **in
- }
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterExtensionResolutionStatus.
-func (in *ClusterExtensionResolutionStatus) DeepCopy() *ClusterExtensionResolutionStatus {
- if in == nil {
- return nil
- }
- out := new(ClusterExtensionResolutionStatus)
- in.DeepCopyInto(out)
- return out
-}
-
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ClusterExtensionSpec) DeepCopyInto(out *ClusterExtensionSpec) {
*out = *in
+ out.ServiceAccount = in.ServiceAccount
in.Source.DeepCopyInto(&out.Source)
- in.Install.DeepCopyInto(&out.Install)
+ if in.Install != nil {
+ in, out := &in.Install, &out.Install
+ *out = new(ClusterExtensionInstallConfig)
+ (*in).DeepCopyInto(*out)
+ }
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterExtensionSpec.
@@ -211,23 +346,18 @@ func (in *ClusterExtensionSpec) DeepCopy() *ClusterExtensionSpec {
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ClusterExtensionStatus) DeepCopyInto(out *ClusterExtensionStatus) {
*out = *in
- if in.Install != nil {
- in, out := &in.Install, &out.Install
- *out = new(ClusterExtensionInstallStatus)
- (*in).DeepCopyInto(*out)
- }
- if in.Resolution != nil {
- in, out := &in.Resolution, &out.Resolution
- *out = new(ClusterExtensionResolutionStatus)
- (*in).DeepCopyInto(*out)
- }
if in.Conditions != nil {
in, out := &in.Conditions, &out.Conditions
- *out = make([]v1.Condition, len(*in))
+ *out = make([]metav1.Condition, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
+ if in.Install != nil {
+ in, out := &in.Install, &out.Install
+ *out = new(ClusterExtensionInstallStatus)
+ **out = **in
+ }
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterExtensionStatus.
@@ -240,6 +370,26 @@ func (in *ClusterExtensionStatus) DeepCopy() *ClusterExtensionStatus {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ImageSource) DeepCopyInto(out *ImageSource) {
+ *out = *in
+ if in.PollIntervalMinutes != nil {
+ in, out := &in.PollIntervalMinutes, &out.PollIntervalMinutes
+ *out = new(int)
+ **out = **in
+ }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageSource.
+func (in *ImageSource) DeepCopy() *ImageSource {
+ if in == nil {
+ return nil
+ }
+ out := new(ImageSource)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PreflightConfig) DeepCopyInto(out *PreflightConfig) {
*out = *in
@@ -260,6 +410,41 @@ func (in *PreflightConfig) DeepCopy() *PreflightConfig {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ResolvedCatalogSource) DeepCopyInto(out *ResolvedCatalogSource) {
+ *out = *in
+ if in.Image != nil {
+ in, out := &in.Image, &out.Image
+ *out = new(ResolvedImageSource)
+ **out = **in
+ }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResolvedCatalogSource.
+func (in *ResolvedCatalogSource) DeepCopy() *ResolvedCatalogSource {
+ if in == nil {
+ return nil
+ }
+ out := new(ResolvedCatalogSource)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ResolvedImageSource) DeepCopyInto(out *ResolvedImageSource) {
+ *out = *in
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResolvedImageSource.
+func (in *ResolvedImageSource) DeepCopy() *ResolvedImageSource {
+ if in == nil {
+ return nil
+ }
+ out := new(ResolvedImageSource)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ServiceAccountReference) DeepCopyInto(out *ServiceAccountReference) {
*out = *in
@@ -280,7 +465,7 @@ func (in *SourceConfig) DeepCopyInto(out *SourceConfig) {
*out = *in
if in.Catalog != nil {
in, out := &in.Catalog, &out.Catalog
- *out = new(CatalogSource)
+ *out = new(CatalogFilter)
(*in).DeepCopyInto(*out)
}
}
diff --git a/vendor/github.com/operator-framework/operator-controller/api/v1alpha1/clusterextension_types.go b/vendor/github.com/operator-framework/operator-controller/api/v1alpha1/clusterextension_types.go
deleted file mode 100644
index fb8903a34c5..00000000000
--- a/vendor/github.com/operator-framework/operator-controller/api/v1alpha1/clusterextension_types.go
+++ /dev/null
@@ -1,565 +0,0 @@
-/*
-Copyright 2022.
-
-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"
-
- "github.com/operator-framework/operator-controller/internal/conditionsets"
-)
-
-var (
- ClusterExtensionGVK = SchemeBuilder.GroupVersion.WithKind("ClusterExtension")
- ClusterExtensionKind = ClusterExtensionGVK.Kind
-)
-
-type UpgradeConstraintPolicy string
-type CRDUpgradeSafetyPolicy string
-
-const (
- // The extension will only upgrade if the new version satisfies
- // the upgrade constraints set by the package author.
- UpgradeConstraintPolicyEnforce UpgradeConstraintPolicy = "Enforce"
-
- // Unsafe option which allows an extension to be
- // upgraded or downgraded to any available version of the package and
- // ignore the upgrade path designed by package authors.
- // This assumes that users independently verify the outcome of the changes.
- // Use with caution as this can lead to unknown and potentially
- // disastrous results such as data loss.
- UpgradeConstraintPolicyIgnore UpgradeConstraintPolicy = "Ignore"
-)
-
-// ClusterExtensionSpec defines the desired state of ClusterExtension
-type ClusterExtensionSpec struct {
- // source is a required field which selects the installation source of content
- // for this ClusterExtension. Selection is performed by setting the sourceType.
- //
- // Catalog is currently the only implemented sourceType, and setting the
- // sourcetype to "Catalog" requires the catalog field to also be defined.
- //
- // Below is a minimal example of a source definition (in yaml):
- //
- // source:
- // sourceType: Catalog
- // catalog:
- // packageName: example-package
- //
- Source SourceConfig `json:"source"`
-
- // install is a required field used to configure the installation options
- // for the ClusterExtension such as the installation namespace,
- // the service account and the pre-flight check configuration.
- //
- // Below is a minimal example of an installation definition (in yaml):
- // install:
- // namespace: example-namespace
- // serviceAccount:
- // name: example-sa
- Install ClusterExtensionInstallConfig `json:"install"`
-}
-
-const SourceTypeCatalog = "Catalog"
-
-// SourceConfig is a discriminated union which selects the installation source.
-// +union
-// +kubebuilder:validation:XValidation:rule="self.sourceType == 'Catalog' && has(self.catalog)",message="sourceType Catalog requires catalog field"
-type SourceConfig struct {
- // sourceType is a required reference to the type of install source.
- //
- // Allowed values are ["Catalog"]
- //
- // When this field is set to "Catalog", information for determining the appropriate
- // bundle of content to install will be fetched from ClusterCatalog resources existing
- // on the cluster. When using the Catalog sourceType, the catalog field must also be set.
- //
- // +unionDiscriminator
- // +kubebuilder:validation:Enum:="Catalog"
- SourceType string `json:"sourceType"`
-
- // catalog is used to configure how information is sourced from a catalog. This field must be defined when sourceType is set to "Catalog",
- // and must be the only field defined for this sourceType.
- //
- // +optional.
- Catalog *CatalogSource `json:"catalog,omitempty"`
-}
-
-// ClusterExtensionInstallConfig is a union which selects the clusterExtension installation config.
-// ClusterExtensionInstallConfig requires the namespace and serviceAccount which should be used for the installation of packages.
-// +union
-type ClusterExtensionInstallConfig struct {
- // namespace is a reference to the Namespace in which the bundle of
- // content for the package referenced in the packageName field will be applied.
- // The bundle may contain cluster-scoped resources or resources that are
- // applied to other Namespaces. This Namespace is expected to exist.
- //
- // namespace is required, immutable, and follows the DNS label standard
- // as defined in [RFC 1123]. This means that valid values:
- // - Contain no more than 63 characters
- // - Contain only lowercase alphanumeric characters or '-'
- // - Start with an alphanumeric character
- // - End with an alphanumeric character
- //
- // Some examples of valid values are:
- // - some-namespace
- // - 123-namespace
- // - 1-namespace-2
- // - somenamespace
- //
- // Some examples of invalid values are:
- // - -some-namespace
- // - some-namespace-
- // - thisisareallylongnamespacenamethatisgreaterthanthemaximumlength
- // - some.namespace
- //
- // [RFC 1123]: https://tools.ietf.org/html/rfc1123
- //
- //+kubebuilder:validation:Pattern:=^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
- //+kubebuilder:validation:MaxLength:=63
- //+kubebuilder:validation:XValidation:rule="self == oldSelf",message="namespace is immutable"
- Namespace string `json:"namespace"`
-
- // serviceAccount is a required reference to a ServiceAccount that exists
- // in the installNamespace. The provided ServiceAccount is used to install and
- // manage the content for the package specified in the packageName field.
- //
- // In order to successfully install and manage the content for the package,
- // the ServiceAccount provided via this field should be configured with the
- // appropriate permissions to perform the necessary operations on all the
- // resources that are included in the bundle of content being applied.
- ServiceAccount ServiceAccountReference `json:"serviceAccount"`
-
- // preflight is an optional field that can be used to configure the preflight checks run before installation or upgrade of the content for the package specified in the packageName field.
- //
- // When specified, it overrides the default configuration of the preflight checks that are required to execute successfully during an install/upgrade operation.
- //
- // When not specified, the default configuration for each preflight check will be used.
- //
- //+optional
- Preflight *PreflightConfig `json:"preflight,omitempty"`
-}
-
-// CatalogSource defines the required fields for catalog source.
-type CatalogSource struct {
- // packageName is a reference to the name of the package to be installed
- // and is used to filter the content from catalogs.
- //
- // This field is required, immutable and follows the DNS subdomain name
- // standard as defined in [RFC 1123]. This means that valid entries:
- // - Contain no more than 253 characters
- // - Contain only lowercase alphanumeric characters, '-', or '.'
- // - Start with an alphanumeric character
- // - End with an alphanumeric character
- //
- // Some examples of valid values are:
- // - some-package
- // - 123-package
- // - 1-package-2
- // - somepackage
- //
- // Some examples of invalid values are:
- // - -some-package
- // - some-package-
- // - thisisareallylongpackagenamethatisgreaterthanthemaximumlength
- // - some.package
- //
- // [RFC 1123]: https://tools.ietf.org/html/rfc1123
- //
- //+kubebuilder:validation:MaxLength:=253
- //+kubebuilder:validation:Pattern:=^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
- //+kubebuilder:validation:XValidation:rule="self == oldSelf",message="packageName is immutable"
- PackageName string `json:"packageName"`
-
- // version is an optional semver constraint (a specific version or range of versions). When unspecified, the latest version available will be installed.
- //
- // Acceptable version ranges are no longer than 64 characters.
- // Version ranges are composed of comma- or space-delimited values and one or
- // more comparison operators, known as comparison strings. Additional
- // comparison strings can be added using the OR operator (||).
- //
- // # Range Comparisons
- //
- // To specify a version range, you can use a comparison string like ">=3.0,
- // <3.6". When specifying a range, automatic updates will occur within that
- // range. The example comparison string means "install any version greater than
- // or equal to 3.0.0 but less than 3.6.0.". It also states intent that if any
- // upgrades are available within the version range after initial installation,
- // those upgrades should be automatically performed.
- //
- // # Pinned Versions
- //
- // To specify an exact version to install you can use a version range that
- // "pins" to a specific version. When pinning to a specific version, no
- // automatic updates will occur. An example of a pinned version range is
- // "0.6.0", which means "only install version 0.6.0 and never
- // upgrade from this version".
- //
- // # Basic Comparison Operators
- //
- // The basic comparison operators and their meanings are:
- // - "=", equal (not aliased to an operator)
- // - "!=", not equal
- // - "<", less than
- // - ">", greater than
- // - ">=", greater than OR equal to
- // - "<=", less than OR equal to
- //
- // # Wildcard Comparisons
- //
- // You can use the "x", "X", and "*" characters as wildcard characters in all
- // comparison operations. Some examples of using the wildcard characters:
- // - "1.2.x", "1.2.X", and "1.2.*" is equivalent to ">=1.2.0, < 1.3.0"
- // - ">= 1.2.x", ">= 1.2.X", and ">= 1.2.*" is equivalent to ">= 1.2.0"
- // - "<= 2.x", "<= 2.X", and "<= 2.*" is equivalent to "< 3"
- // - "x", "X", and "*" is equivalent to ">= 0.0.0"
- //
- // # Patch Release Comparisons
- //
- // When you want to specify a minor version up to the next major version you
- // can use the "~" character to perform patch comparisons. Some examples:
- // - "~1.2.3" is equivalent to ">=1.2.3, <1.3.0"
- // - "~1" and "~1.x" is equivalent to ">=1, <2"
- // - "~2.3" is equivalent to ">=2.3, <2.4"
- // - "~1.2.x" is equivalent to ">=1.2.0, <1.3.0"
- //
- // # Major Release Comparisons
- //
- // You can use the "^" character to make major release comparisons after a
- // stable 1.0.0 version is published. If there is no stable version published, // minor versions define the stability level. Some examples:
- // - "^1.2.3" is equivalent to ">=1.2.3, <2.0.0"
- // - "^1.2.x" is equivalent to ">=1.2.0, <2.0.0"
- // - "^2.3" is equivalent to ">=2.3, <3"
- // - "^2.x" is equivalent to ">=2.0.0, <3"
- // - "^0.2.3" is equivalent to ">=0.2.3, <0.3.0"
- // - "^0.2" is equivalent to ">=0.2.0, <0.3.0"
- // - "^0.0.3" is equvalent to ">=0.0.3, <0.0.4"
- // - "^0.0" is equivalent to ">=0.0.0, <0.1.0"
- // - "^0" is equivalent to ">=0.0.0, <1.0.0"
- //
- // # OR Comparisons
- // You can use the "||" character to represent an OR operation in the version
- // range. Some examples:
- // - ">=1.2.3, <2.0.0 || >3.0.0"
- // - "^0 || ^3 || ^5"
- //
- // For more information on semver, please see https://semver.org/
- //
- //+kubebuilder:validation:MaxLength:=64
- //+kubebuilder:validation:Pattern=`^(\s*(=||!=|>|<|>=|=>|<=|=<|~|~>|\^)\s*(v?(0|[1-9]\d*|[x|X|\*])(\.(0|[1-9]\d*|x|X|\*]))?(\.(0|[1-9]\d*|x|X|\*))?(-([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?(\+([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?)\s*)((?:\s+|,\s*|\s*\|\|\s*)(=||!=|>|<|>=|=>|<=|=<|~|~>|\^)\s*(v?(0|[1-9]\d*|x|X|\*])(\.(0|[1-9]\d*|x|X|\*))?(\.(0|[1-9]\d*|x|X|\*]))?(-([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?(\+([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?)\s*)*$`
- //+optional
- Version string `json:"version,omitempty"`
-
- // channel is an optional reference to a channel belonging to
- // the package specified in the packageName field.
- //
- // A "channel" is a package author defined stream of updates for an extension.
- //
- // When specified, it is used to constrain the set of installable bundles and
- // the automated upgrade path. This constraint is an AND operation with the
- // version field. For example:
- // - Given channel is set to "foo"
- // - Given version is set to ">=1.0.0, <1.5.0"
- // - Only bundles that exist in channel "foo" AND satisfy the version range comparison will be considered installable
- // - Automatic upgrades will be constrained to upgrade edges defined by the selected channel
- //
- // When unspecified, upgrade edges across all channels will be used to identify valid automatic upgrade paths.
- //
- // This field follows the DNS subdomain name standard as defined in [RFC
- // 1123]. This means that valid entries:
- // - Contain no more than 253 characters
- // - Contain only lowercase alphanumeric characters, '-', or '.'
- // - Start with an alphanumeric character
- // - End with an alphanumeric character
- //
- // Some examples of valid values are:
- // - 1.1.x
- // - alpha
- // - stable
- // - stable-v1
- // - v1-stable
- // - dev-preview
- // - preview
- // - community
- //
- // Some examples of invalid values are:
- // - -some-channel
- // - some-channel-
- // - thisisareallylongchannelnamethatisgreaterthanthemaximumlength
- // - original_40
- // - --default-channel
- //
- // [RFC 1123]: https://tools.ietf.org/html/rfc1123
- //
- //+kubebuilder:validation:MaxLength:=253
- //+kubebuilder:validation:Pattern:=^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
- //+optional
- Channel string `json:"channel,omitempty"`
-
- // selector is an optional field that can be used
- // to filter the set of ClusterCatalogs used in the bundle
- // selection process.
- //
- // When unspecified, all ClusterCatalogs will be used in
- // the bundle selection process.
- //
- //+optional
- Selector metav1.LabelSelector `json:"selector,omitempty"`
-
- // upgradeConstraintPolicy is an optional field that controls whether
- // the upgrade path(s) defined in the catalog are enforced for the package
- // referenced in the packageName field.
- //
- // Allowed values are: ["Enforce", "Ignore"].
- //
- // When this field is set to "Enforce", automatic upgrades will only occur
- // when upgrade constraints specified by the package author are met.
- //
- // When this field is set to "Ignore", the upgrade constraints specified by
- // the package author are ignored. This allows for upgrades and downgrades to
- // any version of the package. This is considered a dangerous operation as it
- // can lead to unknown and potentially disastrous outcomes, such as data
- // loss. It is assumed that users have independently verified changes when
- // using this option.
- //
- // If unspecified, the default value is "Enforce".
- //
- //+kubebuilder:validation:Enum:=Enforce;Ignore
- //+kubebuilder:default:=Enforce
- //+optional
- UpgradeConstraintPolicy UpgradeConstraintPolicy `json:"upgradeConstraintPolicy,omitempty"`
-}
-
-// ServiceAccountReference references a serviceAccount.
-type ServiceAccountReference struct {
- // name is a required, immutable reference to the name of the ServiceAccount
- // to be used for installation and management of the content for the package
- // specified in the packageName field.
- //
- // This ServiceAccount is expected to exist in the installNamespace.
- //
- // This field follows the DNS subdomain name standard as defined in [RFC
- // 1123]. This means that valid values:
- // - Contain no more than 253 characters
- // - Contain only lowercase alphanumeric characters, '-', or '.'
- // - Start with an alphanumeric character
- // - End with an alphanumeric character
- //
- // Some examples of valid values are:
- // - some-serviceaccount
- // - 123-serviceaccount
- // - 1-serviceaccount-2
- // - someserviceaccount
- // - some.serviceaccount
- //
- // Some examples of invalid values are:
- // - -some-serviceaccount
- // - some-serviceaccount-
- //
- // [RFC 1123]: https://tools.ietf.org/html/rfc1123
- //
- //+kubebuilder:validation:MaxLength:=253
- //+kubebuilder:validation:Pattern:=^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
- //+kubebuilder:validation:XValidation:rule="self == oldSelf",message="name is immutable"
- Name string `json:"name"`
-}
-
-// PreflightConfig holds the configuration for the preflight checks.
-type PreflightConfig struct {
- // crdUpgradeSafety is used to configure the CRD Upgrade Safety pre-flight
- // checks that run prior to upgrades of installed content.
- //
- // The CRD Upgrade Safety pre-flight check safeguards from unintended
- // consequences of upgrading a CRD, such as data loss.
- //
- // This field is required if the spec.preflight field is specified.
- CRDUpgradeSafety *CRDUpgradeSafetyPreflightConfig `json:"crdUpgradeSafety"`
-}
-
-// CRDUpgradeSafetyPreflightConfig is the configuration for CRD upgrade safety preflight check.
-type CRDUpgradeSafetyPreflightConfig struct {
- // policy is used to configure the state of the CRD Upgrade Safety pre-flight check.
- //
- // This field is required when the spec.preflight.crdUpgradeSafety field is
- // specified.
- //
- // Allowed values are ["Enabled", "Disabled"]. The default value is "Enabled".
- //
- // When set to "Disabled", the CRD Upgrade Safety pre-flight check will be skipped
- // when performing an upgrade operation. This should be used with caution as
- // unintended consequences such as data loss can occur.
- //
- // When set to "Enabled", the CRD Upgrade Safety pre-flight check will be run when
- // performing an upgrade operation.
- //
- //+kubebuilder:validation:Enum:="Enabled";"Disabled"
- //+kubebuilder:default:=Enabled
- Policy CRDUpgradeSafetyPolicy `json:"policy"`
-}
-
-const (
- // TODO(user): add more Types, here and into init()
- TypeInstalled = "Installed"
- TypeResolved = "Resolved"
-
- // TypeDeprecated is a rollup condition that is present when
- // any of the deprecated conditions are present.
- TypeDeprecated = "Deprecated"
- TypePackageDeprecated = "PackageDeprecated"
- TypeChannelDeprecated = "ChannelDeprecated"
- TypeBundleDeprecated = "BundleDeprecated"
- TypeUnpacked = "Unpacked"
-
- ReasonErrorGettingClient = "ErrorGettingClient"
- ReasonBundleLoadFailed = "BundleLoadFailed"
-
- ReasonInstallationFailed = "InstallationFailed"
- ReasonResolutionFailed = "ResolutionFailed"
-
- ReasonSuccess = "Success"
- ReasonDeprecated = "Deprecated"
- ReasonUpgradeFailed = "UpgradeFailed"
-
- ReasonUnpackSuccess = "UnpackSuccess"
- ReasonUnpackFailed = "UnpackFailed"
-
- ReasonErrorGettingReleaseState = "ErrorGettingReleaseState"
-
- CRDUpgradeSafetyPolicyEnabled CRDUpgradeSafetyPolicy = "Enabled"
- CRDUpgradeSafetyPolicyDisabled CRDUpgradeSafetyPolicy = "Disabled"
-)
-
-func init() {
- // TODO(user): add Types from above
- conditionsets.ConditionTypes = append(conditionsets.ConditionTypes,
- TypeInstalled,
- TypeResolved,
- TypeDeprecated,
- TypePackageDeprecated,
- TypeChannelDeprecated,
- TypeBundleDeprecated,
- TypeUnpacked,
- )
- // TODO(user): add Reasons from above
- conditionsets.ConditionReasons = append(conditionsets.ConditionReasons,
- ReasonResolutionFailed,
- ReasonInstallationFailed,
- ReasonSuccess,
- ReasonDeprecated,
- ReasonUpgradeFailed,
- ReasonBundleLoadFailed,
- ReasonErrorGettingClient,
- ReasonUnpackSuccess,
- ReasonUnpackFailed,
- ReasonErrorGettingReleaseState,
- )
-}
-
-type BundleMetadata struct {
- // name is a required field and is a reference
- // to the name of a bundle
- Name string `json:"name"`
- // version is a required field and is a reference
- // to the version that this bundle represents
- Version string `json:"version"`
-}
-
-// ClusterExtensionStatus defines the observed state of ClusterExtension.
-type ClusterExtensionStatus struct {
- Install *ClusterExtensionInstallStatus `json:"install,omitempty"`
-
- Resolution *ClusterExtensionResolutionStatus `json:"resolution,omitempty"`
-
- // conditions is a representation of the current state for this ClusterExtension.
- // The status is represented by a set of "conditions".
- //
- // Each condition is generally structured in the following format:
- // - Type: a string representation of the condition type. More or less the condition "name".
- // - Status: a string representation of the state of the condition. Can be one of ["True", "False", "Unknown"].
- // - Reason: a string representation of the reason for the current state of the condition. Typically useful for building automation around particular Type+Reason combinations.
- // - Message: a human readable message that further elaborates on the state of the condition
- //
- // The current set of condition types are:
- // - "Installed", represents whether or not the package referenced in the spec.packageName field has been installed
- // - "Resolved", represents whether or not a bundle was found that satisfies the selection criteria outlined in the spec
- // - "Deprecated", represents an aggregation of the PackageDeprecated, ChannelDeprecated, and BundleDeprecated condition types.
- // - "PackageDeprecated", represents whether or not the package specified in the spec.packageName field has been deprecated
- // - "ChannelDeprecated", represents whether or not the channel specified in spec.channel has been deprecated
- // - "BundleDeprecated", represents whether or not the bundle installed is deprecated
- // - "Unpacked", represents whether or not the bundle contents have been successfully unpacked
- //
- // The current set of reasons are:
- // - "ResolutionFailed", this reason is set on the "Resolved" condition when an error has occurred during resolution.
- // - "InstallationFailed", this reason is set on the "Installed" condition when an error has occurred during installation
- // - "Success", this reason is set on the "Resolved" and "Installed" conditions when resolution and installation/upgrading is successful
- // - "UnpackSuccess", this reason is set on the "Unpacked" condition when unpacking a bundle's content is successful
- // - "UnpackFailed", this reason is set on the "Unpacked" condition when an error has been encountered while unpacking the contents of a bundle
- //
- // +patchMergeKey=type
- // +patchStrategy=merge
- // +listType=map
- // +listMapKey=type
- Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"`
-}
-
-type ClusterExtensionInstallStatus struct {
- // bundle is a representation of the currently installed bundle.
- //
- // A "bundle" is a versioned set of content that represents the resources that
- // need to be applied to a cluster to install a package.
- //
- // This field is only updated once a bundle has been successfully installed and
- // once set will only be updated when a new version of the bundle has
- // successfully replaced the currently installed version.
- //
- //+optional
- Bundle *BundleMetadata `json:"bundle,omitempty"`
-}
-
-type ClusterExtensionResolutionStatus struct {
- // bundle is a representation of the bundle that was identified during
- // resolution to meet all installation/upgrade constraints and is slated to be
- // installed or upgraded to.
- //
- //+optional
- Bundle *BundleMetadata `json:"bundle,omitempty"`
-}
-
-//+kubebuilder:object:root=true
-//+kubebuilder:resource:scope=Cluster
-//+kubebuilder:subresource:status
-
-// ClusterExtension is the Schema for the clusterextensions API
-type ClusterExtension struct {
- metav1.TypeMeta `json:",inline"`
- metav1.ObjectMeta `json:"metadata,omitempty"`
-
- Spec ClusterExtensionSpec `json:"spec,omitempty"`
- Status ClusterExtensionStatus `json:"status,omitempty"`
-}
-
-//+kubebuilder:object:root=true
-
-// ClusterExtensionList contains a list of ClusterExtension
-type ClusterExtensionList struct {
- metav1.TypeMeta `json:",inline"`
- metav1.ListMeta `json:"metadata,omitempty"`
- Items []ClusterExtension `json:"items"`
-}
-
-func init() {
- SchemeBuilder.Register(&ClusterExtension{}, &ClusterExtensionList{})
-}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/collectors/collectors.go b/vendor/github.com/prometheus/client_golang/prometheus/collectors/collectors.go
new file mode 100644
index 00000000000..f4c92913a55
--- /dev/null
+++ b/vendor/github.com/prometheus/client_golang/prometheus/collectors/collectors.go
@@ -0,0 +1,40 @@
+// Copyright 2021 The Prometheus 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 collectors provides implementations of prometheus.Collector to
+// conveniently collect process and Go-related metrics.
+package collectors
+
+import "github.com/prometheus/client_golang/prometheus"
+
+// NewBuildInfoCollector returns a collector collecting a single metric
+// "go_build_info" with the constant value 1 and three labels "path", "version",
+// and "checksum". Their label values contain the main module path, version, and
+// checksum, respectively. The labels will only have meaningful values if the
+// binary is built with Go module support and from source code retrieved from
+// the source repository (rather than the local file system). This is usually
+// accomplished by building from outside of GOPATH, specifying the full address
+// of the main package, e.g. "GO111MODULE=on go run
+// github.com/prometheus/client_golang/examples/random". If built without Go
+// module support, all label values will be "unknown". If built with Go module
+// support but using the source code from the local file system, the "path" will
+// be set appropriately, but "checksum" will be empty and "version" will be
+// "(devel)".
+//
+// This collector uses only the build information for the main module. See
+// https://github.com/povilasv/prommod for an example of a collector for the
+// module dependencies.
+func NewBuildInfoCollector() prometheus.Collector {
+ //nolint:staticcheck // Ignore SA1019 until v2.
+ return prometheus.NewBuildInfoCollector()
+}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/collectors/dbstats_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/collectors/dbstats_collector.go
new file mode 100644
index 00000000000..d5a7279fb9c
--- /dev/null
+++ b/vendor/github.com/prometheus/client_golang/prometheus/collectors/dbstats_collector.go
@@ -0,0 +1,119 @@
+// Copyright 2021 The Prometheus 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 collectors
+
+import (
+ "database/sql"
+
+ "github.com/prometheus/client_golang/prometheus"
+)
+
+type dbStatsCollector struct {
+ db *sql.DB
+
+ maxOpenConnections *prometheus.Desc
+
+ openConnections *prometheus.Desc
+ inUseConnections *prometheus.Desc
+ idleConnections *prometheus.Desc
+
+ waitCount *prometheus.Desc
+ waitDuration *prometheus.Desc
+ maxIdleClosed *prometheus.Desc
+ maxIdleTimeClosed *prometheus.Desc
+ maxLifetimeClosed *prometheus.Desc
+}
+
+// NewDBStatsCollector returns a collector that exports metrics about the given *sql.DB.
+// See https://golang.org/pkg/database/sql/#DBStats for more information on stats.
+func NewDBStatsCollector(db *sql.DB, dbName string) prometheus.Collector {
+ fqName := func(name string) string {
+ return "go_sql_" + name
+ }
+ return &dbStatsCollector{
+ db: db,
+ maxOpenConnections: prometheus.NewDesc(
+ fqName("max_open_connections"),
+ "Maximum number of open connections to the database.",
+ nil, prometheus.Labels{"db_name": dbName},
+ ),
+ openConnections: prometheus.NewDesc(
+ fqName("open_connections"),
+ "The number of established connections both in use and idle.",
+ nil, prometheus.Labels{"db_name": dbName},
+ ),
+ inUseConnections: prometheus.NewDesc(
+ fqName("in_use_connections"),
+ "The number of connections currently in use.",
+ nil, prometheus.Labels{"db_name": dbName},
+ ),
+ idleConnections: prometheus.NewDesc(
+ fqName("idle_connections"),
+ "The number of idle connections.",
+ nil, prometheus.Labels{"db_name": dbName},
+ ),
+ waitCount: prometheus.NewDesc(
+ fqName("wait_count_total"),
+ "The total number of connections waited for.",
+ nil, prometheus.Labels{"db_name": dbName},
+ ),
+ waitDuration: prometheus.NewDesc(
+ fqName("wait_duration_seconds_total"),
+ "The total time blocked waiting for a new connection.",
+ nil, prometheus.Labels{"db_name": dbName},
+ ),
+ maxIdleClosed: prometheus.NewDesc(
+ fqName("max_idle_closed_total"),
+ "The total number of connections closed due to SetMaxIdleConns.",
+ nil, prometheus.Labels{"db_name": dbName},
+ ),
+ maxIdleTimeClosed: prometheus.NewDesc(
+ fqName("max_idle_time_closed_total"),
+ "The total number of connections closed due to SetConnMaxIdleTime.",
+ nil, prometheus.Labels{"db_name": dbName},
+ ),
+ maxLifetimeClosed: prometheus.NewDesc(
+ fqName("max_lifetime_closed_total"),
+ "The total number of connections closed due to SetConnMaxLifetime.",
+ nil, prometheus.Labels{"db_name": dbName},
+ ),
+ }
+}
+
+// Describe implements Collector.
+func (c *dbStatsCollector) Describe(ch chan<- *prometheus.Desc) {
+ ch <- c.maxOpenConnections
+ ch <- c.openConnections
+ ch <- c.inUseConnections
+ ch <- c.idleConnections
+ ch <- c.waitCount
+ ch <- c.waitDuration
+ ch <- c.maxIdleClosed
+ ch <- c.maxLifetimeClosed
+ ch <- c.maxIdleTimeClosed
+}
+
+// Collect implements Collector.
+func (c *dbStatsCollector) Collect(ch chan<- prometheus.Metric) {
+ stats := c.db.Stats()
+ ch <- prometheus.MustNewConstMetric(c.maxOpenConnections, prometheus.GaugeValue, float64(stats.MaxOpenConnections))
+ ch <- prometheus.MustNewConstMetric(c.openConnections, prometheus.GaugeValue, float64(stats.OpenConnections))
+ ch <- prometheus.MustNewConstMetric(c.inUseConnections, prometheus.GaugeValue, float64(stats.InUse))
+ ch <- prometheus.MustNewConstMetric(c.idleConnections, prometheus.GaugeValue, float64(stats.Idle))
+ ch <- prometheus.MustNewConstMetric(c.waitCount, prometheus.CounterValue, float64(stats.WaitCount))
+ ch <- prometheus.MustNewConstMetric(c.waitDuration, prometheus.CounterValue, stats.WaitDuration.Seconds())
+ ch <- prometheus.MustNewConstMetric(c.maxIdleClosed, prometheus.CounterValue, float64(stats.MaxIdleClosed))
+ ch <- prometheus.MustNewConstMetric(c.maxLifetimeClosed, prometheus.CounterValue, float64(stats.MaxLifetimeClosed))
+ ch <- prometheus.MustNewConstMetric(c.maxIdleTimeClosed, prometheus.CounterValue, float64(stats.MaxIdleTimeClosed))
+}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/collectors/expvar_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/collectors/expvar_collector.go
new file mode 100644
index 00000000000..b22d862fbc6
--- /dev/null
+++ b/vendor/github.com/prometheus/client_golang/prometheus/collectors/expvar_collector.go
@@ -0,0 +1,57 @@
+// Copyright 2021 The Prometheus 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 collectors
+
+import "github.com/prometheus/client_golang/prometheus"
+
+// NewExpvarCollector returns a newly allocated expvar Collector.
+//
+// An expvar Collector collects metrics from the expvar interface. It provides a
+// quick way to expose numeric values that are already exported via expvar as
+// Prometheus metrics. Note that the data models of expvar and Prometheus are
+// fundamentally different, and that the expvar Collector is inherently slower
+// than native Prometheus metrics. Thus, the expvar Collector is probably great
+// for experiments and prototyping, but you should seriously consider a more
+// direct implementation of Prometheus metrics for monitoring production
+// systems.
+//
+// The exports map has the following meaning:
+//
+// The keys in the map correspond to expvar keys, i.e. for every expvar key you
+// want to export as Prometheus metric, you need an entry in the exports
+// map. The descriptor mapped to each key describes how to export the expvar
+// value. It defines the name and the help string of the Prometheus metric
+// proxying the expvar value. The type will always be Untyped.
+//
+// For descriptors without variable labels, the expvar value must be a number or
+// a bool. The number is then directly exported as the Prometheus sample
+// value. (For a bool, 'false' translates to 0 and 'true' to 1). Expvar values
+// that are not numbers or bools are silently ignored.
+//
+// If the descriptor has one variable label, the expvar value must be an expvar
+// map. The keys in the expvar map become the various values of the one
+// Prometheus label. The values in the expvar map must be numbers or bools again
+// as above.
+//
+// For descriptors with more than one variable label, the expvar must be a
+// nested expvar map, i.e. where the values of the topmost map are maps again
+// etc. until a depth is reached that corresponds to the number of labels. The
+// leaves of that structure must be numbers or bools as above to serve as the
+// sample values.
+//
+// Anything that does not fit into the scheme above is silently ignored.
+func NewExpvarCollector(exports map[string]*prometheus.Desc) prometheus.Collector {
+ //nolint:staticcheck // Ignore SA1019 until v2.
+ return prometheus.NewExpvarCollector(exports)
+}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_go116.go b/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_go116.go
new file mode 100644
index 00000000000..effc57840ae
--- /dev/null
+++ b/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_go116.go
@@ -0,0 +1,49 @@
+// Copyright 2021 The Prometheus 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.
+
+//go:build !go1.17
+// +build !go1.17
+
+package collectors
+
+import "github.com/prometheus/client_golang/prometheus"
+
+// NewGoCollector returns a collector that exports metrics about the current Go
+// process. This includes memory stats. To collect those, runtime.ReadMemStats
+// is called. This requires to “stop the world”, which usually only happens for
+// garbage collection (GC). Take the following implications into account when
+// deciding whether to use the Go collector:
+//
+// 1. The performance impact of stopping the world is the more relevant the more
+// frequently metrics are collected. However, with Go1.9 or later the
+// stop-the-world time per metrics collection is very short (~25µs) so that the
+// performance impact will only matter in rare cases. However, with older Go
+// versions, the stop-the-world duration depends on the heap size and can be
+// quite significant (~1.7 ms/GiB as per
+// https://go-review.googlesource.com/c/go/+/34937).
+//
+// 2. During an ongoing GC, nothing else can stop the world. Therefore, if the
+// metrics collection happens to coincide with GC, it will only complete after
+// GC has finished. Usually, GC is fast enough to not cause problems. However,
+// with a very large heap, GC might take multiple seconds, which is enough to
+// cause scrape timeouts in common setups. To avoid this problem, the Go
+// collector will use the memstats from a previous collection if
+// runtime.ReadMemStats takes more than 1s. However, if there are no previously
+// collected memstats, or their collection is more than 5m ago, the collection
+// will block until runtime.ReadMemStats succeeds.
+//
+// NOTE: The problem is solved in Go 1.15, see
+// https://github.com/golang/go/issues/19812 for the related Go issue.
+func NewGoCollector() prometheus.Collector {
+ return prometheus.NewGoCollector()
+}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_latest.go b/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_latest.go
new file mode 100644
index 00000000000..cc4ef1077e8
--- /dev/null
+++ b/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_latest.go
@@ -0,0 +1,167 @@
+// Copyright 2021 The Prometheus 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.
+
+//go:build go1.17
+// +build go1.17
+
+package collectors
+
+import (
+ "regexp"
+
+ "github.com/prometheus/client_golang/prometheus"
+ "github.com/prometheus/client_golang/prometheus/internal"
+)
+
+var (
+ // MetricsAll allows all the metrics to be collected from Go runtime.
+ MetricsAll = GoRuntimeMetricsRule{regexp.MustCompile("/.*")}
+ // MetricsGC allows only GC metrics to be collected from Go runtime.
+ // e.g. go_gc_cycles_automatic_gc_cycles_total
+ // NOTE: This does not include new class of "/cpu/classes/gc/..." metrics.
+ // Use custom metric rule to access those.
+ MetricsGC = GoRuntimeMetricsRule{regexp.MustCompile(`^/gc/.*`)}
+ // MetricsMemory allows only memory metrics to be collected from Go runtime.
+ // e.g. go_memory_classes_heap_free_bytes
+ MetricsMemory = GoRuntimeMetricsRule{regexp.MustCompile(`^/memory/.*`)}
+ // MetricsScheduler allows only scheduler metrics to be collected from Go runtime.
+ // e.g. go_sched_goroutines_goroutines
+ MetricsScheduler = GoRuntimeMetricsRule{regexp.MustCompile(`^/sched/.*`)}
+ // MetricsDebug allows only debug metrics to be collected from Go runtime.
+ // e.g. go_godebug_non_default_behavior_gocachetest_events_total
+ MetricsDebug = GoRuntimeMetricsRule{regexp.MustCompile(`^/godebug/.*`)}
+)
+
+// WithGoCollectorMemStatsMetricsDisabled disables metrics that is gathered in runtime.MemStats structure such as:
+//
+// go_memstats_alloc_bytes
+// go_memstats_alloc_bytes_total
+// go_memstats_sys_bytes
+// go_memstats_mallocs_total
+// go_memstats_frees_total
+// go_memstats_heap_alloc_bytes
+// go_memstats_heap_sys_bytes
+// go_memstats_heap_idle_bytes
+// go_memstats_heap_inuse_bytes
+// go_memstats_heap_released_bytes
+// go_memstats_heap_objects
+// go_memstats_stack_inuse_bytes
+// go_memstats_stack_sys_bytes
+// go_memstats_mspan_inuse_bytes
+// go_memstats_mspan_sys_bytes
+// go_memstats_mcache_inuse_bytes
+// go_memstats_mcache_sys_bytes
+// go_memstats_buck_hash_sys_bytes
+// go_memstats_gc_sys_bytes
+// go_memstats_other_sys_bytes
+// go_memstats_next_gc_bytes
+//
+// so the metrics known from pre client_golang v1.12.0,
+//
+// NOTE(bwplotka): The above represents runtime.MemStats statistics, but they are
+// actually implemented using new runtime/metrics package. (except skipped go_memstats_gc_cpu_fraction
+// -- see https://github.com/prometheus/client_golang/issues/842#issuecomment-861812034 for explanation).
+//
+// Some users might want to disable this on collector level (although you can use scrape relabelling on Prometheus),
+// because similar metrics can be now obtained using WithGoCollectorRuntimeMetrics. Note that the semantics of new
+// metrics might be different, plus the names can be change over time with different Go version.
+//
+// NOTE(bwplotka): Changing metric names can be tedious at times as the alerts, recording rules and dashboards have to be adjusted.
+// The old metrics are also very useful, with many guides and books written about how to interpret them.
+//
+// As a result our recommendation would be to stick with MemStats like metrics and enable other runtime/metrics if you are interested
+// in advanced insights Go provides. See ExampleGoCollector_WithAdvancedGoMetrics.
+func WithGoCollectorMemStatsMetricsDisabled() func(options *internal.GoCollectorOptions) {
+ return func(o *internal.GoCollectorOptions) {
+ o.DisableMemStatsLikeMetrics = true
+ }
+}
+
+// GoRuntimeMetricsRule allow enabling and configuring particular group of runtime/metrics.
+// TODO(bwplotka): Consider adding ability to adjust buckets.
+type GoRuntimeMetricsRule struct {
+ // Matcher represents RE2 expression will match the runtime/metrics from https://golang.bg/src/runtime/metrics/description.go
+ // Use `regexp.MustCompile` or `regexp.Compile` to create this field.
+ Matcher *regexp.Regexp
+}
+
+// WithGoCollectorRuntimeMetrics allows enabling and configuring particular group of runtime/metrics.
+// See the list of metrics https://golang.bg/src/runtime/metrics/description.go (pick the Go version you use there!).
+// You can use this option in repeated manner, which will add new rules. The order of rules is important, the last rule
+// that matches particular metrics is applied.
+func WithGoCollectorRuntimeMetrics(rules ...GoRuntimeMetricsRule) func(options *internal.GoCollectorOptions) {
+ rs := make([]internal.GoCollectorRule, len(rules))
+ for i, r := range rules {
+ rs[i] = internal.GoCollectorRule{
+ Matcher: r.Matcher,
+ }
+ }
+
+ return func(o *internal.GoCollectorOptions) {
+ o.RuntimeMetricRules = append(o.RuntimeMetricRules, rs...)
+ }
+}
+
+// WithoutGoCollectorRuntimeMetrics allows disabling group of runtime/metrics that you might have added in WithGoCollectorRuntimeMetrics.
+// It behaves similarly to WithGoCollectorRuntimeMetrics just with deny-list semantics.
+func WithoutGoCollectorRuntimeMetrics(matchers ...*regexp.Regexp) func(options *internal.GoCollectorOptions) {
+ rs := make([]internal.GoCollectorRule, len(matchers))
+ for i, m := range matchers {
+ rs[i] = internal.GoCollectorRule{
+ Matcher: m,
+ Deny: true,
+ }
+ }
+
+ return func(o *internal.GoCollectorOptions) {
+ o.RuntimeMetricRules = append(o.RuntimeMetricRules, rs...)
+ }
+}
+
+// GoCollectionOption represents Go collection option flag.
+// Deprecated.
+type GoCollectionOption uint32
+
+const (
+ // GoRuntimeMemStatsCollection represents the metrics represented by runtime.MemStats structure.
+ //
+ // Deprecated: Use WithGoCollectorMemStatsMetricsDisabled() function to disable those metrics in the collector.
+ GoRuntimeMemStatsCollection GoCollectionOption = 1 << iota
+ // GoRuntimeMetricsCollection is the new set of metrics represented by runtime/metrics package.
+ //
+ // Deprecated: Use WithGoCollectorRuntimeMetrics(GoRuntimeMetricsRule{Matcher: regexp.MustCompile("/.*")})
+ // function to enable those metrics in the collector.
+ GoRuntimeMetricsCollection
+)
+
+// WithGoCollections allows enabling different collections for Go collector on top of base metrics.
+//
+// Deprecated: Use WithGoCollectorRuntimeMetrics() and WithGoCollectorMemStatsMetricsDisabled() instead to control metrics.
+func WithGoCollections(flags GoCollectionOption) func(options *internal.GoCollectorOptions) {
+ return func(options *internal.GoCollectorOptions) {
+ if flags&GoRuntimeMemStatsCollection == 0 {
+ WithGoCollectorMemStatsMetricsDisabled()(options)
+ }
+
+ if flags&GoRuntimeMetricsCollection != 0 {
+ WithGoCollectorRuntimeMetrics(GoRuntimeMetricsRule{Matcher: regexp.MustCompile("/.*")})(options)
+ }
+ }
+}
+
+// NewGoCollector returns a collector that exports metrics about the current Go
+// process using debug.GCStats (base metrics) and runtime/metrics (both in MemStats style and new ones).
+func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) prometheus.Collector {
+ //nolint:staticcheck // Ignore SA1019 until v2.
+ return prometheus.NewGoCollector(opts...)
+}
diff --git a/vendor/github.com/prometheus/client_golang/prometheus/collectors/process_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/collectors/process_collector.go
new file mode 100644
index 00000000000..24558f50a76
--- /dev/null
+++ b/vendor/github.com/prometheus/client_golang/prometheus/collectors/process_collector.go
@@ -0,0 +1,56 @@
+// Copyright 2021 The Prometheus 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 collectors
+
+import "github.com/prometheus/client_golang/prometheus"
+
+// ProcessCollectorOpts defines the behavior of a process metrics collector
+// created with NewProcessCollector.
+type ProcessCollectorOpts struct {
+ // PidFn returns the PID of the process the collector collects metrics
+ // for. It is called upon each collection. By default, the PID of the
+ // current process is used, as determined on construction time by
+ // calling os.Getpid().
+ PidFn func() (int, error)
+ // If non-empty, each of the collected metrics is prefixed by the
+ // provided string and an underscore ("_").
+ Namespace string
+ // If true, any error encountered during collection is reported as an
+ // invalid metric (see NewInvalidMetric). Otherwise, errors are ignored
+ // and the collected metrics will be incomplete. (Possibly, no metrics
+ // will be collected at all.) While that's usually not desired, it is
+ // appropriate for the common "mix-in" of process metrics, where process
+ // metrics are nice to have, but failing to collect them should not
+ // disrupt the collection of the remaining metrics.
+ ReportErrors bool
+}
+
+// NewProcessCollector returns a collector which exports the current state of
+// process metrics including CPU, memory and file descriptor usage as well as
+// the process start time. The detailed behavior is defined by the provided
+// ProcessCollectorOpts. The zero value of ProcessCollectorOpts creates a
+// collector for the current process with an empty namespace string and no error
+// reporting.
+//
+// The collector only works on operating systems with a Linux-style proc
+// filesystem and on Microsoft Windows. On other operating systems, it will not
+// collect any metrics.
+func NewProcessCollector(opts ProcessCollectorOpts) prometheus.Collector {
+ //nolint:staticcheck // Ignore SA1019 until v2.
+ return prometheus.NewProcessCollector(prometheus.ProcessCollectorOpts{
+ PidFn: opts.PidFn,
+ Namespace: opts.Namespace,
+ ReportErrors: opts.ReportErrors,
+ })
+}
diff --git a/vendor/golang.org/x/exp/constraints/constraints.go b/vendor/golang.org/x/exp/constraints/constraints.go
deleted file mode 100644
index 2c033dff47e..00000000000
--- a/vendor/golang.org/x/exp/constraints/constraints.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package constraints defines a set of useful constraints to be used
-// with type parameters.
-package constraints
-
-// Signed is a constraint that permits any signed integer type.
-// If future releases of Go add new predeclared signed integer types,
-// this constraint will be modified to include them.
-type Signed interface {
- ~int | ~int8 | ~int16 | ~int32 | ~int64
-}
-
-// Unsigned is a constraint that permits any unsigned integer type.
-// If future releases of Go add new predeclared unsigned integer types,
-// this constraint will be modified to include them.
-type Unsigned interface {
- ~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr
-}
-
-// Integer is a constraint that permits any integer type.
-// If future releases of Go add new predeclared integer types,
-// this constraint will be modified to include them.
-type Integer interface {
- Signed | Unsigned
-}
-
-// Float is a constraint that permits any floating-point type.
-// If future releases of Go add new predeclared floating-point types,
-// this constraint will be modified to include them.
-type Float interface {
- ~float32 | ~float64
-}
-
-// Complex is a constraint that permits any complex numeric type.
-// If future releases of Go add new predeclared complex numeric types,
-// this constraint will be modified to include them.
-type Complex interface {
- ~complex64 | ~complex128
-}
-
-// Ordered is a constraint that permits any ordered type: any type
-// that supports the operators < <= >= >.
-// If future releases of Go add new ordered types,
-// this constraint will be modified to include them.
-type Ordered interface {
- Integer | Float | ~string
-}
diff --git a/vendor/golang.org/x/exp/maps/maps.go b/vendor/golang.org/x/exp/maps/maps.go
index ecc0dabb74d..4a9747ef40a 100644
--- a/vendor/golang.org/x/exp/maps/maps.go
+++ b/vendor/golang.org/x/exp/maps/maps.go
@@ -5,9 +5,16 @@
// Package maps defines various functions useful with maps of any type.
package maps
+import "maps"
+
// Keys returns the keys of the map m.
// The keys will be in an indeterminate order.
+//
+// The simplest true equivalent using the standard library is:
+//
+// slices.AppendSeq(make([]K, 0, len(m)), maps.Keys(m))
func Keys[M ~map[K]V, K comparable, V any](m M) []K {
+
r := make([]K, 0, len(m))
for k := range m {
r = append(r, k)
@@ -17,7 +24,12 @@ func Keys[M ~map[K]V, K comparable, V any](m M) []K {
// Values returns the values of the map m.
// The values will be in an indeterminate order.
+//
+// The simplest true equivalent using the standard library is:
+//
+// slices.AppendSeq(make([]V, 0, len(m)), maps.Values(m))
func Values[M ~map[K]V, K comparable, V any](m M) []V {
+
r := make([]V, 0, len(m))
for _, v := range m {
r = append(r, v)
@@ -27,68 +39,48 @@ func Values[M ~map[K]V, K comparable, V any](m M) []V {
// Equal reports whether two maps contain the same key/value pairs.
// Values are compared using ==.
+//
+//go:fix inline
func Equal[M1, M2 ~map[K]V, K, V comparable](m1 M1, m2 M2) bool {
- if len(m1) != len(m2) {
- return false
- }
- for k, v1 := range m1 {
- if v2, ok := m2[k]; !ok || v1 != v2 {
- return false
- }
- }
- return true
+ return maps.Equal(m1, m2)
}
// EqualFunc is like Equal, but compares values using eq.
// Keys are still compared with ==.
+//
+//go:fix inline
func EqualFunc[M1 ~map[K]V1, M2 ~map[K]V2, K comparable, V1, V2 any](m1 M1, m2 M2, eq func(V1, V2) bool) bool {
- if len(m1) != len(m2) {
- return false
- }
- for k, v1 := range m1 {
- if v2, ok := m2[k]; !ok || !eq(v1, v2) {
- return false
- }
- }
- return true
+ return maps.EqualFunc(m1, m2, eq)
}
// Clear removes all entries from m, leaving it empty.
+//
+//go:fix inline
func Clear[M ~map[K]V, K comparable, V any](m M) {
- for k := range m {
- delete(m, k)
- }
+ clear(m)
}
// Clone returns a copy of m. This is a shallow clone:
// the new keys and values are set using ordinary assignment.
+//
+//go:fix inline
func Clone[M ~map[K]V, K comparable, V any](m M) M {
- // Preserve nil in case it matters.
- if m == nil {
- return nil
- }
- r := make(M, len(m))
- for k, v := range m {
- r[k] = v
- }
- return r
+ return maps.Clone(m)
}
// Copy copies all key/value pairs in src adding them to dst.
// When a key in src is already present in dst,
// the value in dst will be overwritten by the value associated
// with the key in src.
+//
+//go:fix inline
func Copy[M1 ~map[K]V, M2 ~map[K]V, K comparable, V any](dst M1, src M2) {
- for k, v := range src {
- dst[k] = v
- }
+ maps.Copy(dst, src)
}
// DeleteFunc deletes any key/value pairs from m for which del returns true.
+//
+//go:fix inline
func DeleteFunc[M ~map[K]V, K comparable, V any](m M, del func(K, V) bool) {
- for k, v := range m {
- if del(k, v) {
- delete(m, k)
- }
- }
+ maps.DeleteFunc(m, del)
}
diff --git a/vendor/golang.org/x/exp/slices/cmp.go b/vendor/golang.org/x/exp/slices/cmp.go
deleted file mode 100644
index fbf1934a061..00000000000
--- a/vendor/golang.org/x/exp/slices/cmp.go
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2023 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package slices
-
-import "golang.org/x/exp/constraints"
-
-// min is a version of the predeclared function from the Go 1.21 release.
-func min[T constraints.Ordered](a, b T) T {
- if a < b || isNaN(a) {
- return a
- }
- return b
-}
-
-// max is a version of the predeclared function from the Go 1.21 release.
-func max[T constraints.Ordered](a, b T) T {
- if a > b || isNaN(a) {
- return a
- }
- return b
-}
-
-// cmpLess is a copy of cmp.Less from the Go 1.21 release.
-func cmpLess[T constraints.Ordered](x, y T) bool {
- return (isNaN(x) && !isNaN(y)) || x < y
-}
-
-// cmpCompare is a copy of cmp.Compare from the Go 1.21 release.
-func cmpCompare[T constraints.Ordered](x, y T) int {
- xNaN := isNaN(x)
- yNaN := isNaN(y)
- if xNaN && yNaN {
- return 0
- }
- if xNaN || x < y {
- return -1
- }
- if yNaN || x > y {
- return +1
- }
- return 0
-}
diff --git a/vendor/golang.org/x/exp/slices/slices.go b/vendor/golang.org/x/exp/slices/slices.go
index 46ceac34399..da0df370da1 100644
--- a/vendor/golang.org/x/exp/slices/slices.go
+++ b/vendor/golang.org/x/exp/slices/slices.go
@@ -6,9 +6,8 @@
package slices
import (
- "unsafe"
-
- "golang.org/x/exp/constraints"
+ "cmp"
+ "slices"
)
// Equal reports whether two slices are equal: the same length and all
@@ -16,16 +15,10 @@ import (
// Otherwise, the elements are compared in increasing index order, and the
// comparison stops at the first unequal pair.
// Floating point NaNs are not considered equal.
+//
+//go:fix inline
func Equal[S ~[]E, E comparable](s1, s2 S) bool {
- if len(s1) != len(s2) {
- return false
- }
- for i := range s1 {
- if s1[i] != s2[i] {
- return false
- }
- }
- return true
+ return slices.Equal(s1, s2)
}
// EqualFunc reports whether two slices are equal using an equality
@@ -33,17 +26,10 @@ func Equal[S ~[]E, E comparable](s1, s2 S) bool {
// EqualFunc returns false. Otherwise, the elements are compared in
// increasing index order, and the comparison stops at the first index
// for which eq returns false.
+//
+//go:fix inline
func EqualFunc[S1 ~[]E1, S2 ~[]E2, E1, E2 any](s1 S1, s2 S2, eq func(E1, E2) bool) bool {
- if len(s1) != len(s2) {
- return false
- }
- for i, v1 := range s1 {
- v2 := s2[i]
- if !eq(v1, v2) {
- return false
- }
- }
- return true
+ return slices.EqualFunc(s1, s2, eq)
}
// Compare compares the elements of s1 and s2, using [cmp.Compare] on each pair
@@ -53,20 +39,10 @@ func EqualFunc[S1 ~[]E1, S2 ~[]E2, E1, E2 any](s1 S1, s2 S2, eq func(E1, E2) boo
// If both slices are equal until one of them ends, the shorter slice is
// considered less than the longer one.
// The result is 0 if s1 == s2, -1 if s1 < s2, and +1 if s1 > s2.
-func Compare[S ~[]E, E constraints.Ordered](s1, s2 S) int {
- for i, v1 := range s1 {
- if i >= len(s2) {
- return +1
- }
- v2 := s2[i]
- if c := cmpCompare(v1, v2); c != 0 {
- return c
- }
- }
- if len(s1) < len(s2) {
- return -1
- }
- return 0
+//
+//go:fix inline
+func Compare[S ~[]E, E cmp.Ordered](s1, s2 S) int {
+ return slices.Compare(s1, s2)
}
// CompareFunc is like [Compare] but uses a custom comparison function on each
@@ -74,53 +50,41 @@ func Compare[S ~[]E, E constraints.Ordered](s1, s2 S) int {
// The result is the first non-zero result of cmp; if cmp always
// returns 0 the result is 0 if len(s1) == len(s2), -1 if len(s1) < len(s2),
// and +1 if len(s1) > len(s2).
+//
+//go:fix inline
func CompareFunc[S1 ~[]E1, S2 ~[]E2, E1, E2 any](s1 S1, s2 S2, cmp func(E1, E2) int) int {
- for i, v1 := range s1 {
- if i >= len(s2) {
- return +1
- }
- v2 := s2[i]
- if c := cmp(v1, v2); c != 0 {
- return c
- }
- }
- if len(s1) < len(s2) {
- return -1
- }
- return 0
+ return slices.CompareFunc(s1, s2, cmp)
}
// Index returns the index of the first occurrence of v in s,
// or -1 if not present.
+//
+//go:fix inline
func Index[S ~[]E, E comparable](s S, v E) int {
- for i := range s {
- if v == s[i] {
- return i
- }
- }
- return -1
+ return slices.Index(s, v)
}
// IndexFunc returns the first index i satisfying f(s[i]),
// or -1 if none do.
+//
+//go:fix inline
func IndexFunc[S ~[]E, E any](s S, f func(E) bool) int {
- for i := range s {
- if f(s[i]) {
- return i
- }
- }
- return -1
+ return slices.IndexFunc(s, f)
}
// Contains reports whether v is present in s.
+//
+//go:fix inline
func Contains[S ~[]E, E comparable](s S, v E) bool {
- return Index(s, v) >= 0
+ return slices.Contains(s, v)
}
// ContainsFunc reports whether at least one
// element e of s satisfies f(e).
+//
+//go:fix inline
func ContainsFunc[S ~[]E, E any](s S, f func(E) bool) bool {
- return IndexFunc(s, f) >= 0
+ return slices.ContainsFunc(s, f)
}
// Insert inserts the values v... into s at index i,
@@ -130,93 +94,10 @@ func ContainsFunc[S ~[]E, E any](s S, f func(E) bool) bool {
// and r[i+len(v)] == value originally at r[i].
// Insert panics if i is out of range.
// This function is O(len(s) + len(v)).
+//
+//go:fix inline
func Insert[S ~[]E, E any](s S, i int, v ...E) S {
- m := len(v)
- if m == 0 {
- return s
- }
- n := len(s)
- if i == n {
- return append(s, v...)
- }
- if n+m > cap(s) {
- // Use append rather than make so that we bump the size of
- // the slice up to the next storage class.
- // This is what Grow does but we don't call Grow because
- // that might copy the values twice.
- s2 := append(s[:i], make(S, n+m-i)...)
- copy(s2[i:], v)
- copy(s2[i+m:], s[i:])
- return s2
- }
- s = s[:n+m]
-
- // before:
- // s: aaaaaaaabbbbccccccccdddd
- // ^ ^ ^ ^
- // i i+m n n+m
- // after:
- // s: aaaaaaaavvvvbbbbcccccccc
- // ^ ^ ^ ^
- // i i+m n n+m
- //
- // a are the values that don't move in s.
- // v are the values copied in from v.
- // b and c are the values from s that are shifted up in index.
- // d are the values that get overwritten, never to be seen again.
-
- if !overlaps(v, s[i+m:]) {
- // Easy case - v does not overlap either the c or d regions.
- // (It might be in some of a or b, or elsewhere entirely.)
- // The data we copy up doesn't write to v at all, so just do it.
-
- copy(s[i+m:], s[i:])
-
- // Now we have
- // s: aaaaaaaabbbbbbbbcccccccc
- // ^ ^ ^ ^
- // i i+m n n+m
- // Note the b values are duplicated.
-
- copy(s[i:], v)
-
- // Now we have
- // s: aaaaaaaavvvvbbbbcccccccc
- // ^ ^ ^ ^
- // i i+m n n+m
- // That's the result we want.
- return s
- }
-
- // The hard case - v overlaps c or d. We can't just shift up
- // the data because we'd move or clobber the values we're trying
- // to insert.
- // So instead, write v on top of d, then rotate.
- copy(s[n:], v)
-
- // Now we have
- // s: aaaaaaaabbbbccccccccvvvv
- // ^ ^ ^ ^
- // i i+m n n+m
-
- rotateRight(s[i:], m)
-
- // Now we have
- // s: aaaaaaaavvvvbbbbcccccccc
- // ^ ^ ^ ^
- // i i+m n n+m
- // That's the result we want.
- return s
-}
-
-// clearSlice sets all elements up to the length of s to the zero value of E.
-// We may use the builtin clear func instead, and remove clearSlice, when upgrading
-// to Go 1.21+.
-func clearSlice[S ~[]E, E any](s S) {
- var zero E
- for i := range s {
- s[i] = zero
- }
+ return slices.Insert(s, i, v...)
}
// Delete removes the elements s[i:j] from s, returning the modified slice.
@@ -224,136 +105,36 @@ func clearSlice[S ~[]E, E any](s S) {
// Delete is O(len(s)-i), so if many items must be deleted, it is better to
// make a single call deleting them all together than to delete one at a time.
// Delete zeroes the elements s[len(s)-(j-i):len(s)].
+//
+//go:fix inline
func Delete[S ~[]E, E any](s S, i, j int) S {
- _ = s[i:j:len(s)] // bounds check
-
- if i == j {
- return s
- }
-
- oldlen := len(s)
- s = append(s[:i], s[j:]...)
- clearSlice(s[len(s):oldlen]) // zero/nil out the obsolete elements, for GC
- return s
+ return slices.Delete(s, i, j)
}
// DeleteFunc removes any elements from s for which del returns true,
// returning the modified slice.
// DeleteFunc zeroes the elements between the new length and the original length.
+//
+//go:fix inline
func DeleteFunc[S ~[]E, E any](s S, del func(E) bool) S {
- i := IndexFunc(s, del)
- if i == -1 {
- return s
- }
- // Don't start copying elements until we find one to delete.
- for j := i + 1; j < len(s); j++ {
- if v := s[j]; !del(v) {
- s[i] = v
- i++
- }
- }
- clearSlice(s[i:]) // zero/nil out the obsolete elements, for GC
- return s[:i]
+ return slices.DeleteFunc(s, del)
}
// Replace replaces the elements s[i:j] by the given v, and returns the
// modified slice. Replace panics if s[i:j] is not a valid slice of s.
// When len(v) < (j-i), Replace zeroes the elements between the new length and the original length.
+//
+//go:fix inline
func Replace[S ~[]E, E any](s S, i, j int, v ...E) S {
- _ = s[i:j] // verify that i:j is a valid subslice
-
- if i == j {
- return Insert(s, i, v...)
- }
- if j == len(s) {
- return append(s[:i], v...)
- }
-
- tot := len(s[:i]) + len(v) + len(s[j:])
- if tot > cap(s) {
- // Too big to fit, allocate and copy over.
- s2 := append(s[:i], make(S, tot-i)...) // See Insert
- copy(s2[i:], v)
- copy(s2[i+len(v):], s[j:])
- return s2
- }
-
- r := s[:tot]
-
- if i+len(v) <= j {
- // Easy, as v fits in the deleted portion.
- copy(r[i:], v)
- if i+len(v) != j {
- copy(r[i+len(v):], s[j:])
- }
- clearSlice(s[tot:]) // zero/nil out the obsolete elements, for GC
- return r
- }
-
- // We are expanding (v is bigger than j-i).
- // The situation is something like this:
- // (example has i=4,j=8,len(s)=16,len(v)=6)
- // s: aaaaxxxxbbbbbbbbyy
- // ^ ^ ^ ^
- // i j len(s) tot
- // a: prefix of s
- // x: deleted range
- // b: more of s
- // y: area to expand into
-
- if !overlaps(r[i+len(v):], v) {
- // Easy, as v is not clobbered by the first copy.
- copy(r[i+len(v):], s[j:])
- copy(r[i:], v)
- return r
- }
-
- // This is a situation where we don't have a single place to which
- // we can copy v. Parts of it need to go to two different places.
- // We want to copy the prefix of v into y and the suffix into x, then
- // rotate |y| spots to the right.
- //
- // v[2:] v[:2]
- // | |
- // s: aaaavvvvbbbbbbbbvv
- // ^ ^ ^ ^
- // i j len(s) tot
- //
- // If either of those two destinations don't alias v, then we're good.
- y := len(v) - (j - i) // length of y portion
-
- if !overlaps(r[i:j], v) {
- copy(r[i:j], v[y:])
- copy(r[len(s):], v[:y])
- rotateRight(r[i:], y)
- return r
- }
- if !overlaps(r[len(s):], v) {
- copy(r[len(s):], v[:y])
- copy(r[i:j], v[y:])
- rotateRight(r[i:], y)
- return r
- }
-
- // Now we know that v overlaps both x and y.
- // That means that the entirety of b is *inside* v.
- // So we don't need to preserve b at all; instead we
- // can copy v first, then copy the b part of v out of
- // v to the right destination.
- k := startIdx(v, s[j:])
- copy(r[i:], v)
- copy(r[i+len(v):], r[i+k:])
- return r
+ return slices.Replace(s, i, j, v...)
}
// Clone returns a copy of the slice.
// The elements are copied using assignment, so this is a shallow clone.
+//
+//go:fix inline
func Clone[S ~[]E, E any](s S) S {
- // Preserve nil in case it matters.
- if s == nil {
- return nil
- }
- return append(S([]E{}), s...)
+ return slices.Clone(s)
}
// Compact replaces consecutive runs of equal elements with a single copy.
@@ -361,155 +142,41 @@ func Clone[S ~[]E, E any](s S) S {
// Compact modifies the contents of the slice s and returns the modified slice,
// which may have a smaller length.
// Compact zeroes the elements between the new length and the original length.
+//
+//go:fix inline
func Compact[S ~[]E, E comparable](s S) S {
- if len(s) < 2 {
- return s
- }
- i := 1
- for k := 1; k < len(s); k++ {
- if s[k] != s[k-1] {
- if i != k {
- s[i] = s[k]
- }
- i++
- }
- }
- clearSlice(s[i:]) // zero/nil out the obsolete elements, for GC
- return s[:i]
+ return slices.Compact(s)
}
// CompactFunc is like [Compact] but uses an equality function to compare elements.
// For runs of elements that compare equal, CompactFunc keeps the first one.
// CompactFunc zeroes the elements between the new length and the original length.
+//
+//go:fix inline
func CompactFunc[S ~[]E, E any](s S, eq func(E, E) bool) S {
- if len(s) < 2 {
- return s
- }
- i := 1
- for k := 1; k < len(s); k++ {
- if !eq(s[k], s[k-1]) {
- if i != k {
- s[i] = s[k]
- }
- i++
- }
- }
- clearSlice(s[i:]) // zero/nil out the obsolete elements, for GC
- return s[:i]
+ return slices.CompactFunc(s, eq)
}
// Grow increases the slice's capacity, if necessary, to guarantee space for
// another n elements. After Grow(n), at least n elements can be appended
// to the slice without another allocation. If n is negative or too large to
// allocate the memory, Grow panics.
+//
+//go:fix inline
func Grow[S ~[]E, E any](s S, n int) S {
- if n < 0 {
- panic("cannot be negative")
- }
- if n -= cap(s) - len(s); n > 0 {
- // TODO(https://go.dev/issue/53888): Make using []E instead of S
- // to workaround a compiler bug where the runtime.growslice optimization
- // does not take effect. Revert when the compiler is fixed.
- s = append([]E(s)[:cap(s)], make([]E, n)...)[:len(s)]
- }
- return s
+ return slices.Grow(s, n)
}
// Clip removes unused capacity from the slice, returning s[:len(s):len(s)].
-func Clip[S ~[]E, E any](s S) S {
- return s[:len(s):len(s)]
-}
-
-// Rotation algorithm explanation:
-//
-// rotate left by 2
-// start with
-// 0123456789
-// split up like this
-// 01 234567 89
-// swap first 2 and last 2
-// 89 234567 01
-// join first parts
-// 89234567 01
-// recursively rotate first left part by 2
-// 23456789 01
-// join at the end
-// 2345678901
//
-// rotate left by 8
-// start with
-// 0123456789
-// split up like this
-// 01 234567 89
-// swap first 2 and last 2
-// 89 234567 01
-// join last parts
-// 89 23456701
-// recursively rotate second part left by 6
-// 89 01234567
-// join at the end
-// 8901234567
-
-// TODO: There are other rotate algorithms.
-// This algorithm has the desirable property that it moves each element exactly twice.
-// The triple-reverse algorithm is simpler and more cache friendly, but takes more writes.
-// The follow-cycles algorithm can be 1-write but it is not very cache friendly.
-
-// rotateLeft rotates b left by n spaces.
-// s_final[i] = s_orig[i+r], wrapping around.
-func rotateLeft[E any](s []E, r int) {
- for r != 0 && r != len(s) {
- if r*2 <= len(s) {
- swap(s[:r], s[len(s)-r:])
- s = s[:len(s)-r]
- } else {
- swap(s[:len(s)-r], s[r:])
- s, r = s[len(s)-r:], r*2-len(s)
- }
- }
-}
-func rotateRight[E any](s []E, r int) {
- rotateLeft(s, len(s)-r)
-}
-
-// swap swaps the contents of x and y. x and y must be equal length and disjoint.
-func swap[E any](x, y []E) {
- for i := 0; i < len(x); i++ {
- x[i], y[i] = y[i], x[i]
- }
-}
-
-// overlaps reports whether the memory ranges a[0:len(a)] and b[0:len(b)] overlap.
-func overlaps[E any](a, b []E) bool {
- if len(a) == 0 || len(b) == 0 {
- return false
- }
- elemSize := unsafe.Sizeof(a[0])
- if elemSize == 0 {
- return false
- }
- // TODO: use a runtime/unsafe facility once one becomes available. See issue 12445.
- // Also see crypto/internal/alias/alias.go:AnyOverlap
- return uintptr(unsafe.Pointer(&a[0])) <= uintptr(unsafe.Pointer(&b[len(b)-1]))+(elemSize-1) &&
- uintptr(unsafe.Pointer(&b[0])) <= uintptr(unsafe.Pointer(&a[len(a)-1]))+(elemSize-1)
-}
-
-// startIdx returns the index in haystack where the needle starts.
-// prerequisite: the needle must be aliased entirely inside the haystack.
-func startIdx[E any](haystack, needle []E) int {
- p := &needle[0]
- for i := range haystack {
- if p == &haystack[i] {
- return i
- }
- }
- // TODO: what if the overlap is by a non-integral number of Es?
- panic("needle not found")
+//go:fix inline
+func Clip[S ~[]E, E any](s S) S {
+ return slices.Clip(s)
}
// Reverse reverses the elements of the slice in place.
+//
+//go:fix inline
func Reverse[S ~[]E, E any](s S) {
- for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
- s[i], s[j] = s[j], s[i]
- }
+ slices.Reverse(s)
}
diff --git a/vendor/golang.org/x/exp/slices/sort.go b/vendor/golang.org/x/exp/slices/sort.go
index f58bbc7ba4d..bd91a8d402f 100644
--- a/vendor/golang.org/x/exp/slices/sort.go
+++ b/vendor/golang.org/x/exp/slices/sort.go
@@ -2,21 +2,19 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-//go:generate go run $GOROOT/src/sort/gen_sort_variants.go -exp
-
package slices
import (
- "math/bits"
-
- "golang.org/x/exp/constraints"
+ "cmp"
+ "slices"
)
// Sort sorts a slice of any ordered type in ascending order.
// When sorting floating-point numbers, NaNs are ordered before other values.
-func Sort[S ~[]E, E constraints.Ordered](x S) {
- n := len(x)
- pdqsortOrdered(x, 0, n, bits.Len(uint(n)))
+//
+//go:fix inline
+func Sort[S ~[]E, E cmp.Ordered](x S) {
+ slices.Sort(x)
}
// SortFunc sorts the slice x in ascending order as determined by the cmp
@@ -28,119 +26,79 @@ func Sort[S ~[]E, E constraints.Ordered](x S) {
// SortFunc requires that cmp is a strict weak ordering.
// See https://en.wikipedia.org/wiki/Weak_ordering#Strict_weak_orderings.
// To indicate 'uncomparable', return 0 from the function.
+//
+//go:fix inline
func SortFunc[S ~[]E, E any](x S, cmp func(a, b E) int) {
- n := len(x)
- pdqsortCmpFunc(x, 0, n, bits.Len(uint(n)), cmp)
+ slices.SortFunc(x, cmp)
}
// SortStableFunc sorts the slice x while keeping the original order of equal
// elements, using cmp to compare elements in the same way as [SortFunc].
+//
+//go:fix inline
func SortStableFunc[S ~[]E, E any](x S, cmp func(a, b E) int) {
- stableCmpFunc(x, len(x), cmp)
+ slices.SortStableFunc(x, cmp)
}
// IsSorted reports whether x is sorted in ascending order.
-func IsSorted[S ~[]E, E constraints.Ordered](x S) bool {
- for i := len(x) - 1; i > 0; i-- {
- if cmpLess(x[i], x[i-1]) {
- return false
- }
- }
- return true
+//
+//go:fix inline
+func IsSorted[S ~[]E, E cmp.Ordered](x S) bool {
+ return slices.IsSorted(x)
}
// IsSortedFunc reports whether x is sorted in ascending order, with cmp as the
// comparison function as defined by [SortFunc].
+//
+//go:fix inline
func IsSortedFunc[S ~[]E, E any](x S, cmp func(a, b E) int) bool {
- for i := len(x) - 1; i > 0; i-- {
- if cmp(x[i], x[i-1]) < 0 {
- return false
- }
- }
- return true
+ return slices.IsSortedFunc(x, cmp)
}
// Min returns the minimal value in x. It panics if x is empty.
// For floating-point numbers, Min propagates NaNs (any NaN value in x
// forces the output to be NaN).
-func Min[S ~[]E, E constraints.Ordered](x S) E {
- if len(x) < 1 {
- panic("slices.Min: empty list")
- }
- m := x[0]
- for i := 1; i < len(x); i++ {
- m = min(m, x[i])
- }
- return m
+//
+//go:fix inline
+func Min[S ~[]E, E cmp.Ordered](x S) E {
+ return slices.Min(x)
}
// MinFunc returns the minimal value in x, using cmp to compare elements.
// It panics if x is empty. If there is more than one minimal element
// according to the cmp function, MinFunc returns the first one.
+//
+//go:fix inline
func MinFunc[S ~[]E, E any](x S, cmp func(a, b E) int) E {
- if len(x) < 1 {
- panic("slices.MinFunc: empty list")
- }
- m := x[0]
- for i := 1; i < len(x); i++ {
- if cmp(x[i], m) < 0 {
- m = x[i]
- }
- }
- return m
+ return slices.MinFunc(x, cmp)
}
// Max returns the maximal value in x. It panics if x is empty.
// For floating-point E, Max propagates NaNs (any NaN value in x
// forces the output to be NaN).
-func Max[S ~[]E, E constraints.Ordered](x S) E {
- if len(x) < 1 {
- panic("slices.Max: empty list")
- }
- m := x[0]
- for i := 1; i < len(x); i++ {
- m = max(m, x[i])
- }
- return m
+//
+//go:fix inline
+func Max[S ~[]E, E cmp.Ordered](x S) E {
+ return slices.Max(x)
}
// MaxFunc returns the maximal value in x, using cmp to compare elements.
// It panics if x is empty. If there is more than one maximal element
// according to the cmp function, MaxFunc returns the first one.
+//
+//go:fix inline
func MaxFunc[S ~[]E, E any](x S, cmp func(a, b E) int) E {
- if len(x) < 1 {
- panic("slices.MaxFunc: empty list")
- }
- m := x[0]
- for i := 1; i < len(x); i++ {
- if cmp(x[i], m) > 0 {
- m = x[i]
- }
- }
- return m
+ return slices.MaxFunc(x, cmp)
}
// BinarySearch searches for target in a sorted slice and returns the position
// where target is found, or the position where target would appear in the
// sort order; it also returns a bool saying whether the target is really found
// in the slice. The slice must be sorted in increasing order.
-func BinarySearch[S ~[]E, E constraints.Ordered](x S, target E) (int, bool) {
- // Inlining is faster than calling BinarySearchFunc with a lambda.
- n := len(x)
- // Define x[-1] < target and x[n] >= target.
- // Invariant: x[i-1] < target, x[j] >= target.
- i, j := 0, n
- for i < j {
- h := int(uint(i+j) >> 1) // avoid overflow when computing h
- // i ≤ h < j
- if cmpLess(x[h], target) {
- i = h + 1 // preserves x[i-1] < target
- } else {
- j = h // preserves x[j] >= target
- }
- }
- // i == j, x[i-1] < target, and x[j] (= x[i]) >= target => answer is i.
- return i, i < n && (x[i] == target || (isNaN(x[i]) && isNaN(target)))
+//
+//go:fix inline
+func BinarySearch[S ~[]E, E cmp.Ordered](x S, target E) (int, bool) {
+ return slices.BinarySearch(x, target)
}
// BinarySearchFunc works like [BinarySearch], but uses a custom comparison
@@ -150,48 +108,8 @@ func BinarySearch[S ~[]E, E constraints.Ordered](x S, target E) (int, bool) {
// or a positive number if the slice element follows the target.
// cmp must implement the same ordering as the slice, such that if
// cmp(a, t) < 0 and cmp(b, t) >= 0, then a must precede b in the slice.
+//
+//go:fix inline
func BinarySearchFunc[S ~[]E, E, T any](x S, target T, cmp func(E, T) int) (int, bool) {
- n := len(x)
- // Define cmp(x[-1], target) < 0 and cmp(x[n], target) >= 0 .
- // Invariant: cmp(x[i - 1], target) < 0, cmp(x[j], target) >= 0.
- i, j := 0, n
- for i < j {
- h := int(uint(i+j) >> 1) // avoid overflow when computing h
- // i ≤ h < j
- if cmp(x[h], target) < 0 {
- i = h + 1 // preserves cmp(x[i - 1], target) < 0
- } else {
- j = h // preserves cmp(x[j], target) >= 0
- }
- }
- // i == j, cmp(x[i-1], target) < 0, and cmp(x[j], target) (= cmp(x[i], target)) >= 0 => answer is i.
- return i, i < n && cmp(x[i], target) == 0
-}
-
-type sortedHint int // hint for pdqsort when choosing the pivot
-
-const (
- unknownHint sortedHint = iota
- increasingHint
- decreasingHint
-)
-
-// xorshift paper: https://www.jstatsoft.org/article/view/v008i14/xorshift.pdf
-type xorshift uint64
-
-func (r *xorshift) Next() uint64 {
- *r ^= *r << 13
- *r ^= *r >> 17
- *r ^= *r << 5
- return uint64(*r)
-}
-
-func nextPowerOfTwo(length int) uint {
- return 1 << bits.Len(uint(length))
-}
-
-// isNaN reports whether x is a NaN without requiring the math package.
-// This will always return false if T is not floating-point.
-func isNaN[T constraints.Ordered](x T) bool {
- return x != x
+ return slices.BinarySearchFunc(x, target, cmp)
}
diff --git a/vendor/golang.org/x/exp/slices/zsortanyfunc.go b/vendor/golang.org/x/exp/slices/zsortanyfunc.go
deleted file mode 100644
index 06f2c7a2481..00000000000
--- a/vendor/golang.org/x/exp/slices/zsortanyfunc.go
+++ /dev/null
@@ -1,479 +0,0 @@
-// Code generated by gen_sort_variants.go; DO NOT EDIT.
-
-// Copyright 2022 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package slices
-
-// insertionSortCmpFunc sorts data[a:b] using insertion sort.
-func insertionSortCmpFunc[E any](data []E, a, b int, cmp func(a, b E) int) {
- for i := a + 1; i < b; i++ {
- for j := i; j > a && (cmp(data[j], data[j-1]) < 0); j-- {
- data[j], data[j-1] = data[j-1], data[j]
- }
- }
-}
-
-// siftDownCmpFunc implements the heap property on data[lo:hi].
-// first is an offset into the array where the root of the heap lies.
-func siftDownCmpFunc[E any](data []E, lo, hi, first int, cmp func(a, b E) int) {
- root := lo
- for {
- child := 2*root + 1
- if child >= hi {
- break
- }
- if child+1 < hi && (cmp(data[first+child], data[first+child+1]) < 0) {
- child++
- }
- if !(cmp(data[first+root], data[first+child]) < 0) {
- return
- }
- data[first+root], data[first+child] = data[first+child], data[first+root]
- root = child
- }
-}
-
-func heapSortCmpFunc[E any](data []E, a, b int, cmp func(a, b E) int) {
- first := a
- lo := 0
- hi := b - a
-
- // Build heap with greatest element at top.
- for i := (hi - 1) / 2; i >= 0; i-- {
- siftDownCmpFunc(data, i, hi, first, cmp)
- }
-
- // Pop elements, largest first, into end of data.
- for i := hi - 1; i >= 0; i-- {
- data[first], data[first+i] = data[first+i], data[first]
- siftDownCmpFunc(data, lo, i, first, cmp)
- }
-}
-
-// pdqsortCmpFunc sorts data[a:b].
-// The algorithm based on pattern-defeating quicksort(pdqsort), but without the optimizations from BlockQuicksort.
-// pdqsort paper: https://arxiv.org/pdf/2106.05123.pdf
-// C++ implementation: https://github.com/orlp/pdqsort
-// Rust implementation: https://docs.rs/pdqsort/latest/pdqsort/
-// limit is the number of allowed bad (very unbalanced) pivots before falling back to heapsort.
-func pdqsortCmpFunc[E any](data []E, a, b, limit int, cmp func(a, b E) int) {
- const maxInsertion = 12
-
- var (
- wasBalanced = true // whether the last partitioning was reasonably balanced
- wasPartitioned = true // whether the slice was already partitioned
- )
-
- for {
- length := b - a
-
- if length <= maxInsertion {
- insertionSortCmpFunc(data, a, b, cmp)
- return
- }
-
- // Fall back to heapsort if too many bad choices were made.
- if limit == 0 {
- heapSortCmpFunc(data, a, b, cmp)
- return
- }
-
- // If the last partitioning was imbalanced, we need to breaking patterns.
- if !wasBalanced {
- breakPatternsCmpFunc(data, a, b, cmp)
- limit--
- }
-
- pivot, hint := choosePivotCmpFunc(data, a, b, cmp)
- if hint == decreasingHint {
- reverseRangeCmpFunc(data, a, b, cmp)
- // The chosen pivot was pivot-a elements after the start of the array.
- // After reversing it is pivot-a elements before the end of the array.
- // The idea came from Rust's implementation.
- pivot = (b - 1) - (pivot - a)
- hint = increasingHint
- }
-
- // The slice is likely already sorted.
- if wasBalanced && wasPartitioned && hint == increasingHint {
- if partialInsertionSortCmpFunc(data, a, b, cmp) {
- return
- }
- }
-
- // Probably the slice contains many duplicate elements, partition the slice into
- // elements equal to and elements greater than the pivot.
- if a > 0 && !(cmp(data[a-1], data[pivot]) < 0) {
- mid := partitionEqualCmpFunc(data, a, b, pivot, cmp)
- a = mid
- continue
- }
-
- mid, alreadyPartitioned := partitionCmpFunc(data, a, b, pivot, cmp)
- wasPartitioned = alreadyPartitioned
-
- leftLen, rightLen := mid-a, b-mid
- balanceThreshold := length / 8
- if leftLen < rightLen {
- wasBalanced = leftLen >= balanceThreshold
- pdqsortCmpFunc(data, a, mid, limit, cmp)
- a = mid + 1
- } else {
- wasBalanced = rightLen >= balanceThreshold
- pdqsortCmpFunc(data, mid+1, b, limit, cmp)
- b = mid
- }
- }
-}
-
-// partitionCmpFunc does one quicksort partition.
-// Let p = data[pivot]
-// Moves elements in data[a:b] around, so that data[i]
=p for inewpivot.
-// On return, data[newpivot] = p
-func partitionCmpFunc[E any](data []E, a, b, pivot int, cmp func(a, b E) int) (newpivot int, alreadyPartitioned bool) {
- data[a], data[pivot] = data[pivot], data[a]
- i, j := a+1, b-1 // i and j are inclusive of the elements remaining to be partitioned
-
- for i <= j && (cmp(data[i], data[a]) < 0) {
- i++
- }
- for i <= j && !(cmp(data[j], data[a]) < 0) {
- j--
- }
- if i > j {
- data[j], data[a] = data[a], data[j]
- return j, true
- }
- data[i], data[j] = data[j], data[i]
- i++
- j--
-
- for {
- for i <= j && (cmp(data[i], data[a]) < 0) {
- i++
- }
- for i <= j && !(cmp(data[j], data[a]) < 0) {
- j--
- }
- if i > j {
- break
- }
- data[i], data[j] = data[j], data[i]
- i++
- j--
- }
- data[j], data[a] = data[a], data[j]
- return j, false
-}
-
-// partitionEqualCmpFunc partitions data[a:b] into elements equal to data[pivot] followed by elements greater than data[pivot].
-// It assumed that data[a:b] does not contain elements smaller than the data[pivot].
-func partitionEqualCmpFunc[E any](data []E, a, b, pivot int, cmp func(a, b E) int) (newpivot int) {
- data[a], data[pivot] = data[pivot], data[a]
- i, j := a+1, b-1 // i and j are inclusive of the elements remaining to be partitioned
-
- for {
- for i <= j && !(cmp(data[a], data[i]) < 0) {
- i++
- }
- for i <= j && (cmp(data[a], data[j]) < 0) {
- j--
- }
- if i > j {
- break
- }
- data[i], data[j] = data[j], data[i]
- i++
- j--
- }
- return i
-}
-
-// partialInsertionSortCmpFunc partially sorts a slice, returns true if the slice is sorted at the end.
-func partialInsertionSortCmpFunc[E any](data []E, a, b int, cmp func(a, b E) int) bool {
- const (
- maxSteps = 5 // maximum number of adjacent out-of-order pairs that will get shifted
- shortestShifting = 50 // don't shift any elements on short arrays
- )
- i := a + 1
- for j := 0; j < maxSteps; j++ {
- for i < b && !(cmp(data[i], data[i-1]) < 0) {
- i++
- }
-
- if i == b {
- return true
- }
-
- if b-a < shortestShifting {
- return false
- }
-
- data[i], data[i-1] = data[i-1], data[i]
-
- // Shift the smaller one to the left.
- if i-a >= 2 {
- for j := i - 1; j >= 1; j-- {
- if !(cmp(data[j], data[j-1]) < 0) {
- break
- }
- data[j], data[j-1] = data[j-1], data[j]
- }
- }
- // Shift the greater one to the right.
- if b-i >= 2 {
- for j := i + 1; j < b; j++ {
- if !(cmp(data[j], data[j-1]) < 0) {
- break
- }
- data[j], data[j-1] = data[j-1], data[j]
- }
- }
- }
- return false
-}
-
-// breakPatternsCmpFunc scatters some elements around in an attempt to break some patterns
-// that might cause imbalanced partitions in quicksort.
-func breakPatternsCmpFunc[E any](data []E, a, b int, cmp func(a, b E) int) {
- length := b - a
- if length >= 8 {
- random := xorshift(length)
- modulus := nextPowerOfTwo(length)
-
- for idx := a + (length/4)*2 - 1; idx <= a+(length/4)*2+1; idx++ {
- other := int(uint(random.Next()) & (modulus - 1))
- if other >= length {
- other -= length
- }
- data[idx], data[a+other] = data[a+other], data[idx]
- }
- }
-}
-
-// choosePivotCmpFunc chooses a pivot in data[a:b].
-//
-// [0,8): chooses a static pivot.
-// [8,shortestNinther): uses the simple median-of-three method.
-// [shortestNinther,∞): uses the Tukey ninther method.
-func choosePivotCmpFunc[E any](data []E, a, b int, cmp func(a, b E) int) (pivot int, hint sortedHint) {
- const (
- shortestNinther = 50
- maxSwaps = 4 * 3
- )
-
- l := b - a
-
- var (
- swaps int
- i = a + l/4*1
- j = a + l/4*2
- k = a + l/4*3
- )
-
- if l >= 8 {
- if l >= shortestNinther {
- // Tukey ninther method, the idea came from Rust's implementation.
- i = medianAdjacentCmpFunc(data, i, &swaps, cmp)
- j = medianAdjacentCmpFunc(data, j, &swaps, cmp)
- k = medianAdjacentCmpFunc(data, k, &swaps, cmp)
- }
- // Find the median among i, j, k and stores it into j.
- j = medianCmpFunc(data, i, j, k, &swaps, cmp)
- }
-
- switch swaps {
- case 0:
- return j, increasingHint
- case maxSwaps:
- return j, decreasingHint
- default:
- return j, unknownHint
- }
-}
-
-// order2CmpFunc returns x,y where data[x] <= data[y], where x,y=a,b or x,y=b,a.
-func order2CmpFunc[E any](data []E, a, b int, swaps *int, cmp func(a, b E) int) (int, int) {
- if cmp(data[b], data[a]) < 0 {
- *swaps++
- return b, a
- }
- return a, b
-}
-
-// medianCmpFunc returns x where data[x] is the median of data[a],data[b],data[c], where x is a, b, or c.
-func medianCmpFunc[E any](data []E, a, b, c int, swaps *int, cmp func(a, b E) int) int {
- a, b = order2CmpFunc(data, a, b, swaps, cmp)
- b, c = order2CmpFunc(data, b, c, swaps, cmp)
- a, b = order2CmpFunc(data, a, b, swaps, cmp)
- return b
-}
-
-// medianAdjacentCmpFunc finds the median of data[a - 1], data[a], data[a + 1] and stores the index into a.
-func medianAdjacentCmpFunc[E any](data []E, a int, swaps *int, cmp func(a, b E) int) int {
- return medianCmpFunc(data, a-1, a, a+1, swaps, cmp)
-}
-
-func reverseRangeCmpFunc[E any](data []E, a, b int, cmp func(a, b E) int) {
- i := a
- j := b - 1
- for i < j {
- data[i], data[j] = data[j], data[i]
- i++
- j--
- }
-}
-
-func swapRangeCmpFunc[E any](data []E, a, b, n int, cmp func(a, b E) int) {
- for i := 0; i < n; i++ {
- data[a+i], data[b+i] = data[b+i], data[a+i]
- }
-}
-
-func stableCmpFunc[E any](data []E, n int, cmp func(a, b E) int) {
- blockSize := 20 // must be > 0
- a, b := 0, blockSize
- for b <= n {
- insertionSortCmpFunc(data, a, b, cmp)
- a = b
- b += blockSize
- }
- insertionSortCmpFunc(data, a, n, cmp)
-
- for blockSize < n {
- a, b = 0, 2*blockSize
- for b <= n {
- symMergeCmpFunc(data, a, a+blockSize, b, cmp)
- a = b
- b += 2 * blockSize
- }
- if m := a + blockSize; m < n {
- symMergeCmpFunc(data, a, m, n, cmp)
- }
- blockSize *= 2
- }
-}
-
-// symMergeCmpFunc merges the two sorted subsequences data[a:m] and data[m:b] using
-// the SymMerge algorithm from Pok-Son Kim and Arne Kutzner, "Stable Minimum
-// Storage Merging by Symmetric Comparisons", in Susanne Albers and Tomasz
-// Radzik, editors, Algorithms - ESA 2004, volume 3221 of Lecture Notes in
-// Computer Science, pages 714-723. Springer, 2004.
-//
-// Let M = m-a and N = b-n. Wolog M < N.
-// The recursion depth is bound by ceil(log(N+M)).
-// The algorithm needs O(M*log(N/M + 1)) calls to data.Less.
-// The algorithm needs O((M+N)*log(M)) calls to data.Swap.
-//
-// The paper gives O((M+N)*log(M)) as the number of assignments assuming a
-// rotation algorithm which uses O(M+N+gcd(M+N)) assignments. The argumentation
-// in the paper carries through for Swap operations, especially as the block
-// swapping rotate uses only O(M+N) Swaps.
-//
-// symMerge assumes non-degenerate arguments: a < m && m < b.
-// Having the caller check this condition eliminates many leaf recursion calls,
-// which improves performance.
-func symMergeCmpFunc[E any](data []E, a, m, b int, cmp func(a, b E) int) {
- // Avoid unnecessary recursions of symMerge
- // by direct insertion of data[a] into data[m:b]
- // if data[a:m] only contains one element.
- if m-a == 1 {
- // Use binary search to find the lowest index i
- // such that data[i] >= data[a] for m <= i < b.
- // Exit the search loop with i == b in case no such index exists.
- i := m
- j := b
- for i < j {
- h := int(uint(i+j) >> 1)
- if cmp(data[h], data[a]) < 0 {
- i = h + 1
- } else {
- j = h
- }
- }
- // Swap values until data[a] reaches the position before i.
- for k := a; k < i-1; k++ {
- data[k], data[k+1] = data[k+1], data[k]
- }
- return
- }
-
- // Avoid unnecessary recursions of symMerge
- // by direct insertion of data[m] into data[a:m]
- // if data[m:b] only contains one element.
- if b-m == 1 {
- // Use binary search to find the lowest index i
- // such that data[i] > data[m] for a <= i < m.
- // Exit the search loop with i == m in case no such index exists.
- i := a
- j := m
- for i < j {
- h := int(uint(i+j) >> 1)
- if !(cmp(data[m], data[h]) < 0) {
- i = h + 1
- } else {
- j = h
- }
- }
- // Swap values until data[m] reaches the position i.
- for k := m; k > i; k-- {
- data[k], data[k-1] = data[k-1], data[k]
- }
- return
- }
-
- mid := int(uint(a+b) >> 1)
- n := mid + m
- var start, r int
- if m > mid {
- start = n - b
- r = mid
- } else {
- start = a
- r = m
- }
- p := n - 1
-
- for start < r {
- c := int(uint(start+r) >> 1)
- if !(cmp(data[p-c], data[c]) < 0) {
- start = c + 1
- } else {
- r = c
- }
- }
-
- end := n - start
- if start < m && m < end {
- rotateCmpFunc(data, start, m, end, cmp)
- }
- if a < start && start < mid {
- symMergeCmpFunc(data, a, start, mid, cmp)
- }
- if mid < end && end < b {
- symMergeCmpFunc(data, mid, end, b, cmp)
- }
-}
-
-// rotateCmpFunc rotates two consecutive blocks u = data[a:m] and v = data[m:b] in data:
-// Data of the form 'x u v y' is changed to 'x v u y'.
-// rotate performs at most b-a many calls to data.Swap,
-// and it assumes non-degenerate arguments: a < m && m < b.
-func rotateCmpFunc[E any](data []E, a, m, b int, cmp func(a, b E) int) {
- i := m - a
- j := b - m
-
- for i != j {
- if i > j {
- swapRangeCmpFunc(data, m-i, m, j, cmp)
- i -= j
- } else {
- swapRangeCmpFunc(data, m-i, m+j-i, i, cmp)
- j -= i
- }
- }
- // i == j
- swapRangeCmpFunc(data, m-i, m, i, cmp)
-}
diff --git a/vendor/golang.org/x/exp/slices/zsortordered.go b/vendor/golang.org/x/exp/slices/zsortordered.go
deleted file mode 100644
index 99b47c3986a..00000000000
--- a/vendor/golang.org/x/exp/slices/zsortordered.go
+++ /dev/null
@@ -1,481 +0,0 @@
-// Code generated by gen_sort_variants.go; DO NOT EDIT.
-
-// Copyright 2022 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package slices
-
-import "golang.org/x/exp/constraints"
-
-// insertionSortOrdered sorts data[a:b] using insertion sort.
-func insertionSortOrdered[E constraints.Ordered](data []E, a, b int) {
- for i := a + 1; i < b; i++ {
- for j := i; j > a && cmpLess(data[j], data[j-1]); j-- {
- data[j], data[j-1] = data[j-1], data[j]
- }
- }
-}
-
-// siftDownOrdered implements the heap property on data[lo:hi].
-// first is an offset into the array where the root of the heap lies.
-func siftDownOrdered[E constraints.Ordered](data []E, lo, hi, first int) {
- root := lo
- for {
- child := 2*root + 1
- if child >= hi {
- break
- }
- if child+1 < hi && cmpLess(data[first+child], data[first+child+1]) {
- child++
- }
- if !cmpLess(data[first+root], data[first+child]) {
- return
- }
- data[first+root], data[first+child] = data[first+child], data[first+root]
- root = child
- }
-}
-
-func heapSortOrdered[E constraints.Ordered](data []E, a, b int) {
- first := a
- lo := 0
- hi := b - a
-
- // Build heap with greatest element at top.
- for i := (hi - 1) / 2; i >= 0; i-- {
- siftDownOrdered(data, i, hi, first)
- }
-
- // Pop elements, largest first, into end of data.
- for i := hi - 1; i >= 0; i-- {
- data[first], data[first+i] = data[first+i], data[first]
- siftDownOrdered(data, lo, i, first)
- }
-}
-
-// pdqsortOrdered sorts data[a:b].
-// The algorithm based on pattern-defeating quicksort(pdqsort), but without the optimizations from BlockQuicksort.
-// pdqsort paper: https://arxiv.org/pdf/2106.05123.pdf
-// C++ implementation: https://github.com/orlp/pdqsort
-// Rust implementation: https://docs.rs/pdqsort/latest/pdqsort/
-// limit is the number of allowed bad (very unbalanced) pivots before falling back to heapsort.
-func pdqsortOrdered[E constraints.Ordered](data []E, a, b, limit int) {
- const maxInsertion = 12
-
- var (
- wasBalanced = true // whether the last partitioning was reasonably balanced
- wasPartitioned = true // whether the slice was already partitioned
- )
-
- for {
- length := b - a
-
- if length <= maxInsertion {
- insertionSortOrdered(data, a, b)
- return
- }
-
- // Fall back to heapsort if too many bad choices were made.
- if limit == 0 {
- heapSortOrdered(data, a, b)
- return
- }
-
- // If the last partitioning was imbalanced, we need to breaking patterns.
- if !wasBalanced {
- breakPatternsOrdered(data, a, b)
- limit--
- }
-
- pivot, hint := choosePivotOrdered(data, a, b)
- if hint == decreasingHint {
- reverseRangeOrdered(data, a, b)
- // The chosen pivot was pivot-a elements after the start of the array.
- // After reversing it is pivot-a elements before the end of the array.
- // The idea came from Rust's implementation.
- pivot = (b - 1) - (pivot - a)
- hint = increasingHint
- }
-
- // The slice is likely already sorted.
- if wasBalanced && wasPartitioned && hint == increasingHint {
- if partialInsertionSortOrdered(data, a, b) {
- return
- }
- }
-
- // Probably the slice contains many duplicate elements, partition the slice into
- // elements equal to and elements greater than the pivot.
- if a > 0 && !cmpLess(data[a-1], data[pivot]) {
- mid := partitionEqualOrdered(data, a, b, pivot)
- a = mid
- continue
- }
-
- mid, alreadyPartitioned := partitionOrdered(data, a, b, pivot)
- wasPartitioned = alreadyPartitioned
-
- leftLen, rightLen := mid-a, b-mid
- balanceThreshold := length / 8
- if leftLen < rightLen {
- wasBalanced = leftLen >= balanceThreshold
- pdqsortOrdered(data, a, mid, limit)
- a = mid + 1
- } else {
- wasBalanced = rightLen >= balanceThreshold
- pdqsortOrdered(data, mid+1, b, limit)
- b = mid
- }
- }
-}
-
-// partitionOrdered does one quicksort partition.
-// Let p = data[pivot]
-// Moves elements in data[a:b] around, so that data[i]=p for inewpivot.
-// On return, data[newpivot] = p
-func partitionOrdered[E constraints.Ordered](data []E, a, b, pivot int) (newpivot int, alreadyPartitioned bool) {
- data[a], data[pivot] = data[pivot], data[a]
- i, j := a+1, b-1 // i and j are inclusive of the elements remaining to be partitioned
-
- for i <= j && cmpLess(data[i], data[a]) {
- i++
- }
- for i <= j && !cmpLess(data[j], data[a]) {
- j--
- }
- if i > j {
- data[j], data[a] = data[a], data[j]
- return j, true
- }
- data[i], data[j] = data[j], data[i]
- i++
- j--
-
- for {
- for i <= j && cmpLess(data[i], data[a]) {
- i++
- }
- for i <= j && !cmpLess(data[j], data[a]) {
- j--
- }
- if i > j {
- break
- }
- data[i], data[j] = data[j], data[i]
- i++
- j--
- }
- data[j], data[a] = data[a], data[j]
- return j, false
-}
-
-// partitionEqualOrdered partitions data[a:b] into elements equal to data[pivot] followed by elements greater than data[pivot].
-// It assumed that data[a:b] does not contain elements smaller than the data[pivot].
-func partitionEqualOrdered[E constraints.Ordered](data []E, a, b, pivot int) (newpivot int) {
- data[a], data[pivot] = data[pivot], data[a]
- i, j := a+1, b-1 // i and j are inclusive of the elements remaining to be partitioned
-
- for {
- for i <= j && !cmpLess(data[a], data[i]) {
- i++
- }
- for i <= j && cmpLess(data[a], data[j]) {
- j--
- }
- if i > j {
- break
- }
- data[i], data[j] = data[j], data[i]
- i++
- j--
- }
- return i
-}
-
-// partialInsertionSortOrdered partially sorts a slice, returns true if the slice is sorted at the end.
-func partialInsertionSortOrdered[E constraints.Ordered](data []E, a, b int) bool {
- const (
- maxSteps = 5 // maximum number of adjacent out-of-order pairs that will get shifted
- shortestShifting = 50 // don't shift any elements on short arrays
- )
- i := a + 1
- for j := 0; j < maxSteps; j++ {
- for i < b && !cmpLess(data[i], data[i-1]) {
- i++
- }
-
- if i == b {
- return true
- }
-
- if b-a < shortestShifting {
- return false
- }
-
- data[i], data[i-1] = data[i-1], data[i]
-
- // Shift the smaller one to the left.
- if i-a >= 2 {
- for j := i - 1; j >= 1; j-- {
- if !cmpLess(data[j], data[j-1]) {
- break
- }
- data[j], data[j-1] = data[j-1], data[j]
- }
- }
- // Shift the greater one to the right.
- if b-i >= 2 {
- for j := i + 1; j < b; j++ {
- if !cmpLess(data[j], data[j-1]) {
- break
- }
- data[j], data[j-1] = data[j-1], data[j]
- }
- }
- }
- return false
-}
-
-// breakPatternsOrdered scatters some elements around in an attempt to break some patterns
-// that might cause imbalanced partitions in quicksort.
-func breakPatternsOrdered[E constraints.Ordered](data []E, a, b int) {
- length := b - a
- if length >= 8 {
- random := xorshift(length)
- modulus := nextPowerOfTwo(length)
-
- for idx := a + (length/4)*2 - 1; idx <= a+(length/4)*2+1; idx++ {
- other := int(uint(random.Next()) & (modulus - 1))
- if other >= length {
- other -= length
- }
- data[idx], data[a+other] = data[a+other], data[idx]
- }
- }
-}
-
-// choosePivotOrdered chooses a pivot in data[a:b].
-//
-// [0,8): chooses a static pivot.
-// [8,shortestNinther): uses the simple median-of-three method.
-// [shortestNinther,∞): uses the Tukey ninther method.
-func choosePivotOrdered[E constraints.Ordered](data []E, a, b int) (pivot int, hint sortedHint) {
- const (
- shortestNinther = 50
- maxSwaps = 4 * 3
- )
-
- l := b - a
-
- var (
- swaps int
- i = a + l/4*1
- j = a + l/4*2
- k = a + l/4*3
- )
-
- if l >= 8 {
- if l >= shortestNinther {
- // Tukey ninther method, the idea came from Rust's implementation.
- i = medianAdjacentOrdered(data, i, &swaps)
- j = medianAdjacentOrdered(data, j, &swaps)
- k = medianAdjacentOrdered(data, k, &swaps)
- }
- // Find the median among i, j, k and stores it into j.
- j = medianOrdered(data, i, j, k, &swaps)
- }
-
- switch swaps {
- case 0:
- return j, increasingHint
- case maxSwaps:
- return j, decreasingHint
- default:
- return j, unknownHint
- }
-}
-
-// order2Ordered returns x,y where data[x] <= data[y], where x,y=a,b or x,y=b,a.
-func order2Ordered[E constraints.Ordered](data []E, a, b int, swaps *int) (int, int) {
- if cmpLess(data[b], data[a]) {
- *swaps++
- return b, a
- }
- return a, b
-}
-
-// medianOrdered returns x where data[x] is the median of data[a],data[b],data[c], where x is a, b, or c.
-func medianOrdered[E constraints.Ordered](data []E, a, b, c int, swaps *int) int {
- a, b = order2Ordered(data, a, b, swaps)
- b, c = order2Ordered(data, b, c, swaps)
- a, b = order2Ordered(data, a, b, swaps)
- return b
-}
-
-// medianAdjacentOrdered finds the median of data[a - 1], data[a], data[a + 1] and stores the index into a.
-func medianAdjacentOrdered[E constraints.Ordered](data []E, a int, swaps *int) int {
- return medianOrdered(data, a-1, a, a+1, swaps)
-}
-
-func reverseRangeOrdered[E constraints.Ordered](data []E, a, b int) {
- i := a
- j := b - 1
- for i < j {
- data[i], data[j] = data[j], data[i]
- i++
- j--
- }
-}
-
-func swapRangeOrdered[E constraints.Ordered](data []E, a, b, n int) {
- for i := 0; i < n; i++ {
- data[a+i], data[b+i] = data[b+i], data[a+i]
- }
-}
-
-func stableOrdered[E constraints.Ordered](data []E, n int) {
- blockSize := 20 // must be > 0
- a, b := 0, blockSize
- for b <= n {
- insertionSortOrdered(data, a, b)
- a = b
- b += blockSize
- }
- insertionSortOrdered(data, a, n)
-
- for blockSize < n {
- a, b = 0, 2*blockSize
- for b <= n {
- symMergeOrdered(data, a, a+blockSize, b)
- a = b
- b += 2 * blockSize
- }
- if m := a + blockSize; m < n {
- symMergeOrdered(data, a, m, n)
- }
- blockSize *= 2
- }
-}
-
-// symMergeOrdered merges the two sorted subsequences data[a:m] and data[m:b] using
-// the SymMerge algorithm from Pok-Son Kim and Arne Kutzner, "Stable Minimum
-// Storage Merging by Symmetric Comparisons", in Susanne Albers and Tomasz
-// Radzik, editors, Algorithms - ESA 2004, volume 3221 of Lecture Notes in
-// Computer Science, pages 714-723. Springer, 2004.
-//
-// Let M = m-a and N = b-n. Wolog M < N.
-// The recursion depth is bound by ceil(log(N+M)).
-// The algorithm needs O(M*log(N/M + 1)) calls to data.Less.
-// The algorithm needs O((M+N)*log(M)) calls to data.Swap.
-//
-// The paper gives O((M+N)*log(M)) as the number of assignments assuming a
-// rotation algorithm which uses O(M+N+gcd(M+N)) assignments. The argumentation
-// in the paper carries through for Swap operations, especially as the block
-// swapping rotate uses only O(M+N) Swaps.
-//
-// symMerge assumes non-degenerate arguments: a < m && m < b.
-// Having the caller check this condition eliminates many leaf recursion calls,
-// which improves performance.
-func symMergeOrdered[E constraints.Ordered](data []E, a, m, b int) {
- // Avoid unnecessary recursions of symMerge
- // by direct insertion of data[a] into data[m:b]
- // if data[a:m] only contains one element.
- if m-a == 1 {
- // Use binary search to find the lowest index i
- // such that data[i] >= data[a] for m <= i < b.
- // Exit the search loop with i == b in case no such index exists.
- i := m
- j := b
- for i < j {
- h := int(uint(i+j) >> 1)
- if cmpLess(data[h], data[a]) {
- i = h + 1
- } else {
- j = h
- }
- }
- // Swap values until data[a] reaches the position before i.
- for k := a; k < i-1; k++ {
- data[k], data[k+1] = data[k+1], data[k]
- }
- return
- }
-
- // Avoid unnecessary recursions of symMerge
- // by direct insertion of data[m] into data[a:m]
- // if data[m:b] only contains one element.
- if b-m == 1 {
- // Use binary search to find the lowest index i
- // such that data[i] > data[m] for a <= i < m.
- // Exit the search loop with i == m in case no such index exists.
- i := a
- j := m
- for i < j {
- h := int(uint(i+j) >> 1)
- if !cmpLess(data[m], data[h]) {
- i = h + 1
- } else {
- j = h
- }
- }
- // Swap values until data[m] reaches the position i.
- for k := m; k > i; k-- {
- data[k], data[k-1] = data[k-1], data[k]
- }
- return
- }
-
- mid := int(uint(a+b) >> 1)
- n := mid + m
- var start, r int
- if m > mid {
- start = n - b
- r = mid
- } else {
- start = a
- r = m
- }
- p := n - 1
-
- for start < r {
- c := int(uint(start+r) >> 1)
- if !cmpLess(data[p-c], data[c]) {
- start = c + 1
- } else {
- r = c
- }
- }
-
- end := n - start
- if start < m && m < end {
- rotateOrdered(data, start, m, end)
- }
- if a < start && start < mid {
- symMergeOrdered(data, a, start, mid)
- }
- if mid < end && end < b {
- symMergeOrdered(data, mid, end, b)
- }
-}
-
-// rotateOrdered rotates two consecutive blocks u = data[a:m] and v = data[m:b] in data:
-// Data of the form 'x u v y' is changed to 'x v u y'.
-// rotate performs at most b-a many calls to data.Swap,
-// and it assumes non-degenerate arguments: a < m && m < b.
-func rotateOrdered[E constraints.Ordered](data []E, a, m, b int) {
- i := m - a
- j := b - m
-
- for i != j {
- if i > j {
- swapRangeOrdered(data, m-i, m, j)
- i -= j
- } else {
- swapRangeOrdered(data, m-i, m+j-i, i)
- j -= i
- }
- }
- // i == j
- swapRangeOrdered(data, m-i, m, i)
-}
diff --git a/vendor/golang.org/x/time/rate/rate.go b/vendor/golang.org/x/time/rate/rate.go
index 93a798ab637..ec5f0cdd0c0 100644
--- a/vendor/golang.org/x/time/rate/rate.go
+++ b/vendor/golang.org/x/time/rate/rate.go
@@ -405,8 +405,15 @@ func (limit Limit) durationFromTokens(tokens float64) time.Duration {
if limit <= 0 {
return InfDuration
}
- seconds := tokens / float64(limit)
- return time.Duration(float64(time.Second) * seconds)
+
+ duration := (tokens / float64(limit)) * float64(time.Second)
+
+ // Cap the duration to the maximum representable int64 value, to avoid overflow.
+ if duration > float64(math.MaxInt64) {
+ return InfDuration
+ }
+
+ return time.Duration(duration)
}
// tokensFromDuration is a unit conversion function from a time duration to the number of tokens
diff --git a/vendor/gomodules.xyz/jsonpatch/v2/LICENSE b/vendor/gomodules.xyz/jsonpatch/v2/LICENSE
new file mode 100644
index 00000000000..8f71f43fee3
--- /dev/null
+++ b/vendor/gomodules.xyz/jsonpatch/v2/LICENSE
@@ -0,0 +1,202 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ 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.
+
diff --git a/vendor/gomodules.xyz/jsonpatch/v2/jsonpatch.go b/vendor/gomodules.xyz/jsonpatch/v2/jsonpatch.go
new file mode 100644
index 00000000000..0d7823b3cd6
--- /dev/null
+++ b/vendor/gomodules.xyz/jsonpatch/v2/jsonpatch.go
@@ -0,0 +1,246 @@
+package jsonpatch
+
+import (
+ "bytes"
+ "encoding/json"
+ "fmt"
+ "reflect"
+ "strings"
+)
+
+var errBadJSONDoc = fmt.Errorf("invalid JSON Document")
+
+type JsonPatchOperation = Operation
+
+type Operation struct {
+ Operation string `json:"op"`
+ Path string `json:"path"`
+ Value interface{} `json:"value,omitempty"`
+}
+
+func (j *Operation) Json() string {
+ b, _ := json.Marshal(j)
+ return string(b)
+}
+
+func (j *Operation) MarshalJSON() ([]byte, error) {
+ // Ensure for add and replace we emit `value: null`
+ if j.Value == nil && (j.Operation == "replace" || j.Operation == "add") {
+ return json.Marshal(struct {
+ Operation string `json:"op"`
+ Path string `json:"path"`
+ Value interface{} `json:"value"`
+ }{
+ Operation: j.Operation,
+ Path: j.Path,
+ })
+ }
+ // otherwise just marshal normally. We cannot literally do json.Marshal(j) as it would be recursively
+ // calling this function.
+ return json.Marshal(struct {
+ Operation string `json:"op"`
+ Path string `json:"path"`
+ Value interface{} `json:"value,omitempty"`
+ }{
+ Operation: j.Operation,
+ Path: j.Path,
+ Value: j.Value,
+ })
+}
+
+type ByPath []Operation
+
+func (a ByPath) Len() int { return len(a) }
+func (a ByPath) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
+func (a ByPath) Less(i, j int) bool { return a[i].Path < a[j].Path }
+
+func NewOperation(op, path string, value interface{}) Operation {
+ return Operation{Operation: op, Path: path, Value: value}
+}
+
+// CreatePatch creates a patch as specified in http://jsonpatch.com/
+//
+// 'a' is original, 'b' is the modified document. Both are to be given as json encoded content.
+// The function will return an array of JsonPatchOperations
+//
+// An error will be returned if any of the two documents are invalid.
+func CreatePatch(a, b []byte) ([]Operation, error) {
+ if bytes.Equal(a, b) {
+ return []Operation{}, nil
+ }
+ var aI interface{}
+ var bI interface{}
+ err := json.Unmarshal(a, &aI)
+ if err != nil {
+ return nil, errBadJSONDoc
+ }
+ err = json.Unmarshal(b, &bI)
+ if err != nil {
+ return nil, errBadJSONDoc
+ }
+ return handleValues(aI, bI, "", []Operation{})
+}
+
+// Returns true if the values matches (must be json types)
+// The types of the values must match, otherwise it will always return false
+// If two map[string]interface{} are given, all elements must match.
+func matchesValue(av, bv interface{}) bool {
+ if reflect.TypeOf(av) != reflect.TypeOf(bv) {
+ return false
+ }
+ switch at := av.(type) {
+ case string:
+ bt, ok := bv.(string)
+ if ok && bt == at {
+ return true
+ }
+ case float64:
+ bt, ok := bv.(float64)
+ if ok && bt == at {
+ return true
+ }
+ case bool:
+ bt, ok := bv.(bool)
+ if ok && bt == at {
+ return true
+ }
+ case map[string]interface{}:
+ bt, ok := bv.(map[string]interface{})
+ if !ok {
+ return false
+ }
+ for key := range at {
+ if !matchesValue(at[key], bt[key]) {
+ return false
+ }
+ }
+ for key := range bt {
+ if !matchesValue(at[key], bt[key]) {
+ return false
+ }
+ }
+ return true
+ case []interface{}:
+ bt, ok := bv.([]interface{})
+ if !ok {
+ return false
+ }
+ if len(bt) != len(at) {
+ return false
+ }
+ for key := range at {
+ if !matchesValue(at[key], bt[key]) {
+ return false
+ }
+ }
+ for key := range bt {
+ if !matchesValue(at[key], bt[key]) {
+ return false
+ }
+ }
+ return true
+ }
+ return false
+}
+
+// From http://tools.ietf.org/html/rfc6901#section-4 :
+//
+// Evaluation of each reference token begins by decoding any escaped
+// character sequence. This is performed by first transforming any
+// occurrence of the sequence '~1' to '/', and then transforming any
+// occurrence of the sequence '~0' to '~'.
+// TODO decode support:
+// var rfc6901Decoder = strings.NewReplacer("~1", "/", "~0", "~")
+
+var rfc6901Encoder = strings.NewReplacer("~", "~0", "/", "~1")
+
+func makePath(path string, newPart interface{}) string {
+ key := rfc6901Encoder.Replace(fmt.Sprintf("%v", newPart))
+ if path == "" {
+ return "/" + key
+ }
+ return path + "/" + key
+}
+
+// diff returns the (recursive) difference between a and b as an array of JsonPatchOperations.
+func diff(a, b map[string]interface{}, path string, patch []Operation) ([]Operation, error) {
+ for key, bv := range b {
+ p := makePath(path, key)
+ av, ok := a[key]
+ // value was added
+ if !ok {
+ patch = append(patch, NewOperation("add", p, bv))
+ continue
+ }
+ // Types are the same, compare values
+ var err error
+ patch, err = handleValues(av, bv, p, patch)
+ if err != nil {
+ return nil, err
+ }
+ }
+ // Now add all deleted values as nil
+ for key := range a {
+ _, found := b[key]
+ if !found {
+ p := makePath(path, key)
+
+ patch = append(patch, NewOperation("remove", p, nil))
+ }
+ }
+ return patch, nil
+}
+
+func handleValues(av, bv interface{}, p string, patch []Operation) ([]Operation, error) {
+ {
+ at := reflect.TypeOf(av)
+ bt := reflect.TypeOf(bv)
+ if at == nil && bt == nil {
+ // do nothing
+ return patch, nil
+ } else if at != bt {
+ // If types have changed, replace completely (preserves null in destination)
+ return append(patch, NewOperation("replace", p, bv)), nil
+ }
+ }
+
+ var err error
+ switch at := av.(type) {
+ case map[string]interface{}:
+ bt := bv.(map[string]interface{})
+ patch, err = diff(at, bt, p, patch)
+ if err != nil {
+ return nil, err
+ }
+ case string, float64, bool:
+ if !matchesValue(av, bv) {
+ patch = append(patch, NewOperation("replace", p, bv))
+ }
+ case []interface{}:
+ bt := bv.([]interface{})
+ n := min(len(at), len(bt))
+ for i := len(at) - 1; i >= n; i-- {
+ patch = append(patch, NewOperation("remove", makePath(p, i), nil))
+ }
+ for i := n; i < len(bt); i++ {
+ patch = append(patch, NewOperation("add", makePath(p, i), bt[i]))
+ }
+ for i := 0; i < n; i++ {
+ var err error
+ patch, err = handleValues(at[i], bt[i], makePath(p, i), patch)
+ if err != nil {
+ return nil, err
+ }
+ }
+ default:
+ panic(fmt.Sprintf("Unknown type:%T ", av))
+ }
+ return patch, nil
+}
+
+func min(x int, y int) int {
+ if y < x {
+ return y
+ }
+ return x
+}
diff --git a/vendor/k8s.io/apimachinery/pkg/util/rand/rand.go b/vendor/k8s.io/apimachinery/pkg/util/rand/rand.go
new file mode 100644
index 00000000000..82a473bb146
--- /dev/null
+++ b/vendor/k8s.io/apimachinery/pkg/util/rand/rand.go
@@ -0,0 +1,127 @@
+/*
+Copyright 2015 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 rand provides utilities related to randomization.
+package rand
+
+import (
+ "math/rand"
+ "sync"
+ "time"
+)
+
+var rng = struct {
+ sync.Mutex
+ rand *rand.Rand
+}{
+ rand: rand.New(rand.NewSource(time.Now().UnixNano())),
+}
+
+// Int returns a non-negative pseudo-random int.
+func Int() int {
+ rng.Lock()
+ defer rng.Unlock()
+ return rng.rand.Int()
+}
+
+// Intn generates an integer in range [0,max).
+// By design this should panic if input is invalid, <= 0.
+func Intn(max int) int {
+ rng.Lock()
+ defer rng.Unlock()
+ return rng.rand.Intn(max)
+}
+
+// IntnRange generates an integer in range [min,max).
+// By design this should panic if input is invalid, <= 0.
+func IntnRange(min, max int) int {
+ rng.Lock()
+ defer rng.Unlock()
+ return rng.rand.Intn(max-min) + min
+}
+
+// IntnRange generates an int64 integer in range [min,max).
+// By design this should panic if input is invalid, <= 0.
+func Int63nRange(min, max int64) int64 {
+ rng.Lock()
+ defer rng.Unlock()
+ return rng.rand.Int63n(max-min) + min
+}
+
+// Seed seeds the rng with the provided seed.
+func Seed(seed int64) {
+ rng.Lock()
+ defer rng.Unlock()
+
+ rng.rand = rand.New(rand.NewSource(seed))
+}
+
+// Perm returns, as a slice of n ints, a pseudo-random permutation of the integers [0,n)
+// from the default Source.
+func Perm(n int) []int {
+ rng.Lock()
+ defer rng.Unlock()
+ return rng.rand.Perm(n)
+}
+
+const (
+ // We omit vowels from the set of available characters to reduce the chances
+ // of "bad words" being formed.
+ alphanums = "bcdfghjklmnpqrstvwxz2456789"
+ // No. of bits required to index into alphanums string.
+ alphanumsIdxBits = 5
+ // Mask used to extract last alphanumsIdxBits of an int.
+ alphanumsIdxMask = 1<>= alphanumsIdxBits
+ remaining--
+ }
+ return string(b)
+}
+
+// SafeEncodeString encodes s using the same characters as rand.String. This reduces the chances of bad words and
+// ensures that strings generated from hash functions appear consistent throughout the API.
+func SafeEncodeString(s string) string {
+ r := make([]byte, len(s))
+ for i, b := range []rune(s) {
+ r[i] = alphanums[(int(b) % len(alphanums))]
+ }
+ return string(r)
+}
diff --git a/vendor/github.com/operator-framework/operator-controller/internal/conditionsets/conditionsets.go b/vendor/k8s.io/apimachinery/pkg/util/uuid/uuid.go
similarity index 62%
rename from vendor/github.com/operator-framework/operator-controller/internal/conditionsets/conditionsets.go
rename to vendor/k8s.io/apimachinery/pkg/util/uuid/uuid.go
index fa4087148d5..1fa351aab60 100644
--- a/vendor/github.com/operator-framework/operator-controller/internal/conditionsets/conditionsets.go
+++ b/vendor/k8s.io/apimachinery/pkg/util/uuid/uuid.go
@@ -1,5 +1,5 @@
/*
-Copyright 2023.
+Copyright 2014 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.
@@ -14,11 +14,14 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-package conditionsets
+package uuid
-// ConditionTypes is the full set of ClusterExtension condition Types.
-// ConditionReasons is the full set of ClusterExtension condition Reasons.
-//
-// NOTE: These are populated by init() in api/v1alpha1/clusterextension_types.go
-var ConditionTypes []string
-var ConditionReasons []string
+import (
+ "github.com/google/uuid"
+
+ "k8s.io/apimachinery/pkg/types"
+)
+
+func NewUUID() types.UID {
+ return types.UID(uuid.New().String())
+}
diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/interface.go b/vendor/k8s.io/client-go/informers/admissionregistration/interface.go
new file mode 100644
index 00000000000..7cd8d72766a
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/admissionregistration/interface.go
@@ -0,0 +1,62 @@
+/*
+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 admissionregistration
+
+import (
+ v1 "k8s.io/client-go/informers/admissionregistration/v1"
+ v1alpha1 "k8s.io/client-go/informers/admissionregistration/v1alpha1"
+ v1beta1 "k8s.io/client-go/informers/admissionregistration/v1beta1"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to each of this group's versions.
+type Interface interface {
+ // V1 provides access to shared informers for resources in V1.
+ V1() v1.Interface
+ // V1alpha1 provides access to shared informers for resources in V1alpha1.
+ V1alpha1() v1alpha1.Interface
+ // V1beta1 provides access to shared informers for resources in V1beta1.
+ V1beta1() v1beta1.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}
+}
+
+// V1 returns a new v1.Interface.
+func (g *group) V1() v1.Interface {
+ return v1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1alpha1 returns a new v1alpha1.Interface.
+func (g *group) V1alpha1() v1alpha1.Interface {
+ return v1alpha1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1beta1 returns a new v1beta1.Interface.
+func (g *group) V1beta1() v1beta1.Interface {
+ return v1beta1.New(g.factory, g.namespace, g.tweakListOptions)
+}
diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1/interface.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1/interface.go
new file mode 100644
index 00000000000..08769d3cca4
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1/interface.go
@@ -0,0 +1,66 @@
+/*
+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 v1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // MutatingWebhookConfigurations returns a MutatingWebhookConfigurationInformer.
+ MutatingWebhookConfigurations() MutatingWebhookConfigurationInformer
+ // ValidatingAdmissionPolicies returns a ValidatingAdmissionPolicyInformer.
+ ValidatingAdmissionPolicies() ValidatingAdmissionPolicyInformer
+ // ValidatingAdmissionPolicyBindings returns a ValidatingAdmissionPolicyBindingInformer.
+ ValidatingAdmissionPolicyBindings() ValidatingAdmissionPolicyBindingInformer
+ // ValidatingWebhookConfigurations returns a ValidatingWebhookConfigurationInformer.
+ ValidatingWebhookConfigurations() ValidatingWebhookConfigurationInformer
+}
+
+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}
+}
+
+// MutatingWebhookConfigurations returns a MutatingWebhookConfigurationInformer.
+func (v *version) MutatingWebhookConfigurations() MutatingWebhookConfigurationInformer {
+ return &mutatingWebhookConfigurationInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// ValidatingAdmissionPolicies returns a ValidatingAdmissionPolicyInformer.
+func (v *version) ValidatingAdmissionPolicies() ValidatingAdmissionPolicyInformer {
+ return &validatingAdmissionPolicyInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// ValidatingAdmissionPolicyBindings returns a ValidatingAdmissionPolicyBindingInformer.
+func (v *version) ValidatingAdmissionPolicyBindings() ValidatingAdmissionPolicyBindingInformer {
+ return &validatingAdmissionPolicyBindingInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// ValidatingWebhookConfigurations returns a ValidatingWebhookConfigurationInformer.
+func (v *version) ValidatingWebhookConfigurations() ValidatingWebhookConfigurationInformer {
+ return &validatingWebhookConfigurationInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1/mutatingwebhookconfiguration.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1/mutatingwebhookconfiguration.go
new file mode 100644
index 00000000000..7adafde23e2
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1/mutatingwebhookconfiguration.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apiadmissionregistrationv1 "k8s.io/api/admissionregistration/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ admissionregistrationv1 "k8s.io/client-go/listers/admissionregistration/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// MutatingWebhookConfigurationInformer provides access to a shared informer and lister for
+// MutatingWebhookConfigurations.
+type MutatingWebhookConfigurationInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() admissionregistrationv1.MutatingWebhookConfigurationLister
+}
+
+type mutatingWebhookConfigurationInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewMutatingWebhookConfigurationInformer constructs a new informer for MutatingWebhookConfiguration 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 NewMutatingWebhookConfigurationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredMutatingWebhookConfigurationInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredMutatingWebhookConfigurationInformer constructs a new informer for MutatingWebhookConfiguration 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 NewFilteredMutatingWebhookConfigurationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1().MutatingWebhookConfigurations().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1().MutatingWebhookConfigurations().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1().MutatingWebhookConfigurations().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1().MutatingWebhookConfigurations().Watch(ctx, options)
+ },
+ },
+ &apiadmissionregistrationv1.MutatingWebhookConfiguration{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *mutatingWebhookConfigurationInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredMutatingWebhookConfigurationInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *mutatingWebhookConfigurationInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiadmissionregistrationv1.MutatingWebhookConfiguration{}, f.defaultInformer)
+}
+
+func (f *mutatingWebhookConfigurationInformer) Lister() admissionregistrationv1.MutatingWebhookConfigurationLister {
+ return admissionregistrationv1.NewMutatingWebhookConfigurationLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1/validatingadmissionpolicy.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1/validatingadmissionpolicy.go
new file mode 100644
index 00000000000..92cfa1fa4f3
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1/validatingadmissionpolicy.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apiadmissionregistrationv1 "k8s.io/api/admissionregistration/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ admissionregistrationv1 "k8s.io/client-go/listers/admissionregistration/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ValidatingAdmissionPolicyInformer provides access to a shared informer and lister for
+// ValidatingAdmissionPolicies.
+type ValidatingAdmissionPolicyInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() admissionregistrationv1.ValidatingAdmissionPolicyLister
+}
+
+type validatingAdmissionPolicyInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewValidatingAdmissionPolicyInformer constructs a new informer for ValidatingAdmissionPolicy 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 NewValidatingAdmissionPolicyInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredValidatingAdmissionPolicyInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredValidatingAdmissionPolicyInformer constructs a new informer for ValidatingAdmissionPolicy 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 NewFilteredValidatingAdmissionPolicyInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1().ValidatingAdmissionPolicies().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1().ValidatingAdmissionPolicies().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1().ValidatingAdmissionPolicies().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1().ValidatingAdmissionPolicies().Watch(ctx, options)
+ },
+ },
+ &apiadmissionregistrationv1.ValidatingAdmissionPolicy{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *validatingAdmissionPolicyInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredValidatingAdmissionPolicyInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *validatingAdmissionPolicyInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiadmissionregistrationv1.ValidatingAdmissionPolicy{}, f.defaultInformer)
+}
+
+func (f *validatingAdmissionPolicyInformer) Lister() admissionregistrationv1.ValidatingAdmissionPolicyLister {
+ return admissionregistrationv1.NewValidatingAdmissionPolicyLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1/validatingadmissionpolicybinding.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1/validatingadmissionpolicybinding.go
new file mode 100644
index 00000000000..e0c35ec5e37
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1/validatingadmissionpolicybinding.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apiadmissionregistrationv1 "k8s.io/api/admissionregistration/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ admissionregistrationv1 "k8s.io/client-go/listers/admissionregistration/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ValidatingAdmissionPolicyBindingInformer provides access to a shared informer and lister for
+// ValidatingAdmissionPolicyBindings.
+type ValidatingAdmissionPolicyBindingInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() admissionregistrationv1.ValidatingAdmissionPolicyBindingLister
+}
+
+type validatingAdmissionPolicyBindingInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewValidatingAdmissionPolicyBindingInformer constructs a new informer for ValidatingAdmissionPolicyBinding 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 NewValidatingAdmissionPolicyBindingInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredValidatingAdmissionPolicyBindingInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredValidatingAdmissionPolicyBindingInformer constructs a new informer for ValidatingAdmissionPolicyBinding 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 NewFilteredValidatingAdmissionPolicyBindingInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1().ValidatingAdmissionPolicyBindings().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1().ValidatingAdmissionPolicyBindings().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1().ValidatingAdmissionPolicyBindings().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1().ValidatingAdmissionPolicyBindings().Watch(ctx, options)
+ },
+ },
+ &apiadmissionregistrationv1.ValidatingAdmissionPolicyBinding{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *validatingAdmissionPolicyBindingInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredValidatingAdmissionPolicyBindingInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *validatingAdmissionPolicyBindingInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiadmissionregistrationv1.ValidatingAdmissionPolicyBinding{}, f.defaultInformer)
+}
+
+func (f *validatingAdmissionPolicyBindingInformer) Lister() admissionregistrationv1.ValidatingAdmissionPolicyBindingLister {
+ return admissionregistrationv1.NewValidatingAdmissionPolicyBindingLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1/validatingwebhookconfiguration.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1/validatingwebhookconfiguration.go
new file mode 100644
index 00000000000..8ddeb0492d9
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1/validatingwebhookconfiguration.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apiadmissionregistrationv1 "k8s.io/api/admissionregistration/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ admissionregistrationv1 "k8s.io/client-go/listers/admissionregistration/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ValidatingWebhookConfigurationInformer provides access to a shared informer and lister for
+// ValidatingWebhookConfigurations.
+type ValidatingWebhookConfigurationInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() admissionregistrationv1.ValidatingWebhookConfigurationLister
+}
+
+type validatingWebhookConfigurationInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewValidatingWebhookConfigurationInformer constructs a new informer for ValidatingWebhookConfiguration 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 NewValidatingWebhookConfigurationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredValidatingWebhookConfigurationInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredValidatingWebhookConfigurationInformer constructs a new informer for ValidatingWebhookConfiguration 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 NewFilteredValidatingWebhookConfigurationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1().ValidatingWebhookConfigurations().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1().ValidatingWebhookConfigurations().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1().ValidatingWebhookConfigurations().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1().ValidatingWebhookConfigurations().Watch(ctx, options)
+ },
+ },
+ &apiadmissionregistrationv1.ValidatingWebhookConfiguration{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *validatingWebhookConfigurationInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredValidatingWebhookConfigurationInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *validatingWebhookConfigurationInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiadmissionregistrationv1.ValidatingWebhookConfiguration{}, f.defaultInformer)
+}
+
+func (f *validatingWebhookConfigurationInformer) Lister() admissionregistrationv1.ValidatingWebhookConfigurationLister {
+ return admissionregistrationv1.NewValidatingWebhookConfigurationLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/interface.go
new file mode 100644
index 00000000000..68ae4e25cb8
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/interface.go
@@ -0,0 +1,66 @@
+/*
+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 "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // MutatingAdmissionPolicies returns a MutatingAdmissionPolicyInformer.
+ MutatingAdmissionPolicies() MutatingAdmissionPolicyInformer
+ // MutatingAdmissionPolicyBindings returns a MutatingAdmissionPolicyBindingInformer.
+ MutatingAdmissionPolicyBindings() MutatingAdmissionPolicyBindingInformer
+ // ValidatingAdmissionPolicies returns a ValidatingAdmissionPolicyInformer.
+ ValidatingAdmissionPolicies() ValidatingAdmissionPolicyInformer
+ // ValidatingAdmissionPolicyBindings returns a ValidatingAdmissionPolicyBindingInformer.
+ ValidatingAdmissionPolicyBindings() ValidatingAdmissionPolicyBindingInformer
+}
+
+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}
+}
+
+// MutatingAdmissionPolicies returns a MutatingAdmissionPolicyInformer.
+func (v *version) MutatingAdmissionPolicies() MutatingAdmissionPolicyInformer {
+ return &mutatingAdmissionPolicyInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// MutatingAdmissionPolicyBindings returns a MutatingAdmissionPolicyBindingInformer.
+func (v *version) MutatingAdmissionPolicyBindings() MutatingAdmissionPolicyBindingInformer {
+ return &mutatingAdmissionPolicyBindingInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// ValidatingAdmissionPolicies returns a ValidatingAdmissionPolicyInformer.
+func (v *version) ValidatingAdmissionPolicies() ValidatingAdmissionPolicyInformer {
+ return &validatingAdmissionPolicyInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// ValidatingAdmissionPolicyBindings returns a ValidatingAdmissionPolicyBindingInformer.
+func (v *version) ValidatingAdmissionPolicyBindings() ValidatingAdmissionPolicyBindingInformer {
+ return &validatingAdmissionPolicyBindingInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/mutatingadmissionpolicy.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/mutatingadmissionpolicy.go
new file mode 100644
index 00000000000..939eff98353
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/mutatingadmissionpolicy.go
@@ -0,0 +1,101 @@
+/*
+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"
+
+ apiadmissionregistrationv1alpha1 "k8s.io/api/admissionregistration/v1alpha1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ admissionregistrationv1alpha1 "k8s.io/client-go/listers/admissionregistration/v1alpha1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// MutatingAdmissionPolicyInformer provides access to a shared informer and lister for
+// MutatingAdmissionPolicies.
+type MutatingAdmissionPolicyInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() admissionregistrationv1alpha1.MutatingAdmissionPolicyLister
+}
+
+type mutatingAdmissionPolicyInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewMutatingAdmissionPolicyInformer constructs a new informer for MutatingAdmissionPolicy 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 NewMutatingAdmissionPolicyInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredMutatingAdmissionPolicyInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredMutatingAdmissionPolicyInformer constructs a new informer for MutatingAdmissionPolicy 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 NewFilteredMutatingAdmissionPolicyInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1alpha1().MutatingAdmissionPolicies().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1alpha1().MutatingAdmissionPolicies().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1alpha1().MutatingAdmissionPolicies().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1alpha1().MutatingAdmissionPolicies().Watch(ctx, options)
+ },
+ },
+ &apiadmissionregistrationv1alpha1.MutatingAdmissionPolicy{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *mutatingAdmissionPolicyInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredMutatingAdmissionPolicyInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *mutatingAdmissionPolicyInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiadmissionregistrationv1alpha1.MutatingAdmissionPolicy{}, f.defaultInformer)
+}
+
+func (f *mutatingAdmissionPolicyInformer) Lister() admissionregistrationv1alpha1.MutatingAdmissionPolicyLister {
+ return admissionregistrationv1alpha1.NewMutatingAdmissionPolicyLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/mutatingadmissionpolicybinding.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/mutatingadmissionpolicybinding.go
new file mode 100644
index 00000000000..a94f6d27bdf
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/mutatingadmissionpolicybinding.go
@@ -0,0 +1,101 @@
+/*
+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"
+
+ apiadmissionregistrationv1alpha1 "k8s.io/api/admissionregistration/v1alpha1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ admissionregistrationv1alpha1 "k8s.io/client-go/listers/admissionregistration/v1alpha1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// MutatingAdmissionPolicyBindingInformer provides access to a shared informer and lister for
+// MutatingAdmissionPolicyBindings.
+type MutatingAdmissionPolicyBindingInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() admissionregistrationv1alpha1.MutatingAdmissionPolicyBindingLister
+}
+
+type mutatingAdmissionPolicyBindingInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewMutatingAdmissionPolicyBindingInformer constructs a new informer for MutatingAdmissionPolicyBinding 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 NewMutatingAdmissionPolicyBindingInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredMutatingAdmissionPolicyBindingInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredMutatingAdmissionPolicyBindingInformer constructs a new informer for MutatingAdmissionPolicyBinding 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 NewFilteredMutatingAdmissionPolicyBindingInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1alpha1().MutatingAdmissionPolicyBindings().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1alpha1().MutatingAdmissionPolicyBindings().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1alpha1().MutatingAdmissionPolicyBindings().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1alpha1().MutatingAdmissionPolicyBindings().Watch(ctx, options)
+ },
+ },
+ &apiadmissionregistrationv1alpha1.MutatingAdmissionPolicyBinding{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *mutatingAdmissionPolicyBindingInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredMutatingAdmissionPolicyBindingInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *mutatingAdmissionPolicyBindingInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiadmissionregistrationv1alpha1.MutatingAdmissionPolicyBinding{}, f.defaultInformer)
+}
+
+func (f *mutatingAdmissionPolicyBindingInformer) Lister() admissionregistrationv1alpha1.MutatingAdmissionPolicyBindingLister {
+ return admissionregistrationv1alpha1.NewMutatingAdmissionPolicyBindingLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/validatingadmissionpolicy.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/validatingadmissionpolicy.go
new file mode 100644
index 00000000000..1a6f7d56def
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/validatingadmissionpolicy.go
@@ -0,0 +1,101 @@
+/*
+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"
+
+ apiadmissionregistrationv1alpha1 "k8s.io/api/admissionregistration/v1alpha1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ admissionregistrationv1alpha1 "k8s.io/client-go/listers/admissionregistration/v1alpha1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ValidatingAdmissionPolicyInformer provides access to a shared informer and lister for
+// ValidatingAdmissionPolicies.
+type ValidatingAdmissionPolicyInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() admissionregistrationv1alpha1.ValidatingAdmissionPolicyLister
+}
+
+type validatingAdmissionPolicyInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewValidatingAdmissionPolicyInformer constructs a new informer for ValidatingAdmissionPolicy 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 NewValidatingAdmissionPolicyInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredValidatingAdmissionPolicyInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredValidatingAdmissionPolicyInformer constructs a new informer for ValidatingAdmissionPolicy 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 NewFilteredValidatingAdmissionPolicyInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1alpha1().ValidatingAdmissionPolicies().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1alpha1().ValidatingAdmissionPolicies().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1alpha1().ValidatingAdmissionPolicies().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1alpha1().ValidatingAdmissionPolicies().Watch(ctx, options)
+ },
+ },
+ &apiadmissionregistrationv1alpha1.ValidatingAdmissionPolicy{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *validatingAdmissionPolicyInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredValidatingAdmissionPolicyInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *validatingAdmissionPolicyInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiadmissionregistrationv1alpha1.ValidatingAdmissionPolicy{}, f.defaultInformer)
+}
+
+func (f *validatingAdmissionPolicyInformer) Lister() admissionregistrationv1alpha1.ValidatingAdmissionPolicyLister {
+ return admissionregistrationv1alpha1.NewValidatingAdmissionPolicyLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/validatingadmissionpolicybinding.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/validatingadmissionpolicybinding.go
new file mode 100644
index 00000000000..3afaa3beca3
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/validatingadmissionpolicybinding.go
@@ -0,0 +1,101 @@
+/*
+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"
+
+ apiadmissionregistrationv1alpha1 "k8s.io/api/admissionregistration/v1alpha1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ admissionregistrationv1alpha1 "k8s.io/client-go/listers/admissionregistration/v1alpha1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ValidatingAdmissionPolicyBindingInformer provides access to a shared informer and lister for
+// ValidatingAdmissionPolicyBindings.
+type ValidatingAdmissionPolicyBindingInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingLister
+}
+
+type validatingAdmissionPolicyBindingInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewValidatingAdmissionPolicyBindingInformer constructs a new informer for ValidatingAdmissionPolicyBinding 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 NewValidatingAdmissionPolicyBindingInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredValidatingAdmissionPolicyBindingInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredValidatingAdmissionPolicyBindingInformer constructs a new informer for ValidatingAdmissionPolicyBinding 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 NewFilteredValidatingAdmissionPolicyBindingInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1alpha1().ValidatingAdmissionPolicyBindings().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1alpha1().ValidatingAdmissionPolicyBindings().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1alpha1().ValidatingAdmissionPolicyBindings().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1alpha1().ValidatingAdmissionPolicyBindings().Watch(ctx, options)
+ },
+ },
+ &apiadmissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *validatingAdmissionPolicyBindingInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredValidatingAdmissionPolicyBindingInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *validatingAdmissionPolicyBindingInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiadmissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding{}, f.defaultInformer)
+}
+
+func (f *validatingAdmissionPolicyBindingInformer) Lister() admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingLister {
+ return admissionregistrationv1alpha1.NewValidatingAdmissionPolicyBindingLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/interface.go
new file mode 100644
index 00000000000..815960df592
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/interface.go
@@ -0,0 +1,66 @@
+/*
+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 v1beta1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // MutatingWebhookConfigurations returns a MutatingWebhookConfigurationInformer.
+ MutatingWebhookConfigurations() MutatingWebhookConfigurationInformer
+ // ValidatingAdmissionPolicies returns a ValidatingAdmissionPolicyInformer.
+ ValidatingAdmissionPolicies() ValidatingAdmissionPolicyInformer
+ // ValidatingAdmissionPolicyBindings returns a ValidatingAdmissionPolicyBindingInformer.
+ ValidatingAdmissionPolicyBindings() ValidatingAdmissionPolicyBindingInformer
+ // ValidatingWebhookConfigurations returns a ValidatingWebhookConfigurationInformer.
+ ValidatingWebhookConfigurations() ValidatingWebhookConfigurationInformer
+}
+
+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}
+}
+
+// MutatingWebhookConfigurations returns a MutatingWebhookConfigurationInformer.
+func (v *version) MutatingWebhookConfigurations() MutatingWebhookConfigurationInformer {
+ return &mutatingWebhookConfigurationInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// ValidatingAdmissionPolicies returns a ValidatingAdmissionPolicyInformer.
+func (v *version) ValidatingAdmissionPolicies() ValidatingAdmissionPolicyInformer {
+ return &validatingAdmissionPolicyInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// ValidatingAdmissionPolicyBindings returns a ValidatingAdmissionPolicyBindingInformer.
+func (v *version) ValidatingAdmissionPolicyBindings() ValidatingAdmissionPolicyBindingInformer {
+ return &validatingAdmissionPolicyBindingInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// ValidatingWebhookConfigurations returns a ValidatingWebhookConfigurationInformer.
+func (v *version) ValidatingWebhookConfigurations() ValidatingWebhookConfigurationInformer {
+ return &validatingWebhookConfigurationInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go
new file mode 100644
index 00000000000..697dae852a8
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apiadmissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ admissionregistrationv1beta1 "k8s.io/client-go/listers/admissionregistration/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// MutatingWebhookConfigurationInformer provides access to a shared informer and lister for
+// MutatingWebhookConfigurations.
+type MutatingWebhookConfigurationInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() admissionregistrationv1beta1.MutatingWebhookConfigurationLister
+}
+
+type mutatingWebhookConfigurationInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewMutatingWebhookConfigurationInformer constructs a new informer for MutatingWebhookConfiguration 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 NewMutatingWebhookConfigurationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredMutatingWebhookConfigurationInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredMutatingWebhookConfigurationInformer constructs a new informer for MutatingWebhookConfiguration 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 NewFilteredMutatingWebhookConfigurationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1beta1().MutatingWebhookConfigurations().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1beta1().MutatingWebhookConfigurations().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1beta1().MutatingWebhookConfigurations().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1beta1().MutatingWebhookConfigurations().Watch(ctx, options)
+ },
+ },
+ &apiadmissionregistrationv1beta1.MutatingWebhookConfiguration{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *mutatingWebhookConfigurationInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredMutatingWebhookConfigurationInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *mutatingWebhookConfigurationInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiadmissionregistrationv1beta1.MutatingWebhookConfiguration{}, f.defaultInformer)
+}
+
+func (f *mutatingWebhookConfigurationInformer) Lister() admissionregistrationv1beta1.MutatingWebhookConfigurationLister {
+ return admissionregistrationv1beta1.NewMutatingWebhookConfigurationLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingadmissionpolicy.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingadmissionpolicy.go
new file mode 100644
index 00000000000..31c3569d94d
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingadmissionpolicy.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apiadmissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ admissionregistrationv1beta1 "k8s.io/client-go/listers/admissionregistration/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ValidatingAdmissionPolicyInformer provides access to a shared informer and lister for
+// ValidatingAdmissionPolicies.
+type ValidatingAdmissionPolicyInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() admissionregistrationv1beta1.ValidatingAdmissionPolicyLister
+}
+
+type validatingAdmissionPolicyInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewValidatingAdmissionPolicyInformer constructs a new informer for ValidatingAdmissionPolicy 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 NewValidatingAdmissionPolicyInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredValidatingAdmissionPolicyInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredValidatingAdmissionPolicyInformer constructs a new informer for ValidatingAdmissionPolicy 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 NewFilteredValidatingAdmissionPolicyInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1beta1().ValidatingAdmissionPolicies().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1beta1().ValidatingAdmissionPolicies().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1beta1().ValidatingAdmissionPolicies().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1beta1().ValidatingAdmissionPolicies().Watch(ctx, options)
+ },
+ },
+ &apiadmissionregistrationv1beta1.ValidatingAdmissionPolicy{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *validatingAdmissionPolicyInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredValidatingAdmissionPolicyInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *validatingAdmissionPolicyInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiadmissionregistrationv1beta1.ValidatingAdmissionPolicy{}, f.defaultInformer)
+}
+
+func (f *validatingAdmissionPolicyInformer) Lister() admissionregistrationv1beta1.ValidatingAdmissionPolicyLister {
+ return admissionregistrationv1beta1.NewValidatingAdmissionPolicyLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingadmissionpolicybinding.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingadmissionpolicybinding.go
new file mode 100644
index 00000000000..fb2c10e3e70
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingadmissionpolicybinding.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apiadmissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ admissionregistrationv1beta1 "k8s.io/client-go/listers/admissionregistration/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ValidatingAdmissionPolicyBindingInformer provides access to a shared informer and lister for
+// ValidatingAdmissionPolicyBindings.
+type ValidatingAdmissionPolicyBindingInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingLister
+}
+
+type validatingAdmissionPolicyBindingInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewValidatingAdmissionPolicyBindingInformer constructs a new informer for ValidatingAdmissionPolicyBinding 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 NewValidatingAdmissionPolicyBindingInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredValidatingAdmissionPolicyBindingInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredValidatingAdmissionPolicyBindingInformer constructs a new informer for ValidatingAdmissionPolicyBinding 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 NewFilteredValidatingAdmissionPolicyBindingInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1beta1().ValidatingAdmissionPolicyBindings().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1beta1().ValidatingAdmissionPolicyBindings().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1beta1().ValidatingAdmissionPolicyBindings().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1beta1().ValidatingAdmissionPolicyBindings().Watch(ctx, options)
+ },
+ },
+ &apiadmissionregistrationv1beta1.ValidatingAdmissionPolicyBinding{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *validatingAdmissionPolicyBindingInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredValidatingAdmissionPolicyBindingInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *validatingAdmissionPolicyBindingInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiadmissionregistrationv1beta1.ValidatingAdmissionPolicyBinding{}, f.defaultInformer)
+}
+
+func (f *validatingAdmissionPolicyBindingInformer) Lister() admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingLister {
+ return admissionregistrationv1beta1.NewValidatingAdmissionPolicyBindingLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingwebhookconfiguration.go b/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingwebhookconfiguration.go
new file mode 100644
index 00000000000..2eb6991cb5b
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingwebhookconfiguration.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apiadmissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ admissionregistrationv1beta1 "k8s.io/client-go/listers/admissionregistration/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ValidatingWebhookConfigurationInformer provides access to a shared informer and lister for
+// ValidatingWebhookConfigurations.
+type ValidatingWebhookConfigurationInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() admissionregistrationv1beta1.ValidatingWebhookConfigurationLister
+}
+
+type validatingWebhookConfigurationInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewValidatingWebhookConfigurationInformer constructs a new informer for ValidatingWebhookConfiguration 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 NewValidatingWebhookConfigurationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredValidatingWebhookConfigurationInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredValidatingWebhookConfigurationInformer constructs a new informer for ValidatingWebhookConfiguration 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 NewFilteredValidatingWebhookConfigurationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1beta1().ValidatingWebhookConfigurations().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1beta1().ValidatingWebhookConfigurations().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1beta1().ValidatingWebhookConfigurations().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AdmissionregistrationV1beta1().ValidatingWebhookConfigurations().Watch(ctx, options)
+ },
+ },
+ &apiadmissionregistrationv1beta1.ValidatingWebhookConfiguration{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *validatingWebhookConfigurationInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredValidatingWebhookConfigurationInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *validatingWebhookConfigurationInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiadmissionregistrationv1beta1.ValidatingWebhookConfiguration{}, f.defaultInformer)
+}
+
+func (f *validatingWebhookConfigurationInformer) Lister() admissionregistrationv1beta1.ValidatingWebhookConfigurationLister {
+ return admissionregistrationv1beta1.NewValidatingWebhookConfigurationLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/apiserverinternal/interface.go b/vendor/k8s.io/client-go/informers/apiserverinternal/interface.go
new file mode 100644
index 00000000000..122c030998d
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apiserverinternal/interface.go
@@ -0,0 +1,46 @@
+/*
+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 apiserverinternal
+
+import (
+ v1alpha1 "k8s.io/client-go/informers/apiserverinternal/v1alpha1"
+ internalinterfaces "k8s.io/client-go/informers/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)
+}
diff --git a/vendor/k8s.io/client-go/informers/apiserverinternal/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/apiserverinternal/v1alpha1/interface.go
new file mode 100644
index 00000000000..9778325c65c
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apiserverinternal/v1alpha1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // StorageVersions returns a StorageVersionInformer.
+ StorageVersions() StorageVersionInformer
+}
+
+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}
+}
+
+// StorageVersions returns a StorageVersionInformer.
+func (v *version) StorageVersions() StorageVersionInformer {
+ return &storageVersionInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/apiserverinternal/v1alpha1/storageversion.go b/vendor/k8s.io/client-go/informers/apiserverinternal/v1alpha1/storageversion.go
new file mode 100644
index 00000000000..e8e1669d122
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apiserverinternal/v1alpha1/storageversion.go
@@ -0,0 +1,101 @@
+/*
+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"
+
+ apiapiserverinternalv1alpha1 "k8s.io/api/apiserverinternal/v1alpha1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ apiserverinternalv1alpha1 "k8s.io/client-go/listers/apiserverinternal/v1alpha1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// StorageVersionInformer provides access to a shared informer and lister for
+// StorageVersions.
+type StorageVersionInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() apiserverinternalv1alpha1.StorageVersionLister
+}
+
+type storageVersionInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewStorageVersionInformer constructs a new informer for StorageVersion 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 NewStorageVersionInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredStorageVersionInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredStorageVersionInformer constructs a new informer for StorageVersion 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 NewFilteredStorageVersionInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.InternalV1alpha1().StorageVersions().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.InternalV1alpha1().StorageVersions().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.InternalV1alpha1().StorageVersions().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.InternalV1alpha1().StorageVersions().Watch(ctx, options)
+ },
+ },
+ &apiapiserverinternalv1alpha1.StorageVersion{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *storageVersionInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredStorageVersionInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *storageVersionInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiapiserverinternalv1alpha1.StorageVersion{}, f.defaultInformer)
+}
+
+func (f *storageVersionInformer) Lister() apiserverinternalv1alpha1.StorageVersionLister {
+ return apiserverinternalv1alpha1.NewStorageVersionLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/apps/interface.go b/vendor/k8s.io/client-go/informers/apps/interface.go
new file mode 100644
index 00000000000..02eefe5842e
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apps/interface.go
@@ -0,0 +1,62 @@
+/*
+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 apps
+
+import (
+ v1 "k8s.io/client-go/informers/apps/v1"
+ v1beta1 "k8s.io/client-go/informers/apps/v1beta1"
+ v1beta2 "k8s.io/client-go/informers/apps/v1beta2"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to each of this group's versions.
+type Interface interface {
+ // V1 provides access to shared informers for resources in V1.
+ V1() v1.Interface
+ // V1beta1 provides access to shared informers for resources in V1beta1.
+ V1beta1() v1beta1.Interface
+ // V1beta2 provides access to shared informers for resources in V1beta2.
+ V1beta2() v1beta2.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}
+}
+
+// V1 returns a new v1.Interface.
+func (g *group) V1() v1.Interface {
+ return v1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1beta1 returns a new v1beta1.Interface.
+func (g *group) V1beta1() v1beta1.Interface {
+ return v1beta1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1beta2 returns a new v1beta2.Interface.
+func (g *group) V1beta2() v1beta2.Interface {
+ return v1beta2.New(g.factory, g.namespace, g.tweakListOptions)
+}
diff --git a/vendor/k8s.io/client-go/informers/apps/v1/controllerrevision.go b/vendor/k8s.io/client-go/informers/apps/v1/controllerrevision.go
new file mode 100644
index 00000000000..64eeddec0e8
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apps/v1/controllerrevision.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apiappsv1 "k8s.io/api/apps/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ appsv1 "k8s.io/client-go/listers/apps/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ControllerRevisionInformer provides access to a shared informer and lister for
+// ControllerRevisions.
+type ControllerRevisionInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() appsv1.ControllerRevisionLister
+}
+
+type controllerRevisionInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewControllerRevisionInformer constructs a new informer for ControllerRevision 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 NewControllerRevisionInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredControllerRevisionInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredControllerRevisionInformer constructs a new informer for ControllerRevision 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 NewFilteredControllerRevisionInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().ControllerRevisions(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().ControllerRevisions(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().ControllerRevisions(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().ControllerRevisions(namespace).Watch(ctx, options)
+ },
+ },
+ &apiappsv1.ControllerRevision{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *controllerRevisionInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredControllerRevisionInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *controllerRevisionInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiappsv1.ControllerRevision{}, f.defaultInformer)
+}
+
+func (f *controllerRevisionInformer) Lister() appsv1.ControllerRevisionLister {
+ return appsv1.NewControllerRevisionLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/apps/v1/daemonset.go b/vendor/k8s.io/client-go/informers/apps/v1/daemonset.go
new file mode 100644
index 00000000000..4a3e95e1f10
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apps/v1/daemonset.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apiappsv1 "k8s.io/api/apps/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ appsv1 "k8s.io/client-go/listers/apps/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DaemonSetInformer provides access to a shared informer and lister for
+// DaemonSets.
+type DaemonSetInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() appsv1.DaemonSetLister
+}
+
+type daemonSetInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewDaemonSetInformer constructs a new informer for DaemonSet 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 NewDaemonSetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredDaemonSetInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredDaemonSetInformer constructs a new informer for DaemonSet 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 NewFilteredDaemonSetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().DaemonSets(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().DaemonSets(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().DaemonSets(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().DaemonSets(namespace).Watch(ctx, options)
+ },
+ },
+ &apiappsv1.DaemonSet{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *daemonSetInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredDaemonSetInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *daemonSetInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiappsv1.DaemonSet{}, f.defaultInformer)
+}
+
+func (f *daemonSetInformer) Lister() appsv1.DaemonSetLister {
+ return appsv1.NewDaemonSetLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/apps/v1/deployment.go b/vendor/k8s.io/client-go/informers/apps/v1/deployment.go
new file mode 100644
index 00000000000..9c0c20c5366
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apps/v1/deployment.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apiappsv1 "k8s.io/api/apps/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ appsv1 "k8s.io/client-go/listers/apps/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DeploymentInformer provides access to a shared informer and lister for
+// Deployments.
+type DeploymentInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() appsv1.DeploymentLister
+}
+
+type deploymentInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewDeploymentInformer constructs a new informer for Deployment 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 NewDeploymentInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredDeploymentInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredDeploymentInformer constructs a new informer for Deployment 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 NewFilteredDeploymentInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().Deployments(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().Deployments(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().Deployments(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().Deployments(namespace).Watch(ctx, options)
+ },
+ },
+ &apiappsv1.Deployment{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *deploymentInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredDeploymentInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *deploymentInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiappsv1.Deployment{}, f.defaultInformer)
+}
+
+func (f *deploymentInformer) Lister() appsv1.DeploymentLister {
+ return appsv1.NewDeploymentLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/apps/v1/interface.go b/vendor/k8s.io/client-go/informers/apps/v1/interface.go
new file mode 100644
index 00000000000..fab1e76bd91
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apps/v1/interface.go
@@ -0,0 +1,73 @@
+/*
+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 v1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // ControllerRevisions returns a ControllerRevisionInformer.
+ ControllerRevisions() ControllerRevisionInformer
+ // DaemonSets returns a DaemonSetInformer.
+ DaemonSets() DaemonSetInformer
+ // Deployments returns a DeploymentInformer.
+ Deployments() DeploymentInformer
+ // ReplicaSets returns a ReplicaSetInformer.
+ ReplicaSets() ReplicaSetInformer
+ // StatefulSets returns a StatefulSetInformer.
+ StatefulSets() StatefulSetInformer
+}
+
+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}
+}
+
+// ControllerRevisions returns a ControllerRevisionInformer.
+func (v *version) ControllerRevisions() ControllerRevisionInformer {
+ return &controllerRevisionInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// DaemonSets returns a DaemonSetInformer.
+func (v *version) DaemonSets() DaemonSetInformer {
+ return &daemonSetInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// Deployments returns a DeploymentInformer.
+func (v *version) Deployments() DeploymentInformer {
+ return &deploymentInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// ReplicaSets returns a ReplicaSetInformer.
+func (v *version) ReplicaSets() ReplicaSetInformer {
+ return &replicaSetInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// StatefulSets returns a StatefulSetInformer.
+func (v *version) StatefulSets() StatefulSetInformer {
+ return &statefulSetInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/apps/v1/replicaset.go b/vendor/k8s.io/client-go/informers/apps/v1/replicaset.go
new file mode 100644
index 00000000000..75c7a79e820
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apps/v1/replicaset.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apiappsv1 "k8s.io/api/apps/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ appsv1 "k8s.io/client-go/listers/apps/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ReplicaSetInformer provides access to a shared informer and lister for
+// ReplicaSets.
+type ReplicaSetInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() appsv1.ReplicaSetLister
+}
+
+type replicaSetInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewReplicaSetInformer constructs a new informer for ReplicaSet 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 NewReplicaSetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredReplicaSetInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredReplicaSetInformer constructs a new informer for ReplicaSet 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 NewFilteredReplicaSetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().ReplicaSets(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().ReplicaSets(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().ReplicaSets(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().ReplicaSets(namespace).Watch(ctx, options)
+ },
+ },
+ &apiappsv1.ReplicaSet{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *replicaSetInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredReplicaSetInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *replicaSetInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiappsv1.ReplicaSet{}, f.defaultInformer)
+}
+
+func (f *replicaSetInformer) Lister() appsv1.ReplicaSetLister {
+ return appsv1.NewReplicaSetLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/apps/v1/statefulset.go b/vendor/k8s.io/client-go/informers/apps/v1/statefulset.go
new file mode 100644
index 00000000000..f759e0464f4
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apps/v1/statefulset.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apiappsv1 "k8s.io/api/apps/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ appsv1 "k8s.io/client-go/listers/apps/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// StatefulSetInformer provides access to a shared informer and lister for
+// StatefulSets.
+type StatefulSetInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() appsv1.StatefulSetLister
+}
+
+type statefulSetInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewStatefulSetInformer constructs a new informer for StatefulSet 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 NewStatefulSetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredStatefulSetInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredStatefulSetInformer constructs a new informer for StatefulSet 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 NewFilteredStatefulSetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().StatefulSets(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().StatefulSets(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().StatefulSets(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1().StatefulSets(namespace).Watch(ctx, options)
+ },
+ },
+ &apiappsv1.StatefulSet{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *statefulSetInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredStatefulSetInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *statefulSetInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiappsv1.StatefulSet{}, f.defaultInformer)
+}
+
+func (f *statefulSetInformer) Lister() appsv1.StatefulSetLister {
+ return appsv1.NewStatefulSetLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta1/controllerrevision.go b/vendor/k8s.io/client-go/informers/apps/v1beta1/controllerrevision.go
new file mode 100644
index 00000000000..79b2fb907e2
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apps/v1beta1/controllerrevision.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apiappsv1beta1 "k8s.io/api/apps/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ appsv1beta1 "k8s.io/client-go/listers/apps/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ControllerRevisionInformer provides access to a shared informer and lister for
+// ControllerRevisions.
+type ControllerRevisionInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() appsv1beta1.ControllerRevisionLister
+}
+
+type controllerRevisionInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewControllerRevisionInformer constructs a new informer for ControllerRevision 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 NewControllerRevisionInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredControllerRevisionInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredControllerRevisionInformer constructs a new informer for ControllerRevision 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 NewFilteredControllerRevisionInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta1().ControllerRevisions(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta1().ControllerRevisions(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta1().ControllerRevisions(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta1().ControllerRevisions(namespace).Watch(ctx, options)
+ },
+ },
+ &apiappsv1beta1.ControllerRevision{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *controllerRevisionInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredControllerRevisionInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *controllerRevisionInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiappsv1beta1.ControllerRevision{}, f.defaultInformer)
+}
+
+func (f *controllerRevisionInformer) Lister() appsv1beta1.ControllerRevisionLister {
+ return appsv1beta1.NewControllerRevisionLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta1/deployment.go b/vendor/k8s.io/client-go/informers/apps/v1beta1/deployment.go
new file mode 100644
index 00000000000..1334c03a970
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apps/v1beta1/deployment.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apiappsv1beta1 "k8s.io/api/apps/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ appsv1beta1 "k8s.io/client-go/listers/apps/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DeploymentInformer provides access to a shared informer and lister for
+// Deployments.
+type DeploymentInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() appsv1beta1.DeploymentLister
+}
+
+type deploymentInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewDeploymentInformer constructs a new informer for Deployment 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 NewDeploymentInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredDeploymentInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredDeploymentInformer constructs a new informer for Deployment 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 NewFilteredDeploymentInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta1().Deployments(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta1().Deployments(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta1().Deployments(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta1().Deployments(namespace).Watch(ctx, options)
+ },
+ },
+ &apiappsv1beta1.Deployment{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *deploymentInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredDeploymentInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *deploymentInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiappsv1beta1.Deployment{}, f.defaultInformer)
+}
+
+func (f *deploymentInformer) Lister() appsv1beta1.DeploymentLister {
+ return appsv1beta1.NewDeploymentLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/apps/v1beta1/interface.go
new file mode 100644
index 00000000000..326939cd121
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apps/v1beta1/interface.go
@@ -0,0 +1,59 @@
+/*
+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 v1beta1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // ControllerRevisions returns a ControllerRevisionInformer.
+ ControllerRevisions() ControllerRevisionInformer
+ // Deployments returns a DeploymentInformer.
+ Deployments() DeploymentInformer
+ // StatefulSets returns a StatefulSetInformer.
+ StatefulSets() StatefulSetInformer
+}
+
+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}
+}
+
+// ControllerRevisions returns a ControllerRevisionInformer.
+func (v *version) ControllerRevisions() ControllerRevisionInformer {
+ return &controllerRevisionInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// Deployments returns a DeploymentInformer.
+func (v *version) Deployments() DeploymentInformer {
+ return &deploymentInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// StatefulSets returns a StatefulSetInformer.
+func (v *version) StatefulSets() StatefulSetInformer {
+ return &statefulSetInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta1/statefulset.go b/vendor/k8s.io/client-go/informers/apps/v1beta1/statefulset.go
new file mode 100644
index 00000000000..2d52ae02da6
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apps/v1beta1/statefulset.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apiappsv1beta1 "k8s.io/api/apps/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ appsv1beta1 "k8s.io/client-go/listers/apps/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// StatefulSetInformer provides access to a shared informer and lister for
+// StatefulSets.
+type StatefulSetInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() appsv1beta1.StatefulSetLister
+}
+
+type statefulSetInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewStatefulSetInformer constructs a new informer for StatefulSet 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 NewStatefulSetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredStatefulSetInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredStatefulSetInformer constructs a new informer for StatefulSet 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 NewFilteredStatefulSetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta1().StatefulSets(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta1().StatefulSets(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta1().StatefulSets(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta1().StatefulSets(namespace).Watch(ctx, options)
+ },
+ },
+ &apiappsv1beta1.StatefulSet{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *statefulSetInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredStatefulSetInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *statefulSetInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiappsv1beta1.StatefulSet{}, f.defaultInformer)
+}
+
+func (f *statefulSetInformer) Lister() appsv1beta1.StatefulSetLister {
+ return appsv1beta1.NewStatefulSetLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta2/controllerrevision.go b/vendor/k8s.io/client-go/informers/apps/v1beta2/controllerrevision.go
new file mode 100644
index 00000000000..0936ef7b962
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apps/v1beta2/controllerrevision.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta2
+
+import (
+ context "context"
+ time "time"
+
+ apiappsv1beta2 "k8s.io/api/apps/v1beta2"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ appsv1beta2 "k8s.io/client-go/listers/apps/v1beta2"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ControllerRevisionInformer provides access to a shared informer and lister for
+// ControllerRevisions.
+type ControllerRevisionInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() appsv1beta2.ControllerRevisionLister
+}
+
+type controllerRevisionInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewControllerRevisionInformer constructs a new informer for ControllerRevision 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 NewControllerRevisionInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredControllerRevisionInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredControllerRevisionInformer constructs a new informer for ControllerRevision 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 NewFilteredControllerRevisionInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().ControllerRevisions(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().ControllerRevisions(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().ControllerRevisions(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().ControllerRevisions(namespace).Watch(ctx, options)
+ },
+ },
+ &apiappsv1beta2.ControllerRevision{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *controllerRevisionInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredControllerRevisionInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *controllerRevisionInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiappsv1beta2.ControllerRevision{}, f.defaultInformer)
+}
+
+func (f *controllerRevisionInformer) Lister() appsv1beta2.ControllerRevisionLister {
+ return appsv1beta2.NewControllerRevisionLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta2/daemonset.go b/vendor/k8s.io/client-go/informers/apps/v1beta2/daemonset.go
new file mode 100644
index 00000000000..d5c49d77f26
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apps/v1beta2/daemonset.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta2
+
+import (
+ context "context"
+ time "time"
+
+ apiappsv1beta2 "k8s.io/api/apps/v1beta2"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ appsv1beta2 "k8s.io/client-go/listers/apps/v1beta2"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DaemonSetInformer provides access to a shared informer and lister for
+// DaemonSets.
+type DaemonSetInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() appsv1beta2.DaemonSetLister
+}
+
+type daemonSetInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewDaemonSetInformer constructs a new informer for DaemonSet 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 NewDaemonSetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredDaemonSetInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredDaemonSetInformer constructs a new informer for DaemonSet 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 NewFilteredDaemonSetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().DaemonSets(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().DaemonSets(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().DaemonSets(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().DaemonSets(namespace).Watch(ctx, options)
+ },
+ },
+ &apiappsv1beta2.DaemonSet{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *daemonSetInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredDaemonSetInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *daemonSetInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiappsv1beta2.DaemonSet{}, f.defaultInformer)
+}
+
+func (f *daemonSetInformer) Lister() appsv1beta2.DaemonSetLister {
+ return appsv1beta2.NewDaemonSetLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta2/deployment.go b/vendor/k8s.io/client-go/informers/apps/v1beta2/deployment.go
new file mode 100644
index 00000000000..575ddbfca87
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apps/v1beta2/deployment.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta2
+
+import (
+ context "context"
+ time "time"
+
+ apiappsv1beta2 "k8s.io/api/apps/v1beta2"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ appsv1beta2 "k8s.io/client-go/listers/apps/v1beta2"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DeploymentInformer provides access to a shared informer and lister for
+// Deployments.
+type DeploymentInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() appsv1beta2.DeploymentLister
+}
+
+type deploymentInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewDeploymentInformer constructs a new informer for Deployment 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 NewDeploymentInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredDeploymentInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredDeploymentInformer constructs a new informer for Deployment 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 NewFilteredDeploymentInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().Deployments(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().Deployments(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().Deployments(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().Deployments(namespace).Watch(ctx, options)
+ },
+ },
+ &apiappsv1beta2.Deployment{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *deploymentInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredDeploymentInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *deploymentInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiappsv1beta2.Deployment{}, f.defaultInformer)
+}
+
+func (f *deploymentInformer) Lister() appsv1beta2.DeploymentLister {
+ return appsv1beta2.NewDeploymentLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta2/interface.go b/vendor/k8s.io/client-go/informers/apps/v1beta2/interface.go
new file mode 100644
index 00000000000..ded89bd5bed
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apps/v1beta2/interface.go
@@ -0,0 +1,73 @@
+/*
+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 v1beta2
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // ControllerRevisions returns a ControllerRevisionInformer.
+ ControllerRevisions() ControllerRevisionInformer
+ // DaemonSets returns a DaemonSetInformer.
+ DaemonSets() DaemonSetInformer
+ // Deployments returns a DeploymentInformer.
+ Deployments() DeploymentInformer
+ // ReplicaSets returns a ReplicaSetInformer.
+ ReplicaSets() ReplicaSetInformer
+ // StatefulSets returns a StatefulSetInformer.
+ StatefulSets() StatefulSetInformer
+}
+
+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}
+}
+
+// ControllerRevisions returns a ControllerRevisionInformer.
+func (v *version) ControllerRevisions() ControllerRevisionInformer {
+ return &controllerRevisionInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// DaemonSets returns a DaemonSetInformer.
+func (v *version) DaemonSets() DaemonSetInformer {
+ return &daemonSetInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// Deployments returns a DeploymentInformer.
+func (v *version) Deployments() DeploymentInformer {
+ return &deploymentInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// ReplicaSets returns a ReplicaSetInformer.
+func (v *version) ReplicaSets() ReplicaSetInformer {
+ return &replicaSetInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// StatefulSets returns a StatefulSetInformer.
+func (v *version) StatefulSets() StatefulSetInformer {
+ return &statefulSetInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta2/replicaset.go b/vendor/k8s.io/client-go/informers/apps/v1beta2/replicaset.go
new file mode 100644
index 00000000000..cfc4b3289f6
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apps/v1beta2/replicaset.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta2
+
+import (
+ context "context"
+ time "time"
+
+ apiappsv1beta2 "k8s.io/api/apps/v1beta2"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ appsv1beta2 "k8s.io/client-go/listers/apps/v1beta2"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ReplicaSetInformer provides access to a shared informer and lister for
+// ReplicaSets.
+type ReplicaSetInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() appsv1beta2.ReplicaSetLister
+}
+
+type replicaSetInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewReplicaSetInformer constructs a new informer for ReplicaSet 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 NewReplicaSetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredReplicaSetInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredReplicaSetInformer constructs a new informer for ReplicaSet 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 NewFilteredReplicaSetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().ReplicaSets(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().ReplicaSets(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().ReplicaSets(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().ReplicaSets(namespace).Watch(ctx, options)
+ },
+ },
+ &apiappsv1beta2.ReplicaSet{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *replicaSetInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredReplicaSetInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *replicaSetInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiappsv1beta2.ReplicaSet{}, f.defaultInformer)
+}
+
+func (f *replicaSetInformer) Lister() appsv1beta2.ReplicaSetLister {
+ return appsv1beta2.NewReplicaSetLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/apps/v1beta2/statefulset.go b/vendor/k8s.io/client-go/informers/apps/v1beta2/statefulset.go
new file mode 100644
index 00000000000..a514c5bbb57
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/apps/v1beta2/statefulset.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta2
+
+import (
+ context "context"
+ time "time"
+
+ apiappsv1beta2 "k8s.io/api/apps/v1beta2"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ appsv1beta2 "k8s.io/client-go/listers/apps/v1beta2"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// StatefulSetInformer provides access to a shared informer and lister for
+// StatefulSets.
+type StatefulSetInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() appsv1beta2.StatefulSetLister
+}
+
+type statefulSetInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewStatefulSetInformer constructs a new informer for StatefulSet 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 NewStatefulSetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredStatefulSetInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredStatefulSetInformer constructs a new informer for StatefulSet 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 NewFilteredStatefulSetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().StatefulSets(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().StatefulSets(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().StatefulSets(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AppsV1beta2().StatefulSets(namespace).Watch(ctx, options)
+ },
+ },
+ &apiappsv1beta2.StatefulSet{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *statefulSetInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredStatefulSetInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *statefulSetInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiappsv1beta2.StatefulSet{}, f.defaultInformer)
+}
+
+func (f *statefulSetInformer) Lister() appsv1beta2.StatefulSetLister {
+ return appsv1beta2.NewStatefulSetLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/autoscaling/interface.go b/vendor/k8s.io/client-go/informers/autoscaling/interface.go
new file mode 100644
index 00000000000..2b3b2d0e50e
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/autoscaling/interface.go
@@ -0,0 +1,70 @@
+/*
+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 autoscaling
+
+import (
+ v1 "k8s.io/client-go/informers/autoscaling/v1"
+ v2 "k8s.io/client-go/informers/autoscaling/v2"
+ v2beta1 "k8s.io/client-go/informers/autoscaling/v2beta1"
+ v2beta2 "k8s.io/client-go/informers/autoscaling/v2beta2"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to each of this group's versions.
+type Interface interface {
+ // V1 provides access to shared informers for resources in V1.
+ V1() v1.Interface
+ // V2 provides access to shared informers for resources in V2.
+ V2() v2.Interface
+ // V2beta1 provides access to shared informers for resources in V2beta1.
+ V2beta1() v2beta1.Interface
+ // V2beta2 provides access to shared informers for resources in V2beta2.
+ V2beta2() v2beta2.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}
+}
+
+// V1 returns a new v1.Interface.
+func (g *group) V1() v1.Interface {
+ return v1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V2 returns a new v2.Interface.
+func (g *group) V2() v2.Interface {
+ return v2.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V2beta1 returns a new v2beta1.Interface.
+func (g *group) V2beta1() v2beta1.Interface {
+ return v2beta1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V2beta2 returns a new v2beta2.Interface.
+func (g *group) V2beta2() v2beta2.Interface {
+ return v2beta2.New(g.factory, g.namespace, g.tweakListOptions)
+}
diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v1/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/informers/autoscaling/v1/horizontalpodautoscaler.go
new file mode 100644
index 00000000000..e92f7563942
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/autoscaling/v1/horizontalpodautoscaler.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apiautoscalingv1 "k8s.io/api/autoscaling/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ autoscalingv1 "k8s.io/client-go/listers/autoscaling/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// HorizontalPodAutoscalerInformer provides access to a shared informer and lister for
+// HorizontalPodAutoscalers.
+type HorizontalPodAutoscalerInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() autoscalingv1.HorizontalPodAutoscalerLister
+}
+
+type horizontalPodAutoscalerInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewHorizontalPodAutoscalerInformer constructs a new informer for HorizontalPodAutoscaler 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 NewHorizontalPodAutoscalerInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredHorizontalPodAutoscalerInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredHorizontalPodAutoscalerInformer constructs a new informer for HorizontalPodAutoscaler 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 NewFilteredHorizontalPodAutoscalerInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AutoscalingV1().HorizontalPodAutoscalers(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AutoscalingV1().HorizontalPodAutoscalers(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AutoscalingV1().HorizontalPodAutoscalers(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AutoscalingV1().HorizontalPodAutoscalers(namespace).Watch(ctx, options)
+ },
+ },
+ &apiautoscalingv1.HorizontalPodAutoscaler{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *horizontalPodAutoscalerInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredHorizontalPodAutoscalerInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *horizontalPodAutoscalerInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiautoscalingv1.HorizontalPodAutoscaler{}, f.defaultInformer)
+}
+
+func (f *horizontalPodAutoscalerInformer) Lister() autoscalingv1.HorizontalPodAutoscalerLister {
+ return autoscalingv1.NewHorizontalPodAutoscalerLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v1/interface.go b/vendor/k8s.io/client-go/informers/autoscaling/v1/interface.go
new file mode 100644
index 00000000000..601d0f77f13
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/autoscaling/v1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 v1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // HorizontalPodAutoscalers returns a HorizontalPodAutoscalerInformer.
+ HorizontalPodAutoscalers() HorizontalPodAutoscalerInformer
+}
+
+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}
+}
+
+// HorizontalPodAutoscalers returns a HorizontalPodAutoscalerInformer.
+func (v *version) HorizontalPodAutoscalers() HorizontalPodAutoscalerInformer {
+ return &horizontalPodAutoscalerInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v2/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/informers/autoscaling/v2/horizontalpodautoscaler.go
new file mode 100644
index 00000000000..b5d4123e52e
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/autoscaling/v2/horizontalpodautoscaler.go
@@ -0,0 +1,102 @@
+/*
+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 v2
+
+import (
+ context "context"
+ time "time"
+
+ apiautoscalingv2 "k8s.io/api/autoscaling/v2"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ autoscalingv2 "k8s.io/client-go/listers/autoscaling/v2"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// HorizontalPodAutoscalerInformer provides access to a shared informer and lister for
+// HorizontalPodAutoscalers.
+type HorizontalPodAutoscalerInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() autoscalingv2.HorizontalPodAutoscalerLister
+}
+
+type horizontalPodAutoscalerInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewHorizontalPodAutoscalerInformer constructs a new informer for HorizontalPodAutoscaler 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 NewHorizontalPodAutoscalerInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredHorizontalPodAutoscalerInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredHorizontalPodAutoscalerInformer constructs a new informer for HorizontalPodAutoscaler 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 NewFilteredHorizontalPodAutoscalerInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AutoscalingV2().HorizontalPodAutoscalers(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AutoscalingV2().HorizontalPodAutoscalers(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AutoscalingV2().HorizontalPodAutoscalers(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AutoscalingV2().HorizontalPodAutoscalers(namespace).Watch(ctx, options)
+ },
+ },
+ &apiautoscalingv2.HorizontalPodAutoscaler{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *horizontalPodAutoscalerInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredHorizontalPodAutoscalerInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *horizontalPodAutoscalerInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiautoscalingv2.HorizontalPodAutoscaler{}, f.defaultInformer)
+}
+
+func (f *horizontalPodAutoscalerInformer) Lister() autoscalingv2.HorizontalPodAutoscalerLister {
+ return autoscalingv2.NewHorizontalPodAutoscalerLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v2/interface.go b/vendor/k8s.io/client-go/informers/autoscaling/v2/interface.go
new file mode 100644
index 00000000000..2c71908e403
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/autoscaling/v2/interface.go
@@ -0,0 +1,45 @@
+/*
+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 v2
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // HorizontalPodAutoscalers returns a HorizontalPodAutoscalerInformer.
+ HorizontalPodAutoscalers() HorizontalPodAutoscalerInformer
+}
+
+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}
+}
+
+// HorizontalPodAutoscalers returns a HorizontalPodAutoscalerInformer.
+func (v *version) HorizontalPodAutoscalers() HorizontalPodAutoscalerInformer {
+ return &horizontalPodAutoscalerInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/horizontalpodautoscaler.go
new file mode 100644
index 00000000000..5a64e7ef9e7
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/horizontalpodautoscaler.go
@@ -0,0 +1,102 @@
+/*
+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 v2beta1
+
+import (
+ context "context"
+ time "time"
+
+ apiautoscalingv2beta1 "k8s.io/api/autoscaling/v2beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ autoscalingv2beta1 "k8s.io/client-go/listers/autoscaling/v2beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// HorizontalPodAutoscalerInformer provides access to a shared informer and lister for
+// HorizontalPodAutoscalers.
+type HorizontalPodAutoscalerInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() autoscalingv2beta1.HorizontalPodAutoscalerLister
+}
+
+type horizontalPodAutoscalerInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewHorizontalPodAutoscalerInformer constructs a new informer for HorizontalPodAutoscaler 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 NewHorizontalPodAutoscalerInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredHorizontalPodAutoscalerInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredHorizontalPodAutoscalerInformer constructs a new informer for HorizontalPodAutoscaler 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 NewFilteredHorizontalPodAutoscalerInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AutoscalingV2beta1().HorizontalPodAutoscalers(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AutoscalingV2beta1().HorizontalPodAutoscalers(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AutoscalingV2beta1().HorizontalPodAutoscalers(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AutoscalingV2beta1().HorizontalPodAutoscalers(namespace).Watch(ctx, options)
+ },
+ },
+ &apiautoscalingv2beta1.HorizontalPodAutoscaler{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *horizontalPodAutoscalerInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredHorizontalPodAutoscalerInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *horizontalPodAutoscalerInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiautoscalingv2beta1.HorizontalPodAutoscaler{}, f.defaultInformer)
+}
+
+func (f *horizontalPodAutoscalerInformer) Lister() autoscalingv2beta1.HorizontalPodAutoscalerLister {
+ return autoscalingv2beta1.NewHorizontalPodAutoscalerLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/interface.go b/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/interface.go
new file mode 100644
index 00000000000..ff5d44b09d6
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/autoscaling/v2beta1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 v2beta1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // HorizontalPodAutoscalers returns a HorizontalPodAutoscalerInformer.
+ HorizontalPodAutoscalers() HorizontalPodAutoscalerInformer
+}
+
+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}
+}
+
+// HorizontalPodAutoscalers returns a HorizontalPodAutoscalerInformer.
+func (v *version) HorizontalPodAutoscalers() HorizontalPodAutoscalerInformer {
+ return &horizontalPodAutoscalerInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v2beta2/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/informers/autoscaling/v2beta2/horizontalpodautoscaler.go
new file mode 100644
index 00000000000..2d4c3f1de68
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/autoscaling/v2beta2/horizontalpodautoscaler.go
@@ -0,0 +1,102 @@
+/*
+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 v2beta2
+
+import (
+ context "context"
+ time "time"
+
+ apiautoscalingv2beta2 "k8s.io/api/autoscaling/v2beta2"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ autoscalingv2beta2 "k8s.io/client-go/listers/autoscaling/v2beta2"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// HorizontalPodAutoscalerInformer provides access to a shared informer and lister for
+// HorizontalPodAutoscalers.
+type HorizontalPodAutoscalerInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() autoscalingv2beta2.HorizontalPodAutoscalerLister
+}
+
+type horizontalPodAutoscalerInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewHorizontalPodAutoscalerInformer constructs a new informer for HorizontalPodAutoscaler 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 NewHorizontalPodAutoscalerInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredHorizontalPodAutoscalerInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredHorizontalPodAutoscalerInformer constructs a new informer for HorizontalPodAutoscaler 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 NewFilteredHorizontalPodAutoscalerInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AutoscalingV2beta2().HorizontalPodAutoscalers(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AutoscalingV2beta2().HorizontalPodAutoscalers(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AutoscalingV2beta2().HorizontalPodAutoscalers(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.AutoscalingV2beta2().HorizontalPodAutoscalers(namespace).Watch(ctx, options)
+ },
+ },
+ &apiautoscalingv2beta2.HorizontalPodAutoscaler{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *horizontalPodAutoscalerInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredHorizontalPodAutoscalerInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *horizontalPodAutoscalerInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiautoscalingv2beta2.HorizontalPodAutoscaler{}, f.defaultInformer)
+}
+
+func (f *horizontalPodAutoscalerInformer) Lister() autoscalingv2beta2.HorizontalPodAutoscalerLister {
+ return autoscalingv2beta2.NewHorizontalPodAutoscalerLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/autoscaling/v2beta2/interface.go b/vendor/k8s.io/client-go/informers/autoscaling/v2beta2/interface.go
new file mode 100644
index 00000000000..e482c57925f
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/autoscaling/v2beta2/interface.go
@@ -0,0 +1,45 @@
+/*
+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 v2beta2
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // HorizontalPodAutoscalers returns a HorizontalPodAutoscalerInformer.
+ HorizontalPodAutoscalers() HorizontalPodAutoscalerInformer
+}
+
+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}
+}
+
+// HorizontalPodAutoscalers returns a HorizontalPodAutoscalerInformer.
+func (v *version) HorizontalPodAutoscalers() HorizontalPodAutoscalerInformer {
+ return &horizontalPodAutoscalerInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/batch/interface.go b/vendor/k8s.io/client-go/informers/batch/interface.go
new file mode 100644
index 00000000000..53b81c7ecc6
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/batch/interface.go
@@ -0,0 +1,54 @@
+/*
+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 batch
+
+import (
+ v1 "k8s.io/client-go/informers/batch/v1"
+ v1beta1 "k8s.io/client-go/informers/batch/v1beta1"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to each of this group's versions.
+type Interface interface {
+ // V1 provides access to shared informers for resources in V1.
+ V1() v1.Interface
+ // V1beta1 provides access to shared informers for resources in V1beta1.
+ V1beta1() v1beta1.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}
+}
+
+// V1 returns a new v1.Interface.
+func (g *group) V1() v1.Interface {
+ return v1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1beta1 returns a new v1beta1.Interface.
+func (g *group) V1beta1() v1beta1.Interface {
+ return v1beta1.New(g.factory, g.namespace, g.tweakListOptions)
+}
diff --git a/vendor/k8s.io/client-go/informers/batch/v1/cronjob.go b/vendor/k8s.io/client-go/informers/batch/v1/cronjob.go
new file mode 100644
index 00000000000..ee4f8808a86
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/batch/v1/cronjob.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apibatchv1 "k8s.io/api/batch/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ batchv1 "k8s.io/client-go/listers/batch/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CronJobInformer provides access to a shared informer and lister for
+// CronJobs.
+type CronJobInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() batchv1.CronJobLister
+}
+
+type cronJobInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewCronJobInformer constructs a new informer for CronJob 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 NewCronJobInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredCronJobInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredCronJobInformer constructs a new informer for CronJob 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 NewFilteredCronJobInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.BatchV1().CronJobs(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.BatchV1().CronJobs(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.BatchV1().CronJobs(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.BatchV1().CronJobs(namespace).Watch(ctx, options)
+ },
+ },
+ &apibatchv1.CronJob{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *cronJobInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredCronJobInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *cronJobInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apibatchv1.CronJob{}, f.defaultInformer)
+}
+
+func (f *cronJobInformer) Lister() batchv1.CronJobLister {
+ return batchv1.NewCronJobLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/batch/v1/interface.go b/vendor/k8s.io/client-go/informers/batch/v1/interface.go
new file mode 100644
index 00000000000..84567fb592b
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/batch/v1/interface.go
@@ -0,0 +1,52 @@
+/*
+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 v1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // CronJobs returns a CronJobInformer.
+ CronJobs() CronJobInformer
+ // Jobs returns a JobInformer.
+ Jobs() JobInformer
+}
+
+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}
+}
+
+// CronJobs returns a CronJobInformer.
+func (v *version) CronJobs() CronJobInformer {
+ return &cronJobInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// Jobs returns a JobInformer.
+func (v *version) Jobs() JobInformer {
+ return &jobInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/batch/v1/job.go b/vendor/k8s.io/client-go/informers/batch/v1/job.go
new file mode 100644
index 00000000000..d3965f53e91
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/batch/v1/job.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apibatchv1 "k8s.io/api/batch/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ batchv1 "k8s.io/client-go/listers/batch/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// JobInformer provides access to a shared informer and lister for
+// Jobs.
+type JobInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() batchv1.JobLister
+}
+
+type jobInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewJobInformer constructs a new informer for Job 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 NewJobInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredJobInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredJobInformer constructs a new informer for Job 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 NewFilteredJobInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.BatchV1().Jobs(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.BatchV1().Jobs(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.BatchV1().Jobs(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.BatchV1().Jobs(namespace).Watch(ctx, options)
+ },
+ },
+ &apibatchv1.Job{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *jobInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredJobInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *jobInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apibatchv1.Job{}, f.defaultInformer)
+}
+
+func (f *jobInformer) Lister() batchv1.JobLister {
+ return batchv1.NewJobLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/batch/v1beta1/cronjob.go b/vendor/k8s.io/client-go/informers/batch/v1beta1/cronjob.go
new file mode 100644
index 00000000000..1cf169d92e7
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/batch/v1beta1/cronjob.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apibatchv1beta1 "k8s.io/api/batch/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ batchv1beta1 "k8s.io/client-go/listers/batch/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CronJobInformer provides access to a shared informer and lister for
+// CronJobs.
+type CronJobInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() batchv1beta1.CronJobLister
+}
+
+type cronJobInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewCronJobInformer constructs a new informer for CronJob 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 NewCronJobInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredCronJobInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredCronJobInformer constructs a new informer for CronJob 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 NewFilteredCronJobInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.BatchV1beta1().CronJobs(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.BatchV1beta1().CronJobs(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.BatchV1beta1().CronJobs(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.BatchV1beta1().CronJobs(namespace).Watch(ctx, options)
+ },
+ },
+ &apibatchv1beta1.CronJob{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *cronJobInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredCronJobInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *cronJobInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apibatchv1beta1.CronJob{}, f.defaultInformer)
+}
+
+func (f *cronJobInformer) Lister() batchv1beta1.CronJobLister {
+ return batchv1beta1.NewCronJobLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/batch/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/batch/v1beta1/interface.go
new file mode 100644
index 00000000000..76cae22d68f
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/batch/v1beta1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 v1beta1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // CronJobs returns a CronJobInformer.
+ CronJobs() CronJobInformer
+}
+
+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}
+}
+
+// CronJobs returns a CronJobInformer.
+func (v *version) CronJobs() CronJobInformer {
+ return &cronJobInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/certificates/interface.go b/vendor/k8s.io/client-go/informers/certificates/interface.go
new file mode 100644
index 00000000000..39a4e291113
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/certificates/interface.go
@@ -0,0 +1,62 @@
+/*
+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 certificates
+
+import (
+ v1 "k8s.io/client-go/informers/certificates/v1"
+ v1alpha1 "k8s.io/client-go/informers/certificates/v1alpha1"
+ v1beta1 "k8s.io/client-go/informers/certificates/v1beta1"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to each of this group's versions.
+type Interface interface {
+ // V1 provides access to shared informers for resources in V1.
+ V1() v1.Interface
+ // V1alpha1 provides access to shared informers for resources in V1alpha1.
+ V1alpha1() v1alpha1.Interface
+ // V1beta1 provides access to shared informers for resources in V1beta1.
+ V1beta1() v1beta1.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}
+}
+
+// V1 returns a new v1.Interface.
+func (g *group) V1() v1.Interface {
+ return v1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1alpha1 returns a new v1alpha1.Interface.
+func (g *group) V1alpha1() v1alpha1.Interface {
+ return v1alpha1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1beta1 returns a new v1beta1.Interface.
+func (g *group) V1beta1() v1beta1.Interface {
+ return v1beta1.New(g.factory, g.namespace, g.tweakListOptions)
+}
diff --git a/vendor/k8s.io/client-go/informers/certificates/v1/certificatesigningrequest.go b/vendor/k8s.io/client-go/informers/certificates/v1/certificatesigningrequest.go
new file mode 100644
index 00000000000..076da13627a
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/certificates/v1/certificatesigningrequest.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apicertificatesv1 "k8s.io/api/certificates/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ certificatesv1 "k8s.io/client-go/listers/certificates/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CertificateSigningRequestInformer provides access to a shared informer and lister for
+// CertificateSigningRequests.
+type CertificateSigningRequestInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() certificatesv1.CertificateSigningRequestLister
+}
+
+type certificateSigningRequestInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewCertificateSigningRequestInformer constructs a new informer for CertificateSigningRequest 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 NewCertificateSigningRequestInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredCertificateSigningRequestInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredCertificateSigningRequestInformer constructs a new informer for CertificateSigningRequest 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 NewFilteredCertificateSigningRequestInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CertificatesV1().CertificateSigningRequests().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CertificatesV1().CertificateSigningRequests().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CertificatesV1().CertificateSigningRequests().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CertificatesV1().CertificateSigningRequests().Watch(ctx, options)
+ },
+ },
+ &apicertificatesv1.CertificateSigningRequest{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *certificateSigningRequestInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredCertificateSigningRequestInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *certificateSigningRequestInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicertificatesv1.CertificateSigningRequest{}, f.defaultInformer)
+}
+
+func (f *certificateSigningRequestInformer) Lister() certificatesv1.CertificateSigningRequestLister {
+ return certificatesv1.NewCertificateSigningRequestLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/certificates/v1/interface.go b/vendor/k8s.io/client-go/informers/certificates/v1/interface.go
new file mode 100644
index 00000000000..91ccfb715df
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/certificates/v1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 v1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // CertificateSigningRequests returns a CertificateSigningRequestInformer.
+ CertificateSigningRequests() CertificateSigningRequestInformer
+}
+
+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}
+}
+
+// CertificateSigningRequests returns a CertificateSigningRequestInformer.
+func (v *version) CertificateSigningRequests() CertificateSigningRequestInformer {
+ return &certificateSigningRequestInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/certificates/v1alpha1/clustertrustbundle.go b/vendor/k8s.io/client-go/informers/certificates/v1alpha1/clustertrustbundle.go
new file mode 100644
index 00000000000..ca5ee2c979b
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/certificates/v1alpha1/clustertrustbundle.go
@@ -0,0 +1,101 @@
+/*
+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"
+
+ apicertificatesv1alpha1 "k8s.io/api/certificates/v1alpha1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ certificatesv1alpha1 "k8s.io/client-go/listers/certificates/v1alpha1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ClusterTrustBundleInformer provides access to a shared informer and lister for
+// ClusterTrustBundles.
+type ClusterTrustBundleInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() certificatesv1alpha1.ClusterTrustBundleLister
+}
+
+type clusterTrustBundleInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewClusterTrustBundleInformer constructs a new informer for ClusterTrustBundle 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 NewClusterTrustBundleInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredClusterTrustBundleInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredClusterTrustBundleInformer constructs a new informer for ClusterTrustBundle 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 NewFilteredClusterTrustBundleInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CertificatesV1alpha1().ClusterTrustBundles().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CertificatesV1alpha1().ClusterTrustBundles().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CertificatesV1alpha1().ClusterTrustBundles().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CertificatesV1alpha1().ClusterTrustBundles().Watch(ctx, options)
+ },
+ },
+ &apicertificatesv1alpha1.ClusterTrustBundle{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *clusterTrustBundleInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredClusterTrustBundleInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *clusterTrustBundleInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicertificatesv1alpha1.ClusterTrustBundle{}, f.defaultInformer)
+}
+
+func (f *clusterTrustBundleInformer) Lister() certificatesv1alpha1.ClusterTrustBundleLister {
+ return certificatesv1alpha1.NewClusterTrustBundleLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/certificates/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/certificates/v1alpha1/interface.go
new file mode 100644
index 00000000000..40ce8f42dbb
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/certificates/v1alpha1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // ClusterTrustBundles returns a ClusterTrustBundleInformer.
+ ClusterTrustBundles() ClusterTrustBundleInformer
+}
+
+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}
+}
+
+// ClusterTrustBundles returns a ClusterTrustBundleInformer.
+func (v *version) ClusterTrustBundles() ClusterTrustBundleInformer {
+ return &clusterTrustBundleInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/certificates/v1beta1/certificatesigningrequest.go b/vendor/k8s.io/client-go/informers/certificates/v1beta1/certificatesigningrequest.go
new file mode 100644
index 00000000000..f93d435a060
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/certificates/v1beta1/certificatesigningrequest.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apicertificatesv1beta1 "k8s.io/api/certificates/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ certificatesv1beta1 "k8s.io/client-go/listers/certificates/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CertificateSigningRequestInformer provides access to a shared informer and lister for
+// CertificateSigningRequests.
+type CertificateSigningRequestInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() certificatesv1beta1.CertificateSigningRequestLister
+}
+
+type certificateSigningRequestInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewCertificateSigningRequestInformer constructs a new informer for CertificateSigningRequest 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 NewCertificateSigningRequestInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredCertificateSigningRequestInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredCertificateSigningRequestInformer constructs a new informer for CertificateSigningRequest 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 NewFilteredCertificateSigningRequestInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CertificatesV1beta1().CertificateSigningRequests().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CertificatesV1beta1().CertificateSigningRequests().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CertificatesV1beta1().CertificateSigningRequests().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CertificatesV1beta1().CertificateSigningRequests().Watch(ctx, options)
+ },
+ },
+ &apicertificatesv1beta1.CertificateSigningRequest{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *certificateSigningRequestInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredCertificateSigningRequestInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *certificateSigningRequestInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicertificatesv1beta1.CertificateSigningRequest{}, f.defaultInformer)
+}
+
+func (f *certificateSigningRequestInformer) Lister() certificatesv1beta1.CertificateSigningRequestLister {
+ return certificatesv1beta1.NewCertificateSigningRequestLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/certificates/v1beta1/clustertrustbundle.go b/vendor/k8s.io/client-go/informers/certificates/v1beta1/clustertrustbundle.go
new file mode 100644
index 00000000000..c4a69b22ef5
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/certificates/v1beta1/clustertrustbundle.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apicertificatesv1beta1 "k8s.io/api/certificates/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ certificatesv1beta1 "k8s.io/client-go/listers/certificates/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ClusterTrustBundleInformer provides access to a shared informer and lister for
+// ClusterTrustBundles.
+type ClusterTrustBundleInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() certificatesv1beta1.ClusterTrustBundleLister
+}
+
+type clusterTrustBundleInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewClusterTrustBundleInformer constructs a new informer for ClusterTrustBundle 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 NewClusterTrustBundleInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredClusterTrustBundleInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredClusterTrustBundleInformer constructs a new informer for ClusterTrustBundle 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 NewFilteredClusterTrustBundleInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CertificatesV1beta1().ClusterTrustBundles().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CertificatesV1beta1().ClusterTrustBundles().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CertificatesV1beta1().ClusterTrustBundles().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CertificatesV1beta1().ClusterTrustBundles().Watch(ctx, options)
+ },
+ },
+ &apicertificatesv1beta1.ClusterTrustBundle{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *clusterTrustBundleInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredClusterTrustBundleInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *clusterTrustBundleInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicertificatesv1beta1.ClusterTrustBundle{}, f.defaultInformer)
+}
+
+func (f *clusterTrustBundleInformer) Lister() certificatesv1beta1.ClusterTrustBundleLister {
+ return certificatesv1beta1.NewClusterTrustBundleLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/certificates/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/certificates/v1beta1/interface.go
new file mode 100644
index 00000000000..f13d5e66334
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/certificates/v1beta1/interface.go
@@ -0,0 +1,52 @@
+/*
+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 v1beta1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // CertificateSigningRequests returns a CertificateSigningRequestInformer.
+ CertificateSigningRequests() CertificateSigningRequestInformer
+ // ClusterTrustBundles returns a ClusterTrustBundleInformer.
+ ClusterTrustBundles() ClusterTrustBundleInformer
+}
+
+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}
+}
+
+// CertificateSigningRequests returns a CertificateSigningRequestInformer.
+func (v *version) CertificateSigningRequests() CertificateSigningRequestInformer {
+ return &certificateSigningRequestInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// ClusterTrustBundles returns a ClusterTrustBundleInformer.
+func (v *version) ClusterTrustBundles() ClusterTrustBundleInformer {
+ return &clusterTrustBundleInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/coordination/interface.go b/vendor/k8s.io/client-go/informers/coordination/interface.go
new file mode 100644
index 00000000000..d5bde12ac4a
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/coordination/interface.go
@@ -0,0 +1,62 @@
+/*
+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 coordination
+
+import (
+ v1 "k8s.io/client-go/informers/coordination/v1"
+ v1alpha2 "k8s.io/client-go/informers/coordination/v1alpha2"
+ v1beta1 "k8s.io/client-go/informers/coordination/v1beta1"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to each of this group's versions.
+type Interface interface {
+ // V1 provides access to shared informers for resources in V1.
+ V1() v1.Interface
+ // V1alpha2 provides access to shared informers for resources in V1alpha2.
+ V1alpha2() v1alpha2.Interface
+ // V1beta1 provides access to shared informers for resources in V1beta1.
+ V1beta1() v1beta1.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}
+}
+
+// V1 returns a new v1.Interface.
+func (g *group) V1() v1.Interface {
+ return v1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1alpha2 returns a new v1alpha2.Interface.
+func (g *group) V1alpha2() v1alpha2.Interface {
+ return v1alpha2.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1beta1 returns a new v1beta1.Interface.
+func (g *group) V1beta1() v1beta1.Interface {
+ return v1beta1.New(g.factory, g.namespace, g.tweakListOptions)
+}
diff --git a/vendor/k8s.io/client-go/informers/coordination/v1/interface.go b/vendor/k8s.io/client-go/informers/coordination/v1/interface.go
new file mode 100644
index 00000000000..05c4acbef8b
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/coordination/v1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 v1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // Leases returns a LeaseInformer.
+ Leases() LeaseInformer
+}
+
+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}
+}
+
+// Leases returns a LeaseInformer.
+func (v *version) Leases() LeaseInformer {
+ return &leaseInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/coordination/v1/lease.go b/vendor/k8s.io/client-go/informers/coordination/v1/lease.go
new file mode 100644
index 00000000000..2d0c812d6bc
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/coordination/v1/lease.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apicoordinationv1 "k8s.io/api/coordination/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ coordinationv1 "k8s.io/client-go/listers/coordination/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// LeaseInformer provides access to a shared informer and lister for
+// Leases.
+type LeaseInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() coordinationv1.LeaseLister
+}
+
+type leaseInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewLeaseInformer constructs a new informer for Lease 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 NewLeaseInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredLeaseInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredLeaseInformer constructs a new informer for Lease 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 NewFilteredLeaseInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoordinationV1().Leases(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoordinationV1().Leases(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoordinationV1().Leases(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoordinationV1().Leases(namespace).Watch(ctx, options)
+ },
+ },
+ &apicoordinationv1.Lease{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *leaseInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredLeaseInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *leaseInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicoordinationv1.Lease{}, f.defaultInformer)
+}
+
+func (f *leaseInformer) Lister() coordinationv1.LeaseLister {
+ return coordinationv1.NewLeaseLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/coordination/v1alpha2/interface.go b/vendor/k8s.io/client-go/informers/coordination/v1alpha2/interface.go
new file mode 100644
index 00000000000..ba83768adec
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/coordination/v1alpha2/interface.go
@@ -0,0 +1,45 @@
+/*
+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 v1alpha2
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // LeaseCandidates returns a LeaseCandidateInformer.
+ LeaseCandidates() LeaseCandidateInformer
+}
+
+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}
+}
+
+// LeaseCandidates returns a LeaseCandidateInformer.
+func (v *version) LeaseCandidates() LeaseCandidateInformer {
+ return &leaseCandidateInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/coordination/v1alpha2/leasecandidate.go b/vendor/k8s.io/client-go/informers/coordination/v1alpha2/leasecandidate.go
new file mode 100644
index 00000000000..c220a9b20c4
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/coordination/v1alpha2/leasecandidate.go
@@ -0,0 +1,102 @@
+/*
+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 v1alpha2
+
+import (
+ context "context"
+ time "time"
+
+ apicoordinationv1alpha2 "k8s.io/api/coordination/v1alpha2"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ coordinationv1alpha2 "k8s.io/client-go/listers/coordination/v1alpha2"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// LeaseCandidateInformer provides access to a shared informer and lister for
+// LeaseCandidates.
+type LeaseCandidateInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() coordinationv1alpha2.LeaseCandidateLister
+}
+
+type leaseCandidateInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewLeaseCandidateInformer constructs a new informer for LeaseCandidate 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 NewLeaseCandidateInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredLeaseCandidateInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredLeaseCandidateInformer constructs a new informer for LeaseCandidate 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 NewFilteredLeaseCandidateInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoordinationV1alpha2().LeaseCandidates(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoordinationV1alpha2().LeaseCandidates(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoordinationV1alpha2().LeaseCandidates(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoordinationV1alpha2().LeaseCandidates(namespace).Watch(ctx, options)
+ },
+ },
+ &apicoordinationv1alpha2.LeaseCandidate{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *leaseCandidateInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredLeaseCandidateInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *leaseCandidateInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicoordinationv1alpha2.LeaseCandidate{}, f.defaultInformer)
+}
+
+func (f *leaseCandidateInformer) Lister() coordinationv1alpha2.LeaseCandidateLister {
+ return coordinationv1alpha2.NewLeaseCandidateLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/coordination/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/coordination/v1beta1/interface.go
new file mode 100644
index 00000000000..707e510869a
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/coordination/v1beta1/interface.go
@@ -0,0 +1,52 @@
+/*
+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 v1beta1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // Leases returns a LeaseInformer.
+ Leases() LeaseInformer
+ // LeaseCandidates returns a LeaseCandidateInformer.
+ LeaseCandidates() LeaseCandidateInformer
+}
+
+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}
+}
+
+// Leases returns a LeaseInformer.
+func (v *version) Leases() LeaseInformer {
+ return &leaseInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// LeaseCandidates returns a LeaseCandidateInformer.
+func (v *version) LeaseCandidates() LeaseCandidateInformer {
+ return &leaseCandidateInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/coordination/v1beta1/lease.go b/vendor/k8s.io/client-go/informers/coordination/v1beta1/lease.go
new file mode 100644
index 00000000000..ef91381c1d9
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/coordination/v1beta1/lease.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apicoordinationv1beta1 "k8s.io/api/coordination/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ coordinationv1beta1 "k8s.io/client-go/listers/coordination/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// LeaseInformer provides access to a shared informer and lister for
+// Leases.
+type LeaseInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() coordinationv1beta1.LeaseLister
+}
+
+type leaseInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewLeaseInformer constructs a new informer for Lease 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 NewLeaseInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredLeaseInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredLeaseInformer constructs a new informer for Lease 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 NewFilteredLeaseInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoordinationV1beta1().Leases(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoordinationV1beta1().Leases(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoordinationV1beta1().Leases(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoordinationV1beta1().Leases(namespace).Watch(ctx, options)
+ },
+ },
+ &apicoordinationv1beta1.Lease{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *leaseInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredLeaseInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *leaseInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicoordinationv1beta1.Lease{}, f.defaultInformer)
+}
+
+func (f *leaseInformer) Lister() coordinationv1beta1.LeaseLister {
+ return coordinationv1beta1.NewLeaseLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/coordination/v1beta1/leasecandidate.go b/vendor/k8s.io/client-go/informers/coordination/v1beta1/leasecandidate.go
new file mode 100644
index 00000000000..4315e50c321
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/coordination/v1beta1/leasecandidate.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apicoordinationv1beta1 "k8s.io/api/coordination/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ coordinationv1beta1 "k8s.io/client-go/listers/coordination/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// LeaseCandidateInformer provides access to a shared informer and lister for
+// LeaseCandidates.
+type LeaseCandidateInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() coordinationv1beta1.LeaseCandidateLister
+}
+
+type leaseCandidateInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewLeaseCandidateInformer constructs a new informer for LeaseCandidate 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 NewLeaseCandidateInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredLeaseCandidateInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredLeaseCandidateInformer constructs a new informer for LeaseCandidate 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 NewFilteredLeaseCandidateInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoordinationV1beta1().LeaseCandidates(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoordinationV1beta1().LeaseCandidates(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoordinationV1beta1().LeaseCandidates(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoordinationV1beta1().LeaseCandidates(namespace).Watch(ctx, options)
+ },
+ },
+ &apicoordinationv1beta1.LeaseCandidate{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *leaseCandidateInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredLeaseCandidateInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *leaseCandidateInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicoordinationv1beta1.LeaseCandidate{}, f.defaultInformer)
+}
+
+func (f *leaseCandidateInformer) Lister() coordinationv1beta1.LeaseCandidateLister {
+ return coordinationv1beta1.NewLeaseCandidateLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/core/interface.go b/vendor/k8s.io/client-go/informers/core/interface.go
new file mode 100644
index 00000000000..de8396b5164
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/core/interface.go
@@ -0,0 +1,46 @@
+/*
+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 core
+
+import (
+ v1 "k8s.io/client-go/informers/core/v1"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to each of this group's versions.
+type Interface interface {
+ // V1 provides access to shared informers for resources in V1.
+ V1() v1.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}
+}
+
+// V1 returns a new v1.Interface.
+func (g *group) V1() v1.Interface {
+ return v1.New(g.factory, g.namespace, g.tweakListOptions)
+}
diff --git a/vendor/k8s.io/client-go/informers/core/v1/componentstatus.go b/vendor/k8s.io/client-go/informers/core/v1/componentstatus.go
new file mode 100644
index 00000000000..a7992bfdff0
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/core/v1/componentstatus.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apicorev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ corev1 "k8s.io/client-go/listers/core/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ComponentStatusInformer provides access to a shared informer and lister for
+// ComponentStatuses.
+type ComponentStatusInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() corev1.ComponentStatusLister
+}
+
+type componentStatusInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewComponentStatusInformer constructs a new informer for ComponentStatus 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 NewComponentStatusInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredComponentStatusInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredComponentStatusInformer constructs a new informer for ComponentStatus 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 NewFilteredComponentStatusInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ComponentStatuses().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ComponentStatuses().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ComponentStatuses().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ComponentStatuses().Watch(ctx, options)
+ },
+ },
+ &apicorev1.ComponentStatus{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *componentStatusInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredComponentStatusInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *componentStatusInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicorev1.ComponentStatus{}, f.defaultInformer)
+}
+
+func (f *componentStatusInformer) Lister() corev1.ComponentStatusLister {
+ return corev1.NewComponentStatusLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/core/v1/configmap.go b/vendor/k8s.io/client-go/informers/core/v1/configmap.go
new file mode 100644
index 00000000000..014e55afe41
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/core/v1/configmap.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apicorev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ corev1 "k8s.io/client-go/listers/core/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ConfigMapInformer provides access to a shared informer and lister for
+// ConfigMaps.
+type ConfigMapInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() corev1.ConfigMapLister
+}
+
+type configMapInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewConfigMapInformer constructs a new informer for ConfigMap 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 NewConfigMapInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredConfigMapInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredConfigMapInformer constructs a new informer for ConfigMap 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 NewFilteredConfigMapInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ConfigMaps(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ConfigMaps(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ConfigMaps(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ConfigMaps(namespace).Watch(ctx, options)
+ },
+ },
+ &apicorev1.ConfigMap{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *configMapInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredConfigMapInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *configMapInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicorev1.ConfigMap{}, f.defaultInformer)
+}
+
+func (f *configMapInformer) Lister() corev1.ConfigMapLister {
+ return corev1.NewConfigMapLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/core/v1/endpoints.go b/vendor/k8s.io/client-go/informers/core/v1/endpoints.go
new file mode 100644
index 00000000000..2d4412ad001
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/core/v1/endpoints.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apicorev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ corev1 "k8s.io/client-go/listers/core/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// EndpointsInformer provides access to a shared informer and lister for
+// Endpoints.
+type EndpointsInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() corev1.EndpointsLister
+}
+
+type endpointsInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewEndpointsInformer constructs a new informer for Endpoints 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 NewEndpointsInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredEndpointsInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredEndpointsInformer constructs a new informer for Endpoints 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 NewFilteredEndpointsInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Endpoints(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Endpoints(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Endpoints(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Endpoints(namespace).Watch(ctx, options)
+ },
+ },
+ &apicorev1.Endpoints{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *endpointsInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredEndpointsInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *endpointsInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicorev1.Endpoints{}, f.defaultInformer)
+}
+
+func (f *endpointsInformer) Lister() corev1.EndpointsLister {
+ return corev1.NewEndpointsLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/core/v1/event.go b/vendor/k8s.io/client-go/informers/core/v1/event.go
new file mode 100644
index 00000000000..80a5cad8439
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/core/v1/event.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apicorev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ corev1 "k8s.io/client-go/listers/core/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// EventInformer provides access to a shared informer and lister for
+// Events.
+type EventInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() corev1.EventLister
+}
+
+type eventInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewEventInformer constructs a new informer for Event 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 NewEventInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredEventInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredEventInformer constructs a new informer for Event 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 NewFilteredEventInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Events(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Events(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Events(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Events(namespace).Watch(ctx, options)
+ },
+ },
+ &apicorev1.Event{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *eventInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredEventInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *eventInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicorev1.Event{}, f.defaultInformer)
+}
+
+func (f *eventInformer) Lister() corev1.EventLister {
+ return corev1.NewEventLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/core/v1/interface.go b/vendor/k8s.io/client-go/informers/core/v1/interface.go
new file mode 100644
index 00000000000..b2216a05c88
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/core/v1/interface.go
@@ -0,0 +1,150 @@
+/*
+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 v1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // ComponentStatuses returns a ComponentStatusInformer.
+ ComponentStatuses() ComponentStatusInformer
+ // ConfigMaps returns a ConfigMapInformer.
+ ConfigMaps() ConfigMapInformer
+ // Endpoints returns a EndpointsInformer.
+ Endpoints() EndpointsInformer
+ // Events returns a EventInformer.
+ Events() EventInformer
+ // LimitRanges returns a LimitRangeInformer.
+ LimitRanges() LimitRangeInformer
+ // Namespaces returns a NamespaceInformer.
+ Namespaces() NamespaceInformer
+ // Nodes returns a NodeInformer.
+ Nodes() NodeInformer
+ // PersistentVolumes returns a PersistentVolumeInformer.
+ PersistentVolumes() PersistentVolumeInformer
+ // PersistentVolumeClaims returns a PersistentVolumeClaimInformer.
+ PersistentVolumeClaims() PersistentVolumeClaimInformer
+ // Pods returns a PodInformer.
+ Pods() PodInformer
+ // PodTemplates returns a PodTemplateInformer.
+ PodTemplates() PodTemplateInformer
+ // ReplicationControllers returns a ReplicationControllerInformer.
+ ReplicationControllers() ReplicationControllerInformer
+ // ResourceQuotas returns a ResourceQuotaInformer.
+ ResourceQuotas() ResourceQuotaInformer
+ // Secrets returns a SecretInformer.
+ Secrets() SecretInformer
+ // Services returns a ServiceInformer.
+ Services() ServiceInformer
+ // ServiceAccounts returns a ServiceAccountInformer.
+ ServiceAccounts() ServiceAccountInformer
+}
+
+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}
+}
+
+// ComponentStatuses returns a ComponentStatusInformer.
+func (v *version) ComponentStatuses() ComponentStatusInformer {
+ return &componentStatusInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// ConfigMaps returns a ConfigMapInformer.
+func (v *version) ConfigMaps() ConfigMapInformer {
+ return &configMapInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// Endpoints returns a EndpointsInformer.
+func (v *version) Endpoints() EndpointsInformer {
+ return &endpointsInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// Events returns a EventInformer.
+func (v *version) Events() EventInformer {
+ return &eventInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// LimitRanges returns a LimitRangeInformer.
+func (v *version) LimitRanges() LimitRangeInformer {
+ return &limitRangeInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// Namespaces returns a NamespaceInformer.
+func (v *version) Namespaces() NamespaceInformer {
+ return &namespaceInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// Nodes returns a NodeInformer.
+func (v *version) Nodes() NodeInformer {
+ return &nodeInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// PersistentVolumes returns a PersistentVolumeInformer.
+func (v *version) PersistentVolumes() PersistentVolumeInformer {
+ return &persistentVolumeInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// PersistentVolumeClaims returns a PersistentVolumeClaimInformer.
+func (v *version) PersistentVolumeClaims() PersistentVolumeClaimInformer {
+ return &persistentVolumeClaimInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// Pods returns a PodInformer.
+func (v *version) Pods() PodInformer {
+ return &podInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// PodTemplates returns a PodTemplateInformer.
+func (v *version) PodTemplates() PodTemplateInformer {
+ return &podTemplateInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// ReplicationControllers returns a ReplicationControllerInformer.
+func (v *version) ReplicationControllers() ReplicationControllerInformer {
+ return &replicationControllerInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// ResourceQuotas returns a ResourceQuotaInformer.
+func (v *version) ResourceQuotas() ResourceQuotaInformer {
+ return &resourceQuotaInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// Secrets returns a SecretInformer.
+func (v *version) Secrets() SecretInformer {
+ return &secretInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// Services returns a ServiceInformer.
+func (v *version) Services() ServiceInformer {
+ return &serviceInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// ServiceAccounts returns a ServiceAccountInformer.
+func (v *version) ServiceAccounts() ServiceAccountInformer {
+ return &serviceAccountInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/core/v1/limitrange.go b/vendor/k8s.io/client-go/informers/core/v1/limitrange.go
new file mode 100644
index 00000000000..cf8e1eb4223
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/core/v1/limitrange.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apicorev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ corev1 "k8s.io/client-go/listers/core/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// LimitRangeInformer provides access to a shared informer and lister for
+// LimitRanges.
+type LimitRangeInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() corev1.LimitRangeLister
+}
+
+type limitRangeInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewLimitRangeInformer constructs a new informer for LimitRange 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 NewLimitRangeInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredLimitRangeInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredLimitRangeInformer constructs a new informer for LimitRange 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 NewFilteredLimitRangeInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().LimitRanges(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().LimitRanges(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().LimitRanges(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().LimitRanges(namespace).Watch(ctx, options)
+ },
+ },
+ &apicorev1.LimitRange{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *limitRangeInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredLimitRangeInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *limitRangeInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicorev1.LimitRange{}, f.defaultInformer)
+}
+
+func (f *limitRangeInformer) Lister() corev1.LimitRangeLister {
+ return corev1.NewLimitRangeLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/core/v1/namespace.go b/vendor/k8s.io/client-go/informers/core/v1/namespace.go
new file mode 100644
index 00000000000..ae09888b9b9
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/core/v1/namespace.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apicorev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ corev1 "k8s.io/client-go/listers/core/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// NamespaceInformer provides access to a shared informer and lister for
+// Namespaces.
+type NamespaceInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() corev1.NamespaceLister
+}
+
+type namespaceInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewNamespaceInformer constructs a new informer for Namespace 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 NewNamespaceInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredNamespaceInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredNamespaceInformer constructs a new informer for Namespace 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 NewFilteredNamespaceInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Namespaces().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Namespaces().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Namespaces().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Namespaces().Watch(ctx, options)
+ },
+ },
+ &apicorev1.Namespace{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *namespaceInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredNamespaceInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *namespaceInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicorev1.Namespace{}, f.defaultInformer)
+}
+
+func (f *namespaceInformer) Lister() corev1.NamespaceLister {
+ return corev1.NewNamespaceLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/core/v1/node.go b/vendor/k8s.io/client-go/informers/core/v1/node.go
new file mode 100644
index 00000000000..a036db034ba
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/core/v1/node.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apicorev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ corev1 "k8s.io/client-go/listers/core/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// NodeInformer provides access to a shared informer and lister for
+// Nodes.
+type NodeInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() corev1.NodeLister
+}
+
+type nodeInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewNodeInformer constructs a new informer for Node 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 NewNodeInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredNodeInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredNodeInformer constructs a new informer for Node 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 NewFilteredNodeInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Nodes().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Nodes().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Nodes().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Nodes().Watch(ctx, options)
+ },
+ },
+ &apicorev1.Node{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *nodeInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredNodeInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *nodeInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicorev1.Node{}, f.defaultInformer)
+}
+
+func (f *nodeInformer) Lister() corev1.NodeLister {
+ return corev1.NewNodeLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/core/v1/persistentvolume.go b/vendor/k8s.io/client-go/informers/core/v1/persistentvolume.go
new file mode 100644
index 00000000000..4d1d63eadc0
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/core/v1/persistentvolume.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apicorev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ corev1 "k8s.io/client-go/listers/core/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PersistentVolumeInformer provides access to a shared informer and lister for
+// PersistentVolumes.
+type PersistentVolumeInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() corev1.PersistentVolumeLister
+}
+
+type persistentVolumeInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewPersistentVolumeInformer constructs a new informer for PersistentVolume 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 NewPersistentVolumeInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredPersistentVolumeInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredPersistentVolumeInformer constructs a new informer for PersistentVolume 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 NewFilteredPersistentVolumeInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().PersistentVolumes().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().PersistentVolumes().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().PersistentVolumes().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().PersistentVolumes().Watch(ctx, options)
+ },
+ },
+ &apicorev1.PersistentVolume{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *persistentVolumeInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredPersistentVolumeInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *persistentVolumeInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicorev1.PersistentVolume{}, f.defaultInformer)
+}
+
+func (f *persistentVolumeInformer) Lister() corev1.PersistentVolumeLister {
+ return corev1.NewPersistentVolumeLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/core/v1/persistentvolumeclaim.go b/vendor/k8s.io/client-go/informers/core/v1/persistentvolumeclaim.go
new file mode 100644
index 00000000000..87a4cc037c8
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/core/v1/persistentvolumeclaim.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apicorev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ corev1 "k8s.io/client-go/listers/core/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PersistentVolumeClaimInformer provides access to a shared informer and lister for
+// PersistentVolumeClaims.
+type PersistentVolumeClaimInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() corev1.PersistentVolumeClaimLister
+}
+
+type persistentVolumeClaimInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewPersistentVolumeClaimInformer constructs a new informer for PersistentVolumeClaim 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 NewPersistentVolumeClaimInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredPersistentVolumeClaimInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredPersistentVolumeClaimInformer constructs a new informer for PersistentVolumeClaim 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 NewFilteredPersistentVolumeClaimInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().PersistentVolumeClaims(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().PersistentVolumeClaims(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().PersistentVolumeClaims(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().PersistentVolumeClaims(namespace).Watch(ctx, options)
+ },
+ },
+ &apicorev1.PersistentVolumeClaim{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *persistentVolumeClaimInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredPersistentVolumeClaimInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *persistentVolumeClaimInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicorev1.PersistentVolumeClaim{}, f.defaultInformer)
+}
+
+func (f *persistentVolumeClaimInformer) Lister() corev1.PersistentVolumeClaimLister {
+ return corev1.NewPersistentVolumeClaimLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/core/v1/pod.go b/vendor/k8s.io/client-go/informers/core/v1/pod.go
new file mode 100644
index 00000000000..e3a40729f10
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/core/v1/pod.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apicorev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ corev1 "k8s.io/client-go/listers/core/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PodInformer provides access to a shared informer and lister for
+// Pods.
+type PodInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() corev1.PodLister
+}
+
+type podInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewPodInformer constructs a new informer for Pod 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 NewPodInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredPodInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredPodInformer constructs a new informer for Pod 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 NewFilteredPodInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Pods(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Pods(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Pods(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Pods(namespace).Watch(ctx, options)
+ },
+ },
+ &apicorev1.Pod{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *podInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredPodInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *podInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicorev1.Pod{}, f.defaultInformer)
+}
+
+func (f *podInformer) Lister() corev1.PodLister {
+ return corev1.NewPodLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/core/v1/podtemplate.go b/vendor/k8s.io/client-go/informers/core/v1/podtemplate.go
new file mode 100644
index 00000000000..9d6e7048e62
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/core/v1/podtemplate.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apicorev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ corev1 "k8s.io/client-go/listers/core/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PodTemplateInformer provides access to a shared informer and lister for
+// PodTemplates.
+type PodTemplateInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() corev1.PodTemplateLister
+}
+
+type podTemplateInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewPodTemplateInformer constructs a new informer for PodTemplate 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 NewPodTemplateInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredPodTemplateInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredPodTemplateInformer constructs a new informer for PodTemplate 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 NewFilteredPodTemplateInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().PodTemplates(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().PodTemplates(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().PodTemplates(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().PodTemplates(namespace).Watch(ctx, options)
+ },
+ },
+ &apicorev1.PodTemplate{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *podTemplateInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredPodTemplateInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *podTemplateInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicorev1.PodTemplate{}, f.defaultInformer)
+}
+
+func (f *podTemplateInformer) Lister() corev1.PodTemplateLister {
+ return corev1.NewPodTemplateLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/core/v1/replicationcontroller.go b/vendor/k8s.io/client-go/informers/core/v1/replicationcontroller.go
new file mode 100644
index 00000000000..89c216e8219
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/core/v1/replicationcontroller.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apicorev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ corev1 "k8s.io/client-go/listers/core/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ReplicationControllerInformer provides access to a shared informer and lister for
+// ReplicationControllers.
+type ReplicationControllerInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() corev1.ReplicationControllerLister
+}
+
+type replicationControllerInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewReplicationControllerInformer constructs a new informer for ReplicationController 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 NewReplicationControllerInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredReplicationControllerInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredReplicationControllerInformer constructs a new informer for ReplicationController 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 NewFilteredReplicationControllerInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ReplicationControllers(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ReplicationControllers(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ReplicationControllers(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ReplicationControllers(namespace).Watch(ctx, options)
+ },
+ },
+ &apicorev1.ReplicationController{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *replicationControllerInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredReplicationControllerInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *replicationControllerInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicorev1.ReplicationController{}, f.defaultInformer)
+}
+
+func (f *replicationControllerInformer) Lister() corev1.ReplicationControllerLister {
+ return corev1.NewReplicationControllerLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/core/v1/resourcequota.go b/vendor/k8s.io/client-go/informers/core/v1/resourcequota.go
new file mode 100644
index 00000000000..aa77e05702e
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/core/v1/resourcequota.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apicorev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ corev1 "k8s.io/client-go/listers/core/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceQuotaInformer provides access to a shared informer and lister for
+// ResourceQuotas.
+type ResourceQuotaInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() corev1.ResourceQuotaLister
+}
+
+type resourceQuotaInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewResourceQuotaInformer constructs a new informer for ResourceQuota 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 NewResourceQuotaInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredResourceQuotaInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredResourceQuotaInformer constructs a new informer for ResourceQuota 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 NewFilteredResourceQuotaInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ResourceQuotas(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ResourceQuotas(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ResourceQuotas(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ResourceQuotas(namespace).Watch(ctx, options)
+ },
+ },
+ &apicorev1.ResourceQuota{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *resourceQuotaInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredResourceQuotaInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *resourceQuotaInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicorev1.ResourceQuota{}, f.defaultInformer)
+}
+
+func (f *resourceQuotaInformer) Lister() corev1.ResourceQuotaLister {
+ return corev1.NewResourceQuotaLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/core/v1/secret.go b/vendor/k8s.io/client-go/informers/core/v1/secret.go
new file mode 100644
index 00000000000..be5a80a9698
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/core/v1/secret.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apicorev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ corev1 "k8s.io/client-go/listers/core/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// SecretInformer provides access to a shared informer and lister for
+// Secrets.
+type SecretInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() corev1.SecretLister
+}
+
+type secretInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewSecretInformer constructs a new informer for Secret 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 NewSecretInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredSecretInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredSecretInformer constructs a new informer for Secret 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 NewFilteredSecretInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Secrets(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Secrets(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Secrets(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Secrets(namespace).Watch(ctx, options)
+ },
+ },
+ &apicorev1.Secret{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *secretInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredSecretInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *secretInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicorev1.Secret{}, f.defaultInformer)
+}
+
+func (f *secretInformer) Lister() corev1.SecretLister {
+ return corev1.NewSecretLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/core/v1/service.go b/vendor/k8s.io/client-go/informers/core/v1/service.go
new file mode 100644
index 00000000000..10b0587579c
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/core/v1/service.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apicorev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ corev1 "k8s.io/client-go/listers/core/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ServiceInformer provides access to a shared informer and lister for
+// Services.
+type ServiceInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() corev1.ServiceLister
+}
+
+type serviceInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewServiceInformer constructs a new informer for Service 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 NewServiceInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredServiceInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredServiceInformer constructs a new informer for Service 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 NewFilteredServiceInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Services(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Services(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Services(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().Services(namespace).Watch(ctx, options)
+ },
+ },
+ &apicorev1.Service{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *serviceInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredServiceInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *serviceInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicorev1.Service{}, f.defaultInformer)
+}
+
+func (f *serviceInformer) Lister() corev1.ServiceLister {
+ return corev1.NewServiceLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/core/v1/serviceaccount.go b/vendor/k8s.io/client-go/informers/core/v1/serviceaccount.go
new file mode 100644
index 00000000000..594439618f4
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/core/v1/serviceaccount.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apicorev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ corev1 "k8s.io/client-go/listers/core/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ServiceAccountInformer provides access to a shared informer and lister for
+// ServiceAccounts.
+type ServiceAccountInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() corev1.ServiceAccountLister
+}
+
+type serviceAccountInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewServiceAccountInformer constructs a new informer for ServiceAccount 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 NewServiceAccountInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredServiceAccountInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredServiceAccountInformer constructs a new informer for ServiceAccount 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 NewFilteredServiceAccountInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ServiceAccounts(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ServiceAccounts(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ServiceAccounts(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.CoreV1().ServiceAccounts(namespace).Watch(ctx, options)
+ },
+ },
+ &apicorev1.ServiceAccount{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *serviceAccountInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredServiceAccountInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *serviceAccountInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apicorev1.ServiceAccount{}, f.defaultInformer)
+}
+
+func (f *serviceAccountInformer) Lister() corev1.ServiceAccountLister {
+ return corev1.NewServiceAccountLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/discovery/interface.go b/vendor/k8s.io/client-go/informers/discovery/interface.go
new file mode 100644
index 00000000000..37da9371f6b
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/discovery/interface.go
@@ -0,0 +1,54 @@
+/*
+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 discovery
+
+import (
+ v1 "k8s.io/client-go/informers/discovery/v1"
+ v1beta1 "k8s.io/client-go/informers/discovery/v1beta1"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to each of this group's versions.
+type Interface interface {
+ // V1 provides access to shared informers for resources in V1.
+ V1() v1.Interface
+ // V1beta1 provides access to shared informers for resources in V1beta1.
+ V1beta1() v1beta1.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}
+}
+
+// V1 returns a new v1.Interface.
+func (g *group) V1() v1.Interface {
+ return v1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1beta1 returns a new v1beta1.Interface.
+func (g *group) V1beta1() v1beta1.Interface {
+ return v1beta1.New(g.factory, g.namespace, g.tweakListOptions)
+}
diff --git a/vendor/k8s.io/client-go/informers/discovery/v1/endpointslice.go b/vendor/k8s.io/client-go/informers/discovery/v1/endpointslice.go
new file mode 100644
index 00000000000..38f09183cdc
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/discovery/v1/endpointslice.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apidiscoveryv1 "k8s.io/api/discovery/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ discoveryv1 "k8s.io/client-go/listers/discovery/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// EndpointSliceInformer provides access to a shared informer and lister for
+// EndpointSlices.
+type EndpointSliceInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() discoveryv1.EndpointSliceLister
+}
+
+type endpointSliceInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewEndpointSliceInformer constructs a new informer for EndpointSlice 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 NewEndpointSliceInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredEndpointSliceInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredEndpointSliceInformer constructs a new informer for EndpointSlice 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 NewFilteredEndpointSliceInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.DiscoveryV1().EndpointSlices(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.DiscoveryV1().EndpointSlices(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.DiscoveryV1().EndpointSlices(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.DiscoveryV1().EndpointSlices(namespace).Watch(ctx, options)
+ },
+ },
+ &apidiscoveryv1.EndpointSlice{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *endpointSliceInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredEndpointSliceInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *endpointSliceInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apidiscoveryv1.EndpointSlice{}, f.defaultInformer)
+}
+
+func (f *endpointSliceInformer) Lister() discoveryv1.EndpointSliceLister {
+ return discoveryv1.NewEndpointSliceLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/discovery/v1/interface.go b/vendor/k8s.io/client-go/informers/discovery/v1/interface.go
new file mode 100644
index 00000000000..d90c63c0a94
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/discovery/v1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 v1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // EndpointSlices returns a EndpointSliceInformer.
+ EndpointSlices() EndpointSliceInformer
+}
+
+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}
+}
+
+// EndpointSlices returns a EndpointSliceInformer.
+func (v *version) EndpointSlices() EndpointSliceInformer {
+ return &endpointSliceInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/discovery/v1beta1/endpointslice.go b/vendor/k8s.io/client-go/informers/discovery/v1beta1/endpointslice.go
new file mode 100644
index 00000000000..23c51eb7b22
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/discovery/v1beta1/endpointslice.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apidiscoveryv1beta1 "k8s.io/api/discovery/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ discoveryv1beta1 "k8s.io/client-go/listers/discovery/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// EndpointSliceInformer provides access to a shared informer and lister for
+// EndpointSlices.
+type EndpointSliceInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() discoveryv1beta1.EndpointSliceLister
+}
+
+type endpointSliceInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewEndpointSliceInformer constructs a new informer for EndpointSlice 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 NewEndpointSliceInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredEndpointSliceInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredEndpointSliceInformer constructs a new informer for EndpointSlice 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 NewFilteredEndpointSliceInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.DiscoveryV1beta1().EndpointSlices(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.DiscoveryV1beta1().EndpointSlices(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.DiscoveryV1beta1().EndpointSlices(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.DiscoveryV1beta1().EndpointSlices(namespace).Watch(ctx, options)
+ },
+ },
+ &apidiscoveryv1beta1.EndpointSlice{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *endpointSliceInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredEndpointSliceInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *endpointSliceInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apidiscoveryv1beta1.EndpointSlice{}, f.defaultInformer)
+}
+
+func (f *endpointSliceInformer) Lister() discoveryv1beta1.EndpointSliceLister {
+ return discoveryv1beta1.NewEndpointSliceLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/discovery/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/discovery/v1beta1/interface.go
new file mode 100644
index 00000000000..4661646e013
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/discovery/v1beta1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 v1beta1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // EndpointSlices returns a EndpointSliceInformer.
+ EndpointSlices() EndpointSliceInformer
+}
+
+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}
+}
+
+// EndpointSlices returns a EndpointSliceInformer.
+func (v *version) EndpointSlices() EndpointSliceInformer {
+ return &endpointSliceInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/doc.go b/vendor/k8s.io/client-go/informers/doc.go
new file mode 100644
index 00000000000..231bffb69bd
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/doc.go
@@ -0,0 +1,18 @@
+/*
+Copyright 2023 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 informers provides generated informers for Kubernetes APIs.
+package informers
diff --git a/vendor/k8s.io/client-go/informers/events/interface.go b/vendor/k8s.io/client-go/informers/events/interface.go
new file mode 100644
index 00000000000..b350dde5b6c
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/events/interface.go
@@ -0,0 +1,54 @@
+/*
+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 events
+
+import (
+ v1 "k8s.io/client-go/informers/events/v1"
+ v1beta1 "k8s.io/client-go/informers/events/v1beta1"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to each of this group's versions.
+type Interface interface {
+ // V1 provides access to shared informers for resources in V1.
+ V1() v1.Interface
+ // V1beta1 provides access to shared informers for resources in V1beta1.
+ V1beta1() v1beta1.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}
+}
+
+// V1 returns a new v1.Interface.
+func (g *group) V1() v1.Interface {
+ return v1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1beta1 returns a new v1beta1.Interface.
+func (g *group) V1beta1() v1beta1.Interface {
+ return v1beta1.New(g.factory, g.namespace, g.tweakListOptions)
+}
diff --git a/vendor/k8s.io/client-go/informers/events/v1/event.go b/vendor/k8s.io/client-go/informers/events/v1/event.go
new file mode 100644
index 00000000000..139cc155ab0
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/events/v1/event.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apieventsv1 "k8s.io/api/events/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ eventsv1 "k8s.io/client-go/listers/events/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// EventInformer provides access to a shared informer and lister for
+// Events.
+type EventInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() eventsv1.EventLister
+}
+
+type eventInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewEventInformer constructs a new informer for Event 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 NewEventInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredEventInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredEventInformer constructs a new informer for Event 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 NewFilteredEventInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.EventsV1().Events(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.EventsV1().Events(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.EventsV1().Events(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.EventsV1().Events(namespace).Watch(ctx, options)
+ },
+ },
+ &apieventsv1.Event{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *eventInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredEventInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *eventInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apieventsv1.Event{}, f.defaultInformer)
+}
+
+func (f *eventInformer) Lister() eventsv1.EventLister {
+ return eventsv1.NewEventLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/events/v1/interface.go b/vendor/k8s.io/client-go/informers/events/v1/interface.go
new file mode 100644
index 00000000000..cd06e233593
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/events/v1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 v1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // Events returns a EventInformer.
+ Events() EventInformer
+}
+
+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}
+}
+
+// Events returns a EventInformer.
+func (v *version) Events() EventInformer {
+ return &eventInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/events/v1beta1/event.go b/vendor/k8s.io/client-go/informers/events/v1beta1/event.go
new file mode 100644
index 00000000000..75818c0efbf
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/events/v1beta1/event.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apieventsv1beta1 "k8s.io/api/events/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ eventsv1beta1 "k8s.io/client-go/listers/events/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// EventInformer provides access to a shared informer and lister for
+// Events.
+type EventInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() eventsv1beta1.EventLister
+}
+
+type eventInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewEventInformer constructs a new informer for Event 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 NewEventInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredEventInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredEventInformer constructs a new informer for Event 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 NewFilteredEventInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.EventsV1beta1().Events(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.EventsV1beta1().Events(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.EventsV1beta1().Events(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.EventsV1beta1().Events(namespace).Watch(ctx, options)
+ },
+ },
+ &apieventsv1beta1.Event{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *eventInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredEventInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *eventInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apieventsv1beta1.Event{}, f.defaultInformer)
+}
+
+func (f *eventInformer) Lister() eventsv1beta1.EventLister {
+ return eventsv1beta1.NewEventLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/events/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/events/v1beta1/interface.go
new file mode 100644
index 00000000000..c71888c9a42
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/events/v1beta1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 v1beta1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // Events returns a EventInformer.
+ Events() EventInformer
+}
+
+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}
+}
+
+// Events returns a EventInformer.
+func (v *version) Events() EventInformer {
+ return &eventInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/extensions/interface.go b/vendor/k8s.io/client-go/informers/extensions/interface.go
new file mode 100644
index 00000000000..94a66d3853d
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/extensions/interface.go
@@ -0,0 +1,46 @@
+/*
+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 extensions
+
+import (
+ v1beta1 "k8s.io/client-go/informers/extensions/v1beta1"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to each of this group's versions.
+type Interface interface {
+ // V1beta1 provides access to shared informers for resources in V1beta1.
+ V1beta1() v1beta1.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}
+}
+
+// V1beta1 returns a new v1beta1.Interface.
+func (g *group) V1beta1() v1beta1.Interface {
+ return v1beta1.New(g.factory, g.namespace, g.tweakListOptions)
+}
diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/daemonset.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/daemonset.go
new file mode 100644
index 00000000000..ce8612c1c24
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/extensions/v1beta1/daemonset.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apiextensionsv1beta1 "k8s.io/api/extensions/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ extensionsv1beta1 "k8s.io/client-go/listers/extensions/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DaemonSetInformer provides access to a shared informer and lister for
+// DaemonSets.
+type DaemonSetInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() extensionsv1beta1.DaemonSetLister
+}
+
+type daemonSetInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewDaemonSetInformer constructs a new informer for DaemonSet 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 NewDaemonSetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredDaemonSetInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredDaemonSetInformer constructs a new informer for DaemonSet 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 NewFilteredDaemonSetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().DaemonSets(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().DaemonSets(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().DaemonSets(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().DaemonSets(namespace).Watch(ctx, options)
+ },
+ },
+ &apiextensionsv1beta1.DaemonSet{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *daemonSetInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredDaemonSetInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *daemonSetInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiextensionsv1beta1.DaemonSet{}, f.defaultInformer)
+}
+
+func (f *daemonSetInformer) Lister() extensionsv1beta1.DaemonSetLister {
+ return extensionsv1beta1.NewDaemonSetLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/deployment.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/deployment.go
new file mode 100644
index 00000000000..5dd957baa40
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/extensions/v1beta1/deployment.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apiextensionsv1beta1 "k8s.io/api/extensions/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ extensionsv1beta1 "k8s.io/client-go/listers/extensions/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DeploymentInformer provides access to a shared informer and lister for
+// Deployments.
+type DeploymentInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() extensionsv1beta1.DeploymentLister
+}
+
+type deploymentInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewDeploymentInformer constructs a new informer for Deployment 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 NewDeploymentInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredDeploymentInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredDeploymentInformer constructs a new informer for Deployment 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 NewFilteredDeploymentInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().Deployments(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().Deployments(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().Deployments(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().Deployments(namespace).Watch(ctx, options)
+ },
+ },
+ &apiextensionsv1beta1.Deployment{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *deploymentInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredDeploymentInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *deploymentInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiextensionsv1beta1.Deployment{}, f.defaultInformer)
+}
+
+func (f *deploymentInformer) Lister() extensionsv1beta1.DeploymentLister {
+ return extensionsv1beta1.NewDeploymentLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/ingress.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/ingress.go
new file mode 100644
index 00000000000..935f6868c25
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/extensions/v1beta1/ingress.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apiextensionsv1beta1 "k8s.io/api/extensions/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ extensionsv1beta1 "k8s.io/client-go/listers/extensions/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// IngressInformer provides access to a shared informer and lister for
+// Ingresses.
+type IngressInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() extensionsv1beta1.IngressLister
+}
+
+type ingressInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewIngressInformer constructs a new informer for Ingress 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 NewIngressInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredIngressInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredIngressInformer constructs a new informer for Ingress 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 NewFilteredIngressInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().Ingresses(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().Ingresses(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().Ingresses(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().Ingresses(namespace).Watch(ctx, options)
+ },
+ },
+ &apiextensionsv1beta1.Ingress{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *ingressInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredIngressInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *ingressInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiextensionsv1beta1.Ingress{}, f.defaultInformer)
+}
+
+func (f *ingressInformer) Lister() extensionsv1beta1.IngressLister {
+ return extensionsv1beta1.NewIngressLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/interface.go
new file mode 100644
index 00000000000..600741e3a27
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/extensions/v1beta1/interface.go
@@ -0,0 +1,73 @@
+/*
+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 v1beta1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // DaemonSets returns a DaemonSetInformer.
+ DaemonSets() DaemonSetInformer
+ // Deployments returns a DeploymentInformer.
+ Deployments() DeploymentInformer
+ // Ingresses returns a IngressInformer.
+ Ingresses() IngressInformer
+ // NetworkPolicies returns a NetworkPolicyInformer.
+ NetworkPolicies() NetworkPolicyInformer
+ // ReplicaSets returns a ReplicaSetInformer.
+ ReplicaSets() ReplicaSetInformer
+}
+
+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}
+}
+
+// DaemonSets returns a DaemonSetInformer.
+func (v *version) DaemonSets() DaemonSetInformer {
+ return &daemonSetInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// Deployments returns a DeploymentInformer.
+func (v *version) Deployments() DeploymentInformer {
+ return &deploymentInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// Ingresses returns a IngressInformer.
+func (v *version) Ingresses() IngressInformer {
+ return &ingressInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// NetworkPolicies returns a NetworkPolicyInformer.
+func (v *version) NetworkPolicies() NetworkPolicyInformer {
+ return &networkPolicyInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// ReplicaSets returns a ReplicaSetInformer.
+func (v *version) ReplicaSets() ReplicaSetInformer {
+ return &replicaSetInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/networkpolicy.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/networkpolicy.go
new file mode 100644
index 00000000000..f485f3149c3
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/extensions/v1beta1/networkpolicy.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apiextensionsv1beta1 "k8s.io/api/extensions/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ extensionsv1beta1 "k8s.io/client-go/listers/extensions/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// NetworkPolicyInformer provides access to a shared informer and lister for
+// NetworkPolicies.
+type NetworkPolicyInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() extensionsv1beta1.NetworkPolicyLister
+}
+
+type networkPolicyInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewNetworkPolicyInformer constructs a new informer for NetworkPolicy 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 NewNetworkPolicyInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredNetworkPolicyInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredNetworkPolicyInformer constructs a new informer for NetworkPolicy 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 NewFilteredNetworkPolicyInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().NetworkPolicies(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().NetworkPolicies(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().NetworkPolicies(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().NetworkPolicies(namespace).Watch(ctx, options)
+ },
+ },
+ &apiextensionsv1beta1.NetworkPolicy{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *networkPolicyInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredNetworkPolicyInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *networkPolicyInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiextensionsv1beta1.NetworkPolicy{}, f.defaultInformer)
+}
+
+func (f *networkPolicyInformer) Lister() extensionsv1beta1.NetworkPolicyLister {
+ return extensionsv1beta1.NewNetworkPolicyLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/replicaset.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/replicaset.go
new file mode 100644
index 00000000000..4b1be5421cc
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/extensions/v1beta1/replicaset.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apiextensionsv1beta1 "k8s.io/api/extensions/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ extensionsv1beta1 "k8s.io/client-go/listers/extensions/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ReplicaSetInformer provides access to a shared informer and lister for
+// ReplicaSets.
+type ReplicaSetInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() extensionsv1beta1.ReplicaSetLister
+}
+
+type replicaSetInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewReplicaSetInformer constructs a new informer for ReplicaSet 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 NewReplicaSetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredReplicaSetInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredReplicaSetInformer constructs a new informer for ReplicaSet 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 NewFilteredReplicaSetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().ReplicaSets(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().ReplicaSets(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().ReplicaSets(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ExtensionsV1beta1().ReplicaSets(namespace).Watch(ctx, options)
+ },
+ },
+ &apiextensionsv1beta1.ReplicaSet{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *replicaSetInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredReplicaSetInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *replicaSetInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiextensionsv1beta1.ReplicaSet{}, f.defaultInformer)
+}
+
+func (f *replicaSetInformer) Lister() extensionsv1beta1.ReplicaSetLister {
+ return extensionsv1beta1.NewReplicaSetLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/factory.go b/vendor/k8s.io/client-go/informers/factory.go
new file mode 100644
index 00000000000..86c24551ef9
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/factory.go
@@ -0,0 +1,376 @@
+/*
+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 informers
+
+import (
+ reflect "reflect"
+ sync "sync"
+ time "time"
+
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ schema "k8s.io/apimachinery/pkg/runtime/schema"
+ admissionregistration "k8s.io/client-go/informers/admissionregistration"
+ apiserverinternal "k8s.io/client-go/informers/apiserverinternal"
+ apps "k8s.io/client-go/informers/apps"
+ autoscaling "k8s.io/client-go/informers/autoscaling"
+ batch "k8s.io/client-go/informers/batch"
+ certificates "k8s.io/client-go/informers/certificates"
+ coordination "k8s.io/client-go/informers/coordination"
+ core "k8s.io/client-go/informers/core"
+ discovery "k8s.io/client-go/informers/discovery"
+ events "k8s.io/client-go/informers/events"
+ extensions "k8s.io/client-go/informers/extensions"
+ flowcontrol "k8s.io/client-go/informers/flowcontrol"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ networking "k8s.io/client-go/informers/networking"
+ node "k8s.io/client-go/informers/node"
+ policy "k8s.io/client-go/informers/policy"
+ rbac "k8s.io/client-go/informers/rbac"
+ resource "k8s.io/client-go/informers/resource"
+ scheduling "k8s.io/client-go/informers/scheduling"
+ storage "k8s.io/client-go/informers/storage"
+ storagemigration "k8s.io/client-go/informers/storagemigration"
+ kubernetes "k8s.io/client-go/kubernetes"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// SharedInformerOption defines the functional option type for SharedInformerFactory.
+type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory
+
+type sharedInformerFactory struct {
+ client kubernetes.Interface
+ namespace string
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ lock sync.Mutex
+ defaultResync time.Duration
+ customResync map[reflect.Type]time.Duration
+ transform cache.TransformFunc
+
+ informers map[reflect.Type]cache.SharedIndexInformer
+ // startedInformers is used for tracking which informers have been started.
+ // This allows Start() to be called multiple times safely.
+ startedInformers map[reflect.Type]bool
+ // wg tracks how many goroutines were started.
+ wg sync.WaitGroup
+ // shuttingDown is true when Shutdown has been called. It may still be running
+ // because it needs to wait for goroutines.
+ shuttingDown bool
+}
+
+// WithCustomResyncConfig sets a custom resync period for the specified informer types.
+func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) SharedInformerOption {
+ return func(factory *sharedInformerFactory) *sharedInformerFactory {
+ for k, v := range resyncConfig {
+ factory.customResync[reflect.TypeOf(k)] = v
+ }
+ return factory
+ }
+}
+
+// WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory.
+func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption {
+ return func(factory *sharedInformerFactory) *sharedInformerFactory {
+ factory.tweakListOptions = tweakListOptions
+ return factory
+ }
+}
+
+// WithNamespace limits the SharedInformerFactory to the specified namespace.
+func WithNamespace(namespace string) SharedInformerOption {
+ return func(factory *sharedInformerFactory) *sharedInformerFactory {
+ factory.namespace = namespace
+ return factory
+ }
+}
+
+// WithTransform sets a transform on all informers.
+func WithTransform(transform cache.TransformFunc) SharedInformerOption {
+ return func(factory *sharedInformerFactory) *sharedInformerFactory {
+ factory.transform = transform
+ return factory
+ }
+}
+
+// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces.
+func NewSharedInformerFactory(client kubernetes.Interface, defaultResync time.Duration) SharedInformerFactory {
+ return NewSharedInformerFactoryWithOptions(client, defaultResync)
+}
+
+// NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory.
+// Listers obtained via this SharedInformerFactory will be subject to the same filters
+// as specified here.
+// Deprecated: Please use NewSharedInformerFactoryWithOptions instead
+func NewFilteredSharedInformerFactory(client kubernetes.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory {
+ return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions))
+}
+
+// NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options.
+func NewSharedInformerFactoryWithOptions(client kubernetes.Interface, defaultResync time.Duration, options ...SharedInformerOption) SharedInformerFactory {
+ factory := &sharedInformerFactory{
+ client: client,
+ namespace: v1.NamespaceAll,
+ defaultResync: defaultResync,
+ informers: make(map[reflect.Type]cache.SharedIndexInformer),
+ startedInformers: make(map[reflect.Type]bool),
+ customResync: make(map[reflect.Type]time.Duration),
+ }
+
+ // Apply all options
+ for _, opt := range options {
+ factory = opt(factory)
+ }
+
+ return factory
+}
+
+func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) {
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ if f.shuttingDown {
+ return
+ }
+
+ for informerType, informer := range f.informers {
+ if !f.startedInformers[informerType] {
+ f.wg.Add(1)
+ // We need a new variable in each loop iteration,
+ // otherwise the goroutine would use the loop variable
+ // and that keeps changing.
+ informer := informer
+ go func() {
+ defer f.wg.Done()
+ informer.Run(stopCh)
+ }()
+ f.startedInformers[informerType] = true
+ }
+ }
+}
+
+func (f *sharedInformerFactory) Shutdown() {
+ f.lock.Lock()
+ f.shuttingDown = true
+ f.lock.Unlock()
+
+ // Will return immediately if there is nothing to wait for.
+ f.wg.Wait()
+}
+
+func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool {
+ informers := func() map[reflect.Type]cache.SharedIndexInformer {
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ informers := map[reflect.Type]cache.SharedIndexInformer{}
+ for informerType, informer := range f.informers {
+ if f.startedInformers[informerType] {
+ informers[informerType] = informer
+ }
+ }
+ return informers
+ }()
+
+ res := map[reflect.Type]bool{}
+ for informType, informer := range informers {
+ res[informType] = cache.WaitForCacheSync(stopCh, informer.HasSynced)
+ }
+ return res
+}
+
+// InformerFor returns the SharedIndexInformer for obj using an internal
+// client.
+func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer {
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ informerType := reflect.TypeOf(obj)
+ informer, exists := f.informers[informerType]
+ if exists {
+ return informer
+ }
+
+ resyncPeriod, exists := f.customResync[informerType]
+ if !exists {
+ resyncPeriod = f.defaultResync
+ }
+
+ informer = newFunc(f.client, resyncPeriod)
+ informer.SetTransform(f.transform)
+ f.informers[informerType] = informer
+
+ return informer
+}
+
+// SharedInformerFactory provides shared informers for resources in all known
+// API group versions.
+//
+// It is typically used like this:
+//
+// ctx, cancel := context.Background()
+// defer cancel()
+// factory := NewSharedInformerFactory(client, resyncPeriod)
+// defer factory.WaitForStop() // Returns immediately if nothing was started.
+// genericInformer := factory.ForResource(resource)
+// typedInformer := factory.SomeAPIGroup().V1().SomeType()
+// factory.Start(ctx.Done()) // Start processing these informers.
+// synced := factory.WaitForCacheSync(ctx.Done())
+// for v, ok := range synced {
+// if !ok {
+// fmt.Fprintf(os.Stderr, "caches failed to sync: %v", v)
+// return
+// }
+// }
+//
+// // Creating informers can also be created after Start, but then
+// // Start must be called again:
+// anotherGenericInformer := factory.ForResource(resource)
+// factory.Start(ctx.Done())
+type SharedInformerFactory interface {
+ internalinterfaces.SharedInformerFactory
+
+ // Start initializes all requested informers. They are handled in goroutines
+ // which run until the stop channel gets closed.
+ // Warning: Start does not block. When run in a go-routine, it will race with a later WaitForCacheSync.
+ Start(stopCh <-chan struct{})
+
+ // Shutdown marks a factory as shutting down. At that point no new
+ // informers can be started anymore and Start will return without
+ // doing anything.
+ //
+ // In addition, Shutdown blocks until all goroutines have terminated. For that
+ // to happen, the close channel(s) that they were started with must be closed,
+ // either before Shutdown gets called or while it is waiting.
+ //
+ // Shutdown may be called multiple times, even concurrently. All such calls will
+ // block until all goroutines have terminated.
+ Shutdown()
+
+ // WaitForCacheSync blocks until all started informers' caches were synced
+ // or the stop channel gets closed.
+ WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool
+
+ // ForResource gives generic access to a shared informer of the matching type.
+ ForResource(resource schema.GroupVersionResource) (GenericInformer, error)
+
+ // InformerFor returns the SharedIndexInformer for obj using an internal
+ // client.
+ InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer
+
+ Admissionregistration() admissionregistration.Interface
+ Internal() apiserverinternal.Interface
+ Apps() apps.Interface
+ Autoscaling() autoscaling.Interface
+ Batch() batch.Interface
+ Certificates() certificates.Interface
+ Coordination() coordination.Interface
+ Core() core.Interface
+ Discovery() discovery.Interface
+ Events() events.Interface
+ Extensions() extensions.Interface
+ Flowcontrol() flowcontrol.Interface
+ Networking() networking.Interface
+ Node() node.Interface
+ Policy() policy.Interface
+ Rbac() rbac.Interface
+ Resource() resource.Interface
+ Scheduling() scheduling.Interface
+ Storage() storage.Interface
+ Storagemigration() storagemigration.Interface
+}
+
+func (f *sharedInformerFactory) Admissionregistration() admissionregistration.Interface {
+ return admissionregistration.New(f, f.namespace, f.tweakListOptions)
+}
+
+func (f *sharedInformerFactory) Internal() apiserverinternal.Interface {
+ return apiserverinternal.New(f, f.namespace, f.tweakListOptions)
+}
+
+func (f *sharedInformerFactory) Apps() apps.Interface {
+ return apps.New(f, f.namespace, f.tweakListOptions)
+}
+
+func (f *sharedInformerFactory) Autoscaling() autoscaling.Interface {
+ return autoscaling.New(f, f.namespace, f.tweakListOptions)
+}
+
+func (f *sharedInformerFactory) Batch() batch.Interface {
+ return batch.New(f, f.namespace, f.tweakListOptions)
+}
+
+func (f *sharedInformerFactory) Certificates() certificates.Interface {
+ return certificates.New(f, f.namespace, f.tweakListOptions)
+}
+
+func (f *sharedInformerFactory) Coordination() coordination.Interface {
+ return coordination.New(f, f.namespace, f.tweakListOptions)
+}
+
+func (f *sharedInformerFactory) Core() core.Interface {
+ return core.New(f, f.namespace, f.tweakListOptions)
+}
+
+func (f *sharedInformerFactory) Discovery() discovery.Interface {
+ return discovery.New(f, f.namespace, f.tweakListOptions)
+}
+
+func (f *sharedInformerFactory) Events() events.Interface {
+ return events.New(f, f.namespace, f.tweakListOptions)
+}
+
+func (f *sharedInformerFactory) Extensions() extensions.Interface {
+ return extensions.New(f, f.namespace, f.tweakListOptions)
+}
+
+func (f *sharedInformerFactory) Flowcontrol() flowcontrol.Interface {
+ return flowcontrol.New(f, f.namespace, f.tweakListOptions)
+}
+
+func (f *sharedInformerFactory) Networking() networking.Interface {
+ return networking.New(f, f.namespace, f.tweakListOptions)
+}
+
+func (f *sharedInformerFactory) Node() node.Interface {
+ return node.New(f, f.namespace, f.tweakListOptions)
+}
+
+func (f *sharedInformerFactory) Policy() policy.Interface {
+ return policy.New(f, f.namespace, f.tweakListOptions)
+}
+
+func (f *sharedInformerFactory) Rbac() rbac.Interface {
+ return rbac.New(f, f.namespace, f.tweakListOptions)
+}
+
+func (f *sharedInformerFactory) Resource() resource.Interface {
+ return resource.New(f, f.namespace, f.tweakListOptions)
+}
+
+func (f *sharedInformerFactory) Scheduling() scheduling.Interface {
+ return scheduling.New(f, f.namespace, f.tweakListOptions)
+}
+
+func (f *sharedInformerFactory) Storage() storage.Interface {
+ return storage.New(f, f.namespace, f.tweakListOptions)
+}
+
+func (f *sharedInformerFactory) Storagemigration() storagemigration.Interface {
+ return storagemigration.New(f, f.namespace, f.tweakListOptions)
+}
diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/interface.go b/vendor/k8s.io/client-go/informers/flowcontrol/interface.go
new file mode 100644
index 00000000000..48dd9a8a117
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/flowcontrol/interface.go
@@ -0,0 +1,70 @@
+/*
+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 flowcontrol
+
+import (
+ v1 "k8s.io/client-go/informers/flowcontrol/v1"
+ v1beta1 "k8s.io/client-go/informers/flowcontrol/v1beta1"
+ v1beta2 "k8s.io/client-go/informers/flowcontrol/v1beta2"
+ v1beta3 "k8s.io/client-go/informers/flowcontrol/v1beta3"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to each of this group's versions.
+type Interface interface {
+ // V1 provides access to shared informers for resources in V1.
+ V1() v1.Interface
+ // V1beta1 provides access to shared informers for resources in V1beta1.
+ V1beta1() v1beta1.Interface
+ // V1beta2 provides access to shared informers for resources in V1beta2.
+ V1beta2() v1beta2.Interface
+ // V1beta3 provides access to shared informers for resources in V1beta3.
+ V1beta3() v1beta3.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}
+}
+
+// V1 returns a new v1.Interface.
+func (g *group) V1() v1.Interface {
+ return v1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1beta1 returns a new v1beta1.Interface.
+func (g *group) V1beta1() v1beta1.Interface {
+ return v1beta1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1beta2 returns a new v1beta2.Interface.
+func (g *group) V1beta2() v1beta2.Interface {
+ return v1beta2.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1beta3 returns a new v1beta3.Interface.
+func (g *group) V1beta3() v1beta3.Interface {
+ return v1beta3.New(g.factory, g.namespace, g.tweakListOptions)
+}
diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/v1/flowschema.go b/vendor/k8s.io/client-go/informers/flowcontrol/v1/flowschema.go
new file mode 100644
index 00000000000..f8918dcf723
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/flowcontrol/v1/flowschema.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apiflowcontrolv1 "k8s.io/api/flowcontrol/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ flowcontrolv1 "k8s.io/client-go/listers/flowcontrol/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// FlowSchemaInformer provides access to a shared informer and lister for
+// FlowSchemas.
+type FlowSchemaInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() flowcontrolv1.FlowSchemaLister
+}
+
+type flowSchemaInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewFlowSchemaInformer constructs a new informer for FlowSchema 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 NewFlowSchemaInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredFlowSchemaInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredFlowSchemaInformer constructs a new informer for FlowSchema 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 NewFilteredFlowSchemaInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1().FlowSchemas().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1().FlowSchemas().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1().FlowSchemas().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1().FlowSchemas().Watch(ctx, options)
+ },
+ },
+ &apiflowcontrolv1.FlowSchema{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *flowSchemaInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredFlowSchemaInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *flowSchemaInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiflowcontrolv1.FlowSchema{}, f.defaultInformer)
+}
+
+func (f *flowSchemaInformer) Lister() flowcontrolv1.FlowSchemaLister {
+ return flowcontrolv1.NewFlowSchemaLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/v1/interface.go b/vendor/k8s.io/client-go/informers/flowcontrol/v1/interface.go
new file mode 100644
index 00000000000..3de934900fe
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/flowcontrol/v1/interface.go
@@ -0,0 +1,52 @@
+/*
+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 v1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // FlowSchemas returns a FlowSchemaInformer.
+ FlowSchemas() FlowSchemaInformer
+ // PriorityLevelConfigurations returns a PriorityLevelConfigurationInformer.
+ PriorityLevelConfigurations() PriorityLevelConfigurationInformer
+}
+
+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}
+}
+
+// FlowSchemas returns a FlowSchemaInformer.
+func (v *version) FlowSchemas() FlowSchemaInformer {
+ return &flowSchemaInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// PriorityLevelConfigurations returns a PriorityLevelConfigurationInformer.
+func (v *version) PriorityLevelConfigurations() PriorityLevelConfigurationInformer {
+ return &priorityLevelConfigurationInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/v1/prioritylevelconfiguration.go b/vendor/k8s.io/client-go/informers/flowcontrol/v1/prioritylevelconfiguration.go
new file mode 100644
index 00000000000..2ec4f39887c
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/flowcontrol/v1/prioritylevelconfiguration.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apiflowcontrolv1 "k8s.io/api/flowcontrol/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ flowcontrolv1 "k8s.io/client-go/listers/flowcontrol/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PriorityLevelConfigurationInformer provides access to a shared informer and lister for
+// PriorityLevelConfigurations.
+type PriorityLevelConfigurationInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() flowcontrolv1.PriorityLevelConfigurationLister
+}
+
+type priorityLevelConfigurationInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewPriorityLevelConfigurationInformer constructs a new informer for PriorityLevelConfiguration 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 NewPriorityLevelConfigurationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredPriorityLevelConfigurationInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredPriorityLevelConfigurationInformer constructs a new informer for PriorityLevelConfiguration 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 NewFilteredPriorityLevelConfigurationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1().PriorityLevelConfigurations().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1().PriorityLevelConfigurations().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1().PriorityLevelConfigurations().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1().PriorityLevelConfigurations().Watch(ctx, options)
+ },
+ },
+ &apiflowcontrolv1.PriorityLevelConfiguration{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *priorityLevelConfigurationInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredPriorityLevelConfigurationInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *priorityLevelConfigurationInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiflowcontrolv1.PriorityLevelConfiguration{}, f.defaultInformer)
+}
+
+func (f *priorityLevelConfigurationInformer) Lister() flowcontrolv1.PriorityLevelConfigurationLister {
+ return flowcontrolv1.NewPriorityLevelConfigurationLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/v1beta1/flowschema.go b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta1/flowschema.go
new file mode 100644
index 00000000000..322fa318137
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta1/flowschema.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apiflowcontrolv1beta1 "k8s.io/api/flowcontrol/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ flowcontrolv1beta1 "k8s.io/client-go/listers/flowcontrol/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// FlowSchemaInformer provides access to a shared informer and lister for
+// FlowSchemas.
+type FlowSchemaInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() flowcontrolv1beta1.FlowSchemaLister
+}
+
+type flowSchemaInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewFlowSchemaInformer constructs a new informer for FlowSchema 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 NewFlowSchemaInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredFlowSchemaInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredFlowSchemaInformer constructs a new informer for FlowSchema 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 NewFilteredFlowSchemaInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta1().FlowSchemas().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta1().FlowSchemas().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta1().FlowSchemas().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta1().FlowSchemas().Watch(ctx, options)
+ },
+ },
+ &apiflowcontrolv1beta1.FlowSchema{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *flowSchemaInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredFlowSchemaInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *flowSchemaInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiflowcontrolv1beta1.FlowSchema{}, f.defaultInformer)
+}
+
+func (f *flowSchemaInformer) Lister() flowcontrolv1beta1.FlowSchemaLister {
+ return flowcontrolv1beta1.NewFlowSchemaLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta1/interface.go
new file mode 100644
index 00000000000..50329bb0ac0
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta1/interface.go
@@ -0,0 +1,52 @@
+/*
+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 v1beta1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // FlowSchemas returns a FlowSchemaInformer.
+ FlowSchemas() FlowSchemaInformer
+ // PriorityLevelConfigurations returns a PriorityLevelConfigurationInformer.
+ PriorityLevelConfigurations() PriorityLevelConfigurationInformer
+}
+
+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}
+}
+
+// FlowSchemas returns a FlowSchemaInformer.
+func (v *version) FlowSchemas() FlowSchemaInformer {
+ return &flowSchemaInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// PriorityLevelConfigurations returns a PriorityLevelConfigurationInformer.
+func (v *version) PriorityLevelConfigurations() PriorityLevelConfigurationInformer {
+ return &priorityLevelConfigurationInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/v1beta1/prioritylevelconfiguration.go b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta1/prioritylevelconfiguration.go
new file mode 100644
index 00000000000..aebc788f7e1
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta1/prioritylevelconfiguration.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apiflowcontrolv1beta1 "k8s.io/api/flowcontrol/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ flowcontrolv1beta1 "k8s.io/client-go/listers/flowcontrol/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PriorityLevelConfigurationInformer provides access to a shared informer and lister for
+// PriorityLevelConfigurations.
+type PriorityLevelConfigurationInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() flowcontrolv1beta1.PriorityLevelConfigurationLister
+}
+
+type priorityLevelConfigurationInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewPriorityLevelConfigurationInformer constructs a new informer for PriorityLevelConfiguration 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 NewPriorityLevelConfigurationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredPriorityLevelConfigurationInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredPriorityLevelConfigurationInformer constructs a new informer for PriorityLevelConfiguration 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 NewFilteredPriorityLevelConfigurationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta1().PriorityLevelConfigurations().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta1().PriorityLevelConfigurations().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta1().PriorityLevelConfigurations().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta1().PriorityLevelConfigurations().Watch(ctx, options)
+ },
+ },
+ &apiflowcontrolv1beta1.PriorityLevelConfiguration{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *priorityLevelConfigurationInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredPriorityLevelConfigurationInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *priorityLevelConfigurationInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiflowcontrolv1beta1.PriorityLevelConfiguration{}, f.defaultInformer)
+}
+
+func (f *priorityLevelConfigurationInformer) Lister() flowcontrolv1beta1.PriorityLevelConfigurationLister {
+ return flowcontrolv1beta1.NewPriorityLevelConfigurationLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/v1beta2/flowschema.go b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta2/flowschema.go
new file mode 100644
index 00000000000..522e24b7b51
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta2/flowschema.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta2
+
+import (
+ context "context"
+ time "time"
+
+ apiflowcontrolv1beta2 "k8s.io/api/flowcontrol/v1beta2"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ flowcontrolv1beta2 "k8s.io/client-go/listers/flowcontrol/v1beta2"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// FlowSchemaInformer provides access to a shared informer and lister for
+// FlowSchemas.
+type FlowSchemaInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() flowcontrolv1beta2.FlowSchemaLister
+}
+
+type flowSchemaInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewFlowSchemaInformer constructs a new informer for FlowSchema 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 NewFlowSchemaInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredFlowSchemaInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredFlowSchemaInformer constructs a new informer for FlowSchema 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 NewFilteredFlowSchemaInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta2().FlowSchemas().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta2().FlowSchemas().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta2().FlowSchemas().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta2().FlowSchemas().Watch(ctx, options)
+ },
+ },
+ &apiflowcontrolv1beta2.FlowSchema{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *flowSchemaInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredFlowSchemaInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *flowSchemaInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiflowcontrolv1beta2.FlowSchema{}, f.defaultInformer)
+}
+
+func (f *flowSchemaInformer) Lister() flowcontrolv1beta2.FlowSchemaLister {
+ return flowcontrolv1beta2.NewFlowSchemaLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/v1beta2/interface.go b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta2/interface.go
new file mode 100644
index 00000000000..142d552896a
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta2/interface.go
@@ -0,0 +1,52 @@
+/*
+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 v1beta2
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // FlowSchemas returns a FlowSchemaInformer.
+ FlowSchemas() FlowSchemaInformer
+ // PriorityLevelConfigurations returns a PriorityLevelConfigurationInformer.
+ PriorityLevelConfigurations() PriorityLevelConfigurationInformer
+}
+
+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}
+}
+
+// FlowSchemas returns a FlowSchemaInformer.
+func (v *version) FlowSchemas() FlowSchemaInformer {
+ return &flowSchemaInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// PriorityLevelConfigurations returns a PriorityLevelConfigurationInformer.
+func (v *version) PriorityLevelConfigurations() PriorityLevelConfigurationInformer {
+ return &priorityLevelConfigurationInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/v1beta2/prioritylevelconfiguration.go b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta2/prioritylevelconfiguration.go
new file mode 100644
index 00000000000..0ee0506e253
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta2/prioritylevelconfiguration.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta2
+
+import (
+ context "context"
+ time "time"
+
+ apiflowcontrolv1beta2 "k8s.io/api/flowcontrol/v1beta2"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ flowcontrolv1beta2 "k8s.io/client-go/listers/flowcontrol/v1beta2"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PriorityLevelConfigurationInformer provides access to a shared informer and lister for
+// PriorityLevelConfigurations.
+type PriorityLevelConfigurationInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() flowcontrolv1beta2.PriorityLevelConfigurationLister
+}
+
+type priorityLevelConfigurationInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewPriorityLevelConfigurationInformer constructs a new informer for PriorityLevelConfiguration 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 NewPriorityLevelConfigurationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredPriorityLevelConfigurationInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredPriorityLevelConfigurationInformer constructs a new informer for PriorityLevelConfiguration 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 NewFilteredPriorityLevelConfigurationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta2().PriorityLevelConfigurations().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta2().PriorityLevelConfigurations().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta2().PriorityLevelConfigurations().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta2().PriorityLevelConfigurations().Watch(ctx, options)
+ },
+ },
+ &apiflowcontrolv1beta2.PriorityLevelConfiguration{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *priorityLevelConfigurationInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredPriorityLevelConfigurationInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *priorityLevelConfigurationInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiflowcontrolv1beta2.PriorityLevelConfiguration{}, f.defaultInformer)
+}
+
+func (f *priorityLevelConfigurationInformer) Lister() flowcontrolv1beta2.PriorityLevelConfigurationLister {
+ return flowcontrolv1beta2.NewPriorityLevelConfigurationLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/v1beta3/flowschema.go b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta3/flowschema.go
new file mode 100644
index 00000000000..3b0dca3cc22
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta3/flowschema.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta3
+
+import (
+ context "context"
+ time "time"
+
+ apiflowcontrolv1beta3 "k8s.io/api/flowcontrol/v1beta3"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ flowcontrolv1beta3 "k8s.io/client-go/listers/flowcontrol/v1beta3"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// FlowSchemaInformer provides access to a shared informer and lister for
+// FlowSchemas.
+type FlowSchemaInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() flowcontrolv1beta3.FlowSchemaLister
+}
+
+type flowSchemaInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewFlowSchemaInformer constructs a new informer for FlowSchema 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 NewFlowSchemaInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredFlowSchemaInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredFlowSchemaInformer constructs a new informer for FlowSchema 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 NewFilteredFlowSchemaInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta3().FlowSchemas().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta3().FlowSchemas().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta3().FlowSchemas().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta3().FlowSchemas().Watch(ctx, options)
+ },
+ },
+ &apiflowcontrolv1beta3.FlowSchema{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *flowSchemaInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredFlowSchemaInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *flowSchemaInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiflowcontrolv1beta3.FlowSchema{}, f.defaultInformer)
+}
+
+func (f *flowSchemaInformer) Lister() flowcontrolv1beta3.FlowSchemaLister {
+ return flowcontrolv1beta3.NewFlowSchemaLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/v1beta3/interface.go b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta3/interface.go
new file mode 100644
index 00000000000..54c5414a2bd
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta3/interface.go
@@ -0,0 +1,52 @@
+/*
+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 v1beta3
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // FlowSchemas returns a FlowSchemaInformer.
+ FlowSchemas() FlowSchemaInformer
+ // PriorityLevelConfigurations returns a PriorityLevelConfigurationInformer.
+ PriorityLevelConfigurations() PriorityLevelConfigurationInformer
+}
+
+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}
+}
+
+// FlowSchemas returns a FlowSchemaInformer.
+func (v *version) FlowSchemas() FlowSchemaInformer {
+ return &flowSchemaInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// PriorityLevelConfigurations returns a PriorityLevelConfigurationInformer.
+func (v *version) PriorityLevelConfigurations() PriorityLevelConfigurationInformer {
+ return &priorityLevelConfigurationInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/flowcontrol/v1beta3/prioritylevelconfiguration.go b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta3/prioritylevelconfiguration.go
new file mode 100644
index 00000000000..77ff4e4e7c6
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/flowcontrol/v1beta3/prioritylevelconfiguration.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta3
+
+import (
+ context "context"
+ time "time"
+
+ apiflowcontrolv1beta3 "k8s.io/api/flowcontrol/v1beta3"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ flowcontrolv1beta3 "k8s.io/client-go/listers/flowcontrol/v1beta3"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PriorityLevelConfigurationInformer provides access to a shared informer and lister for
+// PriorityLevelConfigurations.
+type PriorityLevelConfigurationInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() flowcontrolv1beta3.PriorityLevelConfigurationLister
+}
+
+type priorityLevelConfigurationInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewPriorityLevelConfigurationInformer constructs a new informer for PriorityLevelConfiguration 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 NewPriorityLevelConfigurationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredPriorityLevelConfigurationInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredPriorityLevelConfigurationInformer constructs a new informer for PriorityLevelConfiguration 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 NewFilteredPriorityLevelConfigurationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta3().PriorityLevelConfigurations().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta3().PriorityLevelConfigurations().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta3().PriorityLevelConfigurations().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.FlowcontrolV1beta3().PriorityLevelConfigurations().Watch(ctx, options)
+ },
+ },
+ &apiflowcontrolv1beta3.PriorityLevelConfiguration{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *priorityLevelConfigurationInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredPriorityLevelConfigurationInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *priorityLevelConfigurationInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiflowcontrolv1beta3.PriorityLevelConfiguration{}, f.defaultInformer)
+}
+
+func (f *priorityLevelConfigurationInformer) Lister() flowcontrolv1beta3.PriorityLevelConfigurationLister {
+ return flowcontrolv1beta3.NewPriorityLevelConfigurationLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/generic.go b/vendor/k8s.io/client-go/informers/generic.go
new file mode 100644
index 00000000000..9659553545f
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/generic.go
@@ -0,0 +1,473 @@
+/*
+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 informers
+
+import (
+ fmt "fmt"
+
+ v1 "k8s.io/api/admissionregistration/v1"
+ v1alpha1 "k8s.io/api/admissionregistration/v1alpha1"
+ v1beta1 "k8s.io/api/admissionregistration/v1beta1"
+ apiserverinternalv1alpha1 "k8s.io/api/apiserverinternal/v1alpha1"
+ appsv1 "k8s.io/api/apps/v1"
+ appsv1beta1 "k8s.io/api/apps/v1beta1"
+ v1beta2 "k8s.io/api/apps/v1beta2"
+ autoscalingv1 "k8s.io/api/autoscaling/v1"
+ v2 "k8s.io/api/autoscaling/v2"
+ v2beta1 "k8s.io/api/autoscaling/v2beta1"
+ v2beta2 "k8s.io/api/autoscaling/v2beta2"
+ batchv1 "k8s.io/api/batch/v1"
+ batchv1beta1 "k8s.io/api/batch/v1beta1"
+ certificatesv1 "k8s.io/api/certificates/v1"
+ certificatesv1alpha1 "k8s.io/api/certificates/v1alpha1"
+ certificatesv1beta1 "k8s.io/api/certificates/v1beta1"
+ coordinationv1 "k8s.io/api/coordination/v1"
+ v1alpha2 "k8s.io/api/coordination/v1alpha2"
+ coordinationv1beta1 "k8s.io/api/coordination/v1beta1"
+ corev1 "k8s.io/api/core/v1"
+ discoveryv1 "k8s.io/api/discovery/v1"
+ discoveryv1beta1 "k8s.io/api/discovery/v1beta1"
+ eventsv1 "k8s.io/api/events/v1"
+ eventsv1beta1 "k8s.io/api/events/v1beta1"
+ extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
+ flowcontrolv1 "k8s.io/api/flowcontrol/v1"
+ flowcontrolv1beta1 "k8s.io/api/flowcontrol/v1beta1"
+ flowcontrolv1beta2 "k8s.io/api/flowcontrol/v1beta2"
+ v1beta3 "k8s.io/api/flowcontrol/v1beta3"
+ networkingv1 "k8s.io/api/networking/v1"
+ networkingv1alpha1 "k8s.io/api/networking/v1alpha1"
+ networkingv1beta1 "k8s.io/api/networking/v1beta1"
+ nodev1 "k8s.io/api/node/v1"
+ nodev1alpha1 "k8s.io/api/node/v1alpha1"
+ nodev1beta1 "k8s.io/api/node/v1beta1"
+ policyv1 "k8s.io/api/policy/v1"
+ policyv1beta1 "k8s.io/api/policy/v1beta1"
+ rbacv1 "k8s.io/api/rbac/v1"
+ rbacv1alpha1 "k8s.io/api/rbac/v1alpha1"
+ rbacv1beta1 "k8s.io/api/rbac/v1beta1"
+ v1alpha3 "k8s.io/api/resource/v1alpha3"
+ resourcev1beta1 "k8s.io/api/resource/v1beta1"
+ resourcev1beta2 "k8s.io/api/resource/v1beta2"
+ schedulingv1 "k8s.io/api/scheduling/v1"
+ schedulingv1alpha1 "k8s.io/api/scheduling/v1alpha1"
+ schedulingv1beta1 "k8s.io/api/scheduling/v1beta1"
+ storagev1 "k8s.io/api/storage/v1"
+ storagev1alpha1 "k8s.io/api/storage/v1alpha1"
+ storagev1beta1 "k8s.io/api/storage/v1beta1"
+ storagemigrationv1alpha1 "k8s.io/api/storagemigration/v1alpha1"
+ schema "k8s.io/apimachinery/pkg/runtime/schema"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// GenericInformer is type of SharedIndexInformer which will locate and delegate to other
+// sharedInformers based on type
+type GenericInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() cache.GenericLister
+}
+
+type genericInformer struct {
+ informer cache.SharedIndexInformer
+ resource schema.GroupResource
+}
+
+// Informer returns the SharedIndexInformer.
+func (f *genericInformer) Informer() cache.SharedIndexInformer {
+ return f.informer
+}
+
+// Lister returns the GenericLister.
+func (f *genericInformer) Lister() cache.GenericLister {
+ return cache.NewGenericLister(f.Informer().GetIndexer(), f.resource)
+}
+
+// ForResource gives generic access to a shared informer of the matching type
+// TODO extend this to unknown resources with a client pool
+func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) {
+ switch resource {
+ // Group=admissionregistration.k8s.io, Version=v1
+ case v1.SchemeGroupVersion.WithResource("mutatingwebhookconfigurations"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Admissionregistration().V1().MutatingWebhookConfigurations().Informer()}, nil
+ case v1.SchemeGroupVersion.WithResource("validatingadmissionpolicies"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Admissionregistration().V1().ValidatingAdmissionPolicies().Informer()}, nil
+ case v1.SchemeGroupVersion.WithResource("validatingadmissionpolicybindings"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Admissionregistration().V1().ValidatingAdmissionPolicyBindings().Informer()}, nil
+ case v1.SchemeGroupVersion.WithResource("validatingwebhookconfigurations"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Admissionregistration().V1().ValidatingWebhookConfigurations().Informer()}, nil
+
+ // Group=admissionregistration.k8s.io, Version=v1alpha1
+ case v1alpha1.SchemeGroupVersion.WithResource("mutatingadmissionpolicies"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Admissionregistration().V1alpha1().MutatingAdmissionPolicies().Informer()}, nil
+ case v1alpha1.SchemeGroupVersion.WithResource("mutatingadmissionpolicybindings"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Admissionregistration().V1alpha1().MutatingAdmissionPolicyBindings().Informer()}, nil
+ case v1alpha1.SchemeGroupVersion.WithResource("validatingadmissionpolicies"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Admissionregistration().V1alpha1().ValidatingAdmissionPolicies().Informer()}, nil
+ case v1alpha1.SchemeGroupVersion.WithResource("validatingadmissionpolicybindings"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Admissionregistration().V1alpha1().ValidatingAdmissionPolicyBindings().Informer()}, nil
+
+ // Group=admissionregistration.k8s.io, Version=v1beta1
+ case v1beta1.SchemeGroupVersion.WithResource("mutatingwebhookconfigurations"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Admissionregistration().V1beta1().MutatingWebhookConfigurations().Informer()}, nil
+ case v1beta1.SchemeGroupVersion.WithResource("validatingadmissionpolicies"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Admissionregistration().V1beta1().ValidatingAdmissionPolicies().Informer()}, nil
+ case v1beta1.SchemeGroupVersion.WithResource("validatingadmissionpolicybindings"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Admissionregistration().V1beta1().ValidatingAdmissionPolicyBindings().Informer()}, nil
+ case v1beta1.SchemeGroupVersion.WithResource("validatingwebhookconfigurations"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Admissionregistration().V1beta1().ValidatingWebhookConfigurations().Informer()}, nil
+
+ // Group=apps, Version=v1
+ case appsv1.SchemeGroupVersion.WithResource("controllerrevisions"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Apps().V1().ControllerRevisions().Informer()}, nil
+ case appsv1.SchemeGroupVersion.WithResource("daemonsets"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Apps().V1().DaemonSets().Informer()}, nil
+ case appsv1.SchemeGroupVersion.WithResource("deployments"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Apps().V1().Deployments().Informer()}, nil
+ case appsv1.SchemeGroupVersion.WithResource("replicasets"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Apps().V1().ReplicaSets().Informer()}, nil
+ case appsv1.SchemeGroupVersion.WithResource("statefulsets"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Apps().V1().StatefulSets().Informer()}, nil
+
+ // Group=apps, Version=v1beta1
+ case appsv1beta1.SchemeGroupVersion.WithResource("controllerrevisions"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Apps().V1beta1().ControllerRevisions().Informer()}, nil
+ case appsv1beta1.SchemeGroupVersion.WithResource("deployments"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Apps().V1beta1().Deployments().Informer()}, nil
+ case appsv1beta1.SchemeGroupVersion.WithResource("statefulsets"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Apps().V1beta1().StatefulSets().Informer()}, nil
+
+ // Group=apps, Version=v1beta2
+ case v1beta2.SchemeGroupVersion.WithResource("controllerrevisions"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Apps().V1beta2().ControllerRevisions().Informer()}, nil
+ case v1beta2.SchemeGroupVersion.WithResource("daemonsets"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Apps().V1beta2().DaemonSets().Informer()}, nil
+ case v1beta2.SchemeGroupVersion.WithResource("deployments"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Apps().V1beta2().Deployments().Informer()}, nil
+ case v1beta2.SchemeGroupVersion.WithResource("replicasets"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Apps().V1beta2().ReplicaSets().Informer()}, nil
+ case v1beta2.SchemeGroupVersion.WithResource("statefulsets"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Apps().V1beta2().StatefulSets().Informer()}, nil
+
+ // Group=autoscaling, Version=v1
+ case autoscalingv1.SchemeGroupVersion.WithResource("horizontalpodautoscalers"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Autoscaling().V1().HorizontalPodAutoscalers().Informer()}, nil
+
+ // Group=autoscaling, Version=v2
+ case v2.SchemeGroupVersion.WithResource("horizontalpodautoscalers"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Autoscaling().V2().HorizontalPodAutoscalers().Informer()}, nil
+
+ // Group=autoscaling, Version=v2beta1
+ case v2beta1.SchemeGroupVersion.WithResource("horizontalpodautoscalers"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Autoscaling().V2beta1().HorizontalPodAutoscalers().Informer()}, nil
+
+ // Group=autoscaling, Version=v2beta2
+ case v2beta2.SchemeGroupVersion.WithResource("horizontalpodautoscalers"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Autoscaling().V2beta2().HorizontalPodAutoscalers().Informer()}, nil
+
+ // Group=batch, Version=v1
+ case batchv1.SchemeGroupVersion.WithResource("cronjobs"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Batch().V1().CronJobs().Informer()}, nil
+ case batchv1.SchemeGroupVersion.WithResource("jobs"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Batch().V1().Jobs().Informer()}, nil
+
+ // Group=batch, Version=v1beta1
+ case batchv1beta1.SchemeGroupVersion.WithResource("cronjobs"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Batch().V1beta1().CronJobs().Informer()}, nil
+
+ // Group=certificates.k8s.io, Version=v1
+ case certificatesv1.SchemeGroupVersion.WithResource("certificatesigningrequests"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Certificates().V1().CertificateSigningRequests().Informer()}, nil
+
+ // Group=certificates.k8s.io, Version=v1alpha1
+ case certificatesv1alpha1.SchemeGroupVersion.WithResource("clustertrustbundles"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Certificates().V1alpha1().ClusterTrustBundles().Informer()}, nil
+
+ // Group=certificates.k8s.io, Version=v1beta1
+ case certificatesv1beta1.SchemeGroupVersion.WithResource("certificatesigningrequests"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Certificates().V1beta1().CertificateSigningRequests().Informer()}, nil
+ case certificatesv1beta1.SchemeGroupVersion.WithResource("clustertrustbundles"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Certificates().V1beta1().ClusterTrustBundles().Informer()}, nil
+
+ // Group=coordination.k8s.io, Version=v1
+ case coordinationv1.SchemeGroupVersion.WithResource("leases"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Coordination().V1().Leases().Informer()}, nil
+
+ // Group=coordination.k8s.io, Version=v1alpha2
+ case v1alpha2.SchemeGroupVersion.WithResource("leasecandidates"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Coordination().V1alpha2().LeaseCandidates().Informer()}, nil
+
+ // Group=coordination.k8s.io, Version=v1beta1
+ case coordinationv1beta1.SchemeGroupVersion.WithResource("leases"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Coordination().V1beta1().Leases().Informer()}, nil
+ case coordinationv1beta1.SchemeGroupVersion.WithResource("leasecandidates"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Coordination().V1beta1().LeaseCandidates().Informer()}, nil
+
+ // Group=core, Version=v1
+ case corev1.SchemeGroupVersion.WithResource("componentstatuses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().ComponentStatuses().Informer()}, nil
+ case corev1.SchemeGroupVersion.WithResource("configmaps"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().ConfigMaps().Informer()}, nil
+ case corev1.SchemeGroupVersion.WithResource("endpoints"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().Endpoints().Informer()}, nil
+ case corev1.SchemeGroupVersion.WithResource("events"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().Events().Informer()}, nil
+ case corev1.SchemeGroupVersion.WithResource("limitranges"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().LimitRanges().Informer()}, nil
+ case corev1.SchemeGroupVersion.WithResource("namespaces"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().Namespaces().Informer()}, nil
+ case corev1.SchemeGroupVersion.WithResource("nodes"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().Nodes().Informer()}, nil
+ case corev1.SchemeGroupVersion.WithResource("persistentvolumes"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().PersistentVolumes().Informer()}, nil
+ case corev1.SchemeGroupVersion.WithResource("persistentvolumeclaims"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().PersistentVolumeClaims().Informer()}, nil
+ case corev1.SchemeGroupVersion.WithResource("pods"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().Pods().Informer()}, nil
+ case corev1.SchemeGroupVersion.WithResource("podtemplates"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().PodTemplates().Informer()}, nil
+ case corev1.SchemeGroupVersion.WithResource("replicationcontrollers"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().ReplicationControllers().Informer()}, nil
+ case corev1.SchemeGroupVersion.WithResource("resourcequotas"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().ResourceQuotas().Informer()}, nil
+ case corev1.SchemeGroupVersion.WithResource("secrets"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().Secrets().Informer()}, nil
+ case corev1.SchemeGroupVersion.WithResource("services"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().Services().Informer()}, nil
+ case corev1.SchemeGroupVersion.WithResource("serviceaccounts"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().ServiceAccounts().Informer()}, nil
+
+ // Group=discovery.k8s.io, Version=v1
+ case discoveryv1.SchemeGroupVersion.WithResource("endpointslices"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Discovery().V1().EndpointSlices().Informer()}, nil
+
+ // Group=discovery.k8s.io, Version=v1beta1
+ case discoveryv1beta1.SchemeGroupVersion.WithResource("endpointslices"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Discovery().V1beta1().EndpointSlices().Informer()}, nil
+
+ // Group=events.k8s.io, Version=v1
+ case eventsv1.SchemeGroupVersion.WithResource("events"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Events().V1().Events().Informer()}, nil
+
+ // Group=events.k8s.io, Version=v1beta1
+ case eventsv1beta1.SchemeGroupVersion.WithResource("events"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Events().V1beta1().Events().Informer()}, nil
+
+ // Group=extensions, Version=v1beta1
+ case extensionsv1beta1.SchemeGroupVersion.WithResource("daemonsets"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Extensions().V1beta1().DaemonSets().Informer()}, nil
+ case extensionsv1beta1.SchemeGroupVersion.WithResource("deployments"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Extensions().V1beta1().Deployments().Informer()}, nil
+ case extensionsv1beta1.SchemeGroupVersion.WithResource("ingresses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Extensions().V1beta1().Ingresses().Informer()}, nil
+ case extensionsv1beta1.SchemeGroupVersion.WithResource("networkpolicies"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Extensions().V1beta1().NetworkPolicies().Informer()}, nil
+ case extensionsv1beta1.SchemeGroupVersion.WithResource("replicasets"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Extensions().V1beta1().ReplicaSets().Informer()}, nil
+
+ // Group=flowcontrol.apiserver.k8s.io, Version=v1
+ case flowcontrolv1.SchemeGroupVersion.WithResource("flowschemas"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Flowcontrol().V1().FlowSchemas().Informer()}, nil
+ case flowcontrolv1.SchemeGroupVersion.WithResource("prioritylevelconfigurations"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Flowcontrol().V1().PriorityLevelConfigurations().Informer()}, nil
+
+ // Group=flowcontrol.apiserver.k8s.io, Version=v1beta1
+ case flowcontrolv1beta1.SchemeGroupVersion.WithResource("flowschemas"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Flowcontrol().V1beta1().FlowSchemas().Informer()}, nil
+ case flowcontrolv1beta1.SchemeGroupVersion.WithResource("prioritylevelconfigurations"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Flowcontrol().V1beta1().PriorityLevelConfigurations().Informer()}, nil
+
+ // Group=flowcontrol.apiserver.k8s.io, Version=v1beta2
+ case flowcontrolv1beta2.SchemeGroupVersion.WithResource("flowschemas"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Flowcontrol().V1beta2().FlowSchemas().Informer()}, nil
+ case flowcontrolv1beta2.SchemeGroupVersion.WithResource("prioritylevelconfigurations"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Flowcontrol().V1beta2().PriorityLevelConfigurations().Informer()}, nil
+
+ // Group=flowcontrol.apiserver.k8s.io, Version=v1beta3
+ case v1beta3.SchemeGroupVersion.WithResource("flowschemas"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Flowcontrol().V1beta3().FlowSchemas().Informer()}, nil
+ case v1beta3.SchemeGroupVersion.WithResource("prioritylevelconfigurations"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Flowcontrol().V1beta3().PriorityLevelConfigurations().Informer()}, nil
+
+ // Group=internal.apiserver.k8s.io, Version=v1alpha1
+ case apiserverinternalv1alpha1.SchemeGroupVersion.WithResource("storageversions"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Internal().V1alpha1().StorageVersions().Informer()}, nil
+
+ // Group=networking.k8s.io, Version=v1
+ case networkingv1.SchemeGroupVersion.WithResource("ipaddresses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Networking().V1().IPAddresses().Informer()}, nil
+ case networkingv1.SchemeGroupVersion.WithResource("ingresses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Networking().V1().Ingresses().Informer()}, nil
+ case networkingv1.SchemeGroupVersion.WithResource("ingressclasses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Networking().V1().IngressClasses().Informer()}, nil
+ case networkingv1.SchemeGroupVersion.WithResource("networkpolicies"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Networking().V1().NetworkPolicies().Informer()}, nil
+ case networkingv1.SchemeGroupVersion.WithResource("servicecidrs"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Networking().V1().ServiceCIDRs().Informer()}, nil
+
+ // Group=networking.k8s.io, Version=v1alpha1
+ case networkingv1alpha1.SchemeGroupVersion.WithResource("ipaddresses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Networking().V1alpha1().IPAddresses().Informer()}, nil
+ case networkingv1alpha1.SchemeGroupVersion.WithResource("servicecidrs"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Networking().V1alpha1().ServiceCIDRs().Informer()}, nil
+
+ // Group=networking.k8s.io, Version=v1beta1
+ case networkingv1beta1.SchemeGroupVersion.WithResource("ipaddresses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Networking().V1beta1().IPAddresses().Informer()}, nil
+ case networkingv1beta1.SchemeGroupVersion.WithResource("ingresses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Networking().V1beta1().Ingresses().Informer()}, nil
+ case networkingv1beta1.SchemeGroupVersion.WithResource("ingressclasses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Networking().V1beta1().IngressClasses().Informer()}, nil
+ case networkingv1beta1.SchemeGroupVersion.WithResource("servicecidrs"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Networking().V1beta1().ServiceCIDRs().Informer()}, nil
+
+ // Group=node.k8s.io, Version=v1
+ case nodev1.SchemeGroupVersion.WithResource("runtimeclasses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Node().V1().RuntimeClasses().Informer()}, nil
+
+ // Group=node.k8s.io, Version=v1alpha1
+ case nodev1alpha1.SchemeGroupVersion.WithResource("runtimeclasses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Node().V1alpha1().RuntimeClasses().Informer()}, nil
+
+ // Group=node.k8s.io, Version=v1beta1
+ case nodev1beta1.SchemeGroupVersion.WithResource("runtimeclasses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Node().V1beta1().RuntimeClasses().Informer()}, nil
+
+ // Group=policy, Version=v1
+ case policyv1.SchemeGroupVersion.WithResource("poddisruptionbudgets"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Policy().V1().PodDisruptionBudgets().Informer()}, nil
+
+ // Group=policy, Version=v1beta1
+ case policyv1beta1.SchemeGroupVersion.WithResource("poddisruptionbudgets"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Policy().V1beta1().PodDisruptionBudgets().Informer()}, nil
+
+ // Group=rbac.authorization.k8s.io, Version=v1
+ case rbacv1.SchemeGroupVersion.WithResource("clusterroles"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Rbac().V1().ClusterRoles().Informer()}, nil
+ case rbacv1.SchemeGroupVersion.WithResource("clusterrolebindings"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Rbac().V1().ClusterRoleBindings().Informer()}, nil
+ case rbacv1.SchemeGroupVersion.WithResource("roles"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Rbac().V1().Roles().Informer()}, nil
+ case rbacv1.SchemeGroupVersion.WithResource("rolebindings"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Rbac().V1().RoleBindings().Informer()}, nil
+
+ // Group=rbac.authorization.k8s.io, Version=v1alpha1
+ case rbacv1alpha1.SchemeGroupVersion.WithResource("clusterroles"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Rbac().V1alpha1().ClusterRoles().Informer()}, nil
+ case rbacv1alpha1.SchemeGroupVersion.WithResource("clusterrolebindings"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Rbac().V1alpha1().ClusterRoleBindings().Informer()}, nil
+ case rbacv1alpha1.SchemeGroupVersion.WithResource("roles"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Rbac().V1alpha1().Roles().Informer()}, nil
+ case rbacv1alpha1.SchemeGroupVersion.WithResource("rolebindings"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Rbac().V1alpha1().RoleBindings().Informer()}, nil
+
+ // Group=rbac.authorization.k8s.io, Version=v1beta1
+ case rbacv1beta1.SchemeGroupVersion.WithResource("clusterroles"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Rbac().V1beta1().ClusterRoles().Informer()}, nil
+ case rbacv1beta1.SchemeGroupVersion.WithResource("clusterrolebindings"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Rbac().V1beta1().ClusterRoleBindings().Informer()}, nil
+ case rbacv1beta1.SchemeGroupVersion.WithResource("roles"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Rbac().V1beta1().Roles().Informer()}, nil
+ case rbacv1beta1.SchemeGroupVersion.WithResource("rolebindings"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Rbac().V1beta1().RoleBindings().Informer()}, nil
+
+ // Group=resource.k8s.io, Version=v1alpha3
+ case v1alpha3.SchemeGroupVersion.WithResource("deviceclasses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Resource().V1alpha3().DeviceClasses().Informer()}, nil
+ case v1alpha3.SchemeGroupVersion.WithResource("devicetaintrules"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Resource().V1alpha3().DeviceTaintRules().Informer()}, nil
+ case v1alpha3.SchemeGroupVersion.WithResource("resourceclaims"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Resource().V1alpha3().ResourceClaims().Informer()}, nil
+ case v1alpha3.SchemeGroupVersion.WithResource("resourceclaimtemplates"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Resource().V1alpha3().ResourceClaimTemplates().Informer()}, nil
+ case v1alpha3.SchemeGroupVersion.WithResource("resourceslices"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Resource().V1alpha3().ResourceSlices().Informer()}, nil
+
+ // Group=resource.k8s.io, Version=v1beta1
+ case resourcev1beta1.SchemeGroupVersion.WithResource("deviceclasses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Resource().V1beta1().DeviceClasses().Informer()}, nil
+ case resourcev1beta1.SchemeGroupVersion.WithResource("resourceclaims"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Resource().V1beta1().ResourceClaims().Informer()}, nil
+ case resourcev1beta1.SchemeGroupVersion.WithResource("resourceclaimtemplates"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Resource().V1beta1().ResourceClaimTemplates().Informer()}, nil
+ case resourcev1beta1.SchemeGroupVersion.WithResource("resourceslices"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Resource().V1beta1().ResourceSlices().Informer()}, nil
+
+ // Group=resource.k8s.io, Version=v1beta2
+ case resourcev1beta2.SchemeGroupVersion.WithResource("deviceclasses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Resource().V1beta2().DeviceClasses().Informer()}, nil
+ case resourcev1beta2.SchemeGroupVersion.WithResource("resourceclaims"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Resource().V1beta2().ResourceClaims().Informer()}, nil
+ case resourcev1beta2.SchemeGroupVersion.WithResource("resourceclaimtemplates"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Resource().V1beta2().ResourceClaimTemplates().Informer()}, nil
+ case resourcev1beta2.SchemeGroupVersion.WithResource("resourceslices"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Resource().V1beta2().ResourceSlices().Informer()}, nil
+
+ // Group=scheduling.k8s.io, Version=v1
+ case schedulingv1.SchemeGroupVersion.WithResource("priorityclasses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Scheduling().V1().PriorityClasses().Informer()}, nil
+
+ // Group=scheduling.k8s.io, Version=v1alpha1
+ case schedulingv1alpha1.SchemeGroupVersion.WithResource("priorityclasses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Scheduling().V1alpha1().PriorityClasses().Informer()}, nil
+
+ // Group=scheduling.k8s.io, Version=v1beta1
+ case schedulingv1beta1.SchemeGroupVersion.WithResource("priorityclasses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Scheduling().V1beta1().PriorityClasses().Informer()}, nil
+
+ // Group=storage.k8s.io, Version=v1
+ case storagev1.SchemeGroupVersion.WithResource("csidrivers"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1().CSIDrivers().Informer()}, nil
+ case storagev1.SchemeGroupVersion.WithResource("csinodes"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1().CSINodes().Informer()}, nil
+ case storagev1.SchemeGroupVersion.WithResource("csistoragecapacities"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1().CSIStorageCapacities().Informer()}, nil
+ case storagev1.SchemeGroupVersion.WithResource("storageclasses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1().StorageClasses().Informer()}, nil
+ case storagev1.SchemeGroupVersion.WithResource("volumeattachments"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1().VolumeAttachments().Informer()}, nil
+
+ // Group=storage.k8s.io, Version=v1alpha1
+ case storagev1alpha1.SchemeGroupVersion.WithResource("csistoragecapacities"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1alpha1().CSIStorageCapacities().Informer()}, nil
+ case storagev1alpha1.SchemeGroupVersion.WithResource("volumeattachments"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1alpha1().VolumeAttachments().Informer()}, nil
+ case storagev1alpha1.SchemeGroupVersion.WithResource("volumeattributesclasses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1alpha1().VolumeAttributesClasses().Informer()}, nil
+
+ // Group=storage.k8s.io, Version=v1beta1
+ case storagev1beta1.SchemeGroupVersion.WithResource("csidrivers"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1beta1().CSIDrivers().Informer()}, nil
+ case storagev1beta1.SchemeGroupVersion.WithResource("csinodes"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1beta1().CSINodes().Informer()}, nil
+ case storagev1beta1.SchemeGroupVersion.WithResource("csistoragecapacities"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1beta1().CSIStorageCapacities().Informer()}, nil
+ case storagev1beta1.SchemeGroupVersion.WithResource("storageclasses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1beta1().StorageClasses().Informer()}, nil
+ case storagev1beta1.SchemeGroupVersion.WithResource("volumeattachments"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1beta1().VolumeAttachments().Informer()}, nil
+ case storagev1beta1.SchemeGroupVersion.WithResource("volumeattributesclasses"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Storage().V1beta1().VolumeAttributesClasses().Informer()}, nil
+
+ // Group=storagemigration.k8s.io, Version=v1alpha1
+ case storagemigrationv1alpha1.SchemeGroupVersion.WithResource("storageversionmigrations"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Storagemigration().V1alpha1().StorageVersionMigrations().Informer()}, nil
+
+ }
+
+ return nil, fmt.Errorf("no informer found for %v", resource)
+}
diff --git a/vendor/k8s.io/client-go/informers/internalinterfaces/factory_interfaces.go b/vendor/k8s.io/client-go/informers/internalinterfaces/factory_interfaces.go
new file mode 100644
index 00000000000..b00ed70cfdb
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/internalinterfaces/factory_interfaces.go
@@ -0,0 +1,40 @@
+/*
+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 internalinterfaces
+
+import (
+ time "time"
+
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ kubernetes "k8s.io/client-go/kubernetes"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// NewInformerFunc takes kubernetes.Interface and time.Duration to return a SharedIndexInformer.
+type NewInformerFunc func(kubernetes.Interface, time.Duration) cache.SharedIndexInformer
+
+// SharedInformerFactory a small interface to allow for adding an informer without an import cycle
+type SharedInformerFactory interface {
+ Start(stopCh <-chan struct{})
+ InformerFor(obj runtime.Object, newFunc NewInformerFunc) cache.SharedIndexInformer
+}
+
+// TweakListOptionsFunc is a function that transforms a v1.ListOptions.
+type TweakListOptionsFunc func(*v1.ListOptions)
diff --git a/vendor/k8s.io/client-go/informers/networking/interface.go b/vendor/k8s.io/client-go/informers/networking/interface.go
new file mode 100644
index 00000000000..1c775c465b6
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/networking/interface.go
@@ -0,0 +1,62 @@
+/*
+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 networking
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ v1 "k8s.io/client-go/informers/networking/v1"
+ v1alpha1 "k8s.io/client-go/informers/networking/v1alpha1"
+ v1beta1 "k8s.io/client-go/informers/networking/v1beta1"
+)
+
+// Interface provides access to each of this group's versions.
+type Interface interface {
+ // V1 provides access to shared informers for resources in V1.
+ V1() v1.Interface
+ // V1alpha1 provides access to shared informers for resources in V1alpha1.
+ V1alpha1() v1alpha1.Interface
+ // V1beta1 provides access to shared informers for resources in V1beta1.
+ V1beta1() v1beta1.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}
+}
+
+// V1 returns a new v1.Interface.
+func (g *group) V1() v1.Interface {
+ return v1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1alpha1 returns a new v1alpha1.Interface.
+func (g *group) V1alpha1() v1alpha1.Interface {
+ return v1alpha1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1beta1 returns a new v1beta1.Interface.
+func (g *group) V1beta1() v1beta1.Interface {
+ return v1beta1.New(g.factory, g.namespace, g.tweakListOptions)
+}
diff --git a/vendor/k8s.io/client-go/informers/networking/v1/ingress.go b/vendor/k8s.io/client-go/informers/networking/v1/ingress.go
new file mode 100644
index 00000000000..6f1b0b78162
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/networking/v1/ingress.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apinetworkingv1 "k8s.io/api/networking/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ networkingv1 "k8s.io/client-go/listers/networking/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// IngressInformer provides access to a shared informer and lister for
+// Ingresses.
+type IngressInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() networkingv1.IngressLister
+}
+
+type ingressInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewIngressInformer constructs a new informer for Ingress 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 NewIngressInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredIngressInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredIngressInformer constructs a new informer for Ingress 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 NewFilteredIngressInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().Ingresses(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().Ingresses(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().Ingresses(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().Ingresses(namespace).Watch(ctx, options)
+ },
+ },
+ &apinetworkingv1.Ingress{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *ingressInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredIngressInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *ingressInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apinetworkingv1.Ingress{}, f.defaultInformer)
+}
+
+func (f *ingressInformer) Lister() networkingv1.IngressLister {
+ return networkingv1.NewIngressLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/networking/v1/ingressclass.go b/vendor/k8s.io/client-go/informers/networking/v1/ingressclass.go
new file mode 100644
index 00000000000..b0d4803d895
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/networking/v1/ingressclass.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apinetworkingv1 "k8s.io/api/networking/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ networkingv1 "k8s.io/client-go/listers/networking/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// IngressClassInformer provides access to a shared informer and lister for
+// IngressClasses.
+type IngressClassInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() networkingv1.IngressClassLister
+}
+
+type ingressClassInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewIngressClassInformer constructs a new informer for IngressClass 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 NewIngressClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredIngressClassInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredIngressClassInformer constructs a new informer for IngressClass 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 NewFilteredIngressClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().IngressClasses().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().IngressClasses().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().IngressClasses().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().IngressClasses().Watch(ctx, options)
+ },
+ },
+ &apinetworkingv1.IngressClass{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *ingressClassInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredIngressClassInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *ingressClassInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apinetworkingv1.IngressClass{}, f.defaultInformer)
+}
+
+func (f *ingressClassInformer) Lister() networkingv1.IngressClassLister {
+ return networkingv1.NewIngressClassLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/networking/v1/interface.go b/vendor/k8s.io/client-go/informers/networking/v1/interface.go
new file mode 100644
index 00000000000..09634929b37
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/networking/v1/interface.go
@@ -0,0 +1,73 @@
+/*
+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 v1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // IPAddresses returns a IPAddressInformer.
+ IPAddresses() IPAddressInformer
+ // Ingresses returns a IngressInformer.
+ Ingresses() IngressInformer
+ // IngressClasses returns a IngressClassInformer.
+ IngressClasses() IngressClassInformer
+ // NetworkPolicies returns a NetworkPolicyInformer.
+ NetworkPolicies() NetworkPolicyInformer
+ // ServiceCIDRs returns a ServiceCIDRInformer.
+ ServiceCIDRs() ServiceCIDRInformer
+}
+
+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}
+}
+
+// IPAddresses returns a IPAddressInformer.
+func (v *version) IPAddresses() IPAddressInformer {
+ return &iPAddressInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// Ingresses returns a IngressInformer.
+func (v *version) Ingresses() IngressInformer {
+ return &ingressInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// IngressClasses returns a IngressClassInformer.
+func (v *version) IngressClasses() IngressClassInformer {
+ return &ingressClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// NetworkPolicies returns a NetworkPolicyInformer.
+func (v *version) NetworkPolicies() NetworkPolicyInformer {
+ return &networkPolicyInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// ServiceCIDRs returns a ServiceCIDRInformer.
+func (v *version) ServiceCIDRs() ServiceCIDRInformer {
+ return &serviceCIDRInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/networking/v1/ipaddress.go b/vendor/k8s.io/client-go/informers/networking/v1/ipaddress.go
new file mode 100644
index 00000000000..e3459e72ba8
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/networking/v1/ipaddress.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apinetworkingv1 "k8s.io/api/networking/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ networkingv1 "k8s.io/client-go/listers/networking/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// IPAddressInformer provides access to a shared informer and lister for
+// IPAddresses.
+type IPAddressInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() networkingv1.IPAddressLister
+}
+
+type iPAddressInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewIPAddressInformer constructs a new informer for IPAddress 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 NewIPAddressInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredIPAddressInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredIPAddressInformer constructs a new informer for IPAddress 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 NewFilteredIPAddressInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().IPAddresses().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().IPAddresses().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().IPAddresses().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().IPAddresses().Watch(ctx, options)
+ },
+ },
+ &apinetworkingv1.IPAddress{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *iPAddressInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredIPAddressInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *iPAddressInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apinetworkingv1.IPAddress{}, f.defaultInformer)
+}
+
+func (f *iPAddressInformer) Lister() networkingv1.IPAddressLister {
+ return networkingv1.NewIPAddressLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/networking/v1/networkpolicy.go b/vendor/k8s.io/client-go/informers/networking/v1/networkpolicy.go
new file mode 100644
index 00000000000..0dba59c5ef5
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/networking/v1/networkpolicy.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apinetworkingv1 "k8s.io/api/networking/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ networkingv1 "k8s.io/client-go/listers/networking/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// NetworkPolicyInformer provides access to a shared informer and lister for
+// NetworkPolicies.
+type NetworkPolicyInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() networkingv1.NetworkPolicyLister
+}
+
+type networkPolicyInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewNetworkPolicyInformer constructs a new informer for NetworkPolicy 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 NewNetworkPolicyInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredNetworkPolicyInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredNetworkPolicyInformer constructs a new informer for NetworkPolicy 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 NewFilteredNetworkPolicyInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().NetworkPolicies(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().NetworkPolicies(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().NetworkPolicies(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().NetworkPolicies(namespace).Watch(ctx, options)
+ },
+ },
+ &apinetworkingv1.NetworkPolicy{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *networkPolicyInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredNetworkPolicyInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *networkPolicyInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apinetworkingv1.NetworkPolicy{}, f.defaultInformer)
+}
+
+func (f *networkPolicyInformer) Lister() networkingv1.NetworkPolicyLister {
+ return networkingv1.NewNetworkPolicyLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/networking/v1/servicecidr.go b/vendor/k8s.io/client-go/informers/networking/v1/servicecidr.go
new file mode 100644
index 00000000000..039cdc7539a
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/networking/v1/servicecidr.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apinetworkingv1 "k8s.io/api/networking/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ networkingv1 "k8s.io/client-go/listers/networking/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ServiceCIDRInformer provides access to a shared informer and lister for
+// ServiceCIDRs.
+type ServiceCIDRInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() networkingv1.ServiceCIDRLister
+}
+
+type serviceCIDRInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewServiceCIDRInformer constructs a new informer for ServiceCIDR 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 NewServiceCIDRInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredServiceCIDRInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredServiceCIDRInformer constructs a new informer for ServiceCIDR 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 NewFilteredServiceCIDRInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().ServiceCIDRs().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().ServiceCIDRs().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().ServiceCIDRs().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1().ServiceCIDRs().Watch(ctx, options)
+ },
+ },
+ &apinetworkingv1.ServiceCIDR{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *serviceCIDRInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredServiceCIDRInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *serviceCIDRInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apinetworkingv1.ServiceCIDR{}, f.defaultInformer)
+}
+
+func (f *serviceCIDRInformer) Lister() networkingv1.ServiceCIDRLister {
+ return networkingv1.NewServiceCIDRLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/networking/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/networking/v1alpha1/interface.go
new file mode 100644
index 00000000000..ae9883b55fe
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/networking/v1alpha1/interface.go
@@ -0,0 +1,52 @@
+/*
+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 "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // IPAddresses returns a IPAddressInformer.
+ IPAddresses() IPAddressInformer
+ // ServiceCIDRs returns a ServiceCIDRInformer.
+ ServiceCIDRs() ServiceCIDRInformer
+}
+
+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}
+}
+
+// IPAddresses returns a IPAddressInformer.
+func (v *version) IPAddresses() IPAddressInformer {
+ return &iPAddressInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// ServiceCIDRs returns a ServiceCIDRInformer.
+func (v *version) ServiceCIDRs() ServiceCIDRInformer {
+ return &serviceCIDRInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/networking/v1alpha1/ipaddress.go b/vendor/k8s.io/client-go/informers/networking/v1alpha1/ipaddress.go
new file mode 100644
index 00000000000..f357be93b8e
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/networking/v1alpha1/ipaddress.go
@@ -0,0 +1,101 @@
+/*
+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"
+
+ apinetworkingv1alpha1 "k8s.io/api/networking/v1alpha1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ networkingv1alpha1 "k8s.io/client-go/listers/networking/v1alpha1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// IPAddressInformer provides access to a shared informer and lister for
+// IPAddresses.
+type IPAddressInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() networkingv1alpha1.IPAddressLister
+}
+
+type iPAddressInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewIPAddressInformer constructs a new informer for IPAddress 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 NewIPAddressInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredIPAddressInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredIPAddressInformer constructs a new informer for IPAddress 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 NewFilteredIPAddressInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1alpha1().IPAddresses().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1alpha1().IPAddresses().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1alpha1().IPAddresses().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1alpha1().IPAddresses().Watch(ctx, options)
+ },
+ },
+ &apinetworkingv1alpha1.IPAddress{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *iPAddressInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredIPAddressInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *iPAddressInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apinetworkingv1alpha1.IPAddress{}, f.defaultInformer)
+}
+
+func (f *iPAddressInformer) Lister() networkingv1alpha1.IPAddressLister {
+ return networkingv1alpha1.NewIPAddressLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/networking/v1alpha1/servicecidr.go b/vendor/k8s.io/client-go/informers/networking/v1alpha1/servicecidr.go
new file mode 100644
index 00000000000..30cb61a6534
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/networking/v1alpha1/servicecidr.go
@@ -0,0 +1,101 @@
+/*
+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"
+
+ apinetworkingv1alpha1 "k8s.io/api/networking/v1alpha1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ networkingv1alpha1 "k8s.io/client-go/listers/networking/v1alpha1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ServiceCIDRInformer provides access to a shared informer and lister for
+// ServiceCIDRs.
+type ServiceCIDRInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() networkingv1alpha1.ServiceCIDRLister
+}
+
+type serviceCIDRInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewServiceCIDRInformer constructs a new informer for ServiceCIDR 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 NewServiceCIDRInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredServiceCIDRInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredServiceCIDRInformer constructs a new informer for ServiceCIDR 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 NewFilteredServiceCIDRInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1alpha1().ServiceCIDRs().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1alpha1().ServiceCIDRs().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1alpha1().ServiceCIDRs().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1alpha1().ServiceCIDRs().Watch(ctx, options)
+ },
+ },
+ &apinetworkingv1alpha1.ServiceCIDR{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *serviceCIDRInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredServiceCIDRInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *serviceCIDRInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apinetworkingv1alpha1.ServiceCIDR{}, f.defaultInformer)
+}
+
+func (f *serviceCIDRInformer) Lister() networkingv1alpha1.ServiceCIDRLister {
+ return networkingv1alpha1.NewServiceCIDRLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/networking/v1beta1/ingress.go b/vendor/k8s.io/client-go/informers/networking/v1beta1/ingress.go
new file mode 100644
index 00000000000..6c616b902be
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/networking/v1beta1/ingress.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apinetworkingv1beta1 "k8s.io/api/networking/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ networkingv1beta1 "k8s.io/client-go/listers/networking/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// IngressInformer provides access to a shared informer and lister for
+// Ingresses.
+type IngressInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() networkingv1beta1.IngressLister
+}
+
+type ingressInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewIngressInformer constructs a new informer for Ingress 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 NewIngressInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredIngressInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredIngressInformer constructs a new informer for Ingress 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 NewFilteredIngressInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1beta1().Ingresses(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1beta1().Ingresses(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1beta1().Ingresses(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1beta1().Ingresses(namespace).Watch(ctx, options)
+ },
+ },
+ &apinetworkingv1beta1.Ingress{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *ingressInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredIngressInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *ingressInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apinetworkingv1beta1.Ingress{}, f.defaultInformer)
+}
+
+func (f *ingressInformer) Lister() networkingv1beta1.IngressLister {
+ return networkingv1beta1.NewIngressLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/networking/v1beta1/ingressclass.go b/vendor/k8s.io/client-go/informers/networking/v1beta1/ingressclass.go
new file mode 100644
index 00000000000..dd3a9aa7c55
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/networking/v1beta1/ingressclass.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apinetworkingv1beta1 "k8s.io/api/networking/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ networkingv1beta1 "k8s.io/client-go/listers/networking/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// IngressClassInformer provides access to a shared informer and lister for
+// IngressClasses.
+type IngressClassInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() networkingv1beta1.IngressClassLister
+}
+
+type ingressClassInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewIngressClassInformer constructs a new informer for IngressClass 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 NewIngressClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredIngressClassInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredIngressClassInformer constructs a new informer for IngressClass 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 NewFilteredIngressClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1beta1().IngressClasses().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1beta1().IngressClasses().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1beta1().IngressClasses().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1beta1().IngressClasses().Watch(ctx, options)
+ },
+ },
+ &apinetworkingv1beta1.IngressClass{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *ingressClassInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredIngressClassInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *ingressClassInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apinetworkingv1beta1.IngressClass{}, f.defaultInformer)
+}
+
+func (f *ingressClassInformer) Lister() networkingv1beta1.IngressClassLister {
+ return networkingv1beta1.NewIngressClassLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/networking/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/networking/v1beta1/interface.go
new file mode 100644
index 00000000000..974a8fd5bff
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/networking/v1beta1/interface.go
@@ -0,0 +1,66 @@
+/*
+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 v1beta1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // IPAddresses returns a IPAddressInformer.
+ IPAddresses() IPAddressInformer
+ // Ingresses returns a IngressInformer.
+ Ingresses() IngressInformer
+ // IngressClasses returns a IngressClassInformer.
+ IngressClasses() IngressClassInformer
+ // ServiceCIDRs returns a ServiceCIDRInformer.
+ ServiceCIDRs() ServiceCIDRInformer
+}
+
+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}
+}
+
+// IPAddresses returns a IPAddressInformer.
+func (v *version) IPAddresses() IPAddressInformer {
+ return &iPAddressInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// Ingresses returns a IngressInformer.
+func (v *version) Ingresses() IngressInformer {
+ return &ingressInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// IngressClasses returns a IngressClassInformer.
+func (v *version) IngressClasses() IngressClassInformer {
+ return &ingressClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// ServiceCIDRs returns a ServiceCIDRInformer.
+func (v *version) ServiceCIDRs() ServiceCIDRInformer {
+ return &serviceCIDRInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/networking/v1beta1/ipaddress.go b/vendor/k8s.io/client-go/informers/networking/v1beta1/ipaddress.go
new file mode 100644
index 00000000000..32ce3c4a8af
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/networking/v1beta1/ipaddress.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apinetworkingv1beta1 "k8s.io/api/networking/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ networkingv1beta1 "k8s.io/client-go/listers/networking/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// IPAddressInformer provides access to a shared informer and lister for
+// IPAddresses.
+type IPAddressInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() networkingv1beta1.IPAddressLister
+}
+
+type iPAddressInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewIPAddressInformer constructs a new informer for IPAddress 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 NewIPAddressInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredIPAddressInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredIPAddressInformer constructs a new informer for IPAddress 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 NewFilteredIPAddressInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1beta1().IPAddresses().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1beta1().IPAddresses().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1beta1().IPAddresses().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1beta1().IPAddresses().Watch(ctx, options)
+ },
+ },
+ &apinetworkingv1beta1.IPAddress{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *iPAddressInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredIPAddressInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *iPAddressInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apinetworkingv1beta1.IPAddress{}, f.defaultInformer)
+}
+
+func (f *iPAddressInformer) Lister() networkingv1beta1.IPAddressLister {
+ return networkingv1beta1.NewIPAddressLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/networking/v1beta1/servicecidr.go b/vendor/k8s.io/client-go/informers/networking/v1beta1/servicecidr.go
new file mode 100644
index 00000000000..25843d2fef5
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/networking/v1beta1/servicecidr.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apinetworkingv1beta1 "k8s.io/api/networking/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ networkingv1beta1 "k8s.io/client-go/listers/networking/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ServiceCIDRInformer provides access to a shared informer and lister for
+// ServiceCIDRs.
+type ServiceCIDRInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() networkingv1beta1.ServiceCIDRLister
+}
+
+type serviceCIDRInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewServiceCIDRInformer constructs a new informer for ServiceCIDR 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 NewServiceCIDRInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredServiceCIDRInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredServiceCIDRInformer constructs a new informer for ServiceCIDR 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 NewFilteredServiceCIDRInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1beta1().ServiceCIDRs().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1beta1().ServiceCIDRs().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1beta1().ServiceCIDRs().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1beta1().ServiceCIDRs().Watch(ctx, options)
+ },
+ },
+ &apinetworkingv1beta1.ServiceCIDR{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *serviceCIDRInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredServiceCIDRInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *serviceCIDRInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apinetworkingv1beta1.ServiceCIDR{}, f.defaultInformer)
+}
+
+func (f *serviceCIDRInformer) Lister() networkingv1beta1.ServiceCIDRLister {
+ return networkingv1beta1.NewServiceCIDRLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/node/interface.go b/vendor/k8s.io/client-go/informers/node/interface.go
new file mode 100644
index 00000000000..61ed5af76ae
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/node/interface.go
@@ -0,0 +1,62 @@
+/*
+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 node
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ v1 "k8s.io/client-go/informers/node/v1"
+ v1alpha1 "k8s.io/client-go/informers/node/v1alpha1"
+ v1beta1 "k8s.io/client-go/informers/node/v1beta1"
+)
+
+// Interface provides access to each of this group's versions.
+type Interface interface {
+ // V1 provides access to shared informers for resources in V1.
+ V1() v1.Interface
+ // V1alpha1 provides access to shared informers for resources in V1alpha1.
+ V1alpha1() v1alpha1.Interface
+ // V1beta1 provides access to shared informers for resources in V1beta1.
+ V1beta1() v1beta1.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}
+}
+
+// V1 returns a new v1.Interface.
+func (g *group) V1() v1.Interface {
+ return v1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1alpha1 returns a new v1alpha1.Interface.
+func (g *group) V1alpha1() v1alpha1.Interface {
+ return v1alpha1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1beta1 returns a new v1beta1.Interface.
+func (g *group) V1beta1() v1beta1.Interface {
+ return v1beta1.New(g.factory, g.namespace, g.tweakListOptions)
+}
diff --git a/vendor/k8s.io/client-go/informers/node/v1/interface.go b/vendor/k8s.io/client-go/informers/node/v1/interface.go
new file mode 100644
index 00000000000..913fec4acaa
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/node/v1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 v1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // RuntimeClasses returns a RuntimeClassInformer.
+ RuntimeClasses() RuntimeClassInformer
+}
+
+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}
+}
+
+// RuntimeClasses returns a RuntimeClassInformer.
+func (v *version) RuntimeClasses() RuntimeClassInformer {
+ return &runtimeClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/node/v1/runtimeclass.go b/vendor/k8s.io/client-go/informers/node/v1/runtimeclass.go
new file mode 100644
index 00000000000..85625e3e018
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/node/v1/runtimeclass.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apinodev1 "k8s.io/api/node/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ nodev1 "k8s.io/client-go/listers/node/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// RuntimeClassInformer provides access to a shared informer and lister for
+// RuntimeClasses.
+type RuntimeClassInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() nodev1.RuntimeClassLister
+}
+
+type runtimeClassInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewRuntimeClassInformer constructs a new informer for RuntimeClass 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 NewRuntimeClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredRuntimeClassInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredRuntimeClassInformer constructs a new informer for RuntimeClass 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 NewFilteredRuntimeClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NodeV1().RuntimeClasses().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NodeV1().RuntimeClasses().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NodeV1().RuntimeClasses().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NodeV1().RuntimeClasses().Watch(ctx, options)
+ },
+ },
+ &apinodev1.RuntimeClass{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *runtimeClassInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredRuntimeClassInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *runtimeClassInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apinodev1.RuntimeClass{}, f.defaultInformer)
+}
+
+func (f *runtimeClassInformer) Lister() nodev1.RuntimeClassLister {
+ return nodev1.NewRuntimeClassLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/node/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/node/v1alpha1/interface.go
new file mode 100644
index 00000000000..c56442957e5
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/node/v1alpha1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // RuntimeClasses returns a RuntimeClassInformer.
+ RuntimeClasses() RuntimeClassInformer
+}
+
+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}
+}
+
+// RuntimeClasses returns a RuntimeClassInformer.
+func (v *version) RuntimeClasses() RuntimeClassInformer {
+ return &runtimeClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/node/v1alpha1/runtimeclass.go b/vendor/k8s.io/client-go/informers/node/v1alpha1/runtimeclass.go
new file mode 100644
index 00000000000..b3ac2e2a229
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/node/v1alpha1/runtimeclass.go
@@ -0,0 +1,101 @@
+/*
+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"
+
+ apinodev1alpha1 "k8s.io/api/node/v1alpha1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ nodev1alpha1 "k8s.io/client-go/listers/node/v1alpha1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// RuntimeClassInformer provides access to a shared informer and lister for
+// RuntimeClasses.
+type RuntimeClassInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() nodev1alpha1.RuntimeClassLister
+}
+
+type runtimeClassInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewRuntimeClassInformer constructs a new informer for RuntimeClass 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 NewRuntimeClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredRuntimeClassInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredRuntimeClassInformer constructs a new informer for RuntimeClass 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 NewFilteredRuntimeClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NodeV1alpha1().RuntimeClasses().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NodeV1alpha1().RuntimeClasses().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NodeV1alpha1().RuntimeClasses().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NodeV1alpha1().RuntimeClasses().Watch(ctx, options)
+ },
+ },
+ &apinodev1alpha1.RuntimeClass{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *runtimeClassInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredRuntimeClassInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *runtimeClassInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apinodev1alpha1.RuntimeClass{}, f.defaultInformer)
+}
+
+func (f *runtimeClassInformer) Lister() nodev1alpha1.RuntimeClassLister {
+ return nodev1alpha1.NewRuntimeClassLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/node/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/node/v1beta1/interface.go
new file mode 100644
index 00000000000..44a1defb6b7
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/node/v1beta1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 v1beta1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // RuntimeClasses returns a RuntimeClassInformer.
+ RuntimeClasses() RuntimeClassInformer
+}
+
+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}
+}
+
+// RuntimeClasses returns a RuntimeClassInformer.
+func (v *version) RuntimeClasses() RuntimeClassInformer {
+ return &runtimeClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/node/v1beta1/runtimeclass.go b/vendor/k8s.io/client-go/informers/node/v1beta1/runtimeclass.go
new file mode 100644
index 00000000000..b562476d483
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/node/v1beta1/runtimeclass.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apinodev1beta1 "k8s.io/api/node/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ nodev1beta1 "k8s.io/client-go/listers/node/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// RuntimeClassInformer provides access to a shared informer and lister for
+// RuntimeClasses.
+type RuntimeClassInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() nodev1beta1.RuntimeClassLister
+}
+
+type runtimeClassInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewRuntimeClassInformer constructs a new informer for RuntimeClass 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 NewRuntimeClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredRuntimeClassInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredRuntimeClassInformer constructs a new informer for RuntimeClass 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 NewFilteredRuntimeClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NodeV1beta1().RuntimeClasses().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NodeV1beta1().RuntimeClasses().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NodeV1beta1().RuntimeClasses().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NodeV1beta1().RuntimeClasses().Watch(ctx, options)
+ },
+ },
+ &apinodev1beta1.RuntimeClass{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *runtimeClassInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredRuntimeClassInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *runtimeClassInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apinodev1beta1.RuntimeClass{}, f.defaultInformer)
+}
+
+func (f *runtimeClassInformer) Lister() nodev1beta1.RuntimeClassLister {
+ return nodev1beta1.NewRuntimeClassLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/policy/interface.go b/vendor/k8s.io/client-go/informers/policy/interface.go
new file mode 100644
index 00000000000..889cb8152c9
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/policy/interface.go
@@ -0,0 +1,54 @@
+/*
+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 policy
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ v1 "k8s.io/client-go/informers/policy/v1"
+ v1beta1 "k8s.io/client-go/informers/policy/v1beta1"
+)
+
+// Interface provides access to each of this group's versions.
+type Interface interface {
+ // V1 provides access to shared informers for resources in V1.
+ V1() v1.Interface
+ // V1beta1 provides access to shared informers for resources in V1beta1.
+ V1beta1() v1beta1.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}
+}
+
+// V1 returns a new v1.Interface.
+func (g *group) V1() v1.Interface {
+ return v1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1beta1 returns a new v1beta1.Interface.
+func (g *group) V1beta1() v1beta1.Interface {
+ return v1beta1.New(g.factory, g.namespace, g.tweakListOptions)
+}
diff --git a/vendor/k8s.io/client-go/informers/policy/v1/interface.go b/vendor/k8s.io/client-go/informers/policy/v1/interface.go
new file mode 100644
index 00000000000..2c42e1993c4
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/policy/v1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 v1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // PodDisruptionBudgets returns a PodDisruptionBudgetInformer.
+ PodDisruptionBudgets() PodDisruptionBudgetInformer
+}
+
+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}
+}
+
+// PodDisruptionBudgets returns a PodDisruptionBudgetInformer.
+func (v *version) PodDisruptionBudgets() PodDisruptionBudgetInformer {
+ return &podDisruptionBudgetInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/policy/v1/poddisruptionbudget.go b/vendor/k8s.io/client-go/informers/policy/v1/poddisruptionbudget.go
new file mode 100644
index 00000000000..f80d7dd9140
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/policy/v1/poddisruptionbudget.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apipolicyv1 "k8s.io/api/policy/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ policyv1 "k8s.io/client-go/listers/policy/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PodDisruptionBudgetInformer provides access to a shared informer and lister for
+// PodDisruptionBudgets.
+type PodDisruptionBudgetInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() policyv1.PodDisruptionBudgetLister
+}
+
+type podDisruptionBudgetInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewPodDisruptionBudgetInformer constructs a new informer for PodDisruptionBudget 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 NewPodDisruptionBudgetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredPodDisruptionBudgetInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredPodDisruptionBudgetInformer constructs a new informer for PodDisruptionBudget 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 NewFilteredPodDisruptionBudgetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.PolicyV1().PodDisruptionBudgets(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.PolicyV1().PodDisruptionBudgets(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.PolicyV1().PodDisruptionBudgets(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.PolicyV1().PodDisruptionBudgets(namespace).Watch(ctx, options)
+ },
+ },
+ &apipolicyv1.PodDisruptionBudget{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *podDisruptionBudgetInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredPodDisruptionBudgetInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *podDisruptionBudgetInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apipolicyv1.PodDisruptionBudget{}, f.defaultInformer)
+}
+
+func (f *podDisruptionBudgetInformer) Lister() policyv1.PodDisruptionBudgetLister {
+ return policyv1.NewPodDisruptionBudgetLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/policy/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/policy/v1beta1/interface.go
new file mode 100644
index 00000000000..055c8adc55d
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/policy/v1beta1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 v1beta1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // PodDisruptionBudgets returns a PodDisruptionBudgetInformer.
+ PodDisruptionBudgets() PodDisruptionBudgetInformer
+}
+
+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}
+}
+
+// PodDisruptionBudgets returns a PodDisruptionBudgetInformer.
+func (v *version) PodDisruptionBudgets() PodDisruptionBudgetInformer {
+ return &podDisruptionBudgetInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/policy/v1beta1/poddisruptionbudget.go b/vendor/k8s.io/client-go/informers/policy/v1beta1/poddisruptionbudget.go
new file mode 100644
index 00000000000..92e37d0eb7d
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/policy/v1beta1/poddisruptionbudget.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apipolicyv1beta1 "k8s.io/api/policy/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ policyv1beta1 "k8s.io/client-go/listers/policy/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PodDisruptionBudgetInformer provides access to a shared informer and lister for
+// PodDisruptionBudgets.
+type PodDisruptionBudgetInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() policyv1beta1.PodDisruptionBudgetLister
+}
+
+type podDisruptionBudgetInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewPodDisruptionBudgetInformer constructs a new informer for PodDisruptionBudget 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 NewPodDisruptionBudgetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredPodDisruptionBudgetInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredPodDisruptionBudgetInformer constructs a new informer for PodDisruptionBudget 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 NewFilteredPodDisruptionBudgetInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.PolicyV1beta1().PodDisruptionBudgets(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.PolicyV1beta1().PodDisruptionBudgets(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.PolicyV1beta1().PodDisruptionBudgets(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.PolicyV1beta1().PodDisruptionBudgets(namespace).Watch(ctx, options)
+ },
+ },
+ &apipolicyv1beta1.PodDisruptionBudget{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *podDisruptionBudgetInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredPodDisruptionBudgetInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *podDisruptionBudgetInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apipolicyv1beta1.PodDisruptionBudget{}, f.defaultInformer)
+}
+
+func (f *podDisruptionBudgetInformer) Lister() policyv1beta1.PodDisruptionBudgetLister {
+ return policyv1beta1.NewPodDisruptionBudgetLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/rbac/interface.go b/vendor/k8s.io/client-go/informers/rbac/interface.go
new file mode 100644
index 00000000000..228811f8a2d
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/rbac/interface.go
@@ -0,0 +1,62 @@
+/*
+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 rbac
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ v1 "k8s.io/client-go/informers/rbac/v1"
+ v1alpha1 "k8s.io/client-go/informers/rbac/v1alpha1"
+ v1beta1 "k8s.io/client-go/informers/rbac/v1beta1"
+)
+
+// Interface provides access to each of this group's versions.
+type Interface interface {
+ // V1 provides access to shared informers for resources in V1.
+ V1() v1.Interface
+ // V1alpha1 provides access to shared informers for resources in V1alpha1.
+ V1alpha1() v1alpha1.Interface
+ // V1beta1 provides access to shared informers for resources in V1beta1.
+ V1beta1() v1beta1.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}
+}
+
+// V1 returns a new v1.Interface.
+func (g *group) V1() v1.Interface {
+ return v1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1alpha1 returns a new v1alpha1.Interface.
+func (g *group) V1alpha1() v1alpha1.Interface {
+ return v1alpha1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1beta1 returns a new v1beta1.Interface.
+func (g *group) V1beta1() v1beta1.Interface {
+ return v1beta1.New(g.factory, g.namespace, g.tweakListOptions)
+}
diff --git a/vendor/k8s.io/client-go/informers/rbac/v1/clusterrole.go b/vendor/k8s.io/client-go/informers/rbac/v1/clusterrole.go
new file mode 100644
index 00000000000..4118bffff69
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/rbac/v1/clusterrole.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apirbacv1 "k8s.io/api/rbac/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ rbacv1 "k8s.io/client-go/listers/rbac/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ClusterRoleInformer provides access to a shared informer and lister for
+// ClusterRoles.
+type ClusterRoleInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() rbacv1.ClusterRoleLister
+}
+
+type clusterRoleInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewClusterRoleInformer constructs a new informer for ClusterRole 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 NewClusterRoleInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredClusterRoleInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredClusterRoleInformer constructs a new informer for ClusterRole 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 NewFilteredClusterRoleInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1().ClusterRoles().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1().ClusterRoles().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1().ClusterRoles().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1().ClusterRoles().Watch(ctx, options)
+ },
+ },
+ &apirbacv1.ClusterRole{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *clusterRoleInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredClusterRoleInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *clusterRoleInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apirbacv1.ClusterRole{}, f.defaultInformer)
+}
+
+func (f *clusterRoleInformer) Lister() rbacv1.ClusterRoleLister {
+ return rbacv1.NewClusterRoleLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/rbac/v1/clusterrolebinding.go b/vendor/k8s.io/client-go/informers/rbac/v1/clusterrolebinding.go
new file mode 100644
index 00000000000..67c06d60127
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/rbac/v1/clusterrolebinding.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apirbacv1 "k8s.io/api/rbac/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ rbacv1 "k8s.io/client-go/listers/rbac/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ClusterRoleBindingInformer provides access to a shared informer and lister for
+// ClusterRoleBindings.
+type ClusterRoleBindingInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() rbacv1.ClusterRoleBindingLister
+}
+
+type clusterRoleBindingInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewClusterRoleBindingInformer constructs a new informer for ClusterRoleBinding 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 NewClusterRoleBindingInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredClusterRoleBindingInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredClusterRoleBindingInformer constructs a new informer for ClusterRoleBinding 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 NewFilteredClusterRoleBindingInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1().ClusterRoleBindings().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1().ClusterRoleBindings().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1().ClusterRoleBindings().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1().ClusterRoleBindings().Watch(ctx, options)
+ },
+ },
+ &apirbacv1.ClusterRoleBinding{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *clusterRoleBindingInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredClusterRoleBindingInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *clusterRoleBindingInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apirbacv1.ClusterRoleBinding{}, f.defaultInformer)
+}
+
+func (f *clusterRoleBindingInformer) Lister() rbacv1.ClusterRoleBindingLister {
+ return rbacv1.NewClusterRoleBindingLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/rbac/v1/interface.go b/vendor/k8s.io/client-go/informers/rbac/v1/interface.go
new file mode 100644
index 00000000000..7f99c9454bb
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/rbac/v1/interface.go
@@ -0,0 +1,66 @@
+/*
+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 v1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // ClusterRoles returns a ClusterRoleInformer.
+ ClusterRoles() ClusterRoleInformer
+ // ClusterRoleBindings returns a ClusterRoleBindingInformer.
+ ClusterRoleBindings() ClusterRoleBindingInformer
+ // Roles returns a RoleInformer.
+ Roles() RoleInformer
+ // RoleBindings returns a RoleBindingInformer.
+ RoleBindings() RoleBindingInformer
+}
+
+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}
+}
+
+// ClusterRoles returns a ClusterRoleInformer.
+func (v *version) ClusterRoles() ClusterRoleInformer {
+ return &clusterRoleInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// ClusterRoleBindings returns a ClusterRoleBindingInformer.
+func (v *version) ClusterRoleBindings() ClusterRoleBindingInformer {
+ return &clusterRoleBindingInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// Roles returns a RoleInformer.
+func (v *version) Roles() RoleInformer {
+ return &roleInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// RoleBindings returns a RoleBindingInformer.
+func (v *version) RoleBindings() RoleBindingInformer {
+ return &roleBindingInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/rbac/v1/role.go b/vendor/k8s.io/client-go/informers/rbac/v1/role.go
new file mode 100644
index 00000000000..e931d239627
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/rbac/v1/role.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apirbacv1 "k8s.io/api/rbac/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ rbacv1 "k8s.io/client-go/listers/rbac/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// RoleInformer provides access to a shared informer and lister for
+// Roles.
+type RoleInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() rbacv1.RoleLister
+}
+
+type roleInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewRoleInformer constructs a new informer for Role 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 NewRoleInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredRoleInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredRoleInformer constructs a new informer for Role 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 NewFilteredRoleInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1().Roles(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1().Roles(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1().Roles(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1().Roles(namespace).Watch(ctx, options)
+ },
+ },
+ &apirbacv1.Role{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *roleInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredRoleInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *roleInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apirbacv1.Role{}, f.defaultInformer)
+}
+
+func (f *roleInformer) Lister() rbacv1.RoleLister {
+ return rbacv1.NewRoleLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/rbac/v1/rolebinding.go b/vendor/k8s.io/client-go/informers/rbac/v1/rolebinding.go
new file mode 100644
index 00000000000..89b11efff24
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/rbac/v1/rolebinding.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apirbacv1 "k8s.io/api/rbac/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ rbacv1 "k8s.io/client-go/listers/rbac/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// RoleBindingInformer provides access to a shared informer and lister for
+// RoleBindings.
+type RoleBindingInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() rbacv1.RoleBindingLister
+}
+
+type roleBindingInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewRoleBindingInformer constructs a new informer for RoleBinding 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 NewRoleBindingInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredRoleBindingInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredRoleBindingInformer constructs a new informer for RoleBinding 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 NewFilteredRoleBindingInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1().RoleBindings(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1().RoleBindings(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1().RoleBindings(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1().RoleBindings(namespace).Watch(ctx, options)
+ },
+ },
+ &apirbacv1.RoleBinding{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *roleBindingInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredRoleBindingInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *roleBindingInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apirbacv1.RoleBinding{}, f.defaultInformer)
+}
+
+func (f *roleBindingInformer) Lister() rbacv1.RoleBindingLister {
+ return rbacv1.NewRoleBindingLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrole.go b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrole.go
new file mode 100644
index 00000000000..ff95f62ff90
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrole.go
@@ -0,0 +1,101 @@
+/*
+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"
+
+ apirbacv1alpha1 "k8s.io/api/rbac/v1alpha1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ rbacv1alpha1 "k8s.io/client-go/listers/rbac/v1alpha1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ClusterRoleInformer provides access to a shared informer and lister for
+// ClusterRoles.
+type ClusterRoleInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() rbacv1alpha1.ClusterRoleLister
+}
+
+type clusterRoleInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewClusterRoleInformer constructs a new informer for ClusterRole 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 NewClusterRoleInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredClusterRoleInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredClusterRoleInformer constructs a new informer for ClusterRole 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 NewFilteredClusterRoleInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1alpha1().ClusterRoles().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1alpha1().ClusterRoles().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1alpha1().ClusterRoles().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1alpha1().ClusterRoles().Watch(ctx, options)
+ },
+ },
+ &apirbacv1alpha1.ClusterRole{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *clusterRoleInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredClusterRoleInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *clusterRoleInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apirbacv1alpha1.ClusterRole{}, f.defaultInformer)
+}
+
+func (f *clusterRoleInformer) Lister() rbacv1alpha1.ClusterRoleLister {
+ return rbacv1alpha1.NewClusterRoleLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrolebinding.go b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrolebinding.go
new file mode 100644
index 00000000000..1002f16300b
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/clusterrolebinding.go
@@ -0,0 +1,101 @@
+/*
+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"
+
+ apirbacv1alpha1 "k8s.io/api/rbac/v1alpha1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ rbacv1alpha1 "k8s.io/client-go/listers/rbac/v1alpha1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ClusterRoleBindingInformer provides access to a shared informer and lister for
+// ClusterRoleBindings.
+type ClusterRoleBindingInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() rbacv1alpha1.ClusterRoleBindingLister
+}
+
+type clusterRoleBindingInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewClusterRoleBindingInformer constructs a new informer for ClusterRoleBinding 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 NewClusterRoleBindingInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredClusterRoleBindingInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredClusterRoleBindingInformer constructs a new informer for ClusterRoleBinding 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 NewFilteredClusterRoleBindingInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1alpha1().ClusterRoleBindings().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1alpha1().ClusterRoleBindings().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1alpha1().ClusterRoleBindings().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1alpha1().ClusterRoleBindings().Watch(ctx, options)
+ },
+ },
+ &apirbacv1alpha1.ClusterRoleBinding{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *clusterRoleBindingInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredClusterRoleBindingInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *clusterRoleBindingInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apirbacv1alpha1.ClusterRoleBinding{}, f.defaultInformer)
+}
+
+func (f *clusterRoleBindingInformer) Lister() rbacv1alpha1.ClusterRoleBindingLister {
+ return rbacv1alpha1.NewClusterRoleBindingLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/interface.go
new file mode 100644
index 00000000000..d27c79987fa
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/interface.go
@@ -0,0 +1,66 @@
+/*
+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 "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // ClusterRoles returns a ClusterRoleInformer.
+ ClusterRoles() ClusterRoleInformer
+ // ClusterRoleBindings returns a ClusterRoleBindingInformer.
+ ClusterRoleBindings() ClusterRoleBindingInformer
+ // Roles returns a RoleInformer.
+ Roles() RoleInformer
+ // RoleBindings returns a RoleBindingInformer.
+ RoleBindings() RoleBindingInformer
+}
+
+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}
+}
+
+// ClusterRoles returns a ClusterRoleInformer.
+func (v *version) ClusterRoles() ClusterRoleInformer {
+ return &clusterRoleInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// ClusterRoleBindings returns a ClusterRoleBindingInformer.
+func (v *version) ClusterRoleBindings() ClusterRoleBindingInformer {
+ return &clusterRoleBindingInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// Roles returns a RoleInformer.
+func (v *version) Roles() RoleInformer {
+ return &roleInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// RoleBindings returns a RoleBindingInformer.
+func (v *version) RoleBindings() RoleBindingInformer {
+ return &roleBindingInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/role.go b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/role.go
new file mode 100644
index 00000000000..ad7b1c0b8b9
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/role.go
@@ -0,0 +1,102 @@
+/*
+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"
+
+ apirbacv1alpha1 "k8s.io/api/rbac/v1alpha1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ rbacv1alpha1 "k8s.io/client-go/listers/rbac/v1alpha1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// RoleInformer provides access to a shared informer and lister for
+// Roles.
+type RoleInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() rbacv1alpha1.RoleLister
+}
+
+type roleInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewRoleInformer constructs a new informer for Role 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 NewRoleInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredRoleInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredRoleInformer constructs a new informer for Role 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 NewFilteredRoleInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1alpha1().Roles(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1alpha1().Roles(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1alpha1().Roles(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1alpha1().Roles(namespace).Watch(ctx, options)
+ },
+ },
+ &apirbacv1alpha1.Role{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *roleInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredRoleInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *roleInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apirbacv1alpha1.Role{}, f.defaultInformer)
+}
+
+func (f *roleInformer) Lister() rbacv1alpha1.RoleLister {
+ return rbacv1alpha1.NewRoleLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/rbac/v1alpha1/rolebinding.go b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/rolebinding.go
new file mode 100644
index 00000000000..c5d915d23aa
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/rbac/v1alpha1/rolebinding.go
@@ -0,0 +1,102 @@
+/*
+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"
+
+ apirbacv1alpha1 "k8s.io/api/rbac/v1alpha1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ rbacv1alpha1 "k8s.io/client-go/listers/rbac/v1alpha1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// RoleBindingInformer provides access to a shared informer and lister for
+// RoleBindings.
+type RoleBindingInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() rbacv1alpha1.RoleBindingLister
+}
+
+type roleBindingInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewRoleBindingInformer constructs a new informer for RoleBinding 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 NewRoleBindingInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredRoleBindingInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredRoleBindingInformer constructs a new informer for RoleBinding 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 NewFilteredRoleBindingInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1alpha1().RoleBindings(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1alpha1().RoleBindings(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1alpha1().RoleBindings(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1alpha1().RoleBindings(namespace).Watch(ctx, options)
+ },
+ },
+ &apirbacv1alpha1.RoleBinding{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *roleBindingInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredRoleBindingInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *roleBindingInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apirbacv1alpha1.RoleBinding{}, f.defaultInformer)
+}
+
+func (f *roleBindingInformer) Lister() rbacv1alpha1.RoleBindingLister {
+ return rbacv1alpha1.NewRoleBindingLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrole.go b/vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrole.go
new file mode 100644
index 00000000000..24aad0b8263
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrole.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apirbacv1beta1 "k8s.io/api/rbac/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ rbacv1beta1 "k8s.io/client-go/listers/rbac/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ClusterRoleInformer provides access to a shared informer and lister for
+// ClusterRoles.
+type ClusterRoleInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() rbacv1beta1.ClusterRoleLister
+}
+
+type clusterRoleInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewClusterRoleInformer constructs a new informer for ClusterRole 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 NewClusterRoleInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredClusterRoleInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredClusterRoleInformer constructs a new informer for ClusterRole 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 NewFilteredClusterRoleInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1beta1().ClusterRoles().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1beta1().ClusterRoles().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1beta1().ClusterRoles().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1beta1().ClusterRoles().Watch(ctx, options)
+ },
+ },
+ &apirbacv1beta1.ClusterRole{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *clusterRoleInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredClusterRoleInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *clusterRoleInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apirbacv1beta1.ClusterRole{}, f.defaultInformer)
+}
+
+func (f *clusterRoleInformer) Lister() rbacv1beta1.ClusterRoleLister {
+ return rbacv1beta1.NewClusterRoleLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrolebinding.go b/vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrolebinding.go
new file mode 100644
index 00000000000..3506b79722e
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/rbac/v1beta1/clusterrolebinding.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apirbacv1beta1 "k8s.io/api/rbac/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ rbacv1beta1 "k8s.io/client-go/listers/rbac/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ClusterRoleBindingInformer provides access to a shared informer and lister for
+// ClusterRoleBindings.
+type ClusterRoleBindingInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() rbacv1beta1.ClusterRoleBindingLister
+}
+
+type clusterRoleBindingInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewClusterRoleBindingInformer constructs a new informer for ClusterRoleBinding 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 NewClusterRoleBindingInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredClusterRoleBindingInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredClusterRoleBindingInformer constructs a new informer for ClusterRoleBinding 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 NewFilteredClusterRoleBindingInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1beta1().ClusterRoleBindings().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1beta1().ClusterRoleBindings().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1beta1().ClusterRoleBindings().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1beta1().ClusterRoleBindings().Watch(ctx, options)
+ },
+ },
+ &apirbacv1beta1.ClusterRoleBinding{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *clusterRoleBindingInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredClusterRoleBindingInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *clusterRoleBindingInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apirbacv1beta1.ClusterRoleBinding{}, f.defaultInformer)
+}
+
+func (f *clusterRoleBindingInformer) Lister() rbacv1beta1.ClusterRoleBindingLister {
+ return rbacv1beta1.NewClusterRoleBindingLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/rbac/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/rbac/v1beta1/interface.go
new file mode 100644
index 00000000000..04add43afac
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/rbac/v1beta1/interface.go
@@ -0,0 +1,66 @@
+/*
+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 v1beta1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // ClusterRoles returns a ClusterRoleInformer.
+ ClusterRoles() ClusterRoleInformer
+ // ClusterRoleBindings returns a ClusterRoleBindingInformer.
+ ClusterRoleBindings() ClusterRoleBindingInformer
+ // Roles returns a RoleInformer.
+ Roles() RoleInformer
+ // RoleBindings returns a RoleBindingInformer.
+ RoleBindings() RoleBindingInformer
+}
+
+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}
+}
+
+// ClusterRoles returns a ClusterRoleInformer.
+func (v *version) ClusterRoles() ClusterRoleInformer {
+ return &clusterRoleInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// ClusterRoleBindings returns a ClusterRoleBindingInformer.
+func (v *version) ClusterRoleBindings() ClusterRoleBindingInformer {
+ return &clusterRoleBindingInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// Roles returns a RoleInformer.
+func (v *version) Roles() RoleInformer {
+ return &roleInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// RoleBindings returns a RoleBindingInformer.
+func (v *version) RoleBindings() RoleBindingInformer {
+ return &roleBindingInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/rbac/v1beta1/role.go b/vendor/k8s.io/client-go/informers/rbac/v1beta1/role.go
new file mode 100644
index 00000000000..119a601f09b
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/rbac/v1beta1/role.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apirbacv1beta1 "k8s.io/api/rbac/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ rbacv1beta1 "k8s.io/client-go/listers/rbac/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// RoleInformer provides access to a shared informer and lister for
+// Roles.
+type RoleInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() rbacv1beta1.RoleLister
+}
+
+type roleInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewRoleInformer constructs a new informer for Role 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 NewRoleInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredRoleInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredRoleInformer constructs a new informer for Role 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 NewFilteredRoleInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1beta1().Roles(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1beta1().Roles(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1beta1().Roles(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1beta1().Roles(namespace).Watch(ctx, options)
+ },
+ },
+ &apirbacv1beta1.Role{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *roleInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredRoleInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *roleInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apirbacv1beta1.Role{}, f.defaultInformer)
+}
+
+func (f *roleInformer) Lister() rbacv1beta1.RoleLister {
+ return rbacv1beta1.NewRoleLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/rbac/v1beta1/rolebinding.go b/vendor/k8s.io/client-go/informers/rbac/v1beta1/rolebinding.go
new file mode 100644
index 00000000000..c36c295c0c7
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/rbac/v1beta1/rolebinding.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apirbacv1beta1 "k8s.io/api/rbac/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ rbacv1beta1 "k8s.io/client-go/listers/rbac/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// RoleBindingInformer provides access to a shared informer and lister for
+// RoleBindings.
+type RoleBindingInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() rbacv1beta1.RoleBindingLister
+}
+
+type roleBindingInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewRoleBindingInformer constructs a new informer for RoleBinding 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 NewRoleBindingInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredRoleBindingInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredRoleBindingInformer constructs a new informer for RoleBinding 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 NewFilteredRoleBindingInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1beta1().RoleBindings(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1beta1().RoleBindings(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1beta1().RoleBindings(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.RbacV1beta1().RoleBindings(namespace).Watch(ctx, options)
+ },
+ },
+ &apirbacv1beta1.RoleBinding{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *roleBindingInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredRoleBindingInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *roleBindingInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apirbacv1beta1.RoleBinding{}, f.defaultInformer)
+}
+
+func (f *roleBindingInformer) Lister() rbacv1beta1.RoleBindingLister {
+ return rbacv1beta1.NewRoleBindingLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/resource/interface.go b/vendor/k8s.io/client-go/informers/resource/interface.go
new file mode 100644
index 00000000000..f4bcd927060
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/resource/interface.go
@@ -0,0 +1,62 @@
+/*
+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 resource
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ v1alpha3 "k8s.io/client-go/informers/resource/v1alpha3"
+ v1beta1 "k8s.io/client-go/informers/resource/v1beta1"
+ v1beta2 "k8s.io/client-go/informers/resource/v1beta2"
+)
+
+// Interface provides access to each of this group's versions.
+type Interface interface {
+ // V1alpha3 provides access to shared informers for resources in V1alpha3.
+ V1alpha3() v1alpha3.Interface
+ // V1beta1 provides access to shared informers for resources in V1beta1.
+ V1beta1() v1beta1.Interface
+ // V1beta2 provides access to shared informers for resources in V1beta2.
+ V1beta2() v1beta2.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}
+}
+
+// V1alpha3 returns a new v1alpha3.Interface.
+func (g *group) V1alpha3() v1alpha3.Interface {
+ return v1alpha3.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1beta1 returns a new v1beta1.Interface.
+func (g *group) V1beta1() v1beta1.Interface {
+ return v1beta1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1beta2 returns a new v1beta2.Interface.
+func (g *group) V1beta2() v1beta2.Interface {
+ return v1beta2.New(g.factory, g.namespace, g.tweakListOptions)
+}
diff --git a/vendor/k8s.io/client-go/informers/resource/v1alpha3/deviceclass.go b/vendor/k8s.io/client-go/informers/resource/v1alpha3/deviceclass.go
new file mode 100644
index 00000000000..cff62791962
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/resource/v1alpha3/deviceclass.go
@@ -0,0 +1,101 @@
+/*
+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 v1alpha3
+
+import (
+ context "context"
+ time "time"
+
+ apiresourcev1alpha3 "k8s.io/api/resource/v1alpha3"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ resourcev1alpha3 "k8s.io/client-go/listers/resource/v1alpha3"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DeviceClassInformer provides access to a shared informer and lister for
+// DeviceClasses.
+type DeviceClassInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() resourcev1alpha3.DeviceClassLister
+}
+
+type deviceClassInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewDeviceClassInformer constructs a new informer for DeviceClass 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 NewDeviceClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredDeviceClassInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredDeviceClassInformer constructs a new informer for DeviceClass 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 NewFilteredDeviceClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().DeviceClasses().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().DeviceClasses().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().DeviceClasses().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().DeviceClasses().Watch(ctx, options)
+ },
+ },
+ &apiresourcev1alpha3.DeviceClass{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *deviceClassInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredDeviceClassInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *deviceClassInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiresourcev1alpha3.DeviceClass{}, f.defaultInformer)
+}
+
+func (f *deviceClassInformer) Lister() resourcev1alpha3.DeviceClassLister {
+ return resourcev1alpha3.NewDeviceClassLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/resource/v1alpha3/devicetaintrule.go b/vendor/k8s.io/client-go/informers/resource/v1alpha3/devicetaintrule.go
new file mode 100644
index 00000000000..9a07c8f4e53
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/resource/v1alpha3/devicetaintrule.go
@@ -0,0 +1,101 @@
+/*
+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 v1alpha3
+
+import (
+ context "context"
+ time "time"
+
+ apiresourcev1alpha3 "k8s.io/api/resource/v1alpha3"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ resourcev1alpha3 "k8s.io/client-go/listers/resource/v1alpha3"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DeviceTaintRuleInformer provides access to a shared informer and lister for
+// DeviceTaintRules.
+type DeviceTaintRuleInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() resourcev1alpha3.DeviceTaintRuleLister
+}
+
+type deviceTaintRuleInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewDeviceTaintRuleInformer constructs a new informer for DeviceTaintRule 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 NewDeviceTaintRuleInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredDeviceTaintRuleInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredDeviceTaintRuleInformer constructs a new informer for DeviceTaintRule 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 NewFilteredDeviceTaintRuleInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().DeviceTaintRules().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().DeviceTaintRules().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().DeviceTaintRules().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().DeviceTaintRules().Watch(ctx, options)
+ },
+ },
+ &apiresourcev1alpha3.DeviceTaintRule{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *deviceTaintRuleInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredDeviceTaintRuleInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *deviceTaintRuleInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiresourcev1alpha3.DeviceTaintRule{}, f.defaultInformer)
+}
+
+func (f *deviceTaintRuleInformer) Lister() resourcev1alpha3.DeviceTaintRuleLister {
+ return resourcev1alpha3.NewDeviceTaintRuleLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/resource/v1alpha3/interface.go b/vendor/k8s.io/client-go/informers/resource/v1alpha3/interface.go
new file mode 100644
index 00000000000..11c7f849af8
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/resource/v1alpha3/interface.go
@@ -0,0 +1,73 @@
+/*
+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 v1alpha3
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // DeviceClasses returns a DeviceClassInformer.
+ DeviceClasses() DeviceClassInformer
+ // DeviceTaintRules returns a DeviceTaintRuleInformer.
+ DeviceTaintRules() DeviceTaintRuleInformer
+ // ResourceClaims returns a ResourceClaimInformer.
+ ResourceClaims() ResourceClaimInformer
+ // ResourceClaimTemplates returns a ResourceClaimTemplateInformer.
+ ResourceClaimTemplates() ResourceClaimTemplateInformer
+ // ResourceSlices returns a ResourceSliceInformer.
+ ResourceSlices() ResourceSliceInformer
+}
+
+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}
+}
+
+// DeviceClasses returns a DeviceClassInformer.
+func (v *version) DeviceClasses() DeviceClassInformer {
+ return &deviceClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// DeviceTaintRules returns a DeviceTaintRuleInformer.
+func (v *version) DeviceTaintRules() DeviceTaintRuleInformer {
+ return &deviceTaintRuleInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// ResourceClaims returns a ResourceClaimInformer.
+func (v *version) ResourceClaims() ResourceClaimInformer {
+ return &resourceClaimInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// ResourceClaimTemplates returns a ResourceClaimTemplateInformer.
+func (v *version) ResourceClaimTemplates() ResourceClaimTemplateInformer {
+ return &resourceClaimTemplateInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// ResourceSlices returns a ResourceSliceInformer.
+func (v *version) ResourceSlices() ResourceSliceInformer {
+ return &resourceSliceInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/resource/v1alpha3/resourceclaim.go b/vendor/k8s.io/client-go/informers/resource/v1alpha3/resourceclaim.go
new file mode 100644
index 00000000000..2ee78d35d60
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/resource/v1alpha3/resourceclaim.go
@@ -0,0 +1,102 @@
+/*
+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 v1alpha3
+
+import (
+ context "context"
+ time "time"
+
+ apiresourcev1alpha3 "k8s.io/api/resource/v1alpha3"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ resourcev1alpha3 "k8s.io/client-go/listers/resource/v1alpha3"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceClaimInformer provides access to a shared informer and lister for
+// ResourceClaims.
+type ResourceClaimInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() resourcev1alpha3.ResourceClaimLister
+}
+
+type resourceClaimInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewResourceClaimInformer constructs a new informer for ResourceClaim 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 NewResourceClaimInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredResourceClaimInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredResourceClaimInformer constructs a new informer for ResourceClaim 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 NewFilteredResourceClaimInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().ResourceClaims(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().ResourceClaims(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().ResourceClaims(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().ResourceClaims(namespace).Watch(ctx, options)
+ },
+ },
+ &apiresourcev1alpha3.ResourceClaim{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *resourceClaimInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredResourceClaimInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *resourceClaimInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiresourcev1alpha3.ResourceClaim{}, f.defaultInformer)
+}
+
+func (f *resourceClaimInformer) Lister() resourcev1alpha3.ResourceClaimLister {
+ return resourcev1alpha3.NewResourceClaimLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/resource/v1alpha3/resourceclaimtemplate.go b/vendor/k8s.io/client-go/informers/resource/v1alpha3/resourceclaimtemplate.go
new file mode 100644
index 00000000000..bd1e7abefc0
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/resource/v1alpha3/resourceclaimtemplate.go
@@ -0,0 +1,102 @@
+/*
+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 v1alpha3
+
+import (
+ context "context"
+ time "time"
+
+ apiresourcev1alpha3 "k8s.io/api/resource/v1alpha3"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ resourcev1alpha3 "k8s.io/client-go/listers/resource/v1alpha3"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceClaimTemplateInformer provides access to a shared informer and lister for
+// ResourceClaimTemplates.
+type ResourceClaimTemplateInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() resourcev1alpha3.ResourceClaimTemplateLister
+}
+
+type resourceClaimTemplateInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewResourceClaimTemplateInformer constructs a new informer for ResourceClaimTemplate 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 NewResourceClaimTemplateInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredResourceClaimTemplateInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredResourceClaimTemplateInformer constructs a new informer for ResourceClaimTemplate 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 NewFilteredResourceClaimTemplateInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().ResourceClaimTemplates(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().ResourceClaimTemplates(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().ResourceClaimTemplates(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().ResourceClaimTemplates(namespace).Watch(ctx, options)
+ },
+ },
+ &apiresourcev1alpha3.ResourceClaimTemplate{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *resourceClaimTemplateInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredResourceClaimTemplateInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *resourceClaimTemplateInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiresourcev1alpha3.ResourceClaimTemplate{}, f.defaultInformer)
+}
+
+func (f *resourceClaimTemplateInformer) Lister() resourcev1alpha3.ResourceClaimTemplateLister {
+ return resourcev1alpha3.NewResourceClaimTemplateLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/resource/v1alpha3/resourceslice.go b/vendor/k8s.io/client-go/informers/resource/v1alpha3/resourceslice.go
new file mode 100644
index 00000000000..9b6422e96e4
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/resource/v1alpha3/resourceslice.go
@@ -0,0 +1,101 @@
+/*
+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 v1alpha3
+
+import (
+ context "context"
+ time "time"
+
+ apiresourcev1alpha3 "k8s.io/api/resource/v1alpha3"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ resourcev1alpha3 "k8s.io/client-go/listers/resource/v1alpha3"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceSliceInformer provides access to a shared informer and lister for
+// ResourceSlices.
+type ResourceSliceInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() resourcev1alpha3.ResourceSliceLister
+}
+
+type resourceSliceInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewResourceSliceInformer constructs a new informer for ResourceSlice 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 NewResourceSliceInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredResourceSliceInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredResourceSliceInformer constructs a new informer for ResourceSlice 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 NewFilteredResourceSliceInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().ResourceSlices().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().ResourceSlices().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().ResourceSlices().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1alpha3().ResourceSlices().Watch(ctx, options)
+ },
+ },
+ &apiresourcev1alpha3.ResourceSlice{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *resourceSliceInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredResourceSliceInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *resourceSliceInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiresourcev1alpha3.ResourceSlice{}, f.defaultInformer)
+}
+
+func (f *resourceSliceInformer) Lister() resourcev1alpha3.ResourceSliceLister {
+ return resourcev1alpha3.NewResourceSliceLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/resource/v1beta1/deviceclass.go b/vendor/k8s.io/client-go/informers/resource/v1beta1/deviceclass.go
new file mode 100644
index 00000000000..bb0b28245be
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/resource/v1beta1/deviceclass.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apiresourcev1beta1 "k8s.io/api/resource/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ resourcev1beta1 "k8s.io/client-go/listers/resource/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DeviceClassInformer provides access to a shared informer and lister for
+// DeviceClasses.
+type DeviceClassInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() resourcev1beta1.DeviceClassLister
+}
+
+type deviceClassInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewDeviceClassInformer constructs a new informer for DeviceClass 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 NewDeviceClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredDeviceClassInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredDeviceClassInformer constructs a new informer for DeviceClass 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 NewFilteredDeviceClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta1().DeviceClasses().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta1().DeviceClasses().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta1().DeviceClasses().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta1().DeviceClasses().Watch(ctx, options)
+ },
+ },
+ &apiresourcev1beta1.DeviceClass{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *deviceClassInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredDeviceClassInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *deviceClassInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiresourcev1beta1.DeviceClass{}, f.defaultInformer)
+}
+
+func (f *deviceClassInformer) Lister() resourcev1beta1.DeviceClassLister {
+ return resourcev1beta1.NewDeviceClassLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/resource/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/resource/v1beta1/interface.go
new file mode 100644
index 00000000000..07330763ba0
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/resource/v1beta1/interface.go
@@ -0,0 +1,66 @@
+/*
+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 v1beta1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // DeviceClasses returns a DeviceClassInformer.
+ DeviceClasses() DeviceClassInformer
+ // ResourceClaims returns a ResourceClaimInformer.
+ ResourceClaims() ResourceClaimInformer
+ // ResourceClaimTemplates returns a ResourceClaimTemplateInformer.
+ ResourceClaimTemplates() ResourceClaimTemplateInformer
+ // ResourceSlices returns a ResourceSliceInformer.
+ ResourceSlices() ResourceSliceInformer
+}
+
+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}
+}
+
+// DeviceClasses returns a DeviceClassInformer.
+func (v *version) DeviceClasses() DeviceClassInformer {
+ return &deviceClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// ResourceClaims returns a ResourceClaimInformer.
+func (v *version) ResourceClaims() ResourceClaimInformer {
+ return &resourceClaimInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// ResourceClaimTemplates returns a ResourceClaimTemplateInformer.
+func (v *version) ResourceClaimTemplates() ResourceClaimTemplateInformer {
+ return &resourceClaimTemplateInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// ResourceSlices returns a ResourceSliceInformer.
+func (v *version) ResourceSlices() ResourceSliceInformer {
+ return &resourceSliceInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/resource/v1beta1/resourceclaim.go b/vendor/k8s.io/client-go/informers/resource/v1beta1/resourceclaim.go
new file mode 100644
index 00000000000..5e13b797327
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/resource/v1beta1/resourceclaim.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apiresourcev1beta1 "k8s.io/api/resource/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ resourcev1beta1 "k8s.io/client-go/listers/resource/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceClaimInformer provides access to a shared informer and lister for
+// ResourceClaims.
+type ResourceClaimInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() resourcev1beta1.ResourceClaimLister
+}
+
+type resourceClaimInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewResourceClaimInformer constructs a new informer for ResourceClaim 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 NewResourceClaimInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredResourceClaimInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredResourceClaimInformer constructs a new informer for ResourceClaim 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 NewFilteredResourceClaimInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta1().ResourceClaims(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta1().ResourceClaims(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta1().ResourceClaims(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta1().ResourceClaims(namespace).Watch(ctx, options)
+ },
+ },
+ &apiresourcev1beta1.ResourceClaim{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *resourceClaimInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredResourceClaimInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *resourceClaimInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiresourcev1beta1.ResourceClaim{}, f.defaultInformer)
+}
+
+func (f *resourceClaimInformer) Lister() resourcev1beta1.ResourceClaimLister {
+ return resourcev1beta1.NewResourceClaimLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/resource/v1beta1/resourceclaimtemplate.go b/vendor/k8s.io/client-go/informers/resource/v1beta1/resourceclaimtemplate.go
new file mode 100644
index 00000000000..86c13a8f215
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/resource/v1beta1/resourceclaimtemplate.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apiresourcev1beta1 "k8s.io/api/resource/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ resourcev1beta1 "k8s.io/client-go/listers/resource/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceClaimTemplateInformer provides access to a shared informer and lister for
+// ResourceClaimTemplates.
+type ResourceClaimTemplateInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() resourcev1beta1.ResourceClaimTemplateLister
+}
+
+type resourceClaimTemplateInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewResourceClaimTemplateInformer constructs a new informer for ResourceClaimTemplate 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 NewResourceClaimTemplateInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredResourceClaimTemplateInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredResourceClaimTemplateInformer constructs a new informer for ResourceClaimTemplate 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 NewFilteredResourceClaimTemplateInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta1().ResourceClaimTemplates(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta1().ResourceClaimTemplates(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta1().ResourceClaimTemplates(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta1().ResourceClaimTemplates(namespace).Watch(ctx, options)
+ },
+ },
+ &apiresourcev1beta1.ResourceClaimTemplate{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *resourceClaimTemplateInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredResourceClaimTemplateInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *resourceClaimTemplateInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiresourcev1beta1.ResourceClaimTemplate{}, f.defaultInformer)
+}
+
+func (f *resourceClaimTemplateInformer) Lister() resourcev1beta1.ResourceClaimTemplateLister {
+ return resourcev1beta1.NewResourceClaimTemplateLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/resource/v1beta1/resourceslice.go b/vendor/k8s.io/client-go/informers/resource/v1beta1/resourceslice.go
new file mode 100644
index 00000000000..6cc3c65fdf6
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/resource/v1beta1/resourceslice.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apiresourcev1beta1 "k8s.io/api/resource/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ resourcev1beta1 "k8s.io/client-go/listers/resource/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceSliceInformer provides access to a shared informer and lister for
+// ResourceSlices.
+type ResourceSliceInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() resourcev1beta1.ResourceSliceLister
+}
+
+type resourceSliceInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewResourceSliceInformer constructs a new informer for ResourceSlice 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 NewResourceSliceInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredResourceSliceInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredResourceSliceInformer constructs a new informer for ResourceSlice 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 NewFilteredResourceSliceInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta1().ResourceSlices().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta1().ResourceSlices().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta1().ResourceSlices().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta1().ResourceSlices().Watch(ctx, options)
+ },
+ },
+ &apiresourcev1beta1.ResourceSlice{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *resourceSliceInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredResourceSliceInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *resourceSliceInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiresourcev1beta1.ResourceSlice{}, f.defaultInformer)
+}
+
+func (f *resourceSliceInformer) Lister() resourcev1beta1.ResourceSliceLister {
+ return resourcev1beta1.NewResourceSliceLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/resource/v1beta2/deviceclass.go b/vendor/k8s.io/client-go/informers/resource/v1beta2/deviceclass.go
new file mode 100644
index 00000000000..372d35d8aab
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/resource/v1beta2/deviceclass.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta2
+
+import (
+ context "context"
+ time "time"
+
+ apiresourcev1beta2 "k8s.io/api/resource/v1beta2"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ resourcev1beta2 "k8s.io/client-go/listers/resource/v1beta2"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DeviceClassInformer provides access to a shared informer and lister for
+// DeviceClasses.
+type DeviceClassInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() resourcev1beta2.DeviceClassLister
+}
+
+type deviceClassInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewDeviceClassInformer constructs a new informer for DeviceClass 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 NewDeviceClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredDeviceClassInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredDeviceClassInformer constructs a new informer for DeviceClass 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 NewFilteredDeviceClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta2().DeviceClasses().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta2().DeviceClasses().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta2().DeviceClasses().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta2().DeviceClasses().Watch(ctx, options)
+ },
+ },
+ &apiresourcev1beta2.DeviceClass{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *deviceClassInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredDeviceClassInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *deviceClassInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiresourcev1beta2.DeviceClass{}, f.defaultInformer)
+}
+
+func (f *deviceClassInformer) Lister() resourcev1beta2.DeviceClassLister {
+ return resourcev1beta2.NewDeviceClassLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/resource/v1beta2/interface.go b/vendor/k8s.io/client-go/informers/resource/v1beta2/interface.go
new file mode 100644
index 00000000000..4627d6f3e2e
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/resource/v1beta2/interface.go
@@ -0,0 +1,66 @@
+/*
+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 v1beta2
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // DeviceClasses returns a DeviceClassInformer.
+ DeviceClasses() DeviceClassInformer
+ // ResourceClaims returns a ResourceClaimInformer.
+ ResourceClaims() ResourceClaimInformer
+ // ResourceClaimTemplates returns a ResourceClaimTemplateInformer.
+ ResourceClaimTemplates() ResourceClaimTemplateInformer
+ // ResourceSlices returns a ResourceSliceInformer.
+ ResourceSlices() ResourceSliceInformer
+}
+
+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}
+}
+
+// DeviceClasses returns a DeviceClassInformer.
+func (v *version) DeviceClasses() DeviceClassInformer {
+ return &deviceClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// ResourceClaims returns a ResourceClaimInformer.
+func (v *version) ResourceClaims() ResourceClaimInformer {
+ return &resourceClaimInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// ResourceClaimTemplates returns a ResourceClaimTemplateInformer.
+func (v *version) ResourceClaimTemplates() ResourceClaimTemplateInformer {
+ return &resourceClaimTemplateInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// ResourceSlices returns a ResourceSliceInformer.
+func (v *version) ResourceSlices() ResourceSliceInformer {
+ return &resourceSliceInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/resource/v1beta2/resourceclaim.go b/vendor/k8s.io/client-go/informers/resource/v1beta2/resourceclaim.go
new file mode 100644
index 00000000000..e245d998c11
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/resource/v1beta2/resourceclaim.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta2
+
+import (
+ context "context"
+ time "time"
+
+ apiresourcev1beta2 "k8s.io/api/resource/v1beta2"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ resourcev1beta2 "k8s.io/client-go/listers/resource/v1beta2"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceClaimInformer provides access to a shared informer and lister for
+// ResourceClaims.
+type ResourceClaimInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() resourcev1beta2.ResourceClaimLister
+}
+
+type resourceClaimInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewResourceClaimInformer constructs a new informer for ResourceClaim 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 NewResourceClaimInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredResourceClaimInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredResourceClaimInformer constructs a new informer for ResourceClaim 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 NewFilteredResourceClaimInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta2().ResourceClaims(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta2().ResourceClaims(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta2().ResourceClaims(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta2().ResourceClaims(namespace).Watch(ctx, options)
+ },
+ },
+ &apiresourcev1beta2.ResourceClaim{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *resourceClaimInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredResourceClaimInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *resourceClaimInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiresourcev1beta2.ResourceClaim{}, f.defaultInformer)
+}
+
+func (f *resourceClaimInformer) Lister() resourcev1beta2.ResourceClaimLister {
+ return resourcev1beta2.NewResourceClaimLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/resource/v1beta2/resourceclaimtemplate.go b/vendor/k8s.io/client-go/informers/resource/v1beta2/resourceclaimtemplate.go
new file mode 100644
index 00000000000..4b973bd969c
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/resource/v1beta2/resourceclaimtemplate.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta2
+
+import (
+ context "context"
+ time "time"
+
+ apiresourcev1beta2 "k8s.io/api/resource/v1beta2"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ resourcev1beta2 "k8s.io/client-go/listers/resource/v1beta2"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceClaimTemplateInformer provides access to a shared informer and lister for
+// ResourceClaimTemplates.
+type ResourceClaimTemplateInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() resourcev1beta2.ResourceClaimTemplateLister
+}
+
+type resourceClaimTemplateInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewResourceClaimTemplateInformer constructs a new informer for ResourceClaimTemplate 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 NewResourceClaimTemplateInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredResourceClaimTemplateInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredResourceClaimTemplateInformer constructs a new informer for ResourceClaimTemplate 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 NewFilteredResourceClaimTemplateInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta2().ResourceClaimTemplates(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta2().ResourceClaimTemplates(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta2().ResourceClaimTemplates(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta2().ResourceClaimTemplates(namespace).Watch(ctx, options)
+ },
+ },
+ &apiresourcev1beta2.ResourceClaimTemplate{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *resourceClaimTemplateInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredResourceClaimTemplateInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *resourceClaimTemplateInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiresourcev1beta2.ResourceClaimTemplate{}, f.defaultInformer)
+}
+
+func (f *resourceClaimTemplateInformer) Lister() resourcev1beta2.ResourceClaimTemplateLister {
+ return resourcev1beta2.NewResourceClaimTemplateLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/resource/v1beta2/resourceslice.go b/vendor/k8s.io/client-go/informers/resource/v1beta2/resourceslice.go
new file mode 100644
index 00000000000..c0cdc67a83d
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/resource/v1beta2/resourceslice.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta2
+
+import (
+ context "context"
+ time "time"
+
+ apiresourcev1beta2 "k8s.io/api/resource/v1beta2"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ resourcev1beta2 "k8s.io/client-go/listers/resource/v1beta2"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceSliceInformer provides access to a shared informer and lister for
+// ResourceSlices.
+type ResourceSliceInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() resourcev1beta2.ResourceSliceLister
+}
+
+type resourceSliceInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewResourceSliceInformer constructs a new informer for ResourceSlice 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 NewResourceSliceInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredResourceSliceInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredResourceSliceInformer constructs a new informer for ResourceSlice 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 NewFilteredResourceSliceInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta2().ResourceSlices().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta2().ResourceSlices().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta2().ResourceSlices().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.ResourceV1beta2().ResourceSlices().Watch(ctx, options)
+ },
+ },
+ &apiresourcev1beta2.ResourceSlice{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *resourceSliceInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredResourceSliceInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *resourceSliceInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apiresourcev1beta2.ResourceSlice{}, f.defaultInformer)
+}
+
+func (f *resourceSliceInformer) Lister() resourcev1beta2.ResourceSliceLister {
+ return resourcev1beta2.NewResourceSliceLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/scheduling/interface.go b/vendor/k8s.io/client-go/informers/scheduling/interface.go
new file mode 100644
index 00000000000..659089b531f
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/scheduling/interface.go
@@ -0,0 +1,62 @@
+/*
+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 scheduling
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ v1 "k8s.io/client-go/informers/scheduling/v1"
+ v1alpha1 "k8s.io/client-go/informers/scheduling/v1alpha1"
+ v1beta1 "k8s.io/client-go/informers/scheduling/v1beta1"
+)
+
+// Interface provides access to each of this group's versions.
+type Interface interface {
+ // V1 provides access to shared informers for resources in V1.
+ V1() v1.Interface
+ // V1alpha1 provides access to shared informers for resources in V1alpha1.
+ V1alpha1() v1alpha1.Interface
+ // V1beta1 provides access to shared informers for resources in V1beta1.
+ V1beta1() v1beta1.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}
+}
+
+// V1 returns a new v1.Interface.
+func (g *group) V1() v1.Interface {
+ return v1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1alpha1 returns a new v1alpha1.Interface.
+func (g *group) V1alpha1() v1alpha1.Interface {
+ return v1alpha1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1beta1 returns a new v1beta1.Interface.
+func (g *group) V1beta1() v1beta1.Interface {
+ return v1beta1.New(g.factory, g.namespace, g.tweakListOptions)
+}
diff --git a/vendor/k8s.io/client-go/informers/scheduling/v1/interface.go b/vendor/k8s.io/client-go/informers/scheduling/v1/interface.go
new file mode 100644
index 00000000000..fd7931f34ab
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/scheduling/v1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 v1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // PriorityClasses returns a PriorityClassInformer.
+ PriorityClasses() PriorityClassInformer
+}
+
+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}
+}
+
+// PriorityClasses returns a PriorityClassInformer.
+func (v *version) PriorityClasses() PriorityClassInformer {
+ return &priorityClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/scheduling/v1/priorityclass.go b/vendor/k8s.io/client-go/informers/scheduling/v1/priorityclass.go
new file mode 100644
index 00000000000..df426366321
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/scheduling/v1/priorityclass.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apischedulingv1 "k8s.io/api/scheduling/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ schedulingv1 "k8s.io/client-go/listers/scheduling/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PriorityClassInformer provides access to a shared informer and lister for
+// PriorityClasses.
+type PriorityClassInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() schedulingv1.PriorityClassLister
+}
+
+type priorityClassInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewPriorityClassInformer constructs a new informer for PriorityClass 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 NewPriorityClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredPriorityClassInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredPriorityClassInformer constructs a new informer for PriorityClass 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 NewFilteredPriorityClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.SchedulingV1().PriorityClasses().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.SchedulingV1().PriorityClasses().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.SchedulingV1().PriorityClasses().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.SchedulingV1().PriorityClasses().Watch(ctx, options)
+ },
+ },
+ &apischedulingv1.PriorityClass{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *priorityClassInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredPriorityClassInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *priorityClassInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apischedulingv1.PriorityClass{}, f.defaultInformer)
+}
+
+func (f *priorityClassInformer) Lister() schedulingv1.PriorityClassLister {
+ return schedulingv1.NewPriorityClassLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/scheduling/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/scheduling/v1alpha1/interface.go
new file mode 100644
index 00000000000..cd908d14e6f
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/scheduling/v1alpha1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // PriorityClasses returns a PriorityClassInformer.
+ PriorityClasses() PriorityClassInformer
+}
+
+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}
+}
+
+// PriorityClasses returns a PriorityClassInformer.
+func (v *version) PriorityClasses() PriorityClassInformer {
+ return &priorityClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/scheduling/v1alpha1/priorityclass.go b/vendor/k8s.io/client-go/informers/scheduling/v1alpha1/priorityclass.go
new file mode 100644
index 00000000000..228240af12e
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/scheduling/v1alpha1/priorityclass.go
@@ -0,0 +1,101 @@
+/*
+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"
+
+ apischedulingv1alpha1 "k8s.io/api/scheduling/v1alpha1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ schedulingv1alpha1 "k8s.io/client-go/listers/scheduling/v1alpha1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PriorityClassInformer provides access to a shared informer and lister for
+// PriorityClasses.
+type PriorityClassInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() schedulingv1alpha1.PriorityClassLister
+}
+
+type priorityClassInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewPriorityClassInformer constructs a new informer for PriorityClass 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 NewPriorityClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredPriorityClassInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredPriorityClassInformer constructs a new informer for PriorityClass 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 NewFilteredPriorityClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.SchedulingV1alpha1().PriorityClasses().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.SchedulingV1alpha1().PriorityClasses().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.SchedulingV1alpha1().PriorityClasses().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.SchedulingV1alpha1().PriorityClasses().Watch(ctx, options)
+ },
+ },
+ &apischedulingv1alpha1.PriorityClass{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *priorityClassInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredPriorityClassInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *priorityClassInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apischedulingv1alpha1.PriorityClass{}, f.defaultInformer)
+}
+
+func (f *priorityClassInformer) Lister() schedulingv1alpha1.PriorityClassLister {
+ return schedulingv1alpha1.NewPriorityClassLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/scheduling/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/scheduling/v1beta1/interface.go
new file mode 100644
index 00000000000..52840a9cee2
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/scheduling/v1beta1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 v1beta1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // PriorityClasses returns a PriorityClassInformer.
+ PriorityClasses() PriorityClassInformer
+}
+
+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}
+}
+
+// PriorityClasses returns a PriorityClassInformer.
+func (v *version) PriorityClasses() PriorityClassInformer {
+ return &priorityClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/scheduling/v1beta1/priorityclass.go b/vendor/k8s.io/client-go/informers/scheduling/v1beta1/priorityclass.go
new file mode 100644
index 00000000000..fd40bd0860f
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/scheduling/v1beta1/priorityclass.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apischedulingv1beta1 "k8s.io/api/scheduling/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ schedulingv1beta1 "k8s.io/client-go/listers/scheduling/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PriorityClassInformer provides access to a shared informer and lister for
+// PriorityClasses.
+type PriorityClassInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() schedulingv1beta1.PriorityClassLister
+}
+
+type priorityClassInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewPriorityClassInformer constructs a new informer for PriorityClass 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 NewPriorityClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredPriorityClassInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredPriorityClassInformer constructs a new informer for PriorityClass 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 NewFilteredPriorityClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.SchedulingV1beta1().PriorityClasses().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.SchedulingV1beta1().PriorityClasses().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.SchedulingV1beta1().PriorityClasses().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.SchedulingV1beta1().PriorityClasses().Watch(ctx, options)
+ },
+ },
+ &apischedulingv1beta1.PriorityClass{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *priorityClassInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredPriorityClassInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *priorityClassInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apischedulingv1beta1.PriorityClass{}, f.defaultInformer)
+}
+
+func (f *priorityClassInformer) Lister() schedulingv1beta1.PriorityClassLister {
+ return schedulingv1beta1.NewPriorityClassLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/storage/interface.go b/vendor/k8s.io/client-go/informers/storage/interface.go
new file mode 100644
index 00000000000..8245aa60c99
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storage/interface.go
@@ -0,0 +1,62 @@
+/*
+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 storage
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ v1 "k8s.io/client-go/informers/storage/v1"
+ v1alpha1 "k8s.io/client-go/informers/storage/v1alpha1"
+ v1beta1 "k8s.io/client-go/informers/storage/v1beta1"
+)
+
+// Interface provides access to each of this group's versions.
+type Interface interface {
+ // V1 provides access to shared informers for resources in V1.
+ V1() v1.Interface
+ // V1alpha1 provides access to shared informers for resources in V1alpha1.
+ V1alpha1() v1alpha1.Interface
+ // V1beta1 provides access to shared informers for resources in V1beta1.
+ V1beta1() v1beta1.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}
+}
+
+// V1 returns a new v1.Interface.
+func (g *group) V1() v1.Interface {
+ return v1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1alpha1 returns a new v1alpha1.Interface.
+func (g *group) V1alpha1() v1alpha1.Interface {
+ return v1alpha1.New(g.factory, g.namespace, g.tweakListOptions)
+}
+
+// V1beta1 returns a new v1beta1.Interface.
+func (g *group) V1beta1() v1beta1.Interface {
+ return v1beta1.New(g.factory, g.namespace, g.tweakListOptions)
+}
diff --git a/vendor/k8s.io/client-go/informers/storage/v1/csidriver.go b/vendor/k8s.io/client-go/informers/storage/v1/csidriver.go
new file mode 100644
index 00000000000..b79a51ca001
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storage/v1/csidriver.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apistoragev1 "k8s.io/api/storage/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ storagev1 "k8s.io/client-go/listers/storage/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CSIDriverInformer provides access to a shared informer and lister for
+// CSIDrivers.
+type CSIDriverInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() storagev1.CSIDriverLister
+}
+
+type cSIDriverInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewCSIDriverInformer constructs a new informer for CSIDriver 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 NewCSIDriverInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredCSIDriverInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredCSIDriverInformer constructs a new informer for CSIDriver 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 NewFilteredCSIDriverInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().CSIDrivers().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().CSIDrivers().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().CSIDrivers().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().CSIDrivers().Watch(ctx, options)
+ },
+ },
+ &apistoragev1.CSIDriver{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *cSIDriverInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredCSIDriverInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *cSIDriverInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apistoragev1.CSIDriver{}, f.defaultInformer)
+}
+
+func (f *cSIDriverInformer) Lister() storagev1.CSIDriverLister {
+ return storagev1.NewCSIDriverLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/storage/v1/csinode.go b/vendor/k8s.io/client-go/informers/storage/v1/csinode.go
new file mode 100644
index 00000000000..7a6040795e3
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storage/v1/csinode.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apistoragev1 "k8s.io/api/storage/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ storagev1 "k8s.io/client-go/listers/storage/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CSINodeInformer provides access to a shared informer and lister for
+// CSINodes.
+type CSINodeInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() storagev1.CSINodeLister
+}
+
+type cSINodeInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewCSINodeInformer constructs a new informer for CSINode 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 NewCSINodeInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredCSINodeInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredCSINodeInformer constructs a new informer for CSINode 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 NewFilteredCSINodeInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().CSINodes().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().CSINodes().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().CSINodes().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().CSINodes().Watch(ctx, options)
+ },
+ },
+ &apistoragev1.CSINode{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *cSINodeInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredCSINodeInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *cSINodeInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apistoragev1.CSINode{}, f.defaultInformer)
+}
+
+func (f *cSINodeInformer) Lister() storagev1.CSINodeLister {
+ return storagev1.NewCSINodeLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/storage/v1/csistoragecapacity.go b/vendor/k8s.io/client-go/informers/storage/v1/csistoragecapacity.go
new file mode 100644
index 00000000000..84ef70f2e7f
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storage/v1/csistoragecapacity.go
@@ -0,0 +1,102 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apistoragev1 "k8s.io/api/storage/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ storagev1 "k8s.io/client-go/listers/storage/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CSIStorageCapacityInformer provides access to a shared informer and lister for
+// CSIStorageCapacities.
+type CSIStorageCapacityInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() storagev1.CSIStorageCapacityLister
+}
+
+type cSIStorageCapacityInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewCSIStorageCapacityInformer constructs a new informer for CSIStorageCapacity 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 NewCSIStorageCapacityInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredCSIStorageCapacityInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredCSIStorageCapacityInformer constructs a new informer for CSIStorageCapacity 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 NewFilteredCSIStorageCapacityInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().CSIStorageCapacities(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().CSIStorageCapacities(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().CSIStorageCapacities(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().CSIStorageCapacities(namespace).Watch(ctx, options)
+ },
+ },
+ &apistoragev1.CSIStorageCapacity{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *cSIStorageCapacityInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredCSIStorageCapacityInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *cSIStorageCapacityInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apistoragev1.CSIStorageCapacity{}, f.defaultInformer)
+}
+
+func (f *cSIStorageCapacityInformer) Lister() storagev1.CSIStorageCapacityLister {
+ return storagev1.NewCSIStorageCapacityLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/storage/v1/interface.go b/vendor/k8s.io/client-go/informers/storage/v1/interface.go
new file mode 100644
index 00000000000..4f017b0864f
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storage/v1/interface.go
@@ -0,0 +1,73 @@
+/*
+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 v1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // CSIDrivers returns a CSIDriverInformer.
+ CSIDrivers() CSIDriverInformer
+ // CSINodes returns a CSINodeInformer.
+ CSINodes() CSINodeInformer
+ // CSIStorageCapacities returns a CSIStorageCapacityInformer.
+ CSIStorageCapacities() CSIStorageCapacityInformer
+ // StorageClasses returns a StorageClassInformer.
+ StorageClasses() StorageClassInformer
+ // VolumeAttachments returns a VolumeAttachmentInformer.
+ VolumeAttachments() VolumeAttachmentInformer
+}
+
+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}
+}
+
+// CSIDrivers returns a CSIDriverInformer.
+func (v *version) CSIDrivers() CSIDriverInformer {
+ return &cSIDriverInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// CSINodes returns a CSINodeInformer.
+func (v *version) CSINodes() CSINodeInformer {
+ return &cSINodeInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// CSIStorageCapacities returns a CSIStorageCapacityInformer.
+func (v *version) CSIStorageCapacities() CSIStorageCapacityInformer {
+ return &cSIStorageCapacityInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// StorageClasses returns a StorageClassInformer.
+func (v *version) StorageClasses() StorageClassInformer {
+ return &storageClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// VolumeAttachments returns a VolumeAttachmentInformer.
+func (v *version) VolumeAttachments() VolumeAttachmentInformer {
+ return &volumeAttachmentInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/storage/v1/storageclass.go b/vendor/k8s.io/client-go/informers/storage/v1/storageclass.go
new file mode 100644
index 00000000000..7f17ecf8c78
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storage/v1/storageclass.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apistoragev1 "k8s.io/api/storage/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ storagev1 "k8s.io/client-go/listers/storage/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// StorageClassInformer provides access to a shared informer and lister for
+// StorageClasses.
+type StorageClassInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() storagev1.StorageClassLister
+}
+
+type storageClassInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewStorageClassInformer constructs a new informer for StorageClass 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 NewStorageClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredStorageClassInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredStorageClassInformer constructs a new informer for StorageClass 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 NewFilteredStorageClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().StorageClasses().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().StorageClasses().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().StorageClasses().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().StorageClasses().Watch(ctx, options)
+ },
+ },
+ &apistoragev1.StorageClass{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *storageClassInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredStorageClassInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *storageClassInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apistoragev1.StorageClass{}, f.defaultInformer)
+}
+
+func (f *storageClassInformer) Lister() storagev1.StorageClassLister {
+ return storagev1.NewStorageClassLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/storage/v1/volumeattachment.go b/vendor/k8s.io/client-go/informers/storage/v1/volumeattachment.go
new file mode 100644
index 00000000000..3dee340d52a
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storage/v1/volumeattachment.go
@@ -0,0 +1,101 @@
+/*
+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 v1
+
+import (
+ context "context"
+ time "time"
+
+ apistoragev1 "k8s.io/api/storage/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ storagev1 "k8s.io/client-go/listers/storage/v1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// VolumeAttachmentInformer provides access to a shared informer and lister for
+// VolumeAttachments.
+type VolumeAttachmentInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() storagev1.VolumeAttachmentLister
+}
+
+type volumeAttachmentInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewVolumeAttachmentInformer constructs a new informer for VolumeAttachment 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 NewVolumeAttachmentInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredVolumeAttachmentInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredVolumeAttachmentInformer constructs a new informer for VolumeAttachment 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 NewFilteredVolumeAttachmentInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().VolumeAttachments().List(context.Background(), options)
+ },
+ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().VolumeAttachments().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options metav1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().VolumeAttachments().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options metav1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1().VolumeAttachments().Watch(ctx, options)
+ },
+ },
+ &apistoragev1.VolumeAttachment{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *volumeAttachmentInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredVolumeAttachmentInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *volumeAttachmentInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apistoragev1.VolumeAttachment{}, f.defaultInformer)
+}
+
+func (f *volumeAttachmentInformer) Lister() storagev1.VolumeAttachmentLister {
+ return storagev1.NewVolumeAttachmentLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/storage/v1alpha1/csistoragecapacity.go b/vendor/k8s.io/client-go/informers/storage/v1alpha1/csistoragecapacity.go
new file mode 100644
index 00000000000..794de10db17
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storage/v1alpha1/csistoragecapacity.go
@@ -0,0 +1,102 @@
+/*
+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"
+
+ apistoragev1alpha1 "k8s.io/api/storage/v1alpha1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ storagev1alpha1 "k8s.io/client-go/listers/storage/v1alpha1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CSIStorageCapacityInformer provides access to a shared informer and lister for
+// CSIStorageCapacities.
+type CSIStorageCapacityInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() storagev1alpha1.CSIStorageCapacityLister
+}
+
+type cSIStorageCapacityInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewCSIStorageCapacityInformer constructs a new informer for CSIStorageCapacity 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 NewCSIStorageCapacityInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredCSIStorageCapacityInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredCSIStorageCapacityInformer constructs a new informer for CSIStorageCapacity 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 NewFilteredCSIStorageCapacityInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1alpha1().CSIStorageCapacities(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1alpha1().CSIStorageCapacities(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1alpha1().CSIStorageCapacities(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1alpha1().CSIStorageCapacities(namespace).Watch(ctx, options)
+ },
+ },
+ &apistoragev1alpha1.CSIStorageCapacity{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *cSIStorageCapacityInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredCSIStorageCapacityInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *cSIStorageCapacityInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apistoragev1alpha1.CSIStorageCapacity{}, f.defaultInformer)
+}
+
+func (f *cSIStorageCapacityInformer) Lister() storagev1alpha1.CSIStorageCapacityLister {
+ return storagev1alpha1.NewCSIStorageCapacityLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/storage/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/storage/v1alpha1/interface.go
new file mode 100644
index 00000000000..bda3b1add97
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storage/v1alpha1/interface.go
@@ -0,0 +1,59 @@
+/*
+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 "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // CSIStorageCapacities returns a CSIStorageCapacityInformer.
+ CSIStorageCapacities() CSIStorageCapacityInformer
+ // VolumeAttachments returns a VolumeAttachmentInformer.
+ VolumeAttachments() VolumeAttachmentInformer
+ // VolumeAttributesClasses returns a VolumeAttributesClassInformer.
+ VolumeAttributesClasses() VolumeAttributesClassInformer
+}
+
+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}
+}
+
+// CSIStorageCapacities returns a CSIStorageCapacityInformer.
+func (v *version) CSIStorageCapacities() CSIStorageCapacityInformer {
+ return &cSIStorageCapacityInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// VolumeAttachments returns a VolumeAttachmentInformer.
+func (v *version) VolumeAttachments() VolumeAttachmentInformer {
+ return &volumeAttachmentInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// VolumeAttributesClasses returns a VolumeAttributesClassInformer.
+func (v *version) VolumeAttributesClasses() VolumeAttributesClassInformer {
+ return &volumeAttributesClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/storage/v1alpha1/volumeattachment.go b/vendor/k8s.io/client-go/informers/storage/v1alpha1/volumeattachment.go
new file mode 100644
index 00000000000..dc68be23449
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storage/v1alpha1/volumeattachment.go
@@ -0,0 +1,101 @@
+/*
+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"
+
+ apistoragev1alpha1 "k8s.io/api/storage/v1alpha1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ storagev1alpha1 "k8s.io/client-go/listers/storage/v1alpha1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// VolumeAttachmentInformer provides access to a shared informer and lister for
+// VolumeAttachments.
+type VolumeAttachmentInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() storagev1alpha1.VolumeAttachmentLister
+}
+
+type volumeAttachmentInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewVolumeAttachmentInformer constructs a new informer for VolumeAttachment 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 NewVolumeAttachmentInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredVolumeAttachmentInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredVolumeAttachmentInformer constructs a new informer for VolumeAttachment 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 NewFilteredVolumeAttachmentInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1alpha1().VolumeAttachments().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1alpha1().VolumeAttachments().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1alpha1().VolumeAttachments().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1alpha1().VolumeAttachments().Watch(ctx, options)
+ },
+ },
+ &apistoragev1alpha1.VolumeAttachment{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *volumeAttachmentInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredVolumeAttachmentInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *volumeAttachmentInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apistoragev1alpha1.VolumeAttachment{}, f.defaultInformer)
+}
+
+func (f *volumeAttachmentInformer) Lister() storagev1alpha1.VolumeAttachmentLister {
+ return storagev1alpha1.NewVolumeAttachmentLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/storage/v1alpha1/volumeattributesclass.go b/vendor/k8s.io/client-go/informers/storage/v1alpha1/volumeattributesclass.go
new file mode 100644
index 00000000000..5210ea79a91
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storage/v1alpha1/volumeattributesclass.go
@@ -0,0 +1,101 @@
+/*
+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"
+
+ apistoragev1alpha1 "k8s.io/api/storage/v1alpha1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ storagev1alpha1 "k8s.io/client-go/listers/storage/v1alpha1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// VolumeAttributesClassInformer provides access to a shared informer and lister for
+// VolumeAttributesClasses.
+type VolumeAttributesClassInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() storagev1alpha1.VolumeAttributesClassLister
+}
+
+type volumeAttributesClassInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewVolumeAttributesClassInformer constructs a new informer for VolumeAttributesClass 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 NewVolumeAttributesClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredVolumeAttributesClassInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredVolumeAttributesClassInformer constructs a new informer for VolumeAttributesClass 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 NewFilteredVolumeAttributesClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1alpha1().VolumeAttributesClasses().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1alpha1().VolumeAttributesClasses().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1alpha1().VolumeAttributesClasses().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1alpha1().VolumeAttributesClasses().Watch(ctx, options)
+ },
+ },
+ &apistoragev1alpha1.VolumeAttributesClass{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *volumeAttributesClassInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredVolumeAttributesClassInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *volumeAttributesClassInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apistoragev1alpha1.VolumeAttributesClass{}, f.defaultInformer)
+}
+
+func (f *volumeAttributesClassInformer) Lister() storagev1alpha1.VolumeAttributesClassLister {
+ return storagev1alpha1.NewVolumeAttributesClassLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/csidriver.go b/vendor/k8s.io/client-go/informers/storage/v1beta1/csidriver.go
new file mode 100644
index 00000000000..a21dc94ff89
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storage/v1beta1/csidriver.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apistoragev1beta1 "k8s.io/api/storage/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ storagev1beta1 "k8s.io/client-go/listers/storage/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CSIDriverInformer provides access to a shared informer and lister for
+// CSIDrivers.
+type CSIDriverInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() storagev1beta1.CSIDriverLister
+}
+
+type cSIDriverInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewCSIDriverInformer constructs a new informer for CSIDriver 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 NewCSIDriverInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredCSIDriverInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredCSIDriverInformer constructs a new informer for CSIDriver 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 NewFilteredCSIDriverInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().CSIDrivers().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().CSIDrivers().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().CSIDrivers().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().CSIDrivers().Watch(ctx, options)
+ },
+ },
+ &apistoragev1beta1.CSIDriver{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *cSIDriverInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredCSIDriverInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *cSIDriverInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apistoragev1beta1.CSIDriver{}, f.defaultInformer)
+}
+
+func (f *cSIDriverInformer) Lister() storagev1beta1.CSIDriverLister {
+ return storagev1beta1.NewCSIDriverLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/csinode.go b/vendor/k8s.io/client-go/informers/storage/v1beta1/csinode.go
new file mode 100644
index 00000000000..e789fe30964
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storage/v1beta1/csinode.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apistoragev1beta1 "k8s.io/api/storage/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ storagev1beta1 "k8s.io/client-go/listers/storage/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CSINodeInformer provides access to a shared informer and lister for
+// CSINodes.
+type CSINodeInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() storagev1beta1.CSINodeLister
+}
+
+type cSINodeInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewCSINodeInformer constructs a new informer for CSINode 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 NewCSINodeInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredCSINodeInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredCSINodeInformer constructs a new informer for CSINode 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 NewFilteredCSINodeInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().CSINodes().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().CSINodes().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().CSINodes().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().CSINodes().Watch(ctx, options)
+ },
+ },
+ &apistoragev1beta1.CSINode{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *cSINodeInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredCSINodeInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *cSINodeInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apistoragev1beta1.CSINode{}, f.defaultInformer)
+}
+
+func (f *cSINodeInformer) Lister() storagev1beta1.CSINodeLister {
+ return storagev1beta1.NewCSINodeLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/csistoragecapacity.go b/vendor/k8s.io/client-go/informers/storage/v1beta1/csistoragecapacity.go
new file mode 100644
index 00000000000..fa75b0b4f9a
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storage/v1beta1/csistoragecapacity.go
@@ -0,0 +1,102 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apistoragev1beta1 "k8s.io/api/storage/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ storagev1beta1 "k8s.io/client-go/listers/storage/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CSIStorageCapacityInformer provides access to a shared informer and lister for
+// CSIStorageCapacities.
+type CSIStorageCapacityInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() storagev1beta1.CSIStorageCapacityLister
+}
+
+type cSIStorageCapacityInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewCSIStorageCapacityInformer constructs a new informer for CSIStorageCapacity 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 NewCSIStorageCapacityInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredCSIStorageCapacityInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredCSIStorageCapacityInformer constructs a new informer for CSIStorageCapacity 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 NewFilteredCSIStorageCapacityInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().CSIStorageCapacities(namespace).List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().CSIStorageCapacities(namespace).Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().CSIStorageCapacities(namespace).List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().CSIStorageCapacities(namespace).Watch(ctx, options)
+ },
+ },
+ &apistoragev1beta1.CSIStorageCapacity{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *cSIStorageCapacityInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredCSIStorageCapacityInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *cSIStorageCapacityInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apistoragev1beta1.CSIStorageCapacity{}, f.defaultInformer)
+}
+
+func (f *cSIStorageCapacityInformer) Lister() storagev1beta1.CSIStorageCapacityLister {
+ return storagev1beta1.NewCSIStorageCapacityLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/storage/v1beta1/interface.go
new file mode 100644
index 00000000000..7433951855a
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storage/v1beta1/interface.go
@@ -0,0 +1,80 @@
+/*
+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 v1beta1
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // CSIDrivers returns a CSIDriverInformer.
+ CSIDrivers() CSIDriverInformer
+ // CSINodes returns a CSINodeInformer.
+ CSINodes() CSINodeInformer
+ // CSIStorageCapacities returns a CSIStorageCapacityInformer.
+ CSIStorageCapacities() CSIStorageCapacityInformer
+ // StorageClasses returns a StorageClassInformer.
+ StorageClasses() StorageClassInformer
+ // VolumeAttachments returns a VolumeAttachmentInformer.
+ VolumeAttachments() VolumeAttachmentInformer
+ // VolumeAttributesClasses returns a VolumeAttributesClassInformer.
+ VolumeAttributesClasses() VolumeAttributesClassInformer
+}
+
+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}
+}
+
+// CSIDrivers returns a CSIDriverInformer.
+func (v *version) CSIDrivers() CSIDriverInformer {
+ return &cSIDriverInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// CSINodes returns a CSINodeInformer.
+func (v *version) CSINodes() CSINodeInformer {
+ return &cSINodeInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// CSIStorageCapacities returns a CSIStorageCapacityInformer.
+func (v *version) CSIStorageCapacities() CSIStorageCapacityInformer {
+ return &cSIStorageCapacityInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
+
+// StorageClasses returns a StorageClassInformer.
+func (v *version) StorageClasses() StorageClassInformer {
+ return &storageClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// VolumeAttachments returns a VolumeAttachmentInformer.
+func (v *version) VolumeAttachments() VolumeAttachmentInformer {
+ return &volumeAttachmentInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
+
+// VolumeAttributesClasses returns a VolumeAttributesClassInformer.
+func (v *version) VolumeAttributesClasses() VolumeAttributesClassInformer {
+ return &volumeAttributesClassInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/storageclass.go b/vendor/k8s.io/client-go/informers/storage/v1beta1/storageclass.go
new file mode 100644
index 00000000000..23d7ca4fc7e
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storage/v1beta1/storageclass.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apistoragev1beta1 "k8s.io/api/storage/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ storagev1beta1 "k8s.io/client-go/listers/storage/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// StorageClassInformer provides access to a shared informer and lister for
+// StorageClasses.
+type StorageClassInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() storagev1beta1.StorageClassLister
+}
+
+type storageClassInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewStorageClassInformer constructs a new informer for StorageClass 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 NewStorageClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredStorageClassInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredStorageClassInformer constructs a new informer for StorageClass 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 NewFilteredStorageClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().StorageClasses().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().StorageClasses().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().StorageClasses().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().StorageClasses().Watch(ctx, options)
+ },
+ },
+ &apistoragev1beta1.StorageClass{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *storageClassInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredStorageClassInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *storageClassInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apistoragev1beta1.StorageClass{}, f.defaultInformer)
+}
+
+func (f *storageClassInformer) Lister() storagev1beta1.StorageClassLister {
+ return storagev1beta1.NewStorageClassLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/volumeattachment.go b/vendor/k8s.io/client-go/informers/storage/v1beta1/volumeattachment.go
new file mode 100644
index 00000000000..691b2c6d127
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storage/v1beta1/volumeattachment.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apistoragev1beta1 "k8s.io/api/storage/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ storagev1beta1 "k8s.io/client-go/listers/storage/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// VolumeAttachmentInformer provides access to a shared informer and lister for
+// VolumeAttachments.
+type VolumeAttachmentInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() storagev1beta1.VolumeAttachmentLister
+}
+
+type volumeAttachmentInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewVolumeAttachmentInformer constructs a new informer for VolumeAttachment 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 NewVolumeAttachmentInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredVolumeAttachmentInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredVolumeAttachmentInformer constructs a new informer for VolumeAttachment 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 NewFilteredVolumeAttachmentInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().VolumeAttachments().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().VolumeAttachments().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().VolumeAttachments().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().VolumeAttachments().Watch(ctx, options)
+ },
+ },
+ &apistoragev1beta1.VolumeAttachment{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *volumeAttachmentInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredVolumeAttachmentInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *volumeAttachmentInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apistoragev1beta1.VolumeAttachment{}, f.defaultInformer)
+}
+
+func (f *volumeAttachmentInformer) Lister() storagev1beta1.VolumeAttachmentLister {
+ return storagev1beta1.NewVolumeAttachmentLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/storage/v1beta1/volumeattributesclass.go b/vendor/k8s.io/client-go/informers/storage/v1beta1/volumeattributesclass.go
new file mode 100644
index 00000000000..7d66c581565
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storage/v1beta1/volumeattributesclass.go
@@ -0,0 +1,101 @@
+/*
+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 v1beta1
+
+import (
+ context "context"
+ time "time"
+
+ apistoragev1beta1 "k8s.io/api/storage/v1beta1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ storagev1beta1 "k8s.io/client-go/listers/storage/v1beta1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// VolumeAttributesClassInformer provides access to a shared informer and lister for
+// VolumeAttributesClasses.
+type VolumeAttributesClassInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() storagev1beta1.VolumeAttributesClassLister
+}
+
+type volumeAttributesClassInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewVolumeAttributesClassInformer constructs a new informer for VolumeAttributesClass 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 NewVolumeAttributesClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredVolumeAttributesClassInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredVolumeAttributesClassInformer constructs a new informer for VolumeAttributesClass 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 NewFilteredVolumeAttributesClassInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().VolumeAttributesClasses().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().VolumeAttributesClasses().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().VolumeAttributesClasses().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StorageV1beta1().VolumeAttributesClasses().Watch(ctx, options)
+ },
+ },
+ &apistoragev1beta1.VolumeAttributesClass{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *volumeAttributesClassInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredVolumeAttributesClassInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *volumeAttributesClassInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apistoragev1beta1.VolumeAttributesClass{}, f.defaultInformer)
+}
+
+func (f *volumeAttributesClassInformer) Lister() storagev1beta1.VolumeAttributesClassLister {
+ return storagev1beta1.NewVolumeAttributesClassLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/informers/storagemigration/interface.go b/vendor/k8s.io/client-go/informers/storagemigration/interface.go
new file mode 100644
index 00000000000..1f7030fea8d
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storagemigration/interface.go
@@ -0,0 +1,46 @@
+/*
+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 storagemigration
+
+import (
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ v1alpha1 "k8s.io/client-go/informers/storagemigration/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)
+}
diff --git a/vendor/k8s.io/client-go/informers/storagemigration/v1alpha1/interface.go b/vendor/k8s.io/client-go/informers/storagemigration/v1alpha1/interface.go
new file mode 100644
index 00000000000..60724e7a287
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storagemigration/v1alpha1/interface.go
@@ -0,0 +1,45 @@
+/*
+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 "k8s.io/client-go/informers/internalinterfaces"
+)
+
+// Interface provides access to all the informers in this group version.
+type Interface interface {
+ // StorageVersionMigrations returns a StorageVersionMigrationInformer.
+ StorageVersionMigrations() StorageVersionMigrationInformer
+}
+
+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}
+}
+
+// StorageVersionMigrations returns a StorageVersionMigrationInformer.
+func (v *version) StorageVersionMigrations() StorageVersionMigrationInformer {
+ return &storageVersionMigrationInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
+}
diff --git a/vendor/k8s.io/client-go/informers/storagemigration/v1alpha1/storageversionmigration.go b/vendor/k8s.io/client-go/informers/storagemigration/v1alpha1/storageversionmigration.go
new file mode 100644
index 00000000000..4debb5eef9f
--- /dev/null
+++ b/vendor/k8s.io/client-go/informers/storagemigration/v1alpha1/storageversionmigration.go
@@ -0,0 +1,101 @@
+/*
+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"
+
+ apistoragemigrationv1alpha1 "k8s.io/api/storagemigration/v1alpha1"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ watch "k8s.io/apimachinery/pkg/watch"
+ internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
+ kubernetes "k8s.io/client-go/kubernetes"
+ storagemigrationv1alpha1 "k8s.io/client-go/listers/storagemigration/v1alpha1"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// StorageVersionMigrationInformer provides access to a shared informer and lister for
+// StorageVersionMigrations.
+type StorageVersionMigrationInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() storagemigrationv1alpha1.StorageVersionMigrationLister
+}
+
+type storageVersionMigrationInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+}
+
+// NewStorageVersionMigrationInformer constructs a new informer for StorageVersionMigration 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 NewStorageVersionMigrationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredStorageVersionMigrationInformer(client, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredStorageVersionMigrationInformer constructs a new informer for StorageVersionMigration 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 NewFilteredStorageVersionMigrationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
+ return cache.NewSharedIndexInformer(
+ &cache.ListWatch{
+ ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StoragemigrationV1alpha1().StorageVersionMigrations().List(context.Background(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StoragemigrationV1alpha1().StorageVersionMigrations().Watch(context.Background(), options)
+ },
+ ListWithContextFunc: func(ctx context.Context, options v1.ListOptions) (runtime.Object, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StoragemigrationV1alpha1().StorageVersionMigrations().List(ctx, options)
+ },
+ WatchFuncWithContext: func(ctx context.Context, options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.StoragemigrationV1alpha1().StorageVersionMigrations().Watch(ctx, options)
+ },
+ },
+ &apistoragemigrationv1alpha1.StorageVersionMigration{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *storageVersionMigrationInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredStorageVersionMigrationInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *storageVersionMigrationInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&apistoragemigrationv1alpha1.StorageVersionMigration{}, f.defaultInformer)
+}
+
+func (f *storageVersionMigrationInformer) Lister() storagemigrationv1alpha1.StorageVersionMigrationLister {
+ return storagemigrationv1alpha1.NewStorageVersionMigrationLister(f.Informer().GetIndexer())
+}
diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1/expansion_generated.go
new file mode 100644
index 00000000000..9002ad6ea3b
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1/expansion_generated.go
@@ -0,0 +1,35 @@
+/*
+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 v1
+
+// MutatingWebhookConfigurationListerExpansion allows custom methods to be added to
+// MutatingWebhookConfigurationLister.
+type MutatingWebhookConfigurationListerExpansion interface{}
+
+// ValidatingAdmissionPolicyListerExpansion allows custom methods to be added to
+// ValidatingAdmissionPolicyLister.
+type ValidatingAdmissionPolicyListerExpansion interface{}
+
+// ValidatingAdmissionPolicyBindingListerExpansion allows custom methods to be added to
+// ValidatingAdmissionPolicyBindingLister.
+type ValidatingAdmissionPolicyBindingListerExpansion interface{}
+
+// ValidatingWebhookConfigurationListerExpansion allows custom methods to be added to
+// ValidatingWebhookConfigurationLister.
+type ValidatingWebhookConfigurationListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1/mutatingwebhookconfiguration.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1/mutatingwebhookconfiguration.go
new file mode 100644
index 00000000000..b3efc72a496
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1/mutatingwebhookconfiguration.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// MutatingWebhookConfigurationLister helps list MutatingWebhookConfigurations.
+// All objects returned here must be treated as read-only.
+type MutatingWebhookConfigurationLister interface {
+ // List lists all MutatingWebhookConfigurations in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*admissionregistrationv1.MutatingWebhookConfiguration, err error)
+ // Get retrieves the MutatingWebhookConfiguration from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*admissionregistrationv1.MutatingWebhookConfiguration, error)
+ MutatingWebhookConfigurationListerExpansion
+}
+
+// mutatingWebhookConfigurationLister implements the MutatingWebhookConfigurationLister interface.
+type mutatingWebhookConfigurationLister struct {
+ listers.ResourceIndexer[*admissionregistrationv1.MutatingWebhookConfiguration]
+}
+
+// NewMutatingWebhookConfigurationLister returns a new MutatingWebhookConfigurationLister.
+func NewMutatingWebhookConfigurationLister(indexer cache.Indexer) MutatingWebhookConfigurationLister {
+ return &mutatingWebhookConfigurationLister{listers.New[*admissionregistrationv1.MutatingWebhookConfiguration](indexer, admissionregistrationv1.Resource("mutatingwebhookconfiguration"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1/validatingadmissionpolicy.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1/validatingadmissionpolicy.go
new file mode 100644
index 00000000000..07a181cd4ba
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1/validatingadmissionpolicy.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ValidatingAdmissionPolicyLister helps list ValidatingAdmissionPolicies.
+// All objects returned here must be treated as read-only.
+type ValidatingAdmissionPolicyLister interface {
+ // List lists all ValidatingAdmissionPolicies in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*admissionregistrationv1.ValidatingAdmissionPolicy, err error)
+ // Get retrieves the ValidatingAdmissionPolicy from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*admissionregistrationv1.ValidatingAdmissionPolicy, error)
+ ValidatingAdmissionPolicyListerExpansion
+}
+
+// validatingAdmissionPolicyLister implements the ValidatingAdmissionPolicyLister interface.
+type validatingAdmissionPolicyLister struct {
+ listers.ResourceIndexer[*admissionregistrationv1.ValidatingAdmissionPolicy]
+}
+
+// NewValidatingAdmissionPolicyLister returns a new ValidatingAdmissionPolicyLister.
+func NewValidatingAdmissionPolicyLister(indexer cache.Indexer) ValidatingAdmissionPolicyLister {
+ return &validatingAdmissionPolicyLister{listers.New[*admissionregistrationv1.ValidatingAdmissionPolicy](indexer, admissionregistrationv1.Resource("validatingadmissionpolicy"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1/validatingadmissionpolicybinding.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1/validatingadmissionpolicybinding.go
new file mode 100644
index 00000000000..131eb12b2bb
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1/validatingadmissionpolicybinding.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ValidatingAdmissionPolicyBindingLister helps list ValidatingAdmissionPolicyBindings.
+// All objects returned here must be treated as read-only.
+type ValidatingAdmissionPolicyBindingLister interface {
+ // List lists all ValidatingAdmissionPolicyBindings in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*admissionregistrationv1.ValidatingAdmissionPolicyBinding, err error)
+ // Get retrieves the ValidatingAdmissionPolicyBinding from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*admissionregistrationv1.ValidatingAdmissionPolicyBinding, error)
+ ValidatingAdmissionPolicyBindingListerExpansion
+}
+
+// validatingAdmissionPolicyBindingLister implements the ValidatingAdmissionPolicyBindingLister interface.
+type validatingAdmissionPolicyBindingLister struct {
+ listers.ResourceIndexer[*admissionregistrationv1.ValidatingAdmissionPolicyBinding]
+}
+
+// NewValidatingAdmissionPolicyBindingLister returns a new ValidatingAdmissionPolicyBindingLister.
+func NewValidatingAdmissionPolicyBindingLister(indexer cache.Indexer) ValidatingAdmissionPolicyBindingLister {
+ return &validatingAdmissionPolicyBindingLister{listers.New[*admissionregistrationv1.ValidatingAdmissionPolicyBinding](indexer, admissionregistrationv1.Resource("validatingadmissionpolicybinding"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1/validatingwebhookconfiguration.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1/validatingwebhookconfiguration.go
new file mode 100644
index 00000000000..50e1624c93d
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1/validatingwebhookconfiguration.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ValidatingWebhookConfigurationLister helps list ValidatingWebhookConfigurations.
+// All objects returned here must be treated as read-only.
+type ValidatingWebhookConfigurationLister interface {
+ // List lists all ValidatingWebhookConfigurations in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*admissionregistrationv1.ValidatingWebhookConfiguration, err error)
+ // Get retrieves the ValidatingWebhookConfiguration from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*admissionregistrationv1.ValidatingWebhookConfiguration, error)
+ ValidatingWebhookConfigurationListerExpansion
+}
+
+// validatingWebhookConfigurationLister implements the ValidatingWebhookConfigurationLister interface.
+type validatingWebhookConfigurationLister struct {
+ listers.ResourceIndexer[*admissionregistrationv1.ValidatingWebhookConfiguration]
+}
+
+// NewValidatingWebhookConfigurationLister returns a new ValidatingWebhookConfigurationLister.
+func NewValidatingWebhookConfigurationLister(indexer cache.Indexer) ValidatingWebhookConfigurationLister {
+ return &validatingWebhookConfigurationLister{listers.New[*admissionregistrationv1.ValidatingWebhookConfiguration](indexer, admissionregistrationv1.Resource("validatingwebhookconfiguration"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/expansion_generated.go
new file mode 100644
index 00000000000..701784de00d
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/expansion_generated.go
@@ -0,0 +1,35 @@
+/*
+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
+
+// MutatingAdmissionPolicyListerExpansion allows custom methods to be added to
+// MutatingAdmissionPolicyLister.
+type MutatingAdmissionPolicyListerExpansion interface{}
+
+// MutatingAdmissionPolicyBindingListerExpansion allows custom methods to be added to
+// MutatingAdmissionPolicyBindingLister.
+type MutatingAdmissionPolicyBindingListerExpansion interface{}
+
+// ValidatingAdmissionPolicyListerExpansion allows custom methods to be added to
+// ValidatingAdmissionPolicyLister.
+type ValidatingAdmissionPolicyListerExpansion interface{}
+
+// ValidatingAdmissionPolicyBindingListerExpansion allows custom methods to be added to
+// ValidatingAdmissionPolicyBindingLister.
+type ValidatingAdmissionPolicyBindingListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/mutatingadmissionpolicy.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/mutatingadmissionpolicy.go
new file mode 100644
index 00000000000..debeb79d244
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/mutatingadmissionpolicy.go
@@ -0,0 +1,48 @@
+/*
+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 (
+ admissionregistrationv1alpha1 "k8s.io/api/admissionregistration/v1alpha1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// MutatingAdmissionPolicyLister helps list MutatingAdmissionPolicies.
+// All objects returned here must be treated as read-only.
+type MutatingAdmissionPolicyLister interface {
+ // List lists all MutatingAdmissionPolicies in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*admissionregistrationv1alpha1.MutatingAdmissionPolicy, err error)
+ // Get retrieves the MutatingAdmissionPolicy from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*admissionregistrationv1alpha1.MutatingAdmissionPolicy, error)
+ MutatingAdmissionPolicyListerExpansion
+}
+
+// mutatingAdmissionPolicyLister implements the MutatingAdmissionPolicyLister interface.
+type mutatingAdmissionPolicyLister struct {
+ listers.ResourceIndexer[*admissionregistrationv1alpha1.MutatingAdmissionPolicy]
+}
+
+// NewMutatingAdmissionPolicyLister returns a new MutatingAdmissionPolicyLister.
+func NewMutatingAdmissionPolicyLister(indexer cache.Indexer) MutatingAdmissionPolicyLister {
+ return &mutatingAdmissionPolicyLister{listers.New[*admissionregistrationv1alpha1.MutatingAdmissionPolicy](indexer, admissionregistrationv1alpha1.Resource("mutatingadmissionpolicy"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/mutatingadmissionpolicybinding.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/mutatingadmissionpolicybinding.go
new file mode 100644
index 00000000000..bcad2904808
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/mutatingadmissionpolicybinding.go
@@ -0,0 +1,48 @@
+/*
+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 (
+ admissionregistrationv1alpha1 "k8s.io/api/admissionregistration/v1alpha1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// MutatingAdmissionPolicyBindingLister helps list MutatingAdmissionPolicyBindings.
+// All objects returned here must be treated as read-only.
+type MutatingAdmissionPolicyBindingLister interface {
+ // List lists all MutatingAdmissionPolicyBindings in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*admissionregistrationv1alpha1.MutatingAdmissionPolicyBinding, err error)
+ // Get retrieves the MutatingAdmissionPolicyBinding from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*admissionregistrationv1alpha1.MutatingAdmissionPolicyBinding, error)
+ MutatingAdmissionPolicyBindingListerExpansion
+}
+
+// mutatingAdmissionPolicyBindingLister implements the MutatingAdmissionPolicyBindingLister interface.
+type mutatingAdmissionPolicyBindingLister struct {
+ listers.ResourceIndexer[*admissionregistrationv1alpha1.MutatingAdmissionPolicyBinding]
+}
+
+// NewMutatingAdmissionPolicyBindingLister returns a new MutatingAdmissionPolicyBindingLister.
+func NewMutatingAdmissionPolicyBindingLister(indexer cache.Indexer) MutatingAdmissionPolicyBindingLister {
+ return &mutatingAdmissionPolicyBindingLister{listers.New[*admissionregistrationv1alpha1.MutatingAdmissionPolicyBinding](indexer, admissionregistrationv1alpha1.Resource("mutatingadmissionpolicybinding"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/validatingadmissionpolicy.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/validatingadmissionpolicy.go
new file mode 100644
index 00000000000..aa4d320ccd4
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/validatingadmissionpolicy.go
@@ -0,0 +1,48 @@
+/*
+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 (
+ admissionregistrationv1alpha1 "k8s.io/api/admissionregistration/v1alpha1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ValidatingAdmissionPolicyLister helps list ValidatingAdmissionPolicies.
+// All objects returned here must be treated as read-only.
+type ValidatingAdmissionPolicyLister interface {
+ // List lists all ValidatingAdmissionPolicies in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*admissionregistrationv1alpha1.ValidatingAdmissionPolicy, err error)
+ // Get retrieves the ValidatingAdmissionPolicy from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*admissionregistrationv1alpha1.ValidatingAdmissionPolicy, error)
+ ValidatingAdmissionPolicyListerExpansion
+}
+
+// validatingAdmissionPolicyLister implements the ValidatingAdmissionPolicyLister interface.
+type validatingAdmissionPolicyLister struct {
+ listers.ResourceIndexer[*admissionregistrationv1alpha1.ValidatingAdmissionPolicy]
+}
+
+// NewValidatingAdmissionPolicyLister returns a new ValidatingAdmissionPolicyLister.
+func NewValidatingAdmissionPolicyLister(indexer cache.Indexer) ValidatingAdmissionPolicyLister {
+ return &validatingAdmissionPolicyLister{listers.New[*admissionregistrationv1alpha1.ValidatingAdmissionPolicy](indexer, admissionregistrationv1alpha1.Resource("validatingadmissionpolicy"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/validatingadmissionpolicybinding.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/validatingadmissionpolicybinding.go
new file mode 100644
index 00000000000..84edc9fb777
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/validatingadmissionpolicybinding.go
@@ -0,0 +1,48 @@
+/*
+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 (
+ admissionregistrationv1alpha1 "k8s.io/api/admissionregistration/v1alpha1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ValidatingAdmissionPolicyBindingLister helps list ValidatingAdmissionPolicyBindings.
+// All objects returned here must be treated as read-only.
+type ValidatingAdmissionPolicyBindingLister interface {
+ // List lists all ValidatingAdmissionPolicyBindings in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding, err error)
+ // Get retrieves the ValidatingAdmissionPolicyBinding from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding, error)
+ ValidatingAdmissionPolicyBindingListerExpansion
+}
+
+// validatingAdmissionPolicyBindingLister implements the ValidatingAdmissionPolicyBindingLister interface.
+type validatingAdmissionPolicyBindingLister struct {
+ listers.ResourceIndexer[*admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding]
+}
+
+// NewValidatingAdmissionPolicyBindingLister returns a new ValidatingAdmissionPolicyBindingLister.
+func NewValidatingAdmissionPolicyBindingLister(indexer cache.Indexer) ValidatingAdmissionPolicyBindingLister {
+ return &validatingAdmissionPolicyBindingLister{listers.New[*admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding](indexer, admissionregistrationv1alpha1.Resource("validatingadmissionpolicybinding"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/expansion_generated.go
new file mode 100644
index 00000000000..7148781f421
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/expansion_generated.go
@@ -0,0 +1,35 @@
+/*
+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 v1beta1
+
+// MutatingWebhookConfigurationListerExpansion allows custom methods to be added to
+// MutatingWebhookConfigurationLister.
+type MutatingWebhookConfigurationListerExpansion interface{}
+
+// ValidatingAdmissionPolicyListerExpansion allows custom methods to be added to
+// ValidatingAdmissionPolicyLister.
+type ValidatingAdmissionPolicyListerExpansion interface{}
+
+// ValidatingAdmissionPolicyBindingListerExpansion allows custom methods to be added to
+// ValidatingAdmissionPolicyBindingLister.
+type ValidatingAdmissionPolicyBindingListerExpansion interface{}
+
+// ValidatingWebhookConfigurationListerExpansion allows custom methods to be added to
+// ValidatingWebhookConfigurationLister.
+type ValidatingWebhookConfigurationListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go
new file mode 100644
index 00000000000..67588f13b9c
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/mutatingwebhookconfiguration.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// MutatingWebhookConfigurationLister helps list MutatingWebhookConfigurations.
+// All objects returned here must be treated as read-only.
+type MutatingWebhookConfigurationLister interface {
+ // List lists all MutatingWebhookConfigurations in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*admissionregistrationv1beta1.MutatingWebhookConfiguration, err error)
+ // Get retrieves the MutatingWebhookConfiguration from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*admissionregistrationv1beta1.MutatingWebhookConfiguration, error)
+ MutatingWebhookConfigurationListerExpansion
+}
+
+// mutatingWebhookConfigurationLister implements the MutatingWebhookConfigurationLister interface.
+type mutatingWebhookConfigurationLister struct {
+ listers.ResourceIndexer[*admissionregistrationv1beta1.MutatingWebhookConfiguration]
+}
+
+// NewMutatingWebhookConfigurationLister returns a new MutatingWebhookConfigurationLister.
+func NewMutatingWebhookConfigurationLister(indexer cache.Indexer) MutatingWebhookConfigurationLister {
+ return &mutatingWebhookConfigurationLister{listers.New[*admissionregistrationv1beta1.MutatingWebhookConfiguration](indexer, admissionregistrationv1beta1.Resource("mutatingwebhookconfiguration"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingadmissionpolicy.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingadmissionpolicy.go
new file mode 100644
index 00000000000..38237220b87
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingadmissionpolicy.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ValidatingAdmissionPolicyLister helps list ValidatingAdmissionPolicies.
+// All objects returned here must be treated as read-only.
+type ValidatingAdmissionPolicyLister interface {
+ // List lists all ValidatingAdmissionPolicies in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*admissionregistrationv1beta1.ValidatingAdmissionPolicy, err error)
+ // Get retrieves the ValidatingAdmissionPolicy from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*admissionregistrationv1beta1.ValidatingAdmissionPolicy, error)
+ ValidatingAdmissionPolicyListerExpansion
+}
+
+// validatingAdmissionPolicyLister implements the ValidatingAdmissionPolicyLister interface.
+type validatingAdmissionPolicyLister struct {
+ listers.ResourceIndexer[*admissionregistrationv1beta1.ValidatingAdmissionPolicy]
+}
+
+// NewValidatingAdmissionPolicyLister returns a new ValidatingAdmissionPolicyLister.
+func NewValidatingAdmissionPolicyLister(indexer cache.Indexer) ValidatingAdmissionPolicyLister {
+ return &validatingAdmissionPolicyLister{listers.New[*admissionregistrationv1beta1.ValidatingAdmissionPolicy](indexer, admissionregistrationv1beta1.Resource("validatingadmissionpolicy"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingadmissionpolicybinding.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingadmissionpolicybinding.go
new file mode 100644
index 00000000000..071b1188d5f
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingadmissionpolicybinding.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ValidatingAdmissionPolicyBindingLister helps list ValidatingAdmissionPolicyBindings.
+// All objects returned here must be treated as read-only.
+type ValidatingAdmissionPolicyBindingLister interface {
+ // List lists all ValidatingAdmissionPolicyBindings in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding, err error)
+ // Get retrieves the ValidatingAdmissionPolicyBinding from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding, error)
+ ValidatingAdmissionPolicyBindingListerExpansion
+}
+
+// validatingAdmissionPolicyBindingLister implements the ValidatingAdmissionPolicyBindingLister interface.
+type validatingAdmissionPolicyBindingLister struct {
+ listers.ResourceIndexer[*admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding]
+}
+
+// NewValidatingAdmissionPolicyBindingLister returns a new ValidatingAdmissionPolicyBindingLister.
+func NewValidatingAdmissionPolicyBindingLister(indexer cache.Indexer) ValidatingAdmissionPolicyBindingLister {
+ return &validatingAdmissionPolicyBindingLister{listers.New[*admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding](indexer, admissionregistrationv1beta1.Resource("validatingadmissionpolicybinding"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingwebhookconfiguration.go b/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingwebhookconfiguration.go
new file mode 100644
index 00000000000..b16546b6d87
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingwebhookconfiguration.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ValidatingWebhookConfigurationLister helps list ValidatingWebhookConfigurations.
+// All objects returned here must be treated as read-only.
+type ValidatingWebhookConfigurationLister interface {
+ // List lists all ValidatingWebhookConfigurations in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*admissionregistrationv1beta1.ValidatingWebhookConfiguration, err error)
+ // Get retrieves the ValidatingWebhookConfiguration from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*admissionregistrationv1beta1.ValidatingWebhookConfiguration, error)
+ ValidatingWebhookConfigurationListerExpansion
+}
+
+// validatingWebhookConfigurationLister implements the ValidatingWebhookConfigurationLister interface.
+type validatingWebhookConfigurationLister struct {
+ listers.ResourceIndexer[*admissionregistrationv1beta1.ValidatingWebhookConfiguration]
+}
+
+// NewValidatingWebhookConfigurationLister returns a new ValidatingWebhookConfigurationLister.
+func NewValidatingWebhookConfigurationLister(indexer cache.Indexer) ValidatingWebhookConfigurationLister {
+ return &validatingWebhookConfigurationLister{listers.New[*admissionregistrationv1beta1.ValidatingWebhookConfiguration](indexer, admissionregistrationv1beta1.Resource("validatingwebhookconfiguration"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/apiserverinternal/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/apiserverinternal/v1alpha1/expansion_generated.go
new file mode 100644
index 00000000000..ad860c7c959
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apiserverinternal/v1alpha1/expansion_generated.go
@@ -0,0 +1,23 @@
+/*
+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
+
+// StorageVersionListerExpansion allows custom methods to be added to
+// StorageVersionLister.
+type StorageVersionListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/apiserverinternal/v1alpha1/storageversion.go b/vendor/k8s.io/client-go/listers/apiserverinternal/v1alpha1/storageversion.go
new file mode 100644
index 00000000000..1d24fb8930a
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apiserverinternal/v1alpha1/storageversion.go
@@ -0,0 +1,48 @@
+/*
+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 (
+ apiserverinternalv1alpha1 "k8s.io/api/apiserverinternal/v1alpha1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// StorageVersionLister helps list StorageVersions.
+// All objects returned here must be treated as read-only.
+type StorageVersionLister interface {
+ // List lists all StorageVersions in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*apiserverinternalv1alpha1.StorageVersion, err error)
+ // Get retrieves the StorageVersion from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*apiserverinternalv1alpha1.StorageVersion, error)
+ StorageVersionListerExpansion
+}
+
+// storageVersionLister implements the StorageVersionLister interface.
+type storageVersionLister struct {
+ listers.ResourceIndexer[*apiserverinternalv1alpha1.StorageVersion]
+}
+
+// NewStorageVersionLister returns a new StorageVersionLister.
+func NewStorageVersionLister(indexer cache.Indexer) StorageVersionLister {
+ return &storageVersionLister{listers.New[*apiserverinternalv1alpha1.StorageVersion](indexer, apiserverinternalv1alpha1.Resource("storageversion"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1/controllerrevision.go b/vendor/k8s.io/client-go/listers/apps/v1/controllerrevision.go
new file mode 100644
index 00000000000..58ab1357ef4
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1/controllerrevision.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ appsv1 "k8s.io/api/apps/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ControllerRevisionLister helps list ControllerRevisions.
+// All objects returned here must be treated as read-only.
+type ControllerRevisionLister interface {
+ // List lists all ControllerRevisions in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1.ControllerRevision, err error)
+ // ControllerRevisions returns an object that can list and get ControllerRevisions.
+ ControllerRevisions(namespace string) ControllerRevisionNamespaceLister
+ ControllerRevisionListerExpansion
+}
+
+// controllerRevisionLister implements the ControllerRevisionLister interface.
+type controllerRevisionLister struct {
+ listers.ResourceIndexer[*appsv1.ControllerRevision]
+}
+
+// NewControllerRevisionLister returns a new ControllerRevisionLister.
+func NewControllerRevisionLister(indexer cache.Indexer) ControllerRevisionLister {
+ return &controllerRevisionLister{listers.New[*appsv1.ControllerRevision](indexer, appsv1.Resource("controllerrevision"))}
+}
+
+// ControllerRevisions returns an object that can list and get ControllerRevisions.
+func (s *controllerRevisionLister) ControllerRevisions(namespace string) ControllerRevisionNamespaceLister {
+ return controllerRevisionNamespaceLister{listers.NewNamespaced[*appsv1.ControllerRevision](s.ResourceIndexer, namespace)}
+}
+
+// ControllerRevisionNamespaceLister helps list and get ControllerRevisions.
+// All objects returned here must be treated as read-only.
+type ControllerRevisionNamespaceLister interface {
+ // List lists all ControllerRevisions in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1.ControllerRevision, err error)
+ // Get retrieves the ControllerRevision from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*appsv1.ControllerRevision, error)
+ ControllerRevisionNamespaceListerExpansion
+}
+
+// controllerRevisionNamespaceLister implements the ControllerRevisionNamespaceLister
+// interface.
+type controllerRevisionNamespaceLister struct {
+ listers.ResourceIndexer[*appsv1.ControllerRevision]
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1/daemonset.go b/vendor/k8s.io/client-go/listers/apps/v1/daemonset.go
new file mode 100644
index 00000000000..b6ba54f807f
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1/daemonset.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ appsv1 "k8s.io/api/apps/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DaemonSetLister helps list DaemonSets.
+// All objects returned here must be treated as read-only.
+type DaemonSetLister interface {
+ // List lists all DaemonSets in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1.DaemonSet, err error)
+ // DaemonSets returns an object that can list and get DaemonSets.
+ DaemonSets(namespace string) DaemonSetNamespaceLister
+ DaemonSetListerExpansion
+}
+
+// daemonSetLister implements the DaemonSetLister interface.
+type daemonSetLister struct {
+ listers.ResourceIndexer[*appsv1.DaemonSet]
+}
+
+// NewDaemonSetLister returns a new DaemonSetLister.
+func NewDaemonSetLister(indexer cache.Indexer) DaemonSetLister {
+ return &daemonSetLister{listers.New[*appsv1.DaemonSet](indexer, appsv1.Resource("daemonset"))}
+}
+
+// DaemonSets returns an object that can list and get DaemonSets.
+func (s *daemonSetLister) DaemonSets(namespace string) DaemonSetNamespaceLister {
+ return daemonSetNamespaceLister{listers.NewNamespaced[*appsv1.DaemonSet](s.ResourceIndexer, namespace)}
+}
+
+// DaemonSetNamespaceLister helps list and get DaemonSets.
+// All objects returned here must be treated as read-only.
+type DaemonSetNamespaceLister interface {
+ // List lists all DaemonSets in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1.DaemonSet, err error)
+ // Get retrieves the DaemonSet from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*appsv1.DaemonSet, error)
+ DaemonSetNamespaceListerExpansion
+}
+
+// daemonSetNamespaceLister implements the DaemonSetNamespaceLister
+// interface.
+type daemonSetNamespaceLister struct {
+ listers.ResourceIndexer[*appsv1.DaemonSet]
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1/daemonset_expansion.go b/vendor/k8s.io/client-go/listers/apps/v1/daemonset_expansion.go
new file mode 100644
index 00000000000..667d6fb88ea
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1/daemonset_expansion.go
@@ -0,0 +1,114 @@
+/*
+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 v1
+
+import (
+ "fmt"
+
+ apps "k8s.io/api/apps/v1"
+ "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/labels"
+)
+
+// DaemonSetListerExpansion allows custom methods to be added to
+// DaemonSetLister.
+type DaemonSetListerExpansion interface {
+ GetPodDaemonSets(pod *v1.Pod) ([]*apps.DaemonSet, error)
+ GetHistoryDaemonSets(history *apps.ControllerRevision) ([]*apps.DaemonSet, error)
+}
+
+// DaemonSetNamespaceListerExpansion allows custom methods to be added to
+// DaemonSetNamespaceLister.
+type DaemonSetNamespaceListerExpansion interface{}
+
+// GetPodDaemonSets returns a list of DaemonSets that potentially match a pod.
+// Only the one specified in the Pod's ControllerRef will actually manage it.
+// Returns an error only if no matching DaemonSets are found.
+func (s *daemonSetLister) GetPodDaemonSets(pod *v1.Pod) ([]*apps.DaemonSet, error) {
+ var selector labels.Selector
+ var daemonSet *apps.DaemonSet
+
+ if len(pod.Labels) == 0 {
+ return nil, fmt.Errorf("no daemon sets found for pod %v because it has no labels", pod.Name)
+ }
+
+ list, err := s.DaemonSets(pod.Namespace).List(labels.Everything())
+ if err != nil {
+ return nil, err
+ }
+
+ var daemonSets []*apps.DaemonSet
+ for i := range list {
+ daemonSet = list[i]
+ if daemonSet.Namespace != pod.Namespace {
+ continue
+ }
+ selector, err = metav1.LabelSelectorAsSelector(daemonSet.Spec.Selector)
+ if err != nil {
+ // This object has an invalid selector, it does not match the pod
+ continue
+ }
+
+ // If a daemonSet with a nil or empty selector creeps in, it should match nothing, not everything.
+ if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) {
+ continue
+ }
+ daemonSets = append(daemonSets, daemonSet)
+ }
+
+ if len(daemonSets) == 0 {
+ return nil, fmt.Errorf("could not find daemon set for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
+ }
+
+ return daemonSets, nil
+}
+
+// GetHistoryDaemonSets returns a list of DaemonSets that potentially
+// match a ControllerRevision. Only the one specified in the ControllerRevision's ControllerRef
+// will actually manage it.
+// Returns an error only if no matching DaemonSets are found.
+func (s *daemonSetLister) GetHistoryDaemonSets(history *apps.ControllerRevision) ([]*apps.DaemonSet, error) {
+ if len(history.Labels) == 0 {
+ return nil, fmt.Errorf("no DaemonSet found for ControllerRevision %s because it has no labels", history.Name)
+ }
+
+ list, err := s.DaemonSets(history.Namespace).List(labels.Everything())
+ if err != nil {
+ return nil, err
+ }
+
+ var daemonSets []*apps.DaemonSet
+ for _, ds := range list {
+ selector, err := metav1.LabelSelectorAsSelector(ds.Spec.Selector)
+ if err != nil {
+ // This object has an invalid selector, it does not match the history
+ continue
+ }
+ // If a DaemonSet with a nil or empty selector creeps in, it should match nothing, not everything.
+ if selector.Empty() || !selector.Matches(labels.Set(history.Labels)) {
+ continue
+ }
+ daemonSets = append(daemonSets, ds)
+ }
+
+ if len(daemonSets) == 0 {
+ return nil, fmt.Errorf("could not find DaemonSets for ControllerRevision %s in namespace %s with labels: %v", history.Name, history.Namespace, history.Labels)
+ }
+
+ return daemonSets, nil
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1/deployment.go b/vendor/k8s.io/client-go/listers/apps/v1/deployment.go
new file mode 100644
index 00000000000..ed1b899e27a
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1/deployment.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ appsv1 "k8s.io/api/apps/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DeploymentLister helps list Deployments.
+// All objects returned here must be treated as read-only.
+type DeploymentLister interface {
+ // List lists all Deployments in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1.Deployment, err error)
+ // Deployments returns an object that can list and get Deployments.
+ Deployments(namespace string) DeploymentNamespaceLister
+ DeploymentListerExpansion
+}
+
+// deploymentLister implements the DeploymentLister interface.
+type deploymentLister struct {
+ listers.ResourceIndexer[*appsv1.Deployment]
+}
+
+// NewDeploymentLister returns a new DeploymentLister.
+func NewDeploymentLister(indexer cache.Indexer) DeploymentLister {
+ return &deploymentLister{listers.New[*appsv1.Deployment](indexer, appsv1.Resource("deployment"))}
+}
+
+// Deployments returns an object that can list and get Deployments.
+func (s *deploymentLister) Deployments(namespace string) DeploymentNamespaceLister {
+ return deploymentNamespaceLister{listers.NewNamespaced[*appsv1.Deployment](s.ResourceIndexer, namespace)}
+}
+
+// DeploymentNamespaceLister helps list and get Deployments.
+// All objects returned here must be treated as read-only.
+type DeploymentNamespaceLister interface {
+ // List lists all Deployments in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1.Deployment, err error)
+ // Get retrieves the Deployment from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*appsv1.Deployment, error)
+ DeploymentNamespaceListerExpansion
+}
+
+// deploymentNamespaceLister implements the DeploymentNamespaceLister
+// interface.
+type deploymentNamespaceLister struct {
+ listers.ResourceIndexer[*appsv1.Deployment]
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/apps/v1/expansion_generated.go
new file mode 100644
index 00000000000..0c357589d07
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1/expansion_generated.go
@@ -0,0 +1,35 @@
+/*
+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 v1
+
+// ControllerRevisionListerExpansion allows custom methods to be added to
+// ControllerRevisionLister.
+type ControllerRevisionListerExpansion interface{}
+
+// ControllerRevisionNamespaceListerExpansion allows custom methods to be added to
+// ControllerRevisionNamespaceLister.
+type ControllerRevisionNamespaceListerExpansion interface{}
+
+// DeploymentListerExpansion allows custom methods to be added to
+// DeploymentLister.
+type DeploymentListerExpansion interface{}
+
+// DeploymentNamespaceListerExpansion allows custom methods to be added to
+// DeploymentNamespaceLister.
+type DeploymentNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1/replicaset.go b/vendor/k8s.io/client-go/listers/apps/v1/replicaset.go
new file mode 100644
index 00000000000..68308e3526b
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1/replicaset.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ appsv1 "k8s.io/api/apps/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ReplicaSetLister helps list ReplicaSets.
+// All objects returned here must be treated as read-only.
+type ReplicaSetLister interface {
+ // List lists all ReplicaSets in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1.ReplicaSet, err error)
+ // ReplicaSets returns an object that can list and get ReplicaSets.
+ ReplicaSets(namespace string) ReplicaSetNamespaceLister
+ ReplicaSetListerExpansion
+}
+
+// replicaSetLister implements the ReplicaSetLister interface.
+type replicaSetLister struct {
+ listers.ResourceIndexer[*appsv1.ReplicaSet]
+}
+
+// NewReplicaSetLister returns a new ReplicaSetLister.
+func NewReplicaSetLister(indexer cache.Indexer) ReplicaSetLister {
+ return &replicaSetLister{listers.New[*appsv1.ReplicaSet](indexer, appsv1.Resource("replicaset"))}
+}
+
+// ReplicaSets returns an object that can list and get ReplicaSets.
+func (s *replicaSetLister) ReplicaSets(namespace string) ReplicaSetNamespaceLister {
+ return replicaSetNamespaceLister{listers.NewNamespaced[*appsv1.ReplicaSet](s.ResourceIndexer, namespace)}
+}
+
+// ReplicaSetNamespaceLister helps list and get ReplicaSets.
+// All objects returned here must be treated as read-only.
+type ReplicaSetNamespaceLister interface {
+ // List lists all ReplicaSets in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1.ReplicaSet, err error)
+ // Get retrieves the ReplicaSet from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*appsv1.ReplicaSet, error)
+ ReplicaSetNamespaceListerExpansion
+}
+
+// replicaSetNamespaceLister implements the ReplicaSetNamespaceLister
+// interface.
+type replicaSetNamespaceLister struct {
+ listers.ResourceIndexer[*appsv1.ReplicaSet]
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1/replicaset_expansion.go b/vendor/k8s.io/client-go/listers/apps/v1/replicaset_expansion.go
new file mode 100644
index 00000000000..8e093de0a01
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1/replicaset_expansion.go
@@ -0,0 +1,74 @@
+/*
+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 v1
+
+import (
+ "fmt"
+
+ apps "k8s.io/api/apps/v1"
+ "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/labels"
+)
+
+// ReplicaSetListerExpansion allows custom methods to be added to
+// ReplicaSetLister.
+type ReplicaSetListerExpansion interface {
+ GetPodReplicaSets(pod *v1.Pod) ([]*apps.ReplicaSet, error)
+}
+
+// ReplicaSetNamespaceListerExpansion allows custom methods to be added to
+// ReplicaSetNamespaceLister.
+type ReplicaSetNamespaceListerExpansion interface{}
+
+// GetPodReplicaSets returns a list of ReplicaSets that potentially match a pod.
+// Only the one specified in the Pod's ControllerRef will actually manage it.
+// Returns an error only if no matching ReplicaSets are found.
+func (s *replicaSetLister) GetPodReplicaSets(pod *v1.Pod) ([]*apps.ReplicaSet, error) {
+ if len(pod.Labels) == 0 {
+ return nil, fmt.Errorf("no ReplicaSets found for pod %v because it has no labels", pod.Name)
+ }
+
+ list, err := s.ReplicaSets(pod.Namespace).List(labels.Everything())
+ if err != nil {
+ return nil, err
+ }
+
+ var rss []*apps.ReplicaSet
+ for _, rs := range list {
+ if rs.Namespace != pod.Namespace {
+ continue
+ }
+ selector, err := metav1.LabelSelectorAsSelector(rs.Spec.Selector)
+ if err != nil {
+ // This object has an invalid selector, it does not match the pod
+ continue
+ }
+
+ // If a ReplicaSet with a nil or empty selector creeps in, it should match nothing, not everything.
+ if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) {
+ continue
+ }
+ rss = append(rss, rs)
+ }
+
+ if len(rss) == 0 {
+ return nil, fmt.Errorf("could not find ReplicaSet for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
+ }
+
+ return rss, nil
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1/statefulset.go b/vendor/k8s.io/client-go/listers/apps/v1/statefulset.go
new file mode 100644
index 00000000000..7366b5a3d14
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1/statefulset.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ appsv1 "k8s.io/api/apps/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// StatefulSetLister helps list StatefulSets.
+// All objects returned here must be treated as read-only.
+type StatefulSetLister interface {
+ // List lists all StatefulSets in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1.StatefulSet, err error)
+ // StatefulSets returns an object that can list and get StatefulSets.
+ StatefulSets(namespace string) StatefulSetNamespaceLister
+ StatefulSetListerExpansion
+}
+
+// statefulSetLister implements the StatefulSetLister interface.
+type statefulSetLister struct {
+ listers.ResourceIndexer[*appsv1.StatefulSet]
+}
+
+// NewStatefulSetLister returns a new StatefulSetLister.
+func NewStatefulSetLister(indexer cache.Indexer) StatefulSetLister {
+ return &statefulSetLister{listers.New[*appsv1.StatefulSet](indexer, appsv1.Resource("statefulset"))}
+}
+
+// StatefulSets returns an object that can list and get StatefulSets.
+func (s *statefulSetLister) StatefulSets(namespace string) StatefulSetNamespaceLister {
+ return statefulSetNamespaceLister{listers.NewNamespaced[*appsv1.StatefulSet](s.ResourceIndexer, namespace)}
+}
+
+// StatefulSetNamespaceLister helps list and get StatefulSets.
+// All objects returned here must be treated as read-only.
+type StatefulSetNamespaceLister interface {
+ // List lists all StatefulSets in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1.StatefulSet, err error)
+ // Get retrieves the StatefulSet from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*appsv1.StatefulSet, error)
+ StatefulSetNamespaceListerExpansion
+}
+
+// statefulSetNamespaceLister implements the StatefulSetNamespaceLister
+// interface.
+type statefulSetNamespaceLister struct {
+ listers.ResourceIndexer[*appsv1.StatefulSet]
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1/statefulset_expansion.go b/vendor/k8s.io/client-go/listers/apps/v1/statefulset_expansion.go
new file mode 100644
index 00000000000..e79f8a2b46a
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1/statefulset_expansion.go
@@ -0,0 +1,78 @@
+/*
+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 v1
+
+import (
+ "fmt"
+
+ apps "k8s.io/api/apps/v1"
+ "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/labels"
+)
+
+// StatefulSetListerExpansion allows custom methods to be added to
+// StatefulSetLister.
+type StatefulSetListerExpansion interface {
+ GetPodStatefulSets(pod *v1.Pod) ([]*apps.StatefulSet, error)
+}
+
+// StatefulSetNamespaceListerExpansion allows custom methods to be added to
+// StatefulSetNamespaceLister.
+type StatefulSetNamespaceListerExpansion interface{}
+
+// GetPodStatefulSets returns a list of StatefulSets that potentially match a pod.
+// Only the one specified in the Pod's ControllerRef will actually manage it.
+// Returns an error only if no matching StatefulSets are found.
+func (s *statefulSetLister) GetPodStatefulSets(pod *v1.Pod) ([]*apps.StatefulSet, error) {
+ var selector labels.Selector
+ var ps *apps.StatefulSet
+
+ if len(pod.Labels) == 0 {
+ return nil, fmt.Errorf("no StatefulSets found for pod %v because it has no labels", pod.Name)
+ }
+
+ list, err := s.StatefulSets(pod.Namespace).List(labels.Everything())
+ if err != nil {
+ return nil, err
+ }
+
+ var psList []*apps.StatefulSet
+ for i := range list {
+ ps = list[i]
+ if ps.Namespace != pod.Namespace {
+ continue
+ }
+ selector, err = metav1.LabelSelectorAsSelector(ps.Spec.Selector)
+ if err != nil {
+ // This object has an invalid selector, it does not match the pod
+ continue
+ }
+
+ // If a StatefulSet with a nil or empty selector creeps in, it should match nothing, not everything.
+ if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) {
+ continue
+ }
+ psList = append(psList, ps)
+ }
+
+ if len(psList) == 0 {
+ return nil, fmt.Errorf("could not find StatefulSet for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
+ }
+
+ return psList, nil
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta1/controllerrevision.go b/vendor/k8s.io/client-go/listers/apps/v1beta1/controllerrevision.go
new file mode 100644
index 00000000000..7c7f530b618
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1beta1/controllerrevision.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ appsv1beta1 "k8s.io/api/apps/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ControllerRevisionLister helps list ControllerRevisions.
+// All objects returned here must be treated as read-only.
+type ControllerRevisionLister interface {
+ // List lists all ControllerRevisions in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1beta1.ControllerRevision, err error)
+ // ControllerRevisions returns an object that can list and get ControllerRevisions.
+ ControllerRevisions(namespace string) ControllerRevisionNamespaceLister
+ ControllerRevisionListerExpansion
+}
+
+// controllerRevisionLister implements the ControllerRevisionLister interface.
+type controllerRevisionLister struct {
+ listers.ResourceIndexer[*appsv1beta1.ControllerRevision]
+}
+
+// NewControllerRevisionLister returns a new ControllerRevisionLister.
+func NewControllerRevisionLister(indexer cache.Indexer) ControllerRevisionLister {
+ return &controllerRevisionLister{listers.New[*appsv1beta1.ControllerRevision](indexer, appsv1beta1.Resource("controllerrevision"))}
+}
+
+// ControllerRevisions returns an object that can list and get ControllerRevisions.
+func (s *controllerRevisionLister) ControllerRevisions(namespace string) ControllerRevisionNamespaceLister {
+ return controllerRevisionNamespaceLister{listers.NewNamespaced[*appsv1beta1.ControllerRevision](s.ResourceIndexer, namespace)}
+}
+
+// ControllerRevisionNamespaceLister helps list and get ControllerRevisions.
+// All objects returned here must be treated as read-only.
+type ControllerRevisionNamespaceLister interface {
+ // List lists all ControllerRevisions in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1beta1.ControllerRevision, err error)
+ // Get retrieves the ControllerRevision from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*appsv1beta1.ControllerRevision, error)
+ ControllerRevisionNamespaceListerExpansion
+}
+
+// controllerRevisionNamespaceLister implements the ControllerRevisionNamespaceLister
+// interface.
+type controllerRevisionNamespaceLister struct {
+ listers.ResourceIndexer[*appsv1beta1.ControllerRevision]
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta1/deployment.go b/vendor/k8s.io/client-go/listers/apps/v1beta1/deployment.go
new file mode 100644
index 00000000000..6803fc8cd0d
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1beta1/deployment.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ appsv1beta1 "k8s.io/api/apps/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DeploymentLister helps list Deployments.
+// All objects returned here must be treated as read-only.
+type DeploymentLister interface {
+ // List lists all Deployments in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1beta1.Deployment, err error)
+ // Deployments returns an object that can list and get Deployments.
+ Deployments(namespace string) DeploymentNamespaceLister
+ DeploymentListerExpansion
+}
+
+// deploymentLister implements the DeploymentLister interface.
+type deploymentLister struct {
+ listers.ResourceIndexer[*appsv1beta1.Deployment]
+}
+
+// NewDeploymentLister returns a new DeploymentLister.
+func NewDeploymentLister(indexer cache.Indexer) DeploymentLister {
+ return &deploymentLister{listers.New[*appsv1beta1.Deployment](indexer, appsv1beta1.Resource("deployment"))}
+}
+
+// Deployments returns an object that can list and get Deployments.
+func (s *deploymentLister) Deployments(namespace string) DeploymentNamespaceLister {
+ return deploymentNamespaceLister{listers.NewNamespaced[*appsv1beta1.Deployment](s.ResourceIndexer, namespace)}
+}
+
+// DeploymentNamespaceLister helps list and get Deployments.
+// All objects returned here must be treated as read-only.
+type DeploymentNamespaceLister interface {
+ // List lists all Deployments in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1beta1.Deployment, err error)
+ // Get retrieves the Deployment from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*appsv1beta1.Deployment, error)
+ DeploymentNamespaceListerExpansion
+}
+
+// deploymentNamespaceLister implements the DeploymentNamespaceLister
+// interface.
+type deploymentNamespaceLister struct {
+ listers.ResourceIndexer[*appsv1beta1.Deployment]
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/apps/v1beta1/expansion_generated.go
new file mode 100644
index 00000000000..c73cf98c7a5
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1beta1/expansion_generated.go
@@ -0,0 +1,35 @@
+/*
+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 v1beta1
+
+// ControllerRevisionListerExpansion allows custom methods to be added to
+// ControllerRevisionLister.
+type ControllerRevisionListerExpansion interface{}
+
+// ControllerRevisionNamespaceListerExpansion allows custom methods to be added to
+// ControllerRevisionNamespaceLister.
+type ControllerRevisionNamespaceListerExpansion interface{}
+
+// DeploymentListerExpansion allows custom methods to be added to
+// DeploymentLister.
+type DeploymentListerExpansion interface{}
+
+// DeploymentNamespaceListerExpansion allows custom methods to be added to
+// DeploymentNamespaceLister.
+type DeploymentNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta1/statefulset.go b/vendor/k8s.io/client-go/listers/apps/v1beta1/statefulset.go
new file mode 100644
index 00000000000..040b65dc12e
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1beta1/statefulset.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ appsv1beta1 "k8s.io/api/apps/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// StatefulSetLister helps list StatefulSets.
+// All objects returned here must be treated as read-only.
+type StatefulSetLister interface {
+ // List lists all StatefulSets in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1beta1.StatefulSet, err error)
+ // StatefulSets returns an object that can list and get StatefulSets.
+ StatefulSets(namespace string) StatefulSetNamespaceLister
+ StatefulSetListerExpansion
+}
+
+// statefulSetLister implements the StatefulSetLister interface.
+type statefulSetLister struct {
+ listers.ResourceIndexer[*appsv1beta1.StatefulSet]
+}
+
+// NewStatefulSetLister returns a new StatefulSetLister.
+func NewStatefulSetLister(indexer cache.Indexer) StatefulSetLister {
+ return &statefulSetLister{listers.New[*appsv1beta1.StatefulSet](indexer, appsv1beta1.Resource("statefulset"))}
+}
+
+// StatefulSets returns an object that can list and get StatefulSets.
+func (s *statefulSetLister) StatefulSets(namespace string) StatefulSetNamespaceLister {
+ return statefulSetNamespaceLister{listers.NewNamespaced[*appsv1beta1.StatefulSet](s.ResourceIndexer, namespace)}
+}
+
+// StatefulSetNamespaceLister helps list and get StatefulSets.
+// All objects returned here must be treated as read-only.
+type StatefulSetNamespaceLister interface {
+ // List lists all StatefulSets in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1beta1.StatefulSet, err error)
+ // Get retrieves the StatefulSet from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*appsv1beta1.StatefulSet, error)
+ StatefulSetNamespaceListerExpansion
+}
+
+// statefulSetNamespaceLister implements the StatefulSetNamespaceLister
+// interface.
+type statefulSetNamespaceLister struct {
+ listers.ResourceIndexer[*appsv1beta1.StatefulSet]
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta1/statefulset_expansion.go b/vendor/k8s.io/client-go/listers/apps/v1beta1/statefulset_expansion.go
new file mode 100644
index 00000000000..7d2c4d9b07a
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1beta1/statefulset_expansion.go
@@ -0,0 +1,78 @@
+/*
+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 v1beta1
+
+import (
+ "fmt"
+
+ apps "k8s.io/api/apps/v1beta1"
+ "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/labels"
+)
+
+// StatefulSetListerExpansion allows custom methods to be added to
+// StatefulSetLister.
+type StatefulSetListerExpansion interface {
+ GetPodStatefulSets(pod *v1.Pod) ([]*apps.StatefulSet, error)
+}
+
+// StatefulSetNamespaceListerExpansion allows custom methods to be added to
+// StatefulSetNamespaceLister.
+type StatefulSetNamespaceListerExpansion interface{}
+
+// GetPodStatefulSets returns a list of StatefulSets that potentially match a pod.
+// Only the one specified in the Pod's ControllerRef will actually manage it.
+// Returns an error only if no matching StatefulSets are found.
+func (s *statefulSetLister) GetPodStatefulSets(pod *v1.Pod) ([]*apps.StatefulSet, error) {
+ var selector labels.Selector
+ var ps *apps.StatefulSet
+
+ if len(pod.Labels) == 0 {
+ return nil, fmt.Errorf("no StatefulSets found for pod %v because it has no labels", pod.Name)
+ }
+
+ list, err := s.StatefulSets(pod.Namespace).List(labels.Everything())
+ if err != nil {
+ return nil, err
+ }
+
+ var psList []*apps.StatefulSet
+ for i := range list {
+ ps = list[i]
+ if ps.Namespace != pod.Namespace {
+ continue
+ }
+ selector, err = metav1.LabelSelectorAsSelector(ps.Spec.Selector)
+ if err != nil {
+ // This object has an invalid selector, it does not match the pod
+ continue
+ }
+
+ // If a StatefulSet with a nil or empty selector creeps in, it should match nothing, not everything.
+ if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) {
+ continue
+ }
+ psList = append(psList, ps)
+ }
+
+ if len(psList) == 0 {
+ return nil, fmt.Errorf("could not find StatefulSet for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
+ }
+
+ return psList, nil
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/controllerrevision.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/controllerrevision.go
new file mode 100644
index 00000000000..9e72122f33e
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1beta2/controllerrevision.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta2
+
+import (
+ appsv1beta2 "k8s.io/api/apps/v1beta2"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ControllerRevisionLister helps list ControllerRevisions.
+// All objects returned here must be treated as read-only.
+type ControllerRevisionLister interface {
+ // List lists all ControllerRevisions in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1beta2.ControllerRevision, err error)
+ // ControllerRevisions returns an object that can list and get ControllerRevisions.
+ ControllerRevisions(namespace string) ControllerRevisionNamespaceLister
+ ControllerRevisionListerExpansion
+}
+
+// controllerRevisionLister implements the ControllerRevisionLister interface.
+type controllerRevisionLister struct {
+ listers.ResourceIndexer[*appsv1beta2.ControllerRevision]
+}
+
+// NewControllerRevisionLister returns a new ControllerRevisionLister.
+func NewControllerRevisionLister(indexer cache.Indexer) ControllerRevisionLister {
+ return &controllerRevisionLister{listers.New[*appsv1beta2.ControllerRevision](indexer, appsv1beta2.Resource("controllerrevision"))}
+}
+
+// ControllerRevisions returns an object that can list and get ControllerRevisions.
+func (s *controllerRevisionLister) ControllerRevisions(namespace string) ControllerRevisionNamespaceLister {
+ return controllerRevisionNamespaceLister{listers.NewNamespaced[*appsv1beta2.ControllerRevision](s.ResourceIndexer, namespace)}
+}
+
+// ControllerRevisionNamespaceLister helps list and get ControllerRevisions.
+// All objects returned here must be treated as read-only.
+type ControllerRevisionNamespaceLister interface {
+ // List lists all ControllerRevisions in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1beta2.ControllerRevision, err error)
+ // Get retrieves the ControllerRevision from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*appsv1beta2.ControllerRevision, error)
+ ControllerRevisionNamespaceListerExpansion
+}
+
+// controllerRevisionNamespaceLister implements the ControllerRevisionNamespaceLister
+// interface.
+type controllerRevisionNamespaceLister struct {
+ listers.ResourceIndexer[*appsv1beta2.ControllerRevision]
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/daemonset.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/daemonset.go
new file mode 100644
index 00000000000..16b76b61304
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1beta2/daemonset.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta2
+
+import (
+ appsv1beta2 "k8s.io/api/apps/v1beta2"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DaemonSetLister helps list DaemonSets.
+// All objects returned here must be treated as read-only.
+type DaemonSetLister interface {
+ // List lists all DaemonSets in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1beta2.DaemonSet, err error)
+ // DaemonSets returns an object that can list and get DaemonSets.
+ DaemonSets(namespace string) DaemonSetNamespaceLister
+ DaemonSetListerExpansion
+}
+
+// daemonSetLister implements the DaemonSetLister interface.
+type daemonSetLister struct {
+ listers.ResourceIndexer[*appsv1beta2.DaemonSet]
+}
+
+// NewDaemonSetLister returns a new DaemonSetLister.
+func NewDaemonSetLister(indexer cache.Indexer) DaemonSetLister {
+ return &daemonSetLister{listers.New[*appsv1beta2.DaemonSet](indexer, appsv1beta2.Resource("daemonset"))}
+}
+
+// DaemonSets returns an object that can list and get DaemonSets.
+func (s *daemonSetLister) DaemonSets(namespace string) DaemonSetNamespaceLister {
+ return daemonSetNamespaceLister{listers.NewNamespaced[*appsv1beta2.DaemonSet](s.ResourceIndexer, namespace)}
+}
+
+// DaemonSetNamespaceLister helps list and get DaemonSets.
+// All objects returned here must be treated as read-only.
+type DaemonSetNamespaceLister interface {
+ // List lists all DaemonSets in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1beta2.DaemonSet, err error)
+ // Get retrieves the DaemonSet from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*appsv1beta2.DaemonSet, error)
+ DaemonSetNamespaceListerExpansion
+}
+
+// daemonSetNamespaceLister implements the DaemonSetNamespaceLister
+// interface.
+type daemonSetNamespaceLister struct {
+ listers.ResourceIndexer[*appsv1beta2.DaemonSet]
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/daemonset_expansion.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/daemonset_expansion.go
new file mode 100644
index 00000000000..e722b63b680
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1beta2/daemonset_expansion.go
@@ -0,0 +1,114 @@
+/*
+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 v1beta2
+
+import (
+ "fmt"
+
+ apps "k8s.io/api/apps/v1beta2"
+ "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/labels"
+)
+
+// DaemonSetListerExpansion allows custom methods to be added to
+// DaemonSetLister.
+type DaemonSetListerExpansion interface {
+ GetPodDaemonSets(pod *v1.Pod) ([]*apps.DaemonSet, error)
+ GetHistoryDaemonSets(history *apps.ControllerRevision) ([]*apps.DaemonSet, error)
+}
+
+// DaemonSetNamespaceListerExpansion allows custom methods to be added to
+// DaemonSetNamespaceLister.
+type DaemonSetNamespaceListerExpansion interface{}
+
+// GetPodDaemonSets returns a list of DaemonSets that potentially match a pod.
+// Only the one specified in the Pod's ControllerRef will actually manage it.
+// Returns an error only if no matching DaemonSets are found.
+func (s *daemonSetLister) GetPodDaemonSets(pod *v1.Pod) ([]*apps.DaemonSet, error) {
+ var selector labels.Selector
+ var daemonSet *apps.DaemonSet
+
+ if len(pod.Labels) == 0 {
+ return nil, fmt.Errorf("no daemon sets found for pod %v because it has no labels", pod.Name)
+ }
+
+ list, err := s.DaemonSets(pod.Namespace).List(labels.Everything())
+ if err != nil {
+ return nil, err
+ }
+
+ var daemonSets []*apps.DaemonSet
+ for i := range list {
+ daemonSet = list[i]
+ if daemonSet.Namespace != pod.Namespace {
+ continue
+ }
+ selector, err = metav1.LabelSelectorAsSelector(daemonSet.Spec.Selector)
+ if err != nil {
+ // This object has an invalid selector, it does not match the pod
+ continue
+ }
+
+ // If a daemonSet with a nil or empty selector creeps in, it should match nothing, not everything.
+ if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) {
+ continue
+ }
+ daemonSets = append(daemonSets, daemonSet)
+ }
+
+ if len(daemonSets) == 0 {
+ return nil, fmt.Errorf("could not find daemon set for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
+ }
+
+ return daemonSets, nil
+}
+
+// GetHistoryDaemonSets returns a list of DaemonSets that potentially
+// match a ControllerRevision. Only the one specified in the ControllerRevision's ControllerRef
+// will actually manage it.
+// Returns an error only if no matching DaemonSets are found.
+func (s *daemonSetLister) GetHistoryDaemonSets(history *apps.ControllerRevision) ([]*apps.DaemonSet, error) {
+ if len(history.Labels) == 0 {
+ return nil, fmt.Errorf("no DaemonSet found for ControllerRevision %s because it has no labels", history.Name)
+ }
+
+ list, err := s.DaemonSets(history.Namespace).List(labels.Everything())
+ if err != nil {
+ return nil, err
+ }
+
+ var daemonSets []*apps.DaemonSet
+ for _, ds := range list {
+ selector, err := metav1.LabelSelectorAsSelector(ds.Spec.Selector)
+ if err != nil {
+ // This object has an invalid selector, it does not match the history object
+ continue
+ }
+ // If a DaemonSet with a nil or empty selector creeps in, it should match nothing, not everything.
+ if selector.Empty() || !selector.Matches(labels.Set(history.Labels)) {
+ continue
+ }
+ daemonSets = append(daemonSets, ds)
+ }
+
+ if len(daemonSets) == 0 {
+ return nil, fmt.Errorf("could not find DaemonSets for ControllerRevision %s in namespace %s with labels: %v", history.Name, history.Namespace, history.Labels)
+ }
+
+ return daemonSets, nil
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/deployment.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/deployment.go
new file mode 100644
index 00000000000..c0b5b2ab1b1
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1beta2/deployment.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta2
+
+import (
+ appsv1beta2 "k8s.io/api/apps/v1beta2"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DeploymentLister helps list Deployments.
+// All objects returned here must be treated as read-only.
+type DeploymentLister interface {
+ // List lists all Deployments in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1beta2.Deployment, err error)
+ // Deployments returns an object that can list and get Deployments.
+ Deployments(namespace string) DeploymentNamespaceLister
+ DeploymentListerExpansion
+}
+
+// deploymentLister implements the DeploymentLister interface.
+type deploymentLister struct {
+ listers.ResourceIndexer[*appsv1beta2.Deployment]
+}
+
+// NewDeploymentLister returns a new DeploymentLister.
+func NewDeploymentLister(indexer cache.Indexer) DeploymentLister {
+ return &deploymentLister{listers.New[*appsv1beta2.Deployment](indexer, appsv1beta2.Resource("deployment"))}
+}
+
+// Deployments returns an object that can list and get Deployments.
+func (s *deploymentLister) Deployments(namespace string) DeploymentNamespaceLister {
+ return deploymentNamespaceLister{listers.NewNamespaced[*appsv1beta2.Deployment](s.ResourceIndexer, namespace)}
+}
+
+// DeploymentNamespaceLister helps list and get Deployments.
+// All objects returned here must be treated as read-only.
+type DeploymentNamespaceLister interface {
+ // List lists all Deployments in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1beta2.Deployment, err error)
+ // Get retrieves the Deployment from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*appsv1beta2.Deployment, error)
+ DeploymentNamespaceListerExpansion
+}
+
+// deploymentNamespaceLister implements the DeploymentNamespaceLister
+// interface.
+type deploymentNamespaceLister struct {
+ listers.ResourceIndexer[*appsv1beta2.Deployment]
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/expansion_generated.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/expansion_generated.go
new file mode 100644
index 00000000000..b6d202118ed
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1beta2/expansion_generated.go
@@ -0,0 +1,35 @@
+/*
+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 v1beta2
+
+// ControllerRevisionListerExpansion allows custom methods to be added to
+// ControllerRevisionLister.
+type ControllerRevisionListerExpansion interface{}
+
+// ControllerRevisionNamespaceListerExpansion allows custom methods to be added to
+// ControllerRevisionNamespaceLister.
+type ControllerRevisionNamespaceListerExpansion interface{}
+
+// DeploymentListerExpansion allows custom methods to be added to
+// DeploymentLister.
+type DeploymentListerExpansion interface{}
+
+// DeploymentNamespaceListerExpansion allows custom methods to be added to
+// DeploymentNamespaceLister.
+type DeploymentNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/replicaset.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/replicaset.go
new file mode 100644
index 00000000000..7d5f3c80ede
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1beta2/replicaset.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta2
+
+import (
+ appsv1beta2 "k8s.io/api/apps/v1beta2"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ReplicaSetLister helps list ReplicaSets.
+// All objects returned here must be treated as read-only.
+type ReplicaSetLister interface {
+ // List lists all ReplicaSets in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1beta2.ReplicaSet, err error)
+ // ReplicaSets returns an object that can list and get ReplicaSets.
+ ReplicaSets(namespace string) ReplicaSetNamespaceLister
+ ReplicaSetListerExpansion
+}
+
+// replicaSetLister implements the ReplicaSetLister interface.
+type replicaSetLister struct {
+ listers.ResourceIndexer[*appsv1beta2.ReplicaSet]
+}
+
+// NewReplicaSetLister returns a new ReplicaSetLister.
+func NewReplicaSetLister(indexer cache.Indexer) ReplicaSetLister {
+ return &replicaSetLister{listers.New[*appsv1beta2.ReplicaSet](indexer, appsv1beta2.Resource("replicaset"))}
+}
+
+// ReplicaSets returns an object that can list and get ReplicaSets.
+func (s *replicaSetLister) ReplicaSets(namespace string) ReplicaSetNamespaceLister {
+ return replicaSetNamespaceLister{listers.NewNamespaced[*appsv1beta2.ReplicaSet](s.ResourceIndexer, namespace)}
+}
+
+// ReplicaSetNamespaceLister helps list and get ReplicaSets.
+// All objects returned here must be treated as read-only.
+type ReplicaSetNamespaceLister interface {
+ // List lists all ReplicaSets in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1beta2.ReplicaSet, err error)
+ // Get retrieves the ReplicaSet from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*appsv1beta2.ReplicaSet, error)
+ ReplicaSetNamespaceListerExpansion
+}
+
+// replicaSetNamespaceLister implements the ReplicaSetNamespaceLister
+// interface.
+type replicaSetNamespaceLister struct {
+ listers.ResourceIndexer[*appsv1beta2.ReplicaSet]
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/replicaset_expansion.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/replicaset_expansion.go
new file mode 100644
index 00000000000..bc014b5a69d
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1beta2/replicaset_expansion.go
@@ -0,0 +1,74 @@
+/*
+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 v1beta2
+
+import (
+ "fmt"
+
+ apps "k8s.io/api/apps/v1beta2"
+ "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/labels"
+)
+
+// ReplicaSetListerExpansion allows custom methods to be added to
+// ReplicaSetLister.
+type ReplicaSetListerExpansion interface {
+ GetPodReplicaSets(pod *v1.Pod) ([]*apps.ReplicaSet, error)
+}
+
+// ReplicaSetNamespaceListerExpansion allows custom methods to be added to
+// ReplicaSetNamespaceLister.
+type ReplicaSetNamespaceListerExpansion interface{}
+
+// GetPodReplicaSets returns a list of ReplicaSets that potentially match a pod.
+// Only the one specified in the Pod's ControllerRef will actually manage it.
+// Returns an error only if no matching ReplicaSets are found.
+func (s *replicaSetLister) GetPodReplicaSets(pod *v1.Pod) ([]*apps.ReplicaSet, error) {
+ if len(pod.Labels) == 0 {
+ return nil, fmt.Errorf("no ReplicaSets found for pod %v because it has no labels", pod.Name)
+ }
+
+ list, err := s.ReplicaSets(pod.Namespace).List(labels.Everything())
+ if err != nil {
+ return nil, err
+ }
+
+ var rss []*apps.ReplicaSet
+ for _, rs := range list {
+ if rs.Namespace != pod.Namespace {
+ continue
+ }
+ selector, err := metav1.LabelSelectorAsSelector(rs.Spec.Selector)
+ if err != nil {
+ // This object has an invalid selector, it does not match the pod
+ continue
+ }
+
+ // If a ReplicaSet with a nil or empty selector creeps in, it should match nothing, not everything.
+ if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) {
+ continue
+ }
+ rss = append(rss, rs)
+ }
+
+ if len(rss) == 0 {
+ return nil, fmt.Errorf("could not find ReplicaSet for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
+ }
+
+ return rss, nil
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/statefulset.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/statefulset.go
new file mode 100644
index 00000000000..04dffb2d80e
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1beta2/statefulset.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta2
+
+import (
+ appsv1beta2 "k8s.io/api/apps/v1beta2"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// StatefulSetLister helps list StatefulSets.
+// All objects returned here must be treated as read-only.
+type StatefulSetLister interface {
+ // List lists all StatefulSets in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1beta2.StatefulSet, err error)
+ // StatefulSets returns an object that can list and get StatefulSets.
+ StatefulSets(namespace string) StatefulSetNamespaceLister
+ StatefulSetListerExpansion
+}
+
+// statefulSetLister implements the StatefulSetLister interface.
+type statefulSetLister struct {
+ listers.ResourceIndexer[*appsv1beta2.StatefulSet]
+}
+
+// NewStatefulSetLister returns a new StatefulSetLister.
+func NewStatefulSetLister(indexer cache.Indexer) StatefulSetLister {
+ return &statefulSetLister{listers.New[*appsv1beta2.StatefulSet](indexer, appsv1beta2.Resource("statefulset"))}
+}
+
+// StatefulSets returns an object that can list and get StatefulSets.
+func (s *statefulSetLister) StatefulSets(namespace string) StatefulSetNamespaceLister {
+ return statefulSetNamespaceLister{listers.NewNamespaced[*appsv1beta2.StatefulSet](s.ResourceIndexer, namespace)}
+}
+
+// StatefulSetNamespaceLister helps list and get StatefulSets.
+// All objects returned here must be treated as read-only.
+type StatefulSetNamespaceLister interface {
+ // List lists all StatefulSets in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*appsv1beta2.StatefulSet, err error)
+ // Get retrieves the StatefulSet from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*appsv1beta2.StatefulSet, error)
+ StatefulSetNamespaceListerExpansion
+}
+
+// statefulSetNamespaceLister implements the StatefulSetNamespaceLister
+// interface.
+type statefulSetNamespaceLister struct {
+ listers.ResourceIndexer[*appsv1beta2.StatefulSet]
+}
diff --git a/vendor/k8s.io/client-go/listers/apps/v1beta2/statefulset_expansion.go b/vendor/k8s.io/client-go/listers/apps/v1beta2/statefulset_expansion.go
new file mode 100644
index 00000000000..eae31b82f83
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/apps/v1beta2/statefulset_expansion.go
@@ -0,0 +1,78 @@
+/*
+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 v1beta2
+
+import (
+ "fmt"
+
+ apps "k8s.io/api/apps/v1beta2"
+ "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/labels"
+)
+
+// StatefulSetListerExpansion allows custom methods to be added to
+// StatefulSetLister.
+type StatefulSetListerExpansion interface {
+ GetPodStatefulSets(pod *v1.Pod) ([]*apps.StatefulSet, error)
+}
+
+// StatefulSetNamespaceListerExpansion allows custom methods to be added to
+// StatefulSetNamespaceLister.
+type StatefulSetNamespaceListerExpansion interface{}
+
+// GetPodStatefulSets returns a list of StatefulSets that potentially match a pod.
+// Only the one specified in the Pod's ControllerRef will actually manage it.
+// Returns an error only if no matching StatefulSets are found.
+func (s *statefulSetLister) GetPodStatefulSets(pod *v1.Pod) ([]*apps.StatefulSet, error) {
+ var selector labels.Selector
+ var ps *apps.StatefulSet
+
+ if len(pod.Labels) == 0 {
+ return nil, fmt.Errorf("no StatefulSets found for pod %v because it has no labels", pod.Name)
+ }
+
+ list, err := s.StatefulSets(pod.Namespace).List(labels.Everything())
+ if err != nil {
+ return nil, err
+ }
+
+ var psList []*apps.StatefulSet
+ for i := range list {
+ ps = list[i]
+ if ps.Namespace != pod.Namespace {
+ continue
+ }
+ selector, err = metav1.LabelSelectorAsSelector(ps.Spec.Selector)
+ if err != nil {
+ // This object has an invalid selector, it does not match the pod
+ continue
+ }
+
+ // If a StatefulSet with a nil or empty selector creeps in, it should match nothing, not everything.
+ if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) {
+ continue
+ }
+ psList = append(psList, ps)
+ }
+
+ if len(psList) == 0 {
+ return nil, fmt.Errorf("could not find StatefulSet for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
+ }
+
+ return psList, nil
+}
diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/autoscaling/v1/expansion_generated.go
new file mode 100644
index 00000000000..05253c77030
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/autoscaling/v1/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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 v1
+
+// HorizontalPodAutoscalerListerExpansion allows custom methods to be added to
+// HorizontalPodAutoscalerLister.
+type HorizontalPodAutoscalerListerExpansion interface{}
+
+// HorizontalPodAutoscalerNamespaceListerExpansion allows custom methods to be added to
+// HorizontalPodAutoscalerNamespaceLister.
+type HorizontalPodAutoscalerNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v1/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/listers/autoscaling/v1/horizontalpodautoscaler.go
new file mode 100644
index 00000000000..b4e57706490
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/autoscaling/v1/horizontalpodautoscaler.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ autoscalingv1 "k8s.io/api/autoscaling/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// HorizontalPodAutoscalerLister helps list HorizontalPodAutoscalers.
+// All objects returned here must be treated as read-only.
+type HorizontalPodAutoscalerLister interface {
+ // List lists all HorizontalPodAutoscalers in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*autoscalingv1.HorizontalPodAutoscaler, err error)
+ // HorizontalPodAutoscalers returns an object that can list and get HorizontalPodAutoscalers.
+ HorizontalPodAutoscalers(namespace string) HorizontalPodAutoscalerNamespaceLister
+ HorizontalPodAutoscalerListerExpansion
+}
+
+// horizontalPodAutoscalerLister implements the HorizontalPodAutoscalerLister interface.
+type horizontalPodAutoscalerLister struct {
+ listers.ResourceIndexer[*autoscalingv1.HorizontalPodAutoscaler]
+}
+
+// NewHorizontalPodAutoscalerLister returns a new HorizontalPodAutoscalerLister.
+func NewHorizontalPodAutoscalerLister(indexer cache.Indexer) HorizontalPodAutoscalerLister {
+ return &horizontalPodAutoscalerLister{listers.New[*autoscalingv1.HorizontalPodAutoscaler](indexer, autoscalingv1.Resource("horizontalpodautoscaler"))}
+}
+
+// HorizontalPodAutoscalers returns an object that can list and get HorizontalPodAutoscalers.
+func (s *horizontalPodAutoscalerLister) HorizontalPodAutoscalers(namespace string) HorizontalPodAutoscalerNamespaceLister {
+ return horizontalPodAutoscalerNamespaceLister{listers.NewNamespaced[*autoscalingv1.HorizontalPodAutoscaler](s.ResourceIndexer, namespace)}
+}
+
+// HorizontalPodAutoscalerNamespaceLister helps list and get HorizontalPodAutoscalers.
+// All objects returned here must be treated as read-only.
+type HorizontalPodAutoscalerNamespaceLister interface {
+ // List lists all HorizontalPodAutoscalers in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*autoscalingv1.HorizontalPodAutoscaler, err error)
+ // Get retrieves the HorizontalPodAutoscaler from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*autoscalingv1.HorizontalPodAutoscaler, error)
+ HorizontalPodAutoscalerNamespaceListerExpansion
+}
+
+// horizontalPodAutoscalerNamespaceLister implements the HorizontalPodAutoscalerNamespaceLister
+// interface.
+type horizontalPodAutoscalerNamespaceLister struct {
+ listers.ResourceIndexer[*autoscalingv1.HorizontalPodAutoscaler]
+}
diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v2/expansion_generated.go b/vendor/k8s.io/client-go/listers/autoscaling/v2/expansion_generated.go
new file mode 100644
index 00000000000..97742b77b29
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/autoscaling/v2/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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 v2
+
+// HorizontalPodAutoscalerListerExpansion allows custom methods to be added to
+// HorizontalPodAutoscalerLister.
+type HorizontalPodAutoscalerListerExpansion interface{}
+
+// HorizontalPodAutoscalerNamespaceListerExpansion allows custom methods to be added to
+// HorizontalPodAutoscalerNamespaceLister.
+type HorizontalPodAutoscalerNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v2/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/listers/autoscaling/v2/horizontalpodautoscaler.go
new file mode 100644
index 00000000000..aafc5768379
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/autoscaling/v2/horizontalpodautoscaler.go
@@ -0,0 +1,70 @@
+/*
+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 v2
+
+import (
+ autoscalingv2 "k8s.io/api/autoscaling/v2"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// HorizontalPodAutoscalerLister helps list HorizontalPodAutoscalers.
+// All objects returned here must be treated as read-only.
+type HorizontalPodAutoscalerLister interface {
+ // List lists all HorizontalPodAutoscalers in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*autoscalingv2.HorizontalPodAutoscaler, err error)
+ // HorizontalPodAutoscalers returns an object that can list and get HorizontalPodAutoscalers.
+ HorizontalPodAutoscalers(namespace string) HorizontalPodAutoscalerNamespaceLister
+ HorizontalPodAutoscalerListerExpansion
+}
+
+// horizontalPodAutoscalerLister implements the HorizontalPodAutoscalerLister interface.
+type horizontalPodAutoscalerLister struct {
+ listers.ResourceIndexer[*autoscalingv2.HorizontalPodAutoscaler]
+}
+
+// NewHorizontalPodAutoscalerLister returns a new HorizontalPodAutoscalerLister.
+func NewHorizontalPodAutoscalerLister(indexer cache.Indexer) HorizontalPodAutoscalerLister {
+ return &horizontalPodAutoscalerLister{listers.New[*autoscalingv2.HorizontalPodAutoscaler](indexer, autoscalingv2.Resource("horizontalpodautoscaler"))}
+}
+
+// HorizontalPodAutoscalers returns an object that can list and get HorizontalPodAutoscalers.
+func (s *horizontalPodAutoscalerLister) HorizontalPodAutoscalers(namespace string) HorizontalPodAutoscalerNamespaceLister {
+ return horizontalPodAutoscalerNamespaceLister{listers.NewNamespaced[*autoscalingv2.HorizontalPodAutoscaler](s.ResourceIndexer, namespace)}
+}
+
+// HorizontalPodAutoscalerNamespaceLister helps list and get HorizontalPodAutoscalers.
+// All objects returned here must be treated as read-only.
+type HorizontalPodAutoscalerNamespaceLister interface {
+ // List lists all HorizontalPodAutoscalers in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*autoscalingv2.HorizontalPodAutoscaler, err error)
+ // Get retrieves the HorizontalPodAutoscaler from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*autoscalingv2.HorizontalPodAutoscaler, error)
+ HorizontalPodAutoscalerNamespaceListerExpansion
+}
+
+// horizontalPodAutoscalerNamespaceLister implements the HorizontalPodAutoscalerNamespaceLister
+// interface.
+type horizontalPodAutoscalerNamespaceLister struct {
+ listers.ResourceIndexer[*autoscalingv2.HorizontalPodAutoscaler]
+}
diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/expansion_generated.go
new file mode 100644
index 00000000000..8d46a4b6e31
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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 v2beta1
+
+// HorizontalPodAutoscalerListerExpansion allows custom methods to be added to
+// HorizontalPodAutoscalerLister.
+type HorizontalPodAutoscalerListerExpansion interface{}
+
+// HorizontalPodAutoscalerNamespaceListerExpansion allows custom methods to be added to
+// HorizontalPodAutoscalerNamespaceLister.
+type HorizontalPodAutoscalerNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/horizontalpodautoscaler.go
new file mode 100644
index 00000000000..b7ad8e79b52
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/autoscaling/v2beta1/horizontalpodautoscaler.go
@@ -0,0 +1,70 @@
+/*
+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 v2beta1
+
+import (
+ autoscalingv2beta1 "k8s.io/api/autoscaling/v2beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// HorizontalPodAutoscalerLister helps list HorizontalPodAutoscalers.
+// All objects returned here must be treated as read-only.
+type HorizontalPodAutoscalerLister interface {
+ // List lists all HorizontalPodAutoscalers in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*autoscalingv2beta1.HorizontalPodAutoscaler, err error)
+ // HorizontalPodAutoscalers returns an object that can list and get HorizontalPodAutoscalers.
+ HorizontalPodAutoscalers(namespace string) HorizontalPodAutoscalerNamespaceLister
+ HorizontalPodAutoscalerListerExpansion
+}
+
+// horizontalPodAutoscalerLister implements the HorizontalPodAutoscalerLister interface.
+type horizontalPodAutoscalerLister struct {
+ listers.ResourceIndexer[*autoscalingv2beta1.HorizontalPodAutoscaler]
+}
+
+// NewHorizontalPodAutoscalerLister returns a new HorizontalPodAutoscalerLister.
+func NewHorizontalPodAutoscalerLister(indexer cache.Indexer) HorizontalPodAutoscalerLister {
+ return &horizontalPodAutoscalerLister{listers.New[*autoscalingv2beta1.HorizontalPodAutoscaler](indexer, autoscalingv2beta1.Resource("horizontalpodautoscaler"))}
+}
+
+// HorizontalPodAutoscalers returns an object that can list and get HorizontalPodAutoscalers.
+func (s *horizontalPodAutoscalerLister) HorizontalPodAutoscalers(namespace string) HorizontalPodAutoscalerNamespaceLister {
+ return horizontalPodAutoscalerNamespaceLister{listers.NewNamespaced[*autoscalingv2beta1.HorizontalPodAutoscaler](s.ResourceIndexer, namespace)}
+}
+
+// HorizontalPodAutoscalerNamespaceLister helps list and get HorizontalPodAutoscalers.
+// All objects returned here must be treated as read-only.
+type HorizontalPodAutoscalerNamespaceLister interface {
+ // List lists all HorizontalPodAutoscalers in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*autoscalingv2beta1.HorizontalPodAutoscaler, err error)
+ // Get retrieves the HorizontalPodAutoscaler from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*autoscalingv2beta1.HorizontalPodAutoscaler, error)
+ HorizontalPodAutoscalerNamespaceListerExpansion
+}
+
+// horizontalPodAutoscalerNamespaceLister implements the HorizontalPodAutoscalerNamespaceLister
+// interface.
+type horizontalPodAutoscalerNamespaceLister struct {
+ listers.ResourceIndexer[*autoscalingv2beta1.HorizontalPodAutoscaler]
+}
diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v2beta2/expansion_generated.go b/vendor/k8s.io/client-go/listers/autoscaling/v2beta2/expansion_generated.go
new file mode 100644
index 00000000000..5127945a9c7
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/autoscaling/v2beta2/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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 v2beta2
+
+// HorizontalPodAutoscalerListerExpansion allows custom methods to be added to
+// HorizontalPodAutoscalerLister.
+type HorizontalPodAutoscalerListerExpansion interface{}
+
+// HorizontalPodAutoscalerNamespaceListerExpansion allows custom methods to be added to
+// HorizontalPodAutoscalerNamespaceLister.
+type HorizontalPodAutoscalerNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/autoscaling/v2beta2/horizontalpodautoscaler.go b/vendor/k8s.io/client-go/listers/autoscaling/v2beta2/horizontalpodautoscaler.go
new file mode 100644
index 00000000000..8d0fa6e7980
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/autoscaling/v2beta2/horizontalpodautoscaler.go
@@ -0,0 +1,70 @@
+/*
+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 v2beta2
+
+import (
+ autoscalingv2beta2 "k8s.io/api/autoscaling/v2beta2"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// HorizontalPodAutoscalerLister helps list HorizontalPodAutoscalers.
+// All objects returned here must be treated as read-only.
+type HorizontalPodAutoscalerLister interface {
+ // List lists all HorizontalPodAutoscalers in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*autoscalingv2beta2.HorizontalPodAutoscaler, err error)
+ // HorizontalPodAutoscalers returns an object that can list and get HorizontalPodAutoscalers.
+ HorizontalPodAutoscalers(namespace string) HorizontalPodAutoscalerNamespaceLister
+ HorizontalPodAutoscalerListerExpansion
+}
+
+// horizontalPodAutoscalerLister implements the HorizontalPodAutoscalerLister interface.
+type horizontalPodAutoscalerLister struct {
+ listers.ResourceIndexer[*autoscalingv2beta2.HorizontalPodAutoscaler]
+}
+
+// NewHorizontalPodAutoscalerLister returns a new HorizontalPodAutoscalerLister.
+func NewHorizontalPodAutoscalerLister(indexer cache.Indexer) HorizontalPodAutoscalerLister {
+ return &horizontalPodAutoscalerLister{listers.New[*autoscalingv2beta2.HorizontalPodAutoscaler](indexer, autoscalingv2beta2.Resource("horizontalpodautoscaler"))}
+}
+
+// HorizontalPodAutoscalers returns an object that can list and get HorizontalPodAutoscalers.
+func (s *horizontalPodAutoscalerLister) HorizontalPodAutoscalers(namespace string) HorizontalPodAutoscalerNamespaceLister {
+ return horizontalPodAutoscalerNamespaceLister{listers.NewNamespaced[*autoscalingv2beta2.HorizontalPodAutoscaler](s.ResourceIndexer, namespace)}
+}
+
+// HorizontalPodAutoscalerNamespaceLister helps list and get HorizontalPodAutoscalers.
+// All objects returned here must be treated as read-only.
+type HorizontalPodAutoscalerNamespaceLister interface {
+ // List lists all HorizontalPodAutoscalers in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*autoscalingv2beta2.HorizontalPodAutoscaler, err error)
+ // Get retrieves the HorizontalPodAutoscaler from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*autoscalingv2beta2.HorizontalPodAutoscaler, error)
+ HorizontalPodAutoscalerNamespaceListerExpansion
+}
+
+// horizontalPodAutoscalerNamespaceLister implements the HorizontalPodAutoscalerNamespaceLister
+// interface.
+type horizontalPodAutoscalerNamespaceLister struct {
+ listers.ResourceIndexer[*autoscalingv2beta2.HorizontalPodAutoscaler]
+}
diff --git a/vendor/k8s.io/client-go/listers/batch/v1/cronjob.go b/vendor/k8s.io/client-go/listers/batch/v1/cronjob.go
new file mode 100644
index 00000000000..7ad2b87f081
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/batch/v1/cronjob.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ batchv1 "k8s.io/api/batch/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CronJobLister helps list CronJobs.
+// All objects returned here must be treated as read-only.
+type CronJobLister interface {
+ // List lists all CronJobs in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*batchv1.CronJob, err error)
+ // CronJobs returns an object that can list and get CronJobs.
+ CronJobs(namespace string) CronJobNamespaceLister
+ CronJobListerExpansion
+}
+
+// cronJobLister implements the CronJobLister interface.
+type cronJobLister struct {
+ listers.ResourceIndexer[*batchv1.CronJob]
+}
+
+// NewCronJobLister returns a new CronJobLister.
+func NewCronJobLister(indexer cache.Indexer) CronJobLister {
+ return &cronJobLister{listers.New[*batchv1.CronJob](indexer, batchv1.Resource("cronjob"))}
+}
+
+// CronJobs returns an object that can list and get CronJobs.
+func (s *cronJobLister) CronJobs(namespace string) CronJobNamespaceLister {
+ return cronJobNamespaceLister{listers.NewNamespaced[*batchv1.CronJob](s.ResourceIndexer, namespace)}
+}
+
+// CronJobNamespaceLister helps list and get CronJobs.
+// All objects returned here must be treated as read-only.
+type CronJobNamespaceLister interface {
+ // List lists all CronJobs in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*batchv1.CronJob, err error)
+ // Get retrieves the CronJob from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*batchv1.CronJob, error)
+ CronJobNamespaceListerExpansion
+}
+
+// cronJobNamespaceLister implements the CronJobNamespaceLister
+// interface.
+type cronJobNamespaceLister struct {
+ listers.ResourceIndexer[*batchv1.CronJob]
+}
diff --git a/vendor/k8s.io/client-go/listers/batch/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/batch/v1/expansion_generated.go
new file mode 100644
index 00000000000..22097627903
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/batch/v1/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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 v1
+
+// CronJobListerExpansion allows custom methods to be added to
+// CronJobLister.
+type CronJobListerExpansion interface{}
+
+// CronJobNamespaceListerExpansion allows custom methods to be added to
+// CronJobNamespaceLister.
+type CronJobNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/batch/v1/job.go b/vendor/k8s.io/client-go/listers/batch/v1/job.go
new file mode 100644
index 00000000000..eb9f300d9e1
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/batch/v1/job.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ batchv1 "k8s.io/api/batch/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// JobLister helps list Jobs.
+// All objects returned here must be treated as read-only.
+type JobLister interface {
+ // List lists all Jobs in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*batchv1.Job, err error)
+ // Jobs returns an object that can list and get Jobs.
+ Jobs(namespace string) JobNamespaceLister
+ JobListerExpansion
+}
+
+// jobLister implements the JobLister interface.
+type jobLister struct {
+ listers.ResourceIndexer[*batchv1.Job]
+}
+
+// NewJobLister returns a new JobLister.
+func NewJobLister(indexer cache.Indexer) JobLister {
+ return &jobLister{listers.New[*batchv1.Job](indexer, batchv1.Resource("job"))}
+}
+
+// Jobs returns an object that can list and get Jobs.
+func (s *jobLister) Jobs(namespace string) JobNamespaceLister {
+ return jobNamespaceLister{listers.NewNamespaced[*batchv1.Job](s.ResourceIndexer, namespace)}
+}
+
+// JobNamespaceLister helps list and get Jobs.
+// All objects returned here must be treated as read-only.
+type JobNamespaceLister interface {
+ // List lists all Jobs in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*batchv1.Job, err error)
+ // Get retrieves the Job from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*batchv1.Job, error)
+ JobNamespaceListerExpansion
+}
+
+// jobNamespaceLister implements the JobNamespaceLister
+// interface.
+type jobNamespaceLister struct {
+ listers.ResourceIndexer[*batchv1.Job]
+}
diff --git a/vendor/k8s.io/client-go/listers/batch/v1/job_expansion.go b/vendor/k8s.io/client-go/listers/batch/v1/job_expansion.go
new file mode 100644
index 00000000000..8dc5db7885e
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/batch/v1/job_expansion.go
@@ -0,0 +1,72 @@
+/*
+Copyright 2016 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 v1
+
+import (
+ "fmt"
+
+ batch "k8s.io/api/batch/v1"
+ "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/labels"
+)
+
+// JobListerExpansion allows custom methods to be added to
+// JobLister.
+type JobListerExpansion interface {
+ // GetPodJobs returns a list of Jobs that potentially
+ // match a Pod. Only the one specified in the Pod's ControllerRef
+ // will actually manage it.
+ // Returns an error only if no matching Jobs are found.
+ GetPodJobs(pod *v1.Pod) (jobs []batch.Job, err error)
+}
+
+// GetPodJobs returns a list of Jobs that potentially
+// match a Pod. Only the one specified in the Pod's ControllerRef
+// will actually manage it.
+// Returns an error only if no matching Jobs are found.
+func (l *jobLister) GetPodJobs(pod *v1.Pod) (jobs []batch.Job, err error) {
+ if len(pod.Labels) == 0 {
+ err = fmt.Errorf("no jobs found for pod %v because it has no labels", pod.Name)
+ return
+ }
+
+ var list []*batch.Job
+ list, err = l.Jobs(pod.Namespace).List(labels.Everything())
+ if err != nil {
+ return
+ }
+ for _, job := range list {
+ selector, err := metav1.LabelSelectorAsSelector(job.Spec.Selector)
+ if err != nil {
+ // This object has an invalid selector, it does not match the pod
+ continue
+ }
+ if !selector.Matches(labels.Set(pod.Labels)) {
+ continue
+ }
+ jobs = append(jobs, *job)
+ }
+ if len(jobs) == 0 {
+ err = fmt.Errorf("could not find jobs for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
+ }
+ return
+}
+
+// JobNamespaceListerExpansion allows custom methods to be added to
+// JobNamespaceLister.
+type JobNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/batch/v1beta1/cronjob.go b/vendor/k8s.io/client-go/listers/batch/v1beta1/cronjob.go
new file mode 100644
index 00000000000..d5e0ec2c8d2
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/batch/v1beta1/cronjob.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ batchv1beta1 "k8s.io/api/batch/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CronJobLister helps list CronJobs.
+// All objects returned here must be treated as read-only.
+type CronJobLister interface {
+ // List lists all CronJobs in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*batchv1beta1.CronJob, err error)
+ // CronJobs returns an object that can list and get CronJobs.
+ CronJobs(namespace string) CronJobNamespaceLister
+ CronJobListerExpansion
+}
+
+// cronJobLister implements the CronJobLister interface.
+type cronJobLister struct {
+ listers.ResourceIndexer[*batchv1beta1.CronJob]
+}
+
+// NewCronJobLister returns a new CronJobLister.
+func NewCronJobLister(indexer cache.Indexer) CronJobLister {
+ return &cronJobLister{listers.New[*batchv1beta1.CronJob](indexer, batchv1beta1.Resource("cronjob"))}
+}
+
+// CronJobs returns an object that can list and get CronJobs.
+func (s *cronJobLister) CronJobs(namespace string) CronJobNamespaceLister {
+ return cronJobNamespaceLister{listers.NewNamespaced[*batchv1beta1.CronJob](s.ResourceIndexer, namespace)}
+}
+
+// CronJobNamespaceLister helps list and get CronJobs.
+// All objects returned here must be treated as read-only.
+type CronJobNamespaceLister interface {
+ // List lists all CronJobs in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*batchv1beta1.CronJob, err error)
+ // Get retrieves the CronJob from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*batchv1beta1.CronJob, error)
+ CronJobNamespaceListerExpansion
+}
+
+// cronJobNamespaceLister implements the CronJobNamespaceLister
+// interface.
+type cronJobNamespaceLister struct {
+ listers.ResourceIndexer[*batchv1beta1.CronJob]
+}
diff --git a/vendor/k8s.io/client-go/listers/batch/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/batch/v1beta1/expansion_generated.go
new file mode 100644
index 00000000000..be2742ef615
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/batch/v1beta1/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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 v1beta1
+
+// CronJobListerExpansion allows custom methods to be added to
+// CronJobLister.
+type CronJobListerExpansion interface{}
+
+// CronJobNamespaceListerExpansion allows custom methods to be added to
+// CronJobNamespaceLister.
+type CronJobNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/certificates/v1/certificatesigningrequest.go b/vendor/k8s.io/client-go/listers/certificates/v1/certificatesigningrequest.go
new file mode 100644
index 00000000000..7dbb0f3f5ab
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/certificates/v1/certificatesigningrequest.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ certificatesv1 "k8s.io/api/certificates/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CertificateSigningRequestLister helps list CertificateSigningRequests.
+// All objects returned here must be treated as read-only.
+type CertificateSigningRequestLister interface {
+ // List lists all CertificateSigningRequests in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*certificatesv1.CertificateSigningRequest, err error)
+ // Get retrieves the CertificateSigningRequest from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*certificatesv1.CertificateSigningRequest, error)
+ CertificateSigningRequestListerExpansion
+}
+
+// certificateSigningRequestLister implements the CertificateSigningRequestLister interface.
+type certificateSigningRequestLister struct {
+ listers.ResourceIndexer[*certificatesv1.CertificateSigningRequest]
+}
+
+// NewCertificateSigningRequestLister returns a new CertificateSigningRequestLister.
+func NewCertificateSigningRequestLister(indexer cache.Indexer) CertificateSigningRequestLister {
+ return &certificateSigningRequestLister{listers.New[*certificatesv1.CertificateSigningRequest](indexer, certificatesv1.Resource("certificatesigningrequest"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/certificates/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/certificates/v1/expansion_generated.go
new file mode 100644
index 00000000000..616a1f1a092
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/certificates/v1/expansion_generated.go
@@ -0,0 +1,23 @@
+/*
+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 v1
+
+// CertificateSigningRequestListerExpansion allows custom methods to be added to
+// CertificateSigningRequestLister.
+type CertificateSigningRequestListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/certificates/v1alpha1/clustertrustbundle.go b/vendor/k8s.io/client-go/listers/certificates/v1alpha1/clustertrustbundle.go
new file mode 100644
index 00000000000..0e7f47d80ad
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/certificates/v1alpha1/clustertrustbundle.go
@@ -0,0 +1,48 @@
+/*
+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 (
+ certificatesv1alpha1 "k8s.io/api/certificates/v1alpha1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ClusterTrustBundleLister helps list ClusterTrustBundles.
+// All objects returned here must be treated as read-only.
+type ClusterTrustBundleLister interface {
+ // List lists all ClusterTrustBundles in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*certificatesv1alpha1.ClusterTrustBundle, err error)
+ // Get retrieves the ClusterTrustBundle from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*certificatesv1alpha1.ClusterTrustBundle, error)
+ ClusterTrustBundleListerExpansion
+}
+
+// clusterTrustBundleLister implements the ClusterTrustBundleLister interface.
+type clusterTrustBundleLister struct {
+ listers.ResourceIndexer[*certificatesv1alpha1.ClusterTrustBundle]
+}
+
+// NewClusterTrustBundleLister returns a new ClusterTrustBundleLister.
+func NewClusterTrustBundleLister(indexer cache.Indexer) ClusterTrustBundleLister {
+ return &clusterTrustBundleLister{listers.New[*certificatesv1alpha1.ClusterTrustBundle](indexer, certificatesv1alpha1.Resource("clustertrustbundle"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/certificates/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/certificates/v1alpha1/expansion_generated.go
new file mode 100644
index 00000000000..d77258cb2d4
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/certificates/v1alpha1/expansion_generated.go
@@ -0,0 +1,23 @@
+/*
+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
+
+// ClusterTrustBundleListerExpansion allows custom methods to be added to
+// ClusterTrustBundleLister.
+type ClusterTrustBundleListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/certificates/v1beta1/certificatesigningrequest.go b/vendor/k8s.io/client-go/listers/certificates/v1beta1/certificatesigningrequest.go
new file mode 100644
index 00000000000..3b4742c67d1
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/certificates/v1beta1/certificatesigningrequest.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ certificatesv1beta1 "k8s.io/api/certificates/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CertificateSigningRequestLister helps list CertificateSigningRequests.
+// All objects returned here must be treated as read-only.
+type CertificateSigningRequestLister interface {
+ // List lists all CertificateSigningRequests in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*certificatesv1beta1.CertificateSigningRequest, err error)
+ // Get retrieves the CertificateSigningRequest from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*certificatesv1beta1.CertificateSigningRequest, error)
+ CertificateSigningRequestListerExpansion
+}
+
+// certificateSigningRequestLister implements the CertificateSigningRequestLister interface.
+type certificateSigningRequestLister struct {
+ listers.ResourceIndexer[*certificatesv1beta1.CertificateSigningRequest]
+}
+
+// NewCertificateSigningRequestLister returns a new CertificateSigningRequestLister.
+func NewCertificateSigningRequestLister(indexer cache.Indexer) CertificateSigningRequestLister {
+ return &certificateSigningRequestLister{listers.New[*certificatesv1beta1.CertificateSigningRequest](indexer, certificatesv1beta1.Resource("certificatesigningrequest"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/certificates/v1beta1/clustertrustbundle.go b/vendor/k8s.io/client-go/listers/certificates/v1beta1/clustertrustbundle.go
new file mode 100644
index 00000000000..dfda2498b08
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/certificates/v1beta1/clustertrustbundle.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ certificatesv1beta1 "k8s.io/api/certificates/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ClusterTrustBundleLister helps list ClusterTrustBundles.
+// All objects returned here must be treated as read-only.
+type ClusterTrustBundleLister interface {
+ // List lists all ClusterTrustBundles in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*certificatesv1beta1.ClusterTrustBundle, err error)
+ // Get retrieves the ClusterTrustBundle from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*certificatesv1beta1.ClusterTrustBundle, error)
+ ClusterTrustBundleListerExpansion
+}
+
+// clusterTrustBundleLister implements the ClusterTrustBundleLister interface.
+type clusterTrustBundleLister struct {
+ listers.ResourceIndexer[*certificatesv1beta1.ClusterTrustBundle]
+}
+
+// NewClusterTrustBundleLister returns a new ClusterTrustBundleLister.
+func NewClusterTrustBundleLister(indexer cache.Indexer) ClusterTrustBundleLister {
+ return &clusterTrustBundleLister{listers.New[*certificatesv1beta1.ClusterTrustBundle](indexer, certificatesv1beta1.Resource("clustertrustbundle"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/certificates/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/certificates/v1beta1/expansion_generated.go
new file mode 100644
index 00000000000..12a2554df00
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/certificates/v1beta1/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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 v1beta1
+
+// CertificateSigningRequestListerExpansion allows custom methods to be added to
+// CertificateSigningRequestLister.
+type CertificateSigningRequestListerExpansion interface{}
+
+// ClusterTrustBundleListerExpansion allows custom methods to be added to
+// ClusterTrustBundleLister.
+type ClusterTrustBundleListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/coordination/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/coordination/v1/expansion_generated.go
new file mode 100644
index 00000000000..ddc494f1c36
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/coordination/v1/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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 v1
+
+// LeaseListerExpansion allows custom methods to be added to
+// LeaseLister.
+type LeaseListerExpansion interface{}
+
+// LeaseNamespaceListerExpansion allows custom methods to be added to
+// LeaseNamespaceLister.
+type LeaseNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/coordination/v1/lease.go b/vendor/k8s.io/client-go/listers/coordination/v1/lease.go
new file mode 100644
index 00000000000..7fdab2bff92
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/coordination/v1/lease.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ coordinationv1 "k8s.io/api/coordination/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// LeaseLister helps list Leases.
+// All objects returned here must be treated as read-only.
+type LeaseLister interface {
+ // List lists all Leases in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*coordinationv1.Lease, err error)
+ // Leases returns an object that can list and get Leases.
+ Leases(namespace string) LeaseNamespaceLister
+ LeaseListerExpansion
+}
+
+// leaseLister implements the LeaseLister interface.
+type leaseLister struct {
+ listers.ResourceIndexer[*coordinationv1.Lease]
+}
+
+// NewLeaseLister returns a new LeaseLister.
+func NewLeaseLister(indexer cache.Indexer) LeaseLister {
+ return &leaseLister{listers.New[*coordinationv1.Lease](indexer, coordinationv1.Resource("lease"))}
+}
+
+// Leases returns an object that can list and get Leases.
+func (s *leaseLister) Leases(namespace string) LeaseNamespaceLister {
+ return leaseNamespaceLister{listers.NewNamespaced[*coordinationv1.Lease](s.ResourceIndexer, namespace)}
+}
+
+// LeaseNamespaceLister helps list and get Leases.
+// All objects returned here must be treated as read-only.
+type LeaseNamespaceLister interface {
+ // List lists all Leases in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*coordinationv1.Lease, err error)
+ // Get retrieves the Lease from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*coordinationv1.Lease, error)
+ LeaseNamespaceListerExpansion
+}
+
+// leaseNamespaceLister implements the LeaseNamespaceLister
+// interface.
+type leaseNamespaceLister struct {
+ listers.ResourceIndexer[*coordinationv1.Lease]
+}
diff --git a/vendor/k8s.io/client-go/listers/coordination/v1alpha2/expansion_generated.go b/vendor/k8s.io/client-go/listers/coordination/v1alpha2/expansion_generated.go
new file mode 100644
index 00000000000..f22e7d48335
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/coordination/v1alpha2/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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 v1alpha2
+
+// LeaseCandidateListerExpansion allows custom methods to be added to
+// LeaseCandidateLister.
+type LeaseCandidateListerExpansion interface{}
+
+// LeaseCandidateNamespaceListerExpansion allows custom methods to be added to
+// LeaseCandidateNamespaceLister.
+type LeaseCandidateNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/coordination/v1alpha2/leasecandidate.go b/vendor/k8s.io/client-go/listers/coordination/v1alpha2/leasecandidate.go
new file mode 100644
index 00000000000..26a3be4761c
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/coordination/v1alpha2/leasecandidate.go
@@ -0,0 +1,70 @@
+/*
+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 v1alpha2
+
+import (
+ coordinationv1alpha2 "k8s.io/api/coordination/v1alpha2"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// LeaseCandidateLister helps list LeaseCandidates.
+// All objects returned here must be treated as read-only.
+type LeaseCandidateLister interface {
+ // List lists all LeaseCandidates in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*coordinationv1alpha2.LeaseCandidate, err error)
+ // LeaseCandidates returns an object that can list and get LeaseCandidates.
+ LeaseCandidates(namespace string) LeaseCandidateNamespaceLister
+ LeaseCandidateListerExpansion
+}
+
+// leaseCandidateLister implements the LeaseCandidateLister interface.
+type leaseCandidateLister struct {
+ listers.ResourceIndexer[*coordinationv1alpha2.LeaseCandidate]
+}
+
+// NewLeaseCandidateLister returns a new LeaseCandidateLister.
+func NewLeaseCandidateLister(indexer cache.Indexer) LeaseCandidateLister {
+ return &leaseCandidateLister{listers.New[*coordinationv1alpha2.LeaseCandidate](indexer, coordinationv1alpha2.Resource("leasecandidate"))}
+}
+
+// LeaseCandidates returns an object that can list and get LeaseCandidates.
+func (s *leaseCandidateLister) LeaseCandidates(namespace string) LeaseCandidateNamespaceLister {
+ return leaseCandidateNamespaceLister{listers.NewNamespaced[*coordinationv1alpha2.LeaseCandidate](s.ResourceIndexer, namespace)}
+}
+
+// LeaseCandidateNamespaceLister helps list and get LeaseCandidates.
+// All objects returned here must be treated as read-only.
+type LeaseCandidateNamespaceLister interface {
+ // List lists all LeaseCandidates in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*coordinationv1alpha2.LeaseCandidate, err error)
+ // Get retrieves the LeaseCandidate from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*coordinationv1alpha2.LeaseCandidate, error)
+ LeaseCandidateNamespaceListerExpansion
+}
+
+// leaseCandidateNamespaceLister implements the LeaseCandidateNamespaceLister
+// interface.
+type leaseCandidateNamespaceLister struct {
+ listers.ResourceIndexer[*coordinationv1alpha2.LeaseCandidate]
+}
diff --git a/vendor/k8s.io/client-go/listers/coordination/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/coordination/v1beta1/expansion_generated.go
new file mode 100644
index 00000000000..d61788a3226
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/coordination/v1beta1/expansion_generated.go
@@ -0,0 +1,35 @@
+/*
+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 v1beta1
+
+// LeaseListerExpansion allows custom methods to be added to
+// LeaseLister.
+type LeaseListerExpansion interface{}
+
+// LeaseNamespaceListerExpansion allows custom methods to be added to
+// LeaseNamespaceLister.
+type LeaseNamespaceListerExpansion interface{}
+
+// LeaseCandidateListerExpansion allows custom methods to be added to
+// LeaseCandidateLister.
+type LeaseCandidateListerExpansion interface{}
+
+// LeaseCandidateNamespaceListerExpansion allows custom methods to be added to
+// LeaseCandidateNamespaceLister.
+type LeaseCandidateNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/coordination/v1beta1/lease.go b/vendor/k8s.io/client-go/listers/coordination/v1beta1/lease.go
new file mode 100644
index 00000000000..dfbd02acf44
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/coordination/v1beta1/lease.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ coordinationv1beta1 "k8s.io/api/coordination/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// LeaseLister helps list Leases.
+// All objects returned here must be treated as read-only.
+type LeaseLister interface {
+ // List lists all Leases in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*coordinationv1beta1.Lease, err error)
+ // Leases returns an object that can list and get Leases.
+ Leases(namespace string) LeaseNamespaceLister
+ LeaseListerExpansion
+}
+
+// leaseLister implements the LeaseLister interface.
+type leaseLister struct {
+ listers.ResourceIndexer[*coordinationv1beta1.Lease]
+}
+
+// NewLeaseLister returns a new LeaseLister.
+func NewLeaseLister(indexer cache.Indexer) LeaseLister {
+ return &leaseLister{listers.New[*coordinationv1beta1.Lease](indexer, coordinationv1beta1.Resource("lease"))}
+}
+
+// Leases returns an object that can list and get Leases.
+func (s *leaseLister) Leases(namespace string) LeaseNamespaceLister {
+ return leaseNamespaceLister{listers.NewNamespaced[*coordinationv1beta1.Lease](s.ResourceIndexer, namespace)}
+}
+
+// LeaseNamespaceLister helps list and get Leases.
+// All objects returned here must be treated as read-only.
+type LeaseNamespaceLister interface {
+ // List lists all Leases in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*coordinationv1beta1.Lease, err error)
+ // Get retrieves the Lease from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*coordinationv1beta1.Lease, error)
+ LeaseNamespaceListerExpansion
+}
+
+// leaseNamespaceLister implements the LeaseNamespaceLister
+// interface.
+type leaseNamespaceLister struct {
+ listers.ResourceIndexer[*coordinationv1beta1.Lease]
+}
diff --git a/vendor/k8s.io/client-go/listers/coordination/v1beta1/leasecandidate.go b/vendor/k8s.io/client-go/listers/coordination/v1beta1/leasecandidate.go
new file mode 100644
index 00000000000..9c176a3ec49
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/coordination/v1beta1/leasecandidate.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ coordinationv1beta1 "k8s.io/api/coordination/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// LeaseCandidateLister helps list LeaseCandidates.
+// All objects returned here must be treated as read-only.
+type LeaseCandidateLister interface {
+ // List lists all LeaseCandidates in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*coordinationv1beta1.LeaseCandidate, err error)
+ // LeaseCandidates returns an object that can list and get LeaseCandidates.
+ LeaseCandidates(namespace string) LeaseCandidateNamespaceLister
+ LeaseCandidateListerExpansion
+}
+
+// leaseCandidateLister implements the LeaseCandidateLister interface.
+type leaseCandidateLister struct {
+ listers.ResourceIndexer[*coordinationv1beta1.LeaseCandidate]
+}
+
+// NewLeaseCandidateLister returns a new LeaseCandidateLister.
+func NewLeaseCandidateLister(indexer cache.Indexer) LeaseCandidateLister {
+ return &leaseCandidateLister{listers.New[*coordinationv1beta1.LeaseCandidate](indexer, coordinationv1beta1.Resource("leasecandidate"))}
+}
+
+// LeaseCandidates returns an object that can list and get LeaseCandidates.
+func (s *leaseCandidateLister) LeaseCandidates(namespace string) LeaseCandidateNamespaceLister {
+ return leaseCandidateNamespaceLister{listers.NewNamespaced[*coordinationv1beta1.LeaseCandidate](s.ResourceIndexer, namespace)}
+}
+
+// LeaseCandidateNamespaceLister helps list and get LeaseCandidates.
+// All objects returned here must be treated as read-only.
+type LeaseCandidateNamespaceLister interface {
+ // List lists all LeaseCandidates in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*coordinationv1beta1.LeaseCandidate, err error)
+ // Get retrieves the LeaseCandidate from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*coordinationv1beta1.LeaseCandidate, error)
+ LeaseCandidateNamespaceListerExpansion
+}
+
+// leaseCandidateNamespaceLister implements the LeaseCandidateNamespaceLister
+// interface.
+type leaseCandidateNamespaceLister struct {
+ listers.ResourceIndexer[*coordinationv1beta1.LeaseCandidate]
+}
diff --git a/vendor/k8s.io/client-go/listers/core/v1/componentstatus.go b/vendor/k8s.io/client-go/listers/core/v1/componentstatus.go
new file mode 100644
index 00000000000..c8883670685
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/core/v1/componentstatus.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ corev1 "k8s.io/api/core/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ComponentStatusLister helps list ComponentStatuses.
+// All objects returned here must be treated as read-only.
+type ComponentStatusLister interface {
+ // List lists all ComponentStatuses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.ComponentStatus, err error)
+ // Get retrieves the ComponentStatus from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*corev1.ComponentStatus, error)
+ ComponentStatusListerExpansion
+}
+
+// componentStatusLister implements the ComponentStatusLister interface.
+type componentStatusLister struct {
+ listers.ResourceIndexer[*corev1.ComponentStatus]
+}
+
+// NewComponentStatusLister returns a new ComponentStatusLister.
+func NewComponentStatusLister(indexer cache.Indexer) ComponentStatusLister {
+ return &componentStatusLister{listers.New[*corev1.ComponentStatus](indexer, corev1.Resource("componentstatus"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/core/v1/configmap.go b/vendor/k8s.io/client-go/listers/core/v1/configmap.go
new file mode 100644
index 00000000000..54d25412ea8
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/core/v1/configmap.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ corev1 "k8s.io/api/core/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ConfigMapLister helps list ConfigMaps.
+// All objects returned here must be treated as read-only.
+type ConfigMapLister interface {
+ // List lists all ConfigMaps in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.ConfigMap, err error)
+ // ConfigMaps returns an object that can list and get ConfigMaps.
+ ConfigMaps(namespace string) ConfigMapNamespaceLister
+ ConfigMapListerExpansion
+}
+
+// configMapLister implements the ConfigMapLister interface.
+type configMapLister struct {
+ listers.ResourceIndexer[*corev1.ConfigMap]
+}
+
+// NewConfigMapLister returns a new ConfigMapLister.
+func NewConfigMapLister(indexer cache.Indexer) ConfigMapLister {
+ return &configMapLister{listers.New[*corev1.ConfigMap](indexer, corev1.Resource("configmap"))}
+}
+
+// ConfigMaps returns an object that can list and get ConfigMaps.
+func (s *configMapLister) ConfigMaps(namespace string) ConfigMapNamespaceLister {
+ return configMapNamespaceLister{listers.NewNamespaced[*corev1.ConfigMap](s.ResourceIndexer, namespace)}
+}
+
+// ConfigMapNamespaceLister helps list and get ConfigMaps.
+// All objects returned here must be treated as read-only.
+type ConfigMapNamespaceLister interface {
+ // List lists all ConfigMaps in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.ConfigMap, err error)
+ // Get retrieves the ConfigMap from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*corev1.ConfigMap, error)
+ ConfigMapNamespaceListerExpansion
+}
+
+// configMapNamespaceLister implements the ConfigMapNamespaceLister
+// interface.
+type configMapNamespaceLister struct {
+ listers.ResourceIndexer[*corev1.ConfigMap]
+}
diff --git a/vendor/k8s.io/client-go/listers/core/v1/endpoints.go b/vendor/k8s.io/client-go/listers/core/v1/endpoints.go
new file mode 100644
index 00000000000..a9d4e45a197
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/core/v1/endpoints.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ corev1 "k8s.io/api/core/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// EndpointsLister helps list Endpoints.
+// All objects returned here must be treated as read-only.
+type EndpointsLister interface {
+ // List lists all Endpoints in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.Endpoints, err error)
+ // Endpoints returns an object that can list and get Endpoints.
+ Endpoints(namespace string) EndpointsNamespaceLister
+ EndpointsListerExpansion
+}
+
+// endpointsLister implements the EndpointsLister interface.
+type endpointsLister struct {
+ listers.ResourceIndexer[*corev1.Endpoints]
+}
+
+// NewEndpointsLister returns a new EndpointsLister.
+func NewEndpointsLister(indexer cache.Indexer) EndpointsLister {
+ return &endpointsLister{listers.New[*corev1.Endpoints](indexer, corev1.Resource("endpoints"))}
+}
+
+// Endpoints returns an object that can list and get Endpoints.
+func (s *endpointsLister) Endpoints(namespace string) EndpointsNamespaceLister {
+ return endpointsNamespaceLister{listers.NewNamespaced[*corev1.Endpoints](s.ResourceIndexer, namespace)}
+}
+
+// EndpointsNamespaceLister helps list and get Endpoints.
+// All objects returned here must be treated as read-only.
+type EndpointsNamespaceLister interface {
+ // List lists all Endpoints in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.Endpoints, err error)
+ // Get retrieves the Endpoints from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*corev1.Endpoints, error)
+ EndpointsNamespaceListerExpansion
+}
+
+// endpointsNamespaceLister implements the EndpointsNamespaceLister
+// interface.
+type endpointsNamespaceLister struct {
+ listers.ResourceIndexer[*corev1.Endpoints]
+}
diff --git a/vendor/k8s.io/client-go/listers/core/v1/event.go b/vendor/k8s.io/client-go/listers/core/v1/event.go
new file mode 100644
index 00000000000..0e13fa3112d
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/core/v1/event.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ corev1 "k8s.io/api/core/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// EventLister helps list Events.
+// All objects returned here must be treated as read-only.
+type EventLister interface {
+ // List lists all Events in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.Event, err error)
+ // Events returns an object that can list and get Events.
+ Events(namespace string) EventNamespaceLister
+ EventListerExpansion
+}
+
+// eventLister implements the EventLister interface.
+type eventLister struct {
+ listers.ResourceIndexer[*corev1.Event]
+}
+
+// NewEventLister returns a new EventLister.
+func NewEventLister(indexer cache.Indexer) EventLister {
+ return &eventLister{listers.New[*corev1.Event](indexer, corev1.Resource("event"))}
+}
+
+// Events returns an object that can list and get Events.
+func (s *eventLister) Events(namespace string) EventNamespaceLister {
+ return eventNamespaceLister{listers.NewNamespaced[*corev1.Event](s.ResourceIndexer, namespace)}
+}
+
+// EventNamespaceLister helps list and get Events.
+// All objects returned here must be treated as read-only.
+type EventNamespaceLister interface {
+ // List lists all Events in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.Event, err error)
+ // Get retrieves the Event from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*corev1.Event, error)
+ EventNamespaceListerExpansion
+}
+
+// eventNamespaceLister implements the EventNamespaceLister
+// interface.
+type eventNamespaceLister struct {
+ listers.ResourceIndexer[*corev1.Event]
+}
diff --git a/vendor/k8s.io/client-go/listers/core/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/core/v1/expansion_generated.go
new file mode 100644
index 00000000000..2168a7f4834
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/core/v1/expansion_generated.go
@@ -0,0 +1,123 @@
+/*
+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 v1
+
+// ComponentStatusListerExpansion allows custom methods to be added to
+// ComponentStatusLister.
+type ComponentStatusListerExpansion interface{}
+
+// ConfigMapListerExpansion allows custom methods to be added to
+// ConfigMapLister.
+type ConfigMapListerExpansion interface{}
+
+// ConfigMapNamespaceListerExpansion allows custom methods to be added to
+// ConfigMapNamespaceLister.
+type ConfigMapNamespaceListerExpansion interface{}
+
+// EndpointsListerExpansion allows custom methods to be added to
+// EndpointsLister.
+type EndpointsListerExpansion interface{}
+
+// EndpointsNamespaceListerExpansion allows custom methods to be added to
+// EndpointsNamespaceLister.
+type EndpointsNamespaceListerExpansion interface{}
+
+// EventListerExpansion allows custom methods to be added to
+// EventLister.
+type EventListerExpansion interface{}
+
+// EventNamespaceListerExpansion allows custom methods to be added to
+// EventNamespaceLister.
+type EventNamespaceListerExpansion interface{}
+
+// LimitRangeListerExpansion allows custom methods to be added to
+// LimitRangeLister.
+type LimitRangeListerExpansion interface{}
+
+// LimitRangeNamespaceListerExpansion allows custom methods to be added to
+// LimitRangeNamespaceLister.
+type LimitRangeNamespaceListerExpansion interface{}
+
+// NamespaceListerExpansion allows custom methods to be added to
+// NamespaceLister.
+type NamespaceListerExpansion interface{}
+
+// NodeListerExpansion allows custom methods to be added to
+// NodeLister.
+type NodeListerExpansion interface{}
+
+// PersistentVolumeListerExpansion allows custom methods to be added to
+// PersistentVolumeLister.
+type PersistentVolumeListerExpansion interface{}
+
+// PersistentVolumeClaimListerExpansion allows custom methods to be added to
+// PersistentVolumeClaimLister.
+type PersistentVolumeClaimListerExpansion interface{}
+
+// PersistentVolumeClaimNamespaceListerExpansion allows custom methods to be added to
+// PersistentVolumeClaimNamespaceLister.
+type PersistentVolumeClaimNamespaceListerExpansion interface{}
+
+// PodListerExpansion allows custom methods to be added to
+// PodLister.
+type PodListerExpansion interface{}
+
+// PodNamespaceListerExpansion allows custom methods to be added to
+// PodNamespaceLister.
+type PodNamespaceListerExpansion interface{}
+
+// PodTemplateListerExpansion allows custom methods to be added to
+// PodTemplateLister.
+type PodTemplateListerExpansion interface{}
+
+// PodTemplateNamespaceListerExpansion allows custom methods to be added to
+// PodTemplateNamespaceLister.
+type PodTemplateNamespaceListerExpansion interface{}
+
+// ResourceQuotaListerExpansion allows custom methods to be added to
+// ResourceQuotaLister.
+type ResourceQuotaListerExpansion interface{}
+
+// ResourceQuotaNamespaceListerExpansion allows custom methods to be added to
+// ResourceQuotaNamespaceLister.
+type ResourceQuotaNamespaceListerExpansion interface{}
+
+// SecretListerExpansion allows custom methods to be added to
+// SecretLister.
+type SecretListerExpansion interface{}
+
+// SecretNamespaceListerExpansion allows custom methods to be added to
+// SecretNamespaceLister.
+type SecretNamespaceListerExpansion interface{}
+
+// ServiceListerExpansion allows custom methods to be added to
+// ServiceLister.
+type ServiceListerExpansion interface{}
+
+// ServiceNamespaceListerExpansion allows custom methods to be added to
+// ServiceNamespaceLister.
+type ServiceNamespaceListerExpansion interface{}
+
+// ServiceAccountListerExpansion allows custom methods to be added to
+// ServiceAccountLister.
+type ServiceAccountListerExpansion interface{}
+
+// ServiceAccountNamespaceListerExpansion allows custom methods to be added to
+// ServiceAccountNamespaceLister.
+type ServiceAccountNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/core/v1/limitrange.go b/vendor/k8s.io/client-go/listers/core/v1/limitrange.go
new file mode 100644
index 00000000000..26402c8223e
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/core/v1/limitrange.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ corev1 "k8s.io/api/core/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// LimitRangeLister helps list LimitRanges.
+// All objects returned here must be treated as read-only.
+type LimitRangeLister interface {
+ // List lists all LimitRanges in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.LimitRange, err error)
+ // LimitRanges returns an object that can list and get LimitRanges.
+ LimitRanges(namespace string) LimitRangeNamespaceLister
+ LimitRangeListerExpansion
+}
+
+// limitRangeLister implements the LimitRangeLister interface.
+type limitRangeLister struct {
+ listers.ResourceIndexer[*corev1.LimitRange]
+}
+
+// NewLimitRangeLister returns a new LimitRangeLister.
+func NewLimitRangeLister(indexer cache.Indexer) LimitRangeLister {
+ return &limitRangeLister{listers.New[*corev1.LimitRange](indexer, corev1.Resource("limitrange"))}
+}
+
+// LimitRanges returns an object that can list and get LimitRanges.
+func (s *limitRangeLister) LimitRanges(namespace string) LimitRangeNamespaceLister {
+ return limitRangeNamespaceLister{listers.NewNamespaced[*corev1.LimitRange](s.ResourceIndexer, namespace)}
+}
+
+// LimitRangeNamespaceLister helps list and get LimitRanges.
+// All objects returned here must be treated as read-only.
+type LimitRangeNamespaceLister interface {
+ // List lists all LimitRanges in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.LimitRange, err error)
+ // Get retrieves the LimitRange from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*corev1.LimitRange, error)
+ LimitRangeNamespaceListerExpansion
+}
+
+// limitRangeNamespaceLister implements the LimitRangeNamespaceLister
+// interface.
+type limitRangeNamespaceLister struct {
+ listers.ResourceIndexer[*corev1.LimitRange]
+}
diff --git a/vendor/k8s.io/client-go/listers/core/v1/namespace.go b/vendor/k8s.io/client-go/listers/core/v1/namespace.go
new file mode 100644
index 00000000000..d0cd4e5c7a0
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/core/v1/namespace.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ corev1 "k8s.io/api/core/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// NamespaceLister helps list Namespaces.
+// All objects returned here must be treated as read-only.
+type NamespaceLister interface {
+ // List lists all Namespaces in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.Namespace, err error)
+ // Get retrieves the Namespace from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*corev1.Namespace, error)
+ NamespaceListerExpansion
+}
+
+// namespaceLister implements the NamespaceLister interface.
+type namespaceLister struct {
+ listers.ResourceIndexer[*corev1.Namespace]
+}
+
+// NewNamespaceLister returns a new NamespaceLister.
+func NewNamespaceLister(indexer cache.Indexer) NamespaceLister {
+ return &namespaceLister{listers.New[*corev1.Namespace](indexer, corev1.Resource("namespace"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/core/v1/node.go b/vendor/k8s.io/client-go/listers/core/v1/node.go
new file mode 100644
index 00000000000..c9ffe2e5297
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/core/v1/node.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ corev1 "k8s.io/api/core/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// NodeLister helps list Nodes.
+// All objects returned here must be treated as read-only.
+type NodeLister interface {
+ // List lists all Nodes in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.Node, err error)
+ // Get retrieves the Node from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*corev1.Node, error)
+ NodeListerExpansion
+}
+
+// nodeLister implements the NodeLister interface.
+type nodeLister struct {
+ listers.ResourceIndexer[*corev1.Node]
+}
+
+// NewNodeLister returns a new NodeLister.
+func NewNodeLister(indexer cache.Indexer) NodeLister {
+ return &nodeLister{listers.New[*corev1.Node](indexer, corev1.Resource("node"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/core/v1/persistentvolume.go b/vendor/k8s.io/client-go/listers/core/v1/persistentvolume.go
new file mode 100644
index 00000000000..3f3a17cba05
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/core/v1/persistentvolume.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ corev1 "k8s.io/api/core/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PersistentVolumeLister helps list PersistentVolumes.
+// All objects returned here must be treated as read-only.
+type PersistentVolumeLister interface {
+ // List lists all PersistentVolumes in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.PersistentVolume, err error)
+ // Get retrieves the PersistentVolume from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*corev1.PersistentVolume, error)
+ PersistentVolumeListerExpansion
+}
+
+// persistentVolumeLister implements the PersistentVolumeLister interface.
+type persistentVolumeLister struct {
+ listers.ResourceIndexer[*corev1.PersistentVolume]
+}
+
+// NewPersistentVolumeLister returns a new PersistentVolumeLister.
+func NewPersistentVolumeLister(indexer cache.Indexer) PersistentVolumeLister {
+ return &persistentVolumeLister{listers.New[*corev1.PersistentVolume](indexer, corev1.Resource("persistentvolume"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/core/v1/persistentvolumeclaim.go b/vendor/k8s.io/client-go/listers/core/v1/persistentvolumeclaim.go
new file mode 100644
index 00000000000..0665e61722a
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/core/v1/persistentvolumeclaim.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ corev1 "k8s.io/api/core/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PersistentVolumeClaimLister helps list PersistentVolumeClaims.
+// All objects returned here must be treated as read-only.
+type PersistentVolumeClaimLister interface {
+ // List lists all PersistentVolumeClaims in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.PersistentVolumeClaim, err error)
+ // PersistentVolumeClaims returns an object that can list and get PersistentVolumeClaims.
+ PersistentVolumeClaims(namespace string) PersistentVolumeClaimNamespaceLister
+ PersistentVolumeClaimListerExpansion
+}
+
+// persistentVolumeClaimLister implements the PersistentVolumeClaimLister interface.
+type persistentVolumeClaimLister struct {
+ listers.ResourceIndexer[*corev1.PersistentVolumeClaim]
+}
+
+// NewPersistentVolumeClaimLister returns a new PersistentVolumeClaimLister.
+func NewPersistentVolumeClaimLister(indexer cache.Indexer) PersistentVolumeClaimLister {
+ return &persistentVolumeClaimLister{listers.New[*corev1.PersistentVolumeClaim](indexer, corev1.Resource("persistentvolumeclaim"))}
+}
+
+// PersistentVolumeClaims returns an object that can list and get PersistentVolumeClaims.
+func (s *persistentVolumeClaimLister) PersistentVolumeClaims(namespace string) PersistentVolumeClaimNamespaceLister {
+ return persistentVolumeClaimNamespaceLister{listers.NewNamespaced[*corev1.PersistentVolumeClaim](s.ResourceIndexer, namespace)}
+}
+
+// PersistentVolumeClaimNamespaceLister helps list and get PersistentVolumeClaims.
+// All objects returned here must be treated as read-only.
+type PersistentVolumeClaimNamespaceLister interface {
+ // List lists all PersistentVolumeClaims in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.PersistentVolumeClaim, err error)
+ // Get retrieves the PersistentVolumeClaim from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*corev1.PersistentVolumeClaim, error)
+ PersistentVolumeClaimNamespaceListerExpansion
+}
+
+// persistentVolumeClaimNamespaceLister implements the PersistentVolumeClaimNamespaceLister
+// interface.
+type persistentVolumeClaimNamespaceLister struct {
+ listers.ResourceIndexer[*corev1.PersistentVolumeClaim]
+}
diff --git a/vendor/k8s.io/client-go/listers/core/v1/pod.go b/vendor/k8s.io/client-go/listers/core/v1/pod.go
new file mode 100644
index 00000000000..0ea9d678b09
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/core/v1/pod.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ corev1 "k8s.io/api/core/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PodLister helps list Pods.
+// All objects returned here must be treated as read-only.
+type PodLister interface {
+ // List lists all Pods in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.Pod, err error)
+ // Pods returns an object that can list and get Pods.
+ Pods(namespace string) PodNamespaceLister
+ PodListerExpansion
+}
+
+// podLister implements the PodLister interface.
+type podLister struct {
+ listers.ResourceIndexer[*corev1.Pod]
+}
+
+// NewPodLister returns a new PodLister.
+func NewPodLister(indexer cache.Indexer) PodLister {
+ return &podLister{listers.New[*corev1.Pod](indexer, corev1.Resource("pod"))}
+}
+
+// Pods returns an object that can list and get Pods.
+func (s *podLister) Pods(namespace string) PodNamespaceLister {
+ return podNamespaceLister{listers.NewNamespaced[*corev1.Pod](s.ResourceIndexer, namespace)}
+}
+
+// PodNamespaceLister helps list and get Pods.
+// All objects returned here must be treated as read-only.
+type PodNamespaceLister interface {
+ // List lists all Pods in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.Pod, err error)
+ // Get retrieves the Pod from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*corev1.Pod, error)
+ PodNamespaceListerExpansion
+}
+
+// podNamespaceLister implements the PodNamespaceLister
+// interface.
+type podNamespaceLister struct {
+ listers.ResourceIndexer[*corev1.Pod]
+}
diff --git a/vendor/k8s.io/client-go/listers/core/v1/podtemplate.go b/vendor/k8s.io/client-go/listers/core/v1/podtemplate.go
new file mode 100644
index 00000000000..6ee5daf08eb
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/core/v1/podtemplate.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ corev1 "k8s.io/api/core/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PodTemplateLister helps list PodTemplates.
+// All objects returned here must be treated as read-only.
+type PodTemplateLister interface {
+ // List lists all PodTemplates in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.PodTemplate, err error)
+ // PodTemplates returns an object that can list and get PodTemplates.
+ PodTemplates(namespace string) PodTemplateNamespaceLister
+ PodTemplateListerExpansion
+}
+
+// podTemplateLister implements the PodTemplateLister interface.
+type podTemplateLister struct {
+ listers.ResourceIndexer[*corev1.PodTemplate]
+}
+
+// NewPodTemplateLister returns a new PodTemplateLister.
+func NewPodTemplateLister(indexer cache.Indexer) PodTemplateLister {
+ return &podTemplateLister{listers.New[*corev1.PodTemplate](indexer, corev1.Resource("podtemplate"))}
+}
+
+// PodTemplates returns an object that can list and get PodTemplates.
+func (s *podTemplateLister) PodTemplates(namespace string) PodTemplateNamespaceLister {
+ return podTemplateNamespaceLister{listers.NewNamespaced[*corev1.PodTemplate](s.ResourceIndexer, namespace)}
+}
+
+// PodTemplateNamespaceLister helps list and get PodTemplates.
+// All objects returned here must be treated as read-only.
+type PodTemplateNamespaceLister interface {
+ // List lists all PodTemplates in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.PodTemplate, err error)
+ // Get retrieves the PodTemplate from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*corev1.PodTemplate, error)
+ PodTemplateNamespaceListerExpansion
+}
+
+// podTemplateNamespaceLister implements the PodTemplateNamespaceLister
+// interface.
+type podTemplateNamespaceLister struct {
+ listers.ResourceIndexer[*corev1.PodTemplate]
+}
diff --git a/vendor/k8s.io/client-go/listers/core/v1/replicationcontroller.go b/vendor/k8s.io/client-go/listers/core/v1/replicationcontroller.go
new file mode 100644
index 00000000000..8d366f7409f
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/core/v1/replicationcontroller.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ corev1 "k8s.io/api/core/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ReplicationControllerLister helps list ReplicationControllers.
+// All objects returned here must be treated as read-only.
+type ReplicationControllerLister interface {
+ // List lists all ReplicationControllers in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.ReplicationController, err error)
+ // ReplicationControllers returns an object that can list and get ReplicationControllers.
+ ReplicationControllers(namespace string) ReplicationControllerNamespaceLister
+ ReplicationControllerListerExpansion
+}
+
+// replicationControllerLister implements the ReplicationControllerLister interface.
+type replicationControllerLister struct {
+ listers.ResourceIndexer[*corev1.ReplicationController]
+}
+
+// NewReplicationControllerLister returns a new ReplicationControllerLister.
+func NewReplicationControllerLister(indexer cache.Indexer) ReplicationControllerLister {
+ return &replicationControllerLister{listers.New[*corev1.ReplicationController](indexer, corev1.Resource("replicationcontroller"))}
+}
+
+// ReplicationControllers returns an object that can list and get ReplicationControllers.
+func (s *replicationControllerLister) ReplicationControllers(namespace string) ReplicationControllerNamespaceLister {
+ return replicationControllerNamespaceLister{listers.NewNamespaced[*corev1.ReplicationController](s.ResourceIndexer, namespace)}
+}
+
+// ReplicationControllerNamespaceLister helps list and get ReplicationControllers.
+// All objects returned here must be treated as read-only.
+type ReplicationControllerNamespaceLister interface {
+ // List lists all ReplicationControllers in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.ReplicationController, err error)
+ // Get retrieves the ReplicationController from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*corev1.ReplicationController, error)
+ ReplicationControllerNamespaceListerExpansion
+}
+
+// replicationControllerNamespaceLister implements the ReplicationControllerNamespaceLister
+// interface.
+type replicationControllerNamespaceLister struct {
+ listers.ResourceIndexer[*corev1.ReplicationController]
+}
diff --git a/vendor/k8s.io/client-go/listers/core/v1/replicationcontroller_expansion.go b/vendor/k8s.io/client-go/listers/core/v1/replicationcontroller_expansion.go
new file mode 100644
index 00000000000..b031d52173a
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/core/v1/replicationcontroller_expansion.go
@@ -0,0 +1,66 @@
+/*
+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 v1
+
+import (
+ "fmt"
+
+ "k8s.io/api/core/v1"
+ "k8s.io/apimachinery/pkg/labels"
+)
+
+// ReplicationControllerListerExpansion allows custom methods to be added to
+// ReplicationControllerLister.
+type ReplicationControllerListerExpansion interface {
+ GetPodControllers(pod *v1.Pod) ([]*v1.ReplicationController, error)
+}
+
+// ReplicationControllerNamespaceListerExpansion allows custom methods to be added to
+// ReplicationControllerNamespaceLister.
+type ReplicationControllerNamespaceListerExpansion interface{}
+
+// GetPodControllers returns a list of ReplicationControllers that potentially match a pod.
+// Only the one specified in the Pod's ControllerRef will actually manage it.
+// Returns an error only if no matching ReplicationControllers are found.
+func (s *replicationControllerLister) GetPodControllers(pod *v1.Pod) ([]*v1.ReplicationController, error) {
+ if len(pod.Labels) == 0 {
+ return nil, fmt.Errorf("no controllers found for pod %v because it has no labels", pod.Name)
+ }
+
+ items, err := s.ReplicationControllers(pod.Namespace).List(labels.Everything())
+ if err != nil {
+ return nil, err
+ }
+
+ var controllers []*v1.ReplicationController
+ for i := range items {
+ rc := items[i]
+ selector := labels.Set(rc.Spec.Selector).AsSelectorPreValidated()
+
+ // If an rc with a nil or empty selector creeps in, it should match nothing, not everything.
+ if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) {
+ continue
+ }
+ controllers = append(controllers, rc)
+ }
+
+ if len(controllers) == 0 {
+ return nil, fmt.Errorf("could not find controller for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
+ }
+
+ return controllers, nil
+}
diff --git a/vendor/k8s.io/client-go/listers/core/v1/resourcequota.go b/vendor/k8s.io/client-go/listers/core/v1/resourcequota.go
new file mode 100644
index 00000000000..67dd9a2863c
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/core/v1/resourcequota.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ corev1 "k8s.io/api/core/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceQuotaLister helps list ResourceQuotas.
+// All objects returned here must be treated as read-only.
+type ResourceQuotaLister interface {
+ // List lists all ResourceQuotas in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.ResourceQuota, err error)
+ // ResourceQuotas returns an object that can list and get ResourceQuotas.
+ ResourceQuotas(namespace string) ResourceQuotaNamespaceLister
+ ResourceQuotaListerExpansion
+}
+
+// resourceQuotaLister implements the ResourceQuotaLister interface.
+type resourceQuotaLister struct {
+ listers.ResourceIndexer[*corev1.ResourceQuota]
+}
+
+// NewResourceQuotaLister returns a new ResourceQuotaLister.
+func NewResourceQuotaLister(indexer cache.Indexer) ResourceQuotaLister {
+ return &resourceQuotaLister{listers.New[*corev1.ResourceQuota](indexer, corev1.Resource("resourcequota"))}
+}
+
+// ResourceQuotas returns an object that can list and get ResourceQuotas.
+func (s *resourceQuotaLister) ResourceQuotas(namespace string) ResourceQuotaNamespaceLister {
+ return resourceQuotaNamespaceLister{listers.NewNamespaced[*corev1.ResourceQuota](s.ResourceIndexer, namespace)}
+}
+
+// ResourceQuotaNamespaceLister helps list and get ResourceQuotas.
+// All objects returned here must be treated as read-only.
+type ResourceQuotaNamespaceLister interface {
+ // List lists all ResourceQuotas in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.ResourceQuota, err error)
+ // Get retrieves the ResourceQuota from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*corev1.ResourceQuota, error)
+ ResourceQuotaNamespaceListerExpansion
+}
+
+// resourceQuotaNamespaceLister implements the ResourceQuotaNamespaceLister
+// interface.
+type resourceQuotaNamespaceLister struct {
+ listers.ResourceIndexer[*corev1.ResourceQuota]
+}
diff --git a/vendor/k8s.io/client-go/listers/core/v1/secret.go b/vendor/k8s.io/client-go/listers/core/v1/secret.go
new file mode 100644
index 00000000000..16a8da382d1
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/core/v1/secret.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ corev1 "k8s.io/api/core/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// SecretLister helps list Secrets.
+// All objects returned here must be treated as read-only.
+type SecretLister interface {
+ // List lists all Secrets in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.Secret, err error)
+ // Secrets returns an object that can list and get Secrets.
+ Secrets(namespace string) SecretNamespaceLister
+ SecretListerExpansion
+}
+
+// secretLister implements the SecretLister interface.
+type secretLister struct {
+ listers.ResourceIndexer[*corev1.Secret]
+}
+
+// NewSecretLister returns a new SecretLister.
+func NewSecretLister(indexer cache.Indexer) SecretLister {
+ return &secretLister{listers.New[*corev1.Secret](indexer, corev1.Resource("secret"))}
+}
+
+// Secrets returns an object that can list and get Secrets.
+func (s *secretLister) Secrets(namespace string) SecretNamespaceLister {
+ return secretNamespaceLister{listers.NewNamespaced[*corev1.Secret](s.ResourceIndexer, namespace)}
+}
+
+// SecretNamespaceLister helps list and get Secrets.
+// All objects returned here must be treated as read-only.
+type SecretNamespaceLister interface {
+ // List lists all Secrets in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.Secret, err error)
+ // Get retrieves the Secret from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*corev1.Secret, error)
+ SecretNamespaceListerExpansion
+}
+
+// secretNamespaceLister implements the SecretNamespaceLister
+// interface.
+type secretNamespaceLister struct {
+ listers.ResourceIndexer[*corev1.Secret]
+}
diff --git a/vendor/k8s.io/client-go/listers/core/v1/service.go b/vendor/k8s.io/client-go/listers/core/v1/service.go
new file mode 100644
index 00000000000..dcd89403102
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/core/v1/service.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ corev1 "k8s.io/api/core/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ServiceLister helps list Services.
+// All objects returned here must be treated as read-only.
+type ServiceLister interface {
+ // List lists all Services in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.Service, err error)
+ // Services returns an object that can list and get Services.
+ Services(namespace string) ServiceNamespaceLister
+ ServiceListerExpansion
+}
+
+// serviceLister implements the ServiceLister interface.
+type serviceLister struct {
+ listers.ResourceIndexer[*corev1.Service]
+}
+
+// NewServiceLister returns a new ServiceLister.
+func NewServiceLister(indexer cache.Indexer) ServiceLister {
+ return &serviceLister{listers.New[*corev1.Service](indexer, corev1.Resource("service"))}
+}
+
+// Services returns an object that can list and get Services.
+func (s *serviceLister) Services(namespace string) ServiceNamespaceLister {
+ return serviceNamespaceLister{listers.NewNamespaced[*corev1.Service](s.ResourceIndexer, namespace)}
+}
+
+// ServiceNamespaceLister helps list and get Services.
+// All objects returned here must be treated as read-only.
+type ServiceNamespaceLister interface {
+ // List lists all Services in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.Service, err error)
+ // Get retrieves the Service from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*corev1.Service, error)
+ ServiceNamespaceListerExpansion
+}
+
+// serviceNamespaceLister implements the ServiceNamespaceLister
+// interface.
+type serviceNamespaceLister struct {
+ listers.ResourceIndexer[*corev1.Service]
+}
diff --git a/vendor/k8s.io/client-go/listers/core/v1/serviceaccount.go b/vendor/k8s.io/client-go/listers/core/v1/serviceaccount.go
new file mode 100644
index 00000000000..aaf888a8296
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/core/v1/serviceaccount.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ corev1 "k8s.io/api/core/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ServiceAccountLister helps list ServiceAccounts.
+// All objects returned here must be treated as read-only.
+type ServiceAccountLister interface {
+ // List lists all ServiceAccounts in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.ServiceAccount, err error)
+ // ServiceAccounts returns an object that can list and get ServiceAccounts.
+ ServiceAccounts(namespace string) ServiceAccountNamespaceLister
+ ServiceAccountListerExpansion
+}
+
+// serviceAccountLister implements the ServiceAccountLister interface.
+type serviceAccountLister struct {
+ listers.ResourceIndexer[*corev1.ServiceAccount]
+}
+
+// NewServiceAccountLister returns a new ServiceAccountLister.
+func NewServiceAccountLister(indexer cache.Indexer) ServiceAccountLister {
+ return &serviceAccountLister{listers.New[*corev1.ServiceAccount](indexer, corev1.Resource("serviceaccount"))}
+}
+
+// ServiceAccounts returns an object that can list and get ServiceAccounts.
+func (s *serviceAccountLister) ServiceAccounts(namespace string) ServiceAccountNamespaceLister {
+ return serviceAccountNamespaceLister{listers.NewNamespaced[*corev1.ServiceAccount](s.ResourceIndexer, namespace)}
+}
+
+// ServiceAccountNamespaceLister helps list and get ServiceAccounts.
+// All objects returned here must be treated as read-only.
+type ServiceAccountNamespaceLister interface {
+ // List lists all ServiceAccounts in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*corev1.ServiceAccount, err error)
+ // Get retrieves the ServiceAccount from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*corev1.ServiceAccount, error)
+ ServiceAccountNamespaceListerExpansion
+}
+
+// serviceAccountNamespaceLister implements the ServiceAccountNamespaceLister
+// interface.
+type serviceAccountNamespaceLister struct {
+ listers.ResourceIndexer[*corev1.ServiceAccount]
+}
diff --git a/vendor/k8s.io/client-go/listers/discovery/v1/endpointslice.go b/vendor/k8s.io/client-go/listers/discovery/v1/endpointslice.go
new file mode 100644
index 00000000000..0255ef8bb91
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/discovery/v1/endpointslice.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ discoveryv1 "k8s.io/api/discovery/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// EndpointSliceLister helps list EndpointSlices.
+// All objects returned here must be treated as read-only.
+type EndpointSliceLister interface {
+ // List lists all EndpointSlices in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*discoveryv1.EndpointSlice, err error)
+ // EndpointSlices returns an object that can list and get EndpointSlices.
+ EndpointSlices(namespace string) EndpointSliceNamespaceLister
+ EndpointSliceListerExpansion
+}
+
+// endpointSliceLister implements the EndpointSliceLister interface.
+type endpointSliceLister struct {
+ listers.ResourceIndexer[*discoveryv1.EndpointSlice]
+}
+
+// NewEndpointSliceLister returns a new EndpointSliceLister.
+func NewEndpointSliceLister(indexer cache.Indexer) EndpointSliceLister {
+ return &endpointSliceLister{listers.New[*discoveryv1.EndpointSlice](indexer, discoveryv1.Resource("endpointslice"))}
+}
+
+// EndpointSlices returns an object that can list and get EndpointSlices.
+func (s *endpointSliceLister) EndpointSlices(namespace string) EndpointSliceNamespaceLister {
+ return endpointSliceNamespaceLister{listers.NewNamespaced[*discoveryv1.EndpointSlice](s.ResourceIndexer, namespace)}
+}
+
+// EndpointSliceNamespaceLister helps list and get EndpointSlices.
+// All objects returned here must be treated as read-only.
+type EndpointSliceNamespaceLister interface {
+ // List lists all EndpointSlices in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*discoveryv1.EndpointSlice, err error)
+ // Get retrieves the EndpointSlice from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*discoveryv1.EndpointSlice, error)
+ EndpointSliceNamespaceListerExpansion
+}
+
+// endpointSliceNamespaceLister implements the EndpointSliceNamespaceLister
+// interface.
+type endpointSliceNamespaceLister struct {
+ listers.ResourceIndexer[*discoveryv1.EndpointSlice]
+}
diff --git a/vendor/k8s.io/client-go/listers/discovery/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/discovery/v1/expansion_generated.go
new file mode 100644
index 00000000000..660163eeef3
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/discovery/v1/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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 v1
+
+// EndpointSliceListerExpansion allows custom methods to be added to
+// EndpointSliceLister.
+type EndpointSliceListerExpansion interface{}
+
+// EndpointSliceNamespaceListerExpansion allows custom methods to be added to
+// EndpointSliceNamespaceLister.
+type EndpointSliceNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/discovery/v1beta1/endpointslice.go b/vendor/k8s.io/client-go/listers/discovery/v1beta1/endpointslice.go
new file mode 100644
index 00000000000..2fb6f0549ae
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/discovery/v1beta1/endpointslice.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ discoveryv1beta1 "k8s.io/api/discovery/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// EndpointSliceLister helps list EndpointSlices.
+// All objects returned here must be treated as read-only.
+type EndpointSliceLister interface {
+ // List lists all EndpointSlices in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*discoveryv1beta1.EndpointSlice, err error)
+ // EndpointSlices returns an object that can list and get EndpointSlices.
+ EndpointSlices(namespace string) EndpointSliceNamespaceLister
+ EndpointSliceListerExpansion
+}
+
+// endpointSliceLister implements the EndpointSliceLister interface.
+type endpointSliceLister struct {
+ listers.ResourceIndexer[*discoveryv1beta1.EndpointSlice]
+}
+
+// NewEndpointSliceLister returns a new EndpointSliceLister.
+func NewEndpointSliceLister(indexer cache.Indexer) EndpointSliceLister {
+ return &endpointSliceLister{listers.New[*discoveryv1beta1.EndpointSlice](indexer, discoveryv1beta1.Resource("endpointslice"))}
+}
+
+// EndpointSlices returns an object that can list and get EndpointSlices.
+func (s *endpointSliceLister) EndpointSlices(namespace string) EndpointSliceNamespaceLister {
+ return endpointSliceNamespaceLister{listers.NewNamespaced[*discoveryv1beta1.EndpointSlice](s.ResourceIndexer, namespace)}
+}
+
+// EndpointSliceNamespaceLister helps list and get EndpointSlices.
+// All objects returned here must be treated as read-only.
+type EndpointSliceNamespaceLister interface {
+ // List lists all EndpointSlices in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*discoveryv1beta1.EndpointSlice, err error)
+ // Get retrieves the EndpointSlice from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*discoveryv1beta1.EndpointSlice, error)
+ EndpointSliceNamespaceListerExpansion
+}
+
+// endpointSliceNamespaceLister implements the EndpointSliceNamespaceLister
+// interface.
+type endpointSliceNamespaceLister struct {
+ listers.ResourceIndexer[*discoveryv1beta1.EndpointSlice]
+}
diff --git a/vendor/k8s.io/client-go/listers/discovery/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/discovery/v1beta1/expansion_generated.go
new file mode 100644
index 00000000000..9619bbd8dd7
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/discovery/v1beta1/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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 v1beta1
+
+// EndpointSliceListerExpansion allows custom methods to be added to
+// EndpointSliceLister.
+type EndpointSliceListerExpansion interface{}
+
+// EndpointSliceNamespaceListerExpansion allows custom methods to be added to
+// EndpointSliceNamespaceLister.
+type EndpointSliceNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/doc.go b/vendor/k8s.io/client-go/listers/doc.go
new file mode 100644
index 00000000000..da6a80408fd
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/doc.go
@@ -0,0 +1,18 @@
+/*
+Copyright 2023 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 listers provides generated listers for Kubernetes APIs.
+package listers
diff --git a/vendor/k8s.io/client-go/listers/events/v1/event.go b/vendor/k8s.io/client-go/listers/events/v1/event.go
new file mode 100644
index 00000000000..9ea5bbaf8cd
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/events/v1/event.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ eventsv1 "k8s.io/api/events/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// EventLister helps list Events.
+// All objects returned here must be treated as read-only.
+type EventLister interface {
+ // List lists all Events in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*eventsv1.Event, err error)
+ // Events returns an object that can list and get Events.
+ Events(namespace string) EventNamespaceLister
+ EventListerExpansion
+}
+
+// eventLister implements the EventLister interface.
+type eventLister struct {
+ listers.ResourceIndexer[*eventsv1.Event]
+}
+
+// NewEventLister returns a new EventLister.
+func NewEventLister(indexer cache.Indexer) EventLister {
+ return &eventLister{listers.New[*eventsv1.Event](indexer, eventsv1.Resource("event"))}
+}
+
+// Events returns an object that can list and get Events.
+func (s *eventLister) Events(namespace string) EventNamespaceLister {
+ return eventNamespaceLister{listers.NewNamespaced[*eventsv1.Event](s.ResourceIndexer, namespace)}
+}
+
+// EventNamespaceLister helps list and get Events.
+// All objects returned here must be treated as read-only.
+type EventNamespaceLister interface {
+ // List lists all Events in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*eventsv1.Event, err error)
+ // Get retrieves the Event from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*eventsv1.Event, error)
+ EventNamespaceListerExpansion
+}
+
+// eventNamespaceLister implements the EventNamespaceLister
+// interface.
+type eventNamespaceLister struct {
+ listers.ResourceIndexer[*eventsv1.Event]
+}
diff --git a/vendor/k8s.io/client-go/listers/events/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/events/v1/expansion_generated.go
new file mode 100644
index 00000000000..348e784d745
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/events/v1/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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 v1
+
+// EventListerExpansion allows custom methods to be added to
+// EventLister.
+type EventListerExpansion interface{}
+
+// EventNamespaceListerExpansion allows custom methods to be added to
+// EventNamespaceLister.
+type EventNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/events/v1beta1/event.go b/vendor/k8s.io/client-go/listers/events/v1beta1/event.go
new file mode 100644
index 00000000000..24fc96261ef
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/events/v1beta1/event.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ eventsv1beta1 "k8s.io/api/events/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// EventLister helps list Events.
+// All objects returned here must be treated as read-only.
+type EventLister interface {
+ // List lists all Events in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*eventsv1beta1.Event, err error)
+ // Events returns an object that can list and get Events.
+ Events(namespace string) EventNamespaceLister
+ EventListerExpansion
+}
+
+// eventLister implements the EventLister interface.
+type eventLister struct {
+ listers.ResourceIndexer[*eventsv1beta1.Event]
+}
+
+// NewEventLister returns a new EventLister.
+func NewEventLister(indexer cache.Indexer) EventLister {
+ return &eventLister{listers.New[*eventsv1beta1.Event](indexer, eventsv1beta1.Resource("event"))}
+}
+
+// Events returns an object that can list and get Events.
+func (s *eventLister) Events(namespace string) EventNamespaceLister {
+ return eventNamespaceLister{listers.NewNamespaced[*eventsv1beta1.Event](s.ResourceIndexer, namespace)}
+}
+
+// EventNamespaceLister helps list and get Events.
+// All objects returned here must be treated as read-only.
+type EventNamespaceLister interface {
+ // List lists all Events in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*eventsv1beta1.Event, err error)
+ // Get retrieves the Event from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*eventsv1beta1.Event, error)
+ EventNamespaceListerExpansion
+}
+
+// eventNamespaceLister implements the EventNamespaceLister
+// interface.
+type eventNamespaceLister struct {
+ listers.ResourceIndexer[*eventsv1beta1.Event]
+}
diff --git a/vendor/k8s.io/client-go/listers/events/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/events/v1beta1/expansion_generated.go
new file mode 100644
index 00000000000..d311691d9da
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/events/v1beta1/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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 v1beta1
+
+// EventListerExpansion allows custom methods to be added to
+// EventLister.
+type EventListerExpansion interface{}
+
+// EventNamespaceListerExpansion allows custom methods to be added to
+// EventNamespaceLister.
+type EventNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/daemonset.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/daemonset.go
new file mode 100644
index 00000000000..c785760888d
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/extensions/v1beta1/daemonset.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DaemonSetLister helps list DaemonSets.
+// All objects returned here must be treated as read-only.
+type DaemonSetLister interface {
+ // List lists all DaemonSets in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*extensionsv1beta1.DaemonSet, err error)
+ // DaemonSets returns an object that can list and get DaemonSets.
+ DaemonSets(namespace string) DaemonSetNamespaceLister
+ DaemonSetListerExpansion
+}
+
+// daemonSetLister implements the DaemonSetLister interface.
+type daemonSetLister struct {
+ listers.ResourceIndexer[*extensionsv1beta1.DaemonSet]
+}
+
+// NewDaemonSetLister returns a new DaemonSetLister.
+func NewDaemonSetLister(indexer cache.Indexer) DaemonSetLister {
+ return &daemonSetLister{listers.New[*extensionsv1beta1.DaemonSet](indexer, extensionsv1beta1.Resource("daemonset"))}
+}
+
+// DaemonSets returns an object that can list and get DaemonSets.
+func (s *daemonSetLister) DaemonSets(namespace string) DaemonSetNamespaceLister {
+ return daemonSetNamespaceLister{listers.NewNamespaced[*extensionsv1beta1.DaemonSet](s.ResourceIndexer, namespace)}
+}
+
+// DaemonSetNamespaceLister helps list and get DaemonSets.
+// All objects returned here must be treated as read-only.
+type DaemonSetNamespaceLister interface {
+ // List lists all DaemonSets in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*extensionsv1beta1.DaemonSet, err error)
+ // Get retrieves the DaemonSet from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*extensionsv1beta1.DaemonSet, error)
+ DaemonSetNamespaceListerExpansion
+}
+
+// daemonSetNamespaceLister implements the DaemonSetNamespaceLister
+// interface.
+type daemonSetNamespaceLister struct {
+ listers.ResourceIndexer[*extensionsv1beta1.DaemonSet]
+}
diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/daemonset_expansion.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/daemonset_expansion.go
new file mode 100644
index 00000000000..f6dd7a963e8
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/extensions/v1beta1/daemonset_expansion.go
@@ -0,0 +1,115 @@
+/*
+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 v1beta1
+
+import (
+ "fmt"
+
+ apps "k8s.io/api/apps/v1beta1"
+ "k8s.io/api/core/v1"
+ "k8s.io/api/extensions/v1beta1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/labels"
+)
+
+// DaemonSetListerExpansion allows custom methods to be added to
+// DaemonSetLister.
+type DaemonSetListerExpansion interface {
+ GetPodDaemonSets(pod *v1.Pod) ([]*v1beta1.DaemonSet, error)
+ GetHistoryDaemonSets(history *apps.ControllerRevision) ([]*v1beta1.DaemonSet, error)
+}
+
+// DaemonSetNamespaceListerExpansion allows custom methods to be added to
+// DaemonSetNamespaceLister.
+type DaemonSetNamespaceListerExpansion interface{}
+
+// GetPodDaemonSets returns a list of DaemonSets that potentially match a pod.
+// Only the one specified in the Pod's ControllerRef will actually manage it.
+// Returns an error only if no matching DaemonSets are found.
+func (s *daemonSetLister) GetPodDaemonSets(pod *v1.Pod) ([]*v1beta1.DaemonSet, error) {
+ var selector labels.Selector
+ var daemonSet *v1beta1.DaemonSet
+
+ if len(pod.Labels) == 0 {
+ return nil, fmt.Errorf("no daemon sets found for pod %v because it has no labels", pod.Name)
+ }
+
+ list, err := s.DaemonSets(pod.Namespace).List(labels.Everything())
+ if err != nil {
+ return nil, err
+ }
+
+ var daemonSets []*v1beta1.DaemonSet
+ for i := range list {
+ daemonSet = list[i]
+ if daemonSet.Namespace != pod.Namespace {
+ continue
+ }
+ selector, err = metav1.LabelSelectorAsSelector(daemonSet.Spec.Selector)
+ if err != nil {
+ // This object has an invalid selector, it does not match the pod
+ continue
+ }
+
+ // If a daemonSet with a nil or empty selector creeps in, it should match nothing, not everything.
+ if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) {
+ continue
+ }
+ daemonSets = append(daemonSets, daemonSet)
+ }
+
+ if len(daemonSets) == 0 {
+ return nil, fmt.Errorf("could not find daemon set for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
+ }
+
+ return daemonSets, nil
+}
+
+// GetHistoryDaemonSets returns a list of DaemonSets that potentially
+// match a ControllerRevision. Only the one specified in the ControllerRevision's ControllerRef
+// will actually manage it.
+// Returns an error only if no matching DaemonSets are found.
+func (s *daemonSetLister) GetHistoryDaemonSets(history *apps.ControllerRevision) ([]*v1beta1.DaemonSet, error) {
+ if len(history.Labels) == 0 {
+ return nil, fmt.Errorf("no DaemonSet found for ControllerRevision %s because it has no labels", history.Name)
+ }
+
+ list, err := s.DaemonSets(history.Namespace).List(labels.Everything())
+ if err != nil {
+ return nil, err
+ }
+
+ var daemonSets []*v1beta1.DaemonSet
+ for _, ds := range list {
+ selector, err := metav1.LabelSelectorAsSelector(ds.Spec.Selector)
+ if err != nil {
+ // This object has an invalid selector, it does not match the history object
+ continue
+ }
+ // If a DaemonSet with a nil or empty selector creeps in, it should match nothing, not everything.
+ if selector.Empty() || !selector.Matches(labels.Set(history.Labels)) {
+ continue
+ }
+ daemonSets = append(daemonSets, ds)
+ }
+
+ if len(daemonSets) == 0 {
+ return nil, fmt.Errorf("could not find DaemonSets for ControllerRevision %s in namespace %s with labels: %v", history.Name, history.Namespace, history.Labels)
+ }
+
+ return daemonSets, nil
+}
diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/deployment.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/deployment.go
new file mode 100644
index 00000000000..efaea3991bc
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/extensions/v1beta1/deployment.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DeploymentLister helps list Deployments.
+// All objects returned here must be treated as read-only.
+type DeploymentLister interface {
+ // List lists all Deployments in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*extensionsv1beta1.Deployment, err error)
+ // Deployments returns an object that can list and get Deployments.
+ Deployments(namespace string) DeploymentNamespaceLister
+ DeploymentListerExpansion
+}
+
+// deploymentLister implements the DeploymentLister interface.
+type deploymentLister struct {
+ listers.ResourceIndexer[*extensionsv1beta1.Deployment]
+}
+
+// NewDeploymentLister returns a new DeploymentLister.
+func NewDeploymentLister(indexer cache.Indexer) DeploymentLister {
+ return &deploymentLister{listers.New[*extensionsv1beta1.Deployment](indexer, extensionsv1beta1.Resource("deployment"))}
+}
+
+// Deployments returns an object that can list and get Deployments.
+func (s *deploymentLister) Deployments(namespace string) DeploymentNamespaceLister {
+ return deploymentNamespaceLister{listers.NewNamespaced[*extensionsv1beta1.Deployment](s.ResourceIndexer, namespace)}
+}
+
+// DeploymentNamespaceLister helps list and get Deployments.
+// All objects returned here must be treated as read-only.
+type DeploymentNamespaceLister interface {
+ // List lists all Deployments in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*extensionsv1beta1.Deployment, err error)
+ // Get retrieves the Deployment from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*extensionsv1beta1.Deployment, error)
+ DeploymentNamespaceListerExpansion
+}
+
+// deploymentNamespaceLister implements the DeploymentNamespaceLister
+// interface.
+type deploymentNamespaceLister struct {
+ listers.ResourceIndexer[*extensionsv1beta1.Deployment]
+}
diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/expansion_generated.go
new file mode 100644
index 00000000000..4c65dbf7645
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/extensions/v1beta1/expansion_generated.go
@@ -0,0 +1,43 @@
+/*
+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 v1beta1
+
+// DeploymentListerExpansion allows custom methods to be added to
+// DeploymentLister.
+type DeploymentListerExpansion interface{}
+
+// DeploymentNamespaceListerExpansion allows custom methods to be added to
+// DeploymentNamespaceLister.
+type DeploymentNamespaceListerExpansion interface{}
+
+// IngressListerExpansion allows custom methods to be added to
+// IngressLister.
+type IngressListerExpansion interface{}
+
+// IngressNamespaceListerExpansion allows custom methods to be added to
+// IngressNamespaceLister.
+type IngressNamespaceListerExpansion interface{}
+
+// NetworkPolicyListerExpansion allows custom methods to be added to
+// NetworkPolicyLister.
+type NetworkPolicyListerExpansion interface{}
+
+// NetworkPolicyNamespaceListerExpansion allows custom methods to be added to
+// NetworkPolicyNamespaceLister.
+type NetworkPolicyNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/ingress.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/ingress.go
new file mode 100644
index 00000000000..929a13faa66
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/extensions/v1beta1/ingress.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// IngressLister helps list Ingresses.
+// All objects returned here must be treated as read-only.
+type IngressLister interface {
+ // List lists all Ingresses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*extensionsv1beta1.Ingress, err error)
+ // Ingresses returns an object that can list and get Ingresses.
+ Ingresses(namespace string) IngressNamespaceLister
+ IngressListerExpansion
+}
+
+// ingressLister implements the IngressLister interface.
+type ingressLister struct {
+ listers.ResourceIndexer[*extensionsv1beta1.Ingress]
+}
+
+// NewIngressLister returns a new IngressLister.
+func NewIngressLister(indexer cache.Indexer) IngressLister {
+ return &ingressLister{listers.New[*extensionsv1beta1.Ingress](indexer, extensionsv1beta1.Resource("ingress"))}
+}
+
+// Ingresses returns an object that can list and get Ingresses.
+func (s *ingressLister) Ingresses(namespace string) IngressNamespaceLister {
+ return ingressNamespaceLister{listers.NewNamespaced[*extensionsv1beta1.Ingress](s.ResourceIndexer, namespace)}
+}
+
+// IngressNamespaceLister helps list and get Ingresses.
+// All objects returned here must be treated as read-only.
+type IngressNamespaceLister interface {
+ // List lists all Ingresses in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*extensionsv1beta1.Ingress, err error)
+ // Get retrieves the Ingress from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*extensionsv1beta1.Ingress, error)
+ IngressNamespaceListerExpansion
+}
+
+// ingressNamespaceLister implements the IngressNamespaceLister
+// interface.
+type ingressNamespaceLister struct {
+ listers.ResourceIndexer[*extensionsv1beta1.Ingress]
+}
diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/networkpolicy.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/networkpolicy.go
new file mode 100644
index 00000000000..ee88fd974c9
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/extensions/v1beta1/networkpolicy.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// NetworkPolicyLister helps list NetworkPolicies.
+// All objects returned here must be treated as read-only.
+type NetworkPolicyLister interface {
+ // List lists all NetworkPolicies in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*extensionsv1beta1.NetworkPolicy, err error)
+ // NetworkPolicies returns an object that can list and get NetworkPolicies.
+ NetworkPolicies(namespace string) NetworkPolicyNamespaceLister
+ NetworkPolicyListerExpansion
+}
+
+// networkPolicyLister implements the NetworkPolicyLister interface.
+type networkPolicyLister struct {
+ listers.ResourceIndexer[*extensionsv1beta1.NetworkPolicy]
+}
+
+// NewNetworkPolicyLister returns a new NetworkPolicyLister.
+func NewNetworkPolicyLister(indexer cache.Indexer) NetworkPolicyLister {
+ return &networkPolicyLister{listers.New[*extensionsv1beta1.NetworkPolicy](indexer, extensionsv1beta1.Resource("networkpolicy"))}
+}
+
+// NetworkPolicies returns an object that can list and get NetworkPolicies.
+func (s *networkPolicyLister) NetworkPolicies(namespace string) NetworkPolicyNamespaceLister {
+ return networkPolicyNamespaceLister{listers.NewNamespaced[*extensionsv1beta1.NetworkPolicy](s.ResourceIndexer, namespace)}
+}
+
+// NetworkPolicyNamespaceLister helps list and get NetworkPolicies.
+// All objects returned here must be treated as read-only.
+type NetworkPolicyNamespaceLister interface {
+ // List lists all NetworkPolicies in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*extensionsv1beta1.NetworkPolicy, err error)
+ // Get retrieves the NetworkPolicy from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*extensionsv1beta1.NetworkPolicy, error)
+ NetworkPolicyNamespaceListerExpansion
+}
+
+// networkPolicyNamespaceLister implements the NetworkPolicyNamespaceLister
+// interface.
+type networkPolicyNamespaceLister struct {
+ listers.ResourceIndexer[*extensionsv1beta1.NetworkPolicy]
+}
diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/replicaset.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/replicaset.go
new file mode 100644
index 00000000000..853cc2bcda7
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/extensions/v1beta1/replicaset.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ReplicaSetLister helps list ReplicaSets.
+// All objects returned here must be treated as read-only.
+type ReplicaSetLister interface {
+ // List lists all ReplicaSets in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*extensionsv1beta1.ReplicaSet, err error)
+ // ReplicaSets returns an object that can list and get ReplicaSets.
+ ReplicaSets(namespace string) ReplicaSetNamespaceLister
+ ReplicaSetListerExpansion
+}
+
+// replicaSetLister implements the ReplicaSetLister interface.
+type replicaSetLister struct {
+ listers.ResourceIndexer[*extensionsv1beta1.ReplicaSet]
+}
+
+// NewReplicaSetLister returns a new ReplicaSetLister.
+func NewReplicaSetLister(indexer cache.Indexer) ReplicaSetLister {
+ return &replicaSetLister{listers.New[*extensionsv1beta1.ReplicaSet](indexer, extensionsv1beta1.Resource("replicaset"))}
+}
+
+// ReplicaSets returns an object that can list and get ReplicaSets.
+func (s *replicaSetLister) ReplicaSets(namespace string) ReplicaSetNamespaceLister {
+ return replicaSetNamespaceLister{listers.NewNamespaced[*extensionsv1beta1.ReplicaSet](s.ResourceIndexer, namespace)}
+}
+
+// ReplicaSetNamespaceLister helps list and get ReplicaSets.
+// All objects returned here must be treated as read-only.
+type ReplicaSetNamespaceLister interface {
+ // List lists all ReplicaSets in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*extensionsv1beta1.ReplicaSet, err error)
+ // Get retrieves the ReplicaSet from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*extensionsv1beta1.ReplicaSet, error)
+ ReplicaSetNamespaceListerExpansion
+}
+
+// replicaSetNamespaceLister implements the ReplicaSetNamespaceLister
+// interface.
+type replicaSetNamespaceLister struct {
+ listers.ResourceIndexer[*extensionsv1beta1.ReplicaSet]
+}
diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/replicaset_expansion.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/replicaset_expansion.go
new file mode 100644
index 00000000000..74114c2bd7d
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/extensions/v1beta1/replicaset_expansion.go
@@ -0,0 +1,74 @@
+/*
+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 v1beta1
+
+import (
+ "fmt"
+
+ "k8s.io/api/core/v1"
+ extensions "k8s.io/api/extensions/v1beta1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/labels"
+)
+
+// ReplicaSetListerExpansion allows custom methods to be added to
+// ReplicaSetLister.
+type ReplicaSetListerExpansion interface {
+ GetPodReplicaSets(pod *v1.Pod) ([]*extensions.ReplicaSet, error)
+}
+
+// ReplicaSetNamespaceListerExpansion allows custom methods to be added to
+// ReplicaSetNamespaceLister.
+type ReplicaSetNamespaceListerExpansion interface{}
+
+// GetPodReplicaSets returns a list of ReplicaSets that potentially match a pod.
+// Only the one specified in the Pod's ControllerRef will actually manage it.
+// Returns an error only if no matching ReplicaSets are found.
+func (s *replicaSetLister) GetPodReplicaSets(pod *v1.Pod) ([]*extensions.ReplicaSet, error) {
+ if len(pod.Labels) == 0 {
+ return nil, fmt.Errorf("no ReplicaSets found for pod %v because it has no labels", pod.Name)
+ }
+
+ list, err := s.ReplicaSets(pod.Namespace).List(labels.Everything())
+ if err != nil {
+ return nil, err
+ }
+
+ var rss []*extensions.ReplicaSet
+ for _, rs := range list {
+ if rs.Namespace != pod.Namespace {
+ continue
+ }
+ selector, err := metav1.LabelSelectorAsSelector(rs.Spec.Selector)
+ if err != nil {
+ // This object has an invalid selector, it does not match the pod
+ continue
+ }
+
+ // If a ReplicaSet with a nil or empty selector creeps in, it should match nothing, not everything.
+ if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) {
+ continue
+ }
+ rss = append(rss, rs)
+ }
+
+ if len(rss) == 0 {
+ return nil, fmt.Errorf("could not find ReplicaSet for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
+ }
+
+ return rss, nil
+}
diff --git a/vendor/k8s.io/client-go/listers/flowcontrol/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/flowcontrol/v1/expansion_generated.go
new file mode 100644
index 00000000000..70b5eb5b171
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/flowcontrol/v1/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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 v1
+
+// FlowSchemaListerExpansion allows custom methods to be added to
+// FlowSchemaLister.
+type FlowSchemaListerExpansion interface{}
+
+// PriorityLevelConfigurationListerExpansion allows custom methods to be added to
+// PriorityLevelConfigurationLister.
+type PriorityLevelConfigurationListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/flowcontrol/v1/flowschema.go b/vendor/k8s.io/client-go/listers/flowcontrol/v1/flowschema.go
new file mode 100644
index 00000000000..cccb3022bcb
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/flowcontrol/v1/flowschema.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ flowcontrolv1 "k8s.io/api/flowcontrol/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// FlowSchemaLister helps list FlowSchemas.
+// All objects returned here must be treated as read-only.
+type FlowSchemaLister interface {
+ // List lists all FlowSchemas in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*flowcontrolv1.FlowSchema, err error)
+ // Get retrieves the FlowSchema from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*flowcontrolv1.FlowSchema, error)
+ FlowSchemaListerExpansion
+}
+
+// flowSchemaLister implements the FlowSchemaLister interface.
+type flowSchemaLister struct {
+ listers.ResourceIndexer[*flowcontrolv1.FlowSchema]
+}
+
+// NewFlowSchemaLister returns a new FlowSchemaLister.
+func NewFlowSchemaLister(indexer cache.Indexer) FlowSchemaLister {
+ return &flowSchemaLister{listers.New[*flowcontrolv1.FlowSchema](indexer, flowcontrolv1.Resource("flowschema"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/flowcontrol/v1/prioritylevelconfiguration.go b/vendor/k8s.io/client-go/listers/flowcontrol/v1/prioritylevelconfiguration.go
new file mode 100644
index 00000000000..cc8db4a4694
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/flowcontrol/v1/prioritylevelconfiguration.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ flowcontrolv1 "k8s.io/api/flowcontrol/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PriorityLevelConfigurationLister helps list PriorityLevelConfigurations.
+// All objects returned here must be treated as read-only.
+type PriorityLevelConfigurationLister interface {
+ // List lists all PriorityLevelConfigurations in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*flowcontrolv1.PriorityLevelConfiguration, err error)
+ // Get retrieves the PriorityLevelConfiguration from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*flowcontrolv1.PriorityLevelConfiguration, error)
+ PriorityLevelConfigurationListerExpansion
+}
+
+// priorityLevelConfigurationLister implements the PriorityLevelConfigurationLister interface.
+type priorityLevelConfigurationLister struct {
+ listers.ResourceIndexer[*flowcontrolv1.PriorityLevelConfiguration]
+}
+
+// NewPriorityLevelConfigurationLister returns a new PriorityLevelConfigurationLister.
+func NewPriorityLevelConfigurationLister(indexer cache.Indexer) PriorityLevelConfigurationLister {
+ return &priorityLevelConfigurationLister{listers.New[*flowcontrolv1.PriorityLevelConfiguration](indexer, flowcontrolv1.Resource("prioritylevelconfiguration"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/flowcontrol/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta1/expansion_generated.go
new file mode 100644
index 00000000000..c674e951e0e
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta1/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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 v1beta1
+
+// FlowSchemaListerExpansion allows custom methods to be added to
+// FlowSchemaLister.
+type FlowSchemaListerExpansion interface{}
+
+// PriorityLevelConfigurationListerExpansion allows custom methods to be added to
+// PriorityLevelConfigurationLister.
+type PriorityLevelConfigurationListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/flowcontrol/v1beta1/flowschema.go b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta1/flowschema.go
new file mode 100644
index 00000000000..b85907d0322
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta1/flowschema.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ flowcontrolv1beta1 "k8s.io/api/flowcontrol/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// FlowSchemaLister helps list FlowSchemas.
+// All objects returned here must be treated as read-only.
+type FlowSchemaLister interface {
+ // List lists all FlowSchemas in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*flowcontrolv1beta1.FlowSchema, err error)
+ // Get retrieves the FlowSchema from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*flowcontrolv1beta1.FlowSchema, error)
+ FlowSchemaListerExpansion
+}
+
+// flowSchemaLister implements the FlowSchemaLister interface.
+type flowSchemaLister struct {
+ listers.ResourceIndexer[*flowcontrolv1beta1.FlowSchema]
+}
+
+// NewFlowSchemaLister returns a new FlowSchemaLister.
+func NewFlowSchemaLister(indexer cache.Indexer) FlowSchemaLister {
+ return &flowSchemaLister{listers.New[*flowcontrolv1beta1.FlowSchema](indexer, flowcontrolv1beta1.Resource("flowschema"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/flowcontrol/v1beta1/prioritylevelconfiguration.go b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta1/prioritylevelconfiguration.go
new file mode 100644
index 00000000000..338aef8e215
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta1/prioritylevelconfiguration.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ flowcontrolv1beta1 "k8s.io/api/flowcontrol/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PriorityLevelConfigurationLister helps list PriorityLevelConfigurations.
+// All objects returned here must be treated as read-only.
+type PriorityLevelConfigurationLister interface {
+ // List lists all PriorityLevelConfigurations in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*flowcontrolv1beta1.PriorityLevelConfiguration, err error)
+ // Get retrieves the PriorityLevelConfiguration from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*flowcontrolv1beta1.PriorityLevelConfiguration, error)
+ PriorityLevelConfigurationListerExpansion
+}
+
+// priorityLevelConfigurationLister implements the PriorityLevelConfigurationLister interface.
+type priorityLevelConfigurationLister struct {
+ listers.ResourceIndexer[*flowcontrolv1beta1.PriorityLevelConfiguration]
+}
+
+// NewPriorityLevelConfigurationLister returns a new PriorityLevelConfigurationLister.
+func NewPriorityLevelConfigurationLister(indexer cache.Indexer) PriorityLevelConfigurationLister {
+ return &priorityLevelConfigurationLister{listers.New[*flowcontrolv1beta1.PriorityLevelConfiguration](indexer, flowcontrolv1beta1.Resource("prioritylevelconfiguration"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/flowcontrol/v1beta2/expansion_generated.go b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta2/expansion_generated.go
new file mode 100644
index 00000000000..b658de6549c
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta2/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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 v1beta2
+
+// FlowSchemaListerExpansion allows custom methods to be added to
+// FlowSchemaLister.
+type FlowSchemaListerExpansion interface{}
+
+// PriorityLevelConfigurationListerExpansion allows custom methods to be added to
+// PriorityLevelConfigurationLister.
+type PriorityLevelConfigurationListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/flowcontrol/v1beta2/flowschema.go b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta2/flowschema.go
new file mode 100644
index 00000000000..5894a5a2923
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta2/flowschema.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta2
+
+import (
+ flowcontrolv1beta2 "k8s.io/api/flowcontrol/v1beta2"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// FlowSchemaLister helps list FlowSchemas.
+// All objects returned here must be treated as read-only.
+type FlowSchemaLister interface {
+ // List lists all FlowSchemas in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*flowcontrolv1beta2.FlowSchema, err error)
+ // Get retrieves the FlowSchema from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*flowcontrolv1beta2.FlowSchema, error)
+ FlowSchemaListerExpansion
+}
+
+// flowSchemaLister implements the FlowSchemaLister interface.
+type flowSchemaLister struct {
+ listers.ResourceIndexer[*flowcontrolv1beta2.FlowSchema]
+}
+
+// NewFlowSchemaLister returns a new FlowSchemaLister.
+func NewFlowSchemaLister(indexer cache.Indexer) FlowSchemaLister {
+ return &flowSchemaLister{listers.New[*flowcontrolv1beta2.FlowSchema](indexer, flowcontrolv1beta2.Resource("flowschema"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/flowcontrol/v1beta2/prioritylevelconfiguration.go b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta2/prioritylevelconfiguration.go
new file mode 100644
index 00000000000..1236cb38472
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta2/prioritylevelconfiguration.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta2
+
+import (
+ flowcontrolv1beta2 "k8s.io/api/flowcontrol/v1beta2"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PriorityLevelConfigurationLister helps list PriorityLevelConfigurations.
+// All objects returned here must be treated as read-only.
+type PriorityLevelConfigurationLister interface {
+ // List lists all PriorityLevelConfigurations in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*flowcontrolv1beta2.PriorityLevelConfiguration, err error)
+ // Get retrieves the PriorityLevelConfiguration from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*flowcontrolv1beta2.PriorityLevelConfiguration, error)
+ PriorityLevelConfigurationListerExpansion
+}
+
+// priorityLevelConfigurationLister implements the PriorityLevelConfigurationLister interface.
+type priorityLevelConfigurationLister struct {
+ listers.ResourceIndexer[*flowcontrolv1beta2.PriorityLevelConfiguration]
+}
+
+// NewPriorityLevelConfigurationLister returns a new PriorityLevelConfigurationLister.
+func NewPriorityLevelConfigurationLister(indexer cache.Indexer) PriorityLevelConfigurationLister {
+ return &priorityLevelConfigurationLister{listers.New[*flowcontrolv1beta2.PriorityLevelConfiguration](indexer, flowcontrolv1beta2.Resource("prioritylevelconfiguration"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/flowcontrol/v1beta3/expansion_generated.go b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta3/expansion_generated.go
new file mode 100644
index 00000000000..5c14f337b73
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta3/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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 v1beta3
+
+// FlowSchemaListerExpansion allows custom methods to be added to
+// FlowSchemaLister.
+type FlowSchemaListerExpansion interface{}
+
+// PriorityLevelConfigurationListerExpansion allows custom methods to be added to
+// PriorityLevelConfigurationLister.
+type PriorityLevelConfigurationListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/flowcontrol/v1beta3/flowschema.go b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta3/flowschema.go
new file mode 100644
index 00000000000..5f127d84b38
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta3/flowschema.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta3
+
+import (
+ flowcontrolv1beta3 "k8s.io/api/flowcontrol/v1beta3"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// FlowSchemaLister helps list FlowSchemas.
+// All objects returned here must be treated as read-only.
+type FlowSchemaLister interface {
+ // List lists all FlowSchemas in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*flowcontrolv1beta3.FlowSchema, err error)
+ // Get retrieves the FlowSchema from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*flowcontrolv1beta3.FlowSchema, error)
+ FlowSchemaListerExpansion
+}
+
+// flowSchemaLister implements the FlowSchemaLister interface.
+type flowSchemaLister struct {
+ listers.ResourceIndexer[*flowcontrolv1beta3.FlowSchema]
+}
+
+// NewFlowSchemaLister returns a new FlowSchemaLister.
+func NewFlowSchemaLister(indexer cache.Indexer) FlowSchemaLister {
+ return &flowSchemaLister{listers.New[*flowcontrolv1beta3.FlowSchema](indexer, flowcontrolv1beta3.Resource("flowschema"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/flowcontrol/v1beta3/prioritylevelconfiguration.go b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta3/prioritylevelconfiguration.go
new file mode 100644
index 00000000000..d50fc837657
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/flowcontrol/v1beta3/prioritylevelconfiguration.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta3
+
+import (
+ flowcontrolv1beta3 "k8s.io/api/flowcontrol/v1beta3"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PriorityLevelConfigurationLister helps list PriorityLevelConfigurations.
+// All objects returned here must be treated as read-only.
+type PriorityLevelConfigurationLister interface {
+ // List lists all PriorityLevelConfigurations in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*flowcontrolv1beta3.PriorityLevelConfiguration, err error)
+ // Get retrieves the PriorityLevelConfiguration from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*flowcontrolv1beta3.PriorityLevelConfiguration, error)
+ PriorityLevelConfigurationListerExpansion
+}
+
+// priorityLevelConfigurationLister implements the PriorityLevelConfigurationLister interface.
+type priorityLevelConfigurationLister struct {
+ listers.ResourceIndexer[*flowcontrolv1beta3.PriorityLevelConfiguration]
+}
+
+// NewPriorityLevelConfigurationLister returns a new PriorityLevelConfigurationLister.
+func NewPriorityLevelConfigurationLister(indexer cache.Indexer) PriorityLevelConfigurationLister {
+ return &priorityLevelConfigurationLister{listers.New[*flowcontrolv1beta3.PriorityLevelConfiguration](indexer, flowcontrolv1beta3.Resource("prioritylevelconfiguration"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/generic_helpers.go b/vendor/k8s.io/client-go/listers/generic_helpers.go
new file mode 100644
index 00000000000..c69bb22b11e
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/generic_helpers.go
@@ -0,0 +1,72 @@
+/*
+Copyright 2023 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 listers
+
+import (
+ "k8s.io/apimachinery/pkg/api/errors"
+ "k8s.io/apimachinery/pkg/labels"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "k8s.io/client-go/tools/cache"
+)
+
+// ResourceIndexer wraps an indexer, resource, and optional namespace for a given type.
+// This is intended for use by listers (generated by lister-gen) only.
+type ResourceIndexer[T runtime.Object] struct {
+ indexer cache.Indexer
+ resource schema.GroupResource
+ namespace string // empty for non-namespaced types
+}
+
+// New returns a new instance of a lister (resource indexer) wrapping the given indexer and resource for the specified type.
+// This is intended for use by listers (generated by lister-gen) only.
+func New[T runtime.Object](indexer cache.Indexer, resource schema.GroupResource) ResourceIndexer[T] {
+ return ResourceIndexer[T]{indexer: indexer, resource: resource}
+}
+
+// NewNamespaced returns a new instance of a namespaced lister (resource indexer) wrapping the given parent and namespace for the specified type.
+// This is intended for use by listers (generated by lister-gen) only.
+func NewNamespaced[T runtime.Object](parent ResourceIndexer[T], namespace string) ResourceIndexer[T] {
+ return ResourceIndexer[T]{indexer: parent.indexer, resource: parent.resource, namespace: namespace}
+}
+
+// List lists all resources in the indexer matching the given selector.
+func (l ResourceIndexer[T]) List(selector labels.Selector) (ret []T, err error) {
+ // ListAllByNamespace reverts to ListAll on empty namespaces
+ err = cache.ListAllByNamespace(l.indexer, l.namespace, selector, func(m interface{}) {
+ ret = append(ret, m.(T))
+ })
+ return ret, err
+}
+
+// Get retrieves the resource from the index for a given name.
+func (l ResourceIndexer[T]) Get(name string) (T, error) {
+ var key string
+ if l.namespace == "" {
+ key = name
+ } else {
+ key = l.namespace + "/" + name
+ }
+ obj, exists, err := l.indexer.GetByKey(key)
+ if err != nil {
+ return *new(T), err
+ }
+ if !exists {
+ return *new(T), errors.NewNotFound(l.resource, name)
+ }
+ return obj.(T), nil
+}
diff --git a/vendor/k8s.io/client-go/listers/networking/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/networking/v1/expansion_generated.go
new file mode 100644
index 00000000000..a2d335e6bd6
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/networking/v1/expansion_generated.go
@@ -0,0 +1,47 @@
+/*
+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 v1
+
+// IPAddressListerExpansion allows custom methods to be added to
+// IPAddressLister.
+type IPAddressListerExpansion interface{}
+
+// IngressListerExpansion allows custom methods to be added to
+// IngressLister.
+type IngressListerExpansion interface{}
+
+// IngressNamespaceListerExpansion allows custom methods to be added to
+// IngressNamespaceLister.
+type IngressNamespaceListerExpansion interface{}
+
+// IngressClassListerExpansion allows custom methods to be added to
+// IngressClassLister.
+type IngressClassListerExpansion interface{}
+
+// NetworkPolicyListerExpansion allows custom methods to be added to
+// NetworkPolicyLister.
+type NetworkPolicyListerExpansion interface{}
+
+// NetworkPolicyNamespaceListerExpansion allows custom methods to be added to
+// NetworkPolicyNamespaceLister.
+type NetworkPolicyNamespaceListerExpansion interface{}
+
+// ServiceCIDRListerExpansion allows custom methods to be added to
+// ServiceCIDRLister.
+type ServiceCIDRListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/networking/v1/ingress.go b/vendor/k8s.io/client-go/listers/networking/v1/ingress.go
new file mode 100644
index 00000000000..7d31b09c1cc
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/networking/v1/ingress.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ networkingv1 "k8s.io/api/networking/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// IngressLister helps list Ingresses.
+// All objects returned here must be treated as read-only.
+type IngressLister interface {
+ // List lists all Ingresses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*networkingv1.Ingress, err error)
+ // Ingresses returns an object that can list and get Ingresses.
+ Ingresses(namespace string) IngressNamespaceLister
+ IngressListerExpansion
+}
+
+// ingressLister implements the IngressLister interface.
+type ingressLister struct {
+ listers.ResourceIndexer[*networkingv1.Ingress]
+}
+
+// NewIngressLister returns a new IngressLister.
+func NewIngressLister(indexer cache.Indexer) IngressLister {
+ return &ingressLister{listers.New[*networkingv1.Ingress](indexer, networkingv1.Resource("ingress"))}
+}
+
+// Ingresses returns an object that can list and get Ingresses.
+func (s *ingressLister) Ingresses(namespace string) IngressNamespaceLister {
+ return ingressNamespaceLister{listers.NewNamespaced[*networkingv1.Ingress](s.ResourceIndexer, namespace)}
+}
+
+// IngressNamespaceLister helps list and get Ingresses.
+// All objects returned here must be treated as read-only.
+type IngressNamespaceLister interface {
+ // List lists all Ingresses in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*networkingv1.Ingress, err error)
+ // Get retrieves the Ingress from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*networkingv1.Ingress, error)
+ IngressNamespaceListerExpansion
+}
+
+// ingressNamespaceLister implements the IngressNamespaceLister
+// interface.
+type ingressNamespaceLister struct {
+ listers.ResourceIndexer[*networkingv1.Ingress]
+}
diff --git a/vendor/k8s.io/client-go/listers/networking/v1/ingressclass.go b/vendor/k8s.io/client-go/listers/networking/v1/ingressclass.go
new file mode 100644
index 00000000000..71d432164af
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/networking/v1/ingressclass.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ networkingv1 "k8s.io/api/networking/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// IngressClassLister helps list IngressClasses.
+// All objects returned here must be treated as read-only.
+type IngressClassLister interface {
+ // List lists all IngressClasses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*networkingv1.IngressClass, err error)
+ // Get retrieves the IngressClass from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*networkingv1.IngressClass, error)
+ IngressClassListerExpansion
+}
+
+// ingressClassLister implements the IngressClassLister interface.
+type ingressClassLister struct {
+ listers.ResourceIndexer[*networkingv1.IngressClass]
+}
+
+// NewIngressClassLister returns a new IngressClassLister.
+func NewIngressClassLister(indexer cache.Indexer) IngressClassLister {
+ return &ingressClassLister{listers.New[*networkingv1.IngressClass](indexer, networkingv1.Resource("ingressclass"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/networking/v1/ipaddress.go b/vendor/k8s.io/client-go/listers/networking/v1/ipaddress.go
new file mode 100644
index 00000000000..e554bd38b43
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/networking/v1/ipaddress.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ networkingv1 "k8s.io/api/networking/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// IPAddressLister helps list IPAddresses.
+// All objects returned here must be treated as read-only.
+type IPAddressLister interface {
+ // List lists all IPAddresses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*networkingv1.IPAddress, err error)
+ // Get retrieves the IPAddress from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*networkingv1.IPAddress, error)
+ IPAddressListerExpansion
+}
+
+// iPAddressLister implements the IPAddressLister interface.
+type iPAddressLister struct {
+ listers.ResourceIndexer[*networkingv1.IPAddress]
+}
+
+// NewIPAddressLister returns a new IPAddressLister.
+func NewIPAddressLister(indexer cache.Indexer) IPAddressLister {
+ return &iPAddressLister{listers.New[*networkingv1.IPAddress](indexer, networkingv1.Resource("ipaddress"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/networking/v1/networkpolicy.go b/vendor/k8s.io/client-go/listers/networking/v1/networkpolicy.go
new file mode 100644
index 00000000000..5a38a74a0e3
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/networking/v1/networkpolicy.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ networkingv1 "k8s.io/api/networking/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// NetworkPolicyLister helps list NetworkPolicies.
+// All objects returned here must be treated as read-only.
+type NetworkPolicyLister interface {
+ // List lists all NetworkPolicies in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*networkingv1.NetworkPolicy, err error)
+ // NetworkPolicies returns an object that can list and get NetworkPolicies.
+ NetworkPolicies(namespace string) NetworkPolicyNamespaceLister
+ NetworkPolicyListerExpansion
+}
+
+// networkPolicyLister implements the NetworkPolicyLister interface.
+type networkPolicyLister struct {
+ listers.ResourceIndexer[*networkingv1.NetworkPolicy]
+}
+
+// NewNetworkPolicyLister returns a new NetworkPolicyLister.
+func NewNetworkPolicyLister(indexer cache.Indexer) NetworkPolicyLister {
+ return &networkPolicyLister{listers.New[*networkingv1.NetworkPolicy](indexer, networkingv1.Resource("networkpolicy"))}
+}
+
+// NetworkPolicies returns an object that can list and get NetworkPolicies.
+func (s *networkPolicyLister) NetworkPolicies(namespace string) NetworkPolicyNamespaceLister {
+ return networkPolicyNamespaceLister{listers.NewNamespaced[*networkingv1.NetworkPolicy](s.ResourceIndexer, namespace)}
+}
+
+// NetworkPolicyNamespaceLister helps list and get NetworkPolicies.
+// All objects returned here must be treated as read-only.
+type NetworkPolicyNamespaceLister interface {
+ // List lists all NetworkPolicies in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*networkingv1.NetworkPolicy, err error)
+ // Get retrieves the NetworkPolicy from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*networkingv1.NetworkPolicy, error)
+ NetworkPolicyNamespaceListerExpansion
+}
+
+// networkPolicyNamespaceLister implements the NetworkPolicyNamespaceLister
+// interface.
+type networkPolicyNamespaceLister struct {
+ listers.ResourceIndexer[*networkingv1.NetworkPolicy]
+}
diff --git a/vendor/k8s.io/client-go/listers/networking/v1/servicecidr.go b/vendor/k8s.io/client-go/listers/networking/v1/servicecidr.go
new file mode 100644
index 00000000000..6e326da16b8
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/networking/v1/servicecidr.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ networkingv1 "k8s.io/api/networking/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ServiceCIDRLister helps list ServiceCIDRs.
+// All objects returned here must be treated as read-only.
+type ServiceCIDRLister interface {
+ // List lists all ServiceCIDRs in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*networkingv1.ServiceCIDR, err error)
+ // Get retrieves the ServiceCIDR from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*networkingv1.ServiceCIDR, error)
+ ServiceCIDRListerExpansion
+}
+
+// serviceCIDRLister implements the ServiceCIDRLister interface.
+type serviceCIDRLister struct {
+ listers.ResourceIndexer[*networkingv1.ServiceCIDR]
+}
+
+// NewServiceCIDRLister returns a new ServiceCIDRLister.
+func NewServiceCIDRLister(indexer cache.Indexer) ServiceCIDRLister {
+ return &serviceCIDRLister{listers.New[*networkingv1.ServiceCIDR](indexer, networkingv1.Resource("servicecidr"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/networking/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/networking/v1alpha1/expansion_generated.go
new file mode 100644
index 00000000000..fc7316521bf
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/networking/v1alpha1/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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
+
+// IPAddressListerExpansion allows custom methods to be added to
+// IPAddressLister.
+type IPAddressListerExpansion interface{}
+
+// ServiceCIDRListerExpansion allows custom methods to be added to
+// ServiceCIDRLister.
+type ServiceCIDRListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/networking/v1alpha1/ipaddress.go b/vendor/k8s.io/client-go/listers/networking/v1alpha1/ipaddress.go
new file mode 100644
index 00000000000..953265eca4c
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/networking/v1alpha1/ipaddress.go
@@ -0,0 +1,48 @@
+/*
+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 (
+ networkingv1alpha1 "k8s.io/api/networking/v1alpha1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// IPAddressLister helps list IPAddresses.
+// All objects returned here must be treated as read-only.
+type IPAddressLister interface {
+ // List lists all IPAddresses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*networkingv1alpha1.IPAddress, err error)
+ // Get retrieves the IPAddress from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*networkingv1alpha1.IPAddress, error)
+ IPAddressListerExpansion
+}
+
+// iPAddressLister implements the IPAddressLister interface.
+type iPAddressLister struct {
+ listers.ResourceIndexer[*networkingv1alpha1.IPAddress]
+}
+
+// NewIPAddressLister returns a new IPAddressLister.
+func NewIPAddressLister(indexer cache.Indexer) IPAddressLister {
+ return &iPAddressLister{listers.New[*networkingv1alpha1.IPAddress](indexer, networkingv1alpha1.Resource("ipaddress"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/networking/v1alpha1/servicecidr.go b/vendor/k8s.io/client-go/listers/networking/v1alpha1/servicecidr.go
new file mode 100644
index 00000000000..0c4cb2ebf83
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/networking/v1alpha1/servicecidr.go
@@ -0,0 +1,48 @@
+/*
+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 (
+ networkingv1alpha1 "k8s.io/api/networking/v1alpha1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ServiceCIDRLister helps list ServiceCIDRs.
+// All objects returned here must be treated as read-only.
+type ServiceCIDRLister interface {
+ // List lists all ServiceCIDRs in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*networkingv1alpha1.ServiceCIDR, err error)
+ // Get retrieves the ServiceCIDR from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*networkingv1alpha1.ServiceCIDR, error)
+ ServiceCIDRListerExpansion
+}
+
+// serviceCIDRLister implements the ServiceCIDRLister interface.
+type serviceCIDRLister struct {
+ listers.ResourceIndexer[*networkingv1alpha1.ServiceCIDR]
+}
+
+// NewServiceCIDRLister returns a new ServiceCIDRLister.
+func NewServiceCIDRLister(indexer cache.Indexer) ServiceCIDRLister {
+ return &serviceCIDRLister{listers.New[*networkingv1alpha1.ServiceCIDR](indexer, networkingv1alpha1.Resource("servicecidr"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/networking/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/networking/v1beta1/expansion_generated.go
new file mode 100644
index 00000000000..320af736e69
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/networking/v1beta1/expansion_generated.go
@@ -0,0 +1,39 @@
+/*
+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 v1beta1
+
+// IPAddressListerExpansion allows custom methods to be added to
+// IPAddressLister.
+type IPAddressListerExpansion interface{}
+
+// IngressListerExpansion allows custom methods to be added to
+// IngressLister.
+type IngressListerExpansion interface{}
+
+// IngressNamespaceListerExpansion allows custom methods to be added to
+// IngressNamespaceLister.
+type IngressNamespaceListerExpansion interface{}
+
+// IngressClassListerExpansion allows custom methods to be added to
+// IngressClassLister.
+type IngressClassListerExpansion interface{}
+
+// ServiceCIDRListerExpansion allows custom methods to be added to
+// ServiceCIDRLister.
+type ServiceCIDRListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/networking/v1beta1/ingress.go b/vendor/k8s.io/client-go/listers/networking/v1beta1/ingress.go
new file mode 100644
index 00000000000..f8c17248755
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/networking/v1beta1/ingress.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ networkingv1beta1 "k8s.io/api/networking/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// IngressLister helps list Ingresses.
+// All objects returned here must be treated as read-only.
+type IngressLister interface {
+ // List lists all Ingresses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*networkingv1beta1.Ingress, err error)
+ // Ingresses returns an object that can list and get Ingresses.
+ Ingresses(namespace string) IngressNamespaceLister
+ IngressListerExpansion
+}
+
+// ingressLister implements the IngressLister interface.
+type ingressLister struct {
+ listers.ResourceIndexer[*networkingv1beta1.Ingress]
+}
+
+// NewIngressLister returns a new IngressLister.
+func NewIngressLister(indexer cache.Indexer) IngressLister {
+ return &ingressLister{listers.New[*networkingv1beta1.Ingress](indexer, networkingv1beta1.Resource("ingress"))}
+}
+
+// Ingresses returns an object that can list and get Ingresses.
+func (s *ingressLister) Ingresses(namespace string) IngressNamespaceLister {
+ return ingressNamespaceLister{listers.NewNamespaced[*networkingv1beta1.Ingress](s.ResourceIndexer, namespace)}
+}
+
+// IngressNamespaceLister helps list and get Ingresses.
+// All objects returned here must be treated as read-only.
+type IngressNamespaceLister interface {
+ // List lists all Ingresses in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*networkingv1beta1.Ingress, err error)
+ // Get retrieves the Ingress from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*networkingv1beta1.Ingress, error)
+ IngressNamespaceListerExpansion
+}
+
+// ingressNamespaceLister implements the IngressNamespaceLister
+// interface.
+type ingressNamespaceLister struct {
+ listers.ResourceIndexer[*networkingv1beta1.Ingress]
+}
diff --git a/vendor/k8s.io/client-go/listers/networking/v1beta1/ingressclass.go b/vendor/k8s.io/client-go/listers/networking/v1beta1/ingressclass.go
new file mode 100644
index 00000000000..0e87e039765
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/networking/v1beta1/ingressclass.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ networkingv1beta1 "k8s.io/api/networking/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// IngressClassLister helps list IngressClasses.
+// All objects returned here must be treated as read-only.
+type IngressClassLister interface {
+ // List lists all IngressClasses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*networkingv1beta1.IngressClass, err error)
+ // Get retrieves the IngressClass from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*networkingv1beta1.IngressClass, error)
+ IngressClassListerExpansion
+}
+
+// ingressClassLister implements the IngressClassLister interface.
+type ingressClassLister struct {
+ listers.ResourceIndexer[*networkingv1beta1.IngressClass]
+}
+
+// NewIngressClassLister returns a new IngressClassLister.
+func NewIngressClassLister(indexer cache.Indexer) IngressClassLister {
+ return &ingressClassLister{listers.New[*networkingv1beta1.IngressClass](indexer, networkingv1beta1.Resource("ingressclass"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/networking/v1beta1/ipaddress.go b/vendor/k8s.io/client-go/listers/networking/v1beta1/ipaddress.go
new file mode 100644
index 00000000000..41a4bf927c9
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/networking/v1beta1/ipaddress.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ networkingv1beta1 "k8s.io/api/networking/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// IPAddressLister helps list IPAddresses.
+// All objects returned here must be treated as read-only.
+type IPAddressLister interface {
+ // List lists all IPAddresses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*networkingv1beta1.IPAddress, err error)
+ // Get retrieves the IPAddress from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*networkingv1beta1.IPAddress, error)
+ IPAddressListerExpansion
+}
+
+// iPAddressLister implements the IPAddressLister interface.
+type iPAddressLister struct {
+ listers.ResourceIndexer[*networkingv1beta1.IPAddress]
+}
+
+// NewIPAddressLister returns a new IPAddressLister.
+func NewIPAddressLister(indexer cache.Indexer) IPAddressLister {
+ return &iPAddressLister{listers.New[*networkingv1beta1.IPAddress](indexer, networkingv1beta1.Resource("ipaddress"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/networking/v1beta1/servicecidr.go b/vendor/k8s.io/client-go/listers/networking/v1beta1/servicecidr.go
new file mode 100644
index 00000000000..5c9a0eac17d
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/networking/v1beta1/servicecidr.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ networkingv1beta1 "k8s.io/api/networking/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ServiceCIDRLister helps list ServiceCIDRs.
+// All objects returned here must be treated as read-only.
+type ServiceCIDRLister interface {
+ // List lists all ServiceCIDRs in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*networkingv1beta1.ServiceCIDR, err error)
+ // Get retrieves the ServiceCIDR from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*networkingv1beta1.ServiceCIDR, error)
+ ServiceCIDRListerExpansion
+}
+
+// serviceCIDRLister implements the ServiceCIDRLister interface.
+type serviceCIDRLister struct {
+ listers.ResourceIndexer[*networkingv1beta1.ServiceCIDR]
+}
+
+// NewServiceCIDRLister returns a new ServiceCIDRLister.
+func NewServiceCIDRLister(indexer cache.Indexer) ServiceCIDRLister {
+ return &serviceCIDRLister{listers.New[*networkingv1beta1.ServiceCIDR](indexer, networkingv1beta1.Resource("servicecidr"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/node/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/node/v1/expansion_generated.go
new file mode 100644
index 00000000000..4f010b87c30
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/node/v1/expansion_generated.go
@@ -0,0 +1,23 @@
+/*
+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 v1
+
+// RuntimeClassListerExpansion allows custom methods to be added to
+// RuntimeClassLister.
+type RuntimeClassListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/node/v1/runtimeclass.go b/vendor/k8s.io/client-go/listers/node/v1/runtimeclass.go
new file mode 100644
index 00000000000..b8322dbb46c
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/node/v1/runtimeclass.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ nodev1 "k8s.io/api/node/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// RuntimeClassLister helps list RuntimeClasses.
+// All objects returned here must be treated as read-only.
+type RuntimeClassLister interface {
+ // List lists all RuntimeClasses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*nodev1.RuntimeClass, err error)
+ // Get retrieves the RuntimeClass from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*nodev1.RuntimeClass, error)
+ RuntimeClassListerExpansion
+}
+
+// runtimeClassLister implements the RuntimeClassLister interface.
+type runtimeClassLister struct {
+ listers.ResourceIndexer[*nodev1.RuntimeClass]
+}
+
+// NewRuntimeClassLister returns a new RuntimeClassLister.
+func NewRuntimeClassLister(indexer cache.Indexer) RuntimeClassLister {
+ return &runtimeClassLister{listers.New[*nodev1.RuntimeClass](indexer, nodev1.Resource("runtimeclass"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/node/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/node/v1alpha1/expansion_generated.go
new file mode 100644
index 00000000000..a65c208fac3
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/node/v1alpha1/expansion_generated.go
@@ -0,0 +1,23 @@
+/*
+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
+
+// RuntimeClassListerExpansion allows custom methods to be added to
+// RuntimeClassLister.
+type RuntimeClassListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/node/v1alpha1/runtimeclass.go b/vendor/k8s.io/client-go/listers/node/v1alpha1/runtimeclass.go
new file mode 100644
index 00000000000..b3d4ad46c6c
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/node/v1alpha1/runtimeclass.go
@@ -0,0 +1,48 @@
+/*
+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 (
+ nodev1alpha1 "k8s.io/api/node/v1alpha1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// RuntimeClassLister helps list RuntimeClasses.
+// All objects returned here must be treated as read-only.
+type RuntimeClassLister interface {
+ // List lists all RuntimeClasses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*nodev1alpha1.RuntimeClass, err error)
+ // Get retrieves the RuntimeClass from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*nodev1alpha1.RuntimeClass, error)
+ RuntimeClassListerExpansion
+}
+
+// runtimeClassLister implements the RuntimeClassLister interface.
+type runtimeClassLister struct {
+ listers.ResourceIndexer[*nodev1alpha1.RuntimeClass]
+}
+
+// NewRuntimeClassLister returns a new RuntimeClassLister.
+func NewRuntimeClassLister(indexer cache.Indexer) RuntimeClassLister {
+ return &runtimeClassLister{listers.New[*nodev1alpha1.RuntimeClass](indexer, nodev1alpha1.Resource("runtimeclass"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/node/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/node/v1beta1/expansion_generated.go
new file mode 100644
index 00000000000..a6744055ce4
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/node/v1beta1/expansion_generated.go
@@ -0,0 +1,23 @@
+/*
+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 v1beta1
+
+// RuntimeClassListerExpansion allows custom methods to be added to
+// RuntimeClassLister.
+type RuntimeClassListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/node/v1beta1/runtimeclass.go b/vendor/k8s.io/client-go/listers/node/v1beta1/runtimeclass.go
new file mode 100644
index 00000000000..1b9f8d799da
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/node/v1beta1/runtimeclass.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ nodev1beta1 "k8s.io/api/node/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// RuntimeClassLister helps list RuntimeClasses.
+// All objects returned here must be treated as read-only.
+type RuntimeClassLister interface {
+ // List lists all RuntimeClasses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*nodev1beta1.RuntimeClass, err error)
+ // Get retrieves the RuntimeClass from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*nodev1beta1.RuntimeClass, error)
+ RuntimeClassListerExpansion
+}
+
+// runtimeClassLister implements the RuntimeClassLister interface.
+type runtimeClassLister struct {
+ listers.ResourceIndexer[*nodev1beta1.RuntimeClass]
+}
+
+// NewRuntimeClassLister returns a new RuntimeClassLister.
+func NewRuntimeClassLister(indexer cache.Indexer) RuntimeClassLister {
+ return &runtimeClassLister{listers.New[*nodev1beta1.RuntimeClass](indexer, nodev1beta1.Resource("runtimeclass"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/policy/v1/eviction.go b/vendor/k8s.io/client-go/listers/policy/v1/eviction.go
new file mode 100644
index 00000000000..8dccd731372
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/policy/v1/eviction.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ policyv1 "k8s.io/api/policy/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// EvictionLister helps list Evictions.
+// All objects returned here must be treated as read-only.
+type EvictionLister interface {
+ // List lists all Evictions in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*policyv1.Eviction, err error)
+ // Evictions returns an object that can list and get Evictions.
+ Evictions(namespace string) EvictionNamespaceLister
+ EvictionListerExpansion
+}
+
+// evictionLister implements the EvictionLister interface.
+type evictionLister struct {
+ listers.ResourceIndexer[*policyv1.Eviction]
+}
+
+// NewEvictionLister returns a new EvictionLister.
+func NewEvictionLister(indexer cache.Indexer) EvictionLister {
+ return &evictionLister{listers.New[*policyv1.Eviction](indexer, policyv1.Resource("eviction"))}
+}
+
+// Evictions returns an object that can list and get Evictions.
+func (s *evictionLister) Evictions(namespace string) EvictionNamespaceLister {
+ return evictionNamespaceLister{listers.NewNamespaced[*policyv1.Eviction](s.ResourceIndexer, namespace)}
+}
+
+// EvictionNamespaceLister helps list and get Evictions.
+// All objects returned here must be treated as read-only.
+type EvictionNamespaceLister interface {
+ // List lists all Evictions in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*policyv1.Eviction, err error)
+ // Get retrieves the Eviction from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*policyv1.Eviction, error)
+ EvictionNamespaceListerExpansion
+}
+
+// evictionNamespaceLister implements the EvictionNamespaceLister
+// interface.
+type evictionNamespaceLister struct {
+ listers.ResourceIndexer[*policyv1.Eviction]
+}
diff --git a/vendor/k8s.io/client-go/listers/policy/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/policy/v1/expansion_generated.go
new file mode 100644
index 00000000000..8e2d55a9117
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/policy/v1/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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 v1
+
+// EvictionListerExpansion allows custom methods to be added to
+// EvictionLister.
+type EvictionListerExpansion interface{}
+
+// EvictionNamespaceListerExpansion allows custom methods to be added to
+// EvictionNamespaceLister.
+type EvictionNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/policy/v1/poddisruptionbudget.go b/vendor/k8s.io/client-go/listers/policy/v1/poddisruptionbudget.go
new file mode 100644
index 00000000000..1a6273b3ee4
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/policy/v1/poddisruptionbudget.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ policyv1 "k8s.io/api/policy/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PodDisruptionBudgetLister helps list PodDisruptionBudgets.
+// All objects returned here must be treated as read-only.
+type PodDisruptionBudgetLister interface {
+ // List lists all PodDisruptionBudgets in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*policyv1.PodDisruptionBudget, err error)
+ // PodDisruptionBudgets returns an object that can list and get PodDisruptionBudgets.
+ PodDisruptionBudgets(namespace string) PodDisruptionBudgetNamespaceLister
+ PodDisruptionBudgetListerExpansion
+}
+
+// podDisruptionBudgetLister implements the PodDisruptionBudgetLister interface.
+type podDisruptionBudgetLister struct {
+ listers.ResourceIndexer[*policyv1.PodDisruptionBudget]
+}
+
+// NewPodDisruptionBudgetLister returns a new PodDisruptionBudgetLister.
+func NewPodDisruptionBudgetLister(indexer cache.Indexer) PodDisruptionBudgetLister {
+ return &podDisruptionBudgetLister{listers.New[*policyv1.PodDisruptionBudget](indexer, policyv1.Resource("poddisruptionbudget"))}
+}
+
+// PodDisruptionBudgets returns an object that can list and get PodDisruptionBudgets.
+func (s *podDisruptionBudgetLister) PodDisruptionBudgets(namespace string) PodDisruptionBudgetNamespaceLister {
+ return podDisruptionBudgetNamespaceLister{listers.NewNamespaced[*policyv1.PodDisruptionBudget](s.ResourceIndexer, namespace)}
+}
+
+// PodDisruptionBudgetNamespaceLister helps list and get PodDisruptionBudgets.
+// All objects returned here must be treated as read-only.
+type PodDisruptionBudgetNamespaceLister interface {
+ // List lists all PodDisruptionBudgets in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*policyv1.PodDisruptionBudget, err error)
+ // Get retrieves the PodDisruptionBudget from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*policyv1.PodDisruptionBudget, error)
+ PodDisruptionBudgetNamespaceListerExpansion
+}
+
+// podDisruptionBudgetNamespaceLister implements the PodDisruptionBudgetNamespaceLister
+// interface.
+type podDisruptionBudgetNamespaceLister struct {
+ listers.ResourceIndexer[*policyv1.PodDisruptionBudget]
+}
diff --git a/vendor/k8s.io/client-go/listers/policy/v1/poddisruptionbudget_expansion.go b/vendor/k8s.io/client-go/listers/policy/v1/poddisruptionbudget_expansion.go
new file mode 100644
index 00000000000..115ee3f0047
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/policy/v1/poddisruptionbudget_expansion.go
@@ -0,0 +1,68 @@
+/*
+Copyright 2021 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 v1
+
+import (
+ "fmt"
+
+ "k8s.io/api/core/v1"
+ policy "k8s.io/api/policy/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/labels"
+)
+
+// PodDisruptionBudgetListerExpansion allows custom methods to be added to
+// PodDisruptionBudgetLister.
+type PodDisruptionBudgetListerExpansion interface {
+ GetPodPodDisruptionBudgets(pod *v1.Pod) ([]*policy.PodDisruptionBudget, error)
+}
+
+// PodDisruptionBudgetNamespaceListerExpansion allows custom methods to be added to
+// PodDisruptionBudgetNamespaceLister.
+type PodDisruptionBudgetNamespaceListerExpansion interface{}
+
+// GetPodPodDisruptionBudgets returns a list of PodDisruptionBudgets matching a pod.
+func (s *podDisruptionBudgetLister) GetPodPodDisruptionBudgets(pod *v1.Pod) ([]*policy.PodDisruptionBudget, error) {
+ var selector labels.Selector
+
+ list, err := s.PodDisruptionBudgets(pod.Namespace).List(labels.Everything())
+ if err != nil {
+ return nil, err
+ }
+
+ var pdbList []*policy.PodDisruptionBudget
+ for i := range list {
+ pdb := list[i]
+ selector, err = metav1.LabelSelectorAsSelector(pdb.Spec.Selector)
+ if err != nil {
+ // This object has an invalid selector, it does not match the pod
+ continue
+ }
+
+ // Unlike the v1beta version, here we let an empty selector match everything.
+ if !selector.Matches(labels.Set(pod.Labels)) {
+ continue
+ }
+ pdbList = append(pdbList, pdb)
+ }
+
+ if len(pdbList) == 0 {
+ return nil, fmt.Errorf("could not find PodDisruptionBudget for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
+ }
+
+ return pdbList, nil
+}
diff --git a/vendor/k8s.io/client-go/listers/policy/v1beta1/eviction.go b/vendor/k8s.io/client-go/listers/policy/v1beta1/eviction.go
new file mode 100644
index 00000000000..318c380fafa
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/policy/v1beta1/eviction.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ policyv1beta1 "k8s.io/api/policy/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// EvictionLister helps list Evictions.
+// All objects returned here must be treated as read-only.
+type EvictionLister interface {
+ // List lists all Evictions in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*policyv1beta1.Eviction, err error)
+ // Evictions returns an object that can list and get Evictions.
+ Evictions(namespace string) EvictionNamespaceLister
+ EvictionListerExpansion
+}
+
+// evictionLister implements the EvictionLister interface.
+type evictionLister struct {
+ listers.ResourceIndexer[*policyv1beta1.Eviction]
+}
+
+// NewEvictionLister returns a new EvictionLister.
+func NewEvictionLister(indexer cache.Indexer) EvictionLister {
+ return &evictionLister{listers.New[*policyv1beta1.Eviction](indexer, policyv1beta1.Resource("eviction"))}
+}
+
+// Evictions returns an object that can list and get Evictions.
+func (s *evictionLister) Evictions(namespace string) EvictionNamespaceLister {
+ return evictionNamespaceLister{listers.NewNamespaced[*policyv1beta1.Eviction](s.ResourceIndexer, namespace)}
+}
+
+// EvictionNamespaceLister helps list and get Evictions.
+// All objects returned here must be treated as read-only.
+type EvictionNamespaceLister interface {
+ // List lists all Evictions in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*policyv1beta1.Eviction, err error)
+ // Get retrieves the Eviction from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*policyv1beta1.Eviction, error)
+ EvictionNamespaceListerExpansion
+}
+
+// evictionNamespaceLister implements the EvictionNamespaceLister
+// interface.
+type evictionNamespaceLister struct {
+ listers.ResourceIndexer[*policyv1beta1.Eviction]
+}
diff --git a/vendor/k8s.io/client-go/listers/policy/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/policy/v1beta1/expansion_generated.go
new file mode 100644
index 00000000000..eba5e2f72d6
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/policy/v1beta1/expansion_generated.go
@@ -0,0 +1,27 @@
+/*
+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 v1beta1
+
+// EvictionListerExpansion allows custom methods to be added to
+// EvictionLister.
+type EvictionListerExpansion interface{}
+
+// EvictionNamespaceListerExpansion allows custom methods to be added to
+// EvictionNamespaceLister.
+type EvictionNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/policy/v1beta1/poddisruptionbudget.go b/vendor/k8s.io/client-go/listers/policy/v1beta1/poddisruptionbudget.go
new file mode 100644
index 00000000000..fb156e97bbe
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/policy/v1beta1/poddisruptionbudget.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ policyv1beta1 "k8s.io/api/policy/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PodDisruptionBudgetLister helps list PodDisruptionBudgets.
+// All objects returned here must be treated as read-only.
+type PodDisruptionBudgetLister interface {
+ // List lists all PodDisruptionBudgets in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*policyv1beta1.PodDisruptionBudget, err error)
+ // PodDisruptionBudgets returns an object that can list and get PodDisruptionBudgets.
+ PodDisruptionBudgets(namespace string) PodDisruptionBudgetNamespaceLister
+ PodDisruptionBudgetListerExpansion
+}
+
+// podDisruptionBudgetLister implements the PodDisruptionBudgetLister interface.
+type podDisruptionBudgetLister struct {
+ listers.ResourceIndexer[*policyv1beta1.PodDisruptionBudget]
+}
+
+// NewPodDisruptionBudgetLister returns a new PodDisruptionBudgetLister.
+func NewPodDisruptionBudgetLister(indexer cache.Indexer) PodDisruptionBudgetLister {
+ return &podDisruptionBudgetLister{listers.New[*policyv1beta1.PodDisruptionBudget](indexer, policyv1beta1.Resource("poddisruptionbudget"))}
+}
+
+// PodDisruptionBudgets returns an object that can list and get PodDisruptionBudgets.
+func (s *podDisruptionBudgetLister) PodDisruptionBudgets(namespace string) PodDisruptionBudgetNamespaceLister {
+ return podDisruptionBudgetNamespaceLister{listers.NewNamespaced[*policyv1beta1.PodDisruptionBudget](s.ResourceIndexer, namespace)}
+}
+
+// PodDisruptionBudgetNamespaceLister helps list and get PodDisruptionBudgets.
+// All objects returned here must be treated as read-only.
+type PodDisruptionBudgetNamespaceLister interface {
+ // List lists all PodDisruptionBudgets in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*policyv1beta1.PodDisruptionBudget, err error)
+ // Get retrieves the PodDisruptionBudget from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*policyv1beta1.PodDisruptionBudget, error)
+ PodDisruptionBudgetNamespaceListerExpansion
+}
+
+// podDisruptionBudgetNamespaceLister implements the PodDisruptionBudgetNamespaceLister
+// interface.
+type podDisruptionBudgetNamespaceLister struct {
+ listers.ResourceIndexer[*policyv1beta1.PodDisruptionBudget]
+}
diff --git a/vendor/k8s.io/client-go/listers/policy/v1beta1/poddisruptionbudget_expansion.go b/vendor/k8s.io/client-go/listers/policy/v1beta1/poddisruptionbudget_expansion.go
new file mode 100644
index 00000000000..994947c4f3c
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/policy/v1beta1/poddisruptionbudget_expansion.go
@@ -0,0 +1,68 @@
+/*
+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 v1beta1
+
+import (
+ "fmt"
+
+ "k8s.io/api/core/v1"
+ policy "k8s.io/api/policy/v1beta1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/labels"
+)
+
+// PodDisruptionBudgetListerExpansion allows custom methods to be added to
+// PodDisruptionBudgetLister.
+type PodDisruptionBudgetListerExpansion interface {
+ GetPodPodDisruptionBudgets(pod *v1.Pod) ([]*policy.PodDisruptionBudget, error)
+}
+
+// PodDisruptionBudgetNamespaceListerExpansion allows custom methods to be added to
+// PodDisruptionBudgetNamespaceLister.
+type PodDisruptionBudgetNamespaceListerExpansion interface{}
+
+// GetPodPodDisruptionBudgets returns a list of PodDisruptionBudgets matching a pod. Returns an error only if no matching PodDisruptionBudgets are found.
+func (s *podDisruptionBudgetLister) GetPodPodDisruptionBudgets(pod *v1.Pod) ([]*policy.PodDisruptionBudget, error) {
+ var selector labels.Selector
+
+ list, err := s.PodDisruptionBudgets(pod.Namespace).List(labels.Everything())
+ if err != nil {
+ return nil, err
+ }
+
+ var pdbList []*policy.PodDisruptionBudget
+ for i := range list {
+ pdb := list[i]
+ selector, err = metav1.LabelSelectorAsSelector(pdb.Spec.Selector)
+ if err != nil {
+ // This object has an invalid selector, it does not match the pod
+ continue
+ }
+
+ // If a PDB with a nil or empty selector creeps in, it should match nothing, not everything.
+ if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) {
+ continue
+ }
+ pdbList = append(pdbList, pdb)
+ }
+
+ if len(pdbList) == 0 {
+ return nil, fmt.Errorf("could not find PodDisruptionBudget for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels)
+ }
+
+ return pdbList, nil
+}
diff --git a/vendor/k8s.io/client-go/listers/rbac/v1/clusterrole.go b/vendor/k8s.io/client-go/listers/rbac/v1/clusterrole.go
new file mode 100644
index 00000000000..456393aee2c
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/rbac/v1/clusterrole.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ rbacv1 "k8s.io/api/rbac/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ClusterRoleLister helps list ClusterRoles.
+// All objects returned here must be treated as read-only.
+type ClusterRoleLister interface {
+ // List lists all ClusterRoles in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*rbacv1.ClusterRole, err error)
+ // Get retrieves the ClusterRole from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*rbacv1.ClusterRole, error)
+ ClusterRoleListerExpansion
+}
+
+// clusterRoleLister implements the ClusterRoleLister interface.
+type clusterRoleLister struct {
+ listers.ResourceIndexer[*rbacv1.ClusterRole]
+}
+
+// NewClusterRoleLister returns a new ClusterRoleLister.
+func NewClusterRoleLister(indexer cache.Indexer) ClusterRoleLister {
+ return &clusterRoleLister{listers.New[*rbacv1.ClusterRole](indexer, rbacv1.Resource("clusterrole"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/rbac/v1/clusterrolebinding.go b/vendor/k8s.io/client-go/listers/rbac/v1/clusterrolebinding.go
new file mode 100644
index 00000000000..bf84144a77a
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/rbac/v1/clusterrolebinding.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ rbacv1 "k8s.io/api/rbac/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ClusterRoleBindingLister helps list ClusterRoleBindings.
+// All objects returned here must be treated as read-only.
+type ClusterRoleBindingLister interface {
+ // List lists all ClusterRoleBindings in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*rbacv1.ClusterRoleBinding, err error)
+ // Get retrieves the ClusterRoleBinding from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*rbacv1.ClusterRoleBinding, error)
+ ClusterRoleBindingListerExpansion
+}
+
+// clusterRoleBindingLister implements the ClusterRoleBindingLister interface.
+type clusterRoleBindingLister struct {
+ listers.ResourceIndexer[*rbacv1.ClusterRoleBinding]
+}
+
+// NewClusterRoleBindingLister returns a new ClusterRoleBindingLister.
+func NewClusterRoleBindingLister(indexer cache.Indexer) ClusterRoleBindingLister {
+ return &clusterRoleBindingLister{listers.New[*rbacv1.ClusterRoleBinding](indexer, rbacv1.Resource("clusterrolebinding"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/rbac/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/rbac/v1/expansion_generated.go
new file mode 100644
index 00000000000..0eb2a6d114f
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/rbac/v1/expansion_generated.go
@@ -0,0 +1,43 @@
+/*
+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 v1
+
+// ClusterRoleListerExpansion allows custom methods to be added to
+// ClusterRoleLister.
+type ClusterRoleListerExpansion interface{}
+
+// ClusterRoleBindingListerExpansion allows custom methods to be added to
+// ClusterRoleBindingLister.
+type ClusterRoleBindingListerExpansion interface{}
+
+// RoleListerExpansion allows custom methods to be added to
+// RoleLister.
+type RoleListerExpansion interface{}
+
+// RoleNamespaceListerExpansion allows custom methods to be added to
+// RoleNamespaceLister.
+type RoleNamespaceListerExpansion interface{}
+
+// RoleBindingListerExpansion allows custom methods to be added to
+// RoleBindingLister.
+type RoleBindingListerExpansion interface{}
+
+// RoleBindingNamespaceListerExpansion allows custom methods to be added to
+// RoleBindingNamespaceLister.
+type RoleBindingNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/rbac/v1/role.go b/vendor/k8s.io/client-go/listers/rbac/v1/role.go
new file mode 100644
index 00000000000..d0077e3ceab
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/rbac/v1/role.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ rbacv1 "k8s.io/api/rbac/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// RoleLister helps list Roles.
+// All objects returned here must be treated as read-only.
+type RoleLister interface {
+ // List lists all Roles in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*rbacv1.Role, err error)
+ // Roles returns an object that can list and get Roles.
+ Roles(namespace string) RoleNamespaceLister
+ RoleListerExpansion
+}
+
+// roleLister implements the RoleLister interface.
+type roleLister struct {
+ listers.ResourceIndexer[*rbacv1.Role]
+}
+
+// NewRoleLister returns a new RoleLister.
+func NewRoleLister(indexer cache.Indexer) RoleLister {
+ return &roleLister{listers.New[*rbacv1.Role](indexer, rbacv1.Resource("role"))}
+}
+
+// Roles returns an object that can list and get Roles.
+func (s *roleLister) Roles(namespace string) RoleNamespaceLister {
+ return roleNamespaceLister{listers.NewNamespaced[*rbacv1.Role](s.ResourceIndexer, namespace)}
+}
+
+// RoleNamespaceLister helps list and get Roles.
+// All objects returned here must be treated as read-only.
+type RoleNamespaceLister interface {
+ // List lists all Roles in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*rbacv1.Role, err error)
+ // Get retrieves the Role from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*rbacv1.Role, error)
+ RoleNamespaceListerExpansion
+}
+
+// roleNamespaceLister implements the RoleNamespaceLister
+// interface.
+type roleNamespaceLister struct {
+ listers.ResourceIndexer[*rbacv1.Role]
+}
diff --git a/vendor/k8s.io/client-go/listers/rbac/v1/rolebinding.go b/vendor/k8s.io/client-go/listers/rbac/v1/rolebinding.go
new file mode 100644
index 00000000000..a0e3661567b
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/rbac/v1/rolebinding.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ rbacv1 "k8s.io/api/rbac/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// RoleBindingLister helps list RoleBindings.
+// All objects returned here must be treated as read-only.
+type RoleBindingLister interface {
+ // List lists all RoleBindings in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*rbacv1.RoleBinding, err error)
+ // RoleBindings returns an object that can list and get RoleBindings.
+ RoleBindings(namespace string) RoleBindingNamespaceLister
+ RoleBindingListerExpansion
+}
+
+// roleBindingLister implements the RoleBindingLister interface.
+type roleBindingLister struct {
+ listers.ResourceIndexer[*rbacv1.RoleBinding]
+}
+
+// NewRoleBindingLister returns a new RoleBindingLister.
+func NewRoleBindingLister(indexer cache.Indexer) RoleBindingLister {
+ return &roleBindingLister{listers.New[*rbacv1.RoleBinding](indexer, rbacv1.Resource("rolebinding"))}
+}
+
+// RoleBindings returns an object that can list and get RoleBindings.
+func (s *roleBindingLister) RoleBindings(namespace string) RoleBindingNamespaceLister {
+ return roleBindingNamespaceLister{listers.NewNamespaced[*rbacv1.RoleBinding](s.ResourceIndexer, namespace)}
+}
+
+// RoleBindingNamespaceLister helps list and get RoleBindings.
+// All objects returned here must be treated as read-only.
+type RoleBindingNamespaceLister interface {
+ // List lists all RoleBindings in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*rbacv1.RoleBinding, err error)
+ // Get retrieves the RoleBinding from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*rbacv1.RoleBinding, error)
+ RoleBindingNamespaceListerExpansion
+}
+
+// roleBindingNamespaceLister implements the RoleBindingNamespaceLister
+// interface.
+type roleBindingNamespaceLister struct {
+ listers.ResourceIndexer[*rbacv1.RoleBinding]
+}
diff --git a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrole.go b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrole.go
new file mode 100644
index 00000000000..1783b71617e
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrole.go
@@ -0,0 +1,48 @@
+/*
+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 (
+ rbacv1alpha1 "k8s.io/api/rbac/v1alpha1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ClusterRoleLister helps list ClusterRoles.
+// All objects returned here must be treated as read-only.
+type ClusterRoleLister interface {
+ // List lists all ClusterRoles in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*rbacv1alpha1.ClusterRole, err error)
+ // Get retrieves the ClusterRole from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*rbacv1alpha1.ClusterRole, error)
+ ClusterRoleListerExpansion
+}
+
+// clusterRoleLister implements the ClusterRoleLister interface.
+type clusterRoleLister struct {
+ listers.ResourceIndexer[*rbacv1alpha1.ClusterRole]
+}
+
+// NewClusterRoleLister returns a new ClusterRoleLister.
+func NewClusterRoleLister(indexer cache.Indexer) ClusterRoleLister {
+ return &clusterRoleLister{listers.New[*rbacv1alpha1.ClusterRole](indexer, rbacv1alpha1.Resource("clusterrole"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrolebinding.go b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrolebinding.go
new file mode 100644
index 00000000000..be80c7585de
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/clusterrolebinding.go
@@ -0,0 +1,48 @@
+/*
+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 (
+ rbacv1alpha1 "k8s.io/api/rbac/v1alpha1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ClusterRoleBindingLister helps list ClusterRoleBindings.
+// All objects returned here must be treated as read-only.
+type ClusterRoleBindingLister interface {
+ // List lists all ClusterRoleBindings in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*rbacv1alpha1.ClusterRoleBinding, err error)
+ // Get retrieves the ClusterRoleBinding from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*rbacv1alpha1.ClusterRoleBinding, error)
+ ClusterRoleBindingListerExpansion
+}
+
+// clusterRoleBindingLister implements the ClusterRoleBindingLister interface.
+type clusterRoleBindingLister struct {
+ listers.ResourceIndexer[*rbacv1alpha1.ClusterRoleBinding]
+}
+
+// NewClusterRoleBindingLister returns a new ClusterRoleBindingLister.
+func NewClusterRoleBindingLister(indexer cache.Indexer) ClusterRoleBindingLister {
+ return &clusterRoleBindingLister{listers.New[*rbacv1alpha1.ClusterRoleBinding](indexer, rbacv1alpha1.Resource("clusterrolebinding"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/expansion_generated.go
new file mode 100644
index 00000000000..2d4ad1756e8
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/expansion_generated.go
@@ -0,0 +1,43 @@
+/*
+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
+
+// ClusterRoleListerExpansion allows custom methods to be added to
+// ClusterRoleLister.
+type ClusterRoleListerExpansion interface{}
+
+// ClusterRoleBindingListerExpansion allows custom methods to be added to
+// ClusterRoleBindingLister.
+type ClusterRoleBindingListerExpansion interface{}
+
+// RoleListerExpansion allows custom methods to be added to
+// RoleLister.
+type RoleListerExpansion interface{}
+
+// RoleNamespaceListerExpansion allows custom methods to be added to
+// RoleNamespaceLister.
+type RoleNamespaceListerExpansion interface{}
+
+// RoleBindingListerExpansion allows custom methods to be added to
+// RoleBindingLister.
+type RoleBindingListerExpansion interface{}
+
+// RoleBindingNamespaceListerExpansion allows custom methods to be added to
+// RoleBindingNamespaceLister.
+type RoleBindingNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/role.go b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/role.go
new file mode 100644
index 00000000000..28a1ede1959
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/role.go
@@ -0,0 +1,70 @@
+/*
+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 (
+ rbacv1alpha1 "k8s.io/api/rbac/v1alpha1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// RoleLister helps list Roles.
+// All objects returned here must be treated as read-only.
+type RoleLister interface {
+ // List lists all Roles in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*rbacv1alpha1.Role, err error)
+ // Roles returns an object that can list and get Roles.
+ Roles(namespace string) RoleNamespaceLister
+ RoleListerExpansion
+}
+
+// roleLister implements the RoleLister interface.
+type roleLister struct {
+ listers.ResourceIndexer[*rbacv1alpha1.Role]
+}
+
+// NewRoleLister returns a new RoleLister.
+func NewRoleLister(indexer cache.Indexer) RoleLister {
+ return &roleLister{listers.New[*rbacv1alpha1.Role](indexer, rbacv1alpha1.Resource("role"))}
+}
+
+// Roles returns an object that can list and get Roles.
+func (s *roleLister) Roles(namespace string) RoleNamespaceLister {
+ return roleNamespaceLister{listers.NewNamespaced[*rbacv1alpha1.Role](s.ResourceIndexer, namespace)}
+}
+
+// RoleNamespaceLister helps list and get Roles.
+// All objects returned here must be treated as read-only.
+type RoleNamespaceLister interface {
+ // List lists all Roles in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*rbacv1alpha1.Role, err error)
+ // Get retrieves the Role from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*rbacv1alpha1.Role, error)
+ RoleNamespaceListerExpansion
+}
+
+// roleNamespaceLister implements the RoleNamespaceLister
+// interface.
+type roleNamespaceLister struct {
+ listers.ResourceIndexer[*rbacv1alpha1.Role]
+}
diff --git a/vendor/k8s.io/client-go/listers/rbac/v1alpha1/rolebinding.go b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/rolebinding.go
new file mode 100644
index 00000000000..67e123f638f
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/rbac/v1alpha1/rolebinding.go
@@ -0,0 +1,70 @@
+/*
+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 (
+ rbacv1alpha1 "k8s.io/api/rbac/v1alpha1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// RoleBindingLister helps list RoleBindings.
+// All objects returned here must be treated as read-only.
+type RoleBindingLister interface {
+ // List lists all RoleBindings in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*rbacv1alpha1.RoleBinding, err error)
+ // RoleBindings returns an object that can list and get RoleBindings.
+ RoleBindings(namespace string) RoleBindingNamespaceLister
+ RoleBindingListerExpansion
+}
+
+// roleBindingLister implements the RoleBindingLister interface.
+type roleBindingLister struct {
+ listers.ResourceIndexer[*rbacv1alpha1.RoleBinding]
+}
+
+// NewRoleBindingLister returns a new RoleBindingLister.
+func NewRoleBindingLister(indexer cache.Indexer) RoleBindingLister {
+ return &roleBindingLister{listers.New[*rbacv1alpha1.RoleBinding](indexer, rbacv1alpha1.Resource("rolebinding"))}
+}
+
+// RoleBindings returns an object that can list and get RoleBindings.
+func (s *roleBindingLister) RoleBindings(namespace string) RoleBindingNamespaceLister {
+ return roleBindingNamespaceLister{listers.NewNamespaced[*rbacv1alpha1.RoleBinding](s.ResourceIndexer, namespace)}
+}
+
+// RoleBindingNamespaceLister helps list and get RoleBindings.
+// All objects returned here must be treated as read-only.
+type RoleBindingNamespaceLister interface {
+ // List lists all RoleBindings in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*rbacv1alpha1.RoleBinding, err error)
+ // Get retrieves the RoleBinding from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*rbacv1alpha1.RoleBinding, error)
+ RoleBindingNamespaceListerExpansion
+}
+
+// roleBindingNamespaceLister implements the RoleBindingNamespaceLister
+// interface.
+type roleBindingNamespaceLister struct {
+ listers.ResourceIndexer[*rbacv1alpha1.RoleBinding]
+}
diff --git a/vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrole.go b/vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrole.go
new file mode 100644
index 00000000000..9cf996b8612
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrole.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ rbacv1beta1 "k8s.io/api/rbac/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ClusterRoleLister helps list ClusterRoles.
+// All objects returned here must be treated as read-only.
+type ClusterRoleLister interface {
+ // List lists all ClusterRoles in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*rbacv1beta1.ClusterRole, err error)
+ // Get retrieves the ClusterRole from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*rbacv1beta1.ClusterRole, error)
+ ClusterRoleListerExpansion
+}
+
+// clusterRoleLister implements the ClusterRoleLister interface.
+type clusterRoleLister struct {
+ listers.ResourceIndexer[*rbacv1beta1.ClusterRole]
+}
+
+// NewClusterRoleLister returns a new ClusterRoleLister.
+func NewClusterRoleLister(indexer cache.Indexer) ClusterRoleLister {
+ return &clusterRoleLister{listers.New[*rbacv1beta1.ClusterRole](indexer, rbacv1beta1.Resource("clusterrole"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrolebinding.go b/vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrolebinding.go
new file mode 100644
index 00000000000..41418f7624b
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/rbac/v1beta1/clusterrolebinding.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ rbacv1beta1 "k8s.io/api/rbac/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ClusterRoleBindingLister helps list ClusterRoleBindings.
+// All objects returned here must be treated as read-only.
+type ClusterRoleBindingLister interface {
+ // List lists all ClusterRoleBindings in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*rbacv1beta1.ClusterRoleBinding, err error)
+ // Get retrieves the ClusterRoleBinding from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*rbacv1beta1.ClusterRoleBinding, error)
+ ClusterRoleBindingListerExpansion
+}
+
+// clusterRoleBindingLister implements the ClusterRoleBindingLister interface.
+type clusterRoleBindingLister struct {
+ listers.ResourceIndexer[*rbacv1beta1.ClusterRoleBinding]
+}
+
+// NewClusterRoleBindingLister returns a new ClusterRoleBindingLister.
+func NewClusterRoleBindingLister(indexer cache.Indexer) ClusterRoleBindingLister {
+ return &clusterRoleBindingLister{listers.New[*rbacv1beta1.ClusterRoleBinding](indexer, rbacv1beta1.Resource("clusterrolebinding"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/rbac/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/rbac/v1beta1/expansion_generated.go
new file mode 100644
index 00000000000..51f674bd0fd
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/rbac/v1beta1/expansion_generated.go
@@ -0,0 +1,43 @@
+/*
+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 v1beta1
+
+// ClusterRoleListerExpansion allows custom methods to be added to
+// ClusterRoleLister.
+type ClusterRoleListerExpansion interface{}
+
+// ClusterRoleBindingListerExpansion allows custom methods to be added to
+// ClusterRoleBindingLister.
+type ClusterRoleBindingListerExpansion interface{}
+
+// RoleListerExpansion allows custom methods to be added to
+// RoleLister.
+type RoleListerExpansion interface{}
+
+// RoleNamespaceListerExpansion allows custom methods to be added to
+// RoleNamespaceLister.
+type RoleNamespaceListerExpansion interface{}
+
+// RoleBindingListerExpansion allows custom methods to be added to
+// RoleBindingLister.
+type RoleBindingListerExpansion interface{}
+
+// RoleBindingNamespaceListerExpansion allows custom methods to be added to
+// RoleBindingNamespaceLister.
+type RoleBindingNamespaceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/rbac/v1beta1/role.go b/vendor/k8s.io/client-go/listers/rbac/v1beta1/role.go
new file mode 100644
index 00000000000..04d4ab7721b
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/rbac/v1beta1/role.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ rbacv1beta1 "k8s.io/api/rbac/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// RoleLister helps list Roles.
+// All objects returned here must be treated as read-only.
+type RoleLister interface {
+ // List lists all Roles in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*rbacv1beta1.Role, err error)
+ // Roles returns an object that can list and get Roles.
+ Roles(namespace string) RoleNamespaceLister
+ RoleListerExpansion
+}
+
+// roleLister implements the RoleLister interface.
+type roleLister struct {
+ listers.ResourceIndexer[*rbacv1beta1.Role]
+}
+
+// NewRoleLister returns a new RoleLister.
+func NewRoleLister(indexer cache.Indexer) RoleLister {
+ return &roleLister{listers.New[*rbacv1beta1.Role](indexer, rbacv1beta1.Resource("role"))}
+}
+
+// Roles returns an object that can list and get Roles.
+func (s *roleLister) Roles(namespace string) RoleNamespaceLister {
+ return roleNamespaceLister{listers.NewNamespaced[*rbacv1beta1.Role](s.ResourceIndexer, namespace)}
+}
+
+// RoleNamespaceLister helps list and get Roles.
+// All objects returned here must be treated as read-only.
+type RoleNamespaceLister interface {
+ // List lists all Roles in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*rbacv1beta1.Role, err error)
+ // Get retrieves the Role from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*rbacv1beta1.Role, error)
+ RoleNamespaceListerExpansion
+}
+
+// roleNamespaceLister implements the RoleNamespaceLister
+// interface.
+type roleNamespaceLister struct {
+ listers.ResourceIndexer[*rbacv1beta1.Role]
+}
diff --git a/vendor/k8s.io/client-go/listers/rbac/v1beta1/rolebinding.go b/vendor/k8s.io/client-go/listers/rbac/v1beta1/rolebinding.go
new file mode 100644
index 00000000000..8166732293c
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/rbac/v1beta1/rolebinding.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ rbacv1beta1 "k8s.io/api/rbac/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// RoleBindingLister helps list RoleBindings.
+// All objects returned here must be treated as read-only.
+type RoleBindingLister interface {
+ // List lists all RoleBindings in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*rbacv1beta1.RoleBinding, err error)
+ // RoleBindings returns an object that can list and get RoleBindings.
+ RoleBindings(namespace string) RoleBindingNamespaceLister
+ RoleBindingListerExpansion
+}
+
+// roleBindingLister implements the RoleBindingLister interface.
+type roleBindingLister struct {
+ listers.ResourceIndexer[*rbacv1beta1.RoleBinding]
+}
+
+// NewRoleBindingLister returns a new RoleBindingLister.
+func NewRoleBindingLister(indexer cache.Indexer) RoleBindingLister {
+ return &roleBindingLister{listers.New[*rbacv1beta1.RoleBinding](indexer, rbacv1beta1.Resource("rolebinding"))}
+}
+
+// RoleBindings returns an object that can list and get RoleBindings.
+func (s *roleBindingLister) RoleBindings(namespace string) RoleBindingNamespaceLister {
+ return roleBindingNamespaceLister{listers.NewNamespaced[*rbacv1beta1.RoleBinding](s.ResourceIndexer, namespace)}
+}
+
+// RoleBindingNamespaceLister helps list and get RoleBindings.
+// All objects returned here must be treated as read-only.
+type RoleBindingNamespaceLister interface {
+ // List lists all RoleBindings in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*rbacv1beta1.RoleBinding, err error)
+ // Get retrieves the RoleBinding from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*rbacv1beta1.RoleBinding, error)
+ RoleBindingNamespaceListerExpansion
+}
+
+// roleBindingNamespaceLister implements the RoleBindingNamespaceLister
+// interface.
+type roleBindingNamespaceLister struct {
+ listers.ResourceIndexer[*rbacv1beta1.RoleBinding]
+}
diff --git a/vendor/k8s.io/client-go/listers/resource/v1alpha3/deviceclass.go b/vendor/k8s.io/client-go/listers/resource/v1alpha3/deviceclass.go
new file mode 100644
index 00000000000..05032833b0c
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/resource/v1alpha3/deviceclass.go
@@ -0,0 +1,48 @@
+/*
+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 v1alpha3
+
+import (
+ resourcev1alpha3 "k8s.io/api/resource/v1alpha3"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DeviceClassLister helps list DeviceClasses.
+// All objects returned here must be treated as read-only.
+type DeviceClassLister interface {
+ // List lists all DeviceClasses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*resourcev1alpha3.DeviceClass, err error)
+ // Get retrieves the DeviceClass from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*resourcev1alpha3.DeviceClass, error)
+ DeviceClassListerExpansion
+}
+
+// deviceClassLister implements the DeviceClassLister interface.
+type deviceClassLister struct {
+ listers.ResourceIndexer[*resourcev1alpha3.DeviceClass]
+}
+
+// NewDeviceClassLister returns a new DeviceClassLister.
+func NewDeviceClassLister(indexer cache.Indexer) DeviceClassLister {
+ return &deviceClassLister{listers.New[*resourcev1alpha3.DeviceClass](indexer, resourcev1alpha3.Resource("deviceclass"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/resource/v1alpha3/devicetaintrule.go b/vendor/k8s.io/client-go/listers/resource/v1alpha3/devicetaintrule.go
new file mode 100644
index 00000000000..28d94ff2e4c
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/resource/v1alpha3/devicetaintrule.go
@@ -0,0 +1,48 @@
+/*
+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 v1alpha3
+
+import (
+ resourcev1alpha3 "k8s.io/api/resource/v1alpha3"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DeviceTaintRuleLister helps list DeviceTaintRules.
+// All objects returned here must be treated as read-only.
+type DeviceTaintRuleLister interface {
+ // List lists all DeviceTaintRules in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*resourcev1alpha3.DeviceTaintRule, err error)
+ // Get retrieves the DeviceTaintRule from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*resourcev1alpha3.DeviceTaintRule, error)
+ DeviceTaintRuleListerExpansion
+}
+
+// deviceTaintRuleLister implements the DeviceTaintRuleLister interface.
+type deviceTaintRuleLister struct {
+ listers.ResourceIndexer[*resourcev1alpha3.DeviceTaintRule]
+}
+
+// NewDeviceTaintRuleLister returns a new DeviceTaintRuleLister.
+func NewDeviceTaintRuleLister(indexer cache.Indexer) DeviceTaintRuleLister {
+ return &deviceTaintRuleLister{listers.New[*resourcev1alpha3.DeviceTaintRule](indexer, resourcev1alpha3.Resource("devicetaintrule"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/resource/v1alpha3/expansion_generated.go b/vendor/k8s.io/client-go/listers/resource/v1alpha3/expansion_generated.go
new file mode 100644
index 00000000000..ff94d28691c
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/resource/v1alpha3/expansion_generated.go
@@ -0,0 +1,47 @@
+/*
+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 v1alpha3
+
+// DeviceClassListerExpansion allows custom methods to be added to
+// DeviceClassLister.
+type DeviceClassListerExpansion interface{}
+
+// DeviceTaintRuleListerExpansion allows custom methods to be added to
+// DeviceTaintRuleLister.
+type DeviceTaintRuleListerExpansion interface{}
+
+// ResourceClaimListerExpansion allows custom methods to be added to
+// ResourceClaimLister.
+type ResourceClaimListerExpansion interface{}
+
+// ResourceClaimNamespaceListerExpansion allows custom methods to be added to
+// ResourceClaimNamespaceLister.
+type ResourceClaimNamespaceListerExpansion interface{}
+
+// ResourceClaimTemplateListerExpansion allows custom methods to be added to
+// ResourceClaimTemplateLister.
+type ResourceClaimTemplateListerExpansion interface{}
+
+// ResourceClaimTemplateNamespaceListerExpansion allows custom methods to be added to
+// ResourceClaimTemplateNamespaceLister.
+type ResourceClaimTemplateNamespaceListerExpansion interface{}
+
+// ResourceSliceListerExpansion allows custom methods to be added to
+// ResourceSliceLister.
+type ResourceSliceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/resource/v1alpha3/resourceclaim.go b/vendor/k8s.io/client-go/listers/resource/v1alpha3/resourceclaim.go
new file mode 100644
index 00000000000..9de229bff5b
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/resource/v1alpha3/resourceclaim.go
@@ -0,0 +1,70 @@
+/*
+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 v1alpha3
+
+import (
+ resourcev1alpha3 "k8s.io/api/resource/v1alpha3"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceClaimLister helps list ResourceClaims.
+// All objects returned here must be treated as read-only.
+type ResourceClaimLister interface {
+ // List lists all ResourceClaims in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*resourcev1alpha3.ResourceClaim, err error)
+ // ResourceClaims returns an object that can list and get ResourceClaims.
+ ResourceClaims(namespace string) ResourceClaimNamespaceLister
+ ResourceClaimListerExpansion
+}
+
+// resourceClaimLister implements the ResourceClaimLister interface.
+type resourceClaimLister struct {
+ listers.ResourceIndexer[*resourcev1alpha3.ResourceClaim]
+}
+
+// NewResourceClaimLister returns a new ResourceClaimLister.
+func NewResourceClaimLister(indexer cache.Indexer) ResourceClaimLister {
+ return &resourceClaimLister{listers.New[*resourcev1alpha3.ResourceClaim](indexer, resourcev1alpha3.Resource("resourceclaim"))}
+}
+
+// ResourceClaims returns an object that can list and get ResourceClaims.
+func (s *resourceClaimLister) ResourceClaims(namespace string) ResourceClaimNamespaceLister {
+ return resourceClaimNamespaceLister{listers.NewNamespaced[*resourcev1alpha3.ResourceClaim](s.ResourceIndexer, namespace)}
+}
+
+// ResourceClaimNamespaceLister helps list and get ResourceClaims.
+// All objects returned here must be treated as read-only.
+type ResourceClaimNamespaceLister interface {
+ // List lists all ResourceClaims in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*resourcev1alpha3.ResourceClaim, err error)
+ // Get retrieves the ResourceClaim from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*resourcev1alpha3.ResourceClaim, error)
+ ResourceClaimNamespaceListerExpansion
+}
+
+// resourceClaimNamespaceLister implements the ResourceClaimNamespaceLister
+// interface.
+type resourceClaimNamespaceLister struct {
+ listers.ResourceIndexer[*resourcev1alpha3.ResourceClaim]
+}
diff --git a/vendor/k8s.io/client-go/listers/resource/v1alpha3/resourceclaimtemplate.go b/vendor/k8s.io/client-go/listers/resource/v1alpha3/resourceclaimtemplate.go
new file mode 100644
index 00000000000..b0895edd202
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/resource/v1alpha3/resourceclaimtemplate.go
@@ -0,0 +1,70 @@
+/*
+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 v1alpha3
+
+import (
+ resourcev1alpha3 "k8s.io/api/resource/v1alpha3"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceClaimTemplateLister helps list ResourceClaimTemplates.
+// All objects returned here must be treated as read-only.
+type ResourceClaimTemplateLister interface {
+ // List lists all ResourceClaimTemplates in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*resourcev1alpha3.ResourceClaimTemplate, err error)
+ // ResourceClaimTemplates returns an object that can list and get ResourceClaimTemplates.
+ ResourceClaimTemplates(namespace string) ResourceClaimTemplateNamespaceLister
+ ResourceClaimTemplateListerExpansion
+}
+
+// resourceClaimTemplateLister implements the ResourceClaimTemplateLister interface.
+type resourceClaimTemplateLister struct {
+ listers.ResourceIndexer[*resourcev1alpha3.ResourceClaimTemplate]
+}
+
+// NewResourceClaimTemplateLister returns a new ResourceClaimTemplateLister.
+func NewResourceClaimTemplateLister(indexer cache.Indexer) ResourceClaimTemplateLister {
+ return &resourceClaimTemplateLister{listers.New[*resourcev1alpha3.ResourceClaimTemplate](indexer, resourcev1alpha3.Resource("resourceclaimtemplate"))}
+}
+
+// ResourceClaimTemplates returns an object that can list and get ResourceClaimTemplates.
+func (s *resourceClaimTemplateLister) ResourceClaimTemplates(namespace string) ResourceClaimTemplateNamespaceLister {
+ return resourceClaimTemplateNamespaceLister{listers.NewNamespaced[*resourcev1alpha3.ResourceClaimTemplate](s.ResourceIndexer, namespace)}
+}
+
+// ResourceClaimTemplateNamespaceLister helps list and get ResourceClaimTemplates.
+// All objects returned here must be treated as read-only.
+type ResourceClaimTemplateNamespaceLister interface {
+ // List lists all ResourceClaimTemplates in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*resourcev1alpha3.ResourceClaimTemplate, err error)
+ // Get retrieves the ResourceClaimTemplate from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*resourcev1alpha3.ResourceClaimTemplate, error)
+ ResourceClaimTemplateNamespaceListerExpansion
+}
+
+// resourceClaimTemplateNamespaceLister implements the ResourceClaimTemplateNamespaceLister
+// interface.
+type resourceClaimTemplateNamespaceLister struct {
+ listers.ResourceIndexer[*resourcev1alpha3.ResourceClaimTemplate]
+}
diff --git a/vendor/k8s.io/client-go/listers/resource/v1alpha3/resourceslice.go b/vendor/k8s.io/client-go/listers/resource/v1alpha3/resourceslice.go
new file mode 100644
index 00000000000..66b1b9e060f
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/resource/v1alpha3/resourceslice.go
@@ -0,0 +1,48 @@
+/*
+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 v1alpha3
+
+import (
+ resourcev1alpha3 "k8s.io/api/resource/v1alpha3"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceSliceLister helps list ResourceSlices.
+// All objects returned here must be treated as read-only.
+type ResourceSliceLister interface {
+ // List lists all ResourceSlices in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*resourcev1alpha3.ResourceSlice, err error)
+ // Get retrieves the ResourceSlice from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*resourcev1alpha3.ResourceSlice, error)
+ ResourceSliceListerExpansion
+}
+
+// resourceSliceLister implements the ResourceSliceLister interface.
+type resourceSliceLister struct {
+ listers.ResourceIndexer[*resourcev1alpha3.ResourceSlice]
+}
+
+// NewResourceSliceLister returns a new ResourceSliceLister.
+func NewResourceSliceLister(indexer cache.Indexer) ResourceSliceLister {
+ return &resourceSliceLister{listers.New[*resourcev1alpha3.ResourceSlice](indexer, resourcev1alpha3.Resource("resourceslice"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/resource/v1beta1/deviceclass.go b/vendor/k8s.io/client-go/listers/resource/v1beta1/deviceclass.go
new file mode 100644
index 00000000000..a386fb269cd
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/resource/v1beta1/deviceclass.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ resourcev1beta1 "k8s.io/api/resource/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DeviceClassLister helps list DeviceClasses.
+// All objects returned here must be treated as read-only.
+type DeviceClassLister interface {
+ // List lists all DeviceClasses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*resourcev1beta1.DeviceClass, err error)
+ // Get retrieves the DeviceClass from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*resourcev1beta1.DeviceClass, error)
+ DeviceClassListerExpansion
+}
+
+// deviceClassLister implements the DeviceClassLister interface.
+type deviceClassLister struct {
+ listers.ResourceIndexer[*resourcev1beta1.DeviceClass]
+}
+
+// NewDeviceClassLister returns a new DeviceClassLister.
+func NewDeviceClassLister(indexer cache.Indexer) DeviceClassLister {
+ return &deviceClassLister{listers.New[*resourcev1beta1.DeviceClass](indexer, resourcev1beta1.Resource("deviceclass"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/resource/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/resource/v1beta1/expansion_generated.go
new file mode 100644
index 00000000000..c50a006d8e0
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/resource/v1beta1/expansion_generated.go
@@ -0,0 +1,43 @@
+/*
+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 v1beta1
+
+// DeviceClassListerExpansion allows custom methods to be added to
+// DeviceClassLister.
+type DeviceClassListerExpansion interface{}
+
+// ResourceClaimListerExpansion allows custom methods to be added to
+// ResourceClaimLister.
+type ResourceClaimListerExpansion interface{}
+
+// ResourceClaimNamespaceListerExpansion allows custom methods to be added to
+// ResourceClaimNamespaceLister.
+type ResourceClaimNamespaceListerExpansion interface{}
+
+// ResourceClaimTemplateListerExpansion allows custom methods to be added to
+// ResourceClaimTemplateLister.
+type ResourceClaimTemplateListerExpansion interface{}
+
+// ResourceClaimTemplateNamespaceListerExpansion allows custom methods to be added to
+// ResourceClaimTemplateNamespaceLister.
+type ResourceClaimTemplateNamespaceListerExpansion interface{}
+
+// ResourceSliceListerExpansion allows custom methods to be added to
+// ResourceSliceLister.
+type ResourceSliceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/resource/v1beta1/resourceclaim.go b/vendor/k8s.io/client-go/listers/resource/v1beta1/resourceclaim.go
new file mode 100644
index 00000000000..4342273944d
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/resource/v1beta1/resourceclaim.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ resourcev1beta1 "k8s.io/api/resource/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceClaimLister helps list ResourceClaims.
+// All objects returned here must be treated as read-only.
+type ResourceClaimLister interface {
+ // List lists all ResourceClaims in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*resourcev1beta1.ResourceClaim, err error)
+ // ResourceClaims returns an object that can list and get ResourceClaims.
+ ResourceClaims(namespace string) ResourceClaimNamespaceLister
+ ResourceClaimListerExpansion
+}
+
+// resourceClaimLister implements the ResourceClaimLister interface.
+type resourceClaimLister struct {
+ listers.ResourceIndexer[*resourcev1beta1.ResourceClaim]
+}
+
+// NewResourceClaimLister returns a new ResourceClaimLister.
+func NewResourceClaimLister(indexer cache.Indexer) ResourceClaimLister {
+ return &resourceClaimLister{listers.New[*resourcev1beta1.ResourceClaim](indexer, resourcev1beta1.Resource("resourceclaim"))}
+}
+
+// ResourceClaims returns an object that can list and get ResourceClaims.
+func (s *resourceClaimLister) ResourceClaims(namespace string) ResourceClaimNamespaceLister {
+ return resourceClaimNamespaceLister{listers.NewNamespaced[*resourcev1beta1.ResourceClaim](s.ResourceIndexer, namespace)}
+}
+
+// ResourceClaimNamespaceLister helps list and get ResourceClaims.
+// All objects returned here must be treated as read-only.
+type ResourceClaimNamespaceLister interface {
+ // List lists all ResourceClaims in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*resourcev1beta1.ResourceClaim, err error)
+ // Get retrieves the ResourceClaim from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*resourcev1beta1.ResourceClaim, error)
+ ResourceClaimNamespaceListerExpansion
+}
+
+// resourceClaimNamespaceLister implements the ResourceClaimNamespaceLister
+// interface.
+type resourceClaimNamespaceLister struct {
+ listers.ResourceIndexer[*resourcev1beta1.ResourceClaim]
+}
diff --git a/vendor/k8s.io/client-go/listers/resource/v1beta1/resourceclaimtemplate.go b/vendor/k8s.io/client-go/listers/resource/v1beta1/resourceclaimtemplate.go
new file mode 100644
index 00000000000..152646a90a4
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/resource/v1beta1/resourceclaimtemplate.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ resourcev1beta1 "k8s.io/api/resource/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceClaimTemplateLister helps list ResourceClaimTemplates.
+// All objects returned here must be treated as read-only.
+type ResourceClaimTemplateLister interface {
+ // List lists all ResourceClaimTemplates in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*resourcev1beta1.ResourceClaimTemplate, err error)
+ // ResourceClaimTemplates returns an object that can list and get ResourceClaimTemplates.
+ ResourceClaimTemplates(namespace string) ResourceClaimTemplateNamespaceLister
+ ResourceClaimTemplateListerExpansion
+}
+
+// resourceClaimTemplateLister implements the ResourceClaimTemplateLister interface.
+type resourceClaimTemplateLister struct {
+ listers.ResourceIndexer[*resourcev1beta1.ResourceClaimTemplate]
+}
+
+// NewResourceClaimTemplateLister returns a new ResourceClaimTemplateLister.
+func NewResourceClaimTemplateLister(indexer cache.Indexer) ResourceClaimTemplateLister {
+ return &resourceClaimTemplateLister{listers.New[*resourcev1beta1.ResourceClaimTemplate](indexer, resourcev1beta1.Resource("resourceclaimtemplate"))}
+}
+
+// ResourceClaimTemplates returns an object that can list and get ResourceClaimTemplates.
+func (s *resourceClaimTemplateLister) ResourceClaimTemplates(namespace string) ResourceClaimTemplateNamespaceLister {
+ return resourceClaimTemplateNamespaceLister{listers.NewNamespaced[*resourcev1beta1.ResourceClaimTemplate](s.ResourceIndexer, namespace)}
+}
+
+// ResourceClaimTemplateNamespaceLister helps list and get ResourceClaimTemplates.
+// All objects returned here must be treated as read-only.
+type ResourceClaimTemplateNamespaceLister interface {
+ // List lists all ResourceClaimTemplates in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*resourcev1beta1.ResourceClaimTemplate, err error)
+ // Get retrieves the ResourceClaimTemplate from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*resourcev1beta1.ResourceClaimTemplate, error)
+ ResourceClaimTemplateNamespaceListerExpansion
+}
+
+// resourceClaimTemplateNamespaceLister implements the ResourceClaimTemplateNamespaceLister
+// interface.
+type resourceClaimTemplateNamespaceLister struct {
+ listers.ResourceIndexer[*resourcev1beta1.ResourceClaimTemplate]
+}
diff --git a/vendor/k8s.io/client-go/listers/resource/v1beta1/resourceslice.go b/vendor/k8s.io/client-go/listers/resource/v1beta1/resourceslice.go
new file mode 100644
index 00000000000..fbe10847648
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/resource/v1beta1/resourceslice.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ resourcev1beta1 "k8s.io/api/resource/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceSliceLister helps list ResourceSlices.
+// All objects returned here must be treated as read-only.
+type ResourceSliceLister interface {
+ // List lists all ResourceSlices in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*resourcev1beta1.ResourceSlice, err error)
+ // Get retrieves the ResourceSlice from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*resourcev1beta1.ResourceSlice, error)
+ ResourceSliceListerExpansion
+}
+
+// resourceSliceLister implements the ResourceSliceLister interface.
+type resourceSliceLister struct {
+ listers.ResourceIndexer[*resourcev1beta1.ResourceSlice]
+}
+
+// NewResourceSliceLister returns a new ResourceSliceLister.
+func NewResourceSliceLister(indexer cache.Indexer) ResourceSliceLister {
+ return &resourceSliceLister{listers.New[*resourcev1beta1.ResourceSlice](indexer, resourcev1beta1.Resource("resourceslice"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/resource/v1beta2/deviceclass.go b/vendor/k8s.io/client-go/listers/resource/v1beta2/deviceclass.go
new file mode 100644
index 00000000000..a89e57202be
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/resource/v1beta2/deviceclass.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta2
+
+import (
+ resourcev1beta2 "k8s.io/api/resource/v1beta2"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// DeviceClassLister helps list DeviceClasses.
+// All objects returned here must be treated as read-only.
+type DeviceClassLister interface {
+ // List lists all DeviceClasses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*resourcev1beta2.DeviceClass, err error)
+ // Get retrieves the DeviceClass from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*resourcev1beta2.DeviceClass, error)
+ DeviceClassListerExpansion
+}
+
+// deviceClassLister implements the DeviceClassLister interface.
+type deviceClassLister struct {
+ listers.ResourceIndexer[*resourcev1beta2.DeviceClass]
+}
+
+// NewDeviceClassLister returns a new DeviceClassLister.
+func NewDeviceClassLister(indexer cache.Indexer) DeviceClassLister {
+ return &deviceClassLister{listers.New[*resourcev1beta2.DeviceClass](indexer, resourcev1beta2.Resource("deviceclass"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/resource/v1beta2/expansion_generated.go b/vendor/k8s.io/client-go/listers/resource/v1beta2/expansion_generated.go
new file mode 100644
index 00000000000..590f26bd74d
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/resource/v1beta2/expansion_generated.go
@@ -0,0 +1,43 @@
+/*
+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 v1beta2
+
+// DeviceClassListerExpansion allows custom methods to be added to
+// DeviceClassLister.
+type DeviceClassListerExpansion interface{}
+
+// ResourceClaimListerExpansion allows custom methods to be added to
+// ResourceClaimLister.
+type ResourceClaimListerExpansion interface{}
+
+// ResourceClaimNamespaceListerExpansion allows custom methods to be added to
+// ResourceClaimNamespaceLister.
+type ResourceClaimNamespaceListerExpansion interface{}
+
+// ResourceClaimTemplateListerExpansion allows custom methods to be added to
+// ResourceClaimTemplateLister.
+type ResourceClaimTemplateListerExpansion interface{}
+
+// ResourceClaimTemplateNamespaceListerExpansion allows custom methods to be added to
+// ResourceClaimTemplateNamespaceLister.
+type ResourceClaimTemplateNamespaceListerExpansion interface{}
+
+// ResourceSliceListerExpansion allows custom methods to be added to
+// ResourceSliceLister.
+type ResourceSliceListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/resource/v1beta2/resourceclaim.go b/vendor/k8s.io/client-go/listers/resource/v1beta2/resourceclaim.go
new file mode 100644
index 00000000000..ec6d40663c3
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/resource/v1beta2/resourceclaim.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta2
+
+import (
+ resourcev1beta2 "k8s.io/api/resource/v1beta2"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceClaimLister helps list ResourceClaims.
+// All objects returned here must be treated as read-only.
+type ResourceClaimLister interface {
+ // List lists all ResourceClaims in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*resourcev1beta2.ResourceClaim, err error)
+ // ResourceClaims returns an object that can list and get ResourceClaims.
+ ResourceClaims(namespace string) ResourceClaimNamespaceLister
+ ResourceClaimListerExpansion
+}
+
+// resourceClaimLister implements the ResourceClaimLister interface.
+type resourceClaimLister struct {
+ listers.ResourceIndexer[*resourcev1beta2.ResourceClaim]
+}
+
+// NewResourceClaimLister returns a new ResourceClaimLister.
+func NewResourceClaimLister(indexer cache.Indexer) ResourceClaimLister {
+ return &resourceClaimLister{listers.New[*resourcev1beta2.ResourceClaim](indexer, resourcev1beta2.Resource("resourceclaim"))}
+}
+
+// ResourceClaims returns an object that can list and get ResourceClaims.
+func (s *resourceClaimLister) ResourceClaims(namespace string) ResourceClaimNamespaceLister {
+ return resourceClaimNamespaceLister{listers.NewNamespaced[*resourcev1beta2.ResourceClaim](s.ResourceIndexer, namespace)}
+}
+
+// ResourceClaimNamespaceLister helps list and get ResourceClaims.
+// All objects returned here must be treated as read-only.
+type ResourceClaimNamespaceLister interface {
+ // List lists all ResourceClaims in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*resourcev1beta2.ResourceClaim, err error)
+ // Get retrieves the ResourceClaim from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*resourcev1beta2.ResourceClaim, error)
+ ResourceClaimNamespaceListerExpansion
+}
+
+// resourceClaimNamespaceLister implements the ResourceClaimNamespaceLister
+// interface.
+type resourceClaimNamespaceLister struct {
+ listers.ResourceIndexer[*resourcev1beta2.ResourceClaim]
+}
diff --git a/vendor/k8s.io/client-go/listers/resource/v1beta2/resourceclaimtemplate.go b/vendor/k8s.io/client-go/listers/resource/v1beta2/resourceclaimtemplate.go
new file mode 100644
index 00000000000..8ff19b88ec7
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/resource/v1beta2/resourceclaimtemplate.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta2
+
+import (
+ resourcev1beta2 "k8s.io/api/resource/v1beta2"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceClaimTemplateLister helps list ResourceClaimTemplates.
+// All objects returned here must be treated as read-only.
+type ResourceClaimTemplateLister interface {
+ // List lists all ResourceClaimTemplates in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*resourcev1beta2.ResourceClaimTemplate, err error)
+ // ResourceClaimTemplates returns an object that can list and get ResourceClaimTemplates.
+ ResourceClaimTemplates(namespace string) ResourceClaimTemplateNamespaceLister
+ ResourceClaimTemplateListerExpansion
+}
+
+// resourceClaimTemplateLister implements the ResourceClaimTemplateLister interface.
+type resourceClaimTemplateLister struct {
+ listers.ResourceIndexer[*resourcev1beta2.ResourceClaimTemplate]
+}
+
+// NewResourceClaimTemplateLister returns a new ResourceClaimTemplateLister.
+func NewResourceClaimTemplateLister(indexer cache.Indexer) ResourceClaimTemplateLister {
+ return &resourceClaimTemplateLister{listers.New[*resourcev1beta2.ResourceClaimTemplate](indexer, resourcev1beta2.Resource("resourceclaimtemplate"))}
+}
+
+// ResourceClaimTemplates returns an object that can list and get ResourceClaimTemplates.
+func (s *resourceClaimTemplateLister) ResourceClaimTemplates(namespace string) ResourceClaimTemplateNamespaceLister {
+ return resourceClaimTemplateNamespaceLister{listers.NewNamespaced[*resourcev1beta2.ResourceClaimTemplate](s.ResourceIndexer, namespace)}
+}
+
+// ResourceClaimTemplateNamespaceLister helps list and get ResourceClaimTemplates.
+// All objects returned here must be treated as read-only.
+type ResourceClaimTemplateNamespaceLister interface {
+ // List lists all ResourceClaimTemplates in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*resourcev1beta2.ResourceClaimTemplate, err error)
+ // Get retrieves the ResourceClaimTemplate from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*resourcev1beta2.ResourceClaimTemplate, error)
+ ResourceClaimTemplateNamespaceListerExpansion
+}
+
+// resourceClaimTemplateNamespaceLister implements the ResourceClaimTemplateNamespaceLister
+// interface.
+type resourceClaimTemplateNamespaceLister struct {
+ listers.ResourceIndexer[*resourcev1beta2.ResourceClaimTemplate]
+}
diff --git a/vendor/k8s.io/client-go/listers/resource/v1beta2/resourceslice.go b/vendor/k8s.io/client-go/listers/resource/v1beta2/resourceslice.go
new file mode 100644
index 00000000000..f1a8174078e
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/resource/v1beta2/resourceslice.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta2
+
+import (
+ resourcev1beta2 "k8s.io/api/resource/v1beta2"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// ResourceSliceLister helps list ResourceSlices.
+// All objects returned here must be treated as read-only.
+type ResourceSliceLister interface {
+ // List lists all ResourceSlices in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*resourcev1beta2.ResourceSlice, err error)
+ // Get retrieves the ResourceSlice from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*resourcev1beta2.ResourceSlice, error)
+ ResourceSliceListerExpansion
+}
+
+// resourceSliceLister implements the ResourceSliceLister interface.
+type resourceSliceLister struct {
+ listers.ResourceIndexer[*resourcev1beta2.ResourceSlice]
+}
+
+// NewResourceSliceLister returns a new ResourceSliceLister.
+func NewResourceSliceLister(indexer cache.Indexer) ResourceSliceLister {
+ return &resourceSliceLister{listers.New[*resourcev1beta2.ResourceSlice](indexer, resourcev1beta2.Resource("resourceslice"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/scheduling/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/scheduling/v1/expansion_generated.go
new file mode 100644
index 00000000000..d0c45d01255
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/scheduling/v1/expansion_generated.go
@@ -0,0 +1,23 @@
+/*
+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 v1
+
+// PriorityClassListerExpansion allows custom methods to be added to
+// PriorityClassLister.
+type PriorityClassListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/scheduling/v1/priorityclass.go b/vendor/k8s.io/client-go/listers/scheduling/v1/priorityclass.go
new file mode 100644
index 00000000000..deadbe2f8b1
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/scheduling/v1/priorityclass.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ schedulingv1 "k8s.io/api/scheduling/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PriorityClassLister helps list PriorityClasses.
+// All objects returned here must be treated as read-only.
+type PriorityClassLister interface {
+ // List lists all PriorityClasses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*schedulingv1.PriorityClass, err error)
+ // Get retrieves the PriorityClass from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*schedulingv1.PriorityClass, error)
+ PriorityClassListerExpansion
+}
+
+// priorityClassLister implements the PriorityClassLister interface.
+type priorityClassLister struct {
+ listers.ResourceIndexer[*schedulingv1.PriorityClass]
+}
+
+// NewPriorityClassLister returns a new PriorityClassLister.
+func NewPriorityClassLister(indexer cache.Indexer) PriorityClassLister {
+ return &priorityClassLister{listers.New[*schedulingv1.PriorityClass](indexer, schedulingv1.Resource("priorityclass"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/scheduling/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/scheduling/v1alpha1/expansion_generated.go
new file mode 100644
index 00000000000..bde8b6206c8
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/scheduling/v1alpha1/expansion_generated.go
@@ -0,0 +1,23 @@
+/*
+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
+
+// PriorityClassListerExpansion allows custom methods to be added to
+// PriorityClassLister.
+type PriorityClassListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/scheduling/v1alpha1/priorityclass.go b/vendor/k8s.io/client-go/listers/scheduling/v1alpha1/priorityclass.go
new file mode 100644
index 00000000000..7beaf46322a
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/scheduling/v1alpha1/priorityclass.go
@@ -0,0 +1,48 @@
+/*
+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 (
+ schedulingv1alpha1 "k8s.io/api/scheduling/v1alpha1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PriorityClassLister helps list PriorityClasses.
+// All objects returned here must be treated as read-only.
+type PriorityClassLister interface {
+ // List lists all PriorityClasses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*schedulingv1alpha1.PriorityClass, err error)
+ // Get retrieves the PriorityClass from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*schedulingv1alpha1.PriorityClass, error)
+ PriorityClassListerExpansion
+}
+
+// priorityClassLister implements the PriorityClassLister interface.
+type priorityClassLister struct {
+ listers.ResourceIndexer[*schedulingv1alpha1.PriorityClass]
+}
+
+// NewPriorityClassLister returns a new PriorityClassLister.
+func NewPriorityClassLister(indexer cache.Indexer) PriorityClassLister {
+ return &priorityClassLister{listers.New[*schedulingv1alpha1.PriorityClass](indexer, schedulingv1alpha1.Resource("priorityclass"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/scheduling/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/scheduling/v1beta1/expansion_generated.go
new file mode 100644
index 00000000000..b806e8cf80c
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/scheduling/v1beta1/expansion_generated.go
@@ -0,0 +1,23 @@
+/*
+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 v1beta1
+
+// PriorityClassListerExpansion allows custom methods to be added to
+// PriorityClassLister.
+type PriorityClassListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/scheduling/v1beta1/priorityclass.go b/vendor/k8s.io/client-go/listers/scheduling/v1beta1/priorityclass.go
new file mode 100644
index 00000000000..92fd17de6d9
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/scheduling/v1beta1/priorityclass.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ schedulingv1beta1 "k8s.io/api/scheduling/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// PriorityClassLister helps list PriorityClasses.
+// All objects returned here must be treated as read-only.
+type PriorityClassLister interface {
+ // List lists all PriorityClasses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*schedulingv1beta1.PriorityClass, err error)
+ // Get retrieves the PriorityClass from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*schedulingv1beta1.PriorityClass, error)
+ PriorityClassListerExpansion
+}
+
+// priorityClassLister implements the PriorityClassLister interface.
+type priorityClassLister struct {
+ listers.ResourceIndexer[*schedulingv1beta1.PriorityClass]
+}
+
+// NewPriorityClassLister returns a new PriorityClassLister.
+func NewPriorityClassLister(indexer cache.Indexer) PriorityClassLister {
+ return &priorityClassLister{listers.New[*schedulingv1beta1.PriorityClass](indexer, schedulingv1beta1.Resource("priorityclass"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/storage/v1/csidriver.go b/vendor/k8s.io/client-go/listers/storage/v1/csidriver.go
new file mode 100644
index 00000000000..dff96e69100
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/storage/v1/csidriver.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ storagev1 "k8s.io/api/storage/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CSIDriverLister helps list CSIDrivers.
+// All objects returned here must be treated as read-only.
+type CSIDriverLister interface {
+ // List lists all CSIDrivers in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*storagev1.CSIDriver, err error)
+ // Get retrieves the CSIDriver from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*storagev1.CSIDriver, error)
+ CSIDriverListerExpansion
+}
+
+// cSIDriverLister implements the CSIDriverLister interface.
+type cSIDriverLister struct {
+ listers.ResourceIndexer[*storagev1.CSIDriver]
+}
+
+// NewCSIDriverLister returns a new CSIDriverLister.
+func NewCSIDriverLister(indexer cache.Indexer) CSIDriverLister {
+ return &cSIDriverLister{listers.New[*storagev1.CSIDriver](indexer, storagev1.Resource("csidriver"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/storage/v1/csinode.go b/vendor/k8s.io/client-go/listers/storage/v1/csinode.go
new file mode 100644
index 00000000000..85a2ad6b5da
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/storage/v1/csinode.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ storagev1 "k8s.io/api/storage/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CSINodeLister helps list CSINodes.
+// All objects returned here must be treated as read-only.
+type CSINodeLister interface {
+ // List lists all CSINodes in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*storagev1.CSINode, err error)
+ // Get retrieves the CSINode from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*storagev1.CSINode, error)
+ CSINodeListerExpansion
+}
+
+// cSINodeLister implements the CSINodeLister interface.
+type cSINodeLister struct {
+ listers.ResourceIndexer[*storagev1.CSINode]
+}
+
+// NewCSINodeLister returns a new CSINodeLister.
+func NewCSINodeLister(indexer cache.Indexer) CSINodeLister {
+ return &cSINodeLister{listers.New[*storagev1.CSINode](indexer, storagev1.Resource("csinode"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/storage/v1/csistoragecapacity.go b/vendor/k8s.io/client-go/listers/storage/v1/csistoragecapacity.go
new file mode 100644
index 00000000000..3ed903a17eb
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/storage/v1/csistoragecapacity.go
@@ -0,0 +1,70 @@
+/*
+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 v1
+
+import (
+ storagev1 "k8s.io/api/storage/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CSIStorageCapacityLister helps list CSIStorageCapacities.
+// All objects returned here must be treated as read-only.
+type CSIStorageCapacityLister interface {
+ // List lists all CSIStorageCapacities in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*storagev1.CSIStorageCapacity, err error)
+ // CSIStorageCapacities returns an object that can list and get CSIStorageCapacities.
+ CSIStorageCapacities(namespace string) CSIStorageCapacityNamespaceLister
+ CSIStorageCapacityListerExpansion
+}
+
+// cSIStorageCapacityLister implements the CSIStorageCapacityLister interface.
+type cSIStorageCapacityLister struct {
+ listers.ResourceIndexer[*storagev1.CSIStorageCapacity]
+}
+
+// NewCSIStorageCapacityLister returns a new CSIStorageCapacityLister.
+func NewCSIStorageCapacityLister(indexer cache.Indexer) CSIStorageCapacityLister {
+ return &cSIStorageCapacityLister{listers.New[*storagev1.CSIStorageCapacity](indexer, storagev1.Resource("csistoragecapacity"))}
+}
+
+// CSIStorageCapacities returns an object that can list and get CSIStorageCapacities.
+func (s *cSIStorageCapacityLister) CSIStorageCapacities(namespace string) CSIStorageCapacityNamespaceLister {
+ return cSIStorageCapacityNamespaceLister{listers.NewNamespaced[*storagev1.CSIStorageCapacity](s.ResourceIndexer, namespace)}
+}
+
+// CSIStorageCapacityNamespaceLister helps list and get CSIStorageCapacities.
+// All objects returned here must be treated as read-only.
+type CSIStorageCapacityNamespaceLister interface {
+ // List lists all CSIStorageCapacities in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*storagev1.CSIStorageCapacity, err error)
+ // Get retrieves the CSIStorageCapacity from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*storagev1.CSIStorageCapacity, error)
+ CSIStorageCapacityNamespaceListerExpansion
+}
+
+// cSIStorageCapacityNamespaceLister implements the CSIStorageCapacityNamespaceLister
+// interface.
+type cSIStorageCapacityNamespaceLister struct {
+ listers.ResourceIndexer[*storagev1.CSIStorageCapacity]
+}
diff --git a/vendor/k8s.io/client-go/listers/storage/v1/expansion_generated.go b/vendor/k8s.io/client-go/listers/storage/v1/expansion_generated.go
new file mode 100644
index 00000000000..196b787e7ea
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/storage/v1/expansion_generated.go
@@ -0,0 +1,43 @@
+/*
+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 v1
+
+// CSIDriverListerExpansion allows custom methods to be added to
+// CSIDriverLister.
+type CSIDriverListerExpansion interface{}
+
+// CSINodeListerExpansion allows custom methods to be added to
+// CSINodeLister.
+type CSINodeListerExpansion interface{}
+
+// CSIStorageCapacityListerExpansion allows custom methods to be added to
+// CSIStorageCapacityLister.
+type CSIStorageCapacityListerExpansion interface{}
+
+// CSIStorageCapacityNamespaceListerExpansion allows custom methods to be added to
+// CSIStorageCapacityNamespaceLister.
+type CSIStorageCapacityNamespaceListerExpansion interface{}
+
+// StorageClassListerExpansion allows custom methods to be added to
+// StorageClassLister.
+type StorageClassListerExpansion interface{}
+
+// VolumeAttachmentListerExpansion allows custom methods to be added to
+// VolumeAttachmentLister.
+type VolumeAttachmentListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/storage/v1/storageclass.go b/vendor/k8s.io/client-go/listers/storage/v1/storageclass.go
new file mode 100644
index 00000000000..8d595a856d0
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/storage/v1/storageclass.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ storagev1 "k8s.io/api/storage/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// StorageClassLister helps list StorageClasses.
+// All objects returned here must be treated as read-only.
+type StorageClassLister interface {
+ // List lists all StorageClasses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*storagev1.StorageClass, err error)
+ // Get retrieves the StorageClass from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*storagev1.StorageClass, error)
+ StorageClassListerExpansion
+}
+
+// storageClassLister implements the StorageClassLister interface.
+type storageClassLister struct {
+ listers.ResourceIndexer[*storagev1.StorageClass]
+}
+
+// NewStorageClassLister returns a new StorageClassLister.
+func NewStorageClassLister(indexer cache.Indexer) StorageClassLister {
+ return &storageClassLister{listers.New[*storagev1.StorageClass](indexer, storagev1.Resource("storageclass"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/storage/v1/volumeattachment.go b/vendor/k8s.io/client-go/listers/storage/v1/volumeattachment.go
new file mode 100644
index 00000000000..26247faad93
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/storage/v1/volumeattachment.go
@@ -0,0 +1,48 @@
+/*
+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 v1
+
+import (
+ storagev1 "k8s.io/api/storage/v1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// VolumeAttachmentLister helps list VolumeAttachments.
+// All objects returned here must be treated as read-only.
+type VolumeAttachmentLister interface {
+ // List lists all VolumeAttachments in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*storagev1.VolumeAttachment, err error)
+ // Get retrieves the VolumeAttachment from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*storagev1.VolumeAttachment, error)
+ VolumeAttachmentListerExpansion
+}
+
+// volumeAttachmentLister implements the VolumeAttachmentLister interface.
+type volumeAttachmentLister struct {
+ listers.ResourceIndexer[*storagev1.VolumeAttachment]
+}
+
+// NewVolumeAttachmentLister returns a new VolumeAttachmentLister.
+func NewVolumeAttachmentLister(indexer cache.Indexer) VolumeAttachmentLister {
+ return &volumeAttachmentLister{listers.New[*storagev1.VolumeAttachment](indexer, storagev1.Resource("volumeattachment"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/storage/v1alpha1/csistoragecapacity.go b/vendor/k8s.io/client-go/listers/storage/v1alpha1/csistoragecapacity.go
new file mode 100644
index 00000000000..62127edf9dc
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/storage/v1alpha1/csistoragecapacity.go
@@ -0,0 +1,70 @@
+/*
+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 (
+ storagev1alpha1 "k8s.io/api/storage/v1alpha1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CSIStorageCapacityLister helps list CSIStorageCapacities.
+// All objects returned here must be treated as read-only.
+type CSIStorageCapacityLister interface {
+ // List lists all CSIStorageCapacities in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*storagev1alpha1.CSIStorageCapacity, err error)
+ // CSIStorageCapacities returns an object that can list and get CSIStorageCapacities.
+ CSIStorageCapacities(namespace string) CSIStorageCapacityNamespaceLister
+ CSIStorageCapacityListerExpansion
+}
+
+// cSIStorageCapacityLister implements the CSIStorageCapacityLister interface.
+type cSIStorageCapacityLister struct {
+ listers.ResourceIndexer[*storagev1alpha1.CSIStorageCapacity]
+}
+
+// NewCSIStorageCapacityLister returns a new CSIStorageCapacityLister.
+func NewCSIStorageCapacityLister(indexer cache.Indexer) CSIStorageCapacityLister {
+ return &cSIStorageCapacityLister{listers.New[*storagev1alpha1.CSIStorageCapacity](indexer, storagev1alpha1.Resource("csistoragecapacity"))}
+}
+
+// CSIStorageCapacities returns an object that can list and get CSIStorageCapacities.
+func (s *cSIStorageCapacityLister) CSIStorageCapacities(namespace string) CSIStorageCapacityNamespaceLister {
+ return cSIStorageCapacityNamespaceLister{listers.NewNamespaced[*storagev1alpha1.CSIStorageCapacity](s.ResourceIndexer, namespace)}
+}
+
+// CSIStorageCapacityNamespaceLister helps list and get CSIStorageCapacities.
+// All objects returned here must be treated as read-only.
+type CSIStorageCapacityNamespaceLister interface {
+ // List lists all CSIStorageCapacities in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*storagev1alpha1.CSIStorageCapacity, err error)
+ // Get retrieves the CSIStorageCapacity from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*storagev1alpha1.CSIStorageCapacity, error)
+ CSIStorageCapacityNamespaceListerExpansion
+}
+
+// cSIStorageCapacityNamespaceLister implements the CSIStorageCapacityNamespaceLister
+// interface.
+type cSIStorageCapacityNamespaceLister struct {
+ listers.ResourceIndexer[*storagev1alpha1.CSIStorageCapacity]
+}
diff --git a/vendor/k8s.io/client-go/listers/storage/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/storage/v1alpha1/expansion_generated.go
new file mode 100644
index 00000000000..327fb6e31cd
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/storage/v1alpha1/expansion_generated.go
@@ -0,0 +1,35 @@
+/*
+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
+
+// CSIStorageCapacityListerExpansion allows custom methods to be added to
+// CSIStorageCapacityLister.
+type CSIStorageCapacityListerExpansion interface{}
+
+// CSIStorageCapacityNamespaceListerExpansion allows custom methods to be added to
+// CSIStorageCapacityNamespaceLister.
+type CSIStorageCapacityNamespaceListerExpansion interface{}
+
+// VolumeAttachmentListerExpansion allows custom methods to be added to
+// VolumeAttachmentLister.
+type VolumeAttachmentListerExpansion interface{}
+
+// VolumeAttributesClassListerExpansion allows custom methods to be added to
+// VolumeAttributesClassLister.
+type VolumeAttributesClassListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/storage/v1alpha1/volumeattachment.go b/vendor/k8s.io/client-go/listers/storage/v1alpha1/volumeattachment.go
new file mode 100644
index 00000000000..9604e4c1be0
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/storage/v1alpha1/volumeattachment.go
@@ -0,0 +1,48 @@
+/*
+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 (
+ storagev1alpha1 "k8s.io/api/storage/v1alpha1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// VolumeAttachmentLister helps list VolumeAttachments.
+// All objects returned here must be treated as read-only.
+type VolumeAttachmentLister interface {
+ // List lists all VolumeAttachments in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*storagev1alpha1.VolumeAttachment, err error)
+ // Get retrieves the VolumeAttachment from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*storagev1alpha1.VolumeAttachment, error)
+ VolumeAttachmentListerExpansion
+}
+
+// volumeAttachmentLister implements the VolumeAttachmentLister interface.
+type volumeAttachmentLister struct {
+ listers.ResourceIndexer[*storagev1alpha1.VolumeAttachment]
+}
+
+// NewVolumeAttachmentLister returns a new VolumeAttachmentLister.
+func NewVolumeAttachmentLister(indexer cache.Indexer) VolumeAttachmentLister {
+ return &volumeAttachmentLister{listers.New[*storagev1alpha1.VolumeAttachment](indexer, storagev1alpha1.Resource("volumeattachment"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/storage/v1alpha1/volumeattributesclass.go b/vendor/k8s.io/client-go/listers/storage/v1alpha1/volumeattributesclass.go
new file mode 100644
index 00000000000..08710c98139
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/storage/v1alpha1/volumeattributesclass.go
@@ -0,0 +1,48 @@
+/*
+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 (
+ storagev1alpha1 "k8s.io/api/storage/v1alpha1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// VolumeAttributesClassLister helps list VolumeAttributesClasses.
+// All objects returned here must be treated as read-only.
+type VolumeAttributesClassLister interface {
+ // List lists all VolumeAttributesClasses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*storagev1alpha1.VolumeAttributesClass, err error)
+ // Get retrieves the VolumeAttributesClass from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*storagev1alpha1.VolumeAttributesClass, error)
+ VolumeAttributesClassListerExpansion
+}
+
+// volumeAttributesClassLister implements the VolumeAttributesClassLister interface.
+type volumeAttributesClassLister struct {
+ listers.ResourceIndexer[*storagev1alpha1.VolumeAttributesClass]
+}
+
+// NewVolumeAttributesClassLister returns a new VolumeAttributesClassLister.
+func NewVolumeAttributesClassLister(indexer cache.Indexer) VolumeAttributesClassLister {
+ return &volumeAttributesClassLister{listers.New[*storagev1alpha1.VolumeAttributesClass](indexer, storagev1alpha1.Resource("volumeattributesclass"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/csidriver.go b/vendor/k8s.io/client-go/listers/storage/v1beta1/csidriver.go
new file mode 100644
index 00000000000..31a7e5a2b60
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/storage/v1beta1/csidriver.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ storagev1beta1 "k8s.io/api/storage/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CSIDriverLister helps list CSIDrivers.
+// All objects returned here must be treated as read-only.
+type CSIDriverLister interface {
+ // List lists all CSIDrivers in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*storagev1beta1.CSIDriver, err error)
+ // Get retrieves the CSIDriver from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*storagev1beta1.CSIDriver, error)
+ CSIDriverListerExpansion
+}
+
+// cSIDriverLister implements the CSIDriverLister interface.
+type cSIDriverLister struct {
+ listers.ResourceIndexer[*storagev1beta1.CSIDriver]
+}
+
+// NewCSIDriverLister returns a new CSIDriverLister.
+func NewCSIDriverLister(indexer cache.Indexer) CSIDriverLister {
+ return &cSIDriverLister{listers.New[*storagev1beta1.CSIDriver](indexer, storagev1beta1.Resource("csidriver"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/csinode.go b/vendor/k8s.io/client-go/listers/storage/v1beta1/csinode.go
new file mode 100644
index 00000000000..1ab0942c315
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/storage/v1beta1/csinode.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ storagev1beta1 "k8s.io/api/storage/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CSINodeLister helps list CSINodes.
+// All objects returned here must be treated as read-only.
+type CSINodeLister interface {
+ // List lists all CSINodes in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*storagev1beta1.CSINode, err error)
+ // Get retrieves the CSINode from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*storagev1beta1.CSINode, error)
+ CSINodeListerExpansion
+}
+
+// cSINodeLister implements the CSINodeLister interface.
+type cSINodeLister struct {
+ listers.ResourceIndexer[*storagev1beta1.CSINode]
+}
+
+// NewCSINodeLister returns a new CSINodeLister.
+func NewCSINodeLister(indexer cache.Indexer) CSINodeLister {
+ return &cSINodeLister{listers.New[*storagev1beta1.CSINode](indexer, storagev1beta1.Resource("csinode"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/csistoragecapacity.go b/vendor/k8s.io/client-go/listers/storage/v1beta1/csistoragecapacity.go
new file mode 100644
index 00000000000..25ff95237ec
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/storage/v1beta1/csistoragecapacity.go
@@ -0,0 +1,70 @@
+/*
+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 v1beta1
+
+import (
+ storagev1beta1 "k8s.io/api/storage/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// CSIStorageCapacityLister helps list CSIStorageCapacities.
+// All objects returned here must be treated as read-only.
+type CSIStorageCapacityLister interface {
+ // List lists all CSIStorageCapacities in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*storagev1beta1.CSIStorageCapacity, err error)
+ // CSIStorageCapacities returns an object that can list and get CSIStorageCapacities.
+ CSIStorageCapacities(namespace string) CSIStorageCapacityNamespaceLister
+ CSIStorageCapacityListerExpansion
+}
+
+// cSIStorageCapacityLister implements the CSIStorageCapacityLister interface.
+type cSIStorageCapacityLister struct {
+ listers.ResourceIndexer[*storagev1beta1.CSIStorageCapacity]
+}
+
+// NewCSIStorageCapacityLister returns a new CSIStorageCapacityLister.
+func NewCSIStorageCapacityLister(indexer cache.Indexer) CSIStorageCapacityLister {
+ return &cSIStorageCapacityLister{listers.New[*storagev1beta1.CSIStorageCapacity](indexer, storagev1beta1.Resource("csistoragecapacity"))}
+}
+
+// CSIStorageCapacities returns an object that can list and get CSIStorageCapacities.
+func (s *cSIStorageCapacityLister) CSIStorageCapacities(namespace string) CSIStorageCapacityNamespaceLister {
+ return cSIStorageCapacityNamespaceLister{listers.NewNamespaced[*storagev1beta1.CSIStorageCapacity](s.ResourceIndexer, namespace)}
+}
+
+// CSIStorageCapacityNamespaceLister helps list and get CSIStorageCapacities.
+// All objects returned here must be treated as read-only.
+type CSIStorageCapacityNamespaceLister interface {
+ // List lists all CSIStorageCapacities in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*storagev1beta1.CSIStorageCapacity, err error)
+ // Get retrieves the CSIStorageCapacity from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*storagev1beta1.CSIStorageCapacity, error)
+ CSIStorageCapacityNamespaceListerExpansion
+}
+
+// cSIStorageCapacityNamespaceLister implements the CSIStorageCapacityNamespaceLister
+// interface.
+type cSIStorageCapacityNamespaceLister struct {
+ listers.ResourceIndexer[*storagev1beta1.CSIStorageCapacity]
+}
diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/storage/v1beta1/expansion_generated.go
new file mode 100644
index 00000000000..4f56776be19
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/storage/v1beta1/expansion_generated.go
@@ -0,0 +1,47 @@
+/*
+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 v1beta1
+
+// CSIDriverListerExpansion allows custom methods to be added to
+// CSIDriverLister.
+type CSIDriverListerExpansion interface{}
+
+// CSINodeListerExpansion allows custom methods to be added to
+// CSINodeLister.
+type CSINodeListerExpansion interface{}
+
+// CSIStorageCapacityListerExpansion allows custom methods to be added to
+// CSIStorageCapacityLister.
+type CSIStorageCapacityListerExpansion interface{}
+
+// CSIStorageCapacityNamespaceListerExpansion allows custom methods to be added to
+// CSIStorageCapacityNamespaceLister.
+type CSIStorageCapacityNamespaceListerExpansion interface{}
+
+// StorageClassListerExpansion allows custom methods to be added to
+// StorageClassLister.
+type StorageClassListerExpansion interface{}
+
+// VolumeAttachmentListerExpansion allows custom methods to be added to
+// VolumeAttachmentLister.
+type VolumeAttachmentListerExpansion interface{}
+
+// VolumeAttributesClassListerExpansion allows custom methods to be added to
+// VolumeAttributesClassLister.
+type VolumeAttributesClassListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/storageclass.go b/vendor/k8s.io/client-go/listers/storage/v1beta1/storageclass.go
new file mode 100644
index 00000000000..3928cbacde0
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/storage/v1beta1/storageclass.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ storagev1beta1 "k8s.io/api/storage/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// StorageClassLister helps list StorageClasses.
+// All objects returned here must be treated as read-only.
+type StorageClassLister interface {
+ // List lists all StorageClasses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*storagev1beta1.StorageClass, err error)
+ // Get retrieves the StorageClass from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*storagev1beta1.StorageClass, error)
+ StorageClassListerExpansion
+}
+
+// storageClassLister implements the StorageClassLister interface.
+type storageClassLister struct {
+ listers.ResourceIndexer[*storagev1beta1.StorageClass]
+}
+
+// NewStorageClassLister returns a new StorageClassLister.
+func NewStorageClassLister(indexer cache.Indexer) StorageClassLister {
+ return &storageClassLister{listers.New[*storagev1beta1.StorageClass](indexer, storagev1beta1.Resource("storageclass"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/volumeattachment.go b/vendor/k8s.io/client-go/listers/storage/v1beta1/volumeattachment.go
new file mode 100644
index 00000000000..aab4bef13a1
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/storage/v1beta1/volumeattachment.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ storagev1beta1 "k8s.io/api/storage/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// VolumeAttachmentLister helps list VolumeAttachments.
+// All objects returned here must be treated as read-only.
+type VolumeAttachmentLister interface {
+ // List lists all VolumeAttachments in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*storagev1beta1.VolumeAttachment, err error)
+ // Get retrieves the VolumeAttachment from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*storagev1beta1.VolumeAttachment, error)
+ VolumeAttachmentListerExpansion
+}
+
+// volumeAttachmentLister implements the VolumeAttachmentLister interface.
+type volumeAttachmentLister struct {
+ listers.ResourceIndexer[*storagev1beta1.VolumeAttachment]
+}
+
+// NewVolumeAttachmentLister returns a new VolumeAttachmentLister.
+func NewVolumeAttachmentLister(indexer cache.Indexer) VolumeAttachmentLister {
+ return &volumeAttachmentLister{listers.New[*storagev1beta1.VolumeAttachment](indexer, storagev1beta1.Resource("volumeattachment"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/storage/v1beta1/volumeattributesclass.go b/vendor/k8s.io/client-go/listers/storage/v1beta1/volumeattributesclass.go
new file mode 100644
index 00000000000..8b9724ed9a2
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/storage/v1beta1/volumeattributesclass.go
@@ -0,0 +1,48 @@
+/*
+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 v1beta1
+
+import (
+ storagev1beta1 "k8s.io/api/storage/v1beta1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// VolumeAttributesClassLister helps list VolumeAttributesClasses.
+// All objects returned here must be treated as read-only.
+type VolumeAttributesClassLister interface {
+ // List lists all VolumeAttributesClasses in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*storagev1beta1.VolumeAttributesClass, err error)
+ // Get retrieves the VolumeAttributesClass from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*storagev1beta1.VolumeAttributesClass, error)
+ VolumeAttributesClassListerExpansion
+}
+
+// volumeAttributesClassLister implements the VolumeAttributesClassLister interface.
+type volumeAttributesClassLister struct {
+ listers.ResourceIndexer[*storagev1beta1.VolumeAttributesClass]
+}
+
+// NewVolumeAttributesClassLister returns a new VolumeAttributesClassLister.
+func NewVolumeAttributesClassLister(indexer cache.Indexer) VolumeAttributesClassLister {
+ return &volumeAttributesClassLister{listers.New[*storagev1beta1.VolumeAttributesClass](indexer, storagev1beta1.Resource("volumeattributesclass"))}
+}
diff --git a/vendor/k8s.io/client-go/listers/storagemigration/v1alpha1/expansion_generated.go b/vendor/k8s.io/client-go/listers/storagemigration/v1alpha1/expansion_generated.go
new file mode 100644
index 00000000000..92eb5c65b4f
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/storagemigration/v1alpha1/expansion_generated.go
@@ -0,0 +1,23 @@
+/*
+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
+
+// StorageVersionMigrationListerExpansion allows custom methods to be added to
+// StorageVersionMigrationLister.
+type StorageVersionMigrationListerExpansion interface{}
diff --git a/vendor/k8s.io/client-go/listers/storagemigration/v1alpha1/storageversionmigration.go b/vendor/k8s.io/client-go/listers/storagemigration/v1alpha1/storageversionmigration.go
new file mode 100644
index 00000000000..e7d164d040a
--- /dev/null
+++ b/vendor/k8s.io/client-go/listers/storagemigration/v1alpha1/storageversionmigration.go
@@ -0,0 +1,48 @@
+/*
+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 (
+ storagemigrationv1alpha1 "k8s.io/api/storagemigration/v1alpha1"
+ labels "k8s.io/apimachinery/pkg/labels"
+ listers "k8s.io/client-go/listers"
+ cache "k8s.io/client-go/tools/cache"
+)
+
+// StorageVersionMigrationLister helps list StorageVersionMigrations.
+// All objects returned here must be treated as read-only.
+type StorageVersionMigrationLister interface {
+ // List lists all StorageVersionMigrations in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*storagemigrationv1alpha1.StorageVersionMigration, err error)
+ // Get retrieves the StorageVersionMigration from the index for a given name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*storagemigrationv1alpha1.StorageVersionMigration, error)
+ StorageVersionMigrationListerExpansion
+}
+
+// storageVersionMigrationLister implements the StorageVersionMigrationLister interface.
+type storageVersionMigrationLister struct {
+ listers.ResourceIndexer[*storagemigrationv1alpha1.StorageVersionMigration]
+}
+
+// NewStorageVersionMigrationLister returns a new StorageVersionMigrationLister.
+func NewStorageVersionMigrationLister(indexer cache.Indexer) StorageVersionMigrationLister {
+ return &storageVersionMigrationLister{listers.New[*storagemigrationv1alpha1.StorageVersionMigration](indexer, storagemigrationv1alpha1.Resource("storageversionmigration"))}
+}
diff --git a/vendor/k8s.io/client-go/tools/leaderelection/OWNERS b/vendor/k8s.io/client-go/tools/leaderelection/OWNERS
new file mode 100644
index 00000000000..70787f2b524
--- /dev/null
+++ b/vendor/k8s.io/client-go/tools/leaderelection/OWNERS
@@ -0,0 +1,13 @@
+# See the OWNERS docs at https://go.k8s.io/owners
+
+approvers:
+ - mikedanese
+ - jefftree
+reviewers:
+ - wojtek-t
+ - deads2k
+ - mikedanese
+ - ingvagabund
+ - jefftree
+emeritus_approvers:
+ - timothysc
diff --git a/vendor/k8s.io/client-go/tools/leaderelection/healthzadaptor.go b/vendor/k8s.io/client-go/tools/leaderelection/healthzadaptor.go
new file mode 100644
index 00000000000..b9353729190
--- /dev/null
+++ b/vendor/k8s.io/client-go/tools/leaderelection/healthzadaptor.go
@@ -0,0 +1,69 @@
+/*
+Copyright 2015 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 leaderelection
+
+import (
+ "net/http"
+ "sync"
+ "time"
+)
+
+// HealthzAdaptor associates the /healthz endpoint with the LeaderElection object.
+// It helps deal with the /healthz endpoint being set up prior to the LeaderElection.
+// This contains the code needed to act as an adaptor between the leader
+// election code the health check code. It allows us to provide health
+// status about the leader election. Most specifically about if the leader
+// has failed to renew without exiting the process. In that case we should
+// report not healthy and rely on the kubelet to take down the process.
+type HealthzAdaptor struct {
+ pointerLock sync.Mutex
+ le *LeaderElector
+ timeout time.Duration
+}
+
+// Name returns the name of the health check we are implementing.
+func (l *HealthzAdaptor) Name() string {
+ return "leaderElection"
+}
+
+// Check is called by the healthz endpoint handler.
+// It fails (returns an error) if we own the lease but had not been able to renew it.
+func (l *HealthzAdaptor) Check(req *http.Request) error {
+ l.pointerLock.Lock()
+ defer l.pointerLock.Unlock()
+ if l.le == nil {
+ return nil
+ }
+ return l.le.Check(l.timeout)
+}
+
+// SetLeaderElection ties a leader election object to a HealthzAdaptor
+func (l *HealthzAdaptor) SetLeaderElection(le *LeaderElector) {
+ l.pointerLock.Lock()
+ defer l.pointerLock.Unlock()
+ l.le = le
+}
+
+// NewLeaderHealthzAdaptor creates a basic healthz adaptor to monitor a leader election.
+// timeout determines the time beyond the lease expiry to be allowed for timeout.
+// checks within the timeout period after the lease expires will still return healthy.
+func NewLeaderHealthzAdaptor(timeout time.Duration) *HealthzAdaptor {
+ result := &HealthzAdaptor{
+ timeout: timeout,
+ }
+ return result
+}
diff --git a/vendor/k8s.io/client-go/tools/leaderelection/leaderelection.go b/vendor/k8s.io/client-go/tools/leaderelection/leaderelection.go
new file mode 100644
index 00000000000..c3c1d9be176
--- /dev/null
+++ b/vendor/k8s.io/client-go/tools/leaderelection/leaderelection.go
@@ -0,0 +1,527 @@
+/*
+Copyright 2015 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 leaderelection implements leader election of a set of endpoints.
+// It uses an annotation in the endpoints object to store the record of the
+// election state. This implementation does not guarantee that only one
+// client is acting as a leader (a.k.a. fencing).
+//
+// A client only acts on timestamps captured locally to infer the state of the
+// leader election. The client does not consider timestamps in the leader
+// election record to be accurate because these timestamps may not have been
+// produced by a local clock. The implemention does not depend on their
+// accuracy and only uses their change to indicate that another client has
+// renewed the leader lease. Thus the implementation is tolerant to arbitrary
+// clock skew, but is not tolerant to arbitrary clock skew rate.
+//
+// However the level of tolerance to skew rate can be configured by setting
+// RenewDeadline and LeaseDuration appropriately. The tolerance expressed as a
+// maximum tolerated ratio of time passed on the fastest node to time passed on
+// the slowest node can be approximately achieved with a configuration that sets
+// the same ratio of LeaseDuration to RenewDeadline. For example if a user wanted
+// to tolerate some nodes progressing forward in time twice as fast as other nodes,
+// the user could set LeaseDuration to 60 seconds and RenewDeadline to 30 seconds.
+//
+// While not required, some method of clock synchronization between nodes in the
+// cluster is highly recommended. It's important to keep in mind when configuring
+// this client that the tolerance to skew rate varies inversely to master
+// availability.
+//
+// Larger clusters often have a more lenient SLA for API latency. This should be
+// taken into account when configuring the client. The rate of leader transitions
+// should be monitored and RetryPeriod and LeaseDuration should be increased
+// until the rate is stable and acceptably low. It's important to keep in mind
+// when configuring this client that the tolerance to API latency varies inversely
+// to master availability.
+//
+// DISCLAIMER: this is an alpha API. This library will likely change significantly
+// or even be removed entirely in subsequent releases. Depend on this API at
+// your own risk.
+package leaderelection
+
+import (
+ "bytes"
+ "context"
+ "fmt"
+ "sync"
+ "time"
+
+ "k8s.io/apimachinery/pkg/api/errors"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/util/runtime"
+ "k8s.io/apimachinery/pkg/util/wait"
+ rl "k8s.io/client-go/tools/leaderelection/resourcelock"
+ "k8s.io/klog/v2"
+ "k8s.io/utils/clock"
+)
+
+const (
+ JitterFactor = 1.2
+)
+
+// NewLeaderElector creates a LeaderElector from a LeaderElectionConfig
+func NewLeaderElector(lec LeaderElectionConfig) (*LeaderElector, error) {
+ if lec.LeaseDuration <= lec.RenewDeadline {
+ return nil, fmt.Errorf("leaseDuration must be greater than renewDeadline")
+ }
+ if lec.RenewDeadline <= time.Duration(JitterFactor*float64(lec.RetryPeriod)) {
+ return nil, fmt.Errorf("renewDeadline must be greater than retryPeriod*JitterFactor")
+ }
+ if lec.LeaseDuration < 1 {
+ return nil, fmt.Errorf("leaseDuration must be greater than zero")
+ }
+ if lec.RenewDeadline < 1 {
+ return nil, fmt.Errorf("renewDeadline must be greater than zero")
+ }
+ if lec.RetryPeriod < 1 {
+ return nil, fmt.Errorf("retryPeriod must be greater than zero")
+ }
+ if lec.Callbacks.OnStartedLeading == nil {
+ return nil, fmt.Errorf("OnStartedLeading callback must not be nil")
+ }
+ if lec.Callbacks.OnStoppedLeading == nil {
+ return nil, fmt.Errorf("OnStoppedLeading callback must not be nil")
+ }
+
+ if lec.Lock == nil {
+ return nil, fmt.Errorf("Lock must not be nil.")
+ }
+ id := lec.Lock.Identity()
+ if id == "" {
+ return nil, fmt.Errorf("Lock identity is empty")
+ }
+
+ le := LeaderElector{
+ config: lec,
+ clock: clock.RealClock{},
+ metrics: globalMetricsFactory.newLeaderMetrics(),
+ }
+ le.metrics.leaderOff(le.config.Name)
+ return &le, nil
+}
+
+type LeaderElectionConfig struct {
+ // Lock is the resource that will be used for locking
+ Lock rl.Interface
+
+ // LeaseDuration is the duration that non-leader candidates will
+ // wait to force acquire leadership. This is measured against time of
+ // last observed ack.
+ //
+ // A client needs to wait a full LeaseDuration without observing a change to
+ // the record before it can attempt to take over. When all clients are
+ // shutdown and a new set of clients are started with different names against
+ // the same leader record, they must wait the full LeaseDuration before
+ // attempting to acquire the lease. Thus LeaseDuration should be as short as
+ // possible (within your tolerance for clock skew rate) to avoid a possible
+ // long waits in the scenario.
+ //
+ // Core clients default this value to 15 seconds.
+ LeaseDuration time.Duration
+ // RenewDeadline is the duration that the acting master will retry
+ // refreshing leadership before giving up.
+ //
+ // Core clients default this value to 10 seconds.
+ RenewDeadline time.Duration
+ // RetryPeriod is the duration the LeaderElector clients should wait
+ // between tries of actions.
+ //
+ // Core clients default this value to 2 seconds.
+ RetryPeriod time.Duration
+
+ // Callbacks are callbacks that are triggered during certain lifecycle
+ // events of the LeaderElector
+ Callbacks LeaderCallbacks
+
+ // WatchDog is the associated health checker
+ // WatchDog may be null if it's not needed/configured.
+ WatchDog *HealthzAdaptor
+
+ // ReleaseOnCancel should be set true if the lock should be released
+ // when the run context is cancelled. If you set this to true, you must
+ // ensure all code guarded by this lease has successfully completed
+ // prior to cancelling the context, or you may have two processes
+ // simultaneously acting on the critical path.
+ ReleaseOnCancel bool
+
+ // Name is the name of the resource lock for debugging
+ Name string
+
+ // Coordinated will use the Coordinated Leader Election feature
+ // WARNING: Coordinated leader election is ALPHA.
+ Coordinated bool
+}
+
+// LeaderCallbacks are callbacks that are triggered during certain
+// lifecycle events of the LeaderElector. These are invoked asynchronously.
+//
+// possible future callbacks:
+// - OnChallenge()
+type LeaderCallbacks struct {
+ // OnStartedLeading is called when a LeaderElector client starts leading
+ OnStartedLeading func(context.Context)
+ // OnStoppedLeading is called when a LeaderElector client stops leading.
+ // This callback is always called when the LeaderElector exits, even if it did not start leading.
+ // Users should not assume that OnStoppedLeading is only called after OnStartedLeading.
+ // see: https://github.com/kubernetes/kubernetes/pull/127675#discussion_r1780059887
+ OnStoppedLeading func()
+ // OnNewLeader is called when the client observes a leader that is
+ // not the previously observed leader. This includes the first observed
+ // leader when the client starts.
+ OnNewLeader func(identity string)
+}
+
+// LeaderElector is a leader election client.
+type LeaderElector struct {
+ config LeaderElectionConfig
+ // internal bookkeeping
+ observedRecord rl.LeaderElectionRecord
+ observedRawRecord []byte
+ observedTime time.Time
+ // used to implement OnNewLeader(), may lag slightly from the
+ // value observedRecord.HolderIdentity if the transition has
+ // not yet been reported.
+ reportedLeader string
+
+ // clock is wrapper around time to allow for less flaky testing
+ clock clock.Clock
+
+ // used to lock the observedRecord
+ observedRecordLock sync.Mutex
+
+ metrics leaderMetricsAdapter
+}
+
+// Run starts the leader election loop. Run will not return
+// before leader election loop is stopped by ctx or it has
+// stopped holding the leader lease
+func (le *LeaderElector) Run(ctx context.Context) {
+ defer runtime.HandleCrash()
+ defer le.config.Callbacks.OnStoppedLeading()
+
+ if !le.acquire(ctx) {
+ return // ctx signalled done
+ }
+ ctx, cancel := context.WithCancel(ctx)
+ defer cancel()
+ go le.config.Callbacks.OnStartedLeading(ctx)
+ le.renew(ctx)
+}
+
+// RunOrDie starts a client with the provided config or panics if the config
+// fails to validate. RunOrDie blocks until leader election loop is
+// stopped by ctx or it has stopped holding the leader lease
+func RunOrDie(ctx context.Context, lec LeaderElectionConfig) {
+ le, err := NewLeaderElector(lec)
+ if err != nil {
+ panic(err)
+ }
+ if lec.WatchDog != nil {
+ lec.WatchDog.SetLeaderElection(le)
+ }
+ le.Run(ctx)
+}
+
+// GetLeader returns the identity of the last observed leader or returns the empty string if
+// no leader has yet been observed.
+// This function is for informational purposes. (e.g. monitoring, logs, etc.)
+func (le *LeaderElector) GetLeader() string {
+ return le.getObservedRecord().HolderIdentity
+}
+
+// IsLeader returns true if the last observed leader was this client else returns false.
+func (le *LeaderElector) IsLeader() bool {
+ return le.getObservedRecord().HolderIdentity == le.config.Lock.Identity()
+}
+
+// acquire loops calling tryAcquireOrRenew and returns true immediately when tryAcquireOrRenew succeeds.
+// Returns false if ctx signals done.
+func (le *LeaderElector) acquire(ctx context.Context) bool {
+ ctx, cancel := context.WithCancel(ctx)
+ defer cancel()
+ succeeded := false
+ desc := le.config.Lock.Describe()
+ klog.Infof("attempting to acquire leader lease %v...", desc)
+ wait.JitterUntil(func() {
+ if !le.config.Coordinated {
+ succeeded = le.tryAcquireOrRenew(ctx)
+ } else {
+ succeeded = le.tryCoordinatedRenew(ctx)
+ }
+ le.maybeReportTransition()
+ if !succeeded {
+ klog.V(4).Infof("failed to acquire lease %v", desc)
+ return
+ }
+ le.config.Lock.RecordEvent("became leader")
+ le.metrics.leaderOn(le.config.Name)
+ klog.Infof("successfully acquired lease %v", desc)
+ cancel()
+ }, le.config.RetryPeriod, JitterFactor, true, ctx.Done())
+ return succeeded
+}
+
+// renew loops calling tryAcquireOrRenew and returns immediately when tryAcquireOrRenew fails or ctx signals done.
+func (le *LeaderElector) renew(ctx context.Context) {
+ defer le.config.Lock.RecordEvent("stopped leading")
+ ctx, cancel := context.WithCancel(ctx)
+ defer cancel()
+ wait.Until(func() {
+ err := wait.PollUntilContextTimeout(ctx, le.config.RetryPeriod, le.config.RenewDeadline, true, func(ctx context.Context) (done bool, err error) {
+ if !le.config.Coordinated {
+ return le.tryAcquireOrRenew(ctx), nil
+ } else {
+ return le.tryCoordinatedRenew(ctx), nil
+ }
+ })
+ le.maybeReportTransition()
+ desc := le.config.Lock.Describe()
+ if err == nil {
+ klog.V(5).Infof("successfully renewed lease %v", desc)
+ return
+ }
+ le.metrics.leaderOff(le.config.Name)
+ klog.Infof("failed to renew lease %v: %v", desc, err)
+ cancel()
+ }, le.config.RetryPeriod, ctx.Done())
+
+ // if we hold the lease, give it up
+ if le.config.ReleaseOnCancel {
+ le.release()
+ }
+}
+
+// release attempts to release the leader lease if we have acquired it.
+func (le *LeaderElector) release() bool {
+ if !le.IsLeader() {
+ return true
+ }
+ now := metav1.NewTime(le.clock.Now())
+ leaderElectionRecord := rl.LeaderElectionRecord{
+ LeaderTransitions: le.observedRecord.LeaderTransitions,
+ LeaseDurationSeconds: 1,
+ RenewTime: now,
+ AcquireTime: now,
+ }
+ timeoutCtx, timeoutCancel := context.WithTimeout(context.Background(), le.config.RenewDeadline)
+ defer timeoutCancel()
+ if err := le.config.Lock.Update(timeoutCtx, leaderElectionRecord); err != nil {
+ klog.Errorf("Failed to release lock: %v", err)
+ return false
+ }
+
+ le.setObservedRecord(&leaderElectionRecord)
+ return true
+}
+
+// tryCoordinatedRenew checks if it acquired a lease and tries to renew the
+// lease if it has already been acquired. Returns true on success else returns
+// false.
+func (le *LeaderElector) tryCoordinatedRenew(ctx context.Context) bool {
+ now := metav1.NewTime(le.clock.Now())
+ leaderElectionRecord := rl.LeaderElectionRecord{
+ HolderIdentity: le.config.Lock.Identity(),
+ LeaseDurationSeconds: int(le.config.LeaseDuration / time.Second),
+ RenewTime: now,
+ AcquireTime: now,
+ }
+
+ // 1. obtain the electionRecord
+ oldLeaderElectionRecord, oldLeaderElectionRawRecord, err := le.config.Lock.Get(ctx)
+ if err != nil {
+ if !errors.IsNotFound(err) {
+ klog.Errorf("error retrieving resource lock %v: %v", le.config.Lock.Describe(), err)
+ return false
+ }
+ klog.Infof("lease lock not found: %v", le.config.Lock.Describe())
+ return false
+ }
+
+ // 2. Record obtained, check the Identity & Time
+ if !bytes.Equal(le.observedRawRecord, oldLeaderElectionRawRecord) {
+ le.setObservedRecord(oldLeaderElectionRecord)
+
+ le.observedRawRecord = oldLeaderElectionRawRecord
+ }
+
+ hasExpired := le.observedTime.Add(time.Second * time.Duration(oldLeaderElectionRecord.LeaseDurationSeconds)).Before(now.Time)
+ if hasExpired {
+ klog.Infof("lock has expired: %v", le.config.Lock.Describe())
+ return false
+ }
+
+ if !le.IsLeader() {
+ klog.V(6).Infof("lock is held by %v and has not yet expired: %v", oldLeaderElectionRecord.HolderIdentity, le.config.Lock.Describe())
+ return false
+ }
+
+ // 2b. If the lease has been marked as "end of term", don't renew it
+ if le.IsLeader() && oldLeaderElectionRecord.PreferredHolder != "" {
+ klog.V(4).Infof("lock is marked as 'end of term': %v", le.config.Lock.Describe())
+ // TODO: Instead of letting lease expire, the holder may deleted it directly
+ // This will not be compatible with all controllers, so it needs to be opt-in behavior.
+ // We must ensure all code guarded by this lease has successfully completed
+ // prior to releasing or there may be two processes
+ // simultaneously acting on the critical path.
+ // Usually once this returns false, the process is terminated..
+ // xref: OnStoppedLeading
+ return false
+ }
+
+ // 3. We're going to try to update. The leaderElectionRecord is set to it's default
+ // here. Let's correct it before updating.
+ if le.IsLeader() {
+ leaderElectionRecord.AcquireTime = oldLeaderElectionRecord.AcquireTime
+ leaderElectionRecord.LeaderTransitions = oldLeaderElectionRecord.LeaderTransitions
+ leaderElectionRecord.Strategy = oldLeaderElectionRecord.Strategy
+ le.metrics.slowpathExercised(le.config.Name)
+ } else {
+ leaderElectionRecord.LeaderTransitions = oldLeaderElectionRecord.LeaderTransitions + 1
+ }
+
+ // update the lock itself
+ if err = le.config.Lock.Update(ctx, leaderElectionRecord); err != nil {
+ klog.Errorf("Failed to update lock: %v", err)
+ return false
+ }
+
+ le.setObservedRecord(&leaderElectionRecord)
+ return true
+}
+
+// tryAcquireOrRenew tries to acquire a leader lease if it is not already acquired,
+// else it tries to renew the lease if it has already been acquired. Returns true
+// on success else returns false.
+func (le *LeaderElector) tryAcquireOrRenew(ctx context.Context) bool {
+ now := metav1.NewTime(le.clock.Now())
+ leaderElectionRecord := rl.LeaderElectionRecord{
+ HolderIdentity: le.config.Lock.Identity(),
+ LeaseDurationSeconds: int(le.config.LeaseDuration / time.Second),
+ RenewTime: now,
+ AcquireTime: now,
+ }
+
+ // 1. fast path for the leader to update optimistically assuming that the record observed
+ // last time is the current version.
+ if le.IsLeader() && le.isLeaseValid(now.Time) {
+ oldObservedRecord := le.getObservedRecord()
+ leaderElectionRecord.AcquireTime = oldObservedRecord.AcquireTime
+ leaderElectionRecord.LeaderTransitions = oldObservedRecord.LeaderTransitions
+
+ err := le.config.Lock.Update(ctx, leaderElectionRecord)
+ if err == nil {
+ le.setObservedRecord(&leaderElectionRecord)
+ return true
+ }
+ klog.Errorf("Failed to update lock optimistically: %v, falling back to slow path", err)
+ }
+
+ // 2. obtain or create the ElectionRecord
+ oldLeaderElectionRecord, oldLeaderElectionRawRecord, err := le.config.Lock.Get(ctx)
+ if err != nil {
+ if !errors.IsNotFound(err) {
+ klog.Errorf("error retrieving resource lock %v: %v", le.config.Lock.Describe(), err)
+ return false
+ }
+ if err = le.config.Lock.Create(ctx, leaderElectionRecord); err != nil {
+ klog.Errorf("error initially creating leader election record: %v", err)
+ return false
+ }
+
+ le.setObservedRecord(&leaderElectionRecord)
+
+ return true
+ }
+
+ // 3. Record obtained, check the Identity & Time
+ if !bytes.Equal(le.observedRawRecord, oldLeaderElectionRawRecord) {
+ le.setObservedRecord(oldLeaderElectionRecord)
+
+ le.observedRawRecord = oldLeaderElectionRawRecord
+ }
+ if len(oldLeaderElectionRecord.HolderIdentity) > 0 && le.isLeaseValid(now.Time) && !le.IsLeader() {
+ klog.V(4).Infof("lock is held by %v and has not yet expired", oldLeaderElectionRecord.HolderIdentity)
+ return false
+ }
+
+ // 4. We're going to try to update. The leaderElectionRecord is set to it's default
+ // here. Let's correct it before updating.
+ if le.IsLeader() {
+ leaderElectionRecord.AcquireTime = oldLeaderElectionRecord.AcquireTime
+ leaderElectionRecord.LeaderTransitions = oldLeaderElectionRecord.LeaderTransitions
+ le.metrics.slowpathExercised(le.config.Name)
+ } else {
+ leaderElectionRecord.LeaderTransitions = oldLeaderElectionRecord.LeaderTransitions + 1
+ }
+
+ // update the lock itself
+ if err = le.config.Lock.Update(ctx, leaderElectionRecord); err != nil {
+ klog.Errorf("Failed to update lock: %v", err)
+ return false
+ }
+
+ le.setObservedRecord(&leaderElectionRecord)
+ return true
+}
+
+func (le *LeaderElector) maybeReportTransition() {
+ if le.observedRecord.HolderIdentity == le.reportedLeader {
+ return
+ }
+ le.reportedLeader = le.observedRecord.HolderIdentity
+ if le.config.Callbacks.OnNewLeader != nil {
+ go le.config.Callbacks.OnNewLeader(le.reportedLeader)
+ }
+}
+
+// Check will determine if the current lease is expired by more than timeout.
+func (le *LeaderElector) Check(maxTolerableExpiredLease time.Duration) error {
+ if !le.IsLeader() {
+ // Currently not concerned with the case that we are hot standby
+ return nil
+ }
+ // If we are more than timeout seconds after the lease duration that is past the timeout
+ // on the lease renew. Time to start reporting ourselves as unhealthy. We should have
+ // died but conditions like deadlock can prevent this. (See #70819)
+ if le.clock.Since(le.observedTime) > le.config.LeaseDuration+maxTolerableExpiredLease {
+ return fmt.Errorf("failed election to renew leadership on lease %s", le.config.Name)
+ }
+
+ return nil
+}
+
+func (le *LeaderElector) isLeaseValid(now time.Time) bool {
+ return le.observedTime.Add(time.Second * time.Duration(le.getObservedRecord().LeaseDurationSeconds)).After(now)
+}
+
+// setObservedRecord will set a new observedRecord and update observedTime to the current time.
+// Protect critical sections with lock.
+func (le *LeaderElector) setObservedRecord(observedRecord *rl.LeaderElectionRecord) {
+ le.observedRecordLock.Lock()
+ defer le.observedRecordLock.Unlock()
+
+ le.observedRecord = *observedRecord
+ le.observedTime = le.clock.Now()
+}
+
+// getObservedRecord returns observersRecord.
+// Protect critical sections with lock.
+func (le *LeaderElector) getObservedRecord() rl.LeaderElectionRecord {
+ le.observedRecordLock.Lock()
+ defer le.observedRecordLock.Unlock()
+
+ return le.observedRecord
+}
diff --git a/vendor/k8s.io/client-go/tools/leaderelection/leasecandidate.go b/vendor/k8s.io/client-go/tools/leaderelection/leasecandidate.go
new file mode 100644
index 00000000000..9aaf779eaae
--- /dev/null
+++ b/vendor/k8s.io/client-go/tools/leaderelection/leasecandidate.go
@@ -0,0 +1,202 @@
+/*
+Copyright 2024 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 leaderelection
+
+import (
+ "context"
+ "reflect"
+ "time"
+
+ v1 "k8s.io/api/coordination/v1"
+ v1beta1 "k8s.io/api/coordination/v1beta1"
+ apierrors "k8s.io/apimachinery/pkg/api/errors"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/fields"
+ utilruntime "k8s.io/apimachinery/pkg/util/runtime"
+ "k8s.io/client-go/informers"
+ "k8s.io/client-go/kubernetes"
+ coordinationv1beta1client "k8s.io/client-go/kubernetes/typed/coordination/v1beta1"
+ "k8s.io/client-go/tools/cache"
+ "k8s.io/client-go/util/workqueue"
+ "k8s.io/klog/v2"
+ "k8s.io/utils/clock"
+)
+
+const requeueInterval = 5 * time.Minute
+
+type CacheSyncWaiter interface {
+ WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool
+}
+
+type LeaseCandidate struct {
+ leaseClient coordinationv1beta1client.LeaseCandidateInterface
+ leaseCandidateInformer cache.SharedIndexInformer
+ informerFactory informers.SharedInformerFactory
+ hasSynced cache.InformerSynced
+
+ // At most there will be one item in this Queue (since we only watch one item)
+ queue workqueue.TypedRateLimitingInterface[int]
+
+ name string
+ namespace string
+
+ // controller lease
+ leaseName string
+
+ clock clock.Clock
+
+ binaryVersion, emulationVersion string
+ strategy v1.CoordinatedLeaseStrategy
+}
+
+// NewCandidate creates new LeaseCandidate controller that creates a
+// LeaseCandidate object if it does not exist and watches changes
+// to the corresponding object and renews if PingTime is set.
+// WARNING: This is an ALPHA feature. Ensure that the CoordinatedLeaderElection
+// feature gate is on.
+func NewCandidate(clientset kubernetes.Interface,
+ candidateNamespace string,
+ candidateName string,
+ targetLease string,
+ binaryVersion, emulationVersion string,
+ strategy v1.CoordinatedLeaseStrategy,
+) (*LeaseCandidate, CacheSyncWaiter, error) {
+ fieldSelector := fields.OneTermEqualSelector("metadata.name", candidateName).String()
+ // A separate informer factory is required because this must start before informerFactories
+ // are started for leader elected components
+ informerFactory := informers.NewSharedInformerFactoryWithOptions(
+ clientset, 5*time.Minute,
+ informers.WithTweakListOptions(func(options *metav1.ListOptions) {
+ options.FieldSelector = fieldSelector
+ }),
+ )
+ leaseCandidateInformer := informerFactory.Coordination().V1beta1().LeaseCandidates().Informer()
+
+ lc := &LeaseCandidate{
+ leaseClient: clientset.CoordinationV1beta1().LeaseCandidates(candidateNamespace),
+ leaseCandidateInformer: leaseCandidateInformer,
+ informerFactory: informerFactory,
+ name: candidateName,
+ namespace: candidateNamespace,
+ leaseName: targetLease,
+ clock: clock.RealClock{},
+ binaryVersion: binaryVersion,
+ emulationVersion: emulationVersion,
+ strategy: strategy,
+ }
+ lc.queue = workqueue.NewTypedRateLimitingQueueWithConfig(workqueue.DefaultTypedControllerRateLimiter[int](), workqueue.TypedRateLimitingQueueConfig[int]{Name: "leasecandidate"})
+
+ h, err := leaseCandidateInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
+ UpdateFunc: func(oldObj, newObj interface{}) {
+ if leasecandidate, ok := newObj.(*v1beta1.LeaseCandidate); ok {
+ if leasecandidate.Spec.PingTime != nil && leasecandidate.Spec.PingTime.After(leasecandidate.Spec.RenewTime.Time) {
+ lc.enqueueLease()
+ }
+ }
+ },
+ })
+ if err != nil {
+ return nil, nil, err
+ }
+ lc.hasSynced = h.HasSynced
+
+ return lc, informerFactory, nil
+}
+
+func (c *LeaseCandidate) Run(ctx context.Context) {
+ defer c.queue.ShutDown()
+
+ c.informerFactory.Start(ctx.Done())
+ if !cache.WaitForNamedCacheSync("leasecandidateclient", ctx.Done(), c.hasSynced) {
+ return
+ }
+
+ c.enqueueLease()
+ go c.runWorker(ctx)
+ <-ctx.Done()
+}
+
+func (c *LeaseCandidate) runWorker(ctx context.Context) {
+ for c.processNextWorkItem(ctx) {
+ }
+}
+
+func (c *LeaseCandidate) processNextWorkItem(ctx context.Context) bool {
+ key, shutdown := c.queue.Get()
+ if shutdown {
+ return false
+ }
+ defer c.queue.Done(key)
+
+ err := c.ensureLease(ctx)
+ if err == nil {
+ c.queue.AddAfter(key, requeueInterval)
+ return true
+ }
+
+ utilruntime.HandleError(err)
+ c.queue.AddRateLimited(key)
+
+ return true
+}
+
+func (c *LeaseCandidate) enqueueLease() {
+ c.queue.Add(0)
+}
+
+// ensureLease creates the lease if it does not exist and renew it if it exists. Returns the lease and
+// a bool (true if this call created the lease), or any error that occurs.
+func (c *LeaseCandidate) ensureLease(ctx context.Context) error {
+ lease, err := c.leaseClient.Get(ctx, c.name, metav1.GetOptions{})
+ if apierrors.IsNotFound(err) {
+ klog.V(2).Infof("Creating lease candidate")
+ // lease does not exist, create it.
+ leaseToCreate := c.newLeaseCandidate()
+ if _, err := c.leaseClient.Create(ctx, leaseToCreate, metav1.CreateOptions{}); err != nil {
+ return err
+ }
+ klog.V(2).Infof("Created lease candidate")
+ return nil
+ } else if err != nil {
+ return err
+ }
+ klog.V(2).Infof("lease candidate exists. Renewing.")
+ clone := lease.DeepCopy()
+ clone.Spec.RenewTime = &metav1.MicroTime{Time: c.clock.Now()}
+ _, err = c.leaseClient.Update(ctx, clone, metav1.UpdateOptions{})
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+func (c *LeaseCandidate) newLeaseCandidate() *v1beta1.LeaseCandidate {
+ lc := &v1beta1.LeaseCandidate{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: c.name,
+ Namespace: c.namespace,
+ },
+ Spec: v1beta1.LeaseCandidateSpec{
+ LeaseName: c.leaseName,
+ BinaryVersion: c.binaryVersion,
+ EmulationVersion: c.emulationVersion,
+ Strategy: c.strategy,
+ },
+ }
+ lc.Spec.RenewTime = &metav1.MicroTime{Time: c.clock.Now()}
+ return lc
+}
diff --git a/vendor/k8s.io/client-go/tools/leaderelection/metrics.go b/vendor/k8s.io/client-go/tools/leaderelection/metrics.go
new file mode 100644
index 00000000000..7438345fb15
--- /dev/null
+++ b/vendor/k8s.io/client-go/tools/leaderelection/metrics.go
@@ -0,0 +1,119 @@
+/*
+Copyright 2018 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 leaderelection
+
+import (
+ "sync"
+)
+
+// This file provides abstractions for setting the provider (e.g., prometheus)
+// of metrics.
+
+type leaderMetricsAdapter interface {
+ leaderOn(name string)
+ leaderOff(name string)
+ slowpathExercised(name string)
+}
+
+// LeaderMetric instruments metrics used in leader election.
+type LeaderMetric interface {
+ On(name string)
+ Off(name string)
+ SlowpathExercised(name string)
+}
+
+type noopMetric struct{}
+
+func (noopMetric) On(name string) {}
+func (noopMetric) Off(name string) {}
+func (noopMetric) SlowpathExercised(name string) {}
+
+// defaultLeaderMetrics expects the caller to lock before setting any metrics.
+type defaultLeaderMetrics struct {
+ // leader's value indicates if the current process is the owner of name lease
+ leader LeaderMetric
+}
+
+func (m *defaultLeaderMetrics) leaderOn(name string) {
+ if m == nil {
+ return
+ }
+ m.leader.On(name)
+}
+
+func (m *defaultLeaderMetrics) leaderOff(name string) {
+ if m == nil {
+ return
+ }
+ m.leader.Off(name)
+}
+
+func (m *defaultLeaderMetrics) slowpathExercised(name string) {
+ if m == nil {
+ return
+ }
+ m.leader.SlowpathExercised(name)
+}
+
+type noMetrics struct{}
+
+func (noMetrics) leaderOn(name string) {}
+func (noMetrics) leaderOff(name string) {}
+func (noMetrics) slowpathExercised(name string) {}
+
+// MetricsProvider generates various metrics used by the leader election.
+type MetricsProvider interface {
+ NewLeaderMetric() LeaderMetric
+}
+
+type noopMetricsProvider struct{}
+
+func (noopMetricsProvider) NewLeaderMetric() LeaderMetric {
+ return noopMetric{}
+}
+
+var globalMetricsFactory = leaderMetricsFactory{
+ metricsProvider: noopMetricsProvider{},
+}
+
+type leaderMetricsFactory struct {
+ metricsProvider MetricsProvider
+
+ onlyOnce sync.Once
+}
+
+func (f *leaderMetricsFactory) setProvider(mp MetricsProvider) {
+ f.onlyOnce.Do(func() {
+ f.metricsProvider = mp
+ })
+}
+
+func (f *leaderMetricsFactory) newLeaderMetrics() leaderMetricsAdapter {
+ mp := f.metricsProvider
+ if mp == (noopMetricsProvider{}) {
+ return noMetrics{}
+ }
+ return &defaultLeaderMetrics{
+ leader: mp.NewLeaderMetric(),
+ }
+}
+
+// SetProvider sets the metrics provider for all subsequently created work
+// queues. Only the first call has an effect.
+func SetProvider(metricsProvider MetricsProvider) {
+ globalMetricsFactory.setProvider(metricsProvider)
+}
diff --git a/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/interface.go b/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/interface.go
new file mode 100644
index 00000000000..2a1eb9caa63
--- /dev/null
+++ b/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/interface.go
@@ -0,0 +1,142 @@
+/*
+Copyright 2016 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 resourcelock
+
+import (
+ "context"
+ "fmt"
+ "time"
+
+ v1 "k8s.io/api/coordination/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/runtime"
+ clientset "k8s.io/client-go/kubernetes"
+ coordinationv1 "k8s.io/client-go/kubernetes/typed/coordination/v1"
+ corev1 "k8s.io/client-go/kubernetes/typed/core/v1"
+ restclient "k8s.io/client-go/rest"
+)
+
+const (
+ LeaderElectionRecordAnnotationKey = "control-plane.alpha.kubernetes.io/leader"
+ endpointsResourceLock = "endpoints"
+ configMapsResourceLock = "configmaps"
+ LeasesResourceLock = "leases"
+ endpointsLeasesResourceLock = "endpointsleases"
+ configMapsLeasesResourceLock = "configmapsleases"
+)
+
+// LeaderElectionRecord is the record that is stored in the leader election annotation.
+// This information should be used for observational purposes only and could be replaced
+// with a random string (e.g. UUID) with only slight modification of this code.
+// TODO(mikedanese): this should potentially be versioned
+type LeaderElectionRecord struct {
+ // HolderIdentity is the ID that owns the lease. If empty, no one owns this lease and
+ // all callers may acquire. Versions of this library prior to Kubernetes 1.14 will not
+ // attempt to acquire leases with empty identities and will wait for the full lease
+ // interval to expire before attempting to reacquire. This value is set to empty when
+ // a client voluntarily steps down.
+ HolderIdentity string `json:"holderIdentity"`
+ LeaseDurationSeconds int `json:"leaseDurationSeconds"`
+ AcquireTime metav1.Time `json:"acquireTime"`
+ RenewTime metav1.Time `json:"renewTime"`
+ LeaderTransitions int `json:"leaderTransitions"`
+ Strategy v1.CoordinatedLeaseStrategy `json:"strategy"`
+ PreferredHolder string `json:"preferredHolder"`
+}
+
+// EventRecorder records a change in the ResourceLock.
+type EventRecorder interface {
+ Eventf(obj runtime.Object, eventType, reason, message string, args ...interface{})
+}
+
+// ResourceLockConfig common data that exists across different
+// resource locks
+type ResourceLockConfig struct {
+ // Identity is the unique string identifying a lease holder across
+ // all participants in an election.
+ Identity string
+ // EventRecorder is optional.
+ EventRecorder EventRecorder
+}
+
+// Interface offers a common interface for locking on arbitrary
+// resources used in leader election. The Interface is used
+// to hide the details on specific implementations in order to allow
+// them to change over time. This interface is strictly for use
+// by the leaderelection code.
+type Interface interface {
+ // Get returns the LeaderElectionRecord
+ Get(ctx context.Context) (*LeaderElectionRecord, []byte, error)
+
+ // Create attempts to create a LeaderElectionRecord
+ Create(ctx context.Context, ler LeaderElectionRecord) error
+
+ // Update will update and existing LeaderElectionRecord
+ Update(ctx context.Context, ler LeaderElectionRecord) error
+
+ // RecordEvent is used to record events
+ RecordEvent(string)
+
+ // Identity will return the locks Identity
+ Identity() string
+
+ // Describe is used to convert details on current resource lock
+ // into a string
+ Describe() string
+}
+
+// Manufacture will create a lock of a given type according to the input parameters
+func New(lockType string, ns string, name string, coreClient corev1.CoreV1Interface, coordinationClient coordinationv1.CoordinationV1Interface, rlc ResourceLockConfig) (Interface, error) {
+ leaseLock := &LeaseLock{
+ LeaseMeta: metav1.ObjectMeta{
+ Namespace: ns,
+ Name: name,
+ },
+ Client: coordinationClient,
+ LockConfig: rlc,
+ }
+ switch lockType {
+ case endpointsResourceLock:
+ return nil, fmt.Errorf("endpoints lock is removed, migrate to %s", LeasesResourceLock)
+ case configMapsResourceLock:
+ return nil, fmt.Errorf("configmaps lock is removed, migrate to %s", LeasesResourceLock)
+ case LeasesResourceLock:
+ return leaseLock, nil
+ case endpointsLeasesResourceLock:
+ return nil, fmt.Errorf("endpointsleases lock is removed, migrate to %s", LeasesResourceLock)
+ case configMapsLeasesResourceLock:
+ return nil, fmt.Errorf("configmapsleases lock is removed, migrated to %s", LeasesResourceLock)
+ default:
+ return nil, fmt.Errorf("Invalid lock-type %s", lockType)
+ }
+}
+
+// NewFromKubeconfig will create a lock of a given type according to the input parameters.
+// Timeout set for a client used to contact to Kubernetes should be lower than
+// RenewDeadline to keep a single hung request from forcing a leader loss.
+// Setting it to max(time.Second, RenewDeadline/2) as a reasonable heuristic.
+func NewFromKubeconfig(lockType string, ns string, name string, rlc ResourceLockConfig, kubeconfig *restclient.Config, renewDeadline time.Duration) (Interface, error) {
+ // shallow copy, do not modify the kubeconfig
+ config := *kubeconfig
+ timeout := renewDeadline / 2
+ if timeout < time.Second {
+ timeout = time.Second
+ }
+ config.Timeout = timeout
+ leaderElectionClient := clientset.NewForConfigOrDie(restclient.AddUserAgent(&config, "leader-election"))
+ return New(lockType, ns, name, leaderElectionClient.CoreV1(), leaderElectionClient.CoordinationV1(), rlc)
+}
diff --git a/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/leaselock.go b/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/leaselock.go
new file mode 100644
index 00000000000..7cd2a8b9ca7
--- /dev/null
+++ b/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/leaselock.go
@@ -0,0 +1,152 @@
+/*
+Copyright 2018 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 resourcelock
+
+import (
+ "context"
+ "encoding/json"
+ "errors"
+ "fmt"
+
+ coordinationv1 "k8s.io/api/coordination/v1"
+ corev1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ coordinationv1client "k8s.io/client-go/kubernetes/typed/coordination/v1"
+)
+
+type LeaseLock struct {
+ // LeaseMeta should contain a Name and a Namespace of a
+ // LeaseMeta object that the LeaderElector will attempt to lead.
+ LeaseMeta metav1.ObjectMeta
+ Client coordinationv1client.LeasesGetter
+ LockConfig ResourceLockConfig
+ lease *coordinationv1.Lease
+}
+
+// Get returns the election record from a Lease spec
+func (ll *LeaseLock) Get(ctx context.Context) (*LeaderElectionRecord, []byte, error) {
+ lease, err := ll.Client.Leases(ll.LeaseMeta.Namespace).Get(ctx, ll.LeaseMeta.Name, metav1.GetOptions{})
+ if err != nil {
+ return nil, nil, err
+ }
+ ll.lease = lease
+ record := LeaseSpecToLeaderElectionRecord(&ll.lease.Spec)
+ recordByte, err := json.Marshal(*record)
+ if err != nil {
+ return nil, nil, err
+ }
+ return record, recordByte, nil
+}
+
+// Create attempts to create a Lease
+func (ll *LeaseLock) Create(ctx context.Context, ler LeaderElectionRecord) error {
+ var err error
+ ll.lease, err = ll.Client.Leases(ll.LeaseMeta.Namespace).Create(ctx, &coordinationv1.Lease{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: ll.LeaseMeta.Name,
+ Namespace: ll.LeaseMeta.Namespace,
+ },
+ Spec: LeaderElectionRecordToLeaseSpec(&ler),
+ }, metav1.CreateOptions{})
+ return err
+}
+
+// Update will update an existing Lease spec.
+func (ll *LeaseLock) Update(ctx context.Context, ler LeaderElectionRecord) error {
+ if ll.lease == nil {
+ return errors.New("lease not initialized, call get or create first")
+ }
+ ll.lease.Spec = LeaderElectionRecordToLeaseSpec(&ler)
+
+ lease, err := ll.Client.Leases(ll.LeaseMeta.Namespace).Update(ctx, ll.lease, metav1.UpdateOptions{})
+ if err != nil {
+ return err
+ }
+
+ ll.lease = lease
+ return nil
+}
+
+// RecordEvent in leader election while adding meta-data
+func (ll *LeaseLock) RecordEvent(s string) {
+ if ll.LockConfig.EventRecorder == nil {
+ return
+ }
+ events := fmt.Sprintf("%v %v", ll.LockConfig.Identity, s)
+ subject := &coordinationv1.Lease{ObjectMeta: ll.lease.ObjectMeta}
+ // Populate the type meta, so we don't have to get it from the schema
+ subject.Kind = "Lease"
+ subject.APIVersion = coordinationv1.SchemeGroupVersion.String()
+ ll.LockConfig.EventRecorder.Eventf(subject, corev1.EventTypeNormal, "LeaderElection", events)
+}
+
+// Describe is used to convert details on current resource lock
+// into a string
+func (ll *LeaseLock) Describe() string {
+ return fmt.Sprintf("%v/%v", ll.LeaseMeta.Namespace, ll.LeaseMeta.Name)
+}
+
+// Identity returns the Identity of the lock
+func (ll *LeaseLock) Identity() string {
+ return ll.LockConfig.Identity
+}
+
+func LeaseSpecToLeaderElectionRecord(spec *coordinationv1.LeaseSpec) *LeaderElectionRecord {
+ var r LeaderElectionRecord
+ if spec.HolderIdentity != nil {
+ r.HolderIdentity = *spec.HolderIdentity
+ }
+ if spec.LeaseDurationSeconds != nil {
+ r.LeaseDurationSeconds = int(*spec.LeaseDurationSeconds)
+ }
+ if spec.LeaseTransitions != nil {
+ r.LeaderTransitions = int(*spec.LeaseTransitions)
+ }
+ if spec.AcquireTime != nil {
+ r.AcquireTime = metav1.Time{Time: spec.AcquireTime.Time}
+ }
+ if spec.RenewTime != nil {
+ r.RenewTime = metav1.Time{Time: spec.RenewTime.Time}
+ }
+ if spec.PreferredHolder != nil {
+ r.PreferredHolder = *spec.PreferredHolder
+ }
+ if spec.Strategy != nil {
+ r.Strategy = *spec.Strategy
+ }
+ return &r
+
+}
+
+func LeaderElectionRecordToLeaseSpec(ler *LeaderElectionRecord) coordinationv1.LeaseSpec {
+ leaseDurationSeconds := int32(ler.LeaseDurationSeconds)
+ leaseTransitions := int32(ler.LeaderTransitions)
+ spec := coordinationv1.LeaseSpec{
+ HolderIdentity: &ler.HolderIdentity,
+ LeaseDurationSeconds: &leaseDurationSeconds,
+ AcquireTime: &metav1.MicroTime{Time: ler.AcquireTime.Time},
+ RenewTime: &metav1.MicroTime{Time: ler.RenewTime.Time},
+ LeaseTransitions: &leaseTransitions,
+ }
+ if ler.PreferredHolder != "" {
+ spec.PreferredHolder = &ler.PreferredHolder
+ }
+ if ler.Strategy != "" {
+ spec.Strategy = &ler.Strategy
+ }
+ return spec
+}
diff --git a/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/multilock.go b/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/multilock.go
new file mode 100644
index 00000000000..5ee1dcbb50f
--- /dev/null
+++ b/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/multilock.go
@@ -0,0 +1,104 @@
+/*
+Copyright 2019 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 resourcelock
+
+import (
+ "bytes"
+ "context"
+ "encoding/json"
+
+ apierrors "k8s.io/apimachinery/pkg/api/errors"
+)
+
+const (
+ UnknownLeader = "leaderelection.k8s.io/unknown"
+)
+
+// MultiLock is used for lock's migration
+type MultiLock struct {
+ Primary Interface
+ Secondary Interface
+}
+
+// Get returns the older election record of the lock
+func (ml *MultiLock) Get(ctx context.Context) (*LeaderElectionRecord, []byte, error) {
+ primary, primaryRaw, err := ml.Primary.Get(ctx)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ secondary, secondaryRaw, err := ml.Secondary.Get(ctx)
+ if err != nil {
+ // Lock is held by old client
+ if apierrors.IsNotFound(err) && primary.HolderIdentity != ml.Identity() {
+ return primary, primaryRaw, nil
+ }
+ return nil, nil, err
+ }
+
+ if primary.HolderIdentity != secondary.HolderIdentity {
+ primary.HolderIdentity = UnknownLeader
+ primaryRaw, err = json.Marshal(primary)
+ if err != nil {
+ return nil, nil, err
+ }
+ }
+ return primary, ConcatRawRecord(primaryRaw, secondaryRaw), nil
+}
+
+// Create attempts to create both primary lock and secondary lock
+func (ml *MultiLock) Create(ctx context.Context, ler LeaderElectionRecord) error {
+ err := ml.Primary.Create(ctx, ler)
+ if err != nil && !apierrors.IsAlreadyExists(err) {
+ return err
+ }
+ return ml.Secondary.Create(ctx, ler)
+}
+
+// Update will update and existing annotation on both two resources.
+func (ml *MultiLock) Update(ctx context.Context, ler LeaderElectionRecord) error {
+ err := ml.Primary.Update(ctx, ler)
+ if err != nil {
+ return err
+ }
+ _, _, err = ml.Secondary.Get(ctx)
+ if err != nil && apierrors.IsNotFound(err) {
+ return ml.Secondary.Create(ctx, ler)
+ }
+ return ml.Secondary.Update(ctx, ler)
+}
+
+// RecordEvent in leader election while adding meta-data
+func (ml *MultiLock) RecordEvent(s string) {
+ ml.Primary.RecordEvent(s)
+ ml.Secondary.RecordEvent(s)
+}
+
+// Describe is used to convert details on current resource lock
+// into a string
+func (ml *MultiLock) Describe() string {
+ return ml.Primary.Describe()
+}
+
+// Identity returns the Identity of the lock
+func (ml *MultiLock) Identity() string {
+ return ml.Primary.Identity()
+}
+
+func ConcatRawRecord(primaryRaw, secondaryRaw []byte) []byte {
+ return bytes.Join([][]byte{primaryRaw, secondaryRaw}, []byte(","))
+}
diff --git a/vendor/k8s.io/utils/lru/lru.go b/vendor/k8s.io/utils/lru/lru.go
index f0b67462f83..40c22ece13e 100644
--- a/vendor/k8s.io/utils/lru/lru.go
+++ b/vendor/k8s.io/utils/lru/lru.go
@@ -47,6 +47,8 @@ func NewWithEvictionFunc(size int, f EvictionFunc) *Cache {
// SetEvictionFunc updates the eviction func
func (c *Cache) SetEvictionFunc(f EvictionFunc) error {
+ c.lock.Lock()
+ defer c.lock.Unlock()
if c.cache.OnEvicted != nil {
return fmt.Errorf("lru cache eviction function is already set")
}
diff --git a/vendor/modules.txt b/vendor/modules.txt
index f5891315d4b..1311a858385 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -24,7 +24,7 @@ github.com/Masterminds/goutils
# github.com/Masterminds/semver v1.5.0
## explicit
github.com/Masterminds/semver
-# github.com/Masterminds/semver/v3 v3.3.0
+# github.com/Masterminds/semver/v3 v3.3.1
## explicit; go 1.21
github.com/Masterminds/semver/v3
# github.com/Masterminds/sprig/v3 v3.3.0
@@ -195,7 +195,7 @@ github.com/devfile/registry-support/registry-library/library
# github.com/distribution/reference v0.6.0
## explicit; go 1.20
github.com/distribution/reference
-# github.com/docker/cli v27.4.1+incompatible
+# github.com/docker/cli v27.5.0+incompatible
## explicit
github.com/docker/cli/cli/config
github.com/docker/cli/cli/config/configfile
@@ -213,7 +213,7 @@ github.com/docker/distribution/registry/client/auth/challenge
github.com/docker/distribution/registry/client/transport
github.com/docker/distribution/registry/storage/cache
github.com/docker/distribution/registry/storage/cache/memory
-# github.com/docker/docker v27.3.1+incompatible
+# github.com/docker/docker v27.5.0+incompatible
## explicit
github.com/docker/docker/api/types/filters
github.com/docker/docker/api/types/registry
@@ -542,8 +542,8 @@ github.com/lib/pq/scram
# github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de
## explicit
github.com/liggitt/tabwriter
-# github.com/mailru/easyjson v0.7.7
-## explicit; go 1.12
+# github.com/mailru/easyjson v0.9.0
+## explicit; go 1.20
github.com/mailru/easyjson/buffer
github.com/mailru/easyjson/jlexer
github.com/mailru/easyjson/jwriter
@@ -635,20 +635,19 @@ github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1
# github.com/openshift/library-go v0.0.0-20231020125034-5a2d9fe760b3
## explicit; go 1.20
github.com/openshift/library-go/pkg/crypto
-# github.com/operator-framework/api v0.29.0
+# github.com/operator-framework/api v0.30.0
## explicit; go 1.23.0
github.com/operator-framework/api/pkg/constraints
github.com/operator-framework/api/pkg/lib/version
github.com/operator-framework/api/pkg/operators
github.com/operator-framework/api/pkg/operators/v1
github.com/operator-framework/api/pkg/operators/v1alpha1
-# github.com/operator-framework/kubectl-operator v0.6.0
-## explicit; go 1.23.0
+# github.com/operator-framework/kubectl-operator v0.6.1-0.20250318134414-b496b1036eaf
+## explicit; go 1.23.4
github.com/operator-framework/kubectl-operator/pkg/action
-# github.com/operator-framework/operator-controller v0.15.0
-## explicit; go 1.22.5
-github.com/operator-framework/operator-controller/api/v1alpha1
-github.com/operator-framework/operator-controller/internal/conditionsets
+# github.com/operator-framework/operator-controller v1.2.0
+## explicit; go 1.23.4
+github.com/operator-framework/operator-controller/api/v1
# github.com/operator-framework/operator-lifecycle-manager v0.31.0
## explicit; go 1.23.0
github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/apis/operators
@@ -692,6 +691,7 @@ github.com/pquerna/cachecontrol/cacheobject
github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil
github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/header
github.com/prometheus/client_golang/prometheus
+github.com/prometheus/client_golang/prometheus/collectors
github.com/prometheus/client_golang/prometheus/internal
github.com/prometheus/client_golang/prometheus/promhttp
github.com/prometheus/client_golang/prometheus/promhttp/internal
@@ -884,9 +884,8 @@ golang.org/x/crypto/ssh
golang.org/x/crypto/ssh/agent
golang.org/x/crypto/ssh/internal/bcrypt_pbkdf
golang.org/x/crypto/ssh/knownhosts
-# golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c
-## explicit; go 1.22.0
-golang.org/x/exp/constraints
+# golang.org/x/exp v0.0.0-20250228200357-dead58393ab7
+## explicit; go 1.23.0
golang.org/x/exp/maps
golang.org/x/exp/slices
# golang.org/x/mod v0.25.0
@@ -937,14 +936,17 @@ golang.org/x/text/secure/bidirule
golang.org/x/text/transform
golang.org/x/text/unicode/bidi
golang.org/x/text/unicode/norm
-# golang.org/x/time v0.9.0
+# golang.org/x/time v0.10.0
## explicit; go 1.18
golang.org/x/time/rate
-# google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576
-## explicit; go 1.21
+# gomodules.xyz/jsonpatch/v2 v2.4.0
+## explicit; go 1.20
+gomodules.xyz/jsonpatch/v2
+# google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb
+## explicit; go 1.23.0
google.golang.org/genproto/googleapis/api/expr/v1alpha1
-# google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8
-## explicit; go 1.21
+# google.golang.org/genproto/googleapis/rpc v0.0.0-20250227231956-55c901821b1e
+## explicit; go 1.23.0
google.golang.org/genproto/googleapis/rpc/status
# google.golang.org/grpc v1.68.1
## explicit; go 1.22
@@ -1231,10 +1233,12 @@ k8s.io/apimachinery/pkg/util/naming
k8s.io/apimachinery/pkg/util/net
k8s.io/apimachinery/pkg/util/portforward
k8s.io/apimachinery/pkg/util/proxy
+k8s.io/apimachinery/pkg/util/rand
k8s.io/apimachinery/pkg/util/remotecommand
k8s.io/apimachinery/pkg/util/runtime
k8s.io/apimachinery/pkg/util/sets
k8s.io/apimachinery/pkg/util/strategicpatch
+k8s.io/apimachinery/pkg/util/uuid
k8s.io/apimachinery/pkg/util/validation
k8s.io/apimachinery/pkg/util/validation/field
k8s.io/apimachinery/pkg/util/version
@@ -1319,6 +1323,78 @@ k8s.io/client-go/dynamic
k8s.io/client-go/dynamic/fake
k8s.io/client-go/features
k8s.io/client-go/gentype
+k8s.io/client-go/informers
+k8s.io/client-go/informers/admissionregistration
+k8s.io/client-go/informers/admissionregistration/v1
+k8s.io/client-go/informers/admissionregistration/v1alpha1
+k8s.io/client-go/informers/admissionregistration/v1beta1
+k8s.io/client-go/informers/apiserverinternal
+k8s.io/client-go/informers/apiserverinternal/v1alpha1
+k8s.io/client-go/informers/apps
+k8s.io/client-go/informers/apps/v1
+k8s.io/client-go/informers/apps/v1beta1
+k8s.io/client-go/informers/apps/v1beta2
+k8s.io/client-go/informers/autoscaling
+k8s.io/client-go/informers/autoscaling/v1
+k8s.io/client-go/informers/autoscaling/v2
+k8s.io/client-go/informers/autoscaling/v2beta1
+k8s.io/client-go/informers/autoscaling/v2beta2
+k8s.io/client-go/informers/batch
+k8s.io/client-go/informers/batch/v1
+k8s.io/client-go/informers/batch/v1beta1
+k8s.io/client-go/informers/certificates
+k8s.io/client-go/informers/certificates/v1
+k8s.io/client-go/informers/certificates/v1alpha1
+k8s.io/client-go/informers/certificates/v1beta1
+k8s.io/client-go/informers/coordination
+k8s.io/client-go/informers/coordination/v1
+k8s.io/client-go/informers/coordination/v1alpha2
+k8s.io/client-go/informers/coordination/v1beta1
+k8s.io/client-go/informers/core
+k8s.io/client-go/informers/core/v1
+k8s.io/client-go/informers/discovery
+k8s.io/client-go/informers/discovery/v1
+k8s.io/client-go/informers/discovery/v1beta1
+k8s.io/client-go/informers/events
+k8s.io/client-go/informers/events/v1
+k8s.io/client-go/informers/events/v1beta1
+k8s.io/client-go/informers/extensions
+k8s.io/client-go/informers/extensions/v1beta1
+k8s.io/client-go/informers/flowcontrol
+k8s.io/client-go/informers/flowcontrol/v1
+k8s.io/client-go/informers/flowcontrol/v1beta1
+k8s.io/client-go/informers/flowcontrol/v1beta2
+k8s.io/client-go/informers/flowcontrol/v1beta3
+k8s.io/client-go/informers/internalinterfaces
+k8s.io/client-go/informers/networking
+k8s.io/client-go/informers/networking/v1
+k8s.io/client-go/informers/networking/v1alpha1
+k8s.io/client-go/informers/networking/v1beta1
+k8s.io/client-go/informers/node
+k8s.io/client-go/informers/node/v1
+k8s.io/client-go/informers/node/v1alpha1
+k8s.io/client-go/informers/node/v1beta1
+k8s.io/client-go/informers/policy
+k8s.io/client-go/informers/policy/v1
+k8s.io/client-go/informers/policy/v1beta1
+k8s.io/client-go/informers/rbac
+k8s.io/client-go/informers/rbac/v1
+k8s.io/client-go/informers/rbac/v1alpha1
+k8s.io/client-go/informers/rbac/v1beta1
+k8s.io/client-go/informers/resource
+k8s.io/client-go/informers/resource/v1alpha3
+k8s.io/client-go/informers/resource/v1beta1
+k8s.io/client-go/informers/resource/v1beta2
+k8s.io/client-go/informers/scheduling
+k8s.io/client-go/informers/scheduling/v1
+k8s.io/client-go/informers/scheduling/v1alpha1
+k8s.io/client-go/informers/scheduling/v1beta1
+k8s.io/client-go/informers/storage
+k8s.io/client-go/informers/storage/v1
+k8s.io/client-go/informers/storage/v1alpha1
+k8s.io/client-go/informers/storage/v1beta1
+k8s.io/client-go/informers/storagemigration
+k8s.io/client-go/informers/storagemigration/v1alpha1
k8s.io/client-go/kubernetes
k8s.io/client-go/kubernetes/fake
k8s.io/client-go/kubernetes/scheme
@@ -1432,6 +1508,57 @@ k8s.io/client-go/kubernetes/typed/storage/v1beta1
k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake
k8s.io/client-go/kubernetes/typed/storagemigration/v1alpha1
k8s.io/client-go/kubernetes/typed/storagemigration/v1alpha1/fake
+k8s.io/client-go/listers
+k8s.io/client-go/listers/admissionregistration/v1
+k8s.io/client-go/listers/admissionregistration/v1alpha1
+k8s.io/client-go/listers/admissionregistration/v1beta1
+k8s.io/client-go/listers/apiserverinternal/v1alpha1
+k8s.io/client-go/listers/apps/v1
+k8s.io/client-go/listers/apps/v1beta1
+k8s.io/client-go/listers/apps/v1beta2
+k8s.io/client-go/listers/autoscaling/v1
+k8s.io/client-go/listers/autoscaling/v2
+k8s.io/client-go/listers/autoscaling/v2beta1
+k8s.io/client-go/listers/autoscaling/v2beta2
+k8s.io/client-go/listers/batch/v1
+k8s.io/client-go/listers/batch/v1beta1
+k8s.io/client-go/listers/certificates/v1
+k8s.io/client-go/listers/certificates/v1alpha1
+k8s.io/client-go/listers/certificates/v1beta1
+k8s.io/client-go/listers/coordination/v1
+k8s.io/client-go/listers/coordination/v1alpha2
+k8s.io/client-go/listers/coordination/v1beta1
+k8s.io/client-go/listers/core/v1
+k8s.io/client-go/listers/discovery/v1
+k8s.io/client-go/listers/discovery/v1beta1
+k8s.io/client-go/listers/events/v1
+k8s.io/client-go/listers/events/v1beta1
+k8s.io/client-go/listers/extensions/v1beta1
+k8s.io/client-go/listers/flowcontrol/v1
+k8s.io/client-go/listers/flowcontrol/v1beta1
+k8s.io/client-go/listers/flowcontrol/v1beta2
+k8s.io/client-go/listers/flowcontrol/v1beta3
+k8s.io/client-go/listers/networking/v1
+k8s.io/client-go/listers/networking/v1alpha1
+k8s.io/client-go/listers/networking/v1beta1
+k8s.io/client-go/listers/node/v1
+k8s.io/client-go/listers/node/v1alpha1
+k8s.io/client-go/listers/node/v1beta1
+k8s.io/client-go/listers/policy/v1
+k8s.io/client-go/listers/policy/v1beta1
+k8s.io/client-go/listers/rbac/v1
+k8s.io/client-go/listers/rbac/v1alpha1
+k8s.io/client-go/listers/rbac/v1beta1
+k8s.io/client-go/listers/resource/v1alpha3
+k8s.io/client-go/listers/resource/v1beta1
+k8s.io/client-go/listers/resource/v1beta2
+k8s.io/client-go/listers/scheduling/v1
+k8s.io/client-go/listers/scheduling/v1alpha1
+k8s.io/client-go/listers/scheduling/v1beta1
+k8s.io/client-go/listers/storage/v1
+k8s.io/client-go/listers/storage/v1alpha1
+k8s.io/client-go/listers/storage/v1beta1
+k8s.io/client-go/listers/storagemigration/v1alpha1
k8s.io/client-go/metadata
k8s.io/client-go/openapi
k8s.io/client-go/openapi/cached
@@ -1464,6 +1591,8 @@ k8s.io/client-go/tools/clientcmd/api
k8s.io/client-go/tools/clientcmd/api/latest
k8s.io/client-go/tools/clientcmd/api/v1
k8s.io/client-go/tools/internal/events
+k8s.io/client-go/tools/leaderelection
+k8s.io/client-go/tools/leaderelection/resourcelock
k8s.io/client-go/tools/metrics
k8s.io/client-go/tools/pager
k8s.io/client-go/tools/record
@@ -1527,7 +1656,7 @@ k8s.io/kubectl/pkg/validation
## explicit; go 1.22.0
k8s.io/pod-security-admission/api
k8s.io/pod-security-admission/policy
-# k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738
+# k8s.io/utils v0.0.0-20241210054802-24370beab758
## explicit; go 1.18
k8s.io/utils/buffer
k8s.io/utils/clock
@@ -1583,13 +1712,55 @@ oras.land/oras-go/v2/registry/remote/internal/errutil
oras.land/oras-go/v2/registry/remote/retry
# sigs.k8s.io/controller-runtime v0.20.4
## explicit; go 1.23.0
+sigs.k8s.io/controller-runtime
+sigs.k8s.io/controller-runtime/pkg/builder
+sigs.k8s.io/controller-runtime/pkg/cache
+sigs.k8s.io/controller-runtime/pkg/cache/internal
+sigs.k8s.io/controller-runtime/pkg/certwatcher
+sigs.k8s.io/controller-runtime/pkg/certwatcher/metrics
sigs.k8s.io/controller-runtime/pkg/client
sigs.k8s.io/controller-runtime/pkg/client/apiutil
+sigs.k8s.io/controller-runtime/pkg/client/config
+sigs.k8s.io/controller-runtime/pkg/client/fake
+sigs.k8s.io/controller-runtime/pkg/client/interceptor
+sigs.k8s.io/controller-runtime/pkg/cluster
+sigs.k8s.io/controller-runtime/pkg/config
+sigs.k8s.io/controller-runtime/pkg/controller
+sigs.k8s.io/controller-runtime/pkg/controller/controllerutil
+sigs.k8s.io/controller-runtime/pkg/controller/priorityqueue
+sigs.k8s.io/controller-runtime/pkg/conversion
+sigs.k8s.io/controller-runtime/pkg/event
+sigs.k8s.io/controller-runtime/pkg/handler
+sigs.k8s.io/controller-runtime/pkg/healthz
+sigs.k8s.io/controller-runtime/pkg/internal/controller
+sigs.k8s.io/controller-runtime/pkg/internal/controller/metrics
+sigs.k8s.io/controller-runtime/pkg/internal/field/selector
+sigs.k8s.io/controller-runtime/pkg/internal/httpserver
+sigs.k8s.io/controller-runtime/pkg/internal/log
+sigs.k8s.io/controller-runtime/pkg/internal/metrics
+sigs.k8s.io/controller-runtime/pkg/internal/objectutil
+sigs.k8s.io/controller-runtime/pkg/internal/recorder
+sigs.k8s.io/controller-runtime/pkg/internal/source
+sigs.k8s.io/controller-runtime/pkg/internal/syncs
+sigs.k8s.io/controller-runtime/pkg/leaderelection
sigs.k8s.io/controller-runtime/pkg/log
sigs.k8s.io/controller-runtime/pkg/log/zap
+sigs.k8s.io/controller-runtime/pkg/manager
+sigs.k8s.io/controller-runtime/pkg/manager/signals
+sigs.k8s.io/controller-runtime/pkg/metrics
+sigs.k8s.io/controller-runtime/pkg/metrics/server
+sigs.k8s.io/controller-runtime/pkg/predicate
+sigs.k8s.io/controller-runtime/pkg/reconcile
+sigs.k8s.io/controller-runtime/pkg/recorder
sigs.k8s.io/controller-runtime/pkg/scheme
-# sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3
-## explicit; go 1.21
+sigs.k8s.io/controller-runtime/pkg/source
+sigs.k8s.io/controller-runtime/pkg/webhook
+sigs.k8s.io/controller-runtime/pkg/webhook/admission
+sigs.k8s.io/controller-runtime/pkg/webhook/admission/metrics
+sigs.k8s.io/controller-runtime/pkg/webhook/conversion
+sigs.k8s.io/controller-runtime/pkg/webhook/internal/metrics
+# sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8
+## explicit; go 1.23
sigs.k8s.io/json
sigs.k8s.io/json/internal/golang/encoding/json
# sigs.k8s.io/kustomize/api v0.19.0
diff --git a/vendor/sigs.k8s.io/controller-runtime/.gitignore b/vendor/sigs.k8s.io/controller-runtime/.gitignore
new file mode 100644
index 00000000000..2ddc5a8b875
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/.gitignore
@@ -0,0 +1,30 @@
+# Binaries for programs and plugins
+*.exe
+*.exe~
+*.dll
+*.so
+*.dylib
+
+# Test binary, build with `go test -c`
+*.test
+
+# Output of the go coverage tool, specifically when used with LiteIDE
+*.out
+
+# editor and IDE paraphernalia
+.idea
+*.swp
+*.swo
+*~
+
+# Vscode files
+.vscode
+
+# Tools binaries.
+hack/tools/bin
+
+# Release artifacts
+tools/setup-envtest/out
+
+junit-report.xml
+/artifacts
diff --git a/vendor/sigs.k8s.io/controller-runtime/.golangci.yml b/vendor/sigs.k8s.io/controller-runtime/.golangci.yml
new file mode 100644
index 00000000000..7cb910fb858
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/.golangci.yml
@@ -0,0 +1,179 @@
+linters:
+ disable-all: true
+ enable:
+ - asasalint
+ - asciicheck
+ - bidichk
+ - bodyclose
+ - copyloopvar
+ - dogsled
+ - dupl
+ - errcheck
+ - errchkjson
+ - errorlint
+ - exhaustive
+ - ginkgolinter
+ - goconst
+ - gocritic
+ - gocyclo
+ - gofmt
+ - goimports
+ - goprintffuncname
+ - gosimple
+ - govet
+ - importas
+ - ineffassign
+ - makezero
+ - misspell
+ - nakedret
+ - nilerr
+ - nolintlint
+ - prealloc
+ - revive
+ - staticcheck
+ - stylecheck
+ - tagliatelle
+ - typecheck
+ - unconvert
+ - unparam
+ - unused
+ - whitespace
+
+linters-settings:
+ govet:
+ enable-all: true
+ disable:
+ - fieldalignment
+ - shadow
+ importas:
+ no-unaliased: true
+ alias:
+ # Kubernetes
+ - pkg: k8s.io/api/core/v1
+ alias: corev1
+ - pkg: k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1
+ alias: apiextensionsv1
+ - pkg: k8s.io/apimachinery/pkg/apis/meta/v1
+ alias: metav1
+ - pkg: k8s.io/apimachinery/pkg/api/errors
+ alias: apierrors
+ - pkg: k8s.io/apimachinery/pkg/util/errors
+ alias: kerrors
+ # Controller Runtime
+ - pkg: sigs.k8s.io/controller-runtime
+ alias: ctrl
+ revive:
+ rules:
+ # The following rules are recommended https://github.com/mgechev/revive#recommended-configuration
+ - name: blank-imports
+ - name: context-as-argument
+ - name: context-keys-type
+ - name: dot-imports
+ - name: error-return
+ - name: error-strings
+ - name: error-naming
+ - name: exported
+ - name: if-return
+ - name: increment-decrement
+ - name: var-naming
+ - name: var-declaration
+ - name: range
+ - name: receiver-naming
+ - name: time-naming
+ - name: unexported-return
+ - name: indent-error-flow
+ - name: errorf
+ - name: superfluous-else
+ - name: unreachable-code
+ - name: redefines-builtin-id
+ #
+ # Rules in addition to the recommended configuration above.
+ #
+ - name: bool-literal-in-expr
+ - name: constant-logical-expr
+
+issues:
+ max-same-issues: 0
+ max-issues-per-linter: 0
+ # We are disabling default golangci exclusions because we want to help reviewers to focus on reviewing the most relevant
+ # changes in PRs and avoid nitpicking.
+ exclude-use-default: false
+ # List of regexps of issue texts to exclude, empty list by default.
+ exclude:
+ # The following are being worked on to remove their exclusion. This list should be reduced or go away all together over time.
+ # If it is decided they will not be addressed they should be moved above this comment.
+ - Subprocess launch(ed with variable|ing should be audited)
+ - (G204|G104|G307)
+ - "ST1000: at least one file in a package should have a package comment"
+ exclude-files:
+ - "zz_generated.*\\.go$"
+ - ".*conversion.*\\.go$"
+ exclude-rules:
+ - linters:
+ - gosec
+ text: "G108: Profiling endpoint is automatically exposed on /debug/pprof"
+ - linters:
+ - revive
+ text: "exported: exported method .*\\.(Reconcile|SetupWithManager|SetupWebhookWithManager) should have comment or be unexported"
+ - linters:
+ - errcheck
+ text: Error return value of .((os\.)?std(out|err)\..*|.*Close|.*Flush|os\.Remove(All)?|.*print(f|ln)?|os\.(Un)?Setenv). is not checked
+ - linters:
+ - staticcheck
+ text: "SA1019: .*The component config package has been deprecated and will be removed in a future release."
+ # With Go 1.16, the new embed directive can be used with an un-named import,
+ # revive (previously, golint) only allows these to be imported in a main.go, which wouldn't work for us.
+ # This directive allows the embed package to be imported with an underscore everywhere.
+ - linters:
+ - revive
+ source: _ "embed"
+ # Exclude some packages or code to require comments, for example test code, or fake clients.
+ - linters:
+ - revive
+ text: exported (method|function|type|const) (.+) should have comment or be unexported
+ source: (func|type).*Fake.*
+ - linters:
+ - revive
+ text: exported (method|function|type|const) (.+) should have comment or be unexported
+ path: fake_\.go
+ # Disable unparam "always receives" which might not be really
+ # useful when building libraries.
+ - linters:
+ - unparam
+ text: always receives
+ # Dot imports for gomega and ginkgo are allowed
+ # within test files.
+ - path: _test\.go
+ text: should not use dot imports
+ - path: _test\.go
+ text: cyclomatic complexity
+ - path: _test\.go
+ text: "G107: Potential HTTP request made with variable url"
+ # Append should be able to assign to a different var/slice.
+ - linters:
+ - gocritic
+ text: "appendAssign: append result not assigned to the same slice"
+ - linters:
+ - gocritic
+ text: "singleCaseSwitch: should rewrite switch statement to if statement"
+ # It considers all file access to a filename that comes from a variable problematic,
+ # which is naiv at best.
+ - linters:
+ - gosec
+ text: "G304: Potential file inclusion via variable"
+ - linters:
+ - dupl
+ path: _test\.go
+ - linters:
+ - revive
+ path: .*/internal/.*
+ - linters:
+ - unused
+ # Seems to incorrectly trigger on the two implementations that are only
+ # used through an interface and not directly..?
+ path: pkg/controller/priorityqueue/metrics\.go
+
+run:
+ go: "1.23"
+ timeout: 10m
+ allow-parallel-runners: true
diff --git a/vendor/sigs.k8s.io/controller-runtime/.gomodcheck.yaml b/vendor/sigs.k8s.io/controller-runtime/.gomodcheck.yaml
new file mode 100644
index 00000000000..3608de331dd
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/.gomodcheck.yaml
@@ -0,0 +1,17 @@
+upstreamRefs:
+ - k8s.io/api
+ - k8s.io/apiextensions-apiserver
+ - k8s.io/apimachinery
+ - k8s.io/apiserver
+ - k8s.io/client-go
+ - k8s.io/component-base
+ # k8s.io/klog/v2 -> conflicts with k/k deps
+ # k8s.io/utils -> conflicts with k/k deps
+
+excludedModules:
+ # --- test dependencies:
+ - github.com/onsi/ginkgo/v2
+ - github.com/onsi/gomega
+
+ # --- We want a newer version with generics support for this
+ - github.com/google/btree
diff --git a/vendor/sigs.k8s.io/controller-runtime/CONTRIBUTING.md b/vendor/sigs.k8s.io/controller-runtime/CONTRIBUTING.md
new file mode 100644
index 00000000000..2c0ea1f6674
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/CONTRIBUTING.md
@@ -0,0 +1,19 @@
+# Contributing guidelines
+
+## Sign the CLA
+
+Kubernetes projects require that you sign a Contributor License Agreement (CLA) before we can accept your pull requests.
+
+Please see https://git.k8s.io/community/CLA.md for more info
+
+## Contributing steps
+
+1. Submit an issue describing your proposed change to the repo in question.
+1. The [repo owners](OWNERS) will respond to your issue promptly.
+1. If your proposed change is accepted, and you haven't already done so, sign a Contributor License Agreement (see details above).
+1. Fork the desired repo, develop and test your code changes.
+1. Submit a pull request.
+
+## Test locally
+
+Run the command `make test` to test the changes locally.
diff --git a/vendor/sigs.k8s.io/controller-runtime/FAQ.md b/vendor/sigs.k8s.io/controller-runtime/FAQ.md
new file mode 100644
index 00000000000..9c36c8112e7
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/FAQ.md
@@ -0,0 +1,81 @@
+# FAQ
+
+### Q: How do I know which type of object a controller references?
+
+**A**: Each controller should only reconcile one object type. Other
+affected objects should be mapped to a single type of root object, using
+the `handler.EnqueueRequestForOwner` or `handler.EnqueueRequestsFromMapFunc` event
+handlers, and potentially indices. Then, your Reconcile method should
+attempt to reconcile *all* state for that given root objects.
+
+### Q: How do I have different logic in my reconciler for different types of events (e.g. create, update, delete)?
+
+**A**: You should not. Reconcile functions should be idempotent, and
+should always reconcile state by reading all the state it needs, then
+writing updates. This allows your reconciler to correctly respond to
+generic events, adjust to skipped or coalesced events, and easily deal
+with application startup. The controller will enqueue reconcile requests
+for both old and new objects if a mapping changes, but it's your
+responsibility to make sure you have enough information to be able clean
+up state that's no longer referenced.
+
+### Q: My cache might be stale if I read from a cache! How should I deal with that?
+
+**A**: There are several different approaches that can be taken, depending
+on your situation.
+
+- When you can, take advantage of optimistic locking: use deterministic
+ names for objects you create, so that the Kubernetes API server will
+ warn you if the object already exists. Many controllers in Kubernetes
+ take this approach: the StatefulSet controller appends a specific number
+ to each pod that it creates, while the Deployment controller hashes the
+ pod template spec and appends that.
+
+- In the few cases when you cannot take advantage of deterministic names
+ (e.g. when using generateName), it may be useful in to track which
+ actions you took, and assume that they need to be repeated if they don't
+ occur after a given time (e.g. using a requeue result). This is what
+ the ReplicaSet controller does.
+
+In general, write your controller with the assumption that information
+will eventually be correct, but may be slightly out of date. Make sure
+that your reconcile function enforces the entire state of the world each
+time it runs. If none of this works for you, you can always construct
+a client that reads directly from the API server, but this is generally
+considered to be a last resort, and the two approaches above should
+generally cover most circumstances.
+
+### Q: Where's the fake client? How do I use it?
+
+**A**: The fake client
+[exists](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/client/fake),
+but we generally recommend using
+[envtest.Environment](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/envtest#Environment)
+to test against a real API server. In our experience, tests using fake
+clients gradually re-implement poorly-written impressions of a real API
+server, which leads to hard-to-maintain, complex test code.
+
+### Q: How should I write tests? Any suggestions for getting started?
+
+- Use the aforementioned
+ [envtest.Environment](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/envtest#Environment)
+ to spin up a real API server instead of trying to mock one out.
+
+- Structure your tests to check that the state of the world is as you
+ expect it, *not* that a particular set of API calls were made, when
+ working with Kubernetes APIs. This will allow you to more easily
+ refactor and improve the internals of your controllers without changing
+ your tests.
+
+- Remember that any time you're interacting with the API server, changes
+ may have some delay between write time and reconcile time.
+
+### Q: What are these errors about no Kind being registered for a type?
+
+**A**: You're probably missing a fully-set-up Scheme. Schemes record the
+mapping between Go types and group-version-kinds in Kubernetes. In
+general, your application should have its own Scheme containing the types
+from the API groups that it needs (be they Kubernetes types or your own).
+See the [scheme builder
+docs](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/scheme) for
+more information.
diff --git a/vendor/sigs.k8s.io/controller-runtime/Makefile b/vendor/sigs.k8s.io/controller-runtime/Makefile
new file mode 100644
index 00000000000..2361df981d9
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/Makefile
@@ -0,0 +1,218 @@
+#!/usr/bin/env bash
+
+# Copyright 2020 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.
+
+# If you update this file, please follow
+# https://suva.sh/posts/well-documented-makefiles
+
+## --------------------------------------
+## General
+## --------------------------------------
+
+SHELL:=/usr/bin/env bash
+.DEFAULT_GOAL:=help
+
+#
+# Go.
+#
+GO_VERSION ?= 1.23.0
+
+# Use GOPROXY environment variable if set
+GOPROXY := $(shell go env GOPROXY)
+ifeq ($(GOPROXY),)
+GOPROXY := https://proxy.golang.org
+endif
+export GOPROXY
+
+# Active module mode, as we use go modules to manage dependencies
+export GO111MODULE=on
+
+# Hosts running SELinux need :z added to volume mounts
+SELINUX_ENABLED := $(shell cat /sys/fs/selinux/enforce 2> /dev/null || echo 0)
+
+ifeq ($(SELINUX_ENABLED),1)
+ DOCKER_VOL_OPTS?=:z
+endif
+
+# Tools.
+TOOLS_DIR := hack/tools
+TOOLS_BIN_DIR := $(abspath $(TOOLS_DIR)/bin)
+GOLANGCI_LINT := $(abspath $(TOOLS_BIN_DIR)/golangci-lint)
+GO_APIDIFF := $(TOOLS_BIN_DIR)/go-apidiff
+CONTROLLER_GEN := $(TOOLS_BIN_DIR)/controller-gen
+ENVTEST_DIR := $(abspath tools/setup-envtest)
+SCRATCH_ENV_DIR := $(abspath examples/scratch-env)
+GO_INSTALL := ./hack/go-install.sh
+
+# The help will print out all targets with their descriptions organized bellow their categories. The categories are represented by `##@` and the target descriptions by `##`.
+# The awk commands is responsible to read the entire set of makefiles included in this invocation, looking for lines of the file as xyz: ## something, and then pretty-format the target and help. Then, if there's a line with ##@ something, that gets pretty-printed as a category.
+# More info over the usage of ANSI control characters for terminal formatting: https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters
+# More info over awk command: http://linuxcommand.org/lc3_adv_awk.php
+.PHONY: help
+help: ## Display this help
+ @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
+
+## --------------------------------------
+## Testing
+## --------------------------------------
+
+.PHONY: test
+test: test-tools ## Run the script check-everything.sh which will check all.
+ TRACE=1 ./hack/check-everything.sh
+
+.PHONY: test-tools
+test-tools: ## tests the tools codebase (setup-envtest)
+ cd tools/setup-envtest && go test ./...
+
+## --------------------------------------
+## Binaries
+## --------------------------------------
+
+GO_APIDIFF_VER := v0.8.2
+GO_APIDIFF_BIN := go-apidiff
+GO_APIDIFF := $(abspath $(TOOLS_BIN_DIR)/$(GO_APIDIFF_BIN)-$(GO_APIDIFF_VER))
+GO_APIDIFF_PKG := github.com/joelanford/go-apidiff
+
+$(GO_APIDIFF): # Build go-apidiff from tools folder.
+ GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(GO_APIDIFF_PKG) $(GO_APIDIFF_BIN) $(GO_APIDIFF_VER)
+
+CONTROLLER_GEN_VER := v0.17.1
+CONTROLLER_GEN_BIN := controller-gen
+CONTROLLER_GEN := $(abspath $(TOOLS_BIN_DIR)/$(CONTROLLER_GEN_BIN)-$(CONTROLLER_GEN_VER))
+CONTROLLER_GEN_PKG := sigs.k8s.io/controller-tools/cmd/controller-gen
+
+$(CONTROLLER_GEN): # Build controller-gen from tools folder.
+ GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(CONTROLLER_GEN_PKG) $(CONTROLLER_GEN_BIN) $(CONTROLLER_GEN_VER)
+
+GOLANGCI_LINT_BIN := golangci-lint
+GOLANGCI_LINT_VER := $(shell cat .github/workflows/golangci-lint.yml | grep [[:space:]]version: | sed 's/.*version: //')
+GOLANGCI_LINT := $(abspath $(TOOLS_BIN_DIR)/$(GOLANGCI_LINT_BIN)-$(GOLANGCI_LINT_VER))
+GOLANGCI_LINT_PKG := github.com/golangci/golangci-lint/cmd/golangci-lint
+
+$(GOLANGCI_LINT): # Build golangci-lint from tools folder.
+ GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(GOLANGCI_LINT_PKG) $(GOLANGCI_LINT_BIN) $(GOLANGCI_LINT_VER)
+
+GO_MOD_CHECK_DIR := $(abspath ./hack/tools/cmd/gomodcheck)
+GO_MOD_CHECK := $(abspath $(TOOLS_BIN_DIR)/gomodcheck)
+GO_MOD_CHECK_IGNORE := $(abspath .gomodcheck.yaml)
+.PHONY: $(GO_MOD_CHECK)
+$(GO_MOD_CHECK): # Build gomodcheck
+ go build -C $(GO_MOD_CHECK_DIR) -o $(GO_MOD_CHECK)
+
+## --------------------------------------
+## Linting
+## --------------------------------------
+
+.PHONY: lint
+lint: $(GOLANGCI_LINT) ## Lint codebase
+ $(GOLANGCI_LINT) run -v $(GOLANGCI_LINT_EXTRA_ARGS)
+ cd tools/setup-envtest; $(GOLANGCI_LINT) run -v $(GOLANGCI_LINT_EXTRA_ARGS)
+
+.PHONY: lint-fix
+lint-fix: $(GOLANGCI_LINT) ## Lint the codebase and run auto-fixers if supported by the linter.
+ GOLANGCI_LINT_EXTRA_ARGS=--fix $(MAKE) lint
+
+## --------------------------------------
+## Generate
+## --------------------------------------
+
+.PHONY: modules
+modules: ## Runs go mod to ensure modules are up to date.
+ go mod tidy
+ cd $(TOOLS_DIR); go mod tidy
+ cd $(ENVTEST_DIR); go mod tidy
+ cd $(SCRATCH_ENV_DIR); go mod tidy
+
+## --------------------------------------
+## Release
+## --------------------------------------
+
+RELEASE_DIR := tools/setup-envtest/out
+
+.PHONY: $(RELEASE_DIR)
+$(RELEASE_DIR):
+ mkdir -p $(RELEASE_DIR)/
+
+.PHONY: release
+release: clean-release $(RELEASE_DIR) ## Build release.
+ @if ! [ -z "$$(git status --porcelain)" ]; then echo "Your local git repository contains uncommitted changes, use git clean before proceeding."; exit 1; fi
+
+ # Build binaries first.
+ $(MAKE) release-binaries
+
+.PHONY: release-binaries
+release-binaries: ## Build release binaries.
+ RELEASE_BINARY=setup-envtest-linux-amd64 GOOS=linux GOARCH=amd64 $(MAKE) release-binary
+ RELEASE_BINARY=setup-envtest-linux-arm64 GOOS=linux GOARCH=arm64 $(MAKE) release-binary
+ RELEASE_BINARY=setup-envtest-linux-ppc64le GOOS=linux GOARCH=ppc64le $(MAKE) release-binary
+ RELEASE_BINARY=setup-envtest-linux-s390x GOOS=linux GOARCH=s390x $(MAKE) release-binary
+ RELEASE_BINARY=setup-envtest-darwin-amd64 GOOS=darwin GOARCH=amd64 $(MAKE) release-binary
+ RELEASE_BINARY=setup-envtest-darwin-arm64 GOOS=darwin GOARCH=arm64 $(MAKE) release-binary
+ RELEASE_BINARY=setup-envtest-windows-amd64.exe GOOS=windows GOARCH=amd64 $(MAKE) release-binary
+
+.PHONY: release-binary
+release-binary: $(RELEASE_DIR)
+ docker run \
+ --rm \
+ -e CGO_ENABLED=0 \
+ -e GOOS=$(GOOS) \
+ -e GOARCH=$(GOARCH) \
+ -e GOCACHE=/tmp/ \
+ --user $$(id -u):$$(id -g) \
+ -v "$$(pwd):/workspace$(DOCKER_VOL_OPTS)" \
+ -w /workspace/tools/setup-envtest \
+ golang:$(GO_VERSION) \
+ go build -a -trimpath -ldflags "-X 'sigs.k8s.io/controller-runtime/tools/setup-envtest/version.version=$(RELEASE_TAG)' -extldflags '-static'" \
+ -o ./out/$(RELEASE_BINARY) ./
+
+## --------------------------------------
+## Cleanup / Verification
+## --------------------------------------
+
+.PHONY: clean
+clean: ## Cleanup.
+ $(GOLANGCI_LINT) cache clean
+ $(MAKE) clean-bin
+
+.PHONY: clean-bin
+clean-bin: ## Remove all generated binaries.
+ rm -rf hack/tools/bin
+
+.PHONY: clean-release
+clean-release: ## Remove the release folder
+ rm -rf $(RELEASE_DIR)
+
+.PHONY: verify-modules
+verify-modules: modules $(GO_MOD_CHECK) ## Verify go modules are up to date
+ @if !(git diff --quiet HEAD -- go.sum go.mod $(TOOLS_DIR)/go.mod $(TOOLS_DIR)/go.sum $(ENVTEST_DIR)/go.mod $(ENVTEST_DIR)/go.sum $(SCRATCH_ENV_DIR)/go.sum); then \
+ git diff; \
+ echo "go module files are out of date, please run 'make modules'"; exit 1; \
+ fi
+ $(GO_MOD_CHECK) $(GO_MOD_CHECK_IGNORE)
+
+APIDIFF_OLD_COMMIT ?= $(shell git rev-parse origin/main)
+
+.PHONY: apidiff
+verify-apidiff: $(GO_APIDIFF) ## Check for API differences
+ $(GO_APIDIFF) $(APIDIFF_OLD_COMMIT) --print-compatible
+
+## --------------------------------------
+## Helpers
+## --------------------------------------
+
+##@ helpers:
+
+go-version: ## Print the go version we use to compile our binaries and images
+ @echo $(GO_VERSION)
diff --git a/vendor/sigs.k8s.io/controller-runtime/OWNERS b/vendor/sigs.k8s.io/controller-runtime/OWNERS
new file mode 100644
index 00000000000..9f2d296e4c7
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/OWNERS
@@ -0,0 +1,11 @@
+# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md
+
+approvers:
+ - controller-runtime-admins
+ - controller-runtime-maintainers
+ - controller-runtime-approvers
+reviewers:
+ - controller-runtime-admins
+ - controller-runtime-maintainers
+ - controller-runtime-approvers
+ - controller-runtime-reviewers
diff --git a/vendor/sigs.k8s.io/controller-runtime/OWNERS_ALIASES b/vendor/sigs.k8s.io/controller-runtime/OWNERS_ALIASES
new file mode 100644
index 00000000000..e465c3d5b02
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/OWNERS_ALIASES
@@ -0,0 +1,35 @@
+# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md
+
+aliases:
+ # active folks who can be contacted to perform admin-related
+ # tasks on the repo, or otherwise approve any PRS.
+ controller-runtime-admins:
+ - vincepri
+ - joelanford
+
+ # non-admin folks who have write-access and can approve any PRs in the repo
+ controller-runtime-maintainers:
+ - alvaroaleman
+ - joelanford
+ - sbueringer
+ - vincepri
+
+ # non-admin folks who can approve any PRs in the repo
+ controller-runtime-approvers:
+ - fillzpp
+
+ # folks who can review and LGTM any PRs in the repo (doesn't
+ # include approvers & admins -- those count too via the OWNERS
+ # file)
+ controller-runtime-reviewers:
+ - varshaprasad96
+ - inteon
+
+ # folks who may have context on ancient history,
+ # but are no longer directly involved
+ controller-runtime-emeritus-maintainers:
+ - directxman12
+ controller-runtime-emeritus-admins:
+ - droot
+ - mengqiy
+ - pwittrock
diff --git a/vendor/sigs.k8s.io/controller-runtime/README.md b/vendor/sigs.k8s.io/controller-runtime/README.md
new file mode 100644
index 00000000000..b9709fce332
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/README.md
@@ -0,0 +1,87 @@
+[](https://goreportcard.com/report/sigs.k8s.io/controller-runtime)
+[](https://pkg.go.dev/sigs.k8s.io/controller-runtime)
+
+# Kubernetes controller-runtime Project
+
+The Kubernetes controller-runtime Project is a set of go libraries for building
+Controllers. It is leveraged by [Kubebuilder](https://book.kubebuilder.io/) and
+[Operator SDK](https://github.com/operator-framework/operator-sdk). Both are
+a great place to start for new projects. See
+[Kubebuilder's Quick Start](https://book.kubebuilder.io/quick-start.html) to
+see how it can be used.
+
+Documentation:
+
+- [Package overview](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg)
+- [Basic controller using builder](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/builder#example-Builder)
+- [Creating a manager](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/manager#example-New)
+- [Creating a controller](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/controller#example-New)
+- [Examples](https://github.com/kubernetes-sigs/controller-runtime/blob/main/examples)
+- [Designs](https://github.com/kubernetes-sigs/controller-runtime/blob/main/designs)
+
+# Versioning, Maintenance, and Compatibility
+
+The full documentation can be found at [VERSIONING.md](VERSIONING.md), but TL;DR:
+
+Users:
+
+- We follow [Semantic Versioning (semver)](https://semver.org)
+- Use releases with your dependency management to ensure that you get compatible code
+- The main branch contains all the latest code, some of which may break compatibility (so "normal" `go get` is not recommended)
+
+Contributors:
+
+- All code PR must be labeled with :bug: (patch fixes), :sparkles: (backwards-compatible features), or :warning: (breaking changes)
+- Breaking changes will find their way into the next major release, other changes will go into an semi-immediate patch or minor release
+- For a quick PR template suggesting the right information, use one of these PR templates:
+ * [Breaking Changes/Features](/.github/PULL_REQUEST_TEMPLATE/breaking_change.md)
+ * [Backwards-Compatible Features](/.github/PULL_REQUEST_TEMPLATE/compat_feature.md)
+ * [Bug fixes](/.github/PULL_REQUEST_TEMPLATE/bug_fix.md)
+ * [Documentation Changes](/.github/PULL_REQUEST_TEMPLATE/docs.md)
+ * [Test/Build/Other Changes](/.github/PULL_REQUEST_TEMPLATE/other.md)
+
+## Compatibility
+
+Every minor version of controller-runtime has been tested with a specific minor version of client-go. A controller-runtime minor version *may* be compatible with
+other client-go minor versions, but this is by chance and neither supported nor tested. In general, we create one minor version of controller-runtime
+for each minor version of client-go and other k8s.io/* dependencies.
+
+The minimum Go version of controller-runtime is the highest minimum Go version of our Go dependencies. Usually, this will
+be identical to the minimum Go version of the corresponding k8s.io/* dependencies.
+
+Compatible k8s.io/*, client-go and minimum Go versions can be looked up in our [go.mod](go.mod) file.
+
+| | k8s.io/*, client-go | minimum Go version |
+|----------|:-------------------:|:------------------:|
+| CR v0.20 | v0.32 | 1.23 |
+| CR v0.19 | v0.31 | 1.22 |
+| CR v0.18 | v0.30 | 1.22 |
+| CR v0.17 | v0.29 | 1.21 |
+| CR v0.16 | v0.28 | 1.20 |
+| CR v0.15 | v0.27 | 1.20 |
+
+## FAQ
+
+See [FAQ.md](FAQ.md)
+
+## Community, discussion, contribution, and support
+
+Learn how to engage with the Kubernetes community on the [community page](http://kubernetes.io/community/).
+
+controller-runtime is a subproject of the [kubebuilder](https://github.com/kubernetes-sigs/kubebuilder) project
+in sig apimachinery.
+
+You can reach the maintainers of this project at:
+
+- Slack channel: [#controller-runtime](https://kubernetes.slack.com/archives/C02MRBMN00Z)
+- Google Group: [kubebuilder@googlegroups.com](https://groups.google.com/forum/#!forum/kubebuilder)
+
+## Contributing
+
+Contributions are greatly appreciated. The maintainers actively manage the issues list, and try to highlight issues suitable for newcomers.
+The project follows the typical GitHub pull request model. See [CONTRIBUTING.md](CONTRIBUTING.md) for more details.
+Before starting any work, please either comment on an existing issue, or file a new one.
+
+## Code of conduct
+
+Participation in the Kubernetes community is governed by the [Kubernetes Code of Conduct](code-of-conduct.md).
diff --git a/vendor/sigs.k8s.io/controller-runtime/RELEASE.md b/vendor/sigs.k8s.io/controller-runtime/RELEASE.md
new file mode 100644
index 00000000000..2a857b976e3
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/RELEASE.md
@@ -0,0 +1,51 @@
+# Release Process
+
+The Kubernetes controller-runtime Project is released on an as-needed basis. The process is as follows:
+
+**Note:** Releases are done from the `release-MAJOR.MINOR` branches. For PATCH releases is not required
+to create a new branch you will just need to ensure that all big fixes are cherry-picked into the respective
+`release-MAJOR.MINOR` branch. To know more about versioning check https://semver.org/.
+
+## How to do a release
+
+### Create the new branch and the release tag
+
+1. Create a new branch `git checkout -b release-` from main
+2. Push the new branch to the remote repository
+
+### Now, let's generate the changelog
+
+1. Create the changelog from the new branch `release-` (`git checkout release-`).
+You will need to use the [kubebuilder-release-tools][kubebuilder-release-tools] to generate the notes. See [here][release-notes-generation]
+
+> **Note**
+> - You will need to have checkout locally from the remote repository the previous branch
+> - Also, ensure that you fetch all tags from the remote `git fetch --all --tags`
+
+### Draft a new release from GitHub
+
+1. Create a new tag with the correct version from the new `release-` branch
+2. Add the changelog on it and publish. Now, the code source is released !
+
+### Add a new Prow test the for the new branch release
+
+1. Create a new prow test under [github.com/kubernetes/test-infra/tree/master/config/jobs/kubernetes-sigs/controller-runtime](https://github.com/kubernetes/test-infra/tree/master/config/jobs/kubernetes-sigs/controller-runtime)
+for the new `release-` branch. (i.e. for the `0.11.0` release see the PR: https://github.com/kubernetes/test-infra/pull/25205)
+2. Ping the infra PR in the controller-runtime slack channel for reviews.
+
+### Announce the new release:
+
+1. Publish on the Slack channel the new release, i.e:
+
+````
+:announce: Controller-Runtime v0.12.0 has been released!
+This release includes a Kubernetes dependency bump to v1.24.
+For more info, see the release page: https://github.com/kubernetes-sigs/controller-runtime/releases.
+ :tada: Thanks to all our contributors!
+````
+
+2. An announcement email is sent to `kubebuilder@googlegroups.com` with the subject `[ANNOUNCE] Controller-Runtime $VERSION is released`
+
+[kubebuilder-release-tools]: https://github.com/kubernetes-sigs/kubebuilder-release-tools
+[release-notes-generation]: https://github.com/kubernetes-sigs/kubebuilder-release-tools/blob/master/README.md#release-notes-generation
+[release-process]: https://github.com/kubernetes-sigs/kubebuilder/blob/master/VERSIONING.md#releasing
diff --git a/vendor/sigs.k8s.io/controller-runtime/SECURITY_CONTACTS b/vendor/sigs.k8s.io/controller-runtime/SECURITY_CONTACTS
new file mode 100644
index 00000000000..9c5241c6b42
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/SECURITY_CONTACTS
@@ -0,0 +1,15 @@
+# Defined below are the security contacts for this repo.
+#
+# They are the contact point for the Product Security Team to reach out
+# to for triaging and handling of incoming issues.
+#
+# The below names agree to abide by the
+# [Embargo Policy](https://github.com/kubernetes/sig-release/blob/master/security-release-process-documentation/security-release-process.md#embargo-policy)
+# and will be removed and replaced if they violate that agreement.
+#
+# DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE
+# INSTRUCTIONS AT https://kubernetes.io/security/
+
+alvaroaleman
+sbueringer
+vincepri
diff --git a/vendor/sigs.k8s.io/controller-runtime/TMP-LOGGING.md b/vendor/sigs.k8s.io/controller-runtime/TMP-LOGGING.md
new file mode 100644
index 00000000000..97e091fd48a
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/TMP-LOGGING.md
@@ -0,0 +1,169 @@
+Logging Guidelines
+==================
+
+controller-runtime uses a kind of logging called *structured logging*. If
+you've used a library like Zap or logrus before, you'll be familiar with
+the concepts we use. If you've only used a logging library like the "log"
+package (in the Go standard library) or "glog" (in Kubernetes), you'll
+need to adjust how you think about logging a bit.
+
+### Getting Started With Structured Logging
+
+With structured logging, we associate a *constant* log message with some
+variable key-value pairs. For instance, suppose we wanted to log that we
+were starting reconciliation on a pod. In the Go standard library logger,
+we might write:
+
+```go
+log.Printf("starting reconciliation for pod %s/%s", podNamespace, podName)
+```
+
+In controller-runtime, we'd instead write:
+
+```go
+logger.Info("starting reconciliation", "pod", req.NamespacedName)
+```
+
+or even write
+
+```go
+func (r *Reconciler) Reconcile(req reconcile.Request) (reconcile.Response, error) {
+ logger := logger.WithValues("pod", req.NamespacedName)
+ // do some stuff
+ logger.Info("starting reconciliation")
+}
+```
+
+Notice how we've broken out the information that we want to convey into
+a constant message (`"starting reconciliation"`) and some key-value pairs
+that convey variable information (`"pod", req.NamespacedName`). We've
+there-by added "structure" to our logs, which makes them easier to save
+and search later, as well as correlate with metrics and events.
+
+All of controller-runtime's logging is done via
+[logr](https://github.com/go-logr/logr), a generic interface for
+structured logging. You can use whichever logging library you want to
+implement the actual mechanics of the logging. controller-runtime
+provides some helpers to make it easy to use
+[Zap](https://go.uber.org/zap) as the implementation.
+
+You can configure the logging implementation using
+`"sigs.k8s.io/controller-runtime/pkg/log".SetLogger`. That
+package also contains the convenience functions for setting up Zap.
+
+You can get a handle to the "root" logger using
+`"sigs.k8s.io/controller-runtime/pkg/log".Log`, and can then call
+`WithName` to create individual named loggers. You can call `WithName`
+repeatedly to chain names together:
+
+```go
+logger := log.Log.WithName("controller").WithName("replicaset")
+// in reconcile...
+logger = logger.WithValues("replicaset", req.NamespacedName)
+// later on in reconcile...
+logger.Info("doing things with pods", "pod", newPod)
+```
+
+As seen above, you can also call `WithValue` to create a new sub-logger
+that always attaches some key-value pairs to a logger.
+
+Finally, you can use `V(1)` to mark a particular log line as "debug" logs:
+
+```go
+logger.V(1).Info("this is particularly verbose!", "state of the world",
+allKubernetesObjectsEverywhere)
+```
+
+While it's possible to use higher log levels, it's recommended that you
+stick with `V(1)` or `V(0)` (which is equivalent to not specifying `V`),
+and then filter later based on key-value pairs or messages; different
+numbers tend to lose meaning easily over time, and you'll be left
+wondering why particular logs lines are at `V(5)` instead of `V(7)`.
+
+## Logging errors
+
+Errors should *always* be logged with `log.Error`, which allows logr
+implementations to provide special handling of errors (for instance,
+providing stack traces in debug mode).
+
+It's acceptable to log call `log.Error` with a nil error object. This
+conveys that an error occurred in some capacity, but that no actual
+`error` object was involved.
+
+Errors returned by the `Reconcile` implementation of the `Reconciler` interface are commonly logged as a `Reconciler error`.
+It's a developer choice to create an additional error log in the `Reconcile` implementation so a more specific file name and line for the error are returned.
+
+## Logging messages
+
+- Don't put variable content in your messages -- use key-value pairs for
+ that. Never use `fmt.Sprintf` in your message.
+
+- Try to match the terminology in your messages with your key-value pairs
+ -- for instance, if you have a key-value pairs `api version`, use the
+ term `APIVersion` instead of `GroupVersion` in your message.
+
+## Logging Kubernetes Objects
+
+Kubernetes objects should be logged directly, like `log.Info("this is
+a Kubernetes object", "pod", somePod)`. controller-runtime provides
+a special encoder for Zap that will transform Kubernetes objects into
+`name, namespace, apiVersion, kind` objects, when available and not in
+development mode. Other logr implementations should implement similar
+logic.
+
+## Logging Structured Values (Key-Value pairs)
+
+- Use lower-case, space separated keys. For example `object` for objects,
+ `api version` for `APIVersion`
+
+- Be consistent across your application, and with controller-runtime when
+ possible.
+
+- Try to be brief but descriptive.
+
+- Match terminology in keys with terminology in the message.
+
+- Be careful logging non-Kubernetes objects verbatim if they're very
+ large.
+
+### Groups, Versions, and Kinds
+
+- Kinds should not be logged alone (they're meaningless alone). Use
+ a `GroupKind` object to log them instead, or a `GroupVersionKind` when
+ version is relevant.
+
+- If you need to log an API version string, use `api version` as the key
+ (formatted as with a `GroupVersion`, or as received directly from API
+ discovery).
+
+### Objects and Types
+
+- If code works with a generic Kubernetes `runtime.Object`, use the
+ `object` key. For specific objects, prefer the resource name as the key
+ (e.g. `pod` for `v1.Pod` objects).
+
+- For non-Kubernetes objects, the `object` key may also be used, if you
+ accept a generic interface.
+
+- When logging a raw type, log it using the `type` key, with a value of
+ `fmt.Sprintf("%T", typ)`
+
+- If there's specific context around a type, the key may be more specific,
+ but should end with `type` -- for instance, `OwnerType` should be logged
+ as `owner` in the context of `log.Error(err, "Could not get ObjectKinds
+ for OwnerType", `owner type`, fmt.Sprintf("%T"))`. When possible, favor
+ communicating kind instead.
+
+### Multiple things
+
+- When logging multiple things, simply pluralize the key.
+
+### controller-runtime Specifics
+
+- Reconcile requests should be logged as `request`, although normal code
+ should favor logging the key.
+
+- Reconcile keys should be logged as with the same key as if you were
+ logging the object directly (e.g. `log.Info("reconciling pod", "pod",
+ req.NamespacedName)`). This ends up having a similar effect to logging
+ the object directly.
diff --git a/vendor/sigs.k8s.io/controller-runtime/VERSIONING.md b/vendor/sigs.k8s.io/controller-runtime/VERSIONING.md
new file mode 100644
index 00000000000..2c0f2f9b2d4
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/VERSIONING.md
@@ -0,0 +1,30 @@
+# Versioning and Branching in controller-runtime
+
+We follow the [common KubeBuilder versioning guidelines][guidelines], and
+use the corresponding tooling.
+
+For the purposes of the aforementioned guidelines, controller-runtime
+counts as a "library project", but otherwise follows the guidelines
+exactly.
+
+[guidelines]: https://sigs.k8s.io/kubebuilder-release-tools/VERSIONING.md
+
+## Compatibility and Release Support
+
+For release branches, we generally tend to support backporting one (1)
+major release (`release-{X-1}` or `release-0.{Y-1}`), but may go back
+further if the need arises and is very pressing (e.g. security updates).
+
+### Dependency Support
+
+Note the [guidelines on dependency versions][dep-versions]. Particularly:
+
+- We **DO** guarantee Kubernetes REST API compatibility -- if a given
+ version of controller-runtime stops working with what should be
+ a supported version of Kubernetes, this is almost certainly a bug.
+
+- We **DO NOT** guarantee any particular compatibility matrix between
+ kubernetes library dependencies (client-go, apimachinery, etc); Such
+ compatibility is infeasible due to the way those libraries are versioned.
+
+[dep-versions]: https://sigs.k8s.io/kubebuilder-release-tools/VERSIONING.md#kubernetes-version-compatibility
diff --git a/vendor/sigs.k8s.io/controller-runtime/alias.go b/vendor/sigs.k8s.io/controller-runtime/alias.go
new file mode 100644
index 00000000000..3e1ccdcf08c
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/alias.go
@@ -0,0 +1,151 @@
+/*
+Copyright 2018 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 controllerruntime
+
+import (
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "sigs.k8s.io/controller-runtime/pkg/builder"
+ "sigs.k8s.io/controller-runtime/pkg/client/config"
+ "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
+ "sigs.k8s.io/controller-runtime/pkg/log"
+ "sigs.k8s.io/controller-runtime/pkg/manager"
+ "sigs.k8s.io/controller-runtime/pkg/manager/signals"
+ "sigs.k8s.io/controller-runtime/pkg/reconcile"
+ "sigs.k8s.io/controller-runtime/pkg/scheme"
+)
+
+// Builder builds an Application ControllerManagedBy (e.g. Operator) and returns a manager.Manager to start it.
+type Builder = builder.Builder
+
+// Request contains the information necessary to reconcile a Kubernetes object. This includes the
+// information to uniquely identify the object - its Name and Namespace. It does NOT contain information about
+// any specific Event or the object contents itself.
+type Request = reconcile.Request
+
+// Result contains the result of a Reconciler invocation.
+type Result = reconcile.Result
+
+// Manager initializes shared dependencies such as Caches and Clients, and provides them to Runnables.
+// A Manager is required to create Controllers.
+type Manager = manager.Manager
+
+// Options are the arguments for creating a new Manager.
+type Options = manager.Options
+
+// SchemeBuilder builds a new Scheme for mapping go types to Kubernetes GroupVersionKinds.
+type SchemeBuilder = scheme.Builder
+
+// GroupVersion contains the "group" and the "version", which uniquely identifies the API.
+type GroupVersion = schema.GroupVersion
+
+// GroupResource specifies a Group and a Resource, but does not force a version. This is useful for identifying
+// concepts during lookup stages without having partially valid types.
+type GroupResource = schema.GroupResource
+
+// TypeMeta describes an individual object in an API response or request
+// with strings representing the type of the object and its API schema version.
+// Structures that are versioned or persisted should inline TypeMeta.
+//
+// +k8s:deepcopy-gen=false
+type TypeMeta = metav1.TypeMeta
+
+// ObjectMeta is metadata that all persisted resources must have, which includes all objects
+// users must create.
+type ObjectMeta = metav1.ObjectMeta
+
+var (
+ // RegisterFlags registers flag variables to the given FlagSet if not already registered.
+ // It uses the default command line FlagSet, if none is provided. Currently, it only registers the kubeconfig flag.
+ RegisterFlags = config.RegisterFlags
+
+ // GetConfigOrDie creates a *rest.Config for talking to a Kubernetes apiserver.
+ // If --kubeconfig is set, will use the kubeconfig file at that location. Otherwise will assume running
+ // in cluster and use the cluster provided kubeconfig.
+ //
+ // Will log an error and exit if there is an error creating the rest.Config.
+ GetConfigOrDie = config.GetConfigOrDie
+
+ // GetConfig creates a *rest.Config for talking to a Kubernetes apiserver.
+ // If --kubeconfig is set, will use the kubeconfig file at that location. Otherwise will assume running
+ // in cluster and use the cluster provided kubeconfig.
+ //
+ // Config precedence
+ //
+ // * --kubeconfig flag pointing at a file
+ //
+ // * KUBECONFIG environment variable pointing at a file
+ //
+ // * In-cluster config if running in cluster
+ //
+ // * $HOME/.kube/config if exists.
+ GetConfig = config.GetConfig
+
+ // NewControllerManagedBy returns a new controller builder that will be started by the provided Manager.
+ NewControllerManagedBy = builder.ControllerManagedBy
+
+ // NewWebhookManagedBy returns a new webhook builder that will be started by the provided Manager.
+ NewWebhookManagedBy = builder.WebhookManagedBy
+
+ // NewManager returns a new Manager for creating Controllers.
+ // Note that if ContentType in the given config is not set, "application/vnd.kubernetes.protobuf"
+ // will be used for all built-in resources of Kubernetes, and "application/json" is for other types
+ // including all CRD resources.
+ NewManager = manager.New
+
+ // CreateOrUpdate creates or updates the given object obj in the Kubernetes
+ // cluster. The object's desired state should be reconciled with the existing
+ // state using the passed in ReconcileFn. obj must be a struct pointer so that
+ // obj can be updated with the content returned by the Server.
+ //
+ // It returns the executed operation and an error.
+ CreateOrUpdate = controllerutil.CreateOrUpdate
+
+ // SetControllerReference sets owner as a Controller OwnerReference on owned.
+ // This is used for garbage collection of the owned object and for
+ // reconciling the owner object on changes to owned (with a Watch + EnqueueRequestForOwner).
+ // Since only one OwnerReference can be a controller, it returns an error if
+ // there is another OwnerReference with Controller flag set.
+ SetControllerReference = controllerutil.SetControllerReference
+
+ // SetupSignalHandler registers for SIGTERM and SIGINT. A context is returned
+ // which is canceled on one of these signals. If a second signal is caught, the program
+ // is terminated with exit code 1.
+ SetupSignalHandler = signals.SetupSignalHandler
+
+ // Log is the base logger used by controller-runtime. It delegates
+ // to another logr.Logger. You *must* call SetLogger to
+ // get any actual logging.
+ Log = log.Log
+
+ // LoggerFrom returns a logger with predefined values from a context.Context.
+ // The logger, when used with controllers, can be expected to contain basic information about the object
+ // that's being reconciled like:
+ // - `reconciler group` and `reconciler kind` coming from the For(...) object passed in when building a controller.
+ // - `name` and `namespace` from the reconciliation request.
+ //
+ // This is meant to be used with the context supplied in a struct that satisfies the Reconciler interface.
+ LoggerFrom = log.FromContext
+
+ // LoggerInto takes a context and sets the logger as one of its keys.
+ //
+ // This is meant to be used in reconcilers to enrich the logger within a context with additional values.
+ LoggerInto = log.IntoContext
+
+ // SetLogger sets a concrete logging implementation for all deferred Loggers.
+ SetLogger = log.SetLogger
+)
diff --git a/vendor/sigs.k8s.io/controller-runtime/code-of-conduct.md b/vendor/sigs.k8s.io/controller-runtime/code-of-conduct.md
new file mode 100644
index 00000000000..0d15c00cf32
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/code-of-conduct.md
@@ -0,0 +1,3 @@
+# Kubernetes Community Code of Conduct
+
+Please refer to our [Kubernetes Community Code of Conduct](https://git.k8s.io/community/code-of-conduct.md)
diff --git a/vendor/sigs.k8s.io/controller-runtime/doc.go b/vendor/sigs.k8s.io/controller-runtime/doc.go
new file mode 100644
index 00000000000..0319bc3ff86
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/doc.go
@@ -0,0 +1,128 @@
+/*
+Copyright 2018 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 controllerruntime provides tools to construct Kubernetes-style
+// controllers that manipulate both Kubernetes CRDs and aggregated/built-in
+// Kubernetes APIs.
+//
+// It defines easy helpers for the common use cases when building CRDs, built
+// on top of customizable layers of abstraction. Common cases should be easy,
+// and uncommon cases should be possible. In general, controller-runtime tries
+// to guide users towards Kubernetes controller best-practices.
+//
+// # Getting Started
+//
+// The main entrypoint for controller-runtime is this root package, which
+// contains all of the common types needed to get started building controllers:
+//
+// import (
+// ctrl "sigs.k8s.io/controller-runtime"
+// )
+//
+// The examples in this package walk through a basic controller setup. The
+// kubebuilder book (https://book.kubebuilder.io) has some more in-depth
+// walkthroughs.
+//
+// controller-runtime favors structs with sane defaults over constructors, so
+// it's fairly common to see structs being used directly in controller-runtime.
+//
+// # Organization
+//
+// A brief-ish walkthrough of the layout of this library can be found below. Each
+// package contains more information about how to use it.
+//
+// Frequently asked questions about using controller-runtime and designing
+// controllers can be found at
+// https://github.com/kubernetes-sigs/controller-runtime/blob/main/FAQ.md.
+//
+// # Managers
+//
+// Every controller and webhook is ultimately run by a Manager (pkg/manager). A
+// manager is responsible for running controllers and webhooks, and setting up
+// common dependencies, like shared caches and clients, as
+// well as managing leader election (pkg/leaderelection). Managers are
+// generally configured to gracefully shut down controllers on pod termination
+// by wiring up a signal handler (pkg/manager/signals).
+//
+// # Controllers
+//
+// Controllers (pkg/controller) use events (pkg/event) to eventually trigger
+// reconcile requests. They may be constructed manually, but are often
+// constructed with a Builder (pkg/builder), which eases the wiring of event
+// sources (pkg/source), like Kubernetes API object changes, to event handlers
+// (pkg/handler), like "enqueue a reconcile request for the object owner".
+// Predicates (pkg/predicate) can be used to filter which events actually
+// trigger reconciles. There are pre-written utilities for the common cases, and
+// interfaces and helpers for advanced cases.
+//
+// # Reconcilers
+//
+// Controller logic is implemented in terms of Reconcilers (pkg/reconcile). A
+// Reconciler implements a function which takes a reconcile Request containing
+// the name and namespace of the object to reconcile, reconciles the object,
+// and returns a Response or an error indicating whether to requeue for a
+// second round of processing.
+//
+// # Clients and Caches
+//
+// Reconcilers use Clients (pkg/client) to access API objects. The default
+// client provided by the manager reads from a local shared cache (pkg/cache)
+// and writes directly to the API server, but clients can be constructed that
+// only talk to the API server, without a cache. The Cache will auto-populate
+// with watched objects, as well as when other structured objects are
+// requested. The default split client does not promise to invalidate the cache
+// during writes (nor does it promise sequential create/get coherence), and code
+// should not assume a get immediately following a create/update will return
+// the updated resource. Caches may also have indexes, which can be created via
+// a FieldIndexer (pkg/client) obtained from the manager. Indexes can used to
+// quickly and easily look up all objects with certain fields set. Reconcilers
+// may retrieve event recorders (pkg/recorder) to emit events using the
+// manager.
+//
+// # Schemes
+//
+// Clients, Caches, and many other things in Kubernetes use Schemes
+// (pkg/scheme) to associate Go types to Kubernetes API Kinds
+// (Group-Version-Kinds, to be specific).
+//
+// # Webhooks
+//
+// Similarly, webhooks (pkg/webhook/admission) may be implemented directly, but
+// are often constructed using a builder (pkg/webhook/admission/builder). They
+// are run via a server (pkg/webhook) which is managed by a Manager.
+//
+// # Logging and Metrics
+//
+// Logging (pkg/log) in controller-runtime is done via structured logs, using a
+// log set of interfaces called logr
+// (https://pkg.go.dev/github.com/go-logr/logr). While controller-runtime
+// provides easy setup for using Zap (https://go.uber.org/zap, pkg/log/zap),
+// you can provide any implementation of logr as the base logger for
+// controller-runtime.
+//
+// Metrics (pkg/metrics) provided by controller-runtime are registered into a
+// controller-runtime-specific Prometheus metrics registry. The manager can
+// serve these by an HTTP endpoint, and additional metrics may be registered to
+// this Registry as normal.
+//
+// # Testing
+//
+// You can easily build integration and unit tests for your controllers and
+// webhooks using the test Environment (pkg/envtest). This will automatically
+// stand up a copy of etcd and kube-apiserver, and provide the correct options
+// to connect to the API server. It's designed to work well with the Ginkgo
+// testing framework, but should work with any testing setup.
+package controllerruntime
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/builder/controller.go b/vendor/sigs.k8s.io/controller-runtime/pkg/builder/controller.go
new file mode 100644
index 00000000000..6d906f6e52c
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/builder/controller.go
@@ -0,0 +1,466 @@
+/*
+Copyright 2018 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 builder
+
+import (
+ "errors"
+ "fmt"
+ "reflect"
+ "strings"
+
+ "github.com/go-logr/logr"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "k8s.io/klog/v2"
+
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/client/apiutil"
+ "sigs.k8s.io/controller-runtime/pkg/controller"
+ "sigs.k8s.io/controller-runtime/pkg/handler"
+ "sigs.k8s.io/controller-runtime/pkg/manager"
+ "sigs.k8s.io/controller-runtime/pkg/predicate"
+ "sigs.k8s.io/controller-runtime/pkg/reconcile"
+ "sigs.k8s.io/controller-runtime/pkg/source"
+)
+
+// project represents other forms that we can use to
+// send/receive a given resource (metadata-only, unstructured, etc).
+type objectProjection int
+
+const (
+ // projectAsNormal doesn't change the object from the form given.
+ projectAsNormal objectProjection = iota
+ // projectAsMetadata turns this into a metadata-only watch.
+ projectAsMetadata
+)
+
+// Builder builds a Controller.
+type Builder = TypedBuilder[reconcile.Request]
+
+// TypedBuilder builds a Controller. The request is the request type
+// that is passed to the workqueue and then to the Reconciler.
+// The workqueue de-duplicates identical requests.
+type TypedBuilder[request comparable] struct {
+ forInput ForInput
+ ownsInput []OwnsInput
+ rawSources []source.TypedSource[request]
+ watchesInput []WatchesInput[request]
+ mgr manager.Manager
+ globalPredicates []predicate.Predicate
+ ctrl controller.TypedController[request]
+ ctrlOptions controller.TypedOptions[request]
+ name string
+ newController func(name string, mgr manager.Manager, options controller.TypedOptions[request]) (controller.TypedController[request], error)
+}
+
+// ControllerManagedBy returns a new controller builder that will be started by the provided Manager.
+func ControllerManagedBy(m manager.Manager) *Builder {
+ return TypedControllerManagedBy[reconcile.Request](m)
+}
+
+// TypedControllerManagedBy returns a new typed controller builder that will be started by the provided Manager.
+func TypedControllerManagedBy[request comparable](m manager.Manager) *TypedBuilder[request] {
+ return &TypedBuilder[request]{mgr: m}
+}
+
+// ForInput represents the information set by the For method.
+type ForInput struct {
+ object client.Object
+ predicates []predicate.Predicate
+ objectProjection objectProjection
+ err error
+}
+
+// For defines the type of Object being *reconciled*, and configures the ControllerManagedBy to respond to create / delete /
+// update events by *reconciling the object*.
+//
+// This is the equivalent of calling
+// Watches(source.Kind(cache, &Type{}, &handler.EnqueueRequestForObject{})).
+func (blder *TypedBuilder[request]) For(object client.Object, opts ...ForOption) *TypedBuilder[request] {
+ if blder.forInput.object != nil {
+ blder.forInput.err = fmt.Errorf("For(...) should only be called once, could not assign multiple objects for reconciliation")
+ return blder
+ }
+ input := ForInput{object: object}
+ for _, opt := range opts {
+ opt.ApplyToFor(&input)
+ }
+
+ blder.forInput = input
+ return blder
+}
+
+// OwnsInput represents the information set by Owns method.
+type OwnsInput struct {
+ matchEveryOwner bool
+ object client.Object
+ predicates []predicate.Predicate
+ objectProjection objectProjection
+}
+
+// Owns defines types of Objects being *generated* by the ControllerManagedBy, and configures the ControllerManagedBy to respond to
+// create / delete / update events by *reconciling the owner object*.
+//
+// The default behavior reconciles only the first controller-type OwnerReference of the given type.
+// Use Owns(object, builder.MatchEveryOwner) to reconcile all owners.
+//
+// By default, this is the equivalent of calling
+// Watches(source.Kind(cache, &Type{}, handler.EnqueueRequestForOwner([...], &OwnerType{}, OnlyControllerOwner()))).
+func (blder *TypedBuilder[request]) Owns(object client.Object, opts ...OwnsOption) *TypedBuilder[request] {
+ input := OwnsInput{object: object}
+ for _, opt := range opts {
+ opt.ApplyToOwns(&input)
+ }
+
+ blder.ownsInput = append(blder.ownsInput, input)
+ return blder
+}
+
+type untypedWatchesInput interface {
+ setPredicates([]predicate.Predicate)
+ setObjectProjection(objectProjection)
+}
+
+// WatchesInput represents the information set by Watches method.
+type WatchesInput[request comparable] struct {
+ obj client.Object
+ handler handler.TypedEventHandler[client.Object, request]
+ predicates []predicate.Predicate
+ objectProjection objectProjection
+}
+
+func (w *WatchesInput[request]) setPredicates(predicates []predicate.Predicate) {
+ w.predicates = predicates
+}
+
+func (w *WatchesInput[request]) setObjectProjection(objectProjection objectProjection) {
+ w.objectProjection = objectProjection
+}
+
+// Watches defines the type of Object to watch, and configures the ControllerManagedBy to respond to create / delete /
+// update events by *reconciling the object* with the given EventHandler.
+//
+// This is the equivalent of calling
+// WatchesRawSource(source.Kind(cache, object, eventHandler, predicates...)).
+func (blder *TypedBuilder[request]) Watches(
+ object client.Object,
+ eventHandler handler.TypedEventHandler[client.Object, request],
+ opts ...WatchesOption,
+) *TypedBuilder[request] {
+ input := WatchesInput[request]{
+ obj: object,
+ handler: eventHandler,
+ }
+ for _, opt := range opts {
+ opt.ApplyToWatches(&input)
+ }
+
+ blder.watchesInput = append(blder.watchesInput, input)
+
+ return blder
+}
+
+// WatchesMetadata is the same as Watches, but forces the internal cache to only watch PartialObjectMetadata.
+//
+// This is useful when watching lots of objects, really big objects, or objects for which you only know
+// the GVK, but not the structure. You'll need to pass metav1.PartialObjectMetadata to the client
+// when fetching objects in your reconciler, otherwise you'll end up with a duplicate structured or unstructured cache.
+//
+// When watching a resource with metadata only, for example the v1.Pod, you should not Get and List using the v1.Pod type.
+// Instead, you should use the special metav1.PartialObjectMetadata type.
+//
+// ❌ Incorrect:
+//
+// pod := &v1.Pod{}
+// mgr.GetClient().Get(ctx, nsAndName, pod)
+//
+// ✅ Correct:
+//
+// pod := &metav1.PartialObjectMetadata{}
+// pod.SetGroupVersionKind(schema.GroupVersionKind{
+// Group: "",
+// Version: "v1",
+// Kind: "Pod",
+// })
+// mgr.GetClient().Get(ctx, nsAndName, pod)
+//
+// In the first case, controller-runtime will create another cache for the
+// concrete type on top of the metadata cache; this increases memory
+// consumption and leads to race conditions as caches are not in sync.
+func (blder *TypedBuilder[request]) WatchesMetadata(
+ object client.Object,
+ eventHandler handler.TypedEventHandler[client.Object, request],
+ opts ...WatchesOption,
+) *TypedBuilder[request] {
+ opts = append(opts, OnlyMetadata)
+ return blder.Watches(object, eventHandler, opts...)
+}
+
+// WatchesRawSource exposes the lower-level ControllerManagedBy Watches functions through the builder.
+//
+// WatchesRawSource does not respect predicates configured through WithEventFilter.
+//
+// WatchesRawSource makes it possible to use typed handlers and predicates with `source.Kind` as well as custom source implementations.
+func (blder *TypedBuilder[request]) WatchesRawSource(src source.TypedSource[request]) *TypedBuilder[request] {
+ blder.rawSources = append(blder.rawSources, src)
+
+ return blder
+}
+
+// WithEventFilter sets the event filters, to filter which create/update/delete/generic events eventually
+// trigger reconciliations. For example, filtering on whether the resource version has changed.
+// Given predicate is added for all watched objects and thus must be able to deal with the type
+// of all watched objects.
+//
+// Defaults to the empty list.
+func (blder *TypedBuilder[request]) WithEventFilter(p predicate.Predicate) *TypedBuilder[request] {
+ blder.globalPredicates = append(blder.globalPredicates, p)
+ return blder
+}
+
+// WithOptions overrides the controller options used in doController. Defaults to empty.
+func (blder *TypedBuilder[request]) WithOptions(options controller.TypedOptions[request]) *TypedBuilder[request] {
+ blder.ctrlOptions = options
+ return blder
+}
+
+// WithLogConstructor overrides the controller options's LogConstructor.
+func (blder *TypedBuilder[request]) WithLogConstructor(logConstructor func(*request) logr.Logger) *TypedBuilder[request] {
+ blder.ctrlOptions.LogConstructor = logConstructor
+ return blder
+}
+
+// Named sets the name of the controller to the given name. The name shows up
+// in metrics, among other things, and thus should be a prometheus compatible name
+// (underscores and alphanumeric characters only).
+//
+// By default, controllers are named using the lowercase version of their kind.
+//
+// The name must be unique as it is used to identify the controller in metrics and logs.
+func (blder *TypedBuilder[request]) Named(name string) *TypedBuilder[request] {
+ blder.name = name
+ return blder
+}
+
+// Complete builds the Application Controller.
+func (blder *TypedBuilder[request]) Complete(r reconcile.TypedReconciler[request]) error {
+ _, err := blder.Build(r)
+ return err
+}
+
+// Build builds the Application Controller and returns the Controller it created.
+func (blder *TypedBuilder[request]) Build(r reconcile.TypedReconciler[request]) (controller.TypedController[request], error) {
+ if r == nil {
+ return nil, fmt.Errorf("must provide a non-nil Reconciler")
+ }
+ if blder.mgr == nil {
+ return nil, fmt.Errorf("must provide a non-nil Manager")
+ }
+ if blder.forInput.err != nil {
+ return nil, blder.forInput.err
+ }
+
+ // Set the ControllerManagedBy
+ if err := blder.doController(r); err != nil {
+ return nil, err
+ }
+
+ // Set the Watch
+ if err := blder.doWatch(); err != nil {
+ return nil, err
+ }
+
+ return blder.ctrl, nil
+}
+
+func (blder *TypedBuilder[request]) project(obj client.Object, proj objectProjection) (client.Object, error) {
+ switch proj {
+ case projectAsNormal:
+ return obj, nil
+ case projectAsMetadata:
+ metaObj := &metav1.PartialObjectMetadata{}
+ gvk, err := apiutil.GVKForObject(obj, blder.mgr.GetScheme())
+ if err != nil {
+ return nil, fmt.Errorf("unable to determine GVK of %T for a metadata-only watch: %w", obj, err)
+ }
+ metaObj.SetGroupVersionKind(gvk)
+ return metaObj, nil
+ default:
+ panic(fmt.Sprintf("unexpected projection type %v on type %T, should not be possible since this is an internal field", proj, obj))
+ }
+}
+
+func (blder *TypedBuilder[request]) doWatch() error {
+ // Reconcile type
+ if blder.forInput.object != nil {
+ obj, err := blder.project(blder.forInput.object, blder.forInput.objectProjection)
+ if err != nil {
+ return err
+ }
+
+ if reflect.TypeFor[request]() != reflect.TypeOf(reconcile.Request{}) {
+ return fmt.Errorf("For() can only be used with reconcile.Request, got %T", *new(request))
+ }
+
+ var hdler handler.TypedEventHandler[client.Object, request]
+ reflect.ValueOf(&hdler).Elem().Set(reflect.ValueOf(&handler.EnqueueRequestForObject{}))
+ allPredicates := append([]predicate.Predicate(nil), blder.globalPredicates...)
+ allPredicates = append(allPredicates, blder.forInput.predicates...)
+ src := source.TypedKind(blder.mgr.GetCache(), obj, hdler, allPredicates...)
+ if err := blder.ctrl.Watch(src); err != nil {
+ return err
+ }
+ }
+
+ // Watches the managed types
+ if len(blder.ownsInput) > 0 && blder.forInput.object == nil {
+ return errors.New("Owns() can only be used together with For()")
+ }
+ for _, own := range blder.ownsInput {
+ obj, err := blder.project(own.object, own.objectProjection)
+ if err != nil {
+ return err
+ }
+ opts := []handler.OwnerOption{}
+ if !own.matchEveryOwner {
+ opts = append(opts, handler.OnlyControllerOwner())
+ }
+
+ var hdler handler.TypedEventHandler[client.Object, request]
+ reflect.ValueOf(&hdler).Elem().Set(reflect.ValueOf(handler.EnqueueRequestForOwner(
+ blder.mgr.GetScheme(), blder.mgr.GetRESTMapper(),
+ blder.forInput.object,
+ opts...,
+ )))
+ allPredicates := append([]predicate.Predicate(nil), blder.globalPredicates...)
+ allPredicates = append(allPredicates, own.predicates...)
+ src := source.TypedKind(blder.mgr.GetCache(), obj, hdler, allPredicates...)
+ if err := blder.ctrl.Watch(src); err != nil {
+ return err
+ }
+ }
+
+ // Do the watch requests
+ if len(blder.watchesInput) == 0 && blder.forInput.object == nil && len(blder.rawSources) == 0 {
+ return errors.New("there are no watches configured, controller will never get triggered. Use For(), Owns(), Watches() or WatchesRawSource() to set them up")
+ }
+ for _, w := range blder.watchesInput {
+ projected, err := blder.project(w.obj, w.objectProjection)
+ if err != nil {
+ return fmt.Errorf("failed to project for %T: %w", w.obj, err)
+ }
+ allPredicates := append([]predicate.Predicate(nil), blder.globalPredicates...)
+ allPredicates = append(allPredicates, w.predicates...)
+ if err := blder.ctrl.Watch(source.TypedKind(blder.mgr.GetCache(), projected, w.handler, allPredicates...)); err != nil {
+ return err
+ }
+ }
+ for _, src := range blder.rawSources {
+ if err := blder.ctrl.Watch(src); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func (blder *TypedBuilder[request]) getControllerName(gvk schema.GroupVersionKind, hasGVK bool) (string, error) {
+ if blder.name != "" {
+ return blder.name, nil
+ }
+ if !hasGVK {
+ return "", errors.New("one of For() or Named() must be called")
+ }
+ return strings.ToLower(gvk.Kind), nil
+}
+
+func (blder *TypedBuilder[request]) doController(r reconcile.TypedReconciler[request]) error {
+ globalOpts := blder.mgr.GetControllerOptions()
+
+ ctrlOptions := blder.ctrlOptions
+ if ctrlOptions.Reconciler != nil && r != nil {
+ return errors.New("reconciler was set via WithOptions() and via Build() or Complete()")
+ }
+ if ctrlOptions.Reconciler == nil {
+ ctrlOptions.Reconciler = r
+ }
+
+ // Retrieve the GVK from the object we're reconciling
+ // to pre-populate logger information, and to optionally generate a default name.
+ var gvk schema.GroupVersionKind
+ hasGVK := blder.forInput.object != nil
+ if hasGVK {
+ var err error
+ gvk, err = apiutil.GVKForObject(blder.forInput.object, blder.mgr.GetScheme())
+ if err != nil {
+ return err
+ }
+ }
+
+ // Setup concurrency.
+ if ctrlOptions.MaxConcurrentReconciles == 0 && hasGVK {
+ groupKind := gvk.GroupKind().String()
+
+ if concurrency, ok := globalOpts.GroupKindConcurrency[groupKind]; ok && concurrency > 0 {
+ ctrlOptions.MaxConcurrentReconciles = concurrency
+ }
+ }
+
+ // Setup cache sync timeout.
+ if ctrlOptions.CacheSyncTimeout == 0 && globalOpts.CacheSyncTimeout > 0 {
+ ctrlOptions.CacheSyncTimeout = globalOpts.CacheSyncTimeout
+ }
+
+ controllerName, err := blder.getControllerName(gvk, hasGVK)
+ if err != nil {
+ return err
+ }
+
+ // Setup the logger.
+ if ctrlOptions.LogConstructor == nil {
+ log := blder.mgr.GetLogger().WithValues(
+ "controller", controllerName,
+ )
+ if hasGVK {
+ log = log.WithValues(
+ "controllerGroup", gvk.Group,
+ "controllerKind", gvk.Kind,
+ )
+ }
+
+ ctrlOptions.LogConstructor = func(in *request) logr.Logger {
+ log := log
+
+ if req, ok := any(in).(*reconcile.Request); ok && req != nil {
+ if hasGVK {
+ log = log.WithValues(gvk.Kind, klog.KRef(req.Namespace, req.Name))
+ }
+ log = log.WithValues(
+ "namespace", req.Namespace, "name", req.Name,
+ )
+ }
+ return log
+ }
+ }
+
+ if blder.newController == nil {
+ blder.newController = controller.NewTyped[request]
+ }
+
+ // Build the controller and return.
+ blder.ctrl, err = blder.newController(controllerName, blder.mgr, ctrlOptions)
+ return err
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/builder/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/builder/doc.go
new file mode 100644
index 00000000000..e4df1b709f2
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/builder/doc.go
@@ -0,0 +1,28 @@
+/*
+Copyright 2018 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 builder wraps other controller-runtime libraries and exposes simple
+// patterns for building common Controllers.
+//
+// Projects built with the builder package can trivially be rebased on top of the underlying
+// packages if the project requires more customized behavior in the future.
+package builder
+
+import (
+ logf "sigs.k8s.io/controller-runtime/pkg/internal/log"
+)
+
+var log = logf.RuntimeLog.WithName("builder")
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/builder/options.go b/vendor/sigs.k8s.io/controller-runtime/pkg/builder/options.go
new file mode 100644
index 00000000000..b907b5d0204
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/builder/options.go
@@ -0,0 +1,156 @@
+/*
+Copyright 2018 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 builder
+
+import (
+ "sigs.k8s.io/controller-runtime/pkg/predicate"
+)
+
+// {{{ "Functional" Option Interfaces
+
+// ForOption is some configuration that modifies options for a For request.
+type ForOption interface {
+ // ApplyToFor applies this configuration to the given for input.
+ ApplyToFor(*ForInput)
+}
+
+// OwnsOption is some configuration that modifies options for an owns request.
+type OwnsOption interface {
+ // ApplyToOwns applies this configuration to the given owns input.
+ ApplyToOwns(*OwnsInput)
+}
+
+// WatchesOption is some configuration that modifies options for a watches request.
+type WatchesOption interface {
+ // ApplyToWatches applies this configuration to the given watches options.
+ ApplyToWatches(untypedWatchesInput)
+}
+
+// }}}
+
+// {{{ Multi-Type Options
+
+// WithPredicates sets the given predicates list.
+func WithPredicates(predicates ...predicate.Predicate) Predicates {
+ return Predicates{
+ predicates: predicates,
+ }
+}
+
+// Predicates filters events before enqueuing the keys.
+type Predicates struct {
+ predicates []predicate.Predicate
+}
+
+// ApplyToFor applies this configuration to the given ForInput options.
+func (w Predicates) ApplyToFor(opts *ForInput) {
+ opts.predicates = w.predicates
+}
+
+// ApplyToOwns applies this configuration to the given OwnsInput options.
+func (w Predicates) ApplyToOwns(opts *OwnsInput) {
+ opts.predicates = w.predicates
+}
+
+// ApplyToWatches applies this configuration to the given WatchesInput options.
+func (w Predicates) ApplyToWatches(opts untypedWatchesInput) {
+ opts.setPredicates(w.predicates)
+}
+
+var _ ForOption = &Predicates{}
+var _ OwnsOption = &Predicates{}
+var _ WatchesOption = &Predicates{}
+
+// }}}
+
+// {{{ For & Owns Dual-Type options
+
+// projectAs configures the projection on the input.
+// Currently only OnlyMetadata is supported. We might want to expand
+// this to arbitrary non-special local projections in the future.
+type projectAs objectProjection
+
+// ApplyToFor applies this configuration to the given ForInput options.
+func (p projectAs) ApplyToFor(opts *ForInput) {
+ opts.objectProjection = objectProjection(p)
+}
+
+// ApplyToOwns applies this configuration to the given OwnsInput options.
+func (p projectAs) ApplyToOwns(opts *OwnsInput) {
+ opts.objectProjection = objectProjection(p)
+}
+
+// ApplyToWatches applies this configuration to the given WatchesInput options.
+func (p projectAs) ApplyToWatches(opts untypedWatchesInput) {
+ opts.setObjectProjection(objectProjection(p))
+}
+
+var (
+ // OnlyMetadata tells the controller to *only* cache metadata, and to watch
+ // the API server in metadata-only form. This is useful when watching
+ // lots of objects, really big objects, or objects for which you only know
+ // the GVK, but not the structure. You'll need to pass
+ // metav1.PartialObjectMetadata to the client when fetching objects in your
+ // reconciler, otherwise you'll end up with a duplicate structured or
+ // unstructured cache.
+ //
+ // When watching a resource with OnlyMetadata, for example the v1.Pod, you
+ // should not Get and List using the v1.Pod type. Instead, you should use
+ // the special metav1.PartialObjectMetadata type.
+ //
+ // ❌ Incorrect:
+ //
+ // pod := &v1.Pod{}
+ // mgr.GetClient().Get(ctx, nsAndName, pod)
+ //
+ // ✅ Correct:
+ //
+ // pod := &metav1.PartialObjectMetadata{}
+ // pod.SetGroupVersionKind(schema.GroupVersionKind{
+ // Group: "",
+ // Version: "v1",
+ // Kind: "Pod",
+ // })
+ // mgr.GetClient().Get(ctx, nsAndName, pod)
+ //
+ // In the first case, controller-runtime will create another cache for the
+ // concrete type on top of the metadata cache; this increases memory
+ // consumption and leads to race conditions as caches are not in sync.
+ OnlyMetadata = projectAs(projectAsMetadata)
+
+ _ ForOption = OnlyMetadata
+ _ OwnsOption = OnlyMetadata
+ _ WatchesOption = OnlyMetadata
+)
+
+// }}}
+
+// MatchEveryOwner determines whether the watch should be filtered based on
+// controller ownership. As in, when the OwnerReference.Controller field is set.
+//
+// If passed as an option,
+// the handler receives notification for every owner of the object with the given type.
+// If unset (default), the handler receives notification only for the first
+// OwnerReference with `Controller: true`.
+var MatchEveryOwner = &matchEveryOwner{}
+
+type matchEveryOwner struct{}
+
+// ApplyToOwns applies this configuration to the given OwnsInput options.
+func (o matchEveryOwner) ApplyToOwns(opts *OwnsInput) {
+ opts.matchEveryOwner = true
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/builder/webhook.go b/vendor/sigs.k8s.io/controller-runtime/pkg/builder/webhook.go
new file mode 100644
index 00000000000..c74742d6ea3
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/builder/webhook.go
@@ -0,0 +1,300 @@
+/*
+Copyright 2019 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 builder
+
+import (
+ "errors"
+ "net/http"
+ "net/url"
+ "regexp"
+ "strings"
+
+ "github.com/go-logr/logr"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "k8s.io/client-go/rest"
+ "k8s.io/klog/v2"
+
+ "sigs.k8s.io/controller-runtime/pkg/client/apiutil"
+ "sigs.k8s.io/controller-runtime/pkg/manager"
+ "sigs.k8s.io/controller-runtime/pkg/webhook/admission"
+ "sigs.k8s.io/controller-runtime/pkg/webhook/conversion"
+)
+
+// WebhookBuilder builds a Webhook.
+type WebhookBuilder struct {
+ apiType runtime.Object
+ customDefaulter admission.CustomDefaulter
+ customDefaulterOpts []admission.DefaulterOption
+ customValidator admission.CustomValidator
+ customPath string
+ gvk schema.GroupVersionKind
+ mgr manager.Manager
+ config *rest.Config
+ recoverPanic *bool
+ logConstructor func(base logr.Logger, req *admission.Request) logr.Logger
+ err error
+}
+
+// WebhookManagedBy returns a new webhook builder.
+func WebhookManagedBy(m manager.Manager) *WebhookBuilder {
+ return &WebhookBuilder{mgr: m}
+}
+
+// TODO(droot): update the GoDoc for conversion.
+
+// For takes a runtime.Object which should be a CR.
+// If the given object implements the admission.Defaulter interface, a MutatingWebhook will be wired for this type.
+// If the given object implements the admission.Validator interface, a ValidatingWebhook will be wired for this type.
+func (blder *WebhookBuilder) For(apiType runtime.Object) *WebhookBuilder {
+ if blder.apiType != nil {
+ blder.err = errors.New("For(...) should only be called once, could not assign multiple objects for webhook registration")
+ }
+ blder.apiType = apiType
+ return blder
+}
+
+// WithDefaulter takes an admission.CustomDefaulter interface, a MutatingWebhook with the provided opts (admission.DefaulterOption)
+// will be wired for this type.
+func (blder *WebhookBuilder) WithDefaulter(defaulter admission.CustomDefaulter, opts ...admission.DefaulterOption) *WebhookBuilder {
+ blder.customDefaulter = defaulter
+ blder.customDefaulterOpts = opts
+ return blder
+}
+
+// WithValidator takes a admission.CustomValidator interface, a ValidatingWebhook will be wired for this type.
+func (blder *WebhookBuilder) WithValidator(validator admission.CustomValidator) *WebhookBuilder {
+ blder.customValidator = validator
+ return blder
+}
+
+// WithLogConstructor overrides the webhook's LogConstructor.
+func (blder *WebhookBuilder) WithLogConstructor(logConstructor func(base logr.Logger, req *admission.Request) logr.Logger) *WebhookBuilder {
+ blder.logConstructor = logConstructor
+ return blder
+}
+
+// RecoverPanic indicates whether panics caused by the webhook should be recovered.
+// Defaults to true.
+func (blder *WebhookBuilder) RecoverPanic(recoverPanic bool) *WebhookBuilder {
+ blder.recoverPanic = &recoverPanic
+ return blder
+}
+
+// WithCustomPath overrides the webhook's default path by the customPath
+func (blder *WebhookBuilder) WithCustomPath(customPath string) *WebhookBuilder {
+ blder.customPath = customPath
+ return blder
+}
+
+// Complete builds the webhook.
+func (blder *WebhookBuilder) Complete() error {
+ // Set the Config
+ blder.loadRestConfig()
+
+ // Configure the default LogConstructor
+ blder.setLogConstructor()
+
+ // Set the Webhook if needed
+ return blder.registerWebhooks()
+}
+
+func (blder *WebhookBuilder) loadRestConfig() {
+ if blder.config == nil {
+ blder.config = blder.mgr.GetConfig()
+ }
+}
+
+func (blder *WebhookBuilder) setLogConstructor() {
+ if blder.logConstructor == nil {
+ blder.logConstructor = func(base logr.Logger, req *admission.Request) logr.Logger {
+ log := base.WithValues(
+ "webhookGroup", blder.gvk.Group,
+ "webhookKind", blder.gvk.Kind,
+ )
+ if req != nil {
+ return log.WithValues(
+ blder.gvk.Kind, klog.KRef(req.Namespace, req.Name),
+ "namespace", req.Namespace, "name", req.Name,
+ "resource", req.Resource, "user", req.UserInfo.Username,
+ "requestID", req.UID,
+ )
+ }
+ return log
+ }
+ }
+}
+
+func (blder *WebhookBuilder) registerWebhooks() error {
+ typ, err := blder.getType()
+ if err != nil {
+ return err
+ }
+
+ blder.gvk, err = apiutil.GVKForObject(typ, blder.mgr.GetScheme())
+ if err != nil {
+ return err
+ }
+
+ // Register webhook(s) for type
+ err = blder.registerDefaultingWebhook()
+ if err != nil {
+ return err
+ }
+
+ err = blder.registerValidatingWebhook()
+ if err != nil {
+ return err
+ }
+
+ err = blder.registerConversionWebhook()
+ if err != nil {
+ return err
+ }
+ return blder.err
+}
+
+// registerDefaultingWebhook registers a defaulting webhook if necessary.
+func (blder *WebhookBuilder) registerDefaultingWebhook() error {
+ mwh := blder.getDefaultingWebhook()
+ if mwh != nil {
+ mwh.LogConstructor = blder.logConstructor
+ path := generateMutatePath(blder.gvk)
+ if blder.customPath != "" {
+ generatedCustomPath, err := generateCustomPath(blder.customPath)
+ if err != nil {
+ return err
+ }
+ path = generatedCustomPath
+ }
+
+ // Checking if the path is already registered.
+ // If so, just skip it.
+ if !blder.isAlreadyHandled(path) {
+ log.Info("Registering a mutating webhook",
+ "GVK", blder.gvk,
+ "path", path)
+ blder.mgr.GetWebhookServer().Register(path, mwh)
+ }
+ }
+
+ return nil
+}
+
+func (blder *WebhookBuilder) getDefaultingWebhook() *admission.Webhook {
+ if defaulter := blder.customDefaulter; defaulter != nil {
+ w := admission.WithCustomDefaulter(blder.mgr.GetScheme(), blder.apiType, defaulter, blder.customDefaulterOpts...)
+ if blder.recoverPanic != nil {
+ w = w.WithRecoverPanic(*blder.recoverPanic)
+ }
+ return w
+ }
+ return nil
+}
+
+// registerValidatingWebhook registers a validating webhook if necessary.
+func (blder *WebhookBuilder) registerValidatingWebhook() error {
+ vwh := blder.getValidatingWebhook()
+ if vwh != nil {
+ vwh.LogConstructor = blder.logConstructor
+ path := generateValidatePath(blder.gvk)
+ if blder.customPath != "" {
+ generatedCustomPath, err := generateCustomPath(blder.customPath)
+ if err != nil {
+ return err
+ }
+ path = generatedCustomPath
+ }
+
+ // Checking if the path is already registered.
+ // If so, just skip it.
+ if !blder.isAlreadyHandled(path) {
+ log.Info("Registering a validating webhook",
+ "GVK", blder.gvk,
+ "path", path)
+ blder.mgr.GetWebhookServer().Register(path, vwh)
+ }
+ }
+
+ return nil
+}
+
+func (blder *WebhookBuilder) getValidatingWebhook() *admission.Webhook {
+ if validator := blder.customValidator; validator != nil {
+ w := admission.WithCustomValidator(blder.mgr.GetScheme(), blder.apiType, validator)
+ if blder.recoverPanic != nil {
+ w = w.WithRecoverPanic(*blder.recoverPanic)
+ }
+ return w
+ }
+ return nil
+}
+
+func (blder *WebhookBuilder) registerConversionWebhook() error {
+ ok, err := conversion.IsConvertible(blder.mgr.GetScheme(), blder.apiType)
+ if err != nil {
+ log.Error(err, "conversion check failed", "GVK", blder.gvk)
+ return err
+ }
+ if ok {
+ if !blder.isAlreadyHandled("/convert") {
+ blder.mgr.GetWebhookServer().Register("/convert", conversion.NewWebhookHandler(blder.mgr.GetScheme()))
+ }
+ log.Info("Conversion webhook enabled", "GVK", blder.gvk)
+ }
+
+ return nil
+}
+
+func (blder *WebhookBuilder) getType() (runtime.Object, error) {
+ if blder.apiType != nil {
+ return blder.apiType, nil
+ }
+ return nil, errors.New("For() must be called with a valid object")
+}
+
+func (blder *WebhookBuilder) isAlreadyHandled(path string) bool {
+ if blder.mgr.GetWebhookServer().WebhookMux() == nil {
+ return false
+ }
+ h, p := blder.mgr.GetWebhookServer().WebhookMux().Handler(&http.Request{URL: &url.URL{Path: path}})
+ if p == path && h != nil {
+ return true
+ }
+ return false
+}
+
+func generateMutatePath(gvk schema.GroupVersionKind) string {
+ return "/mutate-" + strings.ReplaceAll(gvk.Group, ".", "-") + "-" +
+ gvk.Version + "-" + strings.ToLower(gvk.Kind)
+}
+
+func generateValidatePath(gvk schema.GroupVersionKind) string {
+ return "/validate-" + strings.ReplaceAll(gvk.Group, ".", "-") + "-" +
+ gvk.Version + "-" + strings.ToLower(gvk.Kind)
+}
+
+const webhookPathStringValidation = `^((/[a-zA-Z0-9-_]+)+|/)$`
+
+var validWebhookPathRegex = regexp.MustCompile(webhookPathStringValidation)
+
+func generateCustomPath(customPath string) (string, error) {
+ if !validWebhookPathRegex.MatchString(customPath) {
+ return "", errors.New("customPath \"" + customPath + "\" does not match this regex: " + webhookPathStringValidation)
+ }
+ return customPath, nil
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/cache/cache.go b/vendor/sigs.k8s.io/controller-runtime/pkg/cache/cache.go
new file mode 100644
index 00000000000..8f14bfdbfc8
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/cache/cache.go
@@ -0,0 +1,588 @@
+/*
+Copyright 2018 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 cache
+
+import (
+ "context"
+ "fmt"
+ "maps"
+ "net/http"
+ "slices"
+ "sort"
+ "time"
+
+ corev1 "k8s.io/api/core/v1"
+ "k8s.io/apimachinery/pkg/api/meta"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/fields"
+ "k8s.io/apimachinery/pkg/labels"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "k8s.io/client-go/kubernetes/scheme"
+ "k8s.io/client-go/rest"
+ toolscache "k8s.io/client-go/tools/cache"
+ "k8s.io/utils/ptr"
+
+ "sigs.k8s.io/controller-runtime/pkg/cache/internal"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/client/apiutil"
+)
+
+var (
+ defaultSyncPeriod = 10 * time.Hour
+)
+
+// InformerGetOptions defines the behavior of how informers are retrieved.
+type InformerGetOptions internal.GetOptions
+
+// InformerGetOption defines an option that alters the behavior of how informers are retrieved.
+type InformerGetOption func(*InformerGetOptions)
+
+// BlockUntilSynced determines whether a get request for an informer should block
+// until the informer's cache has synced.
+func BlockUntilSynced(shouldBlock bool) InformerGetOption {
+ return func(opts *InformerGetOptions) {
+ opts.BlockUntilSynced = &shouldBlock
+ }
+}
+
+// Cache knows how to load Kubernetes objects, fetch informers to request
+// to receive events for Kubernetes objects (at a low-level),
+// and add indices to fields on the objects stored in the cache.
+type Cache interface {
+ // Reader acts as a client to objects stored in the cache.
+ client.Reader
+
+ // Informers loads informers and adds field indices.
+ Informers
+}
+
+// Informers knows how to create or fetch informers for different
+// group-version-kinds, and add indices to those informers. It's safe to call
+// GetInformer from multiple threads.
+type Informers interface {
+ // GetInformer fetches or constructs an informer for the given object that corresponds to a single
+ // API kind and resource.
+ GetInformer(ctx context.Context, obj client.Object, opts ...InformerGetOption) (Informer, error)
+
+ // GetInformerForKind is similar to GetInformer, except that it takes a group-version-kind, instead
+ // of the underlying object.
+ GetInformerForKind(ctx context.Context, gvk schema.GroupVersionKind, opts ...InformerGetOption) (Informer, error)
+
+ // RemoveInformer removes an informer entry and stops it if it was running.
+ RemoveInformer(ctx context.Context, obj client.Object) error
+
+ // Start runs all the informers known to this cache until the context is closed.
+ // It blocks.
+ Start(ctx context.Context) error
+
+ // WaitForCacheSync waits for all the caches to sync. Returns false if it could not sync a cache.
+ WaitForCacheSync(ctx context.Context) bool
+
+ // FieldIndexer adds indices to the managed informers.
+ client.FieldIndexer
+}
+
+// Informer allows you to interact with the underlying informer.
+type Informer interface {
+ // AddEventHandler adds an event handler to the shared informer using the shared informer's resync
+ // period. Events to a single handler are delivered sequentially, but there is no coordination
+ // between different handlers.
+ // It returns a registration handle for the handler that can be used to remove
+ // the handler again and an error if the handler cannot be added.
+ AddEventHandler(handler toolscache.ResourceEventHandler) (toolscache.ResourceEventHandlerRegistration, error)
+
+ // AddEventHandlerWithResyncPeriod adds an event handler to the shared informer using the
+ // specified resync period. Events to a single handler are delivered sequentially, but there is
+ // no coordination between different handlers.
+ // It returns a registration handle for the handler that can be used to remove
+ // the handler again and an error if the handler cannot be added.
+ AddEventHandlerWithResyncPeriod(handler toolscache.ResourceEventHandler, resyncPeriod time.Duration) (toolscache.ResourceEventHandlerRegistration, error)
+
+ // RemoveEventHandler removes a previously added event handler given by
+ // its registration handle.
+ // This function is guaranteed to be idempotent and thread-safe.
+ RemoveEventHandler(handle toolscache.ResourceEventHandlerRegistration) error
+
+ // AddIndexers adds indexers to this store. It is valid to add indexers
+ // after an informer was started.
+ AddIndexers(indexers toolscache.Indexers) error
+
+ // HasSynced return true if the informers underlying store has synced.
+ HasSynced() bool
+ // IsStopped returns true if the informer has been stopped.
+ IsStopped() bool
+}
+
+// AllNamespaces should be used as the map key to deliminate namespace settings
+// that apply to all namespaces that themselves do not have explicit settings.
+const AllNamespaces = metav1.NamespaceAll
+
+// Options are the optional arguments for creating a new Cache object.
+type Options struct {
+ // HTTPClient is the http client to use for the REST client
+ HTTPClient *http.Client
+
+ // Scheme is the scheme to use for mapping objects to GroupVersionKinds
+ Scheme *runtime.Scheme
+
+ // Mapper is the RESTMapper to use for mapping GroupVersionKinds to Resources
+ Mapper meta.RESTMapper
+
+ // SyncPeriod determines the minimum frequency at which watched resources are
+ // reconciled. A lower period will correct entropy more quickly, but reduce
+ // responsiveness to change if there are many watched resources. Change this
+ // value only if you know what you are doing. Defaults to 10 hours if unset.
+ // there will a 10 percent jitter between the SyncPeriod of all controllers
+ // so that all controllers will not send list requests simultaneously.
+ //
+ // This applies to all controllers.
+ //
+ // A period sync happens for two reasons:
+ // 1. To insure against a bug in the controller that causes an object to not
+ // be requeued, when it otherwise should be requeued.
+ // 2. To insure against an unknown bug in controller-runtime, or its dependencies,
+ // that causes an object to not be requeued, when it otherwise should be
+ // requeued, or to be removed from the queue, when it otherwise should not
+ // be removed.
+ //
+ // If you want
+ // 1. to insure against missed watch events, or
+ // 2. to poll services that cannot be watched,
+ // then we recommend that, instead of changing the default period, the
+ // controller requeue, with a constant duration `t`, whenever the controller
+ // is "done" with an object, and would otherwise not requeue it, i.e., we
+ // recommend the `Reconcile` function return `reconcile.Result{RequeueAfter: t}`,
+ // instead of `reconcile.Result{}`.
+ SyncPeriod *time.Duration
+
+ // ReaderFailOnMissingInformer configures the cache to return a ErrResourceNotCached error when a user
+ // requests, using Get() and List(), a resource the cache does not already have an informer for.
+ //
+ // This error is distinct from an errors.NotFound.
+ //
+ // Defaults to false, which means that the cache will start a new informer
+ // for every new requested resource.
+ ReaderFailOnMissingInformer bool
+
+ // DefaultNamespaces maps namespace names to cache configs. If set, only
+ // the namespaces in here will be watched and it will by used to default
+ // ByObject.Namespaces for all objects if that is nil.
+ //
+ // It is possible to have specific Config for just some namespaces
+ // but cache all namespaces by using the AllNamespaces const as the map key.
+ // This will then include all namespaces that do not have a more specific
+ // setting.
+ //
+ // The options in the Config that are nil will be defaulted from
+ // the respective Default* settings.
+ DefaultNamespaces map[string]Config
+
+ // DefaultLabelSelector will be used as a label selector for all objects
+ // unless there is already one set in ByObject or DefaultNamespaces.
+ DefaultLabelSelector labels.Selector
+
+ // DefaultFieldSelector will be used as a field selector for all object types
+ // unless there is already one set in ByObject or DefaultNamespaces.
+ DefaultFieldSelector fields.Selector
+
+ // DefaultTransform will be used as transform for all object types
+ // unless there is already one set in ByObject or DefaultNamespaces.
+ //
+ // A typical usecase for this is to use TransformStripManagedFields
+ // to reduce the caches memory usage.
+ DefaultTransform toolscache.TransformFunc
+
+ // DefaultWatchErrorHandler will be used to the WatchErrorHandler which is called
+ // whenever ListAndWatch drops the connection with an error.
+ //
+ // After calling this handler, the informer will backoff and retry.
+ DefaultWatchErrorHandler toolscache.WatchErrorHandler
+
+ // DefaultUnsafeDisableDeepCopy is the default for UnsafeDisableDeepCopy
+ // for everything that doesn't specify this.
+ //
+ // Be very careful with this, when enabled you must DeepCopy any object before mutating it,
+ // otherwise you will mutate the object in the cache.
+ //
+ // This will be used for all object types, unless it is set in ByObject or
+ // DefaultNamespaces.
+ DefaultUnsafeDisableDeepCopy *bool
+
+ // DefaultEnableWatchBookmarks requests watch events with type "BOOKMARK".
+ // Servers that do not implement bookmarks may ignore this flag and
+ // bookmarks are sent at the server's discretion. Clients should not
+ // assume bookmarks are returned at any specific interval, nor may they
+ // assume the server will send any BOOKMARK event during a session.
+ //
+ // This will be used for all object types, unless it is set in ByObject or
+ // DefaultNamespaces.
+ //
+ // Defaults to true.
+ DefaultEnableWatchBookmarks *bool
+
+ // ByObject restricts the cache's ListWatch to the desired fields per GVK at the specified object.
+ // If unset, this will fall through to the Default* settings.
+ ByObject map[client.Object]ByObject
+
+ // NewInformer allows overriding of NewSharedIndexInformer, for example for testing
+ // or if someone wants to write their own Informer.
+ NewInformer func(toolscache.ListerWatcher, runtime.Object, time.Duration, toolscache.Indexers) toolscache.SharedIndexInformer
+}
+
+// ByObject offers more fine-grained control over the cache's ListWatch by object.
+type ByObject struct {
+ // Namespaces maps a namespace name to cache configs. If set, only the
+ // namespaces in this map will be cached.
+ //
+ // Settings in the map value that are unset will be defaulted.
+ // Use an empty value for the specific setting to prevent that.
+ //
+ // It is possible to have specific Config for just some namespaces
+ // but cache all namespaces by using the AllNamespaces const as the map key.
+ // This will then include all namespaces that do not have a more specific
+ // setting.
+ //
+ // A nil map allows to default this to the cache's DefaultNamespaces setting.
+ // An empty map prevents this and means that all namespaces will be cached.
+ //
+ // The defaulting follows the following precedence order:
+ // 1. ByObject
+ // 2. DefaultNamespaces[namespace]
+ // 3. Default*
+ //
+ // This must be unset for cluster-scoped objects.
+ Namespaces map[string]Config
+
+ // Label represents a label selector for the object.
+ Label labels.Selector
+
+ // Field represents a field selector for the object.
+ Field fields.Selector
+
+ // Transform is a transformer function for the object which gets applied
+ // when objects of the transformation are about to be committed to the cache.
+ //
+ // This function is called both for new objects to enter the cache,
+ // and for updated objects.
+ Transform toolscache.TransformFunc
+
+ // UnsafeDisableDeepCopy indicates not to deep copy objects during get or
+ // list objects per GVK at the specified object.
+ // Be very careful with this, when enabled you must DeepCopy any object before mutating it,
+ // otherwise you will mutate the object in the cache.
+ UnsafeDisableDeepCopy *bool
+
+ // EnableWatchBookmarks requests watch events with type "BOOKMARK".
+ // Servers that do not implement bookmarks may ignore this flag and
+ // bookmarks are sent at the server's discretion. Clients should not
+ // assume bookmarks are returned at any specific interval, nor may they
+ // assume the server will send any BOOKMARK event during a session.
+ //
+ // Defaults to true.
+ EnableWatchBookmarks *bool
+}
+
+// Config describes all potential options for a given watch.
+type Config struct {
+ // LabelSelector specifies a label selector. A nil value allows to
+ // default this.
+ //
+ // Set to labels.Everything() if you don't want this defaulted.
+ LabelSelector labels.Selector
+
+ // FieldSelector specifics a field selector. A nil value allows to
+ // default this.
+ //
+ // Set to fields.Everything() if you don't want this defaulted.
+ FieldSelector fields.Selector
+
+ // Transform specifies a transform func. A nil value allows to default
+ // this.
+ //
+ // Set to an empty func to prevent this:
+ // func(in interface{}) (interface{}, error) { return in, nil }
+ Transform toolscache.TransformFunc
+
+ // UnsafeDisableDeepCopy specifies if List and Get requests against the
+ // cache should not DeepCopy. A nil value allows to default this.
+ UnsafeDisableDeepCopy *bool
+
+ // EnableWatchBookmarks requests watch events with type "BOOKMARK".
+ // Servers that do not implement bookmarks may ignore this flag and
+ // bookmarks are sent at the server's discretion. Clients should not
+ // assume bookmarks are returned at any specific interval, nor may they
+ // assume the server will send any BOOKMARK event during a session.
+ //
+ // Defaults to true.
+ EnableWatchBookmarks *bool
+}
+
+// NewCacheFunc - Function for creating a new cache from the options and a rest config.
+type NewCacheFunc func(config *rest.Config, opts Options) (Cache, error)
+
+// New initializes and returns a new Cache.
+func New(cfg *rest.Config, opts Options) (Cache, error) {
+ opts, err := defaultOpts(cfg, opts)
+ if err != nil {
+ return nil, err
+ }
+
+ newCacheFunc := newCache(cfg, opts)
+
+ var defaultCache Cache
+ if len(opts.DefaultNamespaces) > 0 {
+ defaultConfig := optionDefaultsToConfig(&opts)
+ defaultCache = newMultiNamespaceCache(newCacheFunc, opts.Scheme, opts.Mapper, opts.DefaultNamespaces, &defaultConfig)
+ } else {
+ defaultCache = newCacheFunc(optionDefaultsToConfig(&opts), corev1.NamespaceAll)
+ }
+
+ if len(opts.ByObject) == 0 {
+ return defaultCache, nil
+ }
+
+ delegating := &delegatingByGVKCache{
+ scheme: opts.Scheme,
+ caches: make(map[schema.GroupVersionKind]Cache, len(opts.ByObject)),
+ defaultCache: defaultCache,
+ }
+
+ for obj, config := range opts.ByObject {
+ gvk, err := apiutil.GVKForObject(obj, opts.Scheme)
+ if err != nil {
+ return nil, fmt.Errorf("failed to get GVK for type %T: %w", obj, err)
+ }
+ var cache Cache
+ if len(config.Namespaces) > 0 {
+ cache = newMultiNamespaceCache(newCacheFunc, opts.Scheme, opts.Mapper, config.Namespaces, nil)
+ } else {
+ cache = newCacheFunc(byObjectToConfig(config), corev1.NamespaceAll)
+ }
+ delegating.caches[gvk] = cache
+ }
+
+ return delegating, nil
+}
+
+// TransformStripManagedFields strips the managed fields of an object before it is committed to the cache.
+// If you are not explicitly accessing managedFields from your code, setting this as `DefaultTransform`
+// on the cache can lead to a significant reduction in memory usage.
+func TransformStripManagedFields() toolscache.TransformFunc {
+ return func(in any) (any, error) {
+ // Nilcheck managed fields to avoid hitting https://github.com/kubernetes/kubernetes/issues/124337
+ if obj, err := meta.Accessor(in); err == nil && obj.GetManagedFields() != nil {
+ obj.SetManagedFields(nil)
+ }
+
+ return in, nil
+ }
+}
+
+func optionDefaultsToConfig(opts *Options) Config {
+ return Config{
+ LabelSelector: opts.DefaultLabelSelector,
+ FieldSelector: opts.DefaultFieldSelector,
+ Transform: opts.DefaultTransform,
+ UnsafeDisableDeepCopy: opts.DefaultUnsafeDisableDeepCopy,
+ EnableWatchBookmarks: opts.DefaultEnableWatchBookmarks,
+ }
+}
+
+func byObjectToConfig(byObject ByObject) Config {
+ return Config{
+ LabelSelector: byObject.Label,
+ FieldSelector: byObject.Field,
+ Transform: byObject.Transform,
+ UnsafeDisableDeepCopy: byObject.UnsafeDisableDeepCopy,
+ EnableWatchBookmarks: byObject.EnableWatchBookmarks,
+ }
+}
+
+type newCacheFunc func(config Config, namespace string) Cache
+
+func newCache(restConfig *rest.Config, opts Options) newCacheFunc {
+ return func(config Config, namespace string) Cache {
+ return &informerCache{
+ scheme: opts.Scheme,
+ Informers: internal.NewInformers(restConfig, &internal.InformersOpts{
+ HTTPClient: opts.HTTPClient,
+ Scheme: opts.Scheme,
+ Mapper: opts.Mapper,
+ ResyncPeriod: *opts.SyncPeriod,
+ Namespace: namespace,
+ Selector: internal.Selector{
+ Label: config.LabelSelector,
+ Field: config.FieldSelector,
+ },
+ Transform: config.Transform,
+ WatchErrorHandler: opts.DefaultWatchErrorHandler,
+ UnsafeDisableDeepCopy: ptr.Deref(config.UnsafeDisableDeepCopy, false),
+ EnableWatchBookmarks: ptr.Deref(config.EnableWatchBookmarks, true),
+ NewInformer: opts.NewInformer,
+ }),
+ readerFailOnMissingInformer: opts.ReaderFailOnMissingInformer,
+ }
+ }
+}
+
+func defaultOpts(config *rest.Config, opts Options) (Options, error) {
+ config = rest.CopyConfig(config)
+ if config.UserAgent == "" {
+ config.UserAgent = rest.DefaultKubernetesUserAgent()
+ }
+
+ // Use the rest HTTP client for the provided config if unset
+ if opts.HTTPClient == nil {
+ var err error
+ opts.HTTPClient, err = rest.HTTPClientFor(config)
+ if err != nil {
+ return Options{}, fmt.Errorf("could not create HTTP client from config: %w", err)
+ }
+ }
+
+ // Use the default Kubernetes Scheme if unset
+ if opts.Scheme == nil {
+ opts.Scheme = scheme.Scheme
+ }
+
+ // Construct a new Mapper if unset
+ if opts.Mapper == nil {
+ var err error
+ opts.Mapper, err = apiutil.NewDynamicRESTMapper(config, opts.HTTPClient)
+ if err != nil {
+ return Options{}, fmt.Errorf("could not create RESTMapper from config: %w", err)
+ }
+ }
+
+ opts.ByObject = maps.Clone(opts.ByObject)
+ opts.DefaultNamespaces = maps.Clone(opts.DefaultNamespaces)
+ for obj, byObject := range opts.ByObject {
+ isNamespaced, err := apiutil.IsObjectNamespaced(obj, opts.Scheme, opts.Mapper)
+ if err != nil {
+ return opts, fmt.Errorf("failed to determine if %T is namespaced: %w", obj, err)
+ }
+ if !isNamespaced && byObject.Namespaces != nil {
+ return opts, fmt.Errorf("type %T is not namespaced, but its ByObject.Namespaces setting is not nil", obj)
+ }
+
+ if isNamespaced && byObject.Namespaces == nil {
+ byObject.Namespaces = maps.Clone(opts.DefaultNamespaces)
+ } else {
+ byObject.Namespaces = maps.Clone(byObject.Namespaces)
+ }
+
+ // Default the namespace-level configs first, because they need to use the undefaulted type-level config
+ // to be able to potentially fall through to settings from DefaultNamespaces.
+ for namespace, config := range byObject.Namespaces {
+ // 1. Default from the undefaulted type-level config
+ config = defaultConfig(config, byObjectToConfig(byObject))
+ // 2. Default from the namespace-level config. This was defaulted from the global default config earlier, but
+ // might not have an entry for the current namespace.
+ if defaultNamespaceSettings, hasDefaultNamespace := opts.DefaultNamespaces[namespace]; hasDefaultNamespace {
+ config = defaultConfig(config, defaultNamespaceSettings)
+ }
+
+ // 3. Default from the global defaults
+ config = defaultConfig(config, optionDefaultsToConfig(&opts))
+
+ if namespace == metav1.NamespaceAll {
+ config.FieldSelector = fields.AndSelectors(
+ appendIfNotNil(
+ namespaceAllSelector(slices.Collect(maps.Keys(byObject.Namespaces))),
+ config.FieldSelector,
+ )...,
+ )
+ }
+
+ byObject.Namespaces[namespace] = config
+ }
+
+ // Only default ByObject iself if it isn't namespaced or has no namespaces configured, as only
+ // then any of this will be honored.
+ if !isNamespaced || len(byObject.Namespaces) == 0 {
+ defaultedConfig := defaultConfig(byObjectToConfig(byObject), optionDefaultsToConfig(&opts))
+ byObject.Label = defaultedConfig.LabelSelector
+ byObject.Field = defaultedConfig.FieldSelector
+ byObject.Transform = defaultedConfig.Transform
+ byObject.UnsafeDisableDeepCopy = defaultedConfig.UnsafeDisableDeepCopy
+ byObject.EnableWatchBookmarks = defaultedConfig.EnableWatchBookmarks
+ }
+
+ opts.ByObject[obj] = byObject
+ }
+
+ // Default namespaces after byObject has been defaulted, otherwise a namespace without selectors
+ // will get the `Default` selectors, then get copied to byObject and then not get defaulted from
+ // byObject, as it already has selectors.
+ for namespace, cfg := range opts.DefaultNamespaces {
+ cfg = defaultConfig(cfg, optionDefaultsToConfig(&opts))
+ if namespace == metav1.NamespaceAll {
+ cfg.FieldSelector = fields.AndSelectors(
+ appendIfNotNil(
+ namespaceAllSelector(slices.Collect(maps.Keys(opts.DefaultNamespaces))),
+ cfg.FieldSelector,
+ )...,
+ )
+ }
+ opts.DefaultNamespaces[namespace] = cfg
+ }
+
+ // Default the resync period to 10 hours if unset
+ if opts.SyncPeriod == nil {
+ opts.SyncPeriod = &defaultSyncPeriod
+ }
+ return opts, nil
+}
+
+func defaultConfig(toDefault, defaultFrom Config) Config {
+ if toDefault.LabelSelector == nil {
+ toDefault.LabelSelector = defaultFrom.LabelSelector
+ }
+ if toDefault.FieldSelector == nil {
+ toDefault.FieldSelector = defaultFrom.FieldSelector
+ }
+ if toDefault.Transform == nil {
+ toDefault.Transform = defaultFrom.Transform
+ }
+ if toDefault.UnsafeDisableDeepCopy == nil {
+ toDefault.UnsafeDisableDeepCopy = defaultFrom.UnsafeDisableDeepCopy
+ }
+ if toDefault.EnableWatchBookmarks == nil {
+ toDefault.EnableWatchBookmarks = defaultFrom.EnableWatchBookmarks
+ }
+ return toDefault
+}
+
+func namespaceAllSelector(namespaces []string) []fields.Selector {
+ selectors := make([]fields.Selector, 0, len(namespaces)-1)
+ sort.Strings(namespaces)
+ for _, namespace := range namespaces {
+ if namespace != metav1.NamespaceAll {
+ selectors = append(selectors, fields.OneTermNotEqualSelector("metadata.namespace", namespace))
+ }
+ }
+
+ return selectors
+}
+
+func appendIfNotNil[T comparable](a []T, b T) []T {
+ if b != *new(T) {
+ return append(a, b)
+ }
+ return a
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/cache/delegating_by_gvk_cache.go b/vendor/sigs.k8s.io/controller-runtime/pkg/cache/delegating_by_gvk_cache.go
new file mode 100644
index 00000000000..46bd243c66b
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/cache/delegating_by_gvk_cache.go
@@ -0,0 +1,136 @@
+/*
+Copyright 2023 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 cache
+
+import (
+ "context"
+ "maps"
+ "slices"
+ "strings"
+ "sync"
+
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/client/apiutil"
+)
+
+// delegatingByGVKCache delegates to a type-specific cache if present
+// and uses the defaultCache otherwise.
+type delegatingByGVKCache struct {
+ scheme *runtime.Scheme
+ caches map[schema.GroupVersionKind]Cache
+ defaultCache Cache
+}
+
+func (dbt *delegatingByGVKCache) Get(ctx context.Context, key client.ObjectKey, obj client.Object, opts ...client.GetOption) error {
+ cache, err := dbt.cacheForObject(obj)
+ if err != nil {
+ return err
+ }
+ return cache.Get(ctx, key, obj, opts...)
+}
+
+func (dbt *delegatingByGVKCache) List(ctx context.Context, list client.ObjectList, opts ...client.ListOption) error {
+ cache, err := dbt.cacheForObject(list)
+ if err != nil {
+ return err
+ }
+ return cache.List(ctx, list, opts...)
+}
+
+func (dbt *delegatingByGVKCache) RemoveInformer(ctx context.Context, obj client.Object) error {
+ cache, err := dbt.cacheForObject(obj)
+ if err != nil {
+ return err
+ }
+ return cache.RemoveInformer(ctx, obj)
+}
+
+func (dbt *delegatingByGVKCache) GetInformer(ctx context.Context, obj client.Object, opts ...InformerGetOption) (Informer, error) {
+ cache, err := dbt.cacheForObject(obj)
+ if err != nil {
+ return nil, err
+ }
+ return cache.GetInformer(ctx, obj, opts...)
+}
+
+func (dbt *delegatingByGVKCache) GetInformerForKind(ctx context.Context, gvk schema.GroupVersionKind, opts ...InformerGetOption) (Informer, error) {
+ return dbt.cacheForGVK(gvk).GetInformerForKind(ctx, gvk, opts...)
+}
+
+func (dbt *delegatingByGVKCache) Start(ctx context.Context) error {
+ allCaches := slices.Collect(maps.Values(dbt.caches))
+ allCaches = append(allCaches, dbt.defaultCache)
+
+ wg := &sync.WaitGroup{}
+ errs := make(chan error)
+ for idx := range allCaches {
+ cache := allCaches[idx]
+ wg.Add(1)
+ go func() {
+ defer wg.Done()
+ if err := cache.Start(ctx); err != nil {
+ errs <- err
+ }
+ }()
+ }
+
+ select {
+ case err := <-errs:
+ return err
+ case <-ctx.Done():
+ wg.Wait()
+ return nil
+ }
+}
+
+func (dbt *delegatingByGVKCache) WaitForCacheSync(ctx context.Context) bool {
+ synced := true
+ for _, cache := range append(slices.Collect(maps.Values(dbt.caches)), dbt.defaultCache) {
+ if !cache.WaitForCacheSync(ctx) {
+ synced = false
+ }
+ }
+
+ return synced
+}
+
+func (dbt *delegatingByGVKCache) IndexField(ctx context.Context, obj client.Object, field string, extractValue client.IndexerFunc) error {
+ cache, err := dbt.cacheForObject(obj)
+ if err != nil {
+ return err
+ }
+ return cache.IndexField(ctx, obj, field, extractValue)
+}
+
+func (dbt *delegatingByGVKCache) cacheForObject(o runtime.Object) (Cache, error) {
+ gvk, err := apiutil.GVKForObject(o, dbt.scheme)
+ if err != nil {
+ return nil, err
+ }
+ gvk.Kind = strings.TrimSuffix(gvk.Kind, "List")
+ return dbt.cacheForGVK(gvk), nil
+}
+
+func (dbt *delegatingByGVKCache) cacheForGVK(gvk schema.GroupVersionKind) Cache {
+ if specific, hasSpecific := dbt.caches[gvk]; hasSpecific {
+ return specific
+ }
+
+ return dbt.defaultCache
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/cache/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/cache/doc.go
new file mode 100644
index 00000000000..e1742ac0f32
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/cache/doc.go
@@ -0,0 +1,19 @@
+/*
+Copyright 2019 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 cache provides object caches that act as caching client.Reader
+// instances and help drive Kubernetes-object-based event handlers.
+package cache
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/cache/informer_cache.go b/vendor/sigs.k8s.io/controller-runtime/pkg/cache/informer_cache.go
new file mode 100644
index 00000000000..091667b7faa
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/cache/informer_cache.go
@@ -0,0 +1,260 @@
+/*
+Copyright 2018 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 cache
+
+import (
+ "context"
+ "fmt"
+ "strings"
+
+ apimeta "k8s.io/apimachinery/pkg/api/meta"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "k8s.io/client-go/tools/cache"
+
+ "sigs.k8s.io/controller-runtime/pkg/cache/internal"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/client/apiutil"
+)
+
+var (
+ _ Informers = &informerCache{}
+ _ client.Reader = &informerCache{}
+ _ Cache = &informerCache{}
+)
+
+// ErrCacheNotStarted is returned when trying to read from the cache that wasn't started.
+type ErrCacheNotStarted struct{}
+
+func (*ErrCacheNotStarted) Error() string {
+ return "the cache is not started, can not read objects"
+}
+
+var _ error = (*ErrCacheNotStarted)(nil)
+
+// ErrResourceNotCached indicates that the resource type
+// the client asked the cache for is not cached, i.e. the
+// corresponding informer does not exist yet.
+type ErrResourceNotCached struct {
+ GVK schema.GroupVersionKind
+}
+
+// Error returns the error
+func (r ErrResourceNotCached) Error() string {
+ return fmt.Sprintf("%s is not cached", r.GVK.String())
+}
+
+var _ error = (*ErrResourceNotCached)(nil)
+
+// informerCache is a Kubernetes Object cache populated from internal.Informers.
+// informerCache wraps internal.Informers.
+type informerCache struct {
+ scheme *runtime.Scheme
+ *internal.Informers
+ readerFailOnMissingInformer bool
+}
+
+// Get implements Reader.
+func (ic *informerCache) Get(ctx context.Context, key client.ObjectKey, out client.Object, opts ...client.GetOption) error {
+ gvk, err := apiutil.GVKForObject(out, ic.scheme)
+ if err != nil {
+ return err
+ }
+
+ started, cache, err := ic.getInformerForKind(ctx, gvk, out)
+ if err != nil {
+ return err
+ }
+
+ if !started {
+ return &ErrCacheNotStarted{}
+ }
+ return cache.Reader.Get(ctx, key, out, opts...)
+}
+
+// List implements Reader.
+func (ic *informerCache) List(ctx context.Context, out client.ObjectList, opts ...client.ListOption) error {
+ gvk, cacheTypeObj, err := ic.objectTypeForListObject(out)
+ if err != nil {
+ return err
+ }
+
+ started, cache, err := ic.getInformerForKind(ctx, *gvk, cacheTypeObj)
+ if err != nil {
+ return err
+ }
+
+ if !started {
+ return &ErrCacheNotStarted{}
+ }
+
+ return cache.Reader.List(ctx, out, opts...)
+}
+
+// objectTypeForListObject tries to find the runtime.Object and associated GVK
+// for a single object corresponding to the passed-in list type. We need them
+// because they are used as cache map key.
+func (ic *informerCache) objectTypeForListObject(list client.ObjectList) (*schema.GroupVersionKind, runtime.Object, error) {
+ gvk, err := apiutil.GVKForObject(list, ic.scheme)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ // We need the non-list GVK, so chop off the "List" from the end of the kind.
+ gvk.Kind = strings.TrimSuffix(gvk.Kind, "List")
+
+ // Handle unstructured.UnstructuredList.
+ if _, isUnstructured := list.(runtime.Unstructured); isUnstructured {
+ u := &unstructured.Unstructured{}
+ u.SetGroupVersionKind(gvk)
+ return &gvk, u, nil
+ }
+ // Handle metav1.PartialObjectMetadataList.
+ if _, isPartialObjectMetadata := list.(*metav1.PartialObjectMetadataList); isPartialObjectMetadata {
+ pom := &metav1.PartialObjectMetadata{}
+ pom.SetGroupVersionKind(gvk)
+ return &gvk, pom, nil
+ }
+
+ // Any other list type should have a corresponding non-list type registered
+ // in the scheme. Use that to create a new instance of the non-list type.
+ cacheTypeObj, err := ic.scheme.New(gvk)
+ if err != nil {
+ return nil, nil, err
+ }
+ return &gvk, cacheTypeObj, nil
+}
+
+func applyGetOptions(opts ...InformerGetOption) *internal.GetOptions {
+ cfg := &InformerGetOptions{}
+ for _, opt := range opts {
+ opt(cfg)
+ }
+ return (*internal.GetOptions)(cfg)
+}
+
+// GetInformerForKind returns the informer for the GroupVersionKind. If no informer exists, one will be started.
+func (ic *informerCache) GetInformerForKind(ctx context.Context, gvk schema.GroupVersionKind, opts ...InformerGetOption) (Informer, error) {
+ // Map the gvk to an object
+ obj, err := ic.scheme.New(gvk)
+ if err != nil {
+ return nil, err
+ }
+
+ _, i, err := ic.Informers.Get(ctx, gvk, obj, applyGetOptions(opts...))
+ if err != nil {
+ return nil, err
+ }
+ return i.Informer, nil
+}
+
+// GetInformer returns the informer for the obj. If no informer exists, one will be started.
+func (ic *informerCache) GetInformer(ctx context.Context, obj client.Object, opts ...InformerGetOption) (Informer, error) {
+ gvk, err := apiutil.GVKForObject(obj, ic.scheme)
+ if err != nil {
+ return nil, err
+ }
+
+ _, i, err := ic.Informers.Get(ctx, gvk, obj, applyGetOptions(opts...))
+ if err != nil {
+ return nil, err
+ }
+ return i.Informer, nil
+}
+
+func (ic *informerCache) getInformerForKind(ctx context.Context, gvk schema.GroupVersionKind, obj runtime.Object) (bool, *internal.Cache, error) {
+ if ic.readerFailOnMissingInformer {
+ cache, started, ok := ic.Informers.Peek(gvk, obj)
+ if !ok {
+ return false, nil, &ErrResourceNotCached{GVK: gvk}
+ }
+ return started, cache, nil
+ }
+
+ return ic.Informers.Get(ctx, gvk, obj, &internal.GetOptions{})
+}
+
+// RemoveInformer deactivates and removes the informer from the cache.
+func (ic *informerCache) RemoveInformer(_ context.Context, obj client.Object) error {
+ gvk, err := apiutil.GVKForObject(obj, ic.scheme)
+ if err != nil {
+ return err
+ }
+
+ ic.Informers.Remove(gvk, obj)
+ return nil
+}
+
+// NeedLeaderElection implements the LeaderElectionRunnable interface
+// to indicate that this can be started without requiring the leader lock.
+func (ic *informerCache) NeedLeaderElection() bool {
+ return false
+}
+
+// IndexField adds an indexer to the underlying informer, using extractValue function to get
+// value(s) from the given field. This index can then be used by passing a field selector
+// to List. For one-to-one compatibility with "normal" field selectors, only return one value.
+// The values may be anything. They will automatically be prefixed with the namespace of the
+// given object, if present. The objects passed are guaranteed to be objects of the correct type.
+func (ic *informerCache) IndexField(ctx context.Context, obj client.Object, field string, extractValue client.IndexerFunc) error {
+ informer, err := ic.GetInformer(ctx, obj)
+ if err != nil {
+ return err
+ }
+ return indexByField(informer, field, extractValue)
+}
+
+func indexByField(informer Informer, field string, extractValue client.IndexerFunc) error {
+ indexFunc := func(objRaw interface{}) ([]string, error) {
+ // TODO(directxman12): check if this is the correct type?
+ obj, isObj := objRaw.(client.Object)
+ if !isObj {
+ return nil, fmt.Errorf("object of type %T is not an Object", objRaw)
+ }
+ meta, err := apimeta.Accessor(obj)
+ if err != nil {
+ return nil, err
+ }
+ ns := meta.GetNamespace()
+
+ rawVals := extractValue(obj)
+ var vals []string
+ if ns == "" {
+ // if we're not doubling the keys for the namespaced case, just create a new slice with same length
+ vals = make([]string, len(rawVals))
+ } else {
+ // if we need to add non-namespaced versions too, double the length
+ vals = make([]string, len(rawVals)*2)
+ }
+ for i, rawVal := range rawVals {
+ // save a namespaced variant, so that we can ask
+ // "what are all the object matching a given index *in a given namespace*"
+ vals[i] = internal.KeyToNamespacedKey(ns, rawVal)
+ if ns != "" {
+ // if we have a namespace, also inject a special index key for listing
+ // regardless of the object namespace
+ vals[i+len(rawVals)] = internal.KeyToNamespacedKey("", rawVal)
+ }
+ }
+
+ return vals, nil
+ }
+
+ return informer.AddIndexers(cache.Indexers{internal.FieldIndexName(field): indexFunc})
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/cache/internal/cache_reader.go b/vendor/sigs.k8s.io/controller-runtime/pkg/cache/internal/cache_reader.go
new file mode 100644
index 00000000000..81ee960b738
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/cache/internal/cache_reader.go
@@ -0,0 +1,255 @@
+/*
+Copyright 2018 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 internal
+
+import (
+ "context"
+ "fmt"
+ "reflect"
+
+ apierrors "k8s.io/apimachinery/pkg/api/errors"
+ apimeta "k8s.io/apimachinery/pkg/api/meta"
+ "k8s.io/apimachinery/pkg/fields"
+ "k8s.io/apimachinery/pkg/labels"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "k8s.io/client-go/tools/cache"
+
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/internal/field/selector"
+)
+
+// CacheReader is a client.Reader.
+var _ client.Reader = &CacheReader{}
+
+// CacheReader wraps a cache.Index to implement the client.Reader interface for a single type.
+type CacheReader struct {
+ // indexer is the underlying indexer wrapped by this cache.
+ indexer cache.Indexer
+
+ // groupVersionKind is the group-version-kind of the resource.
+ groupVersionKind schema.GroupVersionKind
+
+ // scopeName is the scope of the resource (namespaced or cluster-scoped).
+ scopeName apimeta.RESTScopeName
+
+ // disableDeepCopy indicates not to deep copy objects during get or list objects.
+ // Be very careful with this, when enabled you must DeepCopy any object before mutating it,
+ // otherwise you will mutate the object in the cache.
+ disableDeepCopy bool
+}
+
+// Get checks the indexer for the object and writes a copy of it if found.
+func (c *CacheReader) Get(_ context.Context, key client.ObjectKey, out client.Object, _ ...client.GetOption) error {
+ if c.scopeName == apimeta.RESTScopeNameRoot {
+ key.Namespace = ""
+ }
+ storeKey := objectKeyToStoreKey(key)
+
+ // Lookup the object from the indexer cache
+ obj, exists, err := c.indexer.GetByKey(storeKey)
+ if err != nil {
+ return err
+ }
+
+ // Not found, return an error
+ if !exists {
+ return apierrors.NewNotFound(schema.GroupResource{
+ Group: c.groupVersionKind.Group,
+ // Resource gets set as Kind in the error so this is fine
+ Resource: c.groupVersionKind.Kind,
+ }, key.Name)
+ }
+
+ // Verify the result is a runtime.Object
+ if _, isObj := obj.(runtime.Object); !isObj {
+ // This should never happen
+ return fmt.Errorf("cache contained %T, which is not an Object", obj)
+ }
+
+ if c.disableDeepCopy {
+ // skip deep copy which might be unsafe
+ // you must DeepCopy any object before mutating it outside
+ } else {
+ // deep copy to avoid mutating cache
+ obj = obj.(runtime.Object).DeepCopyObject()
+ }
+
+ // Copy the value of the item in the cache to the returned value
+ // TODO(directxman12): this is a terrible hack, pls fix (we should have deepcopyinto)
+ outVal := reflect.ValueOf(out)
+ objVal := reflect.ValueOf(obj)
+ if !objVal.Type().AssignableTo(outVal.Type()) {
+ return fmt.Errorf("cache had type %s, but %s was asked for", objVal.Type(), outVal.Type())
+ }
+ reflect.Indirect(outVal).Set(reflect.Indirect(objVal))
+ if !c.disableDeepCopy {
+ out.GetObjectKind().SetGroupVersionKind(c.groupVersionKind)
+ }
+
+ return nil
+}
+
+// List lists items out of the indexer and writes them to out.
+func (c *CacheReader) List(_ context.Context, out client.ObjectList, opts ...client.ListOption) error {
+ var objs []interface{}
+ var err error
+
+ listOpts := client.ListOptions{}
+ listOpts.ApplyOptions(opts)
+
+ if listOpts.Continue != "" {
+ return fmt.Errorf("continue list option is not supported by the cache")
+ }
+
+ switch {
+ case listOpts.FieldSelector != nil:
+ requiresExact := selector.RequiresExactMatch(listOpts.FieldSelector)
+ if !requiresExact {
+ return fmt.Errorf("non-exact field matches are not supported by the cache")
+ }
+ // list all objects by the field selector. If this is namespaced and we have one, ask for the
+ // namespaced index key. Otherwise, ask for the non-namespaced variant by using the fake "all namespaces"
+ // namespace.
+ objs, err = byIndexes(c.indexer, listOpts.FieldSelector.Requirements(), listOpts.Namespace)
+ case listOpts.Namespace != "":
+ objs, err = c.indexer.ByIndex(cache.NamespaceIndex, listOpts.Namespace)
+ default:
+ objs = c.indexer.List()
+ }
+ if err != nil {
+ return err
+ }
+ var labelSel labels.Selector
+ if listOpts.LabelSelector != nil {
+ labelSel = listOpts.LabelSelector
+ }
+
+ limitSet := listOpts.Limit > 0
+
+ runtimeObjs := make([]runtime.Object, 0, len(objs))
+ for _, item := range objs {
+ // if the Limit option is set and the number of items
+ // listed exceeds this limit, then stop reading.
+ if limitSet && int64(len(runtimeObjs)) >= listOpts.Limit {
+ break
+ }
+ obj, isObj := item.(runtime.Object)
+ if !isObj {
+ return fmt.Errorf("cache contained %T, which is not an Object", item)
+ }
+ meta, err := apimeta.Accessor(obj)
+ if err != nil {
+ return err
+ }
+ if labelSel != nil {
+ lbls := labels.Set(meta.GetLabels())
+ if !labelSel.Matches(lbls) {
+ continue
+ }
+ }
+
+ var outObj runtime.Object
+ if c.disableDeepCopy || (listOpts.UnsafeDisableDeepCopy != nil && *listOpts.UnsafeDisableDeepCopy) {
+ // skip deep copy which might be unsafe
+ // you must DeepCopy any object before mutating it outside
+ outObj = obj
+ } else {
+ outObj = obj.DeepCopyObject()
+ outObj.GetObjectKind().SetGroupVersionKind(c.groupVersionKind)
+ }
+ runtimeObjs = append(runtimeObjs, outObj)
+ }
+ return apimeta.SetList(out, runtimeObjs)
+}
+
+func byIndexes(indexer cache.Indexer, requires fields.Requirements, namespace string) ([]interface{}, error) {
+ var (
+ err error
+ objs []interface{}
+ vals []string
+ )
+ indexers := indexer.GetIndexers()
+ for idx, req := range requires {
+ indexName := FieldIndexName(req.Field)
+ indexedValue := KeyToNamespacedKey(namespace, req.Value)
+ if idx == 0 {
+ // we use first require to get snapshot data
+ // TODO(halfcrazy): use complicated index when client-go provides byIndexes
+ // https://github.com/kubernetes/kubernetes/issues/109329
+ objs, err = indexer.ByIndex(indexName, indexedValue)
+ if err != nil {
+ return nil, err
+ }
+ if len(objs) == 0 {
+ return nil, nil
+ }
+ continue
+ }
+ fn, exist := indexers[indexName]
+ if !exist {
+ return nil, fmt.Errorf("index with name %s does not exist", indexName)
+ }
+ filteredObjects := make([]interface{}, 0, len(objs))
+ for _, obj := range objs {
+ vals, err = fn(obj)
+ if err != nil {
+ return nil, err
+ }
+ for _, val := range vals {
+ if val == indexedValue {
+ filteredObjects = append(filteredObjects, obj)
+ break
+ }
+ }
+ }
+ if len(filteredObjects) == 0 {
+ return nil, nil
+ }
+ objs = filteredObjects
+ }
+ return objs, nil
+}
+
+// objectKeyToStorageKey converts an object key to store key.
+// It's akin to MetaNamespaceKeyFunc. It's separate from
+// String to allow keeping the key format easily in sync with
+// MetaNamespaceKeyFunc.
+func objectKeyToStoreKey(k client.ObjectKey) string {
+ if k.Namespace == "" {
+ return k.Name
+ }
+ return k.Namespace + "/" + k.Name
+}
+
+// FieldIndexName constructs the name of the index over the given field,
+// for use with an indexer.
+func FieldIndexName(field string) string {
+ return "field:" + field
+}
+
+// allNamespacesNamespace is used as the "namespace" when we want to list across all namespaces.
+const allNamespacesNamespace = "__all_namespaces"
+
+// KeyToNamespacedKey prefixes the given index key with a namespace
+// for use in field selector indexes.
+func KeyToNamespacedKey(ns string, baseKey string) string {
+ if ns != "" {
+ return ns + "/" + baseKey
+ }
+ return allNamespacesNamespace + "/" + baseKey
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/cache/internal/informers.go b/vendor/sigs.k8s.io/controller-runtime/pkg/cache/internal/informers.go
new file mode 100644
index 00000000000..097ee7a457c
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/cache/internal/informers.go
@@ -0,0 +1,610 @@
+/*
+Copyright 2018 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 internal
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "math/rand"
+ "net/http"
+ "sync"
+ "time"
+
+ apierrors "k8s.io/apimachinery/pkg/api/errors"
+ "k8s.io/apimachinery/pkg/api/meta"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "k8s.io/apimachinery/pkg/runtime/serializer"
+ "k8s.io/apimachinery/pkg/watch"
+ "k8s.io/client-go/dynamic"
+ "k8s.io/client-go/metadata"
+ "k8s.io/client-go/rest"
+ "k8s.io/client-go/tools/cache"
+ "sigs.k8s.io/controller-runtime/pkg/client/apiutil"
+ "sigs.k8s.io/controller-runtime/pkg/internal/syncs"
+)
+
+// InformersOpts configures an InformerMap.
+type InformersOpts struct {
+ HTTPClient *http.Client
+ Scheme *runtime.Scheme
+ Mapper meta.RESTMapper
+ ResyncPeriod time.Duration
+ Namespace string
+ NewInformer func(cache.ListerWatcher, runtime.Object, time.Duration, cache.Indexers) cache.SharedIndexInformer
+ Selector Selector
+ Transform cache.TransformFunc
+ UnsafeDisableDeepCopy bool
+ EnableWatchBookmarks bool
+ WatchErrorHandler cache.WatchErrorHandler
+}
+
+// NewInformers creates a new InformersMap that can create informers under the hood.
+func NewInformers(config *rest.Config, options *InformersOpts) *Informers {
+ newInformer := cache.NewSharedIndexInformer
+ if options.NewInformer != nil {
+ newInformer = options.NewInformer
+ }
+ return &Informers{
+ config: config,
+ httpClient: options.HTTPClient,
+ scheme: options.Scheme,
+ mapper: options.Mapper,
+ tracker: tracker{
+ Structured: make(map[schema.GroupVersionKind]*Cache),
+ Unstructured: make(map[schema.GroupVersionKind]*Cache),
+ Metadata: make(map[schema.GroupVersionKind]*Cache),
+ },
+ codecs: serializer.NewCodecFactory(options.Scheme),
+ paramCodec: runtime.NewParameterCodec(options.Scheme),
+ resync: options.ResyncPeriod,
+ startWait: make(chan struct{}),
+ namespace: options.Namespace,
+ selector: options.Selector,
+ transform: options.Transform,
+ unsafeDisableDeepCopy: options.UnsafeDisableDeepCopy,
+ enableWatchBookmarks: options.EnableWatchBookmarks,
+ newInformer: newInformer,
+ watchErrorHandler: options.WatchErrorHandler,
+ }
+}
+
+// Cache contains the cached data for an Cache.
+type Cache struct {
+ // Informer is the cached informer
+ Informer cache.SharedIndexInformer
+
+ // CacheReader wraps Informer and implements the CacheReader interface for a single type
+ Reader CacheReader
+
+ // Stop can be used to stop this individual informer.
+ stop chan struct{}
+}
+
+// Start starts the informer managed by a MapEntry.
+// Blocks until the informer stops. The informer can be stopped
+// either individually (via the entry's stop channel) or globally
+// via the provided stop argument.
+func (c *Cache) Start(stop <-chan struct{}) {
+ // Stop on either the whole map stopping or just this informer being removed.
+ internalStop, cancel := syncs.MergeChans(stop, c.stop)
+ defer cancel()
+ c.Informer.Run(internalStop)
+}
+
+type tracker struct {
+ Structured map[schema.GroupVersionKind]*Cache
+ Unstructured map[schema.GroupVersionKind]*Cache
+ Metadata map[schema.GroupVersionKind]*Cache
+}
+
+// GetOptions provides configuration to customize the behavior when
+// getting an informer.
+type GetOptions struct {
+ // BlockUntilSynced controls if the informer retrieval will block until the informer is synced. Defaults to `true`.
+ BlockUntilSynced *bool
+}
+
+// Informers create and caches Informers for (runtime.Object, schema.GroupVersionKind) pairs.
+// It uses a standard parameter codec constructed based on the given generated Scheme.
+type Informers struct {
+ // httpClient is used to create a new REST client
+ httpClient *http.Client
+
+ // scheme maps runtime.Objects to GroupVersionKinds
+ scheme *runtime.Scheme
+
+ // config is used to talk to the apiserver
+ config *rest.Config
+
+ // mapper maps GroupVersionKinds to Resources
+ mapper meta.RESTMapper
+
+ // tracker tracks informers keyed by their type and groupVersionKind
+ tracker tracker
+
+ // codecs is used to create a new REST client
+ codecs serializer.CodecFactory
+
+ // paramCodec is used by list and watch
+ paramCodec runtime.ParameterCodec
+
+ // resync is the base frequency the informers are resynced
+ // a 10 percent jitter will be added to the resync period between informers
+ // so that all informers will not send list requests simultaneously.
+ resync time.Duration
+
+ // mu guards access to the map
+ mu sync.RWMutex
+
+ // started is true if the informers have been started
+ started bool
+
+ // startWait is a channel that is closed after the
+ // informer has been started.
+ startWait chan struct{}
+
+ // waitGroup is the wait group that is used to wait for all informers to stop
+ waitGroup sync.WaitGroup
+
+ // stopped is true if the informers have been stopped
+ stopped bool
+
+ // ctx is the context to stop informers
+ ctx context.Context
+
+ // namespace is the namespace that all ListWatches are restricted to
+ // default or empty string means all namespaces
+ namespace string
+
+ selector Selector
+ transform cache.TransformFunc
+ unsafeDisableDeepCopy bool
+ enableWatchBookmarks bool
+
+ // NewInformer allows overriding of the shared index informer constructor for testing.
+ newInformer func(cache.ListerWatcher, runtime.Object, time.Duration, cache.Indexers) cache.SharedIndexInformer
+
+ // WatchErrorHandler allows the shared index informer's
+ // watchErrorHandler to be set by overriding the options
+ // or to use the default watchErrorHandler
+ watchErrorHandler cache.WatchErrorHandler
+}
+
+// Start calls Run on each of the informers and sets started to true. Blocks on the context.
+// It doesn't return start because it can't return an error, and it's not a runnable directly.
+func (ip *Informers) Start(ctx context.Context) error {
+ if err := func() error {
+ ip.mu.Lock()
+ defer ip.mu.Unlock()
+
+ if ip.started {
+ return errors.New("Informer already started") //nolint:stylecheck
+ }
+
+ // Set the context so it can be passed to informers that are added later
+ ip.ctx = ctx
+
+ // Start each informer
+ for _, i := range ip.tracker.Structured {
+ ip.startInformerLocked(i)
+ }
+ for _, i := range ip.tracker.Unstructured {
+ ip.startInformerLocked(i)
+ }
+ for _, i := range ip.tracker.Metadata {
+ ip.startInformerLocked(i)
+ }
+
+ // Set started to true so we immediately start any informers added later.
+ ip.started = true
+ close(ip.startWait)
+
+ return nil
+ }(); err != nil {
+ return err
+ }
+ <-ctx.Done() // Block until the context is done
+ ip.mu.Lock()
+ ip.stopped = true // Set stopped to true so we don't start any new informers
+ ip.mu.Unlock()
+ ip.waitGroup.Wait() // Block until all informers have stopped
+ return nil
+}
+
+func (ip *Informers) startInformerLocked(cacheEntry *Cache) {
+ // Don't start the informer in case we are already waiting for the items in
+ // the waitGroup to finish, since waitGroups don't support waiting and adding
+ // at the same time.
+ if ip.stopped {
+ return
+ }
+
+ ip.waitGroup.Add(1)
+ go func() {
+ defer ip.waitGroup.Done()
+ cacheEntry.Start(ip.ctx.Done())
+ }()
+}
+
+func (ip *Informers) waitForStarted(ctx context.Context) bool {
+ select {
+ case <-ip.startWait:
+ return true
+ case <-ctx.Done():
+ return false
+ }
+}
+
+// getHasSyncedFuncs returns all the HasSynced functions for the informers in this map.
+func (ip *Informers) getHasSyncedFuncs() []cache.InformerSynced {
+ ip.mu.RLock()
+ defer ip.mu.RUnlock()
+
+ res := make([]cache.InformerSynced, 0,
+ len(ip.tracker.Structured)+len(ip.tracker.Unstructured)+len(ip.tracker.Metadata),
+ )
+ for _, i := range ip.tracker.Structured {
+ res = append(res, i.Informer.HasSynced)
+ }
+ for _, i := range ip.tracker.Unstructured {
+ res = append(res, i.Informer.HasSynced)
+ }
+ for _, i := range ip.tracker.Metadata {
+ res = append(res, i.Informer.HasSynced)
+ }
+ return res
+}
+
+// WaitForCacheSync waits until all the caches have been started and synced.
+func (ip *Informers) WaitForCacheSync(ctx context.Context) bool {
+ if !ip.waitForStarted(ctx) {
+ return false
+ }
+ return cache.WaitForCacheSync(ctx.Done(), ip.getHasSyncedFuncs()...)
+}
+
+// Peek attempts to get the informer for the GVK, but does not start one if one does not exist.
+func (ip *Informers) Peek(gvk schema.GroupVersionKind, obj runtime.Object) (res *Cache, started bool, ok bool) {
+ ip.mu.RLock()
+ defer ip.mu.RUnlock()
+ i, ok := ip.informersByType(obj)[gvk]
+ return i, ip.started, ok
+}
+
+// Get will create a new Informer and add it to the map of specificInformersMap if none exists. Returns
+// the Informer from the map.
+func (ip *Informers) Get(ctx context.Context, gvk schema.GroupVersionKind, obj runtime.Object, opts *GetOptions) (bool, *Cache, error) {
+ // Return the informer if it is found
+ i, started, ok := ip.Peek(gvk, obj)
+ if !ok {
+ var err error
+ if i, started, err = ip.addInformerToMap(gvk, obj); err != nil {
+ return started, nil, err
+ }
+ }
+
+ shouldBlock := true
+ if opts.BlockUntilSynced != nil {
+ shouldBlock = *opts.BlockUntilSynced
+ }
+
+ if shouldBlock && started && !i.Informer.HasSynced() {
+ // Wait for it to sync before returning the Informer so that folks don't read from a stale cache.
+ if !cache.WaitForCacheSync(ctx.Done(), i.Informer.HasSynced) {
+ return started, nil, apierrors.NewTimeoutError(fmt.Sprintf("failed waiting for %T Informer to sync", obj), 0)
+ }
+ }
+
+ return started, i, nil
+}
+
+// Remove removes an informer entry and stops it if it was running.
+func (ip *Informers) Remove(gvk schema.GroupVersionKind, obj runtime.Object) {
+ ip.mu.Lock()
+ defer ip.mu.Unlock()
+
+ informerMap := ip.informersByType(obj)
+
+ entry, ok := informerMap[gvk]
+ if !ok {
+ return
+ }
+ close(entry.stop)
+ delete(informerMap, gvk)
+}
+
+func (ip *Informers) informersByType(obj runtime.Object) map[schema.GroupVersionKind]*Cache {
+ switch obj.(type) {
+ case runtime.Unstructured:
+ return ip.tracker.Unstructured
+ case *metav1.PartialObjectMetadata, *metav1.PartialObjectMetadataList:
+ return ip.tracker.Metadata
+ default:
+ return ip.tracker.Structured
+ }
+}
+
+// addInformerToMap either returns an existing informer or creates a new informer, adds it to the map and returns it.
+func (ip *Informers) addInformerToMap(gvk schema.GroupVersionKind, obj runtime.Object) (*Cache, bool, error) {
+ ip.mu.Lock()
+ defer ip.mu.Unlock()
+
+ // Check the cache to see if we already have an Informer. If we do, return the Informer.
+ // This is for the case where 2 routines tried to get the informer when it wasn't in the map
+ // so neither returned early, but the first one created it.
+ if i, ok := ip.informersByType(obj)[gvk]; ok {
+ return i, ip.started, nil
+ }
+
+ // Create a NewSharedIndexInformer and add it to the map.
+ listWatcher, err := ip.makeListWatcher(gvk, obj)
+ if err != nil {
+ return nil, false, err
+ }
+ sharedIndexInformer := ip.newInformer(&cache.ListWatch{
+ ListFunc: func(opts metav1.ListOptions) (runtime.Object, error) {
+ ip.selector.ApplyToList(&opts)
+ return listWatcher.ListFunc(opts)
+ },
+ WatchFunc: func(opts metav1.ListOptions) (watch.Interface, error) {
+ opts.Watch = true // Watch needs to be set to true separately
+ opts.AllowWatchBookmarks = ip.enableWatchBookmarks
+
+ ip.selector.ApplyToList(&opts)
+ return listWatcher.WatchFunc(opts)
+ },
+ }, obj, calculateResyncPeriod(ip.resync), cache.Indexers{
+ cache.NamespaceIndex: cache.MetaNamespaceIndexFunc,
+ })
+
+ // Set WatchErrorHandler on SharedIndexInformer if set
+ if ip.watchErrorHandler != nil {
+ if err := sharedIndexInformer.SetWatchErrorHandler(ip.watchErrorHandler); err != nil {
+ return nil, false, err
+ }
+ }
+
+ // Check to see if there is a transformer for this gvk
+ if err := sharedIndexInformer.SetTransform(ip.transform); err != nil {
+ return nil, false, err
+ }
+
+ mapping, err := ip.mapper.RESTMapping(gvk.GroupKind(), gvk.Version)
+ if err != nil {
+ return nil, false, err
+ }
+
+ // Create the new entry and set it in the map.
+ i := &Cache{
+ Informer: sharedIndexInformer,
+ Reader: CacheReader{
+ indexer: sharedIndexInformer.GetIndexer(),
+ groupVersionKind: gvk,
+ scopeName: mapping.Scope.Name(),
+ disableDeepCopy: ip.unsafeDisableDeepCopy,
+ },
+ stop: make(chan struct{}),
+ }
+ ip.informersByType(obj)[gvk] = i
+
+ // Start the informer in case the InformersMap has started, otherwise it will be
+ // started when the InformersMap starts.
+ if ip.started {
+ ip.startInformerLocked(i)
+ }
+ return i, ip.started, nil
+}
+
+func (ip *Informers) makeListWatcher(gvk schema.GroupVersionKind, obj runtime.Object) (*cache.ListWatch, error) {
+ // Kubernetes APIs work against Resources, not GroupVersionKinds. Map the
+ // groupVersionKind to the Resource API we will use.
+ mapping, err := ip.mapper.RESTMapping(gvk.GroupKind(), gvk.Version)
+ if err != nil {
+ return nil, err
+ }
+
+ // Figure out if the GVK we're dealing with is global, or namespace scoped.
+ var namespace string
+ if mapping.Scope.Name() == meta.RESTScopeNameNamespace {
+ namespace = restrictNamespaceBySelector(ip.namespace, ip.selector)
+ }
+
+ switch obj.(type) {
+ //
+ // Unstructured
+ //
+ case runtime.Unstructured:
+ // If the rest configuration has a negotiated serializer passed in,
+ // we should remove it and use the one that the dynamic client sets for us.
+ cfg := rest.CopyConfig(ip.config)
+ cfg.NegotiatedSerializer = nil
+ dynamicClient, err := dynamic.NewForConfigAndClient(cfg, ip.httpClient)
+ if err != nil {
+ return nil, err
+ }
+ resources := dynamicClient.Resource(mapping.Resource)
+ return &cache.ListWatch{
+ ListFunc: func(opts metav1.ListOptions) (runtime.Object, error) {
+ if namespace != "" {
+ return resources.Namespace(namespace).List(ip.ctx, opts)
+ }
+ return resources.List(ip.ctx, opts)
+ },
+ // Setup the watch function
+ WatchFunc: func(opts metav1.ListOptions) (watch.Interface, error) {
+ opts.Watch = true // Watch needs to be set to true separately
+ opts.AllowWatchBookmarks = ip.enableWatchBookmarks
+
+ if namespace != "" {
+ return resources.Namespace(namespace).Watch(ip.ctx, opts)
+ }
+ return resources.Watch(ip.ctx, opts)
+ },
+ }, nil
+ //
+ // Metadata
+ //
+ case *metav1.PartialObjectMetadata, *metav1.PartialObjectMetadataList:
+ // Always clear the negotiated serializer and use the one
+ // set from the metadata client.
+ cfg := rest.CopyConfig(ip.config)
+ cfg.NegotiatedSerializer = nil
+
+ // Grab the metadata metadataClient.
+ metadataClient, err := metadata.NewForConfigAndClient(cfg, ip.httpClient)
+ if err != nil {
+ return nil, err
+ }
+ resources := metadataClient.Resource(mapping.Resource)
+
+ return &cache.ListWatch{
+ ListFunc: func(opts metav1.ListOptions) (runtime.Object, error) {
+ var (
+ list *metav1.PartialObjectMetadataList
+ err error
+ )
+ if namespace != "" {
+ list, err = resources.Namespace(namespace).List(ip.ctx, opts)
+ } else {
+ list, err = resources.List(ip.ctx, opts)
+ }
+ if list != nil {
+ for i := range list.Items {
+ list.Items[i].SetGroupVersionKind(gvk)
+ }
+ }
+ return list, err
+ },
+ // Setup the watch function
+ WatchFunc: func(opts metav1.ListOptions) (watcher watch.Interface, err error) {
+ opts.Watch = true // Watch needs to be set to true separately
+ opts.AllowWatchBookmarks = ip.enableWatchBookmarks
+
+ if namespace != "" {
+ watcher, err = resources.Namespace(namespace).Watch(ip.ctx, opts)
+ } else {
+ watcher, err = resources.Watch(ip.ctx, opts)
+ }
+ if err != nil {
+ return nil, err
+ }
+ return newGVKFixupWatcher(gvk, watcher), nil
+ },
+ }, nil
+ //
+ // Structured.
+ //
+ default:
+ client, err := apiutil.RESTClientForGVK(gvk, false, ip.config, ip.codecs, ip.httpClient)
+ if err != nil {
+ return nil, err
+ }
+ listGVK := gvk.GroupVersion().WithKind(gvk.Kind + "List")
+ listObj, err := ip.scheme.New(listGVK)
+ if err != nil {
+ return nil, err
+ }
+ return &cache.ListWatch{
+ ListFunc: func(opts metav1.ListOptions) (runtime.Object, error) {
+ // Build the request.
+ req := client.Get().Resource(mapping.Resource.Resource).VersionedParams(&opts, ip.paramCodec)
+ if namespace != "" {
+ req.Namespace(namespace)
+ }
+
+ // Create the resulting object, and execute the request.
+ res := listObj.DeepCopyObject()
+ if err := req.Do(ip.ctx).Into(res); err != nil {
+ return nil, err
+ }
+ return res, nil
+ },
+ // Setup the watch function
+ WatchFunc: func(opts metav1.ListOptions) (watch.Interface, error) {
+ opts.Watch = true // Watch needs to be set to true separately
+ opts.AllowWatchBookmarks = ip.enableWatchBookmarks
+
+ // Build the request.
+ req := client.Get().Resource(mapping.Resource.Resource).VersionedParams(&opts, ip.paramCodec)
+ if namespace != "" {
+ req.Namespace(namespace)
+ }
+ // Call the watch.
+ return req.Watch(ip.ctx)
+ },
+ }, nil
+ }
+}
+
+// newGVKFixupWatcher adds a wrapper that preserves the GVK information when
+// events come in.
+//
+// This works around a bug where GVK information is not passed into mapping
+// functions when using the OnlyMetadata option in the builder.
+// This issue is most likely caused by kubernetes/kubernetes#80609.
+// See kubernetes-sigs/controller-runtime#1484.
+//
+// This was originally implemented as a cache.ResourceEventHandler wrapper but
+// that contained a data race which was resolved by setting the GVK in a watch
+// wrapper, before the objects are written to the cache.
+// See kubernetes-sigs/controller-runtime#1650.
+//
+// The original watch wrapper was found to be incompatible with
+// k8s.io/client-go/tools/cache.Reflector so it has been re-implemented as a
+// watch.Filter which is compatible.
+// See kubernetes-sigs/controller-runtime#1789.
+func newGVKFixupWatcher(gvk schema.GroupVersionKind, watcher watch.Interface) watch.Interface {
+ return watch.Filter(
+ watcher,
+ func(in watch.Event) (watch.Event, bool) {
+ in.Object.GetObjectKind().SetGroupVersionKind(gvk)
+ return in, true
+ },
+ )
+}
+
+// calculateResyncPeriod returns a duration based on the desired input
+// this is so that multiple controllers don't get into lock-step and all
+// hammer the apiserver with list requests simultaneously.
+func calculateResyncPeriod(resync time.Duration) time.Duration {
+ // the factor will fall into [0.9, 1.1)
+ factor := rand.Float64()/5.0 + 0.9
+ return time.Duration(float64(resync.Nanoseconds()) * factor)
+}
+
+// restrictNamespaceBySelector returns either a global restriction for all ListWatches
+// if not default/empty, or the namespace that a ListWatch for the specific resource
+// is restricted to, based on a specified field selector for metadata.namespace field.
+func restrictNamespaceBySelector(namespaceOpt string, s Selector) string {
+ if namespaceOpt != "" {
+ // namespace is already restricted
+ return namespaceOpt
+ }
+ fieldSelector := s.Field
+ if fieldSelector == nil || fieldSelector.Empty() {
+ return ""
+ }
+ // check whether a selector includes the namespace field
+ value, found := fieldSelector.RequiresExactMatch("metadata.namespace")
+ if found {
+ return value
+ }
+ return ""
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/cache/internal/selector.go b/vendor/sigs.k8s.io/controller-runtime/pkg/cache/internal/selector.go
new file mode 100644
index 00000000000..c674379b992
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/cache/internal/selector.go
@@ -0,0 +1,39 @@
+/*
+Copyright 2021 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 internal
+
+import (
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/fields"
+ "k8s.io/apimachinery/pkg/labels"
+)
+
+// Selector specify the label/field selector to fill in ListOptions.
+type Selector struct {
+ Label labels.Selector
+ Field fields.Selector
+}
+
+// ApplyToList fill in ListOptions LabelSelector and FieldSelector if needed.
+func (s Selector) ApplyToList(listOpts *metav1.ListOptions) {
+ if s.Label != nil {
+ listOpts.LabelSelector = s.Label.String()
+ }
+ if s.Field != nil {
+ listOpts.FieldSelector = s.Field.String()
+ }
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/cache/multi_namespace_cache.go b/vendor/sigs.k8s.io/controller-runtime/pkg/cache/multi_namespace_cache.go
new file mode 100644
index 00000000000..aeeeb66937b
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/cache/multi_namespace_cache.go
@@ -0,0 +1,431 @@
+/*
+Copyright 2019 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 cache
+
+import (
+ "context"
+ "fmt"
+ "time"
+
+ corev1 "k8s.io/api/core/v1"
+ apimeta "k8s.io/apimachinery/pkg/api/meta"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ toolscache "k8s.io/client-go/tools/cache"
+
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/client/apiutil"
+)
+
+// a new global namespaced cache to handle cluster scoped resources.
+const globalCache = "_cluster-scope"
+
+func newMultiNamespaceCache(
+ newCache newCacheFunc,
+ scheme *runtime.Scheme,
+ restMapper apimeta.RESTMapper,
+ namespaces map[string]Config,
+ globalConfig *Config, // may be nil in which case no cache for cluster-scoped objects will be created
+) Cache {
+ // Create every namespace cache.
+ caches := map[string]Cache{}
+ for namespace, config := range namespaces {
+ caches[namespace] = newCache(config, namespace)
+ }
+
+ // Create a cache for cluster scoped resources if requested
+ var clusterCache Cache
+ if globalConfig != nil {
+ clusterCache = newCache(*globalConfig, corev1.NamespaceAll)
+ }
+
+ return &multiNamespaceCache{
+ namespaceToCache: caches,
+ Scheme: scheme,
+ RESTMapper: restMapper,
+ clusterCache: clusterCache,
+ }
+}
+
+// multiNamespaceCache knows how to handle multiple namespaced caches
+// Use this feature when scoping permissions for your
+// operator to a list of namespaces instead of watching every namespace
+// in the cluster.
+type multiNamespaceCache struct {
+ Scheme *runtime.Scheme
+ RESTMapper apimeta.RESTMapper
+ namespaceToCache map[string]Cache
+ clusterCache Cache
+}
+
+var _ Cache = &multiNamespaceCache{}
+
+// Methods for multiNamespaceCache to conform to the Informers interface.
+
+func (c *multiNamespaceCache) GetInformer(ctx context.Context, obj client.Object, opts ...InformerGetOption) (Informer, error) {
+ // If the object is cluster scoped, get the informer from clusterCache,
+ // if not use the namespaced caches.
+ isNamespaced, err := apiutil.IsObjectNamespaced(obj, c.Scheme, c.RESTMapper)
+ if err != nil {
+ return nil, err
+ }
+ if !isNamespaced {
+ clusterCacheInformer, err := c.clusterCache.GetInformer(ctx, obj, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return &multiNamespaceInformer{
+ namespaceToInformer: map[string]Informer{
+ globalCache: clusterCacheInformer,
+ },
+ }, nil
+ }
+
+ namespaceToInformer := map[string]Informer{}
+ for ns, cache := range c.namespaceToCache {
+ informer, err := cache.GetInformer(ctx, obj, opts...)
+ if err != nil {
+ return nil, err
+ }
+ namespaceToInformer[ns] = informer
+ }
+
+ return &multiNamespaceInformer{namespaceToInformer: namespaceToInformer}, nil
+}
+
+func (c *multiNamespaceCache) RemoveInformer(ctx context.Context, obj client.Object) error {
+ // If the object is clusterscoped, get the informer from clusterCache,
+ // if not use the namespaced caches.
+ isNamespaced, err := apiutil.IsObjectNamespaced(obj, c.Scheme, c.RESTMapper)
+ if err != nil {
+ return err
+ }
+ if !isNamespaced {
+ return c.clusterCache.RemoveInformer(ctx, obj)
+ }
+
+ for _, cache := range c.namespaceToCache {
+ err := cache.RemoveInformer(ctx, obj)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+func (c *multiNamespaceCache) GetInformerForKind(ctx context.Context, gvk schema.GroupVersionKind, opts ...InformerGetOption) (Informer, error) {
+ // If the object is cluster scoped, get the informer from clusterCache,
+ // if not use the namespaced caches.
+ isNamespaced, err := apiutil.IsGVKNamespaced(gvk, c.RESTMapper)
+ if err != nil {
+ return nil, err
+ }
+ if !isNamespaced {
+ clusterCacheInformer, err := c.clusterCache.GetInformerForKind(ctx, gvk, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return &multiNamespaceInformer{
+ namespaceToInformer: map[string]Informer{
+ globalCache: clusterCacheInformer,
+ },
+ }, nil
+ }
+
+ namespaceToInformer := map[string]Informer{}
+ for ns, cache := range c.namespaceToCache {
+ informer, err := cache.GetInformerForKind(ctx, gvk, opts...)
+ if err != nil {
+ return nil, err
+ }
+ namespaceToInformer[ns] = informer
+ }
+
+ return &multiNamespaceInformer{namespaceToInformer: namespaceToInformer}, nil
+}
+
+func (c *multiNamespaceCache) Start(ctx context.Context) error {
+ errs := make(chan error)
+ // start global cache
+ if c.clusterCache != nil {
+ go func() {
+ err := c.clusterCache.Start(ctx)
+ if err != nil {
+ errs <- fmt.Errorf("failed to start cluster-scoped cache: %w", err)
+ }
+ }()
+ }
+
+ // start namespaced caches
+ for ns, cache := range c.namespaceToCache {
+ go func(ns string, cache Cache) {
+ if err := cache.Start(ctx); err != nil {
+ errs <- fmt.Errorf("failed to start cache for namespace %s: %w", ns, err)
+ }
+ }(ns, cache)
+ }
+ select {
+ case <-ctx.Done():
+ return nil
+ case err := <-errs:
+ return err
+ }
+}
+
+func (c *multiNamespaceCache) WaitForCacheSync(ctx context.Context) bool {
+ synced := true
+ for _, cache := range c.namespaceToCache {
+ if !cache.WaitForCacheSync(ctx) {
+ synced = false
+ }
+ }
+
+ // check if cluster scoped cache has synced
+ if c.clusterCache != nil && !c.clusterCache.WaitForCacheSync(ctx) {
+ synced = false
+ }
+ return synced
+}
+
+func (c *multiNamespaceCache) IndexField(ctx context.Context, obj client.Object, field string, extractValue client.IndexerFunc) error {
+ isNamespaced, err := apiutil.IsObjectNamespaced(obj, c.Scheme, c.RESTMapper)
+ if err != nil {
+ return err
+ }
+
+ if !isNamespaced {
+ return c.clusterCache.IndexField(ctx, obj, field, extractValue)
+ }
+
+ for _, cache := range c.namespaceToCache {
+ if err := cache.IndexField(ctx, obj, field, extractValue); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func (c *multiNamespaceCache) Get(ctx context.Context, key client.ObjectKey, obj client.Object, opts ...client.GetOption) error {
+ isNamespaced, err := apiutil.IsObjectNamespaced(obj, c.Scheme, c.RESTMapper)
+ if err != nil {
+ return err
+ }
+
+ if !isNamespaced {
+ // Look into the global cache to fetch the object
+ return c.clusterCache.Get(ctx, key, obj)
+ }
+
+ cache, ok := c.namespaceToCache[key.Namespace]
+ if !ok {
+ if global, hasGlobal := c.namespaceToCache[metav1.NamespaceAll]; hasGlobal {
+ return global.Get(ctx, key, obj, opts...)
+ }
+ return fmt.Errorf("unable to get: %v because of unknown namespace for the cache", key)
+ }
+ return cache.Get(ctx, key, obj, opts...)
+}
+
+// List multi namespace cache will get all the objects in the namespaces that the cache is watching if asked for all namespaces.
+func (c *multiNamespaceCache) List(ctx context.Context, list client.ObjectList, opts ...client.ListOption) error {
+ listOpts := client.ListOptions{}
+ listOpts.ApplyOptions(opts)
+
+ isNamespaced, err := apiutil.IsObjectNamespaced(list, c.Scheme, c.RESTMapper)
+ if err != nil {
+ return err
+ }
+
+ if !isNamespaced {
+ // Look at the global cache to get the objects with the specified GVK
+ return c.clusterCache.List(ctx, list, opts...)
+ }
+
+ if listOpts.Namespace != corev1.NamespaceAll {
+ cache, ok := c.namespaceToCache[listOpts.Namespace]
+ if !ok {
+ if global, hasGlobal := c.namespaceToCache[AllNamespaces]; hasGlobal {
+ return global.List(ctx, list, opts...)
+ }
+ return fmt.Errorf("unable to list: %v because of unknown namespace for the cache", listOpts.Namespace)
+ }
+ return cache.List(ctx, list, opts...)
+ }
+
+ listAccessor, err := apimeta.ListAccessor(list)
+ if err != nil {
+ return err
+ }
+
+ allItems, err := apimeta.ExtractList(list)
+ if err != nil {
+ return err
+ }
+
+ limitSet := listOpts.Limit > 0
+
+ var resourceVersion string
+ for _, cache := range c.namespaceToCache {
+ listObj := list.DeepCopyObject().(client.ObjectList)
+ err = cache.List(ctx, listObj, &listOpts)
+ if err != nil {
+ return err
+ }
+ items, err := apimeta.ExtractList(listObj)
+ if err != nil {
+ return err
+ }
+ accessor, err := apimeta.ListAccessor(listObj)
+ if err != nil {
+ return fmt.Errorf("object: %T must be a list type", list)
+ }
+ allItems = append(allItems, items...)
+
+ // The last list call should have the most correct resource version.
+ resourceVersion = accessor.GetResourceVersion()
+ if limitSet {
+ // decrement Limit by the number of items
+ // fetched from the current namespace.
+ listOpts.Limit -= int64(len(items))
+
+ // if a Limit was set and the number of
+ // items read has reached this set limit,
+ // then stop reading.
+ if listOpts.Limit == 0 {
+ break
+ }
+ }
+ }
+ listAccessor.SetResourceVersion(resourceVersion)
+
+ return apimeta.SetList(list, allItems)
+}
+
+// multiNamespaceInformer knows how to handle interacting with the underlying informer across multiple namespaces.
+type multiNamespaceInformer struct {
+ namespaceToInformer map[string]Informer
+}
+
+type handlerRegistration struct {
+ handles map[string]toolscache.ResourceEventHandlerRegistration
+}
+
+type syncer interface {
+ HasSynced() bool
+}
+
+// HasSynced asserts that the handler has been called for the full initial state of the informer.
+// This uses syncer to be compatible between client-go 1.27+ and older versions when the interface changed.
+func (h handlerRegistration) HasSynced() bool {
+ for _, reg := range h.handles {
+ if s, ok := reg.(syncer); ok {
+ if !s.HasSynced() {
+ return false
+ }
+ }
+ }
+ return true
+}
+
+var _ Informer = &multiNamespaceInformer{}
+
+// AddEventHandler adds the handler to each informer.
+func (i *multiNamespaceInformer) AddEventHandler(handler toolscache.ResourceEventHandler) (toolscache.ResourceEventHandlerRegistration, error) {
+ handles := handlerRegistration{
+ handles: make(map[string]toolscache.ResourceEventHandlerRegistration, len(i.namespaceToInformer)),
+ }
+
+ for ns, informer := range i.namespaceToInformer {
+ registration, err := informer.AddEventHandler(handler)
+ if err != nil {
+ return nil, err
+ }
+ handles.handles[ns] = registration
+ }
+
+ return handles, nil
+}
+
+// AddEventHandlerWithResyncPeriod adds the handler with a resync period to each namespaced informer.
+func (i *multiNamespaceInformer) AddEventHandlerWithResyncPeriod(handler toolscache.ResourceEventHandler, resyncPeriod time.Duration) (toolscache.ResourceEventHandlerRegistration, error) {
+ handles := handlerRegistration{
+ handles: make(map[string]toolscache.ResourceEventHandlerRegistration, len(i.namespaceToInformer)),
+ }
+
+ for ns, informer := range i.namespaceToInformer {
+ registration, err := informer.AddEventHandlerWithResyncPeriod(handler, resyncPeriod)
+ if err != nil {
+ return nil, err
+ }
+ handles.handles[ns] = registration
+ }
+
+ return handles, nil
+}
+
+// RemoveEventHandler removes a previously added event handler given by its registration handle.
+func (i *multiNamespaceInformer) RemoveEventHandler(h toolscache.ResourceEventHandlerRegistration) error {
+ handles, ok := h.(handlerRegistration)
+ if !ok {
+ return fmt.Errorf("registration is not a registration returned by multiNamespaceInformer")
+ }
+ for ns, informer := range i.namespaceToInformer {
+ registration, ok := handles.handles[ns]
+ if !ok {
+ continue
+ }
+ if err := informer.RemoveEventHandler(registration); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+// AddIndexers adds the indexers to each informer.
+func (i *multiNamespaceInformer) AddIndexers(indexers toolscache.Indexers) error {
+ for _, informer := range i.namespaceToInformer {
+ err := informer.AddIndexers(indexers)
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+// HasSynced checks if each informer has synced.
+func (i *multiNamespaceInformer) HasSynced() bool {
+ for _, informer := range i.namespaceToInformer {
+ if !informer.HasSynced() {
+ return false
+ }
+ }
+ return true
+}
+
+// IsStopped checks if each namespaced informer has stopped, returns false if any are still running.
+func (i *multiNamespaceInformer) IsStopped() bool {
+ for _, informer := range i.namespaceToInformer {
+ if stopped := informer.IsStopped(); !stopped {
+ return false
+ }
+ }
+ return true
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/certwatcher/certwatcher.go b/vendor/sigs.k8s.io/controller-runtime/pkg/certwatcher/certwatcher.go
new file mode 100644
index 00000000000..c3232409823
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/certwatcher/certwatcher.go
@@ -0,0 +1,242 @@
+/*
+Copyright 2021 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 certwatcher
+
+import (
+ "bytes"
+ "context"
+ "crypto/tls"
+ "fmt"
+ "os"
+ "sync"
+ "time"
+
+ "github.com/fsnotify/fsnotify"
+ kerrors "k8s.io/apimachinery/pkg/util/errors"
+ "k8s.io/apimachinery/pkg/util/sets"
+ "k8s.io/apimachinery/pkg/util/wait"
+ "sigs.k8s.io/controller-runtime/pkg/certwatcher/metrics"
+ logf "sigs.k8s.io/controller-runtime/pkg/internal/log"
+)
+
+var log = logf.RuntimeLog.WithName("certwatcher")
+
+const defaultWatchInterval = 10 * time.Second
+
+// CertWatcher watches certificate and key files for changes.
+// It always returns the cached version,
+// but periodically reads and parses certificate and key for changes
+// and calls an optional callback with the new certificate.
+type CertWatcher struct {
+ sync.RWMutex
+
+ currentCert *tls.Certificate
+ watcher *fsnotify.Watcher
+ interval time.Duration
+
+ certPath string
+ keyPath string
+
+ cachedKeyPEMBlock []byte
+
+ // callback is a function to be invoked when the certificate changes.
+ callback func(tls.Certificate)
+}
+
+// New returns a new CertWatcher watching the given certificate and key.
+func New(certPath, keyPath string) (*CertWatcher, error) {
+ var err error
+
+ cw := &CertWatcher{
+ certPath: certPath,
+ keyPath: keyPath,
+ interval: defaultWatchInterval,
+ }
+
+ // Initial read of certificate and key.
+ if err := cw.ReadCertificate(); err != nil {
+ return nil, err
+ }
+
+ cw.watcher, err = fsnotify.NewWatcher()
+ if err != nil {
+ return nil, err
+ }
+
+ return cw, nil
+}
+
+// WithWatchInterval sets the watch interval and returns the CertWatcher pointer
+func (cw *CertWatcher) WithWatchInterval(interval time.Duration) *CertWatcher {
+ cw.interval = interval
+ return cw
+}
+
+// RegisterCallback registers a callback to be invoked when the certificate changes.
+func (cw *CertWatcher) RegisterCallback(callback func(tls.Certificate)) {
+ cw.Lock()
+ defer cw.Unlock()
+ // If the current certificate is not nil, invoke the callback immediately.
+ if cw.currentCert != nil {
+ callback(*cw.currentCert)
+ }
+ cw.callback = callback
+}
+
+// GetCertificate fetches the currently loaded certificate, which may be nil.
+func (cw *CertWatcher) GetCertificate(_ *tls.ClientHelloInfo) (*tls.Certificate, error) {
+ cw.RLock()
+ defer cw.RUnlock()
+ return cw.currentCert, nil
+}
+
+// Start starts the watch on the certificate and key files.
+func (cw *CertWatcher) Start(ctx context.Context) error {
+ files := sets.New(cw.certPath, cw.keyPath)
+
+ {
+ var watchErr error
+ if err := wait.PollUntilContextTimeout(ctx, 1*time.Second, 10*time.Second, true, func(ctx context.Context) (done bool, err error) {
+ for _, f := range files.UnsortedList() {
+ if err := cw.watcher.Add(f); err != nil {
+ watchErr = err
+ return false, nil //nolint:nilerr // We want to keep trying.
+ }
+ // We've added the watch, remove it from the set.
+ files.Delete(f)
+ }
+ return true, nil
+ }); err != nil {
+ return fmt.Errorf("failed to add watches: %w", kerrors.NewAggregate([]error{err, watchErr}))
+ }
+ }
+
+ go cw.Watch()
+
+ ticker := time.NewTicker(cw.interval)
+ defer ticker.Stop()
+
+ log.Info("Starting certificate poll+watcher", "interval", cw.interval)
+ for {
+ select {
+ case <-ctx.Done():
+ return cw.watcher.Close()
+ case <-ticker.C:
+ if err := cw.ReadCertificate(); err != nil {
+ log.Error(err, "failed read certificate")
+ }
+ }
+ }
+}
+
+// Watch reads events from the watcher's channel and reacts to changes.
+func (cw *CertWatcher) Watch() {
+ for {
+ select {
+ case event, ok := <-cw.watcher.Events:
+ // Channel is closed.
+ if !ok {
+ return
+ }
+
+ cw.handleEvent(event)
+ case err, ok := <-cw.watcher.Errors:
+ // Channel is closed.
+ if !ok {
+ return
+ }
+
+ log.Error(err, "certificate watch error")
+ }
+ }
+}
+
+// updateCachedCertificate checks if the new certificate differs from the cache,
+// updates it and returns the result if it was updated or not
+func (cw *CertWatcher) updateCachedCertificate(cert *tls.Certificate, keyPEMBlock []byte) bool {
+ cw.Lock()
+ defer cw.Unlock()
+
+ if cw.currentCert != nil &&
+ bytes.Equal(cw.currentCert.Certificate[0], cert.Certificate[0]) &&
+ bytes.Equal(cw.cachedKeyPEMBlock, keyPEMBlock) {
+ log.V(7).Info("certificate already cached")
+ return false
+ }
+ cw.currentCert = cert
+ cw.cachedKeyPEMBlock = keyPEMBlock
+ return true
+}
+
+// ReadCertificate reads the certificate and key files from disk, parses them,
+// and updates the current certificate on the watcher if updated. If a callback is set, it
+// is invoked with the new certificate.
+func (cw *CertWatcher) ReadCertificate() error {
+ metrics.ReadCertificateTotal.Inc()
+ certPEMBlock, err := os.ReadFile(cw.certPath)
+ if err != nil {
+ metrics.ReadCertificateErrors.Inc()
+ return err
+ }
+ keyPEMBlock, err := os.ReadFile(cw.keyPath)
+ if err != nil {
+ metrics.ReadCertificateErrors.Inc()
+ return err
+ }
+
+ cert, err := tls.X509KeyPair(certPEMBlock, keyPEMBlock)
+ if err != nil {
+ metrics.ReadCertificateErrors.Inc()
+ return err
+ }
+
+ if !cw.updateCachedCertificate(&cert, keyPEMBlock) {
+ return nil
+ }
+
+ log.Info("Updated current TLS certificate")
+
+ // If a callback is registered, invoke it with the new certificate.
+ cw.RLock()
+ defer cw.RUnlock()
+ if cw.callback != nil {
+ go func() {
+ cw.callback(cert)
+ }()
+ }
+ return nil
+}
+
+func (cw *CertWatcher) handleEvent(event fsnotify.Event) {
+ // Only care about events which may modify the contents of the file.
+ switch {
+ case event.Op.Has(fsnotify.Write):
+ case event.Op.Has(fsnotify.Create):
+ case event.Op.Has(fsnotify.Chmod), event.Op.Has(fsnotify.Remove):
+ // If the file was removed or renamed, re-add the watch to the previous name
+ if err := cw.watcher.Add(event.Name); err != nil {
+ log.Error(err, "error re-watching file")
+ }
+ default:
+ return
+ }
+
+ log.V(1).Info("certificate event", "event", event)
+ if err := cw.ReadCertificate(); err != nil {
+ log.Error(err, "error re-reading certificate")
+ }
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/certwatcher/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/certwatcher/doc.go
new file mode 100644
index 00000000000..40c2fc0bfbf
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/certwatcher/doc.go
@@ -0,0 +1,23 @@
+/*
+Copyright 2021 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 certwatcher is a helper for reloading Certificates from disk to be used
+with tls servers. It provides a helper func `GetCertificate` which can be
+called from `tls.Config` and passed into your tls.Listener. For a detailed
+example server view pkg/webhook/server.go.
+*/
+package certwatcher
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/certwatcher/metrics/metrics.go b/vendor/sigs.k8s.io/controller-runtime/pkg/certwatcher/metrics/metrics.go
new file mode 100644
index 00000000000..f128abbcf0e
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/certwatcher/metrics/metrics.go
@@ -0,0 +1,46 @@
+/*
+Copyright 2022 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 metrics
+
+import (
+ "github.com/prometheus/client_golang/prometheus"
+
+ "sigs.k8s.io/controller-runtime/pkg/metrics"
+)
+
+var (
+ // ReadCertificateTotal is a prometheus counter metrics which holds the total
+ // number of certificate reads.
+ ReadCertificateTotal = prometheus.NewCounter(prometheus.CounterOpts{
+ Name: "certwatcher_read_certificate_total",
+ Help: "Total number of certificate reads",
+ })
+
+ // ReadCertificateErrors is a prometheus counter metrics which holds the total
+ // number of errors from certificate read.
+ ReadCertificateErrors = prometheus.NewCounter(prometheus.CounterOpts{
+ Name: "certwatcher_read_certificate_errors_total",
+ Help: "Total number of certificate read errors",
+ })
+)
+
+func init() {
+ metrics.Registry.MustRegister(
+ ReadCertificateTotal,
+ ReadCertificateErrors,
+ )
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/client/config/config.go b/vendor/sigs.k8s.io/controller-runtime/pkg/client/config/config.go
new file mode 100644
index 00000000000..5f0a6d4b1dd
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/client/config/config.go
@@ -0,0 +1,181 @@
+/*
+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 config
+
+import (
+ "flag"
+ "fmt"
+ "os"
+ "os/user"
+ "path/filepath"
+
+ "k8s.io/client-go/rest"
+ "k8s.io/client-go/tools/clientcmd"
+ clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
+ logf "sigs.k8s.io/controller-runtime/pkg/internal/log"
+)
+
+// KubeconfigFlagName is the name of the kubeconfig flag
+const KubeconfigFlagName = "kubeconfig"
+
+var (
+ kubeconfig string
+ log = logf.RuntimeLog.WithName("client").WithName("config")
+)
+
+// init registers the "kubeconfig" flag to the default command line FlagSet.
+// TODO: This should be removed, as it potentially leads to redefined flag errors for users, if they already
+// have registered the "kubeconfig" flag to the command line FlagSet in other parts of their code.
+func init() {
+ RegisterFlags(flag.CommandLine)
+}
+
+// RegisterFlags registers flag variables to the given FlagSet if not already registered.
+// It uses the default command line FlagSet, if none is provided. Currently, it only registers the kubeconfig flag.
+func RegisterFlags(fs *flag.FlagSet) {
+ if fs == nil {
+ fs = flag.CommandLine
+ }
+ if f := fs.Lookup(KubeconfigFlagName); f != nil {
+ kubeconfig = f.Value.String()
+ } else {
+ fs.StringVar(&kubeconfig, KubeconfigFlagName, "", "Paths to a kubeconfig. Only required if out-of-cluster.")
+ }
+}
+
+// GetConfig creates a *rest.Config for talking to a Kubernetes API server.
+// If --kubeconfig is set, will use the kubeconfig file at that location. Otherwise will assume running
+// in cluster and use the cluster provided kubeconfig.
+//
+// It also applies saner defaults for QPS and burst based on the Kubernetes
+// controller manager defaults (20 QPS, 30 burst)
+//
+// Config precedence:
+//
+// * --kubeconfig flag pointing at a file
+//
+// * KUBECONFIG environment variable pointing at a file
+//
+// * In-cluster config if running in cluster
+//
+// * $HOME/.kube/config if exists.
+func GetConfig() (*rest.Config, error) {
+ return GetConfigWithContext("")
+}
+
+// GetConfigWithContext creates a *rest.Config for talking to a Kubernetes API server with a specific context.
+// If --kubeconfig is set, will use the kubeconfig file at that location. Otherwise will assume running
+// in cluster and use the cluster provided kubeconfig.
+//
+// It also applies saner defaults for QPS and burst based on the Kubernetes
+// controller manager defaults (20 QPS, 30 burst)
+//
+// Config precedence:
+//
+// * --kubeconfig flag pointing at a file
+//
+// * KUBECONFIG environment variable pointing at a file
+//
+// * In-cluster config if running in cluster
+//
+// * $HOME/.kube/config if exists.
+func GetConfigWithContext(context string) (*rest.Config, error) {
+ cfg, err := loadConfig(context)
+ if err != nil {
+ return nil, err
+ }
+ if cfg.QPS == 0.0 {
+ cfg.QPS = 20.0
+ }
+ if cfg.Burst == 0 {
+ cfg.Burst = 30
+ }
+ return cfg, nil
+}
+
+// loadInClusterConfig is a function used to load the in-cluster
+// Kubernetes client config. This variable makes is possible to
+// test the precedence of loading the config.
+var loadInClusterConfig = rest.InClusterConfig
+
+// loadConfig loads a REST Config as per the rules specified in GetConfig.
+func loadConfig(context string) (config *rest.Config, configErr error) {
+ // If a flag is specified with the config location, use that
+ if len(kubeconfig) > 0 {
+ return loadConfigWithContext("", &clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeconfig}, context)
+ }
+
+ // If the recommended kubeconfig env variable is not specified,
+ // try the in-cluster config.
+ kubeconfigPath := os.Getenv(clientcmd.RecommendedConfigPathEnvVar)
+ if len(kubeconfigPath) == 0 {
+ c, err := loadInClusterConfig()
+ if err == nil {
+ return c, nil
+ }
+
+ defer func() {
+ if configErr != nil {
+ log.Error(err, "unable to load in-cluster config")
+ }
+ }()
+ }
+
+ // If the recommended kubeconfig env variable is set, or there
+ // is no in-cluster config, try the default recommended locations.
+ //
+ // NOTE: For default config file locations, upstream only checks
+ // $HOME for the user's home directory, but we can also try
+ // os/user.HomeDir when $HOME is unset.
+ //
+ // TODO(jlanford): could this be done upstream?
+ loadingRules := clientcmd.NewDefaultClientConfigLoadingRules()
+ if _, ok := os.LookupEnv("HOME"); !ok {
+ u, err := user.Current()
+ if err != nil {
+ return nil, fmt.Errorf("could not get current user: %w", err)
+ }
+ loadingRules.Precedence = append(loadingRules.Precedence, filepath.Join(u.HomeDir, clientcmd.RecommendedHomeDir, clientcmd.RecommendedFileName))
+ }
+
+ return loadConfigWithContext("", loadingRules, context)
+}
+
+func loadConfigWithContext(apiServerURL string, loader clientcmd.ClientConfigLoader, context string) (*rest.Config, error) {
+ return clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
+ loader,
+ &clientcmd.ConfigOverrides{
+ ClusterInfo: clientcmdapi.Cluster{
+ Server: apiServerURL,
+ },
+ CurrentContext: context,
+ }).ClientConfig()
+}
+
+// GetConfigOrDie creates a *rest.Config for talking to a Kubernetes apiserver.
+// If --kubeconfig is set, will use the kubeconfig file at that location. Otherwise will assume running
+// in cluster and use the cluster provided kubeconfig.
+//
+// Will log an error and exit if there is an error creating the rest.Config.
+func GetConfigOrDie() *rest.Config {
+ config, err := GetConfig()
+ if err != nil {
+ log.Error(err, "unable to get kubeconfig")
+ os.Exit(1)
+ }
+ return config
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/client/config/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/client/config/doc.go
new file mode 100644
index 00000000000..796c9cf590b
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/client/config/doc.go
@@ -0,0 +1,18 @@
+/*
+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 config contains libraries for initializing REST configs for talking to the Kubernetes API
+package config
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/client/fake/client.go b/vendor/sigs.k8s.io/controller-runtime/pkg/client/fake/client.go
new file mode 100644
index 00000000000..793219c7237
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/client/fake/client.go
@@ -0,0 +1,1593 @@
+/*
+Copyright 2018 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 fake
+
+import (
+ "bytes"
+ "context"
+ "encoding/json"
+ "errors"
+ "fmt"
+ "reflect"
+ "runtime/debug"
+ "strconv"
+ "strings"
+ "sync"
+ "time"
+
+ // Using v4 to match upstream
+ jsonpatch "gopkg.in/evanphx/json-patch.v4"
+ appsv1 "k8s.io/api/apps/v1"
+ authenticationv1 "k8s.io/api/authentication/v1"
+ autoscalingv1 "k8s.io/api/autoscaling/v1"
+ corev1 "k8s.io/api/core/v1"
+ policyv1 "k8s.io/api/policy/v1"
+ policyv1beta1 "k8s.io/api/policy/v1beta1"
+ apierrors "k8s.io/apimachinery/pkg/api/errors"
+ "k8s.io/apimachinery/pkg/api/meta"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
+ "k8s.io/apimachinery/pkg/fields"
+ "k8s.io/apimachinery/pkg/labels"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "k8s.io/apimachinery/pkg/types"
+ utilrand "k8s.io/apimachinery/pkg/util/rand"
+ "k8s.io/apimachinery/pkg/util/sets"
+ "k8s.io/apimachinery/pkg/util/strategicpatch"
+ "k8s.io/apimachinery/pkg/util/validation/field"
+ "k8s.io/apimachinery/pkg/watch"
+ "k8s.io/client-go/kubernetes/scheme"
+ "k8s.io/client-go/testing"
+ "k8s.io/utils/ptr"
+
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/client/apiutil"
+ "sigs.k8s.io/controller-runtime/pkg/client/interceptor"
+ "sigs.k8s.io/controller-runtime/pkg/internal/field/selector"
+ "sigs.k8s.io/controller-runtime/pkg/internal/objectutil"
+)
+
+type versionedTracker struct {
+ testing.ObjectTracker
+ scheme *runtime.Scheme
+ withStatusSubresource sets.Set[schema.GroupVersionKind]
+}
+
+type fakeClient struct {
+ // trackerWriteLock must be acquired before writing to
+ // the tracker or performing reads that affect a following
+ // write.
+ trackerWriteLock sync.Mutex
+ tracker versionedTracker
+
+ schemeLock sync.RWMutex
+ scheme *runtime.Scheme
+
+ restMapper meta.RESTMapper
+ withStatusSubresource sets.Set[schema.GroupVersionKind]
+
+ // indexes maps each GroupVersionKind (GVK) to the indexes registered for that GVK.
+ // The inner map maps from index name to IndexerFunc.
+ indexes map[schema.GroupVersionKind]map[string]client.IndexerFunc
+ // indexesLock must be held when accessing indexes.
+ indexesLock sync.RWMutex
+}
+
+var _ client.WithWatch = &fakeClient{}
+
+const (
+ maxNameLength = 63
+ randomLength = 5
+ maxGeneratedNameLength = maxNameLength - randomLength
+
+ subResourceScale = "scale"
+)
+
+// NewFakeClient creates a new fake client for testing.
+// You can choose to initialize it with a slice of runtime.Object.
+func NewFakeClient(initObjs ...runtime.Object) client.WithWatch {
+ return NewClientBuilder().WithRuntimeObjects(initObjs...).Build()
+}
+
+// NewClientBuilder returns a new builder to create a fake client.
+func NewClientBuilder() *ClientBuilder {
+ return &ClientBuilder{}
+}
+
+// ClientBuilder builds a fake client.
+type ClientBuilder struct {
+ scheme *runtime.Scheme
+ restMapper meta.RESTMapper
+ initObject []client.Object
+ initLists []client.ObjectList
+ initRuntimeObjects []runtime.Object
+ withStatusSubresource []client.Object
+ objectTracker testing.ObjectTracker
+ interceptorFuncs *interceptor.Funcs
+
+ // indexes maps each GroupVersionKind (GVK) to the indexes registered for that GVK.
+ // The inner map maps from index name to IndexerFunc.
+ indexes map[schema.GroupVersionKind]map[string]client.IndexerFunc
+}
+
+// WithScheme sets this builder's internal scheme.
+// If not set, defaults to client-go's global scheme.Scheme.
+func (f *ClientBuilder) WithScheme(scheme *runtime.Scheme) *ClientBuilder {
+ f.scheme = scheme
+ return f
+}
+
+// WithRESTMapper sets this builder's restMapper.
+// The restMapper is directly set as mapper in the Client. This can be used for example
+// with a meta.DefaultRESTMapper to provide a static rest mapping.
+// If not set, defaults to an empty meta.DefaultRESTMapper.
+func (f *ClientBuilder) WithRESTMapper(restMapper meta.RESTMapper) *ClientBuilder {
+ f.restMapper = restMapper
+ return f
+}
+
+// WithObjects can be optionally used to initialize this fake client with client.Object(s).
+func (f *ClientBuilder) WithObjects(initObjs ...client.Object) *ClientBuilder {
+ f.initObject = append(f.initObject, initObjs...)
+ return f
+}
+
+// WithLists can be optionally used to initialize this fake client with client.ObjectList(s).
+func (f *ClientBuilder) WithLists(initLists ...client.ObjectList) *ClientBuilder {
+ f.initLists = append(f.initLists, initLists...)
+ return f
+}
+
+// WithRuntimeObjects can be optionally used to initialize this fake client with runtime.Object(s).
+func (f *ClientBuilder) WithRuntimeObjects(initRuntimeObjs ...runtime.Object) *ClientBuilder {
+ f.initRuntimeObjects = append(f.initRuntimeObjects, initRuntimeObjs...)
+ return f
+}
+
+// WithObjectTracker can be optionally used to initialize this fake client with testing.ObjectTracker.
+func (f *ClientBuilder) WithObjectTracker(ot testing.ObjectTracker) *ClientBuilder {
+ f.objectTracker = ot
+ return f
+}
+
+// WithIndex can be optionally used to register an index with name `field` and indexer `extractValue`
+// for API objects of the same GroupVersionKind (GVK) as `obj` in the fake client.
+// It can be invoked multiple times, both with objects of the same GVK or different ones.
+// Invoking WithIndex twice with the same `field` and GVK (via `obj`) arguments will panic.
+// WithIndex retrieves the GVK of `obj` using the scheme registered via WithScheme if
+// WithScheme was previously invoked, the default scheme otherwise.
+func (f *ClientBuilder) WithIndex(obj runtime.Object, field string, extractValue client.IndexerFunc) *ClientBuilder {
+ objScheme := f.scheme
+ if objScheme == nil {
+ objScheme = scheme.Scheme
+ }
+
+ gvk, err := apiutil.GVKForObject(obj, objScheme)
+ if err != nil {
+ panic(err)
+ }
+
+ // If this is the first index being registered, we initialize the map storing all the indexes.
+ if f.indexes == nil {
+ f.indexes = make(map[schema.GroupVersionKind]map[string]client.IndexerFunc)
+ }
+
+ // If this is the first index being registered for the GroupVersionKind of `obj`, we initialize
+ // the map storing the indexes for that GroupVersionKind.
+ if f.indexes[gvk] == nil {
+ f.indexes[gvk] = make(map[string]client.IndexerFunc)
+ }
+
+ if _, fieldAlreadyIndexed := f.indexes[gvk][field]; fieldAlreadyIndexed {
+ panic(fmt.Errorf("indexer conflict: field %s for GroupVersionKind %v is already indexed",
+ field, gvk))
+ }
+
+ f.indexes[gvk][field] = extractValue
+
+ return f
+}
+
+// WithStatusSubresource configures the passed object with a status subresource, which means
+// calls to Update and Patch will not alter its status.
+func (f *ClientBuilder) WithStatusSubresource(o ...client.Object) *ClientBuilder {
+ f.withStatusSubresource = append(f.withStatusSubresource, o...)
+ return f
+}
+
+// WithInterceptorFuncs configures the client methods to be intercepted using the provided interceptor.Funcs.
+func (f *ClientBuilder) WithInterceptorFuncs(interceptorFuncs interceptor.Funcs) *ClientBuilder {
+ f.interceptorFuncs = &interceptorFuncs
+ return f
+}
+
+// Build builds and returns a new fake client.
+func (f *ClientBuilder) Build() client.WithWatch {
+ if f.scheme == nil {
+ f.scheme = scheme.Scheme
+ }
+ if f.restMapper == nil {
+ f.restMapper = meta.NewDefaultRESTMapper([]schema.GroupVersion{})
+ }
+
+ var tracker versionedTracker
+
+ withStatusSubResource := sets.New(inTreeResourcesWithStatus()...)
+ for _, o := range f.withStatusSubresource {
+ gvk, err := apiutil.GVKForObject(o, f.scheme)
+ if err != nil {
+ panic(fmt.Errorf("failed to get gvk for object %T: %w", withStatusSubResource, err))
+ }
+ withStatusSubResource.Insert(gvk)
+ }
+
+ if f.objectTracker == nil {
+ tracker = versionedTracker{ObjectTracker: testing.NewObjectTracker(f.scheme, scheme.Codecs.UniversalDecoder()), scheme: f.scheme, withStatusSubresource: withStatusSubResource}
+ } else {
+ tracker = versionedTracker{ObjectTracker: f.objectTracker, scheme: f.scheme, withStatusSubresource: withStatusSubResource}
+ }
+
+ for _, obj := range f.initObject {
+ if err := tracker.Add(obj); err != nil {
+ panic(fmt.Errorf("failed to add object %v to fake client: %w", obj, err))
+ }
+ }
+ for _, obj := range f.initLists {
+ if err := tracker.Add(obj); err != nil {
+ panic(fmt.Errorf("failed to add list %v to fake client: %w", obj, err))
+ }
+ }
+ for _, obj := range f.initRuntimeObjects {
+ if err := tracker.Add(obj); err != nil {
+ panic(fmt.Errorf("failed to add runtime object %v to fake client: %w", obj, err))
+ }
+ }
+
+ var result client.WithWatch = &fakeClient{
+ tracker: tracker,
+ scheme: f.scheme,
+ restMapper: f.restMapper,
+ indexes: f.indexes,
+ withStatusSubresource: withStatusSubResource,
+ }
+
+ if f.interceptorFuncs != nil {
+ result = interceptor.NewClient(result, *f.interceptorFuncs)
+ }
+
+ return result
+}
+
+const trackerAddResourceVersion = "999"
+
+func (t versionedTracker) Add(obj runtime.Object) error {
+ var objects []runtime.Object
+ if meta.IsListType(obj) {
+ var err error
+ objects, err = meta.ExtractList(obj)
+ if err != nil {
+ return err
+ }
+ } else {
+ objects = []runtime.Object{obj}
+ }
+ for _, obj := range objects {
+ accessor, err := meta.Accessor(obj)
+ if err != nil {
+ return fmt.Errorf("failed to get accessor for object: %w", err)
+ }
+ if accessor.GetDeletionTimestamp() != nil && len(accessor.GetFinalizers()) == 0 {
+ return fmt.Errorf("refusing to create obj %s with metadata.deletionTimestamp but no finalizers", accessor.GetName())
+ }
+ if accessor.GetResourceVersion() == "" {
+ // We use a "magic" value of 999 here because this field
+ // is parsed as uint and and 0 is already used in Update.
+ // As we can't go lower, go very high instead so this can
+ // be recognized
+ accessor.SetResourceVersion(trackerAddResourceVersion)
+ }
+
+ obj, err = convertFromUnstructuredIfNecessary(t.scheme, obj)
+ if err != nil {
+ return err
+ }
+ if err := t.ObjectTracker.Add(obj); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+func (t versionedTracker) Create(gvr schema.GroupVersionResource, obj runtime.Object, ns string, opts ...metav1.CreateOptions) error {
+ accessor, err := meta.Accessor(obj)
+ if err != nil {
+ return fmt.Errorf("failed to get accessor for object: %w", err)
+ }
+ if accessor.GetName() == "" {
+ return apierrors.NewInvalid(
+ obj.GetObjectKind().GroupVersionKind().GroupKind(),
+ accessor.GetName(),
+ field.ErrorList{field.Required(field.NewPath("metadata.name"), "name is required")})
+ }
+ if accessor.GetResourceVersion() != "" {
+ return apierrors.NewBadRequest("resourceVersion can not be set for Create requests")
+ }
+ accessor.SetResourceVersion("1")
+ obj, err = convertFromUnstructuredIfNecessary(t.scheme, obj)
+ if err != nil {
+ return err
+ }
+ if err := t.ObjectTracker.Create(gvr, obj, ns, opts...); err != nil {
+ accessor.SetResourceVersion("")
+ return err
+ }
+
+ return nil
+}
+
+// convertFromUnstructuredIfNecessary will convert runtime.Unstructured for a GVK that is recognized
+// by the schema into the whatever the schema produces with New() for said GVK.
+// This is required because the tracker unconditionally saves on manipulations, but its List() implementation
+// tries to assign whatever it finds into a ListType it gets from schema.New() - Thus we have to ensure
+// we save as the very same type, otherwise subsequent List requests will fail.
+func convertFromUnstructuredIfNecessary(s *runtime.Scheme, o runtime.Object) (runtime.Object, error) {
+ u, isUnstructured := o.(runtime.Unstructured)
+ if !isUnstructured {
+ return o, nil
+ }
+ gvk := o.GetObjectKind().GroupVersionKind()
+ if !s.Recognizes(gvk) {
+ return o, nil
+ }
+
+ typed, err := s.New(gvk)
+ if err != nil {
+ return nil, fmt.Errorf("scheme recognizes %s but failed to produce an object for it: %w", gvk, err)
+ }
+
+ unstructuredSerialized, err := json.Marshal(u)
+ if err != nil {
+ return nil, fmt.Errorf("failed to serialize %T: %w", unstructuredSerialized, err)
+ }
+ if err := json.Unmarshal(unstructuredSerialized, typed); err != nil {
+ return nil, fmt.Errorf("failed to unmarshal the content of %T into %T: %w", u, typed, err)
+ }
+
+ return typed, nil
+}
+
+func (t versionedTracker) Update(gvr schema.GroupVersionResource, obj runtime.Object, ns string, opts ...metav1.UpdateOptions) error {
+ updateOpts, err := getSingleOrZeroOptions(opts)
+ if err != nil {
+ return err
+ }
+
+ return t.update(gvr, obj, ns, false, false, updateOpts)
+}
+
+func (t versionedTracker) update(gvr schema.GroupVersionResource, obj runtime.Object, ns string, isStatus, deleting bool, opts metav1.UpdateOptions) error {
+ obj, err := t.updateObject(gvr, obj, ns, isStatus, deleting, opts.DryRun)
+ if err != nil {
+ return err
+ }
+ if obj == nil {
+ return nil
+ }
+
+ return t.ObjectTracker.Update(gvr, obj, ns, opts)
+}
+
+func (t versionedTracker) Patch(gvr schema.GroupVersionResource, obj runtime.Object, ns string, opts ...metav1.PatchOptions) error {
+ patchOptions, err := getSingleOrZeroOptions(opts)
+ if err != nil {
+ return err
+ }
+
+ isStatus := false
+ // We apply patches using a client-go reaction that ends up calling the trackers Patch. As we can't change
+ // that reaction, we use the callstack to figure out if this originated from the status client.
+ if bytes.Contains(debug.Stack(), []byte("sigs.k8s.io/controller-runtime/pkg/client/fake.(*fakeSubResourceClient).statusPatch")) {
+ isStatus = true
+ }
+
+ obj, err = t.updateObject(gvr, obj, ns, isStatus, false, patchOptions.DryRun)
+ if err != nil {
+ return err
+ }
+ if obj == nil {
+ return nil
+ }
+
+ return t.ObjectTracker.Patch(gvr, obj, ns, patchOptions)
+}
+
+func (t versionedTracker) updateObject(gvr schema.GroupVersionResource, obj runtime.Object, ns string, isStatus, deleting bool, dryRun []string) (runtime.Object, error) {
+ accessor, err := meta.Accessor(obj)
+ if err != nil {
+ return nil, fmt.Errorf("failed to get accessor for object: %w", err)
+ }
+
+ if accessor.GetName() == "" {
+ return nil, apierrors.NewInvalid(
+ obj.GetObjectKind().GroupVersionKind().GroupKind(),
+ accessor.GetName(),
+ field.ErrorList{field.Required(field.NewPath("metadata.name"), "name is required")})
+ }
+
+ gvk, err := apiutil.GVKForObject(obj, t.scheme)
+ if err != nil {
+ return nil, err
+ }
+
+ oldObject, err := t.ObjectTracker.Get(gvr, ns, accessor.GetName())
+ if err != nil {
+ // If the resource is not found and the resource allows create on update, issue a
+ // create instead.
+ if apierrors.IsNotFound(err) && allowsCreateOnUpdate(gvk) {
+ return nil, t.Create(gvr, obj, ns)
+ }
+ return nil, err
+ }
+
+ if t.withStatusSubresource.Has(gvk) {
+ if isStatus { // copy everything but status and metadata.ResourceVersion from original object
+ if err := copyStatusFrom(obj, oldObject); err != nil {
+ return nil, fmt.Errorf("failed to copy non-status field for object with status subresouce: %w", err)
+ }
+ passedRV := accessor.GetResourceVersion()
+ if err := copyFrom(oldObject, obj); err != nil {
+ return nil, fmt.Errorf("failed to restore non-status fields: %w", err)
+ }
+ accessor.SetResourceVersion(passedRV)
+ } else { // copy status from original object
+ if err := copyStatusFrom(oldObject, obj); err != nil {
+ return nil, fmt.Errorf("failed to copy the status for object with status subresource: %w", err)
+ }
+ }
+ } else if isStatus {
+ return nil, apierrors.NewNotFound(gvr.GroupResource(), accessor.GetName())
+ }
+
+ oldAccessor, err := meta.Accessor(oldObject)
+ if err != nil {
+ return nil, err
+ }
+
+ // If the new object does not have the resource version set and it allows unconditional update,
+ // default it to the resource version of the existing resource
+ if accessor.GetResourceVersion() == "" {
+ switch {
+ case allowsUnconditionalUpdate(gvk):
+ accessor.SetResourceVersion(oldAccessor.GetResourceVersion())
+ // This is needed because if the patch explicitly sets the RV to null, the client-go reaction we use
+ // to apply it and whose output we process here will have it unset. It is not clear why the Kubernetes
+ // apiserver accepts such a patch, but it does so we just copy that behavior.
+ // Kubernetes apiserver behavior can be checked like this:
+ // `kubectl patch configmap foo --patch '{"metadata":{"annotations":{"foo":"bar"},"resourceVersion":null}}' -v=9`
+ case bytes.
+ Contains(debug.Stack(), []byte("sigs.k8s.io/controller-runtime/pkg/client/fake.(*fakeClient).Patch")):
+ // We apply patches using a client-go reaction that ends up calling the trackers Update. As we can't change
+ // that reaction, we use the callstack to figure out if this originated from the "fakeClient.Patch" func.
+ accessor.SetResourceVersion(oldAccessor.GetResourceVersion())
+ }
+ }
+
+ if accessor.GetResourceVersion() != oldAccessor.GetResourceVersion() {
+ return nil, apierrors.NewConflict(gvr.GroupResource(), accessor.GetName(), errors.New("object was modified"))
+ }
+ if oldAccessor.GetResourceVersion() == "" {
+ oldAccessor.SetResourceVersion("0")
+ }
+ intResourceVersion, err := strconv.ParseUint(oldAccessor.GetResourceVersion(), 10, 64)
+ if err != nil {
+ return nil, fmt.Errorf("can not convert resourceVersion %q to int: %w", oldAccessor.GetResourceVersion(), err)
+ }
+ intResourceVersion++
+ accessor.SetResourceVersion(strconv.FormatUint(intResourceVersion, 10))
+
+ if !deleting && !deletionTimestampEqual(accessor, oldAccessor) {
+ return nil, fmt.Errorf("error: Unable to edit %s: metadata.deletionTimestamp field is immutable", accessor.GetName())
+ }
+
+ if !accessor.GetDeletionTimestamp().IsZero() && len(accessor.GetFinalizers()) == 0 {
+ return nil, t.ObjectTracker.Delete(gvr, accessor.GetNamespace(), accessor.GetName(), metav1.DeleteOptions{DryRun: dryRun})
+ }
+ return convertFromUnstructuredIfNecessary(t.scheme, obj)
+}
+
+func (c *fakeClient) Get(ctx context.Context, key client.ObjectKey, obj client.Object, opts ...client.GetOption) error {
+ c.schemeLock.RLock()
+ defer c.schemeLock.RUnlock()
+ gvr, err := getGVRFromObject(obj, c.scheme)
+ if err != nil {
+ return err
+ }
+ o, err := c.tracker.Get(gvr, key.Namespace, key.Name)
+ if err != nil {
+ return err
+ }
+
+ _, isUnstructured := obj.(runtime.Unstructured)
+ _, isPartialObject := obj.(*metav1.PartialObjectMetadata)
+
+ if isUnstructured || isPartialObject {
+ gvk, err := apiutil.GVKForObject(obj, c.scheme)
+ if err != nil {
+ return err
+ }
+ ta, err := meta.TypeAccessor(o)
+ if err != nil {
+ return err
+ }
+ ta.SetKind(gvk.Kind)
+ ta.SetAPIVersion(gvk.GroupVersion().String())
+ }
+
+ j, err := json.Marshal(o)
+ if err != nil {
+ return err
+ }
+ zero(obj)
+ return json.Unmarshal(j, obj)
+}
+
+func (c *fakeClient) Watch(ctx context.Context, list client.ObjectList, opts ...client.ListOption) (watch.Interface, error) {
+ gvk, err := apiutil.GVKForObject(list, c.scheme)
+ if err != nil {
+ return nil, err
+ }
+
+ gvk.Kind = strings.TrimSuffix(gvk.Kind, "List")
+
+ listOpts := client.ListOptions{}
+ listOpts.ApplyOptions(opts)
+
+ gvr, _ := meta.UnsafeGuessKindToResource(gvk)
+ return c.tracker.Watch(gvr, listOpts.Namespace)
+}
+
+func (c *fakeClient) List(ctx context.Context, obj client.ObjectList, opts ...client.ListOption) error {
+ c.schemeLock.RLock()
+ defer c.schemeLock.RUnlock()
+ gvk, err := apiutil.GVKForObject(obj, c.scheme)
+ if err != nil {
+ return err
+ }
+
+ originalKind := gvk.Kind
+
+ gvk.Kind = strings.TrimSuffix(gvk.Kind, "List")
+
+ if _, isUnstructuredList := obj.(runtime.Unstructured); isUnstructuredList && !c.scheme.Recognizes(gvk) {
+ // We need to register the ListKind with UnstructuredList:
+ // https://github.com/kubernetes/kubernetes/blob/7b2776b89fb1be28d4e9203bdeec079be903c103/staging/src/k8s.io/client-go/dynamic/fake/simple.go#L44-L51
+ c.schemeLock.RUnlock()
+ c.schemeLock.Lock()
+ c.scheme.AddKnownTypeWithName(gvk.GroupVersion().WithKind(gvk.Kind+"List"), &unstructured.UnstructuredList{})
+ c.schemeLock.Unlock()
+ c.schemeLock.RLock()
+ }
+
+ listOpts := client.ListOptions{}
+ listOpts.ApplyOptions(opts)
+
+ gvr, _ := meta.UnsafeGuessKindToResource(gvk)
+ o, err := c.tracker.List(gvr, gvk, listOpts.Namespace)
+ if err != nil {
+ return err
+ }
+
+ if _, isUnstructured := obj.(runtime.Unstructured); isUnstructured {
+ ta, err := meta.TypeAccessor(o)
+ if err != nil {
+ return err
+ }
+ ta.SetKind(originalKind)
+ ta.SetAPIVersion(gvk.GroupVersion().String())
+ }
+
+ j, err := json.Marshal(o)
+ if err != nil {
+ return err
+ }
+ zero(obj)
+ objCopy := obj.DeepCopyObject().(client.ObjectList)
+ if err := json.Unmarshal(j, objCopy); err != nil {
+ return err
+ }
+
+ if _, isUnstructured := obj.(runtime.Unstructured); isUnstructured {
+ ta, err := meta.TypeAccessor(obj)
+ if err != nil {
+ return err
+ }
+ ta.SetKind(originalKind)
+ ta.SetAPIVersion(gvk.GroupVersion().String())
+ }
+
+ objs, err := meta.ExtractList(objCopy)
+ if err != nil {
+ return err
+ }
+
+ if listOpts.LabelSelector == nil && listOpts.FieldSelector == nil {
+ return meta.SetList(obj, objs)
+ }
+
+ // If we're here, either a label or field selector are specified (or both), so before we return
+ // the list we must filter it. If both selectors are set, they are ANDed.
+ filteredList, err := c.filterList(objs, gvk, listOpts.LabelSelector, listOpts.FieldSelector)
+ if err != nil {
+ return err
+ }
+
+ return meta.SetList(obj, filteredList)
+}
+
+func (c *fakeClient) filterList(list []runtime.Object, gvk schema.GroupVersionKind, ls labels.Selector, fs fields.Selector) ([]runtime.Object, error) {
+ // Filter the objects with the label selector
+ filteredList := list
+ if ls != nil {
+ objsFilteredByLabel, err := objectutil.FilterWithLabels(list, ls)
+ if err != nil {
+ return nil, err
+ }
+ filteredList = objsFilteredByLabel
+ }
+
+ // Filter the result of the previous pass with the field selector
+ if fs != nil {
+ objsFilteredByField, err := c.filterWithFields(filteredList, gvk, fs)
+ if err != nil {
+ return nil, err
+ }
+ filteredList = objsFilteredByField
+ }
+
+ return filteredList, nil
+}
+
+func (c *fakeClient) filterWithFields(list []runtime.Object, gvk schema.GroupVersionKind, fs fields.Selector) ([]runtime.Object, error) {
+ requiresExact := selector.RequiresExactMatch(fs)
+ if !requiresExact {
+ return nil, fmt.Errorf(`field selector %s is not in one of the two supported forms "key==val" or "key=val"`, fs)
+ }
+
+ c.indexesLock.RLock()
+ defer c.indexesLock.RUnlock()
+ // Field selection is mimicked via indexes, so there's no sane answer this function can give
+ // if there are no indexes registered for the GroupVersionKind of the objects in the list.
+ indexes := c.indexes[gvk]
+ for _, req := range fs.Requirements() {
+ if len(indexes) == 0 || indexes[req.Field] == nil {
+ return nil, fmt.Errorf("List on GroupVersionKind %v specifies selector on field %s, but no "+
+ "index with name %s has been registered for GroupVersionKind %v", gvk, req.Field, req.Field, gvk)
+ }
+ }
+
+ filteredList := make([]runtime.Object, 0, len(list))
+ for _, obj := range list {
+ matches := true
+ for _, req := range fs.Requirements() {
+ indexExtractor := indexes[req.Field]
+ if !c.objMatchesFieldSelector(obj, indexExtractor, req.Value) {
+ matches = false
+ break
+ }
+ }
+ if matches {
+ filteredList = append(filteredList, obj)
+ }
+ }
+ return filteredList, nil
+}
+
+func (c *fakeClient) objMatchesFieldSelector(o runtime.Object, extractIndex client.IndexerFunc, val string) bool {
+ obj, isClientObject := o.(client.Object)
+ if !isClientObject {
+ panic(fmt.Errorf("expected object %v to be of type client.Object, but it's not", o))
+ }
+
+ for _, extractedVal := range extractIndex(obj) {
+ if extractedVal == val {
+ return true
+ }
+ }
+
+ return false
+}
+
+func (c *fakeClient) Scheme() *runtime.Scheme {
+ return c.scheme
+}
+
+func (c *fakeClient) RESTMapper() meta.RESTMapper {
+ return c.restMapper
+}
+
+// GroupVersionKindFor returns the GroupVersionKind for the given object.
+func (c *fakeClient) GroupVersionKindFor(obj runtime.Object) (schema.GroupVersionKind, error) {
+ return apiutil.GVKForObject(obj, c.scheme)
+}
+
+// IsObjectNamespaced returns true if the GroupVersionKind of the object is namespaced.
+func (c *fakeClient) IsObjectNamespaced(obj runtime.Object) (bool, error) {
+ return apiutil.IsObjectNamespaced(obj, c.scheme, c.restMapper)
+}
+
+func (c *fakeClient) Create(ctx context.Context, obj client.Object, opts ...client.CreateOption) error {
+ c.schemeLock.RLock()
+ defer c.schemeLock.RUnlock()
+ createOptions := &client.CreateOptions{}
+ createOptions.ApplyOptions(opts)
+
+ for _, dryRunOpt := range createOptions.DryRun {
+ if dryRunOpt == metav1.DryRunAll {
+ return nil
+ }
+ }
+
+ gvr, err := getGVRFromObject(obj, c.scheme)
+ if err != nil {
+ return err
+ }
+ accessor, err := meta.Accessor(obj)
+ if err != nil {
+ return err
+ }
+
+ if accessor.GetName() == "" && accessor.GetGenerateName() != "" {
+ base := accessor.GetGenerateName()
+ if len(base) > maxGeneratedNameLength {
+ base = base[:maxGeneratedNameLength]
+ }
+ accessor.SetName(fmt.Sprintf("%s%s", base, utilrand.String(randomLength)))
+ }
+ // Ignore attempts to set deletion timestamp
+ if !accessor.GetDeletionTimestamp().IsZero() {
+ accessor.SetDeletionTimestamp(nil)
+ }
+
+ c.trackerWriteLock.Lock()
+ defer c.trackerWriteLock.Unlock()
+ return c.tracker.Create(gvr, obj, accessor.GetNamespace())
+}
+
+func (c *fakeClient) Delete(ctx context.Context, obj client.Object, opts ...client.DeleteOption) error {
+ c.schemeLock.RLock()
+ defer c.schemeLock.RUnlock()
+ gvr, err := getGVRFromObject(obj, c.scheme)
+ if err != nil {
+ return err
+ }
+ accessor, err := meta.Accessor(obj)
+ if err != nil {
+ return err
+ }
+ delOptions := client.DeleteOptions{}
+ delOptions.ApplyOptions(opts)
+
+ for _, dryRunOpt := range delOptions.DryRun {
+ if dryRunOpt == metav1.DryRunAll {
+ return nil
+ }
+ }
+
+ c.trackerWriteLock.Lock()
+ defer c.trackerWriteLock.Unlock()
+ // Check the ResourceVersion if that Precondition was specified.
+ if delOptions.Preconditions != nil && delOptions.Preconditions.ResourceVersion != nil {
+ name := accessor.GetName()
+ dbObj, err := c.tracker.Get(gvr, accessor.GetNamespace(), name)
+ if err != nil {
+ return err
+ }
+ oldAccessor, err := meta.Accessor(dbObj)
+ if err != nil {
+ return err
+ }
+ actualRV := oldAccessor.GetResourceVersion()
+ expectRV := *delOptions.Preconditions.ResourceVersion
+ if actualRV != expectRV {
+ msg := fmt.Sprintf(
+ "the ResourceVersion in the precondition (%s) does not match the ResourceVersion in record (%s). "+
+ "The object might have been modified",
+ expectRV, actualRV)
+ return apierrors.NewConflict(gvr.GroupResource(), name, errors.New(msg))
+ }
+ }
+
+ return c.deleteObjectLocked(gvr, accessor)
+}
+
+func (c *fakeClient) DeleteAllOf(ctx context.Context, obj client.Object, opts ...client.DeleteAllOfOption) error {
+ c.schemeLock.RLock()
+ defer c.schemeLock.RUnlock()
+ gvk, err := apiutil.GVKForObject(obj, c.scheme)
+ if err != nil {
+ return err
+ }
+
+ dcOptions := client.DeleteAllOfOptions{}
+ dcOptions.ApplyOptions(opts)
+
+ for _, dryRunOpt := range dcOptions.DryRun {
+ if dryRunOpt == metav1.DryRunAll {
+ return nil
+ }
+ }
+
+ c.trackerWriteLock.Lock()
+ defer c.trackerWriteLock.Unlock()
+
+ gvr, _ := meta.UnsafeGuessKindToResource(gvk)
+ o, err := c.tracker.List(gvr, gvk, dcOptions.Namespace)
+ if err != nil {
+ return err
+ }
+
+ objs, err := meta.ExtractList(o)
+ if err != nil {
+ return err
+ }
+ filteredObjs, err := objectutil.FilterWithLabels(objs, dcOptions.LabelSelector)
+ if err != nil {
+ return err
+ }
+ for _, o := range filteredObjs {
+ accessor, err := meta.Accessor(o)
+ if err != nil {
+ return err
+ }
+ err = c.deleteObjectLocked(gvr, accessor)
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func (c *fakeClient) Update(ctx context.Context, obj client.Object, opts ...client.UpdateOption) error {
+ return c.update(obj, false, opts...)
+}
+
+func (c *fakeClient) update(obj client.Object, isStatus bool, opts ...client.UpdateOption) error {
+ c.schemeLock.RLock()
+ defer c.schemeLock.RUnlock()
+ updateOptions := &client.UpdateOptions{}
+ updateOptions.ApplyOptions(opts)
+
+ for _, dryRunOpt := range updateOptions.DryRun {
+ if dryRunOpt == metav1.DryRunAll {
+ return nil
+ }
+ }
+
+ gvr, err := getGVRFromObject(obj, c.scheme)
+ if err != nil {
+ return err
+ }
+ accessor, err := meta.Accessor(obj)
+ if err != nil {
+ return err
+ }
+
+ c.trackerWriteLock.Lock()
+ defer c.trackerWriteLock.Unlock()
+ return c.tracker.update(gvr, obj, accessor.GetNamespace(), isStatus, false, *updateOptions.AsUpdateOptions())
+}
+
+func (c *fakeClient) Patch(ctx context.Context, obj client.Object, patch client.Patch, opts ...client.PatchOption) error {
+ return c.patch(obj, patch, opts...)
+}
+
+func (c *fakeClient) patch(obj client.Object, patch client.Patch, opts ...client.PatchOption) error {
+ c.schemeLock.RLock()
+ defer c.schemeLock.RUnlock()
+ patchOptions := &client.PatchOptions{}
+ patchOptions.ApplyOptions(opts)
+
+ for _, dryRunOpt := range patchOptions.DryRun {
+ if dryRunOpt == metav1.DryRunAll {
+ return nil
+ }
+ }
+
+ gvr, err := getGVRFromObject(obj, c.scheme)
+ if err != nil {
+ return err
+ }
+ accessor, err := meta.Accessor(obj)
+ if err != nil {
+ return err
+ }
+ data, err := patch.Data(obj)
+ if err != nil {
+ return err
+ }
+
+ gvk, err := apiutil.GVKForObject(obj, c.scheme)
+ if err != nil {
+ return err
+ }
+
+ c.trackerWriteLock.Lock()
+ defer c.trackerWriteLock.Unlock()
+ oldObj, err := c.tracker.Get(gvr, accessor.GetNamespace(), accessor.GetName())
+ if err != nil {
+ return err
+ }
+ oldAccessor, err := meta.Accessor(oldObj)
+ if err != nil {
+ return err
+ }
+
+ // Apply patch without updating object.
+ // To remain in accordance with the behavior of k8s api behavior,
+ // a patch must not allow for changes to the deletionTimestamp of an object.
+ // The reaction() function applies the patch to the object and calls Update(),
+ // whereas dryPatch() replicates this behavior but skips the call to Update().
+ // This ensures that the patch may be rejected if a deletionTimestamp is modified, prior
+ // to updating the object.
+ action := testing.NewPatchAction(gvr, accessor.GetNamespace(), accessor.GetName(), patch.Type(), data)
+ o, err := dryPatch(action, c.tracker)
+ if err != nil {
+ return err
+ }
+ newObj, err := meta.Accessor(o)
+ if err != nil {
+ return err
+ }
+
+ // Validate that deletionTimestamp has not been changed
+ if !deletionTimestampEqual(newObj, oldAccessor) {
+ return fmt.Errorf("rejected patch, metadata.deletionTimestamp immutable")
+ }
+
+ reaction := testing.ObjectReaction(c.tracker)
+ handled, o, err := reaction(action)
+ if err != nil {
+ return err
+ }
+ if !handled {
+ panic("tracker could not handle patch method")
+ }
+
+ if _, isUnstructured := obj.(runtime.Unstructured); isUnstructured {
+ ta, err := meta.TypeAccessor(o)
+ if err != nil {
+ return err
+ }
+ ta.SetKind(gvk.Kind)
+ ta.SetAPIVersion(gvk.GroupVersion().String())
+ }
+
+ j, err := json.Marshal(o)
+ if err != nil {
+ return err
+ }
+ zero(obj)
+ return json.Unmarshal(j, obj)
+}
+
+// Applying a patch results in a deletionTimestamp that is truncated to the nearest second.
+// Check that the diff between a new and old deletion timestamp is within a reasonable threshold
+// to be considered unchanged.
+func deletionTimestampEqual(newObj metav1.Object, obj metav1.Object) bool {
+ newTime := newObj.GetDeletionTimestamp()
+ oldTime := obj.GetDeletionTimestamp()
+
+ if newTime == nil || oldTime == nil {
+ return newTime == oldTime
+ }
+ return newTime.Time.Sub(oldTime.Time).Abs() < time.Second
+}
+
+// The behavior of applying the patch is pulled out into dryPatch(),
+// which applies the patch and returns an object, but does not Update() the object.
+// This function returns a patched runtime object that may then be validated before a call to Update() is executed.
+// This results in some code duplication, but was found to be a cleaner alternative than unmarshalling and introspecting the patch data
+// and easier than refactoring the k8s client-go method upstream.
+// Duplicate of upstream: https://github.com/kubernetes/client-go/blob/783d0d33626e59d55d52bfd7696b775851f92107/testing/fixture.go#L146-L194
+func dryPatch(action testing.PatchActionImpl, tracker testing.ObjectTracker) (runtime.Object, error) {
+ ns := action.GetNamespace()
+ gvr := action.GetResource()
+
+ obj, err := tracker.Get(gvr, ns, action.GetName())
+ if err != nil {
+ return nil, err
+ }
+
+ old, err := json.Marshal(obj)
+ if err != nil {
+ return nil, err
+ }
+
+ // reset the object in preparation to unmarshal, since unmarshal does not guarantee that fields
+ // in obj that are removed by patch are cleared
+ value := reflect.ValueOf(obj)
+ value.Elem().Set(reflect.New(value.Type().Elem()).Elem())
+
+ switch action.GetPatchType() {
+ case types.JSONPatchType:
+ patch, err := jsonpatch.DecodePatch(action.GetPatch())
+ if err != nil {
+ return nil, err
+ }
+ modified, err := patch.Apply(old)
+ if err != nil {
+ return nil, err
+ }
+
+ if err = json.Unmarshal(modified, obj); err != nil {
+ return nil, err
+ }
+ case types.MergePatchType:
+ modified, err := jsonpatch.MergePatch(old, action.GetPatch())
+ if err != nil {
+ return nil, err
+ }
+
+ if err := json.Unmarshal(modified, obj); err != nil {
+ return nil, err
+ }
+ case types.StrategicMergePatchType:
+ mergedByte, err := strategicpatch.StrategicMergePatch(old, action.GetPatch(), obj)
+ if err != nil {
+ return nil, err
+ }
+ if err = json.Unmarshal(mergedByte, obj); err != nil {
+ return nil, err
+ }
+ case types.ApplyPatchType:
+ return nil, errors.New("apply patches are not supported in the fake client. Follow https://github.com/kubernetes/kubernetes/issues/115598 for the current status")
+ case types.ApplyCBORPatchType:
+ return nil, errors.New("apply CBOR patches are not supported in the fake client")
+ default:
+ return nil, fmt.Errorf("%s PatchType is not supported", action.GetPatchType())
+ }
+ return obj, nil
+}
+
+// copyStatusFrom copies the status from old into new
+func copyStatusFrom(old, new runtime.Object) error {
+ oldMapStringAny, err := toMapStringAny(old)
+ if err != nil {
+ return fmt.Errorf("failed to convert old to *unstructured.Unstructured: %w", err)
+ }
+ newMapStringAny, err := toMapStringAny(new)
+ if err != nil {
+ return fmt.Errorf("failed to convert new to *unststructured.Unstructured: %w", err)
+ }
+
+ newMapStringAny["status"] = oldMapStringAny["status"]
+
+ if err := fromMapStringAny(newMapStringAny, new); err != nil {
+ return fmt.Errorf("failed to convert back from map[string]any: %w", err)
+ }
+
+ return nil
+}
+
+// copyFrom copies from old into new
+func copyFrom(old, new runtime.Object) error {
+ oldMapStringAny, err := toMapStringAny(old)
+ if err != nil {
+ return fmt.Errorf("failed to convert old to *unstructured.Unstructured: %w", err)
+ }
+ if err := fromMapStringAny(oldMapStringAny, new); err != nil {
+ return fmt.Errorf("failed to convert back from map[string]any: %w", err)
+ }
+
+ return nil
+}
+
+func toMapStringAny(obj runtime.Object) (map[string]any, error) {
+ if unstructured, isUnstructured := obj.(*unstructured.Unstructured); isUnstructured {
+ return unstructured.Object, nil
+ }
+
+ serialized, err := json.Marshal(obj)
+ if err != nil {
+ return nil, err
+ }
+
+ u := map[string]any{}
+ return u, json.Unmarshal(serialized, &u)
+}
+
+func fromMapStringAny(u map[string]any, target runtime.Object) error {
+ if targetUnstructured, isUnstructured := target.(*unstructured.Unstructured); isUnstructured {
+ targetUnstructured.Object = u
+ return nil
+ }
+
+ serialized, err := json.Marshal(u)
+ if err != nil {
+ return fmt.Errorf("failed to serialize: %w", err)
+ }
+
+ zero(target)
+ if err := json.Unmarshal(serialized, &target); err != nil {
+ return fmt.Errorf("failed to deserialize: %w", err)
+ }
+
+ return nil
+}
+
+func (c *fakeClient) Status() client.SubResourceWriter {
+ return c.SubResource("status")
+}
+
+func (c *fakeClient) SubResource(subResource string) client.SubResourceClient {
+ return &fakeSubResourceClient{client: c, subResource: subResource}
+}
+
+func (c *fakeClient) deleteObjectLocked(gvr schema.GroupVersionResource, accessor metav1.Object) error {
+ old, err := c.tracker.Get(gvr, accessor.GetNamespace(), accessor.GetName())
+ if err == nil {
+ oldAccessor, err := meta.Accessor(old)
+ if err == nil {
+ if len(oldAccessor.GetFinalizers()) > 0 {
+ now := metav1.Now()
+ oldAccessor.SetDeletionTimestamp(&now)
+ // Call update directly with mutability parameter set to true to allow
+ // changes to deletionTimestamp
+ return c.tracker.update(gvr, old, accessor.GetNamespace(), false, true, metav1.UpdateOptions{})
+ }
+ }
+ }
+
+ //TODO: implement propagation
+ return c.tracker.Delete(gvr, accessor.GetNamespace(), accessor.GetName())
+}
+
+func getGVRFromObject(obj runtime.Object, scheme *runtime.Scheme) (schema.GroupVersionResource, error) {
+ gvk, err := apiutil.GVKForObject(obj, scheme)
+ if err != nil {
+ return schema.GroupVersionResource{}, err
+ }
+ gvr, _ := meta.UnsafeGuessKindToResource(gvk)
+ return gvr, nil
+}
+
+type fakeSubResourceClient struct {
+ client *fakeClient
+ subResource string
+}
+
+func (sw *fakeSubResourceClient) Get(ctx context.Context, obj, subResource client.Object, opts ...client.SubResourceGetOption) error {
+ switch sw.subResource {
+ case subResourceScale:
+ // Actual client looks up resource, then extracts the scale sub-resource:
+ // https://github.com/kubernetes/kubernetes/blob/fb6bbc9781d11a87688c398778525c4e1dcb0f08/pkg/registry/apps/deployment/storage/storage.go#L307
+ if err := sw.client.Get(ctx, client.ObjectKeyFromObject(obj), obj); err != nil {
+ return err
+ }
+ scale, isScale := subResource.(*autoscalingv1.Scale)
+ if !isScale {
+ return apierrors.NewBadRequest(fmt.Sprintf("expected Scale, got %T", subResource))
+ }
+ scaleOut, err := extractScale(obj)
+ if err != nil {
+ return err
+ }
+ *scale = *scaleOut
+ return nil
+ default:
+ return fmt.Errorf("fakeSubResourceClient does not support get for %s", sw.subResource)
+ }
+}
+
+func (sw *fakeSubResourceClient) Create(ctx context.Context, obj client.Object, subResource client.Object, opts ...client.SubResourceCreateOption) error {
+ switch sw.subResource {
+ case "eviction":
+ _, isEviction := subResource.(*policyv1beta1.Eviction)
+ if !isEviction {
+ _, isEviction = subResource.(*policyv1.Eviction)
+ }
+ if !isEviction {
+ return apierrors.NewBadRequest(fmt.Sprintf("got invalid type %T, expected Eviction", subResource))
+ }
+ if _, isPod := obj.(*corev1.Pod); !isPod {
+ return apierrors.NewNotFound(schema.GroupResource{}, "")
+ }
+
+ return sw.client.Delete(ctx, obj)
+ case "token":
+ tokenRequest, isTokenRequest := subResource.(*authenticationv1.TokenRequest)
+ if !isTokenRequest {
+ return apierrors.NewBadRequest(fmt.Sprintf("got invalid type %T, expected TokenRequest", subResource))
+ }
+ if _, isServiceAccount := obj.(*corev1.ServiceAccount); !isServiceAccount {
+ return apierrors.NewNotFound(schema.GroupResource{}, "")
+ }
+
+ tokenRequest.Status.Token = "fake-token"
+ tokenRequest.Status.ExpirationTimestamp = metav1.Date(6041, 1, 1, 0, 0, 0, 0, time.UTC)
+
+ return sw.client.Get(ctx, client.ObjectKeyFromObject(obj), obj)
+ default:
+ return fmt.Errorf("fakeSubResourceWriter does not support create for %s", sw.subResource)
+ }
+}
+
+func (sw *fakeSubResourceClient) Update(ctx context.Context, obj client.Object, opts ...client.SubResourceUpdateOption) error {
+ updateOptions := client.SubResourceUpdateOptions{}
+ updateOptions.ApplyOptions(opts)
+
+ switch sw.subResource {
+ case subResourceScale:
+ if err := sw.client.Get(ctx, client.ObjectKeyFromObject(obj), obj.DeepCopyObject().(client.Object)); err != nil {
+ return err
+ }
+ if updateOptions.SubResourceBody == nil {
+ return apierrors.NewBadRequest("missing SubResourceBody")
+ }
+
+ scale, isScale := updateOptions.SubResourceBody.(*autoscalingv1.Scale)
+ if !isScale {
+ return apierrors.NewBadRequest(fmt.Sprintf("expected Scale, got %T", updateOptions.SubResourceBody))
+ }
+ if err := applyScale(obj, scale); err != nil {
+ return err
+ }
+ return sw.client.update(obj, false, &updateOptions.UpdateOptions)
+ default:
+ body := obj
+ if updateOptions.SubResourceBody != nil {
+ body = updateOptions.SubResourceBody
+ }
+ return sw.client.update(body, true, &updateOptions.UpdateOptions)
+ }
+}
+
+func (sw *fakeSubResourceClient) Patch(ctx context.Context, obj client.Object, patch client.Patch, opts ...client.SubResourcePatchOption) error {
+ patchOptions := client.SubResourcePatchOptions{}
+ patchOptions.ApplyOptions(opts)
+
+ body := obj
+ if patchOptions.SubResourceBody != nil {
+ body = patchOptions.SubResourceBody
+ }
+
+ // this is necessary to identify that last call was made for status patch, through stack trace.
+ if sw.subResource == "status" {
+ return sw.statusPatch(body, patch, patchOptions)
+ }
+
+ return sw.client.patch(body, patch, &patchOptions.PatchOptions)
+}
+
+func (sw *fakeSubResourceClient) statusPatch(body client.Object, patch client.Patch, patchOptions client.SubResourcePatchOptions) error {
+ return sw.client.patch(body, patch, &patchOptions.PatchOptions)
+}
+
+func allowsUnconditionalUpdate(gvk schema.GroupVersionKind) bool {
+ switch gvk.Group {
+ case "apps":
+ switch gvk.Kind {
+ case "ControllerRevision", "DaemonSet", "Deployment", "ReplicaSet", "StatefulSet":
+ return true
+ }
+ case "autoscaling":
+ switch gvk.Kind {
+ case "HorizontalPodAutoscaler":
+ return true
+ }
+ case "batch":
+ switch gvk.Kind {
+ case "CronJob", "Job":
+ return true
+ }
+ case "certificates":
+ switch gvk.Kind {
+ case "Certificates":
+ return true
+ }
+ case "flowcontrol":
+ switch gvk.Kind {
+ case "FlowSchema", "PriorityLevelConfiguration":
+ return true
+ }
+ case "networking":
+ switch gvk.Kind {
+ case "Ingress", "IngressClass", "NetworkPolicy":
+ return true
+ }
+ case "policy":
+ switch gvk.Kind {
+ case "PodSecurityPolicy":
+ return true
+ }
+ case "rbac.authorization.k8s.io":
+ switch gvk.Kind {
+ case "ClusterRole", "ClusterRoleBinding", "Role", "RoleBinding":
+ return true
+ }
+ case "scheduling":
+ switch gvk.Kind {
+ case "PriorityClass":
+ return true
+ }
+ case "settings":
+ switch gvk.Kind {
+ case "PodPreset":
+ return true
+ }
+ case "storage":
+ switch gvk.Kind {
+ case "StorageClass":
+ return true
+ }
+ case "":
+ switch gvk.Kind {
+ case "ConfigMap", "Endpoint", "Event", "LimitRange", "Namespace", "Node",
+ "PersistentVolume", "PersistentVolumeClaim", "Pod", "PodTemplate",
+ "ReplicationController", "ResourceQuota", "Secret", "Service",
+ "ServiceAccount", "EndpointSlice":
+ return true
+ }
+ }
+
+ return false
+}
+
+func allowsCreateOnUpdate(gvk schema.GroupVersionKind) bool {
+ switch gvk.Group {
+ case "coordination":
+ switch gvk.Kind {
+ case "Lease":
+ return true
+ }
+ case "node":
+ switch gvk.Kind {
+ case "RuntimeClass":
+ return true
+ }
+ case "rbac":
+ switch gvk.Kind {
+ case "ClusterRole", "ClusterRoleBinding", "Role", "RoleBinding":
+ return true
+ }
+ case "":
+ switch gvk.Kind {
+ case "Endpoint", "Event", "LimitRange", "Service":
+ return true
+ }
+ }
+
+ return false
+}
+
+func inTreeResourcesWithStatus() []schema.GroupVersionKind {
+ return []schema.GroupVersionKind{
+ {Version: "v1", Kind: "Namespace"},
+ {Version: "v1", Kind: "Node"},
+ {Version: "v1", Kind: "PersistentVolumeClaim"},
+ {Version: "v1", Kind: "PersistentVolume"},
+ {Version: "v1", Kind: "Pod"},
+ {Version: "v1", Kind: "ReplicationController"},
+ {Version: "v1", Kind: "Service"},
+
+ {Group: "apps", Version: "v1", Kind: "Deployment"},
+ {Group: "apps", Version: "v1", Kind: "DaemonSet"},
+ {Group: "apps", Version: "v1", Kind: "ReplicaSet"},
+ {Group: "apps", Version: "v1", Kind: "StatefulSet"},
+
+ {Group: "autoscaling", Version: "v1", Kind: "HorizontalPodAutoscaler"},
+
+ {Group: "batch", Version: "v1", Kind: "CronJob"},
+ {Group: "batch", Version: "v1", Kind: "Job"},
+
+ {Group: "certificates.k8s.io", Version: "v1", Kind: "CertificateSigningRequest"},
+
+ {Group: "networking.k8s.io", Version: "v1", Kind: "Ingress"},
+ {Group: "networking.k8s.io", Version: "v1", Kind: "NetworkPolicy"},
+
+ {Group: "policy", Version: "v1", Kind: "PodDisruptionBudget"},
+
+ {Group: "storage.k8s.io", Version: "v1", Kind: "VolumeAttachment"},
+
+ {Group: "apiextensions.k8s.io", Version: "v1", Kind: "CustomResourceDefinition"},
+
+ {Group: "flowcontrol.apiserver.k8s.io", Version: "v1beta2", Kind: "FlowSchema"},
+ {Group: "flowcontrol.apiserver.k8s.io", Version: "v1beta2", Kind: "PriorityLevelConfiguration"},
+ {Group: "flowcontrol.apiserver.k8s.io", Version: "v1", Kind: "FlowSchema"},
+ {Group: "flowcontrol.apiserver.k8s.io", Version: "v1", Kind: "PriorityLevelConfiguration"},
+ }
+}
+
+// zero zeros the value of a pointer.
+func zero(x interface{}) {
+ if x == nil {
+ return
+ }
+ res := reflect.ValueOf(x).Elem()
+ res.Set(reflect.Zero(res.Type()))
+}
+
+// getSingleOrZeroOptions returns the single options value in the slice, its
+// zero value if the slice is empty, or an error if the slice contains more than
+// one option value.
+func getSingleOrZeroOptions[T any](opts []T) (opt T, err error) {
+ switch len(opts) {
+ case 0:
+ case 1:
+ opt = opts[0]
+ default:
+ err = fmt.Errorf("expected single or no options value, got %d values", len(opts))
+ }
+ return
+}
+
+func extractScale(obj client.Object) (*autoscalingv1.Scale, error) {
+ switch obj := obj.(type) {
+ case *appsv1.Deployment:
+ var replicas int32 = 1
+ if obj.Spec.Replicas != nil {
+ replicas = *obj.Spec.Replicas
+ }
+ var selector string
+ if obj.Spec.Selector != nil {
+ selector = obj.Spec.Selector.String()
+ }
+ return &autoscalingv1.Scale{
+ ObjectMeta: metav1.ObjectMeta{
+ Namespace: obj.Namespace,
+ Name: obj.Name,
+ UID: obj.UID,
+ ResourceVersion: obj.ResourceVersion,
+ CreationTimestamp: obj.CreationTimestamp,
+ },
+ Spec: autoscalingv1.ScaleSpec{
+ Replicas: replicas,
+ },
+ Status: autoscalingv1.ScaleStatus{
+ Replicas: obj.Status.Replicas,
+ Selector: selector,
+ },
+ }, nil
+ case *appsv1.ReplicaSet:
+ var replicas int32 = 1
+ if obj.Spec.Replicas != nil {
+ replicas = *obj.Spec.Replicas
+ }
+ var selector string
+ if obj.Spec.Selector != nil {
+ selector = obj.Spec.Selector.String()
+ }
+ return &autoscalingv1.Scale{
+ ObjectMeta: metav1.ObjectMeta{
+ Namespace: obj.Namespace,
+ Name: obj.Name,
+ UID: obj.UID,
+ ResourceVersion: obj.ResourceVersion,
+ CreationTimestamp: obj.CreationTimestamp,
+ },
+ Spec: autoscalingv1.ScaleSpec{
+ Replicas: replicas,
+ },
+ Status: autoscalingv1.ScaleStatus{
+ Replicas: obj.Status.Replicas,
+ Selector: selector,
+ },
+ }, nil
+ case *corev1.ReplicationController:
+ var replicas int32 = 1
+ if obj.Spec.Replicas != nil {
+ replicas = *obj.Spec.Replicas
+ }
+ return &autoscalingv1.Scale{
+ ObjectMeta: metav1.ObjectMeta{
+ Namespace: obj.Namespace,
+ Name: obj.Name,
+ UID: obj.UID,
+ ResourceVersion: obj.ResourceVersion,
+ CreationTimestamp: obj.CreationTimestamp,
+ },
+ Spec: autoscalingv1.ScaleSpec{
+ Replicas: replicas,
+ },
+ Status: autoscalingv1.ScaleStatus{
+ Replicas: obj.Status.Replicas,
+ Selector: labels.Set(obj.Spec.Selector).String(),
+ },
+ }, nil
+ case *appsv1.StatefulSet:
+ var replicas int32 = 1
+ if obj.Spec.Replicas != nil {
+ replicas = *obj.Spec.Replicas
+ }
+ var selector string
+ if obj.Spec.Selector != nil {
+ selector = obj.Spec.Selector.String()
+ }
+ return &autoscalingv1.Scale{
+ ObjectMeta: metav1.ObjectMeta{
+ Namespace: obj.Namespace,
+ Name: obj.Name,
+ UID: obj.UID,
+ ResourceVersion: obj.ResourceVersion,
+ CreationTimestamp: obj.CreationTimestamp,
+ },
+ Spec: autoscalingv1.ScaleSpec{
+ Replicas: replicas,
+ },
+ Status: autoscalingv1.ScaleStatus{
+ Replicas: obj.Status.Replicas,
+ Selector: selector,
+ },
+ }, nil
+ default:
+ // TODO: CRDs https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#scale-subresource
+ return nil, fmt.Errorf("unimplemented scale subresource for resource %T", obj)
+ }
+}
+
+func applyScale(obj client.Object, scale *autoscalingv1.Scale) error {
+ switch obj := obj.(type) {
+ case *appsv1.Deployment:
+ obj.Spec.Replicas = ptr.To(scale.Spec.Replicas)
+ case *appsv1.ReplicaSet:
+ obj.Spec.Replicas = ptr.To(scale.Spec.Replicas)
+ case *corev1.ReplicationController:
+ obj.Spec.Replicas = ptr.To(scale.Spec.Replicas)
+ case *appsv1.StatefulSet:
+ obj.Spec.Replicas = ptr.To(scale.Spec.Replicas)
+ default:
+ // TODO: CRDs https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#scale-subresource
+ return fmt.Errorf("unimplemented scale subresource for resource %T", obj)
+ }
+ return nil
+}
+
+// AddIndex adds an index to a fake client. It will panic if used with a client that is not a fake client.
+// It will error if there is already an index for given object with the same name as field.
+//
+// It can be used to test code that adds indexes to the cache at runtime.
+func AddIndex(c client.Client, obj runtime.Object, field string, extractValue client.IndexerFunc) error {
+ fakeClient, isFakeClient := c.(*fakeClient)
+ if !isFakeClient {
+ panic("AddIndex can only be used with a fake client")
+ }
+ fakeClient.indexesLock.Lock()
+ defer fakeClient.indexesLock.Unlock()
+
+ if fakeClient.indexes == nil {
+ fakeClient.indexes = make(map[schema.GroupVersionKind]map[string]client.IndexerFunc, 1)
+ }
+
+ gvk, err := apiutil.GVKForObject(obj, fakeClient.scheme)
+ if err != nil {
+ return fmt.Errorf("failed to get gvk for %T: %w", obj, err)
+ }
+
+ if fakeClient.indexes[gvk] == nil {
+ fakeClient.indexes[gvk] = make(map[string]client.IndexerFunc, 1)
+ }
+
+ if fakeClient.indexes[gvk][field] != nil {
+ return fmt.Errorf("index %s already exists", field)
+ }
+
+ fakeClient.indexes[gvk][field] = extractValue
+
+ return nil
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/client/fake/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/client/fake/doc.go
new file mode 100644
index 00000000000..47cad3980d9
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/client/fake/doc.go
@@ -0,0 +1,38 @@
+/*
+Copyright 2018 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 fake provides a fake client for testing.
+
+A fake client is backed by its simple object store indexed by GroupVersionResource.
+You can create a fake client with optional objects.
+
+ client := NewClientBuilder().WithScheme(scheme).WithObjects(initObjs...).Build()
+
+You can invoke the methods defined in the Client interface.
+
+When in doubt, it's almost always better not to use this package and instead use
+envtest.Environment with a real client and API server.
+
+WARNING: ⚠️ Current Limitations / Known Issues with the fake Client ⚠️
+ - This client does not have a way to inject specific errors to test handled vs. unhandled errors.
+ - There is some support for sub resources which can cause issues with tests if you're trying to update
+ e.g. metadata and status in the same reconcile.
+ - No OpenAPI validation is performed when creating or updating objects.
+ - ObjectMeta's `Generation` and `ResourceVersion` don't behave properly, Patch or Update
+ operations that rely on these fields will fail, or give false positives.
+*/
+package fake
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/client/interceptor/intercept.go b/vendor/sigs.k8s.io/controller-runtime/pkg/client/interceptor/intercept.go
new file mode 100644
index 00000000000..3d3f3cb0118
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/client/interceptor/intercept.go
@@ -0,0 +1,166 @@
+package interceptor
+
+import (
+ "context"
+
+ "k8s.io/apimachinery/pkg/api/meta"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "k8s.io/apimachinery/pkg/watch"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+)
+
+// Funcs contains functions that are called instead of the underlying client's methods.
+type Funcs struct {
+ Get func(ctx context.Context, client client.WithWatch, key client.ObjectKey, obj client.Object, opts ...client.GetOption) error
+ List func(ctx context.Context, client client.WithWatch, list client.ObjectList, opts ...client.ListOption) error
+ Create func(ctx context.Context, client client.WithWatch, obj client.Object, opts ...client.CreateOption) error
+ Delete func(ctx context.Context, client client.WithWatch, obj client.Object, opts ...client.DeleteOption) error
+ DeleteAllOf func(ctx context.Context, client client.WithWatch, obj client.Object, opts ...client.DeleteAllOfOption) error
+ Update func(ctx context.Context, client client.WithWatch, obj client.Object, opts ...client.UpdateOption) error
+ Patch func(ctx context.Context, client client.WithWatch, obj client.Object, patch client.Patch, opts ...client.PatchOption) error
+ Watch func(ctx context.Context, client client.WithWatch, obj client.ObjectList, opts ...client.ListOption) (watch.Interface, error)
+ SubResource func(client client.WithWatch, subResource string) client.SubResourceClient
+ SubResourceGet func(ctx context.Context, client client.Client, subResourceName string, obj client.Object, subResource client.Object, opts ...client.SubResourceGetOption) error
+ SubResourceCreate func(ctx context.Context, client client.Client, subResourceName string, obj client.Object, subResource client.Object, opts ...client.SubResourceCreateOption) error
+ SubResourceUpdate func(ctx context.Context, client client.Client, subResourceName string, obj client.Object, opts ...client.SubResourceUpdateOption) error
+ SubResourcePatch func(ctx context.Context, client client.Client, subResourceName string, obj client.Object, patch client.Patch, opts ...client.SubResourcePatchOption) error
+}
+
+// NewClient returns a new interceptor client that calls the functions in funcs instead of the underlying client's methods, if they are not nil.
+func NewClient(interceptedClient client.WithWatch, funcs Funcs) client.WithWatch {
+ return interceptor{
+ client: interceptedClient,
+ funcs: funcs,
+ }
+}
+
+type interceptor struct {
+ client client.WithWatch
+ funcs Funcs
+}
+
+var _ client.WithWatch = &interceptor{}
+
+func (c interceptor) GroupVersionKindFor(obj runtime.Object) (schema.GroupVersionKind, error) {
+ return c.client.GroupVersionKindFor(obj)
+}
+
+func (c interceptor) IsObjectNamespaced(obj runtime.Object) (bool, error) {
+ return c.client.IsObjectNamespaced(obj)
+}
+
+func (c interceptor) Get(ctx context.Context, key client.ObjectKey, obj client.Object, opts ...client.GetOption) error {
+ if c.funcs.Get != nil {
+ return c.funcs.Get(ctx, c.client, key, obj, opts...)
+ }
+ return c.client.Get(ctx, key, obj, opts...)
+}
+
+func (c interceptor) List(ctx context.Context, list client.ObjectList, opts ...client.ListOption) error {
+ if c.funcs.List != nil {
+ return c.funcs.List(ctx, c.client, list, opts...)
+ }
+ return c.client.List(ctx, list, opts...)
+}
+
+func (c interceptor) Create(ctx context.Context, obj client.Object, opts ...client.CreateOption) error {
+ if c.funcs.Create != nil {
+ return c.funcs.Create(ctx, c.client, obj, opts...)
+ }
+ return c.client.Create(ctx, obj, opts...)
+}
+
+func (c interceptor) Delete(ctx context.Context, obj client.Object, opts ...client.DeleteOption) error {
+ if c.funcs.Delete != nil {
+ return c.funcs.Delete(ctx, c.client, obj, opts...)
+ }
+ return c.client.Delete(ctx, obj, opts...)
+}
+
+func (c interceptor) Update(ctx context.Context, obj client.Object, opts ...client.UpdateOption) error {
+ if c.funcs.Update != nil {
+ return c.funcs.Update(ctx, c.client, obj, opts...)
+ }
+ return c.client.Update(ctx, obj, opts...)
+}
+
+func (c interceptor) Patch(ctx context.Context, obj client.Object, patch client.Patch, opts ...client.PatchOption) error {
+ if c.funcs.Patch != nil {
+ return c.funcs.Patch(ctx, c.client, obj, patch, opts...)
+ }
+ return c.client.Patch(ctx, obj, patch, opts...)
+}
+
+func (c interceptor) DeleteAllOf(ctx context.Context, obj client.Object, opts ...client.DeleteAllOfOption) error {
+ if c.funcs.DeleteAllOf != nil {
+ return c.funcs.DeleteAllOf(ctx, c.client, obj, opts...)
+ }
+ return c.client.DeleteAllOf(ctx, obj, opts...)
+}
+
+func (c interceptor) Status() client.SubResourceWriter {
+ return c.SubResource("status")
+}
+
+func (c interceptor) SubResource(subResource string) client.SubResourceClient {
+ if c.funcs.SubResource != nil {
+ return c.funcs.SubResource(c.client, subResource)
+ }
+ return subResourceInterceptor{
+ subResourceName: subResource,
+ client: c.client,
+ funcs: c.funcs,
+ }
+}
+
+func (c interceptor) Scheme() *runtime.Scheme {
+ return c.client.Scheme()
+}
+
+func (c interceptor) RESTMapper() meta.RESTMapper {
+ return c.client.RESTMapper()
+}
+
+func (c interceptor) Watch(ctx context.Context, obj client.ObjectList, opts ...client.ListOption) (watch.Interface, error) {
+ if c.funcs.Watch != nil {
+ return c.funcs.Watch(ctx, c.client, obj, opts...)
+ }
+ return c.client.Watch(ctx, obj, opts...)
+}
+
+type subResourceInterceptor struct {
+ subResourceName string
+ client client.Client
+ funcs Funcs
+}
+
+var _ client.SubResourceClient = &subResourceInterceptor{}
+
+func (s subResourceInterceptor) Get(ctx context.Context, obj client.Object, subResource client.Object, opts ...client.SubResourceGetOption) error {
+ if s.funcs.SubResourceGet != nil {
+ return s.funcs.SubResourceGet(ctx, s.client, s.subResourceName, obj, subResource, opts...)
+ }
+ return s.client.SubResource(s.subResourceName).Get(ctx, obj, subResource, opts...)
+}
+
+func (s subResourceInterceptor) Create(ctx context.Context, obj client.Object, subResource client.Object, opts ...client.SubResourceCreateOption) error {
+ if s.funcs.SubResourceCreate != nil {
+ return s.funcs.SubResourceCreate(ctx, s.client, s.subResourceName, obj, subResource, opts...)
+ }
+ return s.client.SubResource(s.subResourceName).Create(ctx, obj, subResource, opts...)
+}
+
+func (s subResourceInterceptor) Update(ctx context.Context, obj client.Object, opts ...client.SubResourceUpdateOption) error {
+ if s.funcs.SubResourceUpdate != nil {
+ return s.funcs.SubResourceUpdate(ctx, s.client, s.subResourceName, obj, opts...)
+ }
+ return s.client.SubResource(s.subResourceName).Update(ctx, obj, opts...)
+}
+
+func (s subResourceInterceptor) Patch(ctx context.Context, obj client.Object, patch client.Patch, opts ...client.SubResourcePatchOption) error {
+ if s.funcs.SubResourcePatch != nil {
+ return s.funcs.SubResourcePatch(ctx, s.client, s.subResourceName, obj, patch, opts...)
+ }
+ return s.client.SubResource(s.subResourceName).Patch(ctx, obj, patch, opts...)
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/cluster/cluster.go b/vendor/sigs.k8s.io/controller-runtime/pkg/cluster/cluster.go
new file mode 100644
index 00000000000..0603f4cde56
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/cluster/cluster.go
@@ -0,0 +1,302 @@
+/*
+Copyright 2020 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 cluster
+
+import (
+ "context"
+ "errors"
+ "net/http"
+
+ "github.com/go-logr/logr"
+ "k8s.io/apimachinery/pkg/api/meta"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/client-go/kubernetes/scheme"
+ "k8s.io/client-go/rest"
+ "k8s.io/client-go/tools/record"
+
+ "sigs.k8s.io/controller-runtime/pkg/cache"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/client/apiutil"
+ logf "sigs.k8s.io/controller-runtime/pkg/internal/log"
+ intrec "sigs.k8s.io/controller-runtime/pkg/internal/recorder"
+)
+
+// Cluster provides various methods to interact with a cluster.
+type Cluster interface {
+ // GetHTTPClient returns an HTTP client that can be used to talk to the apiserver
+ GetHTTPClient() *http.Client
+
+ // GetConfig returns an initialized Config
+ GetConfig() *rest.Config
+
+ // GetCache returns a cache.Cache
+ GetCache() cache.Cache
+
+ // GetScheme returns an initialized Scheme
+ GetScheme() *runtime.Scheme
+
+ // GetClient returns a client configured with the Config. This client may
+ // not be a fully "direct" client -- it may read from a cache, for
+ // instance. See Options.NewClient for more information on how the default
+ // implementation works.
+ GetClient() client.Client
+
+ // GetFieldIndexer returns a client.FieldIndexer configured with the client
+ GetFieldIndexer() client.FieldIndexer
+
+ // GetEventRecorderFor returns a new EventRecorder for the provided name
+ GetEventRecorderFor(name string) record.EventRecorder
+
+ // GetRESTMapper returns a RESTMapper
+ GetRESTMapper() meta.RESTMapper
+
+ // GetAPIReader returns a reader that will be configured to use the API server directly.
+ // This should be used sparingly and only when the cached client does not fit your
+ // use case.
+ GetAPIReader() client.Reader
+
+ // Start starts the cluster
+ Start(ctx context.Context) error
+}
+
+// Options are the possible options that can be configured for a Cluster.
+type Options struct {
+ // Scheme is the scheme used to resolve runtime.Objects to GroupVersionKinds / Resources
+ // Defaults to the kubernetes/client-go scheme.Scheme, but it's almost always better
+ // idea to pass your own scheme in. See the documentation in pkg/scheme for more information.
+ Scheme *runtime.Scheme
+
+ // MapperProvider provides the rest mapper used to map go types to Kubernetes APIs
+ MapperProvider func(c *rest.Config, httpClient *http.Client) (meta.RESTMapper, error)
+
+ // Logger is the logger that should be used by this Cluster.
+ // If none is set, it defaults to log.Log global logger.
+ Logger logr.Logger
+
+ // HTTPClient is the http client that will be used to create the default
+ // Cache and Client. If not set the rest.HTTPClientFor function will be used
+ // to create the http client.
+ HTTPClient *http.Client
+
+ // Cache is the cache.Options that will be used to create the default Cache.
+ // By default, the cache will watch and list requested objects in all namespaces.
+ Cache cache.Options
+
+ // NewCache is the function that will create the cache to be used
+ // by the manager. If not set this will use the default new cache function.
+ //
+ // When using a custom NewCache, the Cache options will be passed to the
+ // NewCache function.
+ //
+ // NOTE: LOW LEVEL PRIMITIVE!
+ // Only use a custom NewCache if you know what you are doing.
+ NewCache cache.NewCacheFunc
+
+ // Client is the client.Options that will be used to create the default Client.
+ // By default, the client will use the cache for reads and direct calls for writes.
+ Client client.Options
+
+ // NewClient is the func that creates the client to be used by the manager.
+ // If not set this will create a Client backed by a Cache for read operations
+ // and a direct Client for write operations.
+ //
+ // When using a custom NewClient, the Client options will be passed to the
+ // NewClient function.
+ //
+ // NOTE: LOW LEVEL PRIMITIVE!
+ // Only use a custom NewClient if you know what you are doing.
+ NewClient client.NewClientFunc
+
+ // EventBroadcaster records Events emitted by the manager and sends them to the Kubernetes API
+ // Use this to customize the event correlator and spam filter
+ //
+ // Deprecated: using this may cause goroutine leaks if the lifetime of your manager or controllers
+ // is shorter than the lifetime of your process.
+ EventBroadcaster record.EventBroadcaster
+
+ // makeBroadcaster allows deferring the creation of the broadcaster to
+ // avoid leaking goroutines if we never call Start on this manager. It also
+ // returns whether or not this is a "owned" broadcaster, and as such should be
+ // stopped with the manager.
+ makeBroadcaster intrec.EventBroadcasterProducer
+
+ // Dependency injection for testing
+ newRecorderProvider func(config *rest.Config, httpClient *http.Client, scheme *runtime.Scheme, logger logr.Logger, makeBroadcaster intrec.EventBroadcasterProducer) (*intrec.Provider, error)
+}
+
+// Option can be used to manipulate Options.
+type Option func(*Options)
+
+// New constructs a brand new cluster.
+func New(config *rest.Config, opts ...Option) (Cluster, error) {
+ if config == nil {
+ return nil, errors.New("must specify Config")
+ }
+
+ originalConfig := config
+
+ config = rest.CopyConfig(config)
+ if config.UserAgent == "" {
+ config.UserAgent = rest.DefaultKubernetesUserAgent()
+ }
+
+ options := Options{}
+ for _, opt := range opts {
+ opt(&options)
+ }
+ options, err := setOptionsDefaults(options, config)
+ if err != nil {
+ options.Logger.Error(err, "Failed to set defaults")
+ return nil, err
+ }
+
+ // Create the mapper provider
+ mapper, err := options.MapperProvider(config, options.HTTPClient)
+ if err != nil {
+ options.Logger.Error(err, "Failed to get API Group-Resources")
+ return nil, err
+ }
+
+ // Create the cache for the cached read client and registering informers
+ cacheOpts := options.Cache
+ {
+ if cacheOpts.Scheme == nil {
+ cacheOpts.Scheme = options.Scheme
+ }
+ if cacheOpts.Mapper == nil {
+ cacheOpts.Mapper = mapper
+ }
+ if cacheOpts.HTTPClient == nil {
+ cacheOpts.HTTPClient = options.HTTPClient
+ }
+ }
+ cache, err := options.NewCache(config, cacheOpts)
+ if err != nil {
+ return nil, err
+ }
+
+ // Create the client, and default its options.
+ clientOpts := options.Client
+ {
+ if clientOpts.Scheme == nil {
+ clientOpts.Scheme = options.Scheme
+ }
+ if clientOpts.Mapper == nil {
+ clientOpts.Mapper = mapper
+ }
+ if clientOpts.HTTPClient == nil {
+ clientOpts.HTTPClient = options.HTTPClient
+ }
+ if clientOpts.Cache == nil {
+ clientOpts.Cache = &client.CacheOptions{
+ Unstructured: false,
+ }
+ }
+ if clientOpts.Cache.Reader == nil {
+ clientOpts.Cache.Reader = cache
+ }
+ }
+ clientWriter, err := options.NewClient(config, clientOpts)
+ if err != nil {
+ return nil, err
+ }
+
+ // Create the API Reader, a client with no cache.
+ clientReader, err := client.New(config, client.Options{
+ HTTPClient: options.HTTPClient,
+ Scheme: options.Scheme,
+ Mapper: mapper,
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ // Create the recorder provider to inject event recorders for the components.
+ // TODO(directxman12): the log for the event provider should have a context (name, tags, etc) specific
+ // to the particular controller that it's being injected into, rather than a generic one like is here.
+ recorderProvider, err := options.newRecorderProvider(config, options.HTTPClient, options.Scheme, options.Logger.WithName("events"), options.makeBroadcaster)
+ if err != nil {
+ return nil, err
+ }
+
+ return &cluster{
+ config: originalConfig,
+ httpClient: options.HTTPClient,
+ scheme: options.Scheme,
+ cache: cache,
+ fieldIndexes: cache,
+ client: clientWriter,
+ apiReader: clientReader,
+ recorderProvider: recorderProvider,
+ mapper: mapper,
+ logger: options.Logger,
+ }, nil
+}
+
+// setOptionsDefaults set default values for Options fields.
+func setOptionsDefaults(options Options, config *rest.Config) (Options, error) {
+ if options.HTTPClient == nil {
+ var err error
+ options.HTTPClient, err = rest.HTTPClientFor(config)
+ if err != nil {
+ return options, err
+ }
+ }
+
+ // Use the Kubernetes client-go scheme if none is specified
+ if options.Scheme == nil {
+ options.Scheme = scheme.Scheme
+ }
+
+ if options.MapperProvider == nil {
+ options.MapperProvider = apiutil.NewDynamicRESTMapper
+ }
+
+ // Allow users to define how to create a new client
+ if options.NewClient == nil {
+ options.NewClient = client.New
+ }
+
+ // Allow newCache to be mocked
+ if options.NewCache == nil {
+ options.NewCache = cache.New
+ }
+
+ // Allow newRecorderProvider to be mocked
+ if options.newRecorderProvider == nil {
+ options.newRecorderProvider = intrec.NewProvider
+ }
+
+ // This is duplicated with pkg/manager, we need it here to provide
+ // the user with an EventBroadcaster and there for the Leader election
+ if options.EventBroadcaster == nil {
+ // defer initialization to avoid leaking by default
+ options.makeBroadcaster = func() (record.EventBroadcaster, bool) {
+ return record.NewBroadcaster(), true
+ }
+ } else {
+ options.makeBroadcaster = func() (record.EventBroadcaster, bool) {
+ return options.EventBroadcaster, false
+ }
+ }
+
+ if options.Logger.GetSink() == nil {
+ options.Logger = logf.RuntimeLog.WithName("cluster")
+ }
+
+ return options, nil
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/cluster/internal.go b/vendor/sigs.k8s.io/controller-runtime/pkg/cluster/internal.go
new file mode 100644
index 00000000000..2742764231b
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/cluster/internal.go
@@ -0,0 +1,105 @@
+/*
+Copyright 2020 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 cluster
+
+import (
+ "context"
+ "net/http"
+
+ "github.com/go-logr/logr"
+ "k8s.io/apimachinery/pkg/api/meta"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/client-go/rest"
+ "k8s.io/client-go/tools/record"
+
+ "sigs.k8s.io/controller-runtime/pkg/cache"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ intrec "sigs.k8s.io/controller-runtime/pkg/internal/recorder"
+)
+
+type cluster struct {
+ // config is the rest.config used to talk to the apiserver. Required.
+ config *rest.Config
+
+ httpClient *http.Client
+ scheme *runtime.Scheme
+ cache cache.Cache
+ client client.Client
+
+ // apiReader is the reader that will make requests to the api server and not the cache.
+ apiReader client.Reader
+
+ // fieldIndexes knows how to add field indexes over the Cache used by this controller,
+ // which can later be consumed via field selectors from the injected client.
+ fieldIndexes client.FieldIndexer
+
+ // recorderProvider is used to generate event recorders that will be injected into Controllers
+ // (and EventHandlers, Sources and Predicates).
+ recorderProvider *intrec.Provider
+
+ // mapper is used to map resources to kind, and map kind and version.
+ mapper meta.RESTMapper
+
+ // Logger is the logger that should be used by this manager.
+ // If none is set, it defaults to log.Log global logger.
+ logger logr.Logger
+}
+
+func (c *cluster) GetConfig() *rest.Config {
+ return c.config
+}
+
+func (c *cluster) GetHTTPClient() *http.Client {
+ return c.httpClient
+}
+
+func (c *cluster) GetClient() client.Client {
+ return c.client
+}
+
+func (c *cluster) GetScheme() *runtime.Scheme {
+ return c.scheme
+}
+
+func (c *cluster) GetFieldIndexer() client.FieldIndexer {
+ return c.fieldIndexes
+}
+
+func (c *cluster) GetCache() cache.Cache {
+ return c.cache
+}
+
+func (c *cluster) GetEventRecorderFor(name string) record.EventRecorder {
+ return c.recorderProvider.GetEventRecorderFor(name)
+}
+
+func (c *cluster) GetRESTMapper() meta.RESTMapper {
+ return c.mapper
+}
+
+func (c *cluster) GetAPIReader() client.Reader {
+ return c.apiReader
+}
+
+func (c *cluster) GetLogger() logr.Logger {
+ return c.logger
+}
+
+func (c *cluster) Start(ctx context.Context) error {
+ defer c.recorderProvider.Stop(ctx)
+ return c.cache.Start(ctx)
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/config/controller.go b/vendor/sigs.k8s.io/controller-runtime/pkg/config/controller.go
new file mode 100644
index 00000000000..0b2aa0cb7b8
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/config/controller.go
@@ -0,0 +1,62 @@
+/*
+Copyright 2023 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 config
+
+import "time"
+
+// Controller contains configuration options for a controller.
+type Controller struct {
+ // SkipNameValidation allows skipping the name validation that ensures that every controller name is unique.
+ // Unique controller names are important to get unique metrics and logs for a controller.
+ // Can be overwritten for a controller via the SkipNameValidation setting on the controller.
+ // Defaults to false if SkipNameValidation setting on controller and Manager are unset.
+ SkipNameValidation *bool
+
+ // GroupKindConcurrency is a map from a Kind to the number of concurrent reconciliation
+ // allowed for that controller.
+ //
+ // When a controller is registered within this manager using the builder utilities,
+ // users have to specify the type the controller reconciles in the For(...) call.
+ // If the object's kind passed matches one of the keys in this map, the concurrency
+ // for that controller is set to the number specified.
+ //
+ // The key is expected to be consistent in form with GroupKind.String(),
+ // e.g. ReplicaSet in apps group (regardless of version) would be `ReplicaSet.apps`.
+ GroupKindConcurrency map[string]int
+
+ // MaxConcurrentReconciles is the maximum number of concurrent Reconciles which can be run. Defaults to 1.
+ MaxConcurrentReconciles int
+
+ // CacheSyncTimeout refers to the time limit set to wait for syncing caches.
+ // Defaults to 2 minutes if not set.
+ CacheSyncTimeout time.Duration
+
+ // RecoverPanic indicates whether the panic caused by reconcile should be recovered.
+ // Can be overwritten for a controller via the RecoverPanic setting on the controller.
+ // Defaults to true if RecoverPanic setting on controller and Manager are unset.
+ RecoverPanic *bool
+
+ // NeedLeaderElection indicates whether the controller needs to use leader election.
+ // Defaults to true, which means the controller will use leader election.
+ NeedLeaderElection *bool
+
+ // UsePriorityQueue configures the controllers queue to use the controller-runtime provided
+ // priority queue.
+ //
+ // Note: This flag is disabled by default until a future version. It's currently in beta.
+ UsePriorityQueue *bool
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/controller/controller.go b/vendor/sigs.k8s.io/controller-runtime/pkg/controller/controller.go
new file mode 100644
index 00000000000..5c5b249ef5b
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/controller/controller.go
@@ -0,0 +1,238 @@
+/*
+Copyright 2018 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 controller
+
+import (
+ "context"
+ "fmt"
+ "time"
+
+ "github.com/go-logr/logr"
+ "k8s.io/client-go/util/workqueue"
+ "k8s.io/klog/v2"
+ "k8s.io/utils/ptr"
+
+ "sigs.k8s.io/controller-runtime/pkg/controller/priorityqueue"
+ "sigs.k8s.io/controller-runtime/pkg/internal/controller"
+ "sigs.k8s.io/controller-runtime/pkg/manager"
+ "sigs.k8s.io/controller-runtime/pkg/reconcile"
+ "sigs.k8s.io/controller-runtime/pkg/source"
+)
+
+// Options are the arguments for creating a new Controller.
+type Options = TypedOptions[reconcile.Request]
+
+// TypedOptions are the arguments for creating a new Controller.
+type TypedOptions[request comparable] struct {
+ // SkipNameValidation allows skipping the name validation that ensures that every controller name is unique.
+ // Unique controller names are important to get unique metrics and logs for a controller.
+ // Defaults to the Controller.SkipNameValidation setting from the Manager if unset.
+ // Defaults to false if Controller.SkipNameValidation setting from the Manager is also unset.
+ SkipNameValidation *bool
+
+ // MaxConcurrentReconciles is the maximum number of concurrent Reconciles which can be run. Defaults to 1.
+ MaxConcurrentReconciles int
+
+ // CacheSyncTimeout refers to the time limit set to wait for syncing caches.
+ // Defaults to 2 minutes if not set.
+ CacheSyncTimeout time.Duration
+
+ // RecoverPanic indicates whether the panic caused by reconcile should be recovered.
+ // Defaults to the Controller.RecoverPanic setting from the Manager if unset.
+ // Defaults to true if Controller.RecoverPanic setting from the Manager is also unset.
+ RecoverPanic *bool
+
+ // NeedLeaderElection indicates whether the controller needs to use leader election.
+ // Defaults to true, which means the controller will use leader election.
+ NeedLeaderElection *bool
+
+ // Reconciler reconciles an object
+ Reconciler reconcile.TypedReconciler[request]
+
+ // RateLimiter is used to limit how frequently requests may be queued.
+ // Defaults to MaxOfRateLimiter which has both overall and per-item rate limiting.
+ // The overall is a token bucket and the per-item is exponential.
+ RateLimiter workqueue.TypedRateLimiter[request]
+
+ // NewQueue constructs the queue for this controller once the controller is ready to start.
+ // With NewQueue a custom queue implementation can be used, e.g. a priority queue to prioritize with which
+ // priority/order objects are reconciled (e.g. to reconcile objects with changes first).
+ // This is a func because the standard Kubernetes work queues start themselves immediately, which
+ // leads to goroutine leaks if something calls controller.New repeatedly.
+ // The NewQueue func gets the controller name and the RateLimiter option (defaulted if necessary) passed in.
+ // NewQueue defaults to NewRateLimitingQueueWithConfig.
+ //
+ // NOTE: LOW LEVEL PRIMITIVE!
+ // Only use a custom NewQueue if you know what you are doing.
+ NewQueue func(controllerName string, rateLimiter workqueue.TypedRateLimiter[request]) workqueue.TypedRateLimitingInterface[request]
+
+ // LogConstructor is used to construct a logger used for this controller and passed
+ // to each reconciliation via the context field.
+ LogConstructor func(request *request) logr.Logger
+}
+
+// Controller implements a Kubernetes API. A Controller manages a work queue fed reconcile.Requests
+// from source.Sources. Work is performed through the reconcile.Reconciler for each enqueued item.
+// Work typically is reads and writes Kubernetes objects to make the system state match the state specified
+// in the object Spec.
+type Controller = TypedController[reconcile.Request]
+
+// TypedController implements an API.
+type TypedController[request comparable] interface {
+ // Reconciler is called to reconcile an object by Namespace/Name
+ reconcile.TypedReconciler[request]
+
+ // Watch watches the provided Source.
+ Watch(src source.TypedSource[request]) error
+
+ // Start starts the controller. Start blocks until the context is closed or a
+ // controller has an error starting.
+ Start(ctx context.Context) error
+
+ // GetLogger returns this controller logger prefilled with basic information.
+ GetLogger() logr.Logger
+}
+
+// New returns a new Controller registered with the Manager. The Manager will ensure that shared Caches have
+// been synced before the Controller is Started.
+//
+// The name must be unique as it is used to identify the controller in metrics and logs.
+func New(name string, mgr manager.Manager, options Options) (Controller, error) {
+ return NewTyped(name, mgr, options)
+}
+
+// NewTyped returns a new typed controller registered with the Manager,
+//
+// The name must be unique as it is used to identify the controller in metrics and logs.
+func NewTyped[request comparable](name string, mgr manager.Manager, options TypedOptions[request]) (TypedController[request], error) {
+ c, err := NewTypedUnmanaged(name, mgr, options)
+ if err != nil {
+ return nil, err
+ }
+
+ // Add the controller as a Manager components
+ return c, mgr.Add(c)
+}
+
+// NewUnmanaged returns a new controller without adding it to the manager. The
+// caller is responsible for starting the returned controller.
+//
+// The name must be unique as it is used to identify the controller in metrics and logs.
+func NewUnmanaged(name string, mgr manager.Manager, options Options) (Controller, error) {
+ return NewTypedUnmanaged(name, mgr, options)
+}
+
+// NewTypedUnmanaged returns a new typed controller without adding it to the manager.
+//
+// The name must be unique as it is used to identify the controller in metrics and logs.
+func NewTypedUnmanaged[request comparable](name string, mgr manager.Manager, options TypedOptions[request]) (TypedController[request], error) {
+ if options.Reconciler == nil {
+ return nil, fmt.Errorf("must specify Reconciler")
+ }
+
+ if len(name) == 0 {
+ return nil, fmt.Errorf("must specify Name for Controller")
+ }
+
+ if options.SkipNameValidation == nil {
+ options.SkipNameValidation = mgr.GetControllerOptions().SkipNameValidation
+ }
+
+ if options.SkipNameValidation == nil || !*options.SkipNameValidation {
+ if err := checkName(name); err != nil {
+ return nil, err
+ }
+ }
+
+ if options.LogConstructor == nil {
+ log := mgr.GetLogger().WithValues(
+ "controller", name,
+ )
+ options.LogConstructor = func(in *request) logr.Logger {
+ log := log
+ if req, ok := any(in).(*reconcile.Request); ok && req != nil {
+ log = log.WithValues(
+ "object", klog.KRef(req.Namespace, req.Name),
+ "namespace", req.Namespace, "name", req.Name,
+ )
+ }
+ return log
+ }
+ }
+
+ if options.MaxConcurrentReconciles <= 0 {
+ if mgr.GetControllerOptions().MaxConcurrentReconciles > 0 {
+ options.MaxConcurrentReconciles = mgr.GetControllerOptions().MaxConcurrentReconciles
+ } else {
+ options.MaxConcurrentReconciles = 1
+ }
+ }
+
+ if options.CacheSyncTimeout == 0 {
+ if mgr.GetControllerOptions().CacheSyncTimeout != 0 {
+ options.CacheSyncTimeout = mgr.GetControllerOptions().CacheSyncTimeout
+ } else {
+ options.CacheSyncTimeout = 2 * time.Minute
+ }
+ }
+
+ if options.RateLimiter == nil {
+ if ptr.Deref(mgr.GetControllerOptions().UsePriorityQueue, false) {
+ options.RateLimiter = workqueue.NewTypedItemExponentialFailureRateLimiter[request](5*time.Millisecond, 1000*time.Second)
+ } else {
+ options.RateLimiter = workqueue.DefaultTypedControllerRateLimiter[request]()
+ }
+ }
+
+ if options.NewQueue == nil {
+ options.NewQueue = func(controllerName string, rateLimiter workqueue.TypedRateLimiter[request]) workqueue.TypedRateLimitingInterface[request] {
+ if ptr.Deref(mgr.GetControllerOptions().UsePriorityQueue, false) {
+ return priorityqueue.New(controllerName, func(o *priorityqueue.Opts[request]) {
+ o.Log = mgr.GetLogger().WithValues("controller", controllerName)
+ o.RateLimiter = rateLimiter
+ })
+ }
+ return workqueue.NewTypedRateLimitingQueueWithConfig(rateLimiter, workqueue.TypedRateLimitingQueueConfig[request]{
+ Name: controllerName,
+ })
+ }
+ }
+
+ if options.RecoverPanic == nil {
+ options.RecoverPanic = mgr.GetControllerOptions().RecoverPanic
+ }
+
+ if options.NeedLeaderElection == nil {
+ options.NeedLeaderElection = mgr.GetControllerOptions().NeedLeaderElection
+ }
+
+ // Create controller with dependencies set
+ return &controller.Controller[request]{
+ Do: options.Reconciler,
+ RateLimiter: options.RateLimiter,
+ NewQueue: options.NewQueue,
+ MaxConcurrentReconciles: options.MaxConcurrentReconciles,
+ CacheSyncTimeout: options.CacheSyncTimeout,
+ Name: name,
+ LogConstructor: options.LogConstructor,
+ RecoverPanic: options.RecoverPanic,
+ LeaderElected: options.NeedLeaderElection,
+ }, nil
+}
+
+// ReconcileIDFromContext gets the reconcileID from the current context.
+var ReconcileIDFromContext = controller.ReconcileIDFromContext
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil/controllerutil.go b/vendor/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil/controllerutil.go
new file mode 100644
index 00000000000..ba3f931e476
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil/controllerutil.go
@@ -0,0 +1,509 @@
+/*
+Copyright 2018 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 controllerutil
+
+import (
+ "context"
+ "fmt"
+ "reflect"
+
+ "k8s.io/apimachinery/pkg/api/equality"
+ apierrors "k8s.io/apimachinery/pkg/api/errors"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "k8s.io/utils/ptr"
+
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/client/apiutil"
+)
+
+// AlreadyOwnedError is an error returned if the object you are trying to assign
+// a controller reference is already owned by another controller Object is the
+// subject and Owner is the reference for the current owner.
+type AlreadyOwnedError struct {
+ Object metav1.Object
+ Owner metav1.OwnerReference
+}
+
+func (e *AlreadyOwnedError) Error() string {
+ return fmt.Sprintf("Object %s/%s is already owned by another %s controller %s", e.Object.GetNamespace(), e.Object.GetName(), e.Owner.Kind, e.Owner.Name)
+}
+
+func newAlreadyOwnedError(obj metav1.Object, owner metav1.OwnerReference) *AlreadyOwnedError {
+ return &AlreadyOwnedError{
+ Object: obj,
+ Owner: owner,
+ }
+}
+
+// OwnerReferenceOption is a function that can modify a `metav1.OwnerReference`.
+type OwnerReferenceOption func(*metav1.OwnerReference)
+
+// WithBlockOwnerDeletion allows configuring the BlockOwnerDeletion field on the `metav1.OwnerReference`.
+func WithBlockOwnerDeletion(blockOwnerDeletion bool) OwnerReferenceOption {
+ return func(ref *metav1.OwnerReference) {
+ ref.BlockOwnerDeletion = &blockOwnerDeletion
+ }
+}
+
+// SetControllerReference sets owner as a Controller OwnerReference on controlled.
+// This is used for garbage collection of the controlled object and for
+// reconciling the owner object on changes to controlled (with a Watch + EnqueueRequestForOwner).
+// Since only one OwnerReference can be a controller, it returns an error if
+// there is another OwnerReference with Controller flag set.
+func SetControllerReference(owner, controlled metav1.Object, scheme *runtime.Scheme, opts ...OwnerReferenceOption) error {
+ // Validate the owner.
+ ro, ok := owner.(runtime.Object)
+ if !ok {
+ return fmt.Errorf("%T is not a runtime.Object, cannot call SetControllerReference", owner)
+ }
+ if err := validateOwner(owner, controlled); err != nil {
+ return err
+ }
+
+ // Create a new controller ref.
+ gvk, err := apiutil.GVKForObject(ro, scheme)
+ if err != nil {
+ return err
+ }
+ ref := metav1.OwnerReference{
+ APIVersion: gvk.GroupVersion().String(),
+ Kind: gvk.Kind,
+ Name: owner.GetName(),
+ UID: owner.GetUID(),
+ BlockOwnerDeletion: ptr.To(true),
+ Controller: ptr.To(true),
+ }
+ for _, opt := range opts {
+ opt(&ref)
+ }
+
+ // Return early with an error if the object is already controlled.
+ if existing := metav1.GetControllerOf(controlled); existing != nil && !referSameObject(*existing, ref) {
+ return newAlreadyOwnedError(controlled, *existing)
+ }
+
+ // Update owner references and return.
+ upsertOwnerRef(ref, controlled)
+ return nil
+}
+
+// SetOwnerReference is a helper method to make sure the given object contains an object reference to the object provided.
+// This allows you to declare that owner has a dependency on the object without specifying it as a controller.
+// If a reference to the same object already exists, it'll be overwritten with the newly provided version.
+func SetOwnerReference(owner, object metav1.Object, scheme *runtime.Scheme, opts ...OwnerReferenceOption) error {
+ // Validate the owner.
+ ro, ok := owner.(runtime.Object)
+ if !ok {
+ return fmt.Errorf("%T is not a runtime.Object, cannot call SetOwnerReference", owner)
+ }
+ if err := validateOwner(owner, object); err != nil {
+ return err
+ }
+
+ // Create a new owner ref.
+ gvk, err := apiutil.GVKForObject(ro, scheme)
+ if err != nil {
+ return err
+ }
+ ref := metav1.OwnerReference{
+ APIVersion: gvk.GroupVersion().String(),
+ Kind: gvk.Kind,
+ UID: owner.GetUID(),
+ Name: owner.GetName(),
+ }
+ for _, opt := range opts {
+ opt(&ref)
+ }
+
+ // Update owner references and return.
+ upsertOwnerRef(ref, object)
+ return nil
+}
+
+// RemoveOwnerReference is a helper method to make sure the given object removes an owner reference to the object provided.
+// This allows you to remove the owner to establish a new owner of the object in a subsequent call.
+func RemoveOwnerReference(owner, object metav1.Object, scheme *runtime.Scheme) error {
+ owners := object.GetOwnerReferences()
+ length := len(owners)
+ if length < 1 {
+ return fmt.Errorf("%T does not have any owner references", object)
+ }
+ ro, ok := owner.(runtime.Object)
+ if !ok {
+ return fmt.Errorf("%T is not a runtime.Object, cannot call RemoveOwnerReference", owner)
+ }
+ gvk, err := apiutil.GVKForObject(ro, scheme)
+ if err != nil {
+ return err
+ }
+
+ index := indexOwnerRef(owners, metav1.OwnerReference{
+ APIVersion: gvk.GroupVersion().String(),
+ Name: owner.GetName(),
+ Kind: gvk.Kind,
+ })
+ if index == -1 {
+ return fmt.Errorf("%T does not have an owner reference for %T", object, owner)
+ }
+
+ owners = append(owners[:index], owners[index+1:]...)
+ object.SetOwnerReferences(owners)
+ return nil
+}
+
+// HasControllerReference returns true if the object
+// has an owner ref with controller equal to true
+func HasControllerReference(object metav1.Object) bool {
+ owners := object.GetOwnerReferences()
+ for _, owner := range owners {
+ isTrue := owner.Controller
+ if owner.Controller != nil && *isTrue {
+ return true
+ }
+ }
+ return false
+}
+
+// HasOwnerReference returns true if the owners list contains an owner reference
+// that matches the object's group, kind, and name.
+func HasOwnerReference(ownerRefs []metav1.OwnerReference, obj client.Object, scheme *runtime.Scheme) (bool, error) {
+ gvk, err := apiutil.GVKForObject(obj, scheme)
+ if err != nil {
+ return false, err
+ }
+ idx := indexOwnerRef(ownerRefs, metav1.OwnerReference{
+ APIVersion: gvk.GroupVersion().String(),
+ Name: obj.GetName(),
+ Kind: gvk.Kind,
+ })
+ return idx != -1, nil
+}
+
+// RemoveControllerReference removes an owner reference where the controller
+// equals true
+func RemoveControllerReference(owner, object metav1.Object, scheme *runtime.Scheme) error {
+ if ok := HasControllerReference(object); !ok {
+ return fmt.Errorf("%T does not have a owner reference with controller equals true", object)
+ }
+ ro, ok := owner.(runtime.Object)
+ if !ok {
+ return fmt.Errorf("%T is not a runtime.Object, cannot call RemoveControllerReference", owner)
+ }
+ gvk, err := apiutil.GVKForObject(ro, scheme)
+ if err != nil {
+ return err
+ }
+ ownerRefs := object.GetOwnerReferences()
+ index := indexOwnerRef(ownerRefs, metav1.OwnerReference{
+ APIVersion: gvk.GroupVersion().String(),
+ Name: owner.GetName(),
+ Kind: gvk.Kind,
+ })
+
+ if index == -1 {
+ return fmt.Errorf("%T does not have an controller reference for %T", object, owner)
+ }
+
+ if ownerRefs[index].Controller == nil || !*ownerRefs[index].Controller {
+ return fmt.Errorf("%T owner is not the controller reference for %T", owner, object)
+ }
+
+ ownerRefs = append(ownerRefs[:index], ownerRefs[index+1:]...)
+ object.SetOwnerReferences(ownerRefs)
+ return nil
+}
+
+func upsertOwnerRef(ref metav1.OwnerReference, object metav1.Object) {
+ owners := object.GetOwnerReferences()
+ if idx := indexOwnerRef(owners, ref); idx == -1 {
+ owners = append(owners, ref)
+ } else {
+ owners[idx] = ref
+ }
+ object.SetOwnerReferences(owners)
+}
+
+// indexOwnerRef returns the index of the owner reference in the slice if found, or -1.
+func indexOwnerRef(ownerReferences []metav1.OwnerReference, ref metav1.OwnerReference) int {
+ for index, r := range ownerReferences {
+ if referSameObject(r, ref) {
+ return index
+ }
+ }
+ return -1
+}
+
+func validateOwner(owner, object metav1.Object) error {
+ ownerNs := owner.GetNamespace()
+ if ownerNs != "" {
+ objNs := object.GetNamespace()
+ if objNs == "" {
+ return fmt.Errorf("cluster-scoped resource must not have a namespace-scoped owner, owner's namespace %s", ownerNs)
+ }
+ if ownerNs != objNs {
+ return fmt.Errorf("cross-namespace owner references are disallowed, owner's namespace %s, obj's namespace %s", owner.GetNamespace(), object.GetNamespace())
+ }
+ }
+ return nil
+}
+
+// Returns true if a and b point to the same object.
+func referSameObject(a, b metav1.OwnerReference) bool {
+ aGV, err := schema.ParseGroupVersion(a.APIVersion)
+ if err != nil {
+ return false
+ }
+
+ bGV, err := schema.ParseGroupVersion(b.APIVersion)
+ if err != nil {
+ return false
+ }
+ return aGV.Group == bGV.Group && a.Kind == b.Kind && a.Name == b.Name
+}
+
+// OperationResult is the action result of a CreateOrUpdate call.
+type OperationResult string
+
+const ( // They should complete the sentence "Deployment default/foo has been ..."
+ // OperationResultNone means that the resource has not been changed.
+ OperationResultNone OperationResult = "unchanged"
+ // OperationResultCreated means that a new resource is created.
+ OperationResultCreated OperationResult = "created"
+ // OperationResultUpdated means that an existing resource is updated.
+ OperationResultUpdated OperationResult = "updated"
+ // OperationResultUpdatedStatus means that an existing resource and its status is updated.
+ OperationResultUpdatedStatus OperationResult = "updatedStatus"
+ // OperationResultUpdatedStatusOnly means that only an existing status is updated.
+ OperationResultUpdatedStatusOnly OperationResult = "updatedStatusOnly"
+)
+
+// CreateOrUpdate creates or updates the given object in the Kubernetes
+// cluster. The object's desired state must be reconciled with the existing
+// state inside the passed in callback MutateFn.
+//
+// The MutateFn is called regardless of creating or updating an object.
+//
+// It returns the executed operation and an error.
+//
+// Note: changes made by MutateFn to any sub-resource (status...), will be
+// discarded.
+func CreateOrUpdate(ctx context.Context, c client.Client, obj client.Object, f MutateFn) (OperationResult, error) {
+ key := client.ObjectKeyFromObject(obj)
+ if err := c.Get(ctx, key, obj); err != nil {
+ if !apierrors.IsNotFound(err) {
+ return OperationResultNone, err
+ }
+ if err := mutate(f, key, obj); err != nil {
+ return OperationResultNone, err
+ }
+ if err := c.Create(ctx, obj); err != nil {
+ return OperationResultNone, err
+ }
+ return OperationResultCreated, nil
+ }
+
+ existing := obj.DeepCopyObject()
+ if err := mutate(f, key, obj); err != nil {
+ return OperationResultNone, err
+ }
+
+ if equality.Semantic.DeepEqual(existing, obj) {
+ return OperationResultNone, nil
+ }
+
+ if err := c.Update(ctx, obj); err != nil {
+ return OperationResultNone, err
+ }
+ return OperationResultUpdated, nil
+}
+
+// CreateOrPatch creates or patches the given object in the Kubernetes
+// cluster. The object's desired state must be reconciled with the before
+// state inside the passed in callback MutateFn.
+//
+// The MutateFn is called regardless of creating or updating an object.
+//
+// It returns the executed operation and an error.
+//
+// Note: changes to any sub-resource other than status will be ignored.
+// Changes to the status sub-resource will only be applied if the object
+// already exist. To change the status on object creation, the easiest
+// way is to requeue the object in the controller if OperationResult is
+// OperationResultCreated
+func CreateOrPatch(ctx context.Context, c client.Client, obj client.Object, f MutateFn) (OperationResult, error) {
+ key := client.ObjectKeyFromObject(obj)
+ if err := c.Get(ctx, key, obj); err != nil {
+ if !apierrors.IsNotFound(err) {
+ return OperationResultNone, err
+ }
+ if f != nil {
+ if err := mutate(f, key, obj); err != nil {
+ return OperationResultNone, err
+ }
+ }
+ if err := c.Create(ctx, obj); err != nil {
+ return OperationResultNone, err
+ }
+ return OperationResultCreated, nil
+ }
+
+ // Create patches for the object and its possible status.
+ objPatch := client.MergeFrom(obj.DeepCopyObject().(client.Object))
+ statusPatch := client.MergeFrom(obj.DeepCopyObject().(client.Object))
+
+ // Create a copy of the original object as well as converting that copy to
+ // unstructured data.
+ before, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj.DeepCopyObject())
+ if err != nil {
+ return OperationResultNone, err
+ }
+
+ // Attempt to extract the status from the resource for easier comparison later
+ beforeStatus, hasBeforeStatus, err := unstructured.NestedFieldCopy(before, "status")
+ if err != nil {
+ return OperationResultNone, err
+ }
+
+ // If the resource contains a status then remove it from the unstructured
+ // copy to avoid unnecessary patching later.
+ if hasBeforeStatus {
+ unstructured.RemoveNestedField(before, "status")
+ }
+
+ // Mutate the original object.
+ if f != nil {
+ if err := mutate(f, key, obj); err != nil {
+ return OperationResultNone, err
+ }
+ }
+
+ // Convert the resource to unstructured to compare against our before copy.
+ after, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
+ if err != nil {
+ return OperationResultNone, err
+ }
+
+ // Attempt to extract the status from the resource for easier comparison later
+ afterStatus, hasAfterStatus, err := unstructured.NestedFieldCopy(after, "status")
+ if err != nil {
+ return OperationResultNone, err
+ }
+
+ // If the resource contains a status then remove it from the unstructured
+ // copy to avoid unnecessary patching later.
+ if hasAfterStatus {
+ unstructured.RemoveNestedField(after, "status")
+ }
+
+ result := OperationResultNone
+
+ if !reflect.DeepEqual(before, after) {
+ // Only issue a Patch if the before and after resources (minus status) differ
+ if err := c.Patch(ctx, obj, objPatch); err != nil {
+ return result, err
+ }
+ result = OperationResultUpdated
+ }
+
+ if (hasBeforeStatus || hasAfterStatus) && !reflect.DeepEqual(beforeStatus, afterStatus) {
+ // Only issue a Status Patch if the resource has a status and the beforeStatus
+ // and afterStatus copies differ
+ if result == OperationResultUpdated {
+ // If Status was replaced by Patch before, set it to afterStatus
+ objectAfterPatch, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
+ if err != nil {
+ return result, err
+ }
+ if err = unstructured.SetNestedField(objectAfterPatch, afterStatus, "status"); err != nil {
+ return result, err
+ }
+ // If Status was replaced by Patch before, restore patched structure to the obj
+ if err = runtime.DefaultUnstructuredConverter.FromUnstructured(objectAfterPatch, obj); err != nil {
+ return result, err
+ }
+ }
+ if err := c.Status().Patch(ctx, obj, statusPatch); err != nil {
+ return result, err
+ }
+ if result == OperationResultUpdated {
+ result = OperationResultUpdatedStatus
+ } else {
+ result = OperationResultUpdatedStatusOnly
+ }
+ }
+
+ return result, nil
+}
+
+// mutate wraps a MutateFn and applies validation to its result.
+func mutate(f MutateFn, key client.ObjectKey, obj client.Object) error {
+ if err := f(); err != nil {
+ return err
+ }
+ if newKey := client.ObjectKeyFromObject(obj); key != newKey {
+ return fmt.Errorf("MutateFn cannot mutate object name and/or object namespace")
+ }
+ return nil
+}
+
+// MutateFn is a function which mutates the existing object into its desired state.
+type MutateFn func() error
+
+// AddFinalizer accepts an Object and adds the provided finalizer if not present.
+// It returns an indication of whether it updated the object's list of finalizers.
+func AddFinalizer(o client.Object, finalizer string) (finalizersUpdated bool) {
+ f := o.GetFinalizers()
+ for _, e := range f {
+ if e == finalizer {
+ return false
+ }
+ }
+ o.SetFinalizers(append(f, finalizer))
+ return true
+}
+
+// RemoveFinalizer accepts an Object and removes the provided finalizer if present.
+// It returns an indication of whether it updated the object's list of finalizers.
+func RemoveFinalizer(o client.Object, finalizer string) (finalizersUpdated bool) {
+ f := o.GetFinalizers()
+ length := len(f)
+
+ index := 0
+ for i := 0; i < length; i++ {
+ if f[i] == finalizer {
+ continue
+ }
+ f[index] = f[i]
+ index++
+ }
+ o.SetFinalizers(f[:index])
+ return length != index
+}
+
+// ContainsFinalizer checks an Object that the provided finalizer is present.
+func ContainsFinalizer(o client.Object, finalizer string) bool {
+ f := o.GetFinalizers()
+ for _, e := range f {
+ if e == finalizer {
+ return true
+ }
+ }
+ return false
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil/doc.go
new file mode 100644
index 00000000000..ab386b29cdb
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil/doc.go
@@ -0,0 +1,20 @@
+/*
+Copyright 2018 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 controllerutil contains utility functions for working with and implementing Controllers.
+*/
+package controllerutil
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/controller/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/controller/doc.go
new file mode 100644
index 00000000000..228335e9293
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/controller/doc.go
@@ -0,0 +1,25 @@
+/*
+Copyright 2018 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 controller provides types and functions for building Controllers. Controllers implement Kubernetes APIs.
+
+# Creation
+
+To create a new Controller, first create a manager.Manager and pass it to the controller.New function.
+The Controller MUST be started by calling Manager.Start.
+*/
+package controller
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/controller/name.go b/vendor/sigs.k8s.io/controller-runtime/pkg/controller/name.go
new file mode 100644
index 00000000000..00ca6551281
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/controller/name.go
@@ -0,0 +1,43 @@
+/*
+Copyright 2020 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 controller
+
+import (
+ "fmt"
+ "sync"
+
+ "k8s.io/apimachinery/pkg/util/sets"
+)
+
+var nameLock sync.Mutex
+var usedNames sets.Set[string]
+
+func checkName(name string) error {
+ nameLock.Lock()
+ defer nameLock.Unlock()
+ if usedNames == nil {
+ usedNames = sets.Set[string]{}
+ }
+
+ if usedNames.Has(name) {
+ return fmt.Errorf("controller with name %s already exists. Controller names must be unique to avoid multiple controllers reporting the same metric. This validation can be disabled via the SkipNameValidation option", name)
+ }
+
+ usedNames.Insert(name)
+
+ return nil
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/controller/priorityqueue/metrics.go b/vendor/sigs.k8s.io/controller-runtime/pkg/controller/priorityqueue/metrics.go
new file mode 100644
index 00000000000..36626646f40
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/controller/priorityqueue/metrics.go
@@ -0,0 +1,146 @@
+package priorityqueue
+
+import (
+ "sync"
+ "time"
+
+ "k8s.io/client-go/util/workqueue"
+ "k8s.io/utils/clock"
+)
+
+// This file is mostly a copy of unexported code from
+// https://github.com/kubernetes/kubernetes/blob/1d8828ce707ed9dd7a6a9756385419cce1d202ac/staging/src/k8s.io/client-go/util/workqueue/metrics.go
+//
+// The only two differences are the addition of mapLock in defaultQueueMetrics and converging retryMetrics into queueMetrics.
+
+type queueMetrics[T comparable] interface {
+ add(item T)
+ get(item T)
+ done(item T)
+ updateUnfinishedWork()
+ retry()
+}
+
+func newQueueMetrics[T comparable](mp workqueue.MetricsProvider, name string, clock clock.Clock) queueMetrics[T] {
+ if len(name) == 0 {
+ return noMetrics[T]{}
+ }
+ return &defaultQueueMetrics[T]{
+ clock: clock,
+ depth: mp.NewDepthMetric(name),
+ adds: mp.NewAddsMetric(name),
+ latency: mp.NewLatencyMetric(name),
+ workDuration: mp.NewWorkDurationMetric(name),
+ unfinishedWorkSeconds: mp.NewUnfinishedWorkSecondsMetric(name),
+ longestRunningProcessor: mp.NewLongestRunningProcessorSecondsMetric(name),
+ addTimes: map[T]time.Time{},
+ processingStartTimes: map[T]time.Time{},
+ retries: mp.NewRetriesMetric(name),
+ }
+}
+
+// defaultQueueMetrics expects the caller to lock before setting any metrics.
+type defaultQueueMetrics[T comparable] struct {
+ clock clock.Clock
+
+ // current depth of a workqueue
+ depth workqueue.GaugeMetric
+ // total number of adds handled by a workqueue
+ adds workqueue.CounterMetric
+ // how long an item stays in a workqueue
+ latency workqueue.HistogramMetric
+ // how long processing an item from a workqueue takes
+ workDuration workqueue.HistogramMetric
+
+ mapLock sync.RWMutex
+ addTimes map[T]time.Time
+ processingStartTimes map[T]time.Time
+
+ // how long have current threads been working?
+ unfinishedWorkSeconds workqueue.SettableGaugeMetric
+ longestRunningProcessor workqueue.SettableGaugeMetric
+
+ retries workqueue.CounterMetric
+}
+
+// add is called for ready items only
+func (m *defaultQueueMetrics[T]) add(item T) {
+ if m == nil {
+ return
+ }
+
+ m.adds.Inc()
+ m.depth.Inc()
+
+ m.mapLock.Lock()
+ defer m.mapLock.Unlock()
+
+ if _, exists := m.addTimes[item]; !exists {
+ m.addTimes[item] = m.clock.Now()
+ }
+}
+
+func (m *defaultQueueMetrics[T]) get(item T) {
+ if m == nil {
+ return
+ }
+
+ m.depth.Dec()
+
+ m.mapLock.Lock()
+ defer m.mapLock.Unlock()
+
+ m.processingStartTimes[item] = m.clock.Now()
+ if startTime, exists := m.addTimes[item]; exists {
+ m.latency.Observe(m.sinceInSeconds(startTime))
+ delete(m.addTimes, item)
+ }
+}
+
+func (m *defaultQueueMetrics[T]) done(item T) {
+ if m == nil {
+ return
+ }
+
+ m.mapLock.Lock()
+ defer m.mapLock.Unlock()
+ if startTime, exists := m.processingStartTimes[item]; exists {
+ m.workDuration.Observe(m.sinceInSeconds(startTime))
+ delete(m.processingStartTimes, item)
+ }
+}
+
+func (m *defaultQueueMetrics[T]) updateUnfinishedWork() {
+ m.mapLock.RLock()
+ defer m.mapLock.RUnlock()
+ // Note that a summary metric would be better for this, but prometheus
+ // doesn't seem to have non-hacky ways to reset the summary metrics.
+ var total float64
+ var oldest float64
+ for _, t := range m.processingStartTimes {
+ age := m.sinceInSeconds(t)
+ total += age
+ if age > oldest {
+ oldest = age
+ }
+ }
+ m.unfinishedWorkSeconds.Set(total)
+ m.longestRunningProcessor.Set(oldest)
+}
+
+// Gets the time since the specified start in seconds.
+func (m *defaultQueueMetrics[T]) sinceInSeconds(start time.Time) float64 {
+ return m.clock.Since(start).Seconds()
+}
+
+func (m *defaultQueueMetrics[T]) retry() {
+ m.retries.Inc()
+}
+
+type noMetrics[T any] struct{}
+
+func (noMetrics[T]) add(item T) {}
+func (noMetrics[T]) get(item T) {}
+func (noMetrics[T]) done(item T) {}
+func (noMetrics[T]) updateUnfinishedWork() {}
+func (noMetrics[T]) retry() {}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/controller/priorityqueue/priorityqueue.go b/vendor/sigs.k8s.io/controller-runtime/pkg/controller/priorityqueue/priorityqueue.go
new file mode 100644
index 00000000000..ff5dea9021b
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/controller/priorityqueue/priorityqueue.go
@@ -0,0 +1,403 @@
+package priorityqueue
+
+import (
+ "sync"
+ "sync/atomic"
+ "time"
+
+ "github.com/go-logr/logr"
+ "github.com/google/btree"
+ "k8s.io/apimachinery/pkg/util/sets"
+ "k8s.io/client-go/util/workqueue"
+ "k8s.io/utils/clock"
+ "k8s.io/utils/ptr"
+
+ "sigs.k8s.io/controller-runtime/pkg/internal/metrics"
+)
+
+// AddOpts describes the options for adding items to the queue.
+type AddOpts struct {
+ After time.Duration
+ RateLimited bool
+ Priority int
+}
+
+// PriorityQueue is a priority queue for a controller. It
+// internally de-duplicates all items that are added to
+// it. It will use the max of the passed priorities and the
+// min of possible durations.
+type PriorityQueue[T comparable] interface {
+ workqueue.TypedRateLimitingInterface[T]
+ AddWithOpts(o AddOpts, Items ...T)
+ GetWithPriority() (item T, priority int, shutdown bool)
+}
+
+// Opts contains the options for a PriorityQueue.
+type Opts[T comparable] struct {
+ // Ratelimiter is being used when AddRateLimited is called. Defaults to a per-item exponential backoff
+ // limiter with an initial delay of five milliseconds and a max delay of 1000 seconds.
+ RateLimiter workqueue.TypedRateLimiter[T]
+ MetricProvider workqueue.MetricsProvider
+ Log logr.Logger
+}
+
+// Opt allows to configure a PriorityQueue.
+type Opt[T comparable] func(*Opts[T])
+
+// New constructs a new PriorityQueue.
+func New[T comparable](name string, o ...Opt[T]) PriorityQueue[T] {
+ opts := &Opts[T]{}
+ for _, f := range o {
+ f(opts)
+ }
+
+ if opts.RateLimiter == nil {
+ opts.RateLimiter = workqueue.NewTypedItemExponentialFailureRateLimiter[T](5*time.Millisecond, 1000*time.Second)
+ }
+
+ if opts.MetricProvider == nil {
+ opts.MetricProvider = metrics.WorkqueueMetricsProvider{}
+ }
+
+ pq := &priorityqueue[T]{
+ log: opts.Log,
+ items: map[T]*item[T]{},
+ queue: btree.NewG(32, less[T]),
+ becameReady: sets.Set[T]{},
+ metrics: newQueueMetrics[T](opts.MetricProvider, name, clock.RealClock{}),
+ // itemOrWaiterAdded indicates that an item or
+ // waiter was added. It must be buffered, because
+ // if we currently process items we can't tell
+ // if that included the new item/waiter.
+ itemOrWaiterAdded: make(chan struct{}, 1),
+ rateLimiter: opts.RateLimiter,
+ locked: sets.Set[T]{},
+ done: make(chan struct{}),
+ get: make(chan item[T]),
+ now: time.Now,
+ tick: time.Tick,
+ }
+
+ go pq.spin()
+ go pq.logState()
+ if _, ok := pq.metrics.(noMetrics[T]); !ok {
+ go pq.updateUnfinishedWorkLoop()
+ }
+
+ return pq
+}
+
+type priorityqueue[T comparable] struct {
+ log logr.Logger
+ // lock has to be acquired for any access any of items, queue, addedCounter
+ // or becameReady
+ lock sync.Mutex
+ items map[T]*item[T]
+ queue bTree[*item[T]]
+
+ // addedCounter is a counter of elements added, we need it
+ // because unixNano is not guaranteed to be unique.
+ addedCounter uint64
+
+ // becameReady holds items that are in the queue, were added
+ // with non-zero after and became ready. We need it to call the
+ // metrics add exactly once for them.
+ becameReady sets.Set[T]
+ metrics queueMetrics[T]
+
+ itemOrWaiterAdded chan struct{}
+
+ rateLimiter workqueue.TypedRateLimiter[T]
+
+ // locked contains the keys we handed out through Get() and that haven't
+ // yet been returned through Done().
+ locked sets.Set[T]
+ lockedLock sync.RWMutex
+
+ shutdown atomic.Bool
+ done chan struct{}
+
+ get chan item[T]
+
+ // waiters is the number of routines blocked in Get, we use it to determine
+ // if we can push items.
+ waiters atomic.Int64
+
+ // Configurable for testing
+ now func() time.Time
+ tick func(time.Duration) <-chan time.Time
+}
+
+func (w *priorityqueue[T]) AddWithOpts(o AddOpts, items ...T) {
+ w.lock.Lock()
+ defer w.lock.Unlock()
+
+ for _, key := range items {
+ after := o.After
+ if o.RateLimited {
+ rlAfter := w.rateLimiter.When(key)
+ if after == 0 || rlAfter < after {
+ after = rlAfter
+ }
+ }
+
+ var readyAt *time.Time
+ if after > 0 {
+ readyAt = ptr.To(w.now().Add(after))
+ w.metrics.retry()
+ }
+ if _, ok := w.items[key]; !ok {
+ item := &item[T]{
+ Key: key,
+ AddedCounter: w.addedCounter,
+ Priority: o.Priority,
+ ReadyAt: readyAt,
+ }
+ w.items[key] = item
+ w.queue.ReplaceOrInsert(item)
+ if item.ReadyAt == nil {
+ w.metrics.add(key)
+ }
+ w.addedCounter++
+ continue
+ }
+
+ // The b-tree de-duplicates based on ordering and any change here
+ // will affect the order - Just delete and re-add.
+ item, _ := w.queue.Delete(w.items[key])
+ if o.Priority > item.Priority {
+ item.Priority = o.Priority
+ }
+
+ if item.ReadyAt != nil && (readyAt == nil || readyAt.Before(*item.ReadyAt)) {
+ if readyAt == nil && !w.becameReady.Has(key) {
+ w.metrics.add(key)
+ }
+ item.ReadyAt = readyAt
+ }
+
+ w.queue.ReplaceOrInsert(item)
+ }
+
+ if len(items) > 0 {
+ w.notifyItemOrWaiterAdded()
+ }
+}
+
+func (w *priorityqueue[T]) notifyItemOrWaiterAdded() {
+ select {
+ case w.itemOrWaiterAdded <- struct{}{}:
+ default:
+ }
+}
+
+func (w *priorityqueue[T]) spin() {
+ blockForever := make(chan time.Time)
+ var nextReady <-chan time.Time
+ nextReady = blockForever
+
+ for {
+ select {
+ case <-w.done:
+ return
+ case <-w.itemOrWaiterAdded:
+ case <-nextReady:
+ }
+
+ nextReady = blockForever
+
+ func() {
+ w.lock.Lock()
+ defer w.lock.Unlock()
+
+ w.lockedLock.Lock()
+ defer w.lockedLock.Unlock()
+
+ // manipulating the tree from within Ascend might lead to panics, so
+ // track what we want to delete and do it after we are done ascending.
+ var toDelete []*item[T]
+ w.queue.Ascend(func(item *item[T]) bool {
+ if item.ReadyAt != nil {
+ if readyAt := item.ReadyAt.Sub(w.now()); readyAt > 0 {
+ nextReady = w.tick(readyAt)
+ return false
+ }
+ if !w.becameReady.Has(item.Key) {
+ w.metrics.add(item.Key)
+ w.becameReady.Insert(item.Key)
+ }
+ }
+
+ if w.waiters.Load() == 0 {
+ // Have to keep iterating here to ensure we update metrics
+ // for further items that became ready and set nextReady.
+ return true
+ }
+
+ // Item is locked, we can not hand it out
+ if w.locked.Has(item.Key) {
+ return true
+ }
+
+ w.metrics.get(item.Key)
+ w.locked.Insert(item.Key)
+ w.waiters.Add(-1)
+ delete(w.items, item.Key)
+ toDelete = append(toDelete, item)
+ w.becameReady.Delete(item.Key)
+ w.get <- *item
+
+ return true
+ })
+
+ for _, item := range toDelete {
+ w.queue.Delete(item)
+ }
+ }()
+ }
+}
+
+func (w *priorityqueue[T]) Add(item T) {
+ w.AddWithOpts(AddOpts{}, item)
+}
+
+func (w *priorityqueue[T]) AddAfter(item T, after time.Duration) {
+ w.AddWithOpts(AddOpts{After: after}, item)
+}
+
+func (w *priorityqueue[T]) AddRateLimited(item T) {
+ w.AddWithOpts(AddOpts{RateLimited: true}, item)
+}
+
+func (w *priorityqueue[T]) GetWithPriority() (_ T, priority int, shutdown bool) {
+ w.waiters.Add(1)
+
+ w.notifyItemOrWaiterAdded()
+ item := <-w.get
+
+ return item.Key, item.Priority, w.shutdown.Load()
+}
+
+func (w *priorityqueue[T]) Get() (item T, shutdown bool) {
+ key, _, shutdown := w.GetWithPriority()
+ return key, shutdown
+}
+
+func (w *priorityqueue[T]) Forget(item T) {
+ w.rateLimiter.Forget(item)
+}
+
+func (w *priorityqueue[T]) NumRequeues(item T) int {
+ return w.rateLimiter.NumRequeues(item)
+}
+
+func (w *priorityqueue[T]) ShuttingDown() bool {
+ return w.shutdown.Load()
+}
+
+func (w *priorityqueue[T]) Done(item T) {
+ w.lockedLock.Lock()
+ defer w.lockedLock.Unlock()
+ w.locked.Delete(item)
+ w.metrics.done(item)
+ w.notifyItemOrWaiterAdded()
+}
+
+func (w *priorityqueue[T]) ShutDown() {
+ w.shutdown.Store(true)
+ close(w.done)
+}
+
+// ShutDownWithDrain just calls ShutDown, as the draining
+// functionality is not used by controller-runtime.
+func (w *priorityqueue[T]) ShutDownWithDrain() {
+ w.ShutDown()
+}
+
+// Len returns the number of items that are ready to be
+// picked up. It does not include items that are not yet
+// ready.
+func (w *priorityqueue[T]) Len() int {
+ w.lock.Lock()
+ defer w.lock.Unlock()
+
+ var result int
+ w.queue.Ascend(func(item *item[T]) bool {
+ if item.ReadyAt == nil || item.ReadyAt.Compare(w.now()) <= 0 {
+ result++
+ return true
+ }
+ return false
+ })
+
+ return result
+}
+
+func (w *priorityqueue[T]) logState() {
+ t := time.Tick(10 * time.Second)
+ for {
+ select {
+ case <-w.done:
+ return
+ case <-t:
+ }
+
+ // Log level may change at runtime, so keep the
+ // loop going even if a given level is currently
+ // not enabled.
+ if !w.log.V(5).Enabled() {
+ continue
+ }
+ w.lock.Lock()
+ items := make([]*item[T], 0, len(w.items))
+ w.queue.Ascend(func(item *item[T]) bool {
+ items = append(items, item)
+ return true
+ })
+ w.lock.Unlock()
+
+ w.log.V(5).Info("workqueue_items", "items", items)
+ }
+}
+
+func less[T comparable](a, b *item[T]) bool {
+ if a.ReadyAt == nil && b.ReadyAt != nil {
+ return true
+ }
+ if b.ReadyAt == nil && a.ReadyAt != nil {
+ return false
+ }
+ if a.ReadyAt != nil && b.ReadyAt != nil && !a.ReadyAt.Equal(*b.ReadyAt) {
+ return a.ReadyAt.Before(*b.ReadyAt)
+ }
+ if a.Priority != b.Priority {
+ return a.Priority > b.Priority
+ }
+
+ return a.AddedCounter < b.AddedCounter
+}
+
+type item[T comparable] struct {
+ Key T `json:"key"`
+ AddedCounter uint64 `json:"addedCounter"`
+ Priority int `json:"priority"`
+ ReadyAt *time.Time `json:"readyAt,omitempty"`
+}
+
+func (w *priorityqueue[T]) updateUnfinishedWorkLoop() {
+ t := time.Tick(500 * time.Millisecond) // borrowed from workqueue: https://github.com/kubernetes/kubernetes/blob/67a807bf142c7a2a5ecfdb2a5d24b4cdea4cc79c/staging/src/k8s.io/client-go/util/workqueue/queue.go#L182
+ for {
+ select {
+ case <-w.done:
+ return
+ case <-t:
+ }
+ w.metrics.updateUnfinishedWork()
+ }
+}
+
+type bTree[T any] interface {
+ ReplaceOrInsert(item T) (_ T, _ bool)
+ Delete(item T) (T, bool)
+ Ascend(iterator btree.ItemIteratorG[T])
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/conversion/conversion.go b/vendor/sigs.k8s.io/controller-runtime/pkg/conversion/conversion.go
new file mode 100644
index 00000000000..da32ab48e4b
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/conversion/conversion.go
@@ -0,0 +1,40 @@
+/*
+Copyright 2019 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 conversion provides interface definitions that an API Type needs to
+implement for it to be supported by the generic conversion webhook handler
+defined under pkg/webhook/conversion.
+*/
+package conversion
+
+import "k8s.io/apimachinery/pkg/runtime"
+
+// Convertible defines capability of a type to convertible i.e. it can be converted to/from a hub type.
+type Convertible interface {
+ runtime.Object
+ ConvertTo(dst Hub) error
+ ConvertFrom(src Hub) error
+}
+
+// Hub marks that a given type is the hub type for conversion. This means that
+// all conversions will first convert to the hub type, then convert from the hub
+// type to the destination type. All types besides the hub type should implement
+// Convertible.
+type Hub interface {
+ runtime.Object
+ Hub()
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/event/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/event/doc.go
new file mode 100644
index 00000000000..adba3bbc16e
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/event/doc.go
@@ -0,0 +1,28 @@
+/*
+Copyright 2018 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 event contains the definitions for the Event types produced by source.Sources and transformed into
+reconcile.Requests by handler.EventHandler.
+
+You should rarely need to work with these directly -- instead, use Controller.Watch with
+source.Sources and handler.EventHandlers.
+
+Events generally contain both a full runtime.Object that caused the event, as well
+as a direct handle to that object's metadata. This saves a lot of typecasting in
+code that works with Events.
+*/
+package event
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/event/event.go b/vendor/sigs.k8s.io/controller-runtime/pkg/event/event.go
new file mode 100644
index 00000000000..81229fc2d30
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/event/event.go
@@ -0,0 +1,72 @@
+/*
+Copyright 2018 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 event
+
+import "sigs.k8s.io/controller-runtime/pkg/client"
+
+// CreateEvent is an event where a Kubernetes object was created. CreateEvent should be generated
+// by a source.Source and transformed into a reconcile.Request by a handler.EventHandler.
+type CreateEvent = TypedCreateEvent[client.Object]
+
+// UpdateEvent is an event where a Kubernetes object was updated. UpdateEvent should be generated
+// by a source.Source and transformed into a reconcile.Request by an handler.EventHandler.
+type UpdateEvent = TypedUpdateEvent[client.Object]
+
+// DeleteEvent is an event where a Kubernetes object was deleted. DeleteEvent should be generated
+// by a source.Source and transformed into a reconcile.Request by an handler.EventHandler.
+type DeleteEvent = TypedDeleteEvent[client.Object]
+
+// GenericEvent is an event where the operation type is unknown (e.g. polling or event originating outside the cluster).
+// GenericEvent should be generated by a source.Source and transformed into a reconcile.Request by an
+// handler.EventHandler.
+type GenericEvent = TypedGenericEvent[client.Object]
+
+// TypedCreateEvent is an event where a Kubernetes object was created. TypedCreateEvent should be generated
+// by a source.Source and transformed into a reconcile.Request by an handler.TypedEventHandler.
+type TypedCreateEvent[object any] struct {
+ // Object is the object from the event
+ Object object
+}
+
+// TypedUpdateEvent is an event where a Kubernetes object was updated. TypedUpdateEvent should be generated
+// by a source.Source and transformed into a reconcile.Request by an handler.TypedEventHandler.
+type TypedUpdateEvent[object any] struct {
+ // ObjectOld is the object from the event
+ ObjectOld object
+
+ // ObjectNew is the object from the event
+ ObjectNew object
+}
+
+// TypedDeleteEvent is an event where a Kubernetes object was deleted. TypedDeleteEvent should be generated
+// by a source.Source and transformed into a reconcile.Request by an handler.TypedEventHandler.
+type TypedDeleteEvent[object any] struct {
+ // Object is the object from the event
+ Object object
+
+ // DeleteStateUnknown is true if the Delete event was missed but we identified the object
+ // as having been deleted.
+ DeleteStateUnknown bool
+}
+
+// TypedGenericEvent is an event where the operation type is unknown (e.g. polling or event originating outside the cluster).
+// TypedGenericEvent should be generated by a source.Source and transformed into a reconcile.Request by an
+// handler.TypedEventHandler.
+type TypedGenericEvent[object any] struct {
+ // Object is the object from the event
+ Object object
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/handler/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/handler/doc.go
new file mode 100644
index 00000000000..e5fd177aff8
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/handler/doc.go
@@ -0,0 +1,38 @@
+/*
+Copyright 2018 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 handler defines EventHandlers that enqueue reconcile.Requests in response to Create, Update, Deletion Events
+observed from Watching Kubernetes APIs. Users should provide a source.Source and handler.EventHandler to
+Controller.Watch in order to generate and enqueue reconcile.Request work items.
+
+Generally, following premade event handlers should be sufficient for most use cases:
+
+EventHandlers:
+
+EnqueueRequestForObject - Enqueues a reconcile.Request containing the Name and Namespace of the object in the Event. This will
+cause the object that was the source of the Event (e.g. the created / deleted / updated object) to be
+reconciled.
+
+EnqueueRequestForOwner - Enqueues a reconcile.Request containing the Name and Namespace of the Owner of the object in the Event.
+This will cause owner of the object that was the source of the Event (e.g. the owner object that created the object)
+to be reconciled.
+
+EnqueueRequestsFromMapFunc - Enqueues reconcile.Requests resulting from a user provided transformation function run against the
+object in the Event. This will cause an arbitrary collection of objects (defined from a transformation of the
+source object) to be reconciled.
+*/
+package handler
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/handler/enqueue.go b/vendor/sigs.k8s.io/controller-runtime/pkg/handler/enqueue.go
new file mode 100644
index 00000000000..64cbe8a4d13
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/handler/enqueue.go
@@ -0,0 +1,120 @@
+/*
+Copyright 2018 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 handler
+
+import (
+ "context"
+ "reflect"
+
+ "k8s.io/apimachinery/pkg/types"
+ "k8s.io/client-go/util/workqueue"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/event"
+ logf "sigs.k8s.io/controller-runtime/pkg/internal/log"
+ "sigs.k8s.io/controller-runtime/pkg/reconcile"
+)
+
+var enqueueLog = logf.RuntimeLog.WithName("eventhandler").WithName("EnqueueRequestForObject")
+
+type empty struct{}
+
+var _ EventHandler = &EnqueueRequestForObject{}
+
+// EnqueueRequestForObject enqueues a Request containing the Name and Namespace of the object that is the source of the Event.
+// (e.g. the created / deleted / updated objects Name and Namespace). handler.EnqueueRequestForObject is used by almost all
+// Controllers that have associated Resources (e.g. CRDs) to reconcile the associated Resource.
+type EnqueueRequestForObject = TypedEnqueueRequestForObject[client.Object]
+
+// TypedEnqueueRequestForObject enqueues a Request containing the Name and Namespace of the object that is the source of the Event.
+// (e.g. the created / deleted / updated objects Name and Namespace). handler.TypedEnqueueRequestForObject is used by almost all
+// Controllers that have associated Resources (e.g. CRDs) to reconcile the associated Resource.
+//
+// TypedEnqueueRequestForObject is experimental and subject to future change.
+type TypedEnqueueRequestForObject[object client.Object] struct{}
+
+// Create implements EventHandler.
+func (e *TypedEnqueueRequestForObject[T]) Create(ctx context.Context, evt event.TypedCreateEvent[T], q workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+ if isNil(evt.Object) {
+ enqueueLog.Error(nil, "CreateEvent received with no metadata", "event", evt)
+ return
+ }
+
+ item := reconcile.Request{NamespacedName: types.NamespacedName{
+ Name: evt.Object.GetName(),
+ Namespace: evt.Object.GetNamespace(),
+ }}
+
+ addToQueueCreate(q, evt, item)
+}
+
+// Update implements EventHandler.
+func (e *TypedEnqueueRequestForObject[T]) Update(ctx context.Context, evt event.TypedUpdateEvent[T], q workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+ switch {
+ case !isNil(evt.ObjectNew):
+ item := reconcile.Request{NamespacedName: types.NamespacedName{
+ Name: evt.ObjectNew.GetName(),
+ Namespace: evt.ObjectNew.GetNamespace(),
+ }}
+
+ addToQueueUpdate(q, evt, item)
+ case !isNil(evt.ObjectOld):
+ item := reconcile.Request{NamespacedName: types.NamespacedName{
+ Name: evt.ObjectOld.GetName(),
+ Namespace: evt.ObjectOld.GetNamespace(),
+ }}
+
+ addToQueueUpdate(q, evt, item)
+ default:
+ enqueueLog.Error(nil, "UpdateEvent received with no metadata", "event", evt)
+ }
+}
+
+// Delete implements EventHandler.
+func (e *TypedEnqueueRequestForObject[T]) Delete(ctx context.Context, evt event.TypedDeleteEvent[T], q workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+ if isNil(evt.Object) {
+ enqueueLog.Error(nil, "DeleteEvent received with no metadata", "event", evt)
+ return
+ }
+ q.Add(reconcile.Request{NamespacedName: types.NamespacedName{
+ Name: evt.Object.GetName(),
+ Namespace: evt.Object.GetNamespace(),
+ }})
+}
+
+// Generic implements EventHandler.
+func (e *TypedEnqueueRequestForObject[T]) Generic(ctx context.Context, evt event.TypedGenericEvent[T], q workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+ if isNil(evt.Object) {
+ enqueueLog.Error(nil, "GenericEvent received with no metadata", "event", evt)
+ return
+ }
+ q.Add(reconcile.Request{NamespacedName: types.NamespacedName{
+ Name: evt.Object.GetName(),
+ Namespace: evt.Object.GetNamespace(),
+ }})
+}
+
+func isNil(arg any) bool {
+ if v := reflect.ValueOf(arg); !v.IsValid() || ((v.Kind() == reflect.Ptr ||
+ v.Kind() == reflect.Interface ||
+ v.Kind() == reflect.Slice ||
+ v.Kind() == reflect.Map ||
+ v.Kind() == reflect.Chan ||
+ v.Kind() == reflect.Func) && v.IsNil()) {
+ return true
+ }
+ return false
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/handler/enqueue_mapped.go b/vendor/sigs.k8s.io/controller-runtime/pkg/handler/enqueue_mapped.go
new file mode 100644
index 00000000000..be97fa37815
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/handler/enqueue_mapped.go
@@ -0,0 +1,153 @@
+/*
+Copyright 2018 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 handler
+
+import (
+ "context"
+
+ "k8s.io/client-go/util/workqueue"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/controller/priorityqueue"
+ "sigs.k8s.io/controller-runtime/pkg/event"
+ "sigs.k8s.io/controller-runtime/pkg/reconcile"
+)
+
+// MapFunc is the signature required for enqueueing requests from a generic function.
+// This type is usually used with EnqueueRequestsFromMapFunc when registering an event handler.
+type MapFunc = TypedMapFunc[client.Object, reconcile.Request]
+
+// TypedMapFunc is the signature required for enqueueing requests from a generic function.
+// This type is usually used with EnqueueRequestsFromTypedMapFunc when registering an event handler.
+//
+// TypedMapFunc is experimental and subject to future change.
+type TypedMapFunc[object any, request comparable] func(context.Context, object) []request
+
+// EnqueueRequestsFromMapFunc enqueues Requests by running a transformation function that outputs a collection
+// of reconcile.Requests on each Event. The reconcile.Requests may be for an arbitrary set of objects
+// defined by some user specified transformation of the source Event. (e.g. trigger Reconciler for a set of objects
+// in response to a cluster resize event caused by adding or deleting a Node)
+//
+// EnqueueRequestsFromMapFunc is frequently used to fan-out updates from one object to one or more other
+// objects of a differing type.
+//
+// For UpdateEvents which contain both a new and old object, the transformation function is run on both
+// objects and both sets of Requests are enqueue.
+func EnqueueRequestsFromMapFunc(fn MapFunc) EventHandler {
+ return TypedEnqueueRequestsFromMapFunc(fn)
+}
+
+// TypedEnqueueRequestsFromMapFunc enqueues Requests by running a transformation function that outputs a collection
+// of reconcile.Requests on each Event. The reconcile.Requests may be for an arbitrary set of objects
+// defined by some user specified transformation of the source Event. (e.g. trigger Reconciler for a set of objects
+// in response to a cluster resize event caused by adding or deleting a Node)
+//
+// TypedEnqueueRequestsFromMapFunc is frequently used to fan-out updates from one object to one or more other
+// objects of a differing type.
+//
+// For TypedUpdateEvents which contain both a new and old object, the transformation function is run on both
+// objects and both sets of Requests are enqueue.
+//
+// TypedEnqueueRequestsFromMapFunc is experimental and subject to future change.
+func TypedEnqueueRequestsFromMapFunc[object any, request comparable](fn TypedMapFunc[object, request]) TypedEventHandler[object, request] {
+ return &enqueueRequestsFromMapFunc[object, request]{
+ toRequests: fn,
+ objectImplementsClientObject: implementsClientObject[object](),
+ }
+}
+
+var _ EventHandler = &enqueueRequestsFromMapFunc[client.Object, reconcile.Request]{}
+
+type enqueueRequestsFromMapFunc[object any, request comparable] struct {
+ // Mapper transforms the argument into a slice of keys to be reconciled
+ toRequests TypedMapFunc[object, request]
+ objectImplementsClientObject bool
+}
+
+// Create implements EventHandler.
+func (e *enqueueRequestsFromMapFunc[object, request]) Create(
+ ctx context.Context,
+ evt event.TypedCreateEvent[object],
+ q workqueue.TypedRateLimitingInterface[request],
+) {
+ reqs := map[request]empty{}
+
+ var lowPriority bool
+ if e.objectImplementsClientObject && isPriorityQueue(q) && !isNil(evt.Object) {
+ clientObjectEvent := event.CreateEvent{Object: any(evt.Object).(client.Object)}
+ if isObjectUnchanged(clientObjectEvent) {
+ lowPriority = true
+ }
+ }
+ e.mapAndEnqueue(ctx, q, evt.Object, reqs, lowPriority)
+}
+
+// Update implements EventHandler.
+func (e *enqueueRequestsFromMapFunc[object, request]) Update(
+ ctx context.Context,
+ evt event.TypedUpdateEvent[object],
+ q workqueue.TypedRateLimitingInterface[request],
+) {
+ var lowPriority bool
+ if e.objectImplementsClientObject && isPriorityQueue(q) && !isNil(evt.ObjectOld) && !isNil(evt.ObjectNew) {
+ lowPriority = any(evt.ObjectOld).(client.Object).GetResourceVersion() == any(evt.ObjectNew).(client.Object).GetResourceVersion()
+ }
+ reqs := map[request]empty{}
+ e.mapAndEnqueue(ctx, q, evt.ObjectOld, reqs, lowPriority)
+ e.mapAndEnqueue(ctx, q, evt.ObjectNew, reqs, lowPriority)
+}
+
+// Delete implements EventHandler.
+func (e *enqueueRequestsFromMapFunc[object, request]) Delete(
+ ctx context.Context,
+ evt event.TypedDeleteEvent[object],
+ q workqueue.TypedRateLimitingInterface[request],
+) {
+ reqs := map[request]empty{}
+ e.mapAndEnqueue(ctx, q, evt.Object, reqs, false)
+}
+
+// Generic implements EventHandler.
+func (e *enqueueRequestsFromMapFunc[object, request]) Generic(
+ ctx context.Context,
+ evt event.TypedGenericEvent[object],
+ q workqueue.TypedRateLimitingInterface[request],
+) {
+ reqs := map[request]empty{}
+ e.mapAndEnqueue(ctx, q, evt.Object, reqs, false)
+}
+
+func (e *enqueueRequestsFromMapFunc[object, request]) mapAndEnqueue(
+ ctx context.Context,
+ q workqueue.TypedRateLimitingInterface[request],
+ o object,
+ reqs map[request]empty,
+ lowPriority bool,
+) {
+ for _, req := range e.toRequests(ctx, o) {
+ _, ok := reqs[req]
+ if !ok {
+ if lowPriority {
+ q.(priorityqueue.PriorityQueue[request]).AddWithOpts(priorityqueue.AddOpts{
+ Priority: LowPriority,
+ }, req)
+ } else {
+ q.Add(req)
+ }
+ reqs[req] = empty{}
+ }
+ }
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/handler/enqueue_owner.go b/vendor/sigs.k8s.io/controller-runtime/pkg/handler/enqueue_owner.go
new file mode 100644
index 00000000000..e8fc8eb46e2
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/handler/enqueue_owner.go
@@ -0,0 +1,221 @@
+/*
+Copyright 2018 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 handler
+
+import (
+ "context"
+ "fmt"
+
+ "k8s.io/apimachinery/pkg/api/meta"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "k8s.io/apimachinery/pkg/types"
+ "k8s.io/client-go/util/workqueue"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/event"
+ logf "sigs.k8s.io/controller-runtime/pkg/internal/log"
+ "sigs.k8s.io/controller-runtime/pkg/reconcile"
+)
+
+var _ EventHandler = &enqueueRequestForOwner[client.Object]{}
+
+var log = logf.RuntimeLog.WithName("eventhandler").WithName("enqueueRequestForOwner")
+
+// OwnerOption modifies an EnqueueRequestForOwner EventHandler.
+type OwnerOption func(e enqueueRequestForOwnerInterface)
+
+// EnqueueRequestForOwner enqueues Requests for the Owners of an object. E.g. the object that created
+// the object that was the source of the Event.
+//
+// If a ReplicaSet creates Pods, users may reconcile the ReplicaSet in response to Pod Events using:
+//
+// - a source.Kind Source with Type of Pod.
+//
+// - a handler.enqueueRequestForOwner EventHandler with an OwnerType of ReplicaSet and OnlyControllerOwner set to true.
+func EnqueueRequestForOwner(scheme *runtime.Scheme, mapper meta.RESTMapper, ownerType client.Object, opts ...OwnerOption) EventHandler {
+ return TypedEnqueueRequestForOwner[client.Object](scheme, mapper, ownerType, opts...)
+}
+
+// TypedEnqueueRequestForOwner enqueues Requests for the Owners of an object. E.g. the object that created
+// the object that was the source of the Event.
+//
+// If a ReplicaSet creates Pods, users may reconcile the ReplicaSet in response to Pod Events using:
+//
+// - a source.Kind Source with Type of Pod.
+//
+// - a handler.typedEnqueueRequestForOwner EventHandler with an OwnerType of ReplicaSet and OnlyControllerOwner set to true.
+//
+// TypedEnqueueRequestForOwner is experimental and subject to future change.
+func TypedEnqueueRequestForOwner[object client.Object](scheme *runtime.Scheme, mapper meta.RESTMapper, ownerType client.Object, opts ...OwnerOption) TypedEventHandler[object, reconcile.Request] {
+ e := &enqueueRequestForOwner[object]{
+ ownerType: ownerType,
+ mapper: mapper,
+ }
+ if err := e.parseOwnerTypeGroupKind(scheme); err != nil {
+ panic(err)
+ }
+ for _, opt := range opts {
+ opt(e)
+ }
+ return WithLowPriorityWhenUnchanged(e)
+}
+
+// OnlyControllerOwner if provided will only look at the first OwnerReference with Controller: true.
+func OnlyControllerOwner() OwnerOption {
+ return func(e enqueueRequestForOwnerInterface) {
+ e.setIsController(true)
+ }
+}
+
+type enqueueRequestForOwnerInterface interface {
+ setIsController(bool)
+}
+
+type enqueueRequestForOwner[object client.Object] struct {
+ // ownerType is the type of the Owner object to look for in OwnerReferences. Only Group and Kind are compared.
+ ownerType runtime.Object
+
+ // isController if set will only look at the first OwnerReference with Controller: true.
+ isController bool
+
+ // groupKind is the cached Group and Kind from OwnerType
+ groupKind schema.GroupKind
+
+ // mapper maps GroupVersionKinds to Resources
+ mapper meta.RESTMapper
+}
+
+func (e *enqueueRequestForOwner[object]) setIsController(isController bool) {
+ e.isController = isController
+}
+
+// Create implements EventHandler.
+func (e *enqueueRequestForOwner[object]) Create(ctx context.Context, evt event.TypedCreateEvent[object], q workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+ reqs := map[reconcile.Request]empty{}
+ e.getOwnerReconcileRequest(evt.Object, reqs)
+ for req := range reqs {
+ q.Add(req)
+ }
+}
+
+// Update implements EventHandler.
+func (e *enqueueRequestForOwner[object]) Update(ctx context.Context, evt event.TypedUpdateEvent[object], q workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+ reqs := map[reconcile.Request]empty{}
+ e.getOwnerReconcileRequest(evt.ObjectOld, reqs)
+ e.getOwnerReconcileRequest(evt.ObjectNew, reqs)
+ for req := range reqs {
+ q.Add(req)
+ }
+}
+
+// Delete implements EventHandler.
+func (e *enqueueRequestForOwner[object]) Delete(ctx context.Context, evt event.TypedDeleteEvent[object], q workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+ reqs := map[reconcile.Request]empty{}
+ e.getOwnerReconcileRequest(evt.Object, reqs)
+ for req := range reqs {
+ q.Add(req)
+ }
+}
+
+// Generic implements EventHandler.
+func (e *enqueueRequestForOwner[object]) Generic(ctx context.Context, evt event.TypedGenericEvent[object], q workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+ reqs := map[reconcile.Request]empty{}
+ e.getOwnerReconcileRequest(evt.Object, reqs)
+ for req := range reqs {
+ q.Add(req)
+ }
+}
+
+// parseOwnerTypeGroupKind parses the OwnerType into a Group and Kind and caches the result. Returns false
+// if the OwnerType could not be parsed using the scheme.
+func (e *enqueueRequestForOwner[object]) parseOwnerTypeGroupKind(scheme *runtime.Scheme) error {
+ // Get the kinds of the type
+ kinds, _, err := scheme.ObjectKinds(e.ownerType)
+ if err != nil {
+ log.Error(err, "Could not get ObjectKinds for OwnerType", "owner type", fmt.Sprintf("%T", e.ownerType))
+ return err
+ }
+ // Expect only 1 kind. If there is more than one kind this is probably an edge case such as ListOptions.
+ if len(kinds) != 1 {
+ err := fmt.Errorf("expected exactly 1 kind for OwnerType %T, but found %s kinds", e.ownerType, kinds)
+ log.Error(nil, "expected exactly 1 kind for OwnerType", "owner type", fmt.Sprintf("%T", e.ownerType), "kinds", kinds)
+ return err
+ }
+ // Cache the Group and Kind for the OwnerType
+ e.groupKind = schema.GroupKind{Group: kinds[0].Group, Kind: kinds[0].Kind}
+ return nil
+}
+
+// getOwnerReconcileRequest looks at object and builds a map of reconcile.Request to reconcile
+// owners of object that match e.OwnerType.
+func (e *enqueueRequestForOwner[object]) getOwnerReconcileRequest(obj metav1.Object, result map[reconcile.Request]empty) {
+ // Iterate through the OwnerReferences looking for a match on Group and Kind against what was requested
+ // by the user
+ for _, ref := range e.getOwnersReferences(obj) {
+ // Parse the Group out of the OwnerReference to compare it to what was parsed out of the requested OwnerType
+ refGV, err := schema.ParseGroupVersion(ref.APIVersion)
+ if err != nil {
+ log.Error(err, "Could not parse OwnerReference APIVersion",
+ "api version", ref.APIVersion)
+ return
+ }
+
+ // Compare the OwnerReference Group and Kind against the OwnerType Group and Kind specified by the user.
+ // If the two match, create a Request for the objected referred to by
+ // the OwnerReference. Use the Name from the OwnerReference and the Namespace from the
+ // object in the event.
+ if ref.Kind == e.groupKind.Kind && refGV.Group == e.groupKind.Group {
+ // Match found - add a Request for the object referred to in the OwnerReference
+ request := reconcile.Request{NamespacedName: types.NamespacedName{
+ Name: ref.Name,
+ }}
+
+ // if owner is not namespaced then we should not set the namespace
+ mapping, err := e.mapper.RESTMapping(e.groupKind, refGV.Version)
+ if err != nil {
+ log.Error(err, "Could not retrieve rest mapping", "kind", e.groupKind)
+ return
+ }
+ if mapping.Scope.Name() != meta.RESTScopeNameRoot {
+ request.Namespace = obj.GetNamespace()
+ }
+
+ result[request] = empty{}
+ }
+ }
+}
+
+// getOwnersReferences returns the OwnerReferences for an object as specified by the enqueueRequestForOwner
+// - if IsController is true: only take the Controller OwnerReference (if found)
+// - if IsController is false: take all OwnerReferences.
+func (e *enqueueRequestForOwner[object]) getOwnersReferences(obj metav1.Object) []metav1.OwnerReference {
+ if obj == nil {
+ return nil
+ }
+
+ // If not filtered as Controller only, then use all the OwnerReferences
+ if !e.isController {
+ return obj.GetOwnerReferences()
+ }
+ // If filtered to a Controller, only take the Controller OwnerReference
+ if ownerRef := metav1.GetControllerOf(obj); ownerRef != nil {
+ return []metav1.OwnerReference{*ownerRef}
+ }
+ // No Controller OwnerReference found
+ return nil
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/handler/eventhandler.go b/vendor/sigs.k8s.io/controller-runtime/pkg/handler/eventhandler.go
new file mode 100644
index 00000000000..84a10ac077d
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/handler/eventhandler.go
@@ -0,0 +1,257 @@
+/*
+Copyright 2018 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 handler
+
+import (
+ "context"
+ "reflect"
+ "time"
+
+ "k8s.io/client-go/util/workqueue"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/controller/priorityqueue"
+ "sigs.k8s.io/controller-runtime/pkg/event"
+ "sigs.k8s.io/controller-runtime/pkg/reconcile"
+)
+
+// EventHandler enqueues reconcile.Requests in response to events (e.g. Pod Create). EventHandlers map an Event
+// for one object to trigger Reconciles for either the same object or different objects - e.g. if there is an
+// Event for object with type Foo (using source.Kind) then reconcile one or more object(s) with type Bar.
+//
+// Identical reconcile.Requests will be batched together through the queuing mechanism before reconcile is called.
+//
+// * Use EnqueueRequestForObject to reconcile the object the event is for
+// - do this for events for the type the Controller Reconciles. (e.g. Deployment for a Deployment Controller)
+//
+// * Use EnqueueRequestForOwner to reconcile the owner of the object the event is for
+// - do this for events for the types the Controller creates. (e.g. ReplicaSets created by a Deployment Controller)
+//
+// * Use EnqueueRequestsFromMapFunc to transform an event for an object to a reconcile of an object
+// of a different type - do this for events for types the Controller may be interested in, but doesn't create.
+// (e.g. If Foo responds to cluster size events, map Node events to Foo objects.)
+//
+// Unless you are implementing your own EventHandler, you can ignore the functions on the EventHandler interface.
+// Most users shouldn't need to implement their own EventHandler.
+type EventHandler = TypedEventHandler[client.Object, reconcile.Request]
+
+// TypedEventHandler enqueues reconcile.Requests in response to events (e.g. Pod Create). TypedEventHandlers map an Event
+// for one object to trigger Reconciles for either the same object or different objects - e.g. if there is an
+// Event for object with type Foo (using source.Kind) then reconcile one or more object(s) with type Bar.
+//
+// Identical reconcile.Requests will be batched together through the queuing mechanism before reconcile is called.
+//
+// * Use TypedEnqueueRequestForObject to reconcile the object the event is for
+// - do this for events for the type the Controller Reconciles. (e.g. Deployment for a Deployment Controller)
+//
+// * Use TypedEnqueueRequestForOwner to reconcile the owner of the object the event is for
+// - do this for events for the types the Controller creates. (e.g. ReplicaSets created by a Deployment Controller)
+//
+// * Use TypedEnqueueRequestsFromMapFunc to transform an event for an object to a reconcile of an object
+// of a different type - do this for events for types the Controller may be interested in, but doesn't create.
+// (e.g. If Foo responds to cluster size events, map Node events to Foo objects.)
+//
+// Unless you are implementing your own TypedEventHandler, you can ignore the functions on the TypedEventHandler interface.
+// Most users shouldn't need to implement their own TypedEventHandler.
+//
+// TypedEventHandler is experimental and subject to future change.
+type TypedEventHandler[object any, request comparable] interface {
+ // Create is called in response to a create event - e.g. Pod Creation.
+ Create(context.Context, event.TypedCreateEvent[object], workqueue.TypedRateLimitingInterface[request])
+
+ // Update is called in response to an update event - e.g. Pod Updated.
+ Update(context.Context, event.TypedUpdateEvent[object], workqueue.TypedRateLimitingInterface[request])
+
+ // Delete is called in response to a delete event - e.g. Pod Deleted.
+ Delete(context.Context, event.TypedDeleteEvent[object], workqueue.TypedRateLimitingInterface[request])
+
+ // Generic is called in response to an event of an unknown type or a synthetic event triggered as a cron or
+ // external trigger request - e.g. reconcile Autoscaling, or a Webhook.
+ Generic(context.Context, event.TypedGenericEvent[object], workqueue.TypedRateLimitingInterface[request])
+}
+
+var _ EventHandler = Funcs{}
+
+// Funcs implements eventhandler.
+type Funcs = TypedFuncs[client.Object, reconcile.Request]
+
+// TypedFuncs implements eventhandler.
+//
+// TypedFuncs is experimental and subject to future change.
+type TypedFuncs[object any, request comparable] struct {
+ // Create is called in response to an add event. Defaults to no-op.
+ // RateLimitingInterface is used to enqueue reconcile.Requests.
+ CreateFunc func(context.Context, event.TypedCreateEvent[object], workqueue.TypedRateLimitingInterface[request])
+
+ // Update is called in response to an update event. Defaults to no-op.
+ // RateLimitingInterface is used to enqueue reconcile.Requests.
+ UpdateFunc func(context.Context, event.TypedUpdateEvent[object], workqueue.TypedRateLimitingInterface[request])
+
+ // Delete is called in response to a delete event. Defaults to no-op.
+ // RateLimitingInterface is used to enqueue reconcile.Requests.
+ DeleteFunc func(context.Context, event.TypedDeleteEvent[object], workqueue.TypedRateLimitingInterface[request])
+
+ // GenericFunc is called in response to a generic event. Defaults to no-op.
+ // RateLimitingInterface is used to enqueue reconcile.Requests.
+ GenericFunc func(context.Context, event.TypedGenericEvent[object], workqueue.TypedRateLimitingInterface[request])
+}
+
+var typeForClientObject = reflect.TypeFor[client.Object]()
+
+func implementsClientObject[object any]() bool {
+ return reflect.TypeFor[object]().Implements(typeForClientObject)
+}
+
+func isPriorityQueue[request comparable](q workqueue.TypedRateLimitingInterface[request]) bool {
+ _, ok := q.(priorityqueue.PriorityQueue[request])
+ return ok
+}
+
+// Create implements EventHandler.
+func (h TypedFuncs[object, request]) Create(ctx context.Context, e event.TypedCreateEvent[object], q workqueue.TypedRateLimitingInterface[request]) {
+ if h.CreateFunc != nil {
+ if !implementsClientObject[object]() || !isPriorityQueue(q) || isNil(e.Object) {
+ h.CreateFunc(ctx, e, q)
+ return
+ }
+ wq := workqueueWithCustomAddFunc[request]{
+ TypedRateLimitingInterface: q,
+ // We already know that we have a priority queue, that event.Object implements
+ // client.Object and that its not nil
+ addFunc: func(item request, q workqueue.TypedRateLimitingInterface[request]) {
+ // We construct a new event typed to client.Object because isObjectUnchanged
+ // is a generic and hence has to know at compile time the type of the event
+ // it gets. We only figure that out at runtime though, but we know for sure
+ // that it implements client.Object at this point so we can hardcode the event
+ // type to that.
+ evt := event.CreateEvent{Object: any(e.Object).(client.Object)}
+ var priority int
+ if isObjectUnchanged(evt) {
+ priority = LowPriority
+ }
+ q.(priorityqueue.PriorityQueue[request]).AddWithOpts(
+ priorityqueue.AddOpts{Priority: priority},
+ item,
+ )
+ },
+ }
+ h.CreateFunc(ctx, e, wq)
+ }
+}
+
+// Delete implements EventHandler.
+func (h TypedFuncs[object, request]) Delete(ctx context.Context, e event.TypedDeleteEvent[object], q workqueue.TypedRateLimitingInterface[request]) {
+ if h.DeleteFunc != nil {
+ h.DeleteFunc(ctx, e, q)
+ }
+}
+
+// Update implements EventHandler.
+func (h TypedFuncs[object, request]) Update(ctx context.Context, e event.TypedUpdateEvent[object], q workqueue.TypedRateLimitingInterface[request]) {
+ if h.UpdateFunc != nil {
+ if !implementsClientObject[object]() || !isPriorityQueue(q) || isNil(e.ObjectOld) || isNil(e.ObjectNew) {
+ h.UpdateFunc(ctx, e, q)
+ return
+ }
+
+ wq := workqueueWithCustomAddFunc[request]{
+ TypedRateLimitingInterface: q,
+ // We already know that we have a priority queue, that event.ObjectOld and ObjectNew implement
+ // client.Object and that they are not nil
+ addFunc: func(item request, q workqueue.TypedRateLimitingInterface[request]) {
+ var priority int
+ if any(e.ObjectOld).(client.Object).GetResourceVersion() == any(e.ObjectNew).(client.Object).GetResourceVersion() {
+ priority = LowPriority
+ }
+ q.(priorityqueue.PriorityQueue[request]).AddWithOpts(
+ priorityqueue.AddOpts{Priority: priority},
+ item,
+ )
+ },
+ }
+ h.UpdateFunc(ctx, e, wq)
+ }
+}
+
+// Generic implements EventHandler.
+func (h TypedFuncs[object, request]) Generic(ctx context.Context, e event.TypedGenericEvent[object], q workqueue.TypedRateLimitingInterface[request]) {
+ if h.GenericFunc != nil {
+ h.GenericFunc(ctx, e, q)
+ }
+}
+
+// LowPriority is the priority set by WithLowPriorityWhenUnchanged
+const LowPriority = -100
+
+// WithLowPriorityWhenUnchanged reduces the priority of events stemming from the initial listwatch or from a resync if
+// and only if a priorityqueue.PriorityQueue is used. If not, it does nothing.
+func WithLowPriorityWhenUnchanged[object client.Object, request comparable](u TypedEventHandler[object, request]) TypedEventHandler[object, request] {
+ // TypedFuncs already implements this so just wrap
+ return TypedFuncs[object, request]{
+ CreateFunc: u.Create,
+ UpdateFunc: u.Update,
+ DeleteFunc: u.Delete,
+ GenericFunc: u.Generic,
+ }
+}
+
+type workqueueWithCustomAddFunc[request comparable] struct {
+ workqueue.TypedRateLimitingInterface[request]
+ addFunc func(item request, q workqueue.TypedRateLimitingInterface[request])
+}
+
+func (w workqueueWithCustomAddFunc[request]) Add(item request) {
+ w.addFunc(item, w.TypedRateLimitingInterface)
+}
+
+// isObjectUnchanged checks if the object in a create event is unchanged, for example because
+// we got it in our initial listwatch. The heuristic it uses is to check if the object is older
+// than one minute.
+func isObjectUnchanged[object client.Object](e event.TypedCreateEvent[object]) bool {
+ return e.Object.GetCreationTimestamp().Time.Before(time.Now().Add(-time.Minute))
+}
+
+// addToQueueCreate adds the reconcile.Request to the priorityqueue in the handler
+// for Create requests if and only if the workqueue being used is of type priorityqueue.PriorityQueue[reconcile.Request]
+func addToQueueCreate[T client.Object, request comparable](q workqueue.TypedRateLimitingInterface[request], evt event.TypedCreateEvent[T], item request) {
+ priorityQueue, isPriorityQueue := q.(priorityqueue.PriorityQueue[request])
+ if !isPriorityQueue {
+ q.Add(item)
+ return
+ }
+
+ var priority int
+ if isObjectUnchanged(evt) {
+ priority = LowPriority
+ }
+ priorityQueue.AddWithOpts(priorityqueue.AddOpts{Priority: priority}, item)
+}
+
+// addToQueueUpdate adds the reconcile.Request to the priorityqueue in the handler
+// for Update requests if and only if the workqueue being used is of type priorityqueue.PriorityQueue[reconcile.Request]
+func addToQueueUpdate[T client.Object, request comparable](q workqueue.TypedRateLimitingInterface[request], evt event.TypedUpdateEvent[T], item request) {
+ priorityQueue, isPriorityQueue := q.(priorityqueue.PriorityQueue[request])
+ if !isPriorityQueue {
+ q.Add(item)
+ return
+ }
+
+ var priority int
+ if evt.ObjectOld.GetResourceVersion() == evt.ObjectNew.GetResourceVersion() {
+ priority = LowPriority
+ }
+ priorityQueue.AddWithOpts(priorityqueue.AddOpts{Priority: priority}, item)
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/healthz/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/healthz/doc.go
new file mode 100644
index 00000000000..9827eeafed3
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/healthz/doc.go
@@ -0,0 +1,32 @@
+/*
+Copyright 2014 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 healthz contains helpers from supporting liveness and readiness endpoints.
+// (often referred to as healthz and readyz, respectively).
+//
+// This package draws heavily from the apiserver's healthz package
+// ( https://github.com/kubernetes/apiserver/tree/master/pkg/server/healthz )
+// but has some changes to bring it in line with controller-runtime's style.
+//
+// The main entrypoint is the Handler -- this serves both aggregated health status
+// and individual health check endpoints.
+package healthz
+
+import (
+ logf "sigs.k8s.io/controller-runtime/pkg/internal/log"
+)
+
+var log = logf.RuntimeLog.WithName("healthz")
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/healthz/healthz.go b/vendor/sigs.k8s.io/controller-runtime/pkg/healthz/healthz.go
new file mode 100644
index 00000000000..cfb5dc8d02b
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/healthz/healthz.go
@@ -0,0 +1,206 @@
+/*
+Copyright 2014 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 healthz
+
+import (
+ "fmt"
+ "net/http"
+ "path"
+ "sort"
+ "strings"
+
+ "k8s.io/apimachinery/pkg/util/sets"
+)
+
+// Handler is an http.Handler that aggregates the results of the given
+// checkers to the root path, and supports calling individual checkers on
+// subpaths of the name of the checker.
+//
+// Adding checks on the fly is *not* threadsafe -- use a wrapper.
+type Handler struct {
+ Checks map[string]Checker
+}
+
+// checkStatus holds the output of a particular check.
+type checkStatus struct {
+ name string
+ healthy bool
+ excluded bool
+}
+
+func (h *Handler) serveAggregated(resp http.ResponseWriter, req *http.Request) {
+ failed := false
+ excluded := getExcludedChecks(req)
+
+ parts := make([]checkStatus, 0, len(h.Checks))
+
+ // calculate the results...
+ for checkName, check := range h.Checks {
+ // no-op the check if we've specified we want to exclude the check
+ if excluded.Has(checkName) {
+ excluded.Delete(checkName)
+ parts = append(parts, checkStatus{name: checkName, healthy: true, excluded: true})
+ continue
+ }
+ if err := check(req); err != nil {
+ log.V(1).Info("healthz check failed", "checker", checkName, "error", err)
+ parts = append(parts, checkStatus{name: checkName, healthy: false})
+ failed = true
+ } else {
+ parts = append(parts, checkStatus{name: checkName, healthy: true})
+ }
+ }
+
+ // ...default a check if none is present...
+ if len(h.Checks) == 0 {
+ parts = append(parts, checkStatus{name: "ping", healthy: true})
+ }
+
+ for _, c := range excluded.UnsortedList() {
+ log.V(1).Info("cannot exclude health check, no matches for it", "checker", c)
+ }
+
+ // ...sort to be consistent...
+ sort.Slice(parts, func(i, j int) bool { return parts[i].name < parts[j].name })
+
+ // ...and write out the result
+ // TODO(directxman12): this should also accept a request for JSON content (via a accept header)
+ _, forceVerbose := req.URL.Query()["verbose"]
+ writeStatusesAsText(resp, parts, excluded, failed, forceVerbose)
+}
+
+// writeStatusAsText writes out the given check statuses in some semi-arbitrary
+// bespoke text format that we copied from Kubernetes. unknownExcludes lists
+// any checks that the user requested to have excluded, but weren't actually
+// known checks. writeStatusAsText is always verbose on failure, and can be
+// forced to be verbose on success using the given argument.
+func writeStatusesAsText(resp http.ResponseWriter, parts []checkStatus, unknownExcludes sets.Set[string], failed, forceVerbose bool) {
+ resp.Header().Set("Content-Type", "text/plain; charset=utf-8")
+ resp.Header().Set("X-Content-Type-Options", "nosniff")
+
+ // always write status code first
+ if failed {
+ resp.WriteHeader(http.StatusInternalServerError)
+ } else {
+ resp.WriteHeader(http.StatusOK)
+ }
+
+ // shortcut for easy non-verbose success
+ if !failed && !forceVerbose {
+ fmt.Fprint(resp, "ok")
+ return
+ }
+
+ // we're always verbose on failure, so from this point on we're guaranteed to be verbose
+
+ for _, checkOut := range parts {
+ switch {
+ case checkOut.excluded:
+ fmt.Fprintf(resp, "[+]%s excluded: ok\n", checkOut.name)
+ case checkOut.healthy:
+ fmt.Fprintf(resp, "[+]%s ok\n", checkOut.name)
+ default:
+ // don't include the error since this endpoint is public. If someone wants more detail
+ // they should have explicit permission to the detailed checks.
+ fmt.Fprintf(resp, "[-]%s failed: reason withheld\n", checkOut.name)
+ }
+ }
+
+ if unknownExcludes.Len() > 0 {
+ fmt.Fprintf(resp, "warn: some health checks cannot be excluded: no matches for %s\n", formatQuoted(unknownExcludes.UnsortedList()...))
+ }
+
+ if failed {
+ log.Info("healthz check failed", "statuses", parts)
+ fmt.Fprintf(resp, "healthz check failed\n")
+ } else {
+ fmt.Fprint(resp, "healthz check passed\n")
+ }
+}
+
+func (h *Handler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
+ // clean up the request (duplicating the internal logic of http.ServeMux a bit)
+ // clean up the path a bit
+ reqPath := req.URL.Path
+ if reqPath == "" || reqPath[0] != '/' {
+ reqPath = "/" + reqPath
+ }
+ // path.Clean removes the trailing slash except for root for us
+ // (which is fine, since we're only serving one layer of sub-paths)
+ reqPath = path.Clean(reqPath)
+
+ // either serve the root endpoint...
+ if reqPath == "/" {
+ h.serveAggregated(resp, req)
+ return
+ }
+
+ // ...the default check (if nothing else is present)...
+ if len(h.Checks) == 0 && reqPath[1:] == "ping" {
+ CheckHandler{Checker: Ping}.ServeHTTP(resp, req)
+ return
+ }
+
+ // ...or an individual checker
+ checkName := reqPath[1:] // ignore the leading slash
+ checker, known := h.Checks[checkName]
+ if !known {
+ http.NotFoundHandler().ServeHTTP(resp, req)
+ return
+ }
+
+ CheckHandler{Checker: checker}.ServeHTTP(resp, req)
+}
+
+// CheckHandler is an http.Handler that serves a health check endpoint at the root path,
+// based on its checker.
+type CheckHandler struct {
+ Checker
+}
+
+func (h CheckHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
+ if err := h.Checker(req); err != nil {
+ http.Error(resp, fmt.Sprintf("internal server error: %v", err), http.StatusInternalServerError)
+ } else {
+ fmt.Fprint(resp, "ok")
+ }
+}
+
+// Checker knows how to perform a health check.
+type Checker func(req *http.Request) error
+
+// Ping returns true automatically when checked.
+var Ping Checker = func(_ *http.Request) error { return nil }
+
+// getExcludedChecks extracts the health check names to be excluded from the query param.
+func getExcludedChecks(r *http.Request) sets.Set[string] {
+ checks, found := r.URL.Query()["exclude"]
+ if found {
+ return sets.New[string](checks...)
+ }
+ return sets.New[string]()
+}
+
+// formatQuoted returns a formatted string of the health check names,
+// preserving the order passed in.
+func formatQuoted(names ...string) string {
+ quoted := make([]string, 0, len(names))
+ for _, name := range names {
+ quoted = append(quoted, fmt.Sprintf("%q", name))
+ }
+ return strings.Join(quoted, ",")
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go
new file mode 100644
index 00000000000..3f8cfdaa092
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go
@@ -0,0 +1,418 @@
+/*
+Copyright 2018 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 controller
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "sync"
+ "sync/atomic"
+ "time"
+
+ "github.com/go-logr/logr"
+ "golang.org/x/sync/errgroup"
+ "k8s.io/apimachinery/pkg/types"
+ utilruntime "k8s.io/apimachinery/pkg/util/runtime"
+ "k8s.io/apimachinery/pkg/util/uuid"
+ "k8s.io/client-go/util/workqueue"
+
+ "sigs.k8s.io/controller-runtime/pkg/controller/priorityqueue"
+ ctrlmetrics "sigs.k8s.io/controller-runtime/pkg/internal/controller/metrics"
+ logf "sigs.k8s.io/controller-runtime/pkg/log"
+ "sigs.k8s.io/controller-runtime/pkg/reconcile"
+ "sigs.k8s.io/controller-runtime/pkg/source"
+)
+
+// Controller implements controller.Controller.
+type Controller[request comparable] struct {
+ // Name is used to uniquely identify a Controller in tracing, logging and monitoring. Name is required.
+ Name string
+
+ // MaxConcurrentReconciles is the maximum number of concurrent Reconciles which can be run. Defaults to 1.
+ MaxConcurrentReconciles int
+
+ // Reconciler is a function that can be called at any time with the Name / Namespace of an object and
+ // ensures that the state of the system matches the state specified in the object.
+ // Defaults to the DefaultReconcileFunc.
+ Do reconcile.TypedReconciler[request]
+
+ // RateLimiter is used to limit how frequently requests may be queued into the work queue.
+ RateLimiter workqueue.TypedRateLimiter[request]
+
+ // NewQueue constructs the queue for this controller once the controller is ready to start.
+ // This is a func because the standard Kubernetes work queues start themselves immediately, which
+ // leads to goroutine leaks if something calls controller.New repeatedly.
+ NewQueue func(controllerName string, rateLimiter workqueue.TypedRateLimiter[request]) workqueue.TypedRateLimitingInterface[request]
+
+ // Queue is an listeningQueue that listens for events from Informers and adds object keys to
+ // the Queue for processing
+ Queue priorityqueue.PriorityQueue[request]
+
+ // mu is used to synchronize Controller setup
+ mu sync.Mutex
+
+ // Started is true if the Controller has been Started
+ Started bool
+
+ // ctx is the context that was passed to Start() and used when starting watches.
+ //
+ // According to the docs, contexts should not be stored in a struct: https://golang.org/pkg/context,
+ // while we usually always strive to follow best practices, we consider this a legacy case and it should
+ // undergo a major refactoring and redesign to allow for context to not be stored in a struct.
+ ctx context.Context
+
+ // CacheSyncTimeout refers to the time limit set on waiting for cache to sync
+ // Defaults to 2 minutes if not set.
+ CacheSyncTimeout time.Duration
+
+ // startWatches maintains a list of sources, handlers, and predicates to start when the controller is started.
+ startWatches []source.TypedSource[request]
+
+ // LogConstructor is used to construct a logger to then log messages to users during reconciliation,
+ // or for example when a watch is started.
+ // Note: LogConstructor has to be able to handle nil requests as we are also using it
+ // outside the context of a reconciliation.
+ LogConstructor func(request *request) logr.Logger
+
+ // RecoverPanic indicates whether the panic caused by reconcile should be recovered.
+ // Defaults to true.
+ RecoverPanic *bool
+
+ // LeaderElected indicates whether the controller is leader elected or always running.
+ LeaderElected *bool
+}
+
+// Reconcile implements reconcile.Reconciler.
+func (c *Controller[request]) Reconcile(ctx context.Context, req request) (_ reconcile.Result, err error) {
+ defer func() {
+ if r := recover(); r != nil {
+ ctrlmetrics.ReconcilePanics.WithLabelValues(c.Name).Inc()
+
+ if c.RecoverPanic == nil || *c.RecoverPanic {
+ for _, fn := range utilruntime.PanicHandlers {
+ fn(ctx, r)
+ }
+ err = fmt.Errorf("panic: %v [recovered]", r)
+ return
+ }
+
+ log := logf.FromContext(ctx)
+ log.Info(fmt.Sprintf("Observed a panic in reconciler: %v", r))
+ panic(r)
+ }
+ }()
+ return c.Do.Reconcile(ctx, req)
+}
+
+// Watch implements controller.Controller.
+func (c *Controller[request]) Watch(src source.TypedSource[request]) error {
+ c.mu.Lock()
+ defer c.mu.Unlock()
+
+ // Controller hasn't started yet, store the watches locally and return.
+ //
+ // These watches are going to be held on the controller struct until the manager or user calls Start(...).
+ if !c.Started {
+ c.startWatches = append(c.startWatches, src)
+ return nil
+ }
+
+ c.LogConstructor(nil).Info("Starting EventSource", "source", src)
+ return src.Start(c.ctx, c.Queue)
+}
+
+// NeedLeaderElection implements the manager.LeaderElectionRunnable interface.
+func (c *Controller[request]) NeedLeaderElection() bool {
+ if c.LeaderElected == nil {
+ return true
+ }
+ return *c.LeaderElected
+}
+
+// Start implements controller.Controller.
+func (c *Controller[request]) Start(ctx context.Context) error {
+ // use an IIFE to get proper lock handling
+ // but lock outside to get proper handling of the queue shutdown
+ c.mu.Lock()
+ if c.Started {
+ return errors.New("controller was started more than once. This is likely to be caused by being added to a manager multiple times")
+ }
+
+ c.initMetrics()
+
+ // Set the internal context.
+ c.ctx = ctx
+
+ queue := c.NewQueue(c.Name, c.RateLimiter)
+ if priorityQueue, isPriorityQueue := queue.(priorityqueue.PriorityQueue[request]); isPriorityQueue {
+ c.Queue = priorityQueue
+ } else {
+ c.Queue = &priorityQueueWrapper[request]{TypedRateLimitingInterface: queue}
+ }
+ go func() {
+ <-ctx.Done()
+ c.Queue.ShutDown()
+ }()
+
+ wg := &sync.WaitGroup{}
+ err := func() error {
+ defer c.mu.Unlock()
+
+ // TODO(pwittrock): Reconsider HandleCrash
+ defer utilruntime.HandleCrash()
+
+ // NB(directxman12): launch the sources *before* trying to wait for the
+ // caches to sync so that they have a chance to register their intended
+ // caches.
+ errGroup := &errgroup.Group{}
+ for _, watch := range c.startWatches {
+ log := c.LogConstructor(nil)
+ _, ok := watch.(interface {
+ String() string
+ })
+
+ if !ok {
+ log = log.WithValues("source", fmt.Sprintf("%T", watch))
+ } else {
+ log = log.WithValues("source", fmt.Sprintf("%s", watch))
+ }
+ didStartSyncingSource := &atomic.Bool{}
+ errGroup.Go(func() error {
+ // Use a timeout for starting and syncing the source to avoid silently
+ // blocking startup indefinitely if it doesn't come up.
+ sourceStartCtx, cancel := context.WithTimeout(ctx, c.CacheSyncTimeout)
+ defer cancel()
+
+ sourceStartErrChan := make(chan error, 1) // Buffer chan to not leak goroutine if we time out
+ go func() {
+ defer close(sourceStartErrChan)
+ log.Info("Starting EventSource")
+ if err := watch.Start(ctx, c.Queue); err != nil {
+ sourceStartErrChan <- err
+ return
+ }
+ syncingSource, ok := watch.(source.TypedSyncingSource[request])
+ if !ok {
+ return
+ }
+ didStartSyncingSource.Store(true)
+ if err := syncingSource.WaitForSync(sourceStartCtx); err != nil {
+ err := fmt.Errorf("failed to wait for %s caches to sync %v: %w", c.Name, syncingSource, err)
+ log.Error(err, "Could not wait for Cache to sync")
+ sourceStartErrChan <- err
+ }
+ }()
+
+ select {
+ case err := <-sourceStartErrChan:
+ return err
+ case <-sourceStartCtx.Done():
+ if didStartSyncingSource.Load() { // We are racing with WaitForSync, wait for it to let it tell us what happened
+ return <-sourceStartErrChan
+ }
+ if ctx.Err() != nil { // Don't return an error if the root context got cancelled
+ return nil
+ }
+ return fmt.Errorf("timed out waiting for source %s to Start. Please ensure that its Start() method is non-blocking", watch)
+ }
+ })
+ }
+ if err := errGroup.Wait(); err != nil {
+ return err
+ }
+
+ c.LogConstructor(nil).Info("Starting Controller")
+
+ // All the watches have been started, we can reset the local slice.
+ //
+ // We should never hold watches more than necessary, each watch source can hold a backing cache,
+ // which won't be garbage collected if we hold a reference to it.
+ c.startWatches = nil
+
+ // Launch workers to process resources
+ c.LogConstructor(nil).Info("Starting workers", "worker count", c.MaxConcurrentReconciles)
+ wg.Add(c.MaxConcurrentReconciles)
+ for i := 0; i < c.MaxConcurrentReconciles; i++ {
+ go func() {
+ defer wg.Done()
+ // Run a worker thread that just dequeues items, processes them, and marks them done.
+ // It enforces that the reconcileHandler is never invoked concurrently with the same object.
+ for c.processNextWorkItem(ctx) {
+ }
+ }()
+ }
+
+ c.Started = true
+ return nil
+ }()
+ if err != nil {
+ return err
+ }
+
+ <-ctx.Done()
+ c.LogConstructor(nil).Info("Shutdown signal received, waiting for all workers to finish")
+ wg.Wait()
+ c.LogConstructor(nil).Info("All workers finished")
+ return nil
+}
+
+// processNextWorkItem will read a single work item off the workqueue and
+// attempt to process it, by calling the reconcileHandler.
+func (c *Controller[request]) processNextWorkItem(ctx context.Context) bool {
+ obj, priority, shutdown := c.Queue.GetWithPriority()
+ if shutdown {
+ // Stop working
+ return false
+ }
+
+ // We call Done here so the workqueue knows we have finished
+ // processing this item. We also must remember to call Forget if we
+ // do not want this work item being re-queued. For example, we do
+ // not call Forget if a transient error occurs, instead the item is
+ // put back on the workqueue and attempted again after a back-off
+ // period.
+ defer c.Queue.Done(obj)
+
+ ctrlmetrics.ActiveWorkers.WithLabelValues(c.Name).Add(1)
+ defer ctrlmetrics.ActiveWorkers.WithLabelValues(c.Name).Add(-1)
+
+ c.reconcileHandler(ctx, obj, priority)
+ return true
+}
+
+const (
+ labelError = "error"
+ labelRequeueAfter = "requeue_after"
+ labelRequeue = "requeue"
+ labelSuccess = "success"
+)
+
+func (c *Controller[request]) initMetrics() {
+ ctrlmetrics.ReconcileTotal.WithLabelValues(c.Name, labelError).Add(0)
+ ctrlmetrics.ReconcileTotal.WithLabelValues(c.Name, labelRequeueAfter).Add(0)
+ ctrlmetrics.ReconcileTotal.WithLabelValues(c.Name, labelRequeue).Add(0)
+ ctrlmetrics.ReconcileTotal.WithLabelValues(c.Name, labelSuccess).Add(0)
+ ctrlmetrics.ReconcileErrors.WithLabelValues(c.Name).Add(0)
+ ctrlmetrics.TerminalReconcileErrors.WithLabelValues(c.Name).Add(0)
+ ctrlmetrics.ReconcilePanics.WithLabelValues(c.Name).Add(0)
+ ctrlmetrics.WorkerCount.WithLabelValues(c.Name).Set(float64(c.MaxConcurrentReconciles))
+ ctrlmetrics.ActiveWorkers.WithLabelValues(c.Name).Set(0)
+}
+
+func (c *Controller[request]) reconcileHandler(ctx context.Context, req request, priority int) {
+ // Update metrics after processing each item
+ reconcileStartTS := time.Now()
+ defer func() {
+ c.updateMetrics(time.Since(reconcileStartTS))
+ }()
+
+ log := c.LogConstructor(&req)
+ reconcileID := uuid.NewUUID()
+
+ log = log.WithValues("reconcileID", reconcileID)
+ ctx = logf.IntoContext(ctx, log)
+ ctx = addReconcileID(ctx, reconcileID)
+
+ // RunInformersAndControllers the syncHandler, passing it the Namespace/Name string of the
+ // resource to be synced.
+ log.V(5).Info("Reconciling")
+ result, err := c.Reconcile(ctx, req)
+ switch {
+ case err != nil:
+ if errors.Is(err, reconcile.TerminalError(nil)) {
+ ctrlmetrics.TerminalReconcileErrors.WithLabelValues(c.Name).Inc()
+ } else {
+ c.Queue.AddWithOpts(priorityqueue.AddOpts{RateLimited: true, Priority: priority}, req)
+ }
+ ctrlmetrics.ReconcileErrors.WithLabelValues(c.Name).Inc()
+ ctrlmetrics.ReconcileTotal.WithLabelValues(c.Name, labelError).Inc()
+ if !result.IsZero() {
+ log.Info("Warning: Reconciler returned both a non-zero result and a non-nil error. The result will always be ignored if the error is non-nil and the non-nil error causes requeuing with exponential backoff. For more details, see: https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/reconcile#Reconciler")
+ }
+ log.Error(err, "Reconciler error")
+ case result.RequeueAfter > 0:
+ log.V(5).Info(fmt.Sprintf("Reconcile done, requeueing after %s", result.RequeueAfter))
+ // The result.RequeueAfter request will be lost, if it is returned
+ // along with a non-nil error. But this is intended as
+ // We need to drive to stable reconcile loops before queuing due
+ // to result.RequestAfter
+ c.Queue.Forget(req)
+ c.Queue.AddWithOpts(priorityqueue.AddOpts{After: result.RequeueAfter, Priority: priority}, req)
+ ctrlmetrics.ReconcileTotal.WithLabelValues(c.Name, labelRequeueAfter).Inc()
+ case result.Requeue:
+ log.V(5).Info("Reconcile done, requeueing")
+ c.Queue.AddWithOpts(priorityqueue.AddOpts{RateLimited: true, Priority: priority}, req)
+ ctrlmetrics.ReconcileTotal.WithLabelValues(c.Name, labelRequeue).Inc()
+ default:
+ log.V(5).Info("Reconcile successful")
+ // Finally, if no error occurs we Forget this item so it does not
+ // get queued again until another change happens.
+ c.Queue.Forget(req)
+ ctrlmetrics.ReconcileTotal.WithLabelValues(c.Name, labelSuccess).Inc()
+ }
+}
+
+// GetLogger returns this controller's logger.
+func (c *Controller[request]) GetLogger() logr.Logger {
+ return c.LogConstructor(nil)
+}
+
+// updateMetrics updates prometheus metrics within the controller.
+func (c *Controller[request]) updateMetrics(reconcileTime time.Duration) {
+ ctrlmetrics.ReconcileTime.WithLabelValues(c.Name).Observe(reconcileTime.Seconds())
+}
+
+// ReconcileIDFromContext gets the reconcileID from the current context.
+func ReconcileIDFromContext(ctx context.Context) types.UID {
+ r, ok := ctx.Value(reconcileIDKey{}).(types.UID)
+ if !ok {
+ return ""
+ }
+
+ return r
+}
+
+// reconcileIDKey is a context.Context Value key. Its associated value should
+// be a types.UID.
+type reconcileIDKey struct{}
+
+func addReconcileID(ctx context.Context, reconcileID types.UID) context.Context {
+ return context.WithValue(ctx, reconcileIDKey{}, reconcileID)
+}
+
+type priorityQueueWrapper[request comparable] struct {
+ workqueue.TypedRateLimitingInterface[request]
+}
+
+func (p *priorityQueueWrapper[request]) AddWithOpts(opts priorityqueue.AddOpts, items ...request) {
+ for _, item := range items {
+ switch {
+ case opts.RateLimited:
+ p.TypedRateLimitingInterface.AddRateLimited(item)
+ case opts.After > 0:
+ p.TypedRateLimitingInterface.AddAfter(item, opts.After)
+ default:
+ p.TypedRateLimitingInterface.Add(item)
+ }
+ }
+}
+
+func (p *priorityQueueWrapper[request]) GetWithPriority() (request, int, bool) {
+ item, shutdown := p.TypedRateLimitingInterface.Get()
+ return item, 0, shutdown
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/metrics/metrics.go b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/metrics/metrics.go
new file mode 100644
index 00000000000..fbf15669d5d
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/metrics/metrics.go
@@ -0,0 +1,94 @@
+/*
+Copyright 2018 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 metrics
+
+import (
+ "github.com/prometheus/client_golang/prometheus"
+ "github.com/prometheus/client_golang/prometheus/collectors"
+ "sigs.k8s.io/controller-runtime/pkg/metrics"
+)
+
+var (
+ // ReconcileTotal is a prometheus counter metrics which holds the total
+ // number of reconciliations per controller. It has two labels. controller label refers
+ // to the controller name and result label refers to the reconcile result i.e
+ // success, error, requeue, requeue_after.
+ ReconcileTotal = prometheus.NewCounterVec(prometheus.CounterOpts{
+ Name: "controller_runtime_reconcile_total",
+ Help: "Total number of reconciliations per controller",
+ }, []string{"controller", "result"})
+
+ // ReconcileErrors is a prometheus counter metrics which holds the total
+ // number of errors from the Reconciler.
+ ReconcileErrors = prometheus.NewCounterVec(prometheus.CounterOpts{
+ Name: "controller_runtime_reconcile_errors_total",
+ Help: "Total number of reconciliation errors per controller",
+ }, []string{"controller"})
+
+ // TerminalReconcileErrors is a prometheus counter metrics which holds the total
+ // number of terminal errors from the Reconciler.
+ TerminalReconcileErrors = prometheus.NewCounterVec(prometheus.CounterOpts{
+ Name: "controller_runtime_terminal_reconcile_errors_total",
+ Help: "Total number of terminal reconciliation errors per controller",
+ }, []string{"controller"})
+
+ // ReconcilePanics is a prometheus counter metrics which holds the total
+ // number of panics from the Reconciler.
+ ReconcilePanics = prometheus.NewCounterVec(prometheus.CounterOpts{
+ Name: "controller_runtime_reconcile_panics_total",
+ Help: "Total number of reconciliation panics per controller",
+ }, []string{"controller"})
+
+ // ReconcileTime is a prometheus metric which keeps track of the duration
+ // of reconciliations.
+ ReconcileTime = prometheus.NewHistogramVec(prometheus.HistogramOpts{
+ Name: "controller_runtime_reconcile_time_seconds",
+ Help: "Length of time per reconciliation per controller",
+ Buckets: []float64{0.005, 0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0,
+ 1.25, 1.5, 1.75, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30, 40, 50, 60},
+ }, []string{"controller"})
+
+ // WorkerCount is a prometheus metric which holds the number of
+ // concurrent reconciles per controller.
+ WorkerCount = prometheus.NewGaugeVec(prometheus.GaugeOpts{
+ Name: "controller_runtime_max_concurrent_reconciles",
+ Help: "Maximum number of concurrent reconciles per controller",
+ }, []string{"controller"})
+
+ // ActiveWorkers is a prometheus metric which holds the number
+ // of active workers per controller.
+ ActiveWorkers = prometheus.NewGaugeVec(prometheus.GaugeOpts{
+ Name: "controller_runtime_active_workers",
+ Help: "Number of currently used workers per controller",
+ }, []string{"controller"})
+)
+
+func init() {
+ metrics.Registry.MustRegister(
+ ReconcileTotal,
+ ReconcileErrors,
+ TerminalReconcileErrors,
+ ReconcilePanics,
+ ReconcileTime,
+ WorkerCount,
+ ActiveWorkers,
+ // expose process metrics like CPU, Memory, file descriptor usage etc.
+ collectors.NewProcessCollector(collectors.ProcessCollectorOpts{}),
+ // expose Go runtime metrics like GC stats, memory stats etc.
+ collectors.NewGoCollector(),
+ )
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/internal/field/selector/utils.go b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/field/selector/utils.go
new file mode 100644
index 00000000000..8f6dc71ede5
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/field/selector/utils.go
@@ -0,0 +1,37 @@
+/*
+Copyright 2022 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 selector
+
+import (
+ "k8s.io/apimachinery/pkg/fields"
+ "k8s.io/apimachinery/pkg/selection"
+)
+
+// RequiresExactMatch checks if the given field selector is of the form `k=v` or `k==v`.
+func RequiresExactMatch(sel fields.Selector) bool {
+ reqs := sel.Requirements()
+ if len(reqs) == 0 {
+ return false
+ }
+
+ for _, req := range reqs {
+ if req.Operator != selection.Equals && req.Operator != selection.DoubleEquals {
+ return false
+ }
+ }
+ return true
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/internal/httpserver/server.go b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/httpserver/server.go
new file mode 100644
index 00000000000..b5f91f18e07
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/httpserver/server.go
@@ -0,0 +1,16 @@
+package httpserver
+
+import (
+ "net/http"
+ "time"
+)
+
+// New returns a new server with sane defaults.
+func New(handler http.Handler) *http.Server {
+ return &http.Server{
+ Handler: handler,
+ MaxHeaderBytes: 1 << 20,
+ IdleTimeout: 90 * time.Second, // matches http.DefaultTransport keep-alive timeout
+ ReadHeaderTimeout: 32 * time.Second,
+ }
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/internal/log/log.go b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/log/log.go
new file mode 100644
index 00000000000..d91a0ca50cf
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/log/log.go
@@ -0,0 +1,32 @@
+/*
+Copyright 2018 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 log
+
+import (
+ "github.com/go-logr/logr"
+
+ "sigs.k8s.io/controller-runtime/pkg/log"
+)
+
+var (
+ // RuntimeLog is a base parent logger for use inside controller-runtime.
+ RuntimeLog logr.Logger
+)
+
+func init() {
+ RuntimeLog = log.Log.WithName("controller-runtime")
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/internal/metrics/workqueue.go b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/metrics/workqueue.go
new file mode 100644
index 00000000000..86da340af8d
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/metrics/workqueue.go
@@ -0,0 +1,131 @@
+/*
+Copyright 2018 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 metrics
+
+import (
+ "github.com/prometheus/client_golang/prometheus"
+ "k8s.io/client-go/util/workqueue"
+ "sigs.k8s.io/controller-runtime/pkg/metrics"
+)
+
+// This file is copied and adapted from k8s.io/component-base/metrics/prometheus/workqueue
+// which registers metrics to the k8s legacy Registry. We require very
+// similar functionality, but must register metrics to a different Registry.
+
+// Metrics subsystem and all keys used by the workqueue.
+const (
+ WorkQueueSubsystem = metrics.WorkQueueSubsystem
+ DepthKey = metrics.DepthKey
+ AddsKey = metrics.AddsKey
+ QueueLatencyKey = metrics.QueueLatencyKey
+ WorkDurationKey = metrics.WorkDurationKey
+ UnfinishedWorkKey = metrics.UnfinishedWorkKey
+ LongestRunningProcessorKey = metrics.LongestRunningProcessorKey
+ RetriesKey = metrics.RetriesKey
+)
+
+var (
+ depth = prometheus.NewGaugeVec(prometheus.GaugeOpts{
+ Subsystem: WorkQueueSubsystem,
+ Name: DepthKey,
+ Help: "Current depth of workqueue",
+ }, []string{"name", "controller"})
+
+ adds = prometheus.NewCounterVec(prometheus.CounterOpts{
+ Subsystem: WorkQueueSubsystem,
+ Name: AddsKey,
+ Help: "Total number of adds handled by workqueue",
+ }, []string{"name", "controller"})
+
+ latency = prometheus.NewHistogramVec(prometheus.HistogramOpts{
+ Subsystem: WorkQueueSubsystem,
+ Name: QueueLatencyKey,
+ Help: "How long in seconds an item stays in workqueue before being requested",
+ Buckets: prometheus.ExponentialBuckets(10e-9, 10, 12),
+ }, []string{"name", "controller"})
+
+ workDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{
+ Subsystem: WorkQueueSubsystem,
+ Name: WorkDurationKey,
+ Help: "How long in seconds processing an item from workqueue takes.",
+ Buckets: prometheus.ExponentialBuckets(10e-9, 10, 12),
+ }, []string{"name", "controller"})
+
+ unfinished = prometheus.NewGaugeVec(prometheus.GaugeOpts{
+ Subsystem: WorkQueueSubsystem,
+ Name: UnfinishedWorkKey,
+ Help: "How many seconds of work has been done that " +
+ "is in progress and hasn't been observed by work_duration. Large " +
+ "values indicate stuck threads. One can deduce the number of stuck " +
+ "threads by observing the rate at which this increases.",
+ }, []string{"name", "controller"})
+
+ longestRunningProcessor = prometheus.NewGaugeVec(prometheus.GaugeOpts{
+ Subsystem: WorkQueueSubsystem,
+ Name: LongestRunningProcessorKey,
+ Help: "How many seconds has the longest running " +
+ "processor for workqueue been running.",
+ }, []string{"name", "controller"})
+
+ retries = prometheus.NewCounterVec(prometheus.CounterOpts{
+ Subsystem: WorkQueueSubsystem,
+ Name: RetriesKey,
+ Help: "Total number of retries handled by workqueue",
+ }, []string{"name", "controller"})
+)
+
+func init() {
+ metrics.Registry.MustRegister(depth)
+ metrics.Registry.MustRegister(adds)
+ metrics.Registry.MustRegister(latency)
+ metrics.Registry.MustRegister(workDuration)
+ metrics.Registry.MustRegister(unfinished)
+ metrics.Registry.MustRegister(longestRunningProcessor)
+ metrics.Registry.MustRegister(retries)
+
+ workqueue.SetProvider(WorkqueueMetricsProvider{})
+}
+
+type WorkqueueMetricsProvider struct{}
+
+func (WorkqueueMetricsProvider) NewDepthMetric(name string) workqueue.GaugeMetric {
+ return depth.WithLabelValues(name, name)
+}
+
+func (WorkqueueMetricsProvider) NewAddsMetric(name string) workqueue.CounterMetric {
+ return adds.WithLabelValues(name, name)
+}
+
+func (WorkqueueMetricsProvider) NewLatencyMetric(name string) workqueue.HistogramMetric {
+ return latency.WithLabelValues(name, name)
+}
+
+func (WorkqueueMetricsProvider) NewWorkDurationMetric(name string) workqueue.HistogramMetric {
+ return workDuration.WithLabelValues(name, name)
+}
+
+func (WorkqueueMetricsProvider) NewUnfinishedWorkSecondsMetric(name string) workqueue.SettableGaugeMetric {
+ return unfinished.WithLabelValues(name, name)
+}
+
+func (WorkqueueMetricsProvider) NewLongestRunningProcessorSecondsMetric(name string) workqueue.SettableGaugeMetric {
+ return longestRunningProcessor.WithLabelValues(name, name)
+}
+
+func (WorkqueueMetricsProvider) NewRetriesMetric(name string) workqueue.CounterMetric {
+ return retries.WithLabelValues(name, name)
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/internal/objectutil/objectutil.go b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/objectutil/objectutil.go
new file mode 100644
index 00000000000..0189c043233
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/objectutil/objectutil.go
@@ -0,0 +1,42 @@
+/*
+Copyright 2018 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 objectutil
+
+import (
+ apimeta "k8s.io/apimachinery/pkg/api/meta"
+ "k8s.io/apimachinery/pkg/labels"
+ "k8s.io/apimachinery/pkg/runtime"
+)
+
+// FilterWithLabels returns a copy of the items in objs matching labelSel.
+func FilterWithLabels(objs []runtime.Object, labelSel labels.Selector) ([]runtime.Object, error) {
+ outItems := make([]runtime.Object, 0, len(objs))
+ for _, obj := range objs {
+ meta, err := apimeta.Accessor(obj)
+ if err != nil {
+ return nil, err
+ }
+ if labelSel != nil {
+ lbls := labels.Set(meta.GetLabels())
+ if !labelSel.Matches(lbls) {
+ continue
+ }
+ }
+ outItems = append(outItems, obj.DeepCopyObject())
+ }
+ return outItems, nil
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/internal/recorder/recorder.go b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/recorder/recorder.go
new file mode 100644
index 00000000000..21f0146ba3b
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/recorder/recorder.go
@@ -0,0 +1,181 @@
+/*
+Copyright 2018 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 recorder
+
+import (
+ "context"
+ "fmt"
+ "net/http"
+ "sync"
+
+ "github.com/go-logr/logr"
+ corev1 "k8s.io/api/core/v1"
+ "k8s.io/apimachinery/pkg/runtime"
+ corev1client "k8s.io/client-go/kubernetes/typed/core/v1"
+ "k8s.io/client-go/rest"
+ "k8s.io/client-go/tools/record"
+)
+
+// EventBroadcasterProducer makes an event broadcaster, returning
+// whether or not the broadcaster should be stopped with the Provider,
+// or not (e.g. if it's shared, it shouldn't be stopped with the Provider).
+type EventBroadcasterProducer func() (caster record.EventBroadcaster, stopWithProvider bool)
+
+// Provider is a recorder.Provider that records events to the k8s API server
+// and to a logr Logger.
+type Provider struct {
+ lock sync.RWMutex
+ stopped bool
+
+ // scheme to specify when creating a recorder
+ scheme *runtime.Scheme
+ // logger is the logger to use when logging diagnostic event info
+ logger logr.Logger
+ evtClient corev1client.EventInterface
+ makeBroadcaster EventBroadcasterProducer
+
+ broadcasterOnce sync.Once
+ broadcaster record.EventBroadcaster
+ stopBroadcaster bool
+}
+
+// NB(directxman12): this manually implements Stop instead of Being a runnable because we need to
+// stop it *after* everything else shuts down, otherwise we'll cause panics as the leader election
+// code finishes up and tries to continue emitting events.
+
+// Stop attempts to stop this provider, stopping the underlying broadcaster
+// if the broadcaster asked to be stopped. It kinda tries to honor the given
+// context, but the underlying broadcaster has an indefinite wait that doesn't
+// return until all queued events are flushed, so this may end up just returning
+// before the underlying wait has finished instead of cancelling the wait.
+// This is Very Frustrating™.
+func (p *Provider) Stop(shutdownCtx context.Context) {
+ doneCh := make(chan struct{})
+
+ go func() {
+ // technically, this could start the broadcaster, but practically, it's
+ // almost certainly already been started (e.g. by leader election). We
+ // need to invoke this to ensure that we don't inadvertently race with
+ // an invocation of getBroadcaster.
+ broadcaster := p.getBroadcaster()
+ if p.stopBroadcaster {
+ p.lock.Lock()
+ broadcaster.Shutdown()
+ p.stopped = true
+ p.lock.Unlock()
+ }
+ close(doneCh)
+ }()
+
+ select {
+ case <-shutdownCtx.Done():
+ case <-doneCh:
+ }
+}
+
+// getBroadcaster ensures that a broadcaster is started for this
+// provider, and returns it. It's threadsafe.
+func (p *Provider) getBroadcaster() record.EventBroadcaster {
+ // NB(directxman12): this can technically still leak if something calls
+ // "getBroadcaster" (i.e. Emits an Event) but never calls Start, but if we
+ // create the broadcaster in start, we could race with other things that
+ // are started at the same time & want to emit events. The alternative is
+ // silently swallowing events and more locking, but that seems suboptimal.
+
+ p.broadcasterOnce.Do(func() {
+ broadcaster, stop := p.makeBroadcaster()
+ broadcaster.StartRecordingToSink(&corev1client.EventSinkImpl{Interface: p.evtClient})
+ broadcaster.StartEventWatcher(
+ func(e *corev1.Event) {
+ p.logger.V(1).Info(e.Message, "type", e.Type, "object", e.InvolvedObject, "reason", e.Reason)
+ })
+ p.broadcaster = broadcaster
+ p.stopBroadcaster = stop
+ })
+
+ return p.broadcaster
+}
+
+// NewProvider create a new Provider instance.
+func NewProvider(config *rest.Config, httpClient *http.Client, scheme *runtime.Scheme, logger logr.Logger, makeBroadcaster EventBroadcasterProducer) (*Provider, error) {
+ if httpClient == nil {
+ panic("httpClient must not be nil")
+ }
+
+ corev1Client, err := corev1client.NewForConfigAndClient(config, httpClient)
+ if err != nil {
+ return nil, fmt.Errorf("failed to init client: %w", err)
+ }
+
+ p := &Provider{scheme: scheme, logger: logger, makeBroadcaster: makeBroadcaster, evtClient: corev1Client.Events("")}
+ return p, nil
+}
+
+// GetEventRecorderFor returns an event recorder that broadcasts to this provider's
+// broadcaster. All events will be associated with a component of the given name.
+func (p *Provider) GetEventRecorderFor(name string) record.EventRecorder {
+ return &lazyRecorder{
+ prov: p,
+ name: name,
+ }
+}
+
+// lazyRecorder is a recorder that doesn't actually instantiate any underlying
+// recorder until the first event is emitted.
+type lazyRecorder struct {
+ prov *Provider
+ name string
+
+ recOnce sync.Once
+ rec record.EventRecorder
+}
+
+// ensureRecording ensures that a concrete recorder is populated for this recorder.
+func (l *lazyRecorder) ensureRecording() {
+ l.recOnce.Do(func() {
+ broadcaster := l.prov.getBroadcaster()
+ l.rec = broadcaster.NewRecorder(l.prov.scheme, corev1.EventSource{Component: l.name})
+ })
+}
+
+func (l *lazyRecorder) Event(object runtime.Object, eventtype, reason, message string) {
+ l.ensureRecording()
+
+ l.prov.lock.RLock()
+ if !l.prov.stopped {
+ l.rec.Event(object, eventtype, reason, message)
+ }
+ l.prov.lock.RUnlock()
+}
+func (l *lazyRecorder) Eventf(object runtime.Object, eventtype, reason, messageFmt string, args ...interface{}) {
+ l.ensureRecording()
+
+ l.prov.lock.RLock()
+ if !l.prov.stopped {
+ l.rec.Eventf(object, eventtype, reason, messageFmt, args...)
+ }
+ l.prov.lock.RUnlock()
+}
+func (l *lazyRecorder) AnnotatedEventf(object runtime.Object, annotations map[string]string, eventtype, reason, messageFmt string, args ...interface{}) {
+ l.ensureRecording()
+
+ l.prov.lock.RLock()
+ if !l.prov.stopped {
+ l.rec.AnnotatedEventf(object, annotations, eventtype, reason, messageFmt, args...)
+ }
+ l.prov.lock.RUnlock()
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/internal/source/event_handler.go b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/source/event_handler.go
new file mode 100644
index 00000000000..38432a1a79c
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/source/event_handler.go
@@ -0,0 +1,174 @@
+/*
+Copyright 2018 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 internal
+
+import (
+ "context"
+ "fmt"
+
+ "k8s.io/client-go/tools/cache"
+ "k8s.io/client-go/util/workqueue"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/event"
+ "sigs.k8s.io/controller-runtime/pkg/handler"
+ logf "sigs.k8s.io/controller-runtime/pkg/internal/log"
+
+ "sigs.k8s.io/controller-runtime/pkg/predicate"
+)
+
+var log = logf.RuntimeLog.WithName("source").WithName("EventHandler")
+
+// NewEventHandler creates a new EventHandler.
+func NewEventHandler[object client.Object, request comparable](
+ ctx context.Context,
+ queue workqueue.TypedRateLimitingInterface[request],
+ handler handler.TypedEventHandler[object, request],
+ predicates []predicate.TypedPredicate[object]) *EventHandler[object, request] {
+ return &EventHandler[object, request]{
+ ctx: ctx,
+ handler: handler,
+ queue: queue,
+ predicates: predicates,
+ }
+}
+
+// EventHandler adapts a handler.EventHandler interface to a cache.ResourceEventHandler interface.
+type EventHandler[object client.Object, request comparable] struct {
+ // ctx stores the context that created the event handler
+ // that is used to propagate cancellation signals to each handler function.
+ ctx context.Context
+
+ handler handler.TypedEventHandler[object, request]
+ queue workqueue.TypedRateLimitingInterface[request]
+ predicates []predicate.TypedPredicate[object]
+}
+
+// HandlerFuncs converts EventHandler to a ResourceEventHandlerFuncs
+// TODO: switch to ResourceEventHandlerDetailedFuncs with client-go 1.27
+func (e *EventHandler[object, request]) HandlerFuncs() cache.ResourceEventHandlerFuncs {
+ return cache.ResourceEventHandlerFuncs{
+ AddFunc: e.OnAdd,
+ UpdateFunc: e.OnUpdate,
+ DeleteFunc: e.OnDelete,
+ }
+}
+
+// OnAdd creates CreateEvent and calls Create on EventHandler.
+func (e *EventHandler[object, request]) OnAdd(obj interface{}) {
+ c := event.TypedCreateEvent[object]{}
+
+ // Pull Object out of the object
+ if o, ok := obj.(object); ok {
+ c.Object = o
+ } else {
+ log.Error(nil, "OnAdd missing Object",
+ "object", obj, "type", fmt.Sprintf("%T", obj))
+ return
+ }
+
+ for _, p := range e.predicates {
+ if !p.Create(c) {
+ return
+ }
+ }
+
+ // Invoke create handler
+ ctx, cancel := context.WithCancel(e.ctx)
+ defer cancel()
+ e.handler.Create(ctx, c, e.queue)
+}
+
+// OnUpdate creates UpdateEvent and calls Update on EventHandler.
+func (e *EventHandler[object, request]) OnUpdate(oldObj, newObj interface{}) {
+ u := event.TypedUpdateEvent[object]{}
+
+ if o, ok := oldObj.(object); ok {
+ u.ObjectOld = o
+ } else {
+ log.Error(nil, "OnUpdate missing ObjectOld",
+ "object", oldObj, "type", fmt.Sprintf("%T", oldObj))
+ return
+ }
+
+ // Pull Object out of the object
+ if o, ok := newObj.(object); ok {
+ u.ObjectNew = o
+ } else {
+ log.Error(nil, "OnUpdate missing ObjectNew",
+ "object", newObj, "type", fmt.Sprintf("%T", newObj))
+ return
+ }
+
+ for _, p := range e.predicates {
+ if !p.Update(u) {
+ return
+ }
+ }
+
+ // Invoke update handler
+ ctx, cancel := context.WithCancel(e.ctx)
+ defer cancel()
+ e.handler.Update(ctx, u, e.queue)
+}
+
+// OnDelete creates DeleteEvent and calls Delete on EventHandler.
+func (e *EventHandler[object, request]) OnDelete(obj interface{}) {
+ d := event.TypedDeleteEvent[object]{}
+
+ // Deal with tombstone events by pulling the object out. Tombstone events wrap the object in a
+ // DeleteFinalStateUnknown struct, so the object needs to be pulled out.
+ // Copied from sample-controller
+ // This should never happen if we aren't missing events, which we have concluded that we are not
+ // and made decisions off of this belief. Maybe this shouldn't be here?
+ var ok bool
+ if _, ok = obj.(client.Object); !ok {
+ // If the object doesn't have Metadata, assume it is a tombstone object of type DeletedFinalStateUnknown
+ tombstone, ok := obj.(cache.DeletedFinalStateUnknown)
+ if !ok {
+ log.Error(nil, "Error decoding objects. Expected cache.DeletedFinalStateUnknown",
+ "type", fmt.Sprintf("%T", obj),
+ "object", obj)
+ return
+ }
+
+ // Set DeleteStateUnknown to true
+ d.DeleteStateUnknown = true
+
+ // Set obj to the tombstone obj
+ obj = tombstone.Obj
+ }
+
+ // Pull Object out of the object
+ if o, ok := obj.(object); ok {
+ d.Object = o
+ } else {
+ log.Error(nil, "OnDelete missing Object",
+ "object", obj, "type", fmt.Sprintf("%T", obj))
+ return
+ }
+
+ for _, p := range e.predicates {
+ if !p.Delete(d) {
+ return
+ }
+ }
+
+ // Invoke delete handler
+ ctx, cancel := context.WithCancel(e.ctx)
+ defer cancel()
+ e.handler.Delete(ctx, d, e.queue)
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/internal/source/kind.go b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/source/kind.go
new file mode 100644
index 00000000000..2fdfbde8e33
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/source/kind.go
@@ -0,0 +1,137 @@
+package internal
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "reflect"
+ "time"
+
+ "k8s.io/apimachinery/pkg/api/meta"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/util/wait"
+ "k8s.io/client-go/util/workqueue"
+
+ "sigs.k8s.io/controller-runtime/pkg/cache"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/handler"
+ "sigs.k8s.io/controller-runtime/pkg/predicate"
+)
+
+// Kind is used to provide a source of events originating inside the cluster from Watches (e.g. Pod Create).
+type Kind[object client.Object, request comparable] struct {
+ // Type is the type of object to watch. e.g. &v1.Pod{}
+ Type object
+
+ // Cache used to watch APIs
+ Cache cache.Cache
+
+ Handler handler.TypedEventHandler[object, request]
+
+ Predicates []predicate.TypedPredicate[object]
+
+ // startedErr may contain an error if one was encountered during startup. If its closed and does not
+ // contain an error, startup and syncing finished.
+ startedErr chan error
+ startCancel func()
+}
+
+// Start is internal and should be called only by the Controller to register an EventHandler with the Informer
+// to enqueue reconcile.Requests.
+func (ks *Kind[object, request]) Start(ctx context.Context, queue workqueue.TypedRateLimitingInterface[request]) error {
+ if isNil(ks.Type) {
+ return fmt.Errorf("must create Kind with a non-nil object")
+ }
+ if isNil(ks.Cache) {
+ return fmt.Errorf("must create Kind with a non-nil cache")
+ }
+ if isNil(ks.Handler) {
+ return errors.New("must create Kind with non-nil handler")
+ }
+
+ // cache.GetInformer will block until its context is cancelled if the cache was already started and it can not
+ // sync that informer (most commonly due to RBAC issues).
+ ctx, ks.startCancel = context.WithCancel(ctx)
+ ks.startedErr = make(chan error, 1) // Buffer chan to not leak goroutines if WaitForSync isn't called
+ go func() {
+ var (
+ i cache.Informer
+ lastErr error
+ )
+
+ // Tries to get an informer until it returns true,
+ // an error or the specified context is cancelled or expired.
+ if err := wait.PollUntilContextCancel(ctx, 10*time.Second, true, func(ctx context.Context) (bool, error) {
+ // Lookup the Informer from the Cache and add an EventHandler which populates the Queue
+ i, lastErr = ks.Cache.GetInformer(ctx, ks.Type)
+ if lastErr != nil {
+ kindMatchErr := &meta.NoKindMatchError{}
+ switch {
+ case errors.As(lastErr, &kindMatchErr):
+ log.Error(lastErr, "if kind is a CRD, it should be installed before calling Start",
+ "kind", kindMatchErr.GroupKind)
+ case runtime.IsNotRegisteredError(lastErr):
+ log.Error(lastErr, "kind must be registered to the Scheme")
+ default:
+ log.Error(lastErr, "failed to get informer from cache")
+ }
+ return false, nil // Retry.
+ }
+ return true, nil
+ }); err != nil {
+ if lastErr != nil {
+ ks.startedErr <- fmt.Errorf("failed to get informer from cache: %w", lastErr)
+ return
+ }
+ ks.startedErr <- err
+ return
+ }
+
+ _, err := i.AddEventHandler(NewEventHandler(ctx, queue, ks.Handler, ks.Predicates).HandlerFuncs())
+ if err != nil {
+ ks.startedErr <- err
+ return
+ }
+ if !ks.Cache.WaitForCacheSync(ctx) {
+ // Would be great to return something more informative here
+ ks.startedErr <- errors.New("cache did not sync")
+ }
+ close(ks.startedErr)
+ }()
+
+ return nil
+}
+
+func (ks *Kind[object, request]) String() string {
+ if !isNil(ks.Type) {
+ return fmt.Sprintf("kind source: %T", ks.Type)
+ }
+ return "kind source: unknown type"
+}
+
+// WaitForSync implements SyncingSource to allow controllers to wait with starting
+// workers until the cache is synced.
+func (ks *Kind[object, request]) WaitForSync(ctx context.Context) error {
+ select {
+ case err := <-ks.startedErr:
+ return err
+ case <-ctx.Done():
+ ks.startCancel()
+ if errors.Is(ctx.Err(), context.Canceled) {
+ return nil
+ }
+ return fmt.Errorf("timed out waiting for cache to be synced for Kind %T", ks.Type)
+ }
+}
+
+func isNil(arg any) bool {
+ if v := reflect.ValueOf(arg); !v.IsValid() || ((v.Kind() == reflect.Ptr ||
+ v.Kind() == reflect.Interface ||
+ v.Kind() == reflect.Slice ||
+ v.Kind() == reflect.Map ||
+ v.Kind() == reflect.Chan ||
+ v.Kind() == reflect.Func) && v.IsNil()) {
+ return true
+ }
+ return false
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/internal/syncs/syncs.go b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/syncs/syncs.go
new file mode 100644
index 00000000000..c78a30377a3
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/internal/syncs/syncs.go
@@ -0,0 +1,38 @@
+package syncs
+
+import (
+ "context"
+ "reflect"
+ "sync"
+)
+
+// MergeChans returns a channel that is closed when any of the input channels are signaled.
+// The caller must call the returned CancelFunc to ensure no resources are leaked.
+func MergeChans[T any](chans ...<-chan T) (<-chan T, context.CancelFunc) {
+ var once sync.Once
+ out := make(chan T)
+ cancel := make(chan T)
+ cancelFunc := func() {
+ once.Do(func() {
+ close(cancel)
+ })
+ <-out
+ }
+ cases := make([]reflect.SelectCase, len(chans)+1)
+ for i := range chans {
+ cases[i] = reflect.SelectCase{
+ Dir: reflect.SelectRecv,
+ Chan: reflect.ValueOf(chans[i]),
+ }
+ }
+ cases[len(cases)-1] = reflect.SelectCase{
+ Dir: reflect.SelectRecv,
+ Chan: reflect.ValueOf(cancel),
+ }
+ go func() {
+ defer close(out)
+ _, _, _ = reflect.Select(cases)
+ }()
+
+ return out, cancelFunc
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/leaderelection/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/leaderelection/doc.go
new file mode 100644
index 00000000000..37a9aefab58
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/leaderelection/doc.go
@@ -0,0 +1,24 @@
+/*
+Copyright 2018 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 leaderelection contains a constructor for a leader election resource lock.
+This is used to ensure that multiple copies of a controller manager can be run with
+only one active set of controllers, for active-passive HA.
+
+It uses built-in Kubernetes leader election APIs.
+*/
+package leaderelection
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/leaderelection/leader_election.go b/vendor/sigs.k8s.io/controller-runtime/pkg/leaderelection/leader_election.go
new file mode 100644
index 00000000000..5cc253917a3
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/leaderelection/leader_election.go
@@ -0,0 +1,148 @@
+/*
+Copyright 2018 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 leaderelection
+
+import (
+ "errors"
+ "fmt"
+ "os"
+ "time"
+
+ "k8s.io/apimachinery/pkg/util/uuid"
+ coordinationv1client "k8s.io/client-go/kubernetes/typed/coordination/v1"
+ corev1client "k8s.io/client-go/kubernetes/typed/core/v1"
+ "k8s.io/client-go/rest"
+ "k8s.io/client-go/tools/leaderelection/resourcelock"
+
+ "sigs.k8s.io/controller-runtime/pkg/recorder"
+)
+
+const inClusterNamespacePath = "/var/run/secrets/kubernetes.io/serviceaccount/namespace"
+
+// Options provides the required configuration to create a new resource lock.
+type Options struct {
+ // LeaderElection determines whether or not to use leader election when
+ // starting the manager.
+ LeaderElection bool
+
+ // LeaderElectionResourceLock determines which resource lock to use for leader election,
+ // defaults to "leases".
+ LeaderElectionResourceLock string
+
+ // LeaderElectionNamespace determines the namespace in which the leader
+ // election resource will be created.
+ LeaderElectionNamespace string
+
+ // LeaderElectionID determines the name of the resource that leader election
+ // will use for holding the leader lock.
+ LeaderElectionID string
+
+ // RenewDeadline is the renew deadline for this leader election client.
+ // Must be set to ensure the resource lock has an appropriate client timeout.
+ // Without that, a single slow response from the API server can result
+ // in losing leadership.
+ RenewDeadline time.Duration
+}
+
+// NewResourceLock creates a new resource lock for use in a leader election loop.
+func NewResourceLock(config *rest.Config, recorderProvider recorder.Provider, options Options) (resourcelock.Interface, error) {
+ if !options.LeaderElection {
+ return nil, nil
+ }
+
+ // Default resource lock to "leases". The previous default (from v0.7.0 to v0.11.x) was configmapsleases, which was
+ // used to migrate from configmaps to leases. Since the default was "configmapsleases" for over a year, spanning
+ // five minor releases, any actively maintained operators are very likely to have a released version that uses
+ // "configmapsleases". Therefore defaulting to "leases" should be safe.
+ if options.LeaderElectionResourceLock == "" {
+ options.LeaderElectionResourceLock = resourcelock.LeasesResourceLock
+ }
+
+ // LeaderElectionID must be provided to prevent clashes
+ if options.LeaderElectionID == "" {
+ return nil, errors.New("LeaderElectionID must be configured")
+ }
+
+ // Default the namespace (if running in cluster)
+ if options.LeaderElectionNamespace == "" {
+ var err error
+ options.LeaderElectionNamespace, err = getInClusterNamespace()
+ if err != nil {
+ return nil, fmt.Errorf("unable to find leader election namespace: %w", err)
+ }
+ }
+
+ // Leader id, needs to be unique
+ id, err := os.Hostname()
+ if err != nil {
+ return nil, err
+ }
+ id = id + "_" + string(uuid.NewUUID())
+
+ // Construct clients for leader election
+ rest.AddUserAgent(config, "leader-election")
+
+ if options.RenewDeadline != 0 {
+ return resourcelock.NewFromKubeconfig(options.LeaderElectionResourceLock,
+ options.LeaderElectionNamespace,
+ options.LeaderElectionID,
+ resourcelock.ResourceLockConfig{
+ Identity: id,
+ EventRecorder: recorderProvider.GetEventRecorderFor(id),
+ },
+ config,
+ options.RenewDeadline,
+ )
+ }
+
+ corev1Client, err := corev1client.NewForConfig(config)
+ if err != nil {
+ return nil, err
+ }
+
+ coordinationClient, err := coordinationv1client.NewForConfig(config)
+ if err != nil {
+ return nil, err
+ }
+ return resourcelock.New(options.LeaderElectionResourceLock,
+ options.LeaderElectionNamespace,
+ options.LeaderElectionID,
+ corev1Client,
+ coordinationClient,
+ resourcelock.ResourceLockConfig{
+ Identity: id,
+ EventRecorder: recorderProvider.GetEventRecorderFor(id),
+ },
+ )
+}
+
+func getInClusterNamespace() (string, error) {
+ // Check whether the namespace file exists.
+ // If not, we are not running in cluster so can't guess the namespace.
+ if _, err := os.Stat(inClusterNamespacePath); os.IsNotExist(err) {
+ return "", fmt.Errorf("not running in-cluster, please specify LeaderElectionNamespace")
+ } else if err != nil {
+ return "", fmt.Errorf("error checking namespace file: %w", err)
+ }
+
+ // Load the namespace file and return its content
+ namespace, err := os.ReadFile(inClusterNamespacePath)
+ if err != nil {
+ return "", fmt.Errorf("error reading namespace file: %w", err)
+ }
+ return string(namespace), nil
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/manager/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/doc.go
new file mode 100644
index 00000000000..f2976c7f754
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/doc.go
@@ -0,0 +1,21 @@
+/*
+Copyright 2018 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 manager is required to create Controllers and provides shared dependencies such as clients, caches, schemes,
+etc. Controllers must be started by calling Manager.Start.
+*/
+package manager
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/manager/internal.go b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/internal.go
new file mode 100644
index 00000000000..e5204a7506b
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/internal.go
@@ -0,0 +1,623 @@
+/*
+Copyright 2018 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 manager
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "net"
+ "net/http"
+ "net/http/pprof"
+ "sync"
+ "sync/atomic"
+ "time"
+
+ "github.com/go-logr/logr"
+ "k8s.io/apimachinery/pkg/api/meta"
+ "k8s.io/apimachinery/pkg/runtime"
+ kerrors "k8s.io/apimachinery/pkg/util/errors"
+ "k8s.io/client-go/rest"
+ "k8s.io/client-go/tools/leaderelection"
+ "k8s.io/client-go/tools/leaderelection/resourcelock"
+ "k8s.io/client-go/tools/record"
+
+ "sigs.k8s.io/controller-runtime/pkg/cache"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/cluster"
+ "sigs.k8s.io/controller-runtime/pkg/config"
+ "sigs.k8s.io/controller-runtime/pkg/healthz"
+ "sigs.k8s.io/controller-runtime/pkg/internal/httpserver"
+ intrec "sigs.k8s.io/controller-runtime/pkg/internal/recorder"
+ metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
+ "sigs.k8s.io/controller-runtime/pkg/webhook"
+)
+
+const (
+ // Values taken from: https://github.com/kubernetes/component-base/blob/master/config/v1alpha1/defaults.go
+ defaultLeaseDuration = 15 * time.Second
+ defaultRenewDeadline = 10 * time.Second
+ defaultRetryPeriod = 2 * time.Second
+ defaultGracefulShutdownPeriod = 30 * time.Second
+
+ defaultReadinessEndpoint = "/readyz"
+ defaultLivenessEndpoint = "/healthz"
+)
+
+var _ Runnable = &controllerManager{}
+
+type controllerManager struct {
+ sync.Mutex
+ started bool
+
+ stopProcedureEngaged *int64
+ errChan chan error
+ runnables *runnables
+
+ // cluster holds a variety of methods to interact with a cluster. Required.
+ cluster cluster.Cluster
+
+ // recorderProvider is used to generate event recorders that will be injected into Controllers
+ // (and EventHandlers, Sources and Predicates).
+ recorderProvider *intrec.Provider
+
+ // resourceLock forms the basis for leader election
+ resourceLock resourcelock.Interface
+
+ // leaderElectionReleaseOnCancel defines if the manager should step back from the leader lease
+ // on shutdown
+ leaderElectionReleaseOnCancel bool
+
+ // metricsServer is used to serve prometheus metrics
+ metricsServer metricsserver.Server
+
+ // healthProbeListener is used to serve liveness probe
+ healthProbeListener net.Listener
+
+ // Readiness probe endpoint name
+ readinessEndpointName string
+
+ // Liveness probe endpoint name
+ livenessEndpointName string
+
+ // Readyz probe handler
+ readyzHandler *healthz.Handler
+
+ // Healthz probe handler
+ healthzHandler *healthz.Handler
+
+ // pprofListener is used to serve pprof
+ pprofListener net.Listener
+
+ // controllerConfig are the global controller options.
+ controllerConfig config.Controller
+
+ // Logger is the logger that should be used by this manager.
+ // If none is set, it defaults to log.Log global logger.
+ logger logr.Logger
+
+ // leaderElectionStopped is an internal channel used to signal the stopping procedure that the
+ // LeaderElection.Run(...) function has returned and the shutdown can proceed.
+ leaderElectionStopped chan struct{}
+
+ // leaderElectionCancel is used to cancel the leader election. It is distinct from internalStopper,
+ // because for safety reasons we need to os.Exit() when we lose the leader election, meaning that
+ // it must be deferred until after gracefulShutdown is done.
+ leaderElectionCancel context.CancelFunc
+
+ // elected is closed when this manager becomes the leader of a group of
+ // managers, either because it won a leader election or because no leader
+ // election was configured.
+ elected chan struct{}
+
+ webhookServer webhook.Server
+ // webhookServerOnce will be called in GetWebhookServer() to optionally initialize
+ // webhookServer if unset, and Add() it to controllerManager.
+ webhookServerOnce sync.Once
+
+ // leaderElectionID is the name of the resource that leader election
+ // will use for holding the leader lock.
+ leaderElectionID string
+ // leaseDuration is the duration that non-leader candidates will
+ // wait to force acquire leadership.
+ leaseDuration time.Duration
+ // renewDeadline is the duration that the acting controlplane will retry
+ // refreshing leadership before giving up.
+ renewDeadline time.Duration
+ // retryPeriod is the duration the LeaderElector clients should wait
+ // between tries of actions.
+ retryPeriod time.Duration
+
+ // gracefulShutdownTimeout is the duration given to runnable to stop
+ // before the manager actually returns on stop.
+ gracefulShutdownTimeout time.Duration
+
+ // onStoppedLeading is callled when the leader election lease is lost.
+ // It can be overridden for tests.
+ onStoppedLeading func()
+
+ // shutdownCtx is the context that can be used during shutdown. It will be cancelled
+ // after the gracefulShutdownTimeout ended. It must not be accessed before internalStop
+ // is closed because it will be nil.
+ shutdownCtx context.Context
+
+ internalCtx context.Context
+ internalCancel context.CancelFunc
+
+ // internalProceduresStop channel is used internally to the manager when coordinating
+ // the proper shutdown of servers. This channel is also used for dependency injection.
+ internalProceduresStop chan struct{}
+}
+
+type hasCache interface {
+ Runnable
+ GetCache() cache.Cache
+}
+
+// Add sets dependencies on i, and adds it to the list of Runnables to start.
+func (cm *controllerManager) Add(r Runnable) error {
+ cm.Lock()
+ defer cm.Unlock()
+ return cm.add(r)
+}
+
+func (cm *controllerManager) add(r Runnable) error {
+ return cm.runnables.Add(r)
+}
+
+// AddMetricsServerExtraHandler adds extra handler served on path to the http server that serves metrics.
+func (cm *controllerManager) AddMetricsServerExtraHandler(path string, handler http.Handler) error {
+ cm.Lock()
+ defer cm.Unlock()
+ if cm.started {
+ return fmt.Errorf("unable to add new metrics handler because metrics endpoint has already been created")
+ }
+ if cm.metricsServer == nil {
+ cm.GetLogger().Info("warn: metrics server is currently disabled, registering extra handler will be ignored", "path", path)
+ return nil
+ }
+ if err := cm.metricsServer.AddExtraHandler(path, handler); err != nil {
+ return err
+ }
+ cm.logger.V(2).Info("Registering metrics http server extra handler", "path", path)
+ return nil
+}
+
+// AddHealthzCheck allows you to add Healthz checker.
+func (cm *controllerManager) AddHealthzCheck(name string, check healthz.Checker) error {
+ cm.Lock()
+ defer cm.Unlock()
+
+ if cm.started {
+ return fmt.Errorf("unable to add new checker because healthz endpoint has already been created")
+ }
+
+ if cm.healthzHandler == nil {
+ cm.healthzHandler = &healthz.Handler{Checks: map[string]healthz.Checker{}}
+ }
+
+ cm.healthzHandler.Checks[name] = check
+ return nil
+}
+
+// AddReadyzCheck allows you to add Readyz checker.
+func (cm *controllerManager) AddReadyzCheck(name string, check healthz.Checker) error {
+ cm.Lock()
+ defer cm.Unlock()
+
+ if cm.started {
+ return fmt.Errorf("unable to add new checker because healthz endpoint has already been created")
+ }
+
+ if cm.readyzHandler == nil {
+ cm.readyzHandler = &healthz.Handler{Checks: map[string]healthz.Checker{}}
+ }
+
+ cm.readyzHandler.Checks[name] = check
+ return nil
+}
+
+func (cm *controllerManager) GetHTTPClient() *http.Client {
+ return cm.cluster.GetHTTPClient()
+}
+
+func (cm *controllerManager) GetConfig() *rest.Config {
+ return cm.cluster.GetConfig()
+}
+
+func (cm *controllerManager) GetClient() client.Client {
+ return cm.cluster.GetClient()
+}
+
+func (cm *controllerManager) GetScheme() *runtime.Scheme {
+ return cm.cluster.GetScheme()
+}
+
+func (cm *controllerManager) GetFieldIndexer() client.FieldIndexer {
+ return cm.cluster.GetFieldIndexer()
+}
+
+func (cm *controllerManager) GetCache() cache.Cache {
+ return cm.cluster.GetCache()
+}
+
+func (cm *controllerManager) GetEventRecorderFor(name string) record.EventRecorder {
+ return cm.cluster.GetEventRecorderFor(name)
+}
+
+func (cm *controllerManager) GetRESTMapper() meta.RESTMapper {
+ return cm.cluster.GetRESTMapper()
+}
+
+func (cm *controllerManager) GetAPIReader() client.Reader {
+ return cm.cluster.GetAPIReader()
+}
+
+func (cm *controllerManager) GetWebhookServer() webhook.Server {
+ cm.webhookServerOnce.Do(func() {
+ if cm.webhookServer == nil {
+ panic("webhook should not be nil")
+ }
+ if err := cm.Add(cm.webhookServer); err != nil {
+ panic(fmt.Sprintf("unable to add webhook server to the controller manager: %s", err))
+ }
+ })
+ return cm.webhookServer
+}
+
+func (cm *controllerManager) GetLogger() logr.Logger {
+ return cm.logger
+}
+
+func (cm *controllerManager) GetControllerOptions() config.Controller {
+ return cm.controllerConfig
+}
+
+func (cm *controllerManager) addHealthProbeServer() error {
+ mux := http.NewServeMux()
+ srv := httpserver.New(mux)
+
+ if cm.readyzHandler != nil {
+ mux.Handle(cm.readinessEndpointName, http.StripPrefix(cm.readinessEndpointName, cm.readyzHandler))
+ // Append '/' suffix to handle subpaths
+ mux.Handle(cm.readinessEndpointName+"/", http.StripPrefix(cm.readinessEndpointName, cm.readyzHandler))
+ }
+ if cm.healthzHandler != nil {
+ mux.Handle(cm.livenessEndpointName, http.StripPrefix(cm.livenessEndpointName, cm.healthzHandler))
+ // Append '/' suffix to handle subpaths
+ mux.Handle(cm.livenessEndpointName+"/", http.StripPrefix(cm.livenessEndpointName, cm.healthzHandler))
+ }
+
+ return cm.add(&Server{
+ Name: "health probe",
+ Server: srv,
+ Listener: cm.healthProbeListener,
+ })
+}
+
+func (cm *controllerManager) addPprofServer() error {
+ mux := http.NewServeMux()
+ srv := httpserver.New(mux)
+
+ mux.HandleFunc("/debug/pprof/", pprof.Index)
+ mux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
+ mux.HandleFunc("/debug/pprof/profile", pprof.Profile)
+ mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
+ mux.HandleFunc("/debug/pprof/trace", pprof.Trace)
+
+ return cm.add(&Server{
+ Name: "pprof",
+ Server: srv,
+ Listener: cm.pprofListener,
+ })
+}
+
+// Start starts the manager and waits indefinitely.
+// There is only two ways to have start return:
+// An error has occurred during in one of the internal operations,
+// such as leader election, cache start, webhooks, and so on.
+// Or, the context is cancelled.
+func (cm *controllerManager) Start(ctx context.Context) (err error) {
+ cm.Lock()
+ if cm.started {
+ cm.Unlock()
+ return errors.New("manager already started")
+ }
+ cm.started = true
+
+ var ready bool
+ defer func() {
+ // Only unlock the manager if we haven't reached
+ // the internal readiness condition.
+ if !ready {
+ cm.Unlock()
+ }
+ }()
+
+ // Initialize the internal context.
+ cm.internalCtx, cm.internalCancel = context.WithCancel(ctx)
+
+ // Leader elector must be created before defer that contains engageStopProcedure function
+ // https://github.com/kubernetes-sigs/controller-runtime/issues/2873
+ var leaderElector *leaderelection.LeaderElector
+ if cm.resourceLock != nil {
+ leaderElector, err = cm.initLeaderElector()
+ if err != nil {
+ return fmt.Errorf("failed during initialization leader election process: %w", err)
+ }
+ }
+
+ // This chan indicates that stop is complete, in other words all runnables have returned or timeout on stop request
+ stopComplete := make(chan struct{})
+ defer close(stopComplete)
+ // This must be deferred after closing stopComplete, otherwise we deadlock.
+ defer func() {
+ // https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/gettyimages-459889618-1533579787.jpg
+ stopErr := cm.engageStopProcedure(stopComplete)
+ if stopErr != nil {
+ if err != nil {
+ // Utilerrors.Aggregate allows to use errors.Is for all contained errors
+ // whereas fmt.Errorf allows wrapping at most one error which means the
+ // other one can not be found anymore.
+ err = kerrors.NewAggregate([]error{err, stopErr})
+ } else {
+ err = stopErr
+ }
+ }
+ }()
+
+ // Add the cluster runnable.
+ if err := cm.add(cm.cluster); err != nil {
+ return fmt.Errorf("failed to add cluster to runnables: %w", err)
+ }
+
+ // Metrics should be served whether the controller is leader or not.
+ // (If we don't serve metrics for non-leaders, prometheus will still scrape
+ // the pod but will get a connection refused).
+ if cm.metricsServer != nil {
+ // Note: We are adding the metrics server directly to HTTPServers here as matching on the
+ // metricsserver.Server interface in cm.runnables.Add would be very brittle.
+ if err := cm.runnables.HTTPServers.Add(cm.metricsServer, nil); err != nil {
+ return fmt.Errorf("failed to add metrics server: %w", err)
+ }
+ }
+
+ // Serve health probes.
+ if cm.healthProbeListener != nil {
+ if err := cm.addHealthProbeServer(); err != nil {
+ return fmt.Errorf("failed to add health probe server: %w", err)
+ }
+ }
+
+ // Add pprof server
+ if cm.pprofListener != nil {
+ if err := cm.addPprofServer(); err != nil {
+ return fmt.Errorf("failed to add pprof server: %w", err)
+ }
+ }
+
+ // First start any HTTP servers, which includes health probes, metrics and profiling if enabled.
+ //
+ // WARNING: HTTPServers includes the health probes, which MUST start before any cache is populated, otherwise
+ // it would block conversion webhooks to be ready for serving which make the cache never get ready.
+ logCtx := logr.NewContext(cm.internalCtx, cm.logger)
+ if err := cm.runnables.HTTPServers.Start(logCtx); err != nil {
+ return fmt.Errorf("failed to start HTTP servers: %w", err)
+ }
+
+ // Start any webhook servers, which includes conversion, validation, and defaulting
+ // webhooks that are registered.
+ //
+ // WARNING: Webhooks MUST start before any cache is populated, otherwise there is a race condition
+ // between conversion webhooks and the cache sync (usually initial list) which causes the webhooks
+ // to never start because no cache can be populated.
+ if err := cm.runnables.Webhooks.Start(cm.internalCtx); err != nil {
+ return fmt.Errorf("failed to start webhooks: %w", err)
+ }
+
+ // Start and wait for caches.
+ if err := cm.runnables.Caches.Start(cm.internalCtx); err != nil {
+ return fmt.Errorf("failed to start caches: %w", err)
+ }
+
+ // Start the non-leaderelection Runnables after the cache has synced.
+ if err := cm.runnables.Others.Start(cm.internalCtx); err != nil {
+ return fmt.Errorf("failed to start other runnables: %w", err)
+ }
+
+ // Start the leader election and all required runnables.
+ {
+ ctx, cancel := context.WithCancel(context.Background())
+ cm.leaderElectionCancel = cancel
+ if leaderElector != nil {
+ // Start the leader elector process
+ go func() {
+ leaderElector.Run(ctx)
+ <-ctx.Done()
+ close(cm.leaderElectionStopped)
+ }()
+ } else {
+ go func() {
+ // Treat not having leader election enabled the same as being elected.
+ if err := cm.startLeaderElectionRunnables(); err != nil {
+ cm.errChan <- err
+ }
+ close(cm.elected)
+ }()
+ }
+ }
+
+ ready = true
+ cm.Unlock()
+ select {
+ case <-ctx.Done():
+ // We are done
+ return nil
+ case err := <-cm.errChan:
+ // Error starting or running a runnable
+ return err
+ }
+}
+
+// engageStopProcedure signals all runnables to stop, reads potential errors
+// from the errChan and waits for them to end. It must not be called more than once.
+func (cm *controllerManager) engageStopProcedure(stopComplete <-chan struct{}) error {
+ if !atomic.CompareAndSwapInt64(cm.stopProcedureEngaged, 0, 1) {
+ return errors.New("stop procedure already engaged")
+ }
+
+ // Populate the shutdown context, this operation MUST be done before
+ // closing the internalProceduresStop channel.
+ //
+ // The shutdown context immediately expires if the gracefulShutdownTimeout is not set.
+ var shutdownCancel context.CancelFunc
+ if cm.gracefulShutdownTimeout < 0 {
+ // We want to wait forever for the runnables to stop.
+ cm.shutdownCtx, shutdownCancel = context.WithCancel(context.Background())
+ } else {
+ cm.shutdownCtx, shutdownCancel = context.WithTimeout(context.Background(), cm.gracefulShutdownTimeout)
+ }
+ defer shutdownCancel()
+
+ // Start draining the errors before acquiring the lock to make sure we don't deadlock
+ // if something that has the lock is blocked on trying to write into the unbuffered
+ // channel after something else already wrote into it.
+ var closeOnce sync.Once
+ go func() {
+ for {
+ // Closing in the for loop is required to avoid race conditions between
+ // the closure of all internal procedures and making sure to have a reader off the error channel.
+ closeOnce.Do(func() {
+ // Cancel the internal stop channel and wait for the procedures to stop and complete.
+ close(cm.internalProceduresStop)
+ cm.internalCancel()
+ })
+ select {
+ case err := <-cm.errChan:
+ if !errors.Is(err, context.Canceled) {
+ cm.logger.Error(err, "error received after stop sequence was engaged")
+ }
+ case <-stopComplete:
+ return
+ }
+ }
+ }()
+
+ // We want to close this after the other runnables stop, because we don't
+ // want things like leader election to try and emit events on a closed
+ // channel
+ defer cm.recorderProvider.Stop(cm.shutdownCtx)
+ defer func() {
+ // Cancel leader election only after we waited. It will os.Exit() the app for safety.
+ if cm.resourceLock != nil {
+ // After asking the context to be cancelled, make sure
+ // we wait for the leader stopped channel to be closed, otherwise
+ // we might encounter race conditions between this code
+ // and the event recorder, which is used within leader election code.
+ cm.leaderElectionCancel()
+ <-cm.leaderElectionStopped
+ }
+ }()
+
+ go func() {
+ // First stop the non-leader election runnables.
+ cm.logger.Info("Stopping and waiting for non leader election runnables")
+ cm.runnables.Others.StopAndWait(cm.shutdownCtx)
+
+ // Stop all the leader election runnables, which includes reconcilers.
+ cm.logger.Info("Stopping and waiting for leader election runnables")
+ // Prevent leader election when shutting down a non-elected manager
+ cm.runnables.LeaderElection.startOnce.Do(func() {})
+ cm.runnables.LeaderElection.StopAndWait(cm.shutdownCtx)
+
+ // Stop the caches before the leader election runnables, this is an important
+ // step to make sure that we don't race with the reconcilers by receiving more events
+ // from the API servers and enqueueing them.
+ cm.logger.Info("Stopping and waiting for caches")
+ cm.runnables.Caches.StopAndWait(cm.shutdownCtx)
+
+ // Webhooks and internal HTTP servers should come last, as they might be still serving some requests.
+ cm.logger.Info("Stopping and waiting for webhooks")
+ cm.runnables.Webhooks.StopAndWait(cm.shutdownCtx)
+
+ cm.logger.Info("Stopping and waiting for HTTP servers")
+ cm.runnables.HTTPServers.StopAndWait(cm.shutdownCtx)
+
+ // Proceed to close the manager and overall shutdown context.
+ cm.logger.Info("Wait completed, proceeding to shutdown the manager")
+ shutdownCancel()
+ }()
+
+ <-cm.shutdownCtx.Done()
+ if err := cm.shutdownCtx.Err(); err != nil && !errors.Is(err, context.Canceled) {
+ if errors.Is(err, context.DeadlineExceeded) {
+ if cm.gracefulShutdownTimeout > 0 {
+ return fmt.Errorf("failed waiting for all runnables to end within grace period of %s: %w", cm.gracefulShutdownTimeout, err)
+ }
+ return nil
+ }
+ // For any other error, return the error.
+ return err
+ }
+
+ return nil
+}
+
+func (cm *controllerManager) initLeaderElector() (*leaderelection.LeaderElector, error) {
+ leaderElector, err := leaderelection.NewLeaderElector(leaderelection.LeaderElectionConfig{
+ Lock: cm.resourceLock,
+ LeaseDuration: cm.leaseDuration,
+ RenewDeadline: cm.renewDeadline,
+ RetryPeriod: cm.retryPeriod,
+ Callbacks: leaderelection.LeaderCallbacks{
+ OnStartedLeading: func(_ context.Context) {
+ if err := cm.startLeaderElectionRunnables(); err != nil {
+ cm.errChan <- err
+ return
+ }
+ close(cm.elected)
+ },
+ OnStoppedLeading: func() {
+ if cm.onStoppedLeading != nil {
+ cm.onStoppedLeading()
+ }
+ // Make sure graceful shutdown is skipped if we lost the leader lock without
+ // intending to.
+ cm.gracefulShutdownTimeout = time.Duration(0)
+ // Most implementations of leader election log.Fatal() here.
+ // Since Start is wrapped in log.Fatal when called, we can just return
+ // an error here which will cause the program to exit.
+ cm.errChan <- errors.New("leader election lost")
+ },
+ },
+ ReleaseOnCancel: cm.leaderElectionReleaseOnCancel,
+ Name: cm.leaderElectionID,
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ return leaderElector, nil
+}
+
+func (cm *controllerManager) startLeaderElectionRunnables() error {
+ return cm.runnables.LeaderElection.Start(cm.internalCtx)
+}
+
+func (cm *controllerManager) Elected() <-chan struct{} {
+ return cm.elected
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/manager/manager.go b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/manager.go
new file mode 100644
index 00000000000..92906fe6ca7
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/manager.go
@@ -0,0 +1,556 @@
+/*
+Copyright 2018 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 manager
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "net"
+ "net/http"
+ "time"
+
+ "github.com/go-logr/logr"
+ coordinationv1 "k8s.io/api/coordination/v1"
+ corev1 "k8s.io/api/core/v1"
+ "k8s.io/apimachinery/pkg/api/meta"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/client-go/rest"
+ "k8s.io/client-go/tools/leaderelection/resourcelock"
+ "k8s.io/client-go/tools/record"
+ "k8s.io/utils/ptr"
+ metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
+
+ "sigs.k8s.io/controller-runtime/pkg/cache"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/cluster"
+ "sigs.k8s.io/controller-runtime/pkg/config"
+ "sigs.k8s.io/controller-runtime/pkg/healthz"
+ intrec "sigs.k8s.io/controller-runtime/pkg/internal/recorder"
+ "sigs.k8s.io/controller-runtime/pkg/leaderelection"
+ "sigs.k8s.io/controller-runtime/pkg/log"
+ "sigs.k8s.io/controller-runtime/pkg/recorder"
+ "sigs.k8s.io/controller-runtime/pkg/webhook"
+)
+
+// Manager initializes shared dependencies such as Caches and Clients, and provides them to Runnables.
+// A Manager is required to create Controllers.
+type Manager interface {
+ // Cluster holds a variety of methods to interact with a cluster.
+ cluster.Cluster
+
+ // Add will set requested dependencies on the component, and cause the component to be
+ // started when Start is called.
+ // Depending on if a Runnable implements LeaderElectionRunnable interface, a Runnable can be run in either
+ // non-leaderelection mode (always running) or leader election mode (managed by leader election if enabled).
+ Add(Runnable) error
+
+ // Elected is closed when this manager is elected leader of a group of
+ // managers, either because it won a leader election or because no leader
+ // election was configured.
+ Elected() <-chan struct{}
+
+ // AddMetricsServerExtraHandler adds an extra handler served on path to the http server that serves metrics.
+ // Might be useful to register some diagnostic endpoints e.g. pprof.
+ //
+ // Note that these endpoints are meant to be sensitive and shouldn't be exposed publicly.
+ //
+ // If the simple path -> handler mapping offered here is not enough,
+ // a new http server/listener should be added as Runnable to the manager via Add method.
+ AddMetricsServerExtraHandler(path string, handler http.Handler) error
+
+ // AddHealthzCheck allows you to add Healthz checker
+ AddHealthzCheck(name string, check healthz.Checker) error
+
+ // AddReadyzCheck allows you to add Readyz checker
+ AddReadyzCheck(name string, check healthz.Checker) error
+
+ // Start starts all registered Controllers and blocks until the context is cancelled.
+ // Returns an error if there is an error starting any controller.
+ //
+ // If LeaderElection is used, the binary must be exited immediately after this returns,
+ // otherwise components that need leader election might continue to run after the leader
+ // lock was lost.
+ Start(ctx context.Context) error
+
+ // GetWebhookServer returns a webhook.Server
+ GetWebhookServer() webhook.Server
+
+ // GetLogger returns this manager's logger.
+ GetLogger() logr.Logger
+
+ // GetControllerOptions returns controller global configuration options.
+ GetControllerOptions() config.Controller
+}
+
+// Options are the arguments for creating a new Manager.
+type Options struct {
+ // Scheme is the scheme used to resolve runtime.Objects to GroupVersionKinds / Resources.
+ // Defaults to the kubernetes/client-go scheme.Scheme, but it's almost always better
+ // to pass your own scheme in. See the documentation in pkg/scheme for more information.
+ //
+ // If set, the Scheme will be used to create the default Client and Cache.
+ Scheme *runtime.Scheme
+
+ // MapperProvider provides the rest mapper used to map go types to Kubernetes APIs.
+ //
+ // If set, the RESTMapper returned by this function is used to create the RESTMapper
+ // used by the Client and Cache.
+ MapperProvider func(c *rest.Config, httpClient *http.Client) (meta.RESTMapper, error)
+
+ // Cache is the cache.Options that will be used to create the default Cache.
+ // By default, the cache will watch and list requested objects in all namespaces.
+ Cache cache.Options
+
+ // NewCache is the function that will create the cache to be used
+ // by the manager. If not set this will use the default new cache function.
+ //
+ // When using a custom NewCache, the Cache options will be passed to the
+ // NewCache function.
+ //
+ // NOTE: LOW LEVEL PRIMITIVE!
+ // Only use a custom NewCache if you know what you are doing.
+ NewCache cache.NewCacheFunc
+
+ // Client is the client.Options that will be used to create the default Client.
+ // By default, the client will use the cache for reads and direct calls for writes.
+ Client client.Options
+
+ // NewClient is the func that creates the client to be used by the manager.
+ // If not set this will create a Client backed by a Cache for read operations
+ // and a direct Client for write operations.
+ //
+ // When using a custom NewClient, the Client options will be passed to the
+ // NewClient function.
+ //
+ // NOTE: LOW LEVEL PRIMITIVE!
+ // Only use a custom NewClient if you know what you are doing.
+ NewClient client.NewClientFunc
+
+ // Logger is the logger that should be used by this manager.
+ // If none is set, it defaults to log.Log global logger.
+ Logger logr.Logger
+
+ // LeaderElection determines whether or not to use leader election when
+ // starting the manager.
+ LeaderElection bool
+
+ // LeaderElectionResourceLock determines which resource lock to use for leader election,
+ // defaults to "leases". Change this value only if you know what you are doing.
+ //
+ // If you are using `configmaps`/`endpoints` resource lock and want to migrate to "leases",
+ // you might do so by migrating to the respective multilock first ("configmapsleases" or "endpointsleases"),
+ // which will acquire a leader lock on both resources.
+ // After all your users have migrated to the multilock, you can go ahead and migrate to "leases".
+ // Please also keep in mind, that users might skip versions of your controller.
+ //
+ // Note: before controller-runtime version v0.7, it was set to "configmaps".
+ // And from v0.7 to v0.11, the default was "configmapsleases", which was
+ // used to migrate from configmaps to leases.
+ // Since the default was "configmapsleases" for over a year, spanning five minor releases,
+ // any actively maintained operators are very likely to have a released version that uses
+ // "configmapsleases". Therefore defaulting to "leases" should be safe since v0.12.
+ //
+ // So, what do you have to do when you are updating your controller-runtime dependency
+ // from a lower version to v0.12 or newer?
+ // - If your operator matches at least one of these conditions:
+ // - the LeaderElectionResourceLock in your operator has already been explicitly set to "leases"
+ // - the old controller-runtime version is between v0.7.0 and v0.11.x and the
+ // LeaderElectionResourceLock wasn't set or was set to "leases"/"configmapsleases"/"endpointsleases"
+ // feel free to update controller-runtime to v0.12 or newer.
+ // - Otherwise, you may have to take these steps:
+ // 1. update controller-runtime to v0.12 or newer in your go.mod
+ // 2. set LeaderElectionResourceLock to "configmapsleases" (or "endpointsleases")
+ // 3. package your operator and upgrade it in all your clusters
+ // 4. only if you have finished 3, you can remove the LeaderElectionResourceLock to use the default "leases"
+ // Otherwise, your operator might end up with multiple running instances that
+ // each acquired leadership through different resource locks during upgrades and thus
+ // act on the same resources concurrently.
+ LeaderElectionResourceLock string
+
+ // LeaderElectionNamespace determines the namespace in which the leader
+ // election resource will be created.
+ LeaderElectionNamespace string
+
+ // LeaderElectionID determines the name of the resource that leader election
+ // will use for holding the leader lock.
+ LeaderElectionID string
+
+ // LeaderElectionConfig can be specified to override the default configuration
+ // that is used to build the leader election client.
+ LeaderElectionConfig *rest.Config
+
+ // LeaderElectionReleaseOnCancel defines if the leader should step down voluntarily
+ // when the Manager ends. This requires the binary to immediately end when the
+ // Manager is stopped, otherwise this setting is unsafe. Setting this significantly
+ // speeds up voluntary leader transitions as the new leader doesn't have to wait
+ // LeaseDuration time first.
+ LeaderElectionReleaseOnCancel bool
+
+ // LeaderElectionResourceLockInterface allows to provide a custom resourcelock.Interface that was created outside
+ // of the controller-runtime. If this value is set the options LeaderElectionID, LeaderElectionNamespace,
+ // LeaderElectionResourceLock, LeaseDuration, RenewDeadline and RetryPeriod will be ignored. This can be useful if you
+ // want to use a locking mechanism that is currently not supported, like a MultiLock across two Kubernetes clusters.
+ LeaderElectionResourceLockInterface resourcelock.Interface
+
+ // LeaseDuration is the duration that non-leader candidates will
+ // wait to force acquire leadership. This is measured against time of
+ // last observed ack. Default is 15 seconds.
+ LeaseDuration *time.Duration
+
+ // RenewDeadline is the duration that the acting controlplane will retry
+ // refreshing leadership before giving up. Default is 10 seconds.
+ RenewDeadline *time.Duration
+
+ // RetryPeriod is the duration the LeaderElector clients should wait
+ // between tries of actions. Default is 2 seconds.
+ RetryPeriod *time.Duration
+
+ // Metrics are the metricsserver.Options that will be used to create the metricsserver.Server.
+ Metrics metricsserver.Options
+
+ // HealthProbeBindAddress is the TCP address that the controller should bind to
+ // for serving health probes
+ // It can be set to "0" or "" to disable serving the health probe.
+ HealthProbeBindAddress string
+
+ // Readiness probe endpoint name, defaults to "readyz"
+ ReadinessEndpointName string
+
+ // Liveness probe endpoint name, defaults to "healthz"
+ LivenessEndpointName string
+
+ // PprofBindAddress is the TCP address that the controller should bind to
+ // for serving pprof.
+ // It can be set to "" or "0" to disable the pprof serving.
+ // Since pprof may contain sensitive information, make sure to protect it
+ // before exposing it to public.
+ PprofBindAddress string
+
+ // WebhookServer is an externally configured webhook.Server. By default,
+ // a Manager will create a server via webhook.NewServer with default settings.
+ // If this is set, the Manager will use this server instead.
+ WebhookServer webhook.Server
+
+ // BaseContext is the function that provides Context values to Runnables
+ // managed by the Manager. If a BaseContext function isn't provided, Runnables
+ // will receive a new Background Context instead.
+ BaseContext BaseContextFunc
+
+ // EventBroadcaster records Events emitted by the manager and sends them to the Kubernetes API
+ // Use this to customize the event correlator and spam filter
+ //
+ // Deprecated: using this may cause goroutine leaks if the lifetime of your manager or controllers
+ // is shorter than the lifetime of your process.
+ EventBroadcaster record.EventBroadcaster
+
+ // GracefulShutdownTimeout is the duration given to runnable to stop before the manager actually returns on stop.
+ // To disable graceful shutdown, set to time.Duration(0)
+ // To use graceful shutdown without timeout, set to a negative duration, e.G. time.Duration(-1)
+ // The graceful shutdown is skipped for safety reasons in case the leader election lease is lost.
+ GracefulShutdownTimeout *time.Duration
+
+ // Controller contains global configuration options for controllers
+ // registered within this manager.
+ // +optional
+ Controller config.Controller
+
+ // makeBroadcaster allows deferring the creation of the broadcaster to
+ // avoid leaking goroutines if we never call Start on this manager. It also
+ // returns whether or not this is a "owned" broadcaster, and as such should be
+ // stopped with the manager.
+ makeBroadcaster intrec.EventBroadcasterProducer
+
+ // Dependency injection for testing
+ newRecorderProvider func(config *rest.Config, httpClient *http.Client, scheme *runtime.Scheme, logger logr.Logger, makeBroadcaster intrec.EventBroadcasterProducer) (*intrec.Provider, error)
+ newResourceLock func(config *rest.Config, recorderProvider recorder.Provider, options leaderelection.Options) (resourcelock.Interface, error)
+ newMetricsServer func(options metricsserver.Options, config *rest.Config, httpClient *http.Client) (metricsserver.Server, error)
+ newHealthProbeListener func(addr string) (net.Listener, error)
+ newPprofListener func(addr string) (net.Listener, error)
+}
+
+// BaseContextFunc is a function used to provide a base Context to Runnables
+// managed by a Manager.
+type BaseContextFunc func() context.Context
+
+// Runnable allows a component to be started.
+// It's very important that Start blocks until
+// it's done running.
+type Runnable interface {
+ // Start starts running the component. The component will stop running
+ // when the context is closed. Start blocks until the context is closed or
+ // an error occurs.
+ Start(context.Context) error
+}
+
+// RunnableFunc implements Runnable using a function.
+// It's very important that the given function block
+// until it's done running.
+type RunnableFunc func(context.Context) error
+
+// Start implements Runnable.
+func (r RunnableFunc) Start(ctx context.Context) error {
+ return r(ctx)
+}
+
+// LeaderElectionRunnable knows if a Runnable needs to be run in the leader election mode.
+type LeaderElectionRunnable interface {
+ // NeedLeaderElection returns true if the Runnable needs to be run in the leader election mode.
+ // e.g. controllers need to be run in leader election mode, while webhook server doesn't.
+ NeedLeaderElection() bool
+}
+
+// New returns a new Manager for creating Controllers.
+// Note that if ContentType in the given config is not set, "application/vnd.kubernetes.protobuf"
+// will be used for all built-in resources of Kubernetes, and "application/json" is for other types
+// including all CRD resources.
+func New(config *rest.Config, options Options) (Manager, error) {
+ if config == nil {
+ return nil, errors.New("must specify Config")
+ }
+ // Set default values for options fields
+ options = setOptionsDefaults(options)
+
+ cluster, err := cluster.New(config, func(clusterOptions *cluster.Options) {
+ clusterOptions.Scheme = options.Scheme
+ clusterOptions.MapperProvider = options.MapperProvider
+ clusterOptions.Logger = options.Logger
+ clusterOptions.NewCache = options.NewCache
+ clusterOptions.NewClient = options.NewClient
+ clusterOptions.Cache = options.Cache
+ clusterOptions.Client = options.Client
+ clusterOptions.EventBroadcaster = options.EventBroadcaster //nolint:staticcheck
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ config = rest.CopyConfig(config)
+ if config.UserAgent == "" {
+ config.UserAgent = rest.DefaultKubernetesUserAgent()
+ }
+
+ // Create the recorder provider to inject event recorders for the components.
+ // TODO(directxman12): the log for the event provider should have a context (name, tags, etc) specific
+ // to the particular controller that it's being injected into, rather than a generic one like is here.
+ recorderProvider, err := options.newRecorderProvider(config, cluster.GetHTTPClient(), cluster.GetScheme(), options.Logger.WithName("events"), options.makeBroadcaster)
+ if err != nil {
+ return nil, err
+ }
+
+ // Create the resource lock to enable leader election)
+ var leaderConfig *rest.Config
+ var leaderRecorderProvider *intrec.Provider
+
+ if options.LeaderElectionConfig == nil {
+ leaderConfig = rest.CopyConfig(config)
+ leaderRecorderProvider = recorderProvider
+ } else {
+ leaderConfig = rest.CopyConfig(options.LeaderElectionConfig)
+ scheme := cluster.GetScheme()
+ err := corev1.AddToScheme(scheme)
+ if err != nil {
+ return nil, err
+ }
+ err = coordinationv1.AddToScheme(scheme)
+ if err != nil {
+ return nil, err
+ }
+ httpClient, err := rest.HTTPClientFor(options.LeaderElectionConfig)
+ if err != nil {
+ return nil, err
+ }
+ leaderRecorderProvider, err = options.newRecorderProvider(leaderConfig, httpClient, scheme, options.Logger.WithName("events"), options.makeBroadcaster)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ var resourceLock resourcelock.Interface
+ if options.LeaderElectionResourceLockInterface != nil && options.LeaderElection {
+ resourceLock = options.LeaderElectionResourceLockInterface
+ } else {
+ resourceLock, err = options.newResourceLock(leaderConfig, leaderRecorderProvider, leaderelection.Options{
+ LeaderElection: options.LeaderElection,
+ LeaderElectionResourceLock: options.LeaderElectionResourceLock,
+ LeaderElectionID: options.LeaderElectionID,
+ LeaderElectionNamespace: options.LeaderElectionNamespace,
+ RenewDeadline: *options.RenewDeadline,
+ })
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ // Create the metrics server.
+ metricsServer, err := options.newMetricsServer(options.Metrics, config, cluster.GetHTTPClient())
+ if err != nil {
+ return nil, err
+ }
+
+ // Create health probes listener. This will throw an error if the bind
+ // address is invalid or already in use.
+ healthProbeListener, err := options.newHealthProbeListener(options.HealthProbeBindAddress)
+ if err != nil {
+ return nil, err
+ }
+
+ // Create pprof listener. This will throw an error if the bind
+ // address is invalid or already in use.
+ pprofListener, err := options.newPprofListener(options.PprofBindAddress)
+ if err != nil {
+ return nil, fmt.Errorf("failed to new pprof listener: %w", err)
+ }
+
+ errChan := make(chan error, 1)
+ runnables := newRunnables(options.BaseContext, errChan)
+ return &controllerManager{
+ stopProcedureEngaged: ptr.To(int64(0)),
+ cluster: cluster,
+ runnables: runnables,
+ errChan: errChan,
+ recorderProvider: recorderProvider,
+ resourceLock: resourceLock,
+ metricsServer: metricsServer,
+ controllerConfig: options.Controller,
+ logger: options.Logger,
+ elected: make(chan struct{}),
+ webhookServer: options.WebhookServer,
+ leaderElectionID: options.LeaderElectionID,
+ leaseDuration: *options.LeaseDuration,
+ renewDeadline: *options.RenewDeadline,
+ retryPeriod: *options.RetryPeriod,
+ healthProbeListener: healthProbeListener,
+ readinessEndpointName: options.ReadinessEndpointName,
+ livenessEndpointName: options.LivenessEndpointName,
+ pprofListener: pprofListener,
+ gracefulShutdownTimeout: *options.GracefulShutdownTimeout,
+ internalProceduresStop: make(chan struct{}),
+ leaderElectionStopped: make(chan struct{}),
+ leaderElectionReleaseOnCancel: options.LeaderElectionReleaseOnCancel,
+ }, nil
+}
+
+// defaultHealthProbeListener creates the default health probes listener bound to the given address.
+func defaultHealthProbeListener(addr string) (net.Listener, error) {
+ if addr == "" || addr == "0" {
+ return nil, nil
+ }
+
+ ln, err := net.Listen("tcp", addr)
+ if err != nil {
+ return nil, fmt.Errorf("error listening on %s: %w", addr, err)
+ }
+ return ln, nil
+}
+
+// defaultPprofListener creates the default pprof listener bound to the given address.
+func defaultPprofListener(addr string) (net.Listener, error) {
+ if addr == "" || addr == "0" {
+ return nil, nil
+ }
+
+ ln, err := net.Listen("tcp", addr)
+ if err != nil {
+ return nil, fmt.Errorf("error listening on %s: %w", addr, err)
+ }
+ return ln, nil
+}
+
+// defaultBaseContext is used as the BaseContext value in Options if one
+// has not already been set.
+func defaultBaseContext() context.Context {
+ return context.Background()
+}
+
+// setOptionsDefaults set default values for Options fields.
+func setOptionsDefaults(options Options) Options {
+ // Allow newResourceLock to be mocked
+ if options.newResourceLock == nil {
+ options.newResourceLock = leaderelection.NewResourceLock
+ }
+
+ // Allow newRecorderProvider to be mocked
+ if options.newRecorderProvider == nil {
+ options.newRecorderProvider = intrec.NewProvider
+ }
+
+ // This is duplicated with pkg/cluster, we need it here
+ // for the leader election and there to provide the user with
+ // an EventBroadcaster
+ if options.EventBroadcaster == nil {
+ // defer initialization to avoid leaking by default
+ options.makeBroadcaster = func() (record.EventBroadcaster, bool) {
+ return record.NewBroadcaster(), true
+ }
+ } else {
+ options.makeBroadcaster = func() (record.EventBroadcaster, bool) {
+ return options.EventBroadcaster, false
+ }
+ }
+
+ if options.newMetricsServer == nil {
+ options.newMetricsServer = metricsserver.NewServer
+ }
+ leaseDuration, renewDeadline, retryPeriod := defaultLeaseDuration, defaultRenewDeadline, defaultRetryPeriod
+ if options.LeaseDuration == nil {
+ options.LeaseDuration = &leaseDuration
+ }
+
+ if options.RenewDeadline == nil {
+ options.RenewDeadline = &renewDeadline
+ }
+
+ if options.RetryPeriod == nil {
+ options.RetryPeriod = &retryPeriod
+ }
+
+ if options.ReadinessEndpointName == "" {
+ options.ReadinessEndpointName = defaultReadinessEndpoint
+ }
+
+ if options.LivenessEndpointName == "" {
+ options.LivenessEndpointName = defaultLivenessEndpoint
+ }
+
+ if options.newHealthProbeListener == nil {
+ options.newHealthProbeListener = defaultHealthProbeListener
+ }
+
+ if options.newPprofListener == nil {
+ options.newPprofListener = defaultPprofListener
+ }
+
+ if options.GracefulShutdownTimeout == nil {
+ gracefulShutdownTimeout := defaultGracefulShutdownPeriod
+ options.GracefulShutdownTimeout = &gracefulShutdownTimeout
+ }
+
+ if options.Logger.GetSink() == nil {
+ options.Logger = log.Log
+ }
+
+ if options.BaseContext == nil {
+ options.BaseContext = defaultBaseContext
+ }
+
+ if options.WebhookServer == nil {
+ options.WebhookServer = webhook.NewServer(webhook.Options{})
+ }
+
+ return options
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/manager/runnable_group.go b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/runnable_group.go
new file mode 100644
index 00000000000..db5cda7c88f
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/runnable_group.go
@@ -0,0 +1,317 @@
+package manager
+
+import (
+ "context"
+ "errors"
+ "sync"
+
+ "sigs.k8s.io/controller-runtime/pkg/webhook"
+)
+
+var (
+ errRunnableGroupStopped = errors.New("can't accept new runnable as stop procedure is already engaged")
+)
+
+// readyRunnable encapsulates a runnable with
+// a ready check.
+type readyRunnable struct {
+ Runnable
+ Check runnableCheck
+ signalReady bool
+}
+
+// runnableCheck can be passed to Add() to let the runnable group determine that a
+// runnable is ready. A runnable check should block until a runnable is ready,
+// if the returned result is false, the runnable is considered not ready and failed.
+type runnableCheck func(ctx context.Context) bool
+
+// runnables handles all the runnables for a manager by grouping them accordingly to their
+// type (webhooks, caches etc.).
+type runnables struct {
+ HTTPServers *runnableGroup
+ Webhooks *runnableGroup
+ Caches *runnableGroup
+ LeaderElection *runnableGroup
+ Others *runnableGroup
+}
+
+// newRunnables creates a new runnables object.
+func newRunnables(baseContext BaseContextFunc, errChan chan error) *runnables {
+ return &runnables{
+ HTTPServers: newRunnableGroup(baseContext, errChan),
+ Webhooks: newRunnableGroup(baseContext, errChan),
+ Caches: newRunnableGroup(baseContext, errChan),
+ LeaderElection: newRunnableGroup(baseContext, errChan),
+ Others: newRunnableGroup(baseContext, errChan),
+ }
+}
+
+// Add adds a runnable to closest group of runnable that they belong to.
+//
+// Add should be able to be called before and after Start, but not after StopAndWait.
+// Add should return an error when called during StopAndWait.
+// The runnables added before Start are started when Start is called.
+// The runnables added after Start are started directly.
+func (r *runnables) Add(fn Runnable) error {
+ switch runnable := fn.(type) {
+ case *Server:
+ if runnable.NeedLeaderElection() {
+ return r.LeaderElection.Add(fn, nil)
+ }
+ return r.HTTPServers.Add(fn, nil)
+ case hasCache:
+ return r.Caches.Add(fn, func(ctx context.Context) bool {
+ return runnable.GetCache().WaitForCacheSync(ctx)
+ })
+ case webhook.Server:
+ return r.Webhooks.Add(fn, nil)
+ case LeaderElectionRunnable:
+ if !runnable.NeedLeaderElection() {
+ return r.Others.Add(fn, nil)
+ }
+ return r.LeaderElection.Add(fn, nil)
+ default:
+ return r.LeaderElection.Add(fn, nil)
+ }
+}
+
+// runnableGroup manages a group of runnables that are
+// meant to be running together until StopAndWait is called.
+//
+// Runnables can be added to a group after the group has started
+// but not after it's stopped or while shutting down.
+type runnableGroup struct {
+ ctx context.Context
+ cancel context.CancelFunc
+
+ start sync.Mutex
+ startOnce sync.Once
+ started bool
+ startQueue []*readyRunnable
+ startReadyCh chan *readyRunnable
+
+ stop sync.RWMutex
+ stopOnce sync.Once
+ stopped bool
+
+ // errChan is the error channel passed by the caller
+ // when the group is created.
+ // All errors are forwarded to this channel once they occur.
+ errChan chan error
+
+ // ch is the internal channel where the runnables are read off from.
+ ch chan *readyRunnable
+
+ // wg is an internal sync.WaitGroup that allows us to properly stop
+ // and wait for all the runnables to finish before returning.
+ wg *sync.WaitGroup
+}
+
+func newRunnableGroup(baseContext BaseContextFunc, errChan chan error) *runnableGroup {
+ r := &runnableGroup{
+ startReadyCh: make(chan *readyRunnable),
+ errChan: errChan,
+ ch: make(chan *readyRunnable),
+ wg: new(sync.WaitGroup),
+ }
+
+ r.ctx, r.cancel = context.WithCancel(baseContext())
+ return r
+}
+
+// Started returns true if the group has started.
+func (r *runnableGroup) Started() bool {
+ r.start.Lock()
+ defer r.start.Unlock()
+ return r.started
+}
+
+// Start starts the group and waits for all
+// initially registered runnables to start.
+// It can only be called once, subsequent calls have no effect.
+func (r *runnableGroup) Start(ctx context.Context) error {
+ var retErr error
+
+ r.startOnce.Do(func() {
+ defer close(r.startReadyCh)
+
+ // Start the internal reconciler.
+ go r.reconcile()
+
+ // Start the group and queue up all
+ // the runnables that were added prior.
+ r.start.Lock()
+ r.started = true
+ for _, rn := range r.startQueue {
+ rn.signalReady = true
+ r.ch <- rn
+ }
+ r.start.Unlock()
+
+ // If we don't have any queue, return.
+ if len(r.startQueue) == 0 {
+ return
+ }
+
+ // Wait for all runnables to signal.
+ for {
+ select {
+ case <-ctx.Done():
+ if err := ctx.Err(); !errors.Is(err, context.Canceled) {
+ retErr = err
+ }
+ case rn := <-r.startReadyCh:
+ for i, existing := range r.startQueue {
+ if existing == rn {
+ // Remove the item from the start queue.
+ r.startQueue = append(r.startQueue[:i], r.startQueue[i+1:]...)
+ break
+ }
+ }
+ // We're done waiting if the queue is empty, return.
+ if len(r.startQueue) == 0 {
+ return
+ }
+ }
+ }
+ })
+
+ return retErr
+}
+
+// reconcile is our main entrypoint for every runnable added
+// to this group. Its primary job is to read off the internal channel
+// and schedule runnables while tracking their state.
+func (r *runnableGroup) reconcile() {
+ for runnable := range r.ch {
+ // Handle stop.
+ // If the shutdown has been called we want to avoid
+ // adding new goroutines to the WaitGroup because Wait()
+ // panics if Add() is called after it.
+ {
+ r.stop.RLock()
+ if r.stopped {
+ // Drop any runnables if we're stopped.
+ r.errChan <- errRunnableGroupStopped
+ r.stop.RUnlock()
+ continue
+ }
+
+ // Why is this here?
+ // When StopAndWait is called, if a runnable is in the process
+ // of being added, we could end up in a situation where
+ // the WaitGroup is incremented while StopAndWait has called Wait(),
+ // which would result in a panic.
+ r.wg.Add(1)
+ r.stop.RUnlock()
+ }
+
+ // Start the runnable.
+ go func(rn *readyRunnable) {
+ go func() {
+ if rn.Check(r.ctx) {
+ if rn.signalReady {
+ r.startReadyCh <- rn
+ }
+ }
+ }()
+
+ // If we return, the runnable ended cleanly
+ // or returned an error to the channel.
+ //
+ // We should always decrement the WaitGroup here.
+ defer r.wg.Done()
+
+ // Start the runnable.
+ if err := rn.Start(r.ctx); err != nil {
+ r.errChan <- err
+ }
+ }(runnable)
+ }
+}
+
+// Add should be able to be called before and after Start, but not after StopAndWait.
+// Add should return an error when called during StopAndWait.
+func (r *runnableGroup) Add(rn Runnable, ready runnableCheck) error {
+ r.stop.RLock()
+ if r.stopped {
+ r.stop.RUnlock()
+ return errRunnableGroupStopped
+ }
+ r.stop.RUnlock()
+
+ if ready == nil {
+ ready = func(_ context.Context) bool { return true }
+ }
+
+ readyRunnable := &readyRunnable{
+ Runnable: rn,
+ Check: ready,
+ }
+
+ // Handle start.
+ // If the overall runnable group isn't started yet
+ // we want to buffer the runnables and let Start()
+ // queue them up again later.
+ {
+ r.start.Lock()
+
+ // Check if we're already started.
+ if !r.started {
+ // Store the runnable in the internal if not.
+ r.startQueue = append(r.startQueue, readyRunnable)
+ r.start.Unlock()
+ return nil
+ }
+ r.start.Unlock()
+ }
+
+ // Recheck if we're stopped and hold the readlock, given that the stop and start can be called
+ // at the same time, we can end up in a situation where the runnable is added
+ // after the group is stopped and the channel is closed.
+ r.stop.RLock()
+ defer r.stop.RUnlock()
+ if r.stopped {
+ return errRunnableGroupStopped
+ }
+
+ // Enqueue the runnable.
+ r.ch <- readyRunnable
+ return nil
+}
+
+// StopAndWait waits for all the runnables to finish before returning.
+func (r *runnableGroup) StopAndWait(ctx context.Context) {
+ r.stopOnce.Do(func() {
+ // Close the reconciler channel once we're done.
+ defer func() {
+ r.stop.Lock()
+ close(r.ch)
+ r.stop.Unlock()
+ }()
+
+ _ = r.Start(ctx)
+ r.stop.Lock()
+ // Store the stopped variable so we don't accept any new
+ // runnables for the time being.
+ r.stopped = true
+ r.stop.Unlock()
+
+ // Cancel the internal channel.
+ r.cancel()
+
+ done := make(chan struct{})
+ go func() {
+ defer close(done)
+ // Wait for all the runnables to finish.
+ r.wg.Wait()
+ }()
+
+ select {
+ case <-done:
+ // We're done, exit.
+ case <-ctx.Done():
+ // Calling context has expired, exit.
+ }
+ })
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/manager/server.go b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/server.go
new file mode 100644
index 00000000000..76f6165b532
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/server.go
@@ -0,0 +1,109 @@
+/*
+Copyright 2022 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 manager
+
+import (
+ "context"
+ "errors"
+ "net"
+ "net/http"
+ "time"
+
+ crlog "sigs.k8s.io/controller-runtime/pkg/log"
+)
+
+var (
+ _ Runnable = (*Server)(nil)
+ _ LeaderElectionRunnable = (*Server)(nil)
+)
+
+// Server is a general purpose HTTP server Runnable for a manager.
+// It is used to serve some internal handlers for health probes and profiling,
+// but it can also be used to run custom servers.
+type Server struct {
+ // Name is an optional string that describes the purpose of the server. It is used in logs to distinguish
+ // among multiple servers.
+ Name string
+
+ // Server is the HTTP server to run. It is required.
+ Server *http.Server
+
+ // Listener is an optional listener to use. If not set, the server start a listener using the server.Addr.
+ // Using a listener is useful when the port reservation needs to happen in advance of this runnable starting.
+ Listener net.Listener
+
+ // OnlyServeWhenLeader is an optional bool that indicates that the server should only be started when the manager is the leader.
+ OnlyServeWhenLeader bool
+
+ // ShutdownTimeout is an optional duration that indicates how long to wait for the server to shutdown gracefully. If not set,
+ // the server will wait indefinitely for all connections to close.
+ ShutdownTimeout *time.Duration
+}
+
+// Start starts the server. It will block until the server is stopped or an error occurs.
+func (s *Server) Start(ctx context.Context) error {
+ log := crlog.FromContext(ctx)
+ if s.Name != "" {
+ log = log.WithValues("name", s.Name)
+ }
+ log = log.WithValues("addr", s.addr())
+
+ serverShutdown := make(chan struct{})
+ go func() {
+ <-ctx.Done()
+ log.Info("shutting down server")
+
+ shutdownCtx := context.Background()
+ if s.ShutdownTimeout != nil {
+ var shutdownCancel context.CancelFunc
+ shutdownCtx, shutdownCancel = context.WithTimeout(context.Background(), *s.ShutdownTimeout)
+ defer shutdownCancel()
+ }
+
+ if err := s.Server.Shutdown(shutdownCtx); err != nil {
+ log.Error(err, "error shutting down server")
+ }
+ close(serverShutdown)
+ }()
+
+ log.Info("starting server")
+ if err := s.serve(); err != nil && !errors.Is(err, http.ErrServerClosed) {
+ return err
+ }
+
+ <-serverShutdown
+ return nil
+}
+
+// NeedLeaderElection returns true if the server should only be started when the manager is the leader.
+func (s *Server) NeedLeaderElection() bool {
+ return s.OnlyServeWhenLeader
+}
+
+func (s *Server) addr() string {
+ if s.Listener != nil {
+ return s.Listener.Addr().String()
+ }
+ return s.Server.Addr
+}
+
+func (s *Server) serve() error {
+ if s.Listener != nil {
+ return s.Server.Serve(s.Listener)
+ }
+ return s.Server.ListenAndServe()
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/doc.go
new file mode 100644
index 00000000000..737cc7eff28
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/doc.go
@@ -0,0 +1,20 @@
+/*
+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 signals contains libraries for handling signals to gracefully
+// shutdown the manager in combination with Kubernetes pod graceful termination
+// policy.
+package signals
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal.go b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal.go
new file mode 100644
index 00000000000..a79cfb42dfb
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal.go
@@ -0,0 +1,45 @@
+/*
+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 signals
+
+import (
+ "context"
+ "os"
+ "os/signal"
+)
+
+var onlyOneSignalHandler = make(chan struct{})
+
+// SetupSignalHandler registers for SIGTERM and SIGINT. A context is returned
+// which is canceled on one of these signals. If a second signal is caught, the program
+// is terminated with exit code 1.
+func SetupSignalHandler() context.Context {
+ close(onlyOneSignalHandler) // panics when called twice
+
+ ctx, cancel := context.WithCancel(context.Background())
+
+ c := make(chan os.Signal, 2)
+ signal.Notify(c, shutdownSignals...)
+ go func() {
+ <-c
+ cancel()
+ <-c
+ os.Exit(1) // second signal. Exit directly.
+ }()
+
+ return ctx
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal_posix.go b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal_posix.go
new file mode 100644
index 00000000000..a0f00a73213
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal_posix.go
@@ -0,0 +1,27 @@
+//go:build !windows
+// +build !windows
+
+/*
+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 signals
+
+import (
+ "os"
+ "syscall"
+)
+
+var shutdownSignals = []os.Signal{os.Interrupt, syscall.SIGTERM}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal_windows.go b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal_windows.go
new file mode 100644
index 00000000000..4907d573fe0
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals/signal_windows.go
@@ -0,0 +1,23 @@
+/*
+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 signals
+
+import (
+ "os"
+)
+
+var shutdownSignals = []os.Signal{os.Interrupt}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/client_go_adapter.go b/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/client_go_adapter.go
new file mode 100644
index 00000000000..ff28998c44c
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/client_go_adapter.go
@@ -0,0 +1,71 @@
+/*
+Copyright 2018 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 metrics
+
+import (
+ "context"
+
+ "github.com/prometheus/client_golang/prometheus"
+ clientmetrics "k8s.io/client-go/tools/metrics"
+)
+
+// this file contains setup logic to initialize the myriad of places
+// that client-go registers metrics. We copy the names and formats
+// from Kubernetes so that we match the core controllers.
+
+var (
+ // client metrics.
+
+ requestResult = prometheus.NewCounterVec(
+ prometheus.CounterOpts{
+ Name: "rest_client_requests_total",
+ Help: "Number of HTTP requests, partitioned by status code, method, and host.",
+ },
+ []string{"code", "method", "host"},
+ )
+)
+
+func init() {
+ registerClientMetrics()
+}
+
+// registerClientMetrics sets up the client latency metrics from client-go.
+func registerClientMetrics() {
+ // register the metrics with our registry
+ Registry.MustRegister(requestResult)
+
+ // register the metrics with client-go
+ clientmetrics.Register(clientmetrics.RegisterOpts{
+ RequestResult: &resultAdapter{metric: requestResult},
+ })
+}
+
+// this section contains adapters, implementations, and other sundry organic, artisanally
+// hand-crafted syntax trees required to convince client-go that it actually wants to let
+// someone use its metrics.
+
+// Client metrics adapters (method #1 for client-go metrics),
+// copied (more-or-less directly) from k8s.io/kubernetes setup code
+// (which isn't anywhere in an easily-importable place).
+
+type resultAdapter struct {
+ metric *prometheus.CounterVec
+}
+
+func (r *resultAdapter) Increment(_ context.Context, code, method, host string) {
+ r.metric.WithLabelValues(code, method, host).Inc()
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/doc.go
new file mode 100644
index 00000000000..6ed9df95140
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/doc.go
@@ -0,0 +1,20 @@
+/*
+Copyright 2018 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 metrics contains controller related metrics utilities
+*/
+package metrics
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/leaderelection.go b/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/leaderelection.go
new file mode 100644
index 00000000000..61e1009d32b
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/leaderelection.go
@@ -0,0 +1,47 @@
+package metrics
+
+import (
+ "github.com/prometheus/client_golang/prometheus"
+ "k8s.io/client-go/tools/leaderelection"
+)
+
+// This file is copied and adapted from k8s.io/component-base/metrics/prometheus/clientgo/leaderelection
+// which registers metrics to the k8s legacy Registry. We require very
+// similar functionality, but must register metrics to a different Registry.
+
+var (
+ leaderGauge = prometheus.NewGaugeVec(prometheus.GaugeOpts{
+ Name: "leader_election_master_status",
+ Help: "Gauge of if the reporting system is master of the relevant lease, 0 indicates backup, 1 indicates master. 'name' is the string used to identify the lease. Please make sure to group by name.",
+ }, []string{"name"})
+
+ leaderSlowpathCounter = prometheus.NewCounterVec(prometheus.CounterOpts{
+ Name: "leader_election_slowpath_total",
+ Help: "Total number of slow path exercised in renewing leader leases. 'name' is the string used to identify the lease. Please make sure to group by name.",
+ }, []string{"name"})
+)
+
+func init() {
+ Registry.MustRegister(leaderGauge)
+ leaderelection.SetProvider(leaderelectionMetricsProvider{})
+}
+
+type leaderelectionMetricsProvider struct{}
+
+func (leaderelectionMetricsProvider) NewLeaderMetric() leaderelection.LeaderMetric {
+ return leaderElectionPrometheusAdapter{}
+}
+
+type leaderElectionPrometheusAdapter struct{}
+
+func (s leaderElectionPrometheusAdapter) On(name string) {
+ leaderGauge.WithLabelValues(name).Set(1.0)
+}
+
+func (s leaderElectionPrometheusAdapter) Off(name string) {
+ leaderGauge.WithLabelValues(name).Set(0.0)
+}
+
+func (leaderElectionPrometheusAdapter) SlowpathExercised(name string) {
+ leaderSlowpathCounter.WithLabelValues(name).Inc()
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/registry.go b/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/registry.go
new file mode 100644
index 00000000000..ce17124d535
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/registry.go
@@ -0,0 +1,30 @@
+/*
+Copyright 2018 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 metrics
+
+import "github.com/prometheus/client_golang/prometheus"
+
+// RegistererGatherer combines both parts of the API of a Prometheus
+// registry, both the Registerer and the Gatherer interfaces.
+type RegistererGatherer interface {
+ prometheus.Registerer
+ prometheus.Gatherer
+}
+
+// Registry is a prometheus registry for storing metrics within the
+// controller-runtime.
+var Registry RegistererGatherer = prometheus.NewRegistry()
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/server/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/server/doc.go
new file mode 100644
index 00000000000..4c42f6eed7a
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/server/doc.go
@@ -0,0 +1,26 @@
+/*
+Copyright 2023 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 server provides the metrics server implementation.
+*/
+package server
+
+import (
+ logf "sigs.k8s.io/controller-runtime/pkg/internal/log"
+)
+
+var log = logf.RuntimeLog.WithName("metrics")
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/server/server.go b/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/server/server.go
new file mode 100644
index 00000000000..939c333f7a5
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/server/server.go
@@ -0,0 +1,340 @@
+/*
+Copyright 2018 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 server
+
+import (
+ "context"
+ "crypto/tls"
+ "fmt"
+ "net"
+ "net/http"
+ "os"
+ "path/filepath"
+ "sync"
+ "time"
+
+ "github.com/go-logr/logr"
+ "github.com/prometheus/client_golang/prometheus/promhttp"
+ "k8s.io/client-go/rest"
+ certutil "k8s.io/client-go/util/cert"
+
+ "sigs.k8s.io/controller-runtime/pkg/certwatcher"
+ "sigs.k8s.io/controller-runtime/pkg/internal/httpserver"
+ "sigs.k8s.io/controller-runtime/pkg/metrics"
+)
+
+const (
+ defaultMetricsEndpoint = "/metrics"
+)
+
+// DefaultBindAddress is the default bind address for the metrics server.
+var DefaultBindAddress = ":8080"
+
+// Server is a server that serves metrics.
+type Server interface {
+ // AddExtraHandler adds extra handler served on path to the http server that serves metrics.
+ AddExtraHandler(path string, handler http.Handler) error
+
+ // NeedLeaderElection implements the LeaderElectionRunnable interface, which indicates
+ // the metrics server doesn't need leader election.
+ NeedLeaderElection() bool
+
+ // Start runs the server.
+ // It will install the metrics related resources depending on the server configuration.
+ Start(ctx context.Context) error
+}
+
+// Options are all available options for the metrics.Server
+type Options struct {
+ // SecureServing enables serving metrics via https.
+ // Per default metrics will be served via http.
+ SecureServing bool
+
+ // BindAddress is the bind address for the metrics server.
+ // It will be defaulted to ":8080" if unspecified.
+ // Set this to "0" to disable the metrics server.
+ BindAddress string
+
+ // ExtraHandlers contains a map of handlers (by path) which will be added to the metrics server.
+ // This might be useful to register diagnostic endpoints e.g. pprof.
+ // Note that pprof endpoints are meant to be sensitive and shouldn't be exposed publicly.
+ // If the simple path -> handler mapping offered here is not enough, a new http
+ // server/listener should be added as Runnable to the manager via the Add method.
+ ExtraHandlers map[string]http.Handler
+
+ // FilterProvider provides a filter which is a func that is added around
+ // the metrics and the extra handlers on the metrics server.
+ // This can be e.g. used to enforce authentication and authorization on the handlers
+ // endpoint by setting this field to filters.WithAuthenticationAndAuthorization.
+ FilterProvider func(c *rest.Config, httpClient *http.Client) (Filter, error)
+
+ // CertDir is the directory that contains the server key and certificate. Defaults to
+ // /k8s-metrics-server/serving-certs.
+ //
+ // Note: This option is only used when TLSOpts does not set GetCertificate.
+ // Note: If certificate or key doesn't exist a self-signed certificate will be used.
+ CertDir string
+
+ // CertName is the server certificate name. Defaults to tls.crt.
+ //
+ // Note: This option is only used when TLSOpts does not set GetCertificate.
+ // Note: If certificate or key doesn't exist a self-signed certificate will be used.
+ CertName string
+
+ // KeyName is the server key name. Defaults to tls.key.
+ //
+ // Note: This option is only used when TLSOpts does not set GetCertificate.
+ // Note: If certificate or key doesn't exist a self-signed certificate will be used.
+ KeyName string
+
+ // TLSOpts is used to allow configuring the TLS config used for the server.
+ // This also allows providing a certificate via GetCertificate.
+ TLSOpts []func(*tls.Config)
+
+ // ListenConfig contains options for listening to an address on the metric server.
+ ListenConfig net.ListenConfig
+}
+
+// Filter is a func that is added around metrics and extra handlers on the metrics server.
+type Filter func(log logr.Logger, handler http.Handler) (http.Handler, error)
+
+// NewServer constructs a new metrics.Server from the provided options.
+func NewServer(o Options, config *rest.Config, httpClient *http.Client) (Server, error) {
+ o.setDefaults()
+
+ // Skip server creation if metrics are disabled.
+ if o.BindAddress == "0" {
+ return nil, nil
+ }
+
+ // Validate that ExtraHandlers is not overwriting the default /metrics endpoint.
+ if o.ExtraHandlers != nil {
+ if _, ok := o.ExtraHandlers[defaultMetricsEndpoint]; ok {
+ return nil, fmt.Errorf("overriding builtin %s endpoint is not allowed", defaultMetricsEndpoint)
+ }
+ }
+
+ // Create the metrics filter if a FilterProvider is set.
+ var metricsFilter Filter
+ if o.FilterProvider != nil {
+ var err error
+ metricsFilter, err = o.FilterProvider(config, httpClient)
+ if err != nil {
+ return nil, fmt.Errorf("filter provider failed to create filter for the metrics server: %w", err)
+ }
+ }
+
+ return &defaultServer{
+ metricsFilter: metricsFilter,
+ options: o,
+ }, nil
+}
+
+// defaultServer is the default implementation used for Server.
+type defaultServer struct {
+ options Options
+
+ // metricsFilter is a filter which is added around
+ // the metrics and the extra handlers on the metrics server.
+ metricsFilter Filter
+
+ // mu protects access to the bindAddr field.
+ mu sync.RWMutex
+
+ // bindAddr is used to store the bindAddr after the listener has been created.
+ // This is used during testing to figure out the port that has been chosen randomly.
+ bindAddr string
+}
+
+// setDefaults does defaulting for the Server.
+func (o *Options) setDefaults() {
+ if o.BindAddress == "" {
+ o.BindAddress = DefaultBindAddress
+ }
+
+ if len(o.CertDir) == 0 {
+ o.CertDir = filepath.Join(os.TempDir(), "k8s-metrics-server", "serving-certs")
+ }
+
+ if len(o.CertName) == 0 {
+ o.CertName = "tls.crt"
+ }
+
+ if len(o.KeyName) == 0 {
+ o.KeyName = "tls.key"
+ }
+}
+
+// NeedLeaderElection implements the LeaderElectionRunnable interface, which indicates
+// the metrics server doesn't need leader election.
+func (*defaultServer) NeedLeaderElection() bool {
+ return false
+}
+
+// AddExtraHandler adds extra handler served on path to the http server that serves metrics.
+func (s *defaultServer) AddExtraHandler(path string, handler http.Handler) error {
+ s.mu.Lock()
+ defer s.mu.Unlock()
+ if s.options.ExtraHandlers == nil {
+ s.options.ExtraHandlers = make(map[string]http.Handler)
+ }
+ if path == defaultMetricsEndpoint {
+ return fmt.Errorf("overriding builtin %s endpoint is not allowed", defaultMetricsEndpoint)
+ }
+ if _, found := s.options.ExtraHandlers[path]; found {
+ return fmt.Errorf("can't register extra handler by duplicate path %q on metrics http server", path)
+ }
+ s.options.ExtraHandlers[path] = handler
+ return nil
+}
+
+// Start runs the server.
+// It will install the metrics related resources depend on the server configuration.
+func (s *defaultServer) Start(ctx context.Context) error {
+ log.Info("Starting metrics server")
+
+ listener, err := s.createListener(ctx, log)
+ if err != nil {
+ return fmt.Errorf("failed to start metrics server: failed to create listener: %w", err)
+ }
+ // Storing bindAddr here so we can retrieve it during testing via GetBindAddr.
+ s.mu.Lock()
+ s.bindAddr = listener.Addr().String()
+ s.mu.Unlock()
+
+ mux := http.NewServeMux()
+
+ handler := promhttp.HandlerFor(metrics.Registry, promhttp.HandlerOpts{
+ ErrorHandling: promhttp.HTTPErrorOnError,
+ })
+ if s.metricsFilter != nil {
+ log := log.WithValues("path", defaultMetricsEndpoint)
+ var err error
+ handler, err = s.metricsFilter(log, handler)
+ if err != nil {
+ return fmt.Errorf("failed to start metrics server: failed to add metrics filter: %w", err)
+ }
+ }
+ // TODO(JoelSpeed): Use existing Kubernetes machinery for serving metrics
+ mux.Handle(defaultMetricsEndpoint, handler)
+
+ for path, extraHandler := range s.options.ExtraHandlers {
+ if s.metricsFilter != nil {
+ log := log.WithValues("path", path)
+ var err error
+ extraHandler, err = s.metricsFilter(log, extraHandler)
+ if err != nil {
+ return fmt.Errorf("failed to start metrics server: failed to add metrics filter to extra handler for path %s: %w", path, err)
+ }
+ }
+ mux.Handle(path, extraHandler)
+ }
+
+ log.Info("Serving metrics server", "bindAddress", s.options.BindAddress, "secure", s.options.SecureServing)
+
+ srv := httpserver.New(mux)
+
+ idleConnsClosed := make(chan struct{})
+ go func() {
+ <-ctx.Done()
+ log.Info("Shutting down metrics server with timeout of 1 minute")
+
+ ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
+ defer cancel()
+ if err := srv.Shutdown(ctx); err != nil {
+ // Error from closing listeners, or context timeout
+ log.Error(err, "error shutting down the HTTP server")
+ }
+ close(idleConnsClosed)
+ }()
+
+ if err := srv.Serve(listener); err != nil && err != http.ErrServerClosed {
+ return err
+ }
+
+ <-idleConnsClosed
+ return nil
+}
+
+func (s *defaultServer) createListener(ctx context.Context, log logr.Logger) (net.Listener, error) {
+ if !s.options.SecureServing {
+ return s.options.ListenConfig.Listen(ctx, "tcp", s.options.BindAddress)
+ }
+
+ cfg := &tls.Config{
+ NextProtos: []string{"h2"},
+ }
+ // fallback TLS config ready, will now mutate if passer wants full control over it
+ for _, op := range s.options.TLSOpts {
+ op(cfg)
+ }
+
+ if cfg.GetCertificate == nil {
+ certPath := filepath.Join(s.options.CertDir, s.options.CertName)
+ keyPath := filepath.Join(s.options.CertDir, s.options.KeyName)
+
+ _, certErr := os.Stat(certPath)
+ certExists := !os.IsNotExist(certErr)
+ _, keyErr := os.Stat(keyPath)
+ keyExists := !os.IsNotExist(keyErr)
+ if certExists && keyExists {
+ // Create the certificate watcher and
+ // set the config's GetCertificate on the TLSConfig
+ certWatcher, err := certwatcher.New(certPath, keyPath)
+ if err != nil {
+ return nil, err
+ }
+ cfg.GetCertificate = certWatcher.GetCertificate
+
+ go func() {
+ if err := certWatcher.Start(ctx); err != nil {
+ log.Error(err, "certificate watcher error")
+ }
+ }()
+ }
+ }
+
+ // If cfg.GetCertificate is still nil, i.e. we didn't configure a cert watcher, fallback to a self-signed certificate.
+ if cfg.GetCertificate == nil {
+ // Note: Using self-signed certificates here should be good enough. It's just important that we
+ // encrypt the communication. For example kube-controller-manager also uses a self-signed certificate
+ // for the metrics endpoint per default.
+ cert, key, err := certutil.GenerateSelfSignedCertKeyWithFixtures("localhost", []net.IP{{127, 0, 0, 1}}, nil, "")
+ if err != nil {
+ return nil, fmt.Errorf("failed to generate self-signed certificate for metrics server: %w", err)
+ }
+
+ keyPair, err := tls.X509KeyPair(cert, key)
+ if err != nil {
+ return nil, fmt.Errorf("failed to create self-signed key pair for metrics server: %w", err)
+ }
+ cfg.Certificates = []tls.Certificate{keyPair}
+ }
+
+ l, err := s.options.ListenConfig.Listen(ctx, "tcp", s.options.BindAddress)
+ if err != nil {
+ return nil, err
+ }
+
+ return tls.NewListener(l, cfg), nil
+}
+
+func (s *defaultServer) GetBindAddr() string {
+ s.mu.RLock()
+ defer s.mu.RUnlock()
+ return s.bindAddr
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/workqueue.go b/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/workqueue.go
new file mode 100644
index 00000000000..cd7ccc773ea
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/metrics/workqueue.go
@@ -0,0 +1,29 @@
+/*
+Copyright 2018 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 metrics
+
+// Metrics subsystem and all keys used by the workqueue.
+const (
+ WorkQueueSubsystem = "workqueue"
+ DepthKey = "depth"
+ AddsKey = "adds_total"
+ QueueLatencyKey = "queue_duration_seconds"
+ WorkDurationKey = "work_duration_seconds"
+ UnfinishedWorkKey = "unfinished_work_seconds"
+ LongestRunningProcessorKey = "longest_running_processor_seconds"
+ RetriesKey = "retries_total"
+)
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/predicate/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/predicate/doc.go
new file mode 100644
index 00000000000..e498107ef7f
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/predicate/doc.go
@@ -0,0 +1,20 @@
+/*
+Copyright 2018 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 predicate defines Predicates used by Controllers to filter Events before they are provided to EventHandlers.
+*/
+package predicate
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/predicate/predicate.go b/vendor/sigs.k8s.io/controller-runtime/pkg/predicate/predicate.go
new file mode 100644
index 00000000000..ce33975f3b5
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/predicate/predicate.go
@@ -0,0 +1,428 @@
+/*
+Copyright 2018 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 predicate
+
+import (
+ "maps"
+ "reflect"
+
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/labels"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/event"
+ logf "sigs.k8s.io/controller-runtime/pkg/internal/log"
+)
+
+var log = logf.RuntimeLog.WithName("predicate").WithName("eventFilters")
+
+// Predicate filters events before enqueuing the keys.
+type Predicate = TypedPredicate[client.Object]
+
+// TypedPredicate filters events before enqueuing the keys.
+type TypedPredicate[object any] interface {
+ // Create returns true if the Create event should be processed
+ Create(event.TypedCreateEvent[object]) bool
+
+ // Delete returns true if the Delete event should be processed
+ Delete(event.TypedDeleteEvent[object]) bool
+
+ // Update returns true if the Update event should be processed
+ Update(event.TypedUpdateEvent[object]) bool
+
+ // Generic returns true if the Generic event should be processed
+ Generic(event.TypedGenericEvent[object]) bool
+}
+
+var _ Predicate = Funcs{}
+var _ Predicate = ResourceVersionChangedPredicate{}
+var _ Predicate = GenerationChangedPredicate{}
+var _ Predicate = AnnotationChangedPredicate{}
+var _ Predicate = or[client.Object]{}
+var _ Predicate = and[client.Object]{}
+var _ Predicate = not[client.Object]{}
+
+// Funcs is a function that implements Predicate.
+type Funcs = TypedFuncs[client.Object]
+
+// TypedFuncs is a function that implements TypedPredicate.
+type TypedFuncs[object any] struct {
+ // Create returns true if the Create event should be processed
+ CreateFunc func(event.TypedCreateEvent[object]) bool
+
+ // Delete returns true if the Delete event should be processed
+ DeleteFunc func(event.TypedDeleteEvent[object]) bool
+
+ // Update returns true if the Update event should be processed
+ UpdateFunc func(event.TypedUpdateEvent[object]) bool
+
+ // Generic returns true if the Generic event should be processed
+ GenericFunc func(event.TypedGenericEvent[object]) bool
+}
+
+// Create implements Predicate.
+func (p TypedFuncs[object]) Create(e event.TypedCreateEvent[object]) bool {
+ if p.CreateFunc != nil {
+ return p.CreateFunc(e)
+ }
+ return true
+}
+
+// Delete implements Predicate.
+func (p TypedFuncs[object]) Delete(e event.TypedDeleteEvent[object]) bool {
+ if p.DeleteFunc != nil {
+ return p.DeleteFunc(e)
+ }
+ return true
+}
+
+// Update implements Predicate.
+func (p TypedFuncs[object]) Update(e event.TypedUpdateEvent[object]) bool {
+ if p.UpdateFunc != nil {
+ return p.UpdateFunc(e)
+ }
+ return true
+}
+
+// Generic implements Predicate.
+func (p TypedFuncs[object]) Generic(e event.TypedGenericEvent[object]) bool {
+ if p.GenericFunc != nil {
+ return p.GenericFunc(e)
+ }
+ return true
+}
+
+// NewPredicateFuncs returns a predicate funcs that applies the given filter function
+// on CREATE, UPDATE, DELETE and GENERIC events. For UPDATE events, the filter is applied
+// to the new object.
+func NewPredicateFuncs(filter func(object client.Object) bool) Funcs {
+ return Funcs{
+ CreateFunc: func(e event.CreateEvent) bool {
+ return filter(e.Object)
+ },
+ UpdateFunc: func(e event.UpdateEvent) bool {
+ return filter(e.ObjectNew)
+ },
+ DeleteFunc: func(e event.DeleteEvent) bool {
+ return filter(e.Object)
+ },
+ GenericFunc: func(e event.GenericEvent) bool {
+ return filter(e.Object)
+ },
+ }
+}
+
+// NewTypedPredicateFuncs returns a predicate funcs that applies the given filter function
+// on CREATE, UPDATE, DELETE and GENERIC events. For UPDATE events, the filter is applied
+// to the new object.
+func NewTypedPredicateFuncs[object any](filter func(object object) bool) TypedFuncs[object] {
+ return TypedFuncs[object]{
+ CreateFunc: func(e event.TypedCreateEvent[object]) bool {
+ return filter(e.Object)
+ },
+ UpdateFunc: func(e event.TypedUpdateEvent[object]) bool {
+ return filter(e.ObjectNew)
+ },
+ DeleteFunc: func(e event.TypedDeleteEvent[object]) bool {
+ return filter(e.Object)
+ },
+ GenericFunc: func(e event.TypedGenericEvent[object]) bool {
+ return filter(e.Object)
+ },
+ }
+}
+
+// ResourceVersionChangedPredicate implements a default update predicate function on resource version change.
+type ResourceVersionChangedPredicate = TypedResourceVersionChangedPredicate[client.Object]
+
+// TypedResourceVersionChangedPredicate implements a default update predicate function on resource version change.
+type TypedResourceVersionChangedPredicate[T metav1.Object] struct {
+ TypedFuncs[T]
+}
+
+// Update implements default UpdateEvent filter for validating resource version change.
+func (TypedResourceVersionChangedPredicate[T]) Update(e event.TypedUpdateEvent[T]) bool {
+ if isNil(e.ObjectOld) {
+ log.Error(nil, "Update event has no old object to update", "event", e)
+ return false
+ }
+ if isNil(e.ObjectNew) {
+ log.Error(nil, "Update event has no new object to update", "event", e)
+ return false
+ }
+
+ return e.ObjectNew.GetResourceVersion() != e.ObjectOld.GetResourceVersion()
+}
+
+// GenerationChangedPredicate implements a default update predicate function on Generation change.
+//
+// This predicate will skip update events that have no change in the object's metadata.generation field.
+// The metadata.generation field of an object is incremented by the API server when writes are made to the spec field of an object.
+// This allows a controller to ignore update events where the spec is unchanged, and only the metadata and/or status fields are changed.
+//
+// For CustomResource objects the Generation is incremented when spec is changed, or status changed and status not modeled as subresource.
+// subresource status update will not increase Generation.
+//
+// Caveats:
+//
+// * The assumption that the Generation is incremented only on writing to the spec does not hold for all APIs.
+// E.g For Deployment objects the Generation is also incremented on writes to the metadata.annotations field.
+// For object types other than CustomResources be sure to verify which fields will trigger a Generation increment when they are written to.
+//
+// * With this predicate, any update events with writes only to the status field will not be reconciled.
+// So in the event that the status block is overwritten or wiped by someone else the controller will not self-correct to restore the correct status.
+type GenerationChangedPredicate = TypedGenerationChangedPredicate[client.Object]
+
+// TypedGenerationChangedPredicate implements a default update predicate function on Generation change.
+//
+// This predicate will skip update events that have no change in the object's metadata.generation field.
+// The metadata.generation field of an object is incremented by the API server when writes are made to the spec field of an object.
+// This allows a controller to ignore update events where the spec is unchanged, and only the metadata and/or status fields are changed.
+//
+// For CustomResource objects the Generation is incremented when spec is changed, or status changed and status not modeled as subresource.
+// subresource status update will not increase Generation.
+//
+// Caveats:
+//
+// * The assumption that the Generation is incremented only on writing to the spec does not hold for all APIs.
+// E.g For Deployment objects the Generation is also incremented on writes to the metadata.annotations field.
+// For object types other than CustomResources be sure to verify which fields will trigger a Generation increment when they are written to.
+//
+// * With this predicate, any update events with writes only to the status field will not be reconciled.
+// So in the event that the status block is overwritten or wiped by someone else the controller will not self-correct to restore the correct status.
+type TypedGenerationChangedPredicate[object metav1.Object] struct {
+ TypedFuncs[object]
+}
+
+// Update implements default UpdateEvent filter for validating generation change.
+func (TypedGenerationChangedPredicate[object]) Update(e event.TypedUpdateEvent[object]) bool {
+ if isNil(e.ObjectOld) {
+ log.Error(nil, "Update event has no old object to update", "event", e)
+ return false
+ }
+ if isNil(e.ObjectNew) {
+ log.Error(nil, "Update event has no new object for update", "event", e)
+ return false
+ }
+
+ return e.ObjectNew.GetGeneration() != e.ObjectOld.GetGeneration()
+}
+
+// AnnotationChangedPredicate implements a default update predicate function on annotation change.
+//
+// This predicate will skip update events that have no change in the object's annotation.
+// It is intended to be used in conjunction with the GenerationChangedPredicate, as in the following example:
+//
+// Controller.Watch(
+// &source.Kind{Type: v1.MyCustomKind},
+// &handler.EnqueueRequestForObject{},
+// predicate.Or(predicate.GenerationChangedPredicate{}, predicate.AnnotationChangedPredicate{}))
+//
+// This is mostly useful for controllers that needs to trigger both when the resource's generation is incremented
+// (i.e., when the resource' .spec changes), or an annotation changes (e.g., for a staging/alpha API).
+type AnnotationChangedPredicate = TypedAnnotationChangedPredicate[client.Object]
+
+// TypedAnnotationChangedPredicate implements a default update predicate function on annotation change.
+type TypedAnnotationChangedPredicate[object metav1.Object] struct {
+ TypedFuncs[object]
+}
+
+// Update implements default UpdateEvent filter for validating annotation change.
+func (TypedAnnotationChangedPredicate[object]) Update(e event.TypedUpdateEvent[object]) bool {
+ if isNil(e.ObjectOld) {
+ log.Error(nil, "Update event has no old object to update", "event", e)
+ return false
+ }
+ if isNil(e.ObjectNew) {
+ log.Error(nil, "Update event has no new object for update", "event", e)
+ return false
+ }
+
+ return !maps.Equal(e.ObjectNew.GetAnnotations(), e.ObjectOld.GetAnnotations())
+}
+
+// LabelChangedPredicate implements a default update predicate function on label change.
+//
+// This predicate will skip update events that have no change in the object's label.
+// It is intended to be used in conjunction with the GenerationChangedPredicate, as in the following example:
+//
+// Controller.Watch(
+//
+// &source.Kind{Type: v1.MyCustomKind},
+// &handler.EnqueueRequestForObject{},
+// predicate.Or(predicate.GenerationChangedPredicate{}, predicate.LabelChangedPredicate{}))
+//
+// This will be helpful when object's labels is carrying some extra specification information beyond object's spec,
+// and the controller will be triggered if any valid spec change (not only in spec, but also in labels) happens.
+type LabelChangedPredicate = TypedLabelChangedPredicate[client.Object]
+
+// TypedLabelChangedPredicate implements a default update predicate function on label change.
+type TypedLabelChangedPredicate[object metav1.Object] struct {
+ TypedFuncs[object]
+}
+
+// Update implements default UpdateEvent filter for checking label change.
+func (TypedLabelChangedPredicate[object]) Update(e event.TypedUpdateEvent[object]) bool {
+ if isNil(e.ObjectOld) {
+ log.Error(nil, "Update event has no old object to update", "event", e)
+ return false
+ }
+ if isNil(e.ObjectNew) {
+ log.Error(nil, "Update event has no new object for update", "event", e)
+ return false
+ }
+
+ return !maps.Equal(e.ObjectNew.GetLabels(), e.ObjectOld.GetLabels())
+}
+
+// And returns a composite predicate that implements a logical AND of the predicates passed to it.
+func And[object any](predicates ...TypedPredicate[object]) TypedPredicate[object] {
+ return and[object]{predicates}
+}
+
+type and[object any] struct {
+ predicates []TypedPredicate[object]
+}
+
+func (a and[object]) Create(e event.TypedCreateEvent[object]) bool {
+ for _, p := range a.predicates {
+ if !p.Create(e) {
+ return false
+ }
+ }
+ return true
+}
+
+func (a and[object]) Update(e event.TypedUpdateEvent[object]) bool {
+ for _, p := range a.predicates {
+ if !p.Update(e) {
+ return false
+ }
+ }
+ return true
+}
+
+func (a and[object]) Delete(e event.TypedDeleteEvent[object]) bool {
+ for _, p := range a.predicates {
+ if !p.Delete(e) {
+ return false
+ }
+ }
+ return true
+}
+
+func (a and[object]) Generic(e event.TypedGenericEvent[object]) bool {
+ for _, p := range a.predicates {
+ if !p.Generic(e) {
+ return false
+ }
+ }
+ return true
+}
+
+// Or returns a composite predicate that implements a logical OR of the predicates passed to it.
+func Or[object any](predicates ...TypedPredicate[object]) TypedPredicate[object] {
+ return or[object]{predicates}
+}
+
+type or[object any] struct {
+ predicates []TypedPredicate[object]
+}
+
+func (o or[object]) Create(e event.TypedCreateEvent[object]) bool {
+ for _, p := range o.predicates {
+ if p.Create(e) {
+ return true
+ }
+ }
+ return false
+}
+
+func (o or[object]) Update(e event.TypedUpdateEvent[object]) bool {
+ for _, p := range o.predicates {
+ if p.Update(e) {
+ return true
+ }
+ }
+ return false
+}
+
+func (o or[object]) Delete(e event.TypedDeleteEvent[object]) bool {
+ for _, p := range o.predicates {
+ if p.Delete(e) {
+ return true
+ }
+ }
+ return false
+}
+
+func (o or[object]) Generic(e event.TypedGenericEvent[object]) bool {
+ for _, p := range o.predicates {
+ if p.Generic(e) {
+ return true
+ }
+ }
+ return false
+}
+
+// Not returns a predicate that implements a logical NOT of the predicate passed to it.
+func Not[object any](predicate TypedPredicate[object]) TypedPredicate[object] {
+ return not[object]{predicate}
+}
+
+type not[object any] struct {
+ predicate TypedPredicate[object]
+}
+
+func (n not[object]) Create(e event.TypedCreateEvent[object]) bool {
+ return !n.predicate.Create(e)
+}
+
+func (n not[object]) Update(e event.TypedUpdateEvent[object]) bool {
+ return !n.predicate.Update(e)
+}
+
+func (n not[object]) Delete(e event.TypedDeleteEvent[object]) bool {
+ return !n.predicate.Delete(e)
+}
+
+func (n not[object]) Generic(e event.TypedGenericEvent[object]) bool {
+ return !n.predicate.Generic(e)
+}
+
+// LabelSelectorPredicate constructs a Predicate from a LabelSelector.
+// Only objects matching the LabelSelector will be admitted.
+func LabelSelectorPredicate(s metav1.LabelSelector) (Predicate, error) {
+ selector, err := metav1.LabelSelectorAsSelector(&s)
+ if err != nil {
+ return Funcs{}, err
+ }
+ return NewPredicateFuncs(func(o client.Object) bool {
+ return selector.Matches(labels.Set(o.GetLabels()))
+ }), nil
+}
+
+func isNil(arg any) bool {
+ if v := reflect.ValueOf(arg); !v.IsValid() || ((v.Kind() == reflect.Ptr ||
+ v.Kind() == reflect.Interface ||
+ v.Kind() == reflect.Slice ||
+ v.Kind() == reflect.Map ||
+ v.Kind() == reflect.Chan ||
+ v.Kind() == reflect.Func) && v.IsNil()) {
+ return true
+ }
+ return false
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/reconcile/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/reconcile/doc.go
new file mode 100644
index 00000000000..d221dd7b3f4
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/reconcile/doc.go
@@ -0,0 +1,21 @@
+/*
+Copyright 2018 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 reconcile defines the Reconciler interface to implement Kubernetes APIs. Reconciler is provided
+to Controllers at creation time as the API implementation.
+*/
+package reconcile
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/reconcile/reconcile.go b/vendor/sigs.k8s.io/controller-runtime/pkg/reconcile/reconcile.go
new file mode 100644
index 00000000000..ee63f681ccc
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/reconcile/reconcile.go
@@ -0,0 +1,182 @@
+/*
+Copyright 2018 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 reconcile
+
+import (
+ "context"
+ "errors"
+ "reflect"
+ "time"
+
+ "k8s.io/apimachinery/pkg/types"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+)
+
+// Result contains the result of a Reconciler invocation.
+type Result struct {
+ // Requeue tells the Controller to requeue the reconcile key. Defaults to false.
+ Requeue bool
+
+ // RequeueAfter if greater than 0, tells the Controller to requeue the reconcile key after the Duration.
+ // Implies that Requeue is true, there is no need to set Requeue to true at the same time as RequeueAfter.
+ RequeueAfter time.Duration
+}
+
+// IsZero returns true if this result is empty.
+func (r *Result) IsZero() bool {
+ if r == nil {
+ return true
+ }
+ return *r == Result{}
+}
+
+// Request contains the information necessary to reconcile a Kubernetes object. This includes the
+// information to uniquely identify the object - its Name and Namespace. It does NOT contain information about
+// any specific Event or the object contents itself.
+type Request struct {
+ // NamespacedName is the name and namespace of the object to reconcile.
+ types.NamespacedName
+}
+
+/*
+Reconciler implements a Kubernetes API for a specific Resource by Creating, Updating or Deleting Kubernetes
+objects, or by making changes to systems external to the cluster (e.g. cloudproviders, github, etc).
+
+reconcile implementations compare the state specified in an object by a user against the actual cluster state,
+and then perform operations to make the actual cluster state reflect the state specified by the user.
+
+Typically, reconcile is triggered by a Controller in response to cluster Events (e.g. Creating, Updating,
+Deleting Kubernetes objects) or external Events (GitHub Webhooks, polling external sources, etc).
+
+Example reconcile Logic:
+
+* Read an object and all the Pods it owns.
+* Observe that the object spec specifies 5 replicas but actual cluster contains only 1 Pod replica.
+* Create 4 Pods and set their OwnerReferences to the object.
+
+reconcile may be implemented as either a type:
+
+ type reconciler struct {}
+
+ func (reconciler) Reconcile(ctx context.Context, o reconcile.Request) (reconcile.Result, error) {
+ // Implement business logic of reading and writing objects here
+ return reconcile.Result{}, nil
+ }
+
+Or as a function:
+
+ reconcile.Func(func(ctx context.Context, o reconcile.Request) (reconcile.Result, error) {
+ // Implement business logic of reading and writing objects here
+ return reconcile.Result{}, nil
+ })
+
+Reconciliation is level-based, meaning action isn't driven off changes in individual Events, but instead is
+driven by actual cluster state read from the apiserver or a local cache.
+For example if responding to a Pod Delete Event, the Request won't contain that a Pod was deleted,
+instead the reconcile function observes this when reading the cluster state and seeing the Pod as missing.
+*/
+type Reconciler = TypedReconciler[Request]
+
+// TypedReconciler implements an API for a specific Resource by Creating, Updating or Deleting Kubernetes
+// objects, or by making changes to systems external to the cluster (e.g. cloudproviders, github, etc).
+//
+// The request type is what event handlers put into the workqueue. The workqueue then de-duplicates identical
+// requests.
+type TypedReconciler[request comparable] interface {
+ // Reconcile performs a full reconciliation for the object referred to by the Request.
+ //
+ // If the returned error is non-nil, the Result is ignored and the request will be
+ // requeued using exponential backoff. The only exception is if the error is a
+ // TerminalError in which case no requeuing happens.
+ //
+ // If the error is nil and the returned Result has a non-zero result.RequeueAfter, the request
+ // will be requeued after the specified duration.
+ //
+ // If the error is nil and result.RequeueAfter is zero and result.Requeue is true, the request
+ // will be requeued using exponential backoff.
+ Reconcile(context.Context, request) (Result, error)
+}
+
+// Func is a function that implements the reconcile interface.
+type Func = TypedFunc[Request]
+
+// TypedFunc is a function that implements the reconcile interface.
+type TypedFunc[request comparable] func(context.Context, request) (Result, error)
+
+var _ Reconciler = Func(nil)
+
+// Reconcile implements Reconciler.
+func (r TypedFunc[request]) Reconcile(ctx context.Context, req request) (Result, error) {
+ return r(ctx, req)
+}
+
+// ObjectReconciler is a specialized version of Reconciler that acts on instances of client.Object. Each reconciliation
+// event gets the associated object from Kubernetes before passing it to Reconcile. An ObjectReconciler can be used in
+// Builder.Complete by calling AsReconciler. See Reconciler for more details.
+type ObjectReconciler[object client.Object] interface {
+ Reconcile(context.Context, object) (Result, error)
+}
+
+// AsReconciler creates a Reconciler based on the given ObjectReconciler.
+func AsReconciler[object client.Object](client client.Client, rec ObjectReconciler[object]) Reconciler {
+ return &objectReconcilerAdapter[object]{
+ objReconciler: rec,
+ client: client,
+ }
+}
+
+type objectReconcilerAdapter[object client.Object] struct {
+ objReconciler ObjectReconciler[object]
+ client client.Client
+}
+
+// Reconcile implements Reconciler.
+func (a *objectReconcilerAdapter[object]) Reconcile(ctx context.Context, req Request) (Result, error) {
+ o := reflect.New(reflect.TypeOf(*new(object)).Elem()).Interface().(object)
+ if err := a.client.Get(ctx, req.NamespacedName, o); err != nil {
+ return Result{}, client.IgnoreNotFound(err)
+ }
+
+ return a.objReconciler.Reconcile(ctx, o)
+}
+
+// TerminalError is an error that will not be retried but still be logged
+// and recorded in metrics.
+func TerminalError(wrapped error) error {
+ return &terminalError{err: wrapped}
+}
+
+type terminalError struct {
+ err error
+}
+
+// This function will return nil if te.err is nil.
+func (te *terminalError) Unwrap() error {
+ return te.err
+}
+
+func (te *terminalError) Error() string {
+ if te.err == nil {
+ return "nil terminal error"
+ }
+ return "terminal error: " + te.err.Error()
+}
+
+func (te *terminalError) Is(target error) bool {
+ tp := &terminalError{}
+ return errors.As(target, &tp)
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/recorder/recorder.go b/vendor/sigs.k8s.io/controller-runtime/pkg/recorder/recorder.go
new file mode 100644
index 00000000000..f093f0a7266
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/recorder/recorder.go
@@ -0,0 +1,31 @@
+/*
+Copyright 2018 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 recorder defines interfaces for working with Kubernetes event recorders.
+//
+// You can use these to emit Kubernetes events associated with a particular Kubernetes
+// object.
+package recorder
+
+import (
+ "k8s.io/client-go/tools/record"
+)
+
+// Provider knows how to generate new event recorders with given name.
+type Provider interface {
+ // NewRecorder returns an EventRecorder with given name.
+ GetEventRecorderFor(name string) record.EventRecorder
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/source/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/source/doc.go
new file mode 100644
index 00000000000..31935c83c18
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/source/doc.go
@@ -0,0 +1,22 @@
+/*
+Copyright 2018 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 source provides event streams to hook up to Controllers with Controller.Watch. Events are
+used with handler.EventHandlers to enqueue reconcile.Requests and trigger Reconciles for Kubernetes
+objects.
+*/
+package source
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/source/source.go b/vendor/sigs.k8s.io/controller-runtime/pkg/source/source.go
new file mode 100644
index 00000000000..267a6470b86
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/source/source.go
@@ -0,0 +1,311 @@
+/*
+Copyright 2018 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 source
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "sync"
+
+ "k8s.io/client-go/util/workqueue"
+ "k8s.io/utils/ptr"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/event"
+ "sigs.k8s.io/controller-runtime/pkg/handler"
+ internal "sigs.k8s.io/controller-runtime/pkg/internal/source"
+ "sigs.k8s.io/controller-runtime/pkg/reconcile"
+
+ "sigs.k8s.io/controller-runtime/pkg/cache"
+ "sigs.k8s.io/controller-runtime/pkg/predicate"
+)
+
+// Source is a source of events (e.g. Create, Update, Delete operations on Kubernetes Objects, Webhook callbacks, etc)
+// which should be processed by event.EventHandlers to enqueue reconcile.Requests.
+//
+// * Use Kind for events originating in the cluster (e.g. Pod Create, Pod Update, Deployment Update).
+//
+// * Use Channel for events originating outside the cluster (e.g. GitHub Webhook callback, Polling external urls).
+//
+// Users may build their own Source implementations.
+type Source = TypedSource[reconcile.Request]
+
+// TypedSource is a generic source of events (e.g. Create, Update, Delete operations on Kubernetes Objects, Webhook callbacks, etc)
+// which should be processed by event.EventHandlers to enqueue a request.
+//
+// * Use Kind for events originating in the cluster (e.g. Pod Create, Pod Update, Deployment Update).
+//
+// * Use Channel for events originating outside the cluster (e.g. GitHub Webhook callback, Polling external urls).
+//
+// Users may build their own Source implementations.
+type TypedSource[request comparable] interface {
+ // Start is internal and should be called only by the Controller to start the source.
+ // Start must be non-blocking.
+ Start(context.Context, workqueue.TypedRateLimitingInterface[request]) error
+}
+
+// SyncingSource is a source that needs syncing prior to being usable. The controller
+// will call its WaitForSync prior to starting workers.
+type SyncingSource = TypedSyncingSource[reconcile.Request]
+
+// TypedSyncingSource is a source that needs syncing prior to being usable. The controller
+// will call its WaitForSync prior to starting workers.
+type TypedSyncingSource[request comparable] interface {
+ TypedSource[request]
+ WaitForSync(ctx context.Context) error
+}
+
+// Kind creates a KindSource with the given cache provider.
+func Kind[object client.Object](
+ cache cache.Cache,
+ obj object,
+ handler handler.TypedEventHandler[object, reconcile.Request],
+ predicates ...predicate.TypedPredicate[object],
+) SyncingSource {
+ return TypedKind(cache, obj, handler, predicates...)
+}
+
+// TypedKind creates a KindSource with the given cache provider.
+func TypedKind[object client.Object, request comparable](
+ cache cache.Cache,
+ obj object,
+ handler handler.TypedEventHandler[object, request],
+ predicates ...predicate.TypedPredicate[object],
+) TypedSyncingSource[request] {
+ return &internal.Kind[object, request]{
+ Type: obj,
+ Cache: cache,
+ Handler: handler,
+ Predicates: predicates,
+ }
+}
+
+var _ Source = &channel[string, reconcile.Request]{}
+
+// ChannelOpt allows to configure a source.Channel.
+type ChannelOpt[object any, request comparable] func(*channel[object, request])
+
+// WithPredicates adds the configured predicates to a source.Channel.
+func WithPredicates[object any, request comparable](p ...predicate.TypedPredicate[object]) ChannelOpt[object, request] {
+ return func(c *channel[object, request]) {
+ c.predicates = append(c.predicates, p...)
+ }
+}
+
+// WithBufferSize configures the buffer size for a source.Channel. By
+// default, the buffer size is 1024.
+func WithBufferSize[object any, request comparable](bufferSize int) ChannelOpt[object, request] {
+ return func(c *channel[object, request]) {
+ c.bufferSize = &bufferSize
+ }
+}
+
+// Channel is used to provide a source of events originating outside the cluster
+// (e.g. GitHub Webhook callback). Channel requires the user to wire the external
+// source (e.g. http handler) to write GenericEvents to the underlying channel.
+func Channel[object any](
+ source <-chan event.TypedGenericEvent[object],
+ handler handler.TypedEventHandler[object, reconcile.Request],
+ opts ...ChannelOpt[object, reconcile.Request],
+) Source {
+ return TypedChannel[object, reconcile.Request](source, handler, opts...)
+}
+
+// TypedChannel is used to provide a source of events originating outside the cluster
+// (e.g. GitHub Webhook callback). Channel requires the user to wire the external
+// source (e.g. http handler) to write GenericEvents to the underlying channel.
+func TypedChannel[object any, request comparable](
+ source <-chan event.TypedGenericEvent[object],
+ handler handler.TypedEventHandler[object, request],
+ opts ...ChannelOpt[object, request],
+) TypedSource[request] {
+ c := &channel[object, request]{
+ source: source,
+ handler: handler,
+ }
+ for _, opt := range opts {
+ opt(c)
+ }
+
+ return c
+}
+
+type channel[object any, request comparable] struct {
+ // once ensures the event distribution goroutine will be performed only once
+ once sync.Once
+
+ // source is the source channel to fetch GenericEvents
+ source <-chan event.TypedGenericEvent[object]
+
+ handler handler.TypedEventHandler[object, request]
+
+ predicates []predicate.TypedPredicate[object]
+
+ bufferSize *int
+
+ // dest is the destination channels of the added event handlers
+ dest []chan event.TypedGenericEvent[object]
+
+ // destLock is to ensure the destination channels are safely added/removed
+ destLock sync.Mutex
+}
+
+func (cs *channel[object, request]) String() string {
+ return fmt.Sprintf("channel source: %p", cs)
+}
+
+// Start implements Source and should only be called by the Controller.
+func (cs *channel[object, request]) Start(
+ ctx context.Context,
+ queue workqueue.TypedRateLimitingInterface[request],
+) error {
+ // Source should have been specified by the user.
+ if cs.source == nil {
+ return fmt.Errorf("must specify Channel.Source")
+ }
+ if cs.handler == nil {
+ return errors.New("must specify Channel.Handler")
+ }
+
+ if cs.bufferSize == nil {
+ cs.bufferSize = ptr.To(1024)
+ }
+
+ dst := make(chan event.TypedGenericEvent[object], *cs.bufferSize)
+
+ cs.destLock.Lock()
+ cs.dest = append(cs.dest, dst)
+ cs.destLock.Unlock()
+
+ cs.once.Do(func() {
+ // Distribute GenericEvents to all EventHandler / Queue pairs Watching this source
+ go cs.syncLoop(ctx)
+ })
+
+ go func() {
+ for evt := range dst {
+ shouldHandle := true
+ for _, p := range cs.predicates {
+ if !p.Generic(evt) {
+ shouldHandle = false
+ break
+ }
+ }
+
+ if shouldHandle {
+ func() {
+ ctx, cancel := context.WithCancel(ctx)
+ defer cancel()
+ cs.handler.Generic(ctx, evt, queue)
+ }()
+ }
+ }
+ }()
+
+ return nil
+}
+
+func (cs *channel[object, request]) doStop() {
+ cs.destLock.Lock()
+ defer cs.destLock.Unlock()
+
+ for _, dst := range cs.dest {
+ close(dst)
+ }
+}
+
+func (cs *channel[object, request]) distribute(evt event.TypedGenericEvent[object]) {
+ cs.destLock.Lock()
+ defer cs.destLock.Unlock()
+
+ for _, dst := range cs.dest {
+ // We cannot make it under goroutine here, or we'll meet the
+ // race condition of writing message to closed channels.
+ // To avoid blocking, the dest channels are expected to be of
+ // proper buffer size. If we still see it blocked, then
+ // the controller is thought to be in an abnormal state.
+ dst <- evt
+ }
+}
+
+func (cs *channel[object, request]) syncLoop(ctx context.Context) {
+ for {
+ select {
+ case <-ctx.Done():
+ // Close destination channels
+ cs.doStop()
+ return
+ case evt, stillOpen := <-cs.source:
+ if !stillOpen {
+ // if the source channel is closed, we're never gonna get
+ // anything more on it, so stop & bail
+ cs.doStop()
+ return
+ }
+ cs.distribute(evt)
+ }
+ }
+}
+
+// Informer is used to provide a source of events originating inside the cluster from Watches (e.g. Pod Create).
+type Informer struct {
+ // Informer is the controller-runtime Informer
+ Informer cache.Informer
+ Handler handler.EventHandler
+ Predicates []predicate.Predicate
+}
+
+var _ Source = &Informer{}
+
+// Start is internal and should be called only by the Controller to register an EventHandler with the Informer
+// to enqueue reconcile.Requests.
+func (is *Informer) Start(ctx context.Context, queue workqueue.TypedRateLimitingInterface[reconcile.Request]) error {
+ // Informer should have been specified by the user.
+ if is.Informer == nil {
+ return fmt.Errorf("must specify Informer.Informer")
+ }
+ if is.Handler == nil {
+ return errors.New("must specify Informer.Handler")
+ }
+
+ _, err := is.Informer.AddEventHandler(internal.NewEventHandler(ctx, queue, is.Handler, is.Predicates).HandlerFuncs())
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+func (is *Informer) String() string {
+ return fmt.Sprintf("informer source: %p", is.Informer)
+}
+
+var _ Source = Func(nil)
+
+// Func is a function that implements Source.
+type Func = TypedFunc[reconcile.Request]
+
+// TypedFunc is a function that implements Source.
+type TypedFunc[request comparable] func(context.Context, workqueue.TypedRateLimitingInterface[request]) error
+
+// Start implements Source.
+func (f TypedFunc[request]) Start(ctx context.Context, queue workqueue.TypedRateLimitingInterface[request]) error {
+ return f(ctx, queue)
+}
+
+func (f TypedFunc[request]) String() string {
+ return fmt.Sprintf("func source: %p", f)
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/decode.go b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/decode.go
new file mode 100644
index 00000000000..55f1cafb5ea
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/decode.go
@@ -0,0 +1,92 @@
+/*
+Copyright 2018 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 admission
+
+import (
+ "fmt"
+
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/serializer"
+ "k8s.io/apimachinery/pkg/util/json"
+)
+
+// Decoder knows how to decode the contents of an admission
+// request into a concrete object.
+type Decoder interface {
+ // Decode decodes the inlined object in the AdmissionRequest into the passed-in runtime.Object.
+ // If you want decode the OldObject in the AdmissionRequest, use DecodeRaw.
+ // It errors out if req.Object.Raw is empty i.e. containing 0 raw bytes.
+ Decode(req Request, into runtime.Object) error
+
+ // DecodeRaw decodes a RawExtension object into the passed-in runtime.Object.
+ // It errors out if rawObj is empty i.e. containing 0 raw bytes.
+ DecodeRaw(rawObj runtime.RawExtension, into runtime.Object) error
+}
+
+// decoder knows how to decode the contents of an admission
+// request into a concrete object.
+type decoder struct {
+ codecs serializer.CodecFactory
+}
+
+// NewDecoder creates a decoder given the runtime.Scheme.
+func NewDecoder(scheme *runtime.Scheme) Decoder {
+ if scheme == nil {
+ panic("scheme should never be nil")
+ }
+ return &decoder{codecs: serializer.NewCodecFactory(scheme)}
+}
+
+// Decode decodes the inlined object in the AdmissionRequest into the passed-in runtime.Object.
+// If you want decode the OldObject in the AdmissionRequest, use DecodeRaw.
+// It errors out if req.Object.Raw is empty i.e. containing 0 raw bytes.
+func (d *decoder) Decode(req Request, into runtime.Object) error {
+ // we error out if rawObj is an empty object.
+ if len(req.Object.Raw) == 0 {
+ return fmt.Errorf("there is no content to decode")
+ }
+ return d.DecodeRaw(req.Object, into)
+}
+
+// DecodeRaw decodes a RawExtension object into the passed-in runtime.Object.
+// It errors out if rawObj is empty i.e. containing 0 raw bytes.
+func (d *decoder) DecodeRaw(rawObj runtime.RawExtension, into runtime.Object) error {
+ // NB(directxman12): there's a bug/weird interaction between decoders and
+ // the API server where the API server doesn't send a GVK on the embedded
+ // objects, which means the unstructured decoder refuses to decode. It
+ // also means we can't pass the unstructured directly in, since it'll try
+ // and call unstructured's special Unmarshal implementation, which calls
+ // back into that same decoder :-/
+ // See kubernetes/kubernetes#74373.
+
+ // we error out if rawObj is an empty object.
+ if len(rawObj.Raw) == 0 {
+ return fmt.Errorf("there is no content to decode")
+ }
+ if unstructuredInto, isUnstructured := into.(runtime.Unstructured); isUnstructured {
+ // unmarshal into unstructured's underlying object to avoid calling the decoder
+ var object map[string]interface{}
+ if err := json.Unmarshal(rawObj.Raw, &object); err != nil {
+ return err
+ }
+ unstructuredInto.SetUnstructuredContent(object)
+ return nil
+ }
+
+ deserializer := d.codecs.UniversalDeserializer()
+ return runtime.DecodeInto(deserializer, rawObj.Raw, into)
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/defaulter_custom.go b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/defaulter_custom.go
new file mode 100644
index 00000000000..a703cbd2c54
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/defaulter_custom.go
@@ -0,0 +1,165 @@
+/*
+Copyright 2021 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 admission
+
+import (
+ "context"
+ "encoding/json"
+ "errors"
+ "net/http"
+ "slices"
+
+ "gomodules.xyz/jsonpatch/v2"
+ admissionv1 "k8s.io/api/admission/v1"
+ apierrors "k8s.io/apimachinery/pkg/api/errors"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/util/sets"
+)
+
+// CustomDefaulter defines functions for setting defaults on resources.
+type CustomDefaulter interface {
+ Default(ctx context.Context, obj runtime.Object) error
+}
+
+type defaulterOptions struct {
+ removeUnknownOrOmitableFields bool
+}
+
+// DefaulterOption defines the type of a CustomDefaulter's option
+type DefaulterOption func(*defaulterOptions)
+
+// DefaulterRemoveUnknownOrOmitableFields makes the defaulter prune fields that are in the json object retrieved by the
+// webhook but not in the local go type json representation. This happens for example when the CRD in the apiserver has
+// fields that our go type doesn't know about, because it's outdated, or the field has a zero value and is `omitempty`.
+func DefaulterRemoveUnknownOrOmitableFields(o *defaulterOptions) {
+ o.removeUnknownOrOmitableFields = true
+}
+
+// WithCustomDefaulter creates a new Webhook for a CustomDefaulter interface.
+func WithCustomDefaulter(scheme *runtime.Scheme, obj runtime.Object, defaulter CustomDefaulter, opts ...DefaulterOption) *Webhook {
+ options := &defaulterOptions{}
+ for _, o := range opts {
+ o(options)
+ }
+ return &Webhook{
+ Handler: &defaulterForType{
+ object: obj,
+ defaulter: defaulter,
+ decoder: NewDecoder(scheme),
+ removeUnknownOrOmitableFields: options.removeUnknownOrOmitableFields,
+ },
+ }
+}
+
+type defaulterForType struct {
+ defaulter CustomDefaulter
+ object runtime.Object
+ decoder Decoder
+ removeUnknownOrOmitableFields bool
+}
+
+// Handle handles admission requests.
+func (h *defaulterForType) Handle(ctx context.Context, req Request) Response {
+ if h.decoder == nil {
+ panic("decoder should never be nil")
+ }
+ if h.defaulter == nil {
+ panic("defaulter should never be nil")
+ }
+ if h.object == nil {
+ panic("object should never be nil")
+ }
+
+ // Always skip when a DELETE operation received in custom mutation handler.
+ if req.Operation == admissionv1.Delete {
+ return Response{AdmissionResponse: admissionv1.AdmissionResponse{
+ Allowed: true,
+ Result: &metav1.Status{
+ Code: http.StatusOK,
+ },
+ }}
+ }
+
+ ctx = NewContextWithRequest(ctx, req)
+
+ // Get the object in the request
+ obj := h.object.DeepCopyObject()
+ if err := h.decoder.Decode(req, obj); err != nil {
+ return Errored(http.StatusBadRequest, err)
+ }
+
+ // Keep a copy of the object if needed
+ var originalObj runtime.Object
+ if !h.removeUnknownOrOmitableFields {
+ originalObj = obj.DeepCopyObject()
+ }
+
+ // Default the object
+ if err := h.defaulter.Default(ctx, obj); err != nil {
+ var apiStatus apierrors.APIStatus
+ if errors.As(err, &apiStatus) {
+ return validationResponseFromStatus(false, apiStatus.Status())
+ }
+ return Denied(err.Error())
+ }
+
+ // Create the patch
+ marshalled, err := json.Marshal(obj)
+ if err != nil {
+ return Errored(http.StatusInternalServerError, err)
+ }
+
+ handlerResponse := PatchResponseFromRaw(req.Object.Raw, marshalled)
+ if !h.removeUnknownOrOmitableFields {
+ handlerResponse = h.dropSchemeRemovals(handlerResponse, originalObj, req.Object.Raw)
+ }
+ return handlerResponse
+}
+
+func (h *defaulterForType) dropSchemeRemovals(r Response, original runtime.Object, raw []byte) Response {
+ const opRemove = "remove"
+ if !r.Allowed || r.PatchType == nil {
+ return r
+ }
+
+ // If we don't have removals in the patch.
+ if !slices.ContainsFunc(r.Patches, func(o jsonpatch.JsonPatchOperation) bool { return o.Operation == opRemove }) {
+ return r
+ }
+
+ // Get the raw to original patch
+ marshalledOriginal, err := json.Marshal(original)
+ if err != nil {
+ return Errored(http.StatusInternalServerError, err)
+ }
+
+ patchOriginal, err := jsonpatch.CreatePatch(raw, marshalledOriginal)
+ if err != nil {
+ return Errored(http.StatusInternalServerError, err)
+ }
+ removedByScheme := sets.New(slices.DeleteFunc(patchOriginal, func(p jsonpatch.JsonPatchOperation) bool { return p.Operation != opRemove })...)
+
+ r.Patches = slices.DeleteFunc(r.Patches, func(p jsonpatch.JsonPatchOperation) bool {
+ return p.Operation == opRemove && removedByScheme.Has(p)
+ })
+
+ if len(r.Patches) == 0 {
+ r.PatchType = nil
+ }
+ return r
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/doc.go
new file mode 100644
index 00000000000..8dc0cbec6f7
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/doc.go
@@ -0,0 +1,22 @@
+/*
+Copyright 2018 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 admission provides implementation for admission webhook and methods to implement admission webhook handlers.
+
+See examples/mutatingwebhook.go and examples/validatingwebhook.go for examples of admission webhooks.
+*/
+package admission
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/http.go b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/http.go
new file mode 100644
index 00000000000..f049fb66e6a
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/http.go
@@ -0,0 +1,173 @@
+/*
+Copyright 2018 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 admission
+
+import (
+ "encoding/json"
+ "errors"
+ "fmt"
+ "io"
+ "net/http"
+
+ v1 "k8s.io/api/admission/v1"
+ "k8s.io/api/admission/v1beta1"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "k8s.io/apimachinery/pkg/runtime/serializer"
+ utilruntime "k8s.io/apimachinery/pkg/util/runtime"
+)
+
+var admissionScheme = runtime.NewScheme()
+var admissionCodecs = serializer.NewCodecFactory(admissionScheme)
+
+// adapted from https://github.com/kubernetes/kubernetes/blob/c28c2009181fcc44c5f6b47e10e62dacf53e4da0/staging/src/k8s.io/pod-security-admission/cmd/webhook/server/server.go
+//
+// From https://github.com/kubernetes/apiserver/blob/d6876a0600de06fef75968c4641c64d7da499f25/pkg/server/config.go#L433-L442C5:
+//
+// 1.5MB is the recommended client request size in byte
+// the etcd server should accept. See
+// https://github.com/etcd-io/etcd/blob/release-3.4/embed/config.go#L56.
+// A request body might be encoded in json, and is converted to
+// proto when persisted in etcd, so we allow 2x as the largest request
+// body size to be accepted and decoded in a write request.
+//
+// For the admission request, we can infer that it contains at most two objects
+// (the old and new versions of the object being admitted), each of which can
+// be at most 3MB in size. For the rest of the request, we can assume that
+// it will be less than 1MB in size. Therefore, we can set the max request
+// size to 7MB.
+// If your use case requires larger max request sizes, please
+// open an issue (https://github.com/kubernetes-sigs/controller-runtime/issues/new).
+const maxRequestSize = int64(7 * 1024 * 1024)
+
+func init() {
+ utilruntime.Must(v1.AddToScheme(admissionScheme))
+ utilruntime.Must(v1beta1.AddToScheme(admissionScheme))
+}
+
+var _ http.Handler = &Webhook{}
+
+func (wh *Webhook) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+ ctx := r.Context()
+ if wh.WithContextFunc != nil {
+ ctx = wh.WithContextFunc(ctx, r)
+ }
+
+ if r.Body == nil || r.Body == http.NoBody {
+ err := errors.New("request body is empty")
+ wh.getLogger(nil).Error(err, "bad request")
+ wh.writeResponse(w, Errored(http.StatusBadRequest, err))
+ return
+ }
+
+ defer r.Body.Close()
+ limitedReader := &io.LimitedReader{R: r.Body, N: maxRequestSize}
+ body, err := io.ReadAll(limitedReader)
+ if err != nil {
+ wh.getLogger(nil).Error(err, "unable to read the body from the incoming request")
+ wh.writeResponse(w, Errored(http.StatusBadRequest, err))
+ return
+ }
+ if limitedReader.N <= 0 {
+ err := fmt.Errorf("request entity is too large; limit is %d bytes", maxRequestSize)
+ wh.getLogger(nil).Error(err, "unable to read the body from the incoming request; limit reached")
+ wh.writeResponse(w, Errored(http.StatusRequestEntityTooLarge, err))
+ return
+ }
+
+ // verify the content type is accurate
+ if contentType := r.Header.Get("Content-Type"); contentType != "application/json" {
+ err = fmt.Errorf("contentType=%s, expected application/json", contentType)
+ wh.getLogger(nil).Error(err, "unable to process a request with unknown content type")
+ wh.writeResponse(w, Errored(http.StatusBadRequest, err))
+ return
+ }
+
+ // Both v1 and v1beta1 AdmissionReview types are exactly the same, so the v1beta1 type can
+ // be decoded into the v1 type. However the runtime codec's decoder guesses which type to
+ // decode into by type name if an Object's TypeMeta isn't set. By setting TypeMeta of an
+ // unregistered type to the v1 GVK, the decoder will coerce a v1beta1 AdmissionReview to v1.
+ // The actual AdmissionReview GVK will be used to write a typed response in case the
+ // webhook config permits multiple versions, otherwise this response will fail.
+ req := Request{}
+ ar := unversionedAdmissionReview{}
+ // avoid an extra copy
+ ar.Request = &req.AdmissionRequest
+ ar.SetGroupVersionKind(v1.SchemeGroupVersion.WithKind("AdmissionReview"))
+ _, actualAdmRevGVK, err := admissionCodecs.UniversalDeserializer().Decode(body, nil, &ar)
+ if err != nil {
+ wh.getLogger(nil).Error(err, "unable to decode the request")
+ wh.writeResponse(w, Errored(http.StatusBadRequest, err))
+ return
+ }
+ wh.getLogger(&req).V(5).Info("received request")
+
+ wh.writeResponseTyped(w, wh.Handle(ctx, req), actualAdmRevGVK)
+}
+
+// writeResponse writes response to w generically, i.e. without encoding GVK information.
+func (wh *Webhook) writeResponse(w io.Writer, response Response) {
+ wh.writeAdmissionResponse(w, v1.AdmissionReview{Response: &response.AdmissionResponse})
+}
+
+// writeResponseTyped writes response to w with GVK set to admRevGVK, which is necessary
+// if multiple AdmissionReview versions are permitted by the webhook.
+func (wh *Webhook) writeResponseTyped(w io.Writer, response Response, admRevGVK *schema.GroupVersionKind) {
+ ar := v1.AdmissionReview{
+ Response: &response.AdmissionResponse,
+ }
+ // Default to a v1 AdmissionReview, otherwise the API server may not recognize the request
+ // if multiple AdmissionReview versions are permitted by the webhook config.
+ // TODO(estroz): this should be configurable since older API servers won't know about v1.
+ if admRevGVK == nil || *admRevGVK == (schema.GroupVersionKind{}) {
+ ar.SetGroupVersionKind(v1.SchemeGroupVersion.WithKind("AdmissionReview"))
+ } else {
+ ar.SetGroupVersionKind(*admRevGVK)
+ }
+ wh.writeAdmissionResponse(w, ar)
+}
+
+// writeAdmissionResponse writes ar to w.
+func (wh *Webhook) writeAdmissionResponse(w io.Writer, ar v1.AdmissionReview) {
+ if err := json.NewEncoder(w).Encode(ar); err != nil {
+ wh.getLogger(nil).Error(err, "unable to encode and write the response")
+ // Since the `ar v1.AdmissionReview` is a clear and legal object,
+ // it should not have problem to be marshalled into bytes.
+ // The error here is probably caused by the abnormal HTTP connection,
+ // e.g., broken pipe, so we can only write the error response once,
+ // to avoid endless circular calling.
+ serverError := Errored(http.StatusInternalServerError, err)
+ if err = json.NewEncoder(w).Encode(v1.AdmissionReview{Response: &serverError.AdmissionResponse}); err != nil {
+ wh.getLogger(nil).Error(err, "still unable to encode and write the InternalServerError response")
+ }
+ } else {
+ res := ar.Response
+ if log := wh.getLogger(nil); log.V(5).Enabled() {
+ if res.Result != nil {
+ log = log.WithValues("code", res.Result.Code, "reason", res.Result.Reason, "message", res.Result.Message)
+ }
+ log.V(5).Info("wrote response", "requestID", res.UID, "allowed", res.Allowed)
+ }
+ }
+}
+
+// unversionedAdmissionReview is used to decode both v1 and v1beta1 AdmissionReview types.
+type unversionedAdmissionReview struct {
+ v1.AdmissionReview
+}
+
+var _ runtime.Object = &unversionedAdmissionReview{}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/metrics/metrics.go b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/metrics/metrics.go
new file mode 100644
index 00000000000..358a3a91622
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/metrics/metrics.go
@@ -0,0 +1,39 @@
+/*
+Copyright 2024 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 metrics
+
+import (
+ "github.com/prometheus/client_golang/prometheus"
+ "sigs.k8s.io/controller-runtime/pkg/metrics"
+)
+
+var (
+ // WebhookPanics is a prometheus counter metrics which holds the total
+ // number of panics from webhooks.
+ WebhookPanics = prometheus.NewCounterVec(prometheus.CounterOpts{
+ Name: "controller_runtime_webhook_panics_total",
+ Help: "Total number of webhook panics",
+ }, []string{})
+)
+
+func init() {
+ metrics.Registry.MustRegister(
+ WebhookPanics,
+ )
+ // Init metric.
+ WebhookPanics.WithLabelValues().Add(0)
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/multi.go b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/multi.go
new file mode 100644
index 00000000000..2f7820d04b4
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/multi.go
@@ -0,0 +1,95 @@
+/*
+Copyright 2018 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 admission
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+ "net/http"
+
+ jsonpatch "gomodules.xyz/jsonpatch/v2"
+ admissionv1 "k8s.io/api/admission/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+type multiMutating []Handler
+
+func (hs multiMutating) Handle(ctx context.Context, req Request) Response {
+ patches := []jsonpatch.JsonPatchOperation{}
+ for _, handler := range hs {
+ resp := handler.Handle(ctx, req)
+ if !resp.Allowed {
+ return resp
+ }
+ if resp.PatchType != nil && *resp.PatchType != admissionv1.PatchTypeJSONPatch {
+ return Errored(http.StatusInternalServerError,
+ fmt.Errorf("unexpected patch type returned by the handler: %v, only allow: %v",
+ resp.PatchType, admissionv1.PatchTypeJSONPatch))
+ }
+ patches = append(patches, resp.Patches...)
+ }
+ var err error
+ marshaledPatch, err := json.Marshal(patches)
+ if err != nil {
+ return Errored(http.StatusBadRequest, fmt.Errorf("error when marshaling the patch: %w", err))
+ }
+ return Response{
+ AdmissionResponse: admissionv1.AdmissionResponse{
+ Allowed: true,
+ Result: &metav1.Status{
+ Code: http.StatusOK,
+ },
+ Patch: marshaledPatch,
+ PatchType: func() *admissionv1.PatchType { pt := admissionv1.PatchTypeJSONPatch; return &pt }(),
+ },
+ }
+}
+
+// MultiMutatingHandler combines multiple mutating webhook handlers into a single
+// mutating webhook handler. Handlers are called in sequential order, and the first
+// `allowed: false` response may short-circuit the rest. Users must take care to
+// ensure patches are disjoint.
+func MultiMutatingHandler(handlers ...Handler) Handler {
+ return multiMutating(handlers)
+}
+
+type multiValidating []Handler
+
+func (hs multiValidating) Handle(ctx context.Context, req Request) Response {
+ for _, handler := range hs {
+ resp := handler.Handle(ctx, req)
+ if !resp.Allowed {
+ return resp
+ }
+ }
+ return Response{
+ AdmissionResponse: admissionv1.AdmissionResponse{
+ Allowed: true,
+ Result: &metav1.Status{
+ Code: http.StatusOK,
+ },
+ },
+ }
+}
+
+// MultiValidatingHandler combines multiple validating webhook handlers into a single
+// validating webhook handler. Handlers are called in sequential order, and the first
+// `allowed: false` response may short-circuit the rest.
+func MultiValidatingHandler(handlers ...Handler) Handler {
+ return multiValidating(handlers)
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/response.go b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/response.go
new file mode 100644
index 00000000000..ec1c88c989b
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/response.go
@@ -0,0 +1,124 @@
+/*
+Copyright 2018 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 admission
+
+import (
+ "net/http"
+
+ jsonpatch "gomodules.xyz/jsonpatch/v2"
+ admissionv1 "k8s.io/api/admission/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+// Allowed constructs a response indicating that the given operation
+// is allowed (without any patches).
+func Allowed(message string) Response {
+ return ValidationResponse(true, message)
+}
+
+// Denied constructs a response indicating that the given operation
+// is not allowed.
+func Denied(message string) Response {
+ return ValidationResponse(false, message)
+}
+
+// Patched constructs a response indicating that the given operation is
+// allowed, and that the target object should be modified by the given
+// JSONPatch operations.
+func Patched(message string, patches ...jsonpatch.JsonPatchOperation) Response {
+ resp := Allowed(message)
+ resp.Patches = patches
+
+ return resp
+}
+
+// Errored creates a new Response for error-handling a request.
+func Errored(code int32, err error) Response {
+ return Response{
+ AdmissionResponse: admissionv1.AdmissionResponse{
+ Allowed: false,
+ Result: &metav1.Status{
+ Code: code,
+ Message: err.Error(),
+ },
+ },
+ }
+}
+
+// ValidationResponse returns a response for admitting a request.
+func ValidationResponse(allowed bool, message string) Response {
+ code := http.StatusForbidden
+ reason := metav1.StatusReasonForbidden
+ if allowed {
+ code = http.StatusOK
+ reason = ""
+ }
+ resp := Response{
+ AdmissionResponse: admissionv1.AdmissionResponse{
+ Allowed: allowed,
+ Result: &metav1.Status{
+ Code: int32(code),
+ Reason: reason,
+ },
+ },
+ }
+ if len(message) > 0 {
+ resp.Result.Message = message
+ }
+ return resp
+}
+
+// PatchResponseFromRaw takes 2 byte arrays and returns a new response with json patch.
+// The original object should be passed in as raw bytes to avoid the roundtripping problem
+// described in https://github.com/kubernetes-sigs/kubebuilder/issues/510.
+func PatchResponseFromRaw(original, current []byte) Response {
+ patches, err := jsonpatch.CreatePatch(original, current)
+ if err != nil {
+ return Errored(http.StatusInternalServerError, err)
+ }
+ return Response{
+ Patches: patches,
+ AdmissionResponse: admissionv1.AdmissionResponse{
+ Allowed: true,
+ PatchType: func() *admissionv1.PatchType {
+ if len(patches) == 0 {
+ return nil
+ }
+ pt := admissionv1.PatchTypeJSONPatch
+ return &pt
+ }(),
+ },
+ }
+}
+
+// validationResponseFromStatus returns a response for admitting a request with provided Status object.
+func validationResponseFromStatus(allowed bool, status metav1.Status) Response {
+ resp := Response{
+ AdmissionResponse: admissionv1.AdmissionResponse{
+ Allowed: allowed,
+ Result: &status,
+ },
+ }
+ return resp
+}
+
+// WithWarnings adds the given warnings to the Response.
+// If any warnings were already given, they will not be overwritten.
+func (r Response) WithWarnings(warnings ...string) Response {
+ r.AdmissionResponse.Warnings = append(r.AdmissionResponse.Warnings, warnings...)
+ return r
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/validator_custom.go b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/validator_custom.go
new file mode 100644
index 00000000000..ef1be52a8fb
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/validator_custom.go
@@ -0,0 +1,128 @@
+/*
+Copyright 2021 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 admission
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "net/http"
+
+ v1 "k8s.io/api/admission/v1"
+ apierrors "k8s.io/apimachinery/pkg/api/errors"
+ "k8s.io/apimachinery/pkg/runtime"
+)
+
+// Warnings represents warning messages.
+type Warnings []string
+
+// CustomValidator defines functions for validating an operation.
+// The object to be validated is passed into methods as a parameter.
+type CustomValidator interface {
+ // ValidateCreate validates the object on creation.
+ // The optional warnings will be added to the response as warning messages.
+ // Return an error if the object is invalid.
+ ValidateCreate(ctx context.Context, obj runtime.Object) (warnings Warnings, err error)
+
+ // ValidateUpdate validates the object on update.
+ // The optional warnings will be added to the response as warning messages.
+ // Return an error if the object is invalid.
+ ValidateUpdate(ctx context.Context, oldObj, newObj runtime.Object) (warnings Warnings, err error)
+
+ // ValidateDelete validates the object on deletion.
+ // The optional warnings will be added to the response as warning messages.
+ // Return an error if the object is invalid.
+ ValidateDelete(ctx context.Context, obj runtime.Object) (warnings Warnings, err error)
+}
+
+// WithCustomValidator creates a new Webhook for validating the provided type.
+func WithCustomValidator(scheme *runtime.Scheme, obj runtime.Object, validator CustomValidator) *Webhook {
+ return &Webhook{
+ Handler: &validatorForType{object: obj, validator: validator, decoder: NewDecoder(scheme)},
+ }
+}
+
+type validatorForType struct {
+ validator CustomValidator
+ object runtime.Object
+ decoder Decoder
+}
+
+// Handle handles admission requests.
+func (h *validatorForType) Handle(ctx context.Context, req Request) Response {
+ if h.decoder == nil {
+ panic("decoder should never be nil")
+ }
+ if h.validator == nil {
+ panic("validator should never be nil")
+ }
+ if h.object == nil {
+ panic("object should never be nil")
+ }
+
+ ctx = NewContextWithRequest(ctx, req)
+
+ // Get the object in the request
+ obj := h.object.DeepCopyObject()
+
+ var err error
+ var warnings []string
+
+ switch req.Operation {
+ case v1.Connect:
+ // No validation for connect requests.
+ // TODO(vincepri): Should we validate CONNECT requests? In what cases?
+ case v1.Create:
+ if err := h.decoder.Decode(req, obj); err != nil {
+ return Errored(http.StatusBadRequest, err)
+ }
+
+ warnings, err = h.validator.ValidateCreate(ctx, obj)
+ case v1.Update:
+ oldObj := obj.DeepCopyObject()
+ if err := h.decoder.DecodeRaw(req.Object, obj); err != nil {
+ return Errored(http.StatusBadRequest, err)
+ }
+ if err := h.decoder.DecodeRaw(req.OldObject, oldObj); err != nil {
+ return Errored(http.StatusBadRequest, err)
+ }
+
+ warnings, err = h.validator.ValidateUpdate(ctx, oldObj, obj)
+ case v1.Delete:
+ // In reference to PR: https://github.com/kubernetes/kubernetes/pull/76346
+ // OldObject contains the object being deleted
+ if err := h.decoder.DecodeRaw(req.OldObject, obj); err != nil {
+ return Errored(http.StatusBadRequest, err)
+ }
+
+ warnings, err = h.validator.ValidateDelete(ctx, obj)
+ default:
+ return Errored(http.StatusBadRequest, fmt.Errorf("unknown operation %q", req.Operation))
+ }
+
+ // Check the error message first.
+ if err != nil {
+ var apiStatus apierrors.APIStatus
+ if errors.As(err, &apiStatus) {
+ return validationResponseFromStatus(false, apiStatus.Status()).WithWarnings(warnings...)
+ }
+ return Denied(err.Error()).WithWarnings(warnings...)
+ }
+
+ // Return allowed if everything succeeded.
+ return Allowed("").WithWarnings(warnings...)
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/webhook.go b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/webhook.go
new file mode 100644
index 00000000000..cba6da2cb04
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/admission/webhook.go
@@ -0,0 +1,266 @@
+/*
+Copyright 2018 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 admission
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "net/http"
+ "sync"
+
+ "github.com/go-logr/logr"
+ "gomodules.xyz/jsonpatch/v2"
+ admissionv1 "k8s.io/api/admission/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/util/json"
+ utilruntime "k8s.io/apimachinery/pkg/util/runtime"
+ "k8s.io/klog/v2"
+ admissionmetrics "sigs.k8s.io/controller-runtime/pkg/webhook/admission/metrics"
+
+ logf "sigs.k8s.io/controller-runtime/pkg/log"
+ "sigs.k8s.io/controller-runtime/pkg/webhook/internal/metrics"
+)
+
+var (
+ errUnableToEncodeResponse = errors.New("unable to encode response")
+)
+
+// Request defines the input for an admission handler.
+// It contains information to identify the object in
+// question (group, version, kind, resource, subresource,
+// name, namespace), as well as the operation in question
+// (e.g. Get, Create, etc), and the object itself.
+type Request struct {
+ admissionv1.AdmissionRequest
+}
+
+// Response is the output of an admission handler.
+// It contains a response indicating if a given
+// operation is allowed, as well as a set of patches
+// to mutate the object in the case of a mutating admission handler.
+type Response struct {
+ // Patches are the JSON patches for mutating webhooks.
+ // Using this instead of setting Response.Patch to minimize
+ // overhead of serialization and deserialization.
+ // Patches set here will override any patches in the response,
+ // so leave this empty if you want to set the patch response directly.
+ Patches []jsonpatch.JsonPatchOperation
+ // AdmissionResponse is the raw admission response.
+ // The Patch field in it will be overwritten by the listed patches.
+ admissionv1.AdmissionResponse
+}
+
+// Complete populates any fields that are yet to be set in
+// the underlying AdmissionResponse, It mutates the response.
+func (r *Response) Complete(req Request) error {
+ r.UID = req.UID
+
+ // ensure that we have a valid status code
+ if r.Result == nil {
+ r.Result = &metav1.Status{}
+ }
+ if r.Result.Code == 0 {
+ r.Result.Code = http.StatusOK
+ }
+ // TODO(directxman12): do we need to populate this further, and/or
+ // is code actually necessary (the same webhook doesn't use it)
+
+ if len(r.Patches) == 0 {
+ return nil
+ }
+
+ var err error
+ r.Patch, err = json.Marshal(r.Patches)
+ if err != nil {
+ return err
+ }
+ patchType := admissionv1.PatchTypeJSONPatch
+ r.PatchType = &patchType
+
+ return nil
+}
+
+// Handler can handle an AdmissionRequest.
+type Handler interface {
+ // Handle yields a response to an AdmissionRequest.
+ //
+ // The supplied context is extracted from the received http.Request, allowing wrapping
+ // http.Handlers to inject values into and control cancelation of downstream request processing.
+ Handle(context.Context, Request) Response
+}
+
+// HandlerFunc implements Handler interface using a single function.
+type HandlerFunc func(context.Context, Request) Response
+
+var _ Handler = HandlerFunc(nil)
+
+// Handle process the AdmissionRequest by invoking the underlying function.
+func (f HandlerFunc) Handle(ctx context.Context, req Request) Response {
+ return f(ctx, req)
+}
+
+// Webhook represents each individual webhook.
+//
+// It must be registered with a webhook.Server or
+// populated by StandaloneWebhook to be ran on an arbitrary HTTP server.
+type Webhook struct {
+ // Handler actually processes an admission request returning whether it was allowed or denied,
+ // and potentially patches to apply to the handler.
+ Handler Handler
+
+ // RecoverPanic indicates whether the panic caused by webhook should be recovered.
+ // Defaults to true.
+ RecoverPanic *bool
+
+ // WithContextFunc will allow you to take the http.Request.Context() and
+ // add any additional information such as passing the request path or
+ // headers thus allowing you to read them from within the handler
+ WithContextFunc func(context.Context, *http.Request) context.Context
+
+ // LogConstructor is used to construct a logger for logging messages during webhook calls
+ // based on the given base logger (which might carry more values like the webhook's path).
+ // Note: LogConstructor has to be able to handle nil requests as we are also using it
+ // outside the context of requests.
+ LogConstructor func(base logr.Logger, req *Request) logr.Logger
+
+ setupLogOnce sync.Once
+ log logr.Logger
+}
+
+// WithRecoverPanic takes a bool flag which indicates whether the panic caused by webhook should be recovered.
+// Defaults to true.
+func (wh *Webhook) WithRecoverPanic(recoverPanic bool) *Webhook {
+ wh.RecoverPanic = &recoverPanic
+ return wh
+}
+
+// Handle processes AdmissionRequest.
+// If the webhook is mutating type, it delegates the AdmissionRequest to each handler and merge the patches.
+// If the webhook is validating type, it delegates the AdmissionRequest to each handler and
+// deny the request if anyone denies.
+func (wh *Webhook) Handle(ctx context.Context, req Request) (response Response) {
+ defer func() {
+ if r := recover(); r != nil {
+ admissionmetrics.WebhookPanics.WithLabelValues().Inc()
+
+ if wh.RecoverPanic == nil || *wh.RecoverPanic {
+ for _, fn := range utilruntime.PanicHandlers {
+ fn(ctx, r)
+ }
+ response = Errored(http.StatusInternalServerError, fmt.Errorf("panic: %v [recovered]", r))
+ // Note: We explicitly have to set the response UID. Usually that is done via resp.Complete below,
+ // but if we encounter a panic in wh.Handler.Handle we are never going to reach resp.Complete.
+ response.UID = req.UID
+ return
+ }
+
+ log := logf.FromContext(ctx)
+ log.Info(fmt.Sprintf("Observed a panic in webhook: %v", r))
+ panic(r)
+ }
+ }()
+
+ reqLog := wh.getLogger(&req)
+ ctx = logf.IntoContext(ctx, reqLog)
+
+ resp := wh.Handler.Handle(ctx, req)
+ if err := resp.Complete(req); err != nil {
+ reqLog.Error(err, "unable to encode response")
+ resp := Errored(http.StatusInternalServerError, errUnableToEncodeResponse)
+ // Note: We explicitly have to set the response UID. Usually that is done via resp.Complete.
+ resp.UID = req.UID
+ return resp
+ }
+
+ return resp
+}
+
+// getLogger constructs a logger from the injected log and LogConstructor.
+func (wh *Webhook) getLogger(req *Request) logr.Logger {
+ wh.setupLogOnce.Do(func() {
+ if wh.log.GetSink() == nil {
+ wh.log = logf.Log.WithName("admission")
+ }
+ })
+
+ logConstructor := wh.LogConstructor
+ if logConstructor == nil {
+ logConstructor = DefaultLogConstructor
+ }
+ return logConstructor(wh.log, req)
+}
+
+// DefaultLogConstructor adds some commonly interesting fields to the given logger.
+func DefaultLogConstructor(base logr.Logger, req *Request) logr.Logger {
+ if req != nil {
+ return base.WithValues("object", klog.KRef(req.Namespace, req.Name),
+ "namespace", req.Namespace, "name", req.Name,
+ "resource", req.Resource, "user", req.UserInfo.Username,
+ "requestID", req.UID,
+ )
+ }
+ return base
+}
+
+// StandaloneOptions let you configure a StandaloneWebhook.
+type StandaloneOptions struct {
+ // Logger to be used by the webhook.
+ // If none is set, it defaults to log.Log global logger.
+ Logger logr.Logger
+ // MetricsPath is used for labelling prometheus metrics
+ // by the path is served on.
+ // If none is set, prometheus metrics will not be generated.
+ MetricsPath string
+}
+
+// StandaloneWebhook prepares a webhook for use without a webhook.Server,
+// passing in the information normally populated by webhook.Server
+// and instrumenting the webhook with metrics.
+//
+// Use this to attach your webhook to an arbitrary HTTP server or mux.
+//
+// Note that you are responsible for terminating TLS if you use StandaloneWebhook
+// in your own server/mux. In order to be accessed by a kubernetes cluster,
+// all webhook servers require TLS.
+func StandaloneWebhook(hook *Webhook, opts StandaloneOptions) (http.Handler, error) {
+ if opts.Logger.GetSink() != nil {
+ hook.log = opts.Logger
+ }
+ if opts.MetricsPath == "" {
+ return hook, nil
+ }
+ return metrics.InstrumentedHook(opts.MetricsPath, hook), nil
+}
+
+// requestContextKey is how we find the admission.Request in a context.Context.
+type requestContextKey struct{}
+
+// RequestFromContext returns an admission.Request from ctx.
+func RequestFromContext(ctx context.Context) (Request, error) {
+ if v, ok := ctx.Value(requestContextKey{}).(Request); ok {
+ return v, nil
+ }
+
+ return Request{}, errors.New("admission.Request not found in context")
+}
+
+// NewContextWithRequest returns a new Context, derived from ctx, which carries the
+// provided admission.Request.
+func NewContextWithRequest(ctx context.Context, req Request) context.Context {
+ return context.WithValue(ctx, requestContextKey{}, req)
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/alias.go b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/alias.go
new file mode 100644
index 00000000000..2882e7bab36
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/alias.go
@@ -0,0 +1,73 @@
+/*
+Copyright 2019 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 webhook
+
+import (
+ "gomodules.xyz/jsonpatch/v2"
+ "sigs.k8s.io/controller-runtime/pkg/webhook/admission"
+)
+
+// define some aliases for common bits of the webhook functionality
+
+// CustomDefaulter defines functions for setting defaults on resources.
+type CustomDefaulter = admission.CustomDefaulter
+
+// CustomValidator defines functions for validating an operation.
+type CustomValidator = admission.CustomValidator
+
+// AdmissionRequest defines the input for an admission handler.
+// It contains information to identify the object in
+// question (group, version, kind, resource, subresource,
+// name, namespace), as well as the operation in question
+// (e.g. Get, Create, etc), and the object itself.
+type AdmissionRequest = admission.Request
+
+// AdmissionResponse is the output of an admission handler.
+// It contains a response indicating if a given
+// operation is allowed, as well as a set of patches
+// to mutate the object in the case of a mutating admission handler.
+type AdmissionResponse = admission.Response
+
+// Admission is webhook suitable for registration with the server
+// an admission webhook that validates API operations and potentially
+// mutates their contents.
+type Admission = admission.Webhook
+
+// AdmissionHandler knows how to process admission requests, validating them,
+// and potentially mutating the objects they contain.
+type AdmissionHandler = admission.Handler
+
+// AdmissionDecoder knows how to decode objects from admission requests.
+type AdmissionDecoder = admission.Decoder
+
+// JSONPatchOp represents a single JSONPatch patch operation.
+type JSONPatchOp = jsonpatch.Operation
+
+var (
+ // Allowed indicates that the admission request should be allowed for the given reason.
+ Allowed = admission.Allowed
+
+ // Denied indicates that the admission request should be denied for the given reason.
+ Denied = admission.Denied
+
+ // Patched indicates that the admission request should be allowed for the given reason,
+ // and that the contained object should be mutated using the given patches.
+ Patched = admission.Patched
+
+ // Errored indicates that an error occurred in the admission request.
+ Errored = admission.Errored
+)
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/conversion.go b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/conversion.go
new file mode 100644
index 00000000000..249a364b381
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/conversion.go
@@ -0,0 +1,343 @@
+/*
+Copyright 2019 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 conversion provides implementation for CRD conversion webhook that implements handler for version conversion requests for types that are convertible.
+
+See pkg/conversion for interface definitions required to ensure an API Type is convertible.
+*/
+package conversion
+
+import (
+ "encoding/json"
+ "fmt"
+ "net/http"
+
+ apix "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
+ "k8s.io/apimachinery/pkg/api/meta"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "sigs.k8s.io/controller-runtime/pkg/conversion"
+ logf "sigs.k8s.io/controller-runtime/pkg/log"
+)
+
+var (
+ log = logf.Log.WithName("conversion-webhook")
+)
+
+func NewWebhookHandler(scheme *runtime.Scheme) http.Handler {
+ return &webhook{scheme: scheme, decoder: NewDecoder(scheme)}
+}
+
+// webhook implements a CRD conversion webhook HTTP handler.
+type webhook struct {
+ scheme *runtime.Scheme
+ decoder *Decoder
+}
+
+// ensure Webhook implements http.Handler
+var _ http.Handler = &webhook{}
+
+func (wh *webhook) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+ convertReview := &apix.ConversionReview{}
+ err := json.NewDecoder(r.Body).Decode(convertReview)
+ if err != nil {
+ log.Error(err, "failed to read conversion request")
+ w.WriteHeader(http.StatusBadRequest)
+ return
+ }
+
+ if convertReview.Request == nil {
+ log.Error(nil, "conversion request is nil")
+ w.WriteHeader(http.StatusBadRequest)
+ return
+ }
+
+ // TODO(droot): may be move the conversion logic to a separate module to
+ // decouple it from the http layer ?
+ resp, err := wh.handleConvertRequest(convertReview.Request)
+ if err != nil {
+ log.Error(err, "failed to convert", "request", convertReview.Request.UID)
+ convertReview.Response = errored(err)
+ } else {
+ convertReview.Response = resp
+ }
+ convertReview.Response.UID = convertReview.Request.UID
+ convertReview.Request = nil
+
+ err = json.NewEncoder(w).Encode(convertReview)
+ if err != nil {
+ log.Error(err, "failed to write response")
+ return
+ }
+}
+
+// handles a version conversion request.
+func (wh *webhook) handleConvertRequest(req *apix.ConversionRequest) (*apix.ConversionResponse, error) {
+ if req == nil {
+ return nil, fmt.Errorf("conversion request is nil")
+ }
+ var objects []runtime.RawExtension
+
+ for _, obj := range req.Objects {
+ src, gvk, err := wh.decoder.Decode(obj.Raw)
+ if err != nil {
+ return nil, err
+ }
+ dst, err := wh.allocateDstObject(req.DesiredAPIVersion, gvk.Kind)
+ if err != nil {
+ return nil, err
+ }
+ err = wh.convertObject(src, dst)
+ if err != nil {
+ return nil, err
+ }
+ objects = append(objects, runtime.RawExtension{Object: dst})
+ }
+ return &apix.ConversionResponse{
+ UID: req.UID,
+ ConvertedObjects: objects,
+ Result: metav1.Status{
+ Status: metav1.StatusSuccess,
+ },
+ }, nil
+}
+
+// convertObject will convert given a src object to dst object.
+// Note(droot): couldn't find a way to reduce the cyclomatic complexity under 10
+// without compromising readability, so disabling gocyclo linter
+func (wh *webhook) convertObject(src, dst runtime.Object) error {
+ srcGVK := src.GetObjectKind().GroupVersionKind()
+ dstGVK := dst.GetObjectKind().GroupVersionKind()
+
+ if srcGVK.GroupKind() != dstGVK.GroupKind() {
+ return fmt.Errorf("src %T and dst %T does not belong to same API Group", src, dst)
+ }
+
+ if srcGVK == dstGVK {
+ return fmt.Errorf("conversion is not allowed between same type %T", src)
+ }
+
+ srcIsHub, dstIsHub := isHub(src), isHub(dst)
+ srcIsConvertible, dstIsConvertible := isConvertible(src), isConvertible(dst)
+
+ switch {
+ case srcIsHub && dstIsConvertible:
+ return dst.(conversion.Convertible).ConvertFrom(src.(conversion.Hub))
+ case dstIsHub && srcIsConvertible:
+ return src.(conversion.Convertible).ConvertTo(dst.(conversion.Hub))
+ case srcIsConvertible && dstIsConvertible:
+ return wh.convertViaHub(src.(conversion.Convertible), dst.(conversion.Convertible))
+ default:
+ return fmt.Errorf("%T is not convertible to %T", src, dst)
+ }
+}
+
+func (wh *webhook) convertViaHub(src, dst conversion.Convertible) error {
+ hub, err := wh.getHub(src)
+ if err != nil {
+ return err
+ }
+
+ if hub == nil {
+ return fmt.Errorf("%s does not have any Hub defined", src)
+ }
+
+ err = src.ConvertTo(hub)
+ if err != nil {
+ return fmt.Errorf("%T failed to convert to hub version %T : %w", src, hub, err)
+ }
+
+ err = dst.ConvertFrom(hub)
+ if err != nil {
+ return fmt.Errorf("%T failed to convert from hub version %T : %w", dst, hub, err)
+ }
+
+ return nil
+}
+
+// getHub returns an instance of the Hub for passed-in object's group/kind.
+func (wh *webhook) getHub(obj runtime.Object) (conversion.Hub, error) {
+ gvks, err := objectGVKs(wh.scheme, obj)
+ if err != nil {
+ return nil, err
+ }
+ if len(gvks) == 0 {
+ return nil, fmt.Errorf("error retrieving gvks for object : %v", obj)
+ }
+
+ var hub conversion.Hub
+ var hubFoundAlready bool
+ for _, gvk := range gvks {
+ instance, err := wh.scheme.New(gvk)
+ if err != nil {
+ return nil, fmt.Errorf("failed to allocate an instance for gvk %v: %w", gvk, err)
+ }
+ if val, isHub := instance.(conversion.Hub); isHub {
+ if hubFoundAlready {
+ return nil, fmt.Errorf("multiple hub version defined for %T", obj)
+ }
+ hubFoundAlready = true
+ hub = val
+ }
+ }
+ return hub, nil
+}
+
+// allocateDstObject returns an instance for a given GVK.
+func (wh *webhook) allocateDstObject(apiVersion, kind string) (runtime.Object, error) {
+ gvk := schema.FromAPIVersionAndKind(apiVersion, kind)
+
+ obj, err := wh.scheme.New(gvk)
+ if err != nil {
+ return obj, err
+ }
+
+ t, err := meta.TypeAccessor(obj)
+ if err != nil {
+ return obj, err
+ }
+
+ t.SetAPIVersion(apiVersion)
+ t.SetKind(kind)
+
+ return obj, nil
+}
+
+// IsConvertible determines if given type is convertible or not. For a type
+// to be convertible, the group-kind needs to have a Hub type defined and all
+// non-hub types must be able to convert to/from Hub.
+func IsConvertible(scheme *runtime.Scheme, obj runtime.Object) (bool, error) {
+ var hubs, spokes, nonSpokes []runtime.Object
+
+ gvks, err := objectGVKs(scheme, obj)
+ if err != nil {
+ return false, err
+ }
+ if len(gvks) == 0 {
+ return false, fmt.Errorf("error retrieving gvks for object : %v", obj)
+ }
+
+ for _, gvk := range gvks {
+ instance, err := scheme.New(gvk)
+ if err != nil {
+ return false, fmt.Errorf("failed to allocate an instance for gvk %v: %w", gvk, err)
+ }
+
+ if isHub(instance) {
+ hubs = append(hubs, instance)
+ continue
+ }
+
+ if !isConvertible(instance) {
+ nonSpokes = append(nonSpokes, instance)
+ continue
+ }
+
+ spokes = append(spokes, instance)
+ }
+
+ if len(gvks) == 1 {
+ return false, nil // single version
+ }
+
+ if len(hubs) == 0 && len(spokes) == 0 {
+ // multiple version detected with no conversion implementation. This is
+ // true for multi-version built-in types.
+ return false, nil
+ }
+
+ if len(hubs) == 1 && len(nonSpokes) == 0 { // convertible
+ return true, nil
+ }
+
+ return false, PartialImplementationError{
+ hubs: hubs,
+ nonSpokes: nonSpokes,
+ spokes: spokes,
+ }
+}
+
+// objectGVKs returns all (Group,Version,Kind) for the Group/Kind of given object.
+func objectGVKs(scheme *runtime.Scheme, obj runtime.Object) ([]schema.GroupVersionKind, error) {
+ // NB: we should not use `obj.GetObjectKind().GroupVersionKind()` to get the
+ // GVK here, since it is parsed from apiVersion and kind fields and it may
+ // return empty GVK if obj is an uninitialized object.
+ objGVKs, _, err := scheme.ObjectKinds(obj)
+ if err != nil {
+ return nil, err
+ }
+ if len(objGVKs) != 1 {
+ return nil, fmt.Errorf("expect to get only one GVK for %v", obj)
+ }
+ objGVK := objGVKs[0]
+ knownTypes := scheme.AllKnownTypes()
+
+ var gvks []schema.GroupVersionKind
+ for gvk := range knownTypes {
+ if objGVK.GroupKind() == gvk.GroupKind() {
+ gvks = append(gvks, gvk)
+ }
+ }
+ return gvks, nil
+}
+
+// PartialImplementationError represents an error due to partial conversion
+// implementation such as hub without spokes, multiple hubs or spokes without hub.
+type PartialImplementationError struct {
+ gvk schema.GroupVersionKind
+ hubs []runtime.Object
+ nonSpokes []runtime.Object
+ spokes []runtime.Object
+}
+
+func (e PartialImplementationError) Error() string {
+ if len(e.hubs) == 0 {
+ return fmt.Sprintf("no hub defined for gvk %s", e.gvk)
+ }
+ if len(e.hubs) > 1 {
+ return fmt.Sprintf("multiple(%d) hubs defined for group-kind '%s' ",
+ len(e.hubs), e.gvk.GroupKind())
+ }
+ if len(e.nonSpokes) > 0 {
+ return fmt.Sprintf("%d inconvertible types detected for group-kind '%s'",
+ len(e.nonSpokes), e.gvk.GroupKind())
+ }
+ return ""
+}
+
+// isHub determines if passed-in object is a Hub or not.
+func isHub(obj runtime.Object) bool {
+ _, yes := obj.(conversion.Hub)
+ return yes
+}
+
+// isConvertible determines if passed-in object is a convertible.
+func isConvertible(obj runtime.Object) bool {
+ _, yes := obj.(conversion.Convertible)
+ return yes
+}
+
+// helper to construct error response.
+func errored(err error) *apix.ConversionResponse {
+ return &apix.ConversionResponse{
+ Result: metav1.Status{
+ Status: metav1.StatusFailure,
+ Message: err.Error(),
+ },
+ }
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/decoder.go b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/decoder.go
new file mode 100644
index 00000000000..b6bb8bd9384
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/conversion/decoder.go
@@ -0,0 +1,50 @@
+/*
+Copyright 2021 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 conversion
+
+import (
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "k8s.io/apimachinery/pkg/runtime/serializer"
+)
+
+// Decoder knows how to decode the contents of a CRD version conversion
+// request into a concrete object.
+// TODO(droot): consider reusing decoder from admission pkg for this.
+type Decoder struct {
+ codecs serializer.CodecFactory
+}
+
+// NewDecoder creates a Decoder given the runtime.Scheme
+func NewDecoder(scheme *runtime.Scheme) *Decoder {
+ if scheme == nil {
+ panic("scheme should never be nil")
+ }
+ return &Decoder{codecs: serializer.NewCodecFactory(scheme)}
+}
+
+// Decode decodes the inlined object.
+func (d *Decoder) Decode(content []byte) (runtime.Object, *schema.GroupVersionKind, error) {
+ deserializer := d.codecs.UniversalDeserializer()
+ return deserializer.Decode(content, nil, nil)
+}
+
+// DecodeInto decodes the inlined object in the into the passed-in runtime.Object.
+func (d *Decoder) DecodeInto(content []byte, into runtime.Object) error {
+ deserializer := d.codecs.UniversalDeserializer()
+ return runtime.DecodeInto(deserializer, content, into)
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/doc.go b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/doc.go
new file mode 100644
index 00000000000..2c93f0d995b
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/doc.go
@@ -0,0 +1,28 @@
+/*
+Copyright 2018 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 webhook provides methods to build and bootstrap a webhook server.
+
+Currently, it only supports admission webhooks. It will support CRD conversion webhooks in the near future.
+*/
+package webhook
+
+import (
+ logf "sigs.k8s.io/controller-runtime/pkg/internal/log"
+)
+
+var log = logf.RuntimeLog.WithName("webhook")
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/internal/metrics/metrics.go b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/internal/metrics/metrics.go
new file mode 100644
index 00000000000..557004908b8
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/internal/metrics/metrics.go
@@ -0,0 +1,85 @@
+/*
+Copyright 2018 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 metrics
+
+import (
+ "net/http"
+
+ "github.com/prometheus/client_golang/prometheus"
+ "github.com/prometheus/client_golang/prometheus/promhttp"
+
+ "sigs.k8s.io/controller-runtime/pkg/metrics"
+)
+
+var (
+ // RequestLatency is a prometheus metric which is a histogram of the latency
+ // of processing admission requests.
+ RequestLatency = prometheus.NewHistogramVec(
+ prometheus.HistogramOpts{
+ Name: "controller_runtime_webhook_latency_seconds",
+ Help: "Histogram of the latency of processing admission requests",
+ },
+ []string{"webhook"},
+ )
+
+ // RequestTotal is a prometheus metric which is a counter of the total processed admission requests.
+ RequestTotal = func() *prometheus.CounterVec {
+ return prometheus.NewCounterVec(
+ prometheus.CounterOpts{
+ Name: "controller_runtime_webhook_requests_total",
+ Help: "Total number of admission requests by HTTP status code.",
+ },
+ []string{"webhook", "code"},
+ )
+ }()
+
+ // RequestInFlight is a prometheus metric which is a gauge of the in-flight admission requests.
+ RequestInFlight = func() *prometheus.GaugeVec {
+ return prometheus.NewGaugeVec(
+ prometheus.GaugeOpts{
+ Name: "controller_runtime_webhook_requests_in_flight",
+ Help: "Current number of admission requests being served.",
+ },
+ []string{"webhook"},
+ )
+ }()
+)
+
+func init() {
+ metrics.Registry.MustRegister(RequestLatency, RequestTotal, RequestInFlight)
+}
+
+// InstrumentedHook adds some instrumentation on top of the given webhook.
+func InstrumentedHook(path string, hookRaw http.Handler) http.Handler {
+ lbl := prometheus.Labels{"webhook": path}
+
+ lat := RequestLatency.MustCurryWith(lbl)
+ cnt := RequestTotal.MustCurryWith(lbl)
+ gge := RequestInFlight.With(lbl)
+
+ // Initialize the most likely HTTP status codes.
+ cnt.WithLabelValues("200")
+ cnt.WithLabelValues("500")
+
+ return promhttp.InstrumentHandlerDuration(
+ lat,
+ promhttp.InstrumentHandlerCounter(
+ cnt,
+ promhttp.InstrumentHandlerInFlight(gge, hookRaw),
+ ),
+ )
+}
diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/server.go b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/server.go
new file mode 100644
index 00000000000..4d8ae9ec7ad
--- /dev/null
+++ b/vendor/sigs.k8s.io/controller-runtime/pkg/webhook/server.go
@@ -0,0 +1,302 @@
+/*
+Copyright 2018 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 webhook
+
+import (
+ "context"
+ "crypto/tls"
+ "crypto/x509"
+ "fmt"
+ "net"
+ "net/http"
+ "os"
+ "path/filepath"
+ "strconv"
+ "sync"
+ "time"
+
+ "sigs.k8s.io/controller-runtime/pkg/certwatcher"
+ "sigs.k8s.io/controller-runtime/pkg/healthz"
+ "sigs.k8s.io/controller-runtime/pkg/internal/httpserver"
+ "sigs.k8s.io/controller-runtime/pkg/webhook/internal/metrics"
+)
+
+// DefaultPort is the default port that the webhook server serves.
+var DefaultPort = 9443
+
+// Server is an admission webhook server that can serve traffic and
+// generates related k8s resources for deploying.
+//
+// TLS is required for a webhook to be accessed by kubernetes, so
+// you must provide a CertName and KeyName or have valid cert/key
+// at the default locations (tls.crt and tls.key). If you do not
+// want to configure TLS (i.e for testing purposes) run an
+// admission.StandaloneWebhook in your own server.
+type Server interface {
+ // NeedLeaderElection implements the LeaderElectionRunnable interface, which indicates
+ // the webhook server doesn't need leader election.
+ NeedLeaderElection() bool
+
+ // Register marks the given webhook as being served at the given path.
+ // It panics if two hooks are registered on the same path.
+ Register(path string, hook http.Handler)
+
+ // Start runs the server.
+ // It will install the webhook related resources depend on the server configuration.
+ Start(ctx context.Context) error
+
+ // StartedChecker returns an healthz.Checker which is healthy after the
+ // server has been started.
+ StartedChecker() healthz.Checker
+
+ // WebhookMux returns the servers WebhookMux
+ WebhookMux() *http.ServeMux
+}
+
+// Options are all the available options for a webhook.Server
+type Options struct {
+ // Host is the address that the server will listen on.
+ // Defaults to "" - all addresses.
+ Host string
+
+ // Port is the port number that the server will serve.
+ // It will be defaulted to 9443 if unspecified.
+ Port int
+
+ // CertDir is the directory that contains the server key and certificate. Defaults to
+ // /k8s-webhook-server/serving-certs.
+ CertDir string
+
+ // CertName is the server certificate name. Defaults to tls.crt.
+ //
+ // Note: This option is only used when TLSOpts does not set GetCertificate.
+ CertName string
+
+ // KeyName is the server key name. Defaults to tls.key.
+ //
+ // Note: This option is only used when TLSOpts does not set GetCertificate.
+ KeyName string
+
+ // ClientCAName is the CA certificate name which server used to verify remote(client)'s certificate.
+ // Defaults to "", which means server does not verify client's certificate.
+ ClientCAName string
+
+ // TLSOpts is used to allow configuring the TLS config used for the server.
+ // This also allows providing a certificate via GetCertificate.
+ TLSOpts []func(*tls.Config)
+
+ // WebhookMux is the multiplexer that handles different webhooks.
+ WebhookMux *http.ServeMux
+}
+
+// NewServer constructs a new webhook.Server from the provided options.
+func NewServer(o Options) Server {
+ return &DefaultServer{
+ Options: o,
+ }
+}
+
+// DefaultServer is the default implementation used for Server.
+type DefaultServer struct {
+ Options Options
+
+ // webhooks keep track of all registered webhooks
+ webhooks map[string]http.Handler
+
+ // defaultingOnce ensures that the default fields are only ever set once.
+ defaultingOnce sync.Once
+
+ // started is set to true immediately before the server is started
+ // and thus can be used to check if the server has been started
+ started bool
+
+ // mu protects access to the webhook map & setFields for Start, Register, etc
+ mu sync.Mutex
+
+ webhookMux *http.ServeMux
+}
+
+// setDefaults does defaulting for the Server.
+func (o *Options) setDefaults() {
+ if o.WebhookMux == nil {
+ o.WebhookMux = http.NewServeMux()
+ }
+
+ if o.Port <= 0 {
+ o.Port = DefaultPort
+ }
+
+ if len(o.CertDir) == 0 {
+ o.CertDir = filepath.Join(os.TempDir(), "k8s-webhook-server", "serving-certs")
+ }
+
+ if len(o.CertName) == 0 {
+ o.CertName = "tls.crt"
+ }
+
+ if len(o.KeyName) == 0 {
+ o.KeyName = "tls.key"
+ }
+}
+
+func (s *DefaultServer) setDefaults() {
+ s.webhooks = map[string]http.Handler{}
+ s.Options.setDefaults()
+
+ s.webhookMux = s.Options.WebhookMux
+}
+
+// NeedLeaderElection implements the LeaderElectionRunnable interface, which indicates
+// the webhook server doesn't need leader election.
+func (*DefaultServer) NeedLeaderElection() bool {
+ return false
+}
+
+// Register marks the given webhook as being served at the given path.
+// It panics if two hooks are registered on the same path.
+func (s *DefaultServer) Register(path string, hook http.Handler) {
+ s.mu.Lock()
+ defer s.mu.Unlock()
+
+ s.defaultingOnce.Do(s.setDefaults)
+ if _, found := s.webhooks[path]; found {
+ panic(fmt.Errorf("can't register duplicate path: %v", path))
+ }
+ s.webhooks[path] = hook
+ s.webhookMux.Handle(path, metrics.InstrumentedHook(path, hook))
+
+ regLog := log.WithValues("path", path)
+ regLog.Info("Registering webhook")
+}
+
+// Start runs the server.
+// It will install the webhook related resources depend on the server configuration.
+func (s *DefaultServer) Start(ctx context.Context) error {
+ s.defaultingOnce.Do(s.setDefaults)
+
+ log.Info("Starting webhook server")
+
+ cfg := &tls.Config{
+ NextProtos: []string{"h2"},
+ }
+ // fallback TLS config ready, will now mutate if passer wants full control over it
+ for _, op := range s.Options.TLSOpts {
+ op(cfg)
+ }
+
+ if cfg.GetCertificate == nil {
+ certPath := filepath.Join(s.Options.CertDir, s.Options.CertName)
+ keyPath := filepath.Join(s.Options.CertDir, s.Options.KeyName)
+
+ // Create the certificate watcher and
+ // set the config's GetCertificate on the TLSConfig
+ certWatcher, err := certwatcher.New(certPath, keyPath)
+ if err != nil {
+ return err
+ }
+ cfg.GetCertificate = certWatcher.GetCertificate
+
+ go func() {
+ if err := certWatcher.Start(ctx); err != nil {
+ log.Error(err, "certificate watcher error")
+ }
+ }()
+ }
+
+ // Load CA to verify client certificate, if configured.
+ if s.Options.ClientCAName != "" {
+ certPool := x509.NewCertPool()
+ clientCABytes, err := os.ReadFile(filepath.Join(s.Options.CertDir, s.Options.ClientCAName))
+ if err != nil {
+ return fmt.Errorf("failed to read client CA cert: %w", err)
+ }
+
+ ok := certPool.AppendCertsFromPEM(clientCABytes)
+ if !ok {
+ return fmt.Errorf("failed to append client CA cert to CA pool")
+ }
+
+ cfg.ClientCAs = certPool
+ cfg.ClientAuth = tls.RequireAndVerifyClientCert
+ }
+
+ listener, err := tls.Listen("tcp", net.JoinHostPort(s.Options.Host, strconv.Itoa(s.Options.Port)), cfg)
+ if err != nil {
+ return err
+ }
+
+ log.Info("Serving webhook server", "host", s.Options.Host, "port", s.Options.Port)
+
+ srv := httpserver.New(s.webhookMux)
+
+ idleConnsClosed := make(chan struct{})
+ go func() {
+ <-ctx.Done()
+ log.Info("Shutting down webhook server with timeout of 1 minute")
+
+ ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
+ defer cancel()
+ if err := srv.Shutdown(ctx); err != nil {
+ // Error from closing listeners, or context timeout
+ log.Error(err, "error shutting down the HTTP server")
+ }
+ close(idleConnsClosed)
+ }()
+
+ s.mu.Lock()
+ s.started = true
+ s.mu.Unlock()
+ if err := srv.Serve(listener); err != nil && err != http.ErrServerClosed {
+ return err
+ }
+
+ <-idleConnsClosed
+ return nil
+}
+
+// StartedChecker returns an healthz.Checker which is healthy after the
+// server has been started.
+func (s *DefaultServer) StartedChecker() healthz.Checker {
+ config := &tls.Config{
+ InsecureSkipVerify: true,
+ }
+ return func(req *http.Request) error {
+ s.mu.Lock()
+ defer s.mu.Unlock()
+
+ if !s.started {
+ return fmt.Errorf("webhook server has not been started yet")
+ }
+
+ d := &net.Dialer{Timeout: 10 * time.Second}
+ conn, err := tls.DialWithDialer(d, "tcp", net.JoinHostPort(s.Options.Host, strconv.Itoa(s.Options.Port)), config)
+ if err != nil {
+ return fmt.Errorf("webhook server is not reachable: %w", err)
+ }
+
+ if err := conn.Close(); err != nil {
+ return fmt.Errorf("webhook server is not reachable: closing connection: %w", err)
+ }
+
+ return nil
+ }
+}
+
+// WebhookMux returns the servers WebhookMux
+func (s *DefaultServer) WebhookMux() *http.ServeMux {
+ return s.webhookMux
+}