{"action":"created","comment":{"url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments/86609979","pull_request_review_id":7262930,"id":86609979,"diff_hunk":"@@ -0,0 +1,345 @@\n+<!-- BEGIN MUNGE: UNVERSIONED_WARNING -->\n+\n+<!-- BEGIN STRIP_FOR_RELEASE -->\n+\n+<img src=\"http://kubernetes.io/kubernetes/img/warning.png\" alt=\"WARNING\"\n+     width=\"25\" height=\"25\">\n+<img src=\"http://kubernetes.io/kubernetes/img/warning.png\" alt=\"WARNING\"\n+     width=\"25\" height=\"25\">\n+<img src=\"http://kubernetes.io/kubernetes/img/warning.png\" alt=\"WARNING\"\n+     width=\"25\" height=\"25\">\n+<img src=\"http://kubernetes.io/kubernetes/img/warning.png\" alt=\"WARNING\"\n+     width=\"25\" height=\"25\">\n+<img src=\"http://kubernetes.io/kubernetes/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\n+refer to 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+## Abstract\n+\n+Describes a proposal for a new volume type that can project secrets,\n+configmaps, and downward API items.\n+\n+## Motivation\n+\n+Users often need to build directories that contain multiple types of\n+configuration and secret data. For example, a configuration directory for some\n+software package may contain both config files and credentials. Currently, there\n+is no way to achieve this in Kubernetes without scripting inside of a container.\n+\n+## Constraints and Assumptions\n+\n+1.  The volume types must remain unchanged for backward compatability\n+2.  There will be a new volume type for this proposed functionality, but no\n+    other API changes\n+3.  The new volume type should support atomic updates in the event of an input\n+    change\n+\n+## Use Cases\n+\n+1.  As a user, I want to automatically populate a single volume with the keys\n+    from multiple secrets, configmaps, and with downward API information, so\n+    that I can synthesize a single directory with various sources of\n+    information\n+2.  As a user, I want to populate a single volume with the keys from multiple\n+    secrets, configmaps, and with downward API information, explicitly\n+    specifying paths for each item, so that I can have full control over the\n+    contents of that volume\n+\n+### Populating a single volume without pathing\n+\n+A user should be able to map any combination of resources mentioned above into a\n+single directory. There are plenty of examples of software that needs to be\n+configured both with config files and secret data. The combination of having\n+that data not only accessible, but in the same location provides for an easier\n+user experience.\n+\n+### Populating a single volume with pathing\n+\n+Currently it is possible to define the path within a volume for specific\n+resources. Therefore the same is true for each resource contained within the\n+new single volume.\n+\n+## Current State Overview\n+\n+The only way of utilizing secrets, configmaps, and downward API currently is\n+to access the data using separate mount paths as shown in the volumeMounts\n+section below:\n+\n+```yaml\n+apiVersion: v1\n+kind: Pod\n+metadata:\n+  name: volume-test\n+spec:\n+  containers:\n+  - name: container-test\n+    image: busybox\n+    volumeMounts:\n+    - name: mysecret\n+      mountPath: \"/secrets\"\n+      readOnly: true\n+    - name: podInfo\n+      mountPath: \"/podinfo\"\n+      readOnly: true\n+    - name: config-volume\n+      mountPath: \"/config\"\n+      readOnly: true\n+  volumes:\n+  - name: mysecret\n+    secret:\n+      secretName: jpeeler-db-secret\n+      items:\n+        - key: username\n+          path: my-group/my-username\n+  - name: podInfo\n+    downwardAPI:\n+      items:\n+        - path: \"labels\"\n+          fieldRef:\n+            fieldPath: metadata.labels\n+        - path: \"annotations\"\n+          fieldRef:\n+            fieldPath: metadata.annotations\n+  - name: config-volume\n+    configMap:\n+      name: special-config\n+      items:\n+        - key: special.how\n+          path: path/to/special-key\n+```\n+\n+## Analysis\n+\n+There are several combinations of resources that can be used at once, which\n+all warrant consideration. The combinations are listed with one instance of\n+each resource, but real world usage will support multiple instances of a\n+specific resource too.\n+\n+### ConfigMap + Secrets + Downward API\n+\n+The user wishes to deploy containers with configuration data that includes\n+passwords. An application using these resources could be deploying OpenStack\n+on Kubernetes. The configuration data may need to be assembled differently\n+depending on if the services are going to be used for production or for\n+testing. If a pod is labeled with production or testing, the downward API\n+selector metadata.labels can be used to produce the correct OpenStack configs.\n+\n+### ConfigMap + Secrets\n+\n+Again, the user wishes to deploy containers with configuration data that\n+includes passwords. In this case with MariaDB running, the operator may wish\n+the container to have a ~/.my.cnf file that includes the username and password\n+for the database.\n+\n+### ConfigMap + Downward API\n+\n+In this case, the user wishes to generate a config including the pod’s name\n+(available via the metadata.name selector). This application may then pass the\n+pod name along with requests in order to easily determine the source without\n+using IP tracking.\n+\n+### Secrets + Downward API\n+\n+A user may wish to use a secret as a public key to encrypt the namespace of\n+the pod (available via the metadata.namespace selector). This example may be\n+the most contrived, but perhaps the operator wishes to use the application to\n+deliver the namespace information securely without using an encrypted\n+transport.\n+\n+### Collisions between keys when all keys from a resource are projected\n+\n+In the event of a user not explicitly defining keys for pathing within a volume,\n+there can not be an overlap of resources with the same paths on a given volume.\n+If a conflict does occur, a prefix will be added with the resource type and\n+resource name. An example of this resolution is as follows:\n+\n+```yaml\n+apiVersion: v1\n+kind: Pod\n+metadata:\n+  name: volume-test\n+spec:\n+  containers:\n+  - name: container-test\n+    image: busybox\n+    volumeMounts:\n+    - name: all-in-one\n+      mountPath: \"/system-volume\"\n+      readOnly: true\n+  volumes:\n+  - name: all-in-one\n+    system:\n+      sources:\n+      - secret:\n+          secretName: mysecret\n+      - configMap:\n+          name: myconfigmap\n+```\n+\n+Here the assumption is that the data values configured for each resource is the\n+same. The contents of /system-volume may look like this:\n+\n+``/system-volume/secret-mysecret-very-generic``\n+``/system-volume/configmap-myconfigmap-very-generic``\n+\n+### Collisions between keys when a configured path is identical\n+\n+In the event the user specifies any keys with the same path, the pod spec will\n+not be accepted as valid. Note the specified path for mysecret and myconfigmap\n+are the same:\n+\n+```yaml\n+apiVersion: v1\n+kind: Pod\n+metadata:\n+  name: volume-test\n+spec:\n+  containers:\n+  - name: container-test\n+    image: busybox\n+    volumeMounts:\n+    - name: all-in-one\n+      mountPath: \"/system-volume\"\n+      readOnly: true\n+  volumes:\n+  - name: all-in-one\n+    system:\n+      sources:\n+      - secret:\n+          secretName: mysecret\n+          items:\n+            - key: username\n+              path: my-group/data\n+      - configMap:\n+          name: myconfigmap\n+          items:\n+            - key: config\n+              path: my-group/data\n+```\n+\n+### Collisions when one path is explicit and the other is automatically projected\n+\n+In the event that there is a collision due to a user specified path matching\n+data that is automatically projected, resolution will be done using the same\n+numeric prefix addition as described in the first scenario.","path":"docs/proposals/all-in-one-volume.md","position":237,"original_position":237,"commit_id":"f633f573a7d2f0772fa318409f7f74e4a53761a7","original_commit_id":"f633f573a7d2f0772fa318409f7f74e4a53761a7","user":{"login":"jpeeler","id":834161,"avatar_url":"https://avatars.githubusercontent.com/u/834161?v=3","gravatar_id":"","url":"https://api.github.com/users/jpeeler","html_url":"https://github.com/jpeeler","followers_url":"https://api.github.com/users/jpeeler/followers","following_url":"https://api.github.com/users/jpeeler/following{/other_user}","gists_url":"https://api.github.com/users/jpeeler/gists{/gist_id}","starred_url":"https://api.github.com/users/jpeeler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jpeeler/subscriptions","organizations_url":"https://api.github.com/users/jpeeler/orgs","repos_url":"https://api.github.com/users/jpeeler/repos","events_url":"https://api.github.com/users/jpeeler/events{/privacy}","received_events_url":"https://api.github.com/users/jpeeler/received_events","type":"User","site_admin":false},"body":"Do you mean throw out all the resolution attempts and just make any conflict a validation error?","created_at":"2016-11-04T18:47:46Z","updated_at":"2016-11-04T18:47:47Z","html_url":"https://github.com/kubernetes/kubernetes/pull/35313#discussion_r86609979","pull_request_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/35313","_links":{"self":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments/86609979"},"html":{"href":"https://github.com/kubernetes/kubernetes/pull/35313#discussion_r86609979"},"pull_request":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/35313"}}},"pull_request":{"url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/35313","id":90428168,"html_url":"https://github.com/kubernetes/kubernetes/pull/35313","diff_url":"https://github.com/kubernetes/kubernetes/pull/35313.diff","patch_url":"https://github.com/kubernetes/kubernetes/pull/35313.patch","issue_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/35313","number":35313,"state":"open","locked":false,"title":"Proposal: secret, configmap, downwardAPI all in one volume","user":{"login":"jpeeler","id":834161,"avatar_url":"https://avatars.githubusercontent.com/u/834161?v=3","gravatar_id":"","url":"https://api.github.com/users/jpeeler","html_url":"https://github.com/jpeeler","followers_url":"https://api.github.com/users/jpeeler/followers","following_url":"https://api.github.com/users/jpeeler/following{/other_user}","gists_url":"https://api.github.com/users/jpeeler/gists{/gist_id}","starred_url":"https://api.github.com/users/jpeeler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jpeeler/subscriptions","organizations_url":"https://api.github.com/users/jpeeler/orgs","repos_url":"https://api.github.com/users/jpeeler/repos","events_url":"https://api.github.com/users/jpeeler/events{/privacy}","received_events_url":"https://api.github.com/users/jpeeler/received_events","type":"User","site_admin":false},"body":"This is a proposal for adding a way of projecting secrets, configmaps, and downward API into the same volume.\n\n<!-- Reviewable:start -->\n---\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/35313)\n\n<!-- Reviewable:end -->\n","created_at":"2016-10-21T19:07:07Z","updated_at":"2016-11-04T18:47:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4db3a8bc176432bbe930a2d93ebca2add6c45c5a","assignee":{"login":"pmorie","id":366488,"avatar_url":"https://avatars.githubusercontent.com/u/366488?v=3","gravatar_id":"","url":"https://api.github.com/users/pmorie","html_url":"https://github.com/pmorie","followers_url":"https://api.github.com/users/pmorie/followers","following_url":"https://api.github.com/users/pmorie/following{/other_user}","gists_url":"https://api.github.com/users/pmorie/gists{/gist_id}","starred_url":"https://api.github.com/users/pmorie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pmorie/subscriptions","organizations_url":"https://api.github.com/users/pmorie/orgs","repos_url":"https://api.github.com/users/pmorie/repos","events_url":"https://api.github.com/users/pmorie/events{/privacy}","received_events_url":"https://api.github.com/users/pmorie/received_events","type":"User","site_admin":false},"assignees":[{"login":"pmorie","id":366488,"avatar_url":"https://avatars.githubusercontent.com/u/366488?v=3","gravatar_id":"","url":"https://api.github.com/users/pmorie","html_url":"https://github.com/pmorie","followers_url":"https://api.github.com/users/pmorie/followers","following_url":"https://api.github.com/users/pmorie/following{/other_user}","gists_url":"https://api.github.com/users/pmorie/gists{/gist_id}","starred_url":"https://api.github.com/users/pmorie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pmorie/subscriptions","organizations_url":"https://api.github.com/users/pmorie/orgs","repos_url":"https://api.github.com/users/pmorie/repos","events_url":"https://api.github.com/users/pmorie/events{/privacy}","received_events_url":"https://api.github.com/users/pmorie/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/35313/commits","review_comments_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/35313/comments","review_comment_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments{/number}","comments_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/35313/comments","statuses_url":"https://api.github.com/repos/kubernetes/kubernetes/statuses/f633f573a7d2f0772fa318409f7f74e4a53761a7","head":{"label":"jpeeler:master","ref":"master","sha":"f633f573a7d2f0772fa318409f7f74e4a53761a7","user":{"login":"jpeeler","id":834161,"avatar_url":"https://avatars.githubusercontent.com/u/834161?v=3","gravatar_id":"","url":"https://api.github.com/users/jpeeler","html_url":"https://github.com/jpeeler","followers_url":"https://api.github.com/users/jpeeler/followers","following_url":"https://api.github.com/users/jpeeler/following{/other_user}","gists_url":"https://api.github.com/users/jpeeler/gists{/gist_id}","starred_url":"https://api.github.com/users/jpeeler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jpeeler/subscriptions","organizations_url":"https://api.github.com/users/jpeeler/orgs","repos_url":"https://api.github.com/users/jpeeler/repos","events_url":"https://api.github.com/users/jpeeler/events{/privacy}","received_events_url":"https://api.github.com/users/jpeeler/received_events","type":"User","site_admin":false},"repo":{"id":70178643,"name":"kubernetes","full_name":"jpeeler/kubernetes","owner":{"login":"jpeeler","id":834161,"avatar_url":"https://avatars.githubusercontent.com/u/834161?v=3","gravatar_id":"","url":"https://api.github.com/users/jpeeler","html_url":"https://github.com/jpeeler","followers_url":"https://api.github.com/users/jpeeler/followers","following_url":"https://api.github.com/users/jpeeler/following{/other_user}","gists_url":"https://api.github.com/users/jpeeler/gists{/gist_id}","starred_url":"https://api.github.com/users/jpeeler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jpeeler/subscriptions","organizations_url":"https://api.github.com/users/jpeeler/orgs","repos_url":"https://api.github.com/users/jpeeler/repos","events_url":"https://api.github.com/users/jpeeler/events{/privacy}","received_events_url":"https://api.github.com/users/jpeeler/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jpeeler/kubernetes","description":"Production-Grade Container Scheduling and Management","fork":true,"url":"https://api.github.com/repos/jpeeler/kubernetes","forks_url":"https://api.github.com/repos/jpeeler/kubernetes/forks","keys_url":"https://api.github.com/repos/jpeeler/kubernetes/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jpeeler/kubernetes/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jpeeler/kubernetes/teams","hooks_url":"https://api.github.com/repos/jpeeler/kubernetes/hooks","issue_events_url":"https://api.github.com/repos/jpeeler/kubernetes/issues/events{/number}","events_url":"https://api.github.com/repos/jpeeler/kubernetes/events","assignees_url":"https://api.github.com/repos/jpeeler/kubernetes/assignees{/user}","branches_url":"https://api.github.com/repos/jpeeler/kubernetes/branches{/branch}","tags_url":"https://api.github.com/repos/jpeeler/kubernetes/tags","blobs_url":"https://api.github.com/repos/jpeeler/kubernetes/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jpeeler/kubernetes/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jpeeler/kubernetes/git/refs{/sha}","trees_url":"https://api.github.com/repos/jpeeler/kubernetes/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jpeeler/kubernetes/statuses/{sha}","languages_url":"https://api.github.com/repos/jpeeler/kubernetes/languages","stargazers_url":"https://api.github.com/repos/jpeeler/kubernetes/stargazers","contributors_url":"https://api.github.com/repos/jpeeler/kubernetes/contributors","subscribers_url":"https://api.github.com/repos/jpeeler/kubernetes/subscribers","subscription_url":"https://api.github.com/repos/jpeeler/kubernetes/subscription","commits_url":"https://api.github.com/repos/jpeeler/kubernetes/commits{/sha}","git_commits_url":"https://api.github.com/repos/jpeeler/kubernetes/git/commits{/sha}","comments_url":"https://api.github.com/repos/jpeeler/kubernetes/comments{/number}","issue_comment_url":"https://api.github.com/repos/jpeeler/kubernetes/issues/comments{/number}","contents_url":"https://api.github.com/repos/jpeeler/kubernetes/contents/{+path}","compare_url":"https://api.github.com/repos/jpeeler/kubernetes/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jpeeler/kubernetes/merges","archive_url":"https://api.github.com/repos/jpeeler/kubernetes/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jpeeler/kubernetes/downloads","issues_url":"https://api.github.com/repos/jpeeler/kubernetes/issues{/number}","pulls_url":"https://api.github.com/repos/jpeeler/kubernetes/pulls{/number}","milestones_url":"https://api.github.com/repos/jpeeler/kubernetes/milestones{/number}","notifications_url":"https://api.github.com/repos/jpeeler/kubernetes/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jpeeler/kubernetes/labels{/name}","releases_url":"https://api.github.com/repos/jpeeler/kubernetes/releases{/id}","deployments_url":"https://api.github.com/repos/jpeeler/kubernetes/deployments","created_at":"2016-10-06T17:52:58Z","updated_at":"2016-10-06T17:53:30Z","pushed_at":"2016-11-02T19:55:49Z","git_url":"git://github.com/jpeeler/kubernetes.git","ssh_url":"git@github.com:jpeeler/kubernetes.git","clone_url":"https://github.com/jpeeler/kubernetes.git","svn_url":"https://github.com/jpeeler/kubernetes","homepage":"http://kubernetes.io","size":346645,"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":"7d10cffc37d744f96b51d8eaaf8f2d2eae961c15","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-11-04T17:52:58Z","pushed_at":"2016-11-04T18:31:52Z","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":623342,"stargazers_count":18158,"watchers_count":18158,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":5938,"mirror_url":null,"open_issues_count":5253,"forks":5938,"open_issues":5253,"watchers":18158,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/35313"},"html":{"href":"https://github.com/kubernetes/kubernetes/pull/35313"},"issue":{"href":"https://api.github.com/repos/kubernetes/kubernetes/issues/35313"},"comments":{"href":"https://api.github.com/repos/kubernetes/kubernetes/issues/35313/comments"},"review_comments":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/35313/comments"},"review_comment":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/35313/commits"},"statuses":{"href":"https://api.github.com/repos/kubernetes/kubernetes/statuses/f633f573a7d2f0772fa318409f7f74e4a53761a7"}}}}
{"actor":{"display_login":"jpeeler"}}