Bump sigs.k8s.io/controller-tools from 0.6.2 to 0.11.1 (#5432)
This commit is contained in:
2
Makefile
2
Makefile
@@ -4,7 +4,7 @@
|
||||
|
||||
|
||||
# Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
|
||||
CRD_OPTIONS ?= "crd:trivialVersions=true,allowDangerousTypes=true"
|
||||
CRD_OPTIONS ?= "crd:allowDangerousTypes=true"
|
||||
|
||||
GV="network:v1alpha1 servicemesh:v1alpha2 tenant:v1alpha1 tenant:v1alpha2 devops:v1alpha1 iam:v1alpha2 devops:v1alpha3 cluster:v1alpha1 storage:v1alpha1 auditing:v1alpha1 types:v1beta1 types:v1beta2 quota:v1alpha2 application:v1alpha1 notification:v2beta1 notification:v2beta2 gateway:v1alpha1 alerting:v2beta1"
|
||||
MANIFESTS="application/* cluster/* iam/* network/v1alpha1 quota/* storage/* tenant/* gateway/* alerting/*"
|
||||
|
||||
30
go.mod
30
go.mod
@@ -28,7 +28,7 @@ require (
|
||||
github.com/evanphx/json-patch v5.6.0+incompatible
|
||||
github.com/fatih/structs v1.1.0
|
||||
github.com/form3tech-oss/jwt-go v3.2.3+incompatible
|
||||
github.com/fsnotify/fsnotify v1.5.4
|
||||
github.com/fsnotify/fsnotify v1.6.0
|
||||
github.com/ghodss/yaml v1.0.0
|
||||
github.com/go-ldap/ldap v3.0.3+incompatible
|
||||
github.com/go-logr/logr v1.2.3
|
||||
@@ -38,7 +38,7 @@ require (
|
||||
github.com/go-openapi/validate v0.19.8
|
||||
github.com/go-redis/redis v6.15.2+incompatible
|
||||
github.com/golang/example v0.0.0-20170904185048-46695d81d1fa
|
||||
github.com/google/go-cmp v0.5.8
|
||||
github.com/google/go-cmp v0.5.9
|
||||
github.com/google/go-containerregistry v0.6.0
|
||||
github.com/google/gops v0.3.23
|
||||
github.com/google/uuid v1.2.0
|
||||
@@ -53,7 +53,7 @@ require (
|
||||
github.com/mitchellh/mapstructure v1.4.3
|
||||
github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852
|
||||
github.com/onsi/ginkgo v1.16.5
|
||||
github.com/onsi/gomega v1.20.1
|
||||
github.com/onsi/gomega v1.24.2
|
||||
github.com/open-policy-agent/opa v0.45.0
|
||||
github.com/opencontainers/go-digest v1.0.0
|
||||
github.com/opensearch-project/opensearch-go v1.1.0
|
||||
@@ -86,25 +86,25 @@ require (
|
||||
helm.sh/helm/v3 v3.10.3
|
||||
istio.io/api v0.0.0-20201113182140-d4b7e3fc2b44
|
||||
istio.io/client-go v0.0.0-20201113183938-0734e976e785
|
||||
k8s.io/api v0.25.3
|
||||
k8s.io/apiextensions-apiserver v0.25.3
|
||||
k8s.io/apimachinery v0.25.3
|
||||
k8s.io/api v0.26.0
|
||||
k8s.io/apiextensions-apiserver v0.26.0
|
||||
k8s.io/apimachinery v0.26.0
|
||||
k8s.io/apiserver v0.25.3
|
||||
k8s.io/cli-runtime v0.25.3
|
||||
k8s.io/client-go v12.0.0+incompatible
|
||||
k8s.io/code-generator v0.25.3
|
||||
k8s.io/component-base v0.25.3
|
||||
k8s.io/klog/v2 v2.70.1
|
||||
k8s.io/klog/v2 v2.80.1
|
||||
k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1
|
||||
k8s.io/kubectl v0.25.3
|
||||
k8s.io/metrics v0.25.3
|
||||
k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed
|
||||
k8s.io/utils v0.0.0-20221107191617-1a15be271d1d
|
||||
kubesphere.io/api v0.0.0
|
||||
kubesphere.io/client-go v0.0.0
|
||||
kubesphere.io/monitoring-dashboard v0.2.2
|
||||
sigs.k8s.io/application v0.8.4-0.20201016185654-c8e2959e57a0
|
||||
sigs.k8s.io/controller-runtime v0.12.1
|
||||
sigs.k8s.io/controller-tools v0.9.0
|
||||
sigs.k8s.io/controller-tools v0.11.1
|
||||
sigs.k8s.io/kubefed v0.8.1
|
||||
sigs.k8s.io/kustomize/api v0.12.1
|
||||
sigs.k8s.io/kustomize/kyaml v0.13.9
|
||||
@@ -160,7 +160,7 @@ require (
|
||||
github.com/go-openapi/swag v0.19.14 // indirect
|
||||
github.com/go-resty/resty/v2 v2.5.0 // indirect
|
||||
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect
|
||||
github.com/gobuffalo/flect v0.2.5 // indirect
|
||||
github.com/gobuffalo/flect v0.3.0 // indirect
|
||||
github.com/gobuffalo/genny v0.1.1 // indirect
|
||||
github.com/gobuffalo/gogen v0.1.1 // indirect
|
||||
github.com/gobwas/glob v0.2.3 // indirect
|
||||
@@ -270,13 +270,13 @@ require (
|
||||
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee // indirect
|
||||
go.uber.org/zap v1.19.1 // indirect
|
||||
golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect
|
||||
golang.org/x/net v0.0.0-20220909164309-bea034e7d591 // indirect
|
||||
golang.org/x/net v0.4.0 // indirect
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect
|
||||
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 // indirect
|
||||
golang.org/x/sys v0.3.0 // indirect
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
|
||||
golang.org/x/text v0.3.7 // indirect
|
||||
golang.org/x/text v0.5.0 // indirect
|
||||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
|
||||
golang.org/x/tools v0.1.12 // indirect
|
||||
golang.org/x/tools v0.4.0 // indirect
|
||||
golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect
|
||||
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
|
||||
google.golang.org/appengine v1.6.7 // indirect
|
||||
@@ -1102,7 +1102,7 @@ replace (
|
||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client => sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.33
|
||||
sigs.k8s.io/application => sigs.k8s.io/application v0.8.4-0.20201016185654-c8e2959e57a0
|
||||
sigs.k8s.io/controller-runtime => sigs.k8s.io/controller-runtime v0.12.1
|
||||
sigs.k8s.io/controller-tools => sigs.k8s.io/controller-tools v0.6.2
|
||||
sigs.k8s.io/controller-tools => sigs.k8s.io/controller-tools v0.11.1
|
||||
sigs.k8s.io/json => sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2
|
||||
sigs.k8s.io/kind => sigs.k8s.io/kind v0.8.1
|
||||
sigs.k8s.io/kubebuilder/v3 => sigs.k8s.io/kubebuilder/v3 v3.0.0-alpha.0.0.20210716121009-fde793f20067
|
||||
|
||||
4
go.sum
4
go.sum
@@ -1087,8 +1087,8 @@ sigs.k8s.io/application v0.8.4-0.20201016185654-c8e2959e57a0 h1:cH3Q4uNycL9Lgzly
|
||||
sigs.k8s.io/application v0.8.4-0.20201016185654-c8e2959e57a0/go.mod h1:wdTrELsIgKk8lnlRaoKWao9YpLelXpABdEgCM1aEEE4=
|
||||
sigs.k8s.io/controller-runtime v0.12.1 h1:4BJY01xe9zKQti8oRjj/NeHKRXthf1YkYJAgLONFFoI=
|
||||
sigs.k8s.io/controller-runtime v0.12.1/go.mod h1:BKhxlA4l7FPK4AQcsuL4X6vZeWnKDXez/vp1Y8dxTU0=
|
||||
sigs.k8s.io/controller-tools v0.6.2 h1:+Y8L0UsAugDipGRw8lrkPoAi6XqlQVZuf1DQHME3PgU=
|
||||
sigs.k8s.io/controller-tools v0.6.2/go.mod h1:oaeGpjXn6+ZSEIQkUe/+3I40PNiDYp9aeawbt3xTgJ8=
|
||||
sigs.k8s.io/controller-tools v0.11.1 h1:blfU7DbmXuACWHfpZR645KCq8cLOc6nfkipGSGnH+Wk=
|
||||
sigs.k8s.io/controller-tools v0.11.1/go.mod h1:dm4bN3Yp1ZP+hbbeSLF8zOEHsI1/bf15u3JNcgRv2TM=
|
||||
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y=
|
||||
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY=
|
||||
sigs.k8s.io/kind v0.8.1/go.mod h1:oNKTxUVPYkV9lWzY6CVMNluVq8cBsyq+UgPJdvA3uu4=
|
||||
|
||||
@@ -6,17 +6,17 @@ go 1.18
|
||||
|
||||
require (
|
||||
github.com/go-logr/logr v1.2.3
|
||||
github.com/onsi/gomega v1.20.1
|
||||
github.com/onsi/gomega v1.24.2
|
||||
github.com/projectcalico/libcalico-go v1.7.2-0.20191014160346-2382c6cdd056
|
||||
github.com/prometheus/common v0.37.0
|
||||
github.com/prometheus/prometheus v1.8.2-0.20200907175821-8219b442c864
|
||||
github.com/robfig/cron/v3 v3.0.1
|
||||
golang.org/x/net v0.0.0-20220909164309-bea034e7d591
|
||||
golang.org/x/net v0.4.0
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
istio.io/api v0.0.0-20201113182140-d4b7e3fc2b44
|
||||
k8s.io/api v0.25.3
|
||||
k8s.io/apiextensions-apiserver v0.25.3
|
||||
k8s.io/apimachinery v0.25.3
|
||||
k8s.io/api v0.26.0
|
||||
k8s.io/apiextensions-apiserver v0.26.0
|
||||
k8s.io/apimachinery v0.26.0
|
||||
k8s.io/client-go v12.0.0+incompatible
|
||||
k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1
|
||||
sigs.k8s.io/application v0.8.4-0.20201016185654-c8e2959e57a0
|
||||
@@ -35,7 +35,7 @@ require (
|
||||
github.com/edsrzf/mmap-go v1.0.0 // indirect
|
||||
github.com/emicklei/go-restful/v3 v3.8.0 // indirect
|
||||
github.com/evanphx/json-patch v5.6.0+incompatible // indirect
|
||||
github.com/fsnotify/fsnotify v1.5.4 // indirect
|
||||
github.com/fsnotify/fsnotify v1.6.0 // indirect
|
||||
github.com/go-kit/kit v0.10.0 // indirect
|
||||
github.com/go-logfmt/logfmt v0.5.0 // indirect
|
||||
github.com/go-openapi/jsonpointer v0.19.5 // indirect
|
||||
@@ -46,7 +46,7 @@ require (
|
||||
github.com/golang/protobuf v1.5.2 // indirect
|
||||
github.com/golang/snappy v0.0.4 // indirect
|
||||
github.com/google/gnostic v0.5.7-v3refs // indirect
|
||||
github.com/google/go-cmp v0.5.8 // indirect
|
||||
github.com/google/go-cmp v0.5.9 // indirect
|
||||
github.com/google/gofuzz v1.2.0 // indirect
|
||||
github.com/google/uuid v1.2.0 // indirect
|
||||
github.com/imdario/mergo v0.3.12 // indirect
|
||||
@@ -74,10 +74,11 @@ require (
|
||||
go.uber.org/atomic v1.7.0 // indirect
|
||||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect
|
||||
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 // indirect
|
||||
golang.org/x/sys v0.3.0 // indirect
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
|
||||
golang.org/x/text v0.3.7 // indirect
|
||||
golang.org/x/text v0.5.0 // indirect
|
||||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
|
||||
golang.org/x/tools v0.4.0 // indirect
|
||||
golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect
|
||||
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
|
||||
google.golang.org/appengine v1.6.7 // indirect
|
||||
@@ -87,8 +88,8 @@ require (
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
istio.io/gogo-genproto v0.0.0-20201113182723-5b8563d8a012 // indirect
|
||||
k8s.io/component-base v0.25.3 // indirect
|
||||
k8s.io/klog/v2 v2.70.1 // indirect
|
||||
k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // indirect
|
||||
k8s.io/klog/v2 v2.80.1 // indirect
|
||||
k8s.io/utils v0.0.0-20221107191617-1a15be271d1d // indirect
|
||||
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
|
||||
sigs.k8s.io/yaml v1.3.0 // indirect
|
||||
@@ -104,18 +105,18 @@ replace (
|
||||
github.com/Azure/go-autorest/tracing => github.com/Azure/go-autorest/tracing v0.5.0
|
||||
github.com/BurntSushi/toml => github.com/BurntSushi/toml v0.3.1
|
||||
github.com/OneOfOne/xxhash => github.com/OneOfOne/xxhash v1.2.7
|
||||
github.com/blang/semver => github.com/blang/semver v3.5.0+incompatible
|
||||
github.com/antihax/optional => github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6
|
||||
github.com/benbjohnson/clock => github.com/benbjohnson/clock v1.0.3
|
||||
github.com/certifi/gocertifi => github.com/certifi/gocertifi v0.0.0-20180118203423-deb3ae2ef261
|
||||
github.com/cespare/xxhash/v2 => github.com/cespare/xxhash/v2 v2.1.1
|
||||
github.com/cockroachdb/datadriven => github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa
|
||||
github.com/creack/pty => github.com/creack/pty v1.1.7
|
||||
github.com/dgrijalva/jwt-go => github.com/golang-jwt/jwt v3.2.2+incompatible
|
||||
github.com/docker/docker => github.com/docker/engine v1.4.2-0.20200203170920-46ec8731fbce
|
||||
github.com/envoyproxy/go-control-plane => github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473
|
||||
github.com/evanphx/json-patch => github.com/evanphx/json-patch v4.12.0+incompatible
|
||||
github.com/fatih/color => github.com/fatih/color v1.9.0
|
||||
github.com/form3tech-oss/jwt-go => github.com/form3tech-oss/jwt-go v3.2.2+incompatible
|
||||
github.com/fsnotify/fsnotify => github.com/fsnotify/fsnotify v1.4.9
|
||||
github.com/go-logr/zapr => github.com/go-logr/zapr v0.4.0
|
||||
github.com/gobuffalo/flect => github.com/gobuffalo/flect v0.2.0
|
||||
github.com/golang/groupcache => github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e
|
||||
github.com/golang/protobuf => github.com/golang/protobuf v1.4.2
|
||||
github.com/golang/snappy => github.com/golang/snappy v0.0.1
|
||||
@@ -143,6 +144,7 @@ replace (
|
||||
github.com/onsi/ginkgo => github.com/onsi/ginkgo v1.14.0
|
||||
github.com/onsi/gomega => github.com/onsi/gomega v1.10.1
|
||||
github.com/opentracing/opentracing-go => github.com/opentracing/opentracing-go v1.1.0
|
||||
github.com/pquerna/cachecontrol => github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021
|
||||
github.com/prometheus/client_golang => github.com/prometheus/client_golang v1.11.0
|
||||
github.com/prometheus/common => github.com/prometheus/common v0.10.0
|
||||
github.com/prometheus/procfs => github.com/prometheus/procfs v0.1.3
|
||||
@@ -152,6 +154,7 @@ replace (
|
||||
github.com/sirupsen/logrus => github.com/sirupsen/logrus v1.4.2
|
||||
github.com/soheilhy/cmux => github.com/soheilhy/cmux v0.1.4
|
||||
github.com/spaolacci/murmur3 => github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72
|
||||
github.com/spf13/afero => github.com/spf13/afero v1.2.2
|
||||
github.com/spf13/cobra => github.com/spf13/cobra v1.2.1
|
||||
github.com/spf13/viper => github.com/spf13/viper v1.4.0
|
||||
github.com/stretchr/testify => github.com/stretchr/testify v1.4.0
|
||||
@@ -181,9 +184,13 @@ replace (
|
||||
gopkg.in/check.v1 => gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15
|
||||
gopkg.in/square/go-jose.v2 => gopkg.in/square/go-jose.v2 v2.4.0
|
||||
gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c
|
||||
k8s.io/api => k8s.io/api v0.25.3
|
||||
k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.25.3
|
||||
k8s.io/apimachinery => k8s.io/apimachinery v0.25.3
|
||||
k8s.io/client-go => k8s.io/client-go v0.25.3
|
||||
k8s.io/klog/v2 => k8s.io/klog/v2 v2.70.1
|
||||
k8s.io/utils => k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed
|
||||
kubesphere.io/api => ../api
|
||||
sigs.k8s.io/controller-tools => sigs.k8s.io/controller-tools v0.6.2
|
||||
sigs.k8s.io/json => sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2
|
||||
sigs.k8s.io/yaml => sigs.k8s.io/yaml v1.2.0
|
||||
)
|
||||
|
||||
@@ -48,6 +48,7 @@ github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk5
|
||||
github.com/alessio/shellescape v1.2.2/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30=
|
||||
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
|
||||
github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q=
|
||||
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220418222510-f25a4f6275ed/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
|
||||
github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0=
|
||||
github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
||||
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
|
||||
@@ -61,11 +62,12 @@ github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:o
|
||||
github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
|
||||
github.com/aws/aws-sdk-go v1.30.12/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
|
||||
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
|
||||
github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
|
||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
||||
github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
||||
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
|
||||
github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c=
|
||||
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
|
||||
github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34=
|
||||
@@ -73,6 +75,7 @@ github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n
|
||||
github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
|
||||
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/certifi/gocertifi v0.0.0-20180118203423-deb3ae2ef261/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4=
|
||||
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
|
||||
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
||||
github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
|
||||
@@ -85,6 +88,10 @@ github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp
|
||||
github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
|
||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
||||
github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
|
||||
github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
|
||||
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w=
|
||||
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
|
||||
@@ -96,8 +103,8 @@ github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHo
|
||||
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||
github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||
github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
|
||||
@@ -108,10 +115,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ=
|
||||
github.com/dgryski/go-sip13 v0.0.0-20190329191031-25c5027a8c7b/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
|
||||
github.com/docker/engine v1.4.2-0.20200203170920-46ec8731fbce/go.mod h1:3CPr2caMgTHxxIAZgEMd3uLYPDlRvPqCpyeRf6ncPcY=
|
||||
github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
||||
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
||||
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
|
||||
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
|
||||
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||
@@ -121,7 +126,6 @@ github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFP
|
||||
github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts=
|
||||
github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw=
|
||||
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
|
||||
github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
|
||||
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
|
||||
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
|
||||
github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
|
||||
@@ -133,7 +137,9 @@ github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH
|
||||
github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||
github.com/evanphx/json-patch/v5 v5.0.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4=
|
||||
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
|
||||
github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
||||
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
|
||||
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
|
||||
github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
|
||||
github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
|
||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||
@@ -153,7 +159,6 @@ github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih
|
||||
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
|
||||
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
|
||||
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
|
||||
github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
|
||||
github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
|
||||
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
@@ -201,7 +206,6 @@ github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsd
|
||||
github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
|
||||
github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY=
|
||||
github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
|
||||
github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
|
||||
github.com/go-openapi/spec v0.19.6/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
|
||||
github.com/go-openapi/spec v0.19.7/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
|
||||
github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
|
||||
@@ -223,7 +227,6 @@ github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/
|
||||
github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4=
|
||||
github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA=
|
||||
github.com/go-openapi/validate v0.19.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo=
|
||||
github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4=
|
||||
github.com/go-openapi/validate v0.19.8/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4=
|
||||
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
|
||||
github.com/go-playground/universal-translator v0.0.0-20170327191703-71201497bace/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY=
|
||||
@@ -252,8 +255,8 @@ github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hh
|
||||
github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
|
||||
github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0=
|
||||
github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
|
||||
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
|
||||
github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
|
||||
@@ -279,6 +282,7 @@ github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
|
||||
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/google/addlicense v0.0.0-20200906110928-a0294312aa76/go.mod h1:EMjYTRimagHs1FwlIqKyX3wAM0u3rA+McvlIIWmSamA=
|
||||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||
github.com/google/cel-go v0.12.5/go.mod h1:Jk7ljRzLBhkmiAwBoUxB1sZSCVBAzkqPF25olK/iRDw=
|
||||
github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
|
||||
github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54=
|
||||
github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ=
|
||||
@@ -294,10 +298,8 @@ github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
|
||||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
||||
github.com/googleapis/gnostic v0.0.0-20170426233943-68f4ded48ba9/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
|
||||
github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
|
||||
github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
|
||||
github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU=
|
||||
github.com/googleapis/gnostic v0.4.0/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU=
|
||||
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
|
||||
github.com/gophercloud/gophercloud v0.10.0/go.mod h1:gmC5oQqMDOMO1t1gq5DquX/yAU808e/4mzjjDA76+Ss=
|
||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
||||
@@ -310,6 +312,7 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.9.6/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.14.4/go.mod h1:6CwZWGDSPRJidgKAtJVvND6soZe6fT7iteq8wDPdhb0=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
|
||||
github.com/hashicorp/consul/api v1.4.0/go.mod h1:xc8u05kyMa3Wjr9eEAsIAo3dg8+LywT5E/Cl7cNS5nU=
|
||||
github.com/hashicorp/consul/sdk v0.4.0/go.mod h1:fY08Y9z5SvJqevyZNy6WWPXiG3KwBPAvlcdx16zZ0fM=
|
||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||
@@ -361,12 +364,10 @@ github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22
|
||||
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
|
||||
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
||||
github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||
github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
@@ -588,16 +589,35 @@ github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6Ut
|
||||
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
||||
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
|
||||
go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg=
|
||||
go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A=
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
|
||||
go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+DHwTGEbU=
|
||||
go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY=
|
||||
go.etcd.io/etcd/pkg/v3 v3.5.4/go.mod h1:OI+TtO+Aa3nhQSppMbwE4ld3uF1/fqqwbpfndbbrEe0=
|
||||
go.etcd.io/etcd/raft/v3 v3.5.4/go.mod h1:SCuunjYvZFC0fBX0vxMSPjuZmpcSk+XaAcMrD6Do03w=
|
||||
go.etcd.io/etcd/server/v3 v3.5.4/go.mod h1:S5/YTU15KxymM5l3T6b09sNOHPXqGYIZStpuuGbb65c=
|
||||
go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
|
||||
go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
|
||||
go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
|
||||
go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
|
||||
go.mongodb.org/mongo-driver v1.3.2/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
|
||||
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||
go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc=
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4=
|
||||
go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo=
|
||||
go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM=
|
||||
go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU=
|
||||
go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw=
|
||||
go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc=
|
||||
go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE=
|
||||
go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE=
|
||||
go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw=
|
||||
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
|
||||
go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk=
|
||||
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
||||
go.uber.org/goleak v1.1.0 h1:MJDxhkyAAWXEJf/y4NSOPYD/bBx7JAzIjUbv12/4FFs=
|
||||
go.uber.org/goleak v1.1.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
|
||||
go.uber.org/multierr v1.3.0 h1:sFPn2GLc3poCkfrpIXGhBD2X0CMIo4Q/zSULXrj/+uc=
|
||||
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
|
||||
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=
|
||||
@@ -605,6 +625,8 @@ go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9E
|
||||
go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
||||
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
||||
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
|
||||
go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
|
||||
go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
|
||||
go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI=
|
||||
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
@@ -657,9 +679,11 @@ google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfG
|
||||
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
google.golang.org/genproto v0.0.0-20200420144010-e5e8543f8aeb/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||
google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
|
||||
google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
|
||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||
@@ -676,6 +700,12 @@ google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8
|
||||
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
|
||||
google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
|
||||
google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
|
||||
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
|
||||
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
|
||||
google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
|
||||
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
|
||||
google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
|
||||
google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
|
||||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
|
||||
@@ -698,7 +728,6 @@ gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
|
||||
gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
|
||||
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
|
||||
gopkg.in/go-playground/validator.v9 v9.27.0/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
|
||||
gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
||||
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
|
||||
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
||||
gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
|
||||
@@ -720,7 +749,6 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
|
||||
gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
|
||||
gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8=
|
||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
@@ -733,87 +761,52 @@ istio.io/api v0.0.0-20201113182140-d4b7e3fc2b44/go.mod h1:kyq3g5w42zl/AKlbzDGppY
|
||||
istio.io/gogo-genproto v0.0.0-20190930162913-45029607206a/go.mod h1:OzpAts7jljZceG4Vqi5/zXy/pOg1b209T3jb7Nv5wIs=
|
||||
istio.io/gogo-genproto v0.0.0-20201113182723-5b8563d8a012 h1:rCPnRe6A2LvpvP1/fy1ZzPFBUaWmBUHxFEw4Onphd7c=
|
||||
istio.io/gogo-genproto v0.0.0-20201113182723-5b8563d8a012/go.mod h1:OzpAts7jljZceG4Vqi5/zXy/pOg1b209T3jb7Nv5wIs=
|
||||
k8s.io/api v0.0.0-20190620084959-7cf5895f2711/go.mod h1:TBhBqb1AWbBQbW3XRusr7n7E4v2+5ZY8r8sAMnyFC5A=
|
||||
k8s.io/api v0.17.5/go.mod h1:0zV5/ungglgy2Rlm3QK8fbxkXVs+BSJWpJP/+8gUVLY=
|
||||
k8s.io/api v0.18.1/go.mod h1:3My4jorQWzSs5a+l7Ge6JBbIxChLnY8HnuT58ZWolss=
|
||||
k8s.io/api v0.18.2/go.mod h1:SJCWI7OLzhZSvbY7U8zwNl9UA4o1fizoug34OV/2r78=
|
||||
k8s.io/api v0.21.3/go.mod h1:hUgeYHUbBp23Ue4qdX9tR8/ANi/g3ehylAqDn9NWVOg=
|
||||
k8s.io/api v0.25.3 h1:Q1v5UFfYe87vi5H7NU0p4RXC26PPMT8KOpr1TLQbCMQ=
|
||||
k8s.io/api v0.25.3/go.mod h1:o42gKscFrEVjHdQnyRenACrMtbuJsVdP+WVjqejfzmI=
|
||||
k8s.io/apiextensions-apiserver v0.18.2/go.mod h1:q3faSnRGmYimiocj6cHQ1I3WpLqmDgJFlKL37fC4ZvY=
|
||||
k8s.io/apiextensions-apiserver v0.21.3/go.mod h1:kl6dap3Gd45+21Jnh6utCx8Z2xxLm8LGDkprcd+KbsE=
|
||||
k8s.io/apiextensions-apiserver v0.25.3 h1:bfI4KS31w2f9WM1KLGwnwuVlW3RSRPuIsfNF/3HzR0k=
|
||||
k8s.io/apiextensions-apiserver v0.25.3/go.mod h1:ZJqwpCkxIx9itilmZek7JgfUAM0dnTsA48I4krPqRmo=
|
||||
k8s.io/apimachinery v0.0.0-20190612205821-1799e75a0719/go.mod h1:I4A+glKBHiTgiEjQiCCQfCAIcIMFGt291SmsvcrFzJA=
|
||||
k8s.io/apimachinery v0.17.5/go.mod h1:ioIo1G/a+uONV7Tv+ZmCbMG1/a3kVw5YcDdncd8ugQ0=
|
||||
k8s.io/apimachinery v0.18.1/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA=
|
||||
k8s.io/apimachinery v0.18.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA=
|
||||
k8s.io/apimachinery v0.21.3/go.mod h1:H/IM+5vH9kZRNJ4l3x/fXP/5bOPJaVP/guptnZPeCFI=
|
||||
k8s.io/apimachinery v0.25.3 h1:7o9ium4uyUOM76t6aunP0nZuex7gDf8VGwkR5RcJnQc=
|
||||
k8s.io/apimachinery v0.25.3/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo=
|
||||
k8s.io/apiserver v0.18.2/go.mod h1:Xbh066NqrZO8cbsoenCwyDJ1OSi8Ag8I2lezeHxzwzw=
|
||||
k8s.io/apiserver v0.21.3/go.mod h1:eDPWlZG6/cCCMj/JBcEpDoK+I+6i3r9GsChYBHSbAzU=
|
||||
k8s.io/apiserver v0.25.3/go.mod h1:9bT47iM2fzRuhICJpM/RcQR9sqDDfZ7Yw60h0p3JW08=
|
||||
k8s.io/client-go v0.25.3 h1:oB4Dyl8d6UbfDHD8Bv8evKylzs3BXzzufLiO27xuPs0=
|
||||
k8s.io/client-go v0.25.3/go.mod h1:t39LPczAIMwycjcXkVc+CB+PZV69jQuNx4um5ORDjQA=
|
||||
k8s.io/code-generator v0.0.0-20190814140513-6483f25b1faf/go.mod h1:PT1SOMszr9TJAi4EL8ncHI85SEdLvzWWYlfJ7ICZeYU=
|
||||
k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc=
|
||||
k8s.io/code-generator v0.18.9/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c=
|
||||
k8s.io/code-generator v0.21.3/go.mod h1:K3y0Bv9Cz2cOW2vXUrNZlFbflhuPvuadW6JdnN6gGKo=
|
||||
k8s.io/component-base v0.18.2/go.mod h1:kqLlMuhJNHQ9lz8Z7V5bxUUtjFZnrypArGl58gmDfUM=
|
||||
k8s.io/component-base v0.21.3/go.mod h1:kkuhtfEHeZM6LkX0saqSK8PbdO7A0HigUngmhhrwfGQ=
|
||||
k8s.io/code-generator v0.25.3/go.mod h1:9F5fuVZOMWRme7MYj2YT3L9ropPWPokd9VRhVyD3+0w=
|
||||
k8s.io/component-base v0.25.3 h1:UrsxciGdrCY03ULT1h/S/gXFCOPnLhUVwSyx+hM/zq4=
|
||||
k8s.io/component-base v0.25.3/go.mod h1:WYoS8L+IlTZgU7rhAl5Ctpw0WdMxDfCC5dkxcEFa/TI=
|
||||
k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
|
||||
k8s.io/gengo v0.0.0-20190813173942-955ffa8fcfc9/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
|
||||
k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
|
||||
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
|
||||
k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||
k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||
k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
|
||||
k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
|
||||
k8s.io/klog v0.3.1/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
|
||||
k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
|
||||
k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
|
||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||
k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
|
||||
k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ=
|
||||
k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
||||
k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc=
|
||||
k8s.io/kube-openapi v0.0.0-20190709113604-33be087ad058/go.mod h1:nfDlWeOsu3pUf4yWGL+ERqohP4YsZcBJXWMK+gkzOA4=
|
||||
k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E=
|
||||
k8s.io/kube-openapi v0.0.0-20200316234421-82d701f24f9d/go.mod h1:F+5wygcW0wmRTnM3cOgIqGivxkwSWIWT5YdsDbeAOaU=
|
||||
k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E=
|
||||
k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE=
|
||||
k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA=
|
||||
k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU=
|
||||
k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
|
||||
k8s.io/utils v0.0.0-20200414100711-2df71ebbae66/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed h1:jAne/RjBTyawwAy0utX5eqigAwz/lQhTmy+Hr/Cpue4=
|
||||
k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0=
|
||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.19/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
|
||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.33/go.mod h1:soWkSNf2tZC7aMibXEqVhCd73GOY5fJikn8qbdzemB0=
|
||||
sigs.k8s.io/application v0.8.4-0.20201016185654-c8e2959e57a0 h1:cH3Q4uNycL9LgzlyU+/UikIM1T6tx9LKc/Ie/QVIRM8=
|
||||
sigs.k8s.io/application v0.8.4-0.20201016185654-c8e2959e57a0/go.mod h1:wdTrELsIgKk8lnlRaoKWao9YpLelXpABdEgCM1aEEE4=
|
||||
sigs.k8s.io/controller-runtime v0.6.0/go.mod h1:CpYf5pdNY/B352A1TFLAS2JVSlnGQ5O2cftPHndTroo=
|
||||
sigs.k8s.io/controller-runtime v0.12.1 h1:4BJY01xe9zKQti8oRjj/NeHKRXthf1YkYJAgLONFFoI=
|
||||
sigs.k8s.io/controller-runtime v0.12.1/go.mod h1:BKhxlA4l7FPK4AQcsuL4X6vZeWnKDXez/vp1Y8dxTU0=
|
||||
sigs.k8s.io/controller-tools v0.6.2/go.mod h1:oaeGpjXn6+ZSEIQkUe/+3I40PNiDYp9aeawbt3xTgJ8=
|
||||
sigs.k8s.io/controller-tools v0.4.0/go.mod h1:G9rHdZMVlBDocIxGkK3jHLWqcTMNvveypYJwrvYKjWU=
|
||||
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y=
|
||||
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY=
|
||||
sigs.k8s.io/kind v0.8.1/go.mod h1:oNKTxUVPYkV9lWzY6CVMNluVq8cBsyq+UgPJdvA3uu4=
|
||||
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
|
||||
sigs.k8s.io/structured-merge-diff/v2 v2.0.1/go.mod h1:Wb7vfKAodbKgf6tn1Kl0VvGj7mRH6DGaRcixXEJXTsE=
|
||||
sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
|
||||
sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E=
|
||||
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
|
||||
|
||||
@@ -6,7 +6,7 @@ go 1.18
|
||||
|
||||
require (
|
||||
github.com/go-resty/resty/v2 v2.5.0
|
||||
k8s.io/apimachinery v0.25.3
|
||||
k8s.io/apimachinery v0.26.0
|
||||
k8s.io/client-go v12.0.0+incompatible
|
||||
sigs.k8s.io/controller-runtime v0.12.1
|
||||
)
|
||||
@@ -17,7 +17,7 @@ require (
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/emicklei/go-restful/v3 v3.8.0 // indirect
|
||||
github.com/fsnotify/fsnotify v1.5.4 // indirect
|
||||
github.com/fsnotify/fsnotify v1.6.0 // indirect
|
||||
github.com/go-logr/logr v1.2.3 // indirect
|
||||
github.com/go-logr/zapr v1.2.3 // indirect
|
||||
github.com/go-openapi/jsonpointer v0.19.5 // indirect
|
||||
@@ -26,6 +26,7 @@ require (
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/golang/protobuf v1.5.2 // indirect
|
||||
github.com/google/gnostic v0.5.7-v3refs // indirect
|
||||
github.com/google/go-cmp v0.5.9 // indirect
|
||||
github.com/google/gofuzz v1.2.0 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/kr/pretty v0.2.1 // indirect
|
||||
@@ -33,14 +34,15 @@ require (
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
||||
github.com/onsi/gomega v1.24.2 // indirect
|
||||
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee // indirect
|
||||
golang.org/x/net v0.0.0-20220909164309-bea034e7d591 // indirect
|
||||
golang.org/x/net v0.4.0 // indirect
|
||||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect
|
||||
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 // indirect
|
||||
golang.org/x/sys v0.3.0 // indirect
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
|
||||
golang.org/x/text v0.3.7 // indirect
|
||||
golang.org/x/text v0.5.0 // indirect
|
||||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
|
||||
golang.org/x/tools v0.1.12 // indirect
|
||||
golang.org/x/tools v0.4.0 // indirect
|
||||
golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect
|
||||
google.golang.org/appengine v1.6.7 // indirect
|
||||
google.golang.org/protobuf v1.28.1 // indirect
|
||||
@@ -48,10 +50,10 @@ require (
|
||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
k8s.io/api v0.25.3 // indirect
|
||||
k8s.io/klog/v2 v2.70.1 // indirect
|
||||
k8s.io/api v0.26.0 // indirect
|
||||
k8s.io/klog/v2 v2.80.1 // indirect
|
||||
k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect
|
||||
k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // indirect
|
||||
k8s.io/utils v0.0.0-20221107191617-1a15be271d1d // indirect
|
||||
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
|
||||
sigs.k8s.io/yaml v1.3.0 // indirect
|
||||
@@ -112,7 +114,12 @@ replace (
|
||||
google.golang.org/appengine => google.golang.org/appengine v1.6.6
|
||||
gopkg.in/check.v1 => gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15
|
||||
gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c
|
||||
k8s.io/api => k8s.io/api v0.25.3
|
||||
k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.25.3
|
||||
k8s.io/apimachinery => k8s.io/apimachinery v0.25.3
|
||||
k8s.io/client-go => k8s.io/client-go v0.25.3
|
||||
k8s.io/klog/v2 => k8s.io/klog/v2 v2.70.1
|
||||
k8s.io/utils => k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed
|
||||
kubesphere.io/client-go => ../client-go
|
||||
sigs.k8s.io/json => sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2
|
||||
sigs.k8s.io/yaml => sigs.k8s.io/yaml v1.2.0
|
||||
|
||||
@@ -28,7 +28,6 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
|
||||
github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
|
||||
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
@@ -85,8 +84,11 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||
github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
|
||||
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
||||
github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA=
|
||||
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
|
||||
github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE=
|
||||
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
@@ -162,8 +164,10 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
|
||||
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||
@@ -178,7 +182,6 @@ k8s.io/apimachinery v0.25.3 h1:7o9ium4uyUOM76t6aunP0nZuex7gDf8VGwkR5RcJnQc=
|
||||
k8s.io/apimachinery v0.25.3/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo=
|
||||
k8s.io/client-go v0.25.3 h1:oB4Dyl8d6UbfDHD8Bv8evKylzs3BXzzufLiO27xuPs0=
|
||||
k8s.io/client-go v0.25.3/go.mod h1:t39LPczAIMwycjcXkVc+CB+PZV69jQuNx4um5ORDjQA=
|
||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||
k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ=
|
||||
k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
||||
k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA=
|
||||
|
||||
@@ -7,12 +7,12 @@ go 1.18
|
||||
require (
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
helm.sh/helm/v3 v3.10.3
|
||||
k8s.io/api v0.25.3
|
||||
k8s.io/apimachinery v0.25.3
|
||||
k8s.io/api v0.26.0
|
||||
k8s.io/apimachinery v0.26.0
|
||||
k8s.io/cli-runtime v0.25.3
|
||||
k8s.io/client-go v12.0.0+incompatible
|
||||
k8s.io/klog/v2 v2.70.1
|
||||
k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed
|
||||
k8s.io/klog/v2 v2.80.1
|
||||
k8s.io/utils v0.0.0-20221107191617-1a15be271d1d
|
||||
sigs.k8s.io/kustomize/api v0.12.1
|
||||
)
|
||||
|
||||
@@ -63,7 +63,7 @@ require (
|
||||
github.com/gomodule/redigo v2.0.0+incompatible // indirect
|
||||
github.com/google/btree v1.0.1 // indirect
|
||||
github.com/google/gnostic v0.5.7-v3refs // indirect
|
||||
github.com/google/go-cmp v0.5.8 // indirect
|
||||
github.com/google/go-cmp v0.5.9 // indirect
|
||||
github.com/google/gofuzz v1.2.0 // indirect
|
||||
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
|
||||
github.com/google/uuid v1.2.0 // indirect
|
||||
@@ -99,6 +99,7 @@ require (
|
||||
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect
|
||||
github.com/morikuni/aec v1.0.0 // indirect
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
||||
github.com/onsi/gomega v1.24.2 // indirect
|
||||
github.com/opencontainers/go-digest v1.0.0 // indirect
|
||||
github.com/opencontainers/image-spec v1.1.0-rc2 // indirect
|
||||
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
|
||||
@@ -123,13 +124,14 @@ require (
|
||||
go.etcd.io/etcd/api/v3 v3.5.4 // indirect
|
||||
go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect
|
||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d // indirect
|
||||
golang.org/x/net v0.0.0-20220909164309-bea034e7d591 // indirect
|
||||
golang.org/x/net v0.4.0 // indirect
|
||||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect
|
||||
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 // indirect
|
||||
golang.org/x/sys v0.3.0 // indirect
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
|
||||
golang.org/x/text v0.3.7 // indirect
|
||||
golang.org/x/text v0.5.0 // indirect
|
||||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
|
||||
golang.org/x/tools v0.4.0 // indirect
|
||||
golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect
|
||||
google.golang.org/appengine v1.6.7 // indirect
|
||||
google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21 // indirect
|
||||
@@ -140,7 +142,7 @@ require (
|
||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
gotest.tools v2.2.0+incompatible // indirect
|
||||
k8s.io/apiextensions-apiserver v0.25.3 // indirect
|
||||
k8s.io/apiextensions-apiserver v0.26.0 // indirect
|
||||
k8s.io/apiserver v0.25.3 // indirect
|
||||
k8s.io/component-base v0.25.3 // indirect
|
||||
k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect
|
||||
@@ -246,7 +248,6 @@ replace (
|
||||
github.com/onsi/gomega => github.com/onsi/gomega v1.10.1
|
||||
github.com/opencontainers/image-spec => github.com/opencontainers/image-spec v1.0.1
|
||||
github.com/opencontainers/runtime-spec => github.com/opencontainers/runtime-spec v1.0.2
|
||||
github.com/opencontainers/selinux => github.com/opencontainers/selinux v1.10.0
|
||||
github.com/pelletier/go-toml => github.com/pelletier/go-toml v1.7.0
|
||||
github.com/phayes/freeport => github.com/phayes/freeport v0.0.0-20171002181615-b8543db493a5
|
||||
github.com/pquerna/cachecontrol => github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021
|
||||
@@ -292,7 +293,12 @@ replace (
|
||||
gopkg.in/check.v1 => gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15
|
||||
gopkg.in/square/go-jose.v2 => gopkg.in/square/go-jose.v2 v2.4.0
|
||||
gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c
|
||||
k8s.io/api => k8s.io/api v0.25.3
|
||||
k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.25.3
|
||||
k8s.io/apimachinery => k8s.io/apimachinery v0.25.3
|
||||
k8s.io/client-go => k8s.io/client-go v0.25.3
|
||||
k8s.io/klog/v2 => k8s.io/klog/v2 v2.70.1
|
||||
k8s.io/utils => k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed
|
||||
kubesphere.io/utils => ../utils
|
||||
sigs.k8s.io/json => sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2
|
||||
sigs.k8s.io/kustomize/kustomize/v4 => sigs.k8s.io/kustomize/kustomize/v4 v4.1.2
|
||||
|
||||
@@ -141,7 +141,6 @@ github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2
|
||||
github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
|
||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
|
||||
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
|
||||
github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
|
||||
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
@@ -611,7 +610,6 @@ k8s.io/client-go v0.25.3 h1:oB4Dyl8d6UbfDHD8Bv8evKylzs3BXzzufLiO27xuPs0=
|
||||
k8s.io/client-go v0.25.3/go.mod h1:t39LPczAIMwycjcXkVc+CB+PZV69jQuNx4um5ORDjQA=
|
||||
k8s.io/component-base v0.25.3 h1:UrsxciGdrCY03ULT1h/S/gXFCOPnLhUVwSyx+hM/zq4=
|
||||
k8s.io/component-base v0.25.3/go.mod h1:WYoS8L+IlTZgU7rhAl5Ctpw0WdMxDfCC5dkxcEFa/TI=
|
||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||
k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ=
|
||||
k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
||||
k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA=
|
||||
|
||||
32
vendor/modules.txt
vendored
32
vendor/modules.txt
vendored
@@ -295,7 +295,7 @@ github.com/felixge/httpsnoop
|
||||
# github.com/form3tech-oss/jwt-go v3.2.3+incompatible => github.com/form3tech-oss/jwt-go v3.2.2+incompatible
|
||||
## explicit
|
||||
github.com/form3tech-oss/jwt-go
|
||||
# github.com/fsnotify/fsnotify v1.5.4 => github.com/fsnotify/fsnotify v1.4.9
|
||||
# github.com/fsnotify/fsnotify v1.6.0 => github.com/fsnotify/fsnotify v1.4.9
|
||||
## explicit; go 1.13
|
||||
github.com/fsnotify/fsnotify
|
||||
# github.com/ghodss/yaml v1.0.0 => github.com/ghodss/yaml v1.0.0
|
||||
@@ -370,7 +370,7 @@ github.com/go-resty/resty/v2
|
||||
# github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 => github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0
|
||||
## explicit; go 1.13
|
||||
github.com/go-task/slim-sprig
|
||||
# github.com/gobuffalo/flect v0.2.5 => github.com/gobuffalo/flect v0.2.0
|
||||
# github.com/gobuffalo/flect v0.3.0 => github.com/gobuffalo/flect v0.2.0
|
||||
## explicit; go 1.12
|
||||
github.com/gobuffalo/flect
|
||||
# github.com/gobuffalo/genny v0.1.1 => github.com/gobuffalo/genny v0.1.1
|
||||
@@ -428,7 +428,7 @@ github.com/google/gnostic/extensions
|
||||
github.com/google/gnostic/jsonschema
|
||||
github.com/google/gnostic/openapiv2
|
||||
github.com/google/gnostic/openapiv3
|
||||
# github.com/google/go-cmp v0.5.8 => github.com/google/go-cmp v0.4.0
|
||||
# github.com/google/go-cmp v0.5.9 => github.com/google/go-cmp v0.4.0
|
||||
## explicit; go 1.8
|
||||
github.com/google/go-cmp/cmp
|
||||
github.com/google/go-cmp/cmp/internal/diff
|
||||
@@ -695,7 +695,7 @@ github.com/onsi/ginkgo/reporters/stenographer
|
||||
github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable
|
||||
github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty
|
||||
github.com/onsi/ginkgo/types
|
||||
# github.com/onsi/gomega v1.20.1 => github.com/onsi/gomega v1.10.1
|
||||
# github.com/onsi/gomega v1.24.2 => github.com/onsi/gomega v1.10.1
|
||||
## explicit
|
||||
github.com/onsi/gomega
|
||||
github.com/onsi/gomega/format
|
||||
@@ -1209,7 +1209,7 @@ golang.org/x/crypto/ssh/knownhosts
|
||||
## explicit
|
||||
golang.org/x/lint
|
||||
golang.org/x/lint/golint
|
||||
# golang.org/x/net v0.0.0-20220909164309-bea034e7d591 => golang.org/x/net v0.0.0-20210525063256-abc453219eb5
|
||||
# golang.org/x/net v0.4.0 => golang.org/x/net v0.0.0-20210525063256-abc453219eb5
|
||||
## explicit; go 1.17
|
||||
golang.org/x/net/context
|
||||
golang.org/x/net/context/ctxhttp
|
||||
@@ -1235,7 +1235,7 @@ golang.org/x/oauth2/internal
|
||||
golang.org/x/sync/errgroup
|
||||
golang.org/x/sync/semaphore
|
||||
golang.org/x/sync/singleflight
|
||||
# golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 => golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d
|
||||
# golang.org/x/sys v0.3.0 => golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d
|
||||
## explicit; go 1.17
|
||||
golang.org/x/sys/cpu
|
||||
golang.org/x/sys/internal/unsafeheader
|
||||
@@ -1247,7 +1247,7 @@ golang.org/x/sys/windows/svc/eventlog
|
||||
# golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 => golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1
|
||||
## explicit; go 1.11
|
||||
golang.org/x/term
|
||||
# golang.org/x/text v0.3.7 => golang.org/x/text v0.3.0
|
||||
# golang.org/x/text v0.5.0 => golang.org/x/text v0.3.0
|
||||
## explicit
|
||||
golang.org/x/text/encoding
|
||||
golang.org/x/text/encoding/charmap
|
||||
@@ -1271,7 +1271,7 @@ golang.org/x/text/width
|
||||
# golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
||||
## explicit
|
||||
golang.org/x/time/rate
|
||||
# golang.org/x/tools v0.1.12 => golang.org/x/tools v0.0.0-20190710153321-831012c29e42
|
||||
# golang.org/x/tools v0.4.0 => golang.org/x/tools v0.0.0-20190710153321-831012c29e42
|
||||
## explicit; go 1.11
|
||||
golang.org/x/tools/go/analysis
|
||||
golang.org/x/tools/go/analysis/passes/inspect
|
||||
@@ -1614,7 +1614,7 @@ istio.io/client-go/pkg/listers/security/v1beta1
|
||||
## explicit; go 1.12
|
||||
istio.io/gogo-genproto/googleapis/google/api
|
||||
istio.io/gogo-genproto/googleapis/google/rpc
|
||||
# k8s.io/api v0.25.3 => k8s.io/api v0.25.3
|
||||
# k8s.io/api v0.26.0 => k8s.io/api v0.25.3
|
||||
## explicit; go 1.19
|
||||
k8s.io/api/admission/v1
|
||||
k8s.io/api/admission/v1beta1
|
||||
@@ -1665,7 +1665,7 @@ k8s.io/api/scheduling/v1beta1
|
||||
k8s.io/api/storage/v1
|
||||
k8s.io/api/storage/v1alpha1
|
||||
k8s.io/api/storage/v1beta1
|
||||
# k8s.io/apiextensions-apiserver v0.25.3 => k8s.io/apiextensions-apiserver v0.25.3
|
||||
# k8s.io/apiextensions-apiserver v0.26.0 => k8s.io/apiextensions-apiserver v0.25.3
|
||||
## explicit; go 1.19
|
||||
k8s.io/apiextensions-apiserver/pkg/apis/apiextensions
|
||||
k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1
|
||||
@@ -1684,7 +1684,7 @@ k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensio
|
||||
k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/internalinterfaces
|
||||
k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1
|
||||
k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1beta1
|
||||
# k8s.io/apimachinery v0.25.3 => k8s.io/apimachinery v0.25.3
|
||||
# k8s.io/apimachinery v0.26.0 => k8s.io/apimachinery v0.25.3
|
||||
## explicit; go 1.19
|
||||
k8s.io/apimachinery/pkg/api/equality
|
||||
k8s.io/apimachinery/pkg/api/errors
|
||||
@@ -2228,7 +2228,7 @@ k8s.io/gengo/generator
|
||||
k8s.io/gengo/namer
|
||||
k8s.io/gengo/parser
|
||||
k8s.io/gengo/types
|
||||
# k8s.io/klog/v2 v2.70.1 => k8s.io/klog/v2 v2.70.1
|
||||
# k8s.io/klog/v2 v2.80.1 => k8s.io/klog/v2 v2.70.1
|
||||
## explicit; go 1.13
|
||||
k8s.io/klog/v2
|
||||
k8s.io/klog/v2/internal/buffer
|
||||
@@ -2283,7 +2283,7 @@ k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1alpha1
|
||||
k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1alpha1/fake
|
||||
k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1beta1
|
||||
k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1beta1/fake
|
||||
# k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed => k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed
|
||||
# k8s.io/utils v0.0.0-20221107191617-1a15be271d1d => k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed
|
||||
## explicit; go 1.12
|
||||
k8s.io/utils/buffer
|
||||
k8s.io/utils/clock
|
||||
@@ -2414,8 +2414,8 @@ sigs.k8s.io/controller-runtime/pkg/webhook
|
||||
sigs.k8s.io/controller-runtime/pkg/webhook/admission
|
||||
sigs.k8s.io/controller-runtime/pkg/webhook/conversion
|
||||
sigs.k8s.io/controller-runtime/pkg/webhook/internal/metrics
|
||||
# sigs.k8s.io/controller-tools v0.9.0 => sigs.k8s.io/controller-tools v0.6.2
|
||||
## explicit; go 1.16
|
||||
# sigs.k8s.io/controller-tools v0.11.1 => sigs.k8s.io/controller-tools v0.11.1
|
||||
## explicit; go 1.19
|
||||
sigs.k8s.io/controller-tools/cmd/controller-gen
|
||||
sigs.k8s.io/controller-tools/pkg/crd
|
||||
sigs.k8s.io/controller-tools/pkg/crd/markers
|
||||
@@ -3341,7 +3341,7 @@ sigs.k8s.io/yaml
|
||||
# sigs.k8s.io/apiserver-network-proxy/konnectivity-client => sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.33
|
||||
# sigs.k8s.io/application => sigs.k8s.io/application v0.8.4-0.20201016185654-c8e2959e57a0
|
||||
# sigs.k8s.io/controller-runtime => sigs.k8s.io/controller-runtime v0.12.1
|
||||
# sigs.k8s.io/controller-tools => sigs.k8s.io/controller-tools v0.6.2
|
||||
# sigs.k8s.io/controller-tools => sigs.k8s.io/controller-tools v0.11.1
|
||||
# sigs.k8s.io/json => sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2
|
||||
# sigs.k8s.io/kind => sigs.k8s.io/kind v0.8.1
|
||||
# sigs.k8s.io/kubebuilder/v3 => sigs.k8s.io/kubebuilder/v3 v3.0.0-alpha.0.0.20210716121009-fde793f20067
|
||||
|
||||
2
vendor/sigs.k8s.io/controller-tools/cmd/controller-gen/main.go
generated
vendored
2
vendor/sigs.k8s.io/controller-tools/cmd/controller-gen/main.go
generated
vendored
@@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
|
||||
89
vendor/sigs.k8s.io/controller-tools/pkg/crd/conv.go
generated
vendored
89
vendor/sigs.k8s.io/controller-tools/pkg/crd/conv.go
generated
vendored
@@ -6,7 +6,6 @@ import (
|
||||
apiextinternal "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
|
||||
apiext "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
|
||||
apiextv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
|
||||
"k8s.io/apimachinery/pkg/api/equality"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
)
|
||||
@@ -22,13 +21,15 @@ func init() {
|
||||
if err := apiext.AddToScheme(conversionScheme); err != nil {
|
||||
panic("must be able to add apiextensions/v1 to the CRD conversion Scheme")
|
||||
}
|
||||
if err := apiextv1beta1.AddToScheme(conversionScheme); err != nil {
|
||||
panic("must be able to add apiextensions/v1beta1 to the CRD conversion Scheme")
|
||||
}
|
||||
}
|
||||
|
||||
// AsVersion converts a CRD from the canonical internal form (currently v1) to some external form.
|
||||
func AsVersion(original apiext.CustomResourceDefinition, gv schema.GroupVersion) (runtime.Object, error) {
|
||||
// TODO: Do we need to keep maintaining this conversion function
|
||||
// post 1.22 when only CRDv1 is served by the apiserver?
|
||||
if gv == apiextv1beta1.SchemeGroupVersion {
|
||||
return nil, fmt.Errorf("apiVersion %q is not supported", gv.String())
|
||||
}
|
||||
// We can use the internal versions an existing conversions from kubernetes, since they're not in k/k itself.
|
||||
// This punts the problem of conversion down the road for a future maintainer (or future instance of @directxman12)
|
||||
// when we have to support older versions that get removed, or when API machinery decides to yell at us for this
|
||||
@@ -40,83 +41,3 @@ func AsVersion(original apiext.CustomResourceDefinition, gv schema.GroupVersion)
|
||||
|
||||
return conversionScheme.ConvertToVersion(intVer, gv)
|
||||
}
|
||||
|
||||
// mergeIdenticalSubresources checks to see if subresources are identical across
|
||||
// all versions, and if so, merges them into a top-level version.
|
||||
//
|
||||
// This assumes you're not using trivial versions.
|
||||
func mergeIdenticalSubresources(crd *apiextv1beta1.CustomResourceDefinition) {
|
||||
subres := crd.Spec.Versions[0].Subresources
|
||||
for _, ver := range crd.Spec.Versions {
|
||||
if ver.Subresources == nil || !equality.Semantic.DeepEqual(subres, ver.Subresources) {
|
||||
// either all nil, or not identical
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// things are identical if we've gotten this far, so move the subresources up
|
||||
// and discard the identical per-version ones
|
||||
crd.Spec.Subresources = subres
|
||||
for i := range crd.Spec.Versions {
|
||||
crd.Spec.Versions[i].Subresources = nil
|
||||
}
|
||||
}
|
||||
|
||||
// mergeIdenticalSchemata checks to see if schemata are identical across
|
||||
// all versions, and if so, merges them into a top-level version.
|
||||
//
|
||||
// This assumes you're not using trivial versions.
|
||||
func mergeIdenticalSchemata(crd *apiextv1beta1.CustomResourceDefinition) {
|
||||
schema := crd.Spec.Versions[0].Schema
|
||||
for _, ver := range crd.Spec.Versions {
|
||||
if ver.Schema == nil || !equality.Semantic.DeepEqual(schema, ver.Schema) {
|
||||
// either all nil, or not identical
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// things are identical if we've gotten this far, so move the schemata up
|
||||
// to a single schema and discard the identical per-version ones
|
||||
crd.Spec.Validation = schema
|
||||
for i := range crd.Spec.Versions {
|
||||
crd.Spec.Versions[i].Schema = nil
|
||||
}
|
||||
}
|
||||
|
||||
// mergeIdenticalPrinterColumns checks to see if schemata are identical across
|
||||
// all versions, and if so, merges them into a top-level version.
|
||||
//
|
||||
// This assumes you're not using trivial versions.
|
||||
func mergeIdenticalPrinterColumns(crd *apiextv1beta1.CustomResourceDefinition) {
|
||||
cols := crd.Spec.Versions[0].AdditionalPrinterColumns
|
||||
for _, ver := range crd.Spec.Versions {
|
||||
if len(ver.AdditionalPrinterColumns) == 0 || !equality.Semantic.DeepEqual(cols, ver.AdditionalPrinterColumns) {
|
||||
// either all nil, or not identical
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// things are identical if we've gotten this far, so move the printer columns up
|
||||
// and discard the identical per-version ones
|
||||
crd.Spec.AdditionalPrinterColumns = cols
|
||||
for i := range crd.Spec.Versions {
|
||||
crd.Spec.Versions[i].AdditionalPrinterColumns = nil
|
||||
}
|
||||
}
|
||||
|
||||
// MergeIdenticalVersionInfo makes sure that components of the Versions field that are identical
|
||||
// across all versions get merged into the top-level fields in v1beta1.
|
||||
//
|
||||
// This is required by the Kubernetes API server validation.
|
||||
//
|
||||
// The reason is that a v1beta1 -> v1 -> v1beta1 conversion cycle would need to
|
||||
// round-trip identically, v1 doesn't have top-level subresources, and without
|
||||
// this restriction it would be ambiguous how a v1-with-identical-subresources
|
||||
// converts into a v1beta1).
|
||||
func MergeIdenticalVersionInfo(crd *apiextv1beta1.CustomResourceDefinition) {
|
||||
if len(crd.Spec.Versions) > 0 {
|
||||
mergeIdenticalSubresources(crd)
|
||||
mergeIdenticalSchemata(crd)
|
||||
mergeIdenticalPrinterColumns(crd)
|
||||
}
|
||||
}
|
||||
|
||||
8
vendor/sigs.k8s.io/controller-tools/pkg/crd/doc.go
generated
vendored
8
vendor/sigs.k8s.io/controller-tools/pkg/crd/doc.go
generated
vendored
@@ -17,14 +17,14 @@ limitations under the License.
|
||||
// Package crd contains utilities for generating CustomResourceDefinitions and
|
||||
// their corresponding OpenAPI validation schemata.
|
||||
//
|
||||
// Markers
|
||||
// # Markers
|
||||
//
|
||||
// Markers live under the markers subpackage. Two types of markers exist:
|
||||
// those that modify schema generation (for validation), and those that modify
|
||||
// the rest of the CRD. See the subpackage for more information and all
|
||||
// supported markers.
|
||||
//
|
||||
// Collecting Types and Generating CRDs
|
||||
// # Collecting Types and Generating CRDs
|
||||
//
|
||||
// The Parser is the entrypoint for collecting the information required to
|
||||
// generate CRDs. Like loader and collector, its methods are idemptotent, not
|
||||
@@ -40,13 +40,13 @@ limitations under the License.
|
||||
// Errors are generally attached directly to the relevant Package with
|
||||
// AddError.
|
||||
//
|
||||
// Known Packages
|
||||
// # Known Packages
|
||||
//
|
||||
// There are a few types from Kubernetes that have special meaning, but don't
|
||||
// have validation markers attached. Those specific types have overrides
|
||||
// listed in KnownPackages that can be added as overrides to any parser.
|
||||
//
|
||||
// Flattening
|
||||
// # Flattening
|
||||
//
|
||||
// Once schemata are generated, they can be used directly by external tooling
|
||||
// (like JSONSchema validators), but must first be "flattened" to not contain
|
||||
|
||||
4
vendor/sigs.k8s.io/controller-tools/pkg/crd/flatten.go
generated
vendored
4
vendor/sigs.k8s.io/controller-tools/pkg/crd/flatten.go
generated
vendored
@@ -143,6 +143,10 @@ func flattenAllOfInto(dst *apiext.JSONSchemaProps, src apiext.JSONSchemaProps, e
|
||||
dstProps.Schema = &apiext.JSONSchemaProps{}
|
||||
}
|
||||
flattenAllOfInto(dstProps.Schema, *srcProps.Schema, errRec)
|
||||
case "XPreserveUnknownFields":
|
||||
dstField.Set(srcField)
|
||||
case "XMapType":
|
||||
dstField.Set(srcField)
|
||||
// NB(directxman12): no need to explicitly handle nullable -- false is considered to be the zero value
|
||||
// TODO(directxman12): src isn't necessarily the field value -- it's just the most recent allOf entry
|
||||
default:
|
||||
|
||||
185
vendor/sigs.k8s.io/controller-tools/pkg/crd/gen.go
generated
vendored
185
vendor/sigs.k8s.io/controller-tools/pkg/crd/gen.go
generated
vendored
@@ -20,10 +20,9 @@ import (
|
||||
"fmt"
|
||||
"go/ast"
|
||||
"go/types"
|
||||
"os"
|
||||
"sort"
|
||||
|
||||
apiext "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
|
||||
apiextlegacy "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
|
||||
crdmarkers "sigs.k8s.io/controller-tools/pkg/crd/markers"
|
||||
@@ -33,30 +32,20 @@ import (
|
||||
"sigs.k8s.io/controller-tools/pkg/version"
|
||||
)
|
||||
|
||||
// The identifier for v1 CustomResourceDefinitions.
|
||||
const v1 = "v1"
|
||||
|
||||
// The default CustomResourceDefinition version to generate.
|
||||
const defaultVersion = "v1"
|
||||
const defaultVersion = v1
|
||||
|
||||
// +controllertools:marker:generateHelp
|
||||
|
||||
// Generator generates CustomResourceDefinition objects.
|
||||
type Generator struct {
|
||||
// TrivialVersions indicates that we should produce a single-version CRD.
|
||||
// IgnoreUnexportedFields indicates that we should skip unexported fields.
|
||||
//
|
||||
// Single "trivial-version" CRDs are compatible with older (pre 1.13)
|
||||
// Kubernetes API servers. The storage version's schema will be used as
|
||||
// the CRD's schema.
|
||||
//
|
||||
// Only works with the v1beta1 CRD version.
|
||||
TrivialVersions bool `marker:",optional"`
|
||||
|
||||
// PreserveUnknownFields indicates whether or not we should turn off pruning.
|
||||
//
|
||||
// Left unspecified, it'll default to true when only a v1beta1 CRD is
|
||||
// generated (to preserve compatibility with older versions of this tool),
|
||||
// or false otherwise.
|
||||
//
|
||||
// It's required to be false for v1 CRDs.
|
||||
PreserveUnknownFields *bool `marker:",optional"`
|
||||
// Left unspecified, the default is false.
|
||||
IgnoreUnexportedFields *bool `marker:",optional"`
|
||||
|
||||
// AllowDangerousTypes allows types which are usually omitted from CRD generation
|
||||
// because they are not recommended.
|
||||
@@ -78,6 +67,8 @@ type Generator struct {
|
||||
// CRDVersions specifies the target API versions of the CRD type itself to
|
||||
// generate. Defaults to v1.
|
||||
//
|
||||
// Currently, the only supported value is v1.
|
||||
//
|
||||
// The first version listed will be assumed to be the "default" version and
|
||||
// will not get a version suffix in the output filename.
|
||||
//
|
||||
@@ -95,12 +86,20 @@ func (Generator) CheckFilter() loader.NodeFilter {
|
||||
func (Generator) RegisterMarkers(into *markers.Registry) error {
|
||||
return crdmarkers.Register(into)
|
||||
}
|
||||
|
||||
// transformRemoveCRDStatus ensures we do not write the CRD status field.
|
||||
func transformRemoveCRDStatus(obj map[string]interface{}) error {
|
||||
delete(obj, "status")
|
||||
return nil
|
||||
}
|
||||
|
||||
func (g Generator) Generate(ctx *genall.GenerationContext) error {
|
||||
parser := &Parser{
|
||||
Collector: ctx.Collector,
|
||||
Checker: ctx.Checker,
|
||||
// Perform defaulting here to avoid ambiguity later
|
||||
AllowDangerousTypes: g.AllowDangerousTypes != nil && *g.AllowDangerousTypes == true,
|
||||
IgnoreUnexportedFields: g.IgnoreUnexportedFields != nil && *g.IgnoreUnexportedFields == true,
|
||||
AllowDangerousTypes: g.AllowDangerousTypes != nil && *g.AllowDangerousTypes == true,
|
||||
// Indicates the parser on whether to register the ObjectMeta type or not
|
||||
GenerateEmbeddedObjectMeta: g.GenerateEmbeddedObjectMeta != nil && *g.GenerateEmbeddedObjectMeta == true,
|
||||
}
|
||||
@@ -129,7 +128,7 @@ func (g Generator) Generate(ctx *genall.GenerationContext) error {
|
||||
crdVersions = []string{defaultVersion}
|
||||
}
|
||||
|
||||
for groupKind := range kubeKinds {
|
||||
for _, groupKind := range kubeKinds {
|
||||
parser.NeedCRDFor(groupKind, g.MaxDescLen)
|
||||
crdRaw := parser.CustomResourceDefinitions[groupKind]
|
||||
addAttribution(&crdRaw)
|
||||
@@ -146,45 +145,15 @@ func (g Generator) Generate(ctx *genall.GenerationContext) error {
|
||||
versionedCRDs[i] = conv
|
||||
}
|
||||
|
||||
if g.TrivialVersions {
|
||||
for i, crd := range versionedCRDs {
|
||||
if crdVersions[i] == "v1beta1" {
|
||||
toTrivialVersions(crd.(*apiextlegacy.CustomResourceDefinition))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// *If* we're only generating v1beta1 CRDs, default to `preserveUnknownFields: (unset)`
|
||||
// for compatibility purposes. In any other case, default to false, since that's
|
||||
// the sensible default and is required for v1.
|
||||
v1beta1Only := len(crdVersions) == 1 && crdVersions[0] == "v1beta1"
|
||||
switch {
|
||||
case (g.PreserveUnknownFields == nil || *g.PreserveUnknownFields) && v1beta1Only:
|
||||
crd := versionedCRDs[0].(*apiextlegacy.CustomResourceDefinition)
|
||||
crd.Spec.PreserveUnknownFields = nil
|
||||
case g.PreserveUnknownFields == nil, g.PreserveUnknownFields != nil && !*g.PreserveUnknownFields:
|
||||
// it'll be false here (coming from v1) -- leave it as such
|
||||
default:
|
||||
return fmt.Errorf("you may only set PreserveUnknownFields to true with v1beta1 CRDs")
|
||||
}
|
||||
|
||||
for i, crd := range versionedCRDs {
|
||||
// defaults are not allowed to be specified in v1beta1 CRDs and
|
||||
// decriptions are not allowed on the metadata regardless of version
|
||||
// strip them before writing to a file
|
||||
if crdVersions[i] == "v1beta1" {
|
||||
removeDefaultsFromSchemas(crd.(*apiextlegacy.CustomResourceDefinition))
|
||||
removeDescriptionFromMetadataLegacy(crd.(*apiextlegacy.CustomResourceDefinition))
|
||||
} else {
|
||||
removeDescriptionFromMetadata(crd.(*apiext.CustomResourceDefinition))
|
||||
}
|
||||
removeDescriptionFromMetadata(crd.(*apiext.CustomResourceDefinition))
|
||||
var fileName string
|
||||
if i == 0 {
|
||||
fileName = fmt.Sprintf("%s_%s.yaml", crdRaw.Spec.Group, crdRaw.Spec.Names.Plural)
|
||||
} else {
|
||||
fileName = fmt.Sprintf("%s_%s.%s.yaml", crdRaw.Spec.Group, crdRaw.Spec.Names.Plural, crdVersions[i])
|
||||
}
|
||||
if err := ctx.WriteYAML(fileName, crd); err != nil {
|
||||
if err := ctx.WriteYAML(fileName, []interface{}{crd}, genall.WithTransform(transformRemoveCRDStatus)); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -212,71 +181,6 @@ func removeDescriptionFromMetadataProps(v *apiext.JSONSchemaProps) {
|
||||
}
|
||||
}
|
||||
|
||||
func removeDescriptionFromMetadataLegacy(crd *apiextlegacy.CustomResourceDefinition) {
|
||||
if crd.Spec.Validation != nil {
|
||||
removeDescriptionFromMetadataPropsLegacy(crd.Spec.Validation.OpenAPIV3Schema)
|
||||
}
|
||||
for _, versionSpec := range crd.Spec.Versions {
|
||||
if versionSpec.Schema != nil {
|
||||
removeDescriptionFromMetadataPropsLegacy(versionSpec.Schema.OpenAPIV3Schema)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func removeDescriptionFromMetadataPropsLegacy(v *apiextlegacy.JSONSchemaProps) {
|
||||
if m, ok := v.Properties["metadata"]; ok {
|
||||
meta := &m
|
||||
if meta.Description != "" {
|
||||
meta.Description = ""
|
||||
v.Properties["metadata"] = m
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// removeDefaultsFromSchemas will remove all instances of default values being
|
||||
// specified across all defined API versions
|
||||
func removeDefaultsFromSchemas(crd *apiextlegacy.CustomResourceDefinition) {
|
||||
if crd.Spec.Validation != nil {
|
||||
removeDefaultsFromSchemaProps(crd.Spec.Validation.OpenAPIV3Schema)
|
||||
}
|
||||
|
||||
for _, versionSpec := range crd.Spec.Versions {
|
||||
if versionSpec.Schema != nil {
|
||||
removeDefaultsFromSchemaProps(versionSpec.Schema.OpenAPIV3Schema)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// removeDefaultsFromSchemaProps will recurse into JSONSchemaProps to remove
|
||||
// all instances of default values being specified
|
||||
func removeDefaultsFromSchemaProps(v *apiextlegacy.JSONSchemaProps) {
|
||||
if v == nil {
|
||||
return
|
||||
}
|
||||
|
||||
if v.Default != nil {
|
||||
fmt.Fprintln(os.Stderr, "Warning: default unsupported in CRD version v1beta1, v1 required. Removing defaults.")
|
||||
}
|
||||
|
||||
// nil-out the default field
|
||||
v.Default = nil
|
||||
for name, prop := range v.Properties {
|
||||
// iter var reference is fine -- we handle the persistence of the modfications on the line below
|
||||
//nolint:gosec
|
||||
removeDefaultsFromSchemaProps(&prop)
|
||||
v.Properties[name] = prop
|
||||
}
|
||||
if v.Items != nil {
|
||||
removeDefaultsFromSchemaProps(v.Items.Schema)
|
||||
for i := range v.Items.JSONSchemas {
|
||||
props := v.Items.JSONSchemas[i]
|
||||
removeDefaultsFromSchemaProps(&props)
|
||||
v.Items.JSONSchemas[i] = props
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// FixTopLevelMetadata resets the schema for the top-level metadata field which is needed for CRD validation
|
||||
func FixTopLevelMetadata(crd apiext.CustomResourceDefinition) {
|
||||
for _, v := range crd.Spec.Versions {
|
||||
@@ -289,32 +193,6 @@ func FixTopLevelMetadata(crd apiext.CustomResourceDefinition) {
|
||||
}
|
||||
}
|
||||
|
||||
// toTrivialVersions strips out all schemata except for the storage schema,
|
||||
// and moves that up into the root object. This makes the CRD compatible
|
||||
// with pre 1.13 clusters.
|
||||
func toTrivialVersions(crd *apiextlegacy.CustomResourceDefinition) {
|
||||
var canonicalSchema *apiextlegacy.CustomResourceValidation
|
||||
var canonicalSubresources *apiextlegacy.CustomResourceSubresources
|
||||
var canonicalColumns []apiextlegacy.CustomResourceColumnDefinition
|
||||
for i, ver := range crd.Spec.Versions {
|
||||
if ver.Storage == true {
|
||||
canonicalSchema = ver.Schema
|
||||
canonicalSubresources = ver.Subresources
|
||||
canonicalColumns = ver.AdditionalPrinterColumns
|
||||
}
|
||||
crd.Spec.Versions[i].Schema = nil
|
||||
crd.Spec.Versions[i].Subresources = nil
|
||||
crd.Spec.Versions[i].AdditionalPrinterColumns = nil
|
||||
}
|
||||
if canonicalSchema == nil {
|
||||
return
|
||||
}
|
||||
|
||||
crd.Spec.Validation = canonicalSchema
|
||||
crd.Spec.Subresources = canonicalSubresources
|
||||
crd.Spec.AdditionalPrinterColumns = canonicalColumns
|
||||
}
|
||||
|
||||
// addAttribution adds attribution info to indicate controller-gen tool was used
|
||||
// to generate this CRD definition along with the version info.
|
||||
func addAttribution(crd *apiext.CustomResourceDefinition) {
|
||||
@@ -339,7 +217,7 @@ func FindMetav1(roots []*loader.Package) *loader.Package {
|
||||
// FindKubeKinds locates all types that contain TypeMeta and ObjectMeta
|
||||
// (and thus may be a Kubernetes object), and returns the corresponding
|
||||
// group-kinds.
|
||||
func FindKubeKinds(parser *Parser, metav1Pkg *loader.Package) map[schema.GroupKind]struct{} {
|
||||
func FindKubeKinds(parser *Parser, metav1Pkg *loader.Package) []schema.GroupKind {
|
||||
// TODO(directxman12): technically, we should be finding metav1 per-package
|
||||
kubeKinds := map[schema.GroupKind]struct{}{}
|
||||
for typeIdent, info := range parser.Types {
|
||||
@@ -370,7 +248,12 @@ func FindKubeKinds(parser *Parser, metav1Pkg *loader.Package) map[schema.GroupKi
|
||||
}
|
||||
fieldPkgPath := loader.NonVendorPath(namedField.Obj().Pkg().Path())
|
||||
fieldPkg := pkg.Imports()[fieldPkgPath]
|
||||
if fieldPkg != metav1Pkg {
|
||||
|
||||
// Compare the metav1 package by ID and not by the actual instance
|
||||
// of the object. The objects in memory could be different due to
|
||||
// loading from different root paths, even when they both refer to
|
||||
// the same metav1 package.
|
||||
if fieldPkg == nil || fieldPkg.ID != metav1Pkg.ID {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -393,7 +276,15 @@ func FindKubeKinds(parser *Parser, metav1Pkg *loader.Package) map[schema.GroupKi
|
||||
kubeKinds[groupKind] = struct{}{}
|
||||
}
|
||||
|
||||
return kubeKinds
|
||||
groupKindList := make([]schema.GroupKind, 0, len(kubeKinds))
|
||||
for groupKind := range kubeKinds {
|
||||
groupKindList = append(groupKindList, groupKind)
|
||||
}
|
||||
sort.Slice(groupKindList, func(i, j int) bool {
|
||||
return groupKindList[i].String() < groupKindList[j].String()
|
||||
})
|
||||
|
||||
return groupKindList
|
||||
}
|
||||
|
||||
// filterTypesForCRDs filters out all nodes that aren't used in CRD generation,
|
||||
|
||||
5
vendor/sigs.k8s.io/controller-tools/pkg/crd/known_types.go
generated
vendored
5
vendor/sigs.k8s.io/controller-tools/pkg/crd/known_types.go
generated
vendored
@@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@@ -74,7 +74,8 @@ var KnownPackages = map[string]PackageOverride{
|
||||
"k8s.io/apimachinery/pkg/runtime": func(p *Parser, pkg *loader.Package) {
|
||||
p.Schemata[TypeIdent{Name: "RawExtension", Package: pkg}] = apiext.JSONSchemaProps{
|
||||
// TODO(directxman12): regexp validation for this (or get kube to support it as a format value)
|
||||
Type: "object",
|
||||
Type: "object",
|
||||
XPreserveUnknownFields: boolPtr(true),
|
||||
}
|
||||
p.AddPackage(pkg) // get the rest of the types
|
||||
},
|
||||
|
||||
40
vendor/sigs.k8s.io/controller-tools/pkg/crd/markers/crd.go
generated
vendored
40
vendor/sigs.k8s.io/controller-tools/pkg/crd/markers/crd.go
generated
vendored
@@ -18,6 +18,7 @@ package markers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
apiext "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
|
||||
|
||||
@@ -51,6 +52,9 @@ var CRDMarkers = []*definitionWithHelp{
|
||||
|
||||
must(markers.MakeDefinition("kubebuilder:deprecatedversion", markers.DescribesType, DeprecatedVersion{})).
|
||||
WithHelp(DeprecatedVersion{}.Help()),
|
||||
|
||||
must(markers.MakeDefinition("kubebuilder:metadata", markers.DescribesType, Metadata{})).
|
||||
WithHelp(Metadata{}.Help()),
|
||||
}
|
||||
|
||||
// TODO: categories and singular used to be annotations types
|
||||
@@ -345,3 +349,39 @@ func (s DeprecatedVersion) ApplyToCRD(crd *apiext.CustomResourceDefinitionSpec,
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// +controllertools:marker:generateHelp:category=CRD
|
||||
|
||||
// Metadata configures the additional annotations or labels for this CRD.
|
||||
// For example adding annotation "api-approved.kubernetes.io" for a CRD with Kubernetes groups,
|
||||
// or annotation "cert-manager.io/inject-ca-from-secret" for a CRD that needs CA injection.
|
||||
type Metadata struct {
|
||||
// Annotations will be added into the annotations of this CRD.
|
||||
Annotations []string `marker:",optional"`
|
||||
// Labels will be added into the labels of this CRD.
|
||||
Labels []string `marker:",optional"`
|
||||
}
|
||||
|
||||
func (s Metadata) ApplyToCRD(crd *apiext.CustomResourceDefinition, version string) error {
|
||||
if len(s.Annotations) > 0 {
|
||||
if crd.Annotations == nil {
|
||||
crd.Annotations = map[string]string{}
|
||||
}
|
||||
for _, str := range s.Annotations {
|
||||
kv := strings.SplitN(str, "=", 2)
|
||||
crd.Annotations[kv[0]] = kv[1]
|
||||
}
|
||||
}
|
||||
|
||||
if len(s.Labels) > 0 {
|
||||
if crd.Labels == nil {
|
||||
crd.Labels = map[string]string{}
|
||||
}
|
||||
for _, str := range s.Labels {
|
||||
kv := strings.SplitN(str, "=", 2)
|
||||
crd.Labels[kv[0]] = kv[1]
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
6
vendor/sigs.k8s.io/controller-tools/pkg/crd/markers/doc.go
generated
vendored
6
vendor/sigs.k8s.io/controller-tools/pkg/crd/markers/doc.go
generated
vendored
@@ -19,7 +19,7 @@ limitations under the License.
|
||||
//
|
||||
// All markers related to CRD generation live in AllDefinitions.
|
||||
//
|
||||
// Validation Markers
|
||||
// # Validation Markers
|
||||
//
|
||||
// Validation markers have values that implement ApplyToSchema
|
||||
// (crd.SchemaMarker). Any marker implementing this will automatically
|
||||
@@ -31,7 +31,7 @@ limitations under the License.
|
||||
// All validation markers start with "+kubebuilder:validation", and
|
||||
// have the same name as their type name.
|
||||
//
|
||||
// CRD Markers
|
||||
// # CRD Markers
|
||||
//
|
||||
// Markers that modify anything in the CRD itself *except* for the schema
|
||||
// implement ApplyToCRD (crd.CRDMarker). They are expected to detect whether
|
||||
@@ -39,7 +39,7 @@ limitations under the License.
|
||||
// them), or to the root-level CRD for legacy cases. They are applied *after*
|
||||
// the rest of the CRD is computed.
|
||||
//
|
||||
// Misc
|
||||
// # Misc
|
||||
//
|
||||
// This package also defines the "+groupName" and "+versionName" package-level
|
||||
// markers, for defining package<->group-version mappings.
|
||||
|
||||
46
vendor/sigs.k8s.io/controller-tools/pkg/crd/markers/topology.go
generated
vendored
46
vendor/sigs.k8s.io/controller-tools/pkg/crd/markers/topology.go
generated
vendored
@@ -28,12 +28,20 @@ import (
|
||||
var TopologyMarkers = []*definitionWithHelp{
|
||||
must(markers.MakeDefinition("listMapKey", markers.DescribesField, ListMapKey(""))).
|
||||
WithHelp(ListMapKey("").Help()),
|
||||
must(markers.MakeDefinition("listMapKey", markers.DescribesType, ListMapKey(""))).
|
||||
WithHelp(ListMapKey("").Help()),
|
||||
must(markers.MakeDefinition("listType", markers.DescribesField, ListType(""))).
|
||||
WithHelp(ListType("").Help()),
|
||||
must(markers.MakeDefinition("listType", markers.DescribesType, ListType(""))).
|
||||
WithHelp(ListType("").Help()),
|
||||
must(markers.MakeDefinition("mapType", markers.DescribesField, MapType(""))).
|
||||
WithHelp(MapType("").Help()),
|
||||
must(markers.MakeDefinition("mapType", markers.DescribesType, MapType(""))).
|
||||
WithHelp(MapType("").Help()),
|
||||
must(markers.MakeDefinition("structType", markers.DescribesField, StructType(""))).
|
||||
WithHelp(StructType("").Help()),
|
||||
must(markers.MakeDefinition("structType", markers.DescribesType, StructType(""))).
|
||||
WithHelp(StructType("").Help()),
|
||||
}
|
||||
|
||||
func init() {
|
||||
@@ -47,15 +55,15 @@ func init() {
|
||||
//
|
||||
// Possible data-structure types of a list are:
|
||||
//
|
||||
// - "map": it needs to have a key field, which will be used to build an
|
||||
// associative list. A typical example is a the pod container list,
|
||||
// which is indexed by the container name.
|
||||
// - "map": it needs to have a key field, which will be used to build an
|
||||
// associative list. A typical example is a the pod container list,
|
||||
// which is indexed by the container name.
|
||||
//
|
||||
// - "set": Fields need to be "scalar", and there can be only one
|
||||
// occurrence of each.
|
||||
// - "set": Fields need to be "scalar", and there can be only one
|
||||
// occurrence of each.
|
||||
//
|
||||
// - "atomic": All the fields in the list are treated as a single value,
|
||||
// are typically manipulated together by the same actor.
|
||||
// - "atomic": All the fields in the list are treated as a single value,
|
||||
// are typically manipulated together by the same actor.
|
||||
type ListType string
|
||||
|
||||
// +controllertools:marker:generateHelp:category="CRD processing"
|
||||
@@ -75,12 +83,12 @@ type ListMapKey string
|
||||
//
|
||||
// Possible values:
|
||||
//
|
||||
// - "granular": items in the map are independent of each other,
|
||||
// and can be manipulated by different actors.
|
||||
// This is the default behavior.
|
||||
// - "granular": items in the map are independent of each other,
|
||||
// and can be manipulated by different actors.
|
||||
// This is the default behavior.
|
||||
//
|
||||
// - "atomic": all fields are treated as one unit.
|
||||
// Any changes have to replace the entire map.
|
||||
// - "atomic": all fields are treated as one unit.
|
||||
// Any changes have to replace the entire map.
|
||||
type MapType string
|
||||
|
||||
// +controllertools:marker:generateHelp:category="CRD processing"
|
||||
@@ -91,17 +99,17 @@ type MapType string
|
||||
//
|
||||
// Possible values:
|
||||
//
|
||||
// - "granular": fields in the struct are independent of each other,
|
||||
// and can be manipulated by different actors.
|
||||
// This is the default behavior.
|
||||
// - "granular": fields in the struct are independent of each other,
|
||||
// and can be manipulated by different actors.
|
||||
// This is the default behavior.
|
||||
//
|
||||
// - "atomic": all fields are treated as one unit.
|
||||
// Any changes have to replace the entire struct.
|
||||
// - "atomic": all fields are treated as one unit.
|
||||
// Any changes have to replace the entire struct.
|
||||
type StructType string
|
||||
|
||||
func (l ListType) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
if schema.Type != "array" {
|
||||
return fmt.Errorf("must apply listType to an array")
|
||||
return fmt.Errorf("must apply listType to an array, found %s", schema.Type)
|
||||
}
|
||||
if l != "map" && l != "atomic" && l != "set" {
|
||||
return fmt.Errorf(`ListType must be either "map", "set" or "atomic"`)
|
||||
@@ -115,7 +123,7 @@ func (l ListType) ApplyFirst() {}
|
||||
|
||||
func (l ListMapKey) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
if schema.Type != "array" {
|
||||
return fmt.Errorf("must apply listMapKey to an array")
|
||||
return fmt.Errorf("must apply listMapKey to an array, found %s", schema.Type)
|
||||
}
|
||||
if schema.XListType == nil || *schema.XListType != "map" {
|
||||
return fmt.Errorf("must apply listMapKey to an associative-list")
|
||||
|
||||
131
vendor/sigs.k8s.io/controller-tools/pkg/crd/markers/validation.go
generated
vendored
131
vendor/sigs.k8s.io/controller-tools/pkg/crd/markers/validation.go
generated
vendored
@@ -17,9 +17,9 @@ limitations under the License.
|
||||
package markers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"math"
|
||||
|
||||
apiext "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
|
||||
|
||||
@@ -37,7 +37,7 @@ const (
|
||||
// reusable and writing complex validations on slice items.
|
||||
var ValidationMarkers = mustMakeAllWithPrefix("kubebuilder:validation", markers.DescribesField,
|
||||
|
||||
// integer markers
|
||||
// numeric markers
|
||||
|
||||
Maximum(0),
|
||||
Minimum(0),
|
||||
@@ -66,6 +66,8 @@ var ValidationMarkers = mustMakeAllWithPrefix("kubebuilder:validation", markers.
|
||||
Type(""),
|
||||
XPreserveUnknownFields{},
|
||||
XEmbeddedResource{},
|
||||
XIntOrString{},
|
||||
XValidation{},
|
||||
)
|
||||
|
||||
// FieldOnlyMarkers list field-specific validation markers (i.e. those markers that don't make
|
||||
@@ -121,11 +123,19 @@ func init() {
|
||||
|
||||
// +controllertools:marker:generateHelp:category="CRD validation"
|
||||
// Maximum specifies the maximum numeric value that this field can have.
|
||||
type Maximum int
|
||||
type Maximum float64
|
||||
|
||||
func (m Maximum) Value() float64 {
|
||||
return float64(m)
|
||||
}
|
||||
|
||||
// +controllertools:marker:generateHelp:category="CRD validation"
|
||||
// Minimum specifies the minimum numeric value that this field can have. Negative integers are supported.
|
||||
type Minimum int
|
||||
// Minimum specifies the minimum numeric value that this field can have. Negative numbers are supported.
|
||||
type Minimum float64
|
||||
|
||||
func (m Minimum) Value() float64 {
|
||||
return float64(m)
|
||||
}
|
||||
|
||||
// +controllertools:marker:generateHelp:category="CRD validation"
|
||||
// ExclusiveMinimum indicates that the minimum is "up to" but not including that value.
|
||||
@@ -137,7 +147,11 @@ type ExclusiveMaximum bool
|
||||
|
||||
// +controllertools:marker:generateHelp:category="CRD validation"
|
||||
// MultipleOf specifies that this field must have a numeric value that's a multiple of this one.
|
||||
type MultipleOf int
|
||||
type MultipleOf float64
|
||||
|
||||
func (m MultipleOf) Value() float64 {
|
||||
return float64(m)
|
||||
}
|
||||
|
||||
// +controllertools:marker:generateHelp:category="CRD validation"
|
||||
// MaxLength specifies the maximum length for this string.
|
||||
@@ -232,6 +246,14 @@ type XPreserveUnknownFields struct{}
|
||||
// field, yet it is possible. This can be combined with PreserveUnknownFields.
|
||||
type XEmbeddedResource struct{}
|
||||
|
||||
// +controllertools:marker:generateHelp:category="CRD validation"
|
||||
// IntOrString marks a fields as an IntOrString.
|
||||
//
|
||||
// This is required when applying patterns or other validations to an IntOrString
|
||||
// field. Knwon information about the type is applied during the collapse phase
|
||||
// and as such is not normally available during marker application.
|
||||
type XIntOrString struct{}
|
||||
|
||||
// +controllertools:marker:generateHelp:category="CRD validation"
|
||||
// Schemaless marks a field as being a schemaless object.
|
||||
//
|
||||
@@ -242,41 +264,80 @@ type XEmbeddedResource struct{}
|
||||
// to be used only as a last resort.
|
||||
type Schemaless struct{}
|
||||
|
||||
func hasNumericType(schema *apiext.JSONSchemaProps) bool {
|
||||
return schema.Type == "integer" || schema.Type == "number"
|
||||
}
|
||||
|
||||
func isIntegral(value float64) bool {
|
||||
return value == math.Trunc(value) && !math.IsNaN(value) && !math.IsInf(value, 0)
|
||||
}
|
||||
|
||||
// +controllertools:marker:generateHelp:category="CRD validation"
|
||||
// XValidation marks a field as requiring a value for which a given
|
||||
// expression evaluates to true.
|
||||
//
|
||||
// This marker may be repeated to specify multiple expressions, all of
|
||||
// which must evaluate to true.
|
||||
type XValidation struct {
|
||||
Rule string
|
||||
Message string `marker:",optional"`
|
||||
}
|
||||
|
||||
func (m Maximum) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
if schema.Type != "integer" {
|
||||
return fmt.Errorf("must apply maximum to an integer")
|
||||
if !hasNumericType(schema) {
|
||||
return fmt.Errorf("must apply maximum to a numeric value, found %s", schema.Type)
|
||||
}
|
||||
val := float64(m)
|
||||
|
||||
if schema.Type == "integer" && !isIntegral(m.Value()) {
|
||||
return fmt.Errorf("cannot apply non-integral maximum validation (%v) to integer value", m.Value())
|
||||
}
|
||||
|
||||
val := m.Value()
|
||||
schema.Maximum = &val
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m Minimum) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
if schema.Type != "integer" {
|
||||
return fmt.Errorf("must apply minimum to an integer")
|
||||
if !hasNumericType(schema) {
|
||||
return fmt.Errorf("must apply minimum to a numeric value, found %s", schema.Type)
|
||||
}
|
||||
val := float64(m)
|
||||
|
||||
if schema.Type == "integer" && !isIntegral(m.Value()) {
|
||||
return fmt.Errorf("cannot apply non-integral minimum validation (%v) to integer value", m.Value())
|
||||
}
|
||||
|
||||
val := m.Value()
|
||||
schema.Minimum = &val
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m ExclusiveMaximum) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
if schema.Type != "integer" {
|
||||
return fmt.Errorf("must apply exclusivemaximum to an integer")
|
||||
if !hasNumericType(schema) {
|
||||
return fmt.Errorf("must apply exclusivemaximum to a numeric value, found %s", schema.Type)
|
||||
}
|
||||
schema.ExclusiveMaximum = bool(m)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m ExclusiveMinimum) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
if schema.Type != "integer" {
|
||||
return fmt.Errorf("must apply exclusiveminimum to an integer")
|
||||
if !hasNumericType(schema) {
|
||||
return fmt.Errorf("must apply exclusiveminimum to a numeric value, found %s", schema.Type)
|
||||
}
|
||||
|
||||
schema.ExclusiveMinimum = bool(m)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m MultipleOf) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
if schema.Type != "integer" {
|
||||
return fmt.Errorf("must apply multipleof to an integer")
|
||||
if !hasNumericType(schema) {
|
||||
return fmt.Errorf("must apply multipleof to a numeric value, found %s", schema.Type)
|
||||
}
|
||||
val := float64(m)
|
||||
|
||||
if schema.Type == "integer" && !isIntegral(m.Value()) {
|
||||
return fmt.Errorf("cannot apply non-integral multipleof validation (%v) to integer value", m.Value())
|
||||
}
|
||||
|
||||
val := m.Value()
|
||||
schema.MultipleOf = &val
|
||||
return nil
|
||||
}
|
||||
@@ -289,6 +350,7 @@ func (m MaxLength) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
schema.MaxLength = &val
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m MinLength) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
if schema.Type != "string" {
|
||||
return fmt.Errorf("must apply minlength to a string")
|
||||
@@ -297,9 +359,13 @@ func (m MinLength) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
schema.MinLength = &val
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m Pattern) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
if schema.Type != "string" {
|
||||
return fmt.Errorf("must apply pattern to a string")
|
||||
// Allow string types or IntOrStrings. An IntOrString will still
|
||||
// apply the pattern validation when a string is detected, the pattern
|
||||
// will not apply to ints though.
|
||||
if schema.Type != "string" && !schema.XIntOrString {
|
||||
return fmt.Errorf("must apply pattern to a `string` or `IntOrString`")
|
||||
}
|
||||
schema.Pattern = string(m)
|
||||
return nil
|
||||
@@ -313,6 +379,7 @@ func (m MaxItems) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
schema.MaxItems = &val
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m MinItems) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
if schema.Type != "array" {
|
||||
return fmt.Errorf("must apply minitems to an array")
|
||||
@@ -321,6 +388,7 @@ func (m MinItems) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
schema.MinItems = &val
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m UniqueItems) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
if schema.Type != "array" {
|
||||
return fmt.Errorf("must apply uniqueitems to an array")
|
||||
@@ -364,6 +432,7 @@ func (m Enum) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
schema.Enum = vals
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m Format) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
schema.Format = string(m)
|
||||
return nil
|
||||
@@ -406,3 +475,21 @@ func (m XEmbeddedResource) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
schema.XEmbeddedResource = true
|
||||
return nil
|
||||
}
|
||||
|
||||
// NB(JoelSpeed): we use this property in other markers here,
|
||||
// which means the "XIntOrString" marker *must* be applied first.
|
||||
|
||||
func (m XIntOrString) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
schema.XIntOrString = true
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m XIntOrString) ApplyFirst() {}
|
||||
|
||||
func (m XValidation) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
|
||||
schema.XValidations = append(schema.XValidations, apiext.ValidationRule{
|
||||
Rule: m.Rule,
|
||||
Message: m.Message,
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
62
vendor/sigs.k8s.io/controller-tools/pkg/crd/markers/zz_generated.markerhelp.go
generated
vendored
62
vendor/sigs.k8s.io/controller-tools/pkg/crd/markers/zz_generated.markerhelp.go
generated
vendored
@@ -1,3 +1,4 @@
|
||||
//go:build !ignore_autogenerated
|
||||
// +build !ignore_autogenerated
|
||||
|
||||
/*
|
||||
@@ -48,7 +49,7 @@ func (DeprecatedVersion) Help() *markers.DefinitionHelp {
|
||||
Details: "",
|
||||
},
|
||||
FieldHelp: map[string]markers.DetailedHelp{
|
||||
"Warning": markers.DetailedHelp{
|
||||
"Warning": {
|
||||
Summary: "message to be shown on the deprecated version",
|
||||
Details: "",
|
||||
},
|
||||
@@ -116,7 +117,7 @@ func (ListType) Help() *markers.DefinitionHelp {
|
||||
Category: "CRD processing",
|
||||
DetailedHelp: markers.DetailedHelp{
|
||||
Summary: "specifies the type of data-structure that the list represents (map, set, atomic). ",
|
||||
Details: "Possible data-structure types of a list are: \n - \"map\": it needs to have a key field, which will be used to build an associative list. A typical example is a the pod container list, which is indexed by the container name. \n - \"set\": Fields need to be \"scalar\", and there can be only one occurrence of each. \n - \"atomic\": All the fields in the list are treated as a single value, are typically manipulated together by the same actor.",
|
||||
Details: "Possible data-structure types of a list are: \n - \"map\": it needs to have a key field, which will be used to build an associative list. A typical example is a the pod container list, which is indexed by the container name. \n - \"set\": Fields need to be \"scalar\", and there can be only one occurrence of each. \n - \"atomic\": All the fields in the list are treated as a single value, are typically manipulated together by the same actor.",
|
||||
},
|
||||
FieldHelp: map[string]markers.DetailedHelp{},
|
||||
}
|
||||
@@ -127,7 +128,7 @@ func (MapType) Help() *markers.DefinitionHelp {
|
||||
Category: "CRD processing",
|
||||
DetailedHelp: markers.DetailedHelp{
|
||||
Summary: "specifies the level of atomicity of the map; i.e. whether each item in the map is independent of the others, or all fields are treated as a single unit. ",
|
||||
Details: "Possible values: \n - \"granular\": items in the map are independent of each other, and can be manipulated by different actors. This is the default behavior. \n - \"atomic\": all fields are treated as one unit. Any changes have to replace the entire map.",
|
||||
Details: "Possible values: \n - \"granular\": items in the map are independent of each other, and can be manipulated by different actors. This is the default behavior. \n - \"atomic\": all fields are treated as one unit. Any changes have to replace the entire map.",
|
||||
},
|
||||
FieldHelp: map[string]markers.DetailedHelp{},
|
||||
}
|
||||
@@ -177,6 +178,26 @@ func (Maximum) Help() *markers.DefinitionHelp {
|
||||
}
|
||||
}
|
||||
|
||||
func (Metadata) Help() *markers.DefinitionHelp {
|
||||
return &markers.DefinitionHelp{
|
||||
Category: "CRD",
|
||||
DetailedHelp: markers.DetailedHelp{
|
||||
Summary: "configures the additional annotations or labels for this CRD. For example adding annotation \"api-approved.kubernetes.io\" for a CRD with Kubernetes groups, or annotation \"cert-manager.io/inject-ca-from-secret\" for a CRD that needs CA injection.",
|
||||
Details: "",
|
||||
},
|
||||
FieldHelp: map[string]markers.DetailedHelp{
|
||||
"Annotations": {
|
||||
Summary: "will be added into the annotations of this CRD.",
|
||||
Details: "",
|
||||
},
|
||||
"Labels": {
|
||||
Summary: "will be added into the labels of this CRD.",
|
||||
Details: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (MinItems) Help() *markers.DefinitionHelp {
|
||||
return &markers.DefinitionHelp{
|
||||
Category: "CRD validation",
|
||||
@@ -214,7 +235,7 @@ func (Minimum) Help() *markers.DefinitionHelp {
|
||||
return &markers.DefinitionHelp{
|
||||
Category: "CRD validation",
|
||||
DetailedHelp: markers.DetailedHelp{
|
||||
Summary: "specifies the minimum numeric value that this field can have. Negative integers are supported.",
|
||||
Summary: "specifies the minimum numeric value that this field can have. Negative numbers are supported.",
|
||||
Details: "",
|
||||
},
|
||||
FieldHelp: map[string]markers.DetailedHelp{},
|
||||
@@ -360,7 +381,7 @@ func (StructType) Help() *markers.DefinitionHelp {
|
||||
Category: "CRD processing",
|
||||
DetailedHelp: markers.DetailedHelp{
|
||||
Summary: "specifies the level of atomicity of the struct; i.e. whether each field in the struct is independent of the others, or all fields are treated as a single unit. ",
|
||||
Details: "Possible values: \n - \"granular\": fields in the struct are independent of each other, and can be manipulated by different actors. This is the default behavior. \n - \"atomic\": all fields are treated as one unit. Any changes have to replace the entire struct.",
|
||||
Details: "Possible values: \n - \"granular\": fields in the struct are independent of each other, and can be manipulated by different actors. This is the default behavior. \n - \"atomic\": all fields are treated as one unit. Any changes have to replace the entire struct.",
|
||||
},
|
||||
FieldHelp: map[string]markers.DetailedHelp{},
|
||||
}
|
||||
@@ -445,6 +466,17 @@ func (XEmbeddedResource) Help() *markers.DefinitionHelp {
|
||||
}
|
||||
}
|
||||
|
||||
func (XIntOrString) Help() *markers.DefinitionHelp {
|
||||
return &markers.DefinitionHelp{
|
||||
Category: "CRD validation",
|
||||
DetailedHelp: markers.DetailedHelp{
|
||||
Summary: "IntOrString marks a fields as an IntOrString. ",
|
||||
Details: "This is required when applying patterns or other validations to an IntOrString field. Knwon information about the type is applied during the collapse phase and as such is not normally available during marker application.",
|
||||
},
|
||||
FieldHelp: map[string]markers.DetailedHelp{},
|
||||
}
|
||||
}
|
||||
|
||||
func (XPreserveUnknownFields) Help() *markers.DefinitionHelp {
|
||||
return &markers.DefinitionHelp{
|
||||
Category: "CRD processing",
|
||||
@@ -455,3 +487,23 @@ func (XPreserveUnknownFields) Help() *markers.DefinitionHelp {
|
||||
FieldHelp: map[string]markers.DetailedHelp{},
|
||||
}
|
||||
}
|
||||
|
||||
func (XValidation) Help() *markers.DefinitionHelp {
|
||||
return &markers.DefinitionHelp{
|
||||
Category: "CRD validation",
|
||||
DetailedHelp: markers.DetailedHelp{
|
||||
Summary: "marks a field as requiring a value for which a given expression evaluates to true. ",
|
||||
Details: "This marker may be repeated to specify multiple expressions, all of which must evaluate to true.",
|
||||
},
|
||||
FieldHelp: map[string]markers.DetailedHelp{
|
||||
"Rule": {
|
||||
Summary: "",
|
||||
Details: "",
|
||||
},
|
||||
"Message": {
|
||||
Summary: "",
|
||||
Details: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
5
vendor/sigs.k8s.io/controller-tools/pkg/crd/parser.go
generated
vendored
5
vendor/sigs.k8s.io/controller-tools/pkg/crd/parser.go
generated
vendored
@@ -87,6 +87,9 @@ type Parser struct {
|
||||
// TODO: Should we have a more formal mechanism for putting "type patterns" in each of the above categories?
|
||||
AllowDangerousTypes bool
|
||||
|
||||
// IgnoreUnexportedFields specifies if unexported fields on the struct should be skipped
|
||||
IgnoreUnexportedFields bool
|
||||
|
||||
// GenerateEmbeddedObjectMeta specifies if any embedded ObjectMeta should be generated
|
||||
GenerateEmbeddedObjectMeta bool
|
||||
}
|
||||
@@ -178,7 +181,7 @@ func (p *Parser) NeedSchemaFor(typ TypeIdent) {
|
||||
// avoid tripping recursive schemata, like ManagedFields, by adding an empty WIP schema
|
||||
p.Schemata[typ] = apiext.JSONSchemaProps{}
|
||||
|
||||
schemaCtx := newSchemaContext(typ.Package, p, p.AllowDangerousTypes)
|
||||
schemaCtx := newSchemaContext(typ.Package, p, p.AllowDangerousTypes, p.IgnoreUnexportedFields)
|
||||
ctxForInfo := schemaCtx.ForInfo(info)
|
||||
|
||||
pkgMarkers, err := markers.PackageMarkers(p.Collector, typ.Package)
|
||||
|
||||
77
vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go
generated
vendored
77
vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go
generated
vendored
@@ -17,8 +17,10 @@ limitations under the License.
|
||||
package crd
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"go/ast"
|
||||
"go/token"
|
||||
"go/types"
|
||||
"strings"
|
||||
|
||||
@@ -37,12 +39,10 @@ const (
|
||||
defPrefix = "#/definitions/"
|
||||
)
|
||||
|
||||
var (
|
||||
// byteType is the types.Type for byte (see the types documention
|
||||
// for why we need to look this up in the Universe), saved
|
||||
// for quick comparison.
|
||||
byteType = types.Universe.Lookup("byte").Type()
|
||||
)
|
||||
// byteType is the types.Type for byte (see the types documention
|
||||
// for why we need to look this up in the Universe), saved
|
||||
// for quick comparison.
|
||||
var byteType = types.Universe.Lookup("byte").Type()
|
||||
|
||||
// SchemaMarker is any marker that needs to modify the schema of the underlying type or field.
|
||||
type SchemaMarker interface {
|
||||
@@ -69,17 +69,19 @@ type schemaContext struct {
|
||||
schemaRequester schemaRequester
|
||||
PackageMarkers markers.MarkerValues
|
||||
|
||||
allowDangerousTypes bool
|
||||
allowDangerousTypes bool
|
||||
ignoreUnexportedFields bool
|
||||
}
|
||||
|
||||
// newSchemaContext constructs a new schemaContext for the given package and schema requester.
|
||||
// It must have type info added before use via ForInfo.
|
||||
func newSchemaContext(pkg *loader.Package, req schemaRequester, allowDangerousTypes bool) *schemaContext {
|
||||
func newSchemaContext(pkg *loader.Package, req schemaRequester, allowDangerousTypes, ignoreUnexportedFields bool) *schemaContext {
|
||||
pkg.NeedTypesInfo()
|
||||
return &schemaContext{
|
||||
pkg: pkg,
|
||||
schemaRequester: req,
|
||||
allowDangerousTypes: allowDangerousTypes,
|
||||
pkg: pkg,
|
||||
schemaRequester: req,
|
||||
allowDangerousTypes: allowDangerousTypes,
|
||||
ignoreUnexportedFields: ignoreUnexportedFields,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,10 +89,11 @@ func newSchemaContext(pkg *loader.Package, req schemaRequester, allowDangerousTy
|
||||
// as this one, except with the given type information.
|
||||
func (c *schemaContext) ForInfo(info *markers.TypeInfo) *schemaContext {
|
||||
return &schemaContext{
|
||||
pkg: c.pkg,
|
||||
info: info,
|
||||
schemaRequester: c.schemaRequester,
|
||||
allowDangerousTypes: c.allowDangerousTypes,
|
||||
pkg: c.pkg,
|
||||
info: info,
|
||||
schemaRequester: c.schemaRequester,
|
||||
allowDangerousTypes: c.allowDangerousTypes,
|
||||
ignoreUnexportedFields: c.ignoreUnexportedFields,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,6 +112,15 @@ func (c *schemaContext) requestSchema(pkgPath, typeName string) {
|
||||
|
||||
// infoToSchema creates a schema for the type in the given set of type information.
|
||||
func infoToSchema(ctx *schemaContext) *apiext.JSONSchemaProps {
|
||||
// If the obj implements a JSON marshaler and has a marker, use the markers value and do not traverse as
|
||||
// the marshaler could be doing anything. If there is no marker, fall back to traversing.
|
||||
if obj := ctx.pkg.Types.Scope().Lookup(ctx.info.Name); obj != nil && implementsJSONMarshaler(obj.Type()) {
|
||||
schema := &apiext.JSONSchemaProps{}
|
||||
applyMarkers(ctx, ctx.info.Markers, schema, ctx.info.RawSpec.Type)
|
||||
if schema.Type != "" {
|
||||
return schema
|
||||
}
|
||||
}
|
||||
return typeToSchema(ctx, ctx.info.RawSpec.Type)
|
||||
}
|
||||
|
||||
@@ -298,14 +310,12 @@ func mapToSchema(ctx *schemaContext, mapType *ast.MapType) *apiext.JSONSchemaPro
|
||||
valSchema = namedToSchema(ctx.ForInfo(&markers.TypeInfo{}), val)
|
||||
case *ast.ArrayType:
|
||||
valSchema = arrayToSchema(ctx.ForInfo(&markers.TypeInfo{}), val)
|
||||
if valSchema.Type == "array" && valSchema.Items.Schema.Type != "string" {
|
||||
ctx.pkg.AddError(loader.ErrFromNode(fmt.Errorf("map values must be a named type, not %T", mapType.Value), mapType.Value))
|
||||
return &apiext.JSONSchemaProps{}
|
||||
}
|
||||
case *ast.StarExpr:
|
||||
valSchema = typeToSchema(ctx.ForInfo(&markers.TypeInfo{}), val)
|
||||
case *ast.MapType:
|
||||
valSchema = typeToSchema(ctx.ForInfo(&markers.TypeInfo{}), val)
|
||||
default:
|
||||
ctx.pkg.AddError(loader.ErrFromNode(fmt.Errorf("map values must be a named type, not %T", mapType.Value), mapType.Value))
|
||||
ctx.pkg.AddError(loader.ErrFromNode(fmt.Errorf("not a supported map value type: %T", mapType.Value), mapType.Value))
|
||||
return &apiext.JSONSchemaProps{}
|
||||
}
|
||||
|
||||
@@ -332,6 +342,11 @@ func structToSchema(ctx *schemaContext, structType *ast.StructType) *apiext.JSON
|
||||
}
|
||||
|
||||
for _, field := range ctx.info.Fields {
|
||||
// Skip if the field is not an inline field, ignoreUnexportedFields is true, and the field is not exported
|
||||
if field.Name != "" && ctx.ignoreUnexportedFields && !ast.IsExported(field.Name) {
|
||||
continue
|
||||
}
|
||||
|
||||
jsonTag, hasTag := field.Tag.Lookup("json")
|
||||
if !hasTag {
|
||||
// if the field doesn't have a JSON tag, it doesn't belong in output (and shouldn't exist in a serialized type)
|
||||
@@ -415,10 +430,13 @@ func builtinToType(basic *types.Basic, allowDangerousTypes bool) (typ string, fo
|
||||
typ = "string"
|
||||
case basicInfo&types.IsInteger != 0:
|
||||
typ = "integer"
|
||||
case basicInfo&types.IsFloat != 0 && allowDangerousTypes:
|
||||
typ = "number"
|
||||
case basicInfo&types.IsFloat != 0:
|
||||
if allowDangerousTypes {
|
||||
typ = "number"
|
||||
} else {
|
||||
return "", "", errors.New("found float, the usage of which is highly discouraged, as support for them varies across languages. Please consider serializing your float as string instead. If you are really sure you want to use them, re-run with crd:allowDangerousTypes=true")
|
||||
}
|
||||
default:
|
||||
// NB(directxman12): floats are *NOT* allowed in kubernetes APIs
|
||||
return "", "", fmt.Errorf("unsupported type %q", basic.String())
|
||||
}
|
||||
|
||||
@@ -431,3 +449,16 @@ func builtinToType(basic *types.Basic, allowDangerousTypes bool) (typ string, fo
|
||||
|
||||
return typ, format, nil
|
||||
}
|
||||
|
||||
// Open coded go/types representation of encoding/json.Marshaller
|
||||
var jsonMarshaler = types.NewInterfaceType([]*types.Func{
|
||||
types.NewFunc(token.NoPos, nil, "MarshalJSON",
|
||||
types.NewSignature(nil, nil,
|
||||
types.NewTuple(
|
||||
types.NewVar(token.NoPos, nil, "", types.NewSlice(types.Universe.Lookup("byte").Type())),
|
||||
types.NewVar(token.NoPos, nil, "", types.Universe.Lookup("error").Type())), false)),
|
||||
}, nil).Complete()
|
||||
|
||||
func implementsJSONMarshaler(typ types.Type) bool {
|
||||
return types.Implements(typ, jsonMarshaler) || types.Implements(types.NewPointer(typ), jsonMarshaler)
|
||||
}
|
||||
|
||||
32
vendor/sigs.k8s.io/controller-tools/pkg/crd/spec.go
generated
vendored
32
vendor/sigs.k8s.io/controller-tools/pkg/crd/spec.go
generated
vendored
@@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@@ -30,13 +30,21 @@ import (
|
||||
)
|
||||
|
||||
// SpecMarker is a marker that knows how to apply itself to a particular
|
||||
// version in a CRD.
|
||||
// version in a CRD Spec.
|
||||
type SpecMarker interface {
|
||||
// ApplyToCRD applies this marker to the given CRD, in the given version
|
||||
// within that CRD. It's called after everything else in the CRD is populated.
|
||||
ApplyToCRD(crd *apiext.CustomResourceDefinitionSpec, version string) error
|
||||
}
|
||||
|
||||
// Marker is a marker that knows how to apply itself to a particular
|
||||
// version in a CRD.
|
||||
type Marker interface {
|
||||
// ApplyToCRD applies this marker to the given CRD, in the given version
|
||||
// within that CRD. It's called after everything else in the CRD is populated.
|
||||
ApplyToCRD(crd *apiext.CustomResourceDefinition, version string) error
|
||||
}
|
||||
|
||||
// NeedCRDFor requests the full CRD for the given group-kind. It requires
|
||||
// that the packages containing the Go structs for that CRD have already
|
||||
// been loaded with NeedPackage.
|
||||
@@ -109,12 +117,14 @@ func (p *Parser) NeedCRDFor(groupKind schema.GroupKind, maxDescLen *int) {
|
||||
|
||||
for _, markerVals := range typeInfo.Markers {
|
||||
for _, val := range markerVals {
|
||||
crdMarker, isCrdMarker := val.(SpecMarker)
|
||||
if !isCrdMarker {
|
||||
continue
|
||||
}
|
||||
if err := crdMarker.ApplyToCRD(&crd.Spec, ver); err != nil {
|
||||
pkg.AddError(loader.ErrFromNode(err /* an okay guess */, typeInfo.RawSpec))
|
||||
if specMarker, isSpecMarker := val.(SpecMarker); isSpecMarker {
|
||||
if err := specMarker.ApplyToCRD(&crd.Spec, ver); err != nil {
|
||||
pkg.AddError(loader.ErrFromNode(err /* an okay guess */, typeInfo.RawSpec))
|
||||
}
|
||||
} else if crdMarker, isCRDMarker := val.(Marker); isCRDMarker {
|
||||
if err := crdMarker.ApplyToCRD(&crd, ver); err != nil {
|
||||
pkg.AddError(loader.ErrFromNode(err /* an okay guess */, typeInfo.RawSpec))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -164,11 +174,5 @@ func (p *Parser) NeedCRDFor(groupKind schema.GroupKind, maxDescLen *int) {
|
||||
packages[0].AddError(fmt.Errorf("CRD for %s with version(s) %v does not serve any version", groupKind, crd.Spec.Versions))
|
||||
}
|
||||
|
||||
// NB(directxman12): CRD's status doesn't have omitempty markers, which means things
|
||||
// get serialized as null, which causes the validator to freak out. Manually set
|
||||
// these to empty till we get a better solution.
|
||||
crd.Status.Conditions = []apiext.CustomResourceDefinitionCondition{}
|
||||
crd.Status.StoredVersions = []string{}
|
||||
|
||||
p.CustomResourceDefinitions[groupKind] = crd
|
||||
}
|
||||
|
||||
13
vendor/sigs.k8s.io/controller-tools/pkg/crd/zz_generated.markerhelp.go
generated
vendored
13
vendor/sigs.k8s.io/controller-tools/pkg/crd/zz_generated.markerhelp.go
generated
vendored
@@ -1,3 +1,4 @@
|
||||
//go:build !ignore_autogenerated
|
||||
// +build !ignore_autogenerated
|
||||
|
||||
/*
|
||||
@@ -32,13 +33,9 @@ func (Generator) Help() *markers.DefinitionHelp {
|
||||
Details: "",
|
||||
},
|
||||
FieldHelp: map[string]markers.DetailedHelp{
|
||||
"TrivialVersions": {
|
||||
Summary: "indicates that we should produce a single-version CRD. ",
|
||||
Details: "Single \"trivial-version\" CRDs are compatible with older (pre 1.13) Kubernetes API servers. The storage version's schema will be used as the CRD's schema. \n Only works with the v1beta1 CRD version.",
|
||||
},
|
||||
"PreserveUnknownFields": {
|
||||
Summary: "indicates whether or not we should turn off pruning. ",
|
||||
Details: "Left unspecified, it'll default to true when only a v1beta1 CRD is generated (to preserve compatibility with older versions of this tool), or false otherwise. \n It's required to be false for v1 CRDs.",
|
||||
"IgnoreUnexportedFields": {
|
||||
Summary: "indicates that we should skip unexported fields. ",
|
||||
Details: "Left unspecified, the default is false.",
|
||||
},
|
||||
"AllowDangerousTypes": {
|
||||
Summary: "allows types which are usually omitted from CRD generation because they are not recommended. ",
|
||||
@@ -50,7 +47,7 @@ func (Generator) Help() *markers.DefinitionHelp {
|
||||
},
|
||||
"CRDVersions": {
|
||||
Summary: "specifies the target API versions of the CRD type itself to generate. Defaults to v1. ",
|
||||
Details: "The first version listed will be assumed to be the \"default\" version and will not get a version suffix in the output filename. \n You'll need to use \"v1\" to get support for features like defaulting, along with an API server that supports it (Kubernetes 1.16+).",
|
||||
Details: "Currently, the only supported value is v1. \n The first version listed will be assumed to be the \"default\" version and will not get a version suffix in the output filename. \n You'll need to use \"v1\" to get support for features like defaulting, along with an API server that supports it (Kubernetes 1.16+).",
|
||||
},
|
||||
"GenerateEmbeddedObjectMeta": {
|
||||
Summary: "specifies if any embedded ObjectMeta in the CRD should be generated",
|
||||
|
||||
3
vendor/sigs.k8s.io/controller-tools/pkg/deepcopy/gen.go
generated
vendored
3
vendor/sigs.k8s.io/controller-tools/pkg/deepcopy/gen.go
generated
vendored
@@ -175,7 +175,8 @@ type ObjectGenCtx struct {
|
||||
// writeHeader writes out the build tag, package declaration, and imports
|
||||
func writeHeader(pkg *loader.Package, out io.Writer, packageName string, imports *importsList, headerText string) {
|
||||
// NB(directxman12): blank line after build tags to distinguish them from comments
|
||||
_, err := fmt.Fprintf(out, `// +build !ignore_autogenerated
|
||||
_, err := fmt.Fprintf(out, `//go:build !ignore_autogenerated
|
||||
// +build !ignore_autogenerated
|
||||
|
||||
%[3]s
|
||||
|
||||
|
||||
1
vendor/sigs.k8s.io/controller-tools/pkg/deepcopy/zz_generated.markerhelp.go
generated
vendored
1
vendor/sigs.k8s.io/controller-tools/pkg/deepcopy/zz_generated.markerhelp.go
generated
vendored
@@ -1,3 +1,4 @@
|
||||
//go:build !ignore_autogenerated
|
||||
// +build !ignore_autogenerated
|
||||
|
||||
/*
|
||||
|
||||
8
vendor/sigs.k8s.io/controller-tools/pkg/genall/doc.go
generated
vendored
8
vendor/sigs.k8s.io/controller-tools/pkg/genall/doc.go
generated
vendored
@@ -17,14 +17,14 @@ limitations under the License.
|
||||
// Package genall defines entrypoints for generation tools to hook into and
|
||||
// share the same set of parsing, typechecking, and marker information.
|
||||
//
|
||||
// Generators
|
||||
// # Generators
|
||||
//
|
||||
// Each Generator knows how to register its markers into a central Registry,
|
||||
// and then how to generate output using a Collector and some root packages.
|
||||
// Each generator can be considered to be the output type of a marker, for easy
|
||||
// command line parsing.
|
||||
//
|
||||
// Output and Input
|
||||
// # Output and Input
|
||||
//
|
||||
// Generators output artifacts via an OutputRule. OutputRules know how to
|
||||
// write output for different package-associated (code) files, as well as
|
||||
@@ -40,7 +40,7 @@ limitations under the License.
|
||||
// InputRule defines custom input loading, but its shared across all
|
||||
// Generators. There's currently only a filesystem implementation.
|
||||
//
|
||||
// Runtime and Context
|
||||
// # Runtime and Context
|
||||
//
|
||||
// Runtime maps together Generators, and constructs "contexts" which provide
|
||||
// the common collector and roots, plus the output rule for that generator, and
|
||||
@@ -50,7 +50,7 @@ limitations under the License.
|
||||
// skipping type-checking errors (since those are commonly caused by the
|
||||
// partial type-checking of loader.TypeChecker).
|
||||
//
|
||||
// Options
|
||||
// # Options
|
||||
//
|
||||
// The FromOptions (and associated helpers) function makes it easy to use generators
|
||||
// and output rules as markers that can be parsed from the command line, producing
|
||||
|
||||
66
vendor/sigs.k8s.io/controller-tools/pkg/genall/genall.go
generated
vendored
66
vendor/sigs.k8s.io/controller-tools/pkg/genall/genall.go
generated
vendored
@@ -17,13 +17,14 @@ limitations under the License.
|
||||
package genall
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
|
||||
"golang.org/x/tools/go/packages"
|
||||
"sigs.k8s.io/yaml"
|
||||
rawyaml "gopkg.in/yaml.v2"
|
||||
|
||||
"sigs.k8s.io/controller-tools/pkg/loader"
|
||||
"sigs.k8s.io/controller-tools/pkg/markers"
|
||||
@@ -100,6 +101,8 @@ type Runtime struct {
|
||||
GenerationContext
|
||||
// OutputRules defines how to output artifacts for each Generator.
|
||||
OutputRules OutputRules
|
||||
// ErrorWriter defines where to write error messages.
|
||||
ErrorWriter io.Writer
|
||||
}
|
||||
|
||||
// GenerationContext defines the common information needed for each Generator
|
||||
@@ -118,10 +121,22 @@ type GenerationContext struct {
|
||||
InputRule
|
||||
}
|
||||
|
||||
// WriteYAMLOptions implements the Options Pattern for WriteYAML.
|
||||
type WriteYAMLOptions struct {
|
||||
transform func(obj map[string]interface{}) error
|
||||
}
|
||||
|
||||
// WithTransform applies a transformation to objects just before writing them.
|
||||
func WithTransform(transform func(obj map[string]interface{}) error) *WriteYAMLOptions {
|
||||
return &WriteYAMLOptions{
|
||||
transform: transform,
|
||||
}
|
||||
}
|
||||
|
||||
// WriteYAML writes the given objects out, serialized as YAML, using the
|
||||
// context's OutputRule. Objects are written as separate documents, separated
|
||||
// from each other by `---` (as per the YAML spec).
|
||||
func (g GenerationContext) WriteYAML(itemPath string, objs ...interface{}) error {
|
||||
func (g GenerationContext) WriteYAML(itemPath string, objs []interface{}, options ...*WriteYAMLOptions) error {
|
||||
out, err := g.Open(nil, itemPath)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -129,11 +144,11 @@ func (g GenerationContext) WriteYAML(itemPath string, objs ...interface{}) error
|
||||
defer out.Close()
|
||||
|
||||
for _, obj := range objs {
|
||||
yamlContent, err := yaml.Marshal(obj)
|
||||
yamlContent, err := yamlMarshal(obj, options...)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
n, err := out.Write(append([]byte("\n---\n"), yamlContent...))
|
||||
n, err := out.Write(append([]byte("---\n"), yamlContent...))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -145,6 +160,41 @@ func (g GenerationContext) WriteYAML(itemPath string, objs ...interface{}) error
|
||||
return nil
|
||||
}
|
||||
|
||||
// yamlMarshal is based on sigs.k8s.io/yaml.Marshal, but allows for transforming the final data before writing.
|
||||
func yamlMarshal(o interface{}, options ...*WriteYAMLOptions) ([]byte, error) {
|
||||
j, err := json.Marshal(o)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error marshaling into JSON: %v", err)
|
||||
}
|
||||
|
||||
return yamlJSONToYAMLWithFilter(j, options...)
|
||||
}
|
||||
|
||||
// yamlJSONToYAMLWithFilter is based on sigs.k8s.io/yaml.JSONToYAML, but allows for transforming the final data before writing.
|
||||
func yamlJSONToYAMLWithFilter(j []byte, options ...*WriteYAMLOptions) ([]byte, error) {
|
||||
// Convert the JSON to an object.
|
||||
var jsonObj map[string]interface{}
|
||||
// We are using yaml.Unmarshal here (instead of json.Unmarshal) because the
|
||||
// Go JSON library doesn't try to pick the right number type (int, float,
|
||||
// etc.) when unmarshalling to interface{}, it just picks float64
|
||||
// universally. go-yaml does go through the effort of picking the right
|
||||
// number type, so we can preserve number type throughout this process.
|
||||
if err := rawyaml.Unmarshal(j, &jsonObj); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, option := range options {
|
||||
if option.transform != nil {
|
||||
if err := option.transform(jsonObj); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Marshal this object into YAML.
|
||||
return rawyaml.Marshal(jsonObj)
|
||||
}
|
||||
|
||||
// ReadFile reads the given boilerplate artifact using the context's InputRule.
|
||||
func (g GenerationContext) ReadFile(path string) ([]byte, error) {
|
||||
file, err := g.OpenForRead(path)
|
||||
@@ -188,8 +238,12 @@ func (g Generators) ForRoots(rootPaths ...string) (*Runtime, error) {
|
||||
func (r *Runtime) Run() bool {
|
||||
// TODO(directxman12): we could make this parallel,
|
||||
// but we'd need to ensure all underlying machinery is threadsafe
|
||||
|
||||
if r.ErrorWriter == nil {
|
||||
r.ErrorWriter = os.Stderr
|
||||
}
|
||||
if len(r.Generators) == 0 {
|
||||
fmt.Fprintln(os.Stderr, "no generators to run")
|
||||
fmt.Fprintln(r.ErrorWriter, "no generators to run")
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -205,7 +259,7 @@ func (r *Runtime) Run() bool {
|
||||
}
|
||||
|
||||
if err := (*gen).Generate(&ctx); err != nil {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
fmt.Fprintln(r.ErrorWriter, err)
|
||||
hadErrs = true
|
||||
}
|
||||
}
|
||||
|
||||
4
vendor/sigs.k8s.io/controller-tools/pkg/genall/help/pretty/doc.go
generated
vendored
4
vendor/sigs.k8s.io/controller-tools/pkg/genall/help/pretty/doc.go
generated
vendored
@@ -17,13 +17,13 @@ limitations under the License.
|
||||
// Package pretty contains utilities for formatting terminal help output,
|
||||
// and a use of those to display marker help.
|
||||
//
|
||||
// Terminal Output
|
||||
// # Terminal Output
|
||||
//
|
||||
// The Span interface and Table struct allow you to construct tables with
|
||||
// colored formatting, without causing ANSI formatting characters to mess up width
|
||||
// calculations.
|
||||
//
|
||||
// Marker Help
|
||||
// # Marker Help
|
||||
//
|
||||
// The MarkersSummary prints a summary table for marker help, while the MarkersDetails
|
||||
// prints out more detailed information, with explainations of the individual marker fields.
|
||||
|
||||
2
vendor/sigs.k8s.io/controller-tools/pkg/genall/options.go
generated
vendored
2
vendor/sigs.k8s.io/controller-tools/pkg/genall/options.go
generated
vendored
@@ -30,6 +30,8 @@ var (
|
||||
// +controllertools:marker:generateHelp:category=""
|
||||
|
||||
// InputPaths represents paths and go-style path patterns to use as package roots.
|
||||
//
|
||||
// Multiple paths can be specified using "{path1, path2, path3}".
|
||||
type InputPaths []string
|
||||
|
||||
// RegisterOptionsMarkers registers "mandatory" options markers for FromOptions into the given registry.
|
||||
|
||||
2
vendor/sigs.k8s.io/controller-tools/pkg/genall/output.go
generated
vendored
2
vendor/sigs.k8s.io/controller-tools/pkg/genall/output.go
generated
vendored
@@ -103,7 +103,7 @@ type OutputToDirectory string
|
||||
|
||||
func (o OutputToDirectory) Open(_ *loader.Package, itemPath string) (io.WriteCloser, error) {
|
||||
// ensure the directory exists
|
||||
if err := os.MkdirAll(string(o), os.ModePerm); err != nil {
|
||||
if err := os.MkdirAll(filepath.Dir(filepath.Join(string(o), itemPath)), os.ModePerm); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
path := filepath.Join(string(o), itemPath)
|
||||
|
||||
5
vendor/sigs.k8s.io/controller-tools/pkg/genall/zz_generated.markerhelp.go
generated
vendored
5
vendor/sigs.k8s.io/controller-tools/pkg/genall/zz_generated.markerhelp.go
generated
vendored
@@ -1,3 +1,4 @@
|
||||
//go:build !ignore_autogenerated
|
||||
// +build !ignore_autogenerated
|
||||
|
||||
/*
|
||||
@@ -28,8 +29,8 @@ func (InputPaths) Help() *markers.DefinitionHelp {
|
||||
return &markers.DefinitionHelp{
|
||||
Category: "",
|
||||
DetailedHelp: markers.DetailedHelp{
|
||||
Summary: "represents paths and go-style path patterns to use as package roots.",
|
||||
Details: "",
|
||||
Summary: "represents paths and go-style path patterns to use as package roots. ",
|
||||
Details: "Multiple paths can be specified using \"{path1, path2, path3}\".",
|
||||
},
|
||||
FieldHelp: map[string]markers.DetailedHelp{},
|
||||
}
|
||||
|
||||
8
vendor/sigs.k8s.io/controller-tools/pkg/loader/doc.go
generated
vendored
8
vendor/sigs.k8s.io/controller-tools/pkg/loader/doc.go
generated
vendored
@@ -22,7 +22,7 @@ limitations under the License.
|
||||
// Because it uses go/packages, it's modules-aware, and works in both modules-
|
||||
// and non-modules environments.
|
||||
//
|
||||
// Loading
|
||||
// # Loading
|
||||
//
|
||||
// The main entrypoint for loading is LoadRoots, which traverse the package
|
||||
// graph starting at the given patterns (file, package, path, or ...-wildcard,
|
||||
@@ -33,7 +33,7 @@ limitations under the License.
|
||||
// Packages are suitable for comparison, as each unique package only ever has
|
||||
// one *Package object returned.
|
||||
//
|
||||
// Syntax and TypeChecking
|
||||
// # Syntax and TypeChecking
|
||||
//
|
||||
// ASTs and type-checking information can be loaded with NeedSyntax and
|
||||
// NeedTypesInfo, respectively. Both are idempotent -- repeated calls will
|
||||
@@ -41,14 +41,14 @@ limitations under the License.
|
||||
// check the current package -- if you want to type-check imports as well,
|
||||
// you'll need to type-check them first.
|
||||
//
|
||||
// Reference Pruning and Recursive Checking
|
||||
// # Reference Pruning and Recursive Checking
|
||||
//
|
||||
// In order to type-check using only the packages you care about, you can use a
|
||||
// TypeChecker. TypeChecker will visit each top-level type declaration,
|
||||
// collect (optionally filtered) references, and type-check references
|
||||
// packages.
|
||||
//
|
||||
// Errors
|
||||
// # Errors
|
||||
//
|
||||
// Errors can be added to each package. Use ErrFromNode to create an error
|
||||
// from an AST node. Errors can then be printed (complete with file and
|
||||
|
||||
281
vendor/sigs.k8s.io/controller-tools/pkg/loader/loader.go
generated
vendored
281
vendor/sigs.k8s.io/controller-tools/pkg/loader/loader.go
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2019 The Kubernetes Authors.
|
||||
Copyright 2019-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.
|
||||
@@ -25,9 +25,12 @@ import (
|
||||
"go/types"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"sync"
|
||||
|
||||
"golang.org/x/tools/go/packages"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
)
|
||||
|
||||
// Much of this is strongly inspired by the contents of go/packages,
|
||||
@@ -329,6 +332,40 @@ func LoadRoots(roots ...string) ([]*Package, error) {
|
||||
//
|
||||
// This is generally only useful for use in testing when you need to modify
|
||||
// loading settings to load from a fake location.
|
||||
//
|
||||
// This function will traverse Go module boundaries for roots that are file-
|
||||
// system paths and end with "...". Please note this feature currently only
|
||||
// supports roots that are filesystem paths. For more information, please
|
||||
// refer to the high-level outline of this function's logic:
|
||||
//
|
||||
// 1. If no roots are provided then load the working directory and return
|
||||
// early.
|
||||
//
|
||||
// 2. Otherwise sort the provided roots into two, distinct buckets:
|
||||
//
|
||||
// a. package/module names
|
||||
// b. filesystem paths
|
||||
//
|
||||
// A filesystem path is distinguished from a Go package/module name by
|
||||
// the same rules as followed by the "go" command. At a high level, a
|
||||
// root is a filesystem path IFF it meets ANY of the following criteria:
|
||||
//
|
||||
// * is absolute
|
||||
// * begins with .
|
||||
// * begins with ..
|
||||
//
|
||||
// For more information please refer to the output of the command
|
||||
// "go help packages".
|
||||
//
|
||||
// 3. Load the package/module roots as a single call to packages.Load. If
|
||||
// there are no filesystem path roots then return early.
|
||||
//
|
||||
// 4. For filesystem path roots ending with "...", check to see if its
|
||||
// descendants include any nested, Go modules. If so, add the directory
|
||||
// that contains the nested Go module to the filesystem path roots.
|
||||
//
|
||||
// 5. Load the filesystem path roots and return the load packages for the
|
||||
// package/module roots AND the filesystem path roots.
|
||||
func LoadRootsWithConfig(cfg *packages.Config, roots ...string) ([]*Package, error) {
|
||||
l := &loader{
|
||||
cfg: cfg,
|
||||
@@ -341,18 +378,250 @@ func LoadRootsWithConfig(cfg *packages.Config, roots ...string) ([]*Package, err
|
||||
// put our build flags first so that callers can override them
|
||||
l.cfg.BuildFlags = append([]string{"-tags", "ignore_autogenerated"}, l.cfg.BuildFlags...)
|
||||
|
||||
rawPkgs, err := packages.Load(l.cfg, roots...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
// Visit the import graphs of the loaded, root packages. If an imported
|
||||
// package refers to another loaded, root package, then replace the
|
||||
// instance of the imported package with a reference to the loaded, root
|
||||
// package. This is required to make kubebuilder markers work correctly
|
||||
// when multiple root paths are loaded and types from one path reference
|
||||
// types from another root path.
|
||||
defer func() {
|
||||
for i := range l.Roots {
|
||||
visitImports(l.Roots, l.Roots[i], nil)
|
||||
}
|
||||
}()
|
||||
|
||||
// uniquePkgIDs is used to keep track of the discovered packages to be nice
|
||||
// and try and prevent packages from showing up twice when nested module
|
||||
// support is enabled. there is not harm that comes from this per se, but
|
||||
// it makes testing easier when a known number of modules can be asserted
|
||||
uniquePkgIDs := sets.String{}
|
||||
|
||||
// loadPackages returns the Go packages for the provided roots
|
||||
//
|
||||
// if validatePkgFn is nil, a package will be returned in the slice,
|
||||
// otherwise the package is only returned if the result of
|
||||
// validatePkgFn(pkg.ID) is truthy
|
||||
loadPackages := func(roots ...string) ([]*Package, error) {
|
||||
rawPkgs, err := packages.Load(l.cfg, roots...)
|
||||
if err != nil {
|
||||
loadRoot := l.cfg.Dir
|
||||
if l.cfg.Dir == "" {
|
||||
loadRoot, _ = os.Getwd()
|
||||
}
|
||||
return nil, fmt.Errorf("load packages in root %q: %w", loadRoot, err)
|
||||
}
|
||||
var pkgs []*Package
|
||||
for _, rp := range rawPkgs {
|
||||
p := l.packageFor(rp)
|
||||
if !uniquePkgIDs.Has(p.ID) {
|
||||
pkgs = append(pkgs, p)
|
||||
uniquePkgIDs.Insert(p.ID)
|
||||
}
|
||||
}
|
||||
return pkgs, nil
|
||||
}
|
||||
|
||||
for _, rawPkg := range rawPkgs {
|
||||
l.Roots = append(l.Roots, l.packageFor(rawPkg))
|
||||
// if no roots were provided then load the current package and return early
|
||||
if len(roots) == 0 {
|
||||
pkgs, err := loadPackages()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
l.Roots = append(l.Roots, pkgs...)
|
||||
return l.Roots, nil
|
||||
}
|
||||
|
||||
// pkgRoots is a slice of roots that are package/modules and fspRoots
|
||||
// is a slice of roots that are local filesystem paths.
|
||||
//
|
||||
// please refer to this function's godoc comments for more information on
|
||||
// how these two types of roots are distinguished from one another
|
||||
var (
|
||||
pkgRoots []string
|
||||
fspRoots []string
|
||||
fspRootRx = regexp.MustCompile(`^\.{1,2}`)
|
||||
)
|
||||
for _, r := range roots {
|
||||
if filepath.IsAbs(r) || fspRootRx.MatchString(r) {
|
||||
fspRoots = append(fspRoots, r)
|
||||
} else {
|
||||
pkgRoots = append(pkgRoots, r)
|
||||
}
|
||||
}
|
||||
|
||||
// handle the package roots by sending them into the packages.Load function
|
||||
// all at once. this is more efficient, but cannot be used for the file-
|
||||
// system path roots due to them needing a custom, calculated value for the
|
||||
// cfg.Dir field
|
||||
if len(pkgRoots) > 0 {
|
||||
pkgs, err := loadPackages(pkgRoots...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
l.Roots = append(l.Roots, pkgs...)
|
||||
}
|
||||
|
||||
// if there are no filesystem path roots then go ahead and return early
|
||||
if len(fspRoots) == 0 {
|
||||
return l.Roots, nil
|
||||
}
|
||||
|
||||
//
|
||||
// at this point we are handling filesystem path roots
|
||||
//
|
||||
|
||||
// ensure the cfg.Dir field is reset to its original value upon
|
||||
// returning from this function. it should honestly be fine if it is
|
||||
// not given most callers will not send in the cfg parameter directly,
|
||||
// as it's largely for testing, but still, let's be good stewards.
|
||||
defer func(d string) {
|
||||
cfg.Dir = d
|
||||
}(cfg.Dir)
|
||||
|
||||
// store the value of cfg.Dir so we can use it later if it is non-empty.
|
||||
// we need to store it now as the value of cfg.Dir will be updated by
|
||||
// a loop below
|
||||
cfgDir := cfg.Dir
|
||||
|
||||
// addNestedGoModulesToRoots is given to filepath.WalkDir and adds the
|
||||
// directory part of p to the list of filesystem path roots IFF p is the
|
||||
// path to a file named "go.mod"
|
||||
addNestedGoModulesToRoots := func(
|
||||
p string,
|
||||
d os.DirEntry,
|
||||
e error) error {
|
||||
|
||||
if e != nil {
|
||||
return e
|
||||
}
|
||||
if !d.IsDir() && filepath.Base(p) == "go.mod" {
|
||||
fspRoots = append(fspRoots, filepath.Join(filepath.Dir(p), "..."))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// in the first pass over the filesystem path roots we:
|
||||
//
|
||||
// 1. make the root into an absolute path
|
||||
//
|
||||
// 2. check to see if a root uses the nested path syntax, ex. ...
|
||||
//
|
||||
// 3. if so, walk the root's descendants, searching for any nested Go
|
||||
// modules
|
||||
//
|
||||
// 4. if found then the directory containing the Go module is added to
|
||||
// the list of the filesystem path roots
|
||||
for i := range fspRoots {
|
||||
r := fspRoots[i]
|
||||
|
||||
// clean up the root
|
||||
r = filepath.Clean(r)
|
||||
|
||||
// get the absolute path of the root
|
||||
if !filepath.IsAbs(r) {
|
||||
|
||||
// if the initial value of cfg.Dir was non-empty then use it when
|
||||
// building the absolute path to this root. otherwise use the
|
||||
// filepath.Abs function to get the absolute path of the root based
|
||||
// on the working directory
|
||||
if cfgDir != "" {
|
||||
r = filepath.Join(cfgDir, r)
|
||||
} else {
|
||||
ar, err := filepath.Abs(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
r = ar
|
||||
}
|
||||
}
|
||||
|
||||
// update the root to be an absolute path
|
||||
fspRoots[i] = r
|
||||
|
||||
b, d := filepath.Base(r), filepath.Dir(r)
|
||||
|
||||
// if the base element is "..." then it means nested traversal is
|
||||
// activated. this can be passed directly to the loader. however, if
|
||||
// specified we also want to traverse the path manually to determine if
|
||||
// there are any nested Go modules we want to add to the list of file-
|
||||
// system path roots to process
|
||||
if b == "..." {
|
||||
if err := filepath.WalkDir(
|
||||
d,
|
||||
addNestedGoModulesToRoots); err != nil {
|
||||
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// in the second pass over the filesystem path roots we:
|
||||
//
|
||||
// 1. determine the directory from which to execute the loader
|
||||
//
|
||||
// 2. update the loader config's Dir property to be the directory from
|
||||
// step one
|
||||
//
|
||||
// 3. determine whether the root passed to the loader should be "./."
|
||||
// or "./..."
|
||||
//
|
||||
// 4. execute the loader with the value from step three
|
||||
for _, r := range fspRoots {
|
||||
b, d := filepath.Base(r), filepath.Dir(r)
|
||||
|
||||
// we want the base part of the path to be either "..." or ".", except
|
||||
// Go's filepath utilities clean paths during manipulation, removing the
|
||||
// ".". thus, if not "...", let's update the path components so that:
|
||||
//
|
||||
// d = r
|
||||
// b = "."
|
||||
if b != "..." {
|
||||
d = r
|
||||
b = "."
|
||||
}
|
||||
|
||||
// update the loader configuration's Dir field to the directory part of
|
||||
// the root
|
||||
l.cfg.Dir = d
|
||||
|
||||
// update the root to be "./..." or "./."
|
||||
// (with OS-specific filepath separator). please note filepath.Join
|
||||
// would clean up the trailing "." character that we want preserved,
|
||||
// hence the more manual path concatenation logic
|
||||
r = fmt.Sprintf(".%s%s", string(filepath.Separator), b)
|
||||
|
||||
// load the packages from the roots
|
||||
pkgs, err := loadPackages(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
l.Roots = append(l.Roots, pkgs...)
|
||||
}
|
||||
|
||||
return l.Roots, nil
|
||||
}
|
||||
|
||||
// visitImports walks a dependency graph, replacing imported package
|
||||
// references with those from the rootPkgs list. This ensures the
|
||||
// kubebuilder marker generation is handled correctly. For more info,
|
||||
// please see issue 680.
|
||||
func visitImports(rootPkgs []*Package, pkg *Package, seen sets.String) {
|
||||
if seen == nil {
|
||||
seen = sets.String{}
|
||||
}
|
||||
for importedPkgID, importedPkg := range pkg.Imports() {
|
||||
for i := range rootPkgs {
|
||||
if importedPkgID == rootPkgs[i].ID {
|
||||
pkg.imports[importedPkgID] = rootPkgs[i]
|
||||
}
|
||||
}
|
||||
if !seen.Has(importedPkgID) {
|
||||
seen.Insert(importedPkgID)
|
||||
visitImports(rootPkgs, importedPkg, seen)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// importFunc is an implementation of the single-method
|
||||
// types.Importer interface based on a function value.
|
||||
type importerFunc func(path string) (*types.Package, error)
|
||||
|
||||
11
vendor/sigs.k8s.io/controller-tools/pkg/loader/refs.go
generated
vendored
11
vendor/sigs.k8s.io/controller-tools/pkg/loader/refs.go
generated
vendored
@@ -133,9 +133,14 @@ func (c *referenceCollector) Visit(node ast.Node) ast.Visitor {
|
||||
// local reference or dot-import, ignore
|
||||
return nil
|
||||
case *ast.SelectorExpr:
|
||||
pkgName := typedNode.X.(*ast.Ident).Name
|
||||
c.refs.external(pkgName)
|
||||
return nil
|
||||
switch x := typedNode.X.(type) {
|
||||
case *ast.Ident:
|
||||
pkgName := x.Name
|
||||
c.refs.external(pkgName)
|
||||
return nil
|
||||
default:
|
||||
return c
|
||||
}
|
||||
default:
|
||||
return c
|
||||
}
|
||||
|
||||
12
vendor/sigs.k8s.io/controller-tools/pkg/markers/collect.go
generated
vendored
12
vendor/sigs.k8s.io/controller-tools/pkg/markers/collect.go
generated
vendored
@@ -65,13 +65,13 @@ func (c *Collector) init() {
|
||||
//
|
||||
// - it's in the Godoc for that AST node
|
||||
//
|
||||
// - it's in the closest non-godoc comment group above that node,
|
||||
// *and* that node is a type or field node, *and* [it's either
|
||||
// registered as type-level *or* it's not registered as being
|
||||
// package-level]
|
||||
// - it's in the closest non-godoc comment group above that node,
|
||||
// *and* that node is a type or field node, *and* [it's either
|
||||
// registered as type-level *or* it's not registered as being
|
||||
// package-level]
|
||||
//
|
||||
// - it's not in the Godoc of a node, doesn't meet the above criteria, and
|
||||
// isn't in a struct definition (in which case it's package-level)
|
||||
// - it's not in the Godoc of a node, doesn't meet the above criteria, and
|
||||
// isn't in a struct definition (in which case it's package-level)
|
||||
func (c *Collector) MarkersInPackage(pkg *loader.Package) (map[ast.Node]MarkerValues, error) {
|
||||
c.mu.Lock()
|
||||
c.init()
|
||||
|
||||
22
vendor/sigs.k8s.io/controller-tools/pkg/markers/doc.go
generated
vendored
22
vendor/sigs.k8s.io/controller-tools/pkg/markers/doc.go
generated
vendored
@@ -19,7 +19,7 @@ limitations under the License.
|
||||
// avoid confusing with struct tags). Parsed result (output) values take the
|
||||
// form of Go values, much like the "encoding/json" package.
|
||||
//
|
||||
// Definitions and Parsing
|
||||
// # Definitions and Parsing
|
||||
//
|
||||
// Markers are defined as structured Definitions which can be used to
|
||||
// consistently parse marker comments. A Definition contains an concrete
|
||||
@@ -29,20 +29,20 @@ limitations under the License.
|
||||
//
|
||||
// Markers take the general form
|
||||
//
|
||||
// +path:to:marker=val
|
||||
// +path:to:marker=val
|
||||
//
|
||||
// +path:to:marker:arg1=val,arg2=val2
|
||||
// +path:to:marker:arg1=val,arg2=val2
|
||||
//
|
||||
// +path:to:marker
|
||||
// +path:to:marker
|
||||
//
|
||||
// Arguments may be ints, bools, strings, and slices. Ints and bool take their
|
||||
// standard form from Go. Strings may take any of their standard forms, or any
|
||||
// sequence of unquoted characters up until a `,` or `;` is encountered. Lists
|
||||
// take either of the following forms:
|
||||
//
|
||||
// val;val;val
|
||||
// val;val;val
|
||||
//
|
||||
// {val, val, val}
|
||||
// {val, val, val}
|
||||
//
|
||||
// Note that the first form will not properly parse nested slices, but is
|
||||
// generally convenient and is the form used in many existing markers.
|
||||
@@ -61,7 +61,7 @@ limitations under the License.
|
||||
// non-optional fields aren't mentioned, an error will be raised unless
|
||||
// `Strict` is set to false.
|
||||
//
|
||||
// Registries and Lookup
|
||||
// # Registries and Lookup
|
||||
//
|
||||
// Definitions can be added to registries to facilitate lookups. Each
|
||||
// definition is marked as either describing a type, struct field, or package
|
||||
@@ -69,7 +69,7 @@ limitations under the License.
|
||||
// long as each describes a different construct (type, field, or package).
|
||||
// Definitions can then be looked up by passing unparsed markers.
|
||||
//
|
||||
// Collection and Extraction
|
||||
// # Collection and Extraction
|
||||
//
|
||||
// Markers can be collected from a loader.Package using a Collector. The
|
||||
// Collector will read from a given Registry, collecting comments that look
|
||||
@@ -85,7 +85,7 @@ limitations under the License.
|
||||
// Like loader.Package, Collector's methods are idempotent and will not
|
||||
// reperform work.
|
||||
//
|
||||
// Traversal
|
||||
// # Traversal
|
||||
//
|
||||
// EachType function iterates over each type in a Package, providing
|
||||
// conveniently structured type and field information with marker values
|
||||
@@ -93,14 +93,14 @@ limitations under the License.
|
||||
//
|
||||
// PackageMarkers can be used to fetch just package-level markers.
|
||||
//
|
||||
// Help
|
||||
// # Help
|
||||
//
|
||||
// Help can be defined for each marker using the DefinitionHelp struct. It's
|
||||
// mostly intended to be generated off of godocs using cmd/helpgen, which takes
|
||||
// the first line as summary (removing the type/field name), and considers the
|
||||
// rest as details. It looks for the
|
||||
//
|
||||
// +controllertools:generateHelp[:category=<string>]
|
||||
// +controllertools:generateHelp[:category=<string>]
|
||||
//
|
||||
// marker to start generation.
|
||||
//
|
||||
|
||||
44
vendor/sigs.k8s.io/controller-tools/pkg/markers/parse.go
generated
vendored
44
vendor/sigs.k8s.io/controller-tools/pkg/markers/parse.go
generated
vendored
@@ -84,6 +84,8 @@ const (
|
||||
InvalidType ArgumentType = iota
|
||||
// IntType is an int
|
||||
IntType
|
||||
// NumberType is a float64
|
||||
NumberType
|
||||
// StringType is a string
|
||||
StringType
|
||||
// BoolType is a bool
|
||||
@@ -127,6 +129,8 @@ func (a Argument) typeString(out *strings.Builder) {
|
||||
out.WriteString("<invalid>")
|
||||
case IntType:
|
||||
out.WriteString("int")
|
||||
case NumberType:
|
||||
out.WriteString("float64")
|
||||
case StringType:
|
||||
out.WriteString("string")
|
||||
case BoolType:
|
||||
@@ -180,6 +184,8 @@ func makeSliceType(itemType Argument) (reflect.Type, error) {
|
||||
switch itemType.Type {
|
||||
case IntType:
|
||||
itemReflectedType = reflect.TypeOf(int(0))
|
||||
case NumberType:
|
||||
itemReflectedType = reflect.TypeOf(float64(0))
|
||||
case StringType:
|
||||
itemReflectedType = reflect.TypeOf("")
|
||||
case BoolType:
|
||||
@@ -215,6 +221,8 @@ func makeMapType(itemType Argument) (reflect.Type, error) {
|
||||
switch itemType.Type {
|
||||
case IntType:
|
||||
itemReflectedType = reflect.TypeOf(int(0))
|
||||
case NumberType:
|
||||
itemReflectedType = reflect.TypeOf(float64(0))
|
||||
case StringType:
|
||||
itemReflectedType = reflect.TypeOf("")
|
||||
case BoolType:
|
||||
@@ -346,9 +354,13 @@ func guessType(scanner *sc.Scanner, raw string, allowSlice bool) *Argument {
|
||||
if nextTok == '-' {
|
||||
nextTok = subScanner.Scan()
|
||||
}
|
||||
|
||||
if nextTok == sc.Int {
|
||||
return &Argument{Type: IntType}
|
||||
}
|
||||
if nextTok == sc.Float {
|
||||
return &Argument{Type: NumberType}
|
||||
}
|
||||
}
|
||||
|
||||
// otherwise assume bare strings
|
||||
@@ -471,7 +483,7 @@ func (a *Argument) parseMap(scanner *sc.Scanner, raw string, out reflect.Value)
|
||||
func (a *Argument) parse(scanner *sc.Scanner, raw string, out reflect.Value, inSlice bool) {
|
||||
// nolint:gocyclo
|
||||
if a.Type == InvalidType {
|
||||
scanner.Error(scanner, fmt.Sprintf("cannot parse invalid type"))
|
||||
scanner.Error(scanner, "cannot parse invalid type")
|
||||
return
|
||||
}
|
||||
if a.Pointer {
|
||||
@@ -485,6 +497,32 @@ func (a *Argument) parse(scanner *sc.Scanner, raw string, out reflect.Value, inS
|
||||
// consume everything else
|
||||
for tok := scanner.Scan(); tok != sc.EOF; tok = scanner.Scan() {
|
||||
}
|
||||
case NumberType:
|
||||
nextChar := scanner.Peek()
|
||||
isNegative := false
|
||||
if nextChar == '-' {
|
||||
isNegative = true
|
||||
scanner.Scan() // eat the '-'
|
||||
}
|
||||
|
||||
tok := scanner.Scan()
|
||||
if tok != sc.Float && tok != sc.Int {
|
||||
scanner.Error(scanner, fmt.Sprintf("expected integer or float, got %q", scanner.TokenText()))
|
||||
return
|
||||
}
|
||||
|
||||
text := scanner.TokenText()
|
||||
if isNegative {
|
||||
text = "-" + text
|
||||
}
|
||||
|
||||
val, err := strconv.ParseFloat(text, 64)
|
||||
if err != nil {
|
||||
scanner.Error(scanner, fmt.Sprintf("unable to parse number: %v", err))
|
||||
return
|
||||
}
|
||||
|
||||
castAndSet(out, reflect.ValueOf(val))
|
||||
case IntType:
|
||||
nextChar := scanner.Peek()
|
||||
isNegative := false
|
||||
@@ -597,6 +635,8 @@ func ArgumentFromType(rawType reflect.Type) (Argument, error) {
|
||||
arg.Type = StringType
|
||||
case reflect.Int, reflect.Int32: // NB(directxman12): all ints in kubernetes are int32, so explicitly support that
|
||||
arg.Type = IntType
|
||||
case reflect.Float64:
|
||||
arg.Type = NumberType
|
||||
case reflect.Bool:
|
||||
arg.Type = BoolType
|
||||
case reflect.Slice:
|
||||
@@ -755,7 +795,7 @@ func (d *Definition) loadFields() error {
|
||||
func parserScanner(raw string, err func(*sc.Scanner, string)) *sc.Scanner {
|
||||
scanner := &sc.Scanner{}
|
||||
scanner.Init(bytes.NewBufferString(raw))
|
||||
scanner.Mode = sc.ScanIdents | sc.ScanInts | sc.ScanStrings | sc.ScanRawStrings | sc.SkipComments
|
||||
scanner.Mode = sc.ScanIdents | sc.ScanInts | sc.ScanFloats | sc.ScanStrings | sc.ScanRawStrings | sc.SkipComments
|
||||
scanner.Error = err
|
||||
|
||||
return scanner
|
||||
|
||||
3
vendor/sigs.k8s.io/controller-tools/pkg/markers/reg.go
generated
vendored
3
vendor/sigs.k8s.io/controller-tools/pkg/markers/reg.go
generated
vendored
@@ -52,7 +52,8 @@ func (r *Registry) init() {
|
||||
|
||||
// Define defines a new marker with the given name, target, and output type.
|
||||
// It's a shortcut around
|
||||
// r.Register(MakeDefinition(name, target, obj))
|
||||
//
|
||||
// r.Register(MakeDefinition(name, target, obj))
|
||||
func (r *Registry) Define(name string, target TargetType, obj interface{}) error {
|
||||
def, err := MakeDefinition(name, target, obj)
|
||||
if err != nil {
|
||||
|
||||
22
vendor/sigs.k8s.io/controller-tools/pkg/markers/zip.go
generated
vendored
22
vendor/sigs.k8s.io/controller-tools/pkg/markers/zip.go
generated
vendored
@@ -67,12 +67,22 @@ func extractDoc(node ast.Node, decl *ast.GenDecl) string {
|
||||
// chop off the extraneous last part
|
||||
outLines = outLines[:len(outLines)-1]
|
||||
}
|
||||
// respect double-newline meaning actual newline
|
||||
|
||||
for i, line := range outLines {
|
||||
// Trim any extranous whitespace,
|
||||
// for handling /*…*/-style comments,
|
||||
// which have whitespace preserved in go/ast:
|
||||
line = strings.TrimSpace(line)
|
||||
|
||||
// Respect that double-newline means
|
||||
// actual newline:
|
||||
if line == "" {
|
||||
outLines[i] = "\n"
|
||||
} else {
|
||||
outLines[i] = line
|
||||
}
|
||||
}
|
||||
|
||||
return strings.Join(outLines, " ")
|
||||
}
|
||||
|
||||
@@ -139,11 +149,11 @@ type TypeCallback func(info *TypeInfo)
|
||||
// EachType collects all markers, then calls the given callback for each type declaration in a package.
|
||||
// Each individual spec is considered separate, so
|
||||
//
|
||||
// type (
|
||||
// Foo string
|
||||
// Bar int
|
||||
// Baz struct{}
|
||||
// )
|
||||
// type (
|
||||
// Foo string
|
||||
// Bar int
|
||||
// Baz struct{}
|
||||
// )
|
||||
//
|
||||
// yields three calls to the callback.
|
||||
func EachType(col *Collector, pkg *loader.Package, cb TypeCallback) error {
|
||||
|
||||
4
vendor/sigs.k8s.io/controller-tools/pkg/rbac/parser.go
generated
vendored
4
vendor/sigs.k8s.io/controller-tools/pkg/rbac/parser.go
generated
vendored
@@ -19,7 +19,7 @@ limitations under the License.
|
||||
//
|
||||
// The markers take the form:
|
||||
//
|
||||
// +kubebuilder:rbac:groups=<groups>,resources=<resources>,resourceNames=<resource names>,verbs=<verbs>,urls=<non resource urls>
|
||||
// +kubebuilder:rbac:groups=<groups>,resources=<resources>,resourceNames=<resource names>,verbs=<verbs>,urls=<non resource urls>
|
||||
package rbac
|
||||
|
||||
import (
|
||||
@@ -263,5 +263,5 @@ func (g Generator) Generate(ctx *genall.GenerationContext) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
return ctx.WriteYAML("role.yaml", objs...)
|
||||
return ctx.WriteYAML("role.yaml", objs)
|
||||
}
|
||||
|
||||
1
vendor/sigs.k8s.io/controller-tools/pkg/rbac/zz_generated.markerhelp.go
generated
vendored
1
vendor/sigs.k8s.io/controller-tools/pkg/rbac/zz_generated.markerhelp.go
generated
vendored
@@ -1,3 +1,4 @@
|
||||
//go:build !ignore_autogenerated
|
||||
// +build !ignore_autogenerated
|
||||
|
||||
/*
|
||||
|
||||
129
vendor/sigs.k8s.io/controller-tools/pkg/schemapatcher/gen.go
generated
vendored
129
vendor/sigs.k8s.io/controller-tools/pkg/schemapatcher/gen.go
generated
vendored
@@ -23,7 +23,6 @@ import (
|
||||
|
||||
"gopkg.in/yaml.v3"
|
||||
apiext "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
|
||||
apiextlegacy "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
|
||||
"k8s.io/apimachinery/pkg/api/equality"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
@@ -54,7 +53,6 @@ import (
|
||||
// patches.
|
||||
|
||||
var (
|
||||
legacyAPIExtVersion = apiextlegacy.SchemeGroupVersion.String()
|
||||
currentAPIExtVersion = apiext.SchemeGroupVersion.String()
|
||||
)
|
||||
|
||||
@@ -62,18 +60,8 @@ var (
|
||||
|
||||
// Generator patches existing CRDs with new schemata.
|
||||
//
|
||||
// For legacy (v1beta1) single-version CRDs, it will simply replace the global schema.
|
||||
//
|
||||
// For legacy (v1beta1) multi-version CRDs, and any v1 CRDs, it will replace
|
||||
// schemata of existing versions and *clear the schema* from any versions not
|
||||
// specified in the Go code. It will *not* add new versions, or remove old
|
||||
// ones.
|
||||
//
|
||||
// For legacy multi-version CRDs with identical schemata, it will take care of
|
||||
// lifting the per-version schema up to the global schema.
|
||||
//
|
||||
// It will generate output for each "CRD Version" (API version of the CRD type
|
||||
// itself) , e.g. apiextensions/v1beta1 and apiextensions/v1) available.
|
||||
// itself) , e.g. apiextensions/v1) available.
|
||||
type Generator struct {
|
||||
// ManifestsPath contains the CustomResourceDefinition YAML files.
|
||||
ManifestsPath string `marker:"manifests"`
|
||||
@@ -125,7 +113,7 @@ func (g Generator) Generate(ctx *genall.GenerationContext) (result error) {
|
||||
}
|
||||
|
||||
// generate schemata for the types we care about, and save them to be written later.
|
||||
for groupKind := range crdgen.FindKubeKinds(parser, metav1Pkg) {
|
||||
for _, groupKind := range crdgen.FindKubeKinds(parser, metav1Pkg) {
|
||||
existingSet, wanted := partialCRDSets[groupKind]
|
||||
if !wanted {
|
||||
continue
|
||||
@@ -259,70 +247,16 @@ type partialCRD struct {
|
||||
CRDVersion string
|
||||
}
|
||||
|
||||
// setGlobalSchema sets the global schema for the v1beta1 apiext version in
|
||||
// this set (if present, as per partialCRD.setGlobalSchema), and sets the
|
||||
// versioned schemas (as per setVersionedSchemata) for the v1 version.
|
||||
// setGlobalSchema sets the versioned schemas (as per setVersionedSchemata).
|
||||
func (e *partialCRDSet) setGlobalSchema() error {
|
||||
// there's no easy way to get a "random" key from a go map :-/
|
||||
var schema apiext.JSONSchemaProps
|
||||
for ver := range e.NewSchemata {
|
||||
schema = e.NewSchemata[ver]
|
||||
break
|
||||
}
|
||||
for _, crdInfo := range e.CRDVersions {
|
||||
switch crdInfo.CRDVersion {
|
||||
case legacyAPIExtVersion:
|
||||
if err := crdInfo.setGlobalSchema(schema); err != nil {
|
||||
return err
|
||||
}
|
||||
case currentAPIExtVersion:
|
||||
// just set the schemata as normal for non-legacy versions
|
||||
if err := crdInfo.setVersionedSchemata(e.NewSchemata); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := crdInfo.setVersionedSchemata(e.NewSchemata); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// setGlobalSchema sets the global schema to one of the schemata
|
||||
// for this CRD. All schemata must be identical for this to be a valid operation.
|
||||
func (e *partialCRD) setGlobalSchema(newSchema apiext.JSONSchemaProps) error {
|
||||
if e.CRDVersion != legacyAPIExtVersion {
|
||||
// no global schema, nothing to do
|
||||
return fmt.Errorf("cannot set global schema on non-legacy CRD versions")
|
||||
}
|
||||
schema, err := legacySchema(newSchema)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to convert schema to legacy form: %w", err)
|
||||
}
|
||||
schemaNodeTree, err := yamlop.ToYAML(schema)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
schemaNodeTree = schemaNodeTree.Content[0] // get rid of the document node
|
||||
yamlop.SetStyle(schemaNodeTree, 0) // clear the style so it defaults to auto-style-choice
|
||||
|
||||
if err := yamlop.SetNode(e.Yaml, *schemaNodeTree, "spec", "validation", "openAPIV3Schema"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
versions, found, err := e.getVersionsNode()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !found {
|
||||
return nil
|
||||
}
|
||||
for i, verNode := range versions.Content {
|
||||
if err := yamlop.DeleteNode(verNode, "schema"); err != nil {
|
||||
return fmt.Errorf("spec.versions[%d]: %w", i, err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// getVersionsNode gets the YAML node of .spec.versions YAML mapping,
|
||||
// if returning the node, and whether or not it was present.
|
||||
func (e *partialCRD) getVersionsNode() (*yaml.Node, bool, error) {
|
||||
@@ -382,16 +316,7 @@ func (e *partialCRD) setVersionedSchemata(newSchemata map[string]apiext.JSONSche
|
||||
return fmt.Errorf("spec.versions[%d]: %w", i, err)
|
||||
}
|
||||
} else {
|
||||
// TODO(directxman12): if this gets to be more than 2 versions, use polymorphism to clean this up
|
||||
var verSchema interface{} = newSchema
|
||||
if e.CRDVersion == legacyAPIExtVersion {
|
||||
verSchema, err = legacySchema(newSchema)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to convert schema to legacy form: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
schemaNodeTree, err := yamlop.ToYAML(verSchema)
|
||||
schemaNodeTree, err := yamlop.ToYAML(newSchema)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to convert schema to YAML: %w", err)
|
||||
}
|
||||
@@ -433,24 +358,26 @@ func crdsFromDirectory(ctx *genall.GenerationContext, dir string) (map[schema.Gr
|
||||
if err := kyaml.Unmarshal(rawContent, &typeMeta); err != nil {
|
||||
continue
|
||||
}
|
||||
if !isSupportedAPIExtGroupVer(typeMeta.APIVersion) || typeMeta.Kind != "CustomResourceDefinition" {
|
||||
|
||||
if typeMeta.APIVersion == "" || typeMeta.Kind != "CustomResourceDefinition" {
|
||||
// If there's no API version this file probably isn't a CRD.
|
||||
// Likewise we don't need to care if the Kind isn't CustomResourceDefinition.
|
||||
continue
|
||||
}
|
||||
|
||||
if !isSupportedAPIExtGroupVer(typeMeta.APIVersion) {
|
||||
return nil, fmt.Errorf("load %q: apiVersion %q not supported", filepath.Join(dir, fileInfo.Name()), typeMeta.APIVersion)
|
||||
}
|
||||
|
||||
// collect the group-kind and versions from the actual structured form
|
||||
var actualCRD crdIsh
|
||||
if err := kyaml.Unmarshal(rawContent, &actualCRD); err != nil {
|
||||
continue
|
||||
}
|
||||
groupKind := schema.GroupKind{Group: actualCRD.Spec.Group, Kind: actualCRD.Spec.Names.Kind}
|
||||
var versions map[string]struct{}
|
||||
if len(actualCRD.Spec.Versions) == 0 {
|
||||
versions = map[string]struct{}{actualCRD.Spec.Version: {}}
|
||||
} else {
|
||||
versions = make(map[string]struct{}, len(actualCRD.Spec.Versions))
|
||||
for _, ver := range actualCRD.Spec.Versions {
|
||||
versions[ver.Name] = struct{}{}
|
||||
}
|
||||
versions := make(map[string]struct{}, len(actualCRD.Spec.Versions))
|
||||
for _, ver := range actualCRD.Spec.Versions {
|
||||
versions[ver.Name] = struct{}{}
|
||||
}
|
||||
|
||||
// then actually unmarshal in a manner that preserves ordering, etc
|
||||
@@ -480,9 +407,9 @@ func crdsFromDirectory(ctx *genall.GenerationContext, dir string) (map[schema.Gr
|
||||
}
|
||||
|
||||
// isSupportedAPIExtGroupVer checks if the given string-form group-version
|
||||
// is one of the known apiextensions versions (v1, v1beta1).
|
||||
// is one of the known apiextensions versions (v1).
|
||||
func isSupportedAPIExtGroupVer(groupVer string) bool {
|
||||
return groupVer == currentAPIExtVersion || groupVer == legacyAPIExtVersion
|
||||
return groupVer == currentAPIExtVersion
|
||||
}
|
||||
|
||||
// crdIsh is a merged blob of CRD fields that looks enough like all versions of
|
||||
@@ -502,23 +429,5 @@ type crdIsh struct {
|
||||
Versions []struct {
|
||||
Name string `json:"name"`
|
||||
} `json:"versions"`
|
||||
Version string `json:"version"`
|
||||
} `json:"spec"`
|
||||
}
|
||||
|
||||
// legacySchema jumps through some hoops to convert a v1 schema to a v1beta1 schema.
|
||||
func legacySchema(origSchema apiext.JSONSchemaProps) (apiextlegacy.JSONSchemaProps, error) {
|
||||
shellCRD := apiext.CustomResourceDefinition{}
|
||||
shellCRD.APIVersion = currentAPIExtVersion
|
||||
shellCRD.Kind = "CustomResourceDefinition"
|
||||
shellCRD.Spec.Versions = []apiext.CustomResourceDefinitionVersion{
|
||||
{Schema: &apiext.CustomResourceValidation{OpenAPIV3Schema: origSchema.DeepCopy()}},
|
||||
}
|
||||
|
||||
legacyCRD, err := crdgen.AsVersion(shellCRD, apiextlegacy.SchemeGroupVersion)
|
||||
if err != nil {
|
||||
return apiextlegacy.JSONSchemaProps{}, err
|
||||
}
|
||||
|
||||
return *legacyCRD.(*apiextlegacy.CustomResourceDefinition).Spec.Validation.OpenAPIV3Schema, nil
|
||||
}
|
||||
|
||||
7
vendor/sigs.k8s.io/controller-tools/pkg/schemapatcher/zz_generated.markerhelp.go
generated
vendored
7
vendor/sigs.k8s.io/controller-tools/pkg/schemapatcher/zz_generated.markerhelp.go
generated
vendored
@@ -1,3 +1,4 @@
|
||||
//go:build !ignore_autogenerated
|
||||
// +build !ignore_autogenerated
|
||||
|
||||
/*
|
||||
@@ -29,7 +30,7 @@ func (Generator) Help() *markers.DefinitionHelp {
|
||||
Category: "",
|
||||
DetailedHelp: markers.DetailedHelp{
|
||||
Summary: "patches existing CRDs with new schemata. ",
|
||||
Details: "For legacy (v1beta1) single-version CRDs, it will simply replace the global schema. \n For legacy (v1beta1) multi-version CRDs, and any v1 CRDs, it will replace schemata of existing versions and *clear the schema* from any versions not specified in the Go code. It will *not* add new versions, or remove old ones. \n For legacy multi-version CRDs with identical schemata, it will take care of lifting the per-version schema up to the global schema. \n It will generate output for each \"CRD Version\" (API version of the CRD type itself) , e.g. apiextensions/v1beta1 and apiextensions/v1) available.",
|
||||
Details: "It will generate output for each \"CRD Version\" (API version of the CRD type itself) , e.g. apiextensions/v1) available.",
|
||||
},
|
||||
FieldHelp: map[string]markers.DetailedHelp{
|
||||
"ManifestsPath": {
|
||||
@@ -40,6 +41,10 @@ func (Generator) Help() *markers.DefinitionHelp {
|
||||
Summary: "specifies the maximum description length for fields in CRD's OpenAPI schema. ",
|
||||
Details: "0 indicates drop the description for all fields completely. n indicates limit the description to at most n characters and truncate the description to closest sentence boundary if it exceeds n characters.",
|
||||
},
|
||||
"GenerateEmbeddedObjectMeta": {
|
||||
Summary: "specifies if any embedded ObjectMeta in the CRD should be generated",
|
||||
Details: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
12
vendor/sigs.k8s.io/controller-tools/pkg/version/version.go
generated
vendored
12
vendor/sigs.k8s.io/controller-tools/pkg/version/version.go
generated
vendored
@@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@@ -23,8 +23,8 @@ import (
|
||||
// Version returns the version of the main module
|
||||
func Version() string {
|
||||
info, ok := debug.ReadBuildInfo()
|
||||
if !ok {
|
||||
// binary has not been built with module support
|
||||
if !ok || info == nil || info.Main.Version == "" {
|
||||
// binary has not been built with module support or doesn't contain a version.
|
||||
return "(unknown)"
|
||||
}
|
||||
return info.Main.Version
|
||||
@@ -36,10 +36,10 @@ func Version() string {
|
||||
//
|
||||
// - "Version: v0.2.1" when the program has been compiled with:
|
||||
//
|
||||
// $ go get github.com/controller-tools/cmd/controller-gen@v0.2.1
|
||||
// $ go get github.com/controller-tools/cmd/controller-gen@v0.2.1
|
||||
//
|
||||
// Note: go modules requires the usage of semver compatible tags starting with
|
||||
// 'v' to have nice human-readable versions.
|
||||
// Note: go modules requires the usage of semver compatible tags starting with
|
||||
// 'v' to have nice human-readable versions.
|
||||
//
|
||||
// - "Version: (devel)" when the program is compiled from a local git checkout.
|
||||
//
|
||||
|
||||
94
vendor/sigs.k8s.io/controller-tools/pkg/webhook/parser.go
generated
vendored
94
vendor/sigs.k8s.io/controller-tools/pkg/webhook/parser.go
generated
vendored
@@ -19,7 +19,7 @@ limitations under the License.
|
||||
//
|
||||
// The markers take the form:
|
||||
//
|
||||
// +kubebuilder:webhook:webhookVersions=<[]string>,failurePolicy=<string>,matchPolicy=<string>,groups=<[]string>,resources=<[]string>,verbs=<[]string>,versions=<[]string>,name=<string>,path=<string>,mutating=<bool>,sideEffects=<string>,admissionReviewVersions=<[]string>
|
||||
// +kubebuilder:webhook:webhookVersions=<[]string>,failurePolicy=<string>,matchPolicy=<string>,groups=<[]string>,resources=<[]string>,verbs=<[]string>,versions=<[]string>,name=<string>,path=<string>,mutating=<bool>,sideEffects=<string>,admissionReviewVersions=<[]string>,reinvocationPolicy=<string>
|
||||
package webhook
|
||||
|
||||
import (
|
||||
@@ -36,7 +36,8 @@ import (
|
||||
|
||||
// The default {Mutating,Validating}WebhookConfiguration version to generate.
|
||||
const (
|
||||
defaultWebhookVersion = "v1"
|
||||
v1 = "v1"
|
||||
defaultWebhookVersion = v1
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -47,7 +48,7 @@ var (
|
||||
|
||||
// supportedWebhookVersions returns currently supported API version of {Mutating,Validating}WebhookConfiguration.
|
||||
func supportedWebhookVersions() []string {
|
||||
return []string{defaultWebhookVersion, "v1beta1"}
|
||||
return []string{defaultWebhookVersion}
|
||||
}
|
||||
|
||||
// +controllertools:marker:generateHelp:category=Webhook
|
||||
@@ -104,14 +105,20 @@ type Config struct {
|
||||
Path string
|
||||
|
||||
// WebhookVersions specifies the target API versions of the {Mutating,Validating}WebhookConfiguration objects
|
||||
// itself to generate. Defaults to v1.
|
||||
// itself to generate. The only supported value is v1. Defaults to v1.
|
||||
WebhookVersions []string `marker:"webhookVersions,optional"`
|
||||
|
||||
// AdmissionReviewVersions is an ordered list of preferred `AdmissionReview`
|
||||
// versions the Webhook expects.
|
||||
// For generating v1 {Mutating,Validating}WebhookConfiguration, this is mandatory.
|
||||
// For generating v1beta1 {Mutating,Validating}WebhookConfiguration, this is optional, and default to v1beta1.
|
||||
AdmissionReviewVersions []string `marker:"admissionReviewVersions,optional"`
|
||||
AdmissionReviewVersions []string `marker:"admissionReviewVersions"`
|
||||
|
||||
// ReinvocationPolicy allows mutating webhooks to request reinvocation after other mutations
|
||||
//
|
||||
// To allow mutating admission plugins to observe changes made by other plugins,
|
||||
// built-in mutating admission plugins are re-run if a mutating webhook modifies
|
||||
// an object, and mutating webhooks can specify a reinvocationPolicy to control
|
||||
// whether they are reinvoked as well.
|
||||
ReinvocationPolicy string `marker:"reinvocationPolicy,optional"`
|
||||
}
|
||||
|
||||
// verbToAPIVariant converts a marker's verb to the proper value for the API.
|
||||
@@ -152,6 +159,7 @@ func (c Config) ToMutatingWebhook() (admissionregv1.MutatingWebhook, error) {
|
||||
ClientConfig: c.clientConfig(),
|
||||
SideEffects: c.sideEffects(),
|
||||
AdmissionReviewVersions: c.AdmissionReviewVersions,
|
||||
ReinvocationPolicy: c.reinvocationPolicy(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -264,6 +272,20 @@ func (c Config) sideEffects() *admissionregv1.SideEffectClass {
|
||||
return &sideEffects
|
||||
}
|
||||
|
||||
// reinvocationPolicy returns the reinvocationPolicy config for a mutating webhook.
|
||||
func (c Config) reinvocationPolicy() *admissionregv1.ReinvocationPolicyType {
|
||||
var reinvocationPolicy admissionregv1.ReinvocationPolicyType
|
||||
switch strings.ToLower(c.ReinvocationPolicy) {
|
||||
case strings.ToLower(string(admissionregv1.NeverReinvocationPolicy)):
|
||||
reinvocationPolicy = admissionregv1.NeverReinvocationPolicy
|
||||
case strings.ToLower(string(admissionregv1.IfNeededReinvocationPolicy)):
|
||||
reinvocationPolicy = admissionregv1.IfNeededReinvocationPolicy
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
return &reinvocationPolicy
|
||||
}
|
||||
|
||||
// webhookVersions returns the target API versions of the {Mutating,Validating}WebhookConfiguration objects for a webhook.
|
||||
func (c Config) webhookVersions() ([]string, error) {
|
||||
// If WebhookVersions is not specified, we default it to `v1`.
|
||||
@@ -331,9 +353,8 @@ func (Generator) Generate(ctx *genall.GenerationContext) error {
|
||||
versionedWebhooks := make(map[string][]interface{}, len(supportedWebhookVersions))
|
||||
for _, version := range supportedWebhookVersions {
|
||||
if cfgs, ok := mutatingCfgs[version]; ok {
|
||||
// All webhook config versions in supportedWebhookVersions have the same general form, with a few
|
||||
// stricter requirements for v1. Since no conversion scheme exists for webhook configs, the v1
|
||||
// type can be used for all versioned types in this context.
|
||||
// The only possible version in supportedWebhookVersions is v1,
|
||||
// so use it for all versioned types in this context.
|
||||
objRaw := &admissionregv1.MutatingWebhookConfiguration{}
|
||||
objRaw.SetGroupVersionKind(schema.GroupVersionKind{
|
||||
Group: admissionregv1.SchemeGroupVersion.Group,
|
||||
@@ -342,28 +363,24 @@ func (Generator) Generate(ctx *genall.GenerationContext) error {
|
||||
})
|
||||
objRaw.SetName("mutating-webhook-configuration")
|
||||
objRaw.Webhooks = cfgs
|
||||
switch version {
|
||||
case admissionregv1.SchemeGroupVersion.Version:
|
||||
for i := range objRaw.Webhooks {
|
||||
// SideEffects is required in admissionregistration/v1, if this is not set or set to `Some` or `Known`,
|
||||
// return an error
|
||||
if err := checkSideEffectsForV1(objRaw.Webhooks[i].SideEffects); err != nil {
|
||||
return err
|
||||
}
|
||||
// AdmissionReviewVersions is required in admissionregistration/v1, if this is not set,
|
||||
// return an error
|
||||
if len(objRaw.Webhooks[i].AdmissionReviewVersions) == 0 {
|
||||
return fmt.Errorf("AdmissionReviewVersions is mandatory for v1 {Mutating,Validating}WebhookConfiguration")
|
||||
}
|
||||
for i := range objRaw.Webhooks {
|
||||
// SideEffects is required in admissionregistration/v1, if this is not set or set to `Some` or `Known`,
|
||||
// return an error
|
||||
if err := checkSideEffectsForV1(objRaw.Webhooks[i].SideEffects); err != nil {
|
||||
return err
|
||||
}
|
||||
// AdmissionReviewVersions is required in admissionregistration/v1, if this is not set,
|
||||
// return an error
|
||||
if len(objRaw.Webhooks[i].AdmissionReviewVersions) == 0 {
|
||||
return fmt.Errorf("AdmissionReviewVersions is mandatory for v1 {Mutating,Validating}WebhookConfiguration")
|
||||
}
|
||||
}
|
||||
versionedWebhooks[version] = append(versionedWebhooks[version], objRaw)
|
||||
}
|
||||
|
||||
if cfgs, ok := validatingCfgs[version]; ok {
|
||||
// All webhook config versions in supportedWebhookVersions have the same general form, with a few
|
||||
// stricter requirements for v1. Since no conversion scheme exists for webhook configs, the v1
|
||||
// type can be used for all versioned types in this context.
|
||||
// The only possible version in supportedWebhookVersions is v1,
|
||||
// so use it for all versioned types in this context.
|
||||
objRaw := &admissionregv1.ValidatingWebhookConfiguration{}
|
||||
objRaw.SetGroupVersionKind(schema.GroupVersionKind{
|
||||
Group: admissionregv1.SchemeGroupVersion.Group,
|
||||
@@ -372,19 +389,16 @@ func (Generator) Generate(ctx *genall.GenerationContext) error {
|
||||
})
|
||||
objRaw.SetName("validating-webhook-configuration")
|
||||
objRaw.Webhooks = cfgs
|
||||
switch version {
|
||||
case admissionregv1.SchemeGroupVersion.Version:
|
||||
for i := range objRaw.Webhooks {
|
||||
// SideEffects is required in admissionregistration/v1, if this is not set or set to `Some` or `Known`,
|
||||
// return an error
|
||||
if err := checkSideEffectsForV1(objRaw.Webhooks[i].SideEffects); err != nil {
|
||||
return err
|
||||
}
|
||||
// AdmissionReviewVersions is required in admissionregistration/v1, if this is not set,
|
||||
// return an error
|
||||
if len(objRaw.Webhooks[i].AdmissionReviewVersions) == 0 {
|
||||
return fmt.Errorf("AdmissionReviewVersions is mandatory for v1 {Mutating,Validating}WebhookConfiguration")
|
||||
}
|
||||
for i := range objRaw.Webhooks {
|
||||
// SideEffects is required in admissionregistration/v1, if this is not set or set to `Some` or `Known`,
|
||||
// return an error
|
||||
if err := checkSideEffectsForV1(objRaw.Webhooks[i].SideEffects); err != nil {
|
||||
return err
|
||||
}
|
||||
// AdmissionReviewVersions is required in admissionregistration/v1, if this is not set,
|
||||
// return an error
|
||||
if len(objRaw.Webhooks[i].AdmissionReviewVersions) == 0 {
|
||||
return fmt.Errorf("AdmissionReviewVersions is mandatory for v1 {Mutating,Validating}WebhookConfiguration")
|
||||
}
|
||||
}
|
||||
versionedWebhooks[version] = append(versionedWebhooks[version], objRaw)
|
||||
@@ -398,7 +412,7 @@ func (Generator) Generate(ctx *genall.GenerationContext) error {
|
||||
} else {
|
||||
fileName = fmt.Sprintf("manifests.%s.yaml", k)
|
||||
}
|
||||
if err := ctx.WriteYAML(fileName, v...); err != nil {
|
||||
if err := ctx.WriteYAML(fileName, v); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
9
vendor/sigs.k8s.io/controller-tools/pkg/webhook/zz_generated.markerhelp.go
generated
vendored
9
vendor/sigs.k8s.io/controller-tools/pkg/webhook/zz_generated.markerhelp.go
generated
vendored
@@ -1,3 +1,4 @@
|
||||
//go:build !ignore_autogenerated
|
||||
// +build !ignore_autogenerated
|
||||
|
||||
/*
|
||||
@@ -73,13 +74,17 @@ func (Config) Help() *markers.DefinitionHelp {
|
||||
Details: "",
|
||||
},
|
||||
"WebhookVersions": {
|
||||
Summary: "specifies the target API versions of the {Mutating,Validating}WebhookConfiguration objects itself to generate. Defaults to v1.",
|
||||
Summary: "specifies the target API versions of the {Mutating,Validating}WebhookConfiguration objects itself to generate. The only supported value is v1. Defaults to v1.",
|
||||
Details: "",
|
||||
},
|
||||
"AdmissionReviewVersions": {
|
||||
Summary: "is an ordered list of preferred `AdmissionReview` versions the Webhook expects. For generating v1 {Mutating,Validating}WebhookConfiguration, this is mandatory. For generating v1beta1 {Mutating,Validating}WebhookConfiguration, this is optional, and default to v1beta1.",
|
||||
Summary: "is an ordered list of preferred `AdmissionReview` versions the Webhook expects.",
|
||||
Details: "",
|
||||
},
|
||||
"ReinvocationPolicy": {
|
||||
Summary: "allows mutating webhooks to request reinvocation after other mutations ",
|
||||
Details: "To allow mutating admission plugins to observe changes made by other plugins, built-in mutating admission plugins are re-run if a mutating webhook modifies an object, and mutating webhooks can specify a reinvocationPolicy to control whether they are reinvoked as well.",
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user