Fix replicas *int32 type in describe commands (#1312)

* Update to latest dependencies

* Fix replicas *int32 type in describe commands
This commit is contained in:
David Simansky 2021-05-17 12:31:24 +02:00 committed by GitHub
parent 390bf0f9ad
commit a165c6c64f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 127 additions and 73 deletions

8
go.mod
View File

@ -21,11 +21,11 @@ require (
k8s.io/cli-runtime v0.19.7
k8s.io/client-go v0.19.7
k8s.io/code-generator v0.19.7
knative.dev/eventing v0.22.1-0.20210505162953-768b7d116d03
knative.dev/eventing v0.22.1-0.20210512205148-1bbc0130b53a
knative.dev/hack v0.0.0-20210428122153-93ad9129c268
knative.dev/networking v0.0.0-20210428161254-1ad047ce063f
knative.dev/pkg v0.0.0-20210428141353-878c85083565
knative.dev/serving v0.22.1-0.20210505154753-2d4e4a1eff9d
knative.dev/networking v0.0.0-20210512050647-ace2d3306f0b
knative.dev/pkg v0.0.0-20210510175900-4564797bf3b7
knative.dev/serving v0.22.1-0.20210513113048-93847553c9e4
sigs.k8s.io/yaml v1.2.0
)

23
go.sum
View File

@ -1283,23 +1283,20 @@ k8s.io/legacy-cloud-providers v0.19.7/go.mod h1:dsZk4gH9QIwAtHQ8CK0Ps257xlfgoXE3
k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
k8s.io/utils v0.0.0-20210111153108-fddb29f9d009 h1:0T5IaWHO3sJTEmCP6mUlBvMukxPKUQWqiI/YuiBNMiQ=
k8s.io/utils v0.0.0-20210111153108-fddb29f9d009/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
knative.dev/caching v0.0.0-20210428140754-1fab472d2faf/go.mod h1:CLQDWuBhkGnC3Pq/3G56qMP14dPt+Y4QmBEe3it44HM=
knative.dev/eventing v0.22.1-0.20210505162953-768b7d116d03 h1:+j+URI0eEGWZ+cnC2S02xZ/P2ufT2IhrMmzweuZGkLM=
knative.dev/eventing v0.22.1-0.20210505162953-768b7d116d03/go.mod h1:p7FKFj0dYMKI1Ji0GSKdRg2YzLMWVXABm0QHN2RtkSI=
knative.dev/hack v0.0.0-20210325223819-b6ab329907d3/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI=
knative.dev/hack v0.0.0-20210427190353-86f9adc0c8e2/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI=
knative.dev/caching v0.0.0-20210512050647-922782660f7c/go.mod h1:d+fIY/LkAZAM6HsRJwmfirNDMCc1+hqGlQctLP1CmzE=
knative.dev/eventing v0.22.1-0.20210512205148-1bbc0130b53a h1:dafIIUwdttDhhoPIvOp4sffzCJ42YCFbZ25DzQgTUaE=
knative.dev/eventing v0.22.1-0.20210512205148-1bbc0130b53a/go.mod h1:xehVLff2eqwBxQPxBVmgiHzJadzldQulBxRdYMljRAs=
knative.dev/hack v0.0.0-20210428122153-93ad9129c268 h1:lBIj9Epd9UQ55NEaHzAdY/UZbuaegCdGPKVC2+Z68Q0=
knative.dev/hack v0.0.0-20210428122153-93ad9129c268/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI=
knative.dev/hack/schema v0.0.0-20210428122153-93ad9129c268/go.mod h1:ffjwmdcrH5vN3mPhO8RrF2KfNnbHeCE2C60A+2cv3U0=
knative.dev/networking v0.0.0-20210428161254-1ad047ce063f h1:aobK9UEGzKYcLJMd50BhRLIWMqKQYXq9NuPsOOB3Nk8=
knative.dev/networking v0.0.0-20210428161254-1ad047ce063f/go.mod h1:6sJKmUcFFSkhloA1mWii/DCqeg9mMHfRraB/ouRzuM0=
knative.dev/pkg v0.0.0-20210420053235-1afd04993622/go.mod h1:UtcSLHy2XIz5blWoPTA40F87zk4O7erxkCwv+7Tsmws=
knative.dev/pkg v0.0.0-20210428023153-5a308fa62139/go.mod h1:7Xmwv60SD68lc4mpbKvU1J4WJLfZNNDNpHFA87T7/AM=
knative.dev/pkg v0.0.0-20210428141353-878c85083565 h1:4I8Pm2IlSJbdJ1R9fC18kOlZlfCZkB59JraRGratgnY=
knative.dev/networking v0.0.0-20210512050647-ace2d3306f0b h1:Ea6ym1Jfd/Hci1EGj+uPaE3d6SS1s/Br+6fFAWdJCeM=
knative.dev/networking v0.0.0-20210512050647-ace2d3306f0b/go.mod h1:y7RmP2/dHO/DAC1QmpUtgTVF6/Z8whaL+wjgey+HthU=
knative.dev/pkg v0.0.0-20210428141353-878c85083565/go.mod h1:fIl4l4OmZodkElyaHoT0LCF5wT+3+P/kinawQ4XlLtE=
knative.dev/reconciler-test v0.0.0-20210428195854-3db87491edb3/go.mod h1:yZihS1XoBt7oxU6Jq+U2hMKmUvfKFEaj3vMqOMBt/tI=
knative.dev/serving v0.22.1-0.20210505154753-2d4e4a1eff9d h1:le2jX6mbc6g0kBtZgDGRyeGWsSVvwZeaLNlzOWqjvsQ=
knative.dev/serving v0.22.1-0.20210505154753-2d4e4a1eff9d/go.mod h1:eeyZQ8josGr2tus9RG9hkPIB1ITXXjkPojh7RmEazig=
knative.dev/pkg v0.0.0-20210510175900-4564797bf3b7 h1:i4P8emOPrLctmbaPHp5eRIOqz+XTOkit7KgZeS+onKs=
knative.dev/pkg v0.0.0-20210510175900-4564797bf3b7/go.mod h1:fIl4l4OmZodkElyaHoT0LCF5wT+3+P/kinawQ4XlLtE=
knative.dev/reconciler-test v0.0.0-20210506205310-ed3c37806817/go.mod h1:pUozU+xgCWG9eH+4bYBXM0zWPl8lwvan34gCi/ZDP8o=
knative.dev/serving v0.22.1-0.20210513113048-93847553c9e4 h1:5n2ztgAWpcBdEt1HVwbrPSMSHHH520xRJn8ZxtALg4E=
knative.dev/serving v0.22.1-0.20210513113048-93847553c9e4/go.mod h1:hoGG2F9/qfAL/x0x14hAdciD7YxjdsaDqZ0PRNmj1gs=
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=

View File

@ -206,8 +206,8 @@ func WriteEnvFrom(dw printers.PrefixWriter, revision *servingv1.Revision, printD
func WriteReplicas(dw printers.PrefixWriter, revision *servingv1.Revision) {
actualReplicas := revision.Status.ActualReplicas
desiredReplicas := revision.Status.DesiredReplicas
if actualReplicas != 0 || desiredReplicas != 0 {
dw.WriteAttribute("Replicas", fmt.Sprintf("%d/%d", actualReplicas, desiredReplicas))
if actualReplicas != nil && desiredReplicas != nil {
dw.WriteAttribute("Replicas", fmt.Sprintf("%d/%d", *actualReplicas, *desiredReplicas))
}
}

View File

@ -20,6 +20,8 @@ import (
"testing"
"time"
"knative.dev/pkg/ptr"
"gotest.tools/v3/assert"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/equality"
@ -106,7 +108,7 @@ func TestDescribeRevisionYaml(t *testing.T) {
}
func TestDescribeRevisionBasic(t *testing.T) {
expectedRevision := createTestRevision("test-rev", 3)
expectedRevision := createTestRevision("test-rev", 3, ptr.Int32(1))
action, data, err := fakeRevision([]string{"revision", "describe", "test-rev"}, &expectedRevision)
if err != nil {
@ -120,11 +122,29 @@ func TestDescribeRevisionBasic(t *testing.T) {
}
assert.Assert(t, util.ContainsAll(data, "Image:", "gcr.io/test/image", "++ Ready", "Port:", "8080"))
assert.Assert(t, util.ContainsAll(data, "Replicas:", "0/1"))
assert.Assert(t, util.ContainsAll(data, "Replicas:", "1/1"))
assert.Assert(t, util.ContainsAll(data, "EnvFrom:", "cm:test1, cm:test2"))
}
func createTestRevision(revision string, gen int64) servingv1.Revision {
func TestDescribeRevisionReplicas(t *testing.T) {
expectedRevision := createTestRevision("test-rev", 3, ptr.Int32(1))
_, data, err := fakeRevision([]string{"revision", "describe", "test-rev"}, &expectedRevision)
assert.NilError(t, err)
assert.Assert(t, util.ContainsAll(data, "Replicas:", "1/1"))
expectedRevision = createTestRevision("test-rev", 3, ptr.Int32(0))
_, data, err = fakeRevision([]string{"revision", "describe", "test-rev"}, &expectedRevision)
assert.NilError(t, err)
assert.Assert(t, util.ContainsAll(data, "Replicas:", "0/0"))
expectedRevision = createTestRevision("test-rev", 3, nil)
_, data, err = fakeRevision([]string{"revision", "describe", "test-rev"}, &expectedRevision)
assert.NilError(t, err)
assert.Assert(t, util.ContainsNone(data, "Replicas:"))
}
func createTestRevision(revision string, gen int64, replicas *int32) servingv1.Revision {
labels := make(map[string]string)
labels[apiserving.ConfigurationGenerationLabelKey] = fmt.Sprintf("%d", gen)
@ -162,8 +182,8 @@ func createTestRevision(revision string, gen int64) servingv1.Revision {
},
},
Status: servingv1.RevisionStatus{
ActualReplicas: 0,
DesiredReplicas: 1,
ActualReplicas: replicas,
DesiredReplicas: replicas,
DeprecatedImageDigest: "gcr.io/test/image@" + imageDigest,
Status: duckv1.Status{
Conditions: goodConditions(),

View File

@ -763,8 +763,8 @@ func createTestRevision(revision string, gen int64, conditions duckv1.Conditions
},
},
Status: servingv1.RevisionStatus{
ActualReplicas: 0,
DesiredReplicas: 1,
ActualReplicas: ptr.Int32(0),
DesiredReplicas: ptr.Int32(1),
DeprecatedImageDigest: "gcr.io/test/image@" + imageDigest,
Status: duckv1.Status{
Conditions: conditions,

View File

@ -59,6 +59,7 @@ type ChannelableStatus struct {
// * Conditions - the latest available observations of a resource's current state.
duckv1.Status `json:",inline"`
// AddressStatus is the part where the Channelable fulfills the Addressable contract.
// +optional
duckv1.AddressStatus `json:",inline"`
// Subscribers is populated with the statuses of each of the Channelable's subscribers.
SubscribableStatus `json:",inline"`

View File

@ -90,6 +90,7 @@ type BrokerStatus struct {
// Broker is Addressable. It exposes the endpoint as an URI to get events
// delivered into the Broker mesh.
// +optional
Address duckv1.Addressable `json:"address,omitempty"`
}

View File

@ -122,6 +122,11 @@ func (ss *SequenceStatus) PropagateChannelStatuses(channels []*eventingduckv1.Ch
}
for i, c := range channels {
// Mark the Sequence address as the Address of the first channel.
if i == 0 {
ss.setAddress(c.Status.Address)
}
ss.ChannelStatuses[i] = SequenceChannelStatus{
Channel: corev1.ObjectReference{
APIVersion: c.APIVersion,
@ -130,19 +135,15 @@ func (ss *SequenceStatus) PropagateChannelStatuses(channels []*eventingduckv1.Ch
Namespace: c.Namespace,
},
}
// TODO: Once the addressable has a real status to dig through, use that here instead of
// addressable, because it might be addressable but not ready.
address := c.Status.AddressStatus.Address
if address != nil {
ss.ChannelStatuses[i].ReadyCondition = apis.Condition{Type: apis.ConditionReady, Status: corev1.ConditionTrue}
} else {
ss.ChannelStatuses[i].ReadyCondition = apis.Condition{Type: apis.ConditionReady, Status: corev1.ConditionFalse, Reason: "NotAddressable", Message: "Channel is not addressable"}
allReady = false
}
// Mark the Sequence address as the Address of the first channel.
if i == 0 {
ss.setAddress(address)
if ready := c.Status.GetCondition(apis.ConditionReady); ready != nil {
ss.ChannelStatuses[i].ReadyCondition = *ready
if !ready.IsTrue() {
allReady = false
}
} else {
ss.ChannelStatuses[i].ReadyCondition = apis.Condition{Type: apis.ConditionReady, Status: corev1.ConditionUnknown, Reason: "NoReady", Message: "Channel does not have Ready condition"}
allReady = false
}
}
if allReady {
@ -153,22 +154,23 @@ func (ss *SequenceStatus) PropagateChannelStatuses(channels []*eventingduckv1.Ch
}
func (ss *SequenceStatus) MarkChannelsNotReady(reason, messageFormat string, messageA ...interface{}) {
sCondSet.Manage(ss).MarkFalse(SequenceConditionChannelsReady, reason, messageFormat, messageA...)
sCondSet.Manage(ss).MarkUnknown(SequenceConditionChannelsReady, reason, messageFormat, messageA...)
}
func (ss *SequenceStatus) MarkSubscriptionsNotReady(reason, messageFormat string, messageA ...interface{}) {
sCondSet.Manage(ss).MarkFalse(SequenceConditionSubscriptionsReady, reason, messageFormat, messageA...)
sCondSet.Manage(ss).MarkUnknown(SequenceConditionSubscriptionsReady, reason, messageFormat, messageA...)
}
func (ss *SequenceStatus) MarkAddressableNotReady(reason, messageFormat string, messageA ...interface{}) {
sCondSet.Manage(ss).MarkFalse(SequenceConditionAddressable, reason, messageFormat, messageA...)
sCondSet.Manage(ss).MarkUnknown(SequenceConditionAddressable, reason, messageFormat, messageA...)
}
func (ss *SequenceStatus) setAddress(address *duckv1.Addressable) {
if address == nil || address.URL == nil {
sCondSet.Manage(ss).MarkFalse(SequenceConditionAddressable, "emptyAddress", "addressable is nil")
ss.Address = duckv1.Addressable{}
sCondSet.Manage(ss).MarkUnknown(SequenceConditionAddressable, "emptyAddress", "addressable is nil")
} else {
ss.AddressStatus.Address = &duckv1.Addressable{URL: address.URL}
ss.Address = duckv1.Addressable{URL: address.URL}
sCondSet.Manage(ss).MarkTrue(SequenceConditionAddressable)
}
}

View File

@ -124,10 +124,11 @@ type SequenceStatus struct {
// Matches the Spec.Steps array in the order.
ChannelStatuses []SequenceChannelStatus `json:"channelStatuses"`
// AddressStatus is the starting point to this Sequence. Sending to this
// Address is the starting point to this Sequence. Sending to this
// will target the first subscriber.
// It generally has the form {channel}.{namespace}.svc.{cluster domain name}
duckv1.AddressStatus `json:",inline"`
// +optional
Address duckv1.Addressable `json:"address,omitempty"`
}
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

View File

@ -364,7 +364,7 @@ func (in *SequenceStatus) DeepCopyInto(out *SequenceStatus) {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
in.AddressStatus.DeepCopyInto(&out.AddressStatus)
in.Address.DeepCopyInto(&out.Address)
return
}

View File

@ -29,7 +29,8 @@ import (
// +genreconciler
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// Channel represents a generic Channel. It is normally used when we want a Channel, but don't need a specific Channel implementation.
// Channel represents a generic Channel. It is normally used when we want a
// Channel, but do not need a specific Channel implementation.
type Channel struct {
metav1.TypeMeta `json:",inline"`
// +optional
@ -38,8 +39,8 @@ type Channel struct {
// Spec defines the desired state of the Channel.
Spec ChannelSpec `json:"spec,omitempty"`
// Status represents the current state of the Channel. This data may be out of
// date.
// Status represents the current state of the Channel. This data may be out
// of date.
// +optional
Status ChannelStatus `json:"status,omitempty"`
}
@ -61,12 +62,15 @@ var (
_ duckv1.KRShaped = (*Channel)(nil)
)
// ChannelSpec defines which subscribers have expressed interest in receiving events from this Channel.
// It also defines the ChannelTemplate to use in order to create the CRD Channel backing this Channel.
// ChannelSpec defines which subscribers have expressed interest in receiving
// events from this Channel. It also defines the ChannelTemplate to use in
// order to create the CRD Channel backing this Channel.
type ChannelSpec struct {
// ChannelTemplate specifies which Channel CRD to use to create the CRD Channel backing this Channel.
// This is immutable after creation. Normally this is set by the Channel defaulter, not directly by the user.
ChannelTemplate *ChannelTemplateSpec `json:"channelTemplate"`
// ChannelTemplate specifies which Channel CRD to use to create the CRD
// Channel backing this Channel. This is immutable after creation.
// Normally this is set by the Channel defaulter, not directly by the user.
// +optional
ChannelTemplate *ChannelTemplateSpec `json:"channelTemplate,omitempty"`
// Channel conforms to ChannelableSpec
eventingduckv1.ChannelableSpec `json:",inline"`
@ -78,6 +82,7 @@ type ChannelStatus struct {
eventingduckv1.ChannelableStatus `json:",inline"`
// Channel is an KReference to the Channel CRD backing this Channel.
// +optional
Channel *duckv1.KReference `json:"channel,omitempty"`
}
@ -91,7 +96,8 @@ type ChannelList struct {
Items []Channel `json:"items"`
}
// GetStatus retrieves the status of the Channel. Implements the KRShaped interface.
// GetStatus retrieves the status of the Channel. Implements the KRShaped
// interface.
func (t *Channel) GetStatus() *duckv1.Status {
return &t.Status.Status
}

View File

@ -122,12 +122,15 @@ type SubscriptionStatus struct {
// Subscription.
type SubscriptionStatusPhysicalSubscription struct {
// SubscriberURI is the fully resolved URI for spec.subscriber.
// +optional
SubscriberURI *apis.URL `json:"subscriberUri,omitempty"`
// ReplyURI is the fully resolved URI for the spec.reply.
// +optional
ReplyURI *apis.URL `json:"replyUri,omitempty"`
// ReplyURI is the fully resolved URI for the spec.delivery.deadLetterSink.
// +optional
DeadLetterSinkURI *apis.URL `json:"deadLetterSinkUri,omitempty"`
}

View File

@ -21,26 +21,27 @@ import (
"errors"
"fmt"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/tools/cache"
"knative.dev/pkg/client/injection/ducks/duck/v1/addressable"
"knative.dev/pkg/controller"
corev1 "k8s.io/api/core/v1"
apierrs "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/types"
"knative.dev/pkg/apis"
pkgapisduck "knative.dev/pkg/apis/duck"
duckv1 "knative.dev/pkg/apis/duck/v1"
duckv1beta1 "knative.dev/pkg/apis/duck/v1beta1"
"knative.dev/pkg/controller"
"knative.dev/pkg/network"
"knative.dev/pkg/tracker"
"knative.dev/pkg/client/injection/ducks/duck/v1/addressable"
)
// URIResolver resolves Destinations and ObjectReferences into a URI.
type URIResolver struct {
tracker tracker.Interface
informerFactory pkgapisduck.InformerFactory
tracker tracker.Interface
listerFactory func(schema.GroupVersionResource) (cache.GenericLister, error)
}
// NewURIResolver constructs a new URIResolver with context and a callback
@ -49,13 +50,19 @@ func NewURIResolver(ctx context.Context, callback func(types.NamespacedName)) *U
ret := &URIResolver{}
ret.tracker = tracker.New(callback, controller.GetTrackerLease(ctx))
ret.informerFactory = &pkgapisduck.CachedInformerFactory{
informerFactory := &pkgapisduck.CachedInformerFactory{
Delegate: &pkgapisduck.EnqueueInformerFactory{
Delegate: addressable.Get(ctx),
EventHandler: controller.HandleAll(ret.tracker.OnChanged),
},
}
ret.listerFactory = func(gvr schema.GroupVersionResource) (cache.GenericLister, error) {
_, l, err := informerFactory.Get(ctx, gvr)
return l, err
}
return ret
}
@ -163,7 +170,7 @@ func (r *URIResolver) URIFromObjectReference(ctx context.Context, ref *corev1.Ob
return url, nil
}
_, lister, err := r.informerFactory.Get(ctx, gvr)
lister, err := r.listerFactory(gvr)
if err != nil {
return nil, apierrs.NewNotFound(gvr.GroupResource(), "Lister")
}

View File

@ -22,7 +22,6 @@ import (
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/utils/integer"
"knative.dev/pkg/apis"
autoscalingv1alpha1 "knative.dev/serving/pkg/apis/autoscaling/v1alpha1"
@ -173,8 +172,15 @@ func (rs *RevisionStatus) PropagateAutoscalerStatus(ps *autoscalingv1alpha1.PodA
// Reflect the PA status in our own.
cond := ps.GetCondition(autoscalingv1alpha1.PodAutoscalerConditionReady)
rs.ActualReplicas = integer.Int32Max(ps.GetActualScale(), 0)
rs.DesiredReplicas = integer.Int32Max(ps.GetDesiredScale(), 0)
rs.ActualReplicas = nil
if ps.ActualScale != nil && *ps.ActualScale >= 0 {
rs.ActualReplicas = ps.ActualScale
}
rs.DesiredReplicas = nil
if ps.DesiredScale != nil && *ps.DesiredScale >= 0 {
rs.DesiredReplicas = ps.DesiredScale
}
if cond == nil {
rs.MarkActiveUnknown("Deploying", "")

View File

@ -161,10 +161,10 @@ type RevisionStatus struct {
// ActualReplicas reflects the amount of ready pods running this revision.
// +optional
ActualReplicas int32 `json:"actualReplicas,omitempty"`
ActualReplicas *int32 `json:"actualReplicas,omitempty"`
// DesiredReplicas reflects the desired amount of pods running this revision.
// +optional
DesiredReplicas int32 `json:"desiredReplicas,omitempty"`
DesiredReplicas *int32 `json:"desiredReplicas,omitempty"`
}
// ContainerStatus holds the information of container name and image digest value

View File

@ -251,6 +251,16 @@ func (in *RevisionStatus) DeepCopyInto(out *RevisionStatus) {
*out = make([]ContainerStatus, len(*in))
copy(*out, *in)
}
if in.ActualReplicas != nil {
in, out := &in.ActualReplicas, &out.ActualReplicas
*out = new(int32)
**out = **in
}
if in.DesiredReplicas != nil {
in, out := &in.DesiredReplicas, &out.DesiredReplicas
*out = new(int32)
**out = **in
}
return
}

8
vendor/modules.txt vendored
View File

@ -766,7 +766,7 @@ k8s.io/kube-openapi/pkg/util/sets
k8s.io/utils/buffer
k8s.io/utils/integer
k8s.io/utils/trace
# knative.dev/eventing v0.22.1-0.20210505162953-768b7d116d03
# knative.dev/eventing v0.22.1-0.20210512205148-1bbc0130b53a
## explicit
knative.dev/eventing/pkg/apis/config
knative.dev/eventing/pkg/apis/duck
@ -794,12 +794,12 @@ knative.dev/eventing/pkg/client/clientset/versioned/typed/sources/v1beta2/fake
# knative.dev/hack v0.0.0-20210428122153-93ad9129c268
## explicit
knative.dev/hack
# knative.dev/networking v0.0.0-20210428161254-1ad047ce063f
# knative.dev/networking v0.0.0-20210512050647-ace2d3306f0b
## explicit
knative.dev/networking/pkg
knative.dev/networking/pkg/apis/networking
knative.dev/networking/pkg/apis/networking/v1alpha1
# knative.dev/pkg v0.0.0-20210428141353-878c85083565
# knative.dev/pkg v0.0.0-20210510175900-4564797bf3b7
## explicit
knative.dev/pkg/apis
knative.dev/pkg/apis/duck
@ -842,7 +842,7 @@ knative.dev/pkg/tracing/config
knative.dev/pkg/tracing/propagation
knative.dev/pkg/tracing/propagation/tracecontextb3
knative.dev/pkg/tracker
# knative.dev/serving v0.22.1-0.20210505154753-2d4e4a1eff9d
# knative.dev/serving v0.22.1-0.20210513113048-93847553c9e4
## explicit
knative.dev/serving/pkg/apis/autoscaling
knative.dev/serving/pkg/apis/autoscaling/v1alpha1