{"action":"created","comment":{"url":"https://api.github.com/repos/openebs/external-storage/pulls/comments/131688200","pull_request_review_id":54692199,"id":131688200,"diff_hunk":"@@ -0,0 +1,203 @@\n+/*\n+Copyright 2016-2017 The Kubernetes Authors.\n+Copyright 2016-2017 The OpenEBS Authors.\n+\n+Licensed under the Apache License, Version 2.0 (the \"License\");\n+you may not use this file except in compliance with the License.\n+You may obtain a copy of the License at\n+\n+    http://www.apache.org/licenses/LICENSE-2.0\n+\n+Unless required by applicable law or agreed to in writing, software\n+distributed under the License is distributed on an \"AS IS\" BASIS,\n+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+See the License for the specific language governing permissions and\n+limitations under the License.\n+*/\n+\n+package main\n+\n+import (\n+\t\"errors\"\n+\t\"flag\"\n+\t\"os\"\n+\t\"time\"\n+\n+\t\"syscall\"\n+\n+\t\"github.com/golang/glog\"\n+\t\"github.com/kubernetes-incubator/external-storage/lib/controller\"\n+\tmApiv1 \"github.com/kubernetes-incubator/external-storage/openebs/pkg/v1\"\n+\tmayav1 \"github.com/kubernetes-incubator/external-storage/openebs/types/v1\"\n+\t\"k8s.io/api/core/v1\"\n+\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n+\t\"k8s.io/apimachinery/pkg/util/wait\"\n+\t\"k8s.io/client-go/kubernetes\"\n+\t\"k8s.io/client-go/rest\"\n+)\n+\n+const (\n+\ttimeout                   = 60 * time.Second\n+\tresyncPeriod              = 15 * time.Second\n+\tprovisionerName           = \"openebs.io/provisioner-iscsi\"\n+\texponentialBackOffOnError = false\n+\tfailedRetryThreshold      = 5\n+\tleasePeriod               = controller.DefaultLeaseDuration\n+\tretryPeriod               = controller.DefaultRetryPeriod\n+\trenewDeadline             = controller.DefaultRenewDeadline\n+\ttermLimit                 = controller.DefaultTermLimit\n+)\n+\n+type openEBSProvisioner struct {\n+\t// Maya-API Server URI running in the cluster\n+\tmapiURI string\n+\n+\t// Identity of this openEBSProvisioner, set to node's name. Used to identify\n+\t// \"this\" provisioner's PVs.\n+\tidentity string\n+}\n+\n+// NewOpenEBSProvisioner creates a new openebs provisioner\n+func NewOpenEBSProvisioner(client kubernetes.Interface) controller.Provisioner {\n+\tnodeName := os.Getenv(\"NODE_NAME\")\n+\tif nodeName == \"\" {\n+\t\tglog.Fatal(\"env variable NODE_NAME must be set so that this provisioner can identify itself\")\n+\t}\n+\n+\t//TODO - HandleError Cases\n+\tmayaServiceURI := \"http://\" + mApiv1.GetMayaClusterIP(client) + \":5656\"\n+\tos.Setenv(\"MAPI_ADDR\", mayaServiceURI)\n+\n+\treturn &openEBSProvisioner{\n+\t\tmapiURI:  mayaServiceURI,\n+\t\tidentity: nodeName,\n+\t}\n+}\n+\n+var _ controller.Provisioner = &openEBSProvisioner{}\n+\n+// Provision creates a storage asset and returns a PV object representing it.\n+func (p *openEBSProvisioner) Provision(options controller.VolumeOptions) (*v1.PersistentVolume, error) {\n+\n+\t//Issue a request to Maya API Server to create a volume\n+\tvar volume mayav1.Volume\n+\n+\tvolSize := options.PVC.Spec.Resources.Requests[v1.ResourceName(v1.ResourceStorage)]\n+\n+\t//TODO - Need to change the size as a value that Maya Server can accept\n+\terr := mApiv1.CreateVsm(options.PVName, volSize.String())\n+\tif err != nil {\n+\t\tglog.Fatalf(\"Error creating volume: %v\", err)\n+\t\treturn nil, err\n+\t}\n+\n+\terr = mApiv1.ListVsm(options.PVName, &volume)\n+\tif err != nil {\n+\t\tglog.Fatalf(\"Error getting volume details: %v\", err)\n+\t\treturn nil, err\n+\t}\n+\n+\tvar iqn, targetPortal string\n+\n+\tfor key, value := range volume.Metadata.Annotations.(map[string]interface{}) {\n+\t\tswitch key {\n+\t\tcase \"vsm.openebs.io/iqn\":\n+\t\t\tiqn = value.(string)\n+\t\tcase \"vsm.openebs.io/targetportals\":\n+\t\t\ttargetPortal = value.(string)\n+\t\t}\n+\t}\n+\n+\tglog.Infof(\"Volume IQN: %v\", iqn)\n+\tglog.Infof(\"Volume Target: %v\", targetPortal)\n+\n+\t//TODO - fill in the iSCSI PV details\n+\tpv := &v1.PersistentVolume{\n+\t\tObjectMeta: metav1.ObjectMeta{\n+\t\t\tName: options.PVName,\n+\t\t\tAnnotations: map[string]string{\n+\t\t\t\t\"openEBSProvisionerIdentity\": p.identity,\n+\t\t\t},\n+\t\t},\n+\t\tSpec: v1.PersistentVolumeSpec{\n+\t\t\tPersistentVolumeReclaimPolicy: options.PersistentVolumeReclaimPolicy,\n+\t\t\tAccessModes:                   options.PVC.Spec.AccessModes,\n+\t\t\tCapacity: v1.ResourceList{\n+\t\t\t\tv1.ResourceName(v1.ResourceStorage): options.PVC.Spec.Resources.Requests[v1.ResourceName(v1.ResourceStorage)],\n+\t\t\t},\n+\t\t\tPersistentVolumeSource: v1.PersistentVolumeSource{\n+\t\t\t\tISCSI: &v1.ISCSIVolumeSource{\n+\t\t\t\t\tTargetPortal: targetPortal,\n+\t\t\t\t\tIQN:          iqn,\n+\t\t\t\t\tLun:          1,\n+\t\t\t\t\tFSType:       \"ext4\",\n+\t\t\t\t\tReadOnly:     false,\n+\t\t\t\t},\n+\t\t\t},\n+\t\t},\n+\t}\n+\n+\treturn pv, nil\n+}\n+\n+// Delete removes the storage asset that was created by Provision represented\n+// by the given PV.\n+func (p *openEBSProvisioner) Delete(volume *v1.PersistentVolume) error {\n+\tann, ok := volume.Annotations[\"openEBSProvisionerIdentity\"]\n+\tif !ok {\n+\t\treturn errors.New(\"identity annotation not found on PV\")\n+\t}\n+\tif ann != p.identity {\n+\t\treturn &controller.IgnoredError{Reason: \"identity annotation on PV does not match ours\"}\n+\t}\n+\n+\t//TODO - Issue a delete request to Maya API Server\n+\tmApiv1.DeleteVsm(volume.Name)\n+\n+\treturn nil\n+}\n+\n+func main() {\n+\tsyscall.Umask(0)\n+\n+\tflag.Parse()\n+\tflag.Set(\"logtostderr\", \"true\")\n+\n+\t// Create an InClusterConfig and use it to create a client for the controller\n+\t// to use to communicate with Kubernetes\n+\tconfig, err := rest.InClusterConfig()\n+\tif err != nil {\n+\t\tglog.Fatalf(\"Failed to create config: %v\", err)\n+\t}\n+\tclientset, err := kubernetes.NewForConfig(config)\n+\tif err != nil {\n+\t\tglog.Fatalf(\"Failed to create client: %v\", err)\n+\t}\n+\n+\t// The controller needs to know what the server version is because out-of-tree\n+\t// provisioners aren't officially supported until 1.5\n+\tserverVersion, err := clientset.Discovery().ServerVersion()\n+\tif err != nil {\n+\t\tglog.Fatalf(\"Error getting server version: %v\", err)\n+\t}\n+\n+\t// Create the provisioner: it implements the Provisioner interface expected by\n+\t// the controller\n+\topenEBSProvisioner := NewOpenEBSProvisioner(clientset)\n+\n+\t// Start the provision controller which will dynamically provision OpenEBS VSM\n+\t// PVs\n+\tpc := controller.NewProvisionController(\n+\t\tclientset,\n+\t\tprovisionerName,\n+\t\topenEBSProvisioner,\n+\t\tserverVersion.GitVersion)\n+\t// resyncPeriod,","path":"openebs/openebs-provisioner.go","position":195,"original_position":195,"commit_id":"a26c9fca929b73d6e0bc5c58e7a41594cb5f44f2","original_commit_id":"a26c9fca929b73d6e0bc5c58e7a41594cb5f44f2","user":{"login":"kmova","id":12488783,"avatar_url":"https://avatars2.githubusercontent.com/u/12488783?v=4","gravatar_id":"","url":"https://api.github.com/users/kmova","html_url":"https://github.com/kmova","followers_url":"https://api.github.com/users/kmova/followers","following_url":"https://api.github.com/users/kmova/following{/other_user}","gists_url":"https://api.github.com/users/kmova/gists{/gist_id}","starred_url":"https://api.github.com/users/kmova/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kmova/subscriptions","organizations_url":"https://api.github.com/users/kmova/orgs","repos_url":"https://api.github.com/users/kmova/repos","events_url":"https://api.github.com/users/kmova/events{/privacy}","received_events_url":"https://api.github.com/users/kmova/received_events","type":"User","site_admin":false},"body":"remove the commented code. ","created_at":"2017-08-07T15:39:34Z","updated_at":"2017-08-07T15:39:34Z","html_url":"https://github.com/openebs/external-storage/pull/2#discussion_r131688200","pull_request_url":"https://api.github.com/repos/openebs/external-storage/pulls/2","_links":{"self":{"href":"https://api.github.com/repos/openebs/external-storage/pulls/comments/131688200"},"html":{"href":"https://github.com/openebs/external-storage/pull/2#discussion_r131688200"},"pull_request":{"href":"https://api.github.com/repos/openebs/external-storage/pulls/2"}}},"pull_request":{"url":"https://api.github.com/repos/openebs/external-storage/pulls/2","id":134416870,"html_url":"https://github.com/openebs/external-storage/pull/2","diff_url":"https://github.com/openebs/external-storage/pull/2.diff","patch_url":"https://github.com/openebs/external-storage/pull/2.patch","issue_url":"https://api.github.com/repos/openebs/external-storage/issues/2","number":2,"state":"open","locked":false,"title":"Add OpenEBS k8s provisoner","user":{"login":"satyamz","id":5508956,"avatar_url":"https://avatars0.githubusercontent.com/u/5508956?v=4","gravatar_id":"","url":"https://api.github.com/users/satyamz","html_url":"https://github.com/satyamz","followers_url":"https://api.github.com/users/satyamz/followers","following_url":"https://api.github.com/users/satyamz/following{/other_user}","gists_url":"https://api.github.com/users/satyamz/gists{/gist_id}","starred_url":"https://api.github.com/users/satyamz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/satyamz/subscriptions","organizations_url":"https://api.github.com/users/satyamz/orgs","repos_url":"https://api.github.com/users/satyamz/repos","events_url":"https://api.github.com/users/satyamz/events{/privacy}","received_events_url":"https://api.github.com/users/satyamz/received_events","type":"User","site_admin":false},"body":"This will add OpenEBS kubernetes provisioner to kubernetes incubator/external-storage project.\r\n\r\n**Tasks covered:** \r\n\r\n- Add OpenEBS Provisioner.\r\n- Add OpenEBS provisioner related make targets to external-storage/Makefile.  \r\n- Allow the user to build Docker image.\r\n- Allow the user to push Docker image to Docker hub by accepting user details, image name etc. \r\n- Add initial documentation related to building and shipping openebs-provisioner. \r\n\r\n\r\n**Tasks Remaining:** \r\n- Add tests for openebs/pkg/maya_api.go and openebs/openebs-provisioner.go","created_at":"2017-08-07T11:30:18Z","updated_at":"2017-08-07T15:39:34Z","closed_at":null,"merged_at":null,"merge_commit_sha":"86556f46cc90282bfdc0d3e2ecaeb7e2af4d2e14","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/openebs/external-storage/pulls/2/commits","review_comments_url":"https://api.github.com/repos/openebs/external-storage/pulls/2/comments","review_comment_url":"https://api.github.com/repos/openebs/external-storage/pulls/comments{/number}","comments_url":"https://api.github.com/repos/openebs/external-storage/issues/2/comments","statuses_url":"https://api.github.com/repos/openebs/external-storage/statuses/a26c9fca929b73d6e0bc5c58e7a41594cb5f44f2","head":{"label":"openebs:openebs-provisoner-init","ref":"openebs-provisoner-init","sha":"a26c9fca929b73d6e0bc5c58e7a41594cb5f44f2","user":{"login":"openebs","id":20769039,"avatar_url":"https://avatars0.githubusercontent.com/u/20769039?v=4","gravatar_id":"","url":"https://api.github.com/users/openebs","html_url":"https://github.com/openebs","followers_url":"https://api.github.com/users/openebs/followers","following_url":"https://api.github.com/users/openebs/following{/other_user}","gists_url":"https://api.github.com/users/openebs/gists{/gist_id}","starred_url":"https://api.github.com/users/openebs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openebs/subscriptions","organizations_url":"https://api.github.com/users/openebs/orgs","repos_url":"https://api.github.com/users/openebs/repos","events_url":"https://api.github.com/users/openebs/events{/privacy}","received_events_url":"https://api.github.com/users/openebs/received_events","type":"Organization","site_admin":false},"repo":{"id":99095311,"name":"external-storage","full_name":"openebs/external-storage","owner":{"login":"openebs","id":20769039,"avatar_url":"https://avatars0.githubusercontent.com/u/20769039?v=4","gravatar_id":"","url":"https://api.github.com/users/openebs","html_url":"https://github.com/openebs","followers_url":"https://api.github.com/users/openebs/followers","following_url":"https://api.github.com/users/openebs/following{/other_user}","gists_url":"https://api.github.com/users/openebs/gists{/gist_id}","starred_url":"https://api.github.com/users/openebs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openebs/subscriptions","organizations_url":"https://api.github.com/users/openebs/orgs","repos_url":"https://api.github.com/users/openebs/repos","events_url":"https://api.github.com/users/openebs/events{/privacy}","received_events_url":"https://api.github.com/users/openebs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/openebs/external-storage","description":"External Storage Plugins, Provisoners, and Helper Libraries","fork":true,"url":"https://api.github.com/repos/openebs/external-storage","forks_url":"https://api.github.com/repos/openebs/external-storage/forks","keys_url":"https://api.github.com/repos/openebs/external-storage/keys{/key_id}","collaborators_url":"https://api.github.com/repos/openebs/external-storage/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/openebs/external-storage/teams","hooks_url":"https://api.github.com/repos/openebs/external-storage/hooks","issue_events_url":"https://api.github.com/repos/openebs/external-storage/issues/events{/number}","events_url":"https://api.github.com/repos/openebs/external-storage/events","assignees_url":"https://api.github.com/repos/openebs/external-storage/assignees{/user}","branches_url":"https://api.github.com/repos/openebs/external-storage/branches{/branch}","tags_url":"https://api.github.com/repos/openebs/external-storage/tags","blobs_url":"https://api.github.com/repos/openebs/external-storage/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/openebs/external-storage/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/openebs/external-storage/git/refs{/sha}","trees_url":"https://api.github.com/repos/openebs/external-storage/git/trees{/sha}","statuses_url":"https://api.github.com/repos/openebs/external-storage/statuses/{sha}","languages_url":"https://api.github.com/repos/openebs/external-storage/languages","stargazers_url":"https://api.github.com/repos/openebs/external-storage/stargazers","contributors_url":"https://api.github.com/repos/openebs/external-storage/contributors","subscribers_url":"https://api.github.com/repos/openebs/external-storage/subscribers","subscription_url":"https://api.github.com/repos/openebs/external-storage/subscription","commits_url":"https://api.github.com/repos/openebs/external-storage/commits{/sha}","git_commits_url":"https://api.github.com/repos/openebs/external-storage/git/commits{/sha}","comments_url":"https://api.github.com/repos/openebs/external-storage/comments{/number}","issue_comment_url":"https://api.github.com/repos/openebs/external-storage/issues/comments{/number}","contents_url":"https://api.github.com/repos/openebs/external-storage/contents/{+path}","compare_url":"https://api.github.com/repos/openebs/external-storage/compare/{base}...{head}","merges_url":"https://api.github.com/repos/openebs/external-storage/merges","archive_url":"https://api.github.com/repos/openebs/external-storage/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/openebs/external-storage/downloads","issues_url":"https://api.github.com/repos/openebs/external-storage/issues{/number}","pulls_url":"https://api.github.com/repos/openebs/external-storage/pulls{/number}","milestones_url":"https://api.github.com/repos/openebs/external-storage/milestones{/number}","notifications_url":"https://api.github.com/repos/openebs/external-storage/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/openebs/external-storage/labels{/name}","releases_url":"https://api.github.com/repos/openebs/external-storage/releases{/id}","deployments_url":"https://api.github.com/repos/openebs/external-storage/deployments","created_at":"2017-08-02T09:01:25Z","updated_at":"2017-08-02T09:01:27Z","pushed_at":"2017-08-07T11:30:18Z","git_url":"git://github.com/openebs/external-storage.git","ssh_url":"git@github.com:openebs/external-storage.git","clone_url":"https://github.com/openebs/external-storage.git","svn_url":"https://github.com/openebs/external-storage","homepage":null,"size":68612,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"openebs:master","ref":"master","sha":"347bf592bda33e898239593a0cd4d891ecb600f4","user":{"login":"openebs","id":20769039,"avatar_url":"https://avatars0.githubusercontent.com/u/20769039?v=4","gravatar_id":"","url":"https://api.github.com/users/openebs","html_url":"https://github.com/openebs","followers_url":"https://api.github.com/users/openebs/followers","following_url":"https://api.github.com/users/openebs/following{/other_user}","gists_url":"https://api.github.com/users/openebs/gists{/gist_id}","starred_url":"https://api.github.com/users/openebs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openebs/subscriptions","organizations_url":"https://api.github.com/users/openebs/orgs","repos_url":"https://api.github.com/users/openebs/repos","events_url":"https://api.github.com/users/openebs/events{/privacy}","received_events_url":"https://api.github.com/users/openebs/received_events","type":"Organization","site_admin":false},"repo":{"id":99095311,"name":"external-storage","full_name":"openebs/external-storage","owner":{"login":"openebs","id":20769039,"avatar_url":"https://avatars0.githubusercontent.com/u/20769039?v=4","gravatar_id":"","url":"https://api.github.com/users/openebs","html_url":"https://github.com/openebs","followers_url":"https://api.github.com/users/openebs/followers","following_url":"https://api.github.com/users/openebs/following{/other_user}","gists_url":"https://api.github.com/users/openebs/gists{/gist_id}","starred_url":"https://api.github.com/users/openebs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openebs/subscriptions","organizations_url":"https://api.github.com/users/openebs/orgs","repos_url":"https://api.github.com/users/openebs/repos","events_url":"https://api.github.com/users/openebs/events{/privacy}","received_events_url":"https://api.github.com/users/openebs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/openebs/external-storage","description":"External Storage Plugins, Provisoners, and Helper Libraries","fork":true,"url":"https://api.github.com/repos/openebs/external-storage","forks_url":"https://api.github.com/repos/openebs/external-storage/forks","keys_url":"https://api.github.com/repos/openebs/external-storage/keys{/key_id}","collaborators_url":"https://api.github.com/repos/openebs/external-storage/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/openebs/external-storage/teams","hooks_url":"https://api.github.com/repos/openebs/external-storage/hooks","issue_events_url":"https://api.github.com/repos/openebs/external-storage/issues/events{/number}","events_url":"https://api.github.com/repos/openebs/external-storage/events","assignees_url":"https://api.github.com/repos/openebs/external-storage/assignees{/user}","branches_url":"https://api.github.com/repos/openebs/external-storage/branches{/branch}","tags_url":"https://api.github.com/repos/openebs/external-storage/tags","blobs_url":"https://api.github.com/repos/openebs/external-storage/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/openebs/external-storage/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/openebs/external-storage/git/refs{/sha}","trees_url":"https://api.github.com/repos/openebs/external-storage/git/trees{/sha}","statuses_url":"https://api.github.com/repos/openebs/external-storage/statuses/{sha}","languages_url":"https://api.github.com/repos/openebs/external-storage/languages","stargazers_url":"https://api.github.com/repos/openebs/external-storage/stargazers","contributors_url":"https://api.github.com/repos/openebs/external-storage/contributors","subscribers_url":"https://api.github.com/repos/openebs/external-storage/subscribers","subscription_url":"https://api.github.com/repos/openebs/external-storage/subscription","commits_url":"https://api.github.com/repos/openebs/external-storage/commits{/sha}","git_commits_url":"https://api.github.com/repos/openebs/external-storage/git/commits{/sha}","comments_url":"https://api.github.com/repos/openebs/external-storage/comments{/number}","issue_comment_url":"https://api.github.com/repos/openebs/external-storage/issues/comments{/number}","contents_url":"https://api.github.com/repos/openebs/external-storage/contents/{+path}","compare_url":"https://api.github.com/repos/openebs/external-storage/compare/{base}...{head}","merges_url":"https://api.github.com/repos/openebs/external-storage/merges","archive_url":"https://api.github.com/repos/openebs/external-storage/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/openebs/external-storage/downloads","issues_url":"https://api.github.com/repos/openebs/external-storage/issues{/number}","pulls_url":"https://api.github.com/repos/openebs/external-storage/pulls{/number}","milestones_url":"https://api.github.com/repos/openebs/external-storage/milestones{/number}","notifications_url":"https://api.github.com/repos/openebs/external-storage/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/openebs/external-storage/labels{/name}","releases_url":"https://api.github.com/repos/openebs/external-storage/releases{/id}","deployments_url":"https://api.github.com/repos/openebs/external-storage/deployments","created_at":"2017-08-02T09:01:25Z","updated_at":"2017-08-02T09:01:27Z","pushed_at":"2017-08-07T11:30:18Z","git_url":"git://github.com/openebs/external-storage.git","ssh_url":"git@github.com:openebs/external-storage.git","clone_url":"https://github.com/openebs/external-storage.git","svn_url":"https://github.com/openebs/external-storage","homepage":null,"size":68612,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/openebs/external-storage/pulls/2"},"html":{"href":"https://github.com/openebs/external-storage/pull/2"},"issue":{"href":"https://api.github.com/repos/openebs/external-storage/issues/2"},"comments":{"href":"https://api.github.com/repos/openebs/external-storage/issues/2/comments"},"review_comments":{"href":"https://api.github.com/repos/openebs/external-storage/pulls/2/comments"},"review_comment":{"href":"https://api.github.com/repos/openebs/external-storage/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/openebs/external-storage/pulls/2/commits"},"statuses":{"href":"https://api.github.com/repos/openebs/external-storage/statuses/a26c9fca929b73d6e0bc5c58e7a41594cb5f44f2"}}}}
{"actor":{"display_login":"kmova"}}