{"action":"created","comment":{"url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/comments/29469650","id":29469650,"diff_hunk":"@@ -0,0 +1,225 @@\n+/*\n+Copyright 2015 Google Inc. All rights reserved.\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 rkt\n+\n+import (\n+\t\"strconv\"\n+\t\"strings\"\n+\n+\t\"github.com/GoogleCloudPlatform/kubernetes/pkg/api\"\n+\tkubecontainer \"github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/container\"\n+\t\"github.com/GoogleCloudPlatform/kubernetes/pkg/util\"\n+\t\"github.com/golang/glog\"\n+)\n+\n+// rkt pod state.\n+// TODO(yifan): Use exported definition in rkt.\n+const (\n+\tEmbryo         = \"embryo\"\n+\tPreparing      = \"preparing\"\n+\tAbortedPrepare = \"aborted prepare\"\n+\tPrepared       = \"prepared\"\n+\tRunning        = \"running\"\n+\tDeleting       = \"deleting\" // This covers pod.isExitedDeleting and pod.isDeleting.\n+\tExited         = \"exited\"   // This covers pod.isExited and pod.isExitedGarbage.\n+\tGarbage        = \"garbage\"\n+)\n+\n+// podInfo is the internal type that represents the state of\n+// the rkt pod.\n+type podInfo struct {\n+\t// The state of the pod, e.g. Embryo, Preparing.\n+\tstate string\n+\t// The ip of the pod. IPv4 for now.\n+\tip string\n+\t// The pid of the init process in the pod.\n+\tpid int\n+\t// A map from image hashes to exit codes.\n+\t// TODO(yifan): Should be appName to exit code in the future.\n+\texitCodes map[string]int\n+}\n+\n+func newPodInfo() *podInfo {\n+\treturn &podInfo{pid: -1, exitCodes: make(map[string]int)}\n+}\n+\n+// parseStatus parses the result of 'rkt status' into podInfo.\n+func (p *podInfo) parseStatus(status []string) error {\n+\tfor _, line := range status {\n+\t\ttuples := strings.SplitN(line, \"=\", 2)\n+\t\tif len(tuples) != 2 {\n+\t\t\tglog.Warningf(\"Invalid status line: %q\", line)\n+\t\t\tcontinue\n+\t\t}\n+\t\tswitch tuples[0] {\n+\t\tcase \"state\":\n+\t\t\t// TODO(yifan): Parse the status here. This requires more details in\n+\t\t\t// the rkt status, (e.g. started time, image name, etc).\n+\t\t\tp.state = tuples[1]\n+\t\tcase \"networks\":\n+\t\t\tp.ip = getIPFromNetworkInfo(tuples[1])\n+\t\tcase \"pid\":\n+\t\t\tpid, err := strconv.Atoi(tuples[1])\n+\t\t\tif err != nil {\n+\t\t\t\tglog.Errorf(\"Cannot parse pid %q: %v\", tuples[1], err)\n+\t\t\t\tcontinue\n+\t\t\t}\n+\t\t\tp.pid = pid\n+\t\t}\n+\t\tif strings.HasPrefix(tuples[0], \"sha512\") {\n+\t\t\texitcode, err := strconv.Atoi(tuples[1])\n+\t\t\tif err != nil {\n+\t\t\t\tglog.Errorf(\"Cannot parse exit code %q: %v\", tuples[1], err)\n+\t\t\t} else {\n+\t\t\t\tp.exitCodes[tuples[0]] = exitcode\n+\t\t\t}\n+\t\t}\n+\t}\n+\treturn nil\n+}\n+\n+// getIPFromNetworkInfo returns the IP of a pod by parsing the network info.\n+// The network info looks like this:\n+//\n+// default:ip4=172.16.28.3, database:ip4=172.16.28.42\n+//\n+func getIPFromNetworkInfo(networkInfo string) string {\n+\tparts := strings.Split(networkInfo, \",\")\n+\n+\tfor _, part := range parts {\n+\t\tif strings.HasPrefix(part, \"default:\") {\n+\t\t\ttuples := strings.Split(part, \"=\")\n+\t\t\tif len(tuples) == 2 {\n+\t\t\t\treturn tuples[1]\n+\t\t\t}\n+\t\t}\n+\t}\n+\treturn \"\"\n+}\n+\n+// getContainerStatus creates the api.containerStatus of a container from the podInfo.\n+// TODO(yifan): Get more detailed info such as Image, ImageID, etc.\n+func (p *podInfo) getContainerStatus(container *kubecontainer.Container) api.ContainerStatus {\n+\tvar status api.ContainerStatus\n+\tstatus.Name = container.Name\n+\tstatus.Image = container.Image\n+\n+\tcontainerID, _ := parseContainerID(string(container.ID))\n+\tstatus.ImageID = containerID.imageID\n+\n+\tswitch p.state {\n+\tcase Running:\n+\t\t// TODO(yifan): Get StartedAt.\n+\t\tstatus.State = api.ContainerState{\n+\t\t\tRunning: &api.ContainerStateRunning{\n+\t\t\t\tStartedAt: util.Unix(container.Created, 0),\n+\t\t\t},\n+\t\t}\n+\tcase Embryo, Preparing, Prepared:\n+\t\tstatus.State = api.ContainerState{Waiting: &api.ContainerStateWaiting{}}\n+\tcase AbortedPrepare, Deleting, Exited, Garbage:\n+\t\texitCode, ok := p.exitCodes[status.ImageID]\n+\t\tif !ok {\n+\t\t\tglog.Warningf(\"rkt: Cannot get exit code for container %v\", container)\n+\t\t}\n+\t\texitCode = -1\n+\t\tstatus.State = api.ContainerState{\n+\t\t\tTermination: &api.ContainerStateTerminated{\n+\t\t\t\tExitCode:  exitCode,\n+\t\t\t\tStartedAt: util.Unix(container.Created, 0),\n+\t\t\t},\n+\t\t}\n+\tdefault:\n+\t\tglog.Warningf(\"rkt: Unknown pod state: %q\", p.state)\n+\t}\n+\treturn status\n+}\n+\n+// toPodStatus converts a podInfo type into an api.PodStatus type.\n+func (p *podInfo) toPodStatus(pod *kubecontainer.Pod) api.PodStatus {\n+\tvar status api.PodStatus\n+\tstatus.PodIP = p.ip\n+\t// For now just make every container's state the same as the pod.\n+\tfor _, container := range pod.Containers {\n+\t\tstatus.ContainerStatuses = append(status.ContainerStatuses, p.getContainerStatus(container))\n+\t}\n+\treturn status\n+}\n+\n+// splitLineByTab breaks a line by tabs, and trims the leading and tailing spaces.\n+// Not using strings.Split because there could be multiple tabs.\n+func splitLineByTab(line string) []string {\n+\tvar result []string\n+\tstart := 0\n+\n+\tline = strings.TrimSpace(line)\n+\tfor i := 0; i < len(line); i++ {\n+\t\tif line[i] == '\\t' {\n+\t\t\tresult = append(result, line[start:i])\n+\t\t\tfor line[i] == '\\t' {\n+\t\t\t\ti++\n+\t\t\t}\n+\t\t\tstart = i\n+\t\t}\n+\t}\n+\tresult = append(result, line[start:])\n+\treturn result\n+}\n+\n+// getPodInfos returns a map of [pod-uuid]:*podInfo\n+func (r *Runtime) getPodInfos() (map[string]*podInfo, error) {\n+\toutput, err := r.runCommand(\"list\", \"--no-legend\", \"--full\")\n+\tif err != nil {\n+\t\treturn nil, err\n+\t}\n+\n+\tif len(output) == 0 {\n+\t\t// No pods is running.","path":"pkg/kubelet/rkt/pod_info.go","position":191,"original_position":191,"commit_id":"74f1452075d2080dde5288830dcfb09e5792fc93","original_commit_id":"74f1452075d2080dde5288830dcfb09e5792fc93","user":{"login":"vmarmol","id":985208,"avatar_url":"https://avatars.githubusercontent.com/u/985208?v=3","gravatar_id":"","url":"https://api.github.com/users/vmarmol","html_url":"https://github.com/vmarmol","followers_url":"https://api.github.com/users/vmarmol/followers","following_url":"https://api.github.com/users/vmarmol/following{/other_user}","gists_url":"https://api.github.com/users/vmarmol/gists{/gist_id}","starred_url":"https://api.github.com/users/vmarmol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vmarmol/subscriptions","organizations_url":"https://api.github.com/users/vmarmol/orgs","repos_url":"https://api.github.com/users/vmarmol/repos","events_url":"https://api.github.com/users/vmarmol/events{/privacy}","received_events_url":"https://api.github.com/users/vmarmol/received_events","type":"User","site_admin":false},"body":"typo: s/is/are/","created_at":"2015-04-30T20:58:50Z","updated_at":"2015-04-30T20:58:50Z","html_url":"https://github.com/GoogleCloudPlatform/kubernetes/pull/7555#discussion_r29469650","pull_request_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/7555","_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/comments/29469650"},"html":{"href":"https://github.com/GoogleCloudPlatform/kubernetes/pull/7555#discussion_r29469650"},"pull_request":{"href":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/7555"}}},"pull_request":{"url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/7555","id":34432274,"html_url":"https://github.com/GoogleCloudPlatform/kubernetes/pull/7555","diff_url":"https://github.com/GoogleCloudPlatform/kubernetes/pull/7555.diff","patch_url":"https://github.com/GoogleCloudPlatform/kubernetes/pull/7555.patch","issue_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/7555","number":7555,"state":"open","locked":false,"title":"Rkt pod info","user":{"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},"body":"@vmarmol @dchen1107 @jonboulle @bakins\r\n\r\nAnother shot following #7465 \r\n\r\nThis adds podInfo, which represents the rkt pod's state, and is used for reporting pod/container status to kubelet.\r\n\r\nThink we have about three more PRs after this for implementing syncPod for rkt!","created_at":"2015-04-30T06:41:32Z","updated_at":"2015-04-30T20:58:50Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3e53182c5e95637e7c02917d6952f3dbc1417c00","assignee":{"login":"vmarmol","id":985208,"avatar_url":"https://avatars.githubusercontent.com/u/985208?v=3","gravatar_id":"","url":"https://api.github.com/users/vmarmol","html_url":"https://github.com/vmarmol","followers_url":"https://api.github.com/users/vmarmol/followers","following_url":"https://api.github.com/users/vmarmol/following{/other_user}","gists_url":"https://api.github.com/users/vmarmol/gists{/gist_id}","starred_url":"https://api.github.com/users/vmarmol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vmarmol/subscriptions","organizations_url":"https://api.github.com/users/vmarmol/orgs","repos_url":"https://api.github.com/users/vmarmol/repos","events_url":"https://api.github.com/users/vmarmol/events{/privacy}","received_events_url":"https://api.github.com/users/vmarmol/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/7555/commits","review_comments_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/7555/comments","review_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/comments{/number}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/7555/comments","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/statuses/74f1452075d2080dde5288830dcfb09e5792fc93","head":{"label":"yifan-gu:rkt_pod_info","ref":"rkt_pod_info","sha":"74f1452075d2080dde5288830dcfb09e5792fc93","user":{"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},"repo":{"id":21830645,"name":"kubernetes","full_name":"yifan-gu/kubernetes","owner":{"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},"private":false,"html_url":"https://github.com/yifan-gu/kubernetes","description":"Container Cluster Manager","fork":true,"url":"https://api.github.com/repos/yifan-gu/kubernetes","forks_url":"https://api.github.com/repos/yifan-gu/kubernetes/forks","keys_url":"https://api.github.com/repos/yifan-gu/kubernetes/keys{/key_id}","collaborators_url":"https://api.github.com/repos/yifan-gu/kubernetes/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/yifan-gu/kubernetes/teams","hooks_url":"https://api.github.com/repos/yifan-gu/kubernetes/hooks","issue_events_url":"https://api.github.com/repos/yifan-gu/kubernetes/issues/events{/number}","events_url":"https://api.github.com/repos/yifan-gu/kubernetes/events","assignees_url":"https://api.github.com/repos/yifan-gu/kubernetes/assignees{/user}","branches_url":"https://api.github.com/repos/yifan-gu/kubernetes/branches{/branch}","tags_url":"https://api.github.com/repos/yifan-gu/kubernetes/tags","blobs_url":"https://api.github.com/repos/yifan-gu/kubernetes/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/yifan-gu/kubernetes/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/yifan-gu/kubernetes/git/refs{/sha}","trees_url":"https://api.github.com/repos/yifan-gu/kubernetes/git/trees{/sha}","statuses_url":"https://api.github.com/repos/yifan-gu/kubernetes/statuses/{sha}","languages_url":"https://api.github.com/repos/yifan-gu/kubernetes/languages","stargazers_url":"https://api.github.com/repos/yifan-gu/kubernetes/stargazers","contributors_url":"https://api.github.com/repos/yifan-gu/kubernetes/contributors","subscribers_url":"https://api.github.com/repos/yifan-gu/kubernetes/subscribers","subscription_url":"https://api.github.com/repos/yifan-gu/kubernetes/subscription","commits_url":"https://api.github.com/repos/yifan-gu/kubernetes/commits{/sha}","git_commits_url":"https://api.github.com/repos/yifan-gu/kubernetes/git/commits{/sha}","comments_url":"https://api.github.com/repos/yifan-gu/kubernetes/comments{/number}","issue_comment_url":"https://api.github.com/repos/yifan-gu/kubernetes/issues/comments{/number}","contents_url":"https://api.github.com/repos/yifan-gu/kubernetes/contents/{+path}","compare_url":"https://api.github.com/repos/yifan-gu/kubernetes/compare/{base}...{head}","merges_url":"https://api.github.com/repos/yifan-gu/kubernetes/merges","archive_url":"https://api.github.com/repos/yifan-gu/kubernetes/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/yifan-gu/kubernetes/downloads","issues_url":"https://api.github.com/repos/yifan-gu/kubernetes/issues{/number}","pulls_url":"https://api.github.com/repos/yifan-gu/kubernetes/pulls{/number}","milestones_url":"https://api.github.com/repos/yifan-gu/kubernetes/milestones{/number}","notifications_url":"https://api.github.com/repos/yifan-gu/kubernetes/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/yifan-gu/kubernetes/labels{/name}","releases_url":"https://api.github.com/repos/yifan-gu/kubernetes/releases{/id}","created_at":"2014-07-14T18:29:14Z","updated_at":"2015-04-03T18:28:44Z","pushed_at":"2015-04-30T20:44:36Z","git_url":"git://github.com/yifan-gu/kubernetes.git","ssh_url":"git@github.com:yifan-gu/kubernetes.git","clone_url":"https://github.com/yifan-gu/kubernetes.git","svn_url":"https://github.com/yifan-gu/kubernetes","homepage":null,"size":50402,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"GoogleCloudPlatform:master","ref":"master","sha":"2c381a6f6f377ef0389d9dd662ba01f99a3d0856","user":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"repo":{"id":20580498,"name":"kubernetes","full_name":"GoogleCloudPlatform/kubernetes","owner":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/GoogleCloudPlatform/kubernetes","description":"Container Cluster Manager from Google","fork":false,"url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes","forks_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/forks","keys_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/teams","hooks_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/hooks","issue_events_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/events{/number}","events_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/events","assignees_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/assignees{/user}","branches_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/branches{/branch}","tags_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/tags","blobs_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/git/refs{/sha}","trees_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/statuses/{sha}","languages_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/languages","stargazers_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/stargazers","contributors_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/contributors","subscribers_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/subscribers","subscription_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/subscription","commits_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/commits{/sha}","git_commits_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/git/commits{/sha}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/comments{/number}","issue_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/comments{/number}","contents_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/contents/{+path}","compare_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/merges","archive_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/downloads","issues_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues{/number}","pulls_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls{/number}","milestones_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/milestones{/number}","notifications_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/labels{/name}","releases_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/releases{/id}","created_at":"2014-06-06T22:56:04Z","updated_at":"2015-04-30T20:46:54Z","pushed_at":"2015-04-30T20:57:34Z","git_url":"git://github.com/GoogleCloudPlatform/kubernetes.git","ssh_url":"git@github.com:GoogleCloudPlatform/kubernetes.git","clone_url":"https://github.com/GoogleCloudPlatform/kubernetes.git","svn_url":"https://github.com/GoogleCloudPlatform/kubernetes","homepage":"http://kubernetes.io","size":212904,"stargazers_count":7421,"watchers_count":7421,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":1488,"mirror_url":null,"open_issues_count":984,"forks":1488,"open_issues":984,"watchers":7421,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/7555"},"html":{"href":"https://github.com/GoogleCloudPlatform/kubernetes/pull/7555"},"issue":{"href":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/7555"},"comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/7555/comments"},"review_comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/7555/comments"},"review_comment":{"href":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/7555/commits"},"statuses":{"href":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/statuses/74f1452075d2080dde5288830dcfb09e5792fc93"}}}}