{"action":"created","comment":{"url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments/77746160","id":77746160,"diff_hunk":"@@ -296,15 +298,290 @@ func (m *kubeGenericRuntimeManager) GetPods(all bool) ([]*kubecontainer.Pod, err\n \treturn result, nil\n }\n \n+// podContainerSpecChanges keeps information on changes that need to happen for a pod.\n+type podContainerSpecChanges struct {\n+\t// Whether need to create a new sandbox.\n+\tCreateSandbox bool\n+\t// The id of existing sandbox if not needed to create a new one.\n+\tSandboxID string\n+\t// The attempt number of creating sandboxes for the pod.\n+\tAttempt uint32\n+\n+\tContainersToStart map[int]string\n+\tContainersToKeep  map[kubecontainer.ContainerID]int\n+}\n+\n+// podSandboxChanged checks whether the spec of the pod is changed.\n+func (m *kubeGenericRuntimeManager) podSandboxChanged(pod *api.Pod, podStatus *kubecontainer.PodStatus) (changed bool, attempt uint32, sandboxID string) {\n+\tif len(podStatus.SandboxStatuses) == 0 {\n+\t\treturn true, 0, \"\"\n+\t}\n+\n+\treadySandboxCount := 0\n+\tfor _, s := range podStatus.SandboxStatuses {\n+\t\tif s.GetState() == runtimeApi.PodSandBoxState_READY {\n+\t\t\treadySandboxCount++\n+\t\t}\n+\t}\n+\n+\t// Needs to create a new sandbox when readySandboxCount > 1 but the latest sandbox is not ready.\n+\tsandboxStatus := podStatus.SandboxStatuses[0]\n+\tif readySandboxCount > 1 || sandboxStatus.GetState() != runtimeApi.PodSandBoxState_READY {\n+\t\treturn true, sandboxStatus.Metadata.GetAttempt(), \"\"\n+\t}\n+\n+\t// Needs to create a new sandbox when network namespace changed.\n+\tif sandboxStatus.Linux != nil && sandboxStatus.Linux.Namespaces.Options != nil &&\n+\t\tsandboxStatus.Linux.Namespaces.Options.GetHostNetwork() != kubecontainer.IsHostNetworkPod(pod) {\n+\t\treturn true, sandboxStatus.Metadata.GetAttempt(), \"\"\n+\t}\n+\n+\treturn false, sandboxStatus.Metadata.GetAttempt(), sandboxStatus.GetId()\n+}\n+\n+func (m *kubeGenericRuntimeManager) computePodContainerChanges(pod *api.Pod, podStatus *kubecontainer.PodStatus) podContainerSpecChanges {\n+\tglog.V(5).Infof(\"Syncing Pod %q: %+v\", format.Pod(pod), pod)\n+\n+\tsandboxChanged, attempt, sandboxID := m.podSandboxChanged(pod, podStatus)\n+\tchanges := podContainerSpecChanges{\n+\t\tCreateSandbox:     sandboxChanged,\n+\t\tSandboxID:         sandboxID,\n+\t\tAttempt:           attempt,\n+\t\tContainersToStart: make(map[int]string),\n+\t\tContainersToKeep:  make(map[kubecontainer.ContainerID]int),\n+\t}\n+\n+\tfor index, container := range pod.Spec.Containers {\n+\t\tif sandboxChanged {\n+\t\t\tmessage := fmt.Sprintf(\"Container %+v's pod sandbox is dead, the container will be recreated.\", container)\n+\t\t\tglog.Info(message)\n+\t\t\tchanges.ContainersToStart[index] = message\n+\t\t\tcontinue\n+\t\t}\n+\n+\t\tcontainerStatus := podStatus.FindContainerStatusByName(container.Name)\n+\t\tif containerStatus == nil || containerStatus.State != kubecontainer.ContainerStateRunning {\n+\t\t\tif kubecontainer.ShouldContainerBeRestarted(&container, pod, podStatus) {\n+\t\t\t\tmessage := fmt.Sprintf(\"Container %+v is dead, but RestartPolicy says that we should restart it.\", container)\n+\t\t\t\tglog.Info(message)\n+\t\t\t\tchanges.ContainersToStart[index] = message\n+\t\t\t}\n+\t\t\tcontinue\n+\t\t}\n+\n+\t\texpectedHash := kubecontainer.HashContainer(&container)\n+\t\tcontainerChanged := containerStatus.Hash != 0 && containerStatus.Hash != expectedHash\n+\t\tif containerChanged {\n+\t\t\tmessage := fmt.Sprintf(\"Pod %q container %q hash changed (%d vs %d), it will be killed and re-created.\",\n+\t\t\t\tpod.Name, container.Name, containerStatus.Hash, expectedHash)\n+\t\t\tglog.Info(message)\n+\t\t\tchanges.ContainersToStart[index] = message\n+\t\t\tcontinue\n+\t\t}\n+\n+\t\tliveness, found := m.livenessManager.Get(containerStatus.ID)\n+\t\tif !found || liveness == proberesults.Success {\n+\t\t\tchanges.ContainersToKeep[containerStatus.ID] = index\n+\t\t\tcontinue\n+\t\t}\n+\t\tif pod.Spec.RestartPolicy != api.RestartPolicyNever {\n+\t\t\tmessage := fmt.Sprintf(\"pod %q container %q is unhealthy, it will be killed and re-created.\", format.Pod(pod), container.Name)\n+\t\t\tglog.Info(message)\n+\t\t\tchanges.ContainersToStart[index] = message\n+\t\t}\n+\t}\n+\n+\treturn changes\n+}\n+\n // SyncPod syncs the running pod into the desired pod.\n-func (m *kubeGenericRuntimeManager) SyncPod(pod *api.Pod, _ api.PodStatus,\n-\tpodStatus *kubecontainer.PodStatus, pullSecrets []api.Secret,\n-\tbackOff *flowcontrol.Backoff) (result kubecontainer.PodSyncResult) {\n-\tresult.Fail(fmt.Errorf(\"not implemented\"))\n+// TODO: support init containers in SyncPod.\n+func (m *kubeGenericRuntimeManager) SyncPod(pod *api.Pod, _ api.PodStatus, podStatus *kubecontainer.PodStatus, pullSecrets []api.Secret, backOff *flowcontrol.Backoff) (result kubecontainer.PodSyncResult) {\n+\tpodContainerChanges := m.computePodContainerChanges(pod, podStatus)\n+\tglog.V(3).Infof(\"computePodContainerChanges got %+v for pod %q\", podContainerChanges, format.Pod(pod))\n+\tif podContainerChanges.CreateSandbox {\n+\t\tref, err := api.GetReference(pod)\n+\t\tif err != nil {\n+\t\t\tglog.Errorf(\"Couldn't make a ref to pod %q: '%v'\", format.Pod(pod), err)\n+\t\t}\n+\t\tm.recorder.Eventf(ref, api.EventTypeNormal, \"SandboxChanged\", \"Pod sandbox changed, it will be killed and re-created.\")\n+\t}\n+\n+\t// Kill the pod if pod spec has changed.\n+\tif podContainerChanges.CreateSandbox || (len(podContainerChanges.ContainersToKeep) == 0 && len(podContainerChanges.ContainersToStart) == 0) {\n+\t\tif len(podContainerChanges.ContainersToKeep) == 0 && len(podContainerChanges.ContainersToStart) == 0 {\n+\t\t\tglog.V(4).Infof(\"Killing PodSandbox for %q because all other containers are dead.\", format.Pod(pod))\n+\t\t} else {\n+\t\t\tglog.V(4).Infof(\"Killing PodSandbox for %q, will start new one\", format.Pod(pod))\n+\t\t}\n+\n+\t\tkillResult := m.killPodWithSyncResult(pod, kubecontainer.ConvertPodStatusToRunningPod(podStatus), nil)\n+\t\tresult.AddPodSyncResult(killResult)\n+\t\tif killResult.Error() != nil {\n+\t\t\tglog.Errorf(\"killPodWithSyncResult failed: %v\", killResult.Error())\n+\t\t\treturn\n+\t\t}\n+\t} else {\n+\t\t// Otherwise kill any running containers in this pod which are not to keep\n+\t\trunningContainerStatues := podStatus.GetRunningContainerStatuses()\n+\t\tfor _, containerStatus := range runningContainerStatues {\n+\t\t\tif _, keep := podContainerChanges.ContainersToKeep[containerStatus.ID]; !keep {","path":"pkg/kubelet/kuberuntime/kuberuntime_manager.go","position":224,"original_position":151,"commit_id":"d1a3784628c12b5611ab4ebea10799705eae2e69","original_commit_id":"d1a3784628c12b5611ab4ebea10799705eae2e69","user":{"login":"euank","id":2147649,"avatar_url":"https://avatars.githubusercontent.com/u/2147649?v=3","gravatar_id":"","url":"https://api.github.com/users/euank","html_url":"https://github.com/euank","followers_url":"https://api.github.com/users/euank/followers","following_url":"https://api.github.com/users/euank/following{/other_user}","gists_url":"https://api.github.com/users/euank/gists{/gist_id}","starred_url":"https://api.github.com/users/euank/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/euank/subscriptions","organizations_url":"https://api.github.com/users/euank/orgs","repos_url":"https://api.github.com/users/euank/repos","events_url":"https://api.github.com/users/euank/events{/privacy}","received_events_url":"https://api.github.com/users/euank/received_events","type":"User","site_admin":false},"body":"Do we not support `init containers` in this runtime? xref https://github.com/kubernetes/kubernetes/commit/205a8b4574c4d3cf35ac7a430b19a426c835dda3#diff-0db82891d463ba14dd59da9c77f4776eR1874\r\n\r\nIs there some other reason we don't need that extra couple lines of code?","created_at":"2016-09-07T01:06:06Z","updated_at":"2016-09-07T01:06:06Z","html_url":"https://github.com/kubernetes/kubernetes/pull/31847#discussion_r77746160","pull_request_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/31847","_links":{"self":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments/77746160"},"html":{"href":"https://github.com/kubernetes/kubernetes/pull/31847#discussion_r77746160"},"pull_request":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/31847"}}},"pull_request":{"url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/31847","id":83558471,"html_url":"https://github.com/kubernetes/kubernetes/pull/31847","diff_url":"https://github.com/kubernetes/kubernetes/pull/31847.diff","patch_url":"https://github.com/kubernetes/kubernetes/pull/31847.patch","issue_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/31847","number":31847,"state":"open","locked":false,"title":"Kubelet: add SyncPod for new runtime API","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":"This PR adds implements of `SyncPod` for new runtime API. Note that init containers is not included, it will in another following PR.\r\n\r\n**DO-NOT-MERGE**. Based on #31322 and #31395, only last commit is for review.\r\n\r\nCC @yujuhong @Random-Liu and @kubernetes/sig-node @kubernetes/sig-rktnetes\n\n<!-- Reviewable:start -->\n---\nThis change is [<img src=\"https://reviewable.kubernetes.io/review_button.svg\" height=\"34\" align=\"absmiddle\" alt=\"Reviewable\"/>](https://reviewable.kubernetes.io/reviews/kubernetes/kubernetes/31847)\n<!-- Reviewable:end -->\n","created_at":"2016-09-01T01:54:40Z","updated_at":"2016-09-07T01:06:06Z","closed_at":null,"merged_at":null,"merge_commit_sha":"285f3227b0ad9eed1c45008165317c133aca82c9","assignee":{"login":"euank","id":2147649,"avatar_url":"https://avatars.githubusercontent.com/u/2147649?v=3","gravatar_id":"","url":"https://api.github.com/users/euank","html_url":"https://github.com/euank","followers_url":"https://api.github.com/users/euank/followers","following_url":"https://api.github.com/users/euank/following{/other_user}","gists_url":"https://api.github.com/users/euank/gists{/gist_id}","starred_url":"https://api.github.com/users/euank/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/euank/subscriptions","organizations_url":"https://api.github.com/users/euank/orgs","repos_url":"https://api.github.com/users/euank/repos","events_url":"https://api.github.com/users/euank/events{/privacy}","received_events_url":"https://api.github.com/users/euank/received_events","type":"User","site_admin":false},"assignees":[{"login":"euank","id":2147649,"avatar_url":"https://avatars.githubusercontent.com/u/2147649?v=3","gravatar_id":"","url":"https://api.github.com/users/euank","html_url":"https://github.com/euank","followers_url":"https://api.github.com/users/euank/followers","following_url":"https://api.github.com/users/euank/following{/other_user}","gists_url":"https://api.github.com/users/euank/gists{/gist_id}","starred_url":"https://api.github.com/users/euank/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/euank/subscriptions","organizations_url":"https://api.github.com/users/euank/orgs","repos_url":"https://api.github.com/users/euank/repos","events_url":"https://api.github.com/users/euank/events{/privacy}","received_events_url":"https://api.github.com/users/euank/received_events","type":"User","site_admin":false},{"login":"yifan-gu","id":3278588,"avatar_url":"https://avatars.githubusercontent.com/u/3278588?v=3","gravatar_id":"","url":"https://api.github.com/users/yifan-gu","html_url":"https://github.com/yifan-gu","followers_url":"https://api.github.com/users/yifan-gu/followers","following_url":"https://api.github.com/users/yifan-gu/following{/other_user}","gists_url":"https://api.github.com/users/yifan-gu/gists{/gist_id}","starred_url":"https://api.github.com/users/yifan-gu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yifan-gu/subscriptions","organizations_url":"https://api.github.com/users/yifan-gu/orgs","repos_url":"https://api.github.com/users/yifan-gu/repos","events_url":"https://api.github.com/users/yifan-gu/events{/privacy}","received_events_url":"https://api.github.com/users/yifan-gu/received_events","type":"User","site_admin":false},{"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/31847/commits","review_comments_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/31847/comments","review_comment_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments{/number}","comments_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/31847/comments","statuses_url":"https://api.github.com/repos/kubernetes/kubernetes/statuses/d1a3784628c12b5611ab4ebea10799705eae2e69","head":{"label":"feiskyer:syncpod","ref":"syncpod","sha":"d1a3784628c12b5611ab4ebea10799705eae2e69","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-09-02T05:18:36Z","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":321691,"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":"b03de0abe72667d3b30a31b553dc5bed31d4155c","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-09-07T01:02:08Z","pushed_at":"2016-09-07T01:00:21Z","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":558128,"stargazers_count":16559,"watchers_count":16559,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":5343,"mirror_url":null,"open_issues_count":4411,"forks":5343,"open_issues":4411,"watchers":16559,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/31847"},"html":{"href":"https://github.com/kubernetes/kubernetes/pull/31847"},"issue":{"href":"https://api.github.com/repos/kubernetes/kubernetes/issues/31847"},"comments":{"href":"https://api.github.com/repos/kubernetes/kubernetes/issues/31847/comments"},"review_comments":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/31847/comments"},"review_comment":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/31847/commits"},"statuses":{"href":"https://api.github.com/repos/kubernetes/kubernetes/statuses/d1a3784628c12b5611ab4ebea10799705eae2e69"}}}}
{"actor":{"display_login":"euank"}}