{"action":"created","comment":{"url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments/37911939","id":37911939,"diff_hunk":"@@ -0,0 +1,643 @@\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\n+refer to the docs that go with that version.\n+\n+<strong>\n+The latest 1.0.x release of this document can be found\n+[here](http://releases.k8s.io/release-1.0/docs/http-cloud-provider.md).\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+# HTTP Cloudprovider\n+\n+# Motivation\n+\n+Currently, the cloudproviders are designed so that they get directly compiled into kubernetes. It is very hard to add custom cloudproviders to the kubernetes platform without using a custom build of kubernetes. Therefore, we would like to build an HTTP Cloudprovider which would be able to send a HTTP request by converting the cloudprovider interfaces to an HTTP API. The cloudprovider would need an HTTP endpoint so that kubernetes would be able to send a request to them and then the cloudproviders would be able to send the desired service information back to kubernetes.\n+\n+# Specification\n+\n+The user should specify a config file in a INI config-file format. The file is read using gcfg. The **client-url** field is required which specifies the URL of the cloud provider. The client-url field should come under the Global section.\n+\n+##### Example Config File:\n+\n+```bash\n+[Global]\n+client-url = http://127.0.0.1 \n+```\n+\n+First the API checks for which interfaces in [cloud.go](../pkg/cloudprovider/cloud.go) are implemented.\n+\n+A GET request for /v1/{Interface}/supported will return whether the interface is supported or not.\n+\n+The following methods must be implemented by the HTTP cloudprovider. If a cloudprovider does not implement a resource, it can return false  or return a HTTP 404 Error with empty body for a given GET /{interface}/supported call.\n+\n+If you encounter an error in processing the request, return an HTTP 404 with a response body of:\n+\n+```json\n+{\n+    \"error\" :\"error-message-here\"\n+}\n+```\n+\n+## Provider Name\n+\n+#### GET /v1/providerName\n+\n+Returns the cloud provider name.\n+\n+##### Expected return value:\n+\n+|Name|Description|Example Value|\n+|----|-----------|-------------|\n+|providerName|Name of the cloud provider.|\"my-cloud\"|\n+Example\n+\n+```json\n+{\n+    \"providerName\": \"my-cloud\"\n+}\n+```\n+\n+## Instances\n+\n+The instances interface allows the kubernetes platform to query the cloud provider about the instances currently within the cloud provider system.\n+\n+### Methods\n+\n+#### GET /v1/instances/supported\n+\n+Returns whether the Instance interface is supported or not.\n+\n+##### Expected return value:\n+\n+|Name|Description|Example Value|\n+|----|-----------|-------------|\n+|supported|Whether the interface is supported or not.|true|\n+Example\n+\n+```json\n+{\n+    \"supported\": true\n+}\n+```\n+\n+#### GET /v1/instances/{instanceName}/nodeAddresses\n+\n+Returns all node addresses for the given instance.\n+\n+##### Expected return value:\n+\n+|Name|Description|Example Value|\n+|----|-----------|-------------|\n+|nodeAddresses|List of node adress objects.||\n+|nodeAddresses:type|The IP type relate to the node address. The types of addresses are restricted to the list below.|\"InternalIP\"|\n+|nodeAddresses:address|The actual node's address.|\"127.0.0.1\"|\n+\n+Address Types\n+\n+|Name|Description|\n+|----|-----------|\n+|InternalIP|The node's Internal IP address.|\n+|ExternalIP|The node's External IP address.|\n+|Hostname|The hostname of the node.|\n+|LegacyHostIP|The node's Host IP address.|\n+Example\n+\n+```json\n+{\n+    \"nodeAddresses\": [\n+        {\n+            \"type\": \"InternalIP\",\n+            \"address\": \"127.0.0.1\"\n+        }\n+    ]\n+}\n+```\n+\n+#### GET /v1/instances/{instanceName}/ID\n+\n+Returns the Instance ID for the given instance.\n+\n+##### Expected return value:\n+\n+|Name|Description|Example Value|\n+|----|-----------|-------------|\n+|instanceID|ID of the cloud provider.|\"my-cloud-name1\"|\n+Example\n+\n+```json\n+{\n+    \"instanceID\": \"my-cloud-name1\"\n+}\n+```\n+\n+#### GET /v1/instances/{filter}\n+\n+Returns all instances where the name matches the word filter. filter is a regular expression.\n+\n+##### Expected return value:\n+\n+|Name|Description|Example Value|\n+|----|-----------|-------------|\n+|instances|List of all instances matching the filter.||\n+|instances:instanceName|Name of the instance.|\"cloud-1\"|\n+Example\n+\n+```json\n+{\n+    \"instances\": [\n+        {\n+            \"instanceName\": \"cloud-1\"\n+        }\n+    ]\n+}\n+```\n+\n+#### GET /v1/instances/{nodeName}/resources\n+\n+Returns all the resources for the given node.\n+\n+##### Expected return value:\n+\n+|Name|Description|Example Value|\n+|----|-----------|-------------|\n+|resources|List of all resources in the instance.||\n+|resources:resourceName|Name of the resource. The type/name of resources are restricted to the list below.|\"cpu\"|\n+|resources:quantity|Object represent the quantity of the specified resource.||\n+|resources:quantity:amount|The actual amount of the resource. It should be in the units specified below in resource types.|4|\n+|resources:quantity:format|The format in which you want the amount to be stored. The types of formats are restricted to the list below.|\"DecimalSI\"|\n+\n+Resource Types\n+\n+|Name|Description|\n+|----|-----------|\n+|cpu|The CPU amount in cores.|\n+|memory|The amount of memory allocated, in bytes.|\n+|storage|The Volume size, in bytes.|\n+|pods|The number of pods.|\n+|services|The number of services.|\n+|replicationcontrollers|The number of Replication Controllers.|\n+|resourequotas|The number of resource quotas.|\n+|secrets|The number of resource secrets.|\n+|persistentvolumeclaims|The number of resource persistent volume claims.|\n+\n+Format Types\n+\n+|Name|Description|Example|\n+|----|-----------|-------|\n+|DecimalExponent|The number is in exponential form.|12e6|\n+|BinarySI|The number is in binary SI form.|12Mi (12 * 2^20)|\n+|DecimalSI|The number is stored in Dcimal SI form.|12M (12 * 10^6)|\n+Example\n+\n+```json\n+{\n+    \"resources\": [\n+        {\n+            \"resourceName\": \"cpu\",\n+            \"quantity\":\n+                {\n+                    \"amount\": 4,\n+                    \"format\": \"DecimalSI\"\n+                }\n+        },\n+        {\n+            \"resourceName\": \"memory\",\n+            \"quantity\":\n+                {\n+                    \"amount\": 1048576,\n+                    \"format\": \"DecimalSI\"\n+                }\n+        }\n+    ]\n+}\n+```\n+\n+#### GET /v1/instances/node/{hostName}\n+\n+Returns the name of the node which is related to the specific host.\n+\n+##### Expected return value:\n+\n+|Name|Description|Example Value|\n+|----|-----------|-------------|\n+|nodeName|The name of the node in the host|\"my-node\"|\n+Example\n+\n+```json\n+{\n+    \"nodeName\": \"my-node\"\n+}\n+```\n+\n+#### POST /v1/instances/sshKey\n+\n+Adds the SSH Key provided to all the instances. Returns whether the key was added or not.\n+\n+##### Sender body:\n+\n+|Name|Description|Example Value|\n+|----|-----------|-------------|\n+|user|The user's whose SSH key needs to be added.|\"name\"|\n+|keydata|The actual ssh key. Any format allowed not restricted to strings.|\"zPjoihsswRTGIUHKLHIHO345@435\"|\n+Example\n+\n+```json\n+{\n+    \"user\": \"name\",\n+    \"keyData\": \"zPjoihsswRTGIUHKLHIHO345@435\"\n+}\n+```\n+\n+##### Expected Return Value:\n+\n+|Name|Description|Example Value|\n+|----|-----------|-------------|\n+|SSHKeyAdded|Boolean value regarding whether the SSH Key was added or not.|false|\n+Example\n+\n+```json\n+{\n+    \"SSHKeyAdded\": false\n+}\n+```\n+\n+## TCPLoadBalancer\n+\n+The TCPLoadBalancer interface allows the kubernetes platform to query the cloud provider about the Load Balancer the cloud provider has and requests to change the load balancer as required.\n+\n+### Methods\n+\n+#### GET /v1/tcpLoadBalancer/supported\n+\n+Know whether the interface is supported or not.\n+\n+##### Expected return value:\n+\n+|Name|Description|Example Value|\n+|----|-----------|-------------|\n+|supported|Whether the interface is supported or not.|true|\n+Example\n+\n+```json\n+{\n+    \"supported\":false\n+}\n+```\n+\n+#### GET /v1/tcpLoadBalancer/{region}/{name}\n+\n+Returns the TCP Load Balancer Status if it exists in the region with the particular name.\n+\n+##### Expected return value:\n+\n+|Name|Description|Example Value|\n+|----|-----------|-------------|\n+|ingress|List of ingress points for the load balancer.||\n+|ingress:ip|The IP address of the ingress point. This is a optional field as only one of IP or hostname is required.|\"127.0.0.1\"|\n+|ingress:hostname|The hostname of the ingress point. This is a optional field as only one of IP or hostname is required.|\"my-cloud-host1\"|\n+|exists|Whether the TCP Load Balancer exists or not.|true|\n+Example\n+\n+```json\n+{\n+    \"ingress\": [\n+        {\n+            \"ip\":\"127.0.0.1\",\n+            \"hostname\":\"my-cloud-host1\"\n+        }\n+    ],\n+    \"exists\":true\n+}\n+```\n+\n+#### POST /v1/tcpLoadBalancer\n+\n+Creates a new tcp load balancer and return the status of the balancer.\n+\n+##### Sender body:\n+\n+|Name|Description|Example Value|\n+|----|-----------|-------------|\n+|loadBalancerName|The name of the TCP load balancer.|\"my-tcp-balancer\"|\n+|region|The location of the load balancer.|\"USA\"|\n+|externalIP|The external IP of the load balancer.|\"127.0.0.1\"|\n+|ports|List of all the service port objects.||\n+|ports:name|Name of the port. If only one port is present then this field is **optional**.|\"SMTP\"|\n+|ports:protocol|The protocol the port works on. The value can only be either \"UDP\" or \"TCP\".|\"TCP\"|\n+|ports:port|The port that will be exposed on the service.|1234|\n+|ports:targetPort|The target port on pods selected by this service. This field is optional. It can be **string** or **int** type. If not provided, will use **ports:port** value.|1234|\n+|ports:nodePort|The port on each node on which this service is exposed.|1234|\n+|hosts|A list of all host names.||\n+|hosts:hostname|A host name.|\"my-cloud-host1\"|\n+|sessionAffinity|The session affinity. The value can only be either \"None\" or \"ClientIP\".|\"None\"|\n+Example\n+\n+```json\n+{\n+    \"loadBalancerName\":\"my-tcp-balancer\",\n+    \"region\":\"USA\",\n+    \"externalIP\":\"127.0.0.1\",\n+    \"ports\":[\n+        {\n+            \"name\":\"SMTP\",\n+            \"protocol\":\"TCP\",\n+            \"port\":1234,\n+            \"targetPort\":1234,\n+            \"nodePort\":1234\n+        }\n+    ],\n+    \"hosts\":[\n+        {\n+            \"hostname\":\"my-cloud-host1\"\n+        }\n+    ],\n+    \"sessionAffinity\":\"None\"\n+}\n+```\n+\n+##### Expected return value:\n+\n+|Name|Description|Example Value|\n+|----|-----------|-------------|\n+|ingress|List of ingress points for the load balancer.||\n+|ingress:ip|The IP address of the ingress point. This is a optional field as only one of IP or hostname is required.|\"127.0.0.1\"|\n+|ingress:hostname|The hostname of the ingress point. This is a optional field as only one of IP or hostname is required.|\"my-cloud-host1\"|\n+|exists|Whether the TCP Load Balancer exists or not.|true|\n+Example\n+\n+```json\n+{\n+    \"ingress\": [\n+        {\n+            \"ip\":\"127.0.0.1\",\n+            \"hostname\":\"my-cloud-host1\"\n+        }\n+    ]\n+}\n+```\n+\n+#### PUT /v1/tcpLoadBalancer/{region}/{name}\n+\n+Updates the hosts given in the Load Balancer specified.\n+\n+##### Sender body:\n+\n+|Name|Description|Example Value|\n+|----|-----------|-------------|\n+|hosts|A list of all host names.||\n+|hosts:hostname|A host name.|\"my-cloud-host1\"|\n+Example\n+\n+```json\n+{\n+    \"hosts\":[\n+        {\n+            \"hostname\":\"my-cloud-host1\"\n+        }\n+    ]\n+}\n+```\n+\n+##### Expected return body:\n+\n+Send back an empty 204 response if the object was updated successfully.\n+\n+#### DELETE /v1/tcpLoadBalancer/{region}/{name}\n+\n+Deletes the specified Load Balancer.\n+\n+##### Expected return value:\n+\n+Send back an empty 204 response if the object was deleted successfully or it didn't exist before.\n+\n+## Zones\n+\n+The Zones interface allows the kubernetes platform to query the cloud provider about the Zones and which areas are having a failed state.\n+\n+### Methods\n+\n+#### GET /v1/zones/supported\n+\n+Know whether the interface is supported or not.\n+\n+##### Expected return value:\n+\n+|Name|Description|Example Value|\n+|----|-----------|-------------|\n+|supported|Whether the interface is supported or not.|true|\n+Example\n+\n+```json\n+{\n+    \"supported\":true\n+}\n+```\n+\n+#### GET /v1/zones\n+\n+Returns the Zone containing the current failure zone and locality region that the program is running in.\n+\n+##### Expected return value:\n+\n+|Name|Description|Example Value|\n+|----|-----------|-------------|\n+|failureDomain|The failure zone.|\"my-zone-2\"|\n+|region|Locality region that the program is running in.|\"USA\"|\n+Example\n+\n+```json\n+{\n+    \"failureDomain\":\"my-zone-2\",\n+    \"region\":\"USA\"\n+}\n+```\n+\n+## Clusters\n+\n+The clusters interface allows the kubernetes platform to query information about the clusters inside the cloud provider.\n+\n+### Methods\n+\n+#### GET /v1/clusters/supported\n+\n+Know whether the interface is supported or not.\n+\n+##### Expected return value:\n+\n+|Name|Description|Example Value|\n+|----|-----------|-------------|\n+|supported|Whether the interface is supported or not.|true|\n+Example\n+\n+```json\n+{\n+    \"supported\":true\n+}\n+```\n+\n+#### GET /v1/clusters\n+\n+Returns a list of all clusters.\n+\n+##### Expected return value:\n+\n+|Name|Description|Example Value|\n+|----|-----------|-------------|\n+|clusters|The list of all cluster objects.||\n+|clusters:clusterName|The name of the cluster.|\"my-cluster\"|\n+Example\n+\n+```json\n+{\n+    \"clusters\": [\n+        {\n+            \"clusterName\":\"my-cluster\"\n+        }\n+    ]\n+}\n+```\n+\n+#### GET /v1/clusters/{clusterName}/master","path":"docs/http-cloud-provider.md","position":null,"original_position":524,"commit_id":"b186d1482d5bfa732896ddc452198825795f217e","original_commit_id":"47504435fcd5c3c8764bb81760789ef763f901cd","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":"GKE just calls this \"endpoint\": https://cloud.google.com/container-engine/reference/rest/v1/projects.zones.clusters\r\nNot that I'm in love with that.\r\n\r\nI don't think it makes sense for this to be in the cloudprovider API, anyway. What is it used for?","created_at":"2015-08-25T20:00:43Z","updated_at":"2015-08-25T20:00:43Z","html_url":"https://github.com/kubernetes/kubernetes/pull/10503#discussion_r37911939","pull_request_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/10503","_links":{"self":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments/37911939"},"html":{"href":"https://github.com/kubernetes/kubernetes/pull/10503#discussion_r37911939"},"pull_request":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/10503"}}},"pull_request":{"url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/10503","id":38823304,"html_url":"https://github.com/kubernetes/kubernetes/pull/10503","diff_url":"https://github.com/kubernetes/kubernetes/pull/10503.diff","patch_url":"https://github.com/kubernetes/kubernetes/pull/10503.patch","issue_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/10503","number":10503,"state":"open","locked":false,"title":"Create HTTP cloudprovider","user":{"login":"manansaraf","id":7547232,"avatar_url":"https://avatars.githubusercontent.com/u/7547232?v=3","gravatar_id":"","url":"https://api.github.com/users/manansaraf","html_url":"https://github.com/manansaraf","followers_url":"https://api.github.com/users/manansaraf/followers","following_url":"https://api.github.com/users/manansaraf/following{/other_user}","gists_url":"https://api.github.com/users/manansaraf/gists{/gist_id}","starred_url":"https://api.github.com/users/manansaraf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/manansaraf/subscriptions","organizations_url":"https://api.github.com/users/manansaraf/orgs","repos_url":"https://api.github.com/users/manansaraf/repos","events_url":"https://api.github.com/users/manansaraf/events{/privacy}","received_events_url":"https://api.github.com/users/manansaraf/received_events","type":"User","site_admin":false},"body":"The HTTP cloudprovider is an HTTP API  which can communicate with custom cloudproviders which are not currently directly compiled into kubernetes and currently require a custom build of kubernetes to work with kubernetes. This API would remove that requirement as the HTTP API implements all the cloudprovider interfaces and then sends HTTP requests to the cloudprovider which would then reply back with the desired response to kubernetes.  ","created_at":"2015-06-29T22:09:15Z","updated_at":"2015-08-25T20:00:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"68f04dae0e628ea9161cd56de34caf648d0b41c6","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/10503/commits","review_comments_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/10503/comments","review_comment_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments{/number}","comments_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/10503/comments","statuses_url":"https://api.github.com/repos/kubernetes/kubernetes/statuses/b186d1482d5bfa732896ddc452198825795f217e","head":{"label":"manansaraf:httpCloudProvider","ref":"httpCloudProvider","sha":"b186d1482d5bfa732896ddc452198825795f217e","user":{"login":"manansaraf","id":7547232,"avatar_url":"https://avatars.githubusercontent.com/u/7547232?v=3","gravatar_id":"","url":"https://api.github.com/users/manansaraf","html_url":"https://github.com/manansaraf","followers_url":"https://api.github.com/users/manansaraf/followers","following_url":"https://api.github.com/users/manansaraf/following{/other_user}","gists_url":"https://api.github.com/users/manansaraf/gists{/gist_id}","starred_url":"https://api.github.com/users/manansaraf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/manansaraf/subscriptions","organizations_url":"https://api.github.com/users/manansaraf/orgs","repos_url":"https://api.github.com/users/manansaraf/repos","events_url":"https://api.github.com/users/manansaraf/events{/privacy}","received_events_url":"https://api.github.com/users/manansaraf/received_events","type":"User","site_admin":false},"repo":{"id":36958183,"name":"kubernetes","full_name":"manansaraf/kubernetes","owner":{"login":"manansaraf","id":7547232,"avatar_url":"https://avatars.githubusercontent.com/u/7547232?v=3","gravatar_id":"","url":"https://api.github.com/users/manansaraf","html_url":"https://github.com/manansaraf","followers_url":"https://api.github.com/users/manansaraf/followers","following_url":"https://api.github.com/users/manansaraf/following{/other_user}","gists_url":"https://api.github.com/users/manansaraf/gists{/gist_id}","starred_url":"https://api.github.com/users/manansaraf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/manansaraf/subscriptions","organizations_url":"https://api.github.com/users/manansaraf/orgs","repos_url":"https://api.github.com/users/manansaraf/repos","events_url":"https://api.github.com/users/manansaraf/events{/privacy}","received_events_url":"https://api.github.com/users/manansaraf/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/manansaraf/kubernetes","description":"Container Cluster Manager from Google","fork":true,"url":"https://api.github.com/repos/manansaraf/kubernetes","forks_url":"https://api.github.com/repos/manansaraf/kubernetes/forks","keys_url":"https://api.github.com/repos/manansaraf/kubernetes/keys{/key_id}","collaborators_url":"https://api.github.com/repos/manansaraf/kubernetes/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/manansaraf/kubernetes/teams","hooks_url":"https://api.github.com/repos/manansaraf/kubernetes/hooks","issue_events_url":"https://api.github.com/repos/manansaraf/kubernetes/issues/events{/number}","events_url":"https://api.github.com/repos/manansaraf/kubernetes/events","assignees_url":"https://api.github.com/repos/manansaraf/kubernetes/assignees{/user}","branches_url":"https://api.github.com/repos/manansaraf/kubernetes/branches{/branch}","tags_url":"https://api.github.com/repos/manansaraf/kubernetes/tags","blobs_url":"https://api.github.com/repos/manansaraf/kubernetes/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/manansaraf/kubernetes/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/manansaraf/kubernetes/git/refs{/sha}","trees_url":"https://api.github.com/repos/manansaraf/kubernetes/git/trees{/sha}","statuses_url":"https://api.github.com/repos/manansaraf/kubernetes/statuses/{sha}","languages_url":"https://api.github.com/repos/manansaraf/kubernetes/languages","stargazers_url":"https://api.github.com/repos/manansaraf/kubernetes/stargazers","contributors_url":"https://api.github.com/repos/manansaraf/kubernetes/contributors","subscribers_url":"https://api.github.com/repos/manansaraf/kubernetes/subscribers","subscription_url":"https://api.github.com/repos/manansaraf/kubernetes/subscription","commits_url":"https://api.github.com/repos/manansaraf/kubernetes/commits{/sha}","git_commits_url":"https://api.github.com/repos/manansaraf/kubernetes/git/commits{/sha}","comments_url":"https://api.github.com/repos/manansaraf/kubernetes/comments{/number}","issue_comment_url":"https://api.github.com/repos/manansaraf/kubernetes/issues/comments{/number}","contents_url":"https://api.github.com/repos/manansaraf/kubernetes/contents/{+path}","compare_url":"https://api.github.com/repos/manansaraf/kubernetes/compare/{base}...{head}","merges_url":"https://api.github.com/repos/manansaraf/kubernetes/merges","archive_url":"https://api.github.com/repos/manansaraf/kubernetes/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/manansaraf/kubernetes/downloads","issues_url":"https://api.github.com/repos/manansaraf/kubernetes/issues{/number}","pulls_url":"https://api.github.com/repos/manansaraf/kubernetes/pulls{/number}","milestones_url":"https://api.github.com/repos/manansaraf/kubernetes/milestones{/number}","notifications_url":"https://api.github.com/repos/manansaraf/kubernetes/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/manansaraf/kubernetes/labels{/name}","releases_url":"https://api.github.com/repos/manansaraf/kubernetes/releases{/id}","created_at":"2015-06-05T22:19:00Z","updated_at":"2015-06-05T22:19:05Z","pushed_at":"2015-08-21T22:59:40Z","git_url":"git://github.com/manansaraf/kubernetes.git","ssh_url":"git@github.com:manansaraf/kubernetes.git","clone_url":"https://github.com/manansaraf/kubernetes.git","svn_url":"https://github.com/manansaraf/kubernetes","homepage":"http://kubernetes.io","size":101346,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"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":"86a10a142c2696b39754c2d813f5238fe381108c","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}","created_at":"2014-06-06T22:56:04Z","updated_at":"2015-08-25T18:54:27Z","pushed_at":"2015-08-25T19:55:58Z","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":363780,"stargazers_count":9884,"watchers_count":9884,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":2391,"mirror_url":null,"open_issues_count":1778,"forks":2391,"open_issues":1778,"watchers":9884,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/10503"},"html":{"href":"https://github.com/kubernetes/kubernetes/pull/10503"},"issue":{"href":"https://api.github.com/repos/kubernetes/kubernetes/issues/10503"},"comments":{"href":"https://api.github.com/repos/kubernetes/kubernetes/issues/10503/comments"},"review_comments":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/10503/comments"},"review_comment":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/10503/commits"},"statuses":{"href":"https://api.github.com/repos/kubernetes/kubernetes/statuses/b186d1482d5bfa732896ddc452198825795f217e"}}}}