{"action":"created","comment":{"url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments/62571216","id":62571216,"diff_hunk":"@@ -0,0 +1,542 @@\n+<!-- BEGIN MUNGE: UNVERSIONED_WARNING -->\n+\n+<!-- BEGIN STRIP_FOR_RELEASE -->\n+\n+<img src=\"http://kubernetes.io/img/warning.png\" alt=\"WARNING\"\n+     width=\"25\" height=\"25\">\n+<img src=\"http://kubernetes.io/img/warning.png\" alt=\"WARNING\"\n+     width=\"25\" height=\"25\">\n+<img src=\"http://kubernetes.io/img/warning.png\" alt=\"WARNING\"\n+     width=\"25\" height=\"25\">\n+<img src=\"http://kubernetes.io/img/warning.png\" alt=\"WARNING\"\n+     width=\"25\" height=\"25\">\n+<img src=\"http://kubernetes.io/img/warning.png\" alt=\"WARNING\"\n+     width=\"25\" height=\"25\">\n+\n+<h2>PLEASE NOTE: This document applies to the HEAD of the source tree</h2>\n+\n+If you are using a released version of Kubernetes, you should refer to\n+the docs that go with that version.\n+\n+Documentation for other releases can be found at\n+[releases.k8s.io](http://releases.k8s.io).\n+</strong>\n+--\n+\n+<!-- END STRIP_FOR_RELEASE -->\n+\n+<!-- END MUNGE: UNVERSIONED_WARNING -->\n+\n+# Downward API for resource limits and requests\n+\n+## Background\n+\n+Currently the downward API (via environment variables and volume plugin) only\n+supports exposing a Pod's name, namespace, annotations, labels and its IP\n+([see details](http://kubernetes.io/docs/user-guide/downward-api/)). This\n+document explains the need and design to extend them to expose resources\n+(e.g. cpu, memory) limits and requests.\n+\n+## Motivation\n+\n+Software applications require configuration to work optimally with the resources they're allowed to use.\n+Exposing the requested and limited amounts of available resources inside containers will allow\n+these applications to be configured more easily. Although docker already\n+exposes some of this information inside containers, the downward API helps\n+exposing this information in a runtime-agnostic manner in Kubernetes.\n+\n+## Design\n+\n+This is mostly driven by the discussion in [this issue](https://github.com/kubernetes/kubernetes/issues/9473).\n+There are three approaches discussed in this document to obtain resources limits\n+and requests to be exposed as environment variables and volumes inside\n+containers:\n+\n+1. The first approach requires users to specify full json path selectors\n+in which selectors are relative to the pod spec. The benefit of this\n+approach is to specify pod level resources, and since containers are\n+also part of a pod spec, it can be used to specify container level\n+resources too.\n+\n+2. The second approach requires specifying partial json path selectors\n+which are relative to the container spec. This approach helps\n+in retrieving a container specific resource limits and requests, and at\n+the same time, it is simpler to specify than full json path selectors.\n+\n+3. In this approach, users specify fixed strings to retrieve\n+resources limits and requests and do not specify any json path\n+selectors. This approach is similar to the existing downward API\n+implementation approach. The advantages of this approach are that it is\n+simpler to specify that the first two, and does not require any type of\n+conversion between internal and versioned objects or json selectors as\n+discussed below.\n+\n+Before discussing a bit more about merits of each approach, here is a\n+brief discussion about json path selectors and some implications related\n+to their use.\n+\n+#### JSONpath selectors\n+\n+Versioned objects in kubernetes have json tags as part of their golang fields.\n+Currently, objects in the internal API have json tags, but it is planned that\n+these will eventually be removed (see [3933](https://github.com/kubernetes/kubernetes/issues/3933)\n+for discussion). So for discussion in this proposal, we assume that\n+internal objects do not have json tags. In the first two approaches\n+(full and partial json selectors), when a user creates a pod and its\n+containers, the user specifies a json path selector in the pod's\n+spec to retrieve values of its limits and requests. The selector\n+is composed of json tags similar to json paths used with kubectl\n+([json](http://kubernetes.io/docs/user-guide/jsonpath/)). This proposal\n+uses kubernetes' json path library to process the selectors to retrieve\n+the values. As kubelet operates on internal objects (without json tags),\n+and the selectors are part of versioned objects, retrieving values of\n+the limits and requests can be handled using these two solutions:\n+\n+1. By converting an internal object to versioned obejct, and then using\n+the json path library to retrieve the values from the versioned object\n+by processing the selector.\n+\n+2. By converting a json selector of the versioned objects to internal\n+object's golang expression and then using the json path library to\n+retrieve the values from the internal object by processing the golang\n+expression. However, converting a json selector of the versioned objects\n+to internal object's golang expression will still require an instance\n+of the versioned object, so it seems more work from the first solution\n+unless there is another way without requiring the versioned object.\n+\n+So there is a one time conversion cost associated with the first (full\n+path) and second (partial path) approaches, whereas the third approach\n+(no selectors) does not require any such conversion and can directly\n+work on internal objects. If we want to avoid conversion cost and to\n+have implementation simplicity, my opinion is that no selector approach\n+is relatively easiest to implement to expose limits and requests with\n+least impact on existing functionality.\n+\n+To summarize merits/demerits of each approach:\n+\n+|Approach | Scope | Conversion cost | JSON selectors | Future extension|\n+| ---------- | ------------------- | -------------------| ------------------- | ------------------- |\n+|Full selectors | Pod/Container | Yes | Yes | Possible |\n+|Partial selectors | Container | Yes | Yes | Possible |\n+|No selectors | Container | No | No | Possible|\n+\n+Note: Please note that pod resources can always be accessed using existing `type ObjectFieldSelector` object in conjunction with partial selectors and no selectors approaches.\n+\n+### API with full JSONpath selectors\n+\n+Full json path selectors specify the complete path to the resources\n+limits and requests relative to pod spec.\n+\n+#### Environment variables\n+\n+This table shows how selectors can be used for various requests and\n+limits to be exposed as environment variables. Environment variable names\n+are examples only and not necessarily as specified, and the selectors do not\n+have to start with dot.\n+\n+| Env Var Name | Selector |\n+| ---- | ------------------- |\n+| CPU_LIMIT | spec.containers[?(@.name==\"container-name\")].resources.limits.cpu|\n+| MEMORY_LIMIT | spec.containers[?(@.name==\"container-name\")].resources.limits.memory|\n+| CPU_REQUEST | spec.containers[?(@.name==\"container-name\")].resources.requests.cpu|\n+| MEMORY_REQUEST | spec.containers[?(@.name==\"container-name\")].resources.requests.memory |\n+\n+#### Volume plugin\n+\n+This table shows how selectors can be used for various requests and\n+limits to be exposed as volumes. The path names are examples only and\n+not necessarily as specified, and the selectors do not have to start with dot.\n+\n+\n+| Path | Selector |\n+| ---- | ------------------- |\n+| cpu_limit | spec.containers[?(@.name==\"container-name\")].resources.limits.cpu|\n+| memory_limit| spec.containers[?(@.name==\"container-name\")].resources.limits.memory|\n+| cpu_request | spec.containers[?(@.name==\"container-name\")].resources.requests.cpu|\n+| memory_request |spec.containers[?(@.name==\"container-name\")].resources.requests.memory|\n+\n+Volumes are pod scoped, so a selector should be specified with a\n+particular container name.\n+\n+Full json path selectors will use existing `type ObjectFieldSelector`\n+to extend the current implementation for resources requests and limits.\n+\n+```\n+// ObjectFieldSelector selects an APIVersioned field of an object.\n+type ObjectFieldSelector struct {\n+        APIVersion string `json:\"apiVersion\"`\n+        // Required: Path of the field to select in the specified API version\n+        FieldPath string `json:\"fieldPath\"`\n+}\n+```\n+\n+#### Examples\n+These examples show how to use full selectors with environment variables and volume plugin.\n+\n+```\n+apiVersion: v1\n+kind: Pod\n+metadata:\n+  name: dapi-test-pod\n+spec:\n+  containers:\n+    - name: test-container\n+      image: gcr.io/google_containers/busybox\n+      command: [ \"/bin/sh\",\"-c\", \"env\" ]\n+      resources:\n+        requests:\n+          memory: \"64Mi\"\n+          cpu: \"250m\"\n+        limits:\n+          memory: \"128Mi\"\n+          cpu: \"500m\"\n+      env:\n+        - name: CPU_LIMIT\n+          valueFrom:\n+            fieldRef:\n+              fieldPath: spec.containers[?(@.name==\"container-name\")].resources.limits.cpu\n+```\n+\n+```\n+apiVersion: v1\n+kind: Pod\n+metadata:\n+  name: kubernetes-downwardapi-volume-example\n+spec:\n+  containers:\n+    - name: client-container\n+      image: gcr.io/google_containers/busybox\n+      command: [\"sh\", \"-c\", \"while true; do if [[ -e /etc/labels ]]; then cat /etc/labels; fi; if [[ -e /etc/annotations ]]; then cat /etc/annotations; fi;sleep 5; done\"]\n+      resources:\n+        requests:\n+          memory: \"64Mi\"\n+          cpu: \"250m\"\n+        limits:\n+          memory: \"128Mi\"\n+          cpu: \"500m\"\n+      volumeMounts:\n+        - name: podinfo\n+          mountPath: /etc\n+          readOnly: false\n+  volumes:\n+    - name: podinfo\n+      downwardAPI:\n+        items:\n+          - path: \"cpu_limit\"\n+            fieldRef:\n+              fieldPath: spec.containers[?(@.name==\"container-name\")].resources.limits.cpu\n+```\n+\n+#### Validations\n+\n+For APIs with full json path selectors, verify that selectors are\n+valid relative to pod spec.\n+\n+\n+### API with partial JSONpath selectors\n+\n+Partial json path selectors specify paths to resources limits and requests\n+relative to the container spec. These will be implemented by introducing a\n+`ContainerFieldSelector` (json: `containerFieldRef`) to extend the current\n+implementation for `type DownwardAPIVolumeFile struct` and `type EnvVarSource struct`.\n+\n+```\n+// ContainerFieldSelector selects an APIVersioned field of an object.\n+type ContainerFieldSelector struct {\n+        APIVersion string `json:\"apiVersion\"`\n+        // Container name\n+        Name string `json:\"containerName,omitempty\"`\n+        // Required: Path of the field to select in the specified API version\n+        FieldPath string `json:\"fieldPath\"`\n+}\n+\n+// Represents a single file containing information from the downward API\n+type DownwardAPIVolumeFile struct {\n+     // Required: Path is  the relative path name of the file to be created.\n+     Path string `json:\"path\"`\n+     // Selects a field of the pod: only annotations, labels, name and\n+     // namespace are supported.\n+     FieldRef *ObjectFieldSelector `json:\"fieldRef, omitempty\"`\n+     // Selects a field of the container: only resources limits and requests\n+     // (cpu, memory) are currently supported.","path":"docs/design/downward_api_resources_limits_requests.md","position":261,"original_position":261,"commit_id":"b9afa5e3d62793947a10670e8c93636c2f07bb41","original_commit_id":"b9afa5e3d62793947a10670e8c93636c2f07bb41","user":{"login":"bgrant0607","id":7725777,"avatar_url":"https://avatars.githubusercontent.com/u/7725777?v=3","gravatar_id":"","url":"https://api.github.com/users/bgrant0607","html_url":"https://github.com/bgrant0607","followers_url":"https://api.github.com/users/bgrant0607/followers","following_url":"https://api.github.com/users/bgrant0607/following{/other_user}","gists_url":"https://api.github.com/users/bgrant0607/gists{/gist_id}","starred_url":"https://api.github.com/users/bgrant0607/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bgrant0607/subscriptions","organizations_url":"https://api.github.com/users/bgrant0607/orgs","repos_url":"https://api.github.com/users/bgrant0607/repos","events_url":"https://api.github.com/users/bgrant0607/events{/privacy}","received_events_url":"https://api.github.com/users/bgrant0607/received_events","type":"User","site_admin":false},"body":"Should specify the correct syntax in the documentation comment (resources.limits.cpu, etc.).","created_at":"2016-05-09T20:55:09Z","updated_at":"2016-05-09T20:55:09Z","html_url":"https://github.com/kubernetes/kubernetes/pull/24051#discussion_r62571216","pull_request_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/24051","_links":{"self":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments/62571216"},"html":{"href":"https://github.com/kubernetes/kubernetes/pull/24051#discussion_r62571216"},"pull_request":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/24051"}}},"pull_request":{"url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/24051","id":65820901,"html_url":"https://github.com/kubernetes/kubernetes/pull/24051","diff_url":"https://github.com/kubernetes/kubernetes/pull/24051.diff","patch_url":"https://github.com/kubernetes/kubernetes/pull/24051.patch","issue_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/24051","number":24051,"state":"open","locked":false,"title":"Downward API proposal for resources (cpu, memory) limits and requests","user":{"login":"aveshagarwal","id":3596412,"avatar_url":"https://avatars.githubusercontent.com/u/3596412?v=3","gravatar_id":"","url":"https://api.github.com/users/aveshagarwal","html_url":"https://github.com/aveshagarwal","followers_url":"https://api.github.com/users/aveshagarwal/followers","following_url":"https://api.github.com/users/aveshagarwal/following{/other_user}","gists_url":"https://api.github.com/users/aveshagarwal/gists{/gist_id}","starred_url":"https://api.github.com/users/aveshagarwal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aveshagarwal/subscriptions","organizations_url":"https://api.github.com/users/aveshagarwal/orgs","repos_url":"https://api.github.com/users/aveshagarwal/repos","events_url":"https://api.github.com/users/aveshagarwal/events{/privacy}","received_events_url":"https://api.github.com/users/aveshagarwal/received_events","type":"User","site_admin":false},"body":"Proposal to address #9473\r\nThis PR proposes three approaches to expose values of resource limits and requests as env vars and volumes.This proposal has details about merits and demerits of each approach, and I am looking for community feedback regarding which one (or may more than one) we would like to go with. Also would like to know if there is any other approach.","created_at":"2016-04-08T17:36:20Z","updated_at":"2016-05-09T20:55:09Z","closed_at":null,"merged_at":null,"merge_commit_sha":"957a256a70034effccabd0d6b855a1b205cd2d26","assignee":{"login":"bgrant0607","id":7725777,"avatar_url":"https://avatars.githubusercontent.com/u/7725777?v=3","gravatar_id":"","url":"https://api.github.com/users/bgrant0607","html_url":"https://github.com/bgrant0607","followers_url":"https://api.github.com/users/bgrant0607/followers","following_url":"https://api.github.com/users/bgrant0607/following{/other_user}","gists_url":"https://api.github.com/users/bgrant0607/gists{/gist_id}","starred_url":"https://api.github.com/users/bgrant0607/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bgrant0607/subscriptions","organizations_url":"https://api.github.com/users/bgrant0607/orgs","repos_url":"https://api.github.com/users/bgrant0607/repos","events_url":"https://api.github.com/users/bgrant0607/events{/privacy}","received_events_url":"https://api.github.com/users/bgrant0607/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/24051/commits","review_comments_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/24051/comments","review_comment_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments{/number}","comments_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/24051/comments","statuses_url":"https://api.github.com/repos/kubernetes/kubernetes/statuses/b9afa5e3d62793947a10670e8c93636c2f07bb41","head":{"label":"aveshagarwal:master-downward-api-resources-limits-requests","ref":"master-downward-api-resources-limits-requests","sha":"b9afa5e3d62793947a10670e8c93636c2f07bb41","user":{"login":"aveshagarwal","id":3596412,"avatar_url":"https://avatars.githubusercontent.com/u/3596412?v=3","gravatar_id":"","url":"https://api.github.com/users/aveshagarwal","html_url":"https://github.com/aveshagarwal","followers_url":"https://api.github.com/users/aveshagarwal/followers","following_url":"https://api.github.com/users/aveshagarwal/following{/other_user}","gists_url":"https://api.github.com/users/aveshagarwal/gists{/gist_id}","starred_url":"https://api.github.com/users/aveshagarwal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aveshagarwal/subscriptions","organizations_url":"https://api.github.com/users/aveshagarwal/orgs","repos_url":"https://api.github.com/users/aveshagarwal/repos","events_url":"https://api.github.com/users/aveshagarwal/events{/privacy}","received_events_url":"https://api.github.com/users/aveshagarwal/received_events","type":"User","site_admin":false},"repo":{"id":32509925,"name":"kubernetes","full_name":"aveshagarwal/kubernetes","owner":{"login":"aveshagarwal","id":3596412,"avatar_url":"https://avatars.githubusercontent.com/u/3596412?v=3","gravatar_id":"","url":"https://api.github.com/users/aveshagarwal","html_url":"https://github.com/aveshagarwal","followers_url":"https://api.github.com/users/aveshagarwal/followers","following_url":"https://api.github.com/users/aveshagarwal/following{/other_user}","gists_url":"https://api.github.com/users/aveshagarwal/gists{/gist_id}","starred_url":"https://api.github.com/users/aveshagarwal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aveshagarwal/subscriptions","organizations_url":"https://api.github.com/users/aveshagarwal/orgs","repos_url":"https://api.github.com/users/aveshagarwal/repos","events_url":"https://api.github.com/users/aveshagarwal/events{/privacy}","received_events_url":"https://api.github.com/users/aveshagarwal/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/aveshagarwal/kubernetes","description":"Container Cluster Manager from Google","fork":true,"url":"https://api.github.com/repos/aveshagarwal/kubernetes","forks_url":"https://api.github.com/repos/aveshagarwal/kubernetes/forks","keys_url":"https://api.github.com/repos/aveshagarwal/kubernetes/keys{/key_id}","collaborators_url":"https://api.github.com/repos/aveshagarwal/kubernetes/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/aveshagarwal/kubernetes/teams","hooks_url":"https://api.github.com/repos/aveshagarwal/kubernetes/hooks","issue_events_url":"https://api.github.com/repos/aveshagarwal/kubernetes/issues/events{/number}","events_url":"https://api.github.com/repos/aveshagarwal/kubernetes/events","assignees_url":"https://api.github.com/repos/aveshagarwal/kubernetes/assignees{/user}","branches_url":"https://api.github.com/repos/aveshagarwal/kubernetes/branches{/branch}","tags_url":"https://api.github.com/repos/aveshagarwal/kubernetes/tags","blobs_url":"https://api.github.com/repos/aveshagarwal/kubernetes/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/aveshagarwal/kubernetes/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/aveshagarwal/kubernetes/git/refs{/sha}","trees_url":"https://api.github.com/repos/aveshagarwal/kubernetes/git/trees{/sha}","statuses_url":"https://api.github.com/repos/aveshagarwal/kubernetes/statuses/{sha}","languages_url":"https://api.github.com/repos/aveshagarwal/kubernetes/languages","stargazers_url":"https://api.github.com/repos/aveshagarwal/kubernetes/stargazers","contributors_url":"https://api.github.com/repos/aveshagarwal/kubernetes/contributors","subscribers_url":"https://api.github.com/repos/aveshagarwal/kubernetes/subscribers","subscription_url":"https://api.github.com/repos/aveshagarwal/kubernetes/subscription","commits_url":"https://api.github.com/repos/aveshagarwal/kubernetes/commits{/sha}","git_commits_url":"https://api.github.com/repos/aveshagarwal/kubernetes/git/commits{/sha}","comments_url":"https://api.github.com/repos/aveshagarwal/kubernetes/comments{/number}","issue_comment_url":"https://api.github.com/repos/aveshagarwal/kubernetes/issues/comments{/number}","contents_url":"https://api.github.com/repos/aveshagarwal/kubernetes/contents/{+path}","compare_url":"https://api.github.com/repos/aveshagarwal/kubernetes/compare/{base}...{head}","merges_url":"https://api.github.com/repos/aveshagarwal/kubernetes/merges","archive_url":"https://api.github.com/repos/aveshagarwal/kubernetes/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/aveshagarwal/kubernetes/downloads","issues_url":"https://api.github.com/repos/aveshagarwal/kubernetes/issues{/number}","pulls_url":"https://api.github.com/repos/aveshagarwal/kubernetes/pulls{/number}","milestones_url":"https://api.github.com/repos/aveshagarwal/kubernetes/milestones{/number}","notifications_url":"https://api.github.com/repos/aveshagarwal/kubernetes/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/aveshagarwal/kubernetes/labels{/name}","releases_url":"https://api.github.com/repos/aveshagarwal/kubernetes/releases{/id}","deployments_url":"https://api.github.com/repos/aveshagarwal/kubernetes/deployments","created_at":"2015-03-19T08:38:39Z","updated_at":"2016-01-13T15:56:58Z","pushed_at":"2016-05-09T20:29:00Z","git_url":"git://github.com/aveshagarwal/kubernetes.git","ssh_url":"git@github.com:aveshagarwal/kubernetes.git","clone_url":"https://github.com/aveshagarwal/kubernetes.git","svn_url":"https://github.com/aveshagarwal/kubernetes","homepage":"http://kubernetes.io","size":188473,"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":"kubernetes:master","ref":"master","sha":"ad86986c8714062c9056af1c949d7894764f26fd","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":"Container Cluster Manager from Google","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-05-09T20:13:33Z","pushed_at":"2016-05-09T20:40:47Z","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":392122,"stargazers_count":14283,"watchers_count":14283,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":4276,"mirror_url":null,"open_issues_count":3564,"forks":4276,"open_issues":3564,"watchers":14283,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/24051"},"html":{"href":"https://github.com/kubernetes/kubernetes/pull/24051"},"issue":{"href":"https://api.github.com/repos/kubernetes/kubernetes/issues/24051"},"comments":{"href":"https://api.github.com/repos/kubernetes/kubernetes/issues/24051/comments"},"review_comments":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/24051/comments"},"review_comment":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/24051/commits"},"statuses":{"href":"https://api.github.com/repos/kubernetes/kubernetes/statuses/b9afa5e3d62793947a10670e8c93636c2f07bb41"}}}}