mirror of https://github.com/knative/caching.git
upgrade to latest dependencies (#836)
Signed-off-by: Knative Automation <automation@knative.team>
This commit is contained in:
parent
94ef8e1074
commit
9565021883
29
go.mod
29
go.mod
|
@ -1,18 +1,18 @@
|
||||||
module knative.dev/caching
|
module knative.dev/caching
|
||||||
|
|
||||||
go 1.18
|
go 1.21
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/google/go-cmp v0.6.0
|
github.com/google/go-cmp v0.6.0
|
||||||
github.com/hashicorp/golang-lru v1.0.2
|
github.com/hashicorp/golang-lru v1.0.2
|
||||||
go.uber.org/zap v1.26.0
|
go.uber.org/zap v1.26.0
|
||||||
k8s.io/api v0.28.5
|
k8s.io/api v0.29.2
|
||||||
k8s.io/apimachinery v0.28.5
|
k8s.io/apimachinery v0.29.2
|
||||||
k8s.io/client-go v0.28.5
|
k8s.io/client-go v0.29.2
|
||||||
k8s.io/code-generator v0.28.5
|
k8s.io/code-generator v0.29.2
|
||||||
k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9
|
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00
|
||||||
knative.dev/hack v0.0.0-20240214131420-999d7e6b8495
|
knative.dev/hack v0.0.0-20240221160411-fe1f2b48a69a
|
||||||
knative.dev/pkg v0.0.0-20240219120257-9227ebb57a4e
|
knative.dev/pkg v0.0.0-20240221065059-9f033a7b77f7
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
@ -23,7 +23,7 @@ require (
|
||||||
github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect
|
github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect
|
||||||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
||||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||||
github.com/emicklei/go-restful/v3 v3.9.0 // indirect
|
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
|
||||||
github.com/evanphx/json-patch v4.12.0+incompatible // indirect
|
github.com/evanphx/json-patch v4.12.0+incompatible // indirect
|
||||||
github.com/evanphx/json-patch/v5 v5.9.0 // indirect
|
github.com/evanphx/json-patch/v5 v5.9.0 // indirect
|
||||||
github.com/go-kit/log v0.2.1 // indirect
|
github.com/go-kit/log v0.2.1 // indirect
|
||||||
|
@ -38,7 +38,7 @@ require (
|
||||||
github.com/google/gnostic-models v0.6.8 // indirect
|
github.com/google/gnostic-models v0.6.8 // indirect
|
||||||
github.com/google/gofuzz v1.2.0 // indirect
|
github.com/google/gofuzz v1.2.0 // indirect
|
||||||
github.com/google/uuid v1.6.0 // indirect
|
github.com/google/uuid v1.6.0 // indirect
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 // indirect
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect
|
||||||
github.com/imdario/mergo v0.3.6 // indirect
|
github.com/imdario/mergo v0.3.6 // indirect
|
||||||
github.com/josharian/intern v1.0.0 // indirect
|
github.com/josharian/intern v1.0.0 // indirect
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
|
@ -68,7 +68,6 @@ require (
|
||||||
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
|
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
|
||||||
google.golang.org/api v0.165.0 // indirect
|
google.golang.org/api v0.165.0 // indirect
|
||||||
google.golang.org/appengine v1.6.8 // indirect
|
google.golang.org/appengine v1.6.8 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20240125205218-1f4bbc51befe // indirect
|
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240205150955-31a09d347014 // indirect
|
google.golang.org/genproto/googleapis/api v0.0.0-20240205150955-31a09d347014 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240205150955-31a09d347014 // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240205150955-31a09d347014 // indirect
|
||||||
google.golang.org/grpc v1.61.1 // indirect
|
google.golang.org/grpc v1.61.1 // indirect
|
||||||
|
@ -76,10 +75,10 @@ require (
|
||||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
k8s.io/gengo v0.0.0-20221011193443-fad74ee6edd9 // indirect
|
k8s.io/gengo v0.0.0-20240129211411-f967bbeff4b4 // indirect
|
||||||
k8s.io/klog/v2 v2.100.1 // indirect
|
k8s.io/klog/v2 v2.120.1 // indirect
|
||||||
k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 // indirect
|
k8s.io/utils v0.0.0-20240102154912-e7106e64919e // indirect
|
||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
|
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
|
||||||
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
|
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
|
||||||
sigs.k8s.io/yaml v1.4.0 // indirect
|
sigs.k8s.io/yaml v1.4.0 // indirect
|
||||||
)
|
)
|
||||||
|
|
68
go.sum
68
go.sum
|
@ -66,8 +66,8 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
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/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE=
|
github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
|
||||||
github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
|
github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||||
|
@ -92,7 +92,6 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG
|
||||||
github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
|
github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
|
||||||
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
|
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
|
||||||
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
|
github.com/go-logr/logr v0.2.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.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
|
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
|
||||||
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||||
github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE=
|
github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE=
|
||||||
|
@ -103,11 +102,13 @@ github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/
|
||||||
github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
|
github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
|
||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
|
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
|
||||||
|
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
|
||||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo=
|
github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo=
|
||||||
|
github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ=
|
||||||
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
|
@ -170,6 +171,7 @@ github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hf
|
||||||
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||||
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||||
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec=
|
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec=
|
||||||
|
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
|
@ -177,8 +179,8 @@ github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
|
||||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
||||||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw=
|
github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw=
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk=
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms=
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w=
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg=
|
||||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||||
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||||
github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
|
github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
|
||||||
|
@ -209,6 +211,7 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
|
||||||
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
||||||
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
||||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||||
|
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||||
|
@ -227,8 +230,10 @@ 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/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||||
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||||
github.com/onsi/ginkgo/v2 v2.9.4 h1:xR7vG4IXt5RWx6FfIjyAtsoMAtnc3C/rFXBBd2AjZwE=
|
github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4=
|
||||||
github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE=
|
github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o=
|
||||||
|
github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg=
|
||||||
|
github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
|
||||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||||
|
@ -271,6 +276,7 @@ github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9
|
||||||
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
||||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
|
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
|
||||||
|
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||||
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
|
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
|
||||||
|
@ -287,7 +293,8 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
||||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||||
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
|
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
||||||
|
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||||
github.com/stvp/go-udp-testing v0.0.0-20201019212854-469649b16807/go.mod h1:7jxmlfBCDBXRzr0eAQJ48XC1hBu1np4CS5+cHEYfwpc=
|
github.com/stvp/go-udp-testing v0.0.0-20201019212854-469649b16807/go.mod h1:7jxmlfBCDBXRzr0eAQJ48XC1hBu1np4CS5+cHEYfwpc=
|
||||||
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
|
@ -304,6 +311,7 @@ go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
|
||||||
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
|
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
|
||||||
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
|
go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
|
||||||
|
go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4=
|
||||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||||
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
|
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
|
||||||
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
||||||
|
@ -649,34 +657,34 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
|
||||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||||
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||||
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||||
k8s.io/api v0.28.5 h1:XIPNr3nBgTEaCdEiwZ+dXaO9SB4NeTOZ2pNDRrFgfb4=
|
k8s.io/api v0.29.2 h1:hBC7B9+MU+ptchxEqTNW2DkUosJpp1P+Wn6YncZ474A=
|
||||||
k8s.io/api v0.28.5/go.mod h1:98zkTCc60iSnqqCIyCB1GI7PYDiRDYTSfL0PRIxpM4c=
|
k8s.io/api v0.29.2/go.mod h1:sdIaaKuU7P44aoyyLlikSLayT6Vb7bvJNCX105xZXY0=
|
||||||
k8s.io/apimachinery v0.28.5 h1:EEj2q1qdTcv2p5wl88KavAn3VlFRjREgRu8Sm/EuMPY=
|
k8s.io/apimachinery v0.29.2 h1:EWGpfJ856oj11C52NRCHuU7rFDwxev48z+6DSlGNsV8=
|
||||||
k8s.io/apimachinery v0.28.5/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg=
|
k8s.io/apimachinery v0.29.2/go.mod h1:6HVkd1FwxIagpYrHSwJlQqZI3G9LfYWRPAkUvLnXTKU=
|
||||||
k8s.io/client-go v0.28.5 h1:6UNmc33vuJhh3+SAOEKku3QnKa+DtPKGnhO2MR0IEbk=
|
k8s.io/client-go v0.29.2 h1:FEg85el1TeZp+/vYJM7hkDlSTFZ+c5nnK44DJ4FyoRg=
|
||||||
k8s.io/client-go v0.28.5/go.mod h1:+pt086yx1i0HAlHzM9S+RZQDqdlzuXFl4hY01uhpcpA=
|
k8s.io/client-go v0.29.2/go.mod h1:knlvFZE58VpqbQpJNbCbctTVXcd35mMyAAwBdpt4jrA=
|
||||||
k8s.io/code-generator v0.28.5 h1:6LXs+I/LOMGNLVI7z8xImLjI98o9vcwiHiQY6PyqpmU=
|
k8s.io/code-generator v0.29.2 h1:c9/iw2KnNpw2IRV+wwuG/Wns2TjPSgjWzbbjTevyiHI=
|
||||||
k8s.io/code-generator v0.28.5/go.mod h1:OQAfl6bZikQ/tK6faJ18Vyzo54rUII2NmjurHyiN1g4=
|
k8s.io/code-generator v0.29.2/go.mod h1:FwFi3C9jCrmbPjekhaCYcYG1n07CYiW1+PAPCockaos=
|
||||||
k8s.io/gengo v0.0.0-20221011193443-fad74ee6edd9 h1:iu3o/SxaHVI7tKPtkGzD3M9IzrE21j+CUKH98NQJ8Ms=
|
k8s.io/gengo v0.0.0-20240129211411-f967bbeff4b4 h1:izq7u3SJBdOAuA5YYe1/PIp9jczrih/jGlKRRt0G7bQ=
|
||||||
k8s.io/gengo v0.0.0-20221011193443-fad74ee6edd9/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
k8s.io/gengo v0.0.0-20240129211411-f967bbeff4b4/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||||
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||||
k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg=
|
k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw=
|
||||||
k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
|
||||||
k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ=
|
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780=
|
||||||
k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM=
|
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
|
||||||
k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk=
|
k8s.io/utils v0.0.0-20240102154912-e7106e64919e h1:eQ/4ljkx21sObifjzXwlPKpdGLrCfRziVtos3ofG/sQ=
|
||||||
k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
k8s.io/utils v0.0.0-20240102154912-e7106e64919e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
||||||
knative.dev/hack v0.0.0-20240214131420-999d7e6b8495 h1:Eh+3WsTecxutSwtpzU4Py1dNCcToxgqRDLSLjBKfdEE=
|
knative.dev/hack v0.0.0-20240221160411-fe1f2b48a69a h1:ihHLVHm38G0Va1Y7onh8e9QRZc7lU5guLRa+cQsUZdE=
|
||||||
knative.dev/hack v0.0.0-20240214131420-999d7e6b8495/go.mod h1:yk2OjGDsbEnQjfxdm0/HJKS2WqTLEFg/N6nUs6Rqx3Q=
|
knative.dev/hack v0.0.0-20240221160411-fe1f2b48a69a/go.mod h1:yk2OjGDsbEnQjfxdm0/HJKS2WqTLEFg/N6nUs6Rqx3Q=
|
||||||
knative.dev/pkg v0.0.0-20240219120257-9227ebb57a4e h1:TD0WhK+DDFqcDrxukIUZWYwy1140eQzCYNinHZZZhHs=
|
knative.dev/pkg v0.0.0-20240221065059-9f033a7b77f7 h1:OccHMomHYUHgNbpR6LCPC8oju6akEJCI0tymRdSMZus=
|
||||||
knative.dev/pkg v0.0.0-20240219120257-9227ebb57a4e/go.mod h1:nCYpiIXemsTvpmuVNfJEAXcSXTGSduE2uwU0HH4BvUI=
|
knative.dev/pkg v0.0.0-20240221065059-9f033a7b77f7/go.mod h1:j4b62+hzLiXJ1NVavG5fjfvRk8CCNHFAdxLjeiAZPHI=
|
||||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
|
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
|
||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
|
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
|
||||||
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=
|
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
|
||||||
sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E=
|
sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
|
||||||
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
|
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
|
||||||
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
|
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
|
||||||
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
|
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
|
||||||
|
|
|
@ -42,6 +42,7 @@ type sharedInformerFactory struct {
|
||||||
lock sync.Mutex
|
lock sync.Mutex
|
||||||
defaultResync time.Duration
|
defaultResync time.Duration
|
||||||
customResync map[reflect.Type]time.Duration
|
customResync map[reflect.Type]time.Duration
|
||||||
|
transform cache.TransformFunc
|
||||||
|
|
||||||
informers map[reflect.Type]cache.SharedIndexInformer
|
informers map[reflect.Type]cache.SharedIndexInformer
|
||||||
// startedInformers is used for tracking which informers have been started.
|
// startedInformers is used for tracking which informers have been started.
|
||||||
|
@ -80,6 +81,14 @@ func WithNamespace(namespace string) SharedInformerOption {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithTransform sets a transform on all informers.
|
||||||
|
func WithTransform(transform cache.TransformFunc) SharedInformerOption {
|
||||||
|
return func(factory *sharedInformerFactory) *sharedInformerFactory {
|
||||||
|
factory.transform = transform
|
||||||
|
return factory
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces.
|
// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces.
|
||||||
func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory {
|
func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory {
|
||||||
return NewSharedInformerFactoryWithOptions(client, defaultResync)
|
return NewSharedInformerFactoryWithOptions(client, defaultResync)
|
||||||
|
@ -184,6 +193,7 @@ func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internal
|
||||||
}
|
}
|
||||||
|
|
||||||
informer = newFunc(f.client, resyncPeriod)
|
informer = newFunc(f.client, resyncPeriod)
|
||||||
|
informer.SetTransform(f.transform)
|
||||||
f.informers[informerType] = informer
|
f.informers[informerType] = informer
|
||||||
|
|
||||||
return informer
|
return informer
|
||||||
|
|
|
@ -1,202 +0,0 @@
|
||||||
|
|
||||||
Apache License
|
|
||||||
Version 2.0, January 2004
|
|
||||||
http://www.apache.org/licenses/
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
||||||
|
|
||||||
1. Definitions.
|
|
||||||
|
|
||||||
"License" shall mean the terms and conditions for use, reproduction,
|
|
||||||
and distribution as defined by Sections 1 through 9 of this document.
|
|
||||||
|
|
||||||
"Licensor" shall mean the copyright owner or entity authorized by
|
|
||||||
the copyright owner that is granting the License.
|
|
||||||
|
|
||||||
"Legal Entity" shall mean the union of the acting entity and all
|
|
||||||
other entities that control, are controlled by, or are under common
|
|
||||||
control with that entity. For the purposes of this definition,
|
|
||||||
"control" means (i) the power, direct or indirect, to cause the
|
|
||||||
direction or management of such entity, whether by contract or
|
|
||||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
||||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
||||||
|
|
||||||
"You" (or "Your") shall mean an individual or Legal Entity
|
|
||||||
exercising permissions granted by this License.
|
|
||||||
|
|
||||||
"Source" form shall mean the preferred form for making modifications,
|
|
||||||
including but not limited to software source code, documentation
|
|
||||||
source, and configuration files.
|
|
||||||
|
|
||||||
"Object" form shall mean any form resulting from mechanical
|
|
||||||
transformation or translation of a Source form, including but
|
|
||||||
not limited to compiled object code, generated documentation,
|
|
||||||
and conversions to other media types.
|
|
||||||
|
|
||||||
"Work" shall mean the work of authorship, whether in Source or
|
|
||||||
Object form, made available under the License, as indicated by a
|
|
||||||
copyright notice that is included in or attached to the work
|
|
||||||
(an example is provided in the Appendix below).
|
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source or Object
|
|
||||||
form, that is based on (or derived from) the Work and for which the
|
|
||||||
editorial revisions, annotations, elaborations, or other modifications
|
|
||||||
represent, as a whole, an original work of authorship. For the purposes
|
|
||||||
of this License, Derivative Works shall not include works that remain
|
|
||||||
separable from, or merely link (or bind by name) to the interfaces of,
|
|
||||||
the Work and Derivative Works thereof.
|
|
||||||
|
|
||||||
"Contribution" shall mean any work of authorship, including
|
|
||||||
the original version of the Work and any modifications or additions
|
|
||||||
to that Work or Derivative Works thereof, that is intentionally
|
|
||||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
||||||
or by an individual or Legal Entity authorized to submit on behalf of
|
|
||||||
the copyright owner. For the purposes of this definition, "submitted"
|
|
||||||
means any form of electronic, verbal, or written communication sent
|
|
||||||
to the Licensor or its representatives, including but not limited to
|
|
||||||
communication on electronic mailing lists, source code control systems,
|
|
||||||
and issue tracking systems that are managed by, or on behalf of, the
|
|
||||||
Licensor for the purpose of discussing and improving the Work, but
|
|
||||||
excluding communication that is conspicuously marked or otherwise
|
|
||||||
designated in writing by the copyright owner as "Not a Contribution."
|
|
||||||
|
|
||||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
||||||
on behalf of whom a Contribution has been received by Licensor and
|
|
||||||
subsequently incorporated within the Work.
|
|
||||||
|
|
||||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
copyright license to reproduce, prepare Derivative Works of,
|
|
||||||
publicly display, publicly perform, sublicense, and distribute the
|
|
||||||
Work and such Derivative Works in Source or Object form.
|
|
||||||
|
|
||||||
3. Grant of Patent License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
(except as stated in this section) patent license to make, have made,
|
|
||||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
||||||
where such license applies only to those patent claims licensable
|
|
||||||
by such Contributor that are necessarily infringed by their
|
|
||||||
Contribution(s) alone or by combination of their Contribution(s)
|
|
||||||
with the Work to which such Contribution(s) was submitted. If You
|
|
||||||
institute patent litigation against any entity (including a
|
|
||||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
||||||
or a Contribution incorporated within the Work constitutes direct
|
|
||||||
or contributory patent infringement, then any patent licenses
|
|
||||||
granted to You under this License for that Work shall terminate
|
|
||||||
as of the date such litigation is filed.
|
|
||||||
|
|
||||||
4. Redistribution. You may reproduce and distribute copies of the
|
|
||||||
Work or Derivative Works thereof in any medium, with or without
|
|
||||||
modifications, and in Source or Object form, provided that You
|
|
||||||
meet the following conditions:
|
|
||||||
|
|
||||||
(a) You must give any other recipients of the Work or
|
|
||||||
Derivative Works a copy of this License; and
|
|
||||||
|
|
||||||
(b) You must cause any modified files to carry prominent notices
|
|
||||||
stating that You changed the files; and
|
|
||||||
|
|
||||||
(c) You must retain, in the Source form of any Derivative Works
|
|
||||||
that You distribute, all copyright, patent, trademark, and
|
|
||||||
attribution notices from the Source form of the Work,
|
|
||||||
excluding those notices that do not pertain to any part of
|
|
||||||
the Derivative Works; and
|
|
||||||
|
|
||||||
(d) If the Work includes a "NOTICE" text file as part of its
|
|
||||||
distribution, then any Derivative Works that You distribute must
|
|
||||||
include a readable copy of the attribution notices contained
|
|
||||||
within such NOTICE file, excluding those notices that do not
|
|
||||||
pertain to any part of the Derivative Works, in at least one
|
|
||||||
of the following places: within a NOTICE text file distributed
|
|
||||||
as part of the Derivative Works; within the Source form or
|
|
||||||
documentation, if provided along with the Derivative Works; or,
|
|
||||||
within a display generated by the Derivative Works, if and
|
|
||||||
wherever such third-party notices normally appear. The contents
|
|
||||||
of the NOTICE file are for informational purposes only and
|
|
||||||
do not modify the License. You may add Your own attribution
|
|
||||||
notices within Derivative Works that You distribute, alongside
|
|
||||||
or as an addendum to the NOTICE text from the Work, provided
|
|
||||||
that such additional attribution notices cannot be construed
|
|
||||||
as modifying the License.
|
|
||||||
|
|
||||||
You may add Your own copyright statement to Your modifications and
|
|
||||||
may provide additional or different license terms and conditions
|
|
||||||
for use, reproduction, or distribution of Your modifications, or
|
|
||||||
for any such Derivative Works as a whole, provided Your use,
|
|
||||||
reproduction, and distribution of the Work otherwise complies with
|
|
||||||
the conditions stated in this License.
|
|
||||||
|
|
||||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
||||||
any Contribution intentionally submitted for inclusion in the Work
|
|
||||||
by You to the Licensor shall be under the terms and conditions of
|
|
||||||
this License, without any additional terms or conditions.
|
|
||||||
Notwithstanding the above, nothing herein shall supersede or modify
|
|
||||||
the terms of any separate license agreement you may have executed
|
|
||||||
with Licensor regarding such Contributions.
|
|
||||||
|
|
||||||
6. Trademarks. This License does not grant permission to use the trade
|
|
||||||
names, trademarks, service marks, or product names of the Licensor,
|
|
||||||
except as required for reasonable and customary use in describing the
|
|
||||||
origin of the Work and reproducing the content of the NOTICE file.
|
|
||||||
|
|
||||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
||||||
agreed to in writing, Licensor provides the Work (and each
|
|
||||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
||||||
implied, including, without limitation, any warranties or conditions
|
|
||||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
||||||
appropriateness of using or redistributing the Work and assume any
|
|
||||||
risks associated with Your exercise of permissions under this License.
|
|
||||||
|
|
||||||
8. Limitation of Liability. In no event and under no legal theory,
|
|
||||||
whether in tort (including negligence), contract, or otherwise,
|
|
||||||
unless required by applicable law (such as deliberate and grossly
|
|
||||||
negligent acts) or agreed to in writing, shall any Contributor be
|
|
||||||
liable to You for damages, including any direct, indirect, special,
|
|
||||||
incidental, or consequential damages of any character arising as a
|
|
||||||
result of this License or out of the use or inability to use the
|
|
||||||
Work (including but not limited to damages for loss of goodwill,
|
|
||||||
work stoppage, computer failure or malfunction, or any and all
|
|
||||||
other commercial damages or losses), even if such Contributor
|
|
||||||
has been advised of the possibility of such damages.
|
|
||||||
|
|
||||||
9. Accepting Warranty or Additional Liability. While redistributing
|
|
||||||
the Work or Derivative Works thereof, You may choose to offer,
|
|
||||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
||||||
or other liability obligations and/or rights consistent with this
|
|
||||||
License. However, in accepting such obligations, You may act only
|
|
||||||
on Your own behalf and on Your sole responsibility, not on behalf
|
|
||||||
of any other Contributor, and only if You agree to indemnify,
|
|
||||||
defend, and hold each Contributor harmless for any liability
|
|
||||||
incurred by, or claims asserted against, such Contributor by reason
|
|
||||||
of your accepting any such warranty or additional liability.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
APPENDIX: How to apply the Apache License to your work.
|
|
||||||
|
|
||||||
To apply the Apache License to your work, attach the following
|
|
||||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
||||||
replaced with your own identifying information. (Don't include
|
|
||||||
the brackets!) The text should be enclosed in the appropriate
|
|
||||||
comment syntax for the file format. We also recommend that a
|
|
||||||
file or class name and description of purpose be included on the
|
|
||||||
same "printed page" as the copyright notice for easier
|
|
||||||
identification within third-party archives.
|
|
||||||
|
|
||||||
Copyright [yyyy] [name of copyright owner]
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
|
@ -1,10 +1,30 @@
|
||||||
# Change history of go-restful
|
# Change history of go-restful
|
||||||
|
|
||||||
## [v3.9.0] - 20221-07-21
|
## [v3.11.0] - 2023-08-19
|
||||||
|
|
||||||
|
- restored behavior as <= v3.9.0 with option to change path strategy using TrimRightSlashEnabled.
|
||||||
|
|
||||||
|
## [v3.10.2] - 2023-03-09 - DO NOT USE
|
||||||
|
|
||||||
|
- introduced MergePathStrategy to be able to revert behaviour of path concatenation to 3.9.0
|
||||||
|
see comment in Readme how to customize this behaviour.
|
||||||
|
|
||||||
|
## [v3.10.1] - 2022-11-19 - DO NOT USE
|
||||||
|
|
||||||
|
- fix broken 3.10.0 by using path package for joining paths
|
||||||
|
|
||||||
|
## [v3.10.0] - 2022-10-11 - BROKEN
|
||||||
|
|
||||||
|
- changed tokenizer to match std route match behavior; do not trimright the path (#511)
|
||||||
|
- Add MIME_ZIP (#512)
|
||||||
|
- Add MIME_ZIP and HEADER_ContentDisposition (#513)
|
||||||
|
- Changed how to get query parameter issue #510
|
||||||
|
|
||||||
|
## [v3.9.0] - 2022-07-21
|
||||||
|
|
||||||
- add support for http.Handler implementations to work as FilterFunction, issue #504 (thanks to https://github.com/ggicci)
|
- add support for http.Handler implementations to work as FilterFunction, issue #504 (thanks to https://github.com/ggicci)
|
||||||
|
|
||||||
## [v3.8.0] - 20221-06-06
|
## [v3.8.0] - 2022-06-06
|
||||||
|
|
||||||
- use exact matching of allowed domain entries, issue #489 (#493)
|
- use exact matching of allowed domain entries, issue #489 (#493)
|
||||||
- this changes fixes [security] Authorization Bypass Through User-Controlled Key
|
- this changes fixes [security] Authorization Bypass Through User-Controlled Key
|
||||||
|
|
|
@ -79,7 +79,7 @@ func (u UserResource) findUser(request *restful.Request, response *restful.Respo
|
||||||
- Content encoding (gzip,deflate) of request and response payloads
|
- Content encoding (gzip,deflate) of request and response payloads
|
||||||
- Automatic responses on OPTIONS (using a filter)
|
- Automatic responses on OPTIONS (using a filter)
|
||||||
- Automatic CORS request handling (using a filter)
|
- Automatic CORS request handling (using a filter)
|
||||||
- API declaration for Swagger UI ([go-restful-openapi](https://github.com/emicklei/go-restful-openapi), see [go-restful-swagger12](https://github.com/emicklei/go-restful-swagger12))
|
- API declaration for Swagger UI ([go-restful-openapi](https://github.com/emicklei/go-restful-openapi))
|
||||||
- Panic recovery to produce HTTP 500, customizable using RecoverHandler(...)
|
- Panic recovery to produce HTTP 500, customizable using RecoverHandler(...)
|
||||||
- Route errors produce HTTP 404/405/406/415 errors, customizable using ServiceErrorHandler(...)
|
- Route errors produce HTTP 404/405/406/415 errors, customizable using ServiceErrorHandler(...)
|
||||||
- Configurable (trace) logging
|
- Configurable (trace) logging
|
||||||
|
@ -96,6 +96,7 @@ There are several hooks to customize the behavior of the go-restful package.
|
||||||
- Compression
|
- Compression
|
||||||
- Encoders for other serializers
|
- Encoders for other serializers
|
||||||
- Use [jsoniter](https://github.com/json-iterator/go) by building this package using a build tag, e.g. `go build -tags=jsoniter .`
|
- Use [jsoniter](https://github.com/json-iterator/go) by building this package using a build tag, e.g. `go build -tags=jsoniter .`
|
||||||
|
- Use the package variable `TrimRightSlashEnabled` (default true) to control the behavior of matching routes that end with a slash `/`
|
||||||
|
|
||||||
## Resources
|
## Resources
|
||||||
|
|
||||||
|
@ -108,4 +109,4 @@ There are several hooks to customize the behavior of the go-restful package.
|
||||||
|
|
||||||
Type ```git shortlog -s``` for a full list of contributors.
|
Type ```git shortlog -s``` for a full list of contributors.
|
||||||
|
|
||||||
© 2012 - 2022, http://ernestmicklei.com. MIT License. Contributions are welcome.
|
© 2012 - 2023, http://ernestmicklei.com. MIT License. Contributions are welcome.
|
||||||
|
|
|
@ -7,12 +7,14 @@ package restful
|
||||||
const (
|
const (
|
||||||
MIME_XML = "application/xml" // Accept or Content-Type used in Consumes() and/or Produces()
|
MIME_XML = "application/xml" // Accept or Content-Type used in Consumes() and/or Produces()
|
||||||
MIME_JSON = "application/json" // Accept or Content-Type used in Consumes() and/or Produces()
|
MIME_JSON = "application/json" // Accept or Content-Type used in Consumes() and/or Produces()
|
||||||
|
MIME_ZIP = "application/zip" // Accept or Content-Type used in Consumes() and/or Produces()
|
||||||
MIME_OCTET = "application/octet-stream" // If Content-Type is not present in request, use the default
|
MIME_OCTET = "application/octet-stream" // If Content-Type is not present in request, use the default
|
||||||
|
|
||||||
HEADER_Allow = "Allow"
|
HEADER_Allow = "Allow"
|
||||||
HEADER_Accept = "Accept"
|
HEADER_Accept = "Accept"
|
||||||
HEADER_Origin = "Origin"
|
HEADER_Origin = "Origin"
|
||||||
HEADER_ContentType = "Content-Type"
|
HEADER_ContentType = "Content-Type"
|
||||||
|
HEADER_ContentDisposition = "Content-Disposition"
|
||||||
HEADER_LastModified = "Last-Modified"
|
HEADER_LastModified = "Last-Modified"
|
||||||
HEADER_AcceptEncoding = "Accept-Encoding"
|
HEADER_AcceptEncoding = "Accept-Encoding"
|
||||||
HEADER_ContentEncoding = "Content-Encoding"
|
HEADER_ContentEncoding = "Content-Encoding"
|
||||||
|
|
|
@ -31,7 +31,8 @@ func NewRequest(httpRequest *http.Request) *Request {
|
||||||
// a "Unable to unmarshal content of type:" response is returned.
|
// a "Unable to unmarshal content of type:" response is returned.
|
||||||
// Valid values are restful.MIME_JSON and restful.MIME_XML
|
// Valid values are restful.MIME_JSON and restful.MIME_XML
|
||||||
// Example:
|
// Example:
|
||||||
// restful.DefaultRequestContentType(restful.MIME_JSON)
|
//
|
||||||
|
// restful.DefaultRequestContentType(restful.MIME_JSON)
|
||||||
func DefaultRequestContentType(mime string) {
|
func DefaultRequestContentType(mime string) {
|
||||||
defaultRequestContentType = mime
|
defaultRequestContentType = mime
|
||||||
}
|
}
|
||||||
|
@ -48,7 +49,7 @@ func (r *Request) PathParameters() map[string]string {
|
||||||
|
|
||||||
// QueryParameter returns the (first) Query parameter value by its name
|
// QueryParameter returns the (first) Query parameter value by its name
|
||||||
func (r *Request) QueryParameter(name string) string {
|
func (r *Request) QueryParameter(name string) string {
|
||||||
return r.Request.FormValue(name)
|
return r.Request.URL.Query().Get(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// QueryParameters returns the all the query parameters values by name
|
// QueryParameters returns the all the query parameters values by name
|
||||||
|
|
|
@ -109,6 +109,9 @@ func (r *Response) EntityWriter() (EntityReaderWriter, bool) {
|
||||||
if DefaultResponseMimeType == MIME_XML {
|
if DefaultResponseMimeType == MIME_XML {
|
||||||
return entityAccessRegistry.accessorAt(MIME_XML)
|
return entityAccessRegistry.accessorAt(MIME_XML)
|
||||||
}
|
}
|
||||||
|
if DefaultResponseMimeType == MIME_ZIP {
|
||||||
|
return entityAccessRegistry.accessorAt(MIME_ZIP)
|
||||||
|
}
|
||||||
// Fallback to whatever the route says it can produce.
|
// Fallback to whatever the route says it can produce.
|
||||||
// https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
|
// https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
|
||||||
for _, each := range r.routeProduces {
|
for _, each := range r.routeProduces {
|
||||||
|
|
|
@ -40,7 +40,8 @@ type Route struct {
|
||||||
ParameterDocs []*Parameter
|
ParameterDocs []*Parameter
|
||||||
ResponseErrors map[int]ResponseError
|
ResponseErrors map[int]ResponseError
|
||||||
DefaultResponse *ResponseError
|
DefaultResponse *ResponseError
|
||||||
ReadSample, WriteSample interface{} // structs that model an example request or response payload
|
ReadSample, WriteSample interface{} // structs that model an example request or response payload
|
||||||
|
WriteSamples []interface{} // if more than one return types is possible (oneof) then this will contain multiple values
|
||||||
|
|
||||||
// Extra information used to store custom information about the route.
|
// Extra information used to store custom information about the route.
|
||||||
Metadata map[string]interface{}
|
Metadata map[string]interface{}
|
||||||
|
@ -164,7 +165,13 @@ func tokenizePath(path string) []string {
|
||||||
if "/" == path {
|
if "/" == path {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return strings.Split(strings.Trim(path, "/"), "/")
|
if TrimRightSlashEnabled {
|
||||||
|
// 3.9.0
|
||||||
|
return strings.Split(strings.Trim(path, "/"), "/")
|
||||||
|
} else {
|
||||||
|
// 3.10.2
|
||||||
|
return strings.Split(strings.TrimLeft(path, "/"), "/")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// for debugging
|
// for debugging
|
||||||
|
@ -176,3 +183,9 @@ func (r *Route) String() string {
|
||||||
func (r *Route) EnableContentEncoding(enabled bool) {
|
func (r *Route) EnableContentEncoding(enabled bool) {
|
||||||
r.contentEncodingEnabled = &enabled
|
r.contentEncodingEnabled = &enabled
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TrimRightSlashEnabled controls whether
|
||||||
|
// - path on route building is using path.Join
|
||||||
|
// - the path of the incoming request is trimmed of its slash suffux.
|
||||||
|
// Value of true matches the behavior of <= 3.9.0
|
||||||
|
var TrimRightSlashEnabled = true
|
||||||
|
|
|
@ -7,6 +7,7 @@ package restful
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"path"
|
||||||
"reflect"
|
"reflect"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -30,27 +31,29 @@ type RouteBuilder struct {
|
||||||
typeNameHandleFunc TypeNameHandleFunction // required
|
typeNameHandleFunc TypeNameHandleFunction // required
|
||||||
|
|
||||||
// documentation
|
// documentation
|
||||||
doc string
|
doc string
|
||||||
notes string
|
notes string
|
||||||
operation string
|
operation string
|
||||||
readSample, writeSample interface{}
|
readSample interface{}
|
||||||
parameters []*Parameter
|
writeSamples []interface{}
|
||||||
errorMap map[int]ResponseError
|
parameters []*Parameter
|
||||||
defaultResponse *ResponseError
|
errorMap map[int]ResponseError
|
||||||
metadata map[string]interface{}
|
defaultResponse *ResponseError
|
||||||
extensions map[string]interface{}
|
metadata map[string]interface{}
|
||||||
deprecated bool
|
extensions map[string]interface{}
|
||||||
contentEncodingEnabled *bool
|
deprecated bool
|
||||||
|
contentEncodingEnabled *bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do evaluates each argument with the RouteBuilder itself.
|
// Do evaluates each argument with the RouteBuilder itself.
|
||||||
// This allows you to follow DRY principles without breaking the fluent programming style.
|
// This allows you to follow DRY principles without breaking the fluent programming style.
|
||||||
// Example:
|
// Example:
|
||||||
// ws.Route(ws.DELETE("/{name}").To(t.deletePerson).Do(Returns200, Returns500))
|
|
||||||
//
|
//
|
||||||
// func Returns500(b *RouteBuilder) {
|
// ws.Route(ws.DELETE("/{name}").To(t.deletePerson).Do(Returns200, Returns500))
|
||||||
// b.Returns(500, "Internal Server Error", restful.ServiceError{})
|
//
|
||||||
// }
|
// func Returns500(b *RouteBuilder) {
|
||||||
|
// b.Returns(500, "Internal Server Error", restful.ServiceError{})
|
||||||
|
// }
|
||||||
func (b *RouteBuilder) Do(oneArgBlocks ...func(*RouteBuilder)) *RouteBuilder {
|
func (b *RouteBuilder) Do(oneArgBlocks ...func(*RouteBuilder)) *RouteBuilder {
|
||||||
for _, each := range oneArgBlocks {
|
for _, each := range oneArgBlocks {
|
||||||
each(b)
|
each(b)
|
||||||
|
@ -133,9 +136,9 @@ func (b RouteBuilder) ParameterNamed(name string) (p *Parameter) {
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
// Writes tells what resource type will be written as the response payload. Optional.
|
// Writes tells which one of the resource types will be written as the response payload. Optional.
|
||||||
func (b *RouteBuilder) Writes(sample interface{}) *RouteBuilder {
|
func (b *RouteBuilder) Writes(samples ...interface{}) *RouteBuilder {
|
||||||
b.writeSample = sample
|
b.writeSamples = samples // oneof
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -340,19 +343,29 @@ func (b *RouteBuilder) Build() Route {
|
||||||
ResponseErrors: b.errorMap,
|
ResponseErrors: b.errorMap,
|
||||||
DefaultResponse: b.defaultResponse,
|
DefaultResponse: b.defaultResponse,
|
||||||
ReadSample: b.readSample,
|
ReadSample: b.readSample,
|
||||||
WriteSample: b.writeSample,
|
WriteSamples: b.writeSamples,
|
||||||
Metadata: b.metadata,
|
Metadata: b.metadata,
|
||||||
Deprecated: b.deprecated,
|
Deprecated: b.deprecated,
|
||||||
contentEncodingEnabled: b.contentEncodingEnabled,
|
contentEncodingEnabled: b.contentEncodingEnabled,
|
||||||
allowedMethodsWithoutContentType: b.allowedMethodsWithoutContentType,
|
allowedMethodsWithoutContentType: b.allowedMethodsWithoutContentType,
|
||||||
}
|
}
|
||||||
|
// set WriteSample if one specified
|
||||||
|
if len(b.writeSamples) == 1 {
|
||||||
|
route.WriteSample = b.writeSamples[0]
|
||||||
|
}
|
||||||
route.Extensions = b.extensions
|
route.Extensions = b.extensions
|
||||||
route.postBuild()
|
route.postBuild()
|
||||||
return route
|
return route
|
||||||
}
|
}
|
||||||
|
|
||||||
func concatPath(path1, path2 string) string {
|
// merge two paths using the current (package global) merge path strategy.
|
||||||
return strings.TrimRight(path1, "/") + "/" + strings.TrimLeft(path2, "/")
|
func concatPath(rootPath, routePath string) string {
|
||||||
|
|
||||||
|
if TrimRightSlashEnabled {
|
||||||
|
return strings.TrimRight(rootPath, "/") + "/" + strings.TrimLeft(routePath, "/")
|
||||||
|
} else {
|
||||||
|
return path.Join(rootPath, routePath)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var anonymousFuncCount int32
|
var anonymousFuncCount int32
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
|
//go:build gofuzz
|
||||||
// +build gofuzz
|
// +build gofuzz
|
||||||
|
|
||||||
package httprule
|
package httprule
|
||||||
|
|
||||||
func Fuzz(data []byte) int {
|
func Fuzz(data []byte) int {
|
||||||
_, err := Parse(string(data))
|
if _, err := Parse(string(data)); err != nil {
|
||||||
if err != nil {
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package httprule
|
package httprule
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
@ -164,9 +165,9 @@ func (p *parser) segment() (segment, error) {
|
||||||
|
|
||||||
v, err := p.variable()
|
v, err := p.variable()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("segment neither wildcards, literal or variable: %v", err)
|
return nil, fmt.Errorf("segment neither wildcards, literal or variable: %w", err)
|
||||||
}
|
}
|
||||||
return v, err
|
return v, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *parser) literal() (segment, error) {
|
func (p *parser) literal() (segment, error) {
|
||||||
|
@ -191,7 +192,7 @@ func (p *parser) variable() (segment, error) {
|
||||||
if _, err := p.accept("="); err == nil {
|
if _, err := p.accept("="); err == nil {
|
||||||
segs, err = p.segments()
|
segs, err = p.segments()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("invalid segment in variable %q: %v", path, err)
|
return nil, fmt.Errorf("invalid segment in variable %q: %w", path, err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
segs = []segment{wildcard{}}
|
segs = []segment{wildcard{}}
|
||||||
|
@ -213,12 +214,12 @@ func (p *parser) fieldPath() (string, error) {
|
||||||
}
|
}
|
||||||
components := []string{c}
|
components := []string{c}
|
||||||
for {
|
for {
|
||||||
if _, err = p.accept("."); err != nil {
|
if _, err := p.accept("."); err != nil {
|
||||||
return strings.Join(components, "."), nil
|
return strings.Join(components, "."), nil
|
||||||
}
|
}
|
||||||
c, err := p.accept(typeIdent)
|
c, err := p.accept(typeIdent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("invalid field path component: %v", err)
|
return "", fmt.Errorf("invalid field path component: %w", err)
|
||||||
}
|
}
|
||||||
components = append(components, c)
|
components = append(components, c)
|
||||||
}
|
}
|
||||||
|
@ -237,10 +238,8 @@ const (
|
||||||
typeEOF = termType("$")
|
typeEOF = termType("$")
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
// eof is the terminal symbol which always appears at the end of token sequence.
|
||||||
// eof is the terminal symbol which always appears at the end of token sequence.
|
const eof = "\u0000"
|
||||||
eof = "\u0000"
|
|
||||||
)
|
|
||||||
|
|
||||||
// accept tries to accept a token in "p".
|
// accept tries to accept a token in "p".
|
||||||
// This function consumes a token and returns it if it matches to the specified "term".
|
// This function consumes a token and returns it if it matches to the specified "term".
|
||||||
|
@ -334,7 +333,7 @@ func expectPChars(t string) error {
|
||||||
// expectIdent determines if "ident" is a valid identifier in .proto schema ([[:alpha:]_][[:alphanum:]_]*).
|
// expectIdent determines if "ident" is a valid identifier in .proto schema ([[:alpha:]_][[:alphanum:]_]*).
|
||||||
func expectIdent(ident string) error {
|
func expectIdent(ident string) error {
|
||||||
if ident == "" {
|
if ident == "" {
|
||||||
return fmt.Errorf("empty identifier")
|
return errors.New("empty identifier")
|
||||||
}
|
}
|
||||||
for pos, r := range ident {
|
for pos, r := range ident {
|
||||||
switch {
|
switch {
|
||||||
|
|
|
@ -13,6 +13,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"google.golang.org/grpc/codes"
|
"google.golang.org/grpc/codes"
|
||||||
|
"google.golang.org/grpc/grpclog"
|
||||||
"google.golang.org/grpc/metadata"
|
"google.golang.org/grpc/metadata"
|
||||||
"google.golang.org/grpc/status"
|
"google.golang.org/grpc/status"
|
||||||
)
|
)
|
||||||
|
@ -35,11 +36,9 @@ const metadataHeaderBinarySuffix = "-Bin"
|
||||||
const xForwardedFor = "X-Forwarded-For"
|
const xForwardedFor = "X-Forwarded-For"
|
||||||
const xForwardedHost = "X-Forwarded-Host"
|
const xForwardedHost = "X-Forwarded-Host"
|
||||||
|
|
||||||
var (
|
// DefaultContextTimeout is used for gRPC call context.WithTimeout whenever a Grpc-Timeout inbound
|
||||||
// DefaultContextTimeout is used for gRPC call context.WithTimeout whenever a Grpc-Timeout inbound
|
// header isn't present. If the value is 0 the sent `context` will not have a timeout.
|
||||||
// header isn't present. If the value is 0 the sent `context` will not have a timeout.
|
var DefaultContextTimeout = 0 * time.Second
|
||||||
DefaultContextTimeout = 0 * time.Second
|
|
||||||
)
|
|
||||||
|
|
||||||
// malformedHTTPHeaders lists the headers that the gRPC server may reject outright as malformed.
|
// malformedHTTPHeaders lists the headers that the gRPC server may reject outright as malformed.
|
||||||
// See https://github.com/grpc/grpc-go/pull/4803#issuecomment-986093310 for more context.
|
// See https://github.com/grpc/grpc-go/pull/4803#issuecomment-986093310 for more context.
|
||||||
|
@ -101,12 +100,43 @@ func AnnotateIncomingContext(ctx context.Context, mux *ServeMux, req *http.Reque
|
||||||
return metadata.NewIncomingContext(ctx, md), nil
|
return metadata.NewIncomingContext(ctx, md), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isValidGRPCMetadataKey(key string) bool {
|
||||||
|
// Must be a valid gRPC "Header-Name" as defined here:
|
||||||
|
// https://github.com/grpc/grpc/blob/4b05dc88b724214d0c725c8e7442cbc7a61b1374/doc/PROTOCOL-HTTP2.md
|
||||||
|
// This means 0-9 a-z _ - .
|
||||||
|
// Only lowercase letters are valid in the wire protocol, but the client library will normalize
|
||||||
|
// uppercase ASCII to lowercase, so uppercase ASCII is also acceptable.
|
||||||
|
bytes := []byte(key) // gRPC validates strings on the byte level, not Unicode.
|
||||||
|
for _, ch := range bytes {
|
||||||
|
validLowercaseLetter := ch >= 'a' && ch <= 'z'
|
||||||
|
validUppercaseLetter := ch >= 'A' && ch <= 'Z'
|
||||||
|
validDigit := ch >= '0' && ch <= '9'
|
||||||
|
validOther := ch == '.' || ch == '-' || ch == '_'
|
||||||
|
if !validLowercaseLetter && !validUppercaseLetter && !validDigit && !validOther {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func isValidGRPCMetadataTextValue(textValue string) bool {
|
||||||
|
// Must be a valid gRPC "ASCII-Value" as defined here:
|
||||||
|
// https://github.com/grpc/grpc/blob/4b05dc88b724214d0c725c8e7442cbc7a61b1374/doc/PROTOCOL-HTTP2.md
|
||||||
|
// This means printable ASCII (including/plus spaces); 0x20 to 0x7E inclusive.
|
||||||
|
bytes := []byte(textValue) // gRPC validates strings on the byte level, not Unicode.
|
||||||
|
for _, ch := range bytes {
|
||||||
|
if ch < 0x20 || ch > 0x7E {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func annotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcMethodName string, options ...AnnotateContextOption) (context.Context, metadata.MD, error) {
|
func annotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcMethodName string, options ...AnnotateContextOption) (context.Context, metadata.MD, error) {
|
||||||
ctx = withRPCMethod(ctx, rpcMethodName)
|
ctx = withRPCMethod(ctx, rpcMethodName)
|
||||||
for _, o := range options {
|
for _, o := range options {
|
||||||
ctx = o(ctx)
|
ctx = o(ctx)
|
||||||
}
|
}
|
||||||
var pairs []string
|
|
||||||
timeout := DefaultContextTimeout
|
timeout := DefaultContextTimeout
|
||||||
if tm := req.Header.Get(metadataGrpcTimeout); tm != "" {
|
if tm := req.Header.Get(metadataGrpcTimeout); tm != "" {
|
||||||
var err error
|
var err error
|
||||||
|
@ -115,7 +145,7 @@ func annotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcM
|
||||||
return nil, nil, status.Errorf(codes.InvalidArgument, "invalid grpc-timeout: %s", tm)
|
return nil, nil, status.Errorf(codes.InvalidArgument, "invalid grpc-timeout: %s", tm)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
var pairs []string
|
||||||
for key, vals := range req.Header {
|
for key, vals := range req.Header {
|
||||||
key = textproto.CanonicalMIMEHeaderKey(key)
|
key = textproto.CanonicalMIMEHeaderKey(key)
|
||||||
for _, val := range vals {
|
for _, val := range vals {
|
||||||
|
@ -124,6 +154,10 @@ func annotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcM
|
||||||
pairs = append(pairs, "authorization", val)
|
pairs = append(pairs, "authorization", val)
|
||||||
}
|
}
|
||||||
if h, ok := mux.incomingHeaderMatcher(key); ok {
|
if h, ok := mux.incomingHeaderMatcher(key); ok {
|
||||||
|
if !isValidGRPCMetadataKey(h) {
|
||||||
|
grpclog.Errorf("HTTP header name %q is not valid as gRPC metadata key; skipping", h)
|
||||||
|
continue
|
||||||
|
}
|
||||||
// Handles "-bin" metadata in grpc, since grpc will do another base64
|
// Handles "-bin" metadata in grpc, since grpc will do another base64
|
||||||
// encode before sending to server, we need to decode it first.
|
// encode before sending to server, we need to decode it first.
|
||||||
if strings.HasSuffix(key, metadataHeaderBinarySuffix) {
|
if strings.HasSuffix(key, metadataHeaderBinarySuffix) {
|
||||||
|
@ -133,6 +167,9 @@ func annotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcM
|
||||||
}
|
}
|
||||||
|
|
||||||
val = string(b)
|
val = string(b)
|
||||||
|
} else if !isValidGRPCMetadataTextValue(val) {
|
||||||
|
grpclog.Errorf("Value of HTTP header %q contains non-ASCII value (not valid as gRPC metadata): skipping", h)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
pairs = append(pairs, h, val)
|
pairs = append(pairs, h, val)
|
||||||
}
|
}
|
||||||
|
@ -281,8 +318,8 @@ func timeoutUnitToDuration(u uint8) (d time.Duration, ok bool) {
|
||||||
case 'n':
|
case 'n':
|
||||||
return time.Nanosecond, true
|
return time.Nanosecond, true
|
||||||
default:
|
default:
|
||||||
|
return
|
||||||
}
|
}
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// isPermanentHTTPHeader checks whether hdr belongs to the list of
|
// isPermanentHTTPHeader checks whether hdr belongs to the list of
|
||||||
|
|
|
@ -37,7 +37,7 @@ func BoolSlice(val, sep string) ([]bool, error) {
|
||||||
for i, v := range s {
|
for i, v := range s {
|
||||||
value, err := Bool(v)
|
value, err := Bool(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return values, err
|
return nil, err
|
||||||
}
|
}
|
||||||
values[i] = value
|
values[i] = value
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ func Float64Slice(val, sep string) ([]float64, error) {
|
||||||
for i, v := range s {
|
for i, v := range s {
|
||||||
value, err := Float64(v)
|
value, err := Float64(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return values, err
|
return nil, err
|
||||||
}
|
}
|
||||||
values[i] = value
|
values[i] = value
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,7 @@ func Float32Slice(val, sep string) ([]float32, error) {
|
||||||
for i, v := range s {
|
for i, v := range s {
|
||||||
value, err := Float32(v)
|
value, err := Float32(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return values, err
|
return nil, err
|
||||||
}
|
}
|
||||||
values[i] = value
|
values[i] = value
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,7 @@ func Int64Slice(val, sep string) ([]int64, error) {
|
||||||
for i, v := range s {
|
for i, v := range s {
|
||||||
value, err := Int64(v)
|
value, err := Int64(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return values, err
|
return nil, err
|
||||||
}
|
}
|
||||||
values[i] = value
|
values[i] = value
|
||||||
}
|
}
|
||||||
|
@ -125,7 +125,7 @@ func Int32Slice(val, sep string) ([]int32, error) {
|
||||||
for i, v := range s {
|
for i, v := range s {
|
||||||
value, err := Int32(v)
|
value, err := Int32(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return values, err
|
return nil, err
|
||||||
}
|
}
|
||||||
values[i] = value
|
values[i] = value
|
||||||
}
|
}
|
||||||
|
@ -145,7 +145,7 @@ func Uint64Slice(val, sep string) ([]uint64, error) {
|
||||||
for i, v := range s {
|
for i, v := range s {
|
||||||
value, err := Uint64(v)
|
value, err := Uint64(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return values, err
|
return nil, err
|
||||||
}
|
}
|
||||||
values[i] = value
|
values[i] = value
|
||||||
}
|
}
|
||||||
|
@ -169,7 +169,7 @@ func Uint32Slice(val, sep string) ([]uint32, error) {
|
||||||
for i, v := range s {
|
for i, v := range s {
|
||||||
value, err := Uint32(v)
|
value, err := Uint32(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return values, err
|
return nil, err
|
||||||
}
|
}
|
||||||
values[i] = value
|
values[i] = value
|
||||||
}
|
}
|
||||||
|
@ -197,7 +197,7 @@ func BytesSlice(val, sep string) ([][]byte, error) {
|
||||||
for i, v := range s {
|
for i, v := range s {
|
||||||
value, err := Bytes(v)
|
value, err := Bytes(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return values, err
|
return nil, err
|
||||||
}
|
}
|
||||||
values[i] = value
|
values[i] = value
|
||||||
}
|
}
|
||||||
|
@ -209,8 +209,7 @@ func Timestamp(val string) (*timestamppb.Timestamp, error) {
|
||||||
var r timestamppb.Timestamp
|
var r timestamppb.Timestamp
|
||||||
val = strconv.Quote(strings.Trim(val, `"`))
|
val = strconv.Quote(strings.Trim(val, `"`))
|
||||||
unmarshaler := &protojson.UnmarshalOptions{}
|
unmarshaler := &protojson.UnmarshalOptions{}
|
||||||
err := unmarshaler.Unmarshal([]byte(val), &r)
|
if err := unmarshaler.Unmarshal([]byte(val), &r); err != nil {
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return &r, nil
|
return &r, nil
|
||||||
|
@ -221,8 +220,7 @@ func Duration(val string) (*durationpb.Duration, error) {
|
||||||
var r durationpb.Duration
|
var r durationpb.Duration
|
||||||
val = strconv.Quote(strings.Trim(val, `"`))
|
val = strconv.Quote(strings.Trim(val, `"`))
|
||||||
unmarshaler := &protojson.UnmarshalOptions{}
|
unmarshaler := &protojson.UnmarshalOptions{}
|
||||||
err := unmarshaler.Unmarshal([]byte(val), &r)
|
if err := unmarshaler.Unmarshal([]byte(val), &r); err != nil {
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return &r, nil
|
return &r, nil
|
||||||
|
@ -257,66 +255,64 @@ func EnumSlice(val, sep string, enumValMap map[string]int32) ([]int32, error) {
|
||||||
for i, v := range s {
|
for i, v := range s {
|
||||||
value, err := Enum(v, enumValMap)
|
value, err := Enum(v, enumValMap)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return values, err
|
return nil, err
|
||||||
}
|
}
|
||||||
values[i] = value
|
values[i] = value
|
||||||
}
|
}
|
||||||
return values, nil
|
return values, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Support for google.protobuf.wrappers on top of primitive types
|
||||||
Support for google.protobuf.wrappers on top of primitive types
|
|
||||||
*/
|
|
||||||
|
|
||||||
// StringValue well-known type support as wrapper around string type
|
// StringValue well-known type support as wrapper around string type
|
||||||
func StringValue(val string) (*wrapperspb.StringValue, error) {
|
func StringValue(val string) (*wrapperspb.StringValue, error) {
|
||||||
return &wrapperspb.StringValue{Value: val}, nil
|
return wrapperspb.String(val), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// FloatValue well-known type support as wrapper around float32 type
|
// FloatValue well-known type support as wrapper around float32 type
|
||||||
func FloatValue(val string) (*wrapperspb.FloatValue, error) {
|
func FloatValue(val string) (*wrapperspb.FloatValue, error) {
|
||||||
parsedVal, err := Float32(val)
|
parsedVal, err := Float32(val)
|
||||||
return &wrapperspb.FloatValue{Value: parsedVal}, err
|
return wrapperspb.Float(parsedVal), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// DoubleValue well-known type support as wrapper around float64 type
|
// DoubleValue well-known type support as wrapper around float64 type
|
||||||
func DoubleValue(val string) (*wrapperspb.DoubleValue, error) {
|
func DoubleValue(val string) (*wrapperspb.DoubleValue, error) {
|
||||||
parsedVal, err := Float64(val)
|
parsedVal, err := Float64(val)
|
||||||
return &wrapperspb.DoubleValue{Value: parsedVal}, err
|
return wrapperspb.Double(parsedVal), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// BoolValue well-known type support as wrapper around bool type
|
// BoolValue well-known type support as wrapper around bool type
|
||||||
func BoolValue(val string) (*wrapperspb.BoolValue, error) {
|
func BoolValue(val string) (*wrapperspb.BoolValue, error) {
|
||||||
parsedVal, err := Bool(val)
|
parsedVal, err := Bool(val)
|
||||||
return &wrapperspb.BoolValue{Value: parsedVal}, err
|
return wrapperspb.Bool(parsedVal), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Int32Value well-known type support as wrapper around int32 type
|
// Int32Value well-known type support as wrapper around int32 type
|
||||||
func Int32Value(val string) (*wrapperspb.Int32Value, error) {
|
func Int32Value(val string) (*wrapperspb.Int32Value, error) {
|
||||||
parsedVal, err := Int32(val)
|
parsedVal, err := Int32(val)
|
||||||
return &wrapperspb.Int32Value{Value: parsedVal}, err
|
return wrapperspb.Int32(parsedVal), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// UInt32Value well-known type support as wrapper around uint32 type
|
// UInt32Value well-known type support as wrapper around uint32 type
|
||||||
func UInt32Value(val string) (*wrapperspb.UInt32Value, error) {
|
func UInt32Value(val string) (*wrapperspb.UInt32Value, error) {
|
||||||
parsedVal, err := Uint32(val)
|
parsedVal, err := Uint32(val)
|
||||||
return &wrapperspb.UInt32Value{Value: parsedVal}, err
|
return wrapperspb.UInt32(parsedVal), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Int64Value well-known type support as wrapper around int64 type
|
// Int64Value well-known type support as wrapper around int64 type
|
||||||
func Int64Value(val string) (*wrapperspb.Int64Value, error) {
|
func Int64Value(val string) (*wrapperspb.Int64Value, error) {
|
||||||
parsedVal, err := Int64(val)
|
parsedVal, err := Int64(val)
|
||||||
return &wrapperspb.Int64Value{Value: parsedVal}, err
|
return wrapperspb.Int64(parsedVal), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// UInt64Value well-known type support as wrapper around uint64 type
|
// UInt64Value well-known type support as wrapper around uint64 type
|
||||||
func UInt64Value(val string) (*wrapperspb.UInt64Value, error) {
|
func UInt64Value(val string) (*wrapperspb.UInt64Value, error) {
|
||||||
parsedVal, err := Uint64(val)
|
parsedVal, err := Uint64(val)
|
||||||
return &wrapperspb.UInt64Value{Value: parsedVal}, err
|
return wrapperspb.UInt64(parsedVal), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// BytesValue well-known type support as wrapper around bytes[] type
|
// BytesValue well-known type support as wrapper around bytes[] type
|
||||||
func BytesValue(val string) (*wrapperspb.BytesValue, error) {
|
func BytesValue(val string) (*wrapperspb.BytesValue, error) {
|
||||||
parsedVal, err := Bytes(val)
|
parsedVal, err := Bytes(val)
|
||||||
return &wrapperspb.BytesValue{Value: parsedVal}, err
|
return wrapperspb.Bytes(parsedVal), err
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@ func HTTPStatusFromCode(code codes.Code) int {
|
||||||
case codes.OK:
|
case codes.OK:
|
||||||
return http.StatusOK
|
return http.StatusOK
|
||||||
case codes.Canceled:
|
case codes.Canceled:
|
||||||
return http.StatusRequestTimeout
|
return 499
|
||||||
case codes.Unknown:
|
case codes.Unknown:
|
||||||
return http.StatusInternalServerError
|
return http.StatusInternalServerError
|
||||||
case codes.InvalidArgument:
|
case codes.InvalidArgument:
|
||||||
|
@ -70,10 +70,10 @@ func HTTPStatusFromCode(code codes.Code) int {
|
||||||
return http.StatusServiceUnavailable
|
return http.StatusServiceUnavailable
|
||||||
case codes.DataLoss:
|
case codes.DataLoss:
|
||||||
return http.StatusInternalServerError
|
return http.StatusInternalServerError
|
||||||
|
default:
|
||||||
|
grpclog.Infof("Unknown gRPC error code: %v", code)
|
||||||
|
return http.StatusInternalServerError
|
||||||
}
|
}
|
||||||
|
|
||||||
grpclog.Infof("Unknown gRPC error code: %v", code)
|
|
||||||
return http.StatusInternalServerError
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// HTTPError uses the mux-configured error handler.
|
// HTTPError uses the mux-configured error handler.
|
||||||
|
|
|
@ -2,13 +2,14 @@ package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"sort"
|
"sort"
|
||||||
|
|
||||||
"google.golang.org/genproto/protobuf/field_mask"
|
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
"google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
field_mask "google.golang.org/protobuf/types/known/fieldmaskpb"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getFieldByName(fields protoreflect.FieldDescriptors, name string) protoreflect.FieldDescriptor {
|
func getFieldByName(fields protoreflect.FieldDescriptors, name string) protoreflect.FieldDescriptor {
|
||||||
|
@ -44,7 +45,7 @@ func FieldMaskFromRequestBody(r io.Reader, msg proto.Message) (*field_mask.Field
|
||||||
// if the item is an object, then enqueue all of its children
|
// if the item is an object, then enqueue all of its children
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
if item.msg == nil {
|
if item.msg == nil {
|
||||||
return nil, fmt.Errorf("JSON structure did not match request type")
|
return nil, errors.New("JSON structure did not match request type")
|
||||||
}
|
}
|
||||||
|
|
||||||
fd := getFieldByName(item.msg.Descriptor().Fields(), k)
|
fd := getFieldByName(item.msg.Descriptor().Fields(), k)
|
||||||
|
@ -63,7 +64,7 @@ func FieldMaskFromRequestBody(r io.Reader, msg proto.Message) (*field_mask.Field
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if isProtobufAnyMessage(fd.Message()) {
|
if isProtobufAnyMessage(fd.Message()) && !fd.IsList() {
|
||||||
_, hasTypeField := v.(map[string]interface{})["@type"]
|
_, hasTypeField := v.(map[string]interface{})["@type"]
|
||||||
if hasTypeField {
|
if hasTypeField {
|
||||||
queue = append(queue, fieldMaskPathItem{path: k})
|
queue = append(queue, fieldMaskPathItem{path: k})
|
||||||
|
|
|
@ -85,12 +85,12 @@ func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshal
|
||||||
handleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err, delimiter)
|
handleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err, delimiter)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if _, err = w.Write(buf); err != nil {
|
if _, err := w.Write(buf); err != nil {
|
||||||
grpclog.Infof("Failed to send response chunk: %v", err)
|
grpclog.Infof("Failed to send response chunk: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
wroteHeader = true
|
wroteHeader = true
|
||||||
if _, err = w.Write(delimiter); err != nil {
|
if _, err := w.Write(delimiter); err != nil {
|
||||||
grpclog.Infof("Failed to send delimiter chunk: %v", err)
|
grpclog.Infof("Failed to send delimiter chunk: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -207,16 +207,16 @@ func handleForwardResponseStreamError(ctx context.Context, wroteHeader bool, mar
|
||||||
w.Header().Set("Content-Type", marshaler.ContentType(msg))
|
w.Header().Set("Content-Type", marshaler.ContentType(msg))
|
||||||
w.WriteHeader(HTTPStatusFromCode(st.Code()))
|
w.WriteHeader(HTTPStatusFromCode(st.Code()))
|
||||||
}
|
}
|
||||||
buf, merr := marshaler.Marshal(msg)
|
buf, err := marshaler.Marshal(msg)
|
||||||
if merr != nil {
|
if err != nil {
|
||||||
grpclog.Infof("Failed to marshal an error: %v", merr)
|
grpclog.Infof("Failed to marshal an error: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if _, werr := w.Write(buf); werr != nil {
|
if _, err := w.Write(buf); err != nil {
|
||||||
grpclog.Infof("Failed to notify error to client: %v", werr)
|
grpclog.Infof("Failed to notify error to client: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if _, derr := w.Write(delimiter); derr != nil {
|
if _, err := w.Write(delimiter); err != nil {
|
||||||
grpclog.Infof("Failed to send delimiter chunk: %v", err)
|
grpclog.Infof("Failed to send delimiter chunk: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,23 +92,20 @@ func (j *JSONPb) marshalNonProtoField(v interface{}) ([]byte, error) {
|
||||||
|
|
||||||
if rv.Type().Elem().Implements(protoMessageType) {
|
if rv.Type().Elem().Implements(protoMessageType) {
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
err := buf.WriteByte('[')
|
if err := buf.WriteByte('['); err != nil {
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
for i := 0; i < rv.Len(); i++ {
|
for i := 0; i < rv.Len(); i++ {
|
||||||
if i != 0 {
|
if i != 0 {
|
||||||
err = buf.WriteByte(',')
|
if err := buf.WriteByte(','); err != nil {
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err = j.marshalTo(&buf, rv.Index(i).Interface().(proto.Message)); err != nil {
|
if err := j.marshalTo(&buf, rv.Index(i).Interface().(proto.Message)); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
err = buf.WriteByte(']')
|
if err := buf.WriteByte(']'); err != nil {
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,17 +114,16 @@ func (j *JSONPb) marshalNonProtoField(v interface{}) ([]byte, error) {
|
||||||
|
|
||||||
if rv.Type().Elem().Implements(typeProtoEnum) {
|
if rv.Type().Elem().Implements(typeProtoEnum) {
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
err := buf.WriteByte('[')
|
if err := buf.WriteByte('['); err != nil {
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
for i := 0; i < rv.Len(); i++ {
|
for i := 0; i < rv.Len(); i++ {
|
||||||
if i != 0 {
|
if i != 0 {
|
||||||
err = buf.WriteByte(',')
|
if err := buf.WriteByte(','); err != nil {
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
var err error
|
||||||
if j.UseEnumNumbers {
|
if j.UseEnumNumbers {
|
||||||
_, err = buf.WriteString(strconv.FormatInt(rv.Index(i).Int(), 10))
|
_, err = buf.WriteString(strconv.FormatInt(rv.Index(i).Int(), 10))
|
||||||
} else {
|
} else {
|
||||||
|
@ -137,8 +133,7 @@ func (j *JSONPb) marshalNonProtoField(v interface{}) ([]byte, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
err = buf.WriteByte(']')
|
if err := buf.WriteByte(']'); err != nil {
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,8 +214,7 @@ func decodeJSONPb(d *json.Decoder, unmarshaler protojson.UnmarshalOptions, v int
|
||||||
|
|
||||||
// Decode into bytes for marshalling
|
// Decode into bytes for marshalling
|
||||||
var b json.RawMessage
|
var b json.RawMessage
|
||||||
err := d.Decode(&b)
|
if err := d.Decode(&b); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -239,8 +233,7 @@ func decodeNonProtoField(d *json.Decoder, unmarshaler protojson.UnmarshalOptions
|
||||||
if rv.Type().ConvertibleTo(typeProtoMessage) {
|
if rv.Type().ConvertibleTo(typeProtoMessage) {
|
||||||
// Decode into bytes for marshalling
|
// Decode into bytes for marshalling
|
||||||
var b json.RawMessage
|
var b json.RawMessage
|
||||||
err := d.Decode(&b)
|
if err := d.Decode(&b); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io"
|
|
||||||
|
|
||||||
"errors"
|
"errors"
|
||||||
"io/ioutil"
|
"io"
|
||||||
|
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
@ -38,7 +36,7 @@ func (*ProtoMarshaller) Unmarshal(data []byte, value interface{}) error {
|
||||||
// NewDecoder returns a Decoder which reads proto stream from "reader".
|
// NewDecoder returns a Decoder which reads proto stream from "reader".
|
||||||
func (marshaller *ProtoMarshaller) NewDecoder(reader io.Reader) Decoder {
|
func (marshaller *ProtoMarshaller) NewDecoder(reader io.Reader) Decoder {
|
||||||
return DecoderFunc(func(value interface{}) error {
|
return DecoderFunc(func(value interface{}) error {
|
||||||
buffer, err := ioutil.ReadAll(reader)
|
buffer, err := io.ReadAll(reader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -53,8 +51,7 @@ func (marshaller *ProtoMarshaller) NewEncoder(writer io.Writer) Encoder {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
_, err = writer.Write(buffer)
|
if _, err := writer.Write(buffer); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,9 +43,7 @@ const (
|
||||||
UnescapingModeDefault = UnescapingModeLegacy
|
UnescapingModeDefault = UnescapingModeLegacy
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var encodedPathSplitter = regexp.MustCompile("(/|%2F)")
|
||||||
encodedPathSplitter = regexp.MustCompile("(/|%2F)")
|
|
||||||
)
|
|
||||||
|
|
||||||
// A HandlerFunc handles a specific pair of path pattern and HTTP method.
|
// A HandlerFunc handles a specific pair of path pattern and HTTP method.
|
||||||
type HandlerFunc func(w http.ResponseWriter, r *http.Request, pathParams map[string]string)
|
type HandlerFunc func(w http.ResponseWriter, r *http.Request, pathParams map[string]string)
|
||||||
|
@ -82,7 +80,7 @@ func WithForwardResponseOption(forwardResponseOption func(context.Context, http.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithEscapingType sets the escaping type. See the definitions of UnescapingMode
|
// WithUnescapingMode sets the escaping type. See the definitions of UnescapingMode
|
||||||
// for more information.
|
// for more information.
|
||||||
func WithUnescapingMode(mode UnescapingMode) ServeMuxOption {
|
func WithUnescapingMode(mode UnescapingMode) ServeMuxOption {
|
||||||
return func(serveMux *ServeMux) {
|
return func(serveMux *ServeMux) {
|
||||||
|
@ -103,13 +101,14 @@ func SetQueryParameterParser(queryParameterParser QueryParameterParser) ServeMux
|
||||||
type HeaderMatcherFunc func(string) (string, bool)
|
type HeaderMatcherFunc func(string) (string, bool)
|
||||||
|
|
||||||
// DefaultHeaderMatcher is used to pass http request headers to/from gRPC context. This adds permanent HTTP header
|
// DefaultHeaderMatcher is used to pass http request headers to/from gRPC context. This adds permanent HTTP header
|
||||||
// keys (as specified by the IANA) to gRPC context with grpcgateway- prefix. HTTP headers that start with
|
// keys (as specified by the IANA, e.g: Accept, Cookie, Host) to the gRPC metadata with the grpcgateway- prefix. If you want to know which headers are considered permanent, you can view the isPermanentHTTPHeader function.
|
||||||
// 'Grpc-Metadata-' are mapped to gRPC metadata after removing prefix 'Grpc-Metadata-'.
|
// HTTP headers that start with 'Grpc-Metadata-' are mapped to gRPC metadata after removing the prefix 'Grpc-Metadata-'.
|
||||||
|
// Other headers are not added to the gRPC metadata.
|
||||||
func DefaultHeaderMatcher(key string) (string, bool) {
|
func DefaultHeaderMatcher(key string) (string, bool) {
|
||||||
key = textproto.CanonicalMIMEHeaderKey(key)
|
switch key = textproto.CanonicalMIMEHeaderKey(key); {
|
||||||
if isPermanentHTTPHeader(key) {
|
case isPermanentHTTPHeader(key):
|
||||||
return MetadataPrefix + key, true
|
return MetadataPrefix + key, true
|
||||||
} else if strings.HasPrefix(key, MetadataHeaderPrefix) {
|
case strings.HasPrefix(key, MetadataHeaderPrefix):
|
||||||
return key[len(MetadataHeaderPrefix):], true
|
return key[len(MetadataHeaderPrefix):], true
|
||||||
}
|
}
|
||||||
return "", false
|
return "", false
|
||||||
|
@ -232,7 +231,6 @@ func WithHealthEndpointAt(healthCheckClient grpc_health_v1.HealthClient, endpoin
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
|
||||||
if resp.GetStatus() != grpc_health_v1.HealthCheckResponse_SERVING {
|
if resp.GetStatus() != grpc_health_v1.HealthCheckResponse_SERVING {
|
||||||
var err error
|
|
||||||
switch resp.GetStatus() {
|
switch resp.GetStatus() {
|
||||||
case grpc_health_v1.HealthCheckResponse_NOT_SERVING, grpc_health_v1.HealthCheckResponse_UNKNOWN:
|
case grpc_health_v1.HealthCheckResponse_NOT_SERVING, grpc_health_v1.HealthCheckResponse_UNKNOWN:
|
||||||
err = status.Error(codes.Unavailable, resp.String())
|
err = status.Error(codes.Unavailable, resp.String())
|
||||||
|
@ -322,17 +320,6 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
path = r.URL.RawPath
|
path = r.URL.RawPath
|
||||||
}
|
}
|
||||||
|
|
||||||
var components []string
|
|
||||||
// since in UnescapeModeLegacy, the URL will already have been fully unescaped, if we also split on "%2F"
|
|
||||||
// in this escaping mode we would be double unescaping but in UnescapingModeAllCharacters, we still do as the
|
|
||||||
// path is the RawPath (i.e. unescaped). That does mean that the behavior of this function will change its default
|
|
||||||
// behavior when the UnescapingModeDefault gets changed from UnescapingModeLegacy to UnescapingModeAllExceptReserved
|
|
||||||
if s.unescapingMode == UnescapingModeAllCharacters {
|
|
||||||
components = encodedPathSplitter.Split(path[1:], -1)
|
|
||||||
} else {
|
|
||||||
components = strings.Split(path[1:], "/")
|
|
||||||
}
|
|
||||||
|
|
||||||
if override := r.Header.Get("X-HTTP-Method-Override"); override != "" && s.isPathLengthFallback(r) {
|
if override := r.Header.Get("X-HTTP-Method-Override"); override != "" && s.isPathLengthFallback(r) {
|
||||||
r.Method = strings.ToUpper(override)
|
r.Method = strings.ToUpper(override)
|
||||||
if err := r.ParseForm(); err != nil {
|
if err := r.ParseForm(); err != nil {
|
||||||
|
@ -343,8 +330,18 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verb out here is to memoize for the fallback case below
|
var pathComponents []string
|
||||||
var verb string
|
// since in UnescapeModeLegacy, the URL will already have been fully unescaped, if we also split on "%2F"
|
||||||
|
// in this escaping mode we would be double unescaping but in UnescapingModeAllCharacters, we still do as the
|
||||||
|
// path is the RawPath (i.e. unescaped). That does mean that the behavior of this function will change its default
|
||||||
|
// behavior when the UnescapingModeDefault gets changed from UnescapingModeLegacy to UnescapingModeAllExceptReserved
|
||||||
|
if s.unescapingMode == UnescapingModeAllCharacters {
|
||||||
|
pathComponents = encodedPathSplitter.Split(path[1:], -1)
|
||||||
|
} else {
|
||||||
|
pathComponents = strings.Split(path[1:], "/")
|
||||||
|
}
|
||||||
|
|
||||||
|
lastPathComponent := pathComponents[len(pathComponents)-1]
|
||||||
|
|
||||||
for _, h := range s.handlers[r.Method] {
|
for _, h := range s.handlers[r.Method] {
|
||||||
// If the pattern has a verb, explicitly look for a suffix in the last
|
// If the pattern has a verb, explicitly look for a suffix in the last
|
||||||
|
@ -355,23 +352,28 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
// parser because we know what verb we're looking for, however, there
|
// parser because we know what verb we're looking for, however, there
|
||||||
// are still some cases that the parser itself cannot disambiguate. See
|
// are still some cases that the parser itself cannot disambiguate. See
|
||||||
// the comment there if interested.
|
// the comment there if interested.
|
||||||
|
|
||||||
|
var verb string
|
||||||
patVerb := h.pat.Verb()
|
patVerb := h.pat.Verb()
|
||||||
l := len(components)
|
|
||||||
lastComponent := components[l-1]
|
idx := -1
|
||||||
var idx int = -1
|
if patVerb != "" && strings.HasSuffix(lastPathComponent, ":"+patVerb) {
|
||||||
if patVerb != "" && strings.HasSuffix(lastComponent, ":"+patVerb) {
|
idx = len(lastPathComponent) - len(patVerb) - 1
|
||||||
idx = len(lastComponent) - len(patVerb) - 1
|
|
||||||
}
|
}
|
||||||
if idx == 0 {
|
if idx == 0 {
|
||||||
_, outboundMarshaler := MarshalerForRequest(s, r)
|
_, outboundMarshaler := MarshalerForRequest(s, r)
|
||||||
s.routingErrorHandler(ctx, s, outboundMarshaler, w, r, http.StatusNotFound)
|
s.routingErrorHandler(ctx, s, outboundMarshaler, w, r, http.StatusNotFound)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
comps := make([]string, len(pathComponents))
|
||||||
|
copy(comps, pathComponents)
|
||||||
|
|
||||||
if idx > 0 {
|
if idx > 0 {
|
||||||
components[l-1], verb = lastComponent[:idx], lastComponent[idx+1:]
|
comps[len(comps)-1], verb = lastPathComponent[:idx], lastPathComponent[idx+1:]
|
||||||
}
|
}
|
||||||
|
|
||||||
pathParams, err := h.pat.MatchAndEscape(components, verb, s.unescapingMode)
|
pathParams, err := h.pat.MatchAndEscape(comps, verb, s.unescapingMode)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var mse MalformedSequenceError
|
var mse MalformedSequenceError
|
||||||
if ok := errors.As(err, &mse); ok {
|
if ok := errors.As(err, &mse); ok {
|
||||||
|
@ -387,14 +389,33 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// lookup other methods to handle fallback from GET to POST and
|
// if no handler has found for the request, lookup for other methods
|
||||||
// to determine if it is NotImplemented or NotFound.
|
// to handle POST -> GET fallback if the request is subject to path
|
||||||
|
// length fallback.
|
||||||
|
// Note we are not eagerly checking the request here as we want to return the
|
||||||
|
// right HTTP status code, and we need to process the fallback candidates in
|
||||||
|
// order to do that.
|
||||||
for m, handlers := range s.handlers {
|
for m, handlers := range s.handlers {
|
||||||
if m == r.Method {
|
if m == r.Method {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
for _, h := range handlers {
|
for _, h := range handlers {
|
||||||
pathParams, err := h.pat.MatchAndEscape(components, verb, s.unescapingMode)
|
var verb string
|
||||||
|
patVerb := h.pat.Verb()
|
||||||
|
|
||||||
|
idx := -1
|
||||||
|
if patVerb != "" && strings.HasSuffix(lastPathComponent, ":"+patVerb) {
|
||||||
|
idx = len(lastPathComponent) - len(patVerb) - 1
|
||||||
|
}
|
||||||
|
|
||||||
|
comps := make([]string, len(pathComponents))
|
||||||
|
copy(comps, pathComponents)
|
||||||
|
|
||||||
|
if idx > 0 {
|
||||||
|
comps[len(comps)-1], verb = lastPathComponent[:idx], lastPathComponent[idx+1:]
|
||||||
|
}
|
||||||
|
|
||||||
|
pathParams, err := h.pat.MatchAndEscape(comps, verb, s.unescapingMode)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var mse MalformedSequenceError
|
var mse MalformedSequenceError
|
||||||
if ok := errors.As(err, &mse); ok {
|
if ok := errors.As(err, &mse); ok {
|
||||||
|
@ -406,8 +427,11 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// X-HTTP-Method-Override is optional. Always allow fallback to POST.
|
// X-HTTP-Method-Override is optional. Always allow fallback to POST.
|
||||||
if s.isPathLengthFallback(r) {
|
// Also, only consider POST -> GET fallbacks, and avoid falling back to
|
||||||
|
// potentially dangerous operations like DELETE.
|
||||||
|
if s.isPathLengthFallback(r) && m == http.MethodGet {
|
||||||
if err := r.ParseForm(); err != nil {
|
if err := r.ParseForm(); err != nil {
|
||||||
_, outboundMarshaler := MarshalerForRequest(s, r)
|
_, outboundMarshaler := MarshalerForRequest(s, r)
|
||||||
sterr := status.Error(codes.InvalidArgument, err.Error())
|
sterr := status.Error(codes.InvalidArgument, err.Error())
|
||||||
|
|
|
@ -15,8 +15,6 @@ var (
|
||||||
ErrNotMatch = errors.New("not match to the path pattern")
|
ErrNotMatch = errors.New("not match to the path pattern")
|
||||||
// ErrInvalidPattern indicates that the given definition of Pattern is not valid.
|
// ErrInvalidPattern indicates that the given definition of Pattern is not valid.
|
||||||
ErrInvalidPattern = errors.New("invalid pattern")
|
ErrInvalidPattern = errors.New("invalid pattern")
|
||||||
// ErrMalformedSequence indicates that an escape sequence was malformed.
|
|
||||||
ErrMalformedSequence = errors.New("malformed escape sequence")
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type MalformedSequenceError string
|
type MalformedSequenceError string
|
||||||
|
|
|
@ -10,13 +10,13 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/grpc-ecosystem/grpc-gateway/v2/utilities"
|
"github.com/grpc-ecosystem/grpc-gateway/v2/utilities"
|
||||||
"google.golang.org/genproto/protobuf/field_mask"
|
|
||||||
"google.golang.org/grpc/grpclog"
|
"google.golang.org/grpc/grpclog"
|
||||||
"google.golang.org/protobuf/encoding/protojson"
|
"google.golang.org/protobuf/encoding/protojson"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
"google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
"google.golang.org/protobuf/reflect/protoregistry"
|
"google.golang.org/protobuf/reflect/protoregistry"
|
||||||
"google.golang.org/protobuf/types/known/durationpb"
|
"google.golang.org/protobuf/types/known/durationpb"
|
||||||
|
field_mask "google.golang.org/protobuf/types/known/fieldmaskpb"
|
||||||
"google.golang.org/protobuf/types/known/structpb"
|
"google.golang.org/protobuf/types/known/structpb"
|
||||||
"google.golang.org/protobuf/types/known/timestamppb"
|
"google.golang.org/protobuf/types/known/timestamppb"
|
||||||
"google.golang.org/protobuf/types/known/wrapperspb"
|
"google.golang.org/protobuf/types/known/wrapperspb"
|
||||||
|
@ -47,8 +47,7 @@ type DefaultQueryParser struct{}
|
||||||
// A value is ignored if its key starts with one of the elements in "filter".
|
// A value is ignored if its key starts with one of the elements in "filter".
|
||||||
func (*DefaultQueryParser) Parse(msg proto.Message, values url.Values, filter *utilities.DoubleArray) error {
|
func (*DefaultQueryParser) Parse(msg proto.Message, values url.Values, filter *utilities.DoubleArray) error {
|
||||||
for key, values := range values {
|
for key, values := range values {
|
||||||
match := valuesKeyRegexp.FindStringSubmatch(key)
|
if match := valuesKeyRegexp.FindStringSubmatch(key); len(match) == 3 {
|
||||||
if len(match) == 3 {
|
|
||||||
key = match[1]
|
key = match[1]
|
||||||
values = append([]string{match[2]}, values...)
|
values = append([]string{match[2]}, values...)
|
||||||
}
|
}
|
||||||
|
@ -180,10 +179,10 @@ func parseField(fieldDescriptor protoreflect.FieldDescriptor, value string) (pro
|
||||||
return protoreflect.ValueOfBool(v), nil
|
return protoreflect.ValueOfBool(v), nil
|
||||||
case protoreflect.EnumKind:
|
case protoreflect.EnumKind:
|
||||||
enum, err := protoregistry.GlobalTypes.FindEnumByName(fieldDescriptor.Enum().FullName())
|
enum, err := protoregistry.GlobalTypes.FindEnumByName(fieldDescriptor.Enum().FullName())
|
||||||
switch {
|
if err != nil {
|
||||||
case errors.Is(err, protoregistry.NotFound):
|
if errors.Is(err, protoregistry.NotFound) {
|
||||||
return protoreflect.Value{}, fmt.Errorf("enum %q is not registered", fieldDescriptor.Enum().FullName())
|
return protoreflect.Value{}, fmt.Errorf("enum %q is not registered", fieldDescriptor.Enum().FullName())
|
||||||
case err != nil:
|
}
|
||||||
return protoreflect.Value{}, fmt.Errorf("failed to look up enum: %w", err)
|
return protoreflect.Value{}, fmt.Errorf("failed to look up enum: %w", err)
|
||||||
}
|
}
|
||||||
// Look for enum by name
|
// Look for enum by name
|
||||||
|
@ -194,8 +193,7 @@ func parseField(fieldDescriptor protoreflect.FieldDescriptor, value string) (pro
|
||||||
return protoreflect.Value{}, fmt.Errorf("%q is not a valid value", value)
|
return protoreflect.Value{}, fmt.Errorf("%q is not a valid value", value)
|
||||||
}
|
}
|
||||||
// Look for enum by number
|
// Look for enum by number
|
||||||
v = enum.Descriptor().Values().ByNumber(protoreflect.EnumNumber(i))
|
if v = enum.Descriptor().Values().ByNumber(protoreflect.EnumNumber(i)); v == nil {
|
||||||
if v == nil {
|
|
||||||
return protoreflect.Value{}, fmt.Errorf("%q is not a valid value", value)
|
return protoreflect.Value{}, fmt.Errorf("%q is not a valid value", value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -271,66 +269,64 @@ func parseMessage(msgDescriptor protoreflect.MessageDescriptor, value string) (p
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return protoreflect.Value{}, err
|
return protoreflect.Value{}, err
|
||||||
}
|
}
|
||||||
msg = &wrapperspb.DoubleValue{Value: v}
|
msg = wrapperspb.Double(v)
|
||||||
case "google.protobuf.FloatValue":
|
case "google.protobuf.FloatValue":
|
||||||
v, err := strconv.ParseFloat(value, 32)
|
v, err := strconv.ParseFloat(value, 32)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return protoreflect.Value{}, err
|
return protoreflect.Value{}, err
|
||||||
}
|
}
|
||||||
msg = &wrapperspb.FloatValue{Value: float32(v)}
|
msg = wrapperspb.Float(float32(v))
|
||||||
case "google.protobuf.Int64Value":
|
case "google.protobuf.Int64Value":
|
||||||
v, err := strconv.ParseInt(value, 10, 64)
|
v, err := strconv.ParseInt(value, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return protoreflect.Value{}, err
|
return protoreflect.Value{}, err
|
||||||
}
|
}
|
||||||
msg = &wrapperspb.Int64Value{Value: v}
|
msg = wrapperspb.Int64(v)
|
||||||
case "google.protobuf.Int32Value":
|
case "google.protobuf.Int32Value":
|
||||||
v, err := strconv.ParseInt(value, 10, 32)
|
v, err := strconv.ParseInt(value, 10, 32)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return protoreflect.Value{}, err
|
return protoreflect.Value{}, err
|
||||||
}
|
}
|
||||||
msg = &wrapperspb.Int32Value{Value: int32(v)}
|
msg = wrapperspb.Int32(int32(v))
|
||||||
case "google.protobuf.UInt64Value":
|
case "google.protobuf.UInt64Value":
|
||||||
v, err := strconv.ParseUint(value, 10, 64)
|
v, err := strconv.ParseUint(value, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return protoreflect.Value{}, err
|
return protoreflect.Value{}, err
|
||||||
}
|
}
|
||||||
msg = &wrapperspb.UInt64Value{Value: v}
|
msg = wrapperspb.UInt64(v)
|
||||||
case "google.protobuf.UInt32Value":
|
case "google.protobuf.UInt32Value":
|
||||||
v, err := strconv.ParseUint(value, 10, 32)
|
v, err := strconv.ParseUint(value, 10, 32)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return protoreflect.Value{}, err
|
return protoreflect.Value{}, err
|
||||||
}
|
}
|
||||||
msg = &wrapperspb.UInt32Value{Value: uint32(v)}
|
msg = wrapperspb.UInt32(uint32(v))
|
||||||
case "google.protobuf.BoolValue":
|
case "google.protobuf.BoolValue":
|
||||||
v, err := strconv.ParseBool(value)
|
v, err := strconv.ParseBool(value)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return protoreflect.Value{}, err
|
return protoreflect.Value{}, err
|
||||||
}
|
}
|
||||||
msg = &wrapperspb.BoolValue{Value: v}
|
msg = wrapperspb.Bool(v)
|
||||||
case "google.protobuf.StringValue":
|
case "google.protobuf.StringValue":
|
||||||
msg = &wrapperspb.StringValue{Value: value}
|
msg = wrapperspb.String(value)
|
||||||
case "google.protobuf.BytesValue":
|
case "google.protobuf.BytesValue":
|
||||||
v, err := Bytes(value)
|
v, err := Bytes(value)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return protoreflect.Value{}, err
|
return protoreflect.Value{}, err
|
||||||
}
|
}
|
||||||
msg = &wrapperspb.BytesValue{Value: v}
|
msg = wrapperspb.Bytes(v)
|
||||||
case "google.protobuf.FieldMask":
|
case "google.protobuf.FieldMask":
|
||||||
fm := &field_mask.FieldMask{}
|
fm := &field_mask.FieldMask{}
|
||||||
fm.Paths = append(fm.Paths, strings.Split(value, ",")...)
|
fm.Paths = append(fm.Paths, strings.Split(value, ",")...)
|
||||||
msg = fm
|
msg = fm
|
||||||
case "google.protobuf.Value":
|
case "google.protobuf.Value":
|
||||||
var v structpb.Value
|
var v structpb.Value
|
||||||
err := protojson.Unmarshal([]byte(value), &v)
|
if err := protojson.Unmarshal([]byte(value), &v); err != nil {
|
||||||
if err != nil {
|
|
||||||
return protoreflect.Value{}, err
|
return protoreflect.Value{}, err
|
||||||
}
|
}
|
||||||
msg = &v
|
msg = &v
|
||||||
case "google.protobuf.Struct":
|
case "google.protobuf.Struct":
|
||||||
var v structpb.Struct
|
var v structpb.Struct
|
||||||
err := protojson.Unmarshal([]byte(value), &v)
|
if err := protojson.Unmarshal([]byte(value), &v); err != nil {
|
||||||
if err != nil {
|
|
||||||
return protoreflect.Value{}, err
|
return protoreflect.Value{}, err
|
||||||
}
|
}
|
||||||
msg = &v
|
msg = &v
|
||||||
|
|
|
@ -3,13 +3,12 @@ package utilities
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// IOReaderFactory takes in an io.Reader and returns a function that will allow you to create a new reader that begins
|
// IOReaderFactory takes in an io.Reader and returns a function that will allow you to create a new reader that begins
|
||||||
// at the start of the stream
|
// at the start of the stream
|
||||||
func IOReaderFactory(r io.Reader) (func() io.Reader, error) {
|
func IOReaderFactory(r io.Reader) (func() io.Reader, error) {
|
||||||
b, err := ioutil.ReadAll(r)
|
b, err := io.ReadAll(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ func NewDoubleArray(seqs [][]string) *DoubleArray {
|
||||||
func registerTokens(da *DoubleArray, seqs [][]string) [][]int {
|
func registerTokens(da *DoubleArray, seqs [][]string) [][]int {
|
||||||
var result [][]int
|
var result [][]int
|
||||||
for _, seq := range seqs {
|
for _, seq := range seqs {
|
||||||
var encoded []int
|
encoded := make([]int, 0, len(seq))
|
||||||
for _, token := range seq {
|
for _, token := range seq {
|
||||||
if _, ok := da.Encoding[token]; !ok {
|
if _, ok := da.Encoding[token]; !ok {
|
||||||
da.Encoding[token] = len(da.Encoding)
|
da.Encoding[token] = len(da.Encoding)
|
||||||
|
|
|
@ -1,202 +0,0 @@
|
||||||
|
|
||||||
Apache License
|
|
||||||
Version 2.0, January 2004
|
|
||||||
http://www.apache.org/licenses/
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
||||||
|
|
||||||
1. Definitions.
|
|
||||||
|
|
||||||
"License" shall mean the terms and conditions for use, reproduction,
|
|
||||||
and distribution as defined by Sections 1 through 9 of this document.
|
|
||||||
|
|
||||||
"Licensor" shall mean the copyright owner or entity authorized by
|
|
||||||
the copyright owner that is granting the License.
|
|
||||||
|
|
||||||
"Legal Entity" shall mean the union of the acting entity and all
|
|
||||||
other entities that control, are controlled by, or are under common
|
|
||||||
control with that entity. For the purposes of this definition,
|
|
||||||
"control" means (i) the power, direct or indirect, to cause the
|
|
||||||
direction or management of such entity, whether by contract or
|
|
||||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
||||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
||||||
|
|
||||||
"You" (or "Your") shall mean an individual or Legal Entity
|
|
||||||
exercising permissions granted by this License.
|
|
||||||
|
|
||||||
"Source" form shall mean the preferred form for making modifications,
|
|
||||||
including but not limited to software source code, documentation
|
|
||||||
source, and configuration files.
|
|
||||||
|
|
||||||
"Object" form shall mean any form resulting from mechanical
|
|
||||||
transformation or translation of a Source form, including but
|
|
||||||
not limited to compiled object code, generated documentation,
|
|
||||||
and conversions to other media types.
|
|
||||||
|
|
||||||
"Work" shall mean the work of authorship, whether in Source or
|
|
||||||
Object form, made available under the License, as indicated by a
|
|
||||||
copyright notice that is included in or attached to the work
|
|
||||||
(an example is provided in the Appendix below).
|
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source or Object
|
|
||||||
form, that is based on (or derived from) the Work and for which the
|
|
||||||
editorial revisions, annotations, elaborations, or other modifications
|
|
||||||
represent, as a whole, an original work of authorship. For the purposes
|
|
||||||
of this License, Derivative Works shall not include works that remain
|
|
||||||
separable from, or merely link (or bind by name) to the interfaces of,
|
|
||||||
the Work and Derivative Works thereof.
|
|
||||||
|
|
||||||
"Contribution" shall mean any work of authorship, including
|
|
||||||
the original version of the Work and any modifications or additions
|
|
||||||
to that Work or Derivative Works thereof, that is intentionally
|
|
||||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
||||||
or by an individual or Legal Entity authorized to submit on behalf of
|
|
||||||
the copyright owner. For the purposes of this definition, "submitted"
|
|
||||||
means any form of electronic, verbal, or written communication sent
|
|
||||||
to the Licensor or its representatives, including but not limited to
|
|
||||||
communication on electronic mailing lists, source code control systems,
|
|
||||||
and issue tracking systems that are managed by, or on behalf of, the
|
|
||||||
Licensor for the purpose of discussing and improving the Work, but
|
|
||||||
excluding communication that is conspicuously marked or otherwise
|
|
||||||
designated in writing by the copyright owner as "Not a Contribution."
|
|
||||||
|
|
||||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
||||||
on behalf of whom a Contribution has been received by Licensor and
|
|
||||||
subsequently incorporated within the Work.
|
|
||||||
|
|
||||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
copyright license to reproduce, prepare Derivative Works of,
|
|
||||||
publicly display, publicly perform, sublicense, and distribute the
|
|
||||||
Work and such Derivative Works in Source or Object form.
|
|
||||||
|
|
||||||
3. Grant of Patent License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
(except as stated in this section) patent license to make, have made,
|
|
||||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
||||||
where such license applies only to those patent claims licensable
|
|
||||||
by such Contributor that are necessarily infringed by their
|
|
||||||
Contribution(s) alone or by combination of their Contribution(s)
|
|
||||||
with the Work to which such Contribution(s) was submitted. If You
|
|
||||||
institute patent litigation against any entity (including a
|
|
||||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
||||||
or a Contribution incorporated within the Work constitutes direct
|
|
||||||
or contributory patent infringement, then any patent licenses
|
|
||||||
granted to You under this License for that Work shall terminate
|
|
||||||
as of the date such litigation is filed.
|
|
||||||
|
|
||||||
4. Redistribution. You may reproduce and distribute copies of the
|
|
||||||
Work or Derivative Works thereof in any medium, with or without
|
|
||||||
modifications, and in Source or Object form, provided that You
|
|
||||||
meet the following conditions:
|
|
||||||
|
|
||||||
(a) You must give any other recipients of the Work or
|
|
||||||
Derivative Works a copy of this License; and
|
|
||||||
|
|
||||||
(b) You must cause any modified files to carry prominent notices
|
|
||||||
stating that You changed the files; and
|
|
||||||
|
|
||||||
(c) You must retain, in the Source form of any Derivative Works
|
|
||||||
that You distribute, all copyright, patent, trademark, and
|
|
||||||
attribution notices from the Source form of the Work,
|
|
||||||
excluding those notices that do not pertain to any part of
|
|
||||||
the Derivative Works; and
|
|
||||||
|
|
||||||
(d) If the Work includes a "NOTICE" text file as part of its
|
|
||||||
distribution, then any Derivative Works that You distribute must
|
|
||||||
include a readable copy of the attribution notices contained
|
|
||||||
within such NOTICE file, excluding those notices that do not
|
|
||||||
pertain to any part of the Derivative Works, in at least one
|
|
||||||
of the following places: within a NOTICE text file distributed
|
|
||||||
as part of the Derivative Works; within the Source form or
|
|
||||||
documentation, if provided along with the Derivative Works; or,
|
|
||||||
within a display generated by the Derivative Works, if and
|
|
||||||
wherever such third-party notices normally appear. The contents
|
|
||||||
of the NOTICE file are for informational purposes only and
|
|
||||||
do not modify the License. You may add Your own attribution
|
|
||||||
notices within Derivative Works that You distribute, alongside
|
|
||||||
or as an addendum to the NOTICE text from the Work, provided
|
|
||||||
that such additional attribution notices cannot be construed
|
|
||||||
as modifying the License.
|
|
||||||
|
|
||||||
You may add Your own copyright statement to Your modifications and
|
|
||||||
may provide additional or different license terms and conditions
|
|
||||||
for use, reproduction, or distribution of Your modifications, or
|
|
||||||
for any such Derivative Works as a whole, provided Your use,
|
|
||||||
reproduction, and distribution of the Work otherwise complies with
|
|
||||||
the conditions stated in this License.
|
|
||||||
|
|
||||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
||||||
any Contribution intentionally submitted for inclusion in the Work
|
|
||||||
by You to the Licensor shall be under the terms and conditions of
|
|
||||||
this License, without any additional terms or conditions.
|
|
||||||
Notwithstanding the above, nothing herein shall supersede or modify
|
|
||||||
the terms of any separate license agreement you may have executed
|
|
||||||
with Licensor regarding such Contributions.
|
|
||||||
|
|
||||||
6. Trademarks. This License does not grant permission to use the trade
|
|
||||||
names, trademarks, service marks, or product names of the Licensor,
|
|
||||||
except as required for reasonable and customary use in describing the
|
|
||||||
origin of the Work and reproducing the content of the NOTICE file.
|
|
||||||
|
|
||||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
||||||
agreed to in writing, Licensor provides the Work (and each
|
|
||||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
||||||
implied, including, without limitation, any warranties or conditions
|
|
||||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
||||||
appropriateness of using or redistributing the Work and assume any
|
|
||||||
risks associated with Your exercise of permissions under this License.
|
|
||||||
|
|
||||||
8. Limitation of Liability. In no event and under no legal theory,
|
|
||||||
whether in tort (including negligence), contract, or otherwise,
|
|
||||||
unless required by applicable law (such as deliberate and grossly
|
|
||||||
negligent acts) or agreed to in writing, shall any Contributor be
|
|
||||||
liable to You for damages, including any direct, indirect, special,
|
|
||||||
incidental, or consequential damages of any character arising as a
|
|
||||||
result of this License or out of the use or inability to use the
|
|
||||||
Work (including but not limited to damages for loss of goodwill,
|
|
||||||
work stoppage, computer failure or malfunction, or any and all
|
|
||||||
other commercial damages or losses), even if such Contributor
|
|
||||||
has been advised of the possibility of such damages.
|
|
||||||
|
|
||||||
9. Accepting Warranty or Additional Liability. While redistributing
|
|
||||||
the Work or Derivative Works thereof, You may choose to offer,
|
|
||||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
||||||
or other liability obligations and/or rights consistent with this
|
|
||||||
License. However, in accepting such obligations, You may act only
|
|
||||||
on Your own behalf and on Your sole responsibility, not on behalf
|
|
||||||
of any other Contributor, and only if You agree to indemnify,
|
|
||||||
defend, and hold each Contributor harmless for any liability
|
|
||||||
incurred by, or claims asserted against, such Contributor by reason
|
|
||||||
of your accepting any such warranty or additional liability.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
APPENDIX: How to apply the Apache License to your work.
|
|
||||||
|
|
||||||
To apply the Apache License to your work, attach the following
|
|
||||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
||||||
replaced with your own identifying information. (Don't include
|
|
||||||
the brackets!) The text should be enclosed in the appropriate
|
|
||||||
comment syntax for the file format. We also recommend that a
|
|
||||||
file or class name and description of purpose be included on the
|
|
||||||
same "printed page" as the copyright notice for easier
|
|
||||||
identification within third-party archives.
|
|
||||||
|
|
||||||
Copyright [yyyy] [name of copyright owner]
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
|
@ -1,23 +0,0 @@
|
||||||
// Copyright 2020 Google LLC
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
// Package field_mask aliases all exported identifiers in
|
|
||||||
// package "google.golang.org/protobuf/types/known/fieldmaskpb".
|
|
||||||
package field_mask
|
|
||||||
|
|
||||||
import "google.golang.org/protobuf/types/known/fieldmaskpb"
|
|
||||||
|
|
||||||
type FieldMask = fieldmaskpb.FieldMask
|
|
||||||
|
|
||||||
var File_google_protobuf_field_mask_proto = fieldmaskpb.File_google_protobuf_field_mask_proto
|
|
|
@ -226,7 +226,7 @@ type ValidatingAdmissionPolicySpec struct {
|
||||||
// +listType=map
|
// +listType=map
|
||||||
// +listMapKey=name
|
// +listMapKey=name
|
||||||
// +optional
|
// +optional
|
||||||
Variables []Variable `json:"variables" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,7,rep,name=variables"`
|
Variables []Variable `json:"variables,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,7,rep,name=variables"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type MatchCondition v1.MatchCondition
|
type MatchCondition v1.MatchCondition
|
||||||
|
|
|
@ -242,7 +242,7 @@ type ValidatingAdmissionPolicySpec struct {
|
||||||
// +listType=map
|
// +listType=map
|
||||||
// +listMapKey=name
|
// +listMapKey=name
|
||||||
// +optional
|
// +optional
|
||||||
Variables []Variable `json:"variables" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,7,rep,name=variables"`
|
Variables []Variable `json:"variables,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,7,rep,name=variables"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParamKind is a tuple of Group Kind and Version.
|
// ParamKind is a tuple of Group Kind and Version.
|
||||||
|
|
|
@ -229,8 +229,8 @@ message JobSpec {
|
||||||
// batch.kubernetes.io/job-index-failure-count annotation. It can only
|
// batch.kubernetes.io/job-index-failure-count annotation. It can only
|
||||||
// be set when Job's completionMode=Indexed, and the Pod's restart
|
// be set when Job's completionMode=Indexed, and the Pod's restart
|
||||||
// policy is Never. The field is immutable.
|
// policy is Never. The field is immutable.
|
||||||
// This field is alpha-level. It can be used when the `JobBackoffLimitPerIndex`
|
// This field is beta-level. It can be used when the `JobBackoffLimitPerIndex`
|
||||||
// feature gate is enabled (disabled by default).
|
// feature gate is enabled (enabled by default).
|
||||||
// +optional
|
// +optional
|
||||||
optional int32 backoffLimitPerIndex = 12;
|
optional int32 backoffLimitPerIndex = 12;
|
||||||
|
|
||||||
|
@ -242,8 +242,8 @@ message JobSpec {
|
||||||
// It can only be specified when backoffLimitPerIndex is set.
|
// It can only be specified when backoffLimitPerIndex is set.
|
||||||
// It can be null or up to completions. It is required and must be
|
// It can be null or up to completions. It is required and must be
|
||||||
// less than or equal to 10^4 when is completions greater than 10^5.
|
// less than or equal to 10^4 when is completions greater than 10^5.
|
||||||
// This field is alpha-level. It can be used when the `JobBackoffLimitPerIndex`
|
// This field is beta-level. It can be used when the `JobBackoffLimitPerIndex`
|
||||||
// feature gate is enabled (disabled by default).
|
// feature gate is enabled (enabled by default).
|
||||||
// +optional
|
// +optional
|
||||||
optional int32 maxFailedIndexes = 13;
|
optional int32 maxFailedIndexes = 13;
|
||||||
|
|
||||||
|
@ -326,7 +326,8 @@ message JobSpec {
|
||||||
//
|
//
|
||||||
// When using podFailurePolicy, Failed is the the only allowed value.
|
// When using podFailurePolicy, Failed is the the only allowed value.
|
||||||
// TerminatingOrFailed and Failed are allowed values when podFailurePolicy is not in use.
|
// TerminatingOrFailed and Failed are allowed values when podFailurePolicy is not in use.
|
||||||
// This is an alpha field. Enable JobPodReplacementPolicy to be able to use this field.
|
// This is an beta field. To use this, enable the JobPodReplacementPolicy feature toggle.
|
||||||
|
// This is on by default.
|
||||||
// +optional
|
// +optional
|
||||||
optional string podReplacementPolicy = 14;
|
optional string podReplacementPolicy = 14;
|
||||||
}
|
}
|
||||||
|
@ -375,8 +376,8 @@ message JobStatus {
|
||||||
// The number of pods which are terminating (in phase Pending or Running
|
// The number of pods which are terminating (in phase Pending or Running
|
||||||
// and have a deletionTimestamp).
|
// and have a deletionTimestamp).
|
||||||
//
|
//
|
||||||
// This field is alpha-level. The job controller populates the field when
|
// This field is beta-level. The job controller populates the field when
|
||||||
// the feature gate JobPodReplacementPolicy is enabled (disabled by default).
|
// the feature gate JobPodReplacementPolicy is enabled (enabled by default).
|
||||||
// +optional
|
// +optional
|
||||||
optional int32 terminating = 11;
|
optional int32 terminating = 11;
|
||||||
|
|
||||||
|
@ -398,8 +399,8 @@ message JobStatus {
|
||||||
// last element of the series, separated by a hyphen.
|
// last element of the series, separated by a hyphen.
|
||||||
// For example, if the failed indexes are 1, 3, 4, 5 and 7, they are
|
// For example, if the failed indexes are 1, 3, 4, 5 and 7, they are
|
||||||
// represented as "1,3-5,7".
|
// represented as "1,3-5,7".
|
||||||
// This field is alpha-level. It can be used when the `JobBackoffLimitPerIndex`
|
// This field is beta-level. It can be used when the `JobBackoffLimitPerIndex`
|
||||||
// feature gate is enabled (disabled by default).
|
// feature gate is enabled (enabled by default).
|
||||||
// +optional
|
// +optional
|
||||||
optional string failedIndexes = 10;
|
optional string failedIndexes = 10;
|
||||||
|
|
||||||
|
@ -421,9 +422,6 @@ message JobStatus {
|
||||||
optional UncountedTerminatedPods uncountedTerminatedPods = 8;
|
optional UncountedTerminatedPods uncountedTerminatedPods = 8;
|
||||||
|
|
||||||
// The number of pods which have a Ready condition.
|
// The number of pods which have a Ready condition.
|
||||||
//
|
|
||||||
// This field is beta-level. The job controller populates the field when
|
|
||||||
// the feature gate JobReadyPods is enabled (enabled by default).
|
|
||||||
// +optional
|
// +optional
|
||||||
optional int32 ready = 9;
|
optional int32 ready = 9;
|
||||||
}
|
}
|
||||||
|
@ -512,8 +510,8 @@ message PodFailurePolicyRule {
|
||||||
// running pods are terminated.
|
// running pods are terminated.
|
||||||
// - FailIndex: indicates that the pod's index is marked as Failed and will
|
// - FailIndex: indicates that the pod's index is marked as Failed and will
|
||||||
// not be restarted.
|
// not be restarted.
|
||||||
// This value is alpha-level. It can be used when the
|
// This value is beta-level. It can be used when the
|
||||||
// `JobBackoffLimitPerIndex` feature gate is enabled (disabled by default).
|
// `JobBackoffLimitPerIndex` feature gate is enabled (enabled by default).
|
||||||
// - Ignore: indicates that the counter towards the .backoffLimit is not
|
// - Ignore: indicates that the counter towards the .backoffLimit is not
|
||||||
// incremented and a replacement pod is created.
|
// incremented and a replacement pod is created.
|
||||||
// - Count: indicates that the pod is handled in the default way - the
|
// - Count: indicates that the pod is handled in the default way - the
|
||||||
|
|
|
@ -124,6 +124,7 @@ const (
|
||||||
// This is an action which might be taken on a pod failure - mark the
|
// This is an action which might be taken on a pod failure - mark the
|
||||||
// Job's index as failed to avoid restarts within this index. This action
|
// Job's index as failed to avoid restarts within this index. This action
|
||||||
// can only be used when backoffLimitPerIndex is set.
|
// can only be used when backoffLimitPerIndex is set.
|
||||||
|
// This value is beta-level.
|
||||||
PodFailurePolicyActionFailIndex PodFailurePolicyAction = "FailIndex"
|
PodFailurePolicyActionFailIndex PodFailurePolicyAction = "FailIndex"
|
||||||
|
|
||||||
// This is an action which might be taken on a pod failure - the counter towards
|
// This is an action which might be taken on a pod failure - the counter towards
|
||||||
|
@ -218,8 +219,8 @@ type PodFailurePolicyRule struct {
|
||||||
// running pods are terminated.
|
// running pods are terminated.
|
||||||
// - FailIndex: indicates that the pod's index is marked as Failed and will
|
// - FailIndex: indicates that the pod's index is marked as Failed and will
|
||||||
// not be restarted.
|
// not be restarted.
|
||||||
// This value is alpha-level. It can be used when the
|
// This value is beta-level. It can be used when the
|
||||||
// `JobBackoffLimitPerIndex` feature gate is enabled (disabled by default).
|
// `JobBackoffLimitPerIndex` feature gate is enabled (enabled by default).
|
||||||
// - Ignore: indicates that the counter towards the .backoffLimit is not
|
// - Ignore: indicates that the counter towards the .backoffLimit is not
|
||||||
// incremented and a replacement pod is created.
|
// incremented and a replacement pod is created.
|
||||||
// - Count: indicates that the pod is handled in the default way - the
|
// - Count: indicates that the pod is handled in the default way - the
|
||||||
|
@ -303,8 +304,8 @@ type JobSpec struct {
|
||||||
// batch.kubernetes.io/job-index-failure-count annotation. It can only
|
// batch.kubernetes.io/job-index-failure-count annotation. It can only
|
||||||
// be set when Job's completionMode=Indexed, and the Pod's restart
|
// be set when Job's completionMode=Indexed, and the Pod's restart
|
||||||
// policy is Never. The field is immutable.
|
// policy is Never. The field is immutable.
|
||||||
// This field is alpha-level. It can be used when the `JobBackoffLimitPerIndex`
|
// This field is beta-level. It can be used when the `JobBackoffLimitPerIndex`
|
||||||
// feature gate is enabled (disabled by default).
|
// feature gate is enabled (enabled by default).
|
||||||
// +optional
|
// +optional
|
||||||
BackoffLimitPerIndex *int32 `json:"backoffLimitPerIndex,omitempty" protobuf:"varint,12,opt,name=backoffLimitPerIndex"`
|
BackoffLimitPerIndex *int32 `json:"backoffLimitPerIndex,omitempty" protobuf:"varint,12,opt,name=backoffLimitPerIndex"`
|
||||||
|
|
||||||
|
@ -316,8 +317,8 @@ type JobSpec struct {
|
||||||
// It can only be specified when backoffLimitPerIndex is set.
|
// It can only be specified when backoffLimitPerIndex is set.
|
||||||
// It can be null or up to completions. It is required and must be
|
// It can be null or up to completions. It is required and must be
|
||||||
// less than or equal to 10^4 when is completions greater than 10^5.
|
// less than or equal to 10^4 when is completions greater than 10^5.
|
||||||
// This field is alpha-level. It can be used when the `JobBackoffLimitPerIndex`
|
// This field is beta-level. It can be used when the `JobBackoffLimitPerIndex`
|
||||||
// feature gate is enabled (disabled by default).
|
// feature gate is enabled (enabled by default).
|
||||||
// +optional
|
// +optional
|
||||||
MaxFailedIndexes *int32 `json:"maxFailedIndexes,omitempty" protobuf:"varint,13,opt,name=maxFailedIndexes"`
|
MaxFailedIndexes *int32 `json:"maxFailedIndexes,omitempty" protobuf:"varint,13,opt,name=maxFailedIndexes"`
|
||||||
|
|
||||||
|
@ -405,7 +406,8 @@ type JobSpec struct {
|
||||||
//
|
//
|
||||||
// When using podFailurePolicy, Failed is the the only allowed value.
|
// When using podFailurePolicy, Failed is the the only allowed value.
|
||||||
// TerminatingOrFailed and Failed are allowed values when podFailurePolicy is not in use.
|
// TerminatingOrFailed and Failed are allowed values when podFailurePolicy is not in use.
|
||||||
// This is an alpha field. Enable JobPodReplacementPolicy to be able to use this field.
|
// This is an beta field. To use this, enable the JobPodReplacementPolicy feature toggle.
|
||||||
|
// This is on by default.
|
||||||
// +optional
|
// +optional
|
||||||
PodReplacementPolicy *PodReplacementPolicy `json:"podReplacementPolicy,omitempty" protobuf:"bytes,14,opt,name=podReplacementPolicy,casttype=podReplacementPolicy"`
|
PodReplacementPolicy *PodReplacementPolicy `json:"podReplacementPolicy,omitempty" protobuf:"bytes,14,opt,name=podReplacementPolicy,casttype=podReplacementPolicy"`
|
||||||
}
|
}
|
||||||
|
@ -454,8 +456,8 @@ type JobStatus struct {
|
||||||
// The number of pods which are terminating (in phase Pending or Running
|
// The number of pods which are terminating (in phase Pending or Running
|
||||||
// and have a deletionTimestamp).
|
// and have a deletionTimestamp).
|
||||||
//
|
//
|
||||||
// This field is alpha-level. The job controller populates the field when
|
// This field is beta-level. The job controller populates the field when
|
||||||
// the feature gate JobPodReplacementPolicy is enabled (disabled by default).
|
// the feature gate JobPodReplacementPolicy is enabled (enabled by default).
|
||||||
// +optional
|
// +optional
|
||||||
Terminating *int32 `json:"terminating,omitempty" protobuf:"varint,11,opt,name=terminating"`
|
Terminating *int32 `json:"terminating,omitempty" protobuf:"varint,11,opt,name=terminating"`
|
||||||
|
|
||||||
|
@ -477,8 +479,8 @@ type JobStatus struct {
|
||||||
// last element of the series, separated by a hyphen.
|
// last element of the series, separated by a hyphen.
|
||||||
// For example, if the failed indexes are 1, 3, 4, 5 and 7, they are
|
// For example, if the failed indexes are 1, 3, 4, 5 and 7, they are
|
||||||
// represented as "1,3-5,7".
|
// represented as "1,3-5,7".
|
||||||
// This field is alpha-level. It can be used when the `JobBackoffLimitPerIndex`
|
// This field is beta-level. It can be used when the `JobBackoffLimitPerIndex`
|
||||||
// feature gate is enabled (disabled by default).
|
// feature gate is enabled (enabled by default).
|
||||||
// +optional
|
// +optional
|
||||||
FailedIndexes *string `json:"failedIndexes,omitempty" protobuf:"bytes,10,opt,name=failedIndexes"`
|
FailedIndexes *string `json:"failedIndexes,omitempty" protobuf:"bytes,10,opt,name=failedIndexes"`
|
||||||
|
|
||||||
|
@ -500,9 +502,6 @@ type JobStatus struct {
|
||||||
UncountedTerminatedPods *UncountedTerminatedPods `json:"uncountedTerminatedPods,omitempty" protobuf:"bytes,8,opt,name=uncountedTerminatedPods"`
|
UncountedTerminatedPods *UncountedTerminatedPods `json:"uncountedTerminatedPods,omitempty" protobuf:"bytes,8,opt,name=uncountedTerminatedPods"`
|
||||||
|
|
||||||
// The number of pods which have a Ready condition.
|
// The number of pods which have a Ready condition.
|
||||||
//
|
|
||||||
// This field is beta-level. The job controller populates the field when
|
|
||||||
// the feature gate JobReadyPods is enabled (enabled by default).
|
|
||||||
// +optional
|
// +optional
|
||||||
Ready *int32 `json:"ready,omitempty" protobuf:"varint,9,opt,name=ready"`
|
Ready *int32 `json:"ready,omitempty" protobuf:"varint,9,opt,name=ready"`
|
||||||
}
|
}
|
||||||
|
@ -535,6 +534,25 @@ const (
|
||||||
JobFailureTarget JobConditionType = "FailureTarget"
|
JobFailureTarget JobConditionType = "FailureTarget"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// JobReasonPodFailurePolicy reason indicates a job failure condition is added due to
|
||||||
|
// a failed pod matching a pod failure policy rule
|
||||||
|
// https://kep.k8s.io/3329
|
||||||
|
// This is currently a beta field.
|
||||||
|
JobReasonPodFailurePolicy string = "PodFailurePolicy"
|
||||||
|
// JobReasonBackOffLimitExceeded reason indicates that pods within a job have failed a number of
|
||||||
|
// times higher than backOffLimit times.
|
||||||
|
JobReasonBackoffLimitExceeded string = "BackoffLimitExceeded"
|
||||||
|
// JobReasponDeadlineExceeded means job duration is past ActiveDeadline
|
||||||
|
JobReasonDeadlineExceeded string = "DeadlineExceeded"
|
||||||
|
// JobReasonMaxFailedIndexesExceeded indicates that an indexed of a job failed
|
||||||
|
// This const is used in beta-level feature: https://kep.k8s.io/3850.
|
||||||
|
JobReasonMaxFailedIndexesExceeded string = "MaxFailedIndexesExceeded"
|
||||||
|
// JobReasonFailedIndexes means Job has failed indexes.
|
||||||
|
// This const is used in beta-level feature: https://kep.k8s.io/3850.
|
||||||
|
JobReasonFailedIndexes string = "FailedIndexes"
|
||||||
|
)
|
||||||
|
|
||||||
// JobCondition describes current state of a job.
|
// JobCondition describes current state of a job.
|
||||||
type JobCondition struct {
|
type JobCondition struct {
|
||||||
// Type of job condition, Complete or Failed.
|
// Type of job condition, Complete or Failed.
|
||||||
|
|
|
@ -117,15 +117,15 @@ var map_JobSpec = map[string]string{
|
||||||
"activeDeadlineSeconds": "Specifies the duration in seconds relative to the startTime that the job may be continuously active before the system tries to terminate it; value must be positive integer. If a Job is suspended (at creation or through an update), this timer will effectively be stopped and reset when the Job is resumed again.",
|
"activeDeadlineSeconds": "Specifies the duration in seconds relative to the startTime that the job may be continuously active before the system tries to terminate it; value must be positive integer. If a Job is suspended (at creation or through an update), this timer will effectively be stopped and reset when the Job is resumed again.",
|
||||||
"podFailurePolicy": "Specifies the policy of handling failed pods. In particular, it allows to specify the set of actions and conditions which need to be satisfied to take the associated action. If empty, the default behaviour applies - the counter of failed pods, represented by the jobs's .status.failed field, is incremented and it is checked against the backoffLimit. This field cannot be used in combination with restartPolicy=OnFailure.\n\nThis field is beta-level. It can be used when the `JobPodFailurePolicy` feature gate is enabled (enabled by default).",
|
"podFailurePolicy": "Specifies the policy of handling failed pods. In particular, it allows to specify the set of actions and conditions which need to be satisfied to take the associated action. If empty, the default behaviour applies - the counter of failed pods, represented by the jobs's .status.failed field, is incremented and it is checked against the backoffLimit. This field cannot be used in combination with restartPolicy=OnFailure.\n\nThis field is beta-level. It can be used when the `JobPodFailurePolicy` feature gate is enabled (enabled by default).",
|
||||||
"backoffLimit": "Specifies the number of retries before marking this job failed. Defaults to 6",
|
"backoffLimit": "Specifies the number of retries before marking this job failed. Defaults to 6",
|
||||||
"backoffLimitPerIndex": "Specifies the limit for the number of retries within an index before marking this index as failed. When enabled the number of failures per index is kept in the pod's batch.kubernetes.io/job-index-failure-count annotation. It can only be set when Job's completionMode=Indexed, and the Pod's restart policy is Never. The field is immutable. This field is alpha-level. It can be used when the `JobBackoffLimitPerIndex` feature gate is enabled (disabled by default).",
|
"backoffLimitPerIndex": "Specifies the limit for the number of retries within an index before marking this index as failed. When enabled the number of failures per index is kept in the pod's batch.kubernetes.io/job-index-failure-count annotation. It can only be set when Job's completionMode=Indexed, and the Pod's restart policy is Never. The field is immutable. This field is beta-level. It can be used when the `JobBackoffLimitPerIndex` feature gate is enabled (enabled by default).",
|
||||||
"maxFailedIndexes": "Specifies the maximal number of failed indexes before marking the Job as failed, when backoffLimitPerIndex is set. Once the number of failed indexes exceeds this number the entire Job is marked as Failed and its execution is terminated. When left as null the job continues execution of all of its indexes and is marked with the `Complete` Job condition. It can only be specified when backoffLimitPerIndex is set. It can be null or up to completions. It is required and must be less than or equal to 10^4 when is completions greater than 10^5. This field is alpha-level. It can be used when the `JobBackoffLimitPerIndex` feature gate is enabled (disabled by default).",
|
"maxFailedIndexes": "Specifies the maximal number of failed indexes before marking the Job as failed, when backoffLimitPerIndex is set. Once the number of failed indexes exceeds this number the entire Job is marked as Failed and its execution is terminated. When left as null the job continues execution of all of its indexes and is marked with the `Complete` Job condition. It can only be specified when backoffLimitPerIndex is set. It can be null or up to completions. It is required and must be less than or equal to 10^4 when is completions greater than 10^5. This field is beta-level. It can be used when the `JobBackoffLimitPerIndex` feature gate is enabled (enabled by default).",
|
||||||
"selector": "A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors",
|
"selector": "A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors",
|
||||||
"manualSelector": "manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector",
|
"manualSelector": "manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector",
|
||||||
"template": "Describes the pod that will be created when executing a job. The only allowed template.spec.restartPolicy values are \"Never\" or \"OnFailure\". More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/",
|
"template": "Describes the pod that will be created when executing a job. The only allowed template.spec.restartPolicy values are \"Never\" or \"OnFailure\". More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/",
|
||||||
"ttlSecondsAfterFinished": "ttlSecondsAfterFinished limits the lifetime of a Job that has finished execution (either Complete or Failed). If this field is set, ttlSecondsAfterFinished after the Job finishes, it is eligible to be automatically deleted. When the Job is being deleted, its lifecycle guarantees (e.g. finalizers) will be honored. If this field is unset, the Job won't be automatically deleted. If this field is set to zero, the Job becomes eligible to be deleted immediately after it finishes.",
|
"ttlSecondsAfterFinished": "ttlSecondsAfterFinished limits the lifetime of a Job that has finished execution (either Complete or Failed). If this field is set, ttlSecondsAfterFinished after the Job finishes, it is eligible to be automatically deleted. When the Job is being deleted, its lifecycle guarantees (e.g. finalizers) will be honored. If this field is unset, the Job won't be automatically deleted. If this field is set to zero, the Job becomes eligible to be deleted immediately after it finishes.",
|
||||||
"completionMode": "completionMode specifies how Pod completions are tracked. It can be `NonIndexed` (default) or `Indexed`.\n\n`NonIndexed` means that the Job is considered complete when there have been .spec.completions successfully completed Pods. Each Pod completion is homologous to each other.\n\n`Indexed` means that the Pods of a Job get an associated completion index from 0 to (.spec.completions - 1), available in the annotation batch.kubernetes.io/job-completion-index. The Job is considered complete when there is one successfully completed Pod for each index. When value is `Indexed`, .spec.completions must be specified and `.spec.parallelism` must be less than or equal to 10^5. In addition, The Pod name takes the form `$(job-name)-$(index)-$(random-string)`, the Pod hostname takes the form `$(job-name)-$(index)`.\n\nMore completion modes can be added in the future. If the Job controller observes a mode that it doesn't recognize, which is possible during upgrades due to version skew, the controller skips updates for the Job.",
|
"completionMode": "completionMode specifies how Pod completions are tracked. It can be `NonIndexed` (default) or `Indexed`.\n\n`NonIndexed` means that the Job is considered complete when there have been .spec.completions successfully completed Pods. Each Pod completion is homologous to each other.\n\n`Indexed` means that the Pods of a Job get an associated completion index from 0 to (.spec.completions - 1), available in the annotation batch.kubernetes.io/job-completion-index. The Job is considered complete when there is one successfully completed Pod for each index. When value is `Indexed`, .spec.completions must be specified and `.spec.parallelism` must be less than or equal to 10^5. In addition, The Pod name takes the form `$(job-name)-$(index)-$(random-string)`, the Pod hostname takes the form `$(job-name)-$(index)`.\n\nMore completion modes can be added in the future. If the Job controller observes a mode that it doesn't recognize, which is possible during upgrades due to version skew, the controller skips updates for the Job.",
|
||||||
"suspend": "suspend specifies whether the Job controller should create Pods or not. If a Job is created with suspend set to true, no Pods are created by the Job controller. If a Job is suspended after creation (i.e. the flag goes from false to true), the Job controller will delete all active Pods associated with this Job. Users must design their workload to gracefully handle this. Suspending a Job will reset the StartTime field of the Job, effectively resetting the ActiveDeadlineSeconds timer too. Defaults to false.",
|
"suspend": "suspend specifies whether the Job controller should create Pods or not. If a Job is created with suspend set to true, no Pods are created by the Job controller. If a Job is suspended after creation (i.e. the flag goes from false to true), the Job controller will delete all active Pods associated with this Job. Users must design their workload to gracefully handle this. Suspending a Job will reset the StartTime field of the Job, effectively resetting the ActiveDeadlineSeconds timer too. Defaults to false.",
|
||||||
"podReplacementPolicy": "podReplacementPolicy specifies when to create replacement Pods. Possible values are: - TerminatingOrFailed means that we recreate pods\n when they are terminating (has a metadata.deletionTimestamp) or failed.\n- Failed means to wait until a previously created Pod is fully terminated (has phase\n Failed or Succeeded) before creating a replacement Pod.\n\nWhen using podFailurePolicy, Failed is the the only allowed value. TerminatingOrFailed and Failed are allowed values when podFailurePolicy is not in use. This is an alpha field. Enable JobPodReplacementPolicy to be able to use this field.",
|
"podReplacementPolicy": "podReplacementPolicy specifies when to create replacement Pods. Possible values are: - TerminatingOrFailed means that we recreate pods\n when they are terminating (has a metadata.deletionTimestamp) or failed.\n- Failed means to wait until a previously created Pod is fully terminated (has phase\n Failed or Succeeded) before creating a replacement Pod.\n\nWhen using podFailurePolicy, Failed is the the only allowed value. TerminatingOrFailed and Failed are allowed values when podFailurePolicy is not in use. This is an beta field. To use this, enable the JobPodReplacementPolicy feature toggle. This is on by default.",
|
||||||
}
|
}
|
||||||
|
|
||||||
func (JobSpec) SwaggerDoc() map[string]string {
|
func (JobSpec) SwaggerDoc() map[string]string {
|
||||||
|
@ -140,11 +140,11 @@ var map_JobStatus = map[string]string{
|
||||||
"active": "The number of pending and running pods.",
|
"active": "The number of pending and running pods.",
|
||||||
"succeeded": "The number of pods which reached phase Succeeded.",
|
"succeeded": "The number of pods which reached phase Succeeded.",
|
||||||
"failed": "The number of pods which reached phase Failed.",
|
"failed": "The number of pods which reached phase Failed.",
|
||||||
"terminating": "The number of pods which are terminating (in phase Pending or Running and have a deletionTimestamp).\n\nThis field is alpha-level. The job controller populates the field when the feature gate JobPodReplacementPolicy is enabled (disabled by default).",
|
"terminating": "The number of pods which are terminating (in phase Pending or Running and have a deletionTimestamp).\n\nThis field is beta-level. The job controller populates the field when the feature gate JobPodReplacementPolicy is enabled (enabled by default).",
|
||||||
"completedIndexes": "completedIndexes holds the completed indexes when .spec.completionMode = \"Indexed\" in a text format. The indexes are represented as decimal integers separated by commas. The numbers are listed in increasing order. Three or more consecutive numbers are compressed and represented by the first and last element of the series, separated by a hyphen. For example, if the completed indexes are 1, 3, 4, 5 and 7, they are represented as \"1,3-5,7\".",
|
"completedIndexes": "completedIndexes holds the completed indexes when .spec.completionMode = \"Indexed\" in a text format. The indexes are represented as decimal integers separated by commas. The numbers are listed in increasing order. Three or more consecutive numbers are compressed and represented by the first and last element of the series, separated by a hyphen. For example, if the completed indexes are 1, 3, 4, 5 and 7, they are represented as \"1,3-5,7\".",
|
||||||
"failedIndexes": "FailedIndexes holds the failed indexes when backoffLimitPerIndex=true. The indexes are represented in the text format analogous as for the `completedIndexes` field, ie. they are kept as decimal integers separated by commas. The numbers are listed in increasing order. Three or more consecutive numbers are compressed and represented by the first and last element of the series, separated by a hyphen. For example, if the failed indexes are 1, 3, 4, 5 and 7, they are represented as \"1,3-5,7\". This field is alpha-level. It can be used when the `JobBackoffLimitPerIndex` feature gate is enabled (disabled by default).",
|
"failedIndexes": "FailedIndexes holds the failed indexes when backoffLimitPerIndex=true. The indexes are represented in the text format analogous as for the `completedIndexes` field, ie. they are kept as decimal integers separated by commas. The numbers are listed in increasing order. Three or more consecutive numbers are compressed and represented by the first and last element of the series, separated by a hyphen. For example, if the failed indexes are 1, 3, 4, 5 and 7, they are represented as \"1,3-5,7\". This field is beta-level. It can be used when the `JobBackoffLimitPerIndex` feature gate is enabled (enabled by default).",
|
||||||
"uncountedTerminatedPods": "uncountedTerminatedPods holds the UIDs of Pods that have terminated but the job controller hasn't yet accounted for in the status counters.\n\nThe job controller creates pods with a finalizer. When a pod terminates (succeeded or failed), the controller does three steps to account for it in the job status:\n\n1. Add the pod UID to the arrays in this field. 2. Remove the pod finalizer. 3. Remove the pod UID from the arrays while increasing the corresponding\n counter.\n\nOld jobs might not be tracked using this field, in which case the field remains null.",
|
"uncountedTerminatedPods": "uncountedTerminatedPods holds the UIDs of Pods that have terminated but the job controller hasn't yet accounted for in the status counters.\n\nThe job controller creates pods with a finalizer. When a pod terminates (succeeded or failed), the controller does three steps to account for it in the job status:\n\n1. Add the pod UID to the arrays in this field. 2. Remove the pod finalizer. 3. Remove the pod UID from the arrays while increasing the corresponding\n counter.\n\nOld jobs might not be tracked using this field, in which case the field remains null.",
|
||||||
"ready": "The number of pods which have a Ready condition.\n\nThis field is beta-level. The job controller populates the field when the feature gate JobReadyPods is enabled (enabled by default).",
|
"ready": "The number of pods which have a Ready condition.",
|
||||||
}
|
}
|
||||||
|
|
||||||
func (JobStatus) SwaggerDoc() map[string]string {
|
func (JobStatus) SwaggerDoc() map[string]string {
|
||||||
|
@ -193,7 +193,7 @@ func (PodFailurePolicyOnPodConditionsPattern) SwaggerDoc() map[string]string {
|
||||||
|
|
||||||
var map_PodFailurePolicyRule = map[string]string{
|
var map_PodFailurePolicyRule = map[string]string{
|
||||||
"": "PodFailurePolicyRule describes how a pod failure is handled when the requirements are met. One of onExitCodes and onPodConditions, but not both, can be used in each rule.",
|
"": "PodFailurePolicyRule describes how a pod failure is handled when the requirements are met. One of onExitCodes and onPodConditions, but not both, can be used in each rule.",
|
||||||
"action": "Specifies the action taken on a pod failure when the requirements are satisfied. Possible values are:\n\n- FailJob: indicates that the pod's job is marked as Failed and all\n running pods are terminated.\n- FailIndex: indicates that the pod's index is marked as Failed and will\n not be restarted.\n This value is alpha-level. It can be used when the\n `JobBackoffLimitPerIndex` feature gate is enabled (disabled by default).\n- Ignore: indicates that the counter towards the .backoffLimit is not\n incremented and a replacement pod is created.\n- Count: indicates that the pod is handled in the default way - the\n counter towards the .backoffLimit is incremented.\nAdditional values are considered to be added in the future. Clients should react to an unknown action by skipping the rule.",
|
"action": "Specifies the action taken on a pod failure when the requirements are satisfied. Possible values are:\n\n- FailJob: indicates that the pod's job is marked as Failed and all\n running pods are terminated.\n- FailIndex: indicates that the pod's index is marked as Failed and will\n not be restarted.\n This value is beta-level. It can be used when the\n `JobBackoffLimitPerIndex` feature gate is enabled (enabled by default).\n- Ignore: indicates that the counter towards the .backoffLimit is not\n incremented and a replacement pod is created.\n- Count: indicates that the pod is handled in the default way - the\n counter towards the .backoffLimit is incremented.\nAdditional values are considered to be added in the future. Clients should react to an unknown action by skipping the rule.",
|
||||||
"onExitCodes": "Represents the requirement on the container exit codes.",
|
"onExitCodes": "Represents the requirement on the container exit codes.",
|
||||||
"onPodConditions": "Represents the requirement on the pod conditions. The requirement is represented as a list of pod condition patterns. The requirement is satisfied if at least one pattern matches an actual pod condition. At most 20 elements are allowed.",
|
"onPodConditions": "Represents the requirement on the pod conditions. The requirement is represented as a list of pod condition patterns. The requirement is satisfied if at least one pattern matches an actual pod condition. At most 20 elements are allowed.",
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -228,10 +228,8 @@ message CSIPersistentVolumeSource {
|
||||||
// nodeExpandSecretRef is a reference to the secret object containing
|
// nodeExpandSecretRef is a reference to the secret object containing
|
||||||
// sensitive information to pass to the CSI driver to complete the CSI
|
// sensitive information to pass to the CSI driver to complete the CSI
|
||||||
// NodeExpandVolume call.
|
// NodeExpandVolume call.
|
||||||
// This is a beta field which is enabled default by CSINodeExpandSecret feature gate.
|
|
||||||
// This field is optional, may be omitted if no secret is required. If the
|
// This field is optional, may be omitted if no secret is required. If the
|
||||||
// secret object contains more than one secret, all secrets are passed.
|
// secret object contains more than one secret, all secrets are passed.
|
||||||
// +featureGate=CSINodeExpandSecret
|
|
||||||
// +optional
|
// +optional
|
||||||
optional SecretReference nodeExpandSecretRef = 10;
|
optional SecretReference nodeExpandSecretRef = 10;
|
||||||
}
|
}
|
||||||
|
@ -433,6 +431,40 @@ message ClientIPConfig {
|
||||||
optional int32 timeoutSeconds = 1;
|
optional int32 timeoutSeconds = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ClusterTrustBundleProjection describes how to select a set of
|
||||||
|
// ClusterTrustBundle objects and project their contents into the pod
|
||||||
|
// filesystem.
|
||||||
|
message ClusterTrustBundleProjection {
|
||||||
|
// Select a single ClusterTrustBundle by object name. Mutually-exclusive
|
||||||
|
// with signerName and labelSelector.
|
||||||
|
// +optional
|
||||||
|
optional string name = 1;
|
||||||
|
|
||||||
|
// Select all ClusterTrustBundles that match this signer name.
|
||||||
|
// Mutually-exclusive with name. The contents of all selected
|
||||||
|
// ClusterTrustBundles will be unified and deduplicated.
|
||||||
|
// +optional
|
||||||
|
optional string signerName = 2;
|
||||||
|
|
||||||
|
// Select all ClusterTrustBundles that match this label selector. Only has
|
||||||
|
// effect if signerName is set. Mutually-exclusive with name. If unset,
|
||||||
|
// interpreted as "match nothing". If set but empty, interpreted as "match
|
||||||
|
// everything".
|
||||||
|
// +optional
|
||||||
|
optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector labelSelector = 3;
|
||||||
|
|
||||||
|
// If true, don't block pod startup if the referenced ClusterTrustBundle(s)
|
||||||
|
// aren't available. If using name, then the named ClusterTrustBundle is
|
||||||
|
// allowed not to exist. If using signerName, then the combination of
|
||||||
|
// signerName and labelSelector is allowed to match zero
|
||||||
|
// ClusterTrustBundles.
|
||||||
|
// +optional
|
||||||
|
optional bool optional = 5;
|
||||||
|
|
||||||
|
// Relative path from the volume root to write the bundle.
|
||||||
|
optional string path = 4;
|
||||||
|
}
|
||||||
|
|
||||||
// Information about the condition of a component.
|
// Information about the condition of a component.
|
||||||
message ComponentCondition {
|
message ComponentCondition {
|
||||||
// Type of condition for a component.
|
// Type of condition for a component.
|
||||||
|
@ -1159,7 +1191,7 @@ message EndpointPort {
|
||||||
// RFC-6335 and https://www.iana.org/assignments/service-names).
|
// RFC-6335 and https://www.iana.org/assignments/service-names).
|
||||||
//
|
//
|
||||||
// * Kubernetes-defined prefixed names:
|
// * Kubernetes-defined prefixed names:
|
||||||
// * 'kubernetes.io/h2c' - HTTP/2 over cleartext as described in https://www.rfc-editor.org/rfc/rfc7540
|
// * 'kubernetes.io/h2c' - HTTP/2 prior knowledge over cleartext as described in https://www.rfc-editor.org/rfc/rfc9113.html#name-starting-http-2-with-prior-
|
||||||
// * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455
|
// * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455
|
||||||
// * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455
|
// * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455
|
||||||
//
|
//
|
||||||
|
@ -2088,6 +2120,11 @@ message LifecycleHandler {
|
||||||
// lifecycle hooks will fail in runtime when tcp handler is specified.
|
// lifecycle hooks will fail in runtime when tcp handler is specified.
|
||||||
// +optional
|
// +optional
|
||||||
optional TCPSocketAction tcpSocket = 3;
|
optional TCPSocketAction tcpSocket = 3;
|
||||||
|
|
||||||
|
// Sleep represents the duration that the container should sleep before being terminated.
|
||||||
|
// +featureGate=PodLifecycleSleepAction
|
||||||
|
// +optional
|
||||||
|
optional SleepAction sleep = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
// LimitRange sets resource usage limits for each kind of resource in a Namespace.
|
// LimitRange sets resource usage limits for each kind of resource in a Namespace.
|
||||||
|
@ -2171,6 +2208,15 @@ message LoadBalancerIngress {
|
||||||
// +optional
|
// +optional
|
||||||
optional string hostname = 2;
|
optional string hostname = 2;
|
||||||
|
|
||||||
|
// IPMode specifies how the load-balancer IP behaves, and may only be specified when the ip field is specified.
|
||||||
|
// Setting this to "VIP" indicates that traffic is delivered to the node with
|
||||||
|
// the destination set to the load-balancer's IP and port.
|
||||||
|
// Setting this to "Proxy" indicates that traffic is delivered to the node or pod with
|
||||||
|
// the destination set to the node's IP and node port or the pod's IP and port.
|
||||||
|
// Service implementations may use this information to adjust traffic routing.
|
||||||
|
// +optional
|
||||||
|
optional string ipMode = 3;
|
||||||
|
|
||||||
// Ports is a list of records of service ports
|
// Ports is a list of records of service ports
|
||||||
// If used, every port defined in the service should have an entry in it
|
// If used, every port defined in the service should have an entry in it
|
||||||
// +listType=atomic
|
// +listType=atomic
|
||||||
|
@ -2211,6 +2257,24 @@ message LocalVolumeSource {
|
||||||
optional string fsType = 2;
|
optional string fsType = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation
|
||||||
|
message ModifyVolumeStatus {
|
||||||
|
// targetVolumeAttributesClassName is the name of the VolumeAttributesClass the PVC currently being reconciled
|
||||||
|
optional string targetVolumeAttributesClassName = 1;
|
||||||
|
|
||||||
|
// status is the status of the ControllerModifyVolume operation. It can be in any of following states:
|
||||||
|
// - Pending
|
||||||
|
// Pending indicates that the PersistentVolumeClaim cannot be modified due to unmet requirements, such as
|
||||||
|
// the specified VolumeAttributesClass not existing.
|
||||||
|
// - InProgress
|
||||||
|
// InProgress indicates that the volume is being modified.
|
||||||
|
// - Infeasible
|
||||||
|
// Infeasible indicates that the request has been rejected as invalid by the CSI driver. To
|
||||||
|
// resolve the error, a valid VolumeAttributesClass needs to be specified.
|
||||||
|
// Note: New statuses can be added in the future. Consumers should check for unknown statuses and fail appropriately.
|
||||||
|
optional string status = 2;
|
||||||
|
}
|
||||||
|
|
||||||
// Represents an NFS mount that lasts the lifetime of a pod.
|
// Represents an NFS mount that lasts the lifetime of a pod.
|
||||||
// NFS volumes do not support ownership management or SELinux relabeling.
|
// NFS volumes do not support ownership management or SELinux relabeling.
|
||||||
message NFSVolumeSource {
|
message NFSVolumeSource {
|
||||||
|
@ -2816,7 +2880,7 @@ message PersistentVolumeClaimSpec {
|
||||||
// status field of the claim.
|
// status field of the claim.
|
||||||
// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
|
// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
|
||||||
// +optional
|
// +optional
|
||||||
optional ResourceRequirements resources = 2;
|
optional VolumeResourceRequirements resources = 2;
|
||||||
|
|
||||||
// volumeName is the binding reference to the PersistentVolume backing this claim.
|
// volumeName is the binding reference to the PersistentVolume backing this claim.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -2868,6 +2932,22 @@ message PersistentVolumeClaimSpec {
|
||||||
// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
|
// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
|
||||||
// +optional
|
// +optional
|
||||||
optional TypedObjectReference dataSourceRef = 8;
|
optional TypedObjectReference dataSourceRef = 8;
|
||||||
|
|
||||||
|
// volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
|
||||||
|
// If specified, the CSI driver will create or update the volume with the attributes defined
|
||||||
|
// in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
|
||||||
|
// it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass
|
||||||
|
// will be applied to the claim but it's not allowed to reset this field to empty string once it is set.
|
||||||
|
// If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass
|
||||||
|
// will be set by the persistentvolume controller if it exists.
|
||||||
|
// If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be
|
||||||
|
// set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
|
||||||
|
// exists.
|
||||||
|
// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#volumeattributesclass
|
||||||
|
// (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.
|
||||||
|
// +featureGate=VolumeAttributesClass
|
||||||
|
// +optional
|
||||||
|
optional string volumeAttributesClassName = 9;
|
||||||
}
|
}
|
||||||
|
|
||||||
// PersistentVolumeClaimStatus is the current status of a persistent volume claim.
|
// PersistentVolumeClaimStatus is the current status of a persistent volume claim.
|
||||||
|
@ -2957,6 +3037,20 @@ message PersistentVolumeClaimStatus {
|
||||||
// +mapType=granular
|
// +mapType=granular
|
||||||
// +optional
|
// +optional
|
||||||
map<string, string> allocatedResourceStatuses = 7;
|
map<string, string> allocatedResourceStatuses = 7;
|
||||||
|
|
||||||
|
// currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using.
|
||||||
|
// When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim
|
||||||
|
// This is an alpha field and requires enabling VolumeAttributesClass feature.
|
||||||
|
// +featureGate=VolumeAttributesClass
|
||||||
|
// +optional
|
||||||
|
optional string currentVolumeAttributesClassName = 8;
|
||||||
|
|
||||||
|
// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation.
|
||||||
|
// When this is unset, there is no ModifyVolume operation being attempted.
|
||||||
|
// This is an alpha field and requires enabling VolumeAttributesClass feature.
|
||||||
|
// +featureGate=VolumeAttributesClass
|
||||||
|
// +optional
|
||||||
|
optional ModifyVolumeStatus modifyVolumeStatus = 9;
|
||||||
}
|
}
|
||||||
|
|
||||||
// PersistentVolumeClaimTemplate is used to produce
|
// PersistentVolumeClaimTemplate is used to produce
|
||||||
|
@ -3161,6 +3255,17 @@ message PersistentVolumeSpec {
|
||||||
// This field influences the scheduling of pods that use this volume.
|
// This field influences the scheduling of pods that use this volume.
|
||||||
// +optional
|
// +optional
|
||||||
optional VolumeNodeAffinity nodeAffinity = 9;
|
optional VolumeNodeAffinity nodeAffinity = 9;
|
||||||
|
|
||||||
|
// Name of VolumeAttributesClass to which this persistent volume belongs. Empty value
|
||||||
|
// is not allowed. When this field is not set, it indicates that this volume does not belong to any
|
||||||
|
// VolumeAttributesClass. This field is mutable and can be changed by the CSI driver
|
||||||
|
// after a volume has been updated successfully to a new class.
|
||||||
|
// For an unbound PersistentVolume, the volumeAttributesClassName will be matched with unbound
|
||||||
|
// PersistentVolumeClaims during the binding process.
|
||||||
|
// This is an alpha field and requires enabling VolumeAttributesClass feature.
|
||||||
|
// +featureGate=VolumeAttributesClass
|
||||||
|
// +optional
|
||||||
|
optional string volumeAttributesClassName = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
// PersistentVolumeStatus is the current status of a persistent volume.
|
// PersistentVolumeStatus is the current status of a persistent volume.
|
||||||
|
@ -3181,7 +3286,7 @@ message PersistentVolumeStatus {
|
||||||
|
|
||||||
// lastPhaseTransitionTime is the time the phase transitioned from one to another
|
// lastPhaseTransitionTime is the time the phase transitioned from one to another
|
||||||
// and automatically resets to current time everytime a volume phase transitions.
|
// and automatically resets to current time everytime a volume phase transitions.
|
||||||
// This is an alpha field and requires enabling PersistentVolumeLastPhaseTransitionTime feature.
|
// This is a beta field and requires the PersistentVolumeLastPhaseTransitionTime feature to be enabled (enabled by default).
|
||||||
// +featureGate=PersistentVolumeLastPhaseTransitionTime
|
// +featureGate=PersistentVolumeLastPhaseTransitionTime
|
||||||
// +optional
|
// +optional
|
||||||
optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastPhaseTransitionTime = 4;
|
optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastPhaseTransitionTime = 4;
|
||||||
|
@ -3253,6 +3358,7 @@ message PodAffinity {
|
||||||
// a pod of the set of pods is running
|
// a pod of the set of pods is running
|
||||||
message PodAffinityTerm {
|
message PodAffinityTerm {
|
||||||
// A label query over a set of resources, in this case pods.
|
// A label query over a set of resources, in this case pods.
|
||||||
|
// If it's null, this PodAffinityTerm matches with no Pods.
|
||||||
// +optional
|
// +optional
|
||||||
optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector labelSelector = 1;
|
optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector labelSelector = 1;
|
||||||
|
|
||||||
|
@ -3277,6 +3383,32 @@ message PodAffinityTerm {
|
||||||
// An empty selector ({}) matches all namespaces.
|
// An empty selector ({}) matches all namespaces.
|
||||||
// +optional
|
// +optional
|
||||||
optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector namespaceSelector = 4;
|
optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector namespaceSelector = 4;
|
||||||
|
|
||||||
|
// MatchLabelKeys is a set of pod label keys to select which pods will
|
||||||
|
// be taken into consideration. The keys are used to lookup values from the
|
||||||
|
// incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
|
||||||
|
// to select the group of existing pods which pods will be taken into consideration
|
||||||
|
// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
|
||||||
|
// pod labels will be ignored. The default value is empty.
|
||||||
|
// The same key is forbidden to exist in both MatchLabelKeys and LabelSelector.
|
||||||
|
// Also, MatchLabelKeys cannot be set when LabelSelector isn't set.
|
||||||
|
// This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
|
||||||
|
// +listType=atomic
|
||||||
|
// +optional
|
||||||
|
repeated string matchLabelKeys = 5;
|
||||||
|
|
||||||
|
// MismatchLabelKeys is a set of pod label keys to select which pods will
|
||||||
|
// be taken into consideration. The keys are used to lookup values from the
|
||||||
|
// incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
|
||||||
|
// to select the group of existing pods which pods will be taken into consideration
|
||||||
|
// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
|
||||||
|
// pod labels will be ignored. The default value is empty.
|
||||||
|
// The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector.
|
||||||
|
// Also, MismatchLabelKeys cannot be set when LabelSelector isn't set.
|
||||||
|
// This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
|
||||||
|
// +listType=atomic
|
||||||
|
// +optional
|
||||||
|
repeated string mismatchLabelKeys = 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pod anti affinity is a group of inter pod anti affinity scheduling rules.
|
// Pod anti affinity is a group of inter pod anti affinity scheduling rules.
|
||||||
|
@ -5250,7 +5382,7 @@ message ServicePort {
|
||||||
// RFC-6335 and https://www.iana.org/assignments/service-names).
|
// RFC-6335 and https://www.iana.org/assignments/service-names).
|
||||||
//
|
//
|
||||||
// * Kubernetes-defined prefixed names:
|
// * Kubernetes-defined prefixed names:
|
||||||
// * 'kubernetes.io/h2c' - HTTP/2 over cleartext as described in https://www.rfc-editor.org/rfc/rfc7540
|
// * 'kubernetes.io/h2c' - HTTP/2 prior knowledge over cleartext as described in https://www.rfc-editor.org/rfc/rfc9113.html#name-starting-http-2-with-prior-
|
||||||
// * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455
|
// * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455
|
||||||
// * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455
|
// * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455
|
||||||
//
|
//
|
||||||
|
@ -5553,6 +5685,12 @@ message SessionAffinityConfig {
|
||||||
optional ClientIPConfig clientIP = 1;
|
optional ClientIPConfig clientIP = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SleepAction describes a "sleep" action.
|
||||||
|
message SleepAction {
|
||||||
|
// Seconds is the number of seconds to sleep.
|
||||||
|
optional int64 seconds = 1;
|
||||||
|
}
|
||||||
|
|
||||||
// Represents a StorageOS persistent volume resource.
|
// Represents a StorageOS persistent volume resource.
|
||||||
message StorageOSPersistentVolumeSource {
|
message StorageOSPersistentVolumeSource {
|
||||||
// volumeName is the human-readable name of the StorageOS volume. Volume
|
// volumeName is the human-readable name of the StorageOS volume. Volume
|
||||||
|
@ -5960,6 +6098,39 @@ message VolumeProjection {
|
||||||
// serviceAccountToken is information about the serviceAccountToken data to project
|
// serviceAccountToken is information about the serviceAccountToken data to project
|
||||||
// +optional
|
// +optional
|
||||||
optional ServiceAccountTokenProjection serviceAccountToken = 4;
|
optional ServiceAccountTokenProjection serviceAccountToken = 4;
|
||||||
|
|
||||||
|
// ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
|
||||||
|
// of ClusterTrustBundle objects in an auto-updating file.
|
||||||
|
//
|
||||||
|
// Alpha, gated by the ClusterTrustBundleProjection feature gate.
|
||||||
|
//
|
||||||
|
// ClusterTrustBundle objects can either be selected by name, or by the
|
||||||
|
// combination of signer name and a label selector.
|
||||||
|
//
|
||||||
|
// Kubelet performs aggressive normalization of the PEM contents written
|
||||||
|
// into the pod filesystem. Esoteric PEM features such as inter-block
|
||||||
|
// comments and block headers are stripped. Certificates are deduplicated.
|
||||||
|
// The ordering of certificates within the file is arbitrary, and Kubelet
|
||||||
|
// may change the order over time.
|
||||||
|
//
|
||||||
|
// +featureGate=ClusterTrustBundleProjection
|
||||||
|
// +optional
|
||||||
|
optional ClusterTrustBundleProjection clusterTrustBundle = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
// VolumeResourceRequirements describes the storage resource requirements for a volume.
|
||||||
|
message VolumeResourceRequirements {
|
||||||
|
// Limits describes the maximum amount of compute resources allowed.
|
||||||
|
// More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
|
||||||
|
// +optional
|
||||||
|
map<string, k8s.io.apimachinery.pkg.api.resource.Quantity> limits = 1;
|
||||||
|
|
||||||
|
// Requests describes the minimum amount of compute resources required.
|
||||||
|
// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
|
||||||
|
// otherwise to an implementation-defined value. Requests cannot exceed Limits.
|
||||||
|
// More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
|
||||||
|
// +optional
|
||||||
|
map<string, k8s.io.apimachinery.pkg.api.resource.Quantity> requests = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Represents the source of a volume to mount.
|
// Represents the source of a volume to mount.
|
||||||
|
|
|
@ -363,6 +363,16 @@ type PersistentVolumeSpec struct {
|
||||||
// This field influences the scheduling of pods that use this volume.
|
// This field influences the scheduling of pods that use this volume.
|
||||||
// +optional
|
// +optional
|
||||||
NodeAffinity *VolumeNodeAffinity `json:"nodeAffinity,omitempty" protobuf:"bytes,9,opt,name=nodeAffinity"`
|
NodeAffinity *VolumeNodeAffinity `json:"nodeAffinity,omitempty" protobuf:"bytes,9,opt,name=nodeAffinity"`
|
||||||
|
// Name of VolumeAttributesClass to which this persistent volume belongs. Empty value
|
||||||
|
// is not allowed. When this field is not set, it indicates that this volume does not belong to any
|
||||||
|
// VolumeAttributesClass. This field is mutable and can be changed by the CSI driver
|
||||||
|
// after a volume has been updated successfully to a new class.
|
||||||
|
// For an unbound PersistentVolume, the volumeAttributesClassName will be matched with unbound
|
||||||
|
// PersistentVolumeClaims during the binding process.
|
||||||
|
// This is an alpha field and requires enabling VolumeAttributesClass feature.
|
||||||
|
// +featureGate=VolumeAttributesClass
|
||||||
|
// +optional
|
||||||
|
VolumeAttributesClassName *string `json:"volumeAttributesClassName,omitempty" protobuf:"bytes,10,opt,name=volumeAttributesClassName"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from.
|
// VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from.
|
||||||
|
@ -413,7 +423,7 @@ type PersistentVolumeStatus struct {
|
||||||
Reason string `json:"reason,omitempty" protobuf:"bytes,3,opt,name=reason"`
|
Reason string `json:"reason,omitempty" protobuf:"bytes,3,opt,name=reason"`
|
||||||
// lastPhaseTransitionTime is the time the phase transitioned from one to another
|
// lastPhaseTransitionTime is the time the phase transitioned from one to another
|
||||||
// and automatically resets to current time everytime a volume phase transitions.
|
// and automatically resets to current time everytime a volume phase transitions.
|
||||||
// This is an alpha field and requires enabling PersistentVolumeLastPhaseTransitionTime feature.
|
// This is a beta field and requires the PersistentVolumeLastPhaseTransitionTime feature to be enabled (enabled by default).
|
||||||
// +featureGate=PersistentVolumeLastPhaseTransitionTime
|
// +featureGate=PersistentVolumeLastPhaseTransitionTime
|
||||||
// +optional
|
// +optional
|
||||||
LastPhaseTransitionTime *metav1.Time `json:"lastPhaseTransitionTime,omitempty" protobuf:"bytes,4,opt,name=lastPhaseTransitionTime"`
|
LastPhaseTransitionTime *metav1.Time `json:"lastPhaseTransitionTime,omitempty" protobuf:"bytes,4,opt,name=lastPhaseTransitionTime"`
|
||||||
|
@ -486,7 +496,7 @@ type PersistentVolumeClaimSpec struct {
|
||||||
// status field of the claim.
|
// status field of the claim.
|
||||||
// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
|
// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
|
||||||
// +optional
|
// +optional
|
||||||
Resources ResourceRequirements `json:"resources,omitempty" protobuf:"bytes,2,opt,name=resources"`
|
Resources VolumeResourceRequirements `json:"resources,omitempty" protobuf:"bytes,2,opt,name=resources"`
|
||||||
// volumeName is the binding reference to the PersistentVolume backing this claim.
|
// volumeName is the binding reference to the PersistentVolume backing this claim.
|
||||||
// +optional
|
// +optional
|
||||||
VolumeName string `json:"volumeName,omitempty" protobuf:"bytes,3,opt,name=volumeName"`
|
VolumeName string `json:"volumeName,omitempty" protobuf:"bytes,3,opt,name=volumeName"`
|
||||||
|
@ -533,6 +543,21 @@ type PersistentVolumeClaimSpec struct {
|
||||||
// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
|
// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
|
||||||
// +optional
|
// +optional
|
||||||
DataSourceRef *TypedObjectReference `json:"dataSourceRef,omitempty" protobuf:"bytes,8,opt,name=dataSourceRef"`
|
DataSourceRef *TypedObjectReference `json:"dataSourceRef,omitempty" protobuf:"bytes,8,opt,name=dataSourceRef"`
|
||||||
|
// volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
|
||||||
|
// If specified, the CSI driver will create or update the volume with the attributes defined
|
||||||
|
// in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
|
||||||
|
// it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass
|
||||||
|
// will be applied to the claim but it's not allowed to reset this field to empty string once it is set.
|
||||||
|
// If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass
|
||||||
|
// will be set by the persistentvolume controller if it exists.
|
||||||
|
// If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be
|
||||||
|
// set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
|
||||||
|
// exists.
|
||||||
|
// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#volumeattributesclass
|
||||||
|
// (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.
|
||||||
|
// +featureGate=VolumeAttributesClass
|
||||||
|
// +optional
|
||||||
|
VolumeAttributesClassName *string `json:"volumeAttributesClassName,omitempty" protobuf:"bytes,9,opt,name=volumeAttributesClassName"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type TypedObjectReference struct {
|
type TypedObjectReference struct {
|
||||||
|
@ -561,6 +586,11 @@ const (
|
||||||
PersistentVolumeClaimResizing PersistentVolumeClaimConditionType = "Resizing"
|
PersistentVolumeClaimResizing PersistentVolumeClaimConditionType = "Resizing"
|
||||||
// PersistentVolumeClaimFileSystemResizePending - controller resize is finished and a file system resize is pending on node
|
// PersistentVolumeClaimFileSystemResizePending - controller resize is finished and a file system resize is pending on node
|
||||||
PersistentVolumeClaimFileSystemResizePending PersistentVolumeClaimConditionType = "FileSystemResizePending"
|
PersistentVolumeClaimFileSystemResizePending PersistentVolumeClaimConditionType = "FileSystemResizePending"
|
||||||
|
|
||||||
|
// Applying the target VolumeAttributesClass encountered an error
|
||||||
|
PersistentVolumeClaimVolumeModifyVolumeError PersistentVolumeClaimConditionType = "ModifyVolumeError"
|
||||||
|
// Volume is being modified
|
||||||
|
PersistentVolumeClaimVolumeModifyingVolume PersistentVolumeClaimConditionType = "ModifyingVolume"
|
||||||
)
|
)
|
||||||
|
|
||||||
// +enum
|
// +enum
|
||||||
|
@ -587,6 +617,38 @@ const (
|
||||||
PersistentVolumeClaimNodeResizeFailed ClaimResourceStatus = "NodeResizeFailed"
|
PersistentVolumeClaimNodeResizeFailed ClaimResourceStatus = "NodeResizeFailed"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// +enum
|
||||||
|
// New statuses can be added in the future. Consumers should check for unknown statuses and fail appropriately
|
||||||
|
type PersistentVolumeClaimModifyVolumeStatus string
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Pending indicates that the PersistentVolumeClaim cannot be modified due to unmet requirements, such as
|
||||||
|
// the specified VolumeAttributesClass not existing
|
||||||
|
PersistentVolumeClaimModifyVolumePending PersistentVolumeClaimModifyVolumeStatus = "Pending"
|
||||||
|
// InProgress indicates that the volume is being modified
|
||||||
|
PersistentVolumeClaimModifyVolumeInProgress PersistentVolumeClaimModifyVolumeStatus = "InProgress"
|
||||||
|
// Infeasible indicates that the request has been rejected as invalid by the CSI driver. To
|
||||||
|
// resolve the error, a valid VolumeAttributesClass needs to be specified
|
||||||
|
PersistentVolumeClaimModifyVolumeInfeasible PersistentVolumeClaimModifyVolumeStatus = "Infeasible"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation
|
||||||
|
type ModifyVolumeStatus struct {
|
||||||
|
// targetVolumeAttributesClassName is the name of the VolumeAttributesClass the PVC currently being reconciled
|
||||||
|
TargetVolumeAttributesClassName string `json:"targetVolumeAttributesClassName,omitempty" protobuf:"bytes,1,opt,name=targetVolumeAttributesClassName"`
|
||||||
|
// status is the status of the ControllerModifyVolume operation. It can be in any of following states:
|
||||||
|
// - Pending
|
||||||
|
// Pending indicates that the PersistentVolumeClaim cannot be modified due to unmet requirements, such as
|
||||||
|
// the specified VolumeAttributesClass not existing.
|
||||||
|
// - InProgress
|
||||||
|
// InProgress indicates that the volume is being modified.
|
||||||
|
// - Infeasible
|
||||||
|
// Infeasible indicates that the request has been rejected as invalid by the CSI driver. To
|
||||||
|
// resolve the error, a valid VolumeAttributesClass needs to be specified.
|
||||||
|
// Note: New statuses can be added in the future. Consumers should check for unknown statuses and fail appropriately.
|
||||||
|
Status PersistentVolumeClaimModifyVolumeStatus `json:"status" protobuf:"bytes,2,opt,name=status,casttype=PersistentVolumeClaimModifyVolumeStatus"`
|
||||||
|
}
|
||||||
|
|
||||||
// PersistentVolumeClaimCondition contains details about state of pvc
|
// PersistentVolumeClaimCondition contains details about state of pvc
|
||||||
type PersistentVolumeClaimCondition struct {
|
type PersistentVolumeClaimCondition struct {
|
||||||
Type PersistentVolumeClaimConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=PersistentVolumeClaimConditionType"`
|
Type PersistentVolumeClaimConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=PersistentVolumeClaimConditionType"`
|
||||||
|
@ -693,6 +755,18 @@ type PersistentVolumeClaimStatus struct {
|
||||||
// +mapType=granular
|
// +mapType=granular
|
||||||
// +optional
|
// +optional
|
||||||
AllocatedResourceStatuses map[ResourceName]ClaimResourceStatus `json:"allocatedResourceStatuses,omitempty" protobuf:"bytes,7,rep,name=allocatedResourceStatuses"`
|
AllocatedResourceStatuses map[ResourceName]ClaimResourceStatus `json:"allocatedResourceStatuses,omitempty" protobuf:"bytes,7,rep,name=allocatedResourceStatuses"`
|
||||||
|
// currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using.
|
||||||
|
// When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim
|
||||||
|
// This is an alpha field and requires enabling VolumeAttributesClass feature.
|
||||||
|
// +featureGate=VolumeAttributesClass
|
||||||
|
// +optional
|
||||||
|
CurrentVolumeAttributesClassName *string `json:"currentVolumeAttributesClassName,omitempty" protobuf:"bytes,8,opt,name=currentVolumeAttributesClassName"`
|
||||||
|
// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation.
|
||||||
|
// When this is unset, there is no ModifyVolume operation being attempted.
|
||||||
|
// This is an alpha field and requires enabling VolumeAttributesClass feature.
|
||||||
|
// +featureGate=VolumeAttributesClass
|
||||||
|
// +optional
|
||||||
|
ModifyVolumeStatus *ModifyVolumeStatus `json:"modifyVolumeStatus,omitempty" protobuf:"bytes,9,opt,name=modifyVolumeStatus"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// +enum
|
// +enum
|
||||||
|
@ -1763,6 +1837,40 @@ type ServiceAccountTokenProjection struct {
|
||||||
Path string `json:"path" protobuf:"bytes,3,opt,name=path"`
|
Path string `json:"path" protobuf:"bytes,3,opt,name=path"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ClusterTrustBundleProjection describes how to select a set of
|
||||||
|
// ClusterTrustBundle objects and project their contents into the pod
|
||||||
|
// filesystem.
|
||||||
|
type ClusterTrustBundleProjection struct {
|
||||||
|
// Select a single ClusterTrustBundle by object name. Mutually-exclusive
|
||||||
|
// with signerName and labelSelector.
|
||||||
|
// +optional
|
||||||
|
Name *string `json:"name,omitempty" protobuf:"bytes,1,rep,name=name"`
|
||||||
|
|
||||||
|
// Select all ClusterTrustBundles that match this signer name.
|
||||||
|
// Mutually-exclusive with name. The contents of all selected
|
||||||
|
// ClusterTrustBundles will be unified and deduplicated.
|
||||||
|
// +optional
|
||||||
|
SignerName *string `json:"signerName,omitempty" protobuf:"bytes,2,rep,name=signerName"`
|
||||||
|
|
||||||
|
// Select all ClusterTrustBundles that match this label selector. Only has
|
||||||
|
// effect if signerName is set. Mutually-exclusive with name. If unset,
|
||||||
|
// interpreted as "match nothing". If set but empty, interpreted as "match
|
||||||
|
// everything".
|
||||||
|
// +optional
|
||||||
|
LabelSelector *metav1.LabelSelector `json:"labelSelector,omitempty" protobuf:"bytes,3,rep,name=labelSelector"`
|
||||||
|
|
||||||
|
// If true, don't block pod startup if the referenced ClusterTrustBundle(s)
|
||||||
|
// aren't available. If using name, then the named ClusterTrustBundle is
|
||||||
|
// allowed not to exist. If using signerName, then the combination of
|
||||||
|
// signerName and labelSelector is allowed to match zero
|
||||||
|
// ClusterTrustBundles.
|
||||||
|
// +optional
|
||||||
|
Optional *bool `json:"optional,omitempty" protobuf:"varint,5,opt,name=optional"`
|
||||||
|
|
||||||
|
// Relative path from the volume root to write the bundle.
|
||||||
|
Path string `json:"path" protobuf:"bytes,4,rep,name=path"`
|
||||||
|
}
|
||||||
|
|
||||||
// Represents a projected volume source
|
// Represents a projected volume source
|
||||||
type ProjectedVolumeSource struct {
|
type ProjectedVolumeSource struct {
|
||||||
// sources is the list of volume projections
|
// sources is the list of volume projections
|
||||||
|
@ -1794,6 +1902,24 @@ type VolumeProjection struct {
|
||||||
// serviceAccountToken is information about the serviceAccountToken data to project
|
// serviceAccountToken is information about the serviceAccountToken data to project
|
||||||
// +optional
|
// +optional
|
||||||
ServiceAccountToken *ServiceAccountTokenProjection `json:"serviceAccountToken,omitempty" protobuf:"bytes,4,opt,name=serviceAccountToken"`
|
ServiceAccountToken *ServiceAccountTokenProjection `json:"serviceAccountToken,omitempty" protobuf:"bytes,4,opt,name=serviceAccountToken"`
|
||||||
|
|
||||||
|
// ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
|
||||||
|
// of ClusterTrustBundle objects in an auto-updating file.
|
||||||
|
//
|
||||||
|
// Alpha, gated by the ClusterTrustBundleProjection feature gate.
|
||||||
|
//
|
||||||
|
// ClusterTrustBundle objects can either be selected by name, or by the
|
||||||
|
// combination of signer name and a label selector.
|
||||||
|
//
|
||||||
|
// Kubelet performs aggressive normalization of the PEM contents written
|
||||||
|
// into the pod filesystem. Esoteric PEM features such as inter-block
|
||||||
|
// comments and block headers are stripped. Certificates are deduplicated.
|
||||||
|
// The ordering of certificates within the file is arbitrary, and Kubelet
|
||||||
|
// may change the order over time.
|
||||||
|
//
|
||||||
|
// +featureGate=ClusterTrustBundleProjection
|
||||||
|
// +optional
|
||||||
|
ClusterTrustBundle *ClusterTrustBundleProjection `json:"clusterTrustBundle,omitempty" protobuf:"bytes,5,opt,name=clusterTrustBundle"`
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -1894,10 +2020,8 @@ type CSIPersistentVolumeSource struct {
|
||||||
// nodeExpandSecretRef is a reference to the secret object containing
|
// nodeExpandSecretRef is a reference to the secret object containing
|
||||||
// sensitive information to pass to the CSI driver to complete the CSI
|
// sensitive information to pass to the CSI driver to complete the CSI
|
||||||
// NodeExpandVolume call.
|
// NodeExpandVolume call.
|
||||||
// This is a beta field which is enabled default by CSINodeExpandSecret feature gate.
|
|
||||||
// This field is optional, may be omitted if no secret is required. If the
|
// This field is optional, may be omitted if no secret is required. If the
|
||||||
// secret object contains more than one secret, all secrets are passed.
|
// secret object contains more than one secret, all secrets are passed.
|
||||||
// +featureGate=CSINodeExpandSecret
|
|
||||||
// +optional
|
// +optional
|
||||||
NodeExpandSecretRef *SecretReference `json:"nodeExpandSecretRef,omitempty" protobuf:"bytes,10,opt,name=nodeExpandSecretRef"`
|
NodeExpandSecretRef *SecretReference `json:"nodeExpandSecretRef,omitempty" protobuf:"bytes,10,opt,name=nodeExpandSecretRef"`
|
||||||
}
|
}
|
||||||
|
@ -2272,6 +2396,12 @@ type ExecAction struct {
|
||||||
Command []string `json:"command,omitempty" protobuf:"bytes,1,rep,name=command"`
|
Command []string `json:"command,omitempty" protobuf:"bytes,1,rep,name=command"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SleepAction describes a "sleep" action.
|
||||||
|
type SleepAction struct {
|
||||||
|
// Seconds is the number of seconds to sleep.
|
||||||
|
Seconds int64 `json:"seconds" protobuf:"bytes,1,opt,name=seconds"`
|
||||||
|
}
|
||||||
|
|
||||||
// Probe describes a health check to be performed against a container to determine whether it is
|
// Probe describes a health check to be performed against a container to determine whether it is
|
||||||
// alive or ready to receive traffic.
|
// alive or ready to receive traffic.
|
||||||
type Probe struct {
|
type Probe struct {
|
||||||
|
@ -2417,6 +2547,27 @@ type ResourceRequirements struct {
|
||||||
Claims []ResourceClaim `json:"claims,omitempty" protobuf:"bytes,3,opt,name=claims"`
|
Claims []ResourceClaim `json:"claims,omitempty" protobuf:"bytes,3,opt,name=claims"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// VolumeResourceRequirements describes the storage resource requirements for a volume.
|
||||||
|
type VolumeResourceRequirements struct {
|
||||||
|
// Limits describes the maximum amount of compute resources allowed.
|
||||||
|
// More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
|
||||||
|
// +optional
|
||||||
|
Limits ResourceList `json:"limits,omitempty" protobuf:"bytes,1,rep,name=limits,casttype=ResourceList,castkey=ResourceName"`
|
||||||
|
// Requests describes the minimum amount of compute resources required.
|
||||||
|
// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
|
||||||
|
// otherwise to an implementation-defined value. Requests cannot exceed Limits.
|
||||||
|
// More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
|
||||||
|
// +optional
|
||||||
|
Requests ResourceList `json:"requests,omitempty" protobuf:"bytes,2,rep,name=requests,casttype=ResourceList,castkey=ResourceName"`
|
||||||
|
|
||||||
|
// Claims got added by accident when volumes shared the ResourceRequirements struct
|
||||||
|
// with containers. Stripping the field got added in 1.27 and was backported to 1.26.
|
||||||
|
// Starting with Kubernetes 1.28, this field is not part of the volume API anymore.
|
||||||
|
//
|
||||||
|
// Future extensions must not use "claims" or field number 3.
|
||||||
|
// Claims []ResourceClaim `json:"claims,omitempty" protobuf:"bytes,3,opt,name=claims"`
|
||||||
|
}
|
||||||
|
|
||||||
// ResourceClaim references one entry in PodSpec.ResourceClaims.
|
// ResourceClaim references one entry in PodSpec.ResourceClaims.
|
||||||
type ResourceClaim struct {
|
type ResourceClaim struct {
|
||||||
// Name must match the name of one entry in pod.spec.resourceClaims of
|
// Name must match the name of one entry in pod.spec.resourceClaims of
|
||||||
|
@ -2646,6 +2797,10 @@ type LifecycleHandler struct {
|
||||||
// lifecycle hooks will fail in runtime when tcp handler is specified.
|
// lifecycle hooks will fail in runtime when tcp handler is specified.
|
||||||
// +optional
|
// +optional
|
||||||
TCPSocket *TCPSocketAction `json:"tcpSocket,omitempty" protobuf:"bytes,3,opt,name=tcpSocket"`
|
TCPSocket *TCPSocketAction `json:"tcpSocket,omitempty" protobuf:"bytes,3,opt,name=tcpSocket"`
|
||||||
|
// Sleep represents the duration that the container should sleep before being terminated.
|
||||||
|
// +featureGate=PodLifecycleSleepAction
|
||||||
|
// +optional
|
||||||
|
Sleep *SleepAction `json:"sleep,omitempty" protobuf:"bytes,4,opt,name=sleep"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lifecycle describes actions that the management system should take in response to container lifecycle
|
// Lifecycle describes actions that the management system should take in response to container lifecycle
|
||||||
|
@ -2845,6 +3000,9 @@ const (
|
||||||
// DisruptionTarget indicates the pod is about to be terminated due to a
|
// DisruptionTarget indicates the pod is about to be terminated due to a
|
||||||
// disruption (such as preemption, eviction API or garbage-collection).
|
// disruption (such as preemption, eviction API or garbage-collection).
|
||||||
DisruptionTarget PodConditionType = "DisruptionTarget"
|
DisruptionTarget PodConditionType = "DisruptionTarget"
|
||||||
|
// PodReadyToStartContainers pod sandbox is successfully configured and
|
||||||
|
// the pod is ready to launch containers.
|
||||||
|
PodReadyToStartContainers PodConditionType = "PodReadyToStartContainers"
|
||||||
)
|
)
|
||||||
|
|
||||||
// These are reasons for a pod's transition to a condition.
|
// These are reasons for a pod's transition to a condition.
|
||||||
|
@ -3136,6 +3294,7 @@ type WeightedPodAffinityTerm struct {
|
||||||
// a pod of the set of pods is running
|
// a pod of the set of pods is running
|
||||||
type PodAffinityTerm struct {
|
type PodAffinityTerm struct {
|
||||||
// A label query over a set of resources, in this case pods.
|
// A label query over a set of resources, in this case pods.
|
||||||
|
// If it's null, this PodAffinityTerm matches with no Pods.
|
||||||
// +optional
|
// +optional
|
||||||
LabelSelector *metav1.LabelSelector `json:"labelSelector,omitempty" protobuf:"bytes,1,opt,name=labelSelector"`
|
LabelSelector *metav1.LabelSelector `json:"labelSelector,omitempty" protobuf:"bytes,1,opt,name=labelSelector"`
|
||||||
// namespaces specifies a static list of namespace names that the term applies to.
|
// namespaces specifies a static list of namespace names that the term applies to.
|
||||||
|
@ -3157,6 +3316,30 @@ type PodAffinityTerm struct {
|
||||||
// An empty selector ({}) matches all namespaces.
|
// An empty selector ({}) matches all namespaces.
|
||||||
// +optional
|
// +optional
|
||||||
NamespaceSelector *metav1.LabelSelector `json:"namespaceSelector,omitempty" protobuf:"bytes,4,opt,name=namespaceSelector"`
|
NamespaceSelector *metav1.LabelSelector `json:"namespaceSelector,omitempty" protobuf:"bytes,4,opt,name=namespaceSelector"`
|
||||||
|
// MatchLabelKeys is a set of pod label keys to select which pods will
|
||||||
|
// be taken into consideration. The keys are used to lookup values from the
|
||||||
|
// incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
|
||||||
|
// to select the group of existing pods which pods will be taken into consideration
|
||||||
|
// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
|
||||||
|
// pod labels will be ignored. The default value is empty.
|
||||||
|
// The same key is forbidden to exist in both MatchLabelKeys and LabelSelector.
|
||||||
|
// Also, MatchLabelKeys cannot be set when LabelSelector isn't set.
|
||||||
|
// This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
|
||||||
|
// +listType=atomic
|
||||||
|
// +optional
|
||||||
|
MatchLabelKeys []string `json:"matchLabelKeys,omitempty" protobuf:"bytes,5,opt,name=matchLabelKeys"`
|
||||||
|
// MismatchLabelKeys is a set of pod label keys to select which pods will
|
||||||
|
// be taken into consideration. The keys are used to lookup values from the
|
||||||
|
// incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
|
||||||
|
// to select the group of existing pods which pods will be taken into consideration
|
||||||
|
// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
|
||||||
|
// pod labels will be ignored. The default value is empty.
|
||||||
|
// The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector.
|
||||||
|
// Also, MismatchLabelKeys cannot be set when LabelSelector isn't set.
|
||||||
|
// This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.
|
||||||
|
// +listType=atomic
|
||||||
|
// +optional
|
||||||
|
MismatchLabelKeys []string `json:"mismatchLabelKeys,omitempty" protobuf:"bytes,6,opt,name=mismatchLabelKeys"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Node affinity is a group of node affinity scheduling rules.
|
// Node affinity is a group of node affinity scheduling rules.
|
||||||
|
@ -4692,6 +4875,15 @@ type LoadBalancerIngress struct {
|
||||||
// +optional
|
// +optional
|
||||||
Hostname string `json:"hostname,omitempty" protobuf:"bytes,2,opt,name=hostname"`
|
Hostname string `json:"hostname,omitempty" protobuf:"bytes,2,opt,name=hostname"`
|
||||||
|
|
||||||
|
// IPMode specifies how the load-balancer IP behaves, and may only be specified when the ip field is specified.
|
||||||
|
// Setting this to "VIP" indicates that traffic is delivered to the node with
|
||||||
|
// the destination set to the load-balancer's IP and port.
|
||||||
|
// Setting this to "Proxy" indicates that traffic is delivered to the node or pod with
|
||||||
|
// the destination set to the node's IP and node port or the pod's IP and port.
|
||||||
|
// Service implementations may use this information to adjust traffic routing.
|
||||||
|
// +optional
|
||||||
|
IPMode *LoadBalancerIPMode `json:"ipMode,omitempty" protobuf:"bytes,3,opt,name=ipMode"`
|
||||||
|
|
||||||
// Ports is a list of records of service ports
|
// Ports is a list of records of service ports
|
||||||
// If used, every port defined in the service should have an entry in it
|
// If used, every port defined in the service should have an entry in it
|
||||||
// +listType=atomic
|
// +listType=atomic
|
||||||
|
@ -4709,6 +4901,8 @@ const (
|
||||||
IPv4Protocol IPFamily = "IPv4"
|
IPv4Protocol IPFamily = "IPv4"
|
||||||
// IPv6Protocol indicates that this IP is IPv6 protocol
|
// IPv6Protocol indicates that this IP is IPv6 protocol
|
||||||
IPv6Protocol IPFamily = "IPv6"
|
IPv6Protocol IPFamily = "IPv6"
|
||||||
|
// IPFamilyUnknown indicates that this IP is unknown protocol
|
||||||
|
IPFamilyUnknown IPFamily = ""
|
||||||
)
|
)
|
||||||
|
|
||||||
// IPFamilyPolicy represents the dual-stack-ness requested or required by a Service
|
// IPFamilyPolicy represents the dual-stack-ness requested or required by a Service
|
||||||
|
@ -5003,7 +5197,7 @@ type ServicePort struct {
|
||||||
// RFC-6335 and https://www.iana.org/assignments/service-names).
|
// RFC-6335 and https://www.iana.org/assignments/service-names).
|
||||||
//
|
//
|
||||||
// * Kubernetes-defined prefixed names:
|
// * Kubernetes-defined prefixed names:
|
||||||
// * 'kubernetes.io/h2c' - HTTP/2 over cleartext as described in https://www.rfc-editor.org/rfc/rfc7540
|
// * 'kubernetes.io/h2c' - HTTP/2 prior knowledge over cleartext as described in https://www.rfc-editor.org/rfc/rfc9113.html#name-starting-http-2-with-prior-
|
||||||
// * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455
|
// * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455
|
||||||
// * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455
|
// * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455
|
||||||
//
|
//
|
||||||
|
@ -5247,7 +5441,7 @@ type EndpointPort struct {
|
||||||
// RFC-6335 and https://www.iana.org/assignments/service-names).
|
// RFC-6335 and https://www.iana.org/assignments/service-names).
|
||||||
//
|
//
|
||||||
// * Kubernetes-defined prefixed names:
|
// * Kubernetes-defined prefixed names:
|
||||||
// * 'kubernetes.io/h2c' - HTTP/2 over cleartext as described in https://www.rfc-editor.org/rfc/rfc7540
|
// * 'kubernetes.io/h2c' - HTTP/2 prior knowledge over cleartext as described in https://www.rfc-editor.org/rfc/rfc9113.html#name-starting-http-2-with-prior-
|
||||||
// * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455
|
// * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455
|
||||||
// * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455
|
// * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455
|
||||||
//
|
//
|
||||||
|
@ -7054,3 +7248,15 @@ type PortStatus struct {
|
||||||
// +kubebuilder:validation:MaxLength=316
|
// +kubebuilder:validation:MaxLength=316
|
||||||
Error *string `json:"error,omitempty" protobuf:"bytes,3,opt,name=error"`
|
Error *string `json:"error,omitempty" protobuf:"bytes,3,opt,name=error"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LoadBalancerIPMode represents the mode of the LoadBalancer ingress IP
|
||||||
|
type LoadBalancerIPMode string
|
||||||
|
|
||||||
|
const (
|
||||||
|
// LoadBalancerIPModeVIP indicates that traffic is delivered to the node with
|
||||||
|
// the destination set to the load-balancer's IP and port.
|
||||||
|
LoadBalancerIPModeVIP LoadBalancerIPMode = "VIP"
|
||||||
|
// LoadBalancerIPModeProxy indicates that traffic is delivered to the node or pod with
|
||||||
|
// the destination set to the node's IP and port or the pod's IP and port.
|
||||||
|
LoadBalancerIPModeProxy LoadBalancerIPMode = "Proxy"
|
||||||
|
)
|
||||||
|
|
|
@ -127,7 +127,7 @@ var map_CSIPersistentVolumeSource = map[string]string{
|
||||||
"nodeStageSecretRef": "nodeStageSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeStageVolume and NodeStageVolume and NodeUnstageVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.",
|
"nodeStageSecretRef": "nodeStageSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeStageVolume and NodeStageVolume and NodeUnstageVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.",
|
||||||
"nodePublishSecretRef": "nodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.",
|
"nodePublishSecretRef": "nodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.",
|
||||||
"controllerExpandSecretRef": "controllerExpandSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerExpandVolume call. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.",
|
"controllerExpandSecretRef": "controllerExpandSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerExpandVolume call. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.",
|
||||||
"nodeExpandSecretRef": "nodeExpandSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeExpandVolume call. This is a beta field which is enabled default by CSINodeExpandSecret feature gate. This field is optional, may be omitted if no secret is required. If the secret object contains more than one secret, all secrets are passed.",
|
"nodeExpandSecretRef": "nodeExpandSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeExpandVolume call. This field is optional, may be omitted if no secret is required. If the secret object contains more than one secret, all secrets are passed.",
|
||||||
}
|
}
|
||||||
|
|
||||||
func (CSIPersistentVolumeSource) SwaggerDoc() map[string]string {
|
func (CSIPersistentVolumeSource) SwaggerDoc() map[string]string {
|
||||||
|
@ -228,6 +228,19 @@ func (ClientIPConfig) SwaggerDoc() map[string]string {
|
||||||
return map_ClientIPConfig
|
return map_ClientIPConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var map_ClusterTrustBundleProjection = map[string]string{
|
||||||
|
"": "ClusterTrustBundleProjection describes how to select a set of ClusterTrustBundle objects and project their contents into the pod filesystem.",
|
||||||
|
"name": "Select a single ClusterTrustBundle by object name. Mutually-exclusive with signerName and labelSelector.",
|
||||||
|
"signerName": "Select all ClusterTrustBundles that match this signer name. Mutually-exclusive with name. The contents of all selected ClusterTrustBundles will be unified and deduplicated.",
|
||||||
|
"labelSelector": "Select all ClusterTrustBundles that match this label selector. Only has effect if signerName is set. Mutually-exclusive with name. If unset, interpreted as \"match nothing\". If set but empty, interpreted as \"match everything\".",
|
||||||
|
"optional": "If true, don't block pod startup if the referenced ClusterTrustBundle(s) aren't available. If using name, then the named ClusterTrustBundle is allowed not to exist. If using signerName, then the combination of signerName and labelSelector is allowed to match zero ClusterTrustBundles.",
|
||||||
|
"path": "Relative path from the volume root to write the bundle.",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ClusterTrustBundleProjection) SwaggerDoc() map[string]string {
|
||||||
|
return map_ClusterTrustBundleProjection
|
||||||
|
}
|
||||||
|
|
||||||
var map_ComponentCondition = map[string]string{
|
var map_ComponentCondition = map[string]string{
|
||||||
"": "Information about the condition of a component.",
|
"": "Information about the condition of a component.",
|
||||||
"type": "Type of condition for a component. Valid value: \"Healthy\"",
|
"type": "Type of condition for a component. Valid value: \"Healthy\"",
|
||||||
|
@ -531,7 +544,7 @@ var map_EndpointPort = map[string]string{
|
||||||
"name": "The name of this port. This must match the 'name' field in the corresponding ServicePort. Must be a DNS_LABEL. Optional only if one port is defined.",
|
"name": "The name of this port. This must match the 'name' field in the corresponding ServicePort. Must be a DNS_LABEL. Optional only if one port is defined.",
|
||||||
"port": "The port number of the endpoint.",
|
"port": "The port number of the endpoint.",
|
||||||
"protocol": "The IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.",
|
"protocol": "The IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.",
|
||||||
"appProtocol": "The application protocol for this port. This is used as a hint for implementations to offer richer behavior for protocols that they understand. This field follows standard Kubernetes label syntax. Valid values are either:\n\n* Un-prefixed protocol names - reserved for IANA standard service names (as per RFC-6335 and https://www.iana.org/assignments/service-names).\n\n* Kubernetes-defined prefixed names:\n * 'kubernetes.io/h2c' - HTTP/2 over cleartext as described in https://www.rfc-editor.org/rfc/rfc7540\n * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455\n * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455\n\n* Other protocols should use implementation-defined prefixed names such as mycompany.com/my-custom-protocol.",
|
"appProtocol": "The application protocol for this port. This is used as a hint for implementations to offer richer behavior for protocols that they understand. This field follows standard Kubernetes label syntax. Valid values are either:\n\n* Un-prefixed protocol names - reserved for IANA standard service names (as per RFC-6335 and https://www.iana.org/assignments/service-names).\n\n* Kubernetes-defined prefixed names:\n * 'kubernetes.io/h2c' - HTTP/2 prior knowledge over cleartext as described in https://www.rfc-editor.org/rfc/rfc9113.html#name-starting-http-2-with-prior-\n * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455\n * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455\n\n* Other protocols should use implementation-defined prefixed names such as mycompany.com/my-custom-protocol.",
|
||||||
}
|
}
|
||||||
|
|
||||||
func (EndpointPort) SwaggerDoc() map[string]string {
|
func (EndpointPort) SwaggerDoc() map[string]string {
|
||||||
|
@ -935,6 +948,7 @@ var map_LifecycleHandler = map[string]string{
|
||||||
"exec": "Exec specifies the action to take.",
|
"exec": "Exec specifies the action to take.",
|
||||||
"httpGet": "HTTPGet specifies the http request to perform.",
|
"httpGet": "HTTPGet specifies the http request to perform.",
|
||||||
"tcpSocket": "Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept for the backward compatibility. There are no validation of this field and lifecycle hooks will fail in runtime when tcp handler is specified.",
|
"tcpSocket": "Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept for the backward compatibility. There are no validation of this field and lifecycle hooks will fail in runtime when tcp handler is specified.",
|
||||||
|
"sleep": "Sleep represents the duration that the container should sleep before being terminated.",
|
||||||
}
|
}
|
||||||
|
|
||||||
func (LifecycleHandler) SwaggerDoc() map[string]string {
|
func (LifecycleHandler) SwaggerDoc() map[string]string {
|
||||||
|
@ -988,6 +1002,7 @@ var map_LoadBalancerIngress = map[string]string{
|
||||||
"": "LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.",
|
"": "LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.",
|
||||||
"ip": "IP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)",
|
"ip": "IP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)",
|
||||||
"hostname": "Hostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)",
|
"hostname": "Hostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)",
|
||||||
|
"ipMode": "IPMode specifies how the load-balancer IP behaves, and may only be specified when the ip field is specified. Setting this to \"VIP\" indicates that traffic is delivered to the node with the destination set to the load-balancer's IP and port. Setting this to \"Proxy\" indicates that traffic is delivered to the node or pod with the destination set to the node's IP and node port or the pod's IP and port. Service implementations may use this information to adjust traffic routing.",
|
||||||
"ports": "Ports is a list of records of service ports If used, every port defined in the service should have an entry in it",
|
"ports": "Ports is a list of records of service ports If used, every port defined in the service should have an entry in it",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1023,6 +1038,16 @@ func (LocalVolumeSource) SwaggerDoc() map[string]string {
|
||||||
return map_LocalVolumeSource
|
return map_LocalVolumeSource
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var map_ModifyVolumeStatus = map[string]string{
|
||||||
|
"": "ModifyVolumeStatus represents the status object of ControllerModifyVolume operation",
|
||||||
|
"targetVolumeAttributesClassName": "targetVolumeAttributesClassName is the name of the VolumeAttributesClass the PVC currently being reconciled",
|
||||||
|
"status": "status is the status of the ControllerModifyVolume operation. It can be in any of following states:\n - Pending\n Pending indicates that the PersistentVolumeClaim cannot be modified due to unmet requirements, such as\n the specified VolumeAttributesClass not existing.\n - InProgress\n InProgress indicates that the volume is being modified.\n - Infeasible\n Infeasible indicates that the request has been rejected as invalid by the CSI driver. To\n\t resolve the error, a valid VolumeAttributesClass needs to be specified.\nNote: New statuses can be added in the future. Consumers should check for unknown statuses and fail appropriately.",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ModifyVolumeStatus) SwaggerDoc() map[string]string {
|
||||||
|
return map_ModifyVolumeStatus
|
||||||
|
}
|
||||||
|
|
||||||
var map_NFSVolumeSource = map[string]string{
|
var map_NFSVolumeSource = map[string]string{
|
||||||
"": "Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.",
|
"": "Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.",
|
||||||
"server": "server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs",
|
"server": "server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs",
|
||||||
|
@ -1339,15 +1364,16 @@ func (PersistentVolumeClaimList) SwaggerDoc() map[string]string {
|
||||||
}
|
}
|
||||||
|
|
||||||
var map_PersistentVolumeClaimSpec = map[string]string{
|
var map_PersistentVolumeClaimSpec = map[string]string{
|
||||||
"": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes",
|
"": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes",
|
||||||
"accessModes": "accessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1",
|
"accessModes": "accessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1",
|
||||||
"selector": "selector is a label query over volumes to consider for binding.",
|
"selector": "selector is a label query over volumes to consider for binding.",
|
||||||
"resources": "resources represents the minimum resources the volume should have. If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements that are lower than previous value but must still be higher than capacity recorded in the status field of the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources",
|
"resources": "resources represents the minimum resources the volume should have. If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements that are lower than previous value but must still be higher than capacity recorded in the status field of the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources",
|
||||||
"volumeName": "volumeName is the binding reference to the PersistentVolume backing this claim.",
|
"volumeName": "volumeName is the binding reference to the PersistentVolume backing this claim.",
|
||||||
"storageClassName": "storageClassName is the name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1",
|
"storageClassName": "storageClassName is the name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1",
|
||||||
"volumeMode": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.",
|
"volumeMode": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.",
|
||||||
"dataSource": "dataSource field can be used to specify either: * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) * An existing PVC (PersistentVolumeClaim) If the provisioner or an external controller can support the specified data source, it will create a new volume based on the contents of the specified data source. When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. If the namespace is specified, then dataSourceRef will not be copied to dataSource.",
|
"dataSource": "dataSource field can be used to specify either: * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) * An existing PVC (PersistentVolumeClaim) If the provisioner or an external controller can support the specified data source, it will create a new volume based on the contents of the specified data source. When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. If the namespace is specified, then dataSourceRef will not be copied to dataSource.",
|
||||||
"dataSourceRef": "dataSourceRef specifies the object from which to populate the volume with data, if a non-empty volume is desired. This may be any object from a non-empty API group (non core object) or a PersistentVolumeClaim object. When this field is specified, volume binding will only succeed if the type of the specified object matches some installed volume populator or dynamic provisioner. This field will replace the functionality of the dataSource field and as such if both fields are non-empty, they must have the same value. For backwards compatibility, when namespace isn't specified in dataSourceRef, both fields (dataSource and dataSourceRef) will be set to the same value automatically if one of them is empty and the other is non-empty. When namespace is specified in dataSourceRef, dataSource isn't set to the same value and must be empty. There are three important differences between dataSource and dataSourceRef: * While dataSource only allows two specific types of objects, dataSourceRef\n allows any non-core object, as well as PersistentVolumeClaim objects.\n* While dataSource ignores disallowed values (dropping them), dataSourceRef\n preserves all values, and generates an error if a disallowed value is\n specified.\n* While dataSource only allows local objects, dataSourceRef allows objects\n in any namespaces.\n(Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.",
|
"dataSourceRef": "dataSourceRef specifies the object from which to populate the volume with data, if a non-empty volume is desired. This may be any object from a non-empty API group (non core object) or a PersistentVolumeClaim object. When this field is specified, volume binding will only succeed if the type of the specified object matches some installed volume populator or dynamic provisioner. This field will replace the functionality of the dataSource field and as such if both fields are non-empty, they must have the same value. For backwards compatibility, when namespace isn't specified in dataSourceRef, both fields (dataSource and dataSourceRef) will be set to the same value automatically if one of them is empty and the other is non-empty. When namespace is specified in dataSourceRef, dataSource isn't set to the same value and must be empty. There are three important differences between dataSource and dataSourceRef: * While dataSource only allows two specific types of objects, dataSourceRef\n allows any non-core object, as well as PersistentVolumeClaim objects.\n* While dataSource ignores disallowed values (dropping them), dataSourceRef\n preserves all values, and generates an error if a disallowed value is\n specified.\n* While dataSource only allows local objects, dataSourceRef allows objects\n in any namespaces.\n(Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.",
|
||||||
|
"volumeAttributesClassName": "volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. If specified, the CSI driver will create or update the volume with the attributes defined in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass will be applied to the claim but it's not allowed to reset this field to empty string once it is set. If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass will be set by the persistentvolume controller if it exists. If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource exists. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#volumeattributesclass (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled.",
|
||||||
}
|
}
|
||||||
|
|
||||||
func (PersistentVolumeClaimSpec) SwaggerDoc() map[string]string {
|
func (PersistentVolumeClaimSpec) SwaggerDoc() map[string]string {
|
||||||
|
@ -1355,13 +1381,15 @@ func (PersistentVolumeClaimSpec) SwaggerDoc() map[string]string {
|
||||||
}
|
}
|
||||||
|
|
||||||
var map_PersistentVolumeClaimStatus = map[string]string{
|
var map_PersistentVolumeClaimStatus = map[string]string{
|
||||||
"": "PersistentVolumeClaimStatus is the current status of a persistent volume claim.",
|
"": "PersistentVolumeClaimStatus is the current status of a persistent volume claim.",
|
||||||
"phase": "phase represents the current phase of PersistentVolumeClaim.",
|
"phase": "phase represents the current phase of PersistentVolumeClaim.",
|
||||||
"accessModes": "accessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1",
|
"accessModes": "accessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1",
|
||||||
"capacity": "capacity represents the actual resources of the underlying volume.",
|
"capacity": "capacity represents the actual resources of the underlying volume.",
|
||||||
"conditions": "conditions is the current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.",
|
"conditions": "conditions is the current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.",
|
||||||
"allocatedResources": "allocatedResources tracks the resources allocated to a PVC including its capacity. Key names follow standard Kubernetes label syntax. Valid values are either:\n\t* Un-prefixed keys:\n\t\t- storage - the capacity of the volume.\n\t* Custom resources must use implementation-defined prefixed names such as \"example.com/my-custom-resource\"\nApart from above values - keys that are unprefixed or have kubernetes.io prefix are considered reserved and hence may not be used.\n\nCapacity reported here may be larger than the actual capacity when a volume expansion operation is requested. For storage quota, the larger value from allocatedResources and PVC.spec.resources is used. If allocatedResources is not set, PVC.spec.resources alone is used for quota calculation. If a volume expansion capacity request is lowered, allocatedResources is only lowered if there are no expansion operations in progress and if the actual volume capacity is equal or lower than the requested capacity.\n\nA controller that receives PVC update with previously unknown resourceName should ignore the update for the purpose it was designed. For example - a controller that only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid resources associated with PVC.\n\nThis is an alpha field and requires enabling RecoverVolumeExpansionFailure feature.",
|
"allocatedResources": "allocatedResources tracks the resources allocated to a PVC including its capacity. Key names follow standard Kubernetes label syntax. Valid values are either:\n\t* Un-prefixed keys:\n\t\t- storage - the capacity of the volume.\n\t* Custom resources must use implementation-defined prefixed names such as \"example.com/my-custom-resource\"\nApart from above values - keys that are unprefixed or have kubernetes.io prefix are considered reserved and hence may not be used.\n\nCapacity reported here may be larger than the actual capacity when a volume expansion operation is requested. For storage quota, the larger value from allocatedResources and PVC.spec.resources is used. If allocatedResources is not set, PVC.spec.resources alone is used for quota calculation. If a volume expansion capacity request is lowered, allocatedResources is only lowered if there are no expansion operations in progress and if the actual volume capacity is equal or lower than the requested capacity.\n\nA controller that receives PVC update with previously unknown resourceName should ignore the update for the purpose it was designed. For example - a controller that only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid resources associated with PVC.\n\nThis is an alpha field and requires enabling RecoverVolumeExpansionFailure feature.",
|
||||||
"allocatedResourceStatuses": "allocatedResourceStatuses stores status of resource being resized for the given PVC. Key names follow standard Kubernetes label syntax. Valid values are either:\n\t* Un-prefixed keys:\n\t\t- storage - the capacity of the volume.\n\t* Custom resources must use implementation-defined prefixed names such as \"example.com/my-custom-resource\"\nApart from above values - keys that are unprefixed or have kubernetes.io prefix are considered reserved and hence may not be used.\n\nClaimResourceStatus can be in any of following states:\n\t- ControllerResizeInProgress:\n\t\tState set when resize controller starts resizing the volume in control-plane.\n\t- ControllerResizeFailed:\n\t\tState set when resize has failed in resize controller with a terminal error.\n\t- NodeResizePending:\n\t\tState set when resize controller has finished resizing the volume but further resizing of\n\t\tvolume is needed on the node.\n\t- NodeResizeInProgress:\n\t\tState set when kubelet starts resizing the volume.\n\t- NodeResizeFailed:\n\t\tState set when resizing has failed in kubelet with a terminal error. Transient errors don't set\n\t\tNodeResizeFailed.\nFor example: if expanding a PVC for more capacity - this field can be one of the following states:\n\t- pvc.status.allocatedResourceStatus['storage'] = \"ControllerResizeInProgress\"\n - pvc.status.allocatedResourceStatus['storage'] = \"ControllerResizeFailed\"\n - pvc.status.allocatedResourceStatus['storage'] = \"NodeResizePending\"\n - pvc.status.allocatedResourceStatus['storage'] = \"NodeResizeInProgress\"\n - pvc.status.allocatedResourceStatus['storage'] = \"NodeResizeFailed\"\nWhen this field is not set, it means that no resize operation is in progress for the given PVC.\n\nA controller that receives PVC update with previously unknown resourceName or ClaimResourceStatus should ignore the update for the purpose it was designed. For example - a controller that only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid resources associated with PVC.\n\nThis is an alpha field and requires enabling RecoverVolumeExpansionFailure feature.",
|
"allocatedResourceStatuses": "allocatedResourceStatuses stores status of resource being resized for the given PVC. Key names follow standard Kubernetes label syntax. Valid values are either:\n\t* Un-prefixed keys:\n\t\t- storage - the capacity of the volume.\n\t* Custom resources must use implementation-defined prefixed names such as \"example.com/my-custom-resource\"\nApart from above values - keys that are unprefixed or have kubernetes.io prefix are considered reserved and hence may not be used.\n\nClaimResourceStatus can be in any of following states:\n\t- ControllerResizeInProgress:\n\t\tState set when resize controller starts resizing the volume in control-plane.\n\t- ControllerResizeFailed:\n\t\tState set when resize has failed in resize controller with a terminal error.\n\t- NodeResizePending:\n\t\tState set when resize controller has finished resizing the volume but further resizing of\n\t\tvolume is needed on the node.\n\t- NodeResizeInProgress:\n\t\tState set when kubelet starts resizing the volume.\n\t- NodeResizeFailed:\n\t\tState set when resizing has failed in kubelet with a terminal error. Transient errors don't set\n\t\tNodeResizeFailed.\nFor example: if expanding a PVC for more capacity - this field can be one of the following states:\n\t- pvc.status.allocatedResourceStatus['storage'] = \"ControllerResizeInProgress\"\n - pvc.status.allocatedResourceStatus['storage'] = \"ControllerResizeFailed\"\n - pvc.status.allocatedResourceStatus['storage'] = \"NodeResizePending\"\n - pvc.status.allocatedResourceStatus['storage'] = \"NodeResizeInProgress\"\n - pvc.status.allocatedResourceStatus['storage'] = \"NodeResizeFailed\"\nWhen this field is not set, it means that no resize operation is in progress for the given PVC.\n\nA controller that receives PVC update with previously unknown resourceName or ClaimResourceStatus should ignore the update for the purpose it was designed. For example - a controller that only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid resources associated with PVC.\n\nThis is an alpha field and requires enabling RecoverVolumeExpansionFailure feature.",
|
||||||
|
"currentVolumeAttributesClassName": "currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using. When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim This is an alpha field and requires enabling VolumeAttributesClass feature.",
|
||||||
|
"modifyVolumeStatus": "ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. When this is unset, there is no ModifyVolume operation being attempted. This is an alpha field and requires enabling VolumeAttributesClass feature.",
|
||||||
}
|
}
|
||||||
|
|
||||||
func (PersistentVolumeClaimStatus) SwaggerDoc() map[string]string {
|
func (PersistentVolumeClaimStatus) SwaggerDoc() map[string]string {
|
||||||
|
@ -1438,6 +1466,7 @@ var map_PersistentVolumeSpec = map[string]string{
|
||||||
"mountOptions": "mountOptions is the list of mount options, e.g. [\"ro\", \"soft\"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options",
|
"mountOptions": "mountOptions is the list of mount options, e.g. [\"ro\", \"soft\"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options",
|
||||||
"volumeMode": "volumeMode defines if a volume is intended to be used with a formatted filesystem or to remain in raw block state. Value of Filesystem is implied when not included in spec.",
|
"volumeMode": "volumeMode defines if a volume is intended to be used with a formatted filesystem or to remain in raw block state. Value of Filesystem is implied when not included in spec.",
|
||||||
"nodeAffinity": "nodeAffinity defines constraints that limit what nodes this volume can be accessed from. This field influences the scheduling of pods that use this volume.",
|
"nodeAffinity": "nodeAffinity defines constraints that limit what nodes this volume can be accessed from. This field influences the scheduling of pods that use this volume.",
|
||||||
|
"volumeAttributesClassName": "Name of VolumeAttributesClass to which this persistent volume belongs. Empty value is not allowed. When this field is not set, it indicates that this volume does not belong to any VolumeAttributesClass. This field is mutable and can be changed by the CSI driver after a volume has been updated successfully to a new class. For an unbound PersistentVolume, the volumeAttributesClassName will be matched with unbound PersistentVolumeClaims during the binding process. This is an alpha field and requires enabling VolumeAttributesClass feature.",
|
||||||
}
|
}
|
||||||
|
|
||||||
func (PersistentVolumeSpec) SwaggerDoc() map[string]string {
|
func (PersistentVolumeSpec) SwaggerDoc() map[string]string {
|
||||||
|
@ -1449,7 +1478,7 @@ var map_PersistentVolumeStatus = map[string]string{
|
||||||
"phase": "phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase",
|
"phase": "phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase",
|
||||||
"message": "message is a human-readable message indicating details about why the volume is in this state.",
|
"message": "message is a human-readable message indicating details about why the volume is in this state.",
|
||||||
"reason": "reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.",
|
"reason": "reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.",
|
||||||
"lastPhaseTransitionTime": "lastPhaseTransitionTime is the time the phase transitioned from one to another and automatically resets to current time everytime a volume phase transitions. This is an alpha field and requires enabling PersistentVolumeLastPhaseTransitionTime feature.",
|
"lastPhaseTransitionTime": "lastPhaseTransitionTime is the time the phase transitioned from one to another and automatically resets to current time everytime a volume phase transitions. This is a beta field and requires the PersistentVolumeLastPhaseTransitionTime feature to be enabled (enabled by default).",
|
||||||
}
|
}
|
||||||
|
|
||||||
func (PersistentVolumeStatus) SwaggerDoc() map[string]string {
|
func (PersistentVolumeStatus) SwaggerDoc() map[string]string {
|
||||||
|
@ -1489,10 +1518,12 @@ func (PodAffinity) SwaggerDoc() map[string]string {
|
||||||
|
|
||||||
var map_PodAffinityTerm = map[string]string{
|
var map_PodAffinityTerm = map[string]string{
|
||||||
"": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key <topologyKey> matches that of any node on which a pod of the set of pods is running",
|
"": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key <topologyKey> matches that of any node on which a pod of the set of pods is running",
|
||||||
"labelSelector": "A label query over a set of resources, in this case pods.",
|
"labelSelector": "A label query over a set of resources, in this case pods. If it's null, this PodAffinityTerm matches with no Pods.",
|
||||||
"namespaces": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\".",
|
"namespaces": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\".",
|
||||||
"topologyKey": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.",
|
"topologyKey": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.",
|
||||||
"namespaceSelector": "A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means \"this pod's namespace\". An empty selector ({}) matches all namespaces.",
|
"namespaceSelector": "A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means \"this pod's namespace\". An empty selector ({}) matches all namespaces.",
|
||||||
|
"matchLabelKeys": "MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both MatchLabelKeys and LabelSelector. Also, MatchLabelKeys cannot be set when LabelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.",
|
||||||
|
"mismatchLabelKeys": "MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both MismatchLabelKeys and LabelSelector. Also, MismatchLabelKeys cannot be set when LabelSelector isn't set. This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate.",
|
||||||
}
|
}
|
||||||
|
|
||||||
func (PodAffinityTerm) SwaggerDoc() map[string]string {
|
func (PodAffinityTerm) SwaggerDoc() map[string]string {
|
||||||
|
@ -2325,7 +2356,7 @@ var map_ServicePort = map[string]string{
|
||||||
"": "ServicePort contains information on service's port.",
|
"": "ServicePort contains information on service's port.",
|
||||||
"name": "The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. When considering the endpoints for a Service, this must match the 'name' field in the EndpointPort. Optional if only one ServicePort is defined on this service.",
|
"name": "The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. When considering the endpoints for a Service, this must match the 'name' field in the EndpointPort. Optional if only one ServicePort is defined on this service.",
|
||||||
"protocol": "The IP protocol for this port. Supports \"TCP\", \"UDP\", and \"SCTP\". Default is TCP.",
|
"protocol": "The IP protocol for this port. Supports \"TCP\", \"UDP\", and \"SCTP\". Default is TCP.",
|
||||||
"appProtocol": "The application protocol for this port. This is used as a hint for implementations to offer richer behavior for protocols that they understand. This field follows standard Kubernetes label syntax. Valid values are either:\n\n* Un-prefixed protocol names - reserved for IANA standard service names (as per RFC-6335 and https://www.iana.org/assignments/service-names).\n\n* Kubernetes-defined prefixed names:\n * 'kubernetes.io/h2c' - HTTP/2 over cleartext as described in https://www.rfc-editor.org/rfc/rfc7540\n * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455\n * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455\n\n* Other protocols should use implementation-defined prefixed names such as mycompany.com/my-custom-protocol.",
|
"appProtocol": "The application protocol for this port. This is used as a hint for implementations to offer richer behavior for protocols that they understand. This field follows standard Kubernetes label syntax. Valid values are either:\n\n* Un-prefixed protocol names - reserved for IANA standard service names (as per RFC-6335 and https://www.iana.org/assignments/service-names).\n\n* Kubernetes-defined prefixed names:\n * 'kubernetes.io/h2c' - HTTP/2 prior knowledge over cleartext as described in https://www.rfc-editor.org/rfc/rfc9113.html#name-starting-http-2-with-prior-\n * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455\n * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455\n\n* Other protocols should use implementation-defined prefixed names such as mycompany.com/my-custom-protocol.",
|
||||||
"port": "The port that will be exposed by this service.",
|
"port": "The port that will be exposed by this service.",
|
||||||
"targetPort": "Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of the 'port' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the 'port' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service",
|
"targetPort": "Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of the 'port' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the 'port' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service",
|
||||||
"nodePort": "The port on each node on which this service is exposed when type is NodePort or LoadBalancer. Usually assigned by the system. If a value is specified, in-range, and not in use it will be used, otherwise the operation will fail. If not specified, a port will be allocated if this Service requires one. If this field is specified when creating a Service which does not need it, creation will fail. This field will be wiped when updating a Service to no longer need it (e.g. changing type from NodePort to ClusterIP). More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport",
|
"nodePort": "The port on each node on which this service is exposed when type is NodePort or LoadBalancer. Usually assigned by the system. If a value is specified, in-range, and not in use it will be used, otherwise the operation will fail. If not specified, a port will be allocated if this Service requires one. If this field is specified when creating a Service which does not need it, creation will fail. This field will be wiped when updating a Service to no longer need it (e.g. changing type from NodePort to ClusterIP). More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport",
|
||||||
|
@ -2390,6 +2421,15 @@ func (SessionAffinityConfig) SwaggerDoc() map[string]string {
|
||||||
return map_SessionAffinityConfig
|
return map_SessionAffinityConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var map_SleepAction = map[string]string{
|
||||||
|
"": "SleepAction describes a \"sleep\" action.",
|
||||||
|
"seconds": "Seconds is the number of seconds to sleep.",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (SleepAction) SwaggerDoc() map[string]string {
|
||||||
|
return map_SleepAction
|
||||||
|
}
|
||||||
|
|
||||||
var map_StorageOSPersistentVolumeSource = map[string]string{
|
var map_StorageOSPersistentVolumeSource = map[string]string{
|
||||||
"": "Represents a StorageOS persistent volume resource.",
|
"": "Represents a StorageOS persistent volume resource.",
|
||||||
"volumeName": "volumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.",
|
"volumeName": "volumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.",
|
||||||
|
@ -2566,12 +2606,23 @@ var map_VolumeProjection = map[string]string{
|
||||||
"downwardAPI": "downwardAPI information about the downwardAPI data to project",
|
"downwardAPI": "downwardAPI information about the downwardAPI data to project",
|
||||||
"configMap": "configMap information about the configMap data to project",
|
"configMap": "configMap information about the configMap data to project",
|
||||||
"serviceAccountToken": "serviceAccountToken is information about the serviceAccountToken data to project",
|
"serviceAccountToken": "serviceAccountToken is information about the serviceAccountToken data to project",
|
||||||
|
"clusterTrustBundle": "ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field of ClusterTrustBundle objects in an auto-updating file.\n\nAlpha, gated by the ClusterTrustBundleProjection feature gate.\n\nClusterTrustBundle objects can either be selected by name, or by the combination of signer name and a label selector.\n\nKubelet performs aggressive normalization of the PEM contents written into the pod filesystem. Esoteric PEM features such as inter-block comments and block headers are stripped. Certificates are deduplicated. The ordering of certificates within the file is arbitrary, and Kubelet may change the order over time.",
|
||||||
}
|
}
|
||||||
|
|
||||||
func (VolumeProjection) SwaggerDoc() map[string]string {
|
func (VolumeProjection) SwaggerDoc() map[string]string {
|
||||||
return map_VolumeProjection
|
return map_VolumeProjection
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var map_VolumeResourceRequirements = map[string]string{
|
||||||
|
"": "VolumeResourceRequirements describes the storage resource requirements for a volume.",
|
||||||
|
"limits": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
|
||||||
|
"requests": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (VolumeResourceRequirements) SwaggerDoc() map[string]string {
|
||||||
|
return map_VolumeResourceRequirements
|
||||||
|
}
|
||||||
|
|
||||||
var map_VolumeSource = map[string]string{
|
var map_VolumeSource = map[string]string{
|
||||||
"": "Represents the source of a volume to mount. Only one of its members may be specified.",
|
"": "Represents the source of a volume to mount. Only one of its members may be specified.",
|
||||||
"hostPath": "hostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath",
|
"hostPath": "hostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath",
|
||||||
|
|
|
@ -466,6 +466,42 @@ func (in *ClientIPConfig) DeepCopy() *ClientIPConfig {
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *ClusterTrustBundleProjection) DeepCopyInto(out *ClusterTrustBundleProjection) {
|
||||||
|
*out = *in
|
||||||
|
if in.Name != nil {
|
||||||
|
in, out := &in.Name, &out.Name
|
||||||
|
*out = new(string)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
|
if in.SignerName != nil {
|
||||||
|
in, out := &in.SignerName, &out.SignerName
|
||||||
|
*out = new(string)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
|
if in.LabelSelector != nil {
|
||||||
|
in, out := &in.LabelSelector, &out.LabelSelector
|
||||||
|
*out = new(metav1.LabelSelector)
|
||||||
|
(*in).DeepCopyInto(*out)
|
||||||
|
}
|
||||||
|
if in.Optional != nil {
|
||||||
|
in, out := &in.Optional, &out.Optional
|
||||||
|
*out = new(bool)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterTrustBundleProjection.
|
||||||
|
func (in *ClusterTrustBundleProjection) DeepCopy() *ClusterTrustBundleProjection {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(ClusterTrustBundleProjection)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *ComponentCondition) DeepCopyInto(out *ComponentCondition) {
|
func (in *ComponentCondition) DeepCopyInto(out *ComponentCondition) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
@ -2045,6 +2081,11 @@ func (in *LifecycleHandler) DeepCopyInto(out *LifecycleHandler) {
|
||||||
*out = new(TCPSocketAction)
|
*out = new(TCPSocketAction)
|
||||||
**out = **in
|
**out = **in
|
||||||
}
|
}
|
||||||
|
if in.Sleep != nil {
|
||||||
|
in, out := &in.Sleep, &out.Sleep
|
||||||
|
*out = new(SleepAction)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2228,6 +2269,11 @@ func (in *List) DeepCopyObject() runtime.Object {
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *LoadBalancerIngress) DeepCopyInto(out *LoadBalancerIngress) {
|
func (in *LoadBalancerIngress) DeepCopyInto(out *LoadBalancerIngress) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
if in.IPMode != nil {
|
||||||
|
in, out := &in.IPMode, &out.IPMode
|
||||||
|
*out = new(LoadBalancerIPMode)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
if in.Ports != nil {
|
if in.Ports != nil {
|
||||||
in, out := &in.Ports, &out.Ports
|
in, out := &in.Ports, &out.Ports
|
||||||
*out = make([]PortStatus, len(*in))
|
*out = make([]PortStatus, len(*in))
|
||||||
|
@ -2308,6 +2354,22 @@ func (in *LocalVolumeSource) DeepCopy() *LocalVolumeSource {
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *ModifyVolumeStatus) DeepCopyInto(out *ModifyVolumeStatus) {
|
||||||
|
*out = *in
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ModifyVolumeStatus.
|
||||||
|
func (in *ModifyVolumeStatus) DeepCopy() *ModifyVolumeStatus {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(ModifyVolumeStatus)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *NFSVolumeSource) DeepCopyInto(out *NFSVolumeSource) {
|
func (in *NFSVolumeSource) DeepCopyInto(out *NFSVolumeSource) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
@ -3056,6 +3118,11 @@ func (in *PersistentVolumeClaimSpec) DeepCopyInto(out *PersistentVolumeClaimSpec
|
||||||
*out = new(TypedObjectReference)
|
*out = new(TypedObjectReference)
|
||||||
(*in).DeepCopyInto(*out)
|
(*in).DeepCopyInto(*out)
|
||||||
}
|
}
|
||||||
|
if in.VolumeAttributesClassName != nil {
|
||||||
|
in, out := &in.VolumeAttributesClassName, &out.VolumeAttributesClassName
|
||||||
|
*out = new(string)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3105,6 +3172,16 @@ func (in *PersistentVolumeClaimStatus) DeepCopyInto(out *PersistentVolumeClaimSt
|
||||||
(*out)[key] = val
|
(*out)[key] = val
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if in.CurrentVolumeAttributesClassName != nil {
|
||||||
|
in, out := &in.CurrentVolumeAttributesClassName, &out.CurrentVolumeAttributesClassName
|
||||||
|
*out = new(string)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
|
if in.ModifyVolumeStatus != nil {
|
||||||
|
in, out := &in.ModifyVolumeStatus, &out.ModifyVolumeStatus
|
||||||
|
*out = new(ModifyVolumeStatus)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3347,6 +3424,11 @@ func (in *PersistentVolumeSpec) DeepCopyInto(out *PersistentVolumeSpec) {
|
||||||
*out = new(VolumeNodeAffinity)
|
*out = new(VolumeNodeAffinity)
|
||||||
(*in).DeepCopyInto(*out)
|
(*in).DeepCopyInto(*out)
|
||||||
}
|
}
|
||||||
|
if in.VolumeAttributesClassName != nil {
|
||||||
|
in, out := &in.VolumeAttributesClassName, &out.VolumeAttributesClassName
|
||||||
|
*out = new(string)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3472,6 +3554,16 @@ func (in *PodAffinityTerm) DeepCopyInto(out *PodAffinityTerm) {
|
||||||
*out = new(metav1.LabelSelector)
|
*out = new(metav1.LabelSelector)
|
||||||
(*in).DeepCopyInto(*out)
|
(*in).DeepCopyInto(*out)
|
||||||
}
|
}
|
||||||
|
if in.MatchLabelKeys != nil {
|
||||||
|
in, out := &in.MatchLabelKeys, &out.MatchLabelKeys
|
||||||
|
*out = make([]string, len(*in))
|
||||||
|
copy(*out, *in)
|
||||||
|
}
|
||||||
|
if in.MismatchLabelKeys != nil {
|
||||||
|
in, out := &in.MismatchLabelKeys, &out.MismatchLabelKeys
|
||||||
|
*out = make([]string, len(*in))
|
||||||
|
copy(*out, *in)
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5681,6 +5773,22 @@ func (in *SessionAffinityConfig) DeepCopy() *SessionAffinityConfig {
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *SleepAction) DeepCopyInto(out *SleepAction) {
|
||||||
|
*out = *in
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SleepAction.
|
||||||
|
func (in *SleepAction) DeepCopy() *SleepAction {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(SleepAction)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *StorageOSPersistentVolumeSource) DeepCopyInto(out *StorageOSPersistentVolumeSource) {
|
func (in *StorageOSPersistentVolumeSource) DeepCopyInto(out *StorageOSPersistentVolumeSource) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
@ -6027,6 +6135,11 @@ func (in *VolumeProjection) DeepCopyInto(out *VolumeProjection) {
|
||||||
*out = new(ServiceAccountTokenProjection)
|
*out = new(ServiceAccountTokenProjection)
|
||||||
(*in).DeepCopyInto(*out)
|
(*in).DeepCopyInto(*out)
|
||||||
}
|
}
|
||||||
|
if in.ClusterTrustBundle != nil {
|
||||||
|
in, out := &in.ClusterTrustBundle, &out.ClusterTrustBundle
|
||||||
|
*out = new(ClusterTrustBundleProjection)
|
||||||
|
(*in).DeepCopyInto(*out)
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6040,6 +6153,36 @@ func (in *VolumeProjection) DeepCopy() *VolumeProjection {
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *VolumeResourceRequirements) DeepCopyInto(out *VolumeResourceRequirements) {
|
||||||
|
*out = *in
|
||||||
|
if in.Limits != nil {
|
||||||
|
in, out := &in.Limits, &out.Limits
|
||||||
|
*out = make(ResourceList, len(*in))
|
||||||
|
for key, val := range *in {
|
||||||
|
(*out)[key] = val.DeepCopy()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if in.Requests != nil {
|
||||||
|
in, out := &in.Requests, &out.Requests
|
||||||
|
*out = make(ResourceList, len(*in))
|
||||||
|
for key, val := range *in {
|
||||||
|
(*out)[key] = val.DeepCopy()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeResourceRequirements.
|
||||||
|
func (in *VolumeResourceRequirements) DeepCopy() *VolumeResourceRequirements {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(VolumeResourceRequirements)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *VolumeSource) DeepCopyInto(out *VolumeSource) {
|
func (in *VolumeSource) DeepCopyInto(out *VolumeSource) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
|
|
@ -118,7 +118,7 @@ message EndpointHints {
|
||||||
// +structType=atomic
|
// +structType=atomic
|
||||||
message EndpointPort {
|
message EndpointPort {
|
||||||
// name represents the name of this port. All ports in an EndpointSlice must have a unique name.
|
// name represents the name of this port. All ports in an EndpointSlice must have a unique name.
|
||||||
// If the EndpointSlice is dervied from a Kubernetes service, this corresponds to the Service.ports[].name.
|
// If the EndpointSlice is derived from a Kubernetes service, this corresponds to the Service.ports[].name.
|
||||||
// Name must either be an empty string or pass DNS_LABEL validation:
|
// Name must either be an empty string or pass DNS_LABEL validation:
|
||||||
// * must be no more than 63 characters long.
|
// * must be no more than 63 characters long.
|
||||||
// * must consist of lower case alphanumeric characters or '-'.
|
// * must consist of lower case alphanumeric characters or '-'.
|
||||||
|
@ -145,7 +145,7 @@ message EndpointPort {
|
||||||
// RFC-6335 and https://www.iana.org/assignments/service-names).
|
// RFC-6335 and https://www.iana.org/assignments/service-names).
|
||||||
//
|
//
|
||||||
// * Kubernetes-defined prefixed names:
|
// * Kubernetes-defined prefixed names:
|
||||||
// * 'kubernetes.io/h2c' - HTTP/2 over cleartext as described in https://www.rfc-editor.org/rfc/rfc7540
|
// * 'kubernetes.io/h2c' - HTTP/2 prior knowledge over cleartext as described in https://www.rfc-editor.org/rfc/rfc9113.html#name-starting-http-2-with-prior-
|
||||||
// * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455
|
// * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455
|
||||||
// * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455
|
// * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455
|
||||||
//
|
//
|
||||||
|
|
|
@ -168,7 +168,7 @@ type ForZone struct {
|
||||||
// +structType=atomic
|
// +structType=atomic
|
||||||
type EndpointPort struct {
|
type EndpointPort struct {
|
||||||
// name represents the name of this port. All ports in an EndpointSlice must have a unique name.
|
// name represents the name of this port. All ports in an EndpointSlice must have a unique name.
|
||||||
// If the EndpointSlice is dervied from a Kubernetes service, this corresponds to the Service.ports[].name.
|
// If the EndpointSlice is derived from a Kubernetes service, this corresponds to the Service.ports[].name.
|
||||||
// Name must either be an empty string or pass DNS_LABEL validation:
|
// Name must either be an empty string or pass DNS_LABEL validation:
|
||||||
// * must be no more than 63 characters long.
|
// * must be no more than 63 characters long.
|
||||||
// * must consist of lower case alphanumeric characters or '-'.
|
// * must consist of lower case alphanumeric characters or '-'.
|
||||||
|
@ -195,7 +195,7 @@ type EndpointPort struct {
|
||||||
// RFC-6335 and https://www.iana.org/assignments/service-names).
|
// RFC-6335 and https://www.iana.org/assignments/service-names).
|
||||||
//
|
//
|
||||||
// * Kubernetes-defined prefixed names:
|
// * Kubernetes-defined prefixed names:
|
||||||
// * 'kubernetes.io/h2c' - HTTP/2 over cleartext as described in https://www.rfc-editor.org/rfc/rfc7540
|
// * 'kubernetes.io/h2c' - HTTP/2 prior knowledge over cleartext as described in https://www.rfc-editor.org/rfc/rfc9113.html#name-starting-http-2-with-prior-
|
||||||
// * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455
|
// * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455
|
||||||
// * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455
|
// * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455
|
||||||
//
|
//
|
||||||
|
|
|
@ -65,10 +65,10 @@ func (EndpointHints) SwaggerDoc() map[string]string {
|
||||||
|
|
||||||
var map_EndpointPort = map[string]string{
|
var map_EndpointPort = map[string]string{
|
||||||
"": "EndpointPort represents a Port used by an EndpointSlice",
|
"": "EndpointPort represents a Port used by an EndpointSlice",
|
||||||
"name": "name represents the name of this port. All ports in an EndpointSlice must have a unique name. If the EndpointSlice is dervied from a Kubernetes service, this corresponds to the Service.ports[].name. Name must either be an empty string or pass DNS_LABEL validation: * must be no more than 63 characters long. * must consist of lower case alphanumeric characters or '-'. * must start and end with an alphanumeric character. Default is empty string.",
|
"name": "name represents the name of this port. All ports in an EndpointSlice must have a unique name. If the EndpointSlice is derived from a Kubernetes service, this corresponds to the Service.ports[].name. Name must either be an empty string or pass DNS_LABEL validation: * must be no more than 63 characters long. * must consist of lower case alphanumeric characters or '-'. * must start and end with an alphanumeric character. Default is empty string.",
|
||||||
"protocol": "protocol represents the IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.",
|
"protocol": "protocol represents the IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.",
|
||||||
"port": "port represents the port number of the endpoint. If this is not specified, ports are not restricted and must be interpreted in the context of the specific consumer.",
|
"port": "port represents the port number of the endpoint. If this is not specified, ports are not restricted and must be interpreted in the context of the specific consumer.",
|
||||||
"appProtocol": "The application protocol for this port. This is used as a hint for implementations to offer richer behavior for protocols that they understand. This field follows standard Kubernetes label syntax. Valid values are either:\n\n* Un-prefixed protocol names - reserved for IANA standard service names (as per RFC-6335 and https://www.iana.org/assignments/service-names).\n\n* Kubernetes-defined prefixed names:\n * 'kubernetes.io/h2c' - HTTP/2 over cleartext as described in https://www.rfc-editor.org/rfc/rfc7540\n * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455\n * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455\n\n* Other protocols should use implementation-defined prefixed names such as mycompany.com/my-custom-protocol.",
|
"appProtocol": "The application protocol for this port. This is used as a hint for implementations to offer richer behavior for protocols that they understand. This field follows standard Kubernetes label syntax. Valid values are either:\n\n* Un-prefixed protocol names - reserved for IANA standard service names (as per RFC-6335 and https://www.iana.org/assignments/service-names).\n\n* Kubernetes-defined prefixed names:\n * 'kubernetes.io/h2c' - HTTP/2 prior knowledge over cleartext as described in https://www.rfc-editor.org/rfc/rfc9113.html#name-starting-http-2-with-prior-\n * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455\n * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455\n\n* Other protocols should use implementation-defined prefixed names such as mycompany.com/my-custom-protocol.",
|
||||||
}
|
}
|
||||||
|
|
||||||
func (EndpointPort) SwaggerDoc() map[string]string {
|
func (EndpointPort) SwaggerDoc() map[string]string {
|
||||||
|
|
|
@ -119,7 +119,7 @@ message EndpointHints {
|
||||||
// EndpointPort represents a Port used by an EndpointSlice
|
// EndpointPort represents a Port used by an EndpointSlice
|
||||||
message EndpointPort {
|
message EndpointPort {
|
||||||
// name represents the name of this port. All ports in an EndpointSlice must have a unique name.
|
// name represents the name of this port. All ports in an EndpointSlice must have a unique name.
|
||||||
// If the EndpointSlice is dervied from a Kubernetes service, this corresponds to the Service.ports[].name.
|
// If the EndpointSlice is derived from a Kubernetes service, this corresponds to the Service.ports[].name.
|
||||||
// Name must either be an empty string or pass DNS_LABEL validation:
|
// Name must either be an empty string or pass DNS_LABEL validation:
|
||||||
// * must be no more than 63 characters long.
|
// * must be no more than 63 characters long.
|
||||||
// * must consist of lower case alphanumeric characters or '-'.
|
// * must consist of lower case alphanumeric characters or '-'.
|
||||||
|
|
|
@ -172,7 +172,7 @@ type ForZone struct {
|
||||||
// EndpointPort represents a Port used by an EndpointSlice
|
// EndpointPort represents a Port used by an EndpointSlice
|
||||||
type EndpointPort struct {
|
type EndpointPort struct {
|
||||||
// name represents the name of this port. All ports in an EndpointSlice must have a unique name.
|
// name represents the name of this port. All ports in an EndpointSlice must have a unique name.
|
||||||
// If the EndpointSlice is dervied from a Kubernetes service, this corresponds to the Service.ports[].name.
|
// If the EndpointSlice is derived from a Kubernetes service, this corresponds to the Service.ports[].name.
|
||||||
// Name must either be an empty string or pass DNS_LABEL validation:
|
// Name must either be an empty string or pass DNS_LABEL validation:
|
||||||
// * must be no more than 63 characters long.
|
// * must be no more than 63 characters long.
|
||||||
// * must consist of lower case alphanumeric characters or '-'.
|
// * must consist of lower case alphanumeric characters or '-'.
|
||||||
|
|
|
@ -64,7 +64,7 @@ func (EndpointHints) SwaggerDoc() map[string]string {
|
||||||
|
|
||||||
var map_EndpointPort = map[string]string{
|
var map_EndpointPort = map[string]string{
|
||||||
"": "EndpointPort represents a Port used by an EndpointSlice",
|
"": "EndpointPort represents a Port used by an EndpointSlice",
|
||||||
"name": "name represents the name of this port. All ports in an EndpointSlice must have a unique name. If the EndpointSlice is dervied from a Kubernetes service, this corresponds to the Service.ports[].name. Name must either be an empty string or pass DNS_LABEL validation: * must be no more than 63 characters long. * must consist of lower case alphanumeric characters or '-'. * must start and end with an alphanumeric character. Default is empty string.",
|
"name": "name represents the name of this port. All ports in an EndpointSlice must have a unique name. If the EndpointSlice is derived from a Kubernetes service, this corresponds to the Service.ports[].name. Name must either be an empty string or pass DNS_LABEL validation: * must be no more than 63 characters long. * must consist of lower case alphanumeric characters or '-'. * must start and end with an alphanumeric character. Default is empty string.",
|
||||||
"protocol": "protocol represents the IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.",
|
"protocol": "protocol represents the IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.",
|
||||||
"port": "port represents the port number of the endpoint. If this is not specified, ports are not restricted and must be interpreted in the context of the specific consumer.",
|
"port": "port represents the port number of the endpoint. If this is not specified, ports are not restricted and must be interpreted in the context of the specific consumer.",
|
||||||
"appProtocol": "appProtocol represents the application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and https://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.",
|
"appProtocol": "appProtocol represents the application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and https://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2019 The Kubernetes Authors.
|
Copyright 2023 The Kubernetes Authors.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -17,9 +17,8 @@ limitations under the License.
|
||||||
// +k8s:deepcopy-gen=package
|
// +k8s:deepcopy-gen=package
|
||||||
// +k8s:protobuf-gen=package
|
// +k8s:protobuf-gen=package
|
||||||
// +k8s:openapi-gen=true
|
// +k8s:openapi-gen=true
|
||||||
// +k8s:prerelease-lifecycle-gen=true
|
|
||||||
|
|
||||||
// +groupName=flowcontrol.apiserver.k8s.io
|
// +groupName=flowcontrol.apiserver.k8s.io
|
||||||
|
|
||||||
// Package v1alpha1 holds api types of version v1alpha1 for group "flowcontrol.apiserver.k8s.io".
|
// Package v1 holds api types of version v1 for group "flowcontrol.apiserver.k8s.io".
|
||||||
package v1alpha1 // import "k8s.io/api/flowcontrol/v1alpha1"
|
package v1 // import "k8s.io/api/flowcontrol/v1"
|
|
@ -15,9 +15,9 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
|
// Code generated by protoc-gen-gogo. DO NOT EDIT.
|
||||||
// source: k8s.io/kubernetes/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.proto
|
// source: k8s.io/kubernetes/vendor/k8s.io/api/flowcontrol/v1/generated.proto
|
||||||
|
|
||||||
package v1alpha1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
fmt "fmt"
|
fmt "fmt"
|
||||||
|
@ -46,7 +46,7 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
|
||||||
func (m *ExemptPriorityLevelConfiguration) Reset() { *m = ExemptPriorityLevelConfiguration{} }
|
func (m *ExemptPriorityLevelConfiguration) Reset() { *m = ExemptPriorityLevelConfiguration{} }
|
||||||
func (*ExemptPriorityLevelConfiguration) ProtoMessage() {}
|
func (*ExemptPriorityLevelConfiguration) ProtoMessage() {}
|
||||||
func (*ExemptPriorityLevelConfiguration) Descriptor() ([]byte, []int) {
|
func (*ExemptPriorityLevelConfiguration) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{0}
|
return fileDescriptor_f8a25df358697d27, []int{0}
|
||||||
}
|
}
|
||||||
func (m *ExemptPriorityLevelConfiguration) XXX_Unmarshal(b []byte) error {
|
func (m *ExemptPriorityLevelConfiguration) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -74,7 +74,7 @@ var xxx_messageInfo_ExemptPriorityLevelConfiguration proto.InternalMessageInfo
|
||||||
func (m *FlowDistinguisherMethod) Reset() { *m = FlowDistinguisherMethod{} }
|
func (m *FlowDistinguisherMethod) Reset() { *m = FlowDistinguisherMethod{} }
|
||||||
func (*FlowDistinguisherMethod) ProtoMessage() {}
|
func (*FlowDistinguisherMethod) ProtoMessage() {}
|
||||||
func (*FlowDistinguisherMethod) Descriptor() ([]byte, []int) {
|
func (*FlowDistinguisherMethod) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{1}
|
return fileDescriptor_f8a25df358697d27, []int{1}
|
||||||
}
|
}
|
||||||
func (m *FlowDistinguisherMethod) XXX_Unmarshal(b []byte) error {
|
func (m *FlowDistinguisherMethod) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -102,7 +102,7 @@ var xxx_messageInfo_FlowDistinguisherMethod proto.InternalMessageInfo
|
||||||
func (m *FlowSchema) Reset() { *m = FlowSchema{} }
|
func (m *FlowSchema) Reset() { *m = FlowSchema{} }
|
||||||
func (*FlowSchema) ProtoMessage() {}
|
func (*FlowSchema) ProtoMessage() {}
|
||||||
func (*FlowSchema) Descriptor() ([]byte, []int) {
|
func (*FlowSchema) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{2}
|
return fileDescriptor_f8a25df358697d27, []int{2}
|
||||||
}
|
}
|
||||||
func (m *FlowSchema) XXX_Unmarshal(b []byte) error {
|
func (m *FlowSchema) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -130,7 +130,7 @@ var xxx_messageInfo_FlowSchema proto.InternalMessageInfo
|
||||||
func (m *FlowSchemaCondition) Reset() { *m = FlowSchemaCondition{} }
|
func (m *FlowSchemaCondition) Reset() { *m = FlowSchemaCondition{} }
|
||||||
func (*FlowSchemaCondition) ProtoMessage() {}
|
func (*FlowSchemaCondition) ProtoMessage() {}
|
||||||
func (*FlowSchemaCondition) Descriptor() ([]byte, []int) {
|
func (*FlowSchemaCondition) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{3}
|
return fileDescriptor_f8a25df358697d27, []int{3}
|
||||||
}
|
}
|
||||||
func (m *FlowSchemaCondition) XXX_Unmarshal(b []byte) error {
|
func (m *FlowSchemaCondition) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -158,7 +158,7 @@ var xxx_messageInfo_FlowSchemaCondition proto.InternalMessageInfo
|
||||||
func (m *FlowSchemaList) Reset() { *m = FlowSchemaList{} }
|
func (m *FlowSchemaList) Reset() { *m = FlowSchemaList{} }
|
||||||
func (*FlowSchemaList) ProtoMessage() {}
|
func (*FlowSchemaList) ProtoMessage() {}
|
||||||
func (*FlowSchemaList) Descriptor() ([]byte, []int) {
|
func (*FlowSchemaList) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{4}
|
return fileDescriptor_f8a25df358697d27, []int{4}
|
||||||
}
|
}
|
||||||
func (m *FlowSchemaList) XXX_Unmarshal(b []byte) error {
|
func (m *FlowSchemaList) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -186,7 +186,7 @@ var xxx_messageInfo_FlowSchemaList proto.InternalMessageInfo
|
||||||
func (m *FlowSchemaSpec) Reset() { *m = FlowSchemaSpec{} }
|
func (m *FlowSchemaSpec) Reset() { *m = FlowSchemaSpec{} }
|
||||||
func (*FlowSchemaSpec) ProtoMessage() {}
|
func (*FlowSchemaSpec) ProtoMessage() {}
|
||||||
func (*FlowSchemaSpec) Descriptor() ([]byte, []int) {
|
func (*FlowSchemaSpec) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{5}
|
return fileDescriptor_f8a25df358697d27, []int{5}
|
||||||
}
|
}
|
||||||
func (m *FlowSchemaSpec) XXX_Unmarshal(b []byte) error {
|
func (m *FlowSchemaSpec) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -214,7 +214,7 @@ var xxx_messageInfo_FlowSchemaSpec proto.InternalMessageInfo
|
||||||
func (m *FlowSchemaStatus) Reset() { *m = FlowSchemaStatus{} }
|
func (m *FlowSchemaStatus) Reset() { *m = FlowSchemaStatus{} }
|
||||||
func (*FlowSchemaStatus) ProtoMessage() {}
|
func (*FlowSchemaStatus) ProtoMessage() {}
|
||||||
func (*FlowSchemaStatus) Descriptor() ([]byte, []int) {
|
func (*FlowSchemaStatus) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{6}
|
return fileDescriptor_f8a25df358697d27, []int{6}
|
||||||
}
|
}
|
||||||
func (m *FlowSchemaStatus) XXX_Unmarshal(b []byte) error {
|
func (m *FlowSchemaStatus) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -242,7 +242,7 @@ var xxx_messageInfo_FlowSchemaStatus proto.InternalMessageInfo
|
||||||
func (m *GroupSubject) Reset() { *m = GroupSubject{} }
|
func (m *GroupSubject) Reset() { *m = GroupSubject{} }
|
||||||
func (*GroupSubject) ProtoMessage() {}
|
func (*GroupSubject) ProtoMessage() {}
|
||||||
func (*GroupSubject) Descriptor() ([]byte, []int) {
|
func (*GroupSubject) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{7}
|
return fileDescriptor_f8a25df358697d27, []int{7}
|
||||||
}
|
}
|
||||||
func (m *GroupSubject) XXX_Unmarshal(b []byte) error {
|
func (m *GroupSubject) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -270,7 +270,7 @@ var xxx_messageInfo_GroupSubject proto.InternalMessageInfo
|
||||||
func (m *LimitResponse) Reset() { *m = LimitResponse{} }
|
func (m *LimitResponse) Reset() { *m = LimitResponse{} }
|
||||||
func (*LimitResponse) ProtoMessage() {}
|
func (*LimitResponse) ProtoMessage() {}
|
||||||
func (*LimitResponse) Descriptor() ([]byte, []int) {
|
func (*LimitResponse) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{8}
|
return fileDescriptor_f8a25df358697d27, []int{8}
|
||||||
}
|
}
|
||||||
func (m *LimitResponse) XXX_Unmarshal(b []byte) error {
|
func (m *LimitResponse) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -298,7 +298,7 @@ var xxx_messageInfo_LimitResponse proto.InternalMessageInfo
|
||||||
func (m *LimitedPriorityLevelConfiguration) Reset() { *m = LimitedPriorityLevelConfiguration{} }
|
func (m *LimitedPriorityLevelConfiguration) Reset() { *m = LimitedPriorityLevelConfiguration{} }
|
||||||
func (*LimitedPriorityLevelConfiguration) ProtoMessage() {}
|
func (*LimitedPriorityLevelConfiguration) ProtoMessage() {}
|
||||||
func (*LimitedPriorityLevelConfiguration) Descriptor() ([]byte, []int) {
|
func (*LimitedPriorityLevelConfiguration) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{9}
|
return fileDescriptor_f8a25df358697d27, []int{9}
|
||||||
}
|
}
|
||||||
func (m *LimitedPriorityLevelConfiguration) XXX_Unmarshal(b []byte) error {
|
func (m *LimitedPriorityLevelConfiguration) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -326,7 +326,7 @@ var xxx_messageInfo_LimitedPriorityLevelConfiguration proto.InternalMessageInfo
|
||||||
func (m *NonResourcePolicyRule) Reset() { *m = NonResourcePolicyRule{} }
|
func (m *NonResourcePolicyRule) Reset() { *m = NonResourcePolicyRule{} }
|
||||||
func (*NonResourcePolicyRule) ProtoMessage() {}
|
func (*NonResourcePolicyRule) ProtoMessage() {}
|
||||||
func (*NonResourcePolicyRule) Descriptor() ([]byte, []int) {
|
func (*NonResourcePolicyRule) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{10}
|
return fileDescriptor_f8a25df358697d27, []int{10}
|
||||||
}
|
}
|
||||||
func (m *NonResourcePolicyRule) XXX_Unmarshal(b []byte) error {
|
func (m *NonResourcePolicyRule) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -354,7 +354,7 @@ var xxx_messageInfo_NonResourcePolicyRule proto.InternalMessageInfo
|
||||||
func (m *PolicyRulesWithSubjects) Reset() { *m = PolicyRulesWithSubjects{} }
|
func (m *PolicyRulesWithSubjects) Reset() { *m = PolicyRulesWithSubjects{} }
|
||||||
func (*PolicyRulesWithSubjects) ProtoMessage() {}
|
func (*PolicyRulesWithSubjects) ProtoMessage() {}
|
||||||
func (*PolicyRulesWithSubjects) Descriptor() ([]byte, []int) {
|
func (*PolicyRulesWithSubjects) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{11}
|
return fileDescriptor_f8a25df358697d27, []int{11}
|
||||||
}
|
}
|
||||||
func (m *PolicyRulesWithSubjects) XXX_Unmarshal(b []byte) error {
|
func (m *PolicyRulesWithSubjects) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -382,7 +382,7 @@ var xxx_messageInfo_PolicyRulesWithSubjects proto.InternalMessageInfo
|
||||||
func (m *PriorityLevelConfiguration) Reset() { *m = PriorityLevelConfiguration{} }
|
func (m *PriorityLevelConfiguration) Reset() { *m = PriorityLevelConfiguration{} }
|
||||||
func (*PriorityLevelConfiguration) ProtoMessage() {}
|
func (*PriorityLevelConfiguration) ProtoMessage() {}
|
||||||
func (*PriorityLevelConfiguration) Descriptor() ([]byte, []int) {
|
func (*PriorityLevelConfiguration) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{12}
|
return fileDescriptor_f8a25df358697d27, []int{12}
|
||||||
}
|
}
|
||||||
func (m *PriorityLevelConfiguration) XXX_Unmarshal(b []byte) error {
|
func (m *PriorityLevelConfiguration) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -410,7 +410,7 @@ var xxx_messageInfo_PriorityLevelConfiguration proto.InternalMessageInfo
|
||||||
func (m *PriorityLevelConfigurationCondition) Reset() { *m = PriorityLevelConfigurationCondition{} }
|
func (m *PriorityLevelConfigurationCondition) Reset() { *m = PriorityLevelConfigurationCondition{} }
|
||||||
func (*PriorityLevelConfigurationCondition) ProtoMessage() {}
|
func (*PriorityLevelConfigurationCondition) ProtoMessage() {}
|
||||||
func (*PriorityLevelConfigurationCondition) Descriptor() ([]byte, []int) {
|
func (*PriorityLevelConfigurationCondition) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{13}
|
return fileDescriptor_f8a25df358697d27, []int{13}
|
||||||
}
|
}
|
||||||
func (m *PriorityLevelConfigurationCondition) XXX_Unmarshal(b []byte) error {
|
func (m *PriorityLevelConfigurationCondition) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -438,7 +438,7 @@ var xxx_messageInfo_PriorityLevelConfigurationCondition proto.InternalMessageInf
|
||||||
func (m *PriorityLevelConfigurationList) Reset() { *m = PriorityLevelConfigurationList{} }
|
func (m *PriorityLevelConfigurationList) Reset() { *m = PriorityLevelConfigurationList{} }
|
||||||
func (*PriorityLevelConfigurationList) ProtoMessage() {}
|
func (*PriorityLevelConfigurationList) ProtoMessage() {}
|
||||||
func (*PriorityLevelConfigurationList) Descriptor() ([]byte, []int) {
|
func (*PriorityLevelConfigurationList) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{14}
|
return fileDescriptor_f8a25df358697d27, []int{14}
|
||||||
}
|
}
|
||||||
func (m *PriorityLevelConfigurationList) XXX_Unmarshal(b []byte) error {
|
func (m *PriorityLevelConfigurationList) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -466,7 +466,7 @@ var xxx_messageInfo_PriorityLevelConfigurationList proto.InternalMessageInfo
|
||||||
func (m *PriorityLevelConfigurationReference) Reset() { *m = PriorityLevelConfigurationReference{} }
|
func (m *PriorityLevelConfigurationReference) Reset() { *m = PriorityLevelConfigurationReference{} }
|
||||||
func (*PriorityLevelConfigurationReference) ProtoMessage() {}
|
func (*PriorityLevelConfigurationReference) ProtoMessage() {}
|
||||||
func (*PriorityLevelConfigurationReference) Descriptor() ([]byte, []int) {
|
func (*PriorityLevelConfigurationReference) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{15}
|
return fileDescriptor_f8a25df358697d27, []int{15}
|
||||||
}
|
}
|
||||||
func (m *PriorityLevelConfigurationReference) XXX_Unmarshal(b []byte) error {
|
func (m *PriorityLevelConfigurationReference) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -494,7 +494,7 @@ var xxx_messageInfo_PriorityLevelConfigurationReference proto.InternalMessageInf
|
||||||
func (m *PriorityLevelConfigurationSpec) Reset() { *m = PriorityLevelConfigurationSpec{} }
|
func (m *PriorityLevelConfigurationSpec) Reset() { *m = PriorityLevelConfigurationSpec{} }
|
||||||
func (*PriorityLevelConfigurationSpec) ProtoMessage() {}
|
func (*PriorityLevelConfigurationSpec) ProtoMessage() {}
|
||||||
func (*PriorityLevelConfigurationSpec) Descriptor() ([]byte, []int) {
|
func (*PriorityLevelConfigurationSpec) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{16}
|
return fileDescriptor_f8a25df358697d27, []int{16}
|
||||||
}
|
}
|
||||||
func (m *PriorityLevelConfigurationSpec) XXX_Unmarshal(b []byte) error {
|
func (m *PriorityLevelConfigurationSpec) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -522,7 +522,7 @@ var xxx_messageInfo_PriorityLevelConfigurationSpec proto.InternalMessageInfo
|
||||||
func (m *PriorityLevelConfigurationStatus) Reset() { *m = PriorityLevelConfigurationStatus{} }
|
func (m *PriorityLevelConfigurationStatus) Reset() { *m = PriorityLevelConfigurationStatus{} }
|
||||||
func (*PriorityLevelConfigurationStatus) ProtoMessage() {}
|
func (*PriorityLevelConfigurationStatus) ProtoMessage() {}
|
||||||
func (*PriorityLevelConfigurationStatus) Descriptor() ([]byte, []int) {
|
func (*PriorityLevelConfigurationStatus) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{17}
|
return fileDescriptor_f8a25df358697d27, []int{17}
|
||||||
}
|
}
|
||||||
func (m *PriorityLevelConfigurationStatus) XXX_Unmarshal(b []byte) error {
|
func (m *PriorityLevelConfigurationStatus) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -550,7 +550,7 @@ var xxx_messageInfo_PriorityLevelConfigurationStatus proto.InternalMessageInfo
|
||||||
func (m *QueuingConfiguration) Reset() { *m = QueuingConfiguration{} }
|
func (m *QueuingConfiguration) Reset() { *m = QueuingConfiguration{} }
|
||||||
func (*QueuingConfiguration) ProtoMessage() {}
|
func (*QueuingConfiguration) ProtoMessage() {}
|
||||||
func (*QueuingConfiguration) Descriptor() ([]byte, []int) {
|
func (*QueuingConfiguration) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{18}
|
return fileDescriptor_f8a25df358697d27, []int{18}
|
||||||
}
|
}
|
||||||
func (m *QueuingConfiguration) XXX_Unmarshal(b []byte) error {
|
func (m *QueuingConfiguration) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -578,7 +578,7 @@ var xxx_messageInfo_QueuingConfiguration proto.InternalMessageInfo
|
||||||
func (m *ResourcePolicyRule) Reset() { *m = ResourcePolicyRule{} }
|
func (m *ResourcePolicyRule) Reset() { *m = ResourcePolicyRule{} }
|
||||||
func (*ResourcePolicyRule) ProtoMessage() {}
|
func (*ResourcePolicyRule) ProtoMessage() {}
|
||||||
func (*ResourcePolicyRule) Descriptor() ([]byte, []int) {
|
func (*ResourcePolicyRule) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{19}
|
return fileDescriptor_f8a25df358697d27, []int{19}
|
||||||
}
|
}
|
||||||
func (m *ResourcePolicyRule) XXX_Unmarshal(b []byte) error {
|
func (m *ResourcePolicyRule) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -606,7 +606,7 @@ var xxx_messageInfo_ResourcePolicyRule proto.InternalMessageInfo
|
||||||
func (m *ServiceAccountSubject) Reset() { *m = ServiceAccountSubject{} }
|
func (m *ServiceAccountSubject) Reset() { *m = ServiceAccountSubject{} }
|
||||||
func (*ServiceAccountSubject) ProtoMessage() {}
|
func (*ServiceAccountSubject) ProtoMessage() {}
|
||||||
func (*ServiceAccountSubject) Descriptor() ([]byte, []int) {
|
func (*ServiceAccountSubject) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{20}
|
return fileDescriptor_f8a25df358697d27, []int{20}
|
||||||
}
|
}
|
||||||
func (m *ServiceAccountSubject) XXX_Unmarshal(b []byte) error {
|
func (m *ServiceAccountSubject) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -634,7 +634,7 @@ var xxx_messageInfo_ServiceAccountSubject proto.InternalMessageInfo
|
||||||
func (m *Subject) Reset() { *m = Subject{} }
|
func (m *Subject) Reset() { *m = Subject{} }
|
||||||
func (*Subject) ProtoMessage() {}
|
func (*Subject) ProtoMessage() {}
|
||||||
func (*Subject) Descriptor() ([]byte, []int) {
|
func (*Subject) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{21}
|
return fileDescriptor_f8a25df358697d27, []int{21}
|
||||||
}
|
}
|
||||||
func (m *Subject) XXX_Unmarshal(b []byte) error {
|
func (m *Subject) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -662,7 +662,7 @@ var xxx_messageInfo_Subject proto.InternalMessageInfo
|
||||||
func (m *UserSubject) Reset() { *m = UserSubject{} }
|
func (m *UserSubject) Reset() { *m = UserSubject{} }
|
||||||
func (*UserSubject) ProtoMessage() {}
|
func (*UserSubject) ProtoMessage() {}
|
||||||
func (*UserSubject) Descriptor() ([]byte, []int) {
|
func (*UserSubject) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_45ba024d525b289b, []int{22}
|
return fileDescriptor_f8a25df358697d27, []int{22}
|
||||||
}
|
}
|
||||||
func (m *UserSubject) XXX_Unmarshal(b []byte) error {
|
func (m *UserSubject) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -688,139 +688,137 @@ func (m *UserSubject) XXX_DiscardUnknown() {
|
||||||
var xxx_messageInfo_UserSubject proto.InternalMessageInfo
|
var xxx_messageInfo_UserSubject proto.InternalMessageInfo
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
proto.RegisterType((*ExemptPriorityLevelConfiguration)(nil), "k8s.io.api.flowcontrol.v1alpha1.ExemptPriorityLevelConfiguration")
|
proto.RegisterType((*ExemptPriorityLevelConfiguration)(nil), "k8s.io.api.flowcontrol.v1.ExemptPriorityLevelConfiguration")
|
||||||
proto.RegisterType((*FlowDistinguisherMethod)(nil), "k8s.io.api.flowcontrol.v1alpha1.FlowDistinguisherMethod")
|
proto.RegisterType((*FlowDistinguisherMethod)(nil), "k8s.io.api.flowcontrol.v1.FlowDistinguisherMethod")
|
||||||
proto.RegisterType((*FlowSchema)(nil), "k8s.io.api.flowcontrol.v1alpha1.FlowSchema")
|
proto.RegisterType((*FlowSchema)(nil), "k8s.io.api.flowcontrol.v1.FlowSchema")
|
||||||
proto.RegisterType((*FlowSchemaCondition)(nil), "k8s.io.api.flowcontrol.v1alpha1.FlowSchemaCondition")
|
proto.RegisterType((*FlowSchemaCondition)(nil), "k8s.io.api.flowcontrol.v1.FlowSchemaCondition")
|
||||||
proto.RegisterType((*FlowSchemaList)(nil), "k8s.io.api.flowcontrol.v1alpha1.FlowSchemaList")
|
proto.RegisterType((*FlowSchemaList)(nil), "k8s.io.api.flowcontrol.v1.FlowSchemaList")
|
||||||
proto.RegisterType((*FlowSchemaSpec)(nil), "k8s.io.api.flowcontrol.v1alpha1.FlowSchemaSpec")
|
proto.RegisterType((*FlowSchemaSpec)(nil), "k8s.io.api.flowcontrol.v1.FlowSchemaSpec")
|
||||||
proto.RegisterType((*FlowSchemaStatus)(nil), "k8s.io.api.flowcontrol.v1alpha1.FlowSchemaStatus")
|
proto.RegisterType((*FlowSchemaStatus)(nil), "k8s.io.api.flowcontrol.v1.FlowSchemaStatus")
|
||||||
proto.RegisterType((*GroupSubject)(nil), "k8s.io.api.flowcontrol.v1alpha1.GroupSubject")
|
proto.RegisterType((*GroupSubject)(nil), "k8s.io.api.flowcontrol.v1.GroupSubject")
|
||||||
proto.RegisterType((*LimitResponse)(nil), "k8s.io.api.flowcontrol.v1alpha1.LimitResponse")
|
proto.RegisterType((*LimitResponse)(nil), "k8s.io.api.flowcontrol.v1.LimitResponse")
|
||||||
proto.RegisterType((*LimitedPriorityLevelConfiguration)(nil), "k8s.io.api.flowcontrol.v1alpha1.LimitedPriorityLevelConfiguration")
|
proto.RegisterType((*LimitedPriorityLevelConfiguration)(nil), "k8s.io.api.flowcontrol.v1.LimitedPriorityLevelConfiguration")
|
||||||
proto.RegisterType((*NonResourcePolicyRule)(nil), "k8s.io.api.flowcontrol.v1alpha1.NonResourcePolicyRule")
|
proto.RegisterType((*NonResourcePolicyRule)(nil), "k8s.io.api.flowcontrol.v1.NonResourcePolicyRule")
|
||||||
proto.RegisterType((*PolicyRulesWithSubjects)(nil), "k8s.io.api.flowcontrol.v1alpha1.PolicyRulesWithSubjects")
|
proto.RegisterType((*PolicyRulesWithSubjects)(nil), "k8s.io.api.flowcontrol.v1.PolicyRulesWithSubjects")
|
||||||
proto.RegisterType((*PriorityLevelConfiguration)(nil), "k8s.io.api.flowcontrol.v1alpha1.PriorityLevelConfiguration")
|
proto.RegisterType((*PriorityLevelConfiguration)(nil), "k8s.io.api.flowcontrol.v1.PriorityLevelConfiguration")
|
||||||
proto.RegisterType((*PriorityLevelConfigurationCondition)(nil), "k8s.io.api.flowcontrol.v1alpha1.PriorityLevelConfigurationCondition")
|
proto.RegisterType((*PriorityLevelConfigurationCondition)(nil), "k8s.io.api.flowcontrol.v1.PriorityLevelConfigurationCondition")
|
||||||
proto.RegisterType((*PriorityLevelConfigurationList)(nil), "k8s.io.api.flowcontrol.v1alpha1.PriorityLevelConfigurationList")
|
proto.RegisterType((*PriorityLevelConfigurationList)(nil), "k8s.io.api.flowcontrol.v1.PriorityLevelConfigurationList")
|
||||||
proto.RegisterType((*PriorityLevelConfigurationReference)(nil), "k8s.io.api.flowcontrol.v1alpha1.PriorityLevelConfigurationReference")
|
proto.RegisterType((*PriorityLevelConfigurationReference)(nil), "k8s.io.api.flowcontrol.v1.PriorityLevelConfigurationReference")
|
||||||
proto.RegisterType((*PriorityLevelConfigurationSpec)(nil), "k8s.io.api.flowcontrol.v1alpha1.PriorityLevelConfigurationSpec")
|
proto.RegisterType((*PriorityLevelConfigurationSpec)(nil), "k8s.io.api.flowcontrol.v1.PriorityLevelConfigurationSpec")
|
||||||
proto.RegisterType((*PriorityLevelConfigurationStatus)(nil), "k8s.io.api.flowcontrol.v1alpha1.PriorityLevelConfigurationStatus")
|
proto.RegisterType((*PriorityLevelConfigurationStatus)(nil), "k8s.io.api.flowcontrol.v1.PriorityLevelConfigurationStatus")
|
||||||
proto.RegisterType((*QueuingConfiguration)(nil), "k8s.io.api.flowcontrol.v1alpha1.QueuingConfiguration")
|
proto.RegisterType((*QueuingConfiguration)(nil), "k8s.io.api.flowcontrol.v1.QueuingConfiguration")
|
||||||
proto.RegisterType((*ResourcePolicyRule)(nil), "k8s.io.api.flowcontrol.v1alpha1.ResourcePolicyRule")
|
proto.RegisterType((*ResourcePolicyRule)(nil), "k8s.io.api.flowcontrol.v1.ResourcePolicyRule")
|
||||||
proto.RegisterType((*ServiceAccountSubject)(nil), "k8s.io.api.flowcontrol.v1alpha1.ServiceAccountSubject")
|
proto.RegisterType((*ServiceAccountSubject)(nil), "k8s.io.api.flowcontrol.v1.ServiceAccountSubject")
|
||||||
proto.RegisterType((*Subject)(nil), "k8s.io.api.flowcontrol.v1alpha1.Subject")
|
proto.RegisterType((*Subject)(nil), "k8s.io.api.flowcontrol.v1.Subject")
|
||||||
proto.RegisterType((*UserSubject)(nil), "k8s.io.api.flowcontrol.v1alpha1.UserSubject")
|
proto.RegisterType((*UserSubject)(nil), "k8s.io.api.flowcontrol.v1.UserSubject")
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.proto", fileDescriptor_45ba024d525b289b)
|
proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/flowcontrol/v1/generated.proto", fileDescriptor_f8a25df358697d27)
|
||||||
}
|
}
|
||||||
|
|
||||||
var fileDescriptor_45ba024d525b289b = []byte{
|
var fileDescriptor_f8a25df358697d27 = []byte{
|
||||||
// 1621 bytes of a gzipped FileDescriptorProto
|
// 1588 bytes of a gzipped FileDescriptorProto
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0x4d, 0x6f, 0xdb, 0x46,
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0x4b, 0x73, 0x1b, 0xc5,
|
||||||
0x1a, 0x36, 0x65, 0xc9, 0xb6, 0xc6, 0x9f, 0x19, 0xc7, 0xb0, 0xd6, 0x59, 0x48, 0x0e, 0x17, 0xd8,
|
0x16, 0xb6, 0x64, 0xc9, 0xb6, 0x8e, 0x9f, 0x69, 0xc7, 0x65, 0xc5, 0xb9, 0x25, 0x39, 0x73, 0xeb,
|
||||||
0x64, 0x37, 0x09, 0x15, 0x67, 0x93, 0x6c, 0x16, 0xc1, 0x22, 0x30, 0x93, 0x6c, 0xbe, 0x6c, 0xc7,
|
0xe6, 0x71, 0x43, 0xa4, 0xc4, 0x45, 0x20, 0xa9, 0x00, 0xa9, 0x4c, 0x12, 0xf2, 0xb2, 0x1d, 0xa7,
|
||||||
0x1e, 0x27, 0xd9, 0x36, 0x48, 0x81, 0xd0, 0xd4, 0x58, 0x9a, 0x58, 0x22, 0xd9, 0x19, 0x52, 0x8e,
|
0x95, 0x07, 0x15, 0xa8, 0x82, 0xd1, 0xa8, 0x2d, 0x4d, 0x2c, 0xcd, 0x0c, 0xdd, 0x33, 0x32, 0xa6,
|
||||||
0x8b, 0x1c, 0x0a, 0xf4, 0x0f, 0xf4, 0x07, 0xe4, 0xd8, 0x43, 0x6f, 0x05, 0x7a, 0xed, 0xa5, 0xc7,
|
0x8a, 0x2a, 0x7e, 0x42, 0x56, 0x2c, 0x59, 0xc0, 0x3f, 0x60, 0x45, 0xc1, 0x86, 0x65, 0x76, 0x64,
|
||||||
0xa0, 0xe8, 0x21, 0xc7, 0x9c, 0x84, 0x58, 0xbd, 0xf6, 0x07, 0xb4, 0x39, 0x14, 0xc5, 0x0c, 0x87,
|
0x19, 0x58, 0xa8, 0x88, 0xf8, 0x0b, 0x2c, 0x20, 0x2b, 0xaa, 0x7b, 0x7a, 0x66, 0x34, 0x92, 0x66,
|
||||||
0xa4, 0x28, 0x89, 0xa2, 0x52, 0x03, 0x39, 0xf5, 0x66, 0xbe, 0x1f, 0xcf, 0x3b, 0xf3, 0xce, 0xfb,
|
0xac, 0xf2, 0x22, 0x6c, 0xd8, 0x79, 0xce, 0xf9, 0xce, 0x77, 0xba, 0x4f, 0x9f, 0x97, 0x0c, 0xea,
|
||||||
0xf1, 0xc8, 0xe0, 0xf6, 0xde, 0x15, 0xa6, 0x11, 0xbb, 0xbc, 0xe7, 0xed, 0x60, 0x6a, 0x61, 0x17,
|
0xce, 0x05, 0x56, 0x32, 0xac, 0xf2, 0x8e, 0x5b, 0x25, 0xd4, 0x24, 0x0e, 0x61, 0xe5, 0x36, 0x31,
|
||||||
0xb3, 0x72, 0x13, 0x5b, 0x15, 0x9b, 0x96, 0xa5, 0xc2, 0x70, 0x48, 0x79, 0xb7, 0x6e, 0xef, 0x9b,
|
0x6b, 0x16, 0x2d, 0x4b, 0x85, 0x66, 0x1b, 0xe5, 0xed, 0xa6, 0xb5, 0xab, 0x5b, 0xa6, 0x43, 0xad,
|
||||||
0xb6, 0xe5, 0x52, 0xbb, 0x5e, 0x6e, 0xae, 0x18, 0x75, 0xa7, 0x66, 0xac, 0x94, 0xab, 0xd8, 0xc2,
|
0x66, 0xb9, 0x7d, 0xae, 0x5c, 0x27, 0x26, 0xa1, 0x9a, 0x43, 0x6a, 0x25, 0x9b, 0x5a, 0x8e, 0x85,
|
||||||
0xd4, 0x70, 0x71, 0x45, 0x73, 0xa8, 0xed, 0xda, 0xb0, 0xe4, 0x3b, 0x68, 0x86, 0x43, 0xb4, 0x0e,
|
0x8e, 0x78, 0xd0, 0x92, 0x66, 0x1b, 0xa5, 0x1e, 0x68, 0xa9, 0x7d, 0x6e, 0xe5, 0x4c, 0xdd, 0x70,
|
||||||
0x07, 0x2d, 0x70, 0x58, 0x3a, 0x57, 0x25, 0x6e, 0xcd, 0xdb, 0xd1, 0x4c, 0xbb, 0x51, 0xae, 0xda,
|
0x1a, 0x6e, 0xb5, 0xa4, 0x5b, 0xad, 0x72, 0xdd, 0xaa, 0x5b, 0x65, 0x61, 0x51, 0x75, 0xb7, 0xc5,
|
||||||
0x55, 0xbb, 0x2c, 0xfc, 0x76, 0xbc, 0x5d, 0xf1, 0x25, 0x3e, 0xc4, 0x5f, 0x3e, 0xde, 0xd2, 0xc5,
|
0x97, 0xf8, 0x10, 0x7f, 0x79, 0x4c, 0x2b, 0x6f, 0x86, 0x4e, 0x5b, 0x9a, 0xde, 0x30, 0x4c, 0x42,
|
||||||
0xe8, 0x00, 0x0d, 0xc3, 0xac, 0x11, 0x0b, 0xd3, 0x83, 0xb2, 0xb3, 0x57, 0xe5, 0x02, 0x56, 0x6e,
|
0xf7, 0xca, 0xf6, 0x4e, 0x9d, 0x0b, 0x58, 0xb9, 0x45, 0x1c, 0x6d, 0x88, 0xff, 0x95, 0x72, 0x9c,
|
||||||
0x60, 0xd7, 0x28, 0x37, 0x7b, 0x4e, 0xb1, 0x54, 0x4e, 0xf2, 0xa2, 0x9e, 0xe5, 0x92, 0x06, 0xee,
|
0x15, 0x75, 0x4d, 0xc7, 0x68, 0x91, 0x01, 0x83, 0xb7, 0xf6, 0x33, 0x60, 0x7a, 0x83, 0xb4, 0xb4,
|
||||||
0x71, 0xb8, 0x9c, 0xe6, 0xc0, 0xcc, 0x1a, 0x6e, 0x18, 0xdd, 0x7e, 0xea, 0x77, 0x0a, 0x58, 0xbe,
|
0x7e, 0x3b, 0xe5, 0xc7, 0x14, 0xac, 0x5e, 0xff, 0x8c, 0xb4, 0x6c, 0x67, 0x8b, 0x1a, 0x16, 0x35,
|
||||||
0xf9, 0x1c, 0x37, 0x1c, 0x77, 0x93, 0x12, 0x9b, 0x12, 0xf7, 0x60, 0x0d, 0x37, 0x71, 0xfd, 0xba,
|
0x9c, 0xbd, 0x75, 0xd2, 0x26, 0xcd, 0xab, 0x96, 0xb9, 0x6d, 0xd4, 0x5d, 0xaa, 0x39, 0x86, 0x65,
|
||||||
0x6d, 0xed, 0x92, 0xaa, 0x47, 0x0d, 0x97, 0xd8, 0x16, 0xfc, 0x08, 0x14, 0x2c, 0xbb, 0x41, 0x2c,
|
0xa2, 0x0f, 0x20, 0x6f, 0x5a, 0x2d, 0xc3, 0xd4, 0xb8, 0x5c, 0x77, 0x29, 0x25, 0xa6, 0xbe, 0x57,
|
||||||
0x83, 0xcb, 0x4d, 0x8f, 0x52, 0x6c, 0x99, 0x07, 0xdb, 0x35, 0x83, 0x62, 0x56, 0x50, 0x96, 0x95,
|
0x69, 0x68, 0x94, 0xb0, 0x7c, 0x6a, 0x35, 0x75, 0x32, 0xab, 0xfe, 0xa7, 0xdb, 0x29, 0xe6, 0x37,
|
||||||
0xd3, 0x39, 0xfd, 0xaf, 0xed, 0x56, 0xa9, 0xb0, 0x91, 0x60, 0x83, 0x12, 0xbd, 0xe1, 0x7f, 0xc1,
|
0x63, 0x30, 0x38, 0xd6, 0x1a, 0xbd, 0x0b, 0xf3, 0x4d, 0x62, 0xd6, 0xb4, 0x6a, 0x93, 0x6c, 0x11,
|
||||||
0x6c, 0x1d, 0x5b, 0x15, 0x63, 0xa7, 0x8e, 0x37, 0x31, 0x35, 0xb1, 0xe5, 0x16, 0x32, 0x02, 0x70,
|
0xaa, 0x13, 0xd3, 0xc9, 0xa7, 0x05, 0xe1, 0x62, 0xb7, 0x53, 0x9c, 0x5f, 0x8f, 0xaa, 0x70, 0x3f,
|
||||||
0xbe, 0xdd, 0x2a, 0xcd, 0xae, 0xc5, 0x55, 0xa8, 0xdb, 0x56, 0x7d, 0x0c, 0x16, 0xff, 0x57, 0xb7,
|
0x56, 0x79, 0x0c, 0xcb, 0xef, 0x37, 0xad, 0xdd, 0x6b, 0x06, 0x73, 0x0c, 0xb3, 0xee, 0x1a, 0xac,
|
||||||
0xf7, 0x6f, 0x10, 0xe6, 0x12, 0xab, 0xea, 0x11, 0x56, 0xc3, 0x74, 0x1d, 0xbb, 0x35, 0xbb, 0x02,
|
0x41, 0xe8, 0x06, 0x71, 0x1a, 0x56, 0x0d, 0x5d, 0x86, 0x8c, 0xb3, 0x67, 0x13, 0x71, 0xbe, 0x9c,
|
||||||
0xaf, 0x81, 0xac, 0x7b, 0xe0, 0x60, 0x71, 0xbe, 0xbc, 0x7e, 0xe6, 0x55, 0xab, 0x34, 0xd2, 0x6e,
|
0x7a, 0xfa, 0x59, 0xa7, 0x38, 0xd6, 0xed, 0x14, 0x33, 0xf7, 0xf7, 0x6c, 0xf2, 0xaa, 0x53, 0x3c,
|
||||||
0x95, 0xb2, 0x0f, 0x0e, 0x1c, 0xfc, 0xae, 0x55, 0x3a, 0x91, 0xe0, 0xc6, 0xd5, 0x48, 0x38, 0xaa,
|
0x1a, 0x63, 0xc6, 0xd5, 0x58, 0x18, 0x2a, 0x4f, 0xd3, 0x00, 0x1c, 0x55, 0x11, 0x81, 0x43, 0x9f,
|
||||||
0x2f, 0x33, 0x00, 0x70, 0xab, 0x6d, 0x91, 0x38, 0xf8, 0x14, 0x4c, 0xf0, 0xc7, 0xaa, 0x18, 0xae,
|
0xc0, 0x14, 0x7f, 0xac, 0x9a, 0xe6, 0x68, 0x82, 0x73, 0x7a, 0xed, 0x6c, 0x29, 0x4c, 0x92, 0x20,
|
||||||
0x21, 0x30, 0x27, 0x2f, 0x9c, 0xd7, 0xa2, 0x52, 0x09, 0x73, 0xae, 0x39, 0x7b, 0x55, 0x2e, 0x60,
|
0xe6, 0x25, 0x7b, 0xa7, 0xce, 0x05, 0xac, 0xc4, 0xd1, 0xa5, 0xf6, 0xb9, 0xd2, 0xdd, 0xea, 0x13,
|
||||||
0x1a, 0xb7, 0xd6, 0x9a, 0x2b, 0xda, 0xfd, 0x9d, 0x67, 0xd8, 0x74, 0xd7, 0xb1, 0x6b, 0xe8, 0x50,
|
0xa2, 0x3b, 0x1b, 0xc4, 0xd1, 0x54, 0x24, 0x4f, 0x01, 0xa1, 0x0c, 0x07, 0xac, 0xe8, 0x0e, 0x64,
|
||||||
0x9e, 0x02, 0x44, 0x32, 0x14, 0xa2, 0xc2, 0x2d, 0x90, 0x65, 0x0e, 0x36, 0x45, 0x02, 0x26, 0x2f,
|
0x98, 0x4d, 0x74, 0x11, 0x80, 0xe9, 0xb5, 0x53, 0xa5, 0xd8, 0x14, 0x2c, 0x85, 0xc7, 0xaa, 0xd8,
|
||||||
0x94, 0xb5, 0x94, 0x42, 0xd4, 0xa2, 0xc3, 0x6d, 0x3b, 0xd8, 0xd4, 0xa7, 0x82, 0x2b, 0xf2, 0x2f,
|
0x44, 0x57, 0x67, 0xfc, 0xcb, 0xf1, 0x2f, 0x2c, 0x48, 0x50, 0x05, 0x26, 0x98, 0xa3, 0x39, 0x2e,
|
||||||
0x24, 0xa0, 0xe0, 0xc7, 0x60, 0x8c, 0xb9, 0x86, 0xeb, 0xb1, 0xc2, 0xa8, 0x00, 0x5d, 0x79, 0x1f,
|
0xcb, 0x8f, 0x0b, 0xba, 0xd3, 0xa3, 0xd1, 0x09, 0x13, 0x75, 0x4e, 0x12, 0x4e, 0x78, 0xdf, 0x58,
|
||||||
0x50, 0xe1, 0xa8, 0xcf, 0x48, 0xd8, 0x31, 0xff, 0x1b, 0x49, 0x40, 0xf5, 0x4d, 0x06, 0xcc, 0x47,
|
0x52, 0x29, 0x2f, 0xd2, 0xb0, 0x18, 0x82, 0xaf, 0x5a, 0x66, 0xcd, 0x10, 0xf9, 0x71, 0x29, 0x12,
|
||||||
0xc6, 0xd7, 0x6d, 0xab, 0x42, 0x44, 0xad, 0x5c, 0x8d, 0xe5, 0xfd, 0x54, 0x57, 0xde, 0x17, 0xfb,
|
0xeb, 0x13, 0x7d, 0xb1, 0x5e, 0x1e, 0x62, 0x12, 0xc6, 0x19, 0x5d, 0x0c, 0x4e, 0x9a, 0x16, 0xe6,
|
||||||
0xb8, 0x44, 0x39, 0x87, 0xff, 0x09, 0xcf, 0x9b, 0x11, 0xee, 0x27, 0xe3, 0xc1, 0xdf, 0xb5, 0x4a,
|
0xc7, 0xa2, 0xce, 0x5f, 0x75, 0x8a, 0xf3, 0x81, 0x59, 0xf4, 0x3c, 0xa8, 0x0d, 0xa8, 0xa9, 0x31,
|
||||||
0xb3, 0xa1, 0x5b, 0xfc, 0x3c, 0xb0, 0x09, 0x60, 0xdd, 0x60, 0xee, 0x03, 0x6a, 0x58, 0xcc, 0x87,
|
0xe7, 0x3e, 0xd5, 0x4c, 0xe6, 0xd1, 0x1a, 0x2d, 0x22, 0x2f, 0xfc, 0xff, 0xd1, 0x5e, 0x87, 0x5b,
|
||||||
0x25, 0x0d, 0x2c, 0xaf, 0xfd, 0xcf, 0xe1, 0x5e, 0x8a, 0x7b, 0xe8, 0x4b, 0x32, 0x24, 0x5c, 0xeb,
|
0xa8, 0x2b, 0xd2, 0x25, 0x5a, 0x1f, 0x60, 0xc3, 0x43, 0x3c, 0xa0, 0xe3, 0x30, 0x41, 0x89, 0xc6,
|
||||||
0x41, 0x43, 0x7d, 0x22, 0xc0, 0xbf, 0x83, 0x31, 0x8a, 0x0d, 0x66, 0x5b, 0x85, 0xac, 0x38, 0x72,
|
0x2c, 0x33, 0x9f, 0x11, 0x47, 0x0e, 0xe2, 0x85, 0x85, 0x14, 0x4b, 0x2d, 0x3a, 0x05, 0x93, 0x2d,
|
||||||
0x98, 0x2f, 0x24, 0xa4, 0x48, 0x6a, 0xe1, 0x3f, 0xc0, 0x78, 0x03, 0x33, 0x66, 0x54, 0x71, 0x21,
|
0xc2, 0x98, 0x56, 0x27, 0xf9, 0xac, 0x00, 0xce, 0x4b, 0xe0, 0xe4, 0x86, 0x27, 0xc6, 0xbe, 0x5e,
|
||||||
0x27, 0x0c, 0x67, 0xa5, 0xe1, 0xf8, 0xba, 0x2f, 0x46, 0x81, 0x5e, 0xfd, 0x5e, 0x01, 0x33, 0x51,
|
0xf9, 0x21, 0x05, 0x73, 0x61, 0x9c, 0xd6, 0x0d, 0xe6, 0xa0, 0x8f, 0x06, 0x32, 0xae, 0x34, 0xda,
|
||||||
0x9e, 0xd6, 0x08, 0x73, 0xe1, 0x93, 0x9e, 0xea, 0xd3, 0x86, 0xbb, 0x13, 0xf7, 0x16, 0xb5, 0x37,
|
0x9d, 0xb8, 0xb5, 0xc8, 0xb7, 0x05, 0xe9, 0x6e, 0xca, 0x97, 0xf4, 0x64, 0xdb, 0x6d, 0xc8, 0x1a,
|
||||||
0x27, 0xc3, 0x4d, 0x04, 0x92, 0x8e, 0xca, 0xdb, 0x04, 0x39, 0xe2, 0xe2, 0x06, 0xcf, 0xfa, 0xe8,
|
0x0e, 0x69, 0xf1, 0xa8, 0x8f, 0x9f, 0x9c, 0x5e, 0xfb, 0xdf, 0x48, 0xf9, 0xa1, 0xce, 0x4a, 0xc6,
|
||||||
0xe9, 0xc9, 0x0b, 0x67, 0xde, 0xa3, 0x4a, 0xf4, 0x69, 0x89, 0x9b, 0xbb, 0xc3, 0x11, 0x90, 0x0f,
|
0xec, 0x2d, 0x6e, 0x8b, 0x3d, 0x0a, 0xe5, 0x97, 0xf1, 0xde, 0xc3, 0xf3, 0x2c, 0x44, 0xdf, 0xa4,
|
||||||
0xa4, 0xfe, 0x3c, 0xda, 0x79, 0x05, 0x5e, 0x91, 0xf0, 0x6b, 0x05, 0x2c, 0x39, 0x89, 0x33, 0x46,
|
0x60, 0xc5, 0x8e, 0xed, 0x28, 0xf2, 0x3e, 0xef, 0x25, 0x38, 0x8d, 0x6f, 0x47, 0x98, 0x6c, 0x13,
|
||||||
0xde, 0xea, 0x46, 0x6a, 0xe8, 0xe4, 0x31, 0x85, 0xf0, 0x2e, 0xe6, 0xb3, 0x05, 0xeb, 0xaa, 0x3c,
|
0xde, 0x43, 0x88, 0xaa, 0xc8, 0xd3, 0xac, 0x24, 0x80, 0x13, 0x4e, 0x81, 0x6e, 0x03, 0x6a, 0x69,
|
||||||
0xd3, 0xd2, 0x00, 0xe3, 0x01, 0x67, 0x81, 0x77, 0x01, 0x6c, 0x18, 0x2e, 0xcf, 0x69, 0x75, 0x93,
|
0x0e, 0x8f, 0x63, 0x7d, 0x8b, 0x12, 0x9d, 0xd4, 0x38, 0xab, 0x6c, 0x40, 0x41, 0x4e, 0x6c, 0x0c,
|
||||||
0x62, 0x13, 0x57, 0x38, 0xaa, 0x1c, 0x4c, 0x61, 0x7d, 0xac, 0xf7, 0x58, 0xa0, 0x3e, 0x5e, 0xf0,
|
0x20, 0xf0, 0x10, 0x2b, 0xf4, 0x05, 0x2c, 0xd6, 0x06, 0xfb, 0x89, 0x4c, 0xc6, 0xb5, 0x7d, 0xa2,
|
||||||
0x0b, 0x05, 0xcc, 0x57, 0x7a, 0x07, 0x8d, 0xac, 0xcc, 0x2b, 0x43, 0xa5, 0xba, 0xcf, 0xa0, 0xd2,
|
0x3b, 0xa4, 0x13, 0xa9, 0xcb, 0xdd, 0x4e, 0x71, 0x71, 0x88, 0x02, 0x0f, 0xf3, 0x83, 0x1e, 0x41,
|
||||||
0x17, 0xdb, 0xad, 0xd2, 0x7c, 0x1f, 0x05, 0xea, 0x17, 0x0d, 0x7e, 0x02, 0x72, 0xd4, 0xab, 0x63,
|
0x96, 0xba, 0x4d, 0xc2, 0xf2, 0x19, 0xf1, 0x9c, 0x49, 0x0e, 0xb7, 0xac, 0xa6, 0xa1, 0xef, 0x61,
|
||||||
0x56, 0xc8, 0x8a, 0x17, 0x4e, 0x0f, 0xbb, 0x69, 0xd7, 0x89, 0x79, 0x80, 0xb8, 0xcf, 0xff, 0x89,
|
0x8e, 0x7e, 0x64, 0x38, 0x8d, 0x8a, 0x2b, 0x9a, 0x11, 0x0b, 0xdf, 0x56, 0xa8, 0xb0, 0xc7, 0xa7,
|
||||||
0x5b, 0xdb, 0xf6, 0xc4, 0xc4, 0x62, 0xd1, 0x73, 0x0b, 0x15, 0xf2, 0x51, 0xd5, 0x17, 0x60, 0xae,
|
0xb4, 0x61, 0xa1, 0xbf, 0x3f, 0xa0, 0x2a, 0x80, 0xee, 0x97, 0x24, 0x9f, 0x00, 0xe3, 0x7d, 0xb9,
|
||||||
0x7b, 0x70, 0xc0, 0x1a, 0x00, 0x66, 0xd0, 0xab, 0x7c, 0x4d, 0xf0, 0xb8, 0x17, 0xdf, 0xa3, 0xb2,
|
0x19, 0x9f, 0x40, 0x41, 0x25, 0x87, 0xbd, 0x30, 0x10, 0x31, 0xdc, 0xc3, 0xaa, 0x9c, 0x85, 0x99,
|
||||||
0xc2, 0x46, 0x8f, 0xc6, 0x66, 0x28, 0x62, 0xa8, 0x03, 0x5b, 0x3d, 0x0f, 0xa6, 0x6e, 0x51, 0xdb,
|
0x1b, 0xd4, 0x72, 0x6d, 0x79, 0x3c, 0xb4, 0x0a, 0x19, 0x53, 0x6b, 0xf9, 0x3d, 0x26, 0x68, 0x79,
|
||||||
0x73, 0xe4, 0x21, 0xe1, 0x32, 0xc8, 0x5a, 0x46, 0x23, 0x18, 0x41, 0xe1, 0x5c, 0xdc, 0x30, 0x1a,
|
0x9b, 0x5a, 0x8b, 0x60, 0xa1, 0x51, 0xbe, 0x4e, 0xc1, 0xec, 0xba, 0xd1, 0x32, 0x1c, 0x4c, 0x98,
|
||||||
0x18, 0x09, 0x8d, 0xfa, 0x95, 0x02, 0xa6, 0xd7, 0x48, 0x83, 0xb8, 0x08, 0x33, 0xc7, 0xb6, 0x18,
|
0x6d, 0x99, 0x8c, 0xa0, 0xf3, 0x91, 0xbe, 0x74, 0xac, 0xaf, 0x2f, 0x1d, 0x8a, 0x80, 0x7b, 0x3a,
|
||||||
0x86, 0x97, 0x62, 0x63, 0xeb, 0x64, 0xd7, 0xd8, 0x3a, 0x16, 0x33, 0xee, 0x18, 0x58, 0x4f, 0xc0,
|
0xd2, 0x43, 0x98, 0xfc, 0xd4, 0x25, 0xae, 0x61, 0xd6, 0x65, 0x2f, 0x2e, 0x27, 0xdc, 0xed, 0x9e,
|
||||||
0xf8, 0xa7, 0x1e, 0xf6, 0x88, 0x55, 0x95, 0x63, 0xfb, 0x52, 0xea, 0x0d, 0xb7, 0x7c, 0xfb, 0x58,
|
0x87, 0x8c, 0x24, 0x96, 0x3a, 0xcd, 0x6b, 0x5c, 0x6a, 0xb0, 0x4f, 0xa6, 0xfc, 0x91, 0x86, 0x63,
|
||||||
0xc5, 0xe9, 0x93, 0x7c, 0x10, 0x48, 0x0d, 0x0a, 0x20, 0xd5, 0xdf, 0x32, 0xe0, 0xa4, 0x88, 0x8c,
|
0xc2, 0x27, 0xa9, 0xfd, 0x23, 0xc3, 0x96, 0xc0, 0x6c, 0xb3, 0xf7, 0xca, 0xf2, 0x76, 0x27, 0x13,
|
||||||
0x2b, 0x03, 0xb6, 0xf3, 0x13, 0x50, 0x30, 0x18, 0xf3, 0x28, 0xae, 0x24, 0x6d, 0xe7, 0x65, 0x79,
|
0x6e, 0x17, 0x09, 0x91, 0xba, 0x24, 0x23, 0x18, 0x0d, 0x33, 0x8e, 0xb2, 0x0e, 0x9b, 0xe9, 0xe3,
|
||||||
0x9d, 0xc2, 0x6a, 0x82, 0x1d, 0x4a, 0x44, 0x80, 0x7b, 0x60, 0xba, 0xde, 0x79, 0x79, 0x79, 0x4f,
|
0xa3, 0xcf, 0x74, 0x74, 0x17, 0x96, 0xaa, 0x16, 0xa5, 0xd6, 0xae, 0x61, 0xd6, 0x85, 0x1f, 0x9f,
|
||||||
0x2d, 0xf5, 0x9e, 0xb1, 0x94, 0xe9, 0x0b, 0xf2, 0x08, 0xf1, 0xb4, 0xa3, 0x38, 0x76, 0x3f, 0x3a,
|
0x24, 0x23, 0x48, 0x8e, 0x74, 0x3b, 0xc5, 0x25, 0x75, 0x18, 0x00, 0x0f, 0xb7, 0x53, 0x76, 0x61,
|
||||||
0x30, 0x3a, 0x3c, 0x1d, 0x80, 0xf7, 0xc1, 0xc2, 0x8e, 0x4d, 0xa9, 0xbd, 0x4f, 0xac, 0xaa, 0x88,
|
0x69, 0x93, 0x77, 0x0d, 0x66, 0xb9, 0x54, 0x27, 0x61, 0xf6, 0xa3, 0x22, 0x64, 0xdb, 0x84, 0x56,
|
||||||
0x13, 0x80, 0x64, 0x05, 0xc8, 0x5f, 0xda, 0xad, 0xd2, 0x82, 0xde, 0xcf, 0x00, 0xf5, 0xf7, 0x53,
|
0xbd, 0x0c, 0xce, 0xa9, 0x39, 0x9e, 0xfb, 0x0f, 0xb9, 0x00, 0x7b, 0x72, 0x7e, 0x13, 0x33, 0xb4,
|
||||||
0xf7, 0xc1, 0xc2, 0x06, 0x1f, 0x2c, 0xcc, 0xf6, 0xa8, 0x89, 0xa3, 0x9e, 0x80, 0x25, 0x90, 0x6b,
|
0x7c, 0x80, 0xd7, 0x59, 0x7e, 0x42, 0x40, 0xc5, 0x4d, 0x36, 0xa3, 0x2a, 0xdc, 0x8f, 0x55, 0x7e,
|
||||||
0x62, 0xba, 0xe3, 0xd7, 0x75, 0x5e, 0xcf, 0xf3, 0x8e, 0x78, 0xc4, 0x05, 0xc8, 0x97, 0xf3, 0x9b,
|
0x4e, 0xc3, 0x72, 0x4c, 0xb1, 0xa1, 0x2d, 0x98, 0x62, 0xf2, 0x6f, 0x59, 0x40, 0x4a, 0xc2, 0x33,
|
||||||
0x58, 0x91, 0xe7, 0x43, 0xb4, 0xc6, 0x0a, 0x63, 0xc2, 0x54, 0xdc, 0x64, 0x23, 0xae, 0x42, 0xdd,
|
0x48, 0xb3, 0xb0, 0xa1, 0xfb, 0x3c, 0x38, 0x60, 0x41, 0x4f, 0x60, 0x96, 0x4a, 0xef, 0xc2, 0x9d,
|
||||||
0xb6, 0xea, 0x61, 0x06, 0x2c, 0x26, 0xb4, 0x20, 0x7c, 0x04, 0x26, 0x98, 0xfc, 0x5b, 0xb6, 0xd5,
|
0x6c, 0xec, 0x67, 0x12, 0x68, 0x07, 0x63, 0x12, 0x3e, 0x31, 0xee, 0xe5, 0xc2, 0x51, 0x6a, 0xd4,
|
||||||
0xe9, 0xd4, 0xc7, 0x90, 0xce, 0xd1, 0x16, 0x08, 0xd0, 0x50, 0x88, 0x05, 0x1d, 0x30, 0x4d, 0xe5,
|
0x86, 0x85, 0x9e, 0xcb, 0x7a, 0xee, 0xc6, 0x85, 0xbb, 0xb3, 0x09, 0xee, 0x86, 0xbe, 0x82, 0x9a,
|
||||||
0x19, 0x44, 0x50, 0xb9, 0x0d, 0xfe, 0x95, 0x0a, 0xde, 0x9b, 0x9f, 0xe8, 0xb9, 0x51, 0x27, 0x22,
|
0x97, 0x1e, 0x17, 0x36, 0xfb, 0x18, 0xf1, 0x80, 0x0f, 0xe5, 0xa7, 0x34, 0x24, 0xf4, 0xfa, 0xd7,
|
||||||
0x8a, 0x07, 0x80, 0x2f, 0xc0, 0x5c, 0xc7, 0xc5, 0xfd, 0xa0, 0xa3, 0x22, 0xe8, 0xe5, 0xd4, 0xa0,
|
0xb0, 0xa3, 0x7d, 0x18, 0xd9, 0xd1, 0x2e, 0x1e, 0x68, 0x7e, 0xc5, 0xee, 0x6c, 0x7a, 0xdf, 0xce,
|
||||||
0x7d, 0xdf, 0x45, 0x2f, 0xc8, 0xb8, 0x73, 0x1b, 0x5d, 0xb8, 0xa8, 0x27, 0x92, 0xfa, 0x63, 0x06,
|
0x76, 0xe9, 0x60, 0xf4, 0xc9, 0x3b, 0xdc, 0x9f, 0x69, 0xf8, 0x6f, 0xbc, 0x71, 0xb8, 0xd3, 0xdd,
|
||||||
0x0c, 0x58, 0x10, 0x1f, 0x80, 0xf0, 0x19, 0x31, 0xc2, 0x77, 0xed, 0x08, 0xab, 0x2f, 0x91, 0x00,
|
0x89, 0xf4, 0xce, 0xb7, 0xfb, 0x7a, 0xe7, 0x89, 0x11, 0x28, 0xfe, 0xdd, 0xf1, 0xfa, 0x76, 0xbc,
|
||||||
0x92, 0x2e, 0x02, 0xb8, 0x7a, 0x94, 0x20, 0x83, 0x09, 0xe1, 0x2f, 0x19, 0xf0, 0xb7, 0x64, 0xe7,
|
0x5f, 0x53, 0x50, 0x88, 0x8f, 0xdb, 0x6b, 0xd8, 0xf9, 0x1e, 0x47, 0x77, 0xbe, 0xf3, 0x07, 0xca,
|
||||||
0x88, 0x20, 0xde, 0x8b, 0x4d, 0xda, 0x7f, 0x77, 0x4d, 0xda, 0x53, 0x43, 0x40, 0xfc, 0x49, 0x18,
|
0xaf, 0x98, 0x1d, 0xf0, 0x46, 0x52, 0x5a, 0x05, 0x2b, 0xdb, 0x08, 0x63, 0xfc, 0xdb, 0x74, 0x52,
|
||||||
0xbb, 0x08, 0xe3, 0x5b, 0x05, 0x14, 0x93, 0xf3, 0xf6, 0x01, 0x08, 0xe4, 0xd3, 0x38, 0x81, 0xbc,
|
0x94, 0xc4, 0x72, 0xb9, 0xcf, 0xef, 0x8d, 0x88, 0xf5, 0x75, 0x93, 0x0f, 0x97, 0x16, 0x9f, 0x0f,
|
||||||
0x7a, 0x84, 0x2a, 0x4b, 0x20, 0x94, 0xb7, 0x06, 0x15, 0x57, 0xc8, 0xfc, 0x86, 0x58, 0xfd, 0xdf,
|
0x5e, 0x2e, 0xea, 0x30, 0xd9, 0xf4, 0x86, 0xb0, 0xac, 0xe2, 0x77, 0xf6, 0x9b, 0x7f, 0x49, 0xe3,
|
||||||
0x64, 0x06, 0xe5, 0x4a, 0x30, 0xd5, 0x94, 0x9f, 0x30, 0x31, 0xef, 0x9b, 0x16, 0x5f, 0x40, 0x0d,
|
0xda, 0x1b, 0xf5, 0x12, 0x86, 0x7d, 0x66, 0xf4, 0x31, 0x4c, 0x10, 0xf1, 0xab, 0x7a, 0x84, 0x52,
|
||||||
0xbe, 0x43, 0xfc, 0x8a, 0x24, 0x60, 0xbc, 0xee, 0xaf, 0x6c, 0xd9, 0xd7, 0xfa, 0x70, 0x9b, 0x72,
|
0xde, 0xef, 0xe7, 0xb7, 0x0a, 0x3c, 0xed, 0x3c, 0x14, 0x96, 0xb4, 0xca, 0x57, 0x29, 0x58, 0xdd,
|
||||||
0xd0, 0x8a, 0xf7, 0xe9, 0x81, 0x34, 0x43, 0x01, 0x3e, 0xc4, 0x60, 0x0c, 0x8b, 0x9f, 0xee, 0x43,
|
0xaf, 0x07, 0x20, 0x3a, 0x64, 0x4f, 0x3b, 0xd8, 0xce, 0x3d, 0xfa, 0xde, 0xf6, 0x5d, 0x0a, 0x0e,
|
||||||
0x37, 0x77, 0xda, 0x2f, 0x7d, 0x1d, 0xf0, 0x42, 0xf4, 0xad, 0x90, 0x04, 0x57, 0x5f, 0x2a, 0x60,
|
0x0f, 0xdb, 0x89, 0x78, 0x41, 0xf1, 0x45, 0x28, 0xd8, 0x62, 0x82, 0x82, 0xba, 0x27, 0xa4, 0x58,
|
||||||
0x39, 0x6d, 0x2a, 0xc0, 0xe7, 0x7d, 0xd8, 0xde, 0x51, 0xc8, 0xfc, 0xf0, 0xec, 0xef, 0x5b, 0x05,
|
0x6a, 0xd1, 0x1b, 0x30, 0xd5, 0xd0, 0xcc, 0x5a, 0xc5, 0xf8, 0xdc, 0x5f, 0xc5, 0x83, 0x94, 0xbe,
|
||||||
0x1c, 0xef, 0xc7, 0xa9, 0x78, 0xa3, 0x71, 0x22, 0x15, 0xb2, 0xa0, 0xb0, 0xd1, 0xb6, 0x84, 0x14,
|
0x29, 0xe5, 0x38, 0x40, 0xa0, 0x6b, 0xb0, 0x20, 0xec, 0xd6, 0x89, 0x59, 0x77, 0x1a, 0xe2, 0x1d,
|
||||||
0x49, 0x2d, 0x3c, 0x0b, 0x26, 0x6a, 0x86, 0x55, 0xd9, 0x26, 0x9f, 0x05, 0x1c, 0x3f, 0x2c, 0xf5,
|
0xe4, 0xb6, 0x11, 0xcc, 0x95, 0x7b, 0x7d, 0x7a, 0x3c, 0x60, 0xa1, 0xfc, 0x95, 0x02, 0x74, 0x90,
|
||||||
0xdb, 0x52, 0x8e, 0x42, 0x0b, 0x78, 0x03, 0xcc, 0x09, 0xbf, 0x35, 0x6c, 0x55, 0xdd, 0x9a, 0x78,
|
0x05, 0xe1, 0x34, 0xe4, 0x34, 0xdb, 0x10, 0x7b, 0xaa, 0x57, 0x54, 0x39, 0x75, 0xb6, 0xdb, 0x29,
|
||||||
0x13, 0xc9, 0x51, 0xc2, 0xdd, 0xb3, 0xd5, 0xa5, 0x47, 0x3d, 0x1e, 0xea, 0xaf, 0x0a, 0x80, 0x7f,
|
0xe6, 0xae, 0x6c, 0xdd, 0xf2, 0x84, 0x38, 0xd4, 0x73, 0xb0, 0x3f, 0x45, 0xbd, 0x69, 0x29, 0xc1,
|
||||||
0x84, 0x56, 0x9c, 0x01, 0x79, 0xc3, 0x21, 0x82, 0xed, 0xfa, 0xcd, 0x96, 0xd7, 0xa7, 0xdb, 0xad,
|
0xbe, 0x63, 0x86, 0x43, 0x3d, 0xba, 0x00, 0x33, 0x7a, 0xd3, 0x65, 0x0e, 0xa1, 0x15, 0xdd, 0xb2,
|
||||||
0x52, 0x7e, 0x75, 0xf3, 0x8e, 0x2f, 0x44, 0x91, 0x9e, 0x1b, 0x07, 0xfb, 0xd6, 0xdf, 0xab, 0xd2,
|
0x89, 0x68, 0x42, 0x53, 0xea, 0x61, 0x79, 0xa7, 0x99, 0xab, 0x3d, 0x3a, 0x1c, 0x41, 0xa2, 0x12,
|
||||||
0x38, 0x08, 0xcc, 0x50, 0xa4, 0x87, 0x57, 0xc0, 0x94, 0x59, 0xf7, 0x98, 0x8b, 0xe9, 0xb6, 0x69,
|
0x00, 0xaf, 0x23, 0x66, 0x6b, 0xdc, 0x4f, 0x56, 0xf8, 0x99, 0xe3, 0x0f, 0xb6, 0x19, 0x48, 0x71,
|
||||||
0x3b, 0x58, 0x0c, 0xa7, 0x09, 0xfd, 0xb8, 0xbc, 0xd3, 0xd4, 0xf5, 0x0e, 0x1d, 0x8a, 0x59, 0x42,
|
0x0f, 0x42, 0x79, 0x02, 0x4b, 0x15, 0x42, 0xdb, 0x86, 0x4e, 0xae, 0xe8, 0xba, 0xe5, 0x9a, 0x8e,
|
||||||
0x0d, 0x00, 0xde, 0x59, 0xcc, 0x31, 0x78, 0x9c, 0x9c, 0x88, 0x33, 0xc3, 0x1f, 0x6c, 0x23, 0x94,
|
0xbf, 0x71, 0x97, 0x21, 0x17, 0xc0, 0x64, 0xa9, 0x1d, 0x92, 0xfe, 0x73, 0x01, 0x17, 0x0e, 0x31,
|
||||||
0xa2, 0x0e, 0x0b, 0xf5, 0x19, 0x58, 0xd8, 0xc6, 0xb4, 0x49, 0x4c, 0xbc, 0x6a, 0x9a, 0xb6, 0x67,
|
0x41, 0x6d, 0xa7, 0x63, 0x6b, 0xfb, 0xfb, 0x34, 0x4c, 0x86, 0xf4, 0x99, 0x1d, 0xc3, 0xac, 0x49,
|
||||||
0xb9, 0x01, 0x6f, 0x2f, 0x83, 0x7c, 0x68, 0x26, 0x9b, 0xef, 0x98, 0x8c, 0x9f, 0x0f, 0xb1, 0x50,
|
0xe6, 0xa3, 0x3e, 0xfa, 0x8e, 0x61, 0xd6, 0x5e, 0x75, 0x8a, 0xd3, 0x12, 0xc6, 0x3f, 0xb1, 0x00,
|
||||||
0x64, 0x13, 0x76, 0x7b, 0x26, 0xb1, 0xdb, 0x7f, 0xc8, 0x80, 0xf1, 0x08, 0x3e, 0xbb, 0x47, 0xac,
|
0xa2, 0x6b, 0x90, 0x71, 0x19, 0xa1, 0xb2, 0x6a, 0x8f, 0x27, 0xe4, 0xf1, 0x03, 0x46, 0xa8, 0xbf,
|
||||||
0x8a, 0x44, 0x3e, 0x11, 0x58, 0xdf, 0x23, 0x56, 0xe5, 0x5d, 0xab, 0x34, 0x29, 0xcd, 0xf8, 0x27,
|
0x32, 0x4d, 0x71, 0x52, 0x2e, 0xc0, 0xc2, 0x1a, 0xdd, 0x84, 0x6c, 0x9d, 0xbf, 0x87, 0x2c, 0xcc,
|
||||||
0x12, 0x86, 0xf0, 0x2e, 0xc8, 0x7a, 0x0c, 0x53, 0xd9, 0xc7, 0x67, 0x53, 0xab, 0xf9, 0x21, 0xc3,
|
0x13, 0x09, 0x34, 0xbd, 0xbf, 0x3f, 0xbc, 0xc7, 0x17, 0x12, 0xec, 0x11, 0xa0, 0x26, 0xcc, 0xb1,
|
||||||
0x34, 0x20, 0x5a, 0x13, 0x1c, 0x9a, 0x0b, 0x90, 0xc0, 0x80, 0x1b, 0x20, 0x57, 0xe5, 0xaf, 0x22,
|
0x48, 0xe0, 0xc4, 0x23, 0x25, 0xaf, 0x40, 0x43, 0x23, 0xad, 0xa2, 0x6e, 0xa7, 0x38, 0x17, 0x55,
|
||||||
0x5b, 0xf5, 0x5c, 0x2a, 0x58, 0xe7, 0x2f, 0x1a, 0xbf, 0x10, 0x84, 0x04, 0xf9, 0x30, 0x90, 0x82,
|
0xe1, 0x3e, 0x6e, 0xa5, 0x0c, 0xd3, 0x3d, 0xd7, 0xda, 0xbf, 0x8f, 0xaa, 0x97, 0x9f, 0xbd, 0x2c,
|
||||||
0x19, 0x16, 0x4b, 0xa2, 0x78, 0xb0, 0x61, 0x88, 0x53, 0xdf, 0xdc, 0xeb, 0xb0, 0xdd, 0x2a, 0xcd,
|
0x8c, 0x3d, 0x7f, 0x59, 0x18, 0x7b, 0xf1, 0xb2, 0x30, 0xf6, 0x65, 0xb7, 0x90, 0x7a, 0xd6, 0x2d,
|
||||||
0xc4, 0x55, 0xa8, 0x2b, 0x82, 0x5a, 0x06, 0x93, 0x1d, 0x57, 0x4c, 0x9f, 0xb5, 0xfa, 0xcd, 0x57,
|
0xa4, 0x9e, 0x77, 0x0b, 0xa9, 0x17, 0xdd, 0x42, 0xea, 0xb7, 0x6e, 0x21, 0xf5, 0xf4, 0xf7, 0xc2,
|
||||||
0x87, 0xc5, 0x91, 0xd7, 0x87, 0xc5, 0x91, 0x37, 0x87, 0xc5, 0x91, 0xcf, 0xdb, 0x45, 0xe5, 0x55,
|
0xd8, 0xe3, 0x23, 0xb1, 0xff, 0x13, 0xfd, 0x3b, 0x00, 0x00, 0xff, 0xff, 0xd1, 0x0a, 0x3e, 0x83,
|
||||||
0xbb, 0xa8, 0xbc, 0x6e, 0x17, 0x95, 0x37, 0xed, 0xa2, 0xf2, 0xb6, 0x5d, 0x54, 0xbe, 0xfc, 0xa9,
|
0x48, 0x15, 0x00, 0x00,
|
||||||
0x38, 0xf2, 0xb8, 0x94, 0xf2, 0x2f, 0xda, 0xdf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xc1, 0x6c, 0x4e,
|
|
||||||
0x4e, 0xdd, 0x15, 0x00, 0x00,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ExemptPriorityLevelConfiguration) Marshal() (dAtA []byte, err error) {
|
func (m *ExemptPriorityLevelConfiguration) Marshal() (dAtA []byte, err error) {
|
||||||
|
@ -1244,9 +1242,11 @@ func (m *LimitedPriorityLevelConfiguration) MarshalToSizedBuffer(dAtA []byte) (i
|
||||||
}
|
}
|
||||||
i--
|
i--
|
||||||
dAtA[i] = 0x12
|
dAtA[i] = 0x12
|
||||||
i = encodeVarintGenerated(dAtA, i, uint64(m.AssuredConcurrencyShares))
|
if m.NominalConcurrencyShares != nil {
|
||||||
i--
|
i = encodeVarintGenerated(dAtA, i, uint64(*m.NominalConcurrencyShares))
|
||||||
dAtA[i] = 0x8
|
i--
|
||||||
|
dAtA[i] = 0x8
|
||||||
|
}
|
||||||
return len(dAtA) - i, nil
|
return len(dAtA) - i, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2007,7 +2007,9 @@ func (m *LimitedPriorityLevelConfiguration) Size() (n int) {
|
||||||
}
|
}
|
||||||
var l int
|
var l int
|
||||||
_ = l
|
_ = l
|
||||||
n += 1 + sovGenerated(uint64(m.AssuredConcurrencyShares))
|
if m.NominalConcurrencyShares != nil {
|
||||||
|
n += 1 + sovGenerated(uint64(*m.NominalConcurrencyShares))
|
||||||
|
}
|
||||||
l = m.LimitResponse.Size()
|
l = m.LimitResponse.Size()
|
||||||
n += 1 + l + sovGenerated(uint64(l))
|
n += 1 + l + sovGenerated(uint64(l))
|
||||||
if m.LendablePercent != nil {
|
if m.LendablePercent != nil {
|
||||||
|
@ -2384,7 +2386,7 @@ func (this *LimitedPriorityLevelConfiguration) String() string {
|
||||||
return "nil"
|
return "nil"
|
||||||
}
|
}
|
||||||
s := strings.Join([]string{`&LimitedPriorityLevelConfiguration{`,
|
s := strings.Join([]string{`&LimitedPriorityLevelConfiguration{`,
|
||||||
`AssuredConcurrencyShares:` + fmt.Sprintf("%v", this.AssuredConcurrencyShares) + `,`,
|
`NominalConcurrencyShares:` + valueToStringGenerated(this.NominalConcurrencyShares) + `,`,
|
||||||
`LimitResponse:` + strings.Replace(strings.Replace(this.LimitResponse.String(), "LimitResponse", "LimitResponse", 1), `&`, ``, 1) + `,`,
|
`LimitResponse:` + strings.Replace(strings.Replace(this.LimitResponse.String(), "LimitResponse", "LimitResponse", 1), `&`, ``, 1) + `,`,
|
||||||
`LendablePercent:` + valueToStringGenerated(this.LendablePercent) + `,`,
|
`LendablePercent:` + valueToStringGenerated(this.LendablePercent) + `,`,
|
||||||
`BorrowingLimitPercent:` + valueToStringGenerated(this.BorrowingLimitPercent) + `,`,
|
`BorrowingLimitPercent:` + valueToStringGenerated(this.BorrowingLimitPercent) + `,`,
|
||||||
|
@ -3713,9 +3715,9 @@ func (m *LimitedPriorityLevelConfiguration) Unmarshal(dAtA []byte) error {
|
||||||
switch fieldNum {
|
switch fieldNum {
|
||||||
case 1:
|
case 1:
|
||||||
if wireType != 0 {
|
if wireType != 0 {
|
||||||
return fmt.Errorf("proto: wrong wireType = %d for field AssuredConcurrencyShares", wireType)
|
return fmt.Errorf("proto: wrong wireType = %d for field NominalConcurrencyShares", wireType)
|
||||||
}
|
}
|
||||||
m.AssuredConcurrencyShares = 0
|
var v int32
|
||||||
for shift := uint(0); ; shift += 7 {
|
for shift := uint(0); ; shift += 7 {
|
||||||
if shift >= 64 {
|
if shift >= 64 {
|
||||||
return ErrIntOverflowGenerated
|
return ErrIntOverflowGenerated
|
||||||
|
@ -3725,11 +3727,12 @@ func (m *LimitedPriorityLevelConfiguration) Unmarshal(dAtA []byte) error {
|
||||||
}
|
}
|
||||||
b := dAtA[iNdEx]
|
b := dAtA[iNdEx]
|
||||||
iNdEx++
|
iNdEx++
|
||||||
m.AssuredConcurrencyShares |= int32(b&0x7F) << shift
|
v |= int32(b&0x7F) << shift
|
||||||
if b < 0x80 {
|
if b < 0x80 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
m.NominalConcurrencyShares = &v
|
||||||
case 2:
|
case 2:
|
||||||
if wireType != 2 {
|
if wireType != 2 {
|
||||||
return fmt.Errorf("proto: wrong wireType = %d for field LimitResponse", wireType)
|
return fmt.Errorf("proto: wrong wireType = %d for field LimitResponse", wireType)
|
|
@ -19,14 +19,14 @@ limitations under the License.
|
||||||
|
|
||||||
syntax = "proto2";
|
syntax = "proto2";
|
||||||
|
|
||||||
package k8s.io.api.flowcontrol.v1alpha1;
|
package k8s.io.api.flowcontrol.v1;
|
||||||
|
|
||||||
import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto";
|
import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto";
|
||||||
import "k8s.io/apimachinery/pkg/runtime/generated.proto";
|
import "k8s.io/apimachinery/pkg/runtime/generated.proto";
|
||||||
import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto";
|
import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto";
|
||||||
|
|
||||||
// Package-wide variables from generator "generated".
|
// Package-wide variables from generator "generated".
|
||||||
option go_package = "k8s.io/api/flowcontrol/v1alpha1";
|
option go_package = "k8s.io/api/flowcontrol/v1";
|
||||||
|
|
||||||
// ExemptPriorityLevelConfiguration describes the configurable aspects
|
// ExemptPriorityLevelConfiguration describes the configurable aspects
|
||||||
// of the handling of exempt requests.
|
// of the handling of exempt requests.
|
||||||
|
@ -153,6 +153,8 @@ message FlowSchemaStatus {
|
||||||
// `conditions` is a list of the current states of FlowSchema.
|
// `conditions` is a list of the current states of FlowSchema.
|
||||||
// +listType=map
|
// +listType=map
|
||||||
// +listMapKey=type
|
// +listMapKey=type
|
||||||
|
// +patchMergeKey=type
|
||||||
|
// +patchStrategy=merge
|
||||||
// +optional
|
// +optional
|
||||||
repeated FlowSchemaCondition conditions = 1;
|
repeated FlowSchemaCondition conditions = 1;
|
||||||
}
|
}
|
||||||
|
@ -190,23 +192,28 @@ message LimitResponse {
|
||||||
// - How are requests for this priority level limited?
|
// - How are requests for this priority level limited?
|
||||||
// - What should be done with requests that exceed the limit?
|
// - What should be done with requests that exceed the limit?
|
||||||
message LimitedPriorityLevelConfiguration {
|
message LimitedPriorityLevelConfiguration {
|
||||||
// `assuredConcurrencyShares` (ACS) configures the execution
|
// `nominalConcurrencyShares` (NCS) contributes to the computation of the
|
||||||
// limit, which is a limit on the number of requests of this
|
// NominalConcurrencyLimit (NominalCL) of this level.
|
||||||
// priority level that may be exeucting at a given time. ACS must
|
// This is the number of execution seats available at this priority level.
|
||||||
// be a positive number. The server's concurrency limit (SCL) is
|
// This is used both for requests dispatched from this priority level
|
||||||
// divided among the concurrency-controlled priority levels in
|
// as well as requests dispatched from other priority levels
|
||||||
// proportion to their assured concurrency shares. This produces
|
// borrowing seats from this level.
|
||||||
// the assured concurrency value (ACV) --- the number of requests
|
// The server's concurrency limit (ServerCL) is divided among the
|
||||||
// that may be executing at a time --- for each such priority
|
// Limited priority levels in proportion to their NCS values:
|
||||||
// level:
|
|
||||||
//
|
//
|
||||||
// ACV(l) = ceil( SCL * ACS(l) / ( sum[priority levels k] ACS(k) ) )
|
// NominalCL(i) = ceil( ServerCL * NCS(i) / sum_ncs )
|
||||||
|
// sum_ncs = sum[priority level k] NCS(k)
|
||||||
|
//
|
||||||
|
// Bigger numbers mean a larger nominal concurrency limit,
|
||||||
|
// at the expense of every other priority level.
|
||||||
|
//
|
||||||
|
// If not specified, this field defaults to a value of 30.
|
||||||
|
//
|
||||||
|
// Setting this field to zero supports the construction of a
|
||||||
|
// "jail" for this priority level that is used to hold some request(s)
|
||||||
//
|
//
|
||||||
// bigger numbers of ACS mean more reserved concurrent requests (at the
|
|
||||||
// expense of every other PL).
|
|
||||||
// This field has a default value of 30.
|
|
||||||
// +optional
|
// +optional
|
||||||
optional int32 assuredConcurrencyShares = 1;
|
optional int32 nominalConcurrencyShares = 1;
|
||||||
|
|
||||||
// `limitResponse` indicates what to do with requests that can not be executed right now
|
// `limitResponse` indicates what to do with requests that can not be executed right now
|
||||||
optional LimitResponse limitResponse = 2;
|
optional LimitResponse limitResponse = 2;
|
||||||
|
@ -381,6 +388,8 @@ message PriorityLevelConfigurationStatus {
|
||||||
// `conditions` is the current state of "request-priority".
|
// `conditions` is the current state of "request-priority".
|
||||||
// +listType=map
|
// +listType=map
|
||||||
// +listMapKey=type
|
// +listMapKey=type
|
||||||
|
// +patchMergeKey=type
|
||||||
|
// +patchStrategy=merge
|
||||||
// +optional
|
// +optional
|
||||||
repeated PriorityLevelConfigurationCondition conditions = 1;
|
repeated PriorityLevelConfigurationCondition conditions = 1;
|
||||||
}
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2019 The Kubernetes Authors.
|
Copyright 2023 The Kubernetes Authors.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package v1alpha1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
@ -26,7 +26,7 @@ import (
|
||||||
const GroupName = "flowcontrol.apiserver.k8s.io"
|
const GroupName = "flowcontrol.apiserver.k8s.io"
|
||||||
|
|
||||||
// SchemeGroupVersion is group version used to register these objects
|
// SchemeGroupVersion is group version used to register these objects
|
||||||
var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha1"}
|
var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"}
|
||||||
|
|
||||||
// Kind takes an unqualified kind and returns a Group qualified GroupKind
|
// Kind takes an unqualified kind and returns a Group qualified GroupKind
|
||||||
func Kind(kind string) schema.GroupKind {
|
func Kind(kind string) schema.GroupKind {
|
107
vendor/k8s.io/api/flowcontrol/v1alpha1/types.go → vendor/k8s.io/api/flowcontrol/v1/types.go
generated
vendored
107
vendor/k8s.io/api/flowcontrol/v1alpha1/types.go → vendor/k8s.io/api/flowcontrol/v1/types.go
generated
vendored
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2019 The Kubernetes Authors.
|
Copyright 2023 The Kubernetes Authors.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package v1alpha1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
@ -57,13 +57,55 @@ const (
|
||||||
ResponseHeaderMatchedFlowSchemaUID = "X-Kubernetes-PF-FlowSchema-UID"
|
ResponseHeaderMatchedFlowSchemaUID = "X-Kubernetes-PF-FlowSchema-UID"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// AutoUpdateAnnotationKey is the name of an annotation that enables
|
||||||
|
// automatic update of the spec of the bootstrap configuration
|
||||||
|
// object(s), if set to 'true'.
|
||||||
|
//
|
||||||
|
// On a fresh install, all bootstrap configuration objects will have auto
|
||||||
|
// update enabled with the following annotation key:
|
||||||
|
// apf.kubernetes.io/autoupdate-spec: 'true'
|
||||||
|
//
|
||||||
|
// The kube-apiserver periodically checks the bootstrap configuration
|
||||||
|
// objects on the cluster and applies updates if necessary.
|
||||||
|
//
|
||||||
|
// kube-apiserver enforces an 'always auto-update' policy for the
|
||||||
|
// mandatory configuration object(s). This implies:
|
||||||
|
// - the auto-update annotation key is added with a value of 'true'
|
||||||
|
// if it is missing.
|
||||||
|
// - the auto-update annotation key is set to 'true' if its current value
|
||||||
|
// is a boolean false or has an invalid boolean representation
|
||||||
|
// (if the cluster operator sets it to 'false' it will be stomped)
|
||||||
|
// - any changes to the spec made by the cluster operator will be
|
||||||
|
// stomped, except for changes to the `nominalConcurrencyShares`
|
||||||
|
// and `lendablePercent` fields of the PriorityLevelConfiguration
|
||||||
|
// named "exempt".
|
||||||
|
//
|
||||||
|
// The kube-apiserver will apply updates on the suggested configuration if:
|
||||||
|
// - the cluster operator has enabled auto-update by setting the annotation
|
||||||
|
// (apf.kubernetes.io/autoupdate-spec: 'true') or
|
||||||
|
// - the annotation key is missing but the generation is 1
|
||||||
|
//
|
||||||
|
// If the suggested configuration object is missing the annotation key,
|
||||||
|
// kube-apiserver will update the annotation appropriately:
|
||||||
|
// - it is set to 'true' if generation of the object is '1' which usually
|
||||||
|
// indicates that the spec of the object has not been changed.
|
||||||
|
// - it is set to 'false' if generation of the object is greater than 1.
|
||||||
|
//
|
||||||
|
// The goal is to enable the kube-apiserver to apply update on suggested
|
||||||
|
// configuration objects installed by previous releases but not overwrite
|
||||||
|
// changes made by the cluster operators.
|
||||||
|
// Note that this distinction is imperfectly detected: in the case where an
|
||||||
|
// operator deletes a suggested configuration object and later creates it
|
||||||
|
// but with a variant spec and then does no updates of the object
|
||||||
|
// (generation is 1), the technique outlined above will incorrectly
|
||||||
|
// determine that the object should be auto-updated.
|
||||||
|
AutoUpdateAnnotationKey = "apf.kubernetes.io/autoupdate-spec"
|
||||||
|
)
|
||||||
|
|
||||||
// +genclient
|
// +genclient
|
||||||
// +genclient:nonNamespaced
|
// +genclient:nonNamespaced
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
// +k8s:prerelease-lifecycle-gen:introduced=1.18
|
|
||||||
// +k8s:prerelease-lifecycle-gen:deprecated=1.20
|
|
||||||
// +k8s:prerelease-lifecycle-gen:removed=1.21
|
|
||||||
// +k8s:prerelease-lifecycle-gen:replacement=flowcontrol.apiserver.k8s.io,v1beta3,FlowSchema
|
|
||||||
|
|
||||||
// FlowSchema defines the schema of a group of flows. Note that a flow is made up of a set of inbound API requests with
|
// FlowSchema defines the schema of a group of flows. Note that a flow is made up of a set of inbound API requests with
|
||||||
// similar attributes and is identified by a pair of strings: the name of the FlowSchema and a "flow distinguisher".
|
// similar attributes and is identified by a pair of strings: the name of the FlowSchema and a "flow distinguisher".
|
||||||
|
@ -84,10 +126,6 @@ type FlowSchema struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
// +k8s:prerelease-lifecycle-gen:introduced=1.18
|
|
||||||
// +k8s:prerelease-lifecycle-gen:deprecated=1.20
|
|
||||||
// +k8s:prerelease-lifecycle-gen:removed=1.21
|
|
||||||
// +k8s:prerelease-lifecycle-gen:replacement=flowcontrol.apiserver.k8s.io,v1beta3,FlowSchemaList
|
|
||||||
|
|
||||||
// FlowSchemaList is a list of FlowSchema objects.
|
// FlowSchemaList is a list of FlowSchema objects.
|
||||||
type FlowSchemaList struct {
|
type FlowSchemaList struct {
|
||||||
|
@ -314,8 +352,10 @@ type FlowSchemaStatus struct {
|
||||||
// `conditions` is a list of the current states of FlowSchema.
|
// `conditions` is a list of the current states of FlowSchema.
|
||||||
// +listType=map
|
// +listType=map
|
||||||
// +listMapKey=type
|
// +listMapKey=type
|
||||||
|
// +patchMergeKey=type
|
||||||
|
// +patchStrategy=merge
|
||||||
// +optional
|
// +optional
|
||||||
Conditions []FlowSchemaCondition `json:"conditions,omitempty" protobuf:"bytes,1,rep,name=conditions"`
|
Conditions []FlowSchemaCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// FlowSchemaCondition describes conditions for a FlowSchema.
|
// FlowSchemaCondition describes conditions for a FlowSchema.
|
||||||
|
@ -341,10 +381,6 @@ type FlowSchemaConditionType string
|
||||||
// +genclient
|
// +genclient
|
||||||
// +genclient:nonNamespaced
|
// +genclient:nonNamespaced
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
// +k8s:prerelease-lifecycle-gen:introduced=1.18
|
|
||||||
// +k8s:prerelease-lifecycle-gen:deprecated=1.20
|
|
||||||
// +k8s:prerelease-lifecycle-gen:removed=1.21
|
|
||||||
// +k8s:prerelease-lifecycle-gen:replacement=flowcontrol.apiserver.k8s.io,v1beta3,PriorityLevelConfiguration
|
|
||||||
|
|
||||||
// PriorityLevelConfiguration represents the configuration of a priority level.
|
// PriorityLevelConfiguration represents the configuration of a priority level.
|
||||||
type PriorityLevelConfiguration struct {
|
type PriorityLevelConfiguration struct {
|
||||||
|
@ -364,10 +400,6 @@ type PriorityLevelConfiguration struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
// +k8s:prerelease-lifecycle-gen:introduced=1.18
|
|
||||||
// +k8s:prerelease-lifecycle-gen:deprecated=1.20
|
|
||||||
// +k8s:prerelease-lifecycle-gen:removed=1.21
|
|
||||||
// +k8s:prerelease-lifecycle-gen:replacement=flowcontrol.apiserver.k8s.io,v1beta3,PriorityLevelConfigurationList
|
|
||||||
|
|
||||||
// PriorityLevelConfigurationList is a list of PriorityLevelConfiguration objects.
|
// PriorityLevelConfigurationList is a list of PriorityLevelConfiguration objects.
|
||||||
type PriorityLevelConfigurationList struct {
|
type PriorityLevelConfigurationList struct {
|
||||||
|
@ -426,23 +458,28 @@ const (
|
||||||
// - How are requests for this priority level limited?
|
// - How are requests for this priority level limited?
|
||||||
// - What should be done with requests that exceed the limit?
|
// - What should be done with requests that exceed the limit?
|
||||||
type LimitedPriorityLevelConfiguration struct {
|
type LimitedPriorityLevelConfiguration struct {
|
||||||
// `assuredConcurrencyShares` (ACS) configures the execution
|
// `nominalConcurrencyShares` (NCS) contributes to the computation of the
|
||||||
// limit, which is a limit on the number of requests of this
|
// NominalConcurrencyLimit (NominalCL) of this level.
|
||||||
// priority level that may be exeucting at a given time. ACS must
|
// This is the number of execution seats available at this priority level.
|
||||||
// be a positive number. The server's concurrency limit (SCL) is
|
// This is used both for requests dispatched from this priority level
|
||||||
// divided among the concurrency-controlled priority levels in
|
// as well as requests dispatched from other priority levels
|
||||||
// proportion to their assured concurrency shares. This produces
|
// borrowing seats from this level.
|
||||||
// the assured concurrency value (ACV) --- the number of requests
|
// The server's concurrency limit (ServerCL) is divided among the
|
||||||
// that may be executing at a time --- for each such priority
|
// Limited priority levels in proportion to their NCS values:
|
||||||
// level:
|
|
||||||
//
|
//
|
||||||
// ACV(l) = ceil( SCL * ACS(l) / ( sum[priority levels k] ACS(k) ) )
|
// NominalCL(i) = ceil( ServerCL * NCS(i) / sum_ncs )
|
||||||
|
// sum_ncs = sum[priority level k] NCS(k)
|
||||||
|
//
|
||||||
|
// Bigger numbers mean a larger nominal concurrency limit,
|
||||||
|
// at the expense of every other priority level.
|
||||||
|
//
|
||||||
|
// If not specified, this field defaults to a value of 30.
|
||||||
|
//
|
||||||
|
// Setting this field to zero supports the construction of a
|
||||||
|
// "jail" for this priority level that is used to hold some request(s)
|
||||||
//
|
//
|
||||||
// bigger numbers of ACS mean more reserved concurrent requests (at the
|
|
||||||
// expense of every other PL).
|
|
||||||
// This field has a default value of 30.
|
|
||||||
// +optional
|
// +optional
|
||||||
AssuredConcurrencyShares int32 `json:"assuredConcurrencyShares" protobuf:"varint,1,opt,name=assuredConcurrencyShares"`
|
NominalConcurrencyShares *int32 `json:"nominalConcurrencyShares" protobuf:"varint,1,opt,name=nominalConcurrencyShares"`
|
||||||
|
|
||||||
// `limitResponse` indicates what to do with requests that can not be executed right now
|
// `limitResponse` indicates what to do with requests that can not be executed right now
|
||||||
LimitResponse LimitResponse `json:"limitResponse,omitempty" protobuf:"bytes,2,opt,name=limitResponse"`
|
LimitResponse LimitResponse `json:"limitResponse,omitempty" protobuf:"bytes,2,opt,name=limitResponse"`
|
||||||
|
@ -586,8 +623,10 @@ type PriorityLevelConfigurationStatus struct {
|
||||||
// `conditions` is the current state of "request-priority".
|
// `conditions` is the current state of "request-priority".
|
||||||
// +listType=map
|
// +listType=map
|
||||||
// +listMapKey=type
|
// +listMapKey=type
|
||||||
|
// +patchMergeKey=type
|
||||||
|
// +patchStrategy=merge
|
||||||
// +optional
|
// +optional
|
||||||
Conditions []PriorityLevelConfigurationCondition `json:"conditions,omitempty" protobuf:"bytes,1,rep,name=conditions"`
|
Conditions []PriorityLevelConfigurationCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// PriorityLevelConfigurationCondition defines the condition of priority level.
|
// PriorityLevelConfigurationCondition defines the condition of priority level.
|
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package v1alpha1
|
package v1
|
||||||
|
|
||||||
// This file contains a collection of methods that can be used from go-restful to
|
// This file contains a collection of methods that can be used from go-restful to
|
||||||
// generate Swagger API documentation for its models. Please read this PR for more
|
// generate Swagger API documentation for its models. Please read this PR for more
|
||||||
|
@ -122,7 +122,7 @@ func (LimitResponse) SwaggerDoc() map[string]string {
|
||||||
|
|
||||||
var map_LimitedPriorityLevelConfiguration = map[string]string{
|
var map_LimitedPriorityLevelConfiguration = map[string]string{
|
||||||
"": "LimitedPriorityLevelConfiguration specifies how to handle requests that are subject to limits. It addresses two issues:\n - How are requests for this priority level limited?\n - What should be done with requests that exceed the limit?",
|
"": "LimitedPriorityLevelConfiguration specifies how to handle requests that are subject to limits. It addresses two issues:\n - How are requests for this priority level limited?\n - What should be done with requests that exceed the limit?",
|
||||||
"assuredConcurrencyShares": "`assuredConcurrencyShares` (ACS) configures the execution limit, which is a limit on the number of requests of this priority level that may be exeucting at a given time. ACS must be a positive number. The server's concurrency limit (SCL) is divided among the concurrency-controlled priority levels in proportion to their assured concurrency shares. This produces the assured concurrency value (ACV) ",
|
"nominalConcurrencyShares": "`nominalConcurrencyShares` (NCS) contributes to the computation of the NominalConcurrencyLimit (NominalCL) of this level. This is the number of execution seats available at this priority level. This is used both for requests dispatched from this priority level as well as requests dispatched from other priority levels borrowing seats from this level. The server's concurrency limit (ServerCL) is divided among the Limited priority levels in proportion to their NCS values:\n\nNominalCL(i) = ceil( ServerCL * NCS(i) / sum_ncs ) sum_ncs = sum[priority level k] NCS(k)\n\nBigger numbers mean a larger nominal concurrency limit, at the expense of every other priority level.\n\nIf not specified, this field defaults to a value of 30.\n\nSetting this field to zero supports the construction of a \"jail\" for this priority level that is used to hold some request(s)",
|
||||||
"limitResponse": "`limitResponse` indicates what to do with requests that can not be executed right now",
|
"limitResponse": "`limitResponse` indicates what to do with requests that can not be executed right now",
|
||||||
"lendablePercent": "`lendablePercent` prescribes the fraction of the level's NominalCL that can be borrowed by other priority levels. The value of this field must be between 0 and 100, inclusive, and it defaults to 0. The number of seats that other levels can borrow from this level, known as this level's LendableConcurrencyLimit (LendableCL), is defined as follows.\n\nLendableCL(i) = round( NominalCL(i) * lendablePercent(i)/100.0 )",
|
"lendablePercent": "`lendablePercent` prescribes the fraction of the level's NominalCL that can be borrowed by other priority levels. The value of this field must be between 0 and 100, inclusive, and it defaults to 0. The number of seats that other levels can borrow from this level, known as this level's LendableConcurrencyLimit (LendableCL), is defined as follows.\n\nLendableCL(i) = round( NominalCL(i) * lendablePercent(i)/100.0 )",
|
||||||
"borrowingLimitPercent": "`borrowingLimitPercent`, if present, configures a limit on how many seats this priority level can borrow from other priority levels. The limit is known as this level's BorrowingConcurrencyLimit (BorrowingCL) and is a limit on the total number of seats that this level may borrow at any one time. This field holds the ratio of that limit to the level's nominal concurrency limit. When this field is non-nil, it must hold a non-negative integer and the limit is calculated as follows.\n\nBorrowingCL(i) = round( NominalCL(i) * borrowingLimitPercent(i)/100.0 )\n\nThe value of this field can be more than 100, implying that this priority level can borrow a number of seats that is greater than its own nominal concurrency limit (NominalCL). When this field is left `nil`, the limit is effectively infinite.",
|
"borrowingLimitPercent": "`borrowingLimitPercent`, if present, configures a limit on how many seats this priority level can borrow from other priority levels. The limit is known as this level's BorrowingConcurrencyLimit (BorrowingCL) and is a limit on the total number of seats that this level may borrow at any one time. This field holds the ratio of that limit to the level's nominal concurrency limit. When this field is non-nil, it must hold a non-negative integer and the limit is calculated as follows.\n\nBorrowingCL(i) = round( NominalCL(i) * borrowingLimitPercent(i)/100.0 )\n\nThe value of this field can be more than 100, implying that this priority level can borrow a number of seats that is greater than its own nominal concurrency limit (NominalCL). When this field is left `nil`, the limit is effectively infinite.",
|
|
@ -19,7 +19,7 @@ limitations under the License.
|
||||||
|
|
||||||
// Code generated by deepcopy-gen. DO NOT EDIT.
|
// Code generated by deepcopy-gen. DO NOT EDIT.
|
||||||
|
|
||||||
package v1alpha1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||||
|
@ -237,6 +237,11 @@ func (in *LimitResponse) DeepCopy() *LimitResponse {
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *LimitedPriorityLevelConfiguration) DeepCopyInto(out *LimitedPriorityLevelConfiguration) {
|
func (in *LimitedPriorityLevelConfiguration) DeepCopyInto(out *LimitedPriorityLevelConfiguration) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
if in.NominalConcurrencyShares != nil {
|
||||||
|
in, out := &in.NominalConcurrencyShares, &out.NominalConcurrencyShares
|
||||||
|
*out = new(int32)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
in.LimitResponse.DeepCopyInto(&out.LimitResponse)
|
in.LimitResponse.DeepCopyInto(&out.LimitResponse)
|
||||||
if in.LendablePercent != nil {
|
if in.LendablePercent != nil {
|
||||||
in, out := &in.LendablePercent, &out.LendablePercent
|
in, out := &in.LendablePercent, &out.LendablePercent
|
|
@ -1,122 +0,0 @@
|
||||||
//go:build !ignore_autogenerated
|
|
||||||
// +build !ignore_autogenerated
|
|
||||||
|
|
||||||
/*
|
|
||||||
Copyright The Kubernetes Authors.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Code generated by prerelease-lifecycle-gen. DO NOT EDIT.
|
|
||||||
|
|
||||||
package v1alpha1
|
|
||||||
|
|
||||||
import (
|
|
||||||
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
|
||||||
)
|
|
||||||
|
|
||||||
// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go.
|
|
||||||
func (in *FlowSchema) APILifecycleIntroduced() (major, minor int) {
|
|
||||||
return 1, 18
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor.
|
|
||||||
func (in *FlowSchema) APILifecycleDeprecated() (major, minor int) {
|
|
||||||
return 1, 20
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=<group>,<version>,<kind>" tags in types.go.
|
|
||||||
func (in *FlowSchema) APILifecycleReplacement() schema.GroupVersionKind {
|
|
||||||
return schema.GroupVersionKind{Group: "flowcontrol.apiserver.k8s.io", Version: "v1beta3", Kind: "FlowSchema"}
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
|
||||||
func (in *FlowSchema) APILifecycleRemoved() (major, minor int) {
|
|
||||||
return 1, 21
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go.
|
|
||||||
func (in *FlowSchemaList) APILifecycleIntroduced() (major, minor int) {
|
|
||||||
return 1, 18
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor.
|
|
||||||
func (in *FlowSchemaList) APILifecycleDeprecated() (major, minor int) {
|
|
||||||
return 1, 20
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=<group>,<version>,<kind>" tags in types.go.
|
|
||||||
func (in *FlowSchemaList) APILifecycleReplacement() schema.GroupVersionKind {
|
|
||||||
return schema.GroupVersionKind{Group: "flowcontrol.apiserver.k8s.io", Version: "v1beta3", Kind: "FlowSchemaList"}
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
|
||||||
func (in *FlowSchemaList) APILifecycleRemoved() (major, minor int) {
|
|
||||||
return 1, 21
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go.
|
|
||||||
func (in *PriorityLevelConfiguration) APILifecycleIntroduced() (major, minor int) {
|
|
||||||
return 1, 18
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor.
|
|
||||||
func (in *PriorityLevelConfiguration) APILifecycleDeprecated() (major, minor int) {
|
|
||||||
return 1, 20
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=<group>,<version>,<kind>" tags in types.go.
|
|
||||||
func (in *PriorityLevelConfiguration) APILifecycleReplacement() schema.GroupVersionKind {
|
|
||||||
return schema.GroupVersionKind{Group: "flowcontrol.apiserver.k8s.io", Version: "v1beta3", Kind: "PriorityLevelConfiguration"}
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
|
||||||
func (in *PriorityLevelConfiguration) APILifecycleRemoved() (major, minor int) {
|
|
||||||
return 1, 21
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go.
|
|
||||||
func (in *PriorityLevelConfigurationList) APILifecycleIntroduced() (major, minor int) {
|
|
||||||
return 1, 18
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor.
|
|
||||||
func (in *PriorityLevelConfigurationList) APILifecycleDeprecated() (major, minor int) {
|
|
||||||
return 1, 20
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=<group>,<version>,<kind>" tags in types.go.
|
|
||||||
func (in *PriorityLevelConfigurationList) APILifecycleReplacement() schema.GroupVersionKind {
|
|
||||||
return schema.GroupVersionKind{Group: "flowcontrol.apiserver.k8s.io", Version: "v1beta3", Kind: "PriorityLevelConfigurationList"}
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
|
||||||
func (in *PriorityLevelConfigurationList) APILifecycleRemoved() (major, minor int) {
|
|
||||||
return 1, 21
|
|
||||||
}
|
|
|
@ -192,7 +192,7 @@ message LimitResponse {
|
||||||
message LimitedPriorityLevelConfiguration {
|
message LimitedPriorityLevelConfiguration {
|
||||||
// `assuredConcurrencyShares` (ACS) configures the execution
|
// `assuredConcurrencyShares` (ACS) configures the execution
|
||||||
// limit, which is a limit on the number of requests of this
|
// limit, which is a limit on the number of requests of this
|
||||||
// priority level that may be exeucting at a given time. ACS must
|
// priority level that may be executing at a given time. ACS must
|
||||||
// be a positive number. The server's concurrency limit (SCL) is
|
// be a positive number. The server's concurrency limit (SCL) is
|
||||||
// divided among the concurrency-controlled priority levels in
|
// divided among the concurrency-controlled priority levels in
|
||||||
// proportion to their assured concurrency shares. This produces
|
// proportion to their assured concurrency shares. This produces
|
||||||
|
|
|
@ -466,7 +466,7 @@ const (
|
||||||
type LimitedPriorityLevelConfiguration struct {
|
type LimitedPriorityLevelConfiguration struct {
|
||||||
// `assuredConcurrencyShares` (ACS) configures the execution
|
// `assuredConcurrencyShares` (ACS) configures the execution
|
||||||
// limit, which is a limit on the number of requests of this
|
// limit, which is a limit on the number of requests of this
|
||||||
// priority level that may be exeucting at a given time. ACS must
|
// priority level that may be executing at a given time. ACS must
|
||||||
// be a positive number. The server's concurrency limit (SCL) is
|
// be a positive number. The server's concurrency limit (SCL) is
|
||||||
// divided among the concurrency-controlled priority levels in
|
// divided among the concurrency-controlled priority levels in
|
||||||
// proportion to their assured concurrency shares. This produces
|
// proportion to their assured concurrency shares. This produces
|
||||||
|
|
|
@ -122,7 +122,7 @@ func (LimitResponse) SwaggerDoc() map[string]string {
|
||||||
|
|
||||||
var map_LimitedPriorityLevelConfiguration = map[string]string{
|
var map_LimitedPriorityLevelConfiguration = map[string]string{
|
||||||
"": "LimitedPriorityLevelConfiguration specifies how to handle requests that are subject to limits. It addresses two issues:\n - How are requests for this priority level limited?\n - What should be done with requests that exceed the limit?",
|
"": "LimitedPriorityLevelConfiguration specifies how to handle requests that are subject to limits. It addresses two issues:\n - How are requests for this priority level limited?\n - What should be done with requests that exceed the limit?",
|
||||||
"assuredConcurrencyShares": "`assuredConcurrencyShares` (ACS) configures the execution limit, which is a limit on the number of requests of this priority level that may be exeucting at a given time. ACS must be a positive number. The server's concurrency limit (SCL) is divided among the concurrency-controlled priority levels in proportion to their assured concurrency shares. This produces the assured concurrency value (ACV) ",
|
"assuredConcurrencyShares": "`assuredConcurrencyShares` (ACS) configures the execution limit, which is a limit on the number of requests of this priority level that may be executing at a given time. ACS must be a positive number. The server's concurrency limit (SCL) is divided among the concurrency-controlled priority levels in proportion to their assured concurrency shares. This produces the assured concurrency value (ACV) ",
|
||||||
"limitResponse": "`limitResponse` indicates what to do with requests that can not be executed right now",
|
"limitResponse": "`limitResponse` indicates what to do with requests that can not be executed right now",
|
||||||
"lendablePercent": "`lendablePercent` prescribes the fraction of the level's NominalCL that can be borrowed by other priority levels. The value of this field must be between 0 and 100, inclusive, and it defaults to 0. The number of seats that other levels can borrow from this level, known as this level's LendableConcurrencyLimit (LendableCL), is defined as follows.\n\nLendableCL(i) = round( NominalCL(i) * lendablePercent(i)/100.0 )",
|
"lendablePercent": "`lendablePercent` prescribes the fraction of the level's NominalCL that can be borrowed by other priority levels. The value of this field must be between 0 and 100, inclusive, and it defaults to 0. The number of seats that other levels can borrow from this level, known as this level's LendableConcurrencyLimit (LendableCL), is defined as follows.\n\nLendableCL(i) = round( NominalCL(i) * lendablePercent(i)/100.0 )",
|
||||||
"borrowingLimitPercent": "`borrowingLimitPercent`, if present, configures a limit on how many seats this priority level can borrow from other priority levels. The limit is known as this level's BorrowingConcurrencyLimit (BorrowingCL) and is a limit on the total number of seats that this level may borrow at any one time. This field holds the ratio of that limit to the level's nominal concurrency limit. When this field is non-nil, it must hold a non-negative integer and the limit is calculated as follows.\n\nBorrowingCL(i) = round( NominalCL(i) * borrowingLimitPercent(i)/100.0 )\n\nThe value of this field can be more than 100, implying that this priority level can borrow a number of seats that is greater than its own nominal concurrency limit (NominalCL). When this field is left `nil`, the limit is effectively infinite.",
|
"borrowingLimitPercent": "`borrowingLimitPercent`, if present, configures a limit on how many seats this priority level can borrow from other priority levels. The limit is known as this level's BorrowingConcurrencyLimit (BorrowingCL) and is a limit on the total number of seats that this level may borrow at any one time. This field holds the ratio of that limit to the level's nominal concurrency limit. When this field is non-nil, it must hold a non-negative integer and the limit is calculated as follows.\n\nBorrowingCL(i) = round( NominalCL(i) * borrowingLimitPercent(i)/100.0 )\n\nThe value of this field can be more than 100, implying that this priority level can borrow a number of seats that is greater than its own nominal concurrency limit (NominalCL). When this field is left `nil`, the limit is effectively infinite.",
|
||||||
|
|
|
@ -192,7 +192,7 @@ message LimitResponse {
|
||||||
message LimitedPriorityLevelConfiguration {
|
message LimitedPriorityLevelConfiguration {
|
||||||
// `assuredConcurrencyShares` (ACS) configures the execution
|
// `assuredConcurrencyShares` (ACS) configures the execution
|
||||||
// limit, which is a limit on the number of requests of this
|
// limit, which is a limit on the number of requests of this
|
||||||
// priority level that may be exeucting at a given time. ACS must
|
// priority level that may be executing at a given time. ACS must
|
||||||
// be a positive number. The server's concurrency limit (SCL) is
|
// be a positive number. The server's concurrency limit (SCL) is
|
||||||
// divided among the concurrency-controlled priority levels in
|
// divided among the concurrency-controlled priority levels in
|
||||||
// proportion to their assured concurrency shares. This produces
|
// proportion to their assured concurrency shares. This produces
|
||||||
|
|
|
@ -466,7 +466,7 @@ const (
|
||||||
type LimitedPriorityLevelConfiguration struct {
|
type LimitedPriorityLevelConfiguration struct {
|
||||||
// `assuredConcurrencyShares` (ACS) configures the execution
|
// `assuredConcurrencyShares` (ACS) configures the execution
|
||||||
// limit, which is a limit on the number of requests of this
|
// limit, which is a limit on the number of requests of this
|
||||||
// priority level that may be exeucting at a given time. ACS must
|
// priority level that may be executing at a given time. ACS must
|
||||||
// be a positive number. The server's concurrency limit (SCL) is
|
// be a positive number. The server's concurrency limit (SCL) is
|
||||||
// divided among the concurrency-controlled priority levels in
|
// divided among the concurrency-controlled priority levels in
|
||||||
// proportion to their assured concurrency shares. This produces
|
// proportion to their assured concurrency shares. This produces
|
||||||
|
|
|
@ -122,7 +122,7 @@ func (LimitResponse) SwaggerDoc() map[string]string {
|
||||||
|
|
||||||
var map_LimitedPriorityLevelConfiguration = map[string]string{
|
var map_LimitedPriorityLevelConfiguration = map[string]string{
|
||||||
"": "LimitedPriorityLevelConfiguration specifies how to handle requests that are subject to limits. It addresses two issues:\n - How are requests for this priority level limited?\n - What should be done with requests that exceed the limit?",
|
"": "LimitedPriorityLevelConfiguration specifies how to handle requests that are subject to limits. It addresses two issues:\n - How are requests for this priority level limited?\n - What should be done with requests that exceed the limit?",
|
||||||
"assuredConcurrencyShares": "`assuredConcurrencyShares` (ACS) configures the execution limit, which is a limit on the number of requests of this priority level that may be exeucting at a given time. ACS must be a positive number. The server's concurrency limit (SCL) is divided among the concurrency-controlled priority levels in proportion to their assured concurrency shares. This produces the assured concurrency value (ACV) ",
|
"assuredConcurrencyShares": "`assuredConcurrencyShares` (ACS) configures the execution limit, which is a limit on the number of requests of this priority level that may be executing at a given time. ACS must be a positive number. The server's concurrency limit (SCL) is divided among the concurrency-controlled priority levels in proportion to their assured concurrency shares. This produces the assured concurrency value (ACV) ",
|
||||||
"limitResponse": "`limitResponse` indicates what to do with requests that can not be executed right now",
|
"limitResponse": "`limitResponse` indicates what to do with requests that can not be executed right now",
|
||||||
"lendablePercent": "`lendablePercent` prescribes the fraction of the level's NominalCL that can be borrowed by other priority levels. The value of this field must be between 0 and 100, inclusive, and it defaults to 0. The number of seats that other levels can borrow from this level, known as this level's LendableConcurrencyLimit (LendableCL), is defined as follows.\n\nLendableCL(i) = round( NominalCL(i) * lendablePercent(i)/100.0 )",
|
"lendablePercent": "`lendablePercent` prescribes the fraction of the level's NominalCL that can be borrowed by other priority levels. The value of this field must be between 0 and 100, inclusive, and it defaults to 0. The number of seats that other levels can borrow from this level, known as this level's LendableConcurrencyLimit (LendableCL), is defined as follows.\n\nLendableCL(i) = round( NominalCL(i) * lendablePercent(i)/100.0 )",
|
||||||
"borrowingLimitPercent": "`borrowingLimitPercent`, if present, configures a limit on how many seats this priority level can borrow from other priority levels. The limit is known as this level's BorrowingConcurrencyLimit (BorrowingCL) and is a limit on the total number of seats that this level may borrow at any one time. This field holds the ratio of that limit to the level's nominal concurrency limit. When this field is non-nil, it must hold a non-negative integer and the limit is calculated as follows.\n\nBorrowingCL(i) = round( NominalCL(i) * borrowingLimitPercent(i)/100.0 )\n\nThe value of this field can be more than 100, implying that this priority level can borrow a number of seats that is greater than its own nominal concurrency limit (NominalCL). When this field is left `nil`, the limit is effectively infinite.",
|
"borrowingLimitPercent": "`borrowingLimitPercent`, if present, configures a limit on how many seats this priority level can borrow from other priority levels. The limit is known as this level's BorrowingConcurrencyLimit (BorrowingCL) and is a limit on the total number of seats that this level may borrow at any one time. This field holds the ratio of that limit to the level's nominal concurrency limit. When this field is non-nil, it must hold a non-negative integer and the limit is calculated as follows.\n\nBorrowingCL(i) = round( NominalCL(i) * borrowingLimitPercent(i)/100.0 )\n\nThe value of this field can be more than 100, implying that this priority level can borrow a number of seats that is greater than its own nominal concurrency limit (NominalCL). When this field is left `nil`, the limit is effectively infinite.",
|
||||||
|
|
|
@ -103,10 +103,25 @@ const (
|
||||||
AutoUpdateAnnotationKey = "apf.kubernetes.io/autoupdate-spec"
|
AutoUpdateAnnotationKey = "apf.kubernetes.io/autoupdate-spec"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// This annotation is only for use in v1beta3.
|
||||||
|
//
|
||||||
|
// The presence of this annotation in a v1beta3 object means that
|
||||||
|
// a zero value in the 'NominalConcurrencyShares' field means zero
|
||||||
|
// rather than the old default of 30.
|
||||||
|
//
|
||||||
|
// To set a zero value for the 'NominalConcurrencyShares' field in v1beta3,
|
||||||
|
// set the annotation to an empty string:
|
||||||
|
// "flowcontrol.k8s.io/v1beta3-preserve-zero-concurrency-shares": ""
|
||||||
|
//
|
||||||
|
PriorityLevelPreserveZeroConcurrencySharesKey = "flowcontrol.k8s.io/v1beta3-preserve-zero-concurrency-shares"
|
||||||
|
)
|
||||||
|
|
||||||
// +genclient
|
// +genclient
|
||||||
// +genclient:nonNamespaced
|
// +genclient:nonNamespaced
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
// +k8s:prerelease-lifecycle-gen:introduced=1.26
|
// +k8s:prerelease-lifecycle-gen:introduced=1.26
|
||||||
|
// +k8s:prerelease-lifecycle-gen:replacement=flowcontrol.apiserver.k8s.io,v1,FlowSchema
|
||||||
|
|
||||||
// FlowSchema defines the schema of a group of flows. Note that a flow is made up of a set of inbound API requests with
|
// FlowSchema defines the schema of a group of flows. Note that a flow is made up of a set of inbound API requests with
|
||||||
// similar attributes and is identified by a pair of strings: the name of the FlowSchema and a "flow distinguisher".
|
// similar attributes and is identified by a pair of strings: the name of the FlowSchema and a "flow distinguisher".
|
||||||
|
@ -128,6 +143,7 @@ type FlowSchema struct {
|
||||||
|
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
// +k8s:prerelease-lifecycle-gen:introduced=1.26
|
// +k8s:prerelease-lifecycle-gen:introduced=1.26
|
||||||
|
// +k8s:prerelease-lifecycle-gen:replacement=flowcontrol.apiserver.k8s.io,v1,FlowSchemaList
|
||||||
|
|
||||||
// FlowSchemaList is a list of FlowSchema objects.
|
// FlowSchemaList is a list of FlowSchema objects.
|
||||||
type FlowSchemaList struct {
|
type FlowSchemaList struct {
|
||||||
|
@ -384,6 +400,7 @@ type FlowSchemaConditionType string
|
||||||
// +genclient:nonNamespaced
|
// +genclient:nonNamespaced
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
// +k8s:prerelease-lifecycle-gen:introduced=1.26
|
// +k8s:prerelease-lifecycle-gen:introduced=1.26
|
||||||
|
// +k8s:prerelease-lifecycle-gen:replacement=flowcontrol.apiserver.k8s.io,v1,PriorityLevelConfiguration
|
||||||
|
|
||||||
// PriorityLevelConfiguration represents the configuration of a priority level.
|
// PriorityLevelConfiguration represents the configuration of a priority level.
|
||||||
type PriorityLevelConfiguration struct {
|
type PriorityLevelConfiguration struct {
|
||||||
|
@ -404,6 +421,7 @@ type PriorityLevelConfiguration struct {
|
||||||
|
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
// +k8s:prerelease-lifecycle-gen:introduced=1.26
|
// +k8s:prerelease-lifecycle-gen:introduced=1.26
|
||||||
|
// +k8s:prerelease-lifecycle-gen:replacement=flowcontrol.apiserver.k8s.io,v1,PriorityLevelConfigurationList
|
||||||
|
|
||||||
// PriorityLevelConfigurationList is a list of PriorityLevelConfiguration objects.
|
// PriorityLevelConfigurationList is a list of PriorityLevelConfiguration objects.
|
||||||
type PriorityLevelConfigurationList struct {
|
type PriorityLevelConfigurationList struct {
|
||||||
|
|
|
@ -21,6 +21,10 @@ limitations under the License.
|
||||||
|
|
||||||
package v1beta3
|
package v1beta3
|
||||||
|
|
||||||
|
import (
|
||||||
|
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
)
|
||||||
|
|
||||||
// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison.
|
// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison.
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go.
|
// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go.
|
||||||
func (in *FlowSchema) APILifecycleIntroduced() (major, minor int) {
|
func (in *FlowSchema) APILifecycleIntroduced() (major, minor int) {
|
||||||
|
@ -33,6 +37,12 @@ func (in *FlowSchema) APILifecycleDeprecated() (major, minor int) {
|
||||||
return 1, 29
|
return 1, 29
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type.
|
||||||
|
// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=<group>,<version>,<kind>" tags in types.go.
|
||||||
|
func (in *FlowSchema) APILifecycleReplacement() schema.GroupVersionKind {
|
||||||
|
return schema.GroupVersionKind{Group: "flowcontrol.apiserver.k8s.io", Version: "v1", Kind: "FlowSchema"}
|
||||||
|
}
|
||||||
|
|
||||||
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
||||||
func (in *FlowSchema) APILifecycleRemoved() (major, minor int) {
|
func (in *FlowSchema) APILifecycleRemoved() (major, minor int) {
|
||||||
|
@ -51,6 +61,12 @@ func (in *FlowSchemaList) APILifecycleDeprecated() (major, minor int) {
|
||||||
return 1, 29
|
return 1, 29
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type.
|
||||||
|
// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=<group>,<version>,<kind>" tags in types.go.
|
||||||
|
func (in *FlowSchemaList) APILifecycleReplacement() schema.GroupVersionKind {
|
||||||
|
return schema.GroupVersionKind{Group: "flowcontrol.apiserver.k8s.io", Version: "v1", Kind: "FlowSchemaList"}
|
||||||
|
}
|
||||||
|
|
||||||
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
||||||
func (in *FlowSchemaList) APILifecycleRemoved() (major, minor int) {
|
func (in *FlowSchemaList) APILifecycleRemoved() (major, minor int) {
|
||||||
|
@ -69,6 +85,12 @@ func (in *PriorityLevelConfiguration) APILifecycleDeprecated() (major, minor int
|
||||||
return 1, 29
|
return 1, 29
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type.
|
||||||
|
// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=<group>,<version>,<kind>" tags in types.go.
|
||||||
|
func (in *PriorityLevelConfiguration) APILifecycleReplacement() schema.GroupVersionKind {
|
||||||
|
return schema.GroupVersionKind{Group: "flowcontrol.apiserver.k8s.io", Version: "v1", Kind: "PriorityLevelConfiguration"}
|
||||||
|
}
|
||||||
|
|
||||||
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
||||||
func (in *PriorityLevelConfiguration) APILifecycleRemoved() (major, minor int) {
|
func (in *PriorityLevelConfiguration) APILifecycleRemoved() (major, minor int) {
|
||||||
|
@ -87,6 +109,12 @@ func (in *PriorityLevelConfigurationList) APILifecycleDeprecated() (major, minor
|
||||||
return 1, 29
|
return 1, 29
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type.
|
||||||
|
// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=<group>,<version>,<kind>" tags in types.go.
|
||||||
|
func (in *PriorityLevelConfigurationList) APILifecycleReplacement() schema.GroupVersionKind {
|
||||||
|
return schema.GroupVersionKind{Group: "flowcontrol.apiserver.k8s.io", Version: "v1", Kind: "PriorityLevelConfigurationList"}
|
||||||
|
}
|
||||||
|
|
||||||
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
||||||
func (in *PriorityLevelConfigurationList) APILifecycleRemoved() (major, minor int) {
|
func (in *PriorityLevelConfigurationList) APILifecycleRemoved() (major, minor int) {
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -21,7 +21,6 @@ syntax = "proto2";
|
||||||
|
|
||||||
package k8s.io.api.networking.v1alpha1;
|
package k8s.io.api.networking.v1alpha1;
|
||||||
|
|
||||||
import "k8s.io/api/core/v1/generated.proto";
|
|
||||||
import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto";
|
import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto";
|
||||||
import "k8s.io/apimachinery/pkg/runtime/generated.proto";
|
import "k8s.io/apimachinery/pkg/runtime/generated.proto";
|
||||||
import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto";
|
import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto";
|
||||||
|
@ -29,69 +28,6 @@ import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto";
|
||||||
// Package-wide variables from generator "generated".
|
// Package-wide variables from generator "generated".
|
||||||
option go_package = "k8s.io/api/networking/v1alpha1";
|
option go_package = "k8s.io/api/networking/v1alpha1";
|
||||||
|
|
||||||
// ClusterCIDR represents a single configuration for per-Node Pod CIDR
|
|
||||||
// allocations when the MultiCIDRRangeAllocator is enabled (see the config for
|
|
||||||
// kube-controller-manager). A cluster may have any number of ClusterCIDR
|
|
||||||
// resources, all of which will be considered when allocating a CIDR for a
|
|
||||||
// Node. A ClusterCIDR is eligible to be used for a given Node when the node
|
|
||||||
// selector matches the node in question and has free CIDRs to allocate. In
|
|
||||||
// case of multiple matching ClusterCIDR resources, the allocator will attempt
|
|
||||||
// to break ties using internal heuristics, but any ClusterCIDR whose node
|
|
||||||
// selector matches the Node may be used.
|
|
||||||
message ClusterCIDR {
|
|
||||||
// Standard object's metadata.
|
|
||||||
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
|
||||||
// +optional
|
|
||||||
optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
|
|
||||||
|
|
||||||
// spec is the desired state of the ClusterCIDR.
|
|
||||||
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
|
|
||||||
// +optional
|
|
||||||
optional ClusterCIDRSpec spec = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClusterCIDRList contains a list of ClusterCIDR.
|
|
||||||
message ClusterCIDRList {
|
|
||||||
// Standard object's metadata.
|
|
||||||
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
|
||||||
// +optional
|
|
||||||
optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
|
|
||||||
|
|
||||||
// items is the list of ClusterCIDRs.
|
|
||||||
repeated ClusterCIDR items = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClusterCIDRSpec defines the desired state of ClusterCIDR.
|
|
||||||
message ClusterCIDRSpec {
|
|
||||||
// nodeSelector defines which nodes the config is applicable to.
|
|
||||||
// An empty or nil nodeSelector selects all nodes.
|
|
||||||
// This field is immutable.
|
|
||||||
// +optional
|
|
||||||
optional k8s.io.api.core.v1.NodeSelector nodeSelector = 1;
|
|
||||||
|
|
||||||
// perNodeHostBits defines the number of host bits to be configured per node.
|
|
||||||
// A subnet mask determines how much of the address is used for network bits
|
|
||||||
// and host bits. For example an IPv4 address of 192.168.0.0/24, splits the
|
|
||||||
// address into 24 bits for the network portion and 8 bits for the host portion.
|
|
||||||
// To allocate 256 IPs, set this field to 8 (a /24 mask for IPv4 or a /120 for IPv6).
|
|
||||||
// Minimum value is 4 (16 IPs).
|
|
||||||
// This field is immutable.
|
|
||||||
// +required
|
|
||||||
optional int32 perNodeHostBits = 2;
|
|
||||||
|
|
||||||
// ipv4 defines an IPv4 IP block in CIDR notation(e.g. "10.0.0.0/8").
|
|
||||||
// At least one of ipv4 and ipv6 must be specified.
|
|
||||||
// This field is immutable.
|
|
||||||
// +optional
|
|
||||||
optional string ipv4 = 3;
|
|
||||||
|
|
||||||
// ipv6 defines an IPv6 IP block in CIDR notation(e.g. "2001:db8::/64").
|
|
||||||
// At least one of ipv4 and ipv6 must be specified.
|
|
||||||
// This field is immutable.
|
|
||||||
// +optional
|
|
||||||
optional string ipv6 = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
// IPAddress represents a single IP of a single IP Family. The object is designed to be used by APIs
|
// IPAddress represents a single IP of a single IP Family. The object is designed to be used by APIs
|
||||||
// that operate on IP addresses. The object is used by the Service core API for allocation of IP addresses.
|
// that operate on IP addresses. The object is used by the Service core API for allocation of IP addresses.
|
||||||
// An IP address can be represented in different formats, to guarantee the uniqueness of the IP,
|
// An IP address can be represented in different formats, to guarantee the uniqueness of the IP,
|
||||||
|
@ -147,9 +83,56 @@ message ParentReference {
|
||||||
// Name is the name of the object being referenced.
|
// Name is the name of the object being referenced.
|
||||||
// +required
|
// +required
|
||||||
optional string name = 4;
|
optional string name = 4;
|
||||||
|
}
|
||||||
// UID is the uid of the object being referenced.
|
|
||||||
// +optional
|
// ServiceCIDR defines a range of IP addresses using CIDR format (e.g. 192.168.0.0/24 or 2001:db2::/64).
|
||||||
optional string uid = 5;
|
// This range is used to allocate ClusterIPs to Service objects.
|
||||||
|
message ServiceCIDR {
|
||||||
|
// Standard object's metadata.
|
||||||
|
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
||||||
|
// +optional
|
||||||
|
optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
|
||||||
|
|
||||||
|
// spec is the desired state of the ServiceCIDR.
|
||||||
|
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
|
||||||
|
// +optional
|
||||||
|
optional ServiceCIDRSpec spec = 2;
|
||||||
|
|
||||||
|
// status represents the current state of the ServiceCIDR.
|
||||||
|
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
|
||||||
|
// +optional
|
||||||
|
optional ServiceCIDRStatus status = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServiceCIDRList contains a list of ServiceCIDR objects.
|
||||||
|
message ServiceCIDRList {
|
||||||
|
// Standard object's metadata.
|
||||||
|
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
||||||
|
// +optional
|
||||||
|
optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
|
||||||
|
|
||||||
|
// items is the list of ServiceCIDRs.
|
||||||
|
repeated ServiceCIDR items = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServiceCIDRSpec define the CIDRs the user wants to use for allocating ClusterIPs for Services.
|
||||||
|
message ServiceCIDRSpec {
|
||||||
|
// CIDRs defines the IP blocks in CIDR notation (e.g. "192.168.0.0/24" or "2001:db8::/64")
|
||||||
|
// from which to assign service cluster IPs. Max of two CIDRs is allowed, one of each IP family.
|
||||||
|
// This field is immutable.
|
||||||
|
// +optional
|
||||||
|
repeated string cidrs = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServiceCIDRStatus describes the current state of the ServiceCIDR.
|
||||||
|
message ServiceCIDRStatus {
|
||||||
|
// conditions holds an array of metav1.Condition that describe the state of the ServiceCIDR.
|
||||||
|
// Current service state
|
||||||
|
// +optional
|
||||||
|
// +patchMergeKey=type
|
||||||
|
// +patchStrategy=merge
|
||||||
|
// +listType=map
|
||||||
|
// +listMapKey=type
|
||||||
|
repeated k8s.io.apimachinery.pkg.apis.meta.v1.Condition conditions = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,10 +52,10 @@ var (
|
||||||
// Adds the list of known types to the given scheme.
|
// Adds the list of known types to the given scheme.
|
||||||
func addKnownTypes(scheme *runtime.Scheme) error {
|
func addKnownTypes(scheme *runtime.Scheme) error {
|
||||||
scheme.AddKnownTypes(SchemeGroupVersion,
|
scheme.AddKnownTypes(SchemeGroupVersion,
|
||||||
&ClusterCIDR{},
|
|
||||||
&ClusterCIDRList{},
|
|
||||||
&IPAddress{},
|
&IPAddress{},
|
||||||
&IPAddressList{},
|
&IPAddressList{},
|
||||||
|
&ServiceCIDR{},
|
||||||
|
&ServiceCIDRList{},
|
||||||
)
|
)
|
||||||
metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
|
metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -17,86 +17,9 @@ limitations under the License.
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
v1 "k8s.io/api/core/v1"
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// +genclient
|
|
||||||
// +genclient:nonNamespaced
|
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
|
||||||
// +k8s:prerelease-lifecycle-gen:introduced=1.25
|
|
||||||
|
|
||||||
// ClusterCIDR represents a single configuration for per-Node Pod CIDR
|
|
||||||
// allocations when the MultiCIDRRangeAllocator is enabled (see the config for
|
|
||||||
// kube-controller-manager). A cluster may have any number of ClusterCIDR
|
|
||||||
// resources, all of which will be considered when allocating a CIDR for a
|
|
||||||
// Node. A ClusterCIDR is eligible to be used for a given Node when the node
|
|
||||||
// selector matches the node in question and has free CIDRs to allocate. In
|
|
||||||
// case of multiple matching ClusterCIDR resources, the allocator will attempt
|
|
||||||
// to break ties using internal heuristics, but any ClusterCIDR whose node
|
|
||||||
// selector matches the Node may be used.
|
|
||||||
type ClusterCIDR struct {
|
|
||||||
metav1.TypeMeta `json:",inline"`
|
|
||||||
|
|
||||||
// Standard object's metadata.
|
|
||||||
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
|
||||||
// +optional
|
|
||||||
metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
|
|
||||||
|
|
||||||
// spec is the desired state of the ClusterCIDR.
|
|
||||||
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
|
|
||||||
// +optional
|
|
||||||
Spec ClusterCIDRSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClusterCIDRSpec defines the desired state of ClusterCIDR.
|
|
||||||
type ClusterCIDRSpec struct {
|
|
||||||
// nodeSelector defines which nodes the config is applicable to.
|
|
||||||
// An empty or nil nodeSelector selects all nodes.
|
|
||||||
// This field is immutable.
|
|
||||||
// +optional
|
|
||||||
NodeSelector *v1.NodeSelector `json:"nodeSelector,omitempty" protobuf:"bytes,1,opt,name=nodeSelector"`
|
|
||||||
|
|
||||||
// perNodeHostBits defines the number of host bits to be configured per node.
|
|
||||||
// A subnet mask determines how much of the address is used for network bits
|
|
||||||
// and host bits. For example an IPv4 address of 192.168.0.0/24, splits the
|
|
||||||
// address into 24 bits for the network portion and 8 bits for the host portion.
|
|
||||||
// To allocate 256 IPs, set this field to 8 (a /24 mask for IPv4 or a /120 for IPv6).
|
|
||||||
// Minimum value is 4 (16 IPs).
|
|
||||||
// This field is immutable.
|
|
||||||
// +required
|
|
||||||
PerNodeHostBits int32 `json:"perNodeHostBits" protobuf:"varint,2,opt,name=perNodeHostBits"`
|
|
||||||
|
|
||||||
// ipv4 defines an IPv4 IP block in CIDR notation(e.g. "10.0.0.0/8").
|
|
||||||
// At least one of ipv4 and ipv6 must be specified.
|
|
||||||
// This field is immutable.
|
|
||||||
// +optional
|
|
||||||
IPv4 string `json:"ipv4" protobuf:"bytes,3,opt,name=ipv4"`
|
|
||||||
|
|
||||||
// ipv6 defines an IPv6 IP block in CIDR notation(e.g. "2001:db8::/64").
|
|
||||||
// At least one of ipv4 and ipv6 must be specified.
|
|
||||||
// This field is immutable.
|
|
||||||
// +optional
|
|
||||||
IPv6 string `json:"ipv6" protobuf:"bytes,4,opt,name=ipv6"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
|
||||||
// +k8s:prerelease-lifecycle-gen:introduced=1.25
|
|
||||||
|
|
||||||
// ClusterCIDRList contains a list of ClusterCIDR.
|
|
||||||
type ClusterCIDRList struct {
|
|
||||||
metav1.TypeMeta `json:",inline"`
|
|
||||||
|
|
||||||
// Standard object's metadata.
|
|
||||||
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
|
||||||
// +optional
|
|
||||||
metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
|
|
||||||
|
|
||||||
// items is the list of ClusterCIDRs.
|
|
||||||
Items []ClusterCIDR `json:"items" protobuf:"bytes,2,rep,name=items"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// +genclient
|
// +genclient
|
||||||
// +genclient:nonNamespaced
|
// +genclient:nonNamespaced
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
|
@ -143,9 +66,6 @@ type ParentReference struct {
|
||||||
// Name is the name of the object being referenced.
|
// Name is the name of the object being referenced.
|
||||||
// +required
|
// +required
|
||||||
Name string `json:"name,omitempty" protobuf:"bytes,4,opt,name=name"`
|
Name string `json:"name,omitempty" protobuf:"bytes,4,opt,name=name"`
|
||||||
// UID is the uid of the object being referenced.
|
|
||||||
// +optional
|
|
||||||
UID types.UID `json:"uid,omitempty" protobuf:"bytes,5,opt,name=uid,casttype=k8s.io/apimachinery/pkg/types.UID"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
|
@ -161,3 +81,70 @@ type IPAddressList struct {
|
||||||
// items is the list of IPAddresses.
|
// items is the list of IPAddresses.
|
||||||
Items []IPAddress `json:"items" protobuf:"bytes,2,rep,name=items"`
|
Items []IPAddress `json:"items" protobuf:"bytes,2,rep,name=items"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// +genclient
|
||||||
|
// +genclient:nonNamespaced
|
||||||
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
|
// +k8s:prerelease-lifecycle-gen:introduced=1.27
|
||||||
|
|
||||||
|
// ServiceCIDR defines a range of IP addresses using CIDR format (e.g. 192.168.0.0/24 or 2001:db2::/64).
|
||||||
|
// This range is used to allocate ClusterIPs to Service objects.
|
||||||
|
type ServiceCIDR struct {
|
||||||
|
metav1.TypeMeta `json:",inline"`
|
||||||
|
// Standard object's metadata.
|
||||||
|
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
||||||
|
// +optional
|
||||||
|
metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
|
||||||
|
// spec is the desired state of the ServiceCIDR.
|
||||||
|
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
|
||||||
|
// +optional
|
||||||
|
Spec ServiceCIDRSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`
|
||||||
|
// status represents the current state of the ServiceCIDR.
|
||||||
|
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
|
||||||
|
// +optional
|
||||||
|
Status ServiceCIDRStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServiceCIDRSpec define the CIDRs the user wants to use for allocating ClusterIPs for Services.
|
||||||
|
type ServiceCIDRSpec struct {
|
||||||
|
// CIDRs defines the IP blocks in CIDR notation (e.g. "192.168.0.0/24" or "2001:db8::/64")
|
||||||
|
// from which to assign service cluster IPs. Max of two CIDRs is allowed, one of each IP family.
|
||||||
|
// This field is immutable.
|
||||||
|
// +optional
|
||||||
|
CIDRs []string `json:"cidrs,omitempty" protobuf:"bytes,1,opt,name=cidrs"`
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
// ServiceCIDRConditionReady represents status of a ServiceCIDR that is ready to be used by the
|
||||||
|
// apiserver to allocate ClusterIPs for Services.
|
||||||
|
ServiceCIDRConditionReady = "Ready"
|
||||||
|
// ServiceCIDRReasonTerminating represents a reason where a ServiceCIDR is not ready because it is
|
||||||
|
// being deleted.
|
||||||
|
ServiceCIDRReasonTerminating = "Terminating"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ServiceCIDRStatus describes the current state of the ServiceCIDR.
|
||||||
|
type ServiceCIDRStatus struct {
|
||||||
|
// conditions holds an array of metav1.Condition that describe the state of the ServiceCIDR.
|
||||||
|
// Current service state
|
||||||
|
// +optional
|
||||||
|
// +patchMergeKey=type
|
||||||
|
// +patchStrategy=merge
|
||||||
|
// +listType=map
|
||||||
|
// +listMapKey=type
|
||||||
|
Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
|
// +k8s:prerelease-lifecycle-gen:introduced=1.27
|
||||||
|
|
||||||
|
// ServiceCIDRList contains a list of ServiceCIDR objects.
|
||||||
|
type ServiceCIDRList struct {
|
||||||
|
metav1.TypeMeta `json:",inline"`
|
||||||
|
// Standard object's metadata.
|
||||||
|
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
||||||
|
// +optional
|
||||||
|
metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
|
||||||
|
// items is the list of ServiceCIDRs.
|
||||||
|
Items []ServiceCIDR `json:"items" protobuf:"bytes,2,rep,name=items"`
|
||||||
|
}
|
||||||
|
|
|
@ -27,38 +27,6 @@ package v1alpha1
|
||||||
// Those methods can be generated by using hack/update-codegen.sh
|
// Those methods can be generated by using hack/update-codegen.sh
|
||||||
|
|
||||||
// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT.
|
// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT.
|
||||||
var map_ClusterCIDR = map[string]string{
|
|
||||||
"": "ClusterCIDR represents a single configuration for per-Node Pod CIDR allocations when the MultiCIDRRangeAllocator is enabled (see the config for kube-controller-manager). A cluster may have any number of ClusterCIDR resources, all of which will be considered when allocating a CIDR for a Node. A ClusterCIDR is eligible to be used for a given Node when the node selector matches the node in question and has free CIDRs to allocate. In case of multiple matching ClusterCIDR resources, the allocator will attempt to break ties using internal heuristics, but any ClusterCIDR whose node selector matches the Node may be used.",
|
|
||||||
"metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata",
|
|
||||||
"spec": "spec is the desired state of the ClusterCIDR. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status",
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ClusterCIDR) SwaggerDoc() map[string]string {
|
|
||||||
return map_ClusterCIDR
|
|
||||||
}
|
|
||||||
|
|
||||||
var map_ClusterCIDRList = map[string]string{
|
|
||||||
"": "ClusterCIDRList contains a list of ClusterCIDR.",
|
|
||||||
"metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata",
|
|
||||||
"items": "items is the list of ClusterCIDRs.",
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ClusterCIDRList) SwaggerDoc() map[string]string {
|
|
||||||
return map_ClusterCIDRList
|
|
||||||
}
|
|
||||||
|
|
||||||
var map_ClusterCIDRSpec = map[string]string{
|
|
||||||
"": "ClusterCIDRSpec defines the desired state of ClusterCIDR.",
|
|
||||||
"nodeSelector": "nodeSelector defines which nodes the config is applicable to. An empty or nil nodeSelector selects all nodes. This field is immutable.",
|
|
||||||
"perNodeHostBits": "perNodeHostBits defines the number of host bits to be configured per node. A subnet mask determines how much of the address is used for network bits and host bits. For example an IPv4 address of 192.168.0.0/24, splits the address into 24 bits for the network portion and 8 bits for the host portion. To allocate 256 IPs, set this field to 8 (a /24 mask for IPv4 or a /120 for IPv6). Minimum value is 4 (16 IPs). This field is immutable.",
|
|
||||||
"ipv4": "ipv4 defines an IPv4 IP block in CIDR notation(e.g. \"10.0.0.0/8\"). At least one of ipv4 and ipv6 must be specified. This field is immutable.",
|
|
||||||
"ipv6": "ipv6 defines an IPv6 IP block in CIDR notation(e.g. \"2001:db8::/64\"). At least one of ipv4 and ipv6 must be specified. This field is immutable.",
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ClusterCIDRSpec) SwaggerDoc() map[string]string {
|
|
||||||
return map_ClusterCIDRSpec
|
|
||||||
}
|
|
||||||
|
|
||||||
var map_IPAddress = map[string]string{
|
var map_IPAddress = map[string]string{
|
||||||
"": "IPAddress represents a single IP of a single IP Family. The object is designed to be used by APIs that operate on IP addresses. The object is used by the Service core API for allocation of IP addresses. An IP address can be represented in different formats, to guarantee the uniqueness of the IP, the name of the object is the IP address in canonical format, four decimal digits separated by dots suppressing leading zeros for IPv4 and the representation defined by RFC 5952 for IPv6. Valid: 192.168.1.5 or 2001:db8::1 or 2001:db8:aaaa:bbbb:cccc:dddd:eeee:1 Invalid: 10.01.2.3 or 2001:db8:0:0:0::1",
|
"": "IPAddress represents a single IP of a single IP Family. The object is designed to be used by APIs that operate on IP addresses. The object is used by the Service core API for allocation of IP addresses. An IP address can be represented in different formats, to guarantee the uniqueness of the IP, the name of the object is the IP address in canonical format, four decimal digits separated by dots suppressing leading zeros for IPv4 and the representation defined by RFC 5952 for IPv6. Valid: 192.168.1.5 or 2001:db8::1 or 2001:db8:aaaa:bbbb:cccc:dddd:eeee:1 Invalid: 10.01.2.3 or 2001:db8:0:0:0::1",
|
||||||
"metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata",
|
"metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata",
|
||||||
|
@ -94,11 +62,49 @@ var map_ParentReference = map[string]string{
|
||||||
"resource": "Resource is the resource of the object being referenced.",
|
"resource": "Resource is the resource of the object being referenced.",
|
||||||
"namespace": "Namespace is the namespace of the object being referenced.",
|
"namespace": "Namespace is the namespace of the object being referenced.",
|
||||||
"name": "Name is the name of the object being referenced.",
|
"name": "Name is the name of the object being referenced.",
|
||||||
"uid": "UID is the uid of the object being referenced.",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ParentReference) SwaggerDoc() map[string]string {
|
func (ParentReference) SwaggerDoc() map[string]string {
|
||||||
return map_ParentReference
|
return map_ParentReference
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var map_ServiceCIDR = map[string]string{
|
||||||
|
"": "ServiceCIDR defines a range of IP addresses using CIDR format (e.g. 192.168.0.0/24 or 2001:db2::/64). This range is used to allocate ClusterIPs to Service objects.",
|
||||||
|
"metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata",
|
||||||
|
"spec": "spec is the desired state of the ServiceCIDR. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status",
|
||||||
|
"status": "status represents the current state of the ServiceCIDR. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ServiceCIDR) SwaggerDoc() map[string]string {
|
||||||
|
return map_ServiceCIDR
|
||||||
|
}
|
||||||
|
|
||||||
|
var map_ServiceCIDRList = map[string]string{
|
||||||
|
"": "ServiceCIDRList contains a list of ServiceCIDR objects.",
|
||||||
|
"metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata",
|
||||||
|
"items": "items is the list of ServiceCIDRs.",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ServiceCIDRList) SwaggerDoc() map[string]string {
|
||||||
|
return map_ServiceCIDRList
|
||||||
|
}
|
||||||
|
|
||||||
|
var map_ServiceCIDRSpec = map[string]string{
|
||||||
|
"": "ServiceCIDRSpec define the CIDRs the user wants to use for allocating ClusterIPs for Services.",
|
||||||
|
"cidrs": "CIDRs defines the IP blocks in CIDR notation (e.g. \"192.168.0.0/24\" or \"2001:db8::/64\") from which to assign service cluster IPs. Max of two CIDRs is allowed, one of each IP family. This field is immutable.",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ServiceCIDRSpec) SwaggerDoc() map[string]string {
|
||||||
|
return map_ServiceCIDRSpec
|
||||||
|
}
|
||||||
|
|
||||||
|
var map_ServiceCIDRStatus = map[string]string{
|
||||||
|
"": "ServiceCIDRStatus describes the current state of the ServiceCIDR.",
|
||||||
|
"conditions": "conditions holds an array of metav1.Condition that describe the state of the ServiceCIDR. Current service state",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ServiceCIDRStatus) SwaggerDoc() map[string]string {
|
||||||
|
return map_ServiceCIDRStatus
|
||||||
|
}
|
||||||
|
|
||||||
// AUTO-GENERATED FUNCTIONS END HERE
|
// AUTO-GENERATED FUNCTIONS END HERE
|
||||||
|
|
|
@ -22,91 +22,10 @@ limitations under the License.
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *ClusterCIDR) DeepCopyInto(out *ClusterCIDR) {
|
|
||||||
*out = *in
|
|
||||||
out.TypeMeta = in.TypeMeta
|
|
||||||
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
|
|
||||||
in.Spec.DeepCopyInto(&out.Spec)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterCIDR.
|
|
||||||
func (in *ClusterCIDR) DeepCopy() *ClusterCIDR {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(ClusterCIDR)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
|
||||||
func (in *ClusterCIDR) DeepCopyObject() runtime.Object {
|
|
||||||
if c := in.DeepCopy(); c != nil {
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *ClusterCIDRList) DeepCopyInto(out *ClusterCIDRList) {
|
|
||||||
*out = *in
|
|
||||||
out.TypeMeta = in.TypeMeta
|
|
||||||
in.ListMeta.DeepCopyInto(&out.ListMeta)
|
|
||||||
if in.Items != nil {
|
|
||||||
in, out := &in.Items, &out.Items
|
|
||||||
*out = make([]ClusterCIDR, len(*in))
|
|
||||||
for i := range *in {
|
|
||||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterCIDRList.
|
|
||||||
func (in *ClusterCIDRList) DeepCopy() *ClusterCIDRList {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(ClusterCIDRList)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
|
||||||
func (in *ClusterCIDRList) DeepCopyObject() runtime.Object {
|
|
||||||
if c := in.DeepCopy(); c != nil {
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *ClusterCIDRSpec) DeepCopyInto(out *ClusterCIDRSpec) {
|
|
||||||
*out = *in
|
|
||||||
if in.NodeSelector != nil {
|
|
||||||
in, out := &in.NodeSelector, &out.NodeSelector
|
|
||||||
*out = new(v1.NodeSelector)
|
|
||||||
(*in).DeepCopyInto(*out)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterCIDRSpec.
|
|
||||||
func (in *ClusterCIDRSpec) DeepCopy() *ClusterCIDRSpec {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(ClusterCIDRSpec)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *IPAddress) DeepCopyInto(out *IPAddress) {
|
func (in *IPAddress) DeepCopyInto(out *IPAddress) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
@ -203,3 +122,108 @@ func (in *ParentReference) DeepCopy() *ParentReference {
|
||||||
in.DeepCopyInto(out)
|
in.DeepCopyInto(out)
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *ServiceCIDR) DeepCopyInto(out *ServiceCIDR) {
|
||||||
|
*out = *in
|
||||||
|
out.TypeMeta = in.TypeMeta
|
||||||
|
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
|
||||||
|
in.Spec.DeepCopyInto(&out.Spec)
|
||||||
|
in.Status.DeepCopyInto(&out.Status)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceCIDR.
|
||||||
|
func (in *ServiceCIDR) DeepCopy() *ServiceCIDR {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(ServiceCIDR)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||||
|
func (in *ServiceCIDR) DeepCopyObject() runtime.Object {
|
||||||
|
if c := in.DeepCopy(); c != nil {
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *ServiceCIDRList) DeepCopyInto(out *ServiceCIDRList) {
|
||||||
|
*out = *in
|
||||||
|
out.TypeMeta = in.TypeMeta
|
||||||
|
in.ListMeta.DeepCopyInto(&out.ListMeta)
|
||||||
|
if in.Items != nil {
|
||||||
|
in, out := &in.Items, &out.Items
|
||||||
|
*out = make([]ServiceCIDR, len(*in))
|
||||||
|
for i := range *in {
|
||||||
|
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceCIDRList.
|
||||||
|
func (in *ServiceCIDRList) DeepCopy() *ServiceCIDRList {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(ServiceCIDRList)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||||
|
func (in *ServiceCIDRList) DeepCopyObject() runtime.Object {
|
||||||
|
if c := in.DeepCopy(); c != nil {
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *ServiceCIDRSpec) DeepCopyInto(out *ServiceCIDRSpec) {
|
||||||
|
*out = *in
|
||||||
|
if in.CIDRs != nil {
|
||||||
|
in, out := &in.CIDRs, &out.CIDRs
|
||||||
|
*out = make([]string, len(*in))
|
||||||
|
copy(*out, *in)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceCIDRSpec.
|
||||||
|
func (in *ServiceCIDRSpec) DeepCopy() *ServiceCIDRSpec {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(ServiceCIDRSpec)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *ServiceCIDRStatus) DeepCopyInto(out *ServiceCIDRStatus) {
|
||||||
|
*out = *in
|
||||||
|
if in.Conditions != nil {
|
||||||
|
in, out := &in.Conditions, &out.Conditions
|
||||||
|
*out = make([]v1.Condition, len(*in))
|
||||||
|
for i := range *in {
|
||||||
|
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceCIDRStatus.
|
||||||
|
func (in *ServiceCIDRStatus) DeepCopy() *ServiceCIDRStatus {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(ServiceCIDRStatus)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
|
@ -21,42 +21,6 @@ limitations under the License.
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
|
|
||||||
// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go.
|
|
||||||
func (in *ClusterCIDR) APILifecycleIntroduced() (major, minor int) {
|
|
||||||
return 1, 25
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor.
|
|
||||||
func (in *ClusterCIDR) APILifecycleDeprecated() (major, minor int) {
|
|
||||||
return 1, 28
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
|
||||||
func (in *ClusterCIDR) APILifecycleRemoved() (major, minor int) {
|
|
||||||
return 1, 31
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go.
|
|
||||||
func (in *ClusterCIDRList) APILifecycleIntroduced() (major, minor int) {
|
|
||||||
return 1, 25
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor.
|
|
||||||
func (in *ClusterCIDRList) APILifecycleDeprecated() (major, minor int) {
|
|
||||||
return 1, 28
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
|
||||||
func (in *ClusterCIDRList) APILifecycleRemoved() (major, minor int) {
|
|
||||||
return 1, 31
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison.
|
// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison.
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go.
|
// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go.
|
||||||
func (in *IPAddress) APILifecycleIntroduced() (major, minor int) {
|
func (in *IPAddress) APILifecycleIntroduced() (major, minor int) {
|
||||||
|
@ -92,3 +56,39 @@ func (in *IPAddressList) APILifecycleDeprecated() (major, minor int) {
|
||||||
func (in *IPAddressList) APILifecycleRemoved() (major, minor int) {
|
func (in *IPAddressList) APILifecycleRemoved() (major, minor int) {
|
||||||
return 1, 33
|
return 1, 33
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison.
|
||||||
|
// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go.
|
||||||
|
func (in *ServiceCIDR) APILifecycleIntroduced() (major, minor int) {
|
||||||
|
return 1, 27
|
||||||
|
}
|
||||||
|
|
||||||
|
// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison.
|
||||||
|
// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor.
|
||||||
|
func (in *ServiceCIDR) APILifecycleDeprecated() (major, minor int) {
|
||||||
|
return 1, 30
|
||||||
|
}
|
||||||
|
|
||||||
|
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
||||||
|
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
||||||
|
func (in *ServiceCIDR) APILifecycleRemoved() (major, minor int) {
|
||||||
|
return 1, 33
|
||||||
|
}
|
||||||
|
|
||||||
|
// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison.
|
||||||
|
// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go.
|
||||||
|
func (in *ServiceCIDRList) APILifecycleIntroduced() (major, minor int) {
|
||||||
|
return 1, 27
|
||||||
|
}
|
||||||
|
|
||||||
|
// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison.
|
||||||
|
// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor.
|
||||||
|
func (in *ServiceCIDRList) APILifecycleDeprecated() (major, minor int) {
|
||||||
|
return 1, 30
|
||||||
|
}
|
||||||
|
|
||||||
|
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
||||||
|
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
||||||
|
func (in *ServiceCIDRList) APILifecycleRemoved() (major, minor int) {
|
||||||
|
return 1, 33
|
||||||
|
}
|
||||||
|
|
|
@ -19,6 +19,6 @@ limitations under the License.
|
||||||
// +k8s:openapi-gen=true
|
// +k8s:openapi-gen=true
|
||||||
|
|
||||||
// Package policy is for any kind of policy object. Suitable examples, even if
|
// Package policy is for any kind of policy object. Suitable examples, even if
|
||||||
// they aren't all here, are PodDisruptionBudget, PodSecurityPolicy,
|
// they aren't all here, are PodDisruptionBudget,
|
||||||
// NetworkPolicy, etc.
|
// NetworkPolicy, etc.
|
||||||
package v1 // import "k8s.io/api/policy/v1"
|
package v1 // import "k8s.io/api/policy/v1"
|
||||||
|
|
|
@ -20,6 +20,6 @@ limitations under the License.
|
||||||
// +k8s:prerelease-lifecycle-gen=true
|
// +k8s:prerelease-lifecycle-gen=true
|
||||||
|
|
||||||
// Package policy is for any kind of policy object. Suitable examples, even if
|
// Package policy is for any kind of policy object. Suitable examples, even if
|
||||||
// they aren't all here, are PodDisruptionBudget, PodSecurityPolicy,
|
// they aren't all here, are PodDisruptionBudget,
|
||||||
// NetworkPolicy, etc.
|
// NetworkPolicy, etc.
|
||||||
package v1beta1 // import "k8s.io/api/policy/v1beta1"
|
package v1beta1 // import "k8s.io/api/policy/v1beta1"
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -21,7 +21,6 @@ syntax = "proto2";
|
||||||
|
|
||||||
package k8s.io.api.policy.v1beta1;
|
package k8s.io.api.policy.v1beta1;
|
||||||
|
|
||||||
import "k8s.io/api/core/v1/generated.proto";
|
|
||||||
import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto";
|
import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto";
|
||||||
import "k8s.io/apimachinery/pkg/runtime/generated.proto";
|
import "k8s.io/apimachinery/pkg/runtime/generated.proto";
|
||||||
import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto";
|
import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto";
|
||||||
|
@ -30,35 +29,6 @@ import "k8s.io/apimachinery/pkg/util/intstr/generated.proto";
|
||||||
// Package-wide variables from generator "generated".
|
// Package-wide variables from generator "generated".
|
||||||
option go_package = "k8s.io/api/policy/v1beta1";
|
option go_package = "k8s.io/api/policy/v1beta1";
|
||||||
|
|
||||||
// AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used.
|
|
||||||
message AllowedCSIDriver {
|
|
||||||
// Name is the registered name of the CSI driver
|
|
||||||
optional string name = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// AllowedFlexVolume represents a single Flexvolume that is allowed to be used.
|
|
||||||
message AllowedFlexVolume {
|
|
||||||
// driver is the name of the Flexvolume driver.
|
|
||||||
optional string driver = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// AllowedHostPath defines the host volume conditions that will be enabled by a policy
|
|
||||||
// for pods to use. It requires the path prefix to be defined.
|
|
||||||
message AllowedHostPath {
|
|
||||||
// pathPrefix is the path prefix that the host volume must match.
|
|
||||||
// It does not support `*`.
|
|
||||||
// Trailing slashes are trimmed when validating the path prefix with a host path.
|
|
||||||
//
|
|
||||||
// Examples:
|
|
||||||
// `/foo` would allow `/foo`, `/foo/` and `/foo/bar`
|
|
||||||
// `/foo` would not allow `/food` or `/etc/foo`
|
|
||||||
optional string pathPrefix = 1;
|
|
||||||
|
|
||||||
// when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.
|
|
||||||
// +optional
|
|
||||||
optional bool readOnly = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Eviction evicts a pod from its node subject to certain policies and safety constraints.
|
// Eviction evicts a pod from its node subject to certain policies and safety constraints.
|
||||||
// This is a subresource of Pod. A request to cause such an eviction is
|
// This is a subresource of Pod. A request to cause such an eviction is
|
||||||
// created by POSTing to .../pods/<pod name>/evictions.
|
// created by POSTing to .../pods/<pod name>/evictions.
|
||||||
|
@ -72,37 +42,6 @@ message Eviction {
|
||||||
optional k8s.io.apimachinery.pkg.apis.meta.v1.DeleteOptions deleteOptions = 2;
|
optional k8s.io.apimachinery.pkg.apis.meta.v1.DeleteOptions deleteOptions = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FSGroupStrategyOptions defines the strategy type and options used to create the strategy.
|
|
||||||
message FSGroupStrategyOptions {
|
|
||||||
// rule is the strategy that will dictate what FSGroup is used in the SecurityContext.
|
|
||||||
// +optional
|
|
||||||
optional string rule = 1;
|
|
||||||
|
|
||||||
// ranges are the allowed ranges of fs groups. If you would like to force a single
|
|
||||||
// fs group then supply a single range with the same start and end. Required for MustRunAs.
|
|
||||||
// +optional
|
|
||||||
repeated IDRange ranges = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// HostPortRange defines a range of host ports that will be enabled by a policy
|
|
||||||
// for pods to use. It requires both the start and end to be defined.
|
|
||||||
message HostPortRange {
|
|
||||||
// min is the start of the range, inclusive.
|
|
||||||
optional int32 min = 1;
|
|
||||||
|
|
||||||
// max is the end of the range, inclusive.
|
|
||||||
optional int32 max = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// IDRange provides a min/max of an allowed range of IDs.
|
|
||||||
message IDRange {
|
|
||||||
// min is the start of the range, inclusive.
|
|
||||||
optional int64 min = 1;
|
|
||||||
|
|
||||||
// max is the end of the range, inclusive.
|
|
||||||
optional int64 max = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods
|
// PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods
|
||||||
message PodDisruptionBudget {
|
message PodDisruptionBudget {
|
||||||
// Standard object's metadata.
|
// Standard object's metadata.
|
||||||
|
@ -238,219 +177,3 @@ message PodDisruptionBudgetStatus {
|
||||||
repeated k8s.io.apimachinery.pkg.apis.meta.v1.Condition conditions = 7;
|
repeated k8s.io.apimachinery.pkg.apis.meta.v1.Condition conditions = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
// PodSecurityPolicy governs the ability to make requests that affect the Security Context
|
|
||||||
// that will be applied to a pod and container.
|
|
||||||
// Deprecated in 1.21.
|
|
||||||
message PodSecurityPolicy {
|
|
||||||
// Standard object's metadata.
|
|
||||||
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
|
||||||
// +optional
|
|
||||||
optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
|
|
||||||
|
|
||||||
// spec defines the policy enforced.
|
|
||||||
// +optional
|
|
||||||
optional PodSecurityPolicySpec spec = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// PodSecurityPolicyList is a list of PodSecurityPolicy objects.
|
|
||||||
message PodSecurityPolicyList {
|
|
||||||
// Standard list metadata.
|
|
||||||
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
|
||||||
// +optional
|
|
||||||
optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
|
|
||||||
|
|
||||||
// items is a list of schema objects.
|
|
||||||
repeated PodSecurityPolicy items = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// PodSecurityPolicySpec defines the policy enforced.
|
|
||||||
message PodSecurityPolicySpec {
|
|
||||||
// privileged determines if a pod can request to be run as privileged.
|
|
||||||
// +optional
|
|
||||||
optional bool privileged = 1;
|
|
||||||
|
|
||||||
// defaultAddCapabilities is the default set of capabilities that will be added to the container
|
|
||||||
// unless the pod spec specifically drops the capability. You may not list a capability in both
|
|
||||||
// defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly
|
|
||||||
// allowed, and need not be included in the allowedCapabilities list.
|
|
||||||
// +optional
|
|
||||||
repeated string defaultAddCapabilities = 2;
|
|
||||||
|
|
||||||
// requiredDropCapabilities are the capabilities that will be dropped from the container. These
|
|
||||||
// are required to be dropped and cannot be added.
|
|
||||||
// +optional
|
|
||||||
repeated string requiredDropCapabilities = 3;
|
|
||||||
|
|
||||||
// allowedCapabilities is a list of capabilities that can be requested to add to the container.
|
|
||||||
// Capabilities in this field may be added at the pod author's discretion.
|
|
||||||
// You must not list a capability in both allowedCapabilities and requiredDropCapabilities.
|
|
||||||
// +optional
|
|
||||||
repeated string allowedCapabilities = 4;
|
|
||||||
|
|
||||||
// volumes is an allowlist of volume plugins. Empty indicates that
|
|
||||||
// no volumes may be used. To allow all volumes you may use '*'.
|
|
||||||
// +optional
|
|
||||||
repeated string volumes = 5;
|
|
||||||
|
|
||||||
// hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.
|
|
||||||
// +optional
|
|
||||||
optional bool hostNetwork = 6;
|
|
||||||
|
|
||||||
// hostPorts determines which host port ranges are allowed to be exposed.
|
|
||||||
// +optional
|
|
||||||
repeated HostPortRange hostPorts = 7;
|
|
||||||
|
|
||||||
// hostPID determines if the policy allows the use of HostPID in the pod spec.
|
|
||||||
// +optional
|
|
||||||
optional bool hostPID = 8;
|
|
||||||
|
|
||||||
// hostIPC determines if the policy allows the use of HostIPC in the pod spec.
|
|
||||||
// +optional
|
|
||||||
optional bool hostIPC = 9;
|
|
||||||
|
|
||||||
// seLinux is the strategy that will dictate the allowable labels that may be set.
|
|
||||||
optional SELinuxStrategyOptions seLinux = 10;
|
|
||||||
|
|
||||||
// runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.
|
|
||||||
optional RunAsUserStrategyOptions runAsUser = 11;
|
|
||||||
|
|
||||||
// RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set.
|
|
||||||
// If this field is omitted, the pod's RunAsGroup can take any value. This field requires the
|
|
||||||
// RunAsGroup feature gate to be enabled.
|
|
||||||
// +optional
|
|
||||||
optional RunAsGroupStrategyOptions runAsGroup = 22;
|
|
||||||
|
|
||||||
// supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.
|
|
||||||
optional SupplementalGroupsStrategyOptions supplementalGroups = 12;
|
|
||||||
|
|
||||||
// fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.
|
|
||||||
optional FSGroupStrategyOptions fsGroup = 13;
|
|
||||||
|
|
||||||
// readOnlyRootFilesystem when set to true will force containers to run with a read only root file
|
|
||||||
// system. If the container specifically requests to run with a non-read only root file system
|
|
||||||
// the PSP should deny the pod.
|
|
||||||
// If set to false the container may run with a read only root file system if it wishes but it
|
|
||||||
// will not be forced to.
|
|
||||||
// +optional
|
|
||||||
optional bool readOnlyRootFilesystem = 14;
|
|
||||||
|
|
||||||
// defaultAllowPrivilegeEscalation controls the default setting for whether a
|
|
||||||
// process can gain more privileges than its parent process.
|
|
||||||
// +optional
|
|
||||||
optional bool defaultAllowPrivilegeEscalation = 15;
|
|
||||||
|
|
||||||
// allowPrivilegeEscalation determines if a pod can request to allow
|
|
||||||
// privilege escalation. If unspecified, defaults to true.
|
|
||||||
// +optional
|
|
||||||
optional bool allowPrivilegeEscalation = 16;
|
|
||||||
|
|
||||||
// allowedHostPaths is an allowlist of host paths. Empty indicates
|
|
||||||
// that all host paths may be used.
|
|
||||||
// +optional
|
|
||||||
repeated AllowedHostPath allowedHostPaths = 17;
|
|
||||||
|
|
||||||
// allowedFlexVolumes is an allowlist of Flexvolumes. Empty or nil indicates that all
|
|
||||||
// Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes
|
|
||||||
// is allowed in the "volumes" field.
|
|
||||||
// +optional
|
|
||||||
repeated AllowedFlexVolume allowedFlexVolumes = 18;
|
|
||||||
|
|
||||||
// AllowedCSIDrivers is an allowlist of inline CSI drivers that must be explicitly set to be embedded within a pod spec.
|
|
||||||
// An empty value indicates that any CSI driver can be used for inline ephemeral volumes.
|
|
||||||
// +optional
|
|
||||||
repeated AllowedCSIDriver allowedCSIDrivers = 23;
|
|
||||||
|
|
||||||
// allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none.
|
|
||||||
// Each entry is either a plain sysctl name or ends in "*" in which case it is considered
|
|
||||||
// as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed.
|
|
||||||
// Kubelet has to allowlist all allowed unsafe sysctls explicitly to avoid rejection.
|
|
||||||
//
|
|
||||||
// Examples:
|
|
||||||
// e.g. "foo/*" allows "foo/bar", "foo/baz", etc.
|
|
||||||
// e.g. "foo.*" allows "foo.bar", "foo.baz", etc.
|
|
||||||
// +optional
|
|
||||||
repeated string allowedUnsafeSysctls = 19;
|
|
||||||
|
|
||||||
// forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none.
|
|
||||||
// Each entry is either a plain sysctl name or ends in "*" in which case it is considered
|
|
||||||
// as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.
|
|
||||||
//
|
|
||||||
// Examples:
|
|
||||||
// e.g. "foo/*" forbids "foo/bar", "foo/baz", etc.
|
|
||||||
// e.g. "foo.*" forbids "foo.bar", "foo.baz", etc.
|
|
||||||
// +optional
|
|
||||||
repeated string forbiddenSysctls = 20;
|
|
||||||
|
|
||||||
// AllowedProcMountTypes is an allowlist of allowed ProcMountTypes.
|
|
||||||
// Empty or nil indicates that only the DefaultProcMountType may be used.
|
|
||||||
// This requires the ProcMountType feature flag to be enabled.
|
|
||||||
// +optional
|
|
||||||
repeated string allowedProcMountTypes = 21;
|
|
||||||
|
|
||||||
// runtimeClass is the strategy that will dictate the allowable RuntimeClasses for a pod.
|
|
||||||
// If this field is omitted, the pod's runtimeClassName field is unrestricted.
|
|
||||||
// Enforcement of this field depends on the RuntimeClass feature gate being enabled.
|
|
||||||
// +optional
|
|
||||||
optional RuntimeClassStrategyOptions runtimeClass = 24;
|
|
||||||
}
|
|
||||||
|
|
||||||
// RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy.
|
|
||||||
message RunAsGroupStrategyOptions {
|
|
||||||
// rule is the strategy that will dictate the allowable RunAsGroup values that may be set.
|
|
||||||
optional string rule = 1;
|
|
||||||
|
|
||||||
// ranges are the allowed ranges of gids that may be used. If you would like to force a single gid
|
|
||||||
// then supply a single range with the same start and end. Required for MustRunAs.
|
|
||||||
// +optional
|
|
||||||
repeated IDRange ranges = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy.
|
|
||||||
message RunAsUserStrategyOptions {
|
|
||||||
// rule is the strategy that will dictate the allowable RunAsUser values that may be set.
|
|
||||||
optional string rule = 1;
|
|
||||||
|
|
||||||
// ranges are the allowed ranges of uids that may be used. If you would like to force a single uid
|
|
||||||
// then supply a single range with the same start and end. Required for MustRunAs.
|
|
||||||
// +optional
|
|
||||||
repeated IDRange ranges = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// RuntimeClassStrategyOptions define the strategy that will dictate the allowable RuntimeClasses
|
|
||||||
// for a pod.
|
|
||||||
message RuntimeClassStrategyOptions {
|
|
||||||
// allowedRuntimeClassNames is an allowlist of RuntimeClass names that may be specified on a pod.
|
|
||||||
// A value of "*" means that any RuntimeClass name is allowed, and must be the only item in the
|
|
||||||
// list. An empty list requires the RuntimeClassName field to be unset.
|
|
||||||
repeated string allowedRuntimeClassNames = 1;
|
|
||||||
|
|
||||||
// defaultRuntimeClassName is the default RuntimeClassName to set on the pod.
|
|
||||||
// The default MUST be allowed by the allowedRuntimeClassNames list.
|
|
||||||
// A value of nil does not mutate the Pod.
|
|
||||||
// +optional
|
|
||||||
optional string defaultRuntimeClassName = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// SELinuxStrategyOptions defines the strategy type and any options used to create the strategy.
|
|
||||||
message SELinuxStrategyOptions {
|
|
||||||
// rule is the strategy that will dictate the allowable labels that may be set.
|
|
||||||
optional string rule = 1;
|
|
||||||
|
|
||||||
// seLinuxOptions required to run as; required for MustRunAs
|
|
||||||
// More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
|
|
||||||
// +optional
|
|
||||||
optional k8s.io.api.core.v1.SELinuxOptions seLinuxOptions = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy.
|
|
||||||
message SupplementalGroupsStrategyOptions {
|
|
||||||
// rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.
|
|
||||||
// +optional
|
|
||||||
optional string rule = 1;
|
|
||||||
|
|
||||||
// ranges are the allowed ranges of supplemental groups. If you would like to force a single
|
|
||||||
// supplemental group then supply a single range with the same start and end. Required for MustRunAs.
|
|
||||||
// +optional
|
|
||||||
repeated IDRange ranges = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -46,8 +46,6 @@ func addKnownTypes(scheme *runtime.Scheme) error {
|
||||||
scheme.AddKnownTypes(SchemeGroupVersion,
|
scheme.AddKnownTypes(SchemeGroupVersion,
|
||||||
&PodDisruptionBudget{},
|
&PodDisruptionBudget{},
|
||||||
&PodDisruptionBudgetList{},
|
&PodDisruptionBudgetList{},
|
||||||
&PodSecurityPolicy{},
|
|
||||||
&PodSecurityPolicyList{},
|
|
||||||
&Eviction{},
|
&Eviction{},
|
||||||
)
|
)
|
||||||
// Add the watch version that applies
|
// Add the watch version that applies
|
||||||
|
|
|
@ -17,7 +17,6 @@ limitations under the License.
|
||||||
package v1beta1
|
package v1beta1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
v1 "k8s.io/api/core/v1"
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/util/intstr"
|
"k8s.io/apimachinery/pkg/util/intstr"
|
||||||
)
|
)
|
||||||
|
@ -228,373 +227,3 @@ type Eviction struct {
|
||||||
// +optional
|
// +optional
|
||||||
DeleteOptions *metav1.DeleteOptions `json:"deleteOptions,omitempty" protobuf:"bytes,2,opt,name=deleteOptions"`
|
DeleteOptions *metav1.DeleteOptions `json:"deleteOptions,omitempty" protobuf:"bytes,2,opt,name=deleteOptions"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// +genclient
|
|
||||||
// +genclient:nonNamespaced
|
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
|
||||||
// +k8s:prerelease-lifecycle-gen:introduced=1.10
|
|
||||||
// +k8s:prerelease-lifecycle-gen:deprecated=1.21
|
|
||||||
// +k8s:prerelease-lifecycle-gen:removed=1.25
|
|
||||||
|
|
||||||
// PodSecurityPolicy governs the ability to make requests that affect the Security Context
|
|
||||||
// that will be applied to a pod and container.
|
|
||||||
// Deprecated in 1.21.
|
|
||||||
type PodSecurityPolicy struct {
|
|
||||||
metav1.TypeMeta `json:",inline"`
|
|
||||||
// Standard object's metadata.
|
|
||||||
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
|
||||||
// +optional
|
|
||||||
metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
|
|
||||||
|
|
||||||
// spec defines the policy enforced.
|
|
||||||
// +optional
|
|
||||||
Spec PodSecurityPolicySpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// PodSecurityPolicySpec defines the policy enforced.
|
|
||||||
type PodSecurityPolicySpec struct {
|
|
||||||
// privileged determines if a pod can request to be run as privileged.
|
|
||||||
// +optional
|
|
||||||
Privileged bool `json:"privileged,omitempty" protobuf:"varint,1,opt,name=privileged"`
|
|
||||||
// defaultAddCapabilities is the default set of capabilities that will be added to the container
|
|
||||||
// unless the pod spec specifically drops the capability. You may not list a capability in both
|
|
||||||
// defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly
|
|
||||||
// allowed, and need not be included in the allowedCapabilities list.
|
|
||||||
// +optional
|
|
||||||
DefaultAddCapabilities []v1.Capability `json:"defaultAddCapabilities,omitempty" protobuf:"bytes,2,rep,name=defaultAddCapabilities,casttype=k8s.io/api/core/v1.Capability"`
|
|
||||||
// requiredDropCapabilities are the capabilities that will be dropped from the container. These
|
|
||||||
// are required to be dropped and cannot be added.
|
|
||||||
// +optional
|
|
||||||
RequiredDropCapabilities []v1.Capability `json:"requiredDropCapabilities,omitempty" protobuf:"bytes,3,rep,name=requiredDropCapabilities,casttype=k8s.io/api/core/v1.Capability"`
|
|
||||||
// allowedCapabilities is a list of capabilities that can be requested to add to the container.
|
|
||||||
// Capabilities in this field may be added at the pod author's discretion.
|
|
||||||
// You must not list a capability in both allowedCapabilities and requiredDropCapabilities.
|
|
||||||
// +optional
|
|
||||||
AllowedCapabilities []v1.Capability `json:"allowedCapabilities,omitempty" protobuf:"bytes,4,rep,name=allowedCapabilities,casttype=k8s.io/api/core/v1.Capability"`
|
|
||||||
// volumes is an allowlist of volume plugins. Empty indicates that
|
|
||||||
// no volumes may be used. To allow all volumes you may use '*'.
|
|
||||||
// +optional
|
|
||||||
Volumes []FSType `json:"volumes,omitempty" protobuf:"bytes,5,rep,name=volumes,casttype=FSType"`
|
|
||||||
// hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.
|
|
||||||
// +optional
|
|
||||||
HostNetwork bool `json:"hostNetwork,omitempty" protobuf:"varint,6,opt,name=hostNetwork"`
|
|
||||||
// hostPorts determines which host port ranges are allowed to be exposed.
|
|
||||||
// +optional
|
|
||||||
HostPorts []HostPortRange `json:"hostPorts,omitempty" protobuf:"bytes,7,rep,name=hostPorts"`
|
|
||||||
// hostPID determines if the policy allows the use of HostPID in the pod spec.
|
|
||||||
// +optional
|
|
||||||
HostPID bool `json:"hostPID,omitempty" protobuf:"varint,8,opt,name=hostPID"`
|
|
||||||
// hostIPC determines if the policy allows the use of HostIPC in the pod spec.
|
|
||||||
// +optional
|
|
||||||
HostIPC bool `json:"hostIPC,omitempty" protobuf:"varint,9,opt,name=hostIPC"`
|
|
||||||
// seLinux is the strategy that will dictate the allowable labels that may be set.
|
|
||||||
SELinux SELinuxStrategyOptions `json:"seLinux" protobuf:"bytes,10,opt,name=seLinux"`
|
|
||||||
// runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.
|
|
||||||
RunAsUser RunAsUserStrategyOptions `json:"runAsUser" protobuf:"bytes,11,opt,name=runAsUser"`
|
|
||||||
// RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set.
|
|
||||||
// If this field is omitted, the pod's RunAsGroup can take any value. This field requires the
|
|
||||||
// RunAsGroup feature gate to be enabled.
|
|
||||||
// +optional
|
|
||||||
RunAsGroup *RunAsGroupStrategyOptions `json:"runAsGroup,omitempty" protobuf:"bytes,22,opt,name=runAsGroup"`
|
|
||||||
// supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.
|
|
||||||
SupplementalGroups SupplementalGroupsStrategyOptions `json:"supplementalGroups" protobuf:"bytes,12,opt,name=supplementalGroups"`
|
|
||||||
// fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.
|
|
||||||
FSGroup FSGroupStrategyOptions `json:"fsGroup" protobuf:"bytes,13,opt,name=fsGroup"`
|
|
||||||
// readOnlyRootFilesystem when set to true will force containers to run with a read only root file
|
|
||||||
// system. If the container specifically requests to run with a non-read only root file system
|
|
||||||
// the PSP should deny the pod.
|
|
||||||
// If set to false the container may run with a read only root file system if it wishes but it
|
|
||||||
// will not be forced to.
|
|
||||||
// +optional
|
|
||||||
ReadOnlyRootFilesystem bool `json:"readOnlyRootFilesystem,omitempty" protobuf:"varint,14,opt,name=readOnlyRootFilesystem"`
|
|
||||||
// defaultAllowPrivilegeEscalation controls the default setting for whether a
|
|
||||||
// process can gain more privileges than its parent process.
|
|
||||||
// +optional
|
|
||||||
DefaultAllowPrivilegeEscalation *bool `json:"defaultAllowPrivilegeEscalation,omitempty" protobuf:"varint,15,opt,name=defaultAllowPrivilegeEscalation"`
|
|
||||||
// allowPrivilegeEscalation determines if a pod can request to allow
|
|
||||||
// privilege escalation. If unspecified, defaults to true.
|
|
||||||
// +optional
|
|
||||||
AllowPrivilegeEscalation *bool `json:"allowPrivilegeEscalation,omitempty" protobuf:"varint,16,opt,name=allowPrivilegeEscalation"`
|
|
||||||
// allowedHostPaths is an allowlist of host paths. Empty indicates
|
|
||||||
// that all host paths may be used.
|
|
||||||
// +optional
|
|
||||||
AllowedHostPaths []AllowedHostPath `json:"allowedHostPaths,omitempty" protobuf:"bytes,17,rep,name=allowedHostPaths"`
|
|
||||||
// allowedFlexVolumes is an allowlist of Flexvolumes. Empty or nil indicates that all
|
|
||||||
// Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes
|
|
||||||
// is allowed in the "volumes" field.
|
|
||||||
// +optional
|
|
||||||
AllowedFlexVolumes []AllowedFlexVolume `json:"allowedFlexVolumes,omitempty" protobuf:"bytes,18,rep,name=allowedFlexVolumes"`
|
|
||||||
// AllowedCSIDrivers is an allowlist of inline CSI drivers that must be explicitly set to be embedded within a pod spec.
|
|
||||||
// An empty value indicates that any CSI driver can be used for inline ephemeral volumes.
|
|
||||||
// +optional
|
|
||||||
AllowedCSIDrivers []AllowedCSIDriver `json:"allowedCSIDrivers,omitempty" protobuf:"bytes,23,rep,name=allowedCSIDrivers"`
|
|
||||||
// allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none.
|
|
||||||
// Each entry is either a plain sysctl name or ends in "*" in which case it is considered
|
|
||||||
// as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed.
|
|
||||||
// Kubelet has to allowlist all allowed unsafe sysctls explicitly to avoid rejection.
|
|
||||||
//
|
|
||||||
// Examples:
|
|
||||||
// e.g. "foo/*" allows "foo/bar", "foo/baz", etc.
|
|
||||||
// e.g. "foo.*" allows "foo.bar", "foo.baz", etc.
|
|
||||||
// +optional
|
|
||||||
AllowedUnsafeSysctls []string `json:"allowedUnsafeSysctls,omitempty" protobuf:"bytes,19,rep,name=allowedUnsafeSysctls"`
|
|
||||||
// forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none.
|
|
||||||
// Each entry is either a plain sysctl name or ends in "*" in which case it is considered
|
|
||||||
// as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.
|
|
||||||
//
|
|
||||||
// Examples:
|
|
||||||
// e.g. "foo/*" forbids "foo/bar", "foo/baz", etc.
|
|
||||||
// e.g. "foo.*" forbids "foo.bar", "foo.baz", etc.
|
|
||||||
// +optional
|
|
||||||
ForbiddenSysctls []string `json:"forbiddenSysctls,omitempty" protobuf:"bytes,20,rep,name=forbiddenSysctls"`
|
|
||||||
// AllowedProcMountTypes is an allowlist of allowed ProcMountTypes.
|
|
||||||
// Empty or nil indicates that only the DefaultProcMountType may be used.
|
|
||||||
// This requires the ProcMountType feature flag to be enabled.
|
|
||||||
// +optional
|
|
||||||
AllowedProcMountTypes []v1.ProcMountType `json:"allowedProcMountTypes,omitempty" protobuf:"bytes,21,opt,name=allowedProcMountTypes"`
|
|
||||||
// runtimeClass is the strategy that will dictate the allowable RuntimeClasses for a pod.
|
|
||||||
// If this field is omitted, the pod's runtimeClassName field is unrestricted.
|
|
||||||
// Enforcement of this field depends on the RuntimeClass feature gate being enabled.
|
|
||||||
// +optional
|
|
||||||
RuntimeClass *RuntimeClassStrategyOptions `json:"runtimeClass,omitempty" protobuf:"bytes,24,opt,name=runtimeClass"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// AllowedHostPath defines the host volume conditions that will be enabled by a policy
|
|
||||||
// for pods to use. It requires the path prefix to be defined.
|
|
||||||
type AllowedHostPath struct {
|
|
||||||
// pathPrefix is the path prefix that the host volume must match.
|
|
||||||
// It does not support `*`.
|
|
||||||
// Trailing slashes are trimmed when validating the path prefix with a host path.
|
|
||||||
//
|
|
||||||
// Examples:
|
|
||||||
// `/foo` would allow `/foo`, `/foo/` and `/foo/bar`
|
|
||||||
// `/foo` would not allow `/food` or `/etc/foo`
|
|
||||||
PathPrefix string `json:"pathPrefix,omitempty" protobuf:"bytes,1,rep,name=pathPrefix"`
|
|
||||||
|
|
||||||
// when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.
|
|
||||||
// +optional
|
|
||||||
ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,2,opt,name=readOnly"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// AllowAllCapabilities can be used as a value for the PodSecurityPolicy.AllowAllCapabilities
|
|
||||||
// field and means that any capabilities are allowed to be requested.
|
|
||||||
var AllowAllCapabilities v1.Capability = "*"
|
|
||||||
|
|
||||||
// FSType gives strong typing to different file systems that are used by volumes.
|
|
||||||
type FSType string
|
|
||||||
|
|
||||||
const (
|
|
||||||
AzureFile FSType = "azureFile"
|
|
||||||
Flocker FSType = "flocker"
|
|
||||||
FlexVolume FSType = "flexVolume"
|
|
||||||
HostPath FSType = "hostPath"
|
|
||||||
EmptyDir FSType = "emptyDir"
|
|
||||||
GCEPersistentDisk FSType = "gcePersistentDisk"
|
|
||||||
AWSElasticBlockStore FSType = "awsElasticBlockStore"
|
|
||||||
GitRepo FSType = "gitRepo"
|
|
||||||
Secret FSType = "secret"
|
|
||||||
NFS FSType = "nfs"
|
|
||||||
ISCSI FSType = "iscsi"
|
|
||||||
Glusterfs FSType = "glusterfs"
|
|
||||||
PersistentVolumeClaim FSType = "persistentVolumeClaim"
|
|
||||||
RBD FSType = "rbd"
|
|
||||||
Cinder FSType = "cinder"
|
|
||||||
CephFS FSType = "cephFS"
|
|
||||||
DownwardAPI FSType = "downwardAPI"
|
|
||||||
FC FSType = "fc"
|
|
||||||
ConfigMap FSType = "configMap"
|
|
||||||
VsphereVolume FSType = "vsphereVolume"
|
|
||||||
Quobyte FSType = "quobyte"
|
|
||||||
AzureDisk FSType = "azureDisk"
|
|
||||||
PhotonPersistentDisk FSType = "photonPersistentDisk"
|
|
||||||
StorageOS FSType = "storageos"
|
|
||||||
Projected FSType = "projected"
|
|
||||||
PortworxVolume FSType = "portworxVolume"
|
|
||||||
ScaleIO FSType = "scaleIO"
|
|
||||||
CSI FSType = "csi"
|
|
||||||
Ephemeral FSType = "ephemeral"
|
|
||||||
All FSType = "*"
|
|
||||||
)
|
|
||||||
|
|
||||||
// AllowedFlexVolume represents a single Flexvolume that is allowed to be used.
|
|
||||||
type AllowedFlexVolume struct {
|
|
||||||
// driver is the name of the Flexvolume driver.
|
|
||||||
Driver string `json:"driver" protobuf:"bytes,1,opt,name=driver"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used.
|
|
||||||
type AllowedCSIDriver struct {
|
|
||||||
// Name is the registered name of the CSI driver
|
|
||||||
Name string `json:"name" protobuf:"bytes,1,opt,name=name"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// HostPortRange defines a range of host ports that will be enabled by a policy
|
|
||||||
// for pods to use. It requires both the start and end to be defined.
|
|
||||||
type HostPortRange struct {
|
|
||||||
// min is the start of the range, inclusive.
|
|
||||||
Min int32 `json:"min" protobuf:"varint,1,opt,name=min"`
|
|
||||||
// max is the end of the range, inclusive.
|
|
||||||
Max int32 `json:"max" protobuf:"varint,2,opt,name=max"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// SELinuxStrategyOptions defines the strategy type and any options used to create the strategy.
|
|
||||||
type SELinuxStrategyOptions struct {
|
|
||||||
// rule is the strategy that will dictate the allowable labels that may be set.
|
|
||||||
Rule SELinuxStrategy `json:"rule" protobuf:"bytes,1,opt,name=rule,casttype=SELinuxStrategy"`
|
|
||||||
// seLinuxOptions required to run as; required for MustRunAs
|
|
||||||
// More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
|
|
||||||
// +optional
|
|
||||||
SELinuxOptions *v1.SELinuxOptions `json:"seLinuxOptions,omitempty" protobuf:"bytes,2,opt,name=seLinuxOptions"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// SELinuxStrategy denotes strategy types for generating SELinux options for a
|
|
||||||
// Security Context.
|
|
||||||
type SELinuxStrategy string
|
|
||||||
|
|
||||||
const (
|
|
||||||
// SELinuxStrategyMustRunAs means that container must have SELinux labels of X applied.
|
|
||||||
SELinuxStrategyMustRunAs SELinuxStrategy = "MustRunAs"
|
|
||||||
// SELinuxStrategyRunAsAny means that container may make requests for any SELinux context labels.
|
|
||||||
SELinuxStrategyRunAsAny SELinuxStrategy = "RunAsAny"
|
|
||||||
)
|
|
||||||
|
|
||||||
// RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy.
|
|
||||||
type RunAsUserStrategyOptions struct {
|
|
||||||
// rule is the strategy that will dictate the allowable RunAsUser values that may be set.
|
|
||||||
Rule RunAsUserStrategy `json:"rule" protobuf:"bytes,1,opt,name=rule,casttype=RunAsUserStrategy"`
|
|
||||||
// ranges are the allowed ranges of uids that may be used. If you would like to force a single uid
|
|
||||||
// then supply a single range with the same start and end. Required for MustRunAs.
|
|
||||||
// +optional
|
|
||||||
Ranges []IDRange `json:"ranges,omitempty" protobuf:"bytes,2,rep,name=ranges"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy.
|
|
||||||
type RunAsGroupStrategyOptions struct {
|
|
||||||
// rule is the strategy that will dictate the allowable RunAsGroup values that may be set.
|
|
||||||
Rule RunAsGroupStrategy `json:"rule" protobuf:"bytes,1,opt,name=rule,casttype=RunAsGroupStrategy"`
|
|
||||||
// ranges are the allowed ranges of gids that may be used. If you would like to force a single gid
|
|
||||||
// then supply a single range with the same start and end. Required for MustRunAs.
|
|
||||||
// +optional
|
|
||||||
Ranges []IDRange `json:"ranges,omitempty" protobuf:"bytes,2,rep,name=ranges"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// IDRange provides a min/max of an allowed range of IDs.
|
|
||||||
type IDRange struct {
|
|
||||||
// min is the start of the range, inclusive.
|
|
||||||
Min int64 `json:"min" protobuf:"varint,1,opt,name=min"`
|
|
||||||
// max is the end of the range, inclusive.
|
|
||||||
Max int64 `json:"max" protobuf:"varint,2,opt,name=max"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// RunAsUserStrategy denotes strategy types for generating RunAsUser values for a
|
|
||||||
// Security Context.
|
|
||||||
type RunAsUserStrategy string
|
|
||||||
|
|
||||||
const (
|
|
||||||
// RunAsUserStrategyMustRunAs means that container must run as a particular uid.
|
|
||||||
RunAsUserStrategyMustRunAs RunAsUserStrategy = "MustRunAs"
|
|
||||||
// RunAsUserStrategyMustRunAsNonRoot means that container must run as a non-root uid.
|
|
||||||
RunAsUserStrategyMustRunAsNonRoot RunAsUserStrategy = "MustRunAsNonRoot"
|
|
||||||
// RunAsUserStrategyRunAsAny means that container may make requests for any uid.
|
|
||||||
RunAsUserStrategyRunAsAny RunAsUserStrategy = "RunAsAny"
|
|
||||||
)
|
|
||||||
|
|
||||||
// RunAsGroupStrategy denotes strategy types for generating RunAsGroup values for a
|
|
||||||
// Security Context.
|
|
||||||
type RunAsGroupStrategy string
|
|
||||||
|
|
||||||
const (
|
|
||||||
// RunAsGroupStrategyMayRunAs means that container does not need to run with a particular gid.
|
|
||||||
// However, when RunAsGroup are specified, they have to fall in the defined range.
|
|
||||||
RunAsGroupStrategyMayRunAs RunAsGroupStrategy = "MayRunAs"
|
|
||||||
// RunAsGroupStrategyMustRunAs means that container must run as a particular gid.
|
|
||||||
RunAsGroupStrategyMustRunAs RunAsGroupStrategy = "MustRunAs"
|
|
||||||
// RunAsUserStrategyRunAsAny means that container may make requests for any gid.
|
|
||||||
RunAsGroupStrategyRunAsAny RunAsGroupStrategy = "RunAsAny"
|
|
||||||
)
|
|
||||||
|
|
||||||
// FSGroupStrategyOptions defines the strategy type and options used to create the strategy.
|
|
||||||
type FSGroupStrategyOptions struct {
|
|
||||||
// rule is the strategy that will dictate what FSGroup is used in the SecurityContext.
|
|
||||||
// +optional
|
|
||||||
Rule FSGroupStrategyType `json:"rule,omitempty" protobuf:"bytes,1,opt,name=rule,casttype=FSGroupStrategyType"`
|
|
||||||
// ranges are the allowed ranges of fs groups. If you would like to force a single
|
|
||||||
// fs group then supply a single range with the same start and end. Required for MustRunAs.
|
|
||||||
// +optional
|
|
||||||
Ranges []IDRange `json:"ranges,omitempty" protobuf:"bytes,2,rep,name=ranges"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// FSGroupStrategyType denotes strategy types for generating FSGroup values for a
|
|
||||||
// SecurityContext
|
|
||||||
type FSGroupStrategyType string
|
|
||||||
|
|
||||||
const (
|
|
||||||
// FSGroupStrategyMayRunAs means that container does not need to have FSGroup of X applied.
|
|
||||||
// However, when FSGroups are specified, they have to fall in the defined range.
|
|
||||||
FSGroupStrategyMayRunAs FSGroupStrategyType = "MayRunAs"
|
|
||||||
// FSGroupStrategyMustRunAs meant that container must have FSGroup of X applied.
|
|
||||||
FSGroupStrategyMustRunAs FSGroupStrategyType = "MustRunAs"
|
|
||||||
// FSGroupStrategyRunAsAny means that container may make requests for any FSGroup labels.
|
|
||||||
FSGroupStrategyRunAsAny FSGroupStrategyType = "RunAsAny"
|
|
||||||
)
|
|
||||||
|
|
||||||
// SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy.
|
|
||||||
type SupplementalGroupsStrategyOptions struct {
|
|
||||||
// rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.
|
|
||||||
// +optional
|
|
||||||
Rule SupplementalGroupsStrategyType `json:"rule,omitempty" protobuf:"bytes,1,opt,name=rule,casttype=SupplementalGroupsStrategyType"`
|
|
||||||
// ranges are the allowed ranges of supplemental groups. If you would like to force a single
|
|
||||||
// supplemental group then supply a single range with the same start and end. Required for MustRunAs.
|
|
||||||
// +optional
|
|
||||||
Ranges []IDRange `json:"ranges,omitempty" protobuf:"bytes,2,rep,name=ranges"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// SupplementalGroupsStrategyType denotes strategy types for determining valid supplemental
|
|
||||||
// groups for a SecurityContext.
|
|
||||||
type SupplementalGroupsStrategyType string
|
|
||||||
|
|
||||||
const (
|
|
||||||
// SupplementalGroupsStrategyMayRunAs means that container does not need to run with a particular gid.
|
|
||||||
// However, when gids are specified, they have to fall in the defined range.
|
|
||||||
SupplementalGroupsStrategyMayRunAs SupplementalGroupsStrategyType = "MayRunAs"
|
|
||||||
// SupplementalGroupsStrategyMustRunAs means that container must run as a particular gid.
|
|
||||||
SupplementalGroupsStrategyMustRunAs SupplementalGroupsStrategyType = "MustRunAs"
|
|
||||||
// SupplementalGroupsStrategyRunAsAny means that container may make requests for any gid.
|
|
||||||
SupplementalGroupsStrategyRunAsAny SupplementalGroupsStrategyType = "RunAsAny"
|
|
||||||
)
|
|
||||||
|
|
||||||
// RuntimeClassStrategyOptions define the strategy that will dictate the allowable RuntimeClasses
|
|
||||||
// for a pod.
|
|
||||||
type RuntimeClassStrategyOptions struct {
|
|
||||||
// allowedRuntimeClassNames is an allowlist of RuntimeClass names that may be specified on a pod.
|
|
||||||
// A value of "*" means that any RuntimeClass name is allowed, and must be the only item in the
|
|
||||||
// list. An empty list requires the RuntimeClassName field to be unset.
|
|
||||||
AllowedRuntimeClassNames []string `json:"allowedRuntimeClassNames" protobuf:"bytes,1,rep,name=allowedRuntimeClassNames"`
|
|
||||||
// defaultRuntimeClassName is the default RuntimeClassName to set on the pod.
|
|
||||||
// The default MUST be allowed by the allowedRuntimeClassNames list.
|
|
||||||
// A value of nil does not mutate the Pod.
|
|
||||||
// +optional
|
|
||||||
DefaultRuntimeClassName *string `json:"defaultRuntimeClassName,omitempty" protobuf:"bytes,2,opt,name=defaultRuntimeClassName"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// AllowAllRuntimeClassNames can be used as a value for the
|
|
||||||
// RuntimeClassStrategyOptions.AllowedRuntimeClassNames field and means that any RuntimeClassName is
|
|
||||||
// allowed.
|
|
||||||
const AllowAllRuntimeClassNames = "*"
|
|
||||||
|
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
|
||||||
// +k8s:prerelease-lifecycle-gen:introduced=1.10
|
|
||||||
// +k8s:prerelease-lifecycle-gen:deprecated=1.21
|
|
||||||
// +k8s:prerelease-lifecycle-gen:removed=1.25
|
|
||||||
|
|
||||||
// PodSecurityPolicyList is a list of PodSecurityPolicy objects.
|
|
||||||
type PodSecurityPolicyList struct {
|
|
||||||
metav1.TypeMeta `json:",inline"`
|
|
||||||
// Standard list metadata.
|
|
||||||
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
|
||||||
// +optional
|
|
||||||
metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
|
|
||||||
|
|
||||||
// items is a list of schema objects.
|
|
||||||
Items []PodSecurityPolicy `json:"items" protobuf:"bytes,2,rep,name=items"`
|
|
||||||
}
|
|
||||||
|
|
|
@ -27,34 +27,6 @@ package v1beta1
|
||||||
// Those methods can be generated by using hack/update-codegen.sh
|
// Those methods can be generated by using hack/update-codegen.sh
|
||||||
|
|
||||||
// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT.
|
// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT.
|
||||||
var map_AllowedCSIDriver = map[string]string{
|
|
||||||
"": "AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used.",
|
|
||||||
"name": "Name is the registered name of the CSI driver",
|
|
||||||
}
|
|
||||||
|
|
||||||
func (AllowedCSIDriver) SwaggerDoc() map[string]string {
|
|
||||||
return map_AllowedCSIDriver
|
|
||||||
}
|
|
||||||
|
|
||||||
var map_AllowedFlexVolume = map[string]string{
|
|
||||||
"": "AllowedFlexVolume represents a single Flexvolume that is allowed to be used.",
|
|
||||||
"driver": "driver is the name of the Flexvolume driver.",
|
|
||||||
}
|
|
||||||
|
|
||||||
func (AllowedFlexVolume) SwaggerDoc() map[string]string {
|
|
||||||
return map_AllowedFlexVolume
|
|
||||||
}
|
|
||||||
|
|
||||||
var map_AllowedHostPath = map[string]string{
|
|
||||||
"": "AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined.",
|
|
||||||
"pathPrefix": "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`",
|
|
||||||
"readOnly": "when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.",
|
|
||||||
}
|
|
||||||
|
|
||||||
func (AllowedHostPath) SwaggerDoc() map[string]string {
|
|
||||||
return map_AllowedHostPath
|
|
||||||
}
|
|
||||||
|
|
||||||
var map_Eviction = map[string]string{
|
var map_Eviction = map[string]string{
|
||||||
"": "Eviction evicts a pod from its node subject to certain policies and safety constraints. This is a subresource of Pod. A request to cause such an eviction is created by POSTing to .../pods/<pod name>/evictions.",
|
"": "Eviction evicts a pod from its node subject to certain policies and safety constraints. This is a subresource of Pod. A request to cause such an eviction is created by POSTing to .../pods/<pod name>/evictions.",
|
||||||
"metadata": "ObjectMeta describes the pod that is being evicted.",
|
"metadata": "ObjectMeta describes the pod that is being evicted.",
|
||||||
|
@ -65,36 +37,6 @@ func (Eviction) SwaggerDoc() map[string]string {
|
||||||
return map_Eviction
|
return map_Eviction
|
||||||
}
|
}
|
||||||
|
|
||||||
var map_FSGroupStrategyOptions = map[string]string{
|
|
||||||
"": "FSGroupStrategyOptions defines the strategy type and options used to create the strategy.",
|
|
||||||
"rule": "rule is the strategy that will dictate what FSGroup is used in the SecurityContext.",
|
|
||||||
"ranges": "ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.",
|
|
||||||
}
|
|
||||||
|
|
||||||
func (FSGroupStrategyOptions) SwaggerDoc() map[string]string {
|
|
||||||
return map_FSGroupStrategyOptions
|
|
||||||
}
|
|
||||||
|
|
||||||
var map_HostPortRange = map[string]string{
|
|
||||||
"": "HostPortRange defines a range of host ports that will be enabled by a policy for pods to use. It requires both the start and end to be defined.",
|
|
||||||
"min": "min is the start of the range, inclusive.",
|
|
||||||
"max": "max is the end of the range, inclusive.",
|
|
||||||
}
|
|
||||||
|
|
||||||
func (HostPortRange) SwaggerDoc() map[string]string {
|
|
||||||
return map_HostPortRange
|
|
||||||
}
|
|
||||||
|
|
||||||
var map_IDRange = map[string]string{
|
|
||||||
"": "IDRange provides a min/max of an allowed range of IDs.",
|
|
||||||
"min": "min is the start of the range, inclusive.",
|
|
||||||
"max": "max is the end of the range, inclusive.",
|
|
||||||
}
|
|
||||||
|
|
||||||
func (IDRange) SwaggerDoc() map[string]string {
|
|
||||||
return map_IDRange
|
|
||||||
}
|
|
||||||
|
|
||||||
var map_PodDisruptionBudget = map[string]string{
|
var map_PodDisruptionBudget = map[string]string{
|
||||||
"": "PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods",
|
"": "PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods",
|
||||||
"metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata",
|
"metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata",
|
||||||
|
@ -143,106 +85,4 @@ func (PodDisruptionBudgetStatus) SwaggerDoc() map[string]string {
|
||||||
return map_PodDisruptionBudgetStatus
|
return map_PodDisruptionBudgetStatus
|
||||||
}
|
}
|
||||||
|
|
||||||
var map_PodSecurityPolicy = map[string]string{
|
|
||||||
"": "PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container. Deprecated in 1.21.",
|
|
||||||
"metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata",
|
|
||||||
"spec": "spec defines the policy enforced.",
|
|
||||||
}
|
|
||||||
|
|
||||||
func (PodSecurityPolicy) SwaggerDoc() map[string]string {
|
|
||||||
return map_PodSecurityPolicy
|
|
||||||
}
|
|
||||||
|
|
||||||
var map_PodSecurityPolicyList = map[string]string{
|
|
||||||
"": "PodSecurityPolicyList is a list of PodSecurityPolicy objects.",
|
|
||||||
"metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata",
|
|
||||||
"items": "items is a list of schema objects.",
|
|
||||||
}
|
|
||||||
|
|
||||||
func (PodSecurityPolicyList) SwaggerDoc() map[string]string {
|
|
||||||
return map_PodSecurityPolicyList
|
|
||||||
}
|
|
||||||
|
|
||||||
var map_PodSecurityPolicySpec = map[string]string{
|
|
||||||
"": "PodSecurityPolicySpec defines the policy enforced.",
|
|
||||||
"privileged": "privileged determines if a pod can request to be run as privileged.",
|
|
||||||
"defaultAddCapabilities": "defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.",
|
|
||||||
"requiredDropCapabilities": "requiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added.",
|
|
||||||
"allowedCapabilities": "allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.",
|
|
||||||
"volumes": "volumes is an allowlist of volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.",
|
|
||||||
"hostNetwork": "hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.",
|
|
||||||
"hostPorts": "hostPorts determines which host port ranges are allowed to be exposed.",
|
|
||||||
"hostPID": "hostPID determines if the policy allows the use of HostPID in the pod spec.",
|
|
||||||
"hostIPC": "hostIPC determines if the policy allows the use of HostIPC in the pod spec.",
|
|
||||||
"seLinux": "seLinux is the strategy that will dictate the allowable labels that may be set.",
|
|
||||||
"runAsUser": "runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.",
|
|
||||||
"runAsGroup": "RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. If this field is omitted, the pod's RunAsGroup can take any value. This field requires the RunAsGroup feature gate to be enabled.",
|
|
||||||
"supplementalGroups": "supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.",
|
|
||||||
"fsGroup": "fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.",
|
|
||||||
"readOnlyRootFilesystem": "readOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.",
|
|
||||||
"defaultAllowPrivilegeEscalation": "defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.",
|
|
||||||
"allowPrivilegeEscalation": "allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.",
|
|
||||||
"allowedHostPaths": "allowedHostPaths is an allowlist of host paths. Empty indicates that all host paths may be used.",
|
|
||||||
"allowedFlexVolumes": "allowedFlexVolumes is an allowlist of Flexvolumes. Empty or nil indicates that all Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.",
|
|
||||||
"allowedCSIDrivers": "AllowedCSIDrivers is an allowlist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. An empty value indicates that any CSI driver can be used for inline ephemeral volumes.",
|
|
||||||
"allowedUnsafeSysctls": "allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to allowlist all allowed unsafe sysctls explicitly to avoid rejection.\n\nExamples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.",
|
|
||||||
"forbiddenSysctls": "forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n\nExamples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.",
|
|
||||||
"allowedProcMountTypes": "AllowedProcMountTypes is an allowlist of allowed ProcMountTypes. Empty or nil indicates that only the DefaultProcMountType may be used. This requires the ProcMountType feature flag to be enabled.",
|
|
||||||
"runtimeClass": "runtimeClass is the strategy that will dictate the allowable RuntimeClasses for a pod. If this field is omitted, the pod's runtimeClassName field is unrestricted. Enforcement of this field depends on the RuntimeClass feature gate being enabled.",
|
|
||||||
}
|
|
||||||
|
|
||||||
func (PodSecurityPolicySpec) SwaggerDoc() map[string]string {
|
|
||||||
return map_PodSecurityPolicySpec
|
|
||||||
}
|
|
||||||
|
|
||||||
var map_RunAsGroupStrategyOptions = map[string]string{
|
|
||||||
"": "RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy.",
|
|
||||||
"rule": "rule is the strategy that will dictate the allowable RunAsGroup values that may be set.",
|
|
||||||
"ranges": "ranges are the allowed ranges of gids that may be used. If you would like to force a single gid then supply a single range with the same start and end. Required for MustRunAs.",
|
|
||||||
}
|
|
||||||
|
|
||||||
func (RunAsGroupStrategyOptions) SwaggerDoc() map[string]string {
|
|
||||||
return map_RunAsGroupStrategyOptions
|
|
||||||
}
|
|
||||||
|
|
||||||
var map_RunAsUserStrategyOptions = map[string]string{
|
|
||||||
"": "RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy.",
|
|
||||||
"rule": "rule is the strategy that will dictate the allowable RunAsUser values that may be set.",
|
|
||||||
"ranges": "ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.",
|
|
||||||
}
|
|
||||||
|
|
||||||
func (RunAsUserStrategyOptions) SwaggerDoc() map[string]string {
|
|
||||||
return map_RunAsUserStrategyOptions
|
|
||||||
}
|
|
||||||
|
|
||||||
var map_RuntimeClassStrategyOptions = map[string]string{
|
|
||||||
"": "RuntimeClassStrategyOptions define the strategy that will dictate the allowable RuntimeClasses for a pod.",
|
|
||||||
"allowedRuntimeClassNames": "allowedRuntimeClassNames is an allowlist of RuntimeClass names that may be specified on a pod. A value of \"*\" means that any RuntimeClass name is allowed, and must be the only item in the list. An empty list requires the RuntimeClassName field to be unset.",
|
|
||||||
"defaultRuntimeClassName": "defaultRuntimeClassName is the default RuntimeClassName to set on the pod. The default MUST be allowed by the allowedRuntimeClassNames list. A value of nil does not mutate the Pod.",
|
|
||||||
}
|
|
||||||
|
|
||||||
func (RuntimeClassStrategyOptions) SwaggerDoc() map[string]string {
|
|
||||||
return map_RuntimeClassStrategyOptions
|
|
||||||
}
|
|
||||||
|
|
||||||
var map_SELinuxStrategyOptions = map[string]string{
|
|
||||||
"": "SELinuxStrategyOptions defines the strategy type and any options used to create the strategy.",
|
|
||||||
"rule": "rule is the strategy that will dictate the allowable labels that may be set.",
|
|
||||||
"seLinuxOptions": "seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/",
|
|
||||||
}
|
|
||||||
|
|
||||||
func (SELinuxStrategyOptions) SwaggerDoc() map[string]string {
|
|
||||||
return map_SELinuxStrategyOptions
|
|
||||||
}
|
|
||||||
|
|
||||||
var map_SupplementalGroupsStrategyOptions = map[string]string{
|
|
||||||
"": "SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy.",
|
|
||||||
"rule": "rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.",
|
|
||||||
"ranges": "ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.",
|
|
||||||
}
|
|
||||||
|
|
||||||
func (SupplementalGroupsStrategyOptions) SwaggerDoc() map[string]string {
|
|
||||||
return map_SupplementalGroupsStrategyOptions
|
|
||||||
}
|
|
||||||
|
|
||||||
// AUTO-GENERATED FUNCTIONS END HERE
|
// AUTO-GENERATED FUNCTIONS END HERE
|
||||||
|
|
|
@ -22,60 +22,11 @@ limitations under the License.
|
||||||
package v1beta1
|
package v1beta1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
corev1 "k8s.io/api/core/v1"
|
|
||||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||||
intstr "k8s.io/apimachinery/pkg/util/intstr"
|
intstr "k8s.io/apimachinery/pkg/util/intstr"
|
||||||
)
|
)
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *AllowedCSIDriver) DeepCopyInto(out *AllowedCSIDriver) {
|
|
||||||
*out = *in
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowedCSIDriver.
|
|
||||||
func (in *AllowedCSIDriver) DeepCopy() *AllowedCSIDriver {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(AllowedCSIDriver)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *AllowedFlexVolume) DeepCopyInto(out *AllowedFlexVolume) {
|
|
||||||
*out = *in
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowedFlexVolume.
|
|
||||||
func (in *AllowedFlexVolume) DeepCopy() *AllowedFlexVolume {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(AllowedFlexVolume)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *AllowedHostPath) DeepCopyInto(out *AllowedHostPath) {
|
|
||||||
*out = *in
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowedHostPath.
|
|
||||||
func (in *AllowedHostPath) DeepCopy() *AllowedHostPath {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(AllowedHostPath)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *Eviction) DeepCopyInto(out *Eviction) {
|
func (in *Eviction) DeepCopyInto(out *Eviction) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
@ -107,59 +58,6 @@ func (in *Eviction) DeepCopyObject() runtime.Object {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *FSGroupStrategyOptions) DeepCopyInto(out *FSGroupStrategyOptions) {
|
|
||||||
*out = *in
|
|
||||||
if in.Ranges != nil {
|
|
||||||
in, out := &in.Ranges, &out.Ranges
|
|
||||||
*out = make([]IDRange, len(*in))
|
|
||||||
copy(*out, *in)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FSGroupStrategyOptions.
|
|
||||||
func (in *FSGroupStrategyOptions) DeepCopy() *FSGroupStrategyOptions {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(FSGroupStrategyOptions)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *HostPortRange) DeepCopyInto(out *HostPortRange) {
|
|
||||||
*out = *in
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HostPortRange.
|
|
||||||
func (in *HostPortRange) DeepCopy() *HostPortRange {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(HostPortRange)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *IDRange) DeepCopyInto(out *IDRange) {
|
|
||||||
*out = *in
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IDRange.
|
|
||||||
func (in *IDRange) DeepCopy() *IDRange {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(IDRange)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *PodDisruptionBudget) DeepCopyInto(out *PodDisruptionBudget) {
|
func (in *PodDisruptionBudget) DeepCopyInto(out *PodDisruptionBudget) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
@ -286,268 +184,3 @@ func (in *PodDisruptionBudgetStatus) DeepCopy() *PodDisruptionBudgetStatus {
|
||||||
in.DeepCopyInto(out)
|
in.DeepCopyInto(out)
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *PodSecurityPolicy) DeepCopyInto(out *PodSecurityPolicy) {
|
|
||||||
*out = *in
|
|
||||||
out.TypeMeta = in.TypeMeta
|
|
||||||
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
|
|
||||||
in.Spec.DeepCopyInto(&out.Spec)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSecurityPolicy.
|
|
||||||
func (in *PodSecurityPolicy) DeepCopy() *PodSecurityPolicy {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(PodSecurityPolicy)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
|
||||||
func (in *PodSecurityPolicy) DeepCopyObject() runtime.Object {
|
|
||||||
if c := in.DeepCopy(); c != nil {
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *PodSecurityPolicyList) DeepCopyInto(out *PodSecurityPolicyList) {
|
|
||||||
*out = *in
|
|
||||||
out.TypeMeta = in.TypeMeta
|
|
||||||
in.ListMeta.DeepCopyInto(&out.ListMeta)
|
|
||||||
if in.Items != nil {
|
|
||||||
in, out := &in.Items, &out.Items
|
|
||||||
*out = make([]PodSecurityPolicy, len(*in))
|
|
||||||
for i := range *in {
|
|
||||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSecurityPolicyList.
|
|
||||||
func (in *PodSecurityPolicyList) DeepCopy() *PodSecurityPolicyList {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(PodSecurityPolicyList)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
|
||||||
func (in *PodSecurityPolicyList) DeepCopyObject() runtime.Object {
|
|
||||||
if c := in.DeepCopy(); c != nil {
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *PodSecurityPolicySpec) DeepCopyInto(out *PodSecurityPolicySpec) {
|
|
||||||
*out = *in
|
|
||||||
if in.DefaultAddCapabilities != nil {
|
|
||||||
in, out := &in.DefaultAddCapabilities, &out.DefaultAddCapabilities
|
|
||||||
*out = make([]corev1.Capability, len(*in))
|
|
||||||
copy(*out, *in)
|
|
||||||
}
|
|
||||||
if in.RequiredDropCapabilities != nil {
|
|
||||||
in, out := &in.RequiredDropCapabilities, &out.RequiredDropCapabilities
|
|
||||||
*out = make([]corev1.Capability, len(*in))
|
|
||||||
copy(*out, *in)
|
|
||||||
}
|
|
||||||
if in.AllowedCapabilities != nil {
|
|
||||||
in, out := &in.AllowedCapabilities, &out.AllowedCapabilities
|
|
||||||
*out = make([]corev1.Capability, len(*in))
|
|
||||||
copy(*out, *in)
|
|
||||||
}
|
|
||||||
if in.Volumes != nil {
|
|
||||||
in, out := &in.Volumes, &out.Volumes
|
|
||||||
*out = make([]FSType, len(*in))
|
|
||||||
copy(*out, *in)
|
|
||||||
}
|
|
||||||
if in.HostPorts != nil {
|
|
||||||
in, out := &in.HostPorts, &out.HostPorts
|
|
||||||
*out = make([]HostPortRange, len(*in))
|
|
||||||
copy(*out, *in)
|
|
||||||
}
|
|
||||||
in.SELinux.DeepCopyInto(&out.SELinux)
|
|
||||||
in.RunAsUser.DeepCopyInto(&out.RunAsUser)
|
|
||||||
if in.RunAsGroup != nil {
|
|
||||||
in, out := &in.RunAsGroup, &out.RunAsGroup
|
|
||||||
*out = new(RunAsGroupStrategyOptions)
|
|
||||||
(*in).DeepCopyInto(*out)
|
|
||||||
}
|
|
||||||
in.SupplementalGroups.DeepCopyInto(&out.SupplementalGroups)
|
|
||||||
in.FSGroup.DeepCopyInto(&out.FSGroup)
|
|
||||||
if in.DefaultAllowPrivilegeEscalation != nil {
|
|
||||||
in, out := &in.DefaultAllowPrivilegeEscalation, &out.DefaultAllowPrivilegeEscalation
|
|
||||||
*out = new(bool)
|
|
||||||
**out = **in
|
|
||||||
}
|
|
||||||
if in.AllowPrivilegeEscalation != nil {
|
|
||||||
in, out := &in.AllowPrivilegeEscalation, &out.AllowPrivilegeEscalation
|
|
||||||
*out = new(bool)
|
|
||||||
**out = **in
|
|
||||||
}
|
|
||||||
if in.AllowedHostPaths != nil {
|
|
||||||
in, out := &in.AllowedHostPaths, &out.AllowedHostPaths
|
|
||||||
*out = make([]AllowedHostPath, len(*in))
|
|
||||||
copy(*out, *in)
|
|
||||||
}
|
|
||||||
if in.AllowedFlexVolumes != nil {
|
|
||||||
in, out := &in.AllowedFlexVolumes, &out.AllowedFlexVolumes
|
|
||||||
*out = make([]AllowedFlexVolume, len(*in))
|
|
||||||
copy(*out, *in)
|
|
||||||
}
|
|
||||||
if in.AllowedCSIDrivers != nil {
|
|
||||||
in, out := &in.AllowedCSIDrivers, &out.AllowedCSIDrivers
|
|
||||||
*out = make([]AllowedCSIDriver, len(*in))
|
|
||||||
copy(*out, *in)
|
|
||||||
}
|
|
||||||
if in.AllowedUnsafeSysctls != nil {
|
|
||||||
in, out := &in.AllowedUnsafeSysctls, &out.AllowedUnsafeSysctls
|
|
||||||
*out = make([]string, len(*in))
|
|
||||||
copy(*out, *in)
|
|
||||||
}
|
|
||||||
if in.ForbiddenSysctls != nil {
|
|
||||||
in, out := &in.ForbiddenSysctls, &out.ForbiddenSysctls
|
|
||||||
*out = make([]string, len(*in))
|
|
||||||
copy(*out, *in)
|
|
||||||
}
|
|
||||||
if in.AllowedProcMountTypes != nil {
|
|
||||||
in, out := &in.AllowedProcMountTypes, &out.AllowedProcMountTypes
|
|
||||||
*out = make([]corev1.ProcMountType, len(*in))
|
|
||||||
copy(*out, *in)
|
|
||||||
}
|
|
||||||
if in.RuntimeClass != nil {
|
|
||||||
in, out := &in.RuntimeClass, &out.RuntimeClass
|
|
||||||
*out = new(RuntimeClassStrategyOptions)
|
|
||||||
(*in).DeepCopyInto(*out)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSecurityPolicySpec.
|
|
||||||
func (in *PodSecurityPolicySpec) DeepCopy() *PodSecurityPolicySpec {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(PodSecurityPolicySpec)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *RunAsGroupStrategyOptions) DeepCopyInto(out *RunAsGroupStrategyOptions) {
|
|
||||||
*out = *in
|
|
||||||
if in.Ranges != nil {
|
|
||||||
in, out := &in.Ranges, &out.Ranges
|
|
||||||
*out = make([]IDRange, len(*in))
|
|
||||||
copy(*out, *in)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RunAsGroupStrategyOptions.
|
|
||||||
func (in *RunAsGroupStrategyOptions) DeepCopy() *RunAsGroupStrategyOptions {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(RunAsGroupStrategyOptions)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *RunAsUserStrategyOptions) DeepCopyInto(out *RunAsUserStrategyOptions) {
|
|
||||||
*out = *in
|
|
||||||
if in.Ranges != nil {
|
|
||||||
in, out := &in.Ranges, &out.Ranges
|
|
||||||
*out = make([]IDRange, len(*in))
|
|
||||||
copy(*out, *in)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RunAsUserStrategyOptions.
|
|
||||||
func (in *RunAsUserStrategyOptions) DeepCopy() *RunAsUserStrategyOptions {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(RunAsUserStrategyOptions)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *RuntimeClassStrategyOptions) DeepCopyInto(out *RuntimeClassStrategyOptions) {
|
|
||||||
*out = *in
|
|
||||||
if in.AllowedRuntimeClassNames != nil {
|
|
||||||
in, out := &in.AllowedRuntimeClassNames, &out.AllowedRuntimeClassNames
|
|
||||||
*out = make([]string, len(*in))
|
|
||||||
copy(*out, *in)
|
|
||||||
}
|
|
||||||
if in.DefaultRuntimeClassName != nil {
|
|
||||||
in, out := &in.DefaultRuntimeClassName, &out.DefaultRuntimeClassName
|
|
||||||
*out = new(string)
|
|
||||||
**out = **in
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RuntimeClassStrategyOptions.
|
|
||||||
func (in *RuntimeClassStrategyOptions) DeepCopy() *RuntimeClassStrategyOptions {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(RuntimeClassStrategyOptions)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *SELinuxStrategyOptions) DeepCopyInto(out *SELinuxStrategyOptions) {
|
|
||||||
*out = *in
|
|
||||||
if in.SELinuxOptions != nil {
|
|
||||||
in, out := &in.SELinuxOptions, &out.SELinuxOptions
|
|
||||||
*out = new(corev1.SELinuxOptions)
|
|
||||||
**out = **in
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SELinuxStrategyOptions.
|
|
||||||
func (in *SELinuxStrategyOptions) DeepCopy() *SELinuxStrategyOptions {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(SELinuxStrategyOptions)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
|
||||||
func (in *SupplementalGroupsStrategyOptions) DeepCopyInto(out *SupplementalGroupsStrategyOptions) {
|
|
||||||
*out = *in
|
|
||||||
if in.Ranges != nil {
|
|
||||||
in, out := &in.Ranges, &out.Ranges
|
|
||||||
*out = make([]IDRange, len(*in))
|
|
||||||
copy(*out, *in)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SupplementalGroupsStrategyOptions.
|
|
||||||
func (in *SupplementalGroupsStrategyOptions) DeepCopy() *SupplementalGroupsStrategyOptions {
|
|
||||||
if in == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
out := new(SupplementalGroupsStrategyOptions)
|
|
||||||
in.DeepCopyInto(out)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
|
|
|
@ -90,39 +90,3 @@ func (in *PodDisruptionBudgetList) APILifecycleReplacement() schema.GroupVersion
|
||||||
func (in *PodDisruptionBudgetList) APILifecycleRemoved() (major, minor int) {
|
func (in *PodDisruptionBudgetList) APILifecycleRemoved() (major, minor int) {
|
||||||
return 1, 25
|
return 1, 25
|
||||||
}
|
}
|
||||||
|
|
||||||
// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go.
|
|
||||||
func (in *PodSecurityPolicy) APILifecycleIntroduced() (major, minor int) {
|
|
||||||
return 1, 10
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor.
|
|
||||||
func (in *PodSecurityPolicy) APILifecycleDeprecated() (major, minor int) {
|
|
||||||
return 1, 21
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
|
||||||
func (in *PodSecurityPolicy) APILifecycleRemoved() (major, minor int) {
|
|
||||||
return 1, 25
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go.
|
|
||||||
func (in *PodSecurityPolicyList) APILifecycleIntroduced() (major, minor int) {
|
|
||||||
return 1, 10
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor.
|
|
||||||
func (in *PodSecurityPolicyList) APILifecycleDeprecated() (major, minor int) {
|
|
||||||
return 1, 21
|
|
||||||
}
|
|
||||||
|
|
||||||
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
|
||||||
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
|
||||||
func (in *PodSecurityPolicyList) APILifecycleRemoved() (major, minor int) {
|
|
||||||
return 1, 25
|
|
||||||
}
|
|
||||||
|
|
|
@ -107,7 +107,7 @@ message PodSchedulingContextSpec {
|
||||||
// that suits all pending resources. This may get increased in the
|
// that suits all pending resources. This may get increased in the
|
||||||
// future, but not reduced.
|
// future, but not reduced.
|
||||||
//
|
//
|
||||||
// +listType=set
|
// +listType=atomic
|
||||||
// +optional
|
// +optional
|
||||||
repeated string potentialNodes = 2;
|
repeated string potentialNodes = 2;
|
||||||
}
|
}
|
||||||
|
@ -208,7 +208,7 @@ message ResourceClaimSchedulingStatus {
|
||||||
// PodSchedulingSpec.PotentialNodes. This may get increased in the
|
// PodSchedulingSpec.PotentialNodes. This may get increased in the
|
||||||
// future, but not reduced.
|
// future, but not reduced.
|
||||||
//
|
//
|
||||||
// +listType=set
|
// +listType=atomic
|
||||||
// +optional
|
// +optional
|
||||||
repeated string unsuitableNodes = 2;
|
repeated string unsuitableNodes = 2;
|
||||||
}
|
}
|
||||||
|
|
|
@ -248,7 +248,7 @@ type PodSchedulingContextSpec struct {
|
||||||
// that suits all pending resources. This may get increased in the
|
// that suits all pending resources. This may get increased in the
|
||||||
// future, but not reduced.
|
// future, but not reduced.
|
||||||
//
|
//
|
||||||
// +listType=set
|
// +listType=atomic
|
||||||
// +optional
|
// +optional
|
||||||
PotentialNodes []string `json:"potentialNodes,omitempty" protobuf:"bytes,2,opt,name=potentialNodes"`
|
PotentialNodes []string `json:"potentialNodes,omitempty" protobuf:"bytes,2,opt,name=potentialNodes"`
|
||||||
}
|
}
|
||||||
|
@ -283,7 +283,7 @@ type ResourceClaimSchedulingStatus struct {
|
||||||
// PodSchedulingSpec.PotentialNodes. This may get increased in the
|
// PodSchedulingSpec.PotentialNodes. This may get increased in the
|
||||||
// future, but not reduced.
|
// future, but not reduced.
|
||||||
//
|
//
|
||||||
// +listType=set
|
// +listType=atomic
|
||||||
// +optional
|
// +optional
|
||||||
UnsuitableNodes []string `json:"unsuitableNodes,omitempty" protobuf:"bytes,2,opt,name=unsuitableNodes"`
|
UnsuitableNodes []string `json:"unsuitableNodes,omitempty" protobuf:"bytes,2,opt,name=unsuitableNodes"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,7 +88,7 @@ message CSIDriverSpec {
|
||||||
// If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls.
|
// If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls.
|
||||||
// The CSI driver is responsible for parsing and validating the information passed in as VolumeContext.
|
// The CSI driver is responsible for parsing and validating the information passed in as VolumeContext.
|
||||||
//
|
//
|
||||||
// The following VolumeConext will be passed if podInfoOnMount is set to true.
|
// The following VolumeContext will be passed if podInfoOnMount is set to true.
|
||||||
// This list might grow, but the prefix will be used.
|
// This list might grow, but the prefix will be used.
|
||||||
// "csi.storage.k8s.io/pod.name": pod.Name
|
// "csi.storage.k8s.io/pod.name": pod.Name
|
||||||
// "csi.storage.k8s.io/pod.namespace": pod.Namespace
|
// "csi.storage.k8s.io/pod.namespace": pod.Namespace
|
||||||
|
|
|
@ -291,7 +291,7 @@ type CSIDriverSpec struct {
|
||||||
// If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls.
|
// If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls.
|
||||||
// The CSI driver is responsible for parsing and validating the information passed in as VolumeContext.
|
// The CSI driver is responsible for parsing and validating the information passed in as VolumeContext.
|
||||||
//
|
//
|
||||||
// The following VolumeConext will be passed if podInfoOnMount is set to true.
|
// The following VolumeContext will be passed if podInfoOnMount is set to true.
|
||||||
// This list might grow, but the prefix will be used.
|
// This list might grow, but the prefix will be used.
|
||||||
// "csi.storage.k8s.io/pod.name": pod.Name
|
// "csi.storage.k8s.io/pod.name": pod.Name
|
||||||
// "csi.storage.k8s.io/pod.namespace": pod.Namespace
|
// "csi.storage.k8s.io/pod.namespace": pod.Namespace
|
||||||
|
|
|
@ -50,7 +50,7 @@ func (CSIDriverList) SwaggerDoc() map[string]string {
|
||||||
var map_CSIDriverSpec = map[string]string{
|
var map_CSIDriverSpec = map[string]string{
|
||||||
"": "CSIDriverSpec is the specification of a CSIDriver.",
|
"": "CSIDriverSpec is the specification of a CSIDriver.",
|
||||||
"attachRequired": "attachRequired indicates this CSI volume driver requires an attach operation (because it implements the CSI ControllerPublishVolume() method), and that the Kubernetes attach detach controller should call the attach volume interface which checks the volumeattachment status and waits until the volume is attached before proceeding to mounting. The CSI external-attacher coordinates with CSI volume driver and updates the volumeattachment status when the attach operation is complete. If the CSIDriverRegistry feature gate is enabled and the value is specified to false, the attach operation will be skipped. Otherwise the attach operation will be called.\n\nThis field is immutable.",
|
"attachRequired": "attachRequired indicates this CSI volume driver requires an attach operation (because it implements the CSI ControllerPublishVolume() method), and that the Kubernetes attach detach controller should call the attach volume interface which checks the volumeattachment status and waits until the volume is attached before proceeding to mounting. The CSI external-attacher coordinates with CSI volume driver and updates the volumeattachment status when the attach operation is complete. If the CSIDriverRegistry feature gate is enabled and the value is specified to false, the attach operation will be skipped. Otherwise the attach operation will be called.\n\nThis field is immutable.",
|
||||||
"podInfoOnMount": "podInfoOnMount indicates this CSI volume driver requires additional pod information (like podName, podUID, etc.) during mount operations, if set to true. If set to false, pod information will not be passed on mount. Default is false.\n\nThe CSI driver specifies podInfoOnMount as part of driver deployment. If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls. The CSI driver is responsible for parsing and validating the information passed in as VolumeContext.\n\nThe following VolumeConext will be passed if podInfoOnMount is set to true. This list might grow, but the prefix will be used. \"csi.storage.k8s.io/pod.name\": pod.Name \"csi.storage.k8s.io/pod.namespace\": pod.Namespace \"csi.storage.k8s.io/pod.uid\": string(pod.UID) \"csi.storage.k8s.io/ephemeral\": \"true\" if the volume is an ephemeral inline volume\n defined by a CSIVolumeSource, otherwise \"false\"\n\n\"csi.storage.k8s.io/ephemeral\" is a new feature in Kubernetes 1.16. It is only required for drivers which support both the \"Persistent\" and \"Ephemeral\" VolumeLifecycleMode. Other drivers can leave pod info disabled and/or ignore this field. As Kubernetes 1.15 doesn't support this field, drivers can only support one mode when deployed on such a cluster and the deployment determines which mode that is, for example via a command line parameter of the driver.\n\nThis field is immutable.",
|
"podInfoOnMount": "podInfoOnMount indicates this CSI volume driver requires additional pod information (like podName, podUID, etc.) during mount operations, if set to true. If set to false, pod information will not be passed on mount. Default is false.\n\nThe CSI driver specifies podInfoOnMount as part of driver deployment. If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls. The CSI driver is responsible for parsing and validating the information passed in as VolumeContext.\n\nThe following VolumeContext will be passed if podInfoOnMount is set to true. This list might grow, but the prefix will be used. \"csi.storage.k8s.io/pod.name\": pod.Name \"csi.storage.k8s.io/pod.namespace\": pod.Namespace \"csi.storage.k8s.io/pod.uid\": string(pod.UID) \"csi.storage.k8s.io/ephemeral\": \"true\" if the volume is an ephemeral inline volume\n defined by a CSIVolumeSource, otherwise \"false\"\n\n\"csi.storage.k8s.io/ephemeral\" is a new feature in Kubernetes 1.16. It is only required for drivers which support both the \"Persistent\" and \"Ephemeral\" VolumeLifecycleMode. Other drivers can leave pod info disabled and/or ignore this field. As Kubernetes 1.15 doesn't support this field, drivers can only support one mode when deployed on such a cluster and the deployment determines which mode that is, for example via a command line parameter of the driver.\n\nThis field is immutable.",
|
||||||
"volumeLifecycleModes": "volumeLifecycleModes defines what kind of volumes this CSI volume driver supports. The default if the list is empty is \"Persistent\", which is the usage defined by the CSI specification and implemented in Kubernetes via the usual PV/PVC mechanism.\n\nThe other mode is \"Ephemeral\". In this mode, volumes are defined inline inside the pod spec with CSIVolumeSource and their lifecycle is tied to the lifecycle of that pod. A driver has to be aware of this because it is only going to get a NodePublishVolume call for such a volume.\n\nFor more information about implementing this mode, see https://kubernetes-csi.github.io/docs/ephemeral-local-volumes.html A driver can support one or more of these modes and more modes may be added in the future.\n\nThis field is beta. This field is immutable.",
|
"volumeLifecycleModes": "volumeLifecycleModes defines what kind of volumes this CSI volume driver supports. The default if the list is empty is \"Persistent\", which is the usage defined by the CSI specification and implemented in Kubernetes via the usual PV/PVC mechanism.\n\nThe other mode is \"Ephemeral\". In this mode, volumes are defined inline inside the pod spec with CSIVolumeSource and their lifecycle is tied to the lifecycle of that pod. A driver has to be aware of this because it is only going to get a NodePublishVolume call for such a volume.\n\nFor more information about implementing this mode, see https://kubernetes-csi.github.io/docs/ephemeral-local-volumes.html A driver can support one or more of these modes and more modes may be added in the future.\n\nThis field is beta. This field is immutable.",
|
||||||
"storageCapacity": "storageCapacity indicates that the CSI volume driver wants pod scheduling to consider the storage capacity that the driver deployment will report by creating CSIStorageCapacity objects with capacity information, if set to true.\n\nThe check can be enabled immediately when deploying a driver. In that case, provisioning new volumes with late binding will pause until the driver deployment has published some suitable CSIStorageCapacity object.\n\nAlternatively, the driver can be deployed with the field unset or false and it can be flipped later when storage capacity information has been published.\n\nThis field was immutable in Kubernetes <= 1.22 and now is mutable.",
|
"storageCapacity": "storageCapacity indicates that the CSI volume driver wants pod scheduling to consider the storage capacity that the driver deployment will report by creating CSIStorageCapacity objects with capacity information, if set to true.\n\nThe check can be enabled immediately when deploying a driver. In that case, provisioning new volumes with late binding will pause until the driver deployment has published some suitable CSIStorageCapacity object.\n\nAlternatively, the driver can be deployed with the field unset or false and it can be flipped later when storage capacity information has been published.\n\nThis field was immutable in Kubernetes <= 1.22 and now is mutable.",
|
||||||
"fsGroupPolicy": "fsGroupPolicy defines if the underlying volume supports changing ownership and permission of the volume before being mounted. Refer to the specific FSGroupPolicy values for additional details.\n\nThis field is immutable.\n\nDefaults to ReadWriteOnceWithFSType, which will examine each volume to determine if Kubernetes should modify ownership and permissions of the volume. With the default policy the defined fsGroup will only be applied if a fstype is defined and the volume's access mode contains ReadWriteOnce.",
|
"fsGroupPolicy": "fsGroupPolicy defines if the underlying volume supports changing ownership and permission of the volume before being mounted. Refer to the specific FSGroupPolicy values for additional details.\n\nThis field is immutable.\n\nDefaults to ReadWriteOnceWithFSType, which will examine each volume to determine if Kubernetes should modify ownership and permissions of the volume. With the default policy the defined fsGroup will only be applied if a fstype is defined and the volume's access mode contains ReadWriteOnce.",
|
||||||
|
|
|
@ -243,10 +243,66 @@ func (m *VolumeAttachmentStatus) XXX_DiscardUnknown() {
|
||||||
|
|
||||||
var xxx_messageInfo_VolumeAttachmentStatus proto.InternalMessageInfo
|
var xxx_messageInfo_VolumeAttachmentStatus proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *VolumeAttributesClass) Reset() { *m = VolumeAttributesClass{} }
|
||||||
|
func (*VolumeAttributesClass) ProtoMessage() {}
|
||||||
|
func (*VolumeAttributesClass) Descriptor() ([]byte, []int) {
|
||||||
|
return fileDescriptor_10f856db1e670dc4, []int{7}
|
||||||
|
}
|
||||||
|
func (m *VolumeAttributesClass) XXX_Unmarshal(b []byte) error {
|
||||||
|
return m.Unmarshal(b)
|
||||||
|
}
|
||||||
|
func (m *VolumeAttributesClass) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
b = b[:cap(b)]
|
||||||
|
n, err := m.MarshalToSizedBuffer(b)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return b[:n], nil
|
||||||
|
}
|
||||||
|
func (m *VolumeAttributesClass) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_VolumeAttributesClass.Merge(m, src)
|
||||||
|
}
|
||||||
|
func (m *VolumeAttributesClass) XXX_Size() int {
|
||||||
|
return m.Size()
|
||||||
|
}
|
||||||
|
func (m *VolumeAttributesClass) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_VolumeAttributesClass.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_VolumeAttributesClass proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *VolumeAttributesClassList) Reset() { *m = VolumeAttributesClassList{} }
|
||||||
|
func (*VolumeAttributesClassList) ProtoMessage() {}
|
||||||
|
func (*VolumeAttributesClassList) Descriptor() ([]byte, []int) {
|
||||||
|
return fileDescriptor_10f856db1e670dc4, []int{8}
|
||||||
|
}
|
||||||
|
func (m *VolumeAttributesClassList) XXX_Unmarshal(b []byte) error {
|
||||||
|
return m.Unmarshal(b)
|
||||||
|
}
|
||||||
|
func (m *VolumeAttributesClassList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
b = b[:cap(b)]
|
||||||
|
n, err := m.MarshalToSizedBuffer(b)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return b[:n], nil
|
||||||
|
}
|
||||||
|
func (m *VolumeAttributesClassList) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_VolumeAttributesClassList.Merge(m, src)
|
||||||
|
}
|
||||||
|
func (m *VolumeAttributesClassList) XXX_Size() int {
|
||||||
|
return m.Size()
|
||||||
|
}
|
||||||
|
func (m *VolumeAttributesClassList) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_VolumeAttributesClassList.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_VolumeAttributesClassList proto.InternalMessageInfo
|
||||||
|
|
||||||
func (m *VolumeError) Reset() { *m = VolumeError{} }
|
func (m *VolumeError) Reset() { *m = VolumeError{} }
|
||||||
func (*VolumeError) ProtoMessage() {}
|
func (*VolumeError) ProtoMessage() {}
|
||||||
func (*VolumeError) Descriptor() ([]byte, []int) {
|
func (*VolumeError) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_10f856db1e670dc4, []int{7}
|
return fileDescriptor_10f856db1e670dc4, []int{9}
|
||||||
}
|
}
|
||||||
func (m *VolumeError) XXX_Unmarshal(b []byte) error {
|
func (m *VolumeError) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
|
@ -280,6 +336,9 @@ func init() {
|
||||||
proto.RegisterType((*VolumeAttachmentSpec)(nil), "k8s.io.api.storage.v1alpha1.VolumeAttachmentSpec")
|
proto.RegisterType((*VolumeAttachmentSpec)(nil), "k8s.io.api.storage.v1alpha1.VolumeAttachmentSpec")
|
||||||
proto.RegisterType((*VolumeAttachmentStatus)(nil), "k8s.io.api.storage.v1alpha1.VolumeAttachmentStatus")
|
proto.RegisterType((*VolumeAttachmentStatus)(nil), "k8s.io.api.storage.v1alpha1.VolumeAttachmentStatus")
|
||||||
proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.storage.v1alpha1.VolumeAttachmentStatus.AttachmentMetadataEntry")
|
proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.storage.v1alpha1.VolumeAttachmentStatus.AttachmentMetadataEntry")
|
||||||
|
proto.RegisterType((*VolumeAttributesClass)(nil), "k8s.io.api.storage.v1alpha1.VolumeAttributesClass")
|
||||||
|
proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.storage.v1alpha1.VolumeAttributesClass.ParametersEntry")
|
||||||
|
proto.RegisterType((*VolumeAttributesClassList)(nil), "k8s.io.api.storage.v1alpha1.VolumeAttributesClassList")
|
||||||
proto.RegisterType((*VolumeError)(nil), "k8s.io.api.storage.v1alpha1.VolumeError")
|
proto.RegisterType((*VolumeError)(nil), "k8s.io.api.storage.v1alpha1.VolumeError")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -288,65 +347,71 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
var fileDescriptor_10f856db1e670dc4 = []byte{
|
var fileDescriptor_10f856db1e670dc4 = []byte{
|
||||||
// 925 bytes of a gzipped FileDescriptorProto
|
// 1023 bytes of a gzipped FileDescriptorProto
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0x3f, 0x6f, 0x23, 0x45,
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0xcb, 0x6e, 0x23, 0x45,
|
||||||
0x14, 0xf7, 0xc6, 0xce, 0x9d, 0x6f, 0x1c, 0xc0, 0x37, 0x32, 0x87, 0xe5, 0x93, 0xd6, 0x91, 0x2b,
|
0x17, 0x4e, 0xe7, 0x32, 0xe3, 0xa9, 0xe4, 0xff, 0xc7, 0x53, 0xca, 0x0c, 0xc6, 0x23, 0xb5, 0x23,
|
||||||
0x83, 0xb8, 0x59, 0x72, 0x20, 0x74, 0xa2, 0xf3, 0x26, 0x29, 0x22, 0x92, 0x00, 0xe3, 0x08, 0x21,
|
0xaf, 0x0c, 0x62, 0xba, 0x49, 0x40, 0x68, 0x84, 0xc4, 0xc2, 0x9d, 0x64, 0x11, 0x91, 0x84, 0xa1,
|
||||||
0xa0, 0x60, 0xbc, 0x7e, 0xd8, 0x13, 0x7b, 0xff, 0x68, 0x67, 0x36, 0xc2, 0x54, 0x54, 0xd4, 0x74,
|
0x1c, 0x01, 0x02, 0x16, 0x94, 0xdb, 0x07, 0xbb, 0x62, 0xf7, 0x45, 0x55, 0xd5, 0x16, 0x66, 0xc5,
|
||||||
0x7c, 0x03, 0x3e, 0x4b, 0x0a, 0x24, 0x4e, 0x54, 0x57, 0x59, 0x64, 0xf9, 0x0e, 0x14, 0x34, 0xa0,
|
0x8a, 0x35, 0x3b, 0xde, 0x80, 0x67, 0xc9, 0x02, 0x89, 0xd1, 0xac, 0x66, 0x65, 0x91, 0x86, 0x67,
|
||||||
0x9d, 0x1d, 0xaf, 0x37, 0x5e, 0x27, 0xe7, 0x4b, 0x71, 0x9d, 0xdf, 0x9b, 0xf7, 0x7e, 0xbf, 0xf7,
|
0x60, 0xc1, 0x06, 0xd4, 0xd5, 0xe5, 0x76, 0xc7, 0x6d, 0x07, 0x27, 0x8b, 0xec, 0x5c, 0xe7, 0xf2,
|
||||||
0xdf, 0x8b, 0x0e, 0x26, 0xcf, 0x04, 0xe1, 0xbe, 0x35, 0x89, 0x06, 0x10, 0x7a, 0x20, 0x41, 0x58,
|
0x9d, 0xdb, 0x77, 0x4e, 0x27, 0xe8, 0xa0, 0xff, 0x5c, 0x58, 0x2c, 0xb0, 0xfb, 0x51, 0x1b, 0xb8,
|
||||||
0x17, 0xe0, 0x0d, 0xfd, 0xd0, 0xd2, 0x0f, 0x2c, 0xe0, 0x96, 0x90, 0x7e, 0xc8, 0x46, 0x60, 0x5d,
|
0x0f, 0x12, 0x84, 0x3d, 0x04, 0xbf, 0x13, 0x70, 0x5b, 0x2b, 0x68, 0xc8, 0x6c, 0x21, 0x03, 0x4e,
|
||||||
0xec, 0xb1, 0x69, 0x30, 0x66, 0x7b, 0xd6, 0x08, 0x3c, 0x08, 0x99, 0x84, 0x21, 0x09, 0x42, 0x5f,
|
0xbb, 0x60, 0x0f, 0x77, 0xe9, 0x20, 0xec, 0xd1, 0x5d, 0xbb, 0x0b, 0x3e, 0x70, 0x2a, 0xa1, 0x63,
|
||||||
0xfa, 0xf8, 0x71, 0x6a, 0x4c, 0x58, 0xc0, 0x89, 0x36, 0x26, 0x0b, 0xe3, 0xd6, 0x93, 0x11, 0x97,
|
0x85, 0x3c, 0x90, 0x01, 0x7e, 0x9a, 0x1a, 0x5b, 0x34, 0x64, 0x96, 0x36, 0xb6, 0x26, 0xc6, 0xd5,
|
||||||
0xe3, 0x68, 0x40, 0x1c, 0xdf, 0xb5, 0x46, 0xfe, 0xc8, 0xb7, 0x94, 0xcf, 0x20, 0xfa, 0x5e, 0x49,
|
0x67, 0x5d, 0x26, 0x7b, 0x51, 0xdb, 0x72, 0x03, 0xcf, 0xee, 0x06, 0xdd, 0xc0, 0x56, 0x3e, 0xed,
|
||||||
0x4a, 0x50, 0xbf, 0x52, 0xac, 0x56, 0x27, 0x47, 0xec, 0xf8, 0x61, 0xc2, 0xba, 0xca, 0xd7, 0xfa,
|
0xe8, 0x5b, 0xf5, 0x52, 0x0f, 0xf5, 0x2b, 0xc5, 0xaa, 0xd6, 0x73, 0x81, 0xdd, 0x80, 0x27, 0x51,
|
||||||
0x68, 0x69, 0xe3, 0x32, 0x67, 0xcc, 0x3d, 0x08, 0x67, 0x56, 0x30, 0x19, 0x29, 0xa7, 0x10, 0x84,
|
0x67, 0xe3, 0x55, 0xdf, 0x9f, 0xda, 0x78, 0xd4, 0xed, 0x31, 0x1f, 0xf8, 0xc8, 0x0e, 0xfb, 0x5d,
|
||||||
0x1f, 0x85, 0x0e, 0xbc, 0x92, 0x97, 0xb0, 0x5c, 0x90, 0x6c, 0x1d, 0x97, 0x75, 0x93, 0x57, 0x18,
|
0xe5, 0xc4, 0x41, 0x04, 0x11, 0x77, 0xe1, 0x46, 0x5e, 0xc2, 0xf6, 0x40, 0xd2, 0x79, 0xb1, 0xec,
|
||||||
0x79, 0x92, 0xbb, 0x45, 0x9a, 0x8f, 0x5f, 0xe6, 0x20, 0x9c, 0x31, 0xb8, 0x6c, 0xd5, 0xaf, 0xf3,
|
0x45, 0x5e, 0x3c, 0xf2, 0x25, 0xf3, 0x8a, 0x61, 0x3e, 0xf8, 0x2f, 0x07, 0xe1, 0xf6, 0xc0, 0xa3,
|
||||||
0x4f, 0x19, 0xe1, 0xfd, 0xfe, 0x51, 0x3f, 0xad, 0xdf, 0x3e, 0x0b, 0x98, 0xc3, 0xe5, 0x0c, 0x7f,
|
0xb3, 0x7e, 0xf5, 0xbf, 0xd6, 0x10, 0xde, 0x6f, 0x1d, 0xb5, 0xd2, 0xfe, 0xed, 0xd3, 0x90, 0xba,
|
||||||
0x87, 0xaa, 0x49, 0x68, 0x43, 0x26, 0x59, 0xd3, 0xd8, 0x35, 0xba, 0xb5, 0xa7, 0x1f, 0x90, 0x65,
|
0x4c, 0x8e, 0xf0, 0x37, 0xa8, 0x94, 0xa4, 0xd6, 0xa1, 0x92, 0x56, 0x8c, 0x1d, 0xa3, 0xb1, 0xb9,
|
||||||
0xb9, 0x33, 0x06, 0x12, 0x4c, 0x46, 0x89, 0x42, 0x90, 0xc4, 0x9a, 0x5c, 0xec, 0x91, 0xcf, 0x06,
|
0xf7, 0xae, 0x35, 0x6d, 0x77, 0x16, 0xc1, 0x0a, 0xfb, 0xdd, 0x44, 0x20, 0xac, 0xc4, 0xda, 0x1a,
|
||||||
0xe7, 0xe0, 0xc8, 0x13, 0x90, 0xcc, 0xc6, 0x97, 0xf3, 0x76, 0x29, 0x9e, 0xb7, 0xd1, 0x52, 0x47,
|
0xee, 0x5a, 0x9f, 0xb4, 0xcf, 0xc1, 0x95, 0x27, 0x20, 0xa9, 0x83, 0x2f, 0xc6, 0xb5, 0x95, 0x78,
|
||||||
0x33, 0x54, 0xcc, 0xd1, 0x8e, 0xe7, 0x0f, 0xe1, 0xcc, 0x0f, 0xfc, 0xa9, 0x3f, 0x9a, 0x35, 0xb7,
|
0x5c, 0x43, 0x53, 0x19, 0xc9, 0x50, 0x31, 0x43, 0x5b, 0x7e, 0xd0, 0x81, 0xb3, 0x20, 0x0c, 0x06,
|
||||||
0x14, 0xcb, 0x87, 0x9b, 0xb1, 0x1c, 0xb3, 0x01, 0x4c, 0xfb, 0x30, 0x05, 0x47, 0xfa, 0xa1, 0x5d,
|
0x41, 0x77, 0x54, 0x59, 0x55, 0x51, 0xde, 0x5b, 0x2e, 0xca, 0x31, 0x6d, 0xc3, 0xa0, 0x05, 0x03,
|
||||||
0x8f, 0xe7, 0xed, 0x9d, 0xd3, 0x1c, 0x18, 0xbd, 0x06, 0x8d, 0x0f, 0x50, 0x5d, 0xcf, 0xc7, 0xfe,
|
0x70, 0x65, 0xc0, 0x9d, 0x72, 0x3c, 0xae, 0x6d, 0x9d, 0xe6, 0xc0, 0xc8, 0x15, 0x68, 0x7c, 0x80,
|
||||||
0x94, 0x09, 0x71, 0xca, 0x5c, 0x68, 0x96, 0x77, 0x8d, 0xee, 0x03, 0xbb, 0xa9, 0x43, 0xac, 0xf7,
|
0xca, 0x9a, 0x1f, 0xfb, 0x03, 0x2a, 0xc4, 0x29, 0xf5, 0xa0, 0xb2, 0xb6, 0x63, 0x34, 0x1e, 0x38,
|
||||||
0x57, 0xde, 0x69, 0xc1, 0x03, 0x7f, 0x85, 0xaa, 0x8e, 0x2e, 0x4f, 0xb3, 0xa2, 0x82, 0x25, 0xb7,
|
0x15, 0x9d, 0x62, 0xb9, 0x35, 0xa3, 0x27, 0x05, 0x0f, 0xfc, 0x05, 0x2a, 0xb9, 0xba, 0x3d, 0x95,
|
||||||
0x05, 0x4b, 0x16, 0x13, 0x41, 0xbe, 0x88, 0x98, 0x27, 0xb9, 0x9c, 0xd9, 0x3b, 0xf1, 0xbc, 0x5d,
|
0x75, 0x95, 0xac, 0x75, 0x5d, 0xb2, 0xd6, 0x84, 0x11, 0xd6, 0xa7, 0x11, 0xf5, 0x25, 0x93, 0x23,
|
||||||
0x5d, 0x94, 0x98, 0x66, 0x68, 0x58, 0xa0, 0x87, 0x2e, 0xfb, 0x81, 0xbb, 0x91, 0xfb, 0xa5, 0x3f,
|
0x67, 0x2b, 0x1e, 0xd7, 0x4a, 0x93, 0x16, 0x93, 0x0c, 0x0d, 0x0b, 0xf4, 0xc8, 0xa3, 0xdf, 0x31,
|
||||||
0x8d, 0x5c, 0xe8, 0xf3, 0x1f, 0xa1, 0xb9, 0x7d, 0x27, 0x8a, 0xb7, 0xe3, 0x79, 0xfb, 0xe1, 0xc9,
|
0x2f, 0xf2, 0x3e, 0x0b, 0x06, 0x91, 0x07, 0x2d, 0xf6, 0x3d, 0x54, 0x36, 0x6e, 0x15, 0xe2, 0x71,
|
||||||
0x2a, 0x18, 0x2d, 0xe2, 0x77, 0x7e, 0x37, 0xd0, 0xa3, 0x62, 0xe3, 0x8f, 0xb9, 0x90, 0xf8, 0xdb,
|
0x3c, 0xae, 0x3d, 0x3a, 0x99, 0x05, 0x23, 0x45, 0xfc, 0xfa, 0xaf, 0x06, 0x7a, 0x52, 0x1c, 0xfc,
|
||||||
0x42, 0xf3, 0xc9, 0x86, 0x6d, 0xe1, 0x22, 0x6d, 0x7d, 0x5d, 0xd7, 0xb5, 0xba, 0xd0, 0xe4, 0x1a,
|
0x31, 0x13, 0x12, 0x7f, 0x5d, 0x18, 0xbe, 0xb5, 0xe4, 0x58, 0x98, 0x48, 0x47, 0x5f, 0xd6, 0x7d,
|
||||||
0x7f, 0x86, 0xb6, 0xb9, 0x04, 0x57, 0x34, 0xb7, 0x76, 0xcb, 0xdd, 0xda, 0x53, 0x8b, 0xdc, 0xb2,
|
0x2d, 0x4d, 0x24, 0xb9, 0xc1, 0x9f, 0xa1, 0x0d, 0x26, 0xc1, 0x13, 0x95, 0xd5, 0x9d, 0xb5, 0xc6,
|
||||||
0xc6, 0xa4, 0x18, 0xa1, 0xfd, 0x86, 0xc6, 0xde, 0x3e, 0x4a, 0x50, 0x68, 0x0a, 0xd6, 0xf9, 0x6d,
|
0xe6, 0x9e, 0x6d, 0x5d, 0xb3, 0xc6, 0x56, 0x31, 0x43, 0xe7, 0x7f, 0x1a, 0x7b, 0xe3, 0x28, 0x41,
|
||||||
0x0b, 0xd5, 0xd3, 0xec, 0x7a, 0x52, 0x32, 0x67, 0xec, 0x82, 0x27, 0x5f, 0xc3, 0x14, 0xf7, 0x51,
|
0x21, 0x29, 0x58, 0xfd, 0x97, 0x55, 0x54, 0x4e, 0xab, 0x6b, 0x4a, 0x49, 0xdd, 0x9e, 0x07, 0xbe,
|
||||||
0x45, 0x04, 0xe0, 0xe8, 0xe9, 0xdd, 0xbb, 0x35, 0x97, 0xd5, 0xf0, 0xfa, 0x01, 0x38, 0xf6, 0x8e,
|
0xbc, 0x03, 0x16, 0xb7, 0xd0, 0xba, 0x08, 0xc1, 0xd5, 0xec, 0xdd, 0xbd, 0xb6, 0x96, 0xd9, 0xf4,
|
||||||
0x86, 0xaf, 0x24, 0x12, 0x55, 0x60, 0xf8, 0x1b, 0x74, 0x4f, 0x48, 0x26, 0x23, 0xa1, 0xa6, 0xf4,
|
0x5a, 0x21, 0xb8, 0xce, 0x96, 0x86, 0x5f, 0x4f, 0x5e, 0x44, 0x81, 0xe1, 0xaf, 0xd0, 0x3d, 0x21,
|
||||||
0xfa, 0x52, 0x6c, 0x00, 0xab, 0x5c, 0xed, 0x37, 0x35, 0xf0, 0xbd, 0x54, 0xa6, 0x1a, 0xb2, 0x73,
|
0xa9, 0x8c, 0x84, 0x62, 0xe9, 0xd5, 0xa5, 0x58, 0x02, 0x56, 0xb9, 0x3a, 0xff, 0xd7, 0xc0, 0xf7,
|
||||||
0x69, 0xa0, 0xc6, 0xaa, 0xcb, 0x6b, 0xe8, 0x3a, 0xbd, 0xde, 0xf5, 0x27, 0xaf, 0x94, 0xd2, 0x0d,
|
0xd2, 0x37, 0xd1, 0x90, 0xf5, 0x0b, 0x03, 0x6d, 0xcf, 0xba, 0xdc, 0xc1, 0xd4, 0xc9, 0xd5, 0xa9,
|
||||||
0x3d, 0xff, 0xd3, 0x40, 0x8f, 0x0a, 0xd9, 0xab, 0x85, 0xc0, 0xc7, 0xa8, 0x11, 0x40, 0x28, 0xb8,
|
0x3f, 0xbb, 0x51, 0x49, 0x0b, 0x66, 0xfe, 0xca, 0x40, 0x4f, 0x0a, 0xd5, 0xab, 0x85, 0xc0, 0xc7,
|
||||||
0x90, 0xe0, 0xc9, 0xd4, 0x46, 0xad, 0xbd, 0x91, 0xae, 0x7d, 0x3c, 0x6f, 0x37, 0x3e, 0x5f, 0xf3,
|
0x68, 0x3b, 0x04, 0x2e, 0x98, 0x90, 0xe0, 0xcb, 0xd4, 0x46, 0xad, 0xbd, 0x91, 0xae, 0x7d, 0x3c,
|
||||||
0x4e, 0xd7, 0x7a, 0xe1, 0x73, 0x54, 0xe7, 0xde, 0x94, 0x7b, 0xa0, 0xf7, 0x67, 0xd9, 0xf1, 0x6e,
|
0xae, 0x6d, 0xbf, 0x98, 0xa3, 0x27, 0x73, 0xbd, 0xf0, 0x39, 0x2a, 0x33, 0x7f, 0xc0, 0x7c, 0xd0,
|
||||||
0x3e, 0x8f, 0xe4, 0x8f, 0x23, 0x29, 0xc8, 0x2a, 0xb2, 0x6a, 0x74, 0x23, 0x39, 0x33, 0x47, 0x2b,
|
0xfb, 0x33, 0x9d, 0x78, 0x23, 0x5f, 0x47, 0xf2, 0xe1, 0x48, 0x1a, 0x32, 0x8b, 0xac, 0x06, 0xbd,
|
||||||
0x28, 0xb4, 0x80, 0xdb, 0xf9, 0x63, 0x4d, 0x7f, 0x92, 0x07, 0xfc, 0x3e, 0xaa, 0x32, 0xa5, 0x81,
|
0x9d, 0x9c, 0x99, 0xa3, 0x19, 0x14, 0x52, 0xc0, 0xad, 0xff, 0x36, 0x67, 0x3e, 0x89, 0x02, 0xbf,
|
||||||
0x50, 0xa7, 0x91, 0xd5, 0xbb, 0xa7, 0xf5, 0x34, 0xb3, 0x50, 0x33, 0xa4, 0x4a, 0xb1, 0xe6, 0xb0,
|
0x83, 0x4a, 0x54, 0x49, 0x80, 0xeb, 0x32, 0xb2, 0x7e, 0x37, 0xb5, 0x9c, 0x64, 0x16, 0x8a, 0x43,
|
||||||
0x6e, 0x30, 0x43, 0xca, 0x35, 0x37, 0x43, 0x4a, 0xa6, 0x1a, 0x32, 0x09, 0x25, 0x39, 0xb0, 0xb9,
|
0xaa, 0x15, 0x73, 0x0e, 0xeb, 0x12, 0x1c, 0x52, 0xae, 0x39, 0x0e, 0xa9, 0x37, 0xd1, 0x90, 0x49,
|
||||||
0x43, 0x9a, 0x85, 0x72, 0xaa, 0xf5, 0x34, 0xb3, 0xe8, 0xfc, 0x57, 0x5e, 0xd3, 0x26, 0x35, 0x8c,
|
0x2a, 0xc9, 0x81, 0xcd, 0x1d, 0xd2, 0x2c, 0x95, 0x53, 0x2d, 0x27, 0x99, 0x45, 0xfd, 0x9f, 0xb5,
|
||||||
0xb9, 0x9c, 0x86, 0x2a, 0xa7, 0x6a, 0x21, 0xa7, 0x61, 0x96, 0xd3, 0x10, 0xff, 0x6a, 0x20, 0xcc,
|
0x39, 0x63, 0x52, 0x64, 0xcc, 0xd5, 0xd4, 0x51, 0x35, 0x95, 0x0a, 0x35, 0x75, 0xb2, 0x9a, 0x3a,
|
||||||
0x32, 0x88, 0x93, 0xc5, 0xb0, 0xa6, 0x13, 0xf5, 0xe9, 0x1d, 0x96, 0x84, 0xf4, 0x0a, 0x68, 0x87,
|
0xf8, 0x67, 0x03, 0x61, 0x9a, 0x41, 0x9c, 0x4c, 0xc8, 0x9a, 0x32, 0xea, 0xe3, 0x5b, 0x2c, 0x89,
|
||||||
0x9e, 0x0c, 0x67, 0x76, 0x4b, 0x47, 0x81, 0x8b, 0x06, 0x74, 0x4d, 0x08, 0xf8, 0x1c, 0xd5, 0x52,
|
0xd5, 0x2c, 0xa0, 0x1d, 0xfa, 0x92, 0x8f, 0x9c, 0xaa, 0xce, 0x02, 0x17, 0x0d, 0xc8, 0x9c, 0x14,
|
||||||
0xed, 0x61, 0x18, 0xfa, 0xa1, 0x5e, 0xdb, 0xee, 0x06, 0x11, 0x29, 0x7b, 0xdb, 0x8c, 0xe7, 0xed,
|
0xf0, 0x39, 0xda, 0x4c, 0xa5, 0x87, 0x9c, 0x07, 0x5c, 0xaf, 0x6d, 0x63, 0x89, 0x8c, 0x94, 0xbd,
|
||||||
0x5a, 0x6f, 0x09, 0xf0, 0xef, 0xbc, 0x5d, 0xcb, 0xbd, 0xd3, 0x3c, 0x78, 0xc2, 0x35, 0x84, 0x25,
|
0x63, 0xc6, 0xe3, 0xda, 0x66, 0x73, 0x0a, 0xf0, 0xf7, 0xb8, 0xb6, 0x99, 0xd3, 0x93, 0x3c, 0x78,
|
||||||
0x57, 0xe5, 0x2e, 0x5c, 0x07, 0x70, 0x33, 0x57, 0x0e, 0xbc, 0x75, 0x88, 0xde, 0xb9, 0xa1, 0x44,
|
0x12, 0xab, 0x03, 0xd3, 0x58, 0xeb, 0xb7, 0x89, 0x75, 0x00, 0x8b, 0x63, 0xe5, 0xc0, 0xab, 0x87,
|
||||||
0xb8, 0x8e, 0xca, 0x13, 0x98, 0xa5, 0x93, 0x48, 0x93, 0x9f, 0xb8, 0x81, 0xb6, 0x2f, 0xd8, 0x34,
|
0xe8, 0x8d, 0x05, 0x2d, 0xc2, 0x65, 0xb4, 0xd6, 0x87, 0x51, 0xca, 0x44, 0x92, 0xfc, 0xc4, 0xdb,
|
||||||
0x4a, 0x27, 0xee, 0x01, 0x4d, 0x85, 0x4f, 0xb6, 0x9e, 0x19, 0x9d, 0x9f, 0x0d, 0x94, 0xe7, 0xc0,
|
0x68, 0x63, 0x48, 0x07, 0x51, 0xca, 0xb8, 0x07, 0x24, 0x7d, 0x7c, 0xb8, 0xfa, 0xdc, 0xa8, 0xff,
|
||||||
0xc7, 0xa8, 0x92, 0x7c, 0x93, 0xe8, 0x33, 0xf3, 0xde, 0x66, 0x67, 0xe6, 0x8c, 0xbb, 0xb0, 0x3c,
|
0xb9, 0x8a, 0x1e, 0x67, 0x13, 0xe0, 0xac, 0x1d, 0x49, 0x10, 0xea, 0xc3, 0x7a, 0x07, 0x17, 0x7a,
|
||||||
0x97, 0x89, 0x44, 0x15, 0x0a, 0x7e, 0x17, 0xdd, 0x77, 0x41, 0x08, 0x36, 0xd2, 0xcc, 0xf6, 0x5b,
|
0x0f, 0xa1, 0x0e, 0x67, 0x43, 0xe0, 0x8a, 0xad, 0x2a, 0xb5, 0xa9, 0xc7, 0x41, 0xa6, 0x21, 0x39,
|
||||||
0xda, 0xe8, 0xfe, 0x49, 0xaa, 0xa6, 0x8b, 0x77, 0xbb, 0x77, 0x79, 0x65, 0x96, 0x9e, 0x5f, 0x99,
|
0x2b, 0x3c, 0x44, 0x28, 0xa4, 0x9c, 0x7a, 0x20, 0x81, 0x27, 0x47, 0x38, 0xe1, 0x97, 0xb3, 0x1c,
|
||||||
0xa5, 0x17, 0x57, 0x66, 0xe9, 0xa7, 0xd8, 0x34, 0x2e, 0x63, 0xd3, 0x78, 0x1e, 0x9b, 0xc6, 0x8b,
|
0xbf, 0xf2, 0xd5, 0x59, 0x2f, 0x32, 0x90, 0x94, 0x56, 0x59, 0xdc, 0xa9, 0x82, 0xe4, 0x22, 0x55,
|
||||||
0xd8, 0x34, 0xfe, 0x8a, 0x4d, 0xe3, 0x97, 0xbf, 0xcd, 0xd2, 0xd7, 0x8f, 0x6f, 0xf9, 0x0a, 0xfd,
|
0x3f, 0x42, 0x0f, 0x67, 0x5c, 0x6e, 0xd4, 0xe6, 0x57, 0x06, 0x7a, 0x73, 0x6e, 0x22, 0x77, 0x70,
|
||||||
0x3f, 0x00, 0x00, 0xff, 0xff, 0x1a, 0x8d, 0x17, 0x01, 0xbc, 0x0a, 0x00, 0x00,
|
0xdf, 0x3f, 0xbf, 0x7a, 0xdf, 0xf7, 0x6e, 0xde, 0xad, 0x05, 0x47, 0xfe, 0x47, 0x03, 0xe5, 0xf9,
|
||||||
|
0x89, 0x8f, 0xd1, 0x7a, 0xf2, 0xf7, 0xac, 0x2e, 0xe1, 0xed, 0xe5, 0x4a, 0x38, 0x63, 0x1e, 0x4c,
|
||||||
|
0x3f, 0xb5, 0xc9, 0x8b, 0x28, 0x14, 0xfc, 0x16, 0xba, 0xef, 0x81, 0x10, 0xb4, 0x3b, 0xa1, 0xc6,
|
||||||
|
0x43, 0x6d, 0x74, 0xff, 0x24, 0x15, 0x93, 0x89, 0xde, 0x69, 0x5e, 0x5c, 0x9a, 0x2b, 0x2f, 0x2f,
|
||||||
|
0xcd, 0x95, 0xd7, 0x97, 0xe6, 0xca, 0x0f, 0xb1, 0x69, 0x5c, 0xc4, 0xa6, 0xf1, 0x32, 0x36, 0x8d,
|
||||||
|
0xd7, 0xb1, 0x69, 0xfc, 0x1e, 0x9b, 0xc6, 0x4f, 0x7f, 0x98, 0x2b, 0x5f, 0x3e, 0xbd, 0xe6, 0x3f,
|
||||||
|
0x98, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xb9, 0x2f, 0x75, 0xee, 0xf8, 0x0c, 0x00, 0x00,
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *CSIStorageCapacity) Marshal() (dAtA []byte, err error) {
|
func (m *CSIStorageCapacity) Marshal() (dAtA []byte, err error) {
|
||||||
|
@ -734,6 +799,115 @@ func (m *VolumeAttachmentStatus) MarshalToSizedBuffer(dAtA []byte) (int, error)
|
||||||
return len(dAtA) - i, nil
|
return len(dAtA) - i, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *VolumeAttributesClass) Marshal() (dAtA []byte, err error) {
|
||||||
|
size := m.Size()
|
||||||
|
dAtA = make([]byte, size)
|
||||||
|
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return dAtA[:n], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *VolumeAttributesClass) MarshalTo(dAtA []byte) (int, error) {
|
||||||
|
size := m.Size()
|
||||||
|
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *VolumeAttributesClass) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||||
|
i := len(dAtA)
|
||||||
|
_ = i
|
||||||
|
var l int
|
||||||
|
_ = l
|
||||||
|
if len(m.Parameters) > 0 {
|
||||||
|
keysForParameters := make([]string, 0, len(m.Parameters))
|
||||||
|
for k := range m.Parameters {
|
||||||
|
keysForParameters = append(keysForParameters, string(k))
|
||||||
|
}
|
||||||
|
github_com_gogo_protobuf_sortkeys.Strings(keysForParameters)
|
||||||
|
for iNdEx := len(keysForParameters) - 1; iNdEx >= 0; iNdEx-- {
|
||||||
|
v := m.Parameters[string(keysForParameters[iNdEx])]
|
||||||
|
baseI := i
|
||||||
|
i -= len(v)
|
||||||
|
copy(dAtA[i:], v)
|
||||||
|
i = encodeVarintGenerated(dAtA, i, uint64(len(v)))
|
||||||
|
i--
|
||||||
|
dAtA[i] = 0x12
|
||||||
|
i -= len(keysForParameters[iNdEx])
|
||||||
|
copy(dAtA[i:], keysForParameters[iNdEx])
|
||||||
|
i = encodeVarintGenerated(dAtA, i, uint64(len(keysForParameters[iNdEx])))
|
||||||
|
i--
|
||||||
|
dAtA[i] = 0xa
|
||||||
|
i = encodeVarintGenerated(dAtA, i, uint64(baseI-i))
|
||||||
|
i--
|
||||||
|
dAtA[i] = 0x1a
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i -= len(m.DriverName)
|
||||||
|
copy(dAtA[i:], m.DriverName)
|
||||||
|
i = encodeVarintGenerated(dAtA, i, uint64(len(m.DriverName)))
|
||||||
|
i--
|
||||||
|
dAtA[i] = 0x12
|
||||||
|
{
|
||||||
|
size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i])
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
i -= size
|
||||||
|
i = encodeVarintGenerated(dAtA, i, uint64(size))
|
||||||
|
}
|
||||||
|
i--
|
||||||
|
dAtA[i] = 0xa
|
||||||
|
return len(dAtA) - i, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *VolumeAttributesClassList) Marshal() (dAtA []byte, err error) {
|
||||||
|
size := m.Size()
|
||||||
|
dAtA = make([]byte, size)
|
||||||
|
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return dAtA[:n], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *VolumeAttributesClassList) MarshalTo(dAtA []byte) (int, error) {
|
||||||
|
size := m.Size()
|
||||||
|
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *VolumeAttributesClassList) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||||
|
i := len(dAtA)
|
||||||
|
_ = i
|
||||||
|
var l int
|
||||||
|
_ = l
|
||||||
|
if len(m.Items) > 0 {
|
||||||
|
for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- {
|
||||||
|
{
|
||||||
|
size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i])
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
i -= size
|
||||||
|
i = encodeVarintGenerated(dAtA, i, uint64(size))
|
||||||
|
}
|
||||||
|
i--
|
||||||
|
dAtA[i] = 0x12
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i])
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
i -= size
|
||||||
|
i = encodeVarintGenerated(dAtA, i, uint64(size))
|
||||||
|
}
|
||||||
|
i--
|
||||||
|
dAtA[i] = 0xa
|
||||||
|
return len(dAtA) - i, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (m *VolumeError) Marshal() (dAtA []byte, err error) {
|
func (m *VolumeError) Marshal() (dAtA []byte, err error) {
|
||||||
size := m.Size()
|
size := m.Size()
|
||||||
dAtA = make([]byte, size)
|
dAtA = make([]byte, size)
|
||||||
|
@ -915,6 +1089,44 @@ func (m *VolumeAttachmentStatus) Size() (n int) {
|
||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *VolumeAttributesClass) Size() (n int) {
|
||||||
|
if m == nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
var l int
|
||||||
|
_ = l
|
||||||
|
l = m.ObjectMeta.Size()
|
||||||
|
n += 1 + l + sovGenerated(uint64(l))
|
||||||
|
l = len(m.DriverName)
|
||||||
|
n += 1 + l + sovGenerated(uint64(l))
|
||||||
|
if len(m.Parameters) > 0 {
|
||||||
|
for k, v := range m.Parameters {
|
||||||
|
_ = k
|
||||||
|
_ = v
|
||||||
|
mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v)))
|
||||||
|
n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *VolumeAttributesClassList) Size() (n int) {
|
||||||
|
if m == nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
var l int
|
||||||
|
_ = l
|
||||||
|
l = m.ListMeta.Size()
|
||||||
|
n += 1 + l + sovGenerated(uint64(l))
|
||||||
|
if len(m.Items) > 0 {
|
||||||
|
for _, e := range m.Items {
|
||||||
|
l = e.Size()
|
||||||
|
n += 1 + l + sovGenerated(uint64(l))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
func (m *VolumeError) Size() (n int) {
|
func (m *VolumeError) Size() (n int) {
|
||||||
if m == nil {
|
if m == nil {
|
||||||
return 0
|
return 0
|
||||||
|
@ -1038,6 +1250,44 @@ func (this *VolumeAttachmentStatus) String() string {
|
||||||
}, "")
|
}, "")
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
func (this *VolumeAttributesClass) String() string {
|
||||||
|
if this == nil {
|
||||||
|
return "nil"
|
||||||
|
}
|
||||||
|
keysForParameters := make([]string, 0, len(this.Parameters))
|
||||||
|
for k := range this.Parameters {
|
||||||
|
keysForParameters = append(keysForParameters, k)
|
||||||
|
}
|
||||||
|
github_com_gogo_protobuf_sortkeys.Strings(keysForParameters)
|
||||||
|
mapStringForParameters := "map[string]string{"
|
||||||
|
for _, k := range keysForParameters {
|
||||||
|
mapStringForParameters += fmt.Sprintf("%v: %v,", k, this.Parameters[k])
|
||||||
|
}
|
||||||
|
mapStringForParameters += "}"
|
||||||
|
s := strings.Join([]string{`&VolumeAttributesClass{`,
|
||||||
|
`ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`,
|
||||||
|
`DriverName:` + fmt.Sprintf("%v", this.DriverName) + `,`,
|
||||||
|
`Parameters:` + mapStringForParameters + `,`,
|
||||||
|
`}`,
|
||||||
|
}, "")
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
func (this *VolumeAttributesClassList) String() string {
|
||||||
|
if this == nil {
|
||||||
|
return "nil"
|
||||||
|
}
|
||||||
|
repeatedStringForItems := "[]VolumeAttributesClass{"
|
||||||
|
for _, f := range this.Items {
|
||||||
|
repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "VolumeAttributesClass", "VolumeAttributesClass", 1), `&`, ``, 1) + ","
|
||||||
|
}
|
||||||
|
repeatedStringForItems += "}"
|
||||||
|
s := strings.Join([]string{`&VolumeAttributesClassList{`,
|
||||||
|
`ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`,
|
||||||
|
`Items:` + repeatedStringForItems + `,`,
|
||||||
|
`}`,
|
||||||
|
}, "")
|
||||||
|
return s
|
||||||
|
}
|
||||||
func (this *VolumeError) String() string {
|
func (this *VolumeError) String() string {
|
||||||
if this == nil {
|
if this == nil {
|
||||||
return "nil"
|
return "nil"
|
||||||
|
@ -2198,6 +2448,365 @@ func (m *VolumeAttachmentStatus) Unmarshal(dAtA []byte) error {
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
func (m *VolumeAttributesClass) Unmarshal(dAtA []byte) error {
|
||||||
|
l := len(dAtA)
|
||||||
|
iNdEx := 0
|
||||||
|
for iNdEx < l {
|
||||||
|
preIndex := iNdEx
|
||||||
|
var wire uint64
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return ErrIntOverflowGenerated
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
wire |= uint64(b&0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fieldNum := int32(wire >> 3)
|
||||||
|
wireType := int(wire & 0x7)
|
||||||
|
if wireType == 4 {
|
||||||
|
return fmt.Errorf("proto: VolumeAttributesClass: wiretype end group for non-group")
|
||||||
|
}
|
||||||
|
if fieldNum <= 0 {
|
||||||
|
return fmt.Errorf("proto: VolumeAttributesClass: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||||
|
}
|
||||||
|
switch fieldNum {
|
||||||
|
case 1:
|
||||||
|
if wireType != 2 {
|
||||||
|
return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType)
|
||||||
|
}
|
||||||
|
var msglen int
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return ErrIntOverflowGenerated
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
msglen |= int(b&0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if msglen < 0 {
|
||||||
|
return ErrInvalidLengthGenerated
|
||||||
|
}
|
||||||
|
postIndex := iNdEx + msglen
|
||||||
|
if postIndex < 0 {
|
||||||
|
return ErrInvalidLengthGenerated
|
||||||
|
}
|
||||||
|
if postIndex > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
iNdEx = postIndex
|
||||||
|
case 2:
|
||||||
|
if wireType != 2 {
|
||||||
|
return fmt.Errorf("proto: wrong wireType = %d for field DriverName", wireType)
|
||||||
|
}
|
||||||
|
var stringLen uint64
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return ErrIntOverflowGenerated
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
stringLen |= uint64(b&0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
intStringLen := int(stringLen)
|
||||||
|
if intStringLen < 0 {
|
||||||
|
return ErrInvalidLengthGenerated
|
||||||
|
}
|
||||||
|
postIndex := iNdEx + intStringLen
|
||||||
|
if postIndex < 0 {
|
||||||
|
return ErrInvalidLengthGenerated
|
||||||
|
}
|
||||||
|
if postIndex > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
m.DriverName = string(dAtA[iNdEx:postIndex])
|
||||||
|
iNdEx = postIndex
|
||||||
|
case 3:
|
||||||
|
if wireType != 2 {
|
||||||
|
return fmt.Errorf("proto: wrong wireType = %d for field Parameters", wireType)
|
||||||
|
}
|
||||||
|
var msglen int
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return ErrIntOverflowGenerated
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
msglen |= int(b&0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if msglen < 0 {
|
||||||
|
return ErrInvalidLengthGenerated
|
||||||
|
}
|
||||||
|
postIndex := iNdEx + msglen
|
||||||
|
if postIndex < 0 {
|
||||||
|
return ErrInvalidLengthGenerated
|
||||||
|
}
|
||||||
|
if postIndex > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
if m.Parameters == nil {
|
||||||
|
m.Parameters = make(map[string]string)
|
||||||
|
}
|
||||||
|
var mapkey string
|
||||||
|
var mapvalue string
|
||||||
|
for iNdEx < postIndex {
|
||||||
|
entryPreIndex := iNdEx
|
||||||
|
var wire uint64
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return ErrIntOverflowGenerated
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
wire |= uint64(b&0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fieldNum := int32(wire >> 3)
|
||||||
|
if fieldNum == 1 {
|
||||||
|
var stringLenmapkey uint64
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return ErrIntOverflowGenerated
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
stringLenmapkey |= uint64(b&0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
intStringLenmapkey := int(stringLenmapkey)
|
||||||
|
if intStringLenmapkey < 0 {
|
||||||
|
return ErrInvalidLengthGenerated
|
||||||
|
}
|
||||||
|
postStringIndexmapkey := iNdEx + intStringLenmapkey
|
||||||
|
if postStringIndexmapkey < 0 {
|
||||||
|
return ErrInvalidLengthGenerated
|
||||||
|
}
|
||||||
|
if postStringIndexmapkey > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
|
||||||
|
iNdEx = postStringIndexmapkey
|
||||||
|
} else if fieldNum == 2 {
|
||||||
|
var stringLenmapvalue uint64
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return ErrIntOverflowGenerated
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
stringLenmapvalue |= uint64(b&0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
intStringLenmapvalue := int(stringLenmapvalue)
|
||||||
|
if intStringLenmapvalue < 0 {
|
||||||
|
return ErrInvalidLengthGenerated
|
||||||
|
}
|
||||||
|
postStringIndexmapvalue := iNdEx + intStringLenmapvalue
|
||||||
|
if postStringIndexmapvalue < 0 {
|
||||||
|
return ErrInvalidLengthGenerated
|
||||||
|
}
|
||||||
|
if postStringIndexmapvalue > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue])
|
||||||
|
iNdEx = postStringIndexmapvalue
|
||||||
|
} else {
|
||||||
|
iNdEx = entryPreIndex
|
||||||
|
skippy, err := skipGenerated(dAtA[iNdEx:])
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||||
|
return ErrInvalidLengthGenerated
|
||||||
|
}
|
||||||
|
if (iNdEx + skippy) > postIndex {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
iNdEx += skippy
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m.Parameters[mapkey] = mapvalue
|
||||||
|
iNdEx = postIndex
|
||||||
|
default:
|
||||||
|
iNdEx = preIndex
|
||||||
|
skippy, err := skipGenerated(dAtA[iNdEx:])
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||||
|
return ErrInvalidLengthGenerated
|
||||||
|
}
|
||||||
|
if (iNdEx + skippy) > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
iNdEx += skippy
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if iNdEx > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (m *VolumeAttributesClassList) Unmarshal(dAtA []byte) error {
|
||||||
|
l := len(dAtA)
|
||||||
|
iNdEx := 0
|
||||||
|
for iNdEx < l {
|
||||||
|
preIndex := iNdEx
|
||||||
|
var wire uint64
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return ErrIntOverflowGenerated
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
wire |= uint64(b&0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fieldNum := int32(wire >> 3)
|
||||||
|
wireType := int(wire & 0x7)
|
||||||
|
if wireType == 4 {
|
||||||
|
return fmt.Errorf("proto: VolumeAttributesClassList: wiretype end group for non-group")
|
||||||
|
}
|
||||||
|
if fieldNum <= 0 {
|
||||||
|
return fmt.Errorf("proto: VolumeAttributesClassList: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||||
|
}
|
||||||
|
switch fieldNum {
|
||||||
|
case 1:
|
||||||
|
if wireType != 2 {
|
||||||
|
return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType)
|
||||||
|
}
|
||||||
|
var msglen int
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return ErrIntOverflowGenerated
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
msglen |= int(b&0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if msglen < 0 {
|
||||||
|
return ErrInvalidLengthGenerated
|
||||||
|
}
|
||||||
|
postIndex := iNdEx + msglen
|
||||||
|
if postIndex < 0 {
|
||||||
|
return ErrInvalidLengthGenerated
|
||||||
|
}
|
||||||
|
if postIndex > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
iNdEx = postIndex
|
||||||
|
case 2:
|
||||||
|
if wireType != 2 {
|
||||||
|
return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType)
|
||||||
|
}
|
||||||
|
var msglen int
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return ErrIntOverflowGenerated
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
msglen |= int(b&0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if msglen < 0 {
|
||||||
|
return ErrInvalidLengthGenerated
|
||||||
|
}
|
||||||
|
postIndex := iNdEx + msglen
|
||||||
|
if postIndex < 0 {
|
||||||
|
return ErrInvalidLengthGenerated
|
||||||
|
}
|
||||||
|
if postIndex > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
m.Items = append(m.Items, VolumeAttributesClass{})
|
||||||
|
if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
iNdEx = postIndex
|
||||||
|
default:
|
||||||
|
iNdEx = preIndex
|
||||||
|
skippy, err := skipGenerated(dAtA[iNdEx:])
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
||||||
|
return ErrInvalidLengthGenerated
|
||||||
|
}
|
||||||
|
if (iNdEx + skippy) > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
iNdEx += skippy
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if iNdEx > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
func (m *VolumeError) Unmarshal(dAtA []byte) error {
|
func (m *VolumeError) Unmarshal(dAtA []byte) error {
|
||||||
l := len(dAtA)
|
l := len(dAtA)
|
||||||
iNdEx := 0
|
iNdEx := 0
|
||||||
|
|
|
@ -216,6 +216,46 @@ message VolumeAttachmentStatus {
|
||||||
optional VolumeError detachError = 4;
|
optional VolumeError detachError = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// VolumeAttributesClass represents a specification of mutable volume attributes
|
||||||
|
// defined by the CSI driver. The class can be specified during dynamic provisioning
|
||||||
|
// of PersistentVolumeClaims, and changed in the PersistentVolumeClaim spec after provisioning.
|
||||||
|
message VolumeAttributesClass {
|
||||||
|
// Standard object's metadata.
|
||||||
|
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
||||||
|
// +optional
|
||||||
|
optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
|
||||||
|
|
||||||
|
// Name of the CSI driver
|
||||||
|
// This field is immutable.
|
||||||
|
optional string driverName = 2;
|
||||||
|
|
||||||
|
// parameters hold volume attributes defined by the CSI driver. These values
|
||||||
|
// are opaque to the Kubernetes and are passed directly to the CSI driver.
|
||||||
|
// The underlying storage provider supports changing these attributes on an
|
||||||
|
// existing volume, however the parameters field itself is immutable. To
|
||||||
|
// invoke a volume update, a new VolumeAttributesClass should be created with
|
||||||
|
// new parameters, and the PersistentVolumeClaim should be updated to reference
|
||||||
|
// the new VolumeAttributesClass.
|
||||||
|
//
|
||||||
|
// This field is required and must contain at least one key/value pair.
|
||||||
|
// The keys cannot be empty, and the maximum number of parameters is 512, with
|
||||||
|
// a cumulative max size of 256K. If the CSI driver rejects invalid parameters,
|
||||||
|
// the target PersistentVolumeClaim will be set to an "Infeasible" state in the
|
||||||
|
// modifyVolumeStatus field.
|
||||||
|
map<string, string> parameters = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// VolumeAttributesClassList is a collection of VolumeAttributesClass objects.
|
||||||
|
message VolumeAttributesClassList {
|
||||||
|
// Standard list metadata
|
||||||
|
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
||||||
|
// +optional
|
||||||
|
optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
|
||||||
|
|
||||||
|
// items is the list of VolumeAttributesClass objects.
|
||||||
|
repeated VolumeAttributesClass items = 2;
|
||||||
|
}
|
||||||
|
|
||||||
// VolumeError captures an error encountered during a volume operation.
|
// VolumeError captures an error encountered during a volume operation.
|
||||||
message VolumeError {
|
message VolumeError {
|
||||||
// time represents the time the error was encountered.
|
// time represents the time the error was encountered.
|
||||||
|
|
|
@ -45,6 +45,8 @@ func addKnownTypes(scheme *runtime.Scheme) error {
|
||||||
&VolumeAttachmentList{},
|
&VolumeAttachmentList{},
|
||||||
&CSIStorageCapacity{},
|
&CSIStorageCapacity{},
|
||||||
&CSIStorageCapacityList{},
|
&CSIStorageCapacityList{},
|
||||||
|
&VolumeAttributesClass{},
|
||||||
|
&VolumeAttributesClassList{},
|
||||||
)
|
)
|
||||||
|
|
||||||
metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
|
metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
|
||||||
|
|
|
@ -251,3 +251,55 @@ type CSIStorageCapacityList struct {
|
||||||
// +listMapKey=name
|
// +listMapKey=name
|
||||||
Items []CSIStorageCapacity `json:"items" protobuf:"bytes,2,rep,name=items"`
|
Items []CSIStorageCapacity `json:"items" protobuf:"bytes,2,rep,name=items"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// +genclient
|
||||||
|
// +genclient:nonNamespaced
|
||||||
|
// +k8s:prerelease-lifecycle-gen:introduced=1.29
|
||||||
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
|
|
||||||
|
// VolumeAttributesClass represents a specification of mutable volume attributes
|
||||||
|
// defined by the CSI driver. The class can be specified during dynamic provisioning
|
||||||
|
// of PersistentVolumeClaims, and changed in the PersistentVolumeClaim spec after provisioning.
|
||||||
|
type VolumeAttributesClass struct {
|
||||||
|
metav1.TypeMeta `json:",inline"`
|
||||||
|
|
||||||
|
// Standard object's metadata.
|
||||||
|
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
||||||
|
// +optional
|
||||||
|
metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
|
||||||
|
|
||||||
|
// Name of the CSI driver
|
||||||
|
// This field is immutable.
|
||||||
|
DriverName string `json:"driverName" protobuf:"bytes,2,opt,name=driverName"`
|
||||||
|
|
||||||
|
// parameters hold volume attributes defined by the CSI driver. These values
|
||||||
|
// are opaque to the Kubernetes and are passed directly to the CSI driver.
|
||||||
|
// The underlying storage provider supports changing these attributes on an
|
||||||
|
// existing volume, however the parameters field itself is immutable. To
|
||||||
|
// invoke a volume update, a new VolumeAttributesClass should be created with
|
||||||
|
// new parameters, and the PersistentVolumeClaim should be updated to reference
|
||||||
|
// the new VolumeAttributesClass.
|
||||||
|
//
|
||||||
|
// This field is required and must contain at least one key/value pair.
|
||||||
|
// The keys cannot be empty, and the maximum number of parameters is 512, with
|
||||||
|
// a cumulative max size of 256K. If the CSI driver rejects invalid parameters,
|
||||||
|
// the target PersistentVolumeClaim will be set to an "Infeasible" state in the
|
||||||
|
// modifyVolumeStatus field.
|
||||||
|
Parameters map[string]string `json:"parameters,omitempty" protobuf:"bytes,3,rep,name=parameters"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// +k8s:prerelease-lifecycle-gen:introduced=1.29
|
||||||
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
|
|
||||||
|
// VolumeAttributesClassList is a collection of VolumeAttributesClass objects.
|
||||||
|
type VolumeAttributesClassList struct {
|
||||||
|
metav1.TypeMeta `json:",inline"`
|
||||||
|
|
||||||
|
// Standard list metadata
|
||||||
|
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
||||||
|
// +optional
|
||||||
|
metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
|
||||||
|
|
||||||
|
// items is the list of VolumeAttributesClass objects.
|
||||||
|
Items []VolumeAttributesClass `json:"items" protobuf:"bytes,2,rep,name=items"`
|
||||||
|
}
|
||||||
|
|
|
@ -103,6 +103,27 @@ func (VolumeAttachmentStatus) SwaggerDoc() map[string]string {
|
||||||
return map_VolumeAttachmentStatus
|
return map_VolumeAttachmentStatus
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var map_VolumeAttributesClass = map[string]string{
|
||||||
|
"": "VolumeAttributesClass represents a specification of mutable volume attributes defined by the CSI driver. The class can be specified during dynamic provisioning of PersistentVolumeClaims, and changed in the PersistentVolumeClaim spec after provisioning.",
|
||||||
|
"metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata",
|
||||||
|
"driverName": "Name of the CSI driver This field is immutable.",
|
||||||
|
"parameters": "parameters hold volume attributes defined by the CSI driver. These values are opaque to the Kubernetes and are passed directly to the CSI driver. The underlying storage provider supports changing these attributes on an existing volume, however the parameters field itself is immutable. To invoke a volume update, a new VolumeAttributesClass should be created with new parameters, and the PersistentVolumeClaim should be updated to reference the new VolumeAttributesClass.\n\nThis field is required and must contain at least one key/value pair. The keys cannot be empty, and the maximum number of parameters is 512, with a cumulative max size of 256K. If the CSI driver rejects invalid parameters, the target PersistentVolumeClaim will be set to an \"Infeasible\" state in the modifyVolumeStatus field.",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (VolumeAttributesClass) SwaggerDoc() map[string]string {
|
||||||
|
return map_VolumeAttributesClass
|
||||||
|
}
|
||||||
|
|
||||||
|
var map_VolumeAttributesClassList = map[string]string{
|
||||||
|
"": "VolumeAttributesClassList is a collection of VolumeAttributesClass objects.",
|
||||||
|
"metadata": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata",
|
||||||
|
"items": "items is the list of VolumeAttributesClass objects.",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (VolumeAttributesClassList) SwaggerDoc() map[string]string {
|
||||||
|
return map_VolumeAttributesClassList
|
||||||
|
}
|
||||||
|
|
||||||
var map_VolumeError = map[string]string{
|
var map_VolumeError = map[string]string{
|
||||||
"": "VolumeError captures an error encountered during a volume operation.",
|
"": "VolumeError captures an error encountered during a volume operation.",
|
||||||
"time": "time represents the time the error was encountered.",
|
"time": "time represents the time the error was encountered.",
|
||||||
|
|
|
@ -238,6 +238,72 @@ func (in *VolumeAttachmentStatus) DeepCopy() *VolumeAttachmentStatus {
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *VolumeAttributesClass) DeepCopyInto(out *VolumeAttributesClass) {
|
||||||
|
*out = *in
|
||||||
|
out.TypeMeta = in.TypeMeta
|
||||||
|
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
|
||||||
|
if in.Parameters != nil {
|
||||||
|
in, out := &in.Parameters, &out.Parameters
|
||||||
|
*out = make(map[string]string, len(*in))
|
||||||
|
for key, val := range *in {
|
||||||
|
(*out)[key] = val
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeAttributesClass.
|
||||||
|
func (in *VolumeAttributesClass) DeepCopy() *VolumeAttributesClass {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(VolumeAttributesClass)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||||
|
func (in *VolumeAttributesClass) DeepCopyObject() runtime.Object {
|
||||||
|
if c := in.DeepCopy(); c != nil {
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *VolumeAttributesClassList) DeepCopyInto(out *VolumeAttributesClassList) {
|
||||||
|
*out = *in
|
||||||
|
out.TypeMeta = in.TypeMeta
|
||||||
|
in.ListMeta.DeepCopyInto(&out.ListMeta)
|
||||||
|
if in.Items != nil {
|
||||||
|
in, out := &in.Items, &out.Items
|
||||||
|
*out = make([]VolumeAttributesClass, len(*in))
|
||||||
|
for i := range *in {
|
||||||
|
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeAttributesClassList.
|
||||||
|
func (in *VolumeAttributesClassList) DeepCopy() *VolumeAttributesClassList {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(VolumeAttributesClassList)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||||
|
func (in *VolumeAttributesClassList) DeepCopyObject() runtime.Object {
|
||||||
|
if c := in.DeepCopy(); c != nil {
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *VolumeError) DeepCopyInto(out *VolumeError) {
|
func (in *VolumeError) DeepCopyInto(out *VolumeError) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
|
|
@ -120,3 +120,39 @@ func (in *VolumeAttachmentList) APILifecycleReplacement() schema.GroupVersionKin
|
||||||
func (in *VolumeAttachmentList) APILifecycleRemoved() (major, minor int) {
|
func (in *VolumeAttachmentList) APILifecycleRemoved() (major, minor int) {
|
||||||
return 1, 24
|
return 1, 24
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison.
|
||||||
|
// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go.
|
||||||
|
func (in *VolumeAttributesClass) APILifecycleIntroduced() (major, minor int) {
|
||||||
|
return 1, 29
|
||||||
|
}
|
||||||
|
|
||||||
|
// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison.
|
||||||
|
// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor.
|
||||||
|
func (in *VolumeAttributesClass) APILifecycleDeprecated() (major, minor int) {
|
||||||
|
return 1, 32
|
||||||
|
}
|
||||||
|
|
||||||
|
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
||||||
|
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
||||||
|
func (in *VolumeAttributesClass) APILifecycleRemoved() (major, minor int) {
|
||||||
|
return 1, 35
|
||||||
|
}
|
||||||
|
|
||||||
|
// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison.
|
||||||
|
// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go.
|
||||||
|
func (in *VolumeAttributesClassList) APILifecycleIntroduced() (major, minor int) {
|
||||||
|
return 1, 29
|
||||||
|
}
|
||||||
|
|
||||||
|
// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison.
|
||||||
|
// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor.
|
||||||
|
func (in *VolumeAttributesClassList) APILifecycleDeprecated() (major, minor int) {
|
||||||
|
return 1, 32
|
||||||
|
}
|
||||||
|
|
||||||
|
// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison.
|
||||||
|
// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor.
|
||||||
|
func (in *VolumeAttributesClassList) APILifecycleRemoved() (major, minor int) {
|
||||||
|
return 1, 35
|
||||||
|
}
|
||||||
|
|
|
@ -91,7 +91,7 @@ message CSIDriverSpec {
|
||||||
// If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls.
|
// If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls.
|
||||||
// The CSI driver is responsible for parsing and validating the information passed in as VolumeContext.
|
// The CSI driver is responsible for parsing and validating the information passed in as VolumeContext.
|
||||||
//
|
//
|
||||||
// The following VolumeConext will be passed if podInfoOnMount is set to true.
|
// The following VolumeContext will be passed if podInfoOnMount is set to true.
|
||||||
// This list might grow, but the prefix will be used.
|
// This list might grow, but the prefix will be used.
|
||||||
// "csi.storage.k8s.io/pod.name": pod.Name
|
// "csi.storage.k8s.io/pod.name": pod.Name
|
||||||
// "csi.storage.k8s.io/pod.namespace": pod.Namespace
|
// "csi.storage.k8s.io/pod.namespace": pod.Namespace
|
||||||
|
|
|
@ -311,7 +311,7 @@ type CSIDriverSpec struct {
|
||||||
// If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls.
|
// If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls.
|
||||||
// The CSI driver is responsible for parsing and validating the information passed in as VolumeContext.
|
// The CSI driver is responsible for parsing and validating the information passed in as VolumeContext.
|
||||||
//
|
//
|
||||||
// The following VolumeConext will be passed if podInfoOnMount is set to true.
|
// The following VolumeContext will be passed if podInfoOnMount is set to true.
|
||||||
// This list might grow, but the prefix will be used.
|
// This list might grow, but the prefix will be used.
|
||||||
// "csi.storage.k8s.io/pod.name": pod.Name
|
// "csi.storage.k8s.io/pod.name": pod.Name
|
||||||
// "csi.storage.k8s.io/pod.namespace": pod.Namespace
|
// "csi.storage.k8s.io/pod.namespace": pod.Namespace
|
||||||
|
|
|
@ -50,7 +50,7 @@ func (CSIDriverList) SwaggerDoc() map[string]string {
|
||||||
var map_CSIDriverSpec = map[string]string{
|
var map_CSIDriverSpec = map[string]string{
|
||||||
"": "CSIDriverSpec is the specification of a CSIDriver.",
|
"": "CSIDriverSpec is the specification of a CSIDriver.",
|
||||||
"attachRequired": "attachRequired indicates this CSI volume driver requires an attach operation (because it implements the CSI ControllerPublishVolume() method), and that the Kubernetes attach detach controller should call the attach volume interface which checks the volumeattachment status and waits until the volume is attached before proceeding to mounting. The CSI external-attacher coordinates with CSI volume driver and updates the volumeattachment status when the attach operation is complete. If the CSIDriverRegistry feature gate is enabled and the value is specified to false, the attach operation will be skipped. Otherwise the attach operation will be called.\n\nThis field is immutable.",
|
"attachRequired": "attachRequired indicates this CSI volume driver requires an attach operation (because it implements the CSI ControllerPublishVolume() method), and that the Kubernetes attach detach controller should call the attach volume interface which checks the volumeattachment status and waits until the volume is attached before proceeding to mounting. The CSI external-attacher coordinates with CSI volume driver and updates the volumeattachment status when the attach operation is complete. If the CSIDriverRegistry feature gate is enabled and the value is specified to false, the attach operation will be skipped. Otherwise the attach operation will be called.\n\nThis field is immutable.",
|
||||||
"podInfoOnMount": "podInfoOnMount indicates this CSI volume driver requires additional pod information (like podName, podUID, etc.) during mount operations, if set to true. If set to false, pod information will not be passed on mount. Default is false.\n\nThe CSI driver specifies podInfoOnMount as part of driver deployment. If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls. The CSI driver is responsible for parsing and validating the information passed in as VolumeContext.\n\nThe following VolumeConext will be passed if podInfoOnMount is set to true. This list might grow, but the prefix will be used. \"csi.storage.k8s.io/pod.name\": pod.Name \"csi.storage.k8s.io/pod.namespace\": pod.Namespace \"csi.storage.k8s.io/pod.uid\": string(pod.UID) \"csi.storage.k8s.io/ephemeral\": \"true\" if the volume is an ephemeral inline volume\n defined by a CSIVolumeSource, otherwise \"false\"\n\n\"csi.storage.k8s.io/ephemeral\" is a new feature in Kubernetes 1.16. It is only required for drivers which support both the \"Persistent\" and \"Ephemeral\" VolumeLifecycleMode. Other drivers can leave pod info disabled and/or ignore this field. As Kubernetes 1.15 doesn't support this field, drivers can only support one mode when deployed on such a cluster and the deployment determines which mode that is, for example via a command line parameter of the driver.\n\nThis field is immutable.",
|
"podInfoOnMount": "podInfoOnMount indicates this CSI volume driver requires additional pod information (like podName, podUID, etc.) during mount operations, if set to true. If set to false, pod information will not be passed on mount. Default is false.\n\nThe CSI driver specifies podInfoOnMount as part of driver deployment. If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls. The CSI driver is responsible for parsing and validating the information passed in as VolumeContext.\n\nThe following VolumeContext will be passed if podInfoOnMount is set to true. This list might grow, but the prefix will be used. \"csi.storage.k8s.io/pod.name\": pod.Name \"csi.storage.k8s.io/pod.namespace\": pod.Namespace \"csi.storage.k8s.io/pod.uid\": string(pod.UID) \"csi.storage.k8s.io/ephemeral\": \"true\" if the volume is an ephemeral inline volume\n defined by a CSIVolumeSource, otherwise \"false\"\n\n\"csi.storage.k8s.io/ephemeral\" is a new feature in Kubernetes 1.16. It is only required for drivers which support both the \"Persistent\" and \"Ephemeral\" VolumeLifecycleMode. Other drivers can leave pod info disabled and/or ignore this field. As Kubernetes 1.15 doesn't support this field, drivers can only support one mode when deployed on such a cluster and the deployment determines which mode that is, for example via a command line parameter of the driver.\n\nThis field is immutable.",
|
||||||
"volumeLifecycleModes": "volumeLifecycleModes defines what kind of volumes this CSI volume driver supports. The default if the list is empty is \"Persistent\", which is the usage defined by the CSI specification and implemented in Kubernetes via the usual PV/PVC mechanism.\n\nThe other mode is \"Ephemeral\". In this mode, volumes are defined inline inside the pod spec with CSIVolumeSource and their lifecycle is tied to the lifecycle of that pod. A driver has to be aware of this because it is only going to get a NodePublishVolume call for such a volume.\n\nFor more information about implementing this mode, see https://kubernetes-csi.github.io/docs/ephemeral-local-volumes.html A driver can support one or more of these modes and more modes may be added in the future.\n\nThis field is immutable.",
|
"volumeLifecycleModes": "volumeLifecycleModes defines what kind of volumes this CSI volume driver supports. The default if the list is empty is \"Persistent\", which is the usage defined by the CSI specification and implemented in Kubernetes via the usual PV/PVC mechanism.\n\nThe other mode is \"Ephemeral\". In this mode, volumes are defined inline inside the pod spec with CSIVolumeSource and their lifecycle is tied to the lifecycle of that pod. A driver has to be aware of this because it is only going to get a NodePublishVolume call for such a volume.\n\nFor more information about implementing this mode, see https://kubernetes-csi.github.io/docs/ephemeral-local-volumes.html A driver can support one or more of these modes and more modes may be added in the future.\n\nThis field is immutable.",
|
||||||
"storageCapacity": "storageCapacity indicates that the CSI volume driver wants pod scheduling to consider the storage capacity that the driver deployment will report by creating CSIStorageCapacity objects with capacity information, if set to true.\n\nThe check can be enabled immediately when deploying a driver. In that case, provisioning new volumes with late binding will pause until the driver deployment has published some suitable CSIStorageCapacity object.\n\nAlternatively, the driver can be deployed with the field unset or false and it can be flipped later when storage capacity information has been published.\n\nThis field was immutable in Kubernetes <= 1.22 and now is mutable.",
|
"storageCapacity": "storageCapacity indicates that the CSI volume driver wants pod scheduling to consider the storage capacity that the driver deployment will report by creating CSIStorageCapacity objects with capacity information, if set to true.\n\nThe check can be enabled immediately when deploying a driver. In that case, provisioning new volumes with late binding will pause until the driver deployment has published some suitable CSIStorageCapacity object.\n\nAlternatively, the driver can be deployed with the field unset or false and it can be flipped later when storage capacity information has been published.\n\nThis field was immutable in Kubernetes <= 1.22 and now is mutable.",
|
||||||
"fsGroupPolicy": "fsGroupPolicy defines if the underlying volume supports changing ownership and permission of the volume before being mounted. Refer to the specific FSGroupPolicy values for additional details.\n\nThis field is immutable.\n\nDefaults to ReadWriteOnceWithFSType, which will examine each volume to determine if Kubernetes should modify ownership and permissions of the volume. With the default policy the defined fsGroup will only be applied if a fstype is defined and the volume's access mode contains ReadWriteOnce.",
|
"fsGroupPolicy": "fsGroupPolicy defines if the underlying volume supports changing ownership and permission of the volume before being mounted. Refer to the specific FSGroupPolicy values for additional details.\n\nThis field is immutable.\n\nDefaults to ReadWriteOnceWithFSType, which will examine each volume to determine if Kubernetes should modify ownership and permissions of the volume. With the default policy the defined fsGroup will only be applied if a fstype is defined and the volume's access mode contains ReadWriteOnce.",
|
||||||
|
|
|
@ -22,14 +22,15 @@ import (
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SetStatusCondition sets the corresponding condition in conditions to newCondition.
|
// SetStatusCondition sets the corresponding condition in conditions to newCondition and returns true
|
||||||
|
// if the conditions are changed by this call.
|
||||||
// conditions must be non-nil.
|
// conditions must be non-nil.
|
||||||
// 1. if the condition of the specified type already exists (all fields of the existing condition are updated to
|
// 1. if the condition of the specified type already exists (all fields of the existing condition are updated to
|
||||||
// newCondition, LastTransitionTime is set to now if the new status differs from the old status)
|
// newCondition, LastTransitionTime is set to now if the new status differs from the old status)
|
||||||
// 2. if a condition of the specified type does not exist (LastTransitionTime is set to now() if unset, and newCondition is appended)
|
// 2. if a condition of the specified type does not exist (LastTransitionTime is set to now() if unset, and newCondition is appended)
|
||||||
func SetStatusCondition(conditions *[]metav1.Condition, newCondition metav1.Condition) {
|
func SetStatusCondition(conditions *[]metav1.Condition, newCondition metav1.Condition) (changed bool) {
|
||||||
if conditions == nil {
|
if conditions == nil {
|
||||||
return
|
return false
|
||||||
}
|
}
|
||||||
existingCondition := FindStatusCondition(*conditions, newCondition.Type)
|
existingCondition := FindStatusCondition(*conditions, newCondition.Type)
|
||||||
if existingCondition == nil {
|
if existingCondition == nil {
|
||||||
|
@ -37,7 +38,7 @@ func SetStatusCondition(conditions *[]metav1.Condition, newCondition metav1.Cond
|
||||||
newCondition.LastTransitionTime = metav1.NewTime(time.Now())
|
newCondition.LastTransitionTime = metav1.NewTime(time.Now())
|
||||||
}
|
}
|
||||||
*conditions = append(*conditions, newCondition)
|
*conditions = append(*conditions, newCondition)
|
||||||
return
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
if existingCondition.Status != newCondition.Status {
|
if existingCondition.Status != newCondition.Status {
|
||||||
|
@ -47,18 +48,31 @@ func SetStatusCondition(conditions *[]metav1.Condition, newCondition metav1.Cond
|
||||||
} else {
|
} else {
|
||||||
existingCondition.LastTransitionTime = metav1.NewTime(time.Now())
|
existingCondition.LastTransitionTime = metav1.NewTime(time.Now())
|
||||||
}
|
}
|
||||||
|
changed = true
|
||||||
}
|
}
|
||||||
|
|
||||||
existingCondition.Reason = newCondition.Reason
|
if existingCondition.Reason != newCondition.Reason {
|
||||||
existingCondition.Message = newCondition.Message
|
existingCondition.Reason = newCondition.Reason
|
||||||
existingCondition.ObservedGeneration = newCondition.ObservedGeneration
|
changed = true
|
||||||
|
}
|
||||||
|
if existingCondition.Message != newCondition.Message {
|
||||||
|
existingCondition.Message = newCondition.Message
|
||||||
|
changed = true
|
||||||
|
}
|
||||||
|
if existingCondition.ObservedGeneration != newCondition.ObservedGeneration {
|
||||||
|
existingCondition.ObservedGeneration = newCondition.ObservedGeneration
|
||||||
|
changed = true
|
||||||
|
}
|
||||||
|
|
||||||
|
return changed
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveStatusCondition removes the corresponding conditionType from conditions.
|
// RemoveStatusCondition removes the corresponding conditionType from conditions if present. Returns
|
||||||
|
// true if it was present and got removed.
|
||||||
// conditions must be non-nil.
|
// conditions must be non-nil.
|
||||||
func RemoveStatusCondition(conditions *[]metav1.Condition, conditionType string) {
|
func RemoveStatusCondition(conditions *[]metav1.Condition, conditionType string) (removed bool) {
|
||||||
if conditions == nil || len(*conditions) == 0 {
|
if conditions == nil || len(*conditions) == 0 {
|
||||||
return
|
return false
|
||||||
}
|
}
|
||||||
newConditions := make([]metav1.Condition, 0, len(*conditions)-1)
|
newConditions := make([]metav1.Condition, 0, len(*conditions)-1)
|
||||||
for _, condition := range *conditions {
|
for _, condition := range *conditions {
|
||||||
|
@ -67,7 +81,10 @@ func RemoveStatusCondition(conditions *[]metav1.Condition, conditionType string)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
removed = len(*conditions) != len(newConditions)
|
||||||
*conditions = newConditions
|
*conditions = newConditions
|
||||||
|
|
||||||
|
return removed
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindStatusCondition finds the conditionType in conditions.
|
// FindStatusCondition finds the conditionType in conditions.
|
||||||
|
|
|
@ -203,6 +203,44 @@ func (a *int64Amount) Sub(b int64Amount) bool {
|
||||||
return a.Add(int64Amount{value: -b.value, scale: b.scale})
|
return a.Add(int64Amount{value: -b.value, scale: b.scale})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Mul multiplies the provided b to the current amount, or
|
||||||
|
// returns false if overflow or underflow would result.
|
||||||
|
func (a *int64Amount) Mul(b int64) bool {
|
||||||
|
switch {
|
||||||
|
case a.value == 0:
|
||||||
|
return true
|
||||||
|
case b == 0:
|
||||||
|
a.value = 0
|
||||||
|
a.scale = 0
|
||||||
|
return true
|
||||||
|
case a.scale == 0:
|
||||||
|
c, ok := int64Multiply(a.value, b)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
a.value = c
|
||||||
|
case a.scale > 0:
|
||||||
|
c, ok := int64Multiply(a.value, b)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if _, ok = positiveScaleInt64(c, a.scale); !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
a.value = c
|
||||||
|
default:
|
||||||
|
c, ok := int64Multiply(a.value, b)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if _, ok = negativeScaleInt64(c, -a.scale); !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
a.value = c
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
// AsScale adjusts this amount to set a minimum scale, rounding up, and returns true iff no precision
|
// AsScale adjusts this amount to set a minimum scale, rounding up, and returns true iff no precision
|
||||||
// was lost. (1.1e5).AsScale(5) would return 1.1e5, but (1.1e5).AsScale(6) would return 1e6.
|
// was lost. (1.1e5).AsScale(5) would return 1.1e5, but (1.1e5).AsScale(6) would return 1e6.
|
||||||
func (a int64Amount) AsScale(scale Scale) (int64Amount, bool) {
|
func (a int64Amount) AsScale(scale Scale) (int64Amount, bool) {
|
||||||
|
|
|
@ -592,6 +592,16 @@ func (q *Quantity) Sub(y Quantity) {
|
||||||
q.ToDec().d.Dec.Sub(q.d.Dec, y.AsDec())
|
q.ToDec().d.Dec.Sub(q.d.Dec, y.AsDec())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Mul multiplies the provided y to the current value.
|
||||||
|
// It will return false if the result is inexact. Otherwise, it will return true.
|
||||||
|
func (q *Quantity) Mul(y int64) bool {
|
||||||
|
q.s = ""
|
||||||
|
if q.d.Dec == nil && q.i.Mul(y) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return q.ToDec().d.Dec.Mul(q.d.Dec, inf.NewDec(y, inf.Scale(0))).UnscaledBig().IsInt64()
|
||||||
|
}
|
||||||
|
|
||||||
// Cmp returns 0 if the quantity is equal to y, -1 if the quantity is less than y, or 1 if the
|
// Cmp returns 0 if the quantity is equal to y, -1 if the quantity is less than y, or 1 if the
|
||||||
// quantity is greater than y.
|
// quantity is greater than y.
|
||||||
func (q *Quantity) Cmp(y Quantity) int {
|
func (q *Quantity) Cmp(y Quantity) int {
|
||||||
|
|
|
@ -173,7 +173,7 @@ func NestedStringMap(obj map[string]interface{}, fields ...string) (map[string]s
|
||||||
if str, ok := v.(string); ok {
|
if str, ok := v.(string); ok {
|
||||||
strMap[k] = str
|
strMap[k] = str
|
||||||
} else {
|
} else {
|
||||||
return nil, false, fmt.Errorf("%v accessor error: contains non-string key in the map: %v is of the type %T, expected string", jsonPath(fields), v, v)
|
return nil, false, fmt.Errorf("%v accessor error: contains non-string value in the map under key %q: %v is of the type %T, expected string", jsonPath(fields), k, v, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return strMap, true, nil
|
return strMap, true, nil
|
||||||
|
|
|
@ -257,3 +257,26 @@ func (d WithoutVersionDecoder) Decode(data []byte, defaults *schema.GroupVersion
|
||||||
}
|
}
|
||||||
return obj, gvk, err
|
return obj, gvk, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type encoderWithAllocator struct {
|
||||||
|
encoder EncoderWithAllocator
|
||||||
|
memAllocator MemoryAllocator
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewEncoderWithAllocator returns a new encoder
|
||||||
|
func NewEncoderWithAllocator(e EncoderWithAllocator, a MemoryAllocator) Encoder {
|
||||||
|
return &encoderWithAllocator{
|
||||||
|
encoder: e,
|
||||||
|
memAllocator: a,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Encode writes the provided object to the nested writer
|
||||||
|
func (e *encoderWithAllocator) Encode(obj Object, w io.Writer) error {
|
||||||
|
return e.encoder.EncodeWithAllocator(obj, w, e.memAllocator)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Identifier returns identifier of this encoder.
|
||||||
|
func (e *encoderWithAllocator) Identifier() Identifier {
|
||||||
|
return e.encoder.Identifier()
|
||||||
|
}
|
||||||
|
|
|
@ -134,23 +134,3 @@ func (e *encoder) Encode(obj runtime.Object) error {
|
||||||
e.buf.Reset()
|
e.buf.Reset()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
type encoderWithAllocator struct {
|
|
||||||
writer io.Writer
|
|
||||||
encoder runtime.EncoderWithAllocator
|
|
||||||
memAllocator runtime.MemoryAllocator
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewEncoderWithAllocator returns a new streaming encoder
|
|
||||||
func NewEncoderWithAllocator(w io.Writer, e runtime.EncoderWithAllocator, a runtime.MemoryAllocator) Encoder {
|
|
||||||
return &encoderWithAllocator{
|
|
||||||
writer: w,
|
|
||||||
encoder: e,
|
|
||||||
memAllocator: a,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Encode writes the provided object to the nested writer
|
|
||||||
func (e *encoderWithAllocator) Encode(obj runtime.Object) error {
|
|
||||||
return e.encoder.EncodeWithAllocator(obj, e.writer, e.memAllocator)
|
|
||||||
}
|
|
||||||
|
|
|
@ -136,6 +136,19 @@ func (c *LRUExpireCache) Remove(key interface{}) {
|
||||||
delete(c.entries, key)
|
delete(c.entries, key)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RemoveAll removes all keys that match predicate.
|
||||||
|
func (c *LRUExpireCache) RemoveAll(predicate func(key any) bool) {
|
||||||
|
c.lock.Lock()
|
||||||
|
defer c.lock.Unlock()
|
||||||
|
|
||||||
|
for key, element := range c.entries {
|
||||||
|
if predicate(key) {
|
||||||
|
c.evictionList.Remove(element)
|
||||||
|
delete(c.entries, key)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Keys returns all unexpired keys in the cache.
|
// Keys returns all unexpired keys in the cache.
|
||||||
//
|
//
|
||||||
// Keep in mind that subsequent calls to Get() for any of the returned keys
|
// Keep in mind that subsequent calls to Get() for any of the returned keys
|
||||||
|
|
|
@ -72,14 +72,14 @@ func FromString(val string) IntOrString {
|
||||||
return IntOrString{Type: String, StrVal: val}
|
return IntOrString{Type: String, StrVal: val}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse the given string and try to convert it to an integer before
|
// Parse the given string and try to convert it to an int32 integer before
|
||||||
// setting it as a string value.
|
// setting it as a string value.
|
||||||
func Parse(val string) IntOrString {
|
func Parse(val string) IntOrString {
|
||||||
i, err := strconv.Atoi(val)
|
i, err := strconv.ParseInt(val, 10, 32)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return FromString(val)
|
return FromString(val)
|
||||||
}
|
}
|
||||||
return FromInt(i)
|
return FromInt32(int32(i))
|
||||||
}
|
}
|
||||||
|
|
||||||
// UnmarshalJSON implements the json.Unmarshaller interface.
|
// UnmarshalJSON implements the json.Unmarshaller interface.
|
||||||
|
|
|
@ -25,6 +25,7 @@ import (
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
|
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
|
||||||
"sigs.k8s.io/structured-merge-diff/v4/merge"
|
"sigs.k8s.io/structured-merge-diff/v4/merge"
|
||||||
|
"sigs.k8s.io/structured-merge-diff/v4/typed"
|
||||||
)
|
)
|
||||||
|
|
||||||
type structuredMergeManager struct {
|
type structuredMergeManager struct {
|
||||||
|
@ -95,11 +96,11 @@ func (f *structuredMergeManager) Update(liveObj, newObj runtime.Object, managed
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("failed to convert live object (%v) to proper version: %v", objectGVKNN(liveObj), err)
|
return nil, nil, fmt.Errorf("failed to convert live object (%v) to proper version: %v", objectGVKNN(liveObj), err)
|
||||||
}
|
}
|
||||||
newObjTyped, err := f.typeConverter.ObjectToTyped(newObjVersioned)
|
newObjTyped, err := f.typeConverter.ObjectToTyped(newObjVersioned, typed.AllowDuplicates)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("failed to convert new object (%v) to smd typed: %v", objectGVKNN(newObjVersioned), err)
|
return nil, nil, fmt.Errorf("failed to convert new object (%v) to smd typed: %v", objectGVKNN(newObjVersioned), err)
|
||||||
}
|
}
|
||||||
liveObjTyped, err := f.typeConverter.ObjectToTyped(liveObjVersioned)
|
liveObjTyped, err := f.typeConverter.ObjectToTyped(liveObjVersioned, typed.AllowDuplicates)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("failed to convert live object (%v) to smd typed: %v", objectGVKNN(liveObjVersioned), err)
|
return nil, nil, fmt.Errorf("failed to convert live object (%v) to smd typed: %v", objectGVKNN(liveObjVersioned), err)
|
||||||
}
|
}
|
||||||
|
@ -139,11 +140,13 @@ func (f *structuredMergeManager) Apply(liveObj, patchObj runtime.Object, managed
|
||||||
return nil, nil, fmt.Errorf("failed to convert live object (%v) to proper version: %v", objectGVKNN(liveObj), err)
|
return nil, nil, fmt.Errorf("failed to convert live object (%v) to proper version: %v", objectGVKNN(liveObj), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Don't allow duplicates in the applied object.
|
||||||
patchObjTyped, err := f.typeConverter.ObjectToTyped(patchObj)
|
patchObjTyped, err := f.typeConverter.ObjectToTyped(patchObj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("failed to create typed patch object (%v): %v", objectGVKNN(patchObj), err)
|
return nil, nil, fmt.Errorf("failed to create typed patch object (%v): %v", objectGVKNN(patchObj), err)
|
||||||
}
|
}
|
||||||
liveObjTyped, err := f.typeConverter.ObjectToTyped(liveObjVersioned)
|
|
||||||
|
liveObjTyped, err := f.typeConverter.ObjectToTyped(liveObjVersioned, typed.AllowDuplicates)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("failed to create typed live object (%v): %v", objectGVKNN(liveObjVersioned), err)
|
return nil, nil, fmt.Errorf("failed to create typed live object (%v): %v", objectGVKNN(liveObjVersioned), err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ import (
|
||||||
// TypeConverter allows you to convert from runtime.Object to
|
// TypeConverter allows you to convert from runtime.Object to
|
||||||
// typed.TypedValue and the other way around.
|
// typed.TypedValue and the other way around.
|
||||||
type TypeConverter interface {
|
type TypeConverter interface {
|
||||||
ObjectToTyped(runtime.Object) (*typed.TypedValue, error)
|
ObjectToTyped(runtime.Object, ...typed.ValidationOptions) (*typed.TypedValue, error)
|
||||||
TypedToObject(*typed.TypedValue) (runtime.Object, error)
|
TypedToObject(*typed.TypedValue) (runtime.Object, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ func NewTypeConverter(openapiSpec map[string]*spec.Schema, preserveUnknownFields
|
||||||
return &typeConverter{parser: tr}, nil
|
return &typeConverter{parser: tr}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *typeConverter) ObjectToTyped(obj runtime.Object) (*typed.TypedValue, error) {
|
func (c *typeConverter) ObjectToTyped(obj runtime.Object, opts ...typed.ValidationOptions) (*typed.TypedValue, error) {
|
||||||
gvk := obj.GetObjectKind().GroupVersionKind()
|
gvk := obj.GetObjectKind().GroupVersionKind()
|
||||||
t := c.parser[gvk]
|
t := c.parser[gvk]
|
||||||
if t == nil {
|
if t == nil {
|
||||||
|
@ -62,9 +62,9 @@ func (c *typeConverter) ObjectToTyped(obj runtime.Object) (*typed.TypedValue, er
|
||||||
}
|
}
|
||||||
switch o := obj.(type) {
|
switch o := obj.(type) {
|
||||||
case *unstructured.Unstructured:
|
case *unstructured.Unstructured:
|
||||||
return t.FromUnstructured(o.UnstructuredContent())
|
return t.FromUnstructured(o.UnstructuredContent(), opts...)
|
||||||
default:
|
default:
|
||||||
return t.FromStructured(obj)
|
return t.FromStructured(obj, opts...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,12 +84,12 @@ func NewDeducedTypeConverter() TypeConverter {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ObjectToTyped converts an object into a TypedValue with a "deduced type".
|
// ObjectToTyped converts an object into a TypedValue with a "deduced type".
|
||||||
func (deducedTypeConverter) ObjectToTyped(obj runtime.Object) (*typed.TypedValue, error) {
|
func (deducedTypeConverter) ObjectToTyped(obj runtime.Object, opts ...typed.ValidationOptions) (*typed.TypedValue, error) {
|
||||||
switch o := obj.(type) {
|
switch o := obj.(type) {
|
||||||
case *unstructured.Unstructured:
|
case *unstructured.Unstructured:
|
||||||
return typed.DeducedParseableType.FromUnstructured(o.UnstructuredContent())
|
return typed.DeducedParseableType.FromUnstructured(o.UnstructuredContent(), opts...)
|
||||||
default:
|
default:
|
||||||
return typed.DeducedParseableType.FromStructured(obj)
|
return typed.DeducedParseableType.FromStructured(obj, opts...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue