{"action":"created","comment":{"url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/comments/35070926","id":35070926,"diff_hunk":"@@ -652,3 +655,153 @@ func (os *OpenStack) GetZone() (cloudprovider.Zone, error) {\n \n \treturn cloudprovider.Zone{Region: os.region}, nil\n }\n+\n+func (os *OpenStack) AttachDisk(diskName string) (string, error) {\n+\tdisk, err := os.getVolume(diskName)\n+\tif err != nil {\n+\t\treturn \"\", err\n+\t}\n+\tcClient, err := openstack.NewComputeV2(os.provider, gophercloud.EndpointOpts{\n+\t\tRegion: os.region,\n+\t})\n+\n+\tif err != nil || cClient == nil {\n+\t\tglog.Errorf(\"Unable to initialize nova client for region: %s\", os.region)\n+\t\treturn \"\", err\n+\t}\n+\n+\tcompute_id, err := os.getComputeIDbyHostname(cClient)\n+\tif err != nil || compute_id == \"null\" {\n+\t\tglog.Errorf(\"Unable to get minion's id by minion's hostname\")\n+\t\treturn \"\", err\n+\t}\n+\n+\tif len(disk.Attachments) > 0 && disk.Attachments[0][\"server_id\"] != nil {\n+\t\tif compute_id == disk.Attachments[0][\"server_id\"] {\n+\t\t\tglog.Infof(\"Disk: %q is already attached to compute: %q\\n\", diskName, compute_id)\n+\t\t\treturn disk.ID, nil\n+\t\t} else {\n+\t\t\terrMsg := fmt.Sprintf(\"Disk %q is attached to a different compute: %q, should be detached before proceeding\", diskName, disk.Attachments[0][\"server_id\"])\n+\t\t\tglog.Errorf(errMsg)\n+\t\t\treturn \"\", errors.New(errMsg)\n+\t\t}\n+\t}\n+\t// add read only flag here if possible spothanis\n+\t_, err = volumeattach.Create(cClient, compute_id, &volumeattach.CreateOpts{\n+\t\tVolumeID: disk.ID,\n+\t}).Extract()\n+\tif err != nil {\n+\t\tglog.Infof(\"Failed to attach %s volume to %s compute\", diskName, compute_id)\n+\t\treturn \"\", err\n+\t}\n+\tglog.Infof(\"Successfully attached %s volume to %s compute\", diskName, compute_id)\n+\treturn disk.ID, nil\n+}\n+\n+func (os *OpenStack) DetachDisk(partialDiskId string) error {\n+\tdisk, err := os.getVolume(partialDiskId)\n+\tif err != nil {\n+\t\treturn err\n+\t}\n+\n+\tcClient, err := openstack.NewComputeV2(os.provider, gophercloud.EndpointOpts{\n+\t\tRegion: os.region,\n+\t})\n+\n+\tcompute_id, err := os.getComputeIDbyHostname(cClient)\n+\tif err != nil || compute_id == \"\" {\n+\t\tglog.Errorf(\"Unable to get minion's ip while detaching disk\")\n+\t\treturn err\n+\t}\n+\tif len(disk.Attachments) > 0 && disk.Attachments[0][\"server_id\"] != nil && compute_id == disk.Attachments[0][\"server_id\"] {\n+\t\terr = volumeattach.Delete(cClient, compute_id, disk.ID).ExtractErr()\n+\t\tif err != nil {\n+\t\t\tglog.Errorf(\"Failed to delete volume %s from compute %s attached %v\\n\", disk.ID, compute_id, err)\n+\t\t\treturn err\n+\t\t}\n+\t} else {\n+\t\terrMsg := fmt.Sprintf(\"Disk: %s has no attachments or is not attached to compute: %s\\n\", disk.Name, compute_id)\n+\t\tglog.Errorf(errMsg)\n+\t\treturn errors.New(errMsg)\n+\t}\n+\treturn nil\n+}\n+\n+//Takes a partial/full disk id or diskname\n+\n+func (os *OpenStack) getVolume(diskName string) (volumes.Volume, error) {\n+\tsClient, err := openstack.NewBlockStorageV1(os.provider, gophercloud.EndpointOpts{\n+\t\tRegion: os.region,\n+\t})\n+\n+\tvar volume volumes.Volume\n+\tif err != nil || sClient == nil {\n+\t\tglog.Errorf(\"Unable to initialize cinder client for region: %s\", os.region)\n+\t\treturn volume, err\n+\t}\n+\n+\terr = volumes.List(sClient, nil).EachPage(func(page pagination.Page) (bool, error) {\n+\t\tvols, err := volumes.ExtractVolumes(page)\n+\t\tif err != nil {\n+\t\t\tglog.Errorf(\"Failed to extract volumes: %v\\n\", err)\n+\t\t\treturn false, err\n+\t\t} else {\n+\t\t\tfor _, v := range vols {\n+\t\t\t\tglog.Infof(\"%s\\t%s\\t%v\\n\", v.ID, v.Name, v.Attachments)\n+\t\t\t\tif v.Name == diskName || strings.Contains(v.ID, diskName) {\n+\t\t\t\t\tvolume = v\n+\t\t\t\t\treturn true, nil\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t\t//if it reached here then no disk with the given name was found.\n+\t\terrmsg := fmt.Sprintf(\"Unable to find disk: %s in region %s\", diskName, os.region)\n+\t\treturn false, errors.New(errmsg)\n+\t})\n+\tif err != nil {\n+\t\tglog.Errorf(\"Error occured getting volume: %s\\n\", diskName)\n+\t\treturn volume, err\n+\t}\n+\treturn volume, err\n+}\n+\n+func (os *OpenStack) getComputeIDbyHostname(cClient *gophercloud.ServiceClient) (string, error) {\n+\n+\thostname, err := ossys.Hostname()\n+\n+\tif err != nil {\n+\t\tglog.Errorf(\"Failed to get Minion's hostname: %v\\n\", err)\n+\t\treturn \"\", err\n+\t}\n+\n+\ti, ok := os.Instances()\n+\tif !ok {\n+\t\tglog.Errorf(\"Unable to get instances\")\n+\t\treturn \"\", errors.New(\"Unable to get instances\")\n+\t}\n+\n+\tsrvs, err := i.List(\".\")\n+\tif err != nil {\n+\t\tglog.Errorf(\"Failed to list servers: %v\", err)\n+\t\treturn \"\", err\n+\t}\n+\n+\tif len(srvs) == 0 {\n+\t\tglog.Errorf(\"Found no servers in the region\")\n+\t\treturn \"\", errors.New(\"Found no servers in the region\")\n+\t}\n+\tglog.Infof(\"found servers: %v\\n\", srvs)\n+\n+\tfor _, srvname := range srvs {\n+\t\tserver, err := getServerByName(cClient, srvname)\n+\t\tif err != nil {\n+\t\t\treturn \"\", err\n+\t\t} else {\n+\t\t\tif server.Metadata[\"hostname\"] != nil && server.Metadata[\"hostname\"] == hostname {\n+\t\t\t\tfmt.Printf(\"found server: %s with host :%s\\n\", server.Name, hostname)\n+\t\t\t\treturn server.ID, nil\n+\t\t\t}\n+\t\t}\n+\t}\n+\treturn \"\", err","path":"pkg/cloudprovider/openstack/openstack.go","position":185,"original_position":185,"commit_id":"e78d2684d19c01647e7a119fb7de67720c14e13b","original_commit_id":"e78d2684d19c01647e7a119fb7de67720c14e13b","user":{"login":"sseago","id":1120000,"avatar_url":"https://avatars.githubusercontent.com/u/1120000?v=3","gravatar_id":"","url":"https://api.github.com/users/sseago","html_url":"https://github.com/sseago","followers_url":"https://api.github.com/users/sseago/followers","following_url":"https://api.github.com/users/sseago/following{/other_user}","gists_url":"https://api.github.com/users/sseago/gists{/gist_id}","starred_url":"https://api.github.com/users/sseago/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sseago/subscriptions","organizations_url":"https://api.github.com/users/sseago/orgs","repos_url":"https://api.github.com/users/sseago/repos","events_url":"https://api.github.com/users/sseago/events{/privacy}","received_events_url":"https://api.github.com/users/sseago/received_events","type":"User","site_admin":false},"body":"For this final return, err hasn't been set (in all cases where err is not nil, this method would have already returned), so I think this needs an explicit error setting -- something like 'errors.New(\"Unable to find matching host ID\")', but perhaps with more information embedded as appropriate.\r\n","created_at":"2015-07-21T05:35:09Z","updated_at":"2015-07-21T05:35:09Z","html_url":"https://github.com/GoogleCloudPlatform/kubernetes/pull/6689#discussion_r35070926","pull_request_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/6689","_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/comments/35070926"},"html":{"href":"https://github.com/GoogleCloudPlatform/kubernetes/pull/6689#discussion_r35070926"},"pull_request":{"href":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/6689"}}},"pull_request":{"url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/6689","id":33068144,"html_url":"https://github.com/GoogleCloudPlatform/kubernetes/pull/6689","diff_url":"https://github.com/GoogleCloudPlatform/kubernetes/pull/6689.diff","patch_url":"https://github.com/GoogleCloudPlatform/kubernetes/pull/6689.patch","issue_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/6689","number":6689,"state":"open","locked":false,"title":"Volume Plugin for Cinder; Openstack Block Storage","user":{"login":"spothanis","id":4702326,"avatar_url":"https://avatars.githubusercontent.com/u/4702326?v=3","gravatar_id":"","url":"https://api.github.com/users/spothanis","html_url":"https://github.com/spothanis","followers_url":"https://api.github.com/users/spothanis/followers","following_url":"https://api.github.com/users/spothanis/following{/other_user}","gists_url":"https://api.github.com/users/spothanis/gists{/gist_id}","starred_url":"https://api.github.com/users/spothanis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spothanis/subscriptions","organizations_url":"https://api.github.com/users/spothanis/orgs","repos_url":"https://api.github.com/users/spothanis/repos","events_url":"https://api.github.com/users/spothanis/events{/privacy}","received_events_url":"https://api.github.com/users/spothanis/received_events","type":"User","site_admin":false},"body":"The PR implements cinder as a volume plugin. Cinder is openstack's block storage component.\r\nThe functionality is very similar to GCE's pd ","created_at":"2015-04-10T17:50:11Z","updated_at":"2015-07-21T05:35:09Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b5f3b39b92bd758f75df02cd39ff54166589432b","assignee":{"login":"thockin","id":5595220,"avatar_url":"https://avatars.githubusercontent.com/u/5595220?v=3","gravatar_id":"","url":"https://api.github.com/users/thockin","html_url":"https://github.com/thockin","followers_url":"https://api.github.com/users/thockin/followers","following_url":"https://api.github.com/users/thockin/following{/other_user}","gists_url":"https://api.github.com/users/thockin/gists{/gist_id}","starred_url":"https://api.github.com/users/thockin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thockin/subscriptions","organizations_url":"https://api.github.com/users/thockin/orgs","repos_url":"https://api.github.com/users/thockin/repos","events_url":"https://api.github.com/users/thockin/events{/privacy}","received_events_url":"https://api.github.com/users/thockin/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/milestones/11","html_url":"https://github.com/GoogleCloudPlatform/kubernetes/milestones/v1.0-post","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/milestones/11/labels","id":1035380,"number":11,"title":"v1.0-post","description":"Things that are triaged and decided not for inclusion to v1.0","creator":{"login":"brendandburns","id":5751682,"avatar_url":"https://avatars.githubusercontent.com/u/5751682?v=3","gravatar_id":"","url":"https://api.github.com/users/brendandburns","html_url":"https://github.com/brendandburns","followers_url":"https://api.github.com/users/brendandburns/followers","following_url":"https://api.github.com/users/brendandburns/following{/other_user}","gists_url":"https://api.github.com/users/brendandburns/gists{/gist_id}","starred_url":"https://api.github.com/users/brendandburns/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brendandburns/subscriptions","organizations_url":"https://api.github.com/users/brendandburns/orgs","repos_url":"https://api.github.com/users/brendandburns/repos","events_url":"https://api.github.com/users/brendandburns/events{/privacy}","received_events_url":"https://api.github.com/users/brendandburns/received_events","type":"User","site_admin":false},"open_issues":520,"closed_issues":95,"state":"open","created_at":"2015-03-23T22:54:17Z","updated_at":"2015-07-20T22:09:20Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/6689/commits","review_comments_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/6689/comments","review_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/comments{/number}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/6689/comments","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/statuses/e78d2684d19c01647e7a119fb7de67720c14e13b","head":{"label":"spothanis:cinder-vol-plugin","ref":"cinder-vol-plugin","sha":"e78d2684d19c01647e7a119fb7de67720c14e13b","user":{"login":"spothanis","id":4702326,"avatar_url":"https://avatars.githubusercontent.com/u/4702326?v=3","gravatar_id":"","url":"https://api.github.com/users/spothanis","html_url":"https://github.com/spothanis","followers_url":"https://api.github.com/users/spothanis/followers","following_url":"https://api.github.com/users/spothanis/following{/other_user}","gists_url":"https://api.github.com/users/spothanis/gists{/gist_id}","starred_url":"https://api.github.com/users/spothanis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spothanis/subscriptions","organizations_url":"https://api.github.com/users/spothanis/orgs","repos_url":"https://api.github.com/users/spothanis/repos","events_url":"https://api.github.com/users/spothanis/events{/privacy}","received_events_url":"https://api.github.com/users/spothanis/received_events","type":"User","site_admin":false},"repo":{"id":30397993,"name":"kubernetes","full_name":"spothanis/kubernetes","owner":{"login":"spothanis","id":4702326,"avatar_url":"https://avatars.githubusercontent.com/u/4702326?v=3","gravatar_id":"","url":"https://api.github.com/users/spothanis","html_url":"https://github.com/spothanis","followers_url":"https://api.github.com/users/spothanis/followers","following_url":"https://api.github.com/users/spothanis/following{/other_user}","gists_url":"https://api.github.com/users/spothanis/gists{/gist_id}","starred_url":"https://api.github.com/users/spothanis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spothanis/subscriptions","organizations_url":"https://api.github.com/users/spothanis/orgs","repos_url":"https://api.github.com/users/spothanis/repos","events_url":"https://api.github.com/users/spothanis/events{/privacy}","received_events_url":"https://api.github.com/users/spothanis/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/spothanis/kubernetes","description":"Container Cluster Manager","fork":true,"url":"https://api.github.com/repos/spothanis/kubernetes","forks_url":"https://api.github.com/repos/spothanis/kubernetes/forks","keys_url":"https://api.github.com/repos/spothanis/kubernetes/keys{/key_id}","collaborators_url":"https://api.github.com/repos/spothanis/kubernetes/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/spothanis/kubernetes/teams","hooks_url":"https://api.github.com/repos/spothanis/kubernetes/hooks","issue_events_url":"https://api.github.com/repos/spothanis/kubernetes/issues/events{/number}","events_url":"https://api.github.com/repos/spothanis/kubernetes/events","assignees_url":"https://api.github.com/repos/spothanis/kubernetes/assignees{/user}","branches_url":"https://api.github.com/repos/spothanis/kubernetes/branches{/branch}","tags_url":"https://api.github.com/repos/spothanis/kubernetes/tags","blobs_url":"https://api.github.com/repos/spothanis/kubernetes/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/spothanis/kubernetes/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/spothanis/kubernetes/git/refs{/sha}","trees_url":"https://api.github.com/repos/spothanis/kubernetes/git/trees{/sha}","statuses_url":"https://api.github.com/repos/spothanis/kubernetes/statuses/{sha}","languages_url":"https://api.github.com/repos/spothanis/kubernetes/languages","stargazers_url":"https://api.github.com/repos/spothanis/kubernetes/stargazers","contributors_url":"https://api.github.com/repos/spothanis/kubernetes/contributors","subscribers_url":"https://api.github.com/repos/spothanis/kubernetes/subscribers","subscription_url":"https://api.github.com/repos/spothanis/kubernetes/subscription","commits_url":"https://api.github.com/repos/spothanis/kubernetes/commits{/sha}","git_commits_url":"https://api.github.com/repos/spothanis/kubernetes/git/commits{/sha}","comments_url":"https://api.github.com/repos/spothanis/kubernetes/comments{/number}","issue_comment_url":"https://api.github.com/repos/spothanis/kubernetes/issues/comments{/number}","contents_url":"https://api.github.com/repos/spothanis/kubernetes/contents/{+path}","compare_url":"https://api.github.com/repos/spothanis/kubernetes/compare/{base}...{head}","merges_url":"https://api.github.com/repos/spothanis/kubernetes/merges","archive_url":"https://api.github.com/repos/spothanis/kubernetes/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/spothanis/kubernetes/downloads","issues_url":"https://api.github.com/repos/spothanis/kubernetes/issues{/number}","pulls_url":"https://api.github.com/repos/spothanis/kubernetes/pulls{/number}","milestones_url":"https://api.github.com/repos/spothanis/kubernetes/milestones{/number}","notifications_url":"https://api.github.com/repos/spothanis/kubernetes/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/spothanis/kubernetes/labels{/name}","releases_url":"https://api.github.com/repos/spothanis/kubernetes/releases{/id}","created_at":"2015-02-06T06:08:33Z","updated_at":"2015-03-25T02:35:51Z","pushed_at":"2015-05-07T23:11:42Z","git_url":"git://github.com/spothanis/kubernetes.git","ssh_url":"git@github.com:spothanis/kubernetes.git","clone_url":"https://github.com/spothanis/kubernetes.git","svn_url":"https://github.com/spothanis/kubernetes","homepage":"http://kubernetes.io","size":51035,"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":"GoogleCloudPlatform:master","ref":"master","sha":"be15e84e83f12300c48081860d36624d1695fb02","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-07-21T04:50:15Z","pushed_at":"2015-07-21T05:27:52Z","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":322511,"stargazers_count":9016,"watchers_count":9016,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":2059,"mirror_url":null,"open_issues_count":1672,"forks":2059,"open_issues":1672,"watchers":9016,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/6689"},"html":{"href":"https://github.com/GoogleCloudPlatform/kubernetes/pull/6689"},"issue":{"href":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/6689"},"comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/6689/comments"},"review_comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/6689/comments"},"review_comment":{"href":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/6689/commits"},"statuses":{"href":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/statuses/e78d2684d19c01647e7a119fb7de67720c14e13b"}}}}