Skip to content
This repository has been archived by the owner on May 6, 2022. It is now read-only.

Add controller Service Instance test #2667

Merged
merged 6 commits into from
Sep 5, 2019

Conversation

jasiu001
Copy link
Contributor

This PR is a

  • Feature Implementation
  • Bug Fix
  • Documentation

What this PR does / why we need it:
The PR indroduces controller tests which will replace current integration tests, see #2597
Test refers to the ServiceInstance flow:

  • TestCreateServiceInstanceFailsWithNonexistentPlan
  • TestCreateServiceInstanceNonExistentClusterServiceBroker
  • TestCreateServiceInstanceNonExistentClusterServiceClassOrPlan
  • TestCreateServiceInstanceWithInvalidParameters
  • TestCreateServiceInstanceWithParameters
  • TestCreateServiceInstanceWithProvisionFailure
  • TestUpdateServiceInstanceChangePlans
  • TestUpdateServiceInstanceChangePlansToNonexistentPlan
  • TestUpdateServiceInstanceNewDashboardResponse
  • TestUpdateServiceInstanceUpdateParameters

Please leave this checklist in the PR comment so that maintainers can ensure a good PR.

Merge Checklist:

  • New feature
    • Tests
    • Documentation
  • SVCat CLI flag
  • Server Flag for config
    • Chart changes
    • removing a flag by marking deprecated and hiding to avoid
      breaking the chart release and existing clients who provide a
      flag that will get an error when they try to update

@k8s-ci-robot k8s-ci-robot added cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. labels Jun 25, 2019
@k8s-ci-robot
Copy link
Contributor

Hi @jasiu001. Thanks for your PR.

I'm waiting for a kubernetes-sigs or kubernetes member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@k8s-ci-robot k8s-ci-robot added the size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. label Jun 25, 2019
@MHBauer
Copy link
Contributor

MHBauer commented Jul 1, 2019

/ok-to-test

@k8s-ci-robot k8s-ci-robot added ok-to-test Indicates a non-member PR verified by an org member that is safe to test. and removed needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. labels Jul 1, 2019
@MHBauer
Copy link
Contributor

MHBauer commented Jul 1, 2019

/assign @jberkhahn

@mszostok
Copy link
Contributor

mszostok commented Jul 2, 2019

/test pull-service-catalog-integration

@jberkhahn
Copy link
Contributor

/retest


// WaitForInstanceCondition waits until ServiceInstance `status.conditions` field value is equal to condition in parameters
// returns error if the time limit has been reached
func (ct *controllerTest) WaitForInstanceCondition(condition v1beta1.ServiceInstanceCondition) error {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a reason you duplicated this instead of using the one in test/util/util.go?

// WaitForServiceInstanceProcessedGeneration waits until ServiceInstance parameter `Status.ObservedGeneration` is
// equal or higher than ServiceInstance `generation` value, ServiceInstance is in Ready/True status and
// ServiceInstance is not in Orphan Mitigation progress
func (ct *controllerTest) WaitForServiceInstanceProcessedGeneration(generation int64) error {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same question as above.

return err
}

func isServiceInstanceConditionTrue(instance *v1beta1.ServiceInstance) bool {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

^^

}

// AssertServiceInstanceHasNoCondition makes sure ServiceInstance is in not specific condition
func (ct *controllerTest) AssertServiceInstanceHasNoCondition(t *testing.T, cond v1beta1.ServiceInstanceCondition) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

would it make sense to move this to the util package?

}

// AssertServiceInstanceOrphanMitigationStatus makes sure ServiceInstance is/or is not in Orphan Mitigation progress
func (ct *controllerTest) AssertServiceInstanceOrphanMitigationStatus(t *testing.T, state bool) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems like another thing to stick in the util package

}

// CreateClusterServiceClass creates ClusterServiceClass with default parameters
func (ct *controllerTest) CreateClusterServiceClass() error {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pretty much all of this might want to be moved into test/util. I could have sworn there was an equivalent for this in there already but I can't find it offhand.


// TestCreateServiceInstanceFailsWithNonexistentPlan tests creating a ServiceInstance whose ServicePlan
// does not exist
func TestCreateServiceInstanceFailsWithNonexistentPlan(t *testing.T) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems good

@jberkhahn
Copy link
Contributor

The tests themselves seem good, but I think there's quite a bit of refactoring of the setup stuff that could be done. A lot are dupes of functions we already have in the test/util package.

@jasiu001
Copy link
Contributor Author

jasiu001 commented Aug 7, 2019

I noticed that all comments are about why I don't use existing functions in test/util/util.go. First of all, we moved all controller integration tests from test/integration to pkg/controller so it is natural we moved also util functions.

As you can see in this commit which is already merged to master "utils" functions are moved to controller package along with controller's tests.
If I am not mistaken, the test/integration will be deleted in the future.

In the end, I would like to point out that in "our" case_test we use controllerTest's methods instead of functions so we don't have to e.g. inject to each "util" function the client, which in my opinion is much easier to read.

@jberkhahn
Copy link
Contributor

/approve
@MHBauer could you take a look at this when you get a chance?

@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: jasiu001, jberkhahn

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@k8s-ci-robot k8s-ci-robot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Aug 12, 2019
@mszostok
Copy link
Contributor

@MHBauer In general here is the issue about that:
#2597

To make a long story short, current integration tests are tightly coupled with api-server (starting server, etcd). We want to rewrite them into general integration tests with only one dependency to SC controllers.

Right now, the rewritten tests are placed are under pkg/controller package with // +build integration tag, so they are executed only if you execute

go test --tags="integration" github.com/kubernetes-sigs/service-catalog/pkg/controller/...

@MHBauer: I'll have to dig into the existing tests to find the corresponding other tests.

the test name is exactly the same as defined in https://github.com/kubernetes-sigs/service-catalog/tree/master/test/integration, so it's easy to check them

e.g. TestServiceBindingDeleteWithAsyncBindInProgress

when you execute search:
https://github.com/kubernetes-sigs/service-catalog/search?q=TestServiceBindingDeleteWithAsyncBindInProgress&unscoped_q=TestServiceBindingDeleteWithAsyncBindInProgress

then you will see that test is defined in both places:

  • test/integration/controller_test.go
  • and pkg/controller/controller_flow_binding_test.go

they are testing the same logic but the new way does not require the api-server

right now we are in the transition phase and we run both tests (this is also the reason why pull-service-catalog-integration takes a little bit more time), so we can be sure that both working well. After merging CRDs we are able to remove the old integration test (with api-server) but still have the same coverage thanks to new tests which were implemented, so we will not regress.

Copy link
Contributor

@mszostok mszostok left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the last PR for #2597 issue

Why those 6 tests were not migrated?

  • TestBasicFlowsWithOriginatingIdentity,
  • TestCreateServiceBindingInstanceNotReady,
  • TestCreateServiceBindingInvalidInstanceFailure,
  • TestCreateServiceBindingNonBindable,
  • TestCreateServiceBindingWithParameters,
  • TestCreateServiceBindingWithSecretTransform

// TestCreateServiceInstanceNonExistentClusterServiceClassOrPlan tests that a ServiceInstance gets
// a Failed condition when the service class or service plan it references does not exist.
func TestCreateServiceInstanceNonExistentClusterServiceClassOrPlan(t *testing.T) {
// TODO: cannot rewrite tests because fakeClient does not support `FieldSelector` during filtering ServiceInstance list
Copy link
Contributor

@mszostok mszostok Aug 27, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use t.Skip("message.."), thanks to that when this test will be executed we will see the information that it was skipped with given reason. Add also info that it should be added after merging the CRDs

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

@MHBauer
Copy link
Contributor

MHBauer commented Aug 27, 2019

@mszostok #2667 (comment)
Super comment. Would be nice to see some of it in the commit message.

I didn't know about or forgot about the integration tag. Had a nil pointer dereference when running that way.

=== RUN   TestUpdateServiceInstanceUpdateParameters
=== RUN   TestUpdateServiceInstanceUpdateParameters/Update_paramE0827 13:55:56.147026   71854 runtime.go:69] Observed a panic: "invalid memory address or nil pointer dereference" (runtime error: invalid memory address or nil pointer dereference)
/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go:76
/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go:65
/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go:51
/Users/mhb/.go/src/runtime/panic.go:522
/Users/mhb/.go/src/runtime/panic.go:82
/Users/mhb/.go/src/runtime/signal_unix.go:390
/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/pkg/controller/controller_instance.go:811
/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/pkg/controller/controller_instance.go:334
/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/pkg/controller/controller_instance.go:302
/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/pkg/controller/controller.go:390
/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/pkg/controller/controller.go:408
/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:152
/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:153
/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:88
/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/pkg/controller/controller.go:306
/Users/mhb/.go/src/runtime/asm_amd64.s:1337
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
	panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x24a46f4]

goroutine 11438 [running]:
github.com/kubernetes-sigs/service-catalog/vendor/k8s.io/apimachinery/pkg/util/runtime.HandleCrash(0x0, 0x0, 0x0)
	/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go:58 +0x169
panic(0x27d2780, 0x3b63bb0)
	/Users/mhb/.go/src/runtime/panic.go:522 +0x1b5
github.com/kubernetes-sigs/service-catalog/pkg/controller.(*controller).reconcileServiceInstanceUpdate(0xc000101440, 0xc005b08000, 0xc000358c00, 0x0)
	/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/pkg/controller/controller_instance.go:811 +0x1434
github.com/kubernetes-sigs/service-catalog/pkg/controller.(*controller).reconcileServiceInstance(0xc000101440, 0xc005aef800, 0x0, 0x0)
	/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/pkg/controller/controller_instance.go:334 +0x598
github.com/kubernetes-sigs/service-catalog/pkg/controller.(*controller).reconcileServiceInstanceKey(0xc000101440, 0xc0059eeb60, 0x18, 0xc00490ac10, 0xc005af7cc8)
	/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/pkg/controller/controller_instance.go:302 +0x3b7
github.com/kubernetes-sigs/service-catalog/pkg/controller.worker.func1.1(0x2c97780, 0xc005a50d80, 0xc005a1a460, 0x1, 0xf, 0x2964fff, 0xf, 0x1076200)
	/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/pkg/controller/controller.go:390 +0x105
github.com/kubernetes-sigs/service-catalog/pkg/controller.worker.func1()
	/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/pkg/controller/controller.go:408 +0xb3
github.com/kubernetes-sigs/service-catalog/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil.func1(0xc0059ea880)
	/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:152 +0x62
github.com/kubernetes-sigs/service-catalog/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil(0xc0059ea880, 0x3b9aca00, 0x0, 0x1, 0xc005a58ba0)
	/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:153 +0x109
github.com/kubernetes-sigs/service-catalog/vendor/k8s.io/apimachinery/pkg/util/wait.Until(...)
	/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:88
github.com/kubernetes-sigs/service-catalog/pkg/controller.createWorker.func1(0x2c97780, 0xc005a50d80, 0x2964fff, 0xf, 0xf, 0x1, 0xc005a1a460, 0xc005a58ba0, 0xc005914420)
	/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/pkg/controller/controller.go:306 +0xae
created by github.com/kubernetes-sigs/service-catalog/pkg/controller.createWorker
	/Users/mhb/go/src/github.com/kubernetes-sigs/service-catalog/pkg/controller/controller.go:305 +0xcc

Not 100% sure if those are exactly the tests responsible or not.

@MHBauer
Copy link
Contributor

MHBauer commented Aug 27, 2019

What I presume is a flaky fail:

=== RUN   TestCreateServiceInstanceWithInvalidParameters
--- FAIL: TestCreateServiceInstanceWithInvalidParameters (8.75s)
    require.go:794:
        	Error Trace:	controller_flow_instance_test.go:241
        	Error:      	Received unexpected error:
        	            	instance with proper conditions not found, the existing conditions: [{Type:Ready Status:True LastTransitionTime:2019-08-27 14:09:20.865614 -0700 PDT m=+21.736541883 Reason:ProvisionedSuccessfully Message:The instance was provisioned successfully}]
        	Test:       	TestCreateServiceInstanceWithInvalidParameters

I'll have to remember how to turn the logging up if you want me to try and repro for more info.

Something doesn't seem quite ready if I'm hitting 2 issues within 3 runs.

If not aware, my recommendation is to turn the run count up with -count 10000 and then also turn on -failfast so it exits on error.

Could be this is some cleanup not happening and exhausting the resources, but I haven't looked.

@MHBauer
Copy link
Contributor

MHBauer commented Aug 27, 2019

Also figuring out how to run some tests or subtests in parallel would be good.

@jasiu001
Copy link
Contributor Author

@MHBauer considering your comment about parallel tests I paralleled some tests. The list of tests and their execution times before and after are presented in the table below:

test time execution before time execution after notes
TestProvisionInstanceWithRetries 4.100s 2.052s
TestRetryAsyncDeprovision - - single test
TestServiceInstanceDeleteWithAsyncProvisionInProgress - - already Parallel
TestServiceInstanceDeleteWithAsyncUpdateInProgress - - already Parallel
TestCreateServiceInstanceFailsWithNonexistentPlan - - single test
TestCreateServiceInstanceNonExistentClusterServiceBroker - - single test
TestCreateServiceInstanceNonExistentClusterServiceClassOrPlan - - -
TestCreateServiceInstanceWithInvalidParameters - - single test
TestCreateServiceInstanceWithParameters 9.288s 3.104s
TestCreateServiceInstanceWithProvisionFailure 21.232s 6.048s
TestUpdateServiceInstanceChangePlans 12.521s 4.266s
TestUpdateServiceInstanceChangePlansToNonexistentPlan - - single test
TestUpdateServiceInstanceNewDashboardResponse - - cannot be run parralel, details in code
TestUpdateServiceInstanceUpdateParameters 18.316s 5.417s
All tests 87.120s 48.008s

When it comes to the TestUpdateServiceInstanceUpdateParameters test, the problem was related to another test that set the feature gate flag to true. The correct performance of the test depended on the order in which the tests were run. The error has been corrected.


I also tried to reproduce failing TestCreateServiceInstanceWithInvalidParameters test (with count=100), but each time test passed. I also tried to run this test on @mszostok computer but it passed. Please, I need more details about how do you run this test.


@mszostok missing tests have been added

@MHBauer
Copy link
Contributor

MHBauer commented Aug 30, 2019

I forgot about feature gates. I remember those preventing nearly any use of parallel. Oh well.

Copy link
Contributor

@mszostok mszostok left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

parallel execution makes a difference 👍 I've executed those tests locally without any failures

just few minor comments :)

@MHBauer is everything ok from your side? if yes then we will merge it on Monday thanks to that we will be able to rebase the CRD branch :)

}
}

// TODO: move to case_test.go
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be removed, right?

return err
}

// TODO: move to case_test.go
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove?

}
}

// TODO: move to case_test.go
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

^^

@@ -59,6 +59,39 @@ func TestBasicFlowWithBasicAuth(t *testing.T) {
ct.AssertOSBBasicAuth(t, "user1", "newp2sswd")
}

// TestOriginatingIdentity tests whether the controller uses correct credentials when the secret changes
func TestOriginatingIdentity(t *testing.T) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add info
// CAUTION: the test cannot be executed in parallel because it changes global flag which can affect the behavior of other tests

@MHBauer
Copy link
Contributor

MHBauer commented Sep 3, 2019

Is there a 1second sleep in here somewhere? A lot of tests take that suspiciously specific amount of time.

@MHBauer
Copy link
Contributor

MHBauer commented Sep 3, 2019

here is exact invocation:

$ go test --tags="integration"  -v -run TestCreateServiceInstanceWithInvalidParameters -race -count 30 -failfast
=== RUN   TestCreateServiceInstanceWithInvalidParameters
=== PAUSE TestCreateServiceInstanceWithInvalidParameters
=== CONT  TestCreateServiceInstanceWithInvalidParameters
--- PASS: TestCreateServiceInstanceWithInvalidParameters (1.01s)
=== RUN   TestCreateServiceInstanceWithInvalidParameters
=== PAUSE TestCreateServiceInstanceWithInvalidParameters
=== CONT  TestCreateServiceInstanceWithInvalidParameters
--- PASS: TestCreateServiceInstanceWithInvalidParameters (1.01s)
=== RUN   TestCreateServiceInstanceWithInvalidParameters
=== PAUSE TestCreateServiceInstanceWithInvalidParameters
=== CONT  TestCreateServiceInstanceWithInvalidParameters
--- PASS: TestCreateServiceInstanceWithInvalidParameters (1.01s)
=== RUN   TestCreateServiceInstanceWithInvalidParameters
=== PAUSE TestCreateServiceInstanceWithInvalidParameters
=== CONT  TestCreateServiceInstanceWithInvalidParameters
--- FAIL: TestCreateServiceInstanceWithInvalidParameters (8.97s)
    require.go:794: 
        	Error Trace:	controller_flow_instance_test.go:252
        	Error:      	Received unexpected error:
        	            	instance with proper conditions not found, the existing conditions: [{Type:Ready Status:True LastTransitionTime:2019-09-03 14:50:00.909996568 -0700 PDT m=+4.054543438 Reason:ProvisionedSuccessfully Message:The instance was provisioned successfully}]
        	Test:       	TestCreateServiceInstanceWithInvalidParameters
FAIL
exit status 1
FAIL	github.com/kubernetes-sigs/service-catalog/pkg/controller	12.067s

Do instances of the same test interfere with each other? Are we not cleaning up after ourselves?

@MHBauer
Copy link
Contributor

MHBauer commented Sep 3, 2019

As a separate task, there's some very bizarre imports. Things imported multiple times with different names.

@jasiu001
Copy link
Contributor Author

jasiu001 commented Sep 4, 2019

There is no sleep inside any of test, all initiation operation in each test I think to take the same amount of time that is the reason why all have similar time.

As for the test TestCreateServiceInstanceWithInvalidParameters we found the reason why sometimes the test failed, unlike the original one in this I create the instance first and then update it with wrong parameters.
Sometimes informer won't refresh the cache with instances after the update and the test got the instance from before update (success instance with no parameters).
I fixed it and now instance is created with wrong parameters at the beginning.

You are right about there were imports with the same library, I found two in case_test.go file:

  • github.com/pmorie/go-open-service-broker-client/v2
  • k8s.io/apimachinery/pkg/apis/meta/v1

I fixed it.

@jasiu001
Copy link
Contributor Author

jasiu001 commented Sep 4, 2019

/test pull-build-all-images-for-ppc64le

@MHBauer
Copy link
Contributor

MHBauer commented Sep 4, 2019

Awesome. I'll give it another soak locally.

@MHBauer
Copy link
Contributor

MHBauer commented Sep 4, 2019

There's definitely a goroutine lack-of-cleanup threadsplosion issue, but single runs appear to be okay.

@MHBauer
Copy link
Contributor

MHBauer commented Sep 5, 2019

I think, this is
/lgtm

I'll let someone else confirm. Remove the hold when it's ready.
/hold

I've created #2698 as an issue to look into.

@k8s-ci-robot k8s-ci-robot added do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. lgtm Indicates that a PR is ready to be merged. labels Sep 5, 2019
@jberkhahn
Copy link
Contributor

ship it
/hold cancel

@k8s-ci-robot k8s-ci-robot removed the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Sep 5, 2019
@k8s-ci-robot k8s-ci-robot merged commit fd0e4c5 into kubernetes-retired:master Sep 5, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
approved Indicates a PR has been approved by an approver from all required OWNERS files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. lgtm Indicates that a PR is ready to be merged. ok-to-test Indicates a non-member PR verified by an org member that is safe to test. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants