Skip to content

exec credential provider: wire in cluster info (superset of #91192)#95489

Merged
k8s-ci-robot merged 6 commits intokubernetes:masterfrom
ankeesler:ankeesler/enj/f/exec_plugin_cluster
Oct 30, 2020
Merged

exec credential provider: wire in cluster info (superset of #91192)#95489
k8s-ci-robot merged 6 commits intokubernetes:masterfrom
ankeesler:ankeesler/enj/f/exec_plugin_cluster

Conversation

@ankeesler
Copy link
Copy Markdown
Contributor

Signed-off-by: Andrew Keesler akeesler@vmware.com

/kind feature
/sig auth
/milestone v1.20

client-go credential plugins can now be passed in the current cluster information via the KUBERNETES_EXEC_INFO environment variable.
Need to update https://kubernetes.io/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins

@k8s-ci-robot k8s-ci-robot added release-note Denotes a PR that will be considered when it comes time to generate release notes. do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. kind/feature Categorizes issue or PR as related to a new feature. labels Oct 12, 2020
@k8s-ci-robot
Copy link
Copy Markdown
Contributor

@ankeesler: You must be a member of the kubernetes/milestone-maintainers GitHub team to set the milestone. If you believe you should be able to issue the /milestone command, please contact your and have them propose you as an additional delegate for this responsibility.

Details

In response to this:

Signed-off-by: Andrew Keesler akeesler@vmware.com

/kind feature
/sig auth
/milestone v1.20

client-go credential plugins can now be passed in the current cluster information via the KUBERNETES_EXEC_INFO environment variable.
Need to update https://kubernetes.io/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins

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 sig/auth Categorizes an issue or PR as relevant to SIG Auth. size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. needs-triage Indicates an issue or PR lacks a `triage/foo` label and requires one. needs-priority Indicates a PR lacks a `priority/foo` label and requires one. labels Oct 12, 2020
@k8s-ci-robot
Copy link
Copy Markdown
Contributor

Hi @ankeesler. Thanks for your PR.

I'm waiting for a 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.

Details

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 needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. area/apiserver area/dependency Issues or PRs related to dependency changes sig/api-machinery Categorizes an issue or PR as relevant to SIG API Machinery. labels Oct 12, 2020
@k8s-ci-robot k8s-ci-robot requested review from a team, deads2k and dims October 12, 2020 14:12
@ankeesler
Copy link
Copy Markdown
Contributor Author

ankeesler commented Oct 12, 2020

TODO:

  • fix LoadExecCredential tests
  • update exec.Authenticator tests with optional Cluster change
  • fix indentation of struct field in clientcmd/api/types.go and clientcmd/api/v1/types.go
  • figure out where to put the todo on metrics...
  • how do the docs get updated properly?
  • is there somewhere to check in a test binary?
  • update KEP with changes from PR
  • update generated code
  • add tests in rest for new ProviderClusterInfo field coming from kubeconfig
  • perform manual e2e test

@k8s-ci-robot k8s-ci-robot added size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. and removed size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. labels Oct 12, 2020
@k8s-ci-robot k8s-ci-robot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Oct 13, 2020
@fedebongio
Copy link
Copy Markdown
Contributor

/cc @cheftako @DangerOnTheRanger
/remove-sig api-machinery

@k8s-ci-robot k8s-ci-robot requested a review from cheftako October 15, 2020 20:18
@k8s-ci-robot k8s-ci-robot removed the sig/api-machinery Categorizes an issue or PR as relevant to SIG API Machinery. label Oct 15, 2020
@k8s-ci-robot
Copy link
Copy Markdown
Contributor

@fedebongio: GitHub didn't allow me to request PR reviews from the following users: DangerOnTheRanger.

Note that only kubernetes members and repo collaborators can review this PR, and authors cannot review their own PRs.

Details

In response to this:

/cc @cheftako @DangerOnTheRanger
/remove-sig api-machinery

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 sig/api-machinery Categorizes an issue or PR as relevant to SIG API Machinery. label Oct 19, 2020
enj added 2 commits October 19, 2020 08:50
Signed-off-by: Monis Khan <mok@vmware.com>
Signed-off-by: Monis Khan <mok@vmware.com>
@ankeesler
Copy link
Copy Markdown
Contributor Author

/test pull-kubernetes-node-e2e

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I don't think this will be necessary once conversion-gen=false is added

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

add // +k8s:conversion-gen=false to explicitly opt out of conversion

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

bd62001e034

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nit: don't put dummy data indicating a password in the config we document as not being intended to contain passwords :-)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

38db9c4b6b3

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
return fmt.Sprintf("api.AuthProviderConfig{Command: %q, Args: %#v, Env: %s, APIVersion: %q, ProvideClusterInfo: %t, Config: %s}", c.Command, args, env, c.APIVersion, c.ProvideClusterInfo, config)
return fmt.Sprintf("api.ExecConfig{Command: %q, Args: %#v, Env: %s, APIVersion: %q, ProvideClusterInfo: %t, Config: %s}", c.Command, args, env, c.APIVersion, c.ProvideClusterInfo, config)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

b46f46b3002

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This test looks good for catching gaps in both directions.

would this make more sense in staging/src/k8s.io/client-go/tools/auth/exec which already has visibility to both the k8s.io/client-go/tools/clientcmd/api and k8s.io/client-go/pkg/apis/clientauthentication API packages? it seems like it would pair well with the test that ensures we can construct rest.Config objects with fidelity from the envvar.

Copy link
Copy Markdown
Contributor Author

@ankeesler ankeesler Oct 29, 2020

Choose a reason for hiding this comment

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

Sure, sounds reasonable to me. I was nervous to move it to .../tools/... because I didn't know if there was a convention around testing API structs as close to their declaration as possible, but I totally agree with you that k8s.io/client-go/tools/auth/exec seems like the natural place for this since the dependency graph works out nicely.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

502dd3fcf0d

Comment on lines 90 to 92
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

be explicit about what the expected action is here... typically, it will be to fix the exec cluster config type

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

77da453042f

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

this is inconsistent with the API doc that indicates the cluster field will be nil if ProvideClusterInfo is false. It looks like we only call this in one non-test location; should we put the burden of doing this check on the caller instead and assume if we are called that config.ExecProvider != nil && config.ExecProvider.ProvideClusterInfo == true?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

09323e5c557

This will likely change once we figure out where to put this thing...

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

going all the way through a mock kubeconfig struct seems pretty roundabout. why are we not translating these fields directly? we have the following methods which should round-trip (modulo loading CA file and resolving the proxy URL):

  • execClusterToConfig: exec cluster -> rest.Config
  • ConfigToExecCluster: rest.Config -> exec cluster

I expected both of these to live in similar places and have a test verifying they could round-trip with each other

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

going all the way through a mock kubeconfig struct seems pretty roundabout. why are we not translating these fields directly?

Yup, totally agree, it seems silly. I started to write a manual conversion from exec cluster to rest.Config, but then I realized I was rewriting a lot of kubeconfig loading logic. To avoid code duplication, and possibly missing out on future rest.Config-creation features/bug fixes, I elected to create the mock kubeconfig. This is certainly a loosely held opinion, though.

I expected both of these to live in similar places

Agreed. This was another "where should these code elements go" moment. If we put ConfigToExecCluster, per your suggestion above[0], in k8s.io/client-go/plugin/pkg/client/auth/exec, then I guess it would follow existing dependency graph edges, now that I think of it. I thought that plugin packages were only supposed to be imported into main packages, and the like, for registration. However, I'm just now realizing that k8s.io/client-go/rest depends on k8s.io/client-go/plugin/pkg/client/auth/exec, and k8s.io/client-go/tools/auth/exec depends on k8s.io/client-go/rest, so therefore k8s.io/client-go/tools/auth/exec already has a dependency on k8s.io/client-go/plugin/pkg/client/auth/exec. As long as you are OK with me importing k8s.io/client-go/plugin/pkg/client/auth/exec into k8s.io/client-go/tools/auth/exec, I'll do that.

[0] #95489 (comment)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'm just now realizing that k8s.io/client-go/rest depends on k8s.io/client-go/plugin/pkg/client/auth/exec, and k8s.io/client-go/tools/auth/exec depends on k8s.io/client-go/rest, so therefore k8s.io/client-go/tools/auth/exec already has a dependency on k8s.io/client-go/plugin/pkg/client/auth/exec.

That was my thinking as well

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I realized I was rewriting a lot of kubeconfig loading logic

Really? I expected a pretty straight copy of the fields… there's no user or context info. It seems like it would be less work and more straightforward than the field by field copy you are doing here

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I'll go with the straight copy of the fields. Could certainly have been that I was making up stories in my head...

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Oh nooooo...I think if we followed through with this plan, plugin/pkg/client/auth/exec would depend on rest (because of return type below), which already depends on plugin/pkg/client/auth/exec...

func ExecClusterToConfig(cluster *clientauthentication.Cluster) (*rest.Config, error)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

OK new bad idea: put both ExecClusterToConfig and ConfigToExecCluster in rest, roundtrip test them there, continue to inject the clientauthentcation.Cluster into exec.GetAuthenticator, and call ExecClusterToConfig from tools/auth/exec. I think that is the only way the dependency graph will line up.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think you're right. That's not that bad... put them in their own file and there's a certain symmetry to them

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

gave this a shot here: 930bfd161a2

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

shouldn't this be passing in the config host? also, Proxy can return a nil url with no error

Suggested change
url, err := config.Proxy(nil)
hostURL, err := url.Parse(config.Host)
...
proxyURL, err := config.Proxy(hostURL)
...
if proxyURL != nil {
... = proxyURL.String()
}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

The proxyURL nil check makes sense, but I believe config.Proxy() accepts a *http.Request.

	Proxy func(*http.Request) (*url.URL, error)

Maybe config.Proxy(&http.Request{URL: hostURL})? This is kinda a tricky conversion, because we are essentially converting from a dynamic proxy URL (rest.Config.Proxy) to a static proxy URL (clientauthentication.Client). I would feel bad passing a half-baked http.Request to config.Proxy.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

mm, true. probably http.NewRequest("", config.Host, nil) to get the same normalization we'd get for actual requests.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

0750ed9c614

Copy link
Copy Markdown
Contributor Author

@ankeesler ankeesler Oct 29, 2020

Choose a reason for hiding this comment

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

I'm all ears for suggestions on how we can make sure we don't forget to do this when we go to GA. I know we can add a TODO item somewhere in GitHub, but I would love to be able to add something in code.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

you can check if a ExecCredential is registered for v1 into the scheme created in staging/src/k8s.io/client-go/tools/auth/exec/exec.go and fail with a "TODO: add field fuzzing test" if so (can test it with a check for v1beta1 to make sure the check works)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

excellent. 56d9b8fda37

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

How would we feel about a test that validates that the rest.Config returned from LoadExecCredential can actually be used to make a REST call? I worry that we will change something in rest.ExecClusterToConfig and forget to validate that LoadExecCredential still returns a REST config that is valid for HTTP calls. Perhaps this is being too wary...

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
return nil, fmt.Errorf("failed to get proxy URL: %w", err)
return nil, fmt.Errorf("failed to get proxy URL for execProvider: %w", err)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

b4ce993f7ce

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
return nil, fmt.Errorf("failed to create empty http request: %w", err)
return nil, fmt.Errorf("failed to create proxy URL request for execProvider: %w", err)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

b4ce993f7ce

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

make this a pointer, don't dereference, and pass a pointer to GetAuthenticator?

Suggested change
var cluster clientauthentication.Cluster
var cluster *clientauthentication.Cluster

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I agree this would clean up the code here in transport.go. I was trying to avoid passing a pointer to GetAuthenticator that could be nil or non-nil, so that GetAuthenticator wouldn't need to worry about limping around with a nil pointer. On the other hand, passing this struct by pointer would alleviate some copying of a Cluster up the stack. I will go ahead and update the GetAuthenticator code, and friends, to take a pointer. It doesn't look like we touch that cluster struct very much right now.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

bfe3c622358

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
return nil, nil, fmt.Errorf("cannot create config: %w", err)
return nil, nil, fmt.Errorf("cannot create rest.Config: %w", err)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

962c4f64655

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
return nil, nil, errors.New("exec credential does not contain cluster information")
return nil, nil, errors.New("ExecCredential does not contain cluster information")

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

962c4f64655

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

why is this needed? modifying the non-test package scheme in a test-only file doesn't seem like a great idea... I really want to exercise the methods that use the scheme the way non-test code will

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I used a Pod down below to validate unmarshalling a runtime.Object that wasn't a clientauthentication.ExecCredential. I'll use a different runtime.Object for this so we don't need to modify the scheme in the test.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

962c4f64655

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

this is fine, we could also iterate through AllKnownTypes and fail if we find any clientauthenticationv1beta1.SchemeGroupVersion.Group / ExecCredential group kinds outside the versions we already expect (v1alpha1 and v1beta1)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Makes sense to me. I guess that would protect against stuff like v1beta2 sneaking in.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

962c4f64655

@liggitt
Copy link
Copy Markdown
Member

liggitt commented Oct 29, 2020

looks like hack/update-bazel.sh is needed as well

@liggitt
Copy link
Copy Markdown
Member

liggitt commented Oct 29, 2020

this lgtm, go ahead and squash review commits into layers that make sense

- The main idea here is that we want to 1) prevent potentially large CA
  bundles from being set in an exec plugin's environment and 2) ensure
  that the exec plugin is getting everything it needs in order to talk to
  a cluster.
- Avoid breaking existing manual declarations of rest.Config instances by
  moving exec Cluster to kubeconfig internal type.
- Use client.authentication.k8s.io/exec to qualify exec cluster extension.
- Deep copy the exec Cluster.Config when we copy a rest.Config.

Signed-off-by: Andrew Keesler <akeesler@vmware.com>
Exec plugin implementations should be able to call
LoadExecCredentialFromEnv() in order to get everything they need to
operate (i.e., cluster information (as long as it is passed in) and
optionally per-cluster configuration).

Signed-off-by: Andrew Keesler <akeesler@vmware.com>
@ankeesler ankeesler force-pushed the ankeesler/enj/f/exec_plugin_cluster branch from 124e555 to 875a46b Compare October 29, 2020 17:42
@ankeesler
Copy link
Copy Markdown
Contributor Author

ankeesler commented Oct 29, 2020

squashed into 2 major commits. i kept @enj's commits intact since i wanted to leave him as author on those. i tried to pull apart c4299d1 more, but changing struct fields were caused some widespread changes.

@ankeesler
Copy link
Copy Markdown
Contributor Author

/retest

@ankeesler
Copy link
Copy Markdown
Contributor Author

Note: i've been using this exec plugin to run end-to-end tests manually: https://gist.github.com/ankeesler/2502d73d164164fc16b1a54bf4607423.

Copy link
Copy Markdown
Member

@liggitt liggitt left a comment

Choose a reason for hiding this comment

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

/approve

sorry, noticed one doc issue on the types, lgtm after that is fixed

// ...
// extensions:
// - name: exec # reserved extension name for per cluster exec config
// - name: client.authentication.k8s.io/exec # reserved extension name for per cluster exec config
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nit: also need to change extensions[exec] mention above

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

good catch, 409f228

// ...
// extensions:
// - name: exec # reserved extension name for per cluster exec config
// - name: client.authentication.k8s.io/exec # reserved extension name for per cluster exec config
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

extensions[exec] mention above

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

good catch, 409f228

@k8s-ci-robot k8s-ci-robot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Oct 29, 2020
Hopefully we've fixed all of these references now...

Signed-off-by: Andrew Keesler <akeesler@vmware.com>
@liggitt
Copy link
Copy Markdown
Member

liggitt commented Oct 29, 2020

/lgtm
/approve

@k8s-ci-robot k8s-ci-robot added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Oct 29, 2020
@k8s-ci-robot
Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: ankeesler, liggitt

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

The pull request process is described here

Details 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

@ankeesler
Copy link
Copy Markdown
Contributor Author

/test pull-kubernetes-e2e-kind-ipv6

@ankeesler
Copy link
Copy Markdown
Contributor Author

/test pull-kubernetes-e2e-gce-100-performance

@ankeesler
Copy link
Copy Markdown
Contributor Author

/test pull-kubernetes-node-e2e

@k8s-ci-robot
Copy link
Copy Markdown
Contributor

@ankeesler: The following tests failed, say /retest to rerun all failed tests:

Test name Commit Details Rerun command
pull-kubernetes-e2e-gce-100-performance 409f228 link /test pull-kubernetes-e2e-gce-100-performance
pull-kubernetes-e2e-gce-ubuntu-containerd 409f228 link /test pull-kubernetes-e2e-gce-ubuntu-containerd

Full PR test history. Your PR dashboard. Please help us cut down on flakes by linking to an open issue when you hit one in your PR.

Details

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. I understand the commands that are listed here.

@ankeesler
Copy link
Copy Markdown
Contributor Author

/test pull-kubernetes-e2e-gce-ubuntu-containerd

@k8s-ci-robot k8s-ci-robot merged commit 53913a7 into kubernetes:master Oct 30, 2020
@dims dims removed their request for review April 7, 2022 01:42
@dims
Copy link
Copy Markdown
Member

dims commented Aug 23, 2022

test ... ignore me!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. area/apiserver area/dependency Issues or PRs related to dependency changes cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. kind/feature Categorizes issue or PR as related to a new feature. lgtm "Looks good to me", 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. priority/important-soon Must be staffed and worked on either currently, or very soon, ideally in time for the next release. release-note Denotes a PR that will be considered when it comes time to generate release notes. sig/api-machinery Categorizes an issue or PR as relevant to SIG API Machinery. sig/auth Categorizes an issue or PR as relevant to SIG Auth. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. triage/accepted Indicates an issue or PR is ready to be actively worked on.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants