mirror of https://github.com/knative/client.git
upgrade to latest dependencies (#1448)
bumping knative.dev/eventing 38f3845...316e14d: > 316e14d upgrade to latest dependencies (# 5717) bumping knative.dev/networking 9d1fe47...eb37d69: > eb37d69 Create cert pool for each test client (# 508) > 25d317b upgrade to latest dependencies (# 507) > 78c491e upgrade to latest dependencies (# 506) > 060e46e upgrade to latest dependencies (# 505) > c94e114 upgrade to latest dependencies (# 504) > 5c789e6 upgrade to latest dependencies (# 503) > be5cfde upgrade to latest dependencies (# 502) bumping knative.dev/serving 1c022d7...33aeffc: > 33aeffc Delete orphaned tag certificates after tag deletion (# 11798) > f402f87 Introduce a flag to set memory used in the resource limit test (# 11957) > a71d49d Update net-istio nightly (# 11975) > e85265c Update net-contour nightly (# 11974) > a9213d1 Update net-certmanager nightly (# 11973) > 9342eeb Add Kubernetes 1.22 to CI (# 11981) > 0042297 drop (# 11968) > 0342070 upgrade to latest dependencies (# 11970) > 3d2eec9 Update net-certmanager nightly (# 11963) > 1762cdc Update net-contour nightly (# 11962) > c65ed94 Update net-kourier nightly (# 11961) > 42353dd Update net-istio nightly (# 11960) > 4fcaa97 dd more logging to background digest resolver (# 11959) > 4818437 upgrade to latest dependencies (# 11942) > 92862ef Speed up concurrency state handler tests (# 11910) > cc19d71 Update net-contour nightly (# 11950) > 794661a Touch up TestIdleTimeoutHandler some more (# 11953) > 5e495e6 Update net-istio nightly (# 11951) > e1df9b5 Remove unused isAggressive parameter (# 11935) > 9b8b4f6 Run podspeed as part of CI (# 11903) > c77bf60 Update net-certmanager nightly (# 11952) > f3e4eff Update net-kourier nightly (# 11938) > 734fdcf Stabilize TestIdleTimeoutHandler (# 11946) > 85a352a Skip TestHPAAutoscaleUpDownUpMem because of excessive flakiness (# 11945) > cecace7 Update net-contour nightly (# 11936) > 831536e Update net-istio nightly (# 11937) > c2b78ab Drop unnecessary RetryingRouteInconsistency helper (# 11933) > ac4dc6a Adding simple conformance test for Service list and delete (# 11925) bumping knative.dev/pkg 73d4fe6...d4505c6: > d4505c6 Source validation fixes (# 2251) > fb7ee28 when testing downstream use the correct release branch (# 2265) > bfab3c8 Add back inadvertedly deleted call to ObserveKind (# 2282) > d569db3 Add context to reconcile error logs (# 2281) > 9a4b612 Added invalid value field error with details (# 2246) > d9b35c4 Delete deprecated ObserveFinalizeKind API (# 2248) > 71508fc Introduce `duckv1.Pod`. (# 2280) > 26db1ba Enable using `duckv1.WithPod` with our webhook infra. (# 2279) Signed-off-by: Knative Automation <automation@knative.team>
This commit is contained in:
parent
94c8d33b51
commit
82a21a5773
8
go.mod
8
go.mod
|
|
@ -18,10 +18,10 @@ require (
|
||||||
k8s.io/cli-runtime v0.21.4
|
k8s.io/cli-runtime v0.21.4
|
||||||
k8s.io/client-go v0.21.4
|
k8s.io/client-go v0.21.4
|
||||||
k8s.io/code-generator v0.21.4
|
k8s.io/code-generator v0.21.4
|
||||||
knative.dev/eventing v0.25.1-0.20210906161343-38f38456f045
|
knative.dev/eventing v0.25.1-0.20210909163359-316e14d7fbc2
|
||||||
knative.dev/hack v0.0.0-20210806075220-815cd312d65c
|
knative.dev/hack v0.0.0-20210806075220-815cd312d65c
|
||||||
knative.dev/networking v0.0.0-20210906131644-9d1fe47ad4b4
|
knative.dev/networking v0.0.0-20210910120730-eb37d69eb87f
|
||||||
knative.dev/pkg v0.0.0-20210907112319-73d4fe679a2e
|
knative.dev/pkg v0.0.0-20210909165259-d4505c660535
|
||||||
knative.dev/serving v0.25.1-0.20210907113619-1c022d766c5b
|
knative.dev/serving v0.25.1-0.20210913112533-33aeffc6c9e2
|
||||||
sigs.k8s.io/yaml v1.2.0
|
sigs.k8s.io/yaml v1.2.0
|
||||||
)
|
)
|
||||||
|
|
|
||||||
23
go.sum
23
go.sum
|
|
@ -1722,25 +1722,22 @@ k8s.io/legacy-cloud-providers v0.21.0/go.mod h1:bNxo7gDg+PGkBmT/MFZswLTWdSWK9kAl
|
||||||
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||||
k8s.io/utils v0.0.0-20210111153108-fddb29f9d009 h1:0T5IaWHO3sJTEmCP6mUlBvMukxPKUQWqiI/YuiBNMiQ=
|
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=
|
k8s.io/utils v0.0.0-20210111153108-fddb29f9d009/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||||
knative.dev/caching v0.0.0-20210903022457-553240b1b365/go.mod h1:J2o0f0nayAT6ZaXy9yo4GyEcoPyJndMrh+4X5kQTQ5w=
|
knative.dev/caching v0.0.0-20210910063632-a51cf6760e00/go.mod h1:PMt1PGfOsjGpIj0m6QWIfutn+5mY4WPGf3q4MP6oFf0=
|
||||||
knative.dev/eventing v0.25.1-0.20210906161343-38f38456f045 h1:54qhX/rJC3rv8mmPbKOO6BwM4gykRwWjDuyBCEeL6Gs=
|
knative.dev/eventing v0.25.1-0.20210909163359-316e14d7fbc2 h1:WKCQDScAr1eP6w1vrl6mwvrIN3wiMLpOg4w17fAFYWw=
|
||||||
knative.dev/eventing v0.25.1-0.20210906161343-38f38456f045/go.mod h1:aEq47MCAi5nMgILNF8mTK7FG3ONmKXMWVtBzYt3Vp64=
|
knative.dev/eventing v0.25.1-0.20210909163359-316e14d7fbc2/go.mod h1:TIwKUgnYc56nHR/pUcEOXGey8iWiGgcWZymp7CO7VpA=
|
||||||
knative.dev/hack v0.0.0-20210622141627-e28525d8d260/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI=
|
knative.dev/hack v0.0.0-20210622141627-e28525d8d260/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI=
|
||||||
knative.dev/hack v0.0.0-20210806075220-815cd312d65c h1:nOXoDWAAItwr4o0dp3nHr6skgpVD4IvME/UX84YNl5k=
|
knative.dev/hack v0.0.0-20210806075220-815cd312d65c h1:nOXoDWAAItwr4o0dp3nHr6skgpVD4IvME/UX84YNl5k=
|
||||||
knative.dev/hack v0.0.0-20210806075220-815cd312d65c/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI=
|
knative.dev/hack v0.0.0-20210806075220-815cd312d65c/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI=
|
||||||
knative.dev/hack/schema v0.0.0-20210806075220-815cd312d65c/go.mod h1:ffjwmdcrH5vN3mPhO8RrF2KfNnbHeCE2C60A+2cv3U0=
|
knative.dev/hack/schema v0.0.0-20210806075220-815cd312d65c/go.mod h1:ffjwmdcrH5vN3mPhO8RrF2KfNnbHeCE2C60A+2cv3U0=
|
||||||
knative.dev/networking v0.0.0-20210903170058-7c11d237f014/go.mod h1:DldEflDGWAychEH7SzPj1MeJRZaugxOIbdXaIYHvEz0=
|
knative.dev/networking v0.0.0-20210910120730-eb37d69eb87f h1:FHPmpIrUnJjoI2xBIpxTAvCoh9Y1nNHAOWRSJRJECww=
|
||||||
knative.dev/networking v0.0.0-20210906131644-9d1fe47ad4b4 h1:t/UVxgp6LY5oOd5n0BXySA3sSFR/SlMXuJV6yplmxEo=
|
knative.dev/networking v0.0.0-20210910120730-eb37d69eb87f/go.mod h1:Bq/n7aJlzPiieLpB/ndIgZXUJeGf50LXN7AQ/UaL6KA=
|
||||||
knative.dev/networking v0.0.0-20210906131644-9d1fe47ad4b4/go.mod h1:HeGWxfHnx24M8NFWanmnja4ff68Blg5vhgSLFSxRn7E=
|
|
||||||
knative.dev/pkg v0.0.0-20210803160015-21eb4c167cc5/go.mod h1:RPk5txNA3apR9X40D4MpUOP9/VqOG8CrtABWfOwGVS4=
|
knative.dev/pkg v0.0.0-20210803160015-21eb4c167cc5/go.mod h1:RPk5txNA3apR9X40D4MpUOP9/VqOG8CrtABWfOwGVS4=
|
||||||
knative.dev/pkg v0.0.0-20210902202457-7a61343b36ca/go.mod h1:jMSqkNMsrzuy+XR4Yr/BMy7SDVbUOl3KKB6+5MR+ZU8=
|
knative.dev/pkg v0.0.0-20210909102158-d569db39a812/go.mod h1:jMSqkNMsrzuy+XR4Yr/BMy7SDVbUOl3KKB6+5MR+ZU8=
|
||||||
knative.dev/pkg v0.0.0-20210903055557-dec98b426132/go.mod h1:jMSqkNMsrzuy+XR4Yr/BMy7SDVbUOl3KKB6+5MR+ZU8=
|
knative.dev/pkg v0.0.0-20210909165259-d4505c660535 h1:1bbKs8NGGodV0LjOyn6s5lo+oAJ/9KtTURUZtpRxr60=
|
||||||
knative.dev/pkg v0.0.0-20210906105443-bb433c98147d/go.mod h1:jMSqkNMsrzuy+XR4Yr/BMy7SDVbUOl3KKB6+5MR+ZU8=
|
knative.dev/pkg v0.0.0-20210909165259-d4505c660535/go.mod h1:jMSqkNMsrzuy+XR4Yr/BMy7SDVbUOl3KKB6+5MR+ZU8=
|
||||||
knative.dev/pkg v0.0.0-20210907112319-73d4fe679a2e h1:EpwOC7a0EreNYej/GpuUjbeC9xf1an+66TNRzzPgH6s=
|
|
||||||
knative.dev/pkg v0.0.0-20210907112319-73d4fe679a2e/go.mod h1:jMSqkNMsrzuy+XR4Yr/BMy7SDVbUOl3KKB6+5MR+ZU8=
|
|
||||||
knative.dev/reconciler-test v0.0.0-20210820180205-a25de6a08087/go.mod h1:+Kovy+G5zXZNcuO/uB+zfo37vFKZzsLIlWezt/nKMz0=
|
knative.dev/reconciler-test v0.0.0-20210820180205-a25de6a08087/go.mod h1:+Kovy+G5zXZNcuO/uB+zfo37vFKZzsLIlWezt/nKMz0=
|
||||||
knative.dev/serving v0.25.1-0.20210907113619-1c022d766c5b h1:MTmRCHCA8egJ2V792zETJgzwhXT+X59214cYxC/HeqU=
|
knative.dev/serving v0.25.1-0.20210913112533-33aeffc6c9e2 h1:KeBA8Ls2lprv51I2wOg171icGBN8TBt9j3CBSofMsjw=
|
||||||
knative.dev/serving v0.25.1-0.20210907113619-1c022d766c5b/go.mod h1:cz8Yo/w6b8g5W/5JIjPRZiJQx+d6MXASm+yjGhKFmZo=
|
knative.dev/serving v0.25.1-0.20210913112533-33aeffc6c9e2/go.mod h1:GqSjSPq0d0E3P8RgwWE2yWaDCwAMUdz81xSXwVBbds0=
|
||||||
pgregory.net/rapid v0.3.3/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU=
|
pgregory.net/rapid v0.3.3/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU=
|
||||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||||
|
|
|
||||||
|
|
@ -302,7 +302,11 @@ is used with duck types:
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
logger := c.Logger.Named("Revisions")
|
logger := c.Logger.Named("Revisions")
|
||||||
impl := controller.NewImpl(c, logger, "Revisions")
|
impl := controller.NewContext(
|
||||||
|
ctx,
|
||||||
|
c,
|
||||||
|
controller.ControllerOptions{WorkQueueName: "Revisions", Logger: logger},
|
||||||
|
)
|
||||||
|
|
||||||
// Calls to Track create a 30 minute lease before they must be renewed.
|
// Calls to Track create a 30 minute lease before they must be renewed.
|
||||||
// Coordinate this value with controller resync periods.
|
// Coordinate this value with controller resync periods.
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,73 @@
|
||||||
|
/*
|
||||||
|
Copyright 2021 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 v1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
)
|
||||||
|
|
||||||
|
// PodSpecDefaulter is a callback to validate a PodSpecable.
|
||||||
|
type PodSpecDefaulter func(context.Context, *WithPod)
|
||||||
|
|
||||||
|
// SetDefaults implements apis.Defaultable
|
||||||
|
func (wp *WithPod) SetDefaults(ctx context.Context) {
|
||||||
|
if psd := GetPodSpecDefaulter(ctx); psd != nil {
|
||||||
|
psd(ctx, wp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// psdKey is used for associating a PodSpecDefaulter with a context.Context
|
||||||
|
type psdKey struct{}
|
||||||
|
|
||||||
|
func WithPodSpecDefaulter(ctx context.Context, psd PodSpecDefaulter) context.Context {
|
||||||
|
return context.WithValue(ctx, psdKey{}, psd)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPodSpecDefaulter extracts the PodSpecDefaulter from the context.
|
||||||
|
func GetPodSpecDefaulter(ctx context.Context) PodSpecDefaulter {
|
||||||
|
untyped := ctx.Value(psdKey{})
|
||||||
|
if untyped == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return untyped.(PodSpecDefaulter)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PodDefaulter is a callback to validate a Pod.
|
||||||
|
type PodDefaulter func(context.Context, *Pod)
|
||||||
|
|
||||||
|
// SetDefaults implements apis.Defaultable
|
||||||
|
func (p *Pod) SetDefaults(ctx context.Context) {
|
||||||
|
if pd := GetPodDefaulter(ctx); pd != nil {
|
||||||
|
pd(ctx, p)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// pdKey is used for associating a PodDefaulter with a context.Context
|
||||||
|
type pdKey struct{}
|
||||||
|
|
||||||
|
func WithPodDefaulter(ctx context.Context, pd PodDefaulter) context.Context {
|
||||||
|
return context.WithValue(ctx, pdKey{}, pd)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPodDefaulter extracts the PodDefaulter from the context.
|
||||||
|
func GetPodDefaulter(ctx context.Context) PodDefaulter {
|
||||||
|
untyped := ctx.Value(pdKey{})
|
||||||
|
if untyped == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return untyped.(PodDefaulter)
|
||||||
|
}
|
||||||
|
|
@ -52,18 +52,20 @@ type WithPodSpec struct {
|
||||||
|
|
||||||
// Verify WithPod resources meet duck contracts.
|
// Verify WithPod resources meet duck contracts.
|
||||||
var (
|
var (
|
||||||
|
_ apis.Validatable = (*WithPod)(nil)
|
||||||
|
_ apis.Defaultable = (*WithPod)(nil)
|
||||||
_ apis.Listable = (*WithPod)(nil)
|
_ apis.Listable = (*WithPod)(nil)
|
||||||
_ ducktypes.Populatable = (*WithPod)(nil)
|
_ ducktypes.Populatable = (*WithPod)(nil)
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetFullType implements duck.Implementable
|
// GetFullType implements duck.Implementable
|
||||||
func (*PodSpecable) GetFullType() ducktypes.Populatable {
|
func (wp *PodSpecable) GetFullType() ducktypes.Populatable {
|
||||||
return &WithPod{}
|
return &WithPod{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Populate implements duck.Populatable
|
// Populate implements duck.Populatable
|
||||||
func (t *WithPod) Populate() {
|
func (wp *WithPod) Populate() {
|
||||||
t.Spec.Template = PodSpecable{
|
wp.Spec.Template = PodSpecable{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Labels: map[string]string{
|
Labels: map[string]string{
|
||||||
"foo": "bar",
|
"foo": "bar",
|
||||||
|
|
@ -79,7 +81,7 @@ func (t *WithPod) Populate() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetListType implements apis.Listable
|
// GetListType implements apis.Listable
|
||||||
func (*WithPod) GetListType() runtime.Object {
|
func (wp *WithPod) GetListType() runtime.Object {
|
||||||
return &WithPodList{}
|
return &WithPodList{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -92,3 +94,52 @@ type WithPodList struct {
|
||||||
|
|
||||||
Items []WithPod `json:"items"`
|
Items []WithPod `json:"items"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
|
|
||||||
|
// Pod is a wrapper around Pod-like resource, which supports our interfaces
|
||||||
|
// for webhooks
|
||||||
|
type Pod struct {
|
||||||
|
metav1.TypeMeta `json:",inline"`
|
||||||
|
metav1.ObjectMeta `json:"metadata,omitempty"`
|
||||||
|
|
||||||
|
Spec corev1.PodSpec `json:"spec,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify Pod resources meet duck contracts.
|
||||||
|
var (
|
||||||
|
_ apis.Validatable = (*Pod)(nil)
|
||||||
|
_ apis.Defaultable = (*Pod)(nil)
|
||||||
|
_ apis.Listable = (*Pod)(nil)
|
||||||
|
_ ducktypes.Populatable = (*Pod)(nil)
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetFullType implements duck.Implementable
|
||||||
|
func (p *Pod) GetFullType() ducktypes.Populatable {
|
||||||
|
return &Pod{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Populate implements duck.Populatable
|
||||||
|
func (p *Pod) Populate() {
|
||||||
|
p.Spec = corev1.PodSpec{
|
||||||
|
Containers: []corev1.Container{{
|
||||||
|
Name: "container-name",
|
||||||
|
Image: "container-image:latest",
|
||||||
|
}},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetListType implements apis.Listable
|
||||||
|
func (p *Pod) GetListType() runtime.Object {
|
||||||
|
return &PodList{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
|
|
||||||
|
// PodList is a list of WithPod resources
|
||||||
|
type PodList struct {
|
||||||
|
metav1.TypeMeta `json:",inline"`
|
||||||
|
metav1.ListMeta `json:"metadata"`
|
||||||
|
|
||||||
|
Items []WithPod `json:"items"`
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,77 @@
|
||||||
|
/*
|
||||||
|
Copyright 2021 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 v1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"knative.dev/pkg/apis"
|
||||||
|
)
|
||||||
|
|
||||||
|
// PodSpecValidator is a callback to validate a PodSpecable.
|
||||||
|
type PodSpecValidator func(context.Context, *WithPod) *apis.FieldError
|
||||||
|
|
||||||
|
// Validate implements apis.Validatable
|
||||||
|
func (wp *WithPod) Validate(ctx context.Context) *apis.FieldError {
|
||||||
|
if psv := GetPodSpecValidator(ctx); psv != nil {
|
||||||
|
return psv(ctx, wp)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// psvKey is used for associating a PodSpecValidator with a context.Context
|
||||||
|
type psvKey struct{}
|
||||||
|
|
||||||
|
func WithPodSpecValidator(ctx context.Context, psv PodSpecValidator) context.Context {
|
||||||
|
return context.WithValue(ctx, psvKey{}, psv)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPodSpecValidator extracts the PodSpecValidator from the context.
|
||||||
|
func GetPodSpecValidator(ctx context.Context) PodSpecValidator {
|
||||||
|
untyped := ctx.Value(psvKey{})
|
||||||
|
if untyped == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return untyped.(PodSpecValidator)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PodValidator is a callback to validate Pods.
|
||||||
|
type PodValidator func(context.Context, *Pod) *apis.FieldError
|
||||||
|
|
||||||
|
// Validate implements apis.Validatable
|
||||||
|
func (p *Pod) Validate(ctx context.Context) *apis.FieldError {
|
||||||
|
if pv := GetPodValidator(ctx); pv != nil {
|
||||||
|
return pv(ctx, p)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// pvKey is used for associating a PodValidator with a context.Context
|
||||||
|
type pvKey struct{}
|
||||||
|
|
||||||
|
func WithPodValidator(ctx context.Context, pv PodValidator) context.Context {
|
||||||
|
return context.WithValue(ctx, pvKey{}, pv)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPodValidator extracts the PodValidator from the context.
|
||||||
|
func GetPodValidator(ctx context.Context) PodValidator {
|
||||||
|
untyped := ctx.Value(pvKey{})
|
||||||
|
if untyped == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return untyped.(PodValidator)
|
||||||
|
}
|
||||||
|
|
@ -17,6 +17,7 @@ limitations under the License.
|
||||||
package v1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
|
|
@ -170,3 +171,45 @@ type SourceList struct {
|
||||||
|
|
||||||
Items []Source `json:"items"`
|
Items []Source `json:"items"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Source) Validate(ctx context.Context) *apis.FieldError {
|
||||||
|
if s == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return s.Spec.Validate(ctx).ViaField("spec")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SourceSpec) Validate(ctx context.Context) *apis.FieldError {
|
||||||
|
return s.CloudEventOverrides.Validate(ctx).ViaField("ceOverrides")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ceOverrides *CloudEventOverrides) Validate(ctx context.Context) *apis.FieldError {
|
||||||
|
for key := range ceOverrides.Extensions {
|
||||||
|
if err := validateExtensionName(key); err != nil {
|
||||||
|
return err.ViaField("extensions")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func validateExtensionName(key string) *apis.FieldError {
|
||||||
|
if key == "" {
|
||||||
|
return apis.ErrInvalidKeyName(
|
||||||
|
key,
|
||||||
|
"",
|
||||||
|
"keys MUST NOT be empty",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, c := range key {
|
||||||
|
if !((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')) {
|
||||||
|
return apis.ErrInvalidKeyName(
|
||||||
|
key,
|
||||||
|
"",
|
||||||
|
"keys are expected to be alphanumeric",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -367,6 +367,66 @@ func (in *KResourceList) DeepCopyObject() runtime.Object {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *Pod) DeepCopyInto(out *Pod) {
|
||||||
|
*out = *in
|
||||||
|
out.TypeMeta = in.TypeMeta
|
||||||
|
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
|
||||||
|
in.Spec.DeepCopyInto(&out.Spec)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Pod.
|
||||||
|
func (in *Pod) DeepCopy() *Pod {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(Pod)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||||
|
func (in *Pod) DeepCopyObject() runtime.Object {
|
||||||
|
if c := in.DeepCopy(); c != nil {
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *PodList) DeepCopyInto(out *PodList) {
|
||||||
|
*out = *in
|
||||||
|
out.TypeMeta = in.TypeMeta
|
||||||
|
in.ListMeta.DeepCopyInto(&out.ListMeta)
|
||||||
|
if in.Items != nil {
|
||||||
|
in, out := &in.Items, &out.Items
|
||||||
|
*out = make([]WithPod, len(*in))
|
||||||
|
for i := range *in {
|
||||||
|
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodList.
|
||||||
|
func (in *PodList) DeepCopy() *PodList {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(PodList)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||||
|
func (in *PodList) DeepCopyObject() runtime.Object {
|
||||||
|
if c := in.DeepCopy(); c != nil {
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *PodSpecable) DeepCopyInto(out *PodSpecable) {
|
func (in *PodSpecable) DeepCopyInto(out *PodSpecable) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
|
|
||||||
|
|
@ -323,12 +323,13 @@ func ErrInvalidArrayValue(value interface{}, field string, index int) *FieldErro
|
||||||
return ErrInvalidValue(value, CurrentField).ViaFieldIndex(field, index)
|
return ErrInvalidValue(value, CurrentField).ViaFieldIndex(field, index)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ErrInvalidValue constructs a FieldError for a field that has received an
|
// ErrInvalidValue is a variadic helper method for constructing a FieldError
|
||||||
// invalid value.
|
// for a field that has received an invalid value.
|
||||||
func ErrInvalidValue(value interface{}, fieldPath string) *FieldError {
|
func ErrInvalidValue(value interface{}, fieldPath string, details ...string) *FieldError {
|
||||||
return &FieldError{
|
return &FieldError{
|
||||||
Message: fmt.Sprint("invalid value: ", value),
|
Message: fmt.Sprint("invalid value: ", value),
|
||||||
Paths: []string{fieldPath},
|
Paths: []string{fieldPath},
|
||||||
|
Details: strings.Join(details, ", "),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -206,10 +206,6 @@ func (g *reconcilerReconcilerGenerator) GenerateType(c *generator.Context, t *ty
|
||||||
Package: "knative.dev/pkg/reconciler",
|
Package: "knative.dev/pkg/reconciler",
|
||||||
Name: "DoFinalizeKind",
|
Name: "DoFinalizeKind",
|
||||||
}),
|
}),
|
||||||
"doObserveFinalizeKind": c.Universe.Type(types.Name{
|
|
||||||
Package: "knative.dev/pkg/reconciler",
|
|
||||||
Name: "DoObserveFinalizeKind",
|
|
||||||
}),
|
|
||||||
"controllerIsSkipKey": c.Universe.Function(types.Name{
|
"controllerIsSkipKey": c.Universe.Function(types.Name{
|
||||||
Package: "knative.dev/pkg/controller",
|
Package: "knative.dev/pkg/controller",
|
||||||
Name: "IsSkipKey",
|
Name: "IsSkipKey",
|
||||||
|
|
@ -264,20 +260,6 @@ type ReadOnlyInterface interface {
|
||||||
ObserveKind(ctx {{.contextContext|raw}}, o *{{.type|raw}}) {{.reconcilerEvent|raw}}
|
ObserveKind(ctx {{.contextContext|raw}}, o *{{.type|raw}}) {{.reconcilerEvent|raw}}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadOnlyFinalizer defines the strongly typed interfaces to be implemented by a
|
|
||||||
// controller finalizing {{.type|raw}} if they want to process tombstoned resources
|
|
||||||
// even when they are not the leader. Due to the nature of how finalizers are handled
|
|
||||||
// there are no guarantees that this will be called.
|
|
||||||
//
|
|
||||||
// Deprecated: Use reconciler.OnDeletionInterface instead.
|
|
||||||
type ReadOnlyFinalizer interface {
|
|
||||||
// ObserveFinalizeKind implements custom logic to observe the final state of {{.type|raw}}.
|
|
||||||
// This method should not write to the API.
|
|
||||||
//
|
|
||||||
// Deprecated: Use reconciler.ObserveDeletion instead.
|
|
||||||
ObserveFinalizeKind(ctx {{.contextContext|raw}}, o *{{.type|raw}}) {{.reconcilerEvent|raw}}
|
|
||||||
}
|
|
||||||
|
|
||||||
type doReconcile func(ctx {{.contextContext|raw}}, o *{{.type|raw}}) {{.reconcilerEvent|raw}}
|
type doReconcile func(ctx {{.contextContext|raw}}, o *{{.type|raw}}) {{.reconcilerEvent|raw}}
|
||||||
|
|
||||||
// reconcilerImpl implements controller.Reconciler for {{.type|raw}} resources.
|
// reconcilerImpl implements controller.Reconciler for {{.type|raw}} resources.
|
||||||
|
|
@ -483,7 +465,7 @@ func (r *reconcilerImpl) Reconcile(ctx {{.contextContext|raw}}, key string) erro
|
||||||
return {{.fmtErrorf|raw}}("failed to clear finalizers: %w", err)
|
return {{.fmtErrorf|raw}}("failed to clear finalizers: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
case {{.doObserveKind|raw}}, {{.doObserveFinalizeKind|raw}}:
|
case {{.doObserveKind|raw}}:
|
||||||
// Observe any changes to this resource, since we are not the leader.
|
// Observe any changes to this resource, since we are not the leader.
|
||||||
reconcileEvent = do(ctx, resource)
|
reconcileEvent = do(ctx, resource)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -84,10 +84,6 @@ func (g *reconcilerStateGenerator) GenerateType(c *generator.Context, t *types.T
|
||||||
Package: "knative.dev/pkg/reconciler",
|
Package: "knative.dev/pkg/reconciler",
|
||||||
Name: "DoFinalizeKind",
|
Name: "DoFinalizeKind",
|
||||||
}),
|
}),
|
||||||
"doObserveFinalizeKind": c.Universe.Type(types.Name{
|
|
||||||
Package: "knative.dev/pkg/reconciler",
|
|
||||||
Name: "DoObserveFinalizeKind",
|
|
||||||
}),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sw.Do(reconcilerStateType, m)
|
sw.Do(reconcilerStateType, m)
|
||||||
|
|
@ -111,10 +107,6 @@ type state struct {
|
||||||
roi ReadOnlyInterface
|
roi ReadOnlyInterface
|
||||||
// isROI (Read Only Interface) the reconciler only observes reconciliation.
|
// isROI (Read Only Interface) the reconciler only observes reconciliation.
|
||||||
isROI bool
|
isROI bool
|
||||||
// rof is the read only finalizer cast of the reconciler.
|
|
||||||
rof ReadOnlyFinalizer
|
|
||||||
// isROF (Read Only Finalizer) the reconciler only observes finalize.
|
|
||||||
isROF bool
|
|
||||||
// isLeader the instance of the reconciler is the elected leader.
|
// isLeader the instance of the reconciler is the elected leader.
|
||||||
isLeader bool
|
isLeader bool
|
||||||
}
|
}
|
||||||
|
|
@ -127,7 +119,6 @@ func newState(key string, r *reconcilerImpl) (*state, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
roi, isROI := r.reconciler.(ReadOnlyInterface)
|
roi, isROI := r.reconciler.(ReadOnlyInterface)
|
||||||
rof, isROF := r.reconciler.(ReadOnlyFinalizer)
|
|
||||||
|
|
||||||
isLeader := r.IsLeaderFor({{.typesNamespacedName|raw}}{
|
isLeader := r.IsLeaderFor({{.typesNamespacedName|raw}}{
|
||||||
Namespace: namespace,
|
Namespace: namespace,
|
||||||
|
|
@ -141,8 +132,6 @@ func newState(key string, r *reconcilerImpl) (*state, error) {
|
||||||
reconciler: r.reconciler,
|
reconciler: r.reconciler,
|
||||||
roi: roi,
|
roi: roi,
|
||||||
isROI: isROI,
|
isROI: isROI,
|
||||||
rof: rof,
|
|
||||||
isROF: isROF,
|
|
||||||
isLeader: isLeader,
|
isLeader: isLeader,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
@ -154,8 +143,8 @@ var reconcilerStateMethods = `
|
||||||
// isNotLeaderNorObserver returns true when there is no work possible for the
|
// isNotLeaderNorObserver returns true when there is no work possible for the
|
||||||
// reconciler.
|
// reconciler.
|
||||||
func (s *state) isNotLeaderNorObserver() bool {
|
func (s *state) isNotLeaderNorObserver() bool {
|
||||||
if !s.isLeader && !s.isROI && !s.isROF {
|
if !s.isLeader && !s.isROI {
|
||||||
// If we are not the leader, and we don't implement either ReadOnly
|
// If we are not the leader, and we don't implement the ReadOnly
|
||||||
// interface, then take a fast-path out.
|
// interface, then take a fast-path out.
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
@ -171,8 +160,6 @@ func (s *state) reconcileMethodFor(o *{{.type|raw}}) (string, doReconcile) {
|
||||||
}
|
}
|
||||||
} else if fin, ok := s.reconciler.(Finalizer); s.isLeader && ok {
|
} else if fin, ok := s.reconciler.(Finalizer); s.isLeader && ok {
|
||||||
return {{.doFinalizeKind|raw}}, fin.FinalizeKind
|
return {{.doFinalizeKind|raw}}, fin.FinalizeKind
|
||||||
} else if !s.isLeader && s.isROF {
|
|
||||||
return {{.doObserveFinalizeKind|raw}}, s.rof.ObserveFinalizeKind
|
|
||||||
}
|
}
|
||||||
return "unknown", nil
|
return "unknown", nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -273,7 +273,7 @@ func (c *Impl) WorkQueue() workqueue.RateLimitingInterface {
|
||||||
func (c *Impl) EnqueueAfter(obj interface{}, after time.Duration) {
|
func (c *Impl) EnqueueAfter(obj interface{}, after time.Duration) {
|
||||||
object, err := kmeta.DeletionHandlingAccessor(obj)
|
object, err := kmeta.DeletionHandlingAccessor(obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.logger.Errorw("Enqueue", zap.Error(err))
|
c.logger.Errorw("EnqueueAfter", zap.Error(err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.EnqueueKeyAfter(types.NamespacedName{Namespace: object.GetNamespace(), Name: object.GetName()}, after)
|
c.EnqueueKeyAfter(types.NamespacedName{Namespace: object.GetNamespace(), Name: object.GetName()}, after)
|
||||||
|
|
@ -540,7 +540,7 @@ func (c *Impl) processNextWorkItem() bool {
|
||||||
// Run Reconcile, passing it the namespace/name string of the
|
// Run Reconcile, passing it the namespace/name string of the
|
||||||
// resource to be synced.
|
// resource to be synced.
|
||||||
if err = c.Reconciler.Reconcile(ctx, keyStr); err != nil {
|
if err = c.Reconciler.Reconcile(ctx, keyStr); err != nil {
|
||||||
c.handleErr(err, key, startTime)
|
c.handleErr(logger, err, key, startTime)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -552,18 +552,18 @@ func (c *Impl) processNextWorkItem() bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Impl) handleErr(err error, key types.NamespacedName, startTime time.Time) {
|
func (c *Impl) handleErr(logger *zap.SugaredLogger, err error, key types.NamespacedName, startTime time.Time) {
|
||||||
if IsSkipKey(err) {
|
if IsSkipKey(err) {
|
||||||
c.workQueue.Forget(key)
|
c.workQueue.Forget(key)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if ok, delay := IsRequeueKey(err); ok {
|
if ok, delay := IsRequeueKey(err); ok {
|
||||||
c.workQueue.AddAfter(key, delay)
|
c.workQueue.AddAfter(key, delay)
|
||||||
c.logger.Debugf("Requeuing key %s (by request) after %v (depth: %d)", safeKey(key), delay, c.workQueue.Len())
|
logger.Debugf("Requeuing key %s (by request) after %v (depth: %d)", safeKey(key), delay, c.workQueue.Len())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
c.logger.Errorw("Reconcile error", zap.Duration("duration", time.Since(startTime)), zap.Error(err))
|
logger.Errorw("Reconcile error", zap.Duration("duration", time.Since(startTime)), zap.Error(err))
|
||||||
|
|
||||||
// Re-queue the key if it's a transient error.
|
// Re-queue the key if it's a transient error.
|
||||||
// We want to check that the queue is shutting down here
|
// We want to check that the queue is shutting down here
|
||||||
|
|
@ -571,7 +571,7 @@ func (c *Impl) handleErr(err error, key types.NamespacedName, startTime time.Tim
|
||||||
// being processed, queue.Len==0).
|
// being processed, queue.Len==0).
|
||||||
if !IsPermanentError(err) && !c.workQueue.ShuttingDown() {
|
if !IsPermanentError(err) && !c.workQueue.ShuttingDown() {
|
||||||
c.workQueue.AddRateLimited(key)
|
c.workQueue.AddRateLimited(key)
|
||||||
c.logger.Debugf("Requeuing key %s due to non-permanent error (depth: %d)", safeKey(key), c.workQueue.Len())
|
logger.Debugf("Requeuing key %s due to non-permanent error (depth: %d)", safeKey(key), c.workQueue.Len())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,8 @@ const (
|
||||||
// DoObserveKind is the function name for observing the resource (as a non leader).
|
// DoObserveKind is the function name for observing the resource (as a non leader).
|
||||||
DoObserveKind = "ObserveKind"
|
DoObserveKind = "ObserveKind"
|
||||||
// DoObserveFinalizeKind is the function name for observing finalization of the resource (as a non leader).
|
// DoObserveFinalizeKind is the function name for observing finalization of the resource (as a non leader).
|
||||||
|
//
|
||||||
|
// Deprecated: This will be deleted soon.
|
||||||
DoObserveFinalizeKind = "ObserveFinalizeKind"
|
DoObserveFinalizeKind = "ObserveFinalizeKind"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -130,4 +130,32 @@ fi
|
||||||
# Remove the kail log file if the test flow passes.
|
# Remove the kail log file if the test flow passes.
|
||||||
# This is for preventing too many large log files to be uploaded to GCS in CI.
|
# This is for preventing too many large log files to be uploaded to GCS in CI.
|
||||||
rm "${ARTIFACTS}/k8s.log-$(basename "${E2E_SCRIPT}").txt"
|
rm "${ARTIFACTS}/k8s.log-$(basename "${E2E_SCRIPT}").txt"
|
||||||
|
|
||||||
|
header "Collecting performance data"
|
||||||
|
|
||||||
|
cat <<EOF | ko apply -f -
|
||||||
|
apiVersion: serving.knative.dev/v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: podspeed
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
autoscaling.knative.dev/minScale: "1"
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: ko://knative.dev/serving/test/test_images/helloworld
|
||||||
|
EOF
|
||||||
|
|
||||||
|
kubectl wait ksvc/podspeed --for=condition=Ready
|
||||||
|
|
||||||
|
template=$(mktemp)
|
||||||
|
kubectl get pods -lserving.knative.dev/service=podspeed -ojson | jq '.items[0]' > "$template"
|
||||||
|
|
||||||
|
run_go_tool github.com/markusthoemmes/podspeed/cmd/podspeed@358209f podspeed --prepull -pods 100 -template "$template" > "${ARTIFACTS}/pod-bringup-performance.txt"
|
||||||
|
cat "${ARTIFACTS}/pod-bringup-performance.txt"
|
||||||
|
|
||||||
|
kubectl delete ksvc podspeed
|
||||||
|
|
||||||
success
|
success
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,7 @@ type ServingEnvironmentFlags struct {
|
||||||
TestNamespace string // Default namespace for Serving E2E/Conformance tests
|
TestNamespace string // Default namespace for Serving E2E/Conformance tests
|
||||||
AltTestNamespace string // Alternative namespace for running cross-namespace tests in
|
AltTestNamespace string // Alternative namespace for running cross-namespace tests in
|
||||||
TLSTestNamespace string // Namespace for Serving TLS tests
|
TLSTestNamespace string // Namespace for Serving TLS tests
|
||||||
|
ExceedingMemoryLimitSize int // Memory size used to trigger a non-200 response when the service is set with 300MB memory limit.
|
||||||
}
|
}
|
||||||
|
|
||||||
func initializeServingFlags() *ServingEnvironmentFlags {
|
func initializeServingFlags() *ServingEnvironmentFlags {
|
||||||
|
|
@ -84,5 +85,9 @@ func initializeServingFlags() *ServingEnvironmentFlags {
|
||||||
flag.StringVar(&f.TLSTestNamespace, "tls-test-namespace", "tls",
|
flag.StringVar(&f.TLSTestNamespace, "tls-test-namespace", "tls",
|
||||||
"Set this flag to change the namespace for running TLS tests.")
|
"Set this flag to change the namespace for running TLS tests.")
|
||||||
|
|
||||||
|
flag.IntVar(&f.ExceedingMemoryLimitSize, "exceeding-memory-limit-size", 500,
|
||||||
|
"Set this flag to the MB of memory consumed by your service in resource limit tests. "+
|
||||||
|
"You service is set with 300 MB memory limit and shoud return a non-200 response when consuming such amount of memory.")
|
||||||
|
|
||||||
return &f
|
return &f
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -727,7 +727,7 @@ k8s.io/utils/buffer
|
||||||
k8s.io/utils/integer
|
k8s.io/utils/integer
|
||||||
k8s.io/utils/pointer
|
k8s.io/utils/pointer
|
||||||
k8s.io/utils/trace
|
k8s.io/utils/trace
|
||||||
# knative.dev/eventing v0.25.1-0.20210906161343-38f38456f045
|
# knative.dev/eventing v0.25.1-0.20210909163359-316e14d7fbc2
|
||||||
## explicit
|
## explicit
|
||||||
knative.dev/eventing/pkg/apis/config
|
knative.dev/eventing/pkg/apis/config
|
||||||
knative.dev/eventing/pkg/apis/duck
|
knative.dev/eventing/pkg/apis/duck
|
||||||
|
|
@ -756,7 +756,7 @@ knative.dev/eventing/pkg/client/clientset/versioned/typed/sources/v1beta2/fake
|
||||||
# knative.dev/hack v0.0.0-20210806075220-815cd312d65c
|
# knative.dev/hack v0.0.0-20210806075220-815cd312d65c
|
||||||
## explicit
|
## explicit
|
||||||
knative.dev/hack
|
knative.dev/hack
|
||||||
# knative.dev/networking v0.0.0-20210906131644-9d1fe47ad4b4
|
# knative.dev/networking v0.0.0-20210910120730-eb37d69eb87f
|
||||||
## explicit
|
## explicit
|
||||||
knative.dev/networking/pkg
|
knative.dev/networking/pkg
|
||||||
knative.dev/networking/pkg/apis/networking
|
knative.dev/networking/pkg/apis/networking
|
||||||
|
|
@ -764,7 +764,7 @@ knative.dev/networking/pkg/apis/networking/v1alpha1
|
||||||
knative.dev/networking/pkg/client/clientset/versioned
|
knative.dev/networking/pkg/client/clientset/versioned
|
||||||
knative.dev/networking/pkg/client/clientset/versioned/scheme
|
knative.dev/networking/pkg/client/clientset/versioned/scheme
|
||||||
knative.dev/networking/pkg/client/clientset/versioned/typed/networking/v1alpha1
|
knative.dev/networking/pkg/client/clientset/versioned/typed/networking/v1alpha1
|
||||||
# knative.dev/pkg v0.0.0-20210907112319-73d4fe679a2e
|
# knative.dev/pkg v0.0.0-20210909165259-d4505c660535
|
||||||
## explicit
|
## explicit
|
||||||
knative.dev/pkg/apis
|
knative.dev/pkg/apis
|
||||||
knative.dev/pkg/apis/duck
|
knative.dev/pkg/apis/duck
|
||||||
|
|
@ -814,7 +814,7 @@ knative.dev/pkg/tracing/propagation
|
||||||
knative.dev/pkg/tracing/propagation/tracecontextb3
|
knative.dev/pkg/tracing/propagation/tracecontextb3
|
||||||
knative.dev/pkg/tracker
|
knative.dev/pkg/tracker
|
||||||
knative.dev/pkg/unstructured
|
knative.dev/pkg/unstructured
|
||||||
# knative.dev/serving v0.25.1-0.20210907113619-1c022d766c5b
|
# knative.dev/serving v0.25.1-0.20210913112533-33aeffc6c9e2
|
||||||
## explicit
|
## explicit
|
||||||
knative.dev/serving/pkg/apis/autoscaling
|
knative.dev/serving/pkg/apis/autoscaling
|
||||||
knative.dev/serving/pkg/apis/autoscaling/v1alpha1
|
knative.dev/serving/pkg/apis/autoscaling/v1alpha1
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue