{"action":"created","comment":{"url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments/71546056","id":71546056,"diff_hunk":"@@ -0,0 +1,123 @@\n+/*\n+Copyright 2016 The Kubernetes Authors.\n+\n+Licensed under the Apache License, Version 2.0 (the \"License\");\n+you may not use this file except in compliance with the License.\n+You may obtain a copy of the License at\n+\n+    http://www.apache.org/licenses/LICENSE-2.0\n+\n+Unless required by applicable law or agreed to in writing, software\n+distributed under the License is distributed on an \"AS IS\" BASIS,\n+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+See the License for the specific language governing permissions and\n+limitations under the License.\n+*/\n+\n+package kuberuntime\n+\n+import (\n+\t\"fmt\"\n+\n+\t\"github.com/golang/glog\"\n+\t\"k8s.io/kubernetes/pkg/api\"\n+\t\"k8s.io/kubernetes/pkg/credentialprovider\"\n+\truntimeApi \"k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime\"\n+\tkubecontainer \"k8s.io/kubernetes/pkg/kubelet/container\"\n+\t\"k8s.io/kubernetes/pkg/util/parsers\"\n+)\n+\n+// PullImage pulls an image from the network to local storage using the supplied\n+// secrets if necessary.\n+func (m *kubeGenericRuntimeManager) PullImage(image kubecontainer.ImageSpec, pullSecrets []api.Secret) error {\n+\timg := image.Image\n+\trepoToPull, _, _, err := parsers.ParseImageName(img)\n+\tif err != nil {\n+\t\treturn err\n+\t}\n+\n+\tkeyring, err := credentialprovider.MakeDockerKeyring(pullSecrets, m.keyring)\n+\tif err != nil {\n+\t\treturn err\n+\t}\n+\n+\tcreds, ok := keyring.Lookup(repoToPull)\n+\tif !ok {\n+\t\tglog.V(3).Infof(\"Pulling image %s without credentials\", img)\n+\t}\n+\n+\timgSpec := &runtimeApi.ImageSpec{Image: &img}\n+\tvar auth *runtimeApi.AuthConfig\n+\tif len(creds) > 0 {\n+\t\tauthConfig := creds[0].AuthConfig\n+\t\tauth = &runtimeApi.AuthConfig{\n+\t\t\tUsername:      &authConfig.Username,\n+\t\t\tPassword:      &authConfig.Password,\n+\t\t\tAuth:          &authConfig.Auth,\n+\t\t\tServerAddress: &authConfig.ServerAddress,\n+\t\t\tIdentityToken: &authConfig.IdentityToken,\n+\t\t\tRegistryToken: &authConfig.RegistryToken,\n+\t\t}\n+\t}\n+\n+\terr = m.imageService.PullImage(imgSpec, auth)\n+\tif err != nil {\n+\t\tglog.Errorf(\"Pulling image %s failed: %v\", img, err)\n+\t\treturn err\n+\t}\n+\n+\treturn nil\n+}\n+\n+// IsImagePresent checks whether the container image is already in the local storage.\n+func (m *kubeGenericRuntimeManager) IsImagePresent(image kubecontainer.ImageSpec) (bool, error) {\n+\timages, err := m.imageService.ListImages(&runtimeApi.ImageFilter{\n+\t\tImage: &runtimeApi.ImageSpec{\n+\t\t\tImage: &image.Image,\n+\t\t},\n+\t})\n+\tif err != nil {\n+\t\tglog.Errorf(\"ListImages failed: %v\", err)\n+\t\treturn false, err\n+\t}\n+\n+\treturn len(images) > 0, nil\n+}\n+\n+// ListImages gets all images currently on the machine.\n+func (m *kubeGenericRuntimeManager) ListImages() ([]kubecontainer.Image, error) {\n+\tvar images []kubecontainer.Image\n+\n+\tallImages, err := m.imageService.ListImages(nil)\n+\tif err != nil {\n+\t\tglog.Errorf(\"ListImages failed: %v\", err)\n+\t\treturn nil, err\n+\t}\n+\n+\tfor _, img := range allImages {\n+\t\timages = append(images, kubecontainer.Image{\n+\t\t\tID:          img.GetId(),\n+\t\t\tSize:        int64(img.GetSize_()),\n+\t\t\tRepoTags:    img.RepoTags,\n+\t\t\tRepoDigests: img.RepoDigests,\n+\t\t})\n+\t}\n+\n+\treturn images, nil\n+}\n+\n+// Removes the specified image.\n+func (m *kubeGenericRuntimeManager) RemoveImage(image kubecontainer.ImageSpec) error {\n+\terr := m.imageService.RemoveImage(&runtimeApi.ImageSpec{Image: &image.Image})\n+\tif err != nil {\n+\t\tglog.Errorf(\"Remove image %s failed: %v\", image.Image, err)\n+\t\treturn err\n+\t}\n+\n+\treturn nil\n+}\n+\n+// Returns Image statistics.\n+func (m *kubeGenericRuntimeManager) ImageStats() (*kubecontainer.ImageStats, error) {","path":"pkg/kubelet/kuberuntime/image.go","position":null,"original_position":121,"commit_id":"9524d57972ffe4db379ff8b3a4f50c8bec157c24","original_commit_id":"d812a2c3c7408760567b6584d8bfb228bb10ca6b","user":{"login":"Random-Liu","id":5821883,"avatar_url":"https://avatars.githubusercontent.com/u/5821883?v=3","gravatar_id":"","url":"https://api.github.com/users/Random-Liu","html_url":"https://github.com/Random-Liu","followers_url":"https://api.github.com/users/Random-Liu/followers","following_url":"https://api.github.com/users/Random-Liu/following{/other_user}","gists_url":"https://api.github.com/users/Random-Liu/gists{/gist_id}","starred_url":"https://api.github.com/users/Random-Liu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Random-Liu/subscriptions","organizations_url":"https://api.github.com/users/Random-Liu/orgs","repos_url":"https://api.github.com/users/Random-Liu/repos","events_url":"https://api.github.com/users/Random-Liu/events{/privacy}","received_events_url":"https://api.github.com/users/Random-Liu/received_events","type":"User","site_admin":false},"body":"Just curious, why leave this \"not implemented\"? Is there any particular reason? :)","created_at":"2016-07-20T15:20:00Z","updated_at":"2016-07-20T15:20:00Z","html_url":"https://github.com/kubernetes/kubernetes/pull/28396#discussion_r71546056","pull_request_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/28396","_links":{"self":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments/71546056"},"html":{"href":"https://github.com/kubernetes/kubernetes/pull/28396#discussion_r71546056"},"pull_request":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/28396"}}},"pull_request":{"url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/28396","id":76049601,"html_url":"https://github.com/kubernetes/kubernetes/pull/28396","diff_url":"https://github.com/kubernetes/kubernetes/pull/28396.diff","patch_url":"https://github.com/kubernetes/kubernetes/pull/28396.patch","issue_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/28396","number":28396,"state":"open","locked":false,"title":"Kubelet: add initial client/server container runtime","user":{"login":"feiskyer","id":676637,"avatar_url":"https://avatars.githubusercontent.com/u/676637?v=3","gravatar_id":"","url":"https://api.github.com/users/feiskyer","html_url":"https://github.com/feiskyer","followers_url":"https://api.github.com/users/feiskyer/followers","following_url":"https://api.github.com/users/feiskyer/following{/other_user}","gists_url":"https://api.github.com/users/feiskyer/gists{/gist_id}","starred_url":"https://api.github.com/users/feiskyer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/feiskyer/subscriptions","organizations_url":"https://api.github.com/users/feiskyer/orgs","repos_url":"https://api.github.com/users/feiskyer/repos","events_url":"https://api.github.com/users/feiskyer/events{/privacy}","received_events_url":"https://api.github.com/users/feiskyer/received_events","type":"User","site_admin":false},"body":"Part of #28789. Initial implementation of  kubelet client/server container runtime #17048.\r\n\r\nTo facilitate code reviewing, this function will be split into a few small PRs:\r\n\r\n- Add `KubeGenericRuntimeManager` which conforms to kubelet Runtime interface and add a runtime plugin interface for `KubeGenericRuntimeManager` (this PR)\r\n- fake runtime/manager and unit testing\r\n- Add gRPC implementation and add options `--container-runtime-endpoint` and `--image-service-endpoint` to kubelet\r\n- Garbage collection\r\n- Init containers\r\n\r\nThis PR contains only first part. Other parts will be sent out after this one is in.\r\n\r\nCC @dchen1107 @yujuhong  and @tmrts @yifan-gu \r\n\r\nAlso CC @kubernetes/sig-node @kubernetes/sig-rktnetes ","created_at":"2016-07-02T00:02:16Z","updated_at":"2016-07-20T15:20:00Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0c6a6855ff938bf8bde52dd93235abf95854dd8d","assignee":{"login":"yujuhong","id":10524058,"avatar_url":"https://avatars.githubusercontent.com/u/10524058?v=3","gravatar_id":"","url":"https://api.github.com/users/yujuhong","html_url":"https://github.com/yujuhong","followers_url":"https://api.github.com/users/yujuhong/followers","following_url":"https://api.github.com/users/yujuhong/following{/other_user}","gists_url":"https://api.github.com/users/yujuhong/gists{/gist_id}","starred_url":"https://api.github.com/users/yujuhong/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yujuhong/subscriptions","organizations_url":"https://api.github.com/users/yujuhong/orgs","repos_url":"https://api.github.com/users/yujuhong/repos","events_url":"https://api.github.com/users/yujuhong/events{/privacy}","received_events_url":"https://api.github.com/users/yujuhong/received_events","type":"User","site_admin":false},"assignees":[{"login":"yujuhong","id":10524058,"avatar_url":"https://avatars.githubusercontent.com/u/10524058?v=3","gravatar_id":"","url":"https://api.github.com/users/yujuhong","html_url":"https://github.com/yujuhong","followers_url":"https://api.github.com/users/yujuhong/followers","following_url":"https://api.github.com/users/yujuhong/following{/other_user}","gists_url":"https://api.github.com/users/yujuhong/gists{/gist_id}","starred_url":"https://api.github.com/users/yujuhong/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yujuhong/subscriptions","organizations_url":"https://api.github.com/users/yujuhong/orgs","repos_url":"https://api.github.com/users/yujuhong/repos","events_url":"https://api.github.com/users/yujuhong/events{/privacy}","received_events_url":"https://api.github.com/users/yujuhong/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/28396/commits","review_comments_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/28396/comments","review_comment_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments{/number}","comments_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/28396/comments","statuses_url":"https://api.github.com/repos/kubernetes/kubernetes/statuses/9524d57972ffe4db379ff8b3a4f50c8bec157c24","head":{"label":"feiskyer:kuberuntime","ref":"kuberuntime","sha":"9524d57972ffe4db379ff8b3a4f50c8bec157c24","user":{"login":"feiskyer","id":676637,"avatar_url":"https://avatars.githubusercontent.com/u/676637?v=3","gravatar_id":"","url":"https://api.github.com/users/feiskyer","html_url":"https://github.com/feiskyer","followers_url":"https://api.github.com/users/feiskyer/followers","following_url":"https://api.github.com/users/feiskyer/following{/other_user}","gists_url":"https://api.github.com/users/feiskyer/gists{/gist_id}","starred_url":"https://api.github.com/users/feiskyer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/feiskyer/subscriptions","organizations_url":"https://api.github.com/users/feiskyer/orgs","repos_url":"https://api.github.com/users/feiskyer/repos","events_url":"https://api.github.com/users/feiskyer/events{/privacy}","received_events_url":"https://api.github.com/users/feiskyer/received_events","type":"User","site_admin":false},"repo":{"id":39993689,"name":"kubernetes","full_name":"feiskyer/kubernetes","owner":{"login":"feiskyer","id":676637,"avatar_url":"https://avatars.githubusercontent.com/u/676637?v=3","gravatar_id":"","url":"https://api.github.com/users/feiskyer","html_url":"https://github.com/feiskyer","followers_url":"https://api.github.com/users/feiskyer/followers","following_url":"https://api.github.com/users/feiskyer/following{/other_user}","gists_url":"https://api.github.com/users/feiskyer/gists{/gist_id}","starred_url":"https://api.github.com/users/feiskyer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/feiskyer/subscriptions","organizations_url":"https://api.github.com/users/feiskyer/orgs","repos_url":"https://api.github.com/users/feiskyer/repos","events_url":"https://api.github.com/users/feiskyer/events{/privacy}","received_events_url":"https://api.github.com/users/feiskyer/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/feiskyer/kubernetes","description":"Container Cluster Manager from Google","fork":true,"url":"https://api.github.com/repos/feiskyer/kubernetes","forks_url":"https://api.github.com/repos/feiskyer/kubernetes/forks","keys_url":"https://api.github.com/repos/feiskyer/kubernetes/keys{/key_id}","collaborators_url":"https://api.github.com/repos/feiskyer/kubernetes/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/feiskyer/kubernetes/teams","hooks_url":"https://api.github.com/repos/feiskyer/kubernetes/hooks","issue_events_url":"https://api.github.com/repos/feiskyer/kubernetes/issues/events{/number}","events_url":"https://api.github.com/repos/feiskyer/kubernetes/events","assignees_url":"https://api.github.com/repos/feiskyer/kubernetes/assignees{/user}","branches_url":"https://api.github.com/repos/feiskyer/kubernetes/branches{/branch}","tags_url":"https://api.github.com/repos/feiskyer/kubernetes/tags","blobs_url":"https://api.github.com/repos/feiskyer/kubernetes/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/feiskyer/kubernetes/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/feiskyer/kubernetes/git/refs{/sha}","trees_url":"https://api.github.com/repos/feiskyer/kubernetes/git/trees{/sha}","statuses_url":"https://api.github.com/repos/feiskyer/kubernetes/statuses/{sha}","languages_url":"https://api.github.com/repos/feiskyer/kubernetes/languages","stargazers_url":"https://api.github.com/repos/feiskyer/kubernetes/stargazers","contributors_url":"https://api.github.com/repos/feiskyer/kubernetes/contributors","subscribers_url":"https://api.github.com/repos/feiskyer/kubernetes/subscribers","subscription_url":"https://api.github.com/repos/feiskyer/kubernetes/subscription","commits_url":"https://api.github.com/repos/feiskyer/kubernetes/commits{/sha}","git_commits_url":"https://api.github.com/repos/feiskyer/kubernetes/git/commits{/sha}","comments_url":"https://api.github.com/repos/feiskyer/kubernetes/comments{/number}","issue_comment_url":"https://api.github.com/repos/feiskyer/kubernetes/issues/comments{/number}","contents_url":"https://api.github.com/repos/feiskyer/kubernetes/contents/{+path}","compare_url":"https://api.github.com/repos/feiskyer/kubernetes/compare/{base}...{head}","merges_url":"https://api.github.com/repos/feiskyer/kubernetes/merges","archive_url":"https://api.github.com/repos/feiskyer/kubernetes/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/feiskyer/kubernetes/downloads","issues_url":"https://api.github.com/repos/feiskyer/kubernetes/issues{/number}","pulls_url":"https://api.github.com/repos/feiskyer/kubernetes/pulls{/number}","milestones_url":"https://api.github.com/repos/feiskyer/kubernetes/milestones{/number}","notifications_url":"https://api.github.com/repos/feiskyer/kubernetes/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/feiskyer/kubernetes/labels{/name}","releases_url":"https://api.github.com/repos/feiskyer/kubernetes/releases{/id}","deployments_url":"https://api.github.com/repos/feiskyer/kubernetes/deployments","created_at":"2015-07-31T07:53:03Z","updated_at":"2016-02-12T09:40:13Z","pushed_at":"2016-07-20T07:56:29Z","git_url":"git://github.com/feiskyer/kubernetes.git","ssh_url":"git@github.com:feiskyer/kubernetes.git","clone_url":"https://github.com/feiskyer/kubernetes.git","svn_url":"https://github.com/feiskyer/kubernetes","homepage":"http://kubernetes.io","size":285186,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"kubernetes:master","ref":"master","sha":"976ca09d714cf114fb7a9e681bc0b170760cbdab","user":{"login":"kubernetes","id":13629408,"avatar_url":"https://avatars.githubusercontent.com/u/13629408?v=3","gravatar_id":"","url":"https://api.github.com/users/kubernetes","html_url":"https://github.com/kubernetes","followers_url":"https://api.github.com/users/kubernetes/followers","following_url":"https://api.github.com/users/kubernetes/following{/other_user}","gists_url":"https://api.github.com/users/kubernetes/gists{/gist_id}","starred_url":"https://api.github.com/users/kubernetes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kubernetes/subscriptions","organizations_url":"https://api.github.com/users/kubernetes/orgs","repos_url":"https://api.github.com/users/kubernetes/repos","events_url":"https://api.github.com/users/kubernetes/events{/privacy}","received_events_url":"https://api.github.com/users/kubernetes/received_events","type":"Organization","site_admin":false},"repo":{"id":20580498,"name":"kubernetes","full_name":"kubernetes/kubernetes","owner":{"login":"kubernetes","id":13629408,"avatar_url":"https://avatars.githubusercontent.com/u/13629408?v=3","gravatar_id":"","url":"https://api.github.com/users/kubernetes","html_url":"https://github.com/kubernetes","followers_url":"https://api.github.com/users/kubernetes/followers","following_url":"https://api.github.com/users/kubernetes/following{/other_user}","gists_url":"https://api.github.com/users/kubernetes/gists{/gist_id}","starred_url":"https://api.github.com/users/kubernetes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kubernetes/subscriptions","organizations_url":"https://api.github.com/users/kubernetes/orgs","repos_url":"https://api.github.com/users/kubernetes/repos","events_url":"https://api.github.com/users/kubernetes/events{/privacy}","received_events_url":"https://api.github.com/users/kubernetes/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/kubernetes/kubernetes","description":"Production-Grade Container Scheduling and Management","fork":false,"url":"https://api.github.com/repos/kubernetes/kubernetes","forks_url":"https://api.github.com/repos/kubernetes/kubernetes/forks","keys_url":"https://api.github.com/repos/kubernetes/kubernetes/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kubernetes/kubernetes/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kubernetes/kubernetes/teams","hooks_url":"https://api.github.com/repos/kubernetes/kubernetes/hooks","issue_events_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/events{/number}","events_url":"https://api.github.com/repos/kubernetes/kubernetes/events","assignees_url":"https://api.github.com/repos/kubernetes/kubernetes/assignees{/user}","branches_url":"https://api.github.com/repos/kubernetes/kubernetes/branches{/branch}","tags_url":"https://api.github.com/repos/kubernetes/kubernetes/tags","blobs_url":"https://api.github.com/repos/kubernetes/kubernetes/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kubernetes/kubernetes/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kubernetes/kubernetes/git/refs{/sha}","trees_url":"https://api.github.com/repos/kubernetes/kubernetes/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kubernetes/kubernetes/statuses/{sha}","languages_url":"https://api.github.com/repos/kubernetes/kubernetes/languages","stargazers_url":"https://api.github.com/repos/kubernetes/kubernetes/stargazers","contributors_url":"https://api.github.com/repos/kubernetes/kubernetes/contributors","subscribers_url":"https://api.github.com/repos/kubernetes/kubernetes/subscribers","subscription_url":"https://api.github.com/repos/kubernetes/kubernetes/subscription","commits_url":"https://api.github.com/repos/kubernetes/kubernetes/commits{/sha}","git_commits_url":"https://api.github.com/repos/kubernetes/kubernetes/git/commits{/sha}","comments_url":"https://api.github.com/repos/kubernetes/kubernetes/comments{/number}","issue_comment_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/comments{/number}","contents_url":"https://api.github.com/repos/kubernetes/kubernetes/contents/{+path}","compare_url":"https://api.github.com/repos/kubernetes/kubernetes/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kubernetes/kubernetes/merges","archive_url":"https://api.github.com/repos/kubernetes/kubernetes/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kubernetes/kubernetes/downloads","issues_url":"https://api.github.com/repos/kubernetes/kubernetes/issues{/number}","pulls_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls{/number}","milestones_url":"https://api.github.com/repos/kubernetes/kubernetes/milestones{/number}","notifications_url":"https://api.github.com/repos/kubernetes/kubernetes/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kubernetes/kubernetes/labels{/name}","releases_url":"https://api.github.com/repos/kubernetes/kubernetes/releases{/id}","deployments_url":"https://api.github.com/repos/kubernetes/kubernetes/deployments","created_at":"2014-06-06T22:56:04Z","updated_at":"2016-07-20T14:42:41Z","pushed_at":"2016-07-20T15:17:14Z","git_url":"git://github.com/kubernetes/kubernetes.git","ssh_url":"git@github.com:kubernetes/kubernetes.git","clone_url":"https://github.com/kubernetes/kubernetes.git","svn_url":"https://github.com/kubernetes/kubernetes","homepage":"http://kubernetes.io","size":494323,"stargazers_count":15631,"watchers_count":15631,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":4928,"mirror_url":null,"open_issues_count":3940,"forks":4928,"open_issues":3940,"watchers":15631,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/28396"},"html":{"href":"https://github.com/kubernetes/kubernetes/pull/28396"},"issue":{"href":"https://api.github.com/repos/kubernetes/kubernetes/issues/28396"},"comments":{"href":"https://api.github.com/repos/kubernetes/kubernetes/issues/28396/comments"},"review_comments":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/28396/comments"},"review_comment":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/28396/commits"},"statuses":{"href":"https://api.github.com/repos/kubernetes/kubernetes/statuses/9524d57972ffe4db379ff8b3a4f50c8bec157c24"}}}}
{"actor":{"display_login":"Random-Liu"}}