mirror of https://github.com/knative/client.git
[master] Auto-update dependencies (#950)
Produced via: `./hack/update-deps.sh --upgrade && ./hack/update-codegen.sh` /assign maximilien rhuss /cc maximilien rhuss
This commit is contained in:
parent
786ccf5d0e
commit
49a552f155
8
go.mod
8
go.mod
|
|
@ -8,16 +8,16 @@ require (
|
|||
github.com/spf13/cobra v1.0.1-0.20200715031239-b95db644ed1c
|
||||
github.com/spf13/pflag v1.0.5
|
||||
github.com/spf13/viper v1.7.0
|
||||
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899
|
||||
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de
|
||||
gotest.tools v2.2.0+incompatible
|
||||
k8s.io/api v0.18.1
|
||||
k8s.io/apimachinery v0.18.6
|
||||
k8s.io/cli-runtime v0.17.6
|
||||
k8s.io/client-go v11.0.1-0.20190805182717-6502b5e7b1b5+incompatible
|
||||
k8s.io/code-generator v0.18.0
|
||||
knative.dev/eventing v0.16.1-0.20200724032657-8d83431c07bd
|
||||
knative.dev/pkg v0.0.0-20200724211057-f21f66204a5c
|
||||
knative.dev/serving v0.16.1-0.20200724203457-1517b1735305
|
||||
knative.dev/eventing v0.16.1-0.20200803090001-4cd17b80636f
|
||||
knative.dev/pkg v0.0.0-20200804051227-c3c869a34475
|
||||
knative.dev/serving v0.16.1-0.20200804124127-08d681889306
|
||||
sigs.k8s.io/yaml v1.2.0
|
||||
)
|
||||
|
||||
|
|
|
|||
68
go.sum
68
go.sum
|
|
@ -22,6 +22,8 @@ cloud.google.com/go v0.60.0 h1:R+tDlceO7Ss+zyvtsdhTxacDyZ1k99xwskQ4FT7ruoM=
|
|||
cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU=
|
||||
cloud.google.com/go v0.61.0 h1:NLQf5e1OMspfNT1RAHOB3ublr1TW3YTXO8OiWwVjK2U=
|
||||
cloud.google.com/go v0.61.0/go.mod h1:XukKJg4Y7QsUu0Hxg3qQKUWR4VuWivmyMK2+rUyxAqw=
|
||||
cloud.google.com/go v0.62.0 h1:RmDygqvj27Zf3fCQjQRtLyC7KwFcHkeJitcO0OoGOcA=
|
||||
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
|
||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
||||
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
|
||||
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
|
||||
|
|
@ -36,8 +38,7 @@ cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2k
|
|||
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
|
||||
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
|
||||
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
|
||||
cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w=
|
||||
cloud.google.com/go/pubsub v1.6.0/go.mod h1:I6DkrTv7tKIvDQTZt+6rAFo1446FEoVDJeLXTu4pCcE=
|
||||
cloud.google.com/go/pubsub v1.6.1/go.mod h1:kvW9rcn9OLEx6eTIzMBbWbpB8YsK3vu9jxgPolVz+p4=
|
||||
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
|
||||
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
|
||||
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
|
||||
|
|
@ -232,7 +233,7 @@ github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/
|
|||
github.com/clarketm/json v1.13.4/go.mod h1:ynr2LRfb0fQU34l07csRNBTcivjySLLiY1YzQqKVfdo=
|
||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/cloudevents/sdk-go v1.0.0/go.mod h1:3TkmM0cFqkhCHOq5JzzRU/RxRkwzoS8TZ+G448qVTog=
|
||||
github.com/cloudevents/sdk-go/v2 v2.0.1-0.20200630063327-b91da81265fe/go.mod h1:3CTrpB4+u7Iaj6fd7E2Xvm5IxMdRoaAhqaRVnOr2rCU=
|
||||
github.com/cloudevents/sdk-go/v2 v2.2.0/go.mod h1:3CTrpB4+u7Iaj6fd7E2Xvm5IxMdRoaAhqaRVnOr2rCU=
|
||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
|
||||
github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko=
|
||||
|
|
@ -1161,6 +1162,8 @@ golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPh
|
|||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 h1:DZhuSZLsGlFL4CmhA8BcRA0mnthyA/nZ00AqCUo7vHg=
|
||||
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de h1:ikNHVSjEfnvz6sxdSPCaPt572qowuyMDMJLLm3Db3ig=
|
||||
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
|
|
@ -1332,9 +1335,8 @@ golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||
golang.org/x/sys v0.0.0-20200610111108-226ff32320da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo=
|
||||
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200720211630-cb9d2d5c5666/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200722175500-76b94024e4b6 h1:X9xIZ1YU8bLZA3l6gqDUHSFiD0GFI9S548h6C8nDtOY=
|
||||
golang.org/x/sys v0.0.0-20200722175500-76b94024e4b6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1 h1:sIky/MyNRSHTrdxfsiUSS4WIAMvInbeXljJz+jDjeYE=
|
||||
golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
|
|
@ -1437,13 +1439,13 @@ golang.org/x/tools v0.0.0-20200527183253-8e7acdbce89d/go.mod h1:EkVYQZoAsY45+roY
|
|||
golang.org/x/tools v0.0.0-20200601175630-2caf76543d99/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
golang.org/x/tools v0.0.0-20200709181711-e327e1019dfe/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
golang.org/x/tools v0.0.0-20200713011307-fd294ab11aed/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
golang.org/x/tools v0.0.0-20200721032237-77f530d86f9a/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
golang.org/x/tools v0.0.0-20200721223218-6123e77877b2/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
golang.org/x/tools v0.0.0-20200723000907-a7c6fd066f6d h1:7k9BKfwmdbykG6l5ztniTrH0TP25yel8O7l26/yovMU=
|
||||
golang.org/x/tools v0.0.0-20200723000907-a7c6fd066f6d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
golang.org/x/tools v0.0.0-20200725200936-102e7d357031/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
golang.org/x/tools v0.0.0-20200727233628-55644ead90ce/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
golang.org/x/tools v0.0.0-20200731060945-b5fad4ed8dd6 h1:qKpj8TpV+LEhel7H/fR788J+KvhWZ3o3V6N2fU/iuLU=
|
||||
golang.org/x/tools v0.0.0-20200731060945-b5fad4ed8dd6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
||||
|
|
@ -1530,12 +1532,13 @@ google.golang.org/genproto v0.0.0-20200527145253-8367513e4ece/go.mod h1:jDfRM7Fc
|
|||
google.golang.org/genproto v0.0.0-20200603110839-e855014d5736/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
|
||||
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
|
||||
google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20200709005830-7a2ca40e9dc3/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20200711021454-869866162049/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20200721032028-5044d0edf986/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20200722002428-88e341933a54 h1:ASrBgpl9XvkNTP0m39/j18mid7aoF21npu2ioIBxYnY=
|
||||
google.golang.org/genproto v0.0.0-20200722002428-88e341933a54/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20200726014623-da3ae01ef02d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20200728010541-3dc8dca74b7b/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20200731012542-8145dea6a485 h1:wTk5DQB3+1darAz4Ldomo0r5bUOCKX7gilxQ4sb2kno=
|
||||
google.golang.org/genproto v0.0.0-20200731012542-8145dea6a485/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
|
|
@ -1559,6 +1562,8 @@ google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa
|
|||
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
|
||||
google.golang.org/grpc v1.30.0 h1:M5a8xTlYTxwMn5ZFkwhRabsygDY5G8TYLyQDBxJNAxE=
|
||||
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
||||
google.golang.org/grpc v1.31.0 h1:T7P4R73V3SSDPhH7WW7ATbfViLtmamH0DKrP3f9AuDI=
|
||||
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||
|
|
@ -1681,29 +1686,27 @@ k8s.io/legacy-cloud-providers v0.17.4/go.mod h1:FikRNoD64ECjkxO36gkDgJeiQWwyZTuB
|
|||
k8s.io/metrics v0.17.2/go.mod h1:3TkNHET4ROd+NfzNxkjoVfQ0Ob4iZnaHmSEA4vYpwLw=
|
||||
k8s.io/test-infra v0.0.0-20200514184223-ba32c8aae783/go.mod h1:bW6thaPZfL2hW7ecjx2WYwlP9KQLM47/xIJyttkVk5s=
|
||||
k8s.io/test-infra v0.0.0-20200617221206-ea73eaeab7ff/go.mod h1:L3+cRvwftUq8IW1TrHji5m3msnc4uck/7LsE/GR/aZk=
|
||||
k8s.io/test-infra v0.0.0-20200721115715-1af01ef6b4c8/go.mod h1:4cRZlOy5Ka3Ym/orCmNWL2dsE39pN0xHFT0WFrZe2HQ=
|
||||
k8s.io/test-infra v0.0.0-20200722010006-526277bee528/go.mod h1:4cRZlOy5Ka3Ym/orCmNWL2dsE39pN0xHFT0WFrZe2HQ=
|
||||
k8s.io/test-infra v0.0.0-20200723132140-b02d194a2d64/go.mod h1:4cRZlOy5Ka3Ym/orCmNWL2dsE39pN0xHFT0WFrZe2HQ=
|
||||
k8s.io/test-infra v0.0.0-20200728085909-4407d8aec1ee/go.mod h1:4cRZlOy5Ka3Ym/orCmNWL2dsE39pN0xHFT0WFrZe2HQ=
|
||||
k8s.io/test-infra v0.0.0-20200731093307-ac6260b71531/go.mod h1:4cRZlOy5Ka3Ym/orCmNWL2dsE39pN0xHFT0WFrZe2HQ=
|
||||
k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
|
||||
k8s.io/utils v0.0.0-20200124190032-861946025e34 h1:HjlUD6M0K3P8nRXmr2B9o4F9dUy9TCj/aEpReeyi6+k=
|
||||
k8s.io/utils v0.0.0-20200124190032-861946025e34/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
|
||||
knative.dev/caching v0.0.0-20200116200605-67bca2c83dfa/go.mod h1:dHXFU6CGlLlbzaWc32g80cR92iuBSpsslDNBWI8C7eg=
|
||||
knative.dev/caching v0.0.0-20200723145958-d031ce9de55d/go.mod h1:z0tB8jJWOJj4SfbWGps++hjMQHSxB5XEiTyaRuyRtfE=
|
||||
knative.dev/eventing v0.16.1-0.20200724032657-8d83431c07bd h1:3Etn1vLNy1o0UE3kmUVedC/ZPHMYqKIsr2xAt3YArIY=
|
||||
knative.dev/eventing v0.16.1-0.20200724032657-8d83431c07bd/go.mod h1:D7x216MQznRHiu3V7Y5I29/xCRkHxl9i21T6LrZPQt8=
|
||||
knative.dev/caching v0.0.0-20200731163501-72860523f33d/go.mod h1:Gb7i/Nrx7SCE248i+f/STNKFqFFOY62M8xPn7C7V1ps=
|
||||
knative.dev/eventing v0.16.1-0.20200803090001-4cd17b80636f h1:h5uf0JHbKOTCPFhuD0jFa197ThvpiaynVVqt4tWwn0U=
|
||||
knative.dev/eventing v0.16.1-0.20200803090001-4cd17b80636f/go.mod h1:KwxrviG6CffzjvcnPfRHqRIxzTG6S2F+IN4C3Htihq0=
|
||||
knative.dev/eventing-contrib v0.11.2/go.mod h1:SnXZgSGgMSMLNFTwTnpaOH7hXDzTFtw0J8OmHflNx3g=
|
||||
knative.dev/networking v0.0.0-20200723155758-cc457d7322d6 h1:E3icpGu2JG84UXvrG/36FovPwVmBWs1q6R6xZzcO6dM=
|
||||
knative.dev/networking v0.0.0-20200723155758-cc457d7322d6/go.mod h1:Xd6H9nzGwHI/tfEnvrm7dQjYP1s/CbZL8J941HyUaSE=
|
||||
knative.dev/networking v0.0.0-20200801232901-0a0cf9380a8d h1:8w9B2wTj9F2zmzTTfu12CqiNcdaxIvuBFR3AZY6RAdY=
|
||||
knative.dev/networking v0.0.0-20200801232901-0a0cf9380a8d/go.mod h1:wHAtNud0NOLQ7Xobl0PjLf91deGXW4esaa+R4pwxJnQ=
|
||||
knative.dev/pkg v0.0.0-20200207155214-fef852970f43/go.mod h1:pgODObA1dTyhNoFxPZTTjNWfx6F0aKsKzn+vaT9XO/Q=
|
||||
knative.dev/pkg v0.0.0-20200723060257-ae9c3f7fa8d3/go.mod h1:pOJ+tu5k/SgHPGmecWqFguxJcIZozyDWlTlyldGcYGM=
|
||||
knative.dev/pkg v0.0.0-20200724055557-c36f46cc8c80/go.mod h1:GtoTEupsOzadgRKT4GgPWukbhAcINwDDGcKibTyd1Fk=
|
||||
knative.dev/pkg v0.0.0-20200724211057-f21f66204a5c h1:jJs9rQhkCexFr9m6+sYIPq/0DtRe+typQB64ffbXydM=
|
||||
knative.dev/pkg v0.0.0-20200724211057-f21f66204a5c/go.mod h1:jVP9M8uft3EYhWF8K00zKiNCvyfGy3tm0L2w9edCRqw=
|
||||
knative.dev/serving v0.16.1-0.20200724203457-1517b1735305 h1:Bqn8mTuMMWdnmbJzRPvEM69p71npap/YQPIxuNvkChE=
|
||||
knative.dev/serving v0.16.1-0.20200724203457-1517b1735305/go.mod h1:txxxmKATqqQv9j/s7K6PI6BAZ3cOAddJE72LHUsTxDY=
|
||||
knative.dev/test-infra v0.0.0-20200721175154-c98db9bd4d5d/go.mod h1:kzRhTm5L08eDQFRl8NKSAN93lz6IZWQMs+2TjTCN+VA=
|
||||
knative.dev/test-infra v0.0.0-20200722142057-3ca910b5a25e/go.mod h1:oHmDsPmq+zcc3b+Z94Kgmrz1JnmZEz36jmKuvL2Lw7o=
|
||||
knative.dev/test-infra v0.0.0-20200723182457-517b66ba19c1/go.mod h1:Y3sNbLSTA11kRcLvTzRsZCxO+GQuw7KV7+PL+iD+9CA=
|
||||
knative.dev/pkg v0.0.0-20200731005101-694087017879/go.mod h1:XgwbBKFaZgeMYBf1LRc5WtHDbCnOv6j+36/W9XFxs7Y=
|
||||
knative.dev/pkg v0.0.0-20200804051227-c3c869a34475 h1:Gths5wpLr78xFcm8eQ82c4lT7jJJOqguAG05LJQI/6k=
|
||||
knative.dev/pkg v0.0.0-20200804051227-c3c869a34475/go.mod h1:603ifFNju4JQo+VamPtWsxJW2XvK7BKWvOPA5138hNg=
|
||||
knative.dev/serving v0.16.1-0.20200804124127-08d681889306 h1:dfhSv/MOeFjarcCFwgprV++Cf0cLE46glhDosvSW8dc=
|
||||
knative.dev/serving v0.16.1-0.20200804124127-08d681889306/go.mod h1:m7yjR+ojbSpkxF8FnqENvvBwKtHQklw6qviYDmTbOqg=
|
||||
knative.dev/test-infra v0.0.0-20200729161259-d21e6ed450cb/go.mod h1:AfEfWe/Z/DIA2vQSbSTxMVlF+ErBD7Oqc4/K/x1no90=
|
||||
knative.dev/test-infra v0.0.0-20200730214800-52f8800d5692/go.mod h1:AfEfWe/Z/DIA2vQSbSTxMVlF+ErBD7Oqc4/K/x1no90=
|
||||
knative.dev/test-infra v0.0.0-20200731141600-8bb2015c65e2/go.mod h1:0le/boMbbcshz6ffNQRYyTkL7xubokot4dKcO/1daIc=
|
||||
modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw=
|
||||
modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk=
|
||||
modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k=
|
||||
|
|
@ -1722,6 +1725,7 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
|||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||
sigs.k8s.io/boskos v0.0.0-20200526191642-45fc818e2d00/go.mod h1:L1ubP7d1CCMSQSjKiZv6dGbh7b4kfoG+dFPj8cfYDnI=
|
||||
sigs.k8s.io/boskos v0.0.0-20200717180850-7299d535c033/go.mod h1:ZO5RV+VxJS9mb6DvZ1yAjywoyq/wQ8b0vDoZxcIA5kE=
|
||||
sigs.k8s.io/boskos v0.0.0-20200729174948-794df80db9c9/go.mod h1:ZO5RV+VxJS9mb6DvZ1yAjywoyq/wQ8b0vDoZxcIA5kE=
|
||||
sigs.k8s.io/controller-runtime v0.5.0/go.mod h1:REiJzC7Y00U+2YkMbT8wxgrsX5USpXKGhb2sCtAXiT8=
|
||||
sigs.k8s.io/controller-runtime v0.5.4/go.mod h1:JZUwSMVbxDupo0lTJSSFP5pimEyxGynROImSsqIOx1A=
|
||||
sigs.k8s.io/kustomize v2.0.3+incompatible h1:JUufWFNlI44MdtnjUqVnvh29rR37PQFzPbLXqhyOyX0=
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
d5ec9cdc6b33bb0040747130db664579553ceb45
|
||||
5efff0c4bd0a8438953215dcf1b29a337c43c8c8
|
||||
|
|
|
|||
|
|
@ -79,10 +79,13 @@ function teardown_test_resources() {
|
|||
# Run the given E2E tests. Assume tests are tagged e2e, unless `-tags=XXX` is passed.
|
||||
# Parameters: $1..$n - any go test flags, then directories containing the tests to run.
|
||||
function go_test_e2e() {
|
||||
local test_options=""
|
||||
local go_options=""
|
||||
[[ ! " $@" == *" -tags="* ]] && go_options="-tags=e2e"
|
||||
report_go_test -v -race -count=1 ${go_options} $@ "${test_options}"
|
||||
local go_test_args=()
|
||||
# Remove empty args as `go test` will consider it as running tests for the current directory, which is not expected.
|
||||
for arg in "$@"; do
|
||||
[[ -n "$arg" ]] && go_test_args+=("$arg")
|
||||
done
|
||||
[[ ! " $*" == *" -tags="* ]] && go_test_args+=("-tags=e2e")
|
||||
report_go_test -race -count=1 "${go_test_args[@]}"
|
||||
}
|
||||
|
||||
# Dumps the k8s api server metrics. Spins up a proxy, waits a little bit and
|
||||
|
|
@ -93,7 +96,7 @@ function dump_metrics() {
|
|||
local proxy_pid=$!
|
||||
sleep 5
|
||||
header ">> Grabbing k8s metrics"
|
||||
curl -s http://localhost:8080/metrics > ${ARTIFACTS}/k8s.metrics.txt
|
||||
curl -s http://localhost:8080/metrics > "${ARTIFACTS}"/k8s.metrics.txt
|
||||
# Clean up proxy so it doesn't interfere with job shutting down
|
||||
kill $proxy_pid || true
|
||||
}
|
||||
|
|
|
|||
|
|
@ -391,43 +391,45 @@ function mktemp_with_extension() {
|
|||
# $2 - check name as an identifier (e.g., GoBuild)
|
||||
# $3 - failure message (can contain newlines), optional (means success)
|
||||
function create_junit_xml() {
|
||||
local xml="$(mktemp_with_extension "${ARTIFACTS}"/junit_XXXXXXXX xml)"
|
||||
local xml
|
||||
xml="$(mktemp_with_extension "${ARTIFACTS}"/junit_XXXXXXXX xml)"
|
||||
echo "JUnit file ${xml} is created for reporting the test result"
|
||||
run_kntest junit --suite="$1" --name="$2" --err-msg="$3" --dest="${xml}" || return 1
|
||||
}
|
||||
|
||||
# Runs a go test and generate a junit summary.
|
||||
# Parameters: $1... - parameters to go test
|
||||
function report_go_test() {
|
||||
# Run tests in verbose mode to capture details.
|
||||
# go doesn't like repeating -v, so remove if passed.
|
||||
local args=" $@ "
|
||||
local go_test="go test -v ${args/ -v / }"
|
||||
# Just run regular go tests if not on Prow.
|
||||
echo "Running tests with '${go_test}'"
|
||||
local report="$(mktemp)"
|
||||
capture_output "${report}" ${go_test}
|
||||
local go_test_args=( "$@" )
|
||||
# Install gotestsum if necessary.
|
||||
run_go_tool gotest.tools/gotestsum gotestsum --help > /dev/null 2>&1
|
||||
# Capture the test output to the report file.
|
||||
local report
|
||||
report="$(mktemp)"
|
||||
local xml
|
||||
xml="$(mktemp_with_extension "${ARTIFACTS}"/junit_XXXXXXXX xml)"
|
||||
echo "Running go test with args: ${go_test_args[*]}"
|
||||
# TODO(chizhg): change to `--format testname`?
|
||||
capture_output "${report}" gotestsum --format standard-verbose \
|
||||
--junitfile "${xml}" --junitfile-testsuite-name relative --junitfile-testcase-classname relative \
|
||||
-- "${go_test_args[@]}"
|
||||
local failed=$?
|
||||
echo "Finished run, return code is ${failed}"
|
||||
# Install go-junit-report if necessary.
|
||||
run_go_tool github.com/jstemmer/go-junit-report go-junit-report --help > /dev/null 2>&1
|
||||
local xml="$(mktemp_with_extension ${ARTIFACTS}/junit_XXXXXXXX xml)"
|
||||
cat ${report} \
|
||||
| go-junit-report \
|
||||
| sed -e "s#\"\(github\.com/knative\|knative\.dev\)/${REPO_NAME}/#\"#g" \
|
||||
> ${xml}
|
||||
|
||||
echo "XML report written to ${xml}"
|
||||
if [[ -n "$(grep '<testsuites></testsuites>' ${xml})" ]]; then
|
||||
if [[ -n "$(grep '<testsuites></testsuites>' "${xml}")" ]]; then
|
||||
# XML report is empty, something's wrong; use the output as failure reason
|
||||
create_junit_xml _go_tests "GoTests" "$(cat ${report})"
|
||||
create_junit_xml _go_tests "GoTests" "$(cat "${report}")"
|
||||
fi
|
||||
# Capture and report any race condition errors
|
||||
local race_errors="$(sed -n '/^WARNING: DATA RACE$/,/^==================$/p' ${report})"
|
||||
local race_errors
|
||||
race_errors="$(sed -n '/^WARNING: DATA RACE$/,/^==================$/p' "${report}")"
|
||||
create_junit_xml _go_tests "DataRaceAnalysis" "${race_errors}"
|
||||
if (( ! IS_PROW )); then
|
||||
# Keep the suffix, so files are related.
|
||||
local logfile=${xml/junit_/go_test_}
|
||||
logfile=${logfile/.xml/.log}
|
||||
cp ${report} ${logfile}
|
||||
cp "${report}" "${logfile}"
|
||||
echo "Test log written to ${logfile}"
|
||||
fi
|
||||
return ${failed}
|
||||
|
|
@ -553,16 +555,13 @@ function run_go_tool() {
|
|||
function run_kntest() {
|
||||
# If the current repo is test-infra, run kntest from source.
|
||||
if [[ "${REPO_NAME}" == "test-infra" ]]; then
|
||||
# Each parameter can possibly be in the format of "--xxx yyy", using $@ can automatically split them into multiple positional arguments for the command.
|
||||
# shellcheck disable=SC2068
|
||||
go run "${REPO_ROOT_DIR}"/kntest/cmd/kntest $@
|
||||
go run "${REPO_ROOT_DIR}"/kntest/cmd/kntest "$@"
|
||||
# Otherwise kntest must be installed.
|
||||
else
|
||||
if [[ ! -x "$(command -v kntest)" ]]; then
|
||||
echo "--- FAIL: kntest not installed, please clone test-infra repo and run \`go install ./kntest/cmd/kntest\` to install it"; return 1;
|
||||
fi
|
||||
# shellcheck disable=SC2068
|
||||
kntest $@
|
||||
kntest "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -107,6 +107,7 @@ includes_FreeBSD='
|
|||
#include <sys/types.h>
|
||||
#include <sys/disk.h>
|
||||
#include <sys/event.h>
|
||||
#include <sys/sched.h>
|
||||
#include <sys/select.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/sockio.h>
|
||||
|
|
@ -297,6 +298,7 @@ includes_NetBSD='
|
|||
#include <sys/extattr.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/mount.h>
|
||||
#include <sys/sched.h>
|
||||
#include <sys/select.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/sockio.h>
|
||||
|
|
|
|||
|
|
@ -339,6 +339,12 @@ const (
|
|||
CLOCK_UPTIME_FAST = 0x8
|
||||
CLOCK_UPTIME_PRECISE = 0x7
|
||||
CLOCK_VIRTUAL = 0x1
|
||||
CPUSTATES = 0x5
|
||||
CP_IDLE = 0x4
|
||||
CP_INTR = 0x3
|
||||
CP_NICE = 0x1
|
||||
CP_SYS = 0x2
|
||||
CP_USER = 0x0
|
||||
CREAD = 0x800
|
||||
CRTSCTS = 0x30000
|
||||
CS5 = 0x0
|
||||
|
|
|
|||
|
|
@ -339,6 +339,12 @@ const (
|
|||
CLOCK_UPTIME_FAST = 0x8
|
||||
CLOCK_UPTIME_PRECISE = 0x7
|
||||
CLOCK_VIRTUAL = 0x1
|
||||
CPUSTATES = 0x5
|
||||
CP_IDLE = 0x4
|
||||
CP_INTR = 0x3
|
||||
CP_NICE = 0x1
|
||||
CP_SYS = 0x2
|
||||
CP_USER = 0x0
|
||||
CREAD = 0x800
|
||||
CRTSCTS = 0x30000
|
||||
CS5 = 0x0
|
||||
|
|
|
|||
|
|
@ -339,6 +339,12 @@ const (
|
|||
CLOCK_UPTIME_FAST = 0x8
|
||||
CLOCK_UPTIME_PRECISE = 0x7
|
||||
CLOCK_VIRTUAL = 0x1
|
||||
CPUSTATES = 0x5
|
||||
CP_IDLE = 0x4
|
||||
CP_INTR = 0x3
|
||||
CP_NICE = 0x1
|
||||
CP_SYS = 0x2
|
||||
CP_USER = 0x0
|
||||
CREAD = 0x800
|
||||
CRTSCTS = 0x30000
|
||||
CS5 = 0x0
|
||||
|
|
|
|||
|
|
@ -339,6 +339,12 @@ const (
|
|||
CLOCK_UPTIME_FAST = 0x8
|
||||
CLOCK_UPTIME_PRECISE = 0x7
|
||||
CLOCK_VIRTUAL = 0x1
|
||||
CPUSTATES = 0x5
|
||||
CP_IDLE = 0x4
|
||||
CP_INTR = 0x3
|
||||
CP_NICE = 0x1
|
||||
CP_SYS = 0x2
|
||||
CP_USER = 0x0
|
||||
CREAD = 0x800
|
||||
CRTSCTS = 0x30000
|
||||
CS5 = 0x0
|
||||
|
|
|
|||
|
|
@ -158,6 +158,12 @@ const (
|
|||
CLONE_SIGHAND = 0x800
|
||||
CLONE_VFORK = 0x4000
|
||||
CLONE_VM = 0x100
|
||||
CPUSTATES = 0x5
|
||||
CP_IDLE = 0x4
|
||||
CP_INTR = 0x3
|
||||
CP_NICE = 0x1
|
||||
CP_SYS = 0x2
|
||||
CP_USER = 0x0
|
||||
CREAD = 0x800
|
||||
CRTSCTS = 0x10000
|
||||
CS5 = 0x0
|
||||
|
|
|
|||
|
|
@ -158,6 +158,12 @@ const (
|
|||
CLONE_SIGHAND = 0x800
|
||||
CLONE_VFORK = 0x4000
|
||||
CLONE_VM = 0x100
|
||||
CPUSTATES = 0x5
|
||||
CP_IDLE = 0x4
|
||||
CP_INTR = 0x3
|
||||
CP_NICE = 0x1
|
||||
CP_SYS = 0x2
|
||||
CP_USER = 0x0
|
||||
CREAD = 0x800
|
||||
CRTSCTS = 0x10000
|
||||
CS5 = 0x0
|
||||
|
|
|
|||
|
|
@ -150,6 +150,12 @@ const (
|
|||
BRKINT = 0x2
|
||||
CFLUSH = 0xf
|
||||
CLOCAL = 0x8000
|
||||
CPUSTATES = 0x5
|
||||
CP_IDLE = 0x4
|
||||
CP_INTR = 0x3
|
||||
CP_NICE = 0x1
|
||||
CP_SYS = 0x2
|
||||
CP_USER = 0x0
|
||||
CREAD = 0x800
|
||||
CRTSCTS = 0x10000
|
||||
CS5 = 0x0
|
||||
|
|
|
|||
|
|
@ -158,6 +158,12 @@ const (
|
|||
CLONE_SIGHAND = 0x800
|
||||
CLONE_VFORK = 0x4000
|
||||
CLONE_VM = 0x100
|
||||
CPUSTATES = 0x5
|
||||
CP_IDLE = 0x4
|
||||
CP_INTR = 0x3
|
||||
CP_NICE = 0x1
|
||||
CP_SYS = 0x2
|
||||
CP_USER = 0x0
|
||||
CREAD = 0x800
|
||||
CRTSCTS = 0x10000
|
||||
CS5 = 0x0
|
||||
|
|
|
|||
|
|
@ -59,6 +59,21 @@ const (
|
|||
// BrokerChannelAddressStatusAnnotationKey is the broker status
|
||||
// annotation key used to specify the address of its channel.
|
||||
BrokerChannelAddressStatusAnnotationKey = "knative.dev/channelAddress"
|
||||
|
||||
// BrokerChannelAPIVersionStatusAnnotationKey is the broker status
|
||||
// annotation key used to specify the APIVersion of the channel for
|
||||
// the triggers to subscribe to.
|
||||
BrokerChannelAPIVersionStatusAnnotationKey = "knative.dev/channelAPIVersion"
|
||||
|
||||
// BrokerChannelKindStatusAnnotationKey is the broker status
|
||||
// annotation key used to specify the Kind of the channel for
|
||||
// the triggers to subscribe to.
|
||||
BrokerChannelKindStatusAnnotationKey = "knative.dev/channelKind"
|
||||
|
||||
// BrokerChannelNameStatusAnnotationKey is the broker status
|
||||
// annotation key used to specify the name of the channel for
|
||||
// the triggers to subscribe to.
|
||||
BrokerChannelNameStatusAnnotationKey = "knative.dev/channelName"
|
||||
)
|
||||
|
||||
var (
|
||||
|
|
|
|||
|
|
@ -19,16 +19,64 @@ package v1alpha2
|
|||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"knative.dev/eventing/pkg/apis/sources/v1beta1"
|
||||
"knative.dev/pkg/apis"
|
||||
)
|
||||
|
||||
// ConvertTo implements apis.Convertible
|
||||
func (source *PingSource) ConvertTo(ctx context.Context, sink apis.Convertible) error {
|
||||
return fmt.Errorf("v1alpha2 is the highest known version, got: %T", sink)
|
||||
// Converts source from v1alpha2.PingSource into a higher version.
|
||||
func (source *PingSource) ConvertTo(ctx context.Context, obj apis.Convertible) error {
|
||||
switch sink := obj.(type) {
|
||||
case *v1beta1.PingSource:
|
||||
sink.ObjectMeta = source.ObjectMeta
|
||||
sink.Spec = v1beta1.PingSourceSpec{
|
||||
JsonData: source.Spec.JsonData,
|
||||
SourceSpec: source.Spec.SourceSpec,
|
||||
}
|
||||
sink.Status = v1beta1.PingSourceStatus{
|
||||
SourceStatus: source.Status.SourceStatus,
|
||||
}
|
||||
|
||||
// in v1beta1, timezone has its own field
|
||||
schedule := source.Spec.Schedule
|
||||
if strings.HasPrefix(schedule, "TZ=") || strings.HasPrefix(schedule, "CRON_TZ=") {
|
||||
i := strings.Index(schedule, " ")
|
||||
eq := strings.Index(schedule, "=")
|
||||
sink.Spec.Timezone = schedule[eq+1 : i]
|
||||
sink.Spec.Schedule = strings.TrimSpace(schedule[i:])
|
||||
} else {
|
||||
sink.Spec.Schedule = schedule
|
||||
}
|
||||
|
||||
return nil
|
||||
default:
|
||||
return apis.ConvertToViaProxy(ctx, source, &v1beta1.PingSource{}, sink)
|
||||
}
|
||||
}
|
||||
|
||||
// ConvertFrom implements apis.Convertible
|
||||
func (sink *PingSource) ConvertFrom(ctx context.Context, source apis.Convertible) error {
|
||||
return fmt.Errorf("v1alpha2 is the highest known version, got: %T", source)
|
||||
// Converts obj from a higher version into v1alpha2.PingSource.
|
||||
func (sink *PingSource) ConvertFrom(ctx context.Context, obj apis.Convertible) error {
|
||||
switch source := obj.(type) {
|
||||
case *v1beta1.PingSource:
|
||||
sink.ObjectMeta = source.ObjectMeta
|
||||
sink.Spec = PingSourceSpec{
|
||||
JsonData: source.Spec.JsonData,
|
||||
SourceSpec: source.Spec.SourceSpec,
|
||||
}
|
||||
sink.Status = PingSourceStatus{
|
||||
SourceStatus: source.Status.SourceStatus,
|
||||
}
|
||||
|
||||
if source.Spec.Timezone != "" {
|
||||
sink.Spec.Schedule = fmt.Sprintf("CRON_TZ=%s %s", source.Spec.Timezone, source.Spec.Schedule)
|
||||
} else {
|
||||
sink.Spec.Schedule = source.Spec.Schedule
|
||||
}
|
||||
return nil
|
||||
default:
|
||||
return apis.ConvertFromViaProxy(ctx, source, &v1beta1.PingSource{}, sink)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
Copyright 2020 The Knative Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package v1beta1
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"knative.dev/pkg/apis"
|
||||
)
|
||||
|
||||
// ConvertTo implements apis.Convertible
|
||||
func (source *PingSource) ConvertTo(ctx context.Context, sink apis.Convertible) error {
|
||||
return fmt.Errorf("v1beta1 is the highest known version, got: %T", sink)
|
||||
}
|
||||
|
||||
// ConvertFrom implements apis.Convertible
|
||||
func (sink *PingSource) ConvertFrom(ctx context.Context, source apis.Convertible) error {
|
||||
return fmt.Errorf("v1beta1 is the highest known version, got: %T", source)
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
Copyright 2020 The Knative Authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package v1beta1
|
||||
|
||||
import (
|
||||
"context"
|
||||
)
|
||||
|
||||
const (
|
||||
defaultSchedule = "* * * * *"
|
||||
)
|
||||
|
||||
func (s *PingSource) SetDefaults(ctx context.Context) {
|
||||
s.Spec.SetDefaults(ctx)
|
||||
}
|
||||
|
||||
func (ss *PingSourceSpec) SetDefaults(ctx context.Context) {
|
||||
if ss.Schedule == "" {
|
||||
ss.Schedule = defaultSchedule
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
/*
|
||||
Copyright 2020 The Knative Authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package v1beta1
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
appsv1 "k8s.io/api/apps/v1"
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"knative.dev/pkg/apis"
|
||||
)
|
||||
|
||||
const (
|
||||
// PingSourceConditionReady has status True when the PingSource is ready to send events.
|
||||
PingSourceConditionReady = apis.ConditionReady
|
||||
|
||||
// PingSourceConditionSinkProvided has status True when the PingSource has been configured with a sink target.
|
||||
PingSourceConditionSinkProvided apis.ConditionType = "SinkProvided"
|
||||
|
||||
// PingSourceConditionDeployed has status True when the PingSource has had it's receive adapter deployment created.
|
||||
PingSourceConditionDeployed apis.ConditionType = "Deployed"
|
||||
)
|
||||
|
||||
var PingSourceCondSet = apis.NewLivingConditionSet(
|
||||
PingSourceConditionSinkProvided,
|
||||
PingSourceConditionDeployed)
|
||||
|
||||
// GetConditionSet retrieves the condition set for this resource. Implements the KRShaped interface.
|
||||
func (*PingSource) GetConditionSet() apis.ConditionSet {
|
||||
return PingSourceCondSet
|
||||
}
|
||||
|
||||
// PingSourceSource returns the PingSource CloudEvent source.
|
||||
func PingSourceSource(namespace, name string) string {
|
||||
return fmt.Sprintf("/apis/v1/namespaces/%s/pingsources/%s", namespace, name)
|
||||
}
|
||||
|
||||
// GetUntypedSpec returns the spec of the PingSource.
|
||||
func (s *PingSource) GetUntypedSpec() interface{} {
|
||||
return s.Spec
|
||||
}
|
||||
|
||||
// GetGroupVersionKind returns the GroupVersionKind.
|
||||
func (s *PingSource) GetGroupVersionKind() schema.GroupVersionKind {
|
||||
return SchemeGroupVersion.WithKind("PingSource")
|
||||
}
|
||||
|
||||
// GetCondition returns the condition currently associated with the given type, or nil.
|
||||
func (s *PingSourceStatus) GetCondition(t apis.ConditionType) *apis.Condition {
|
||||
return PingSourceCondSet.Manage(s).GetCondition(t)
|
||||
}
|
||||
|
||||
// GetTopLevelCondition returns the top level Condition.
|
||||
func (ps *PingSourceStatus) GetTopLevelCondition() *apis.Condition {
|
||||
return PingSourceCondSet.Manage(ps).GetTopLevelCondition()
|
||||
}
|
||||
|
||||
// IsReady returns true if the resource is ready overall.
|
||||
func (s *PingSourceStatus) IsReady() bool {
|
||||
return PingSourceCondSet.Manage(s).IsHappy()
|
||||
}
|
||||
|
||||
// InitializeConditions sets relevant unset conditions to Unknown state.
|
||||
func (s *PingSourceStatus) InitializeConditions() {
|
||||
PingSourceCondSet.Manage(s).InitializeConditions()
|
||||
}
|
||||
|
||||
// MarkSink sets the condition that the source has a sink configured.
|
||||
func (s *PingSourceStatus) MarkSink(uri *apis.URL) {
|
||||
s.SinkURI = uri
|
||||
if uri != nil {
|
||||
PingSourceCondSet.Manage(s).MarkTrue(PingSourceConditionSinkProvided)
|
||||
} else {
|
||||
PingSourceCondSet.Manage(s).MarkFalse(PingSourceConditionSinkProvided, "SinkEmpty", "Sink has resolved to empty.")
|
||||
}
|
||||
}
|
||||
|
||||
// MarkNoSink sets the condition that the source does not have a sink configured.
|
||||
func (s *PingSourceStatus) MarkNoSink(reason, messageFormat string, messageA ...interface{}) {
|
||||
PingSourceCondSet.Manage(s).MarkFalse(PingSourceConditionSinkProvided, reason, messageFormat, messageA...)
|
||||
}
|
||||
|
||||
// PropagateDeploymentAvailability uses the availability of the provided Deployment to determine if
|
||||
// PingSourceConditionDeployed should be marked as true or false.
|
||||
func (s *PingSourceStatus) PropagateDeploymentAvailability(d *appsv1.Deployment) {
|
||||
deploymentAvailableFound := false
|
||||
for _, cond := range d.Status.Conditions {
|
||||
if cond.Type == appsv1.DeploymentAvailable {
|
||||
deploymentAvailableFound = true
|
||||
if cond.Status == corev1.ConditionTrue {
|
||||
PingSourceCondSet.Manage(s).MarkTrue(PingSourceConditionDeployed)
|
||||
} else if cond.Status == corev1.ConditionFalse {
|
||||
PingSourceCondSet.Manage(s).MarkFalse(PingSourceConditionDeployed, cond.Reason, cond.Message)
|
||||
} else if cond.Status == corev1.ConditionUnknown {
|
||||
PingSourceCondSet.Manage(s).MarkUnknown(PingSourceConditionDeployed, cond.Reason, cond.Message)
|
||||
}
|
||||
}
|
||||
}
|
||||
if !deploymentAvailableFound {
|
||||
PingSourceCondSet.Manage(s).MarkUnknown(PingSourceConditionDeployed, "DeploymentUnavailable", "The Deployment '%s' is unavailable.", d.Name)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,102 @@
|
|||
/*
|
||||
Copyright 2020 The Knative Authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package v1beta1
|
||||
|
||||
import (
|
||||
"knative.dev/pkg/apis"
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
duckv1 "knative.dev/pkg/apis/duck/v1"
|
||||
"knative.dev/pkg/kmeta"
|
||||
)
|
||||
|
||||
// +genclient
|
||||
// +genreconciler
|
||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
// +k8s:defaulter-gen=true
|
||||
|
||||
// PingSource is the Schema for the PingSources API.
|
||||
type PingSource struct {
|
||||
metav1.TypeMeta `json:",inline"`
|
||||
metav1.ObjectMeta `json:"metadata,omitempty"`
|
||||
|
||||
Spec PingSourceSpec `json:"spec,omitempty"`
|
||||
Status PingSourceStatus `json:"status,omitempty"`
|
||||
}
|
||||
|
||||
// Check the interfaces that PingSource should be implementing.
|
||||
var (
|
||||
_ runtime.Object = (*PingSource)(nil)
|
||||
_ kmeta.OwnerRefable = (*PingSource)(nil)
|
||||
_ apis.Validatable = (*PingSource)(nil)
|
||||
_ apis.Defaultable = (*PingSource)(nil)
|
||||
_ apis.HasSpec = (*PingSource)(nil)
|
||||
_ duckv1.KRShaped = (*PingSource)(nil)
|
||||
)
|
||||
|
||||
// PingSourceSpec defines the desired state of the PingSource.
|
||||
type PingSourceSpec struct {
|
||||
// inherits duck/v1 SourceSpec, which currently provides:
|
||||
// * Sink - a reference to an object that will resolve to a domain name or
|
||||
// a URI directly to use as the sink.
|
||||
// * CloudEventOverrides - defines overrides to control the output format
|
||||
// and modifications of the event sent to the sink.
|
||||
duckv1.SourceSpec `json:",inline"`
|
||||
|
||||
// Schedule is the cronjob schedule. Defaults to `* * * * *`.
|
||||
// +optional
|
||||
Schedule string `json:"schedule,omitempty"`
|
||||
|
||||
// Timezone modifies the actual time relative to the specified timezone.
|
||||
// Defaults to the system time zone.
|
||||
// More general information about time zones: https://www.iana.org/time-zones
|
||||
// List of valid timezone values: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
||||
Timezone string `json:"timezone,omitempty`
|
||||
|
||||
// JsonData is json encoded data used as the body of the event posted to
|
||||
// the sink. Default is empty. If set, datacontenttype will also be set
|
||||
// to "application/json".
|
||||
// +optional
|
||||
JsonData string `json:"jsonData,omitempty"`
|
||||
}
|
||||
|
||||
// PingSourceStatus defines the observed state of PingSource.
|
||||
type PingSourceStatus struct {
|
||||
// inherits duck/v1 SourceStatus, which currently provides:
|
||||
// * ObservedGeneration - the 'Generation' of the Service that was last
|
||||
// processed by the controller.
|
||||
// * Conditions - the latest available observations of a resource's current
|
||||
// state.
|
||||
// * SinkURI - the current active sink URI that has been configured for the
|
||||
// Source.
|
||||
duckv1.SourceStatus `json:",inline"`
|
||||
}
|
||||
|
||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
|
||||
// PingSourceList contains a list of PingSources.
|
||||
type PingSourceList struct {
|
||||
metav1.TypeMeta `json:",inline"`
|
||||
metav1.ListMeta `json:"metadata,omitempty"`
|
||||
Items []PingSource `json:"items"`
|
||||
}
|
||||
|
||||
// GetStatus retrieves the status of the PingSource. Implements the KRShaped interface.
|
||||
func (p *PingSource) GetStatus() *duckv1.Status {
|
||||
return &p.Status.Status
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
Copyright 2020 The Knative Authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package v1beta1
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"github.com/robfig/cron/v3"
|
||||
"knative.dev/pkg/apis"
|
||||
)
|
||||
|
||||
func (c *PingSource) Validate(ctx context.Context) *apis.FieldError {
|
||||
return c.Spec.Validate(ctx).ViaField("spec")
|
||||
}
|
||||
|
||||
func (cs *PingSourceSpec) Validate(ctx context.Context) *apis.FieldError {
|
||||
var errs *apis.FieldError
|
||||
|
||||
schedule := cs.Schedule
|
||||
if cs.Timezone != "" {
|
||||
schedule = "CRON_TZ=" + cs.Timezone + " " + schedule
|
||||
}
|
||||
|
||||
if _, err := cron.ParseStandard(schedule); err != nil {
|
||||
if strings.HasPrefix(err.Error(), "provided bad location") {
|
||||
fe := apis.ErrInvalidValue(err, "timezone")
|
||||
errs = errs.Also(fe)
|
||||
} else {
|
||||
fe := apis.ErrInvalidValue(err, "schedule")
|
||||
errs = errs.Also(fe)
|
||||
}
|
||||
}
|
||||
|
||||
if fe := cs.Sink.Validate(ctx); fe != nil {
|
||||
errs = errs.Also(fe.ViaField("sink"))
|
||||
}
|
||||
return errs
|
||||
}
|
||||
|
|
@ -265,6 +265,101 @@ func (in *ContainerSourceStatus) DeepCopy() *ContainerSourceStatus {
|
|||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *PingSource) DeepCopyInto(out *PingSource) {
|
||||
*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 PingSource.
|
||||
func (in *PingSource) DeepCopy() *PingSource {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(PingSource)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||
func (in *PingSource) 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 *PingSourceList) DeepCopyInto(out *PingSourceList) {
|
||||
*out = *in
|
||||
out.TypeMeta = in.TypeMeta
|
||||
in.ListMeta.DeepCopyInto(&out.ListMeta)
|
||||
if in.Items != nil {
|
||||
in, out := &in.Items, &out.Items
|
||||
*out = make([]PingSource, len(*in))
|
||||
for i := range *in {
|
||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PingSourceList.
|
||||
func (in *PingSourceList) DeepCopy() *PingSourceList {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(PingSourceList)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||
func (in *PingSourceList) 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 *PingSourceSpec) DeepCopyInto(out *PingSourceSpec) {
|
||||
*out = *in
|
||||
in.SourceSpec.DeepCopyInto(&out.SourceSpec)
|
||||
return
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PingSourceSpec.
|
||||
func (in *PingSourceSpec) DeepCopy() *PingSourceSpec {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(PingSourceSpec)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *PingSourceStatus) DeepCopyInto(out *PingSourceStatus) {
|
||||
*out = *in
|
||||
in.SourceStatus.DeepCopyInto(&out.SourceStatus)
|
||||
return
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PingSourceStatus.
|
||||
func (in *PingSourceStatus) DeepCopy() *PingSourceStatus {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(PingSourceStatus)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *SinkBinding) DeepCopyInto(out *SinkBinding) {
|
||||
*out = *in
|
||||
|
|
|
|||
|
|
@ -214,7 +214,8 @@ func IsDifferentNamespaceAllowed(ctx context.Context) bool {
|
|||
return ctx.Value(allowDifferentNamespace{}) != nil
|
||||
}
|
||||
|
||||
// This is attached to contexts passed to webhook interfaces when the user has request DryRun mode.
|
||||
// This is attached to contexts passed to webhook interfaces when the user
|
||||
// has requested DryRun mode.
|
||||
type isDryRun struct{}
|
||||
|
||||
// WithDryRun is used to indicate that this call is in DryRun mode.
|
||||
|
|
|
|||
|
|
@ -1,74 +0,0 @@
|
|||
/*
|
||||
Copyright 2018 The Knative Authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT 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 duck
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"k8s.io/apimachinery/pkg/watch"
|
||||
)
|
||||
|
||||
// NewProxyWatcher is based on the same concept from Kubernetes apimachinery in 1.12 here:
|
||||
// https://github.com/kubernetes/apimachinery/blob/c6dd271be/pkg/watch/watch.go#L272
|
||||
// Replace this copy once we've update our client libraries.
|
||||
|
||||
// proxyWatcher lets you wrap your channel in watch.Interface. Threadsafe.
|
||||
type proxyWatcher struct {
|
||||
result chan watch.Event
|
||||
stopCh chan struct{}
|
||||
|
||||
mutex sync.Mutex
|
||||
stopped bool
|
||||
}
|
||||
|
||||
var _ watch.Interface = (*proxyWatcher)(nil)
|
||||
|
||||
// NewProxyWatcher creates new proxyWatcher by wrapping a channel
|
||||
func NewProxyWatcher(ch chan watch.Event) watch.Interface {
|
||||
return &proxyWatcher{
|
||||
result: ch,
|
||||
stopCh: make(chan struct{}),
|
||||
stopped: false,
|
||||
}
|
||||
}
|
||||
|
||||
// Stop implements Interface
|
||||
func (pw *proxyWatcher) Stop() {
|
||||
pw.mutex.Lock()
|
||||
defer pw.mutex.Unlock()
|
||||
if !pw.stopped {
|
||||
pw.stopped = true
|
||||
close(pw.stopCh)
|
||||
}
|
||||
}
|
||||
|
||||
// Stopping returns true if Stop() has been called
|
||||
func (pw *proxyWatcher) Stopping() bool {
|
||||
pw.mutex.Lock()
|
||||
defer pw.mutex.Unlock()
|
||||
return pw.stopped
|
||||
}
|
||||
|
||||
// ResultChan implements watch.Interface
|
||||
func (pw *proxyWatcher) ResultChan() <-chan watch.Event {
|
||||
return pw.result
|
||||
}
|
||||
|
||||
// StopChan returns stop channel
|
||||
func (pw *proxyWatcher) StopChan() <-chan struct{} {
|
||||
return pw.stopCh
|
||||
}
|
||||
|
|
@ -134,6 +134,6 @@ func AsStructuredWatcher(wf cache.WatchFunc, obj runtime.Object) cache.WatchFunc
|
|||
}
|
||||
}()
|
||||
|
||||
return NewProxyWatcher(structuredCh), nil
|
||||
return watch.NewProxyWatcher(structuredCh), nil
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ import (
|
|||
// Note, go-cmp will still return inequality, see unit test if you
|
||||
// need this behavior for go-cmp.
|
||||
type VolatileTime struct {
|
||||
Inner metav1.Time
|
||||
Inner metav1.Time `json:",inline"`
|
||||
}
|
||||
|
||||
// MarshalJSON implements the json.Marshaler interface.
|
||||
|
|
|
|||
|
|
@ -30,6 +30,18 @@ func Int64(i int64) *int64 {
|
|||
return &i
|
||||
}
|
||||
|
||||
// Float32 is a helper for turning floats into pointers for use in
|
||||
// API types that want *float32.
|
||||
func Float32(f float32) *float32 {
|
||||
return &f
|
||||
}
|
||||
|
||||
// Float64 is a helper for turning floats into pointers for use in
|
||||
// API types that want *float64.
|
||||
func Float64(f float64) *float64 {
|
||||
return &f
|
||||
}
|
||||
|
||||
// Bool is a helper for turning bools into pointers for use in
|
||||
// API types that want *bool.
|
||||
func Bool(b bool) *bool {
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import (
|
|||
var podCondSet = apis.NewLivingConditionSet(
|
||||
PodAutoscalerConditionActive,
|
||||
PodAutoscalerConditionScaleTargetInitialized,
|
||||
PodAutoscalerSKSReady,
|
||||
)
|
||||
|
||||
// GetConditionSet retrieves the condition set for this resource. Implements the KRShaped interface.
|
||||
|
|
@ -185,6 +186,16 @@ func (pas *PodAutoscalerStatus) MarkScaleTargetInitialized() {
|
|||
podCondSet.Manage(pas).MarkTrue(PodAutoscalerConditionScaleTargetInitialized)
|
||||
}
|
||||
|
||||
// MarkSKSReady marks the PA condition denoting that SKS is ready.
|
||||
func (pas *PodAutoscalerStatus) MarkSKSReady() {
|
||||
podCondSet.Manage(pas).MarkTrue(PodAutoscalerSKSReady)
|
||||
}
|
||||
|
||||
// MarkSKSNotReady marks the PA condation that SKS is not yet ready.
|
||||
func (pas *PodAutoscalerStatus) MarkSKSNotReady(mes string) {
|
||||
podCondSet.Manage(pas).MarkUnknown(PodAutoscalerSKSReady, "NotReady", mes)
|
||||
}
|
||||
|
||||
// GetCondition gets the condition `t`.
|
||||
func (pas *PodAutoscalerStatus) GetCondition(t apis.ConditionType) *apis.Condition {
|
||||
return podCondSet.Manage(pas).GetCondition(t)
|
||||
|
|
@ -224,37 +235,32 @@ func (pas *PodAutoscalerStatus) MarkResourceFailedCreation(kind, name string) {
|
|||
fmt.Sprintf("Failed to create %s %q.", kind, name))
|
||||
}
|
||||
|
||||
// CanScaleToZero checks whether the pod autoscaler has been in an inactive state
|
||||
// for at least the specified grace period.
|
||||
func (pas *PodAutoscalerStatus) CanScaleToZero(now time.Time, gracePeriod time.Duration) bool {
|
||||
return pas.InactiveFor(now) >= gracePeriod
|
||||
}
|
||||
|
||||
// InactiveFor returns the time PA spent being inactive.
|
||||
func (pas *PodAutoscalerStatus) InactiveFor(now time.Time) time.Duration {
|
||||
return pas.inStatusFor(corev1.ConditionFalse, now, 0)
|
||||
return pas.inStatusFor(corev1.ConditionFalse, now)
|
||||
}
|
||||
|
||||
// ActiveFor returns the time PA spent being active.
|
||||
func (pas *PodAutoscalerStatus) ActiveFor(now time.Time) time.Duration {
|
||||
return pas.inStatusFor(corev1.ConditionTrue, now, 0)
|
||||
return pas.inStatusFor(corev1.ConditionTrue, now)
|
||||
}
|
||||
|
||||
// CanFailActivation checks whether the pod autoscaler has been activating
|
||||
// for at least the specified idle period.
|
||||
func (pas *PodAutoscalerStatus) CanFailActivation(now time.Time, idlePeriod time.Duration) bool {
|
||||
return pas.inStatusFor(corev1.ConditionUnknown, now, idlePeriod) > 0
|
||||
return pas.inStatusFor(corev1.ConditionUnknown, now) > idlePeriod
|
||||
}
|
||||
|
||||
// inStatusFor returns positive duration if the PodAutoscalerStatus's Active condition has stayed in
|
||||
// the specified status for at least the specified duration. Otherwise it returns negative duration,
|
||||
// including when the status is undetermined (Active condition is not found.)
|
||||
func (pas *PodAutoscalerStatus) inStatusFor(status corev1.ConditionStatus, now time.Time, dur time.Duration) time.Duration {
|
||||
// inStatusFor returns the duration that the PodAutoscalerStatus's Active
|
||||
// condition has stayed in the specified status.
|
||||
// inStatusFor will return -1 if condition is not initialized or current
|
||||
// status is different.
|
||||
func (pas *PodAutoscalerStatus) inStatusFor(status corev1.ConditionStatus, now time.Time) time.Duration {
|
||||
cond := pas.GetCondition(PodAutoscalerConditionActive)
|
||||
if cond == nil || cond.Status != status {
|
||||
return -1
|
||||
}
|
||||
return now.Sub(cond.LastTransitionTime.Inner.Add(dur))
|
||||
return now.Sub(cond.LastTransitionTime.Inner.Time)
|
||||
}
|
||||
|
||||
// GetDesiredScale returns the desired scale if ever set, or -1.
|
||||
|
|
|
|||
|
|
@ -117,6 +117,8 @@ const (
|
|||
PodAutoscalerConditionScaleTargetInitialized apis.ConditionType = "ScaleTargetInitialized"
|
||||
// PodAutoscalerConditionActive is set when the PodAutoscaler's ScaleTargetRef is receiving traffic.
|
||||
PodAutoscalerConditionActive apis.ConditionType = "Active"
|
||||
// PodAutoscalerCondtionDependenciesReady is set when SKS is ready.
|
||||
PodAutoscalerSKSReady = "SKSReady"
|
||||
)
|
||||
|
||||
// PodAutoscalerStatus communicates the observed state of the PodAutoscaler (from the controller).
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ func defaultFeaturesConfig() *Features {
|
|||
MultiContainer: Disabled,
|
||||
PodSpecAffinity: Disabled,
|
||||
PodSpecFieldRef: Disabled,
|
||||
PodSpecDryRun: Enabled,
|
||||
PodSpecDryRun: Allowed,
|
||||
PodSpecNodeSelector: Disabled,
|
||||
PodSpecTolerations: Disabled,
|
||||
ResponsiveRevisionGC: Disabled,
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ var (
|
|||
RoutingStateModifiedAnnotationKey,
|
||||
GroupNamePrefix+"forceUpgrade",
|
||||
RevisionPreservedAnnotationKey,
|
||||
RoutesAnnotationKey,
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -47,6 +47,10 @@ const (
|
|||
// triggered their creation.
|
||||
RouteLabelKey = GroupName + "/route"
|
||||
|
||||
// RoutesAnnotationKey is an annotation attached to a Revision to indicate that it is
|
||||
// referenced by one or many routes. The value is a comma separated list of Route names.
|
||||
RoutesAnnotationKey = GroupName + "/routes"
|
||||
|
||||
// RoutingStateLabelKey is the label attached to a Revision indicating
|
||||
// its state in relation to serving a Route.
|
||||
RoutingStateLabelKey = GroupName + "/routingState"
|
||||
|
|
|
|||
|
|
@ -73,16 +73,19 @@ func (csf *ConfigurationStatusFields) Validate(ctx context.Context) *apis.FieldE
|
|||
// validateLabels function validates configuration labels
|
||||
func (c *Configuration) validateLabels() (errs *apis.FieldError) {
|
||||
for key, val := range c.GetLabels() {
|
||||
switch {
|
||||
case key == serving.VisibilityLabelKey:
|
||||
switch key {
|
||||
case serving.RouteLabelKey:
|
||||
// Known valid labels.
|
||||
case serving.VisibilityLabelKey:
|
||||
errs = errs.Also(validateClusterVisibilityLabel(val))
|
||||
case key == serving.RouteLabelKey:
|
||||
case key == serving.ServiceLabelKey:
|
||||
case serving.ServiceLabelKey:
|
||||
errs = errs.Also(verifyLabelOwnerRef(val, serving.ServiceLabelKey, "Service", c.GetOwnerReferences()))
|
||||
case strings.HasPrefix(key, serving.GroupNamePrefix):
|
||||
default:
|
||||
if strings.HasPrefix(key, serving.GroupNamePrefix) {
|
||||
errs = errs.Also(apis.ErrInvalidKeyName(key, apis.CurrentField))
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ func (rs *RevisionSpec) GetContainer() *corev1.Container {
|
|||
// routingStateModified annotation.
|
||||
func (r *Revision) SetRoutingState(state RoutingState, clock clock.Clock) {
|
||||
stateStr := string(state)
|
||||
if t := r.ObjectMeta.Annotations[serving.RoutingStateModifiedAnnotationKey]; t != "" &&
|
||||
if t := r.Annotations[serving.RoutingStateModifiedAnnotationKey]; t != "" &&
|
||||
r.Labels[serving.RoutingStateLabelKey] == stateStr {
|
||||
return // Don't update timestamp if no change.
|
||||
}
|
||||
|
|
@ -134,12 +134,12 @@ func RoutingStateModifiedString(clock clock.Clock) string {
|
|||
|
||||
// GetRoutingState retrieves the RoutingState label.
|
||||
func (r *Revision) GetRoutingState() RoutingState {
|
||||
return RoutingState(r.ObjectMeta.Labels[serving.RoutingStateLabelKey])
|
||||
return RoutingState(r.Labels[serving.RoutingStateLabelKey])
|
||||
}
|
||||
|
||||
// GetRoutingStateModified retrieves the RoutingStateModified annotation.
|
||||
func (r *Revision) GetRoutingStateModified() time.Time {
|
||||
val := r.ObjectMeta.Annotations[serving.RoutingStateModifiedAnnotationKey]
|
||||
val := r.Annotations[serving.RoutingStateModifiedAnnotationKey]
|
||||
if val == "" {
|
||||
return time.Time{}
|
||||
}
|
||||
|
|
@ -152,7 +152,8 @@ func (r *Revision) GetRoutingStateModified() time.Time {
|
|||
|
||||
// IsReachable returns whether or not the revision can be reached by a route.
|
||||
func (r *Revision) IsReachable() bool {
|
||||
return r.ObjectMeta.Labels[serving.RouteLabelKey] != ""
|
||||
return r.Labels[serving.RouteLabelKey] != "" ||
|
||||
RoutingState(r.Labels[serving.RoutingStateLabelKey]) == RoutingStateActive
|
||||
}
|
||||
|
||||
// GetProtocol returns the app level network protocol.
|
||||
|
|
@ -174,11 +175,11 @@ func (r *Revision) GetProtocol() (p net.ProtocolType) {
|
|||
// SetLastPinned sets the revision's last pinned annotations
|
||||
// to be the specified time.
|
||||
func (r *Revision) SetLastPinned(t time.Time) {
|
||||
if r.ObjectMeta.Annotations == nil {
|
||||
r.ObjectMeta.Annotations = make(map[string]string, 1)
|
||||
if r.Annotations == nil {
|
||||
r.Annotations = make(map[string]string, 1)
|
||||
}
|
||||
|
||||
r.ObjectMeta.Annotations[serving.RevisionLastPinnedAnnotationKey] = RevisionLastPinnedString(t)
|
||||
r.Annotations[serving.RevisionLastPinnedAnnotationKey] = RevisionLastPinnedString(t)
|
||||
}
|
||||
|
||||
// GetLastPinned returns the time the revision was last pinned.
|
||||
|
|
@ -189,7 +190,7 @@ func (r *Revision) GetLastPinned() (time.Time, error) {
|
|||
}
|
||||
}
|
||||
|
||||
str, ok := r.ObjectMeta.Annotations[serving.RevisionLastPinnedAnnotationKey]
|
||||
str, ok := r.Annotations[serving.RevisionLastPinnedAnnotationKey]
|
||||
if !ok {
|
||||
// If a revision is past the create delay without an annotation it is stale.
|
||||
return time.Time{}, LastPinnedParseError{
|
||||
|
|
|
|||
|
|
@ -120,10 +120,11 @@ func (rs *RevisionStatus) Validate(ctx context.Context) *apis.FieldError {
|
|||
func (r *Revision) ValidateLabels() (errs *apis.FieldError) {
|
||||
for key, val := range r.GetLabels() {
|
||||
switch key {
|
||||
case serving.RoutingStateLabelKey:
|
||||
case serving.RouteLabelKey:
|
||||
case serving.ServiceLabelKey:
|
||||
case serving.ConfigurationGenerationLabelKey:
|
||||
case serving.RoutingStateLabelKey,
|
||||
serving.RouteLabelKey,
|
||||
serving.ServiceLabelKey,
|
||||
serving.ConfigurationGenerationLabelKey:
|
||||
// Known valid labels.
|
||||
case serving.ConfigurationLabelKey:
|
||||
errs = errs.Also(verifyLabelOwnerRef(val, serving.ConfigurationLabelKey, "Configuration", r.GetOwnerReferences()))
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -216,14 +216,16 @@ func validateClusterVisibilityLabel(label string) (errs *apis.FieldError) {
|
|||
// validateLabels function validates route labels.
|
||||
func (r *Route) validateLabels() (errs *apis.FieldError) {
|
||||
for key, val := range r.GetLabels() {
|
||||
switch {
|
||||
case key == serving.VisibilityLabelKey:
|
||||
switch key {
|
||||
case serving.VisibilityLabelKey:
|
||||
errs = errs.Also(validateClusterVisibilityLabel(val))
|
||||
case key == serving.ServiceLabelKey:
|
||||
case serving.ServiceLabelKey:
|
||||
errs = errs.Also(verifyLabelOwnerRef(val, serving.ServiceLabelKey, "Service", r.GetOwnerReferences()))
|
||||
case strings.HasPrefix(key, serving.GroupNamePrefix):
|
||||
default:
|
||||
if strings.HasPrefix(key, serving.GroupNamePrefix) {
|
||||
errs = errs.Also(apis.ErrInvalidKeyName(key, apis.CurrentField))
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
|
|||
|
|
@ -286,11 +286,11 @@ func RevisionLastPinnedString(t time.Time) string {
|
|||
}
|
||||
|
||||
func (r *Revision) SetLastPinned(t time.Time) {
|
||||
if r.ObjectMeta.Annotations == nil {
|
||||
r.ObjectMeta.Annotations = make(map[string]string, 1)
|
||||
if r.Annotations == nil {
|
||||
r.Annotations = make(map[string]string, 1)
|
||||
}
|
||||
|
||||
r.ObjectMeta.Annotations[serving.RevisionLastPinnedAnnotationKey] = RevisionLastPinnedString(t)
|
||||
r.Annotations[serving.RevisionLastPinnedAnnotationKey] = RevisionLastPinnedString(t)
|
||||
}
|
||||
|
||||
func (r *Revision) GetLastPinned() (time.Time, error) {
|
||||
|
|
@ -300,7 +300,7 @@ func (r *Revision) GetLastPinned() (time.Time, error) {
|
|||
}
|
||||
}
|
||||
|
||||
str, ok := r.ObjectMeta.Annotations[serving.RevisionLastPinnedAnnotationKey]
|
||||
str, ok := r.Annotations[serving.RevisionLastPinnedAnnotationKey]
|
||||
if !ok {
|
||||
// If a revision is past the create delay without an annotation it is stale
|
||||
return time.Time{}, LastPinnedParseError{
|
||||
|
|
@ -320,11 +320,6 @@ func (r *Revision) GetLastPinned() (time.Time, error) {
|
|||
return time.Unix(secs, 0), nil
|
||||
}
|
||||
|
||||
// IsReachable returns whether or not the revision can be reached by a route.
|
||||
func (r *Revision) IsReachable() bool {
|
||||
return r.ObjectMeta.Labels[serving.RouteLabelKey] != ""
|
||||
}
|
||||
|
||||
// PropagateDeploymentStatus takes the Deployment status and applies its values
|
||||
// to the Revision status.
|
||||
func (rs *RevisionStatus) PropagateDeploymentStatus(original *appsv1.DeploymentStatus) {
|
||||
|
|
|
|||
|
|
@ -58,16 +58,19 @@ func (c *Configuration) Validate(ctx context.Context) (errs *apis.FieldError) {
|
|||
// validateLabels function validates configuration labels
|
||||
func (c *Configuration) validateLabels() (errs *apis.FieldError) {
|
||||
for key, val := range c.GetLabels() {
|
||||
switch {
|
||||
case key == serving.VisibilityLabelKey:
|
||||
switch key {
|
||||
case serving.RouteLabelKey:
|
||||
// Known valid labels.
|
||||
case serving.VisibilityLabelKey:
|
||||
errs = errs.Also(serving.ValidateClusterVisibilityLabel(val))
|
||||
case key == serving.RouteLabelKey:
|
||||
case key == serving.ServiceLabelKey:
|
||||
case serving.ServiceLabelKey:
|
||||
errs = errs.Also(verifyLabelOwnerRef(val, serving.ServiceLabelKey, "Service", c.GetOwnerReferences()))
|
||||
case strings.HasPrefix(key, serving.GroupNamePrefix):
|
||||
default:
|
||||
if strings.HasPrefix(key, serving.GroupNamePrefix) {
|
||||
errs = errs.Also(apis.ErrInvalidKeyName(key, apis.CurrentField))
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -56,13 +56,18 @@ func (r *Revision) Validate(ctx context.Context) *apis.FieldError {
|
|||
// ValidateLabels function validates service labels
|
||||
func (r *Revision) ValidateLabels() (errs *apis.FieldError) {
|
||||
for key, val := range r.GetLabels() {
|
||||
switch {
|
||||
case key == serving.RouteLabelKey || key == serving.ServiceLabelKey || key == serving.ConfigurationGenerationLabelKey:
|
||||
case key == serving.ConfigurationLabelKey:
|
||||
switch key {
|
||||
case serving.RouteLabelKey,
|
||||
serving.ServiceLabelKey,
|
||||
serving.ConfigurationGenerationLabelKey:
|
||||
// Known valid labels.
|
||||
case serving.ConfigurationLabelKey:
|
||||
errs = errs.Also(verifyLabelOwnerRef(val, serving.ConfigurationLabelKey, "Configuration", r.GetOwnerReferences()))
|
||||
case strings.HasPrefix(key, serving.GroupNamePrefix):
|
||||
default:
|
||||
if strings.HasPrefix(key, serving.GroupNamePrefix) {
|
||||
errs = errs.Also(apis.ErrInvalidKeyName(key, ""))
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,14 +46,16 @@ func (r *Route) Validate(ctx context.Context) *apis.FieldError {
|
|||
// validateLabels function validates route labels.
|
||||
func (r *Route) validateLabels() (errs *apis.FieldError) {
|
||||
for key, val := range r.GetLabels() {
|
||||
switch {
|
||||
case key == serving.VisibilityLabelKey:
|
||||
switch key {
|
||||
case serving.VisibilityLabelKey:
|
||||
errs = errs.Also(serving.ValidateClusterVisibilityLabel(val))
|
||||
case key == serving.ServiceLabelKey:
|
||||
case serving.ServiceLabelKey:
|
||||
errs = errs.Also(verifyLabelOwnerRef(val, serving.ServiceLabelKey, "Service", r.GetOwnerReferences()))
|
||||
case strings.HasPrefix(key, serving.GroupNamePrefix):
|
||||
default:
|
||||
if strings.HasPrefix(key, serving.GroupNamePrefix) {
|
||||
errs = errs.Also(apis.ErrInvalidKeyName(key, apis.CurrentField))
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# cloud.google.com/go v0.61.0
|
||||
# cloud.google.com/go v0.62.0
|
||||
cloud.google.com/go/compute/metadata
|
||||
# github.com/PuerkitoBio/purell v1.1.1
|
||||
github.com/PuerkitoBio/purell
|
||||
|
|
@ -138,7 +138,7 @@ go.uber.org/zap/internal/bufferpool
|
|||
go.uber.org/zap/internal/color
|
||||
go.uber.org/zap/internal/exit
|
||||
go.uber.org/zap/zapcore
|
||||
# golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899
|
||||
# golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de
|
||||
## explicit
|
||||
golang.org/x/crypto/ssh/terminal
|
||||
# golang.org/x/mod v0.3.0
|
||||
|
|
@ -157,7 +157,7 @@ golang.org/x/oauth2/google
|
|||
golang.org/x/oauth2/internal
|
||||
golang.org/x/oauth2/jws
|
||||
golang.org/x/oauth2/jwt
|
||||
# golang.org/x/sys v0.0.0-20200722175500-76b94024e4b6
|
||||
# golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1
|
||||
golang.org/x/sys/internal/unsafeheader
|
||||
golang.org/x/sys/unix
|
||||
golang.org/x/sys/windows
|
||||
|
|
@ -175,7 +175,7 @@ golang.org/x/text/unicode/norm
|
|||
golang.org/x/text/width
|
||||
# golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
|
||||
golang.org/x/time/rate
|
||||
# golang.org/x/tools v0.0.0-20200723000907-a7c6fd066f6d
|
||||
# golang.org/x/tools v0.0.0-20200731060945-b5fad4ed8dd6
|
||||
golang.org/x/tools/go/ast/astutil
|
||||
golang.org/x/tools/imports
|
||||
golang.org/x/tools/internal/event
|
||||
|
|
@ -605,7 +605,7 @@ k8s.io/kube-openapi/pkg/util/sets
|
|||
k8s.io/utils/buffer
|
||||
k8s.io/utils/integer
|
||||
k8s.io/utils/trace
|
||||
# knative.dev/eventing v0.16.1-0.20200724032657-8d83431c07bd
|
||||
# knative.dev/eventing v0.16.1-0.20200803090001-4cd17b80636f
|
||||
## explicit
|
||||
knative.dev/eventing/pkg/apis/config
|
||||
knative.dev/eventing/pkg/apis/configs
|
||||
|
|
@ -633,11 +633,11 @@ knative.dev/eventing/pkg/client/clientset/versioned/typed/eventing/v1beta1/fake
|
|||
knative.dev/eventing/pkg/client/clientset/versioned/typed/sources/v1alpha2
|
||||
knative.dev/eventing/pkg/client/clientset/versioned/typed/sources/v1alpha2/fake
|
||||
knative.dev/eventing/pkg/logging
|
||||
# knative.dev/networking v0.0.0-20200723155758-cc457d7322d6
|
||||
# knative.dev/networking v0.0.0-20200801232901-0a0cf9380a8d
|
||||
knative.dev/networking/pkg/apis/config
|
||||
knative.dev/networking/pkg/apis/networking
|
||||
knative.dev/networking/pkg/apis/networking/v1alpha1
|
||||
# knative.dev/pkg v0.0.0-20200724211057-f21f66204a5c
|
||||
# knative.dev/pkg v0.0.0-20200804051227-c3c869a34475
|
||||
## explicit
|
||||
knative.dev/pkg/apis
|
||||
knative.dev/pkg/apis/duck
|
||||
|
|
@ -655,7 +655,7 @@ knative.dev/pkg/logging/logkey
|
|||
knative.dev/pkg/profiling
|
||||
knative.dev/pkg/ptr
|
||||
knative.dev/pkg/tracker
|
||||
# knative.dev/serving v0.16.1-0.20200724203457-1517b1735305
|
||||
# knative.dev/serving v0.16.1-0.20200804124127-08d681889306
|
||||
## explicit
|
||||
knative.dev/serving/pkg/apis/autoscaling
|
||||
knative.dev/serving/pkg/apis/autoscaling/v1alpha1
|
||||
|
|
|
|||
Loading…
Reference in New Issue