From adbb8ef6c93b062e592673d3d441ddc2fb0c2670 Mon Sep 17 00:00:00 2001 From: Knative Automation Date: Thu, 22 Jun 2023 13:51:00 +0000 Subject: [PATCH] upgrade to latest dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bumping knative.dev/eventing d21c1aa...ab01938:%0A > ab01938 [main] Upgrade to latest dependencies (# 7025)%0A > c9dcaf3 Added basic gc loop to kncloudevents clients map (# 6997)%0A > d6cf96d EventType works with channel (# 7023)%0A > 365d0b0 Run TLS e2e tests only when Istio is not enabled (# 7029)%0A > 825a237 Update IMC CRD addressstatus to include `.name` and `.CACerts` fields (# 7026)%0A > 3190df7 Tracking/reconcile KResource references (# 7014)%0A > 0f68861 Rename more to Resource, instead of broker (# 7022)%0A > bccb7d4 Better reflecting the lifecycle of event type … (# 7019)%0A > 49d4acd Skip ping source TLS rekt test, since extremely flaky (# 7016)%0A > 8719e18 [main] Upgrade to latest dependencies (# 7012)%0A > e5ae717 Use HTTP POST when terminating istio proxy (# 7015)%0A > fea730f Only check if the reference does exist (# 7010)%0A > 631f4ec Add TLS support for mt-broker-filter (# 6940)%0A > 45f0a19 Allow wathola components to run with Istio (# 7011)%0A > 65f4b1c [main] Format Go code (# 7008)%0A > 3267b1a test SinkBinding with eventshub TLS receiver as sink (# 6979)%0A > aad53f4 Updated eventingtls test certs to support IP addresses (# 7006)%0A > 57d78e0 [main] Update community files (# 7004)%0A > dfb2243 Support TLS in Trigger and Channel reconciler (# 6988)%0A > df08b49 Eventing TLS: verify APIServerSource and PingSource sinkURI is https (# 6987)%0Abumping knative.dev/reconciler-test cf14f44...0061957:%0A > 0061957 Fix eventshub MatchRejectedEvent assert method (# 543)%0A > e57153d MatchEvent matches "positive" kinds and be explicit about matching kind. (# 535)%0A > 78f9980 Update community files (# 542)%0A > 32fb146 Update community files (# 541)%0Abumping knative.dev/pkg 5671699...eb63a40:%0A > eb63a40 Support to set qps and burst via env variable (# 2755)%0A > 74c4be5 Generate kresource duck type codegen (# 2754)%0A > 4dbc312 fix boilerplate (# 2753)%0A > 15605c7 Defaulting Controller options for all kind of webhooks (# 2738)%0A > 94b81fc Update community files (# 2752)%0Abumping knative.dev/hack 5b7907f...d7586a2:%0A > d7586a2 Update e2e kntest link (# 295)%0A > a861c8e Update community files (# 294) Signed-off-by: Knative Automation --- go.mod | 8 +- go.sum | 16 ++-- .../eventing/cmd/heartbeats/main.go | 5 +- .../pkg/apis/duck/v1/delivery_types.go | 22 ++++++ .../pkg/apis/duck/v1/zz_generated.deepcopy.go | 5 ++ .../pkg/apis/eventing/v1/broker_lifecycle.go | 10 ++- .../pkg/apis/eventing/v1/test_helper.go | 7 +- .../eventing/v1beta1/eventtype_conversion.go | 26 +++++-- .../eventing/v1beta1/eventtype_defaults.go | 2 +- .../apis/eventing/v1beta1/eventtype_types.go | 4 + .../eventing/v1beta1/zz_generated.deepcopy.go | 6 ++ .../eventing/v1beta2/eventtype_defaults.go | 10 +-- .../eventing/v1beta2/eventtype_lifecycle.go | 57 +++----------- .../apis/messaging/v1/channel_lifecycle.go | 11 +-- .../v1/in_memory_channel_lifecycle.go | 18 +++-- .../apis/sources/v1/apiserver_lifecycle.go | 8 +- .../eventing/pkg/eventingtls/eventingtls.go | 6 +- .../pkg/kncloudevents/http_client_new.go | 78 +++++++++++++++---- .../reconciler/testing/v1/apiserversouce.go | 9 ++- .../pkg/reconciler/testing/v1/broker.go | 20 ++--- .../pkg/reconciler/testing/v1/channel.go | 8 +- .../pkg/reconciler/testing/v1/eventtype.go | 29 ++----- .../reconciler/testing/v1/inmemorychannel.go | 35 +++------ .../pkg/reconciler/testing/v1/secret.go | 45 +++++++++++ .../pkg/reconciler/testing/v1/subscription.go | 10 +-- .../pkg/reconciler/testing/v1/trigger.go | 40 ++++++---- .../pkg/reconciler/testing/v1/unstructured.go | 11 ++- .../reconciler/testing/v1beta2/eventtype.go | 29 ++----- .../rekt/features/broker/control_plane.go | 2 +- .../features/featureflags/featureflags.go | 74 ++++++++++++++++++ .../test/rekt/features/trigger/feature.go | 46 +++++++++++ .../test/rekt/resources/trigger/trigger.go | 34 ++++++++ .../test/rekt/resources/trigger/trigger.yaml | 4 + vendor/knative.dev/hack/README.md | 2 +- .../pkg/apis/duck/v1/kresource_type.go | 7 ++ .../pkg/environment/client_config.go | 16 +++- .../defaulting/controller.go | 55 +++++++++---- .../resourcesemantics/defaulting/options.go | 64 +++++++++++++++ .../validation/controller.go | 44 ++++++++--- .../resourcesemantics/validation/options.go | 68 ++++++++++++++++ vendor/knative.dev/pkg/webhook/webhook.go | 5 ++ .../eventshub/assert/event_info_matchers.go | 14 ++++ .../pkg/eventshub/assert/step.go | 34 +++++++- vendor/modules.txt | 9 ++- 44 files changed, 745 insertions(+), 268 deletions(-) create mode 100644 vendor/knative.dev/eventing/pkg/reconciler/testing/v1/secret.go create mode 100644 vendor/knative.dev/eventing/test/rekt/features/featureflags/featureflags.go create mode 100644 vendor/knative.dev/pkg/webhook/resourcesemantics/defaulting/options.go create mode 100644 vendor/knative.dev/pkg/webhook/resourcesemantics/validation/options.go diff --git a/go.mod b/go.mod index 71630ea036..8d1f674e57 100644 --- a/go.mod +++ b/go.mod @@ -21,10 +21,10 @@ require ( k8s.io/client-go v0.26.5 k8s.io/code-generator v0.26.5 k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 - knative.dev/eventing v0.37.1-0.20230601081636-d21c1aabd392 - knative.dev/hack v0.0.0-20230530201435-5b7907fbe350 - knative.dev/pkg v0.0.0-20230531073936-5671699f23d9 - knative.dev/reconciler-test v0.0.0-20230530092335-cf14f44032b9 + knative.dev/eventing v0.37.1-0.20230622075635-ab0193824225 + knative.dev/hack v0.0.0-20230615155948-d7586a218601 + knative.dev/pkg v0.0.0-20230616134650-eb63a40adfb0 + knative.dev/reconciler-test v0.0.0-20230613125845-0061957b480e sigs.k8s.io/controller-runtime v0.14.6 ) diff --git a/go.sum b/go.sum index 1b7309f5ac..ad190528bd 100644 --- a/go.sum +++ b/go.sum @@ -1026,14 +1026,14 @@ k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+O k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= k8s.io/utils v0.0.0-20230505201702-9f6742963106 h1:EObNQ3TW2D+WptiYXlApGNLVy0zm/JIBVY9i+M4wpAU= k8s.io/utils v0.0.0-20230505201702-9f6742963106/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -knative.dev/eventing v0.37.1-0.20230601081636-d21c1aabd392 h1:JLQXhRSHQeghPofdqDnNIaVepWi5vhRPMxikTF1jNJg= -knative.dev/eventing v0.37.1-0.20230601081636-d21c1aabd392/go.mod h1:00ZmViqsuF5wC8D9XvPGxfrT3Fb3JIaRvIzjk+3ppHo= -knative.dev/hack v0.0.0-20230530201435-5b7907fbe350 h1:lSV9uFTohrQd7i5OUhLnR87PwUHJplQKJSEiZgzP/VY= -knative.dev/hack v0.0.0-20230530201435-5b7907fbe350/go.mod h1:yk2OjGDsbEnQjfxdm0/HJKS2WqTLEFg/N6nUs6Rqx3Q= -knative.dev/pkg v0.0.0-20230531073936-5671699f23d9 h1:xd7E2nuQ358cXR4jB7Y5+FH88Mm+SQTZty5pXa1TSfs= -knative.dev/pkg v0.0.0-20230531073936-5671699f23d9/go.mod h1:dqC6IrvyBE7E+oZocs5PkVhq1G59pDTA7r8U17EAKMk= -knative.dev/reconciler-test v0.0.0-20230530092335-cf14f44032b9 h1:CzG5Oo639iM2u8x6LrWNznp9b7av7poZV1OpAeJc48s= -knative.dev/reconciler-test v0.0.0-20230530092335-cf14f44032b9/go.mod h1:iB/uRML7hm+V0YvUrAxO+SSq1wg0FRi2p8aVCIjbzeo= +knative.dev/eventing v0.37.1-0.20230622075635-ab0193824225 h1:Zyx7txNJkXPd+kUnPuizecjrwIoI912K6jM0ULdYIpk= +knative.dev/eventing v0.37.1-0.20230622075635-ab0193824225/go.mod h1:MRpJ0pRqodV9mlPvRTLXnUOo0ExPDHyEk04Zxjn3bA0= +knative.dev/hack v0.0.0-20230615155948-d7586a218601 h1:yMe29SMHrAIt3+J+APvf4WVP6cW7ZDtUhh5uxD5ERdA= +knative.dev/hack v0.0.0-20230615155948-d7586a218601/go.mod h1:yk2OjGDsbEnQjfxdm0/HJKS2WqTLEFg/N6nUs6Rqx3Q= +knative.dev/pkg v0.0.0-20230616134650-eb63a40adfb0 h1:weQWWxEEbNOPuL4qtGiBZuMSFhcjF/Cu163uktd/xFE= +knative.dev/pkg v0.0.0-20230616134650-eb63a40adfb0/go.mod h1:dqC6IrvyBE7E+oZocs5PkVhq1G59pDTA7r8U17EAKMk= +knative.dev/reconciler-test v0.0.0-20230613125845-0061957b480e h1:m9YZbaTbljnHrdIstFP/jXikjYKRuBHz4CQ3YfDS1Og= +knative.dev/reconciler-test v0.0.0-20230613125845-0061957b480e/go.mod h1:iB/uRML7hm+V0YvUrAxO+SSq1wg0FRi2p8aVCIjbzeo= pgregory.net/rapid v0.3.3 h1:jCjBsY4ln4Atz78QoBWxUEvAHaFyNDQg9+WU62aCn1U= pgregory.net/rapid v0.3.3/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/vendor/knative.dev/eventing/cmd/heartbeats/main.go b/vendor/knative.dev/eventing/cmd/heartbeats/main.go index d681541b18..a3f27c974f 100644 --- a/vendor/knative.dev/eventing/cmd/heartbeats/main.go +++ b/vendor/knative.dev/eventing/cmd/heartbeats/main.go @@ -222,7 +222,10 @@ func main() { // maybeQuitIstioProxy shuts down Istio's proxy when available. func maybeQuitIstioProxy() { - _, err := http.DefaultClient.Get("http://localhost:15020/quitquitquit") + req, _ := http.NewRequest(http.MethodPost, "http://localhost:15020/quitquitquit", nil) + + _, err := http.DefaultClient.Do(req) + if err != nil && !errors.Is(err, syscall.ECONNREFUSED) { log.Println("[Ignore this warning if Istio proxy is not used on this pod]", err) } diff --git a/vendor/knative.dev/eventing/pkg/apis/duck/v1/delivery_types.go b/vendor/knative.dev/eventing/pkg/apis/duck/v1/delivery_types.go index 49c26ced5d..2c0306f200 100644 --- a/vendor/knative.dev/eventing/pkg/apis/duck/v1/delivery_types.go +++ b/vendor/knative.dev/eventing/pkg/apis/duck/v1/delivery_types.go @@ -154,4 +154,26 @@ type DeliveryStatus struct { // where failed events are sent to. // +optional DeadLetterSinkURI *apis.URL `json:"deadLetterSinkUri,omitempty"` + // DeadLetterSinkCACerts are Certification Authority (CA) certificates in PEM format + // according to https://www.rfc-editor.org/rfc/rfc7468. + // +optional + DeadLetterSinkCACerts *string `json:"deadLetterSinkCACerts,omitempty"` +} + +func (ds *DeliveryStatus) IsSet() bool { + return ds.DeadLetterSinkURI != nil +} + +func NewDeliveryStatusFromAddressable(addr *duckv1.Addressable) DeliveryStatus { + return DeliveryStatus{ + DeadLetterSinkURI: addr.URL, + DeadLetterSinkCACerts: addr.CACerts, + } +} + +func NewDestinationFromDeliveryStatus(status DeliveryStatus) duckv1.Destination { + return duckv1.Destination{ + URI: status.DeadLetterSinkURI, + CACerts: status.DeadLetterSinkCACerts, + } } diff --git a/vendor/knative.dev/eventing/pkg/apis/duck/v1/zz_generated.deepcopy.go b/vendor/knative.dev/eventing/pkg/apis/duck/v1/zz_generated.deepcopy.go index 8f024debf1..5dd4986c74 100644 --- a/vendor/knative.dev/eventing/pkg/apis/duck/v1/zz_generated.deepcopy.go +++ b/vendor/knative.dev/eventing/pkg/apis/duck/v1/zz_generated.deepcopy.go @@ -184,6 +184,11 @@ func (in *DeliveryStatus) DeepCopyInto(out *DeliveryStatus) { *out = new(apis.URL) (*in).DeepCopyInto(*out) } + if in.DeadLetterSinkCACerts != nil { + in, out := &in.DeadLetterSinkCACerts, &out.DeadLetterSinkCACerts + *out = new(string) + **out = **in + } return } diff --git a/vendor/knative.dev/eventing/pkg/apis/eventing/v1/broker_lifecycle.go b/vendor/knative.dev/eventing/pkg/apis/eventing/v1/broker_lifecycle.go index e85f12ed80..ebe569271e 100644 --- a/vendor/knative.dev/eventing/pkg/apis/eventing/v1/broker_lifecycle.go +++ b/vendor/knative.dev/eventing/pkg/apis/eventing/v1/broker_lifecycle.go @@ -21,6 +21,8 @@ import ( "knative.dev/pkg/apis" v1 "knative.dev/pkg/apis/duck/v1" + + eventingduck "knative.dev/eventing/pkg/apis/duck/v1" ) const ( @@ -104,17 +106,17 @@ func (bs *BrokerStatus) InitializeConditions() { bs.GetConditionSet().Manage(bs).InitializeConditions() } -func (bs *BrokerStatus) MarkDeadLetterSinkResolvedSucceeded(deadLetterSinkURI *apis.URL) { - bs.DeadLetterSinkURI = deadLetterSinkURI +func (bs *BrokerStatus) MarkDeadLetterSinkResolvedSucceeded(deadLetterSink eventingduck.DeliveryStatus) { + bs.DeliveryStatus = deadLetterSink bs.GetConditionSet().Manage(bs).MarkTrue(BrokerConditionDeadLetterSinkResolved) } func (bs *BrokerStatus) MarkDeadLetterSinkNotConfigured() { - bs.DeadLetterSinkURI = nil + bs.DeliveryStatus = eventingduck.DeliveryStatus{} bs.GetConditionSet().Manage(bs).MarkTrueWithReason(BrokerConditionDeadLetterSinkResolved, "DeadLetterSinkNotConfigured", "No dead letter sink is configured.") } func (bs *BrokerStatus) MarkDeadLetterSinkResolvedFailed(reason, messageFormat string, messageA ...interface{}) { - bs.DeadLetterSinkURI = nil + bs.DeliveryStatus = eventingduck.DeliveryStatus{} bs.GetConditionSet().Manage(bs).MarkFalse(BrokerConditionDeadLetterSinkResolved, reason, messageFormat, messageA...) } diff --git a/vendor/knative.dev/eventing/pkg/apis/eventing/v1/test_helper.go b/vendor/knative.dev/eventing/pkg/apis/eventing/v1/test_helper.go index 5082c9a2fc..80b2510009 100644 --- a/vendor/knative.dev/eventing/pkg/apis/eventing/v1/test_helper.go +++ b/vendor/knative.dev/eventing/pkg/apis/eventing/v1/test_helper.go @@ -19,10 +19,11 @@ package v1 import ( corev1 "k8s.io/api/core/v1" - eventingduckv1 "knative.dev/eventing/pkg/apis/duck/v1" - messagingv1 "knative.dev/eventing/pkg/apis/messaging/v1" "knative.dev/pkg/apis" duckv1 "knative.dev/pkg/apis/duck/v1" + + eventingduckv1 "knative.dev/eventing/pkg/apis/duck/v1" + messagingv1 "knative.dev/eventing/pkg/apis/messaging/v1" ) type testHelper struct{} @@ -61,7 +62,7 @@ func (t testHelper) ReadyBrokerStatus() *BrokerStatus { bs.PropagateTriggerChannelReadiness(t.ReadyChannelStatus()) bs.PropagateFilterAvailability(t.AvailableEndpoints()) bs.SetAddress(apis.HTTP("example.com")) - bs.MarkDeadLetterSinkResolvedSucceeded(nil) + bs.MarkDeadLetterSinkResolvedSucceeded(eventingduckv1.DeliveryStatus{}) return bs } diff --git a/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta1/eventtype_conversion.go b/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta1/eventtype_conversion.go index 89911f65e6..b3e0ae6ba9 100644 --- a/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta1/eventtype_conversion.go +++ b/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta1/eventtype_conversion.go @@ -35,16 +35,26 @@ func (source *EventType) ConvertTo(ctx context.Context, obj apis.Convertible) er Status: source.Status.Status, } sink.Spec = v1beta2.EventTypeSpec{ - Type: source.Spec.Type, - Source: source.Spec.Source, - Schema: source.Spec.Schema, - SchemaData: source.Spec.SchemaData, - Reference: &duckv1.KReference{ + Type: source.Spec.Type, + Source: source.Spec.Source, + Schema: source.Spec.Schema, + SchemaData: source.Spec.SchemaData, + Description: source.Spec.Description, + } + + // for old stuff, we play nice here + // default to broker, but as a reference + if source.Spec.Reference == nil && source.Spec.Broker != "" { + sink.Spec.Reference = &duckv1.KReference{ APIVersion: "eventing.knative.dev/v1", Kind: "Broker", Name: source.Spec.Broker, - }, - Description: source.Spec.Description, + } + } + + // if we have a reference, use it + if source.Spec.Reference != nil { + sink.Spec.Reference = source.Spec.Reference } return nil @@ -67,7 +77,7 @@ func (sink *EventType) ConvertFrom(ctx context.Context, obj apis.Convertible) er Source: source.Spec.Source, Schema: source.Spec.Schema, SchemaData: source.Spec.SchemaData, - Broker: source.Spec.Reference.Name, + Reference: source.Spec.Reference, Description: source.Spec.Description, } diff --git a/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta1/eventtype_defaults.go b/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta1/eventtype_defaults.go index bdcfbf3573..115df98d46 100644 --- a/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta1/eventtype_defaults.go +++ b/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta1/eventtype_defaults.go @@ -23,7 +23,7 @@ func (et *EventType) SetDefaults(ctx context.Context) { } func (ets *EventTypeSpec) SetDefaults(ctx context.Context) { - if ets.Broker == "" { + if ets.Reference == nil && ets.Broker == "" { ets.Broker = "default" } } diff --git a/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta1/eventtype_types.go b/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta1/eventtype_types.go index c674e16fc6..0c3fd2e8ef 100644 --- a/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta1/eventtype_types.go +++ b/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta1/eventtype_types.go @@ -79,6 +79,10 @@ type EventTypeSpec struct { // Broker refers to the Broker that can provide the EventType. // +optional Broker string `json:"broker,omitempty"` + // Reference is a KReference to the belonging addressable. + // For example, this could be a pointer to a Broker. + // +optional + Reference *duckv1.KReference `json:"reference,omitempty"` // Description is an optional field used to describe the EventType, in any meaningful way. // +optional Description string `json:"description,omitempty"` diff --git a/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta1/zz_generated.deepcopy.go b/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta1/zz_generated.deepcopy.go index 20ea81675b..381fbe4f51 100644 --- a/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta1/zz_generated.deepcopy.go +++ b/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta1/zz_generated.deepcopy.go @@ -24,6 +24,7 @@ package v1beta1 import ( runtime "k8s.io/apimachinery/pkg/runtime" apis "knative.dev/pkg/apis" + v1 "knative.dev/pkg/apis/duck/v1" ) // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. @@ -100,6 +101,11 @@ func (in *EventTypeSpec) DeepCopyInto(out *EventTypeSpec) { *out = new(apis.URL) (*in).DeepCopyInto(*out) } + if in.Reference != nil { + in, out := &in.Reference, &out.Reference + *out = new(v1.KReference) + (*in).DeepCopyInto(*out) + } return } diff --git a/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta2/eventtype_defaults.go b/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta2/eventtype_defaults.go index 3657729b5c..163447408d 100644 --- a/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta2/eventtype_defaults.go +++ b/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta2/eventtype_defaults.go @@ -18,8 +18,6 @@ package v1beta2 import ( "context" - - duckv1 "knative.dev/pkg/apis/duck/v1" ) func (et *EventType) SetDefaults(ctx context.Context) { @@ -27,11 +25,5 @@ func (et *EventType) SetDefaults(ctx context.Context) { } func (ets *EventTypeSpec) SetDefaults(ctx context.Context) { - if ets.Reference == nil { - ets.Reference = &duckv1.KReference{ - APIVersion: "eventing.knative.dev/v1", - Kind: "Broker", - Name: "default", - } - } + } diff --git a/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta2/eventtype_lifecycle.go b/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta2/eventtype_lifecycle.go index a8e1bfe846..300114a8cf 100644 --- a/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta2/eventtype_lifecycle.go +++ b/vendor/knative.dev/eventing/pkg/apis/eventing/v1beta2/eventtype_lifecycle.go @@ -17,18 +17,14 @@ limitations under the License. package v1beta2 import ( - corev1 "k8s.io/api/core/v1" - - eventingv1 "knative.dev/eventing/pkg/apis/eventing/v1" "knative.dev/pkg/apis" ) -var eventTypeCondSet = apis.NewLivingConditionSet(EventTypeConditionBrokerExists, EventTypeConditionBrokerReady) +var eventTypeCondSet = apis.NewLivingConditionSet(EventTypeConditionReferenceExists) const ( - EventTypeConditionReady = apis.ConditionReady - EventTypeConditionBrokerExists apis.ConditionType = "BrokerExists" - EventTypeConditionBrokerReady apis.ConditionType = "BrokerReady" + EventTypeConditionReady = apis.ConditionReady + EventTypeConditionReferenceExists apis.ConditionType = "ReferenceExists" ) // GetConditionSet retrieves the condition set for this resource. Implements the KRShaped interface. @@ -56,49 +52,14 @@ func (et *EventTypeStatus) InitializeConditions() { eventTypeCondSet.Manage(et).InitializeConditions() } -func (et *EventTypeStatus) MarkBrokerExists() { - eventTypeCondSet.Manage(et).MarkTrue(EventTypeConditionBrokerExists) -} - -func (et *EventTypeStatus) MarkBrokerDoesNotExist() { - eventTypeCondSet.Manage(et).MarkFalse(EventTypeConditionBrokerExists, "BrokerDoesNotExist", "Broker does not exist") -} - -func (et *EventTypeStatus) MarkBrokerExistsUnknown(reason, messageFormat string, messageA ...interface{}) { - eventTypeCondSet.Manage(et).MarkUnknown(EventTypeConditionBrokerExists, reason, messageFormat, messageA...) -} - -func (et *EventTypeStatus) MarkBrokerReady() { - eventTypeCondSet.Manage(et).MarkTrue(EventTypeConditionBrokerReady) -} - -func (et *EventTypeStatus) MarkBrokerFailed(reason, messageFormat string, messageA ...interface{}) { - eventTypeCondSet.Manage(et).MarkFalse(EventTypeConditionBrokerReady, reason, messageFormat, messageA...) -} - -func (et *EventTypeStatus) MarkBrokerUnknown(reason, messageFormat string, messageA ...interface{}) { - eventTypeCondSet.Manage(et).MarkUnknown(EventTypeConditionBrokerReady, reason, messageFormat, messageA...) +func (et *EventTypeStatus) MarkReferenceExists() { + eventTypeCondSet.Manage(et).MarkTrue(EventTypeConditionReferenceExists) } -func (et *EventTypeStatus) MarkBrokerNotConfigured() { - eventTypeCondSet.Manage(et).MarkUnknown(EventTypeConditionBrokerReady, - "BrokerNotConfigured", "Broker has not yet been reconciled.") +func (et *EventTypeStatus) MarkReferenceDoesNotExist() { + eventTypeCondSet.Manage(et).MarkFalse(EventTypeConditionReferenceExists, "ResourceDoesNotExist", "Resource in spec.reference does not exist") } -func (et *EventTypeStatus) PropagateBrokerStatus(bs *eventingv1.BrokerStatus) { - bc := bs.GetConditionSet().Manage(bs).GetTopLevelCondition() - if bc == nil { - et.MarkBrokerNotConfigured() - return - } - switch { - case bc.Status == corev1.ConditionUnknown: - et.MarkBrokerUnknown(bc.Reason, bc.Message) - case bc.Status == corev1.ConditionTrue: - eventTypeCondSet.Manage(et).MarkTrue(EventTypeConditionBrokerReady) - case bc.Status == corev1.ConditionFalse: - et.MarkBrokerFailed(bc.Reason, bc.Message) - default: - et.MarkBrokerUnknown("BrokerUnknown", "The status of Broker is invalid: %v", bc.Status) - } +func (et *EventTypeStatus) MarkReferenceExistsUnknown(reason, messageFormat string, messageA ...interface{}) { + eventTypeCondSet.Manage(et).MarkUnknown(EventTypeConditionReferenceExists, reason, messageFormat, messageA...) } diff --git a/vendor/knative.dev/eventing/pkg/apis/messaging/v1/channel_lifecycle.go b/vendor/knative.dev/eventing/pkg/apis/messaging/v1/channel_lifecycle.go index 40aa084b45..2936a1f194 100644 --- a/vendor/knative.dev/eventing/pkg/apis/messaging/v1/channel_lifecycle.go +++ b/vendor/knative.dev/eventing/pkg/apis/messaging/v1/channel_lifecycle.go @@ -19,9 +19,10 @@ package v1 import ( corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime/schema" - eventingduck "knative.dev/eventing/pkg/apis/duck/v1" "knative.dev/pkg/apis" duckv1 "knative.dev/pkg/apis/duck/v1" + + eventingduck "knative.dev/eventing/pkg/apis/duck/v1" ) var chCondSet = apis.NewLivingConditionSet( @@ -131,17 +132,17 @@ func (cs *ChannelStatus) PropagateStatuses(chs *eventingduck.ChannelableStatus) cs.SubscribableStatus = chs.SubscribableStatus } -func (cs *ChannelStatus) MarkDeadLetterSinkResolvedSucceeded(deadLetterSinkURI *apis.URL) { - cs.DeliveryStatus.DeadLetterSinkURI = deadLetterSinkURI +func (cs *ChannelStatus) MarkDeadLetterSinkResolvedSucceeded(deadLetterSink eventingduck.DeliveryStatus) { + cs.DeliveryStatus = deadLetterSink chCondSet.Manage(cs).MarkTrue(ChannelConditionDeadLetterSinkResolved) } func (cs *ChannelStatus) MarkDeadLetterSinkNotConfigured() { - cs.DeadLetterSinkURI = nil + cs.DeliveryStatus = eventingduck.DeliveryStatus{} chCondSet.Manage(cs).MarkTrueWithReason(ChannelConditionDeadLetterSinkResolved, "DeadLetterSinkNotConfigured", "No dead letter sink is configured.") } func (cs *ChannelStatus) MarkDeadLetterSinkResolvedFailed(reason, messageFormat string, messageA ...interface{}) { - cs.DeadLetterSinkURI = nil + cs.DeliveryStatus = eventingduck.DeliveryStatus{} chCondSet.Manage(cs).MarkFalse(ChannelConditionDeadLetterSinkResolved, reason, messageFormat, messageA...) } diff --git a/vendor/knative.dev/eventing/pkg/apis/messaging/v1/in_memory_channel_lifecycle.go b/vendor/knative.dev/eventing/pkg/apis/messaging/v1/in_memory_channel_lifecycle.go index 1594a8a38f..6be9e29f33 100644 --- a/vendor/knative.dev/eventing/pkg/apis/messaging/v1/in_memory_channel_lifecycle.go +++ b/vendor/knative.dev/eventing/pkg/apis/messaging/v1/in_memory_channel_lifecycle.go @@ -23,6 +23,8 @@ import ( "k8s.io/utils/pointer" "knative.dev/pkg/apis" v1 "knative.dev/pkg/apis/duck/v1" + + eventingduck "knative.dev/eventing/pkg/apis/duck/v1" ) var imcCondSet = apis.NewLivingConditionSet( @@ -97,10 +99,10 @@ func (imcs *InMemoryChannelStatus) InitializeConditions() { imcCondSet.Manage(imcs).InitializeConditions() } -func (imcs *InMemoryChannelStatus) SetAddress(url *apis.URL) { - imcs.Address = &v1.Addressable{URL: url} - if url != nil { - imcs.Address.Name = pointer.String(url.Scheme) +func (imcs *InMemoryChannelStatus) SetAddress(addr *v1.Addressable) { + imcs.Address = addr + if addr != nil && addr.URL != nil { + imcs.Address.Name = pointer.String(addr.URL.Scheme) imcCondSet.Manage(imcs).MarkTrue(InMemoryChannelConditionAddressable) } else { imcCondSet.Manage(imcs).MarkFalse(InMemoryChannelConditionAddressable, "emptyHostname", "hostname is the empty string") @@ -166,17 +168,17 @@ func (imcs *InMemoryChannelStatus) MarkEndpointsTrue() { imcCondSet.Manage(imcs).MarkTrue(InMemoryChannelConditionEndpointsReady) } -func (imcs *InMemoryChannelStatus) MarkDeadLetterSinkResolvedSucceeded(deadLetterSinkURI *apis.URL) { - imcs.DeliveryStatus.DeadLetterSinkURI = deadLetterSinkURI +func (imcs *InMemoryChannelStatus) MarkDeadLetterSinkResolvedSucceeded(ds eventingduck.DeliveryStatus) { + imcs.DeliveryStatus = ds imcCondSet.Manage(imcs).MarkTrue(InMemoryChannelConditionDeadLetterSinkResolved) } func (imcs *InMemoryChannelStatus) MarkDeadLetterSinkNotConfigured() { - imcs.DeadLetterSinkURI = nil + imcs.DeliveryStatus = eventingduck.DeliveryStatus{} imcCondSet.Manage(imcs).MarkTrueWithReason(InMemoryChannelConditionDeadLetterSinkResolved, "DeadLetterSinkNotConfigured", "No dead letter sink is configured.") } func (imcs *InMemoryChannelStatus) MarkDeadLetterSinkResolvedFailed(reason, messageFormat string, messageA ...interface{}) { - imcs.DeadLetterSinkURI = nil + imcs.DeliveryStatus = eventingduck.DeliveryStatus{} imcCondSet.Manage(imcs).MarkFalse(InMemoryChannelConditionDeadLetterSinkResolved, reason, messageFormat, messageA...) } diff --git a/vendor/knative.dev/eventing/pkg/apis/sources/v1/apiserver_lifecycle.go b/vendor/knative.dev/eventing/pkg/apis/sources/v1/apiserver_lifecycle.go index e12d8a397c..5b8f5d1e3b 100644 --- a/vendor/knative.dev/eventing/pkg/apis/sources/v1/apiserver_lifecycle.go +++ b/vendor/knative.dev/eventing/pkg/apis/sources/v1/apiserver_lifecycle.go @@ -20,6 +20,7 @@ import ( appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime/schema" + duckv1 "knative.dev/pkg/apis/duck/v1" "knative.dev/pkg/apis" ) @@ -75,9 +76,10 @@ func (s *ApiServerSourceStatus) InitializeConditions() { } // MarkSink sets the condition that the source has a sink configured. -func (s *ApiServerSourceStatus) MarkSink(uri *apis.URL) { - s.SinkURI = uri - if uri != nil { +func (s *ApiServerSourceStatus) MarkSink(addr *duckv1.Addressable) { + if addr != nil { + s.SinkURI = addr.URL + s.SinkCACerts = addr.CACerts apiserverCondSet.Manage(s).MarkTrue(ApiServerConditionSinkProvided) } else { apiserverCondSet.Manage(s).MarkFalse(ApiServerConditionSinkProvided, "SinkEmpty", "Sink has resolved to empty.%s", "") diff --git a/vendor/knative.dev/eventing/pkg/eventingtls/eventingtls.go b/vendor/knative.dev/eventing/pkg/eventingtls/eventingtls.go index 1207cbf2e5..e7da91e476 100644 --- a/vendor/knative.dev/eventing/pkg/eventingtls/eventingtls.go +++ b/vendor/knative.dev/eventing/pkg/eventingtls/eventingtls.go @@ -124,8 +124,10 @@ func GetCertificateFromSecret(ctx context.Context, informer coreinformersv1.Secr firstValue, err := informer.Lister().Secrets(secret.Namespace).Get(secret.Name) if err != nil { // Try to get the secret from the API Server when the lister failed. - // Ignore any errors as the Secret may not be available yet. - firstValue, _ = kube.CoreV1().Secrets(secret.Namespace).Get(ctx, secret.Name, metav1.GetOptions{}) + firstValue, err = kube.CoreV1().Secrets(secret.Namespace).Get(ctx, secret.Name, metav1.GetOptions{}) + if err != nil { + logger.Warn(err.Error()) + } } if firstValue != nil { store(firstValue) diff --git a/vendor/knative.dev/eventing/pkg/kncloudevents/http_client_new.go b/vendor/knative.dev/eventing/pkg/kncloudevents/http_client_new.go index 0c9f1be1a8..c5b7abc33d 100644 --- a/vendor/knative.dev/eventing/pkg/kncloudevents/http_client_new.go +++ b/vendor/knative.dev/eventing/pkg/kncloudevents/http_client_new.go @@ -17,6 +17,7 @@ limitations under the License. package kncloudevents import ( + "context" "fmt" nethttp "net/http" "sync" @@ -29,8 +30,9 @@ import ( ) const ( - defaultRetryWaitMin = 1 * time.Second - defaultRetryWaitMax = 30 * time.Second + defaultRetryWaitMin = 1 * time.Second + defaultRetryWaitMax = 30 * time.Second + defaultCleanupInterval = 5 * time.Minute ) var ( @@ -38,20 +40,27 @@ var ( ) type clientsHolder struct { - mu sync.Mutex - clients map[string]*nethttp.Client - connectionArgs *ConnectionArgs + clientsMu sync.Mutex + clients map[string]*nethttp.Client + timerMu sync.Mutex + connectionArgs *ConnectionArgs + cleanupInterval time.Duration + cancelCleanup context.CancelFunc } func init() { + ctx, cancel := context.WithCancel(context.Background()) clients = clientsHolder{ - clients: make(map[string]*nethttp.Client), + clients: make(map[string]*nethttp.Client), + cancelCleanup: cancel, + cleanupInterval: defaultCleanupInterval, } + go cleanupClientsMap(ctx) } func getClientForAddressable(addressable duckv1.Addressable) (*nethttp.Client, error) { - clients.mu.Lock() - defer clients.mu.Unlock() + clients.clientsMu.Lock() + defer clients.clientsMu.Unlock() clientKey := addressable.URL.String() @@ -98,8 +107,8 @@ func createNewClient(addressable duckv1.Addressable) (*nethttp.Client, error) { } func AddOrUpdateAddressableHandler(addressable duckv1.Addressable) { - clients.mu.Lock() - defer clients.mu.Unlock() + clients.clientsMu.Lock() + defer clients.clientsMu.Unlock() clientKey := addressable.URL.String() @@ -112,8 +121,8 @@ func AddOrUpdateAddressableHandler(addressable duckv1.Addressable) { } func DeleteAddressableHandler(addressable duckv1.Addressable) { - clients.mu.Lock() - defer clients.mu.Unlock() + clients.clientsMu.Lock() + defer clients.clientsMu.Unlock() clientKey := addressable.URL.String() @@ -125,8 +134,8 @@ func DeleteAddressableHandler(addressable duckv1.Addressable) { func ConfigureConnectionArgs(ca *ConnectionArgs) { configureConnectionArgsOldClient(ca) //also configure the connection args of the old client - clients.mu.Lock() - defer clients.mu.Unlock() + clients.clientsMu.Lock() + defer clients.clientsMu.Unlock() // Check if same config if clients.connectionArgs != nil && @@ -139,8 +148,8 @@ func ConfigureConnectionArgs(ca *ConnectionArgs) { if len(clients.clients) > 0 { // Let's try to clean up a bit the existing clients // Note: this won't remove it nor close it - for _, client := range clients.clients { - client.CloseIdleConnections() + for _, clientEntry := range clients.clients { + clientEntry.CloseIdleConnections() } // Resetting clients @@ -150,6 +159,22 @@ func ConfigureConnectionArgs(ca *ConnectionArgs) { clients.connectionArgs = ca } +// SetClientCleanupInterval sets the interval before the clients map is re-checked for expired entries. +// forceRestart will force the loop to restart with the new interval, cancelling the current iteration. +func SetClientCleanupInterval(cleanupInterval time.Duration, forceRestart bool) { + clients.timerMu.Lock() + clients.cleanupInterval = cleanupInterval + clients.timerMu.Unlock() + if forceRestart { + clients.clientsMu.Lock() + clients.cancelCleanup() + ctx, cancel := context.WithCancel(context.Background()) + clients.cancelCleanup = cancel + clients.clientsMu.Unlock() + go cleanupClientsMap(ctx) + } +} + // ConnectionArgs allow to configure connection parameters to the underlying // HTTP Client transport. type ConnectionArgs struct { @@ -166,3 +191,24 @@ func (ca *ConnectionArgs) configureTransport(transport *nethttp.Transport) { transport.MaxIdleConns = ca.MaxIdleConns transport.MaxIdleConnsPerHost = ca.MaxIdleConnsPerHost } + +func cleanupClientsMap(ctx context.Context) { + for { + clients.timerMu.Lock() + t := time.NewTimer(clients.cleanupInterval) + clients.timerMu.Unlock() + select { + case <-ctx.Done(): + clients.timerMu.Lock() + t.Stop() + clients.timerMu.Unlock() + return + case <-t.C: + clients.clientsMu.Lock() + for _, cme := range clients.clients { + cme.CloseIdleConnections() + } + clients.clientsMu.Unlock() + } + } +} diff --git a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/apiserversouce.go b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/apiserversouce.go index 04bb90f63e..11510305e8 100644 --- a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/apiserversouce.go +++ b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/apiserversouce.go @@ -23,12 +23,13 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" - apisources "knative.dev/eventing/pkg/apis/sources" - v1 "knative.dev/eventing/pkg/apis/sources/v1" - "knative.dev/eventing/pkg/reconciler/testing" "knative.dev/pkg/apis" duckv1 "knative.dev/pkg/apis/duck/v1" "knative.dev/pkg/kmeta" + + apisources "knative.dev/eventing/pkg/apis/sources" + v1 "knative.dev/eventing/pkg/apis/sources/v1" + "knative.dev/eventing/pkg/reconciler/testing" ) // ApiServerSourceOption enables further configuration of a v1 ApiServer. @@ -66,7 +67,7 @@ func WithApiServerSourceSinkNotFound(s *v1.ApiServerSource) { func WithApiServerSourceSink(uri *apis.URL) ApiServerSourceOption { return func(s *v1.ApiServerSource) { - s.Status.MarkSink(uri) + s.Status.MarkSink(&duckv1.Addressable{URL: uri}) } } diff --git a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/broker.go b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/broker.go index b2462a1b5c..970b9abbd1 100644 --- a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/broker.go +++ b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/broker.go @@ -19,12 +19,13 @@ import ( "time" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "knative.dev/pkg/apis" + duckv1 "knative.dev/pkg/apis/duck/v1" + eventingv1 "knative.dev/eventing/pkg/apis/duck/v1" "knative.dev/eventing/pkg/apis/eventing" v1 "knative.dev/eventing/pkg/apis/eventing/v1" "knative.dev/eventing/pkg/client/injection/reconciler/eventing/v1/broker" - "knative.dev/pkg/apis" - duckv1 "knative.dev/pkg/apis/duck/v1" ) // BrokerOption enables further configuration of a Broker. @@ -182,9 +183,9 @@ func WithChannelCACertsAnnotation(caCerts string) BrokerOption { } } -func WithBrokerStatusDLSURI(dlsURI *apis.URL) BrokerOption { +func WithBrokerStatusDLS(dls duckv1.Addressable) BrokerOption { return func(b *v1.Broker) { - b.Status.MarkDeadLetterSinkResolvedSucceeded(dlsURI) + b.Status.MarkDeadLetterSinkResolvedSucceeded(eventingv1.NewDeliveryStatusFromAddressable(&dls)) } } @@ -215,19 +216,12 @@ func WithChannelNameAnnotation(name string) BrokerOption { } } -func WithDeadLeaderSink(ref *duckv1.KReference, uri string) BrokerOption { +func WithDeadLeaderSink(d duckv1.Destination) BrokerOption { return func(b *v1.Broker) { if b.Spec.Delivery == nil { b.Spec.Delivery = new(eventingv1.DeliverySpec) } - var u *apis.URL - if uri != "" { - u, _ = apis.ParseURL(uri) - } - b.Spec.Delivery.DeadLetterSink = &duckv1.Destination{ - Ref: ref, - URI: u, - } + b.Spec.Delivery.DeadLetterSink = &d } } diff --git a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/channel.go b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/channel.go index 801eafd5d8..c4f5942f9b 100644 --- a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/channel.go +++ b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/channel.go @@ -24,11 +24,11 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + duckv1 "knative.dev/pkg/apis/duck/v1" + eventingduckv1 "knative.dev/eventing/pkg/apis/duck/v1" eventingv1 "knative.dev/eventing/pkg/apis/messaging/v1" messagingv1 "knative.dev/eventing/pkg/apis/messaging/v1" - "knative.dev/pkg/apis" - duckv1 "knative.dev/pkg/apis/duck/v1" ) // ChannelOption enables further configuration of a Channel. @@ -147,9 +147,9 @@ func WithChannelSubscriberStatuses(subscriberStatuses []eventingduckv1.Subscribe } } -func WithChannelStatusDLSURI(dlsURI *apis.URL) ChannelOption { +func WithChannelStatusDLS(ds eventingduckv1.DeliveryStatus) ChannelOption { return func(c *eventingv1.Channel) { - c.Status.MarkDeadLetterSinkResolvedSucceeded(dlsURI) + c.Status.MarkDeadLetterSinkResolvedSucceeded(ds) } } diff --git a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/eventtype.go b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/eventtype.go index 08883dd7d0..871b90cb3a 100644 --- a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/eventtype.go +++ b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/eventtype.go @@ -93,29 +93,12 @@ func WithEventTypeDeletionTimestamp(et *v1beta2.EventType) { et.ObjectMeta.SetDeletionTimestamp(&t) } -// WithEventTypeBrokerNotFound calls .Status.MarkFilterFailed on the EventType. -func WithEventTypeBrokerDoesNotExist(et *v1beta2.EventType) { - et.Status.MarkBrokerDoesNotExist() +// WithEventTypeResourceDoesNotExist calls .Status.MarkFilterFailed on the EventType. +func WithEventTypeResourceDoesNotExist(et *v1beta2.EventType) { + et.Status.MarkReferenceDoesNotExist() } -// WithEventTypeBrokerExists calls .Status.MarkBrokerExists on the EventType. -func WithEventTypeBrokerExists(et *v1beta2.EventType) { - et.Status.MarkBrokerExists() -} - -func WithEventTypeBrokerFailed(reason, message string) EventTypeOption { - return func(et *v1beta2.EventType) { - et.Status.MarkBrokerFailed(reason, message) - } -} - -func WithEventTypeBrokerUnknown(reason, message string) EventTypeOption { - return func(et *v1beta2.EventType) { - et.Status.MarkBrokerUnknown(reason, message) - } -} - -// WithEventTypeBrokerReady calls .Status.MarkBrokerReady on the EventType. -func WithEventTypeBrokerReady(et *v1beta2.EventType) { - et.Status.MarkBrokerReady() +// WithEventTypeResourceExists calls .Status.MarkReferenceExists on the EventType. +func WithEventTypeResourceExists(et *v1beta2.EventType) { + et.Status.MarkReferenceExists() } diff --git a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/inmemorychannel.go b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/inmemorychannel.go index ac8653886a..bd6398e67b 100644 --- a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/inmemorychannel.go +++ b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/inmemorychannel.go @@ -23,8 +23,6 @@ import ( appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "knative.dev/pkg/apis" - duckv1 "knative.dev/pkg/apis/duck/v1" eventingv1 "knative.dev/eventing/pkg/apis/duck/v1" @@ -140,12 +138,9 @@ func WithInMemoryChannelEndpointsReady() InMemoryChannelOption { } } -func WithInMemoryChannelAddress(a string) InMemoryChannelOption { +func WithInMemoryChannelAddress(a duckv1.Addressable) InMemoryChannelOption { return func(imc *v1.InMemoryChannel) { - imc.Status.SetAddress(&apis.URL{ - Scheme: "http", - Host: a, - }) + imc.Status.SetAddress(&a) } } @@ -163,12 +158,9 @@ func WithInMemoryChannelAddresses(addresses []duckv1.Addressable) InMemoryChanne } } -func WithInMemoryChannelReady(host string) InMemoryChannelOption { +func WithInMemoryChannelReady(a duckv1.Addressable) InMemoryChannelOption { return func(imc *v1.InMemoryChannel) { - imc.Status.SetAddress(&apis.URL{ - Scheme: "http", - Host: host, - }) + imc.Status.SetAddress(&a) imc.Status.MarkChannelServiceTrue() imc.Status.MarkEndpointsTrue() imc.Status.MarkServiceTrue() @@ -218,9 +210,13 @@ func WithInMemoryScopeAnnotation(value string) InMemoryChannelOption { } } -func WithInMemoryChannelStatusDLSURI(dlsURI *apis.URL) InMemoryChannelOption { +func WithInMemoryChannelStatusDLS(dls *duckv1.Addressable) InMemoryChannelOption { return func(imc *v1.InMemoryChannel) { - imc.Status.MarkDeadLetterSinkResolvedSucceeded(dlsURI) + if dls == nil { + imc.Status.MarkDeadLetterSinkNotConfigured() + return + } + imc.Status.MarkDeadLetterSinkResolvedSucceeded(eventingv1.NewDeliveryStatusFromAddressable(dls)) } } @@ -241,18 +237,11 @@ func WithInMemoryChannelDLSResolvedFailed() InMemoryChannelOption { } } -func WithDeadLetterSink(ref *duckv1.KReference, uri string) InMemoryChannelOption { +func WithDeadLetterSink(d duckv1.Destination) InMemoryChannelOption { return func(imc *v1.InMemoryChannel) { if imc.Spec.Delivery == nil { imc.Spec.Delivery = new(eventingv1.DeliverySpec) } - var u *apis.URL - if uri != "" { - u, _ = apis.ParseURL(uri) - } - imc.Spec.Delivery.DeadLetterSink = &duckv1.Destination{ - Ref: ref, - URI: u, - } + imc.Spec.Delivery.DeadLetterSink = &d } } diff --git a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/secret.go b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/secret.go new file mode 100644 index 0000000000..8e440970ac --- /dev/null +++ b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/secret.go @@ -0,0 +1,45 @@ +/* +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 testing + +import ( + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// SecretOption enables further configuration of a Secret. +type SecretOption func(secret *v1.Secret) + +// NewSecret creates a new Secret. +func NewSecret(name, namespace string, o ...SecretOption) *v1.Secret { + cm := &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: namespace, + Name: name, + }, + } + for _, opt := range o { + opt(cm) + } + return cm +} + +func WithSecretData(data map[string][]byte) SecretOption { + return func(cm *v1.Secret) { + cm.Data = data + } +} diff --git a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/subscription.go b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/subscription.go index 8e13301bc9..702b7695c9 100644 --- a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/subscription.go +++ b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/subscription.go @@ -25,11 +25,11 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + duckv1 "knative.dev/pkg/apis/duck/v1" + eventingduckv1 "knative.dev/eventing/pkg/apis/duck/v1" eventingv1 "knative.dev/eventing/pkg/apis/eventing/v1" v1 "knative.dev/eventing/pkg/apis/messaging/v1" - "knative.dev/pkg/apis" - duckv1 "knative.dev/pkg/apis/duck/v1" ) // SubscriptionOption enables further configuration of a Subscription. @@ -221,12 +221,12 @@ func WithSubscriptionPhysicalSubscriptionReply(reply *duckv1.Addressable) Subscr } } -func WithSubscriptionDeadLetterSinkURI(uri *apis.URL) SubscriptionOption { +func WithSubscriptionDeadLetterSink(dls *duckv1.Addressable) SubscriptionOption { return func(s *v1.Subscription) { - if uri == nil { + if dls == nil { panic(errors.New("nil URI")) } - s.Status.PhysicalSubscription.DeadLetterSinkURI = uri + s.Status.PhysicalSubscription.DeliveryStatus = eventingduckv1.NewDeliveryStatusFromAddressable(dls) } } diff --git a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/trigger.go b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/trigger.go index dbb7936d2d..0b20195b7d 100644 --- a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/trigger.go +++ b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/trigger.go @@ -23,11 +23,12 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" - eventingv1 "knative.dev/eventing/pkg/apis/duck/v1" - v1 "knative.dev/eventing/pkg/apis/eventing/v1" "knative.dev/pkg/apis" duckv1 "knative.dev/pkg/apis/duck/v1" "knative.dev/pkg/ptr" + + eventingv1 "knative.dev/eventing/pkg/apis/duck/v1" + v1 "knative.dev/eventing/pkg/apis/eventing/v1" ) // TriggerOption enables further configuration of a Trigger. @@ -58,19 +59,21 @@ func WithTriggerSubscriberURI(rawurl string) TriggerOption { } } -func WithTriggerDeadLeaderSink(ref *duckv1.KReference, uri string) TriggerOption { +func WithTriggerSubscriber(sub duckv1.Destination) TriggerOption { + if err := sub.Validate(context.Background()).Filter(apis.ErrorLevel); err != nil { + panic(err) + } + return func(t *v1.Trigger) { + t.Spec.Subscriber = sub + } +} + +func WithTriggerDeadLeaderSink(destination duckv1.Destination) TriggerOption { return func(t *v1.Trigger) { if t.Spec.Delivery == nil { t.Spec.Delivery = new(eventingv1.DeliverySpec) } - var u *apis.URL - if uri != "" { - u, _ = apis.ParseURL(uri) - } - t.Spec.Delivery.DeadLetterSink = &duckv1.Destination{ - Ref: ref, - URI: u, - } + t.Spec.Delivery.DeadLetterSink = &destination } } @@ -189,16 +192,15 @@ func WithTriggerStatusSubscriberURI(uri string) TriggerOption { } } -func WithTriggerStatusSubscriberCACerts(caCerts *string) TriggerOption { +func WithTriggerStatusSubscriberCACerts(caCerts string) TriggerOption { return func(t *v1.Trigger) { - t.Status.SubscriberCACerts = caCerts + t.Status.SubscriberCACerts = &caCerts } } -func WithTriggerStatusDeadLetterSinkURI(uri string) TriggerOption { +func WithTriggerStatusDeadLetterSinkURI(uri duckv1.Addressable) TriggerOption { return func(t *v1.Trigger) { - u, _ := apis.ParseURL(uri) - t.Status.DeadLetterSinkURI = u + t.Status.DeliveryStatus = eventingv1.NewDeliveryStatusFromAddressable(&uri) } } @@ -271,6 +273,12 @@ func WithTriggerDeadLetterSinkResolvedSucceeded() TriggerOption { } } +func WithTriggerDeadLetterSinkCACerts(ca string) TriggerOption { + return func(t *v1.Trigger) { + t.Status.DeadLetterSinkCACerts = &ca + } +} + func WithTriggerDeadLetterSinkNotConfigured() TriggerOption { return func(t *v1.Trigger) { t.Status.MarkDeadLetterSinkNotConfigured() diff --git a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/unstructured.go b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/unstructured.go index a6a4b2ad5a..3e75407d9c 100644 --- a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/unstructured.go +++ b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/unstructured.go @@ -20,6 +20,8 @@ import ( "fmt" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" + duckv1 "knative.dev/pkg/apis/duck/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -47,14 +49,15 @@ func NewUnstructured(gvk metav1.GroupVersionKind, name, namespace string, uo ... return u } -func WithUnstructuredAddressable(hostname string) UnstructuredOption { +func WithUnstructuredAddressable(addr duckv1.Addressable) UnstructuredOption { return func(u *unstructured.Unstructured) { status, ok := u.Object["status"].(map[string]interface{}) if ok { - status["address"] = map[string]interface{}{ - "hostname": hostname, - "url": fmt.Sprintf("http://%s", hostname), + obj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(&addr) + if err != nil { + panic(err) } + status["address"] = obj } } } diff --git a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1beta2/eventtype.go b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1beta2/eventtype.go index 08883dd7d0..871b90cb3a 100644 --- a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1beta2/eventtype.go +++ b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1beta2/eventtype.go @@ -93,29 +93,12 @@ func WithEventTypeDeletionTimestamp(et *v1beta2.EventType) { et.ObjectMeta.SetDeletionTimestamp(&t) } -// WithEventTypeBrokerNotFound calls .Status.MarkFilterFailed on the EventType. -func WithEventTypeBrokerDoesNotExist(et *v1beta2.EventType) { - et.Status.MarkBrokerDoesNotExist() +// WithEventTypeResourceDoesNotExist calls .Status.MarkFilterFailed on the EventType. +func WithEventTypeResourceDoesNotExist(et *v1beta2.EventType) { + et.Status.MarkReferenceDoesNotExist() } -// WithEventTypeBrokerExists calls .Status.MarkBrokerExists on the EventType. -func WithEventTypeBrokerExists(et *v1beta2.EventType) { - et.Status.MarkBrokerExists() -} - -func WithEventTypeBrokerFailed(reason, message string) EventTypeOption { - return func(et *v1beta2.EventType) { - et.Status.MarkBrokerFailed(reason, message) - } -} - -func WithEventTypeBrokerUnknown(reason, message string) EventTypeOption { - return func(et *v1beta2.EventType) { - et.Status.MarkBrokerUnknown(reason, message) - } -} - -// WithEventTypeBrokerReady calls .Status.MarkBrokerReady on the EventType. -func WithEventTypeBrokerReady(et *v1beta2.EventType) { - et.Status.MarkBrokerReady() +// WithEventTypeResourceExists calls .Status.MarkReferenceExists on the EventType. +func WithEventTypeResourceExists(et *v1beta2.EventType) { + et.Status.MarkReferenceExists() } diff --git a/vendor/knative.dev/eventing/test/rekt/features/broker/control_plane.go b/vendor/knative.dev/eventing/test/rekt/features/broker/control_plane.go index f36396370b..b8be496fb8 100644 --- a/vendor/knative.dev/eventing/test/rekt/features/broker/control_plane.go +++ b/vendor/knative.dev/eventing/test/rekt/features/broker/control_plane.go @@ -615,7 +615,7 @@ func BrokerStatusDLSURISet(ctx context.Context, t feature.T) { broker := getBroker(ctx, t) if broker.IsReady() { - if broker.Status.DeadLetterSinkURI == nil { + if !broker.Status.DeliveryStatus.IsSet() { t.Errorf("broker DLS not resolved but resource reported ready") } // Success! diff --git a/vendor/knative.dev/eventing/test/rekt/features/featureflags/featureflags.go b/vendor/knative.dev/eventing/test/rekt/features/featureflags/featureflags.go new file mode 100644 index 0000000000..0ba4a2c7c8 --- /dev/null +++ b/vendor/knative.dev/eventing/test/rekt/features/featureflags/featureflags.go @@ -0,0 +1,74 @@ +/* +Copyright 2023 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 featureflags + +import ( + "context" + "fmt" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + kubeclient "knative.dev/pkg/client/injection/kube/client" + "knative.dev/pkg/system" + "knative.dev/reconciler-test/pkg/feature" + + apifeature "knative.dev/eventing/pkg/apis/feature" +) + +const ( + istioFeatureFlagName = "istio" +) + +func TransportEncryptionPermissiveOrStrict() feature.ShouldRun { + return func(ctx context.Context, t feature.T) (feature.PrerequisiteResult, error) { + flags, err := getFeatureFlags(ctx, "config-features") + if err != nil { + return feature.PrerequisiteResult{}, err + } + + return feature.PrerequisiteResult{ + ShouldRun: flags.IsPermissiveTransportEncryption() || flags.IsStrictTransportEncryption(), + Reason: flags.String(), + }, nil + } +} + +func IstioDisabled() feature.ShouldRun { + return func(ctx context.Context, t feature.T) (feature.PrerequisiteResult, error) { + flags, err := getFeatureFlags(ctx, "config-features") + if err != nil { + return feature.PrerequisiteResult{}, err + } + + return feature.PrerequisiteResult{ + ShouldRun: !flags.IsEnabled(istioFeatureFlagName), + Reason: flags.String(), + }, nil + } +} + +func getFeatureFlags(ctx context.Context, cmName string) (apifeature.Flags, error) { + ns := system.Namespace() + cm, err := kubeclient.Get(ctx). + CoreV1(). + ConfigMaps(ns). + Get(ctx, cmName, metav1.GetOptions{}) + if err != nil { + return nil, fmt.Errorf("failed to get cm %s/%s: %s", ns, cmName, err) + } + + return apifeature.NewFlagsConfigFromConfigMap(cm) +} diff --git a/vendor/knative.dev/eventing/test/rekt/features/trigger/feature.go b/vendor/knative.dev/eventing/test/rekt/features/trigger/feature.go index 91861f9b51..2ed3e2f76a 100644 --- a/vendor/knative.dev/eventing/test/rekt/features/trigger/feature.go +++ b/vendor/knative.dev/eventing/test/rekt/features/trigger/feature.go @@ -28,6 +28,7 @@ import ( "knative.dev/reconciler-test/pkg/eventshub/assert" + "knative.dev/eventing/test/rekt/features/featureflags" "knative.dev/eventing/test/rekt/resources/broker" "knative.dev/eventing/test/rekt/resources/pingsource" "knative.dev/eventing/test/rekt/resources/trigger" @@ -86,3 +87,48 @@ func TriggerDependencyAnnotation() *feature.Feature { return f } + +func TriggerWithTLSSubscriber() *feature.Feature { + f := feature.NewFeatureNamed("Trigger with TLS subscriber") + + f.Prerequisite("should not run when Istio is enabled", featureflags.IstioDisabled()) + + brokerName := feature.MakeRandomK8sName("broker") + sourceName := feature.MakeRandomK8sName("source") + sinkName := feature.MakeRandomK8sName("sink") + triggerName := feature.MakeRandomK8sName("trigger") + + eventToSend := test.FullEvent() + + // Install Broker + f.Setup("Install Broker", broker.Install(brokerName, broker.WithEnvConfig()...)) + f.Setup("Broker is ready", broker.IsReady(brokerName)) + f.Setup("Broker is addressable", broker.IsAddressable(brokerName)) + + // Install Sink + f.Setup("Install Sink", eventshub.Install(sinkName, eventshub.StartReceiverTLS)) + + // Install Trigger + f.Setup("Install trigger", func(ctx context.Context, t feature.T) { + subscriber := service.AsDestinationRef(sinkName) + subscriber.CACerts = eventshub.GetCaCerts(ctx) + + trigger.Install(triggerName, brokerName, + trigger.WithSubscriberFromDestination(subscriber))(ctx, t) + }) + f.Setup("Wait for Trigger to become ready", trigger.IsReady(triggerName)) + + // Install Source + f.Requirement("Install Source", eventshub.Install( + sourceName, + eventshub.StartSenderToResource(broker.GVR(), brokerName), + eventshub.InputEvent(eventToSend), + )) + + f.Assert("Trigger delivers events to TLS subscriber", assert.OnStore(sinkName). + MatchEvent(test.HasId(eventToSend.ID())). + Match(assert.MatchKind(eventshub.EventReceived)). + AtLeast(1)) + + return f +} diff --git a/vendor/knative.dev/eventing/test/rekt/resources/trigger/trigger.go b/vendor/knative.dev/eventing/test/rekt/resources/trigger/trigger.go index 5c7b3aa702..784f6c76a3 100644 --- a/vendor/knative.dev/eventing/test/rekt/resources/trigger/trigger.go +++ b/vendor/knative.dev/eventing/test/rekt/resources/trigger/trigger.go @@ -19,6 +19,7 @@ package trigger import ( "context" "embed" + "strings" "time" "k8s.io/apimachinery/pkg/runtime/schema" @@ -79,6 +80,39 @@ func WithSubscriber(ref *duckv1.KReference, uri string) manifest.CfgFn { } } +// WithSubscriberFromDestination adds the subscriber related config to a Trigger spec. +func WithSubscriberFromDestination(dest *duckv1.Destination) manifest.CfgFn { + return func(cfg map[string]interface{}) { + if _, set := cfg["subscriber"]; !set { + cfg["subscriber"] = map[string]interface{}{} + } + subscriber := cfg["subscriber"].(map[string]interface{}) + + uri := dest.URI + ref := dest.Ref + + if dest.CACerts != nil { + // This is a multi-line string and should be indented accordingly. + // Replace "new line" with "new line + spaces". + subscriber["CACerts"] = strings.ReplaceAll(*dest.CACerts, "\n", "\n ") + } + + if uri != nil { + subscriber["uri"] = uri.String() + } + if ref != nil { + if _, set := subscriber["ref"]; !set { + subscriber["ref"] = map[string]interface{}{} + } + sref := subscriber["ref"].(map[string]interface{}) + sref["apiVersion"] = ref.APIVersion + sref["kind"] = ref.Kind + // skip namespace + sref["name"] = ref.Name + } + } +} + // WithAnnotations adds annotations to the trigger func WithAnnotations(annotations map[string]interface{}) manifest.CfgFn { return func(cfg map[string]interface{}) { diff --git a/vendor/knative.dev/eventing/test/rekt/resources/trigger/trigger.yaml b/vendor/knative.dev/eventing/test/rekt/resources/trigger/trigger.yaml index 2be65de5f2..4814743e30 100644 --- a/vendor/knative.dev/eventing/test/rekt/resources/trigger/trigger.yaml +++ b/vendor/knative.dev/eventing/test/rekt/resources/trigger/trigger.yaml @@ -50,6 +50,10 @@ spec: {{ if .subscriber.uri }} uri: {{ .subscriber.uri }} {{ end }} + {{ if .subscriber.CACerts }} + CACerts: |- + {{ .subscriber.CACerts }} + {{ end }} {{ end }} {{ if .delivery }} delivery: diff --git a/vendor/knative.dev/hack/README.md b/vendor/knative.dev/hack/README.md index b3ad76c5a7..5dc34c8edd 100644 --- a/vendor/knative.dev/hack/README.md +++ b/vendor/knative.dev/hack/README.md @@ -96,7 +96,7 @@ main "$@" This is a helper script for Knative E2E test scripts. To use it: 1. [optional] Customize the test cluster. Pass the flags as described - [here](../tools/kntest/pkg/kubetest2/gke/README.md) to the `initialize` function + [here](https://github.com/knative/toolbox/blob/main/kntest/pkg/kubetest2/gke/README.md) to the `initialize` function call if the default values don't fit your needs. 1. Source the script. diff --git a/vendor/knative.dev/pkg/apis/duck/v1/kresource_type.go b/vendor/knative.dev/pkg/apis/duck/v1/kresource_type.go index 491c13f1f6..1f6ee8264e 100644 --- a/vendor/knative.dev/pkg/apis/duck/v1/kresource_type.go +++ b/vendor/knative.dev/pkg/apis/duck/v1/kresource_type.go @@ -23,6 +23,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + "knative.dev/pkg/apis/duck/ducktypes" "knative.dev/pkg/apis" @@ -41,6 +42,7 @@ type KRShaped interface { // Asserts KResource conformance with KRShaped var _ KRShaped = (*KResource)(nil) +// +genduck // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // KResource is a skeleton type wrapping Conditions in the manner we expect @@ -54,6 +56,11 @@ type KResource struct { Status Status `json:"status"` } +// GetFullType implements duck.Implementable +func (*KResource) GetFullType() ducktypes.Populatable { + return &KResource{} +} + // Populate implements duck.Populatable func (t *KResource) Populate() { t.Status.ObservedGeneration = 42 diff --git a/vendor/knative.dev/pkg/environment/client_config.go b/vendor/knative.dev/pkg/environment/client_config.go index 04d4220b0a..aef33927ef 100644 --- a/vendor/knative.dev/pkg/environment/client_config.go +++ b/vendor/knative.dev/pkg/environment/client_config.go @@ -19,8 +19,10 @@ package environment import ( "flag" "fmt" + "log" "math" "os" + "strconv" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" @@ -45,9 +47,19 @@ func (c *ClientConfig) InitFlags(fs *flag.FlagSet) { fs.StringVar(&c.Kubeconfig, "kubeconfig", os.Getenv("KUBECONFIG"), "Path to a kubeconfig. Only required if out-of-cluster.") - fs.IntVar(&c.Burst, "kube-api-burst", 0, "Maximum burst for throttle.") + fs.IntVar(&c.Burst, "kube-api-burst", int(envVarOrDefault("KUBE_API_BURST", 0)), "Maximum burst for throttle.") - fs.Float64Var(&c.QPS, "kube-api-qps", 0, "Maximum QPS to the server from the client.") + fs.Float64Var(&c.QPS, "kube-api-qps", envVarOrDefault("KUBE_API_QPS", 0.0), "Maximum QPS to the server from the client.") +} + +func envVarOrDefault(key string, val float64) float64 { + var err error + if v := os.Getenv(key); v != "" { + if val, err = strconv.ParseFloat(v, 64); err != nil { + log.Fatal(err) + } + } + return val } func (c *ClientConfig) GetRESTConfig() (*rest.Config, error) { diff --git a/vendor/knative.dev/pkg/webhook/resourcesemantics/defaulting/controller.go b/vendor/knative.dev/pkg/webhook/resourcesemantics/defaulting/controller.go index b50fcf8f41..ba50005d79 100644 --- a/vendor/knative.dev/pkg/webhook/resourcesemantics/defaulting/controller.go +++ b/vendor/knative.dev/pkg/webhook/resourcesemantics/defaulting/controller.go @@ -46,13 +46,6 @@ func NewAdmissionController( callbacks ...map[schema.GroupVersionKind]Callback, ) *controller.Impl { - client := kubeclient.Get(ctx) - mwhInformer := mwhinformer.Get(ctx) - secretInformer := secretinformer.Get(ctx) - options := webhook.GetOptions(ctx) - - key := types.NamespacedName{Name: name} - // This not ideal, we are using a variadic argument to effectively make callbacks optional // This allows this addition to be non-breaking to consumers of /pkg // TODO: once all sub-repos have adopted this, we might move this back to a traditional param. @@ -66,6 +59,34 @@ func NewAdmissionController( panic("NewAdmissionController may not be called with multiple callback maps") } + opts := []OptionFunc{ + WithPath(path), + WithTypes(handlers), + WithWrapContext(wc), + WithCallbacks(unwrappedCallbacks), + } + + if disallowUnknownFields { + opts = append(opts, WithDisallowUnknownFields()) + } + + return newController(ctx, name, opts...) +} + +func newController(ctx context.Context, name string, optsFunc ...OptionFunc) *controller.Impl { + client := kubeclient.Get(ctx) + mwhInformer := mwhinformer.Get(ctx) + secretInformer := secretinformer.Get(ctx) + + opts := &options{} + wopts := webhook.GetOptions(ctx) + + for _, f := range optsFunc { + f(opts) + } + + key := types.NamespacedName{Name: name} + wh := &reconciler{ LeaderAwareFuncs: pkgreconciler.LeaderAwareFuncs{ // Have this reconciler enqueue our singleton whenever it becomes leader. @@ -76,13 +97,13 @@ func NewAdmissionController( }, key: key, - path: path, - handlers: handlers, - callbacks: unwrappedCallbacks, + path: opts.path, + handlers: opts.types, + callbacks: opts.callbacks, - withContext: wc, - disallowUnknownFields: disallowUnknownFields, - secretName: options.SecretName, + withContext: opts.wc, + disallowUnknownFields: opts.disallowUnknownFields, + secretName: wopts.SecretName, client: client, mwhlister: mwhInformer.Lister(), @@ -90,8 +111,12 @@ func NewAdmissionController( } logger := logging.FromContext(ctx) - const queueName = "DefaultingWebhook" - c := controller.NewContext(ctx, wh, controller.ControllerOptions{WorkQueueName: queueName, Logger: logger.Named(queueName)}) + controllerOptions := wopts.ControllerOptions + if controllerOptions == nil { + const queueName = "DefaultingWebhook" + controllerOptions = &controller.ControllerOptions{WorkQueueName: queueName, Logger: logger.Named(queueName)} + } + c := controller.NewContext(ctx, wh, *controllerOptions) // Reconcile when the named MutatingWebhookConfiguration changes. mwhInformer.Informer().AddEventHandler(cache.FilteringResourceEventHandler{ diff --git a/vendor/knative.dev/pkg/webhook/resourcesemantics/defaulting/options.go b/vendor/knative.dev/pkg/webhook/resourcesemantics/defaulting/options.go new file mode 100644 index 0000000000..deb04945ad --- /dev/null +++ b/vendor/knative.dev/pkg/webhook/resourcesemantics/defaulting/options.go @@ -0,0 +1,64 @@ +/* +Copyright 2023 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 defaulting + +import ( + "context" + + "k8s.io/apimachinery/pkg/runtime/schema" + "knative.dev/pkg/webhook/resourcesemantics" +) + +type options struct { + path string + types map[schema.GroupVersionKind]resourcesemantics.GenericCRD + wc func(context.Context) context.Context + disallowUnknownFields bool + callbacks map[schema.GroupVersionKind]Callback +} + +type OptionFunc func(*options) + +func WithCallbacks(callbacks map[schema.GroupVersionKind]Callback) OptionFunc { + return func(o *options) { + o.callbacks = callbacks + } +} + +func WithPath(path string) OptionFunc { + return func(o *options) { + o.path = path + } +} + +func WithTypes(types map[schema.GroupVersionKind]resourcesemantics.GenericCRD) OptionFunc { + return func(o *options) { + o.types = types + } +} + +func WithWrapContext(f func(context.Context) context.Context) OptionFunc { + return func(o *options) { + o.wc = f + } +} + +func WithDisallowUnknownFields() OptionFunc { + return func(o *options) { + o.disallowUnknownFields = true + } +} diff --git a/vendor/knative.dev/pkg/webhook/resourcesemantics/validation/controller.go b/vendor/knative.dev/pkg/webhook/resourcesemantics/validation/controller.go index 8e8e008e6c..eee6105b45 100644 --- a/vendor/knative.dev/pkg/webhook/resourcesemantics/validation/controller.go +++ b/vendor/knative.dev/pkg/webhook/resourcesemantics/validation/controller.go @@ -45,10 +45,31 @@ func NewAdmissionControllerWithConfig( disallowUnknownFields bool, callbacks map[schema.GroupVersionKind]Callback, ) *controller.Impl { + + opts := []OptionFunc{ + WithPath(path), + WithTypes(handlers), + WithWrapContext(wc), + WithCallbacks(callbacks), + } + + if disallowUnknownFields { + opts = append(opts, WithDisallowUnknownFields()) + } + return newController(ctx, name, opts...) +} + +func newController(ctx context.Context, name string, optsFunc ...OptionFunc) *controller.Impl { client := kubeclient.Get(ctx) vwhInformer := vwhinformer.Get(ctx) secretInformer := secretinformer.Get(ctx) - options := webhook.GetOptions(ctx) + woptions := webhook.GetOptions(ctx) + + opts := &options{} + + for _, f := range optsFunc { + f(opts) + } wh := &reconciler{ LeaderAwareFuncs: pkgreconciler.LeaderAwareFuncs{ @@ -62,13 +83,13 @@ func NewAdmissionControllerWithConfig( key: types.NamespacedName{ Name: name, }, - path: path, - handlers: handlers, - callbacks: callbacks, + path: opts.path, + handlers: opts.types, + callbacks: opts.callbacks, - withContext: wc, - disallowUnknownFields: disallowUnknownFields, - secretName: options.SecretName, + withContext: opts.wc, + disallowUnknownFields: opts.DisallowUnknownFields(), + secretName: woptions.SecretName, client: client, vwhlister: vwhInformer.Lister(), @@ -76,8 +97,13 @@ func NewAdmissionControllerWithConfig( } logger := logging.FromContext(ctx) - const queueName = "ValidationWebhook" - c := controller.NewContext(ctx, wh, controller.ControllerOptions{WorkQueueName: queueName, Logger: logger.Named(queueName)}) + + controllerOptions := woptions.ControllerOptions + if woptions.ControllerOptions == nil { + const queueName = "ValidationWebhook" + controllerOptions = &controller.ControllerOptions{WorkQueueName: queueName, Logger: logger.Named(queueName)} + } + c := controller.NewContext(ctx, wh, *controllerOptions) // Reconcile when the named ValidatingWebhookConfiguration changes. vwhInformer.Informer().AddEventHandler(cache.FilteringResourceEventHandler{ diff --git a/vendor/knative.dev/pkg/webhook/resourcesemantics/validation/options.go b/vendor/knative.dev/pkg/webhook/resourcesemantics/validation/options.go new file mode 100644 index 0000000000..108453b6eb --- /dev/null +++ b/vendor/knative.dev/pkg/webhook/resourcesemantics/validation/options.go @@ -0,0 +1,68 @@ +/* +Copyright 2023 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 validation + +import ( + "context" + + "k8s.io/apimachinery/pkg/runtime/schema" + "knative.dev/pkg/webhook/resourcesemantics" +) + +type options struct { + path string + types map[schema.GroupVersionKind]resourcesemantics.GenericCRD + wc func(context.Context) context.Context + disallowUnknownFields bool + callbacks map[schema.GroupVersionKind]Callback +} + +type OptionFunc func(*options) + +func WithCallbacks(callbacks map[schema.GroupVersionKind]Callback) OptionFunc { + return func(o *options) { + o.callbacks = callbacks + } +} + +func WithPath(path string) OptionFunc { + return func(o *options) { + o.path = path + } +} + +func WithTypes(types map[schema.GroupVersionKind]resourcesemantics.GenericCRD) OptionFunc { + return func(o *options) { + o.types = types + } +} + +func WithWrapContext(f func(context.Context) context.Context) OptionFunc { + return func(o *options) { + o.wc = f + } +} + +func WithDisallowUnknownFields() OptionFunc { + return func(o *options) { + o.disallowUnknownFields = true + } +} + +func (o *options) DisallowUnknownFields() bool { + return o.disallowUnknownFields +} diff --git a/vendor/knative.dev/pkg/webhook/webhook.go b/vendor/knative.dev/pkg/webhook/webhook.go index 80bd8c2be0..92dd01ae35 100644 --- a/vendor/knative.dev/pkg/webhook/webhook.go +++ b/vendor/knative.dev/pkg/webhook/webhook.go @@ -29,6 +29,7 @@ import ( // Injection stuff + "knative.dev/pkg/controller" kubeinformerfactory "knative.dev/pkg/injection/clients/namespacedkube/informers/factory" "knative.dev/pkg/network/handlers" @@ -69,6 +70,10 @@ type Options struct { // GracePeriod is how long to wait after failing readiness probes // before shutting down. GracePeriod time.Duration + + // ControllerOptions encapsulates options for creating a new controller, + // including throttling and stats behavior. + ControllerOptions *controller.ControllerOptions } // Operation is the verb being operated on diff --git a/vendor/knative.dev/reconciler-test/pkg/eventshub/assert/event_info_matchers.go b/vendor/knative.dev/reconciler-test/pkg/eventshub/assert/event_info_matchers.go index f74764d830..be484d1ffa 100644 --- a/vendor/knative.dev/reconciler-test/pkg/eventshub/assert/event_info_matchers.go +++ b/vendor/knative.dev/reconciler-test/pkg/eventshub/assert/event_info_matchers.go @@ -90,6 +90,20 @@ func MatchKind(kind eventshub.EventKind) eventshub.EventInfoMatcher { } } +func OneOf(matchers ...eventshub.EventInfoMatcher) eventshub.EventInfoMatcher { + return func(info eventshub.EventInfo) error { + var lastErr error + for _, m := range matchers { + err := m(info) + if err == nil { + return nil + } + lastErr = err + } + return lastErr + } +} + // MatchStatusCode matches the status code of EventInfo func MatchStatusCode(statusCode int) eventshub.EventInfoMatcher { return func(info eventshub.EventInfo) error { diff --git a/vendor/knative.dev/reconciler-test/pkg/eventshub/assert/step.go b/vendor/knative.dev/reconciler-test/pkg/eventshub/assert/step.go index 0bfd0bb7d8..f54b9598dc 100644 --- a/vendor/knative.dev/reconciler-test/pkg/eventshub/assert/step.go +++ b/vendor/knative.dev/reconciler-test/pkg/eventshub/assert/step.go @@ -28,8 +28,40 @@ func (m MatchAssertionBuilder) Match(matchers ...eventshub.EventInfoMatcher) Mat return m } -// MatchEvent is a shortcut for Match(MatchEvent()) +// MatchReceivedEvent is a shortcut for Match(MatchKind(eventshub.EventReceived), MatchEvent(matchers...)) +func (m MatchAssertionBuilder) MatchReceivedEvent(matchers ...cetest.EventMatcher) MatchAssertionBuilder { + m.matchers = append(m.matchers, MatchKind(eventshub.EventReceived)) + m.matchers = append(m.matchers, MatchEvent(matchers...)) + return m +} + +// MatchRejectedEvent is a shortcut for Match(MatchKind(eventshub.EventRejected), MatchEvent(matchers...)) +func (m MatchAssertionBuilder) MatchRejectedEvent(matchers ...cetest.EventMatcher) MatchAssertionBuilder { + m.matchers = append(m.matchers, MatchKind(eventshub.EventRejected)) + m.matchers = append(m.matchers, MatchEvent(matchers...)) + return m +} + +// MatchSentEvent is a shortcut for Match(MatchKind(eventshub.EventSent), MatchEvent(matchers...)) +func (m MatchAssertionBuilder) MatchSentEvent(matchers ...cetest.EventMatcher) MatchAssertionBuilder { + m.matchers = append(m.matchers, MatchKind(eventshub.EventSent)) + m.matchers = append(m.matchers, MatchEvent(matchers...)) + return m +} + +// MatchResponseEvent is a shortcut for Match(MatchKind(eventshub.EventResponse), MatchEvent(matchers...)) +func (m MatchAssertionBuilder) MatchResponseEvent(matchers ...cetest.EventMatcher) MatchAssertionBuilder { + m.matchers = append(m.matchers, MatchKind(eventshub.EventResponse)) + m.matchers = append(m.matchers, MatchEvent(matchers...)) + return m +} + +// MatchEvent is a shortcut for Match(MatchEvent(), OneOf(MatchKind(eventshub.EventReceived), MatchKind(eventshub.EventSent))) func (m MatchAssertionBuilder) MatchEvent(matchers ...cetest.EventMatcher) MatchAssertionBuilder { + m.matchers = append(m.matchers, OneOf( + MatchKind(eventshub.EventReceived), + MatchKind(eventshub.EventSent), + )) m.matchers = append(m.matchers, MatchEvent(matchers...)) return m } diff --git a/vendor/modules.txt b/vendor/modules.txt index 9696a822fe..61d0e0fed9 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1049,7 +1049,7 @@ k8s.io/utils/net k8s.io/utils/pointer k8s.io/utils/strings/slices k8s.io/utils/trace -# knative.dev/eventing v0.37.1-0.20230601081636-d21c1aabd392 +# knative.dev/eventing v0.37.1-0.20230622075635-ab0193824225 ## explicit; go 1.19 knative.dev/eventing/cmd/heartbeats knative.dev/eventing/pkg/adapter/v2 @@ -1140,6 +1140,7 @@ knative.dev/eventing/test/performance/infra/event_state knative.dev/eventing/test/performance/infra/receiver knative.dev/eventing/test/performance/infra/sender knative.dev/eventing/test/rekt/features/broker +knative.dev/eventing/test/rekt/features/featureflags knative.dev/eventing/test/rekt/features/knconf knative.dev/eventing/test/rekt/features/trigger knative.dev/eventing/test/rekt/resources/addressable @@ -1154,10 +1155,10 @@ knative.dev/eventing/test/test_images knative.dev/eventing/test/test_images/event-sender knative.dev/eventing/test/test_images/performance knative.dev/eventing/test/test_images/print -# knative.dev/hack v0.0.0-20230530201435-5b7907fbe350 +# knative.dev/hack v0.0.0-20230615155948-d7586a218601 ## explicit; go 1.18 knative.dev/hack -# knative.dev/pkg v0.0.0-20230531073936-5671699f23d9 +# knative.dev/pkg v0.0.0-20230616134650-eb63a40adfb0 ## explicit; go 1.18 knative.dev/pkg/apis knative.dev/pkg/apis/duck @@ -1262,7 +1263,7 @@ knative.dev/pkg/webhook/json knative.dev/pkg/webhook/resourcesemantics knative.dev/pkg/webhook/resourcesemantics/defaulting knative.dev/pkg/webhook/resourcesemantics/validation -# knative.dev/reconciler-test v0.0.0-20230530092335-cf14f44032b9 +# knative.dev/reconciler-test v0.0.0-20230613125845-0061957b480e ## explicit; go 1.18 knative.dev/reconciler-test/cmd/eventshub knative.dev/reconciler-test/pkg/environment