{"action":"created","comment":{"url":"https://api.github.com/repos/codedellemc/libstorage/pulls/comments/110417724","pull_request_review_id":31592211,"id":110417724,"diff_hunk":"@@ -0,0 +1,743 @@\n+// +build !libstorage_storage_driver libstorage_storage_driver_openstack\n+\n+package openstack\n+\n+import (\n+\t\"time\"\n+\n+\tgofig \"github.com/akutz/gofig/types\"\n+\t\"github.com/akutz/goof\"\n+\n+\t\"github.com/codedellemc/libstorage/api/context\"\n+\t\"github.com/codedellemc/libstorage/api/registry\"\n+\t\"github.com/codedellemc/libstorage/api/types\"\n+\topenstackdriver \"github.com/codedellemc/libstorage/drivers/storage/openstack\"\n+\n+\t\"github.com/gophercloud/gophercloud\"\n+\t\"github.com/gophercloud/gophercloud/openstack\"\n+\t\"github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions\"\n+\t\"github.com/gophercloud/gophercloud/openstack/blockstorage/v1/snapshots\"\n+\tvolumesv1 \"github.com/gophercloud/gophercloud/openstack/blockstorage/v1/volumes\"\n+\t\"github.com/gophercloud/gophercloud/openstack/blockstorage/v2/volumes\"\n+\t\"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/volumeattach\"\n+\t\"github.com/gophercloud/gophercloud/openstack/identity/v3/extensions/trusts\"\n+)\n+\n+type driver struct {\n+\tprovider             *gophercloud.ProviderClient\n+\tclientCompute        *gophercloud.ServiceClient\n+\tclientBlockStorage   *gophercloud.ServiceClient\n+\tclientBlockStoragev2 *gophercloud.ServiceClient\n+\tavailabilityZone     string\n+\tconfig               gofig.Config\n+}\n+\n+func ef() goof.Fields {\n+\treturn goof.Fields{\n+\t\t\"provider\": openstackdriver.Name,\n+\t}\n+}\n+\n+func eff(fields goof.Fields) map[string]interface{} {\n+\terrFields := map[string]interface{}{\n+\t\t\"provider\": openstackdriver.Name,\n+\t}\n+\tif fields != nil {\n+\t\tfor k, v := range fields {\n+\t\t\terrFields[k] = v\n+\t\t}\n+\t}\n+\treturn errFields\n+}\n+\n+func init() {\n+\tregistry.RegisterStorageDriver(openstackdriver.Name, newDriver)\n+}\n+\n+func newDriver() types.StorageDriver {\n+\treturn &driver{}\n+}\n+\n+func (d *driver) Name() string {\n+\treturn openstackdriver.Name\n+}\n+\n+func (d *driver) Type(ctx types.Context) (types.StorageType, error) {\n+\treturn types.Block, nil\n+}\n+\n+func (d *driver) Init(context types.Context, config gofig.Config) error {\n+\td.config = config\n+\tfields := eff(map[string]interface{}{})\n+\tvar err error\n+\n+\tendpointOpts := gophercloud.EndpointOpts{}\n+\n+\tendpointOpts.Region = d.regionName()\n+\tfields[\"region\"] = endpointOpts.Region\n+\n+\td.availabilityZone = d.availabilityZoneName()\n+\tfields[\"availabilityZone\"] = d.availabilityZone\n+\n+\tauthOpts := d.getAuthOptions()\n+\n+\tfields[\"identityEndpoint\"] = d.authURL()\n+\tfields[\"userId\"] = d.userID()\n+\tfields[\"userName\"] = d.userName()\n+\tif d.password() == \"\" {\n+\t\tfields[\"password\"] = \"\"\n+\t} else {\n+\t\tfields[\"password\"] = \"******\"\n+\t}\n+\tif d.tokenID() == \"\" {\n+\t\tfields[\"tokenId\"] = \"\"\n+\t} else {\n+\t\tfields[\"tokenId\"] = \"******\"\n+\t}\n+\tfields[\"tenantId\"] = d.tenantID()\n+\tfields[\"tenantName\"] = d.tenantName()\n+\tfields[\"domainId\"] = d.domainID()\n+\tfields[\"domainName\"] = d.domainName()\n+\n+\ttrustID := d.trustID()\n+\tfields[\"trustId\"] = trustID\n+\n+\td.provider, err = openstack.NewClient(authOpts.IdentityEndpoint)\n+\tif err != nil {\n+\t\treturn goof.WithFieldsE(fields, \"error creating Keystone client\", err)\n+\t}\n+\n+\tif trustID != \"\" {\n+\t\tauthOptionsExt := trusts.AuthOptsExt{\n+\t\t\tTrustID:            trustID,\n+\t\t\tAuthOptionsBuilder: &authOpts,\n+\t\t}\n+\t\terr = openstack.AuthenticateV3(d.provider, authOptionsExt, endpointOpts)\n+\t} else {\n+\t\terr = openstack.Authenticate(d.provider, authOpts)\n+\t}\n+\tif err != nil {\n+\t\treturn goof.WithFieldsE(fields, \"error authenticating\", err)\n+\t}\n+\n+\tif d.clientCompute, err = openstack.NewComputeV2(d.provider, endpointOpts); err != nil {\n+\t\treturn goof.WithFieldsE(fields, \"error getting newComputeV2\", err)\n+\t}\n+\n+\tif d.clientBlockStorage, err = openstack.NewBlockStorageV1(d.provider, endpointOpts); err != nil {\n+\t\treturn goof.WithFieldsE(fields, \"error getting newBlockStorageV1\", err)\n+\t}\n+\n+\td.clientBlockStoragev2, err = openstack.NewBlockStorageV2(d.provider, endpointOpts)\n+\tif err != nil {\n+\t\t// fallback to volume v1\n+\t\tcontext.WithFields(fields).Info(\"BlockStorage API V2 not available, fallback to V1\")\n+\t\td.clientBlockStoragev2 = nil\n+\t}\n+\n+\tcontext.WithFields(fields).Info(\"storage driver initialized\")\n+\n+\treturn nil\n+}\n+\n+// InstanceInspect returns an instance.\n+func (d *driver) InstanceInspect(\n+\tctx types.Context,\n+\topts types.Store) (*types.Instance, error) {\n+\n+\tiid := context.MustInstanceID(ctx)\n+\tif iid.ID != \"\" {","path":"drivers/storage/openstack/storage/openstack_storage.go","position":null,"original_position":149,"commit_id":"71613776ce1052f9d93dd8814189fba1bf611864","original_commit_id":"4aafc6f8ca99dc91858a08fd206650de1fe2781b","user":{"login":"MatMaul","id":1643573,"avatar_url":"https://avatars3.githubusercontent.com/u/1643573?v=3","gravatar_id":"","url":"https://api.github.com/users/MatMaul","html_url":"https://github.com/MatMaul","followers_url":"https://api.github.com/users/MatMaul/followers","following_url":"https://api.github.com/users/MatMaul/following{/other_user}","gists_url":"https://api.github.com/users/MatMaul/gists{/gist_id}","starred_url":"https://api.github.com/users/MatMaul/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MatMaul/subscriptions","organizations_url":"https://api.github.com/users/MatMaul/orgs","repos_url":"https://api.github.com/users/MatMaul/repos","events_url":"https://api.github.com/users/MatMaul/events{/privacy}","received_events_url":"https://api.github.com/users/MatMaul/received_events","type":"User","site_admin":false},"body":"Done","created_at":"2017-04-07T15:31:50Z","updated_at":"2017-04-07T15:31:50Z","html_url":"https://github.com/codedellemc/libstorage/pull/243#discussion_r110417724","pull_request_url":"https://api.github.com/repos/codedellemc/libstorage/pulls/243","_links":{"self":{"href":"https://api.github.com/repos/codedellemc/libstorage/pulls/comments/110417724"},"html":{"href":"https://github.com/codedellemc/libstorage/pull/243#discussion_r110417724"},"pull_request":{"href":"https://api.github.com/repos/codedellemc/libstorage/pulls/243"}}},"pull_request":{"url":"https://api.github.com/repos/codedellemc/libstorage/pulls/243","id":81952698,"html_url":"https://github.com/codedellemc/libstorage/pull/243","diff_url":"https://github.com/codedellemc/libstorage/pull/243.diff","patch_url":"https://github.com/codedellemc/libstorage/pull/243.patch","issue_url":"https://api.github.com/repos/codedellemc/libstorage/issues/243","number":243,"state":"open","locked":false,"title":"OpenStack Storage Driver","user":{"login":"MatMaul","id":1643573,"avatar_url":"https://avatars3.githubusercontent.com/u/1643573?v=3","gravatar_id":"","url":"https://api.github.com/users/MatMaul","html_url":"https://github.com/MatMaul","followers_url":"https://api.github.com/users/MatMaul/followers","following_url":"https://api.github.com/users/MatMaul/following{/other_user}","gists_url":"https://api.github.com/users/MatMaul/gists{/gist_id}","starred_url":"https://api.github.com/users/MatMaul/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MatMaul/subscriptions","organizations_url":"https://api.github.com/users/MatMaul/orgs","repos_url":"https://api.github.com/users/MatMaul/repos","events_url":"https://api.github.com/users/MatMaul/events{/privacy}","received_events_url":"https://api.github.com/users/MatMaul/received_events","type":"User","site_admin":false},"body":"fixes #182.\r\n\r\nNotable changes :\r\n- use cloud-init file or the metadata server to retrieve the instance uuid instead of dmidecode (kept as a fallback). dmidecode needs root so it is better to avoid it if possible.\r\n- remove the xen-store-read executable dependency. Region parameter is optional so let's not try to guess it.\r\n- same for the availability zone : guessing using the metadata server was wrong anyway since AZs for compute are different from AZs for volume.\r\n- add support of trust id for keystone auth.\r\n","created_at":"2016-08-19T09:36:48Z","updated_at":"2017-04-07T15:31:50Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2d7325b9c837b4a94c7a95a4016e8f308e430776","assignee":{"login":"akutz","id":101085,"avatar_url":"https://avatars1.githubusercontent.com/u/101085?v=3","gravatar_id":"","url":"https://api.github.com/users/akutz","html_url":"https://github.com/akutz","followers_url":"https://api.github.com/users/akutz/followers","following_url":"https://api.github.com/users/akutz/following{/other_user}","gists_url":"https://api.github.com/users/akutz/gists{/gist_id}","starred_url":"https://api.github.com/users/akutz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akutz/subscriptions","organizations_url":"https://api.github.com/users/akutz/orgs","repos_url":"https://api.github.com/users/akutz/repos","events_url":"https://api.github.com/users/akutz/events{/privacy}","received_events_url":"https://api.github.com/users/akutz/received_events","type":"User","site_admin":false},"assignees":[{"login":"akutz","id":101085,"avatar_url":"https://avatars1.githubusercontent.com/u/101085?v=3","gravatar_id":"","url":"https://api.github.com/users/akutz","html_url":"https://github.com/akutz","followers_url":"https://api.github.com/users/akutz/followers","following_url":"https://api.github.com/users/akutz/following{/other_user}","gists_url":"https://api.github.com/users/akutz/gists{/gist_id}","starred_url":"https://api.github.com/users/akutz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akutz/subscriptions","organizations_url":"https://api.github.com/users/akutz/orgs","repos_url":"https://api.github.com/users/akutz/repos","events_url":"https://api.github.com/users/akutz/events{/privacy}","received_events_url":"https://api.github.com/users/akutz/received_events","type":"User","site_admin":false},{"login":"codenrhoden","id":1627176,"avatar_url":"https://avatars0.githubusercontent.com/u/1627176?v=3","gravatar_id":"","url":"https://api.github.com/users/codenrhoden","html_url":"https://github.com/codenrhoden","followers_url":"https://api.github.com/users/codenrhoden/followers","following_url":"https://api.github.com/users/codenrhoden/following{/other_user}","gists_url":"https://api.github.com/users/codenrhoden/gists{/gist_id}","starred_url":"https://api.github.com/users/codenrhoden/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codenrhoden/subscriptions","organizations_url":"https://api.github.com/users/codenrhoden/orgs","repos_url":"https://api.github.com/users/codenrhoden/repos","events_url":"https://api.github.com/users/codenrhoden/events{/privacy}","received_events_url":"https://api.github.com/users/codenrhoden/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/codedellemc/libstorage/milestones/20","html_url":"https://github.com/codedellemc/libstorage/milestone/20","labels_url":"https://api.github.com/repos/codedellemc/libstorage/milestones/20/labels","id":2401876,"number":20,"title":"2017.04","description":"April 2017 Milestone, for libStorage 0.6.0 release.","creator":{"login":"codenrhoden","id":1627176,"avatar_url":"https://avatars0.githubusercontent.com/u/1627176?v=3","gravatar_id":"","url":"https://api.github.com/users/codenrhoden","html_url":"https://github.com/codenrhoden","followers_url":"https://api.github.com/users/codenrhoden/followers","following_url":"https://api.github.com/users/codenrhoden/following{/other_user}","gists_url":"https://api.github.com/users/codenrhoden/gists{/gist_id}","starred_url":"https://api.github.com/users/codenrhoden/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codenrhoden/subscriptions","organizations_url":"https://api.github.com/users/codenrhoden/orgs","repos_url":"https://api.github.com/users/codenrhoden/repos","events_url":"https://api.github.com/users/codenrhoden/events{/privacy}","received_events_url":"https://api.github.com/users/codenrhoden/received_events","type":"User","site_admin":false},"open_issues":12,"closed_issues":22,"state":"open","created_at":"2017-03-21T19:45:39Z","updated_at":"2017-04-06T16:15:20Z","due_on":"2017-04-28T07:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/codedellemc/libstorage/pulls/243/commits","review_comments_url":"https://api.github.com/repos/codedellemc/libstorage/pulls/243/comments","review_comment_url":"https://api.github.com/repos/codedellemc/libstorage/pulls/comments{/number}","comments_url":"https://api.github.com/repos/codedellemc/libstorage/issues/243/comments","statuses_url":"https://api.github.com/repos/codedellemc/libstorage/statuses/71613776ce1052f9d93dd8814189fba1bf611864","head":{"label":"MatMaul:master","ref":"master","sha":"71613776ce1052f9d93dd8814189fba1bf611864","user":{"login":"MatMaul","id":1643573,"avatar_url":"https://avatars3.githubusercontent.com/u/1643573?v=3","gravatar_id":"","url":"https://api.github.com/users/MatMaul","html_url":"https://github.com/MatMaul","followers_url":"https://api.github.com/users/MatMaul/followers","following_url":"https://api.github.com/users/MatMaul/following{/other_user}","gists_url":"https://api.github.com/users/MatMaul/gists{/gist_id}","starred_url":"https://api.github.com/users/MatMaul/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MatMaul/subscriptions","organizations_url":"https://api.github.com/users/MatMaul/orgs","repos_url":"https://api.github.com/users/MatMaul/repos","events_url":"https://api.github.com/users/MatMaul/events{/privacy}","received_events_url":"https://api.github.com/users/MatMaul/received_events","type":"User","site_admin":false},"repo":{"id":65548517,"name":"libstorage","full_name":"MatMaul/libstorage","owner":{"login":"MatMaul","id":1643573,"avatar_url":"https://avatars3.githubusercontent.com/u/1643573?v=3","gravatar_id":"","url":"https://api.github.com/users/MatMaul","html_url":"https://github.com/MatMaul","followers_url":"https://api.github.com/users/MatMaul/followers","following_url":"https://api.github.com/users/MatMaul/following{/other_user}","gists_url":"https://api.github.com/users/MatMaul/gists{/gist_id}","starred_url":"https://api.github.com/users/MatMaul/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MatMaul/subscriptions","organizations_url":"https://api.github.com/users/MatMaul/orgs","repos_url":"https://api.github.com/users/MatMaul/repos","events_url":"https://api.github.com/users/MatMaul/events{/privacy}","received_events_url":"https://api.github.com/users/MatMaul/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/MatMaul/libstorage","description":"libStorage provides a portable and remotable storage plugin framework.","fork":true,"url":"https://api.github.com/repos/MatMaul/libstorage","forks_url":"https://api.github.com/repos/MatMaul/libstorage/forks","keys_url":"https://api.github.com/repos/MatMaul/libstorage/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MatMaul/libstorage/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MatMaul/libstorage/teams","hooks_url":"https://api.github.com/repos/MatMaul/libstorage/hooks","issue_events_url":"https://api.github.com/repos/MatMaul/libstorage/issues/events{/number}","events_url":"https://api.github.com/repos/MatMaul/libstorage/events","assignees_url":"https://api.github.com/repos/MatMaul/libstorage/assignees{/user}","branches_url":"https://api.github.com/repos/MatMaul/libstorage/branches{/branch}","tags_url":"https://api.github.com/repos/MatMaul/libstorage/tags","blobs_url":"https://api.github.com/repos/MatMaul/libstorage/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MatMaul/libstorage/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MatMaul/libstorage/git/refs{/sha}","trees_url":"https://api.github.com/repos/MatMaul/libstorage/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MatMaul/libstorage/statuses/{sha}","languages_url":"https://api.github.com/repos/MatMaul/libstorage/languages","stargazers_url":"https://api.github.com/repos/MatMaul/libstorage/stargazers","contributors_url":"https://api.github.com/repos/MatMaul/libstorage/contributors","subscribers_url":"https://api.github.com/repos/MatMaul/libstorage/subscribers","subscription_url":"https://api.github.com/repos/MatMaul/libstorage/subscription","commits_url":"https://api.github.com/repos/MatMaul/libstorage/commits{/sha}","git_commits_url":"https://api.github.com/repos/MatMaul/libstorage/git/commits{/sha}","comments_url":"https://api.github.com/repos/MatMaul/libstorage/comments{/number}","issue_comment_url":"https://api.github.com/repos/MatMaul/libstorage/issues/comments{/number}","contents_url":"https://api.github.com/repos/MatMaul/libstorage/contents/{+path}","compare_url":"https://api.github.com/repos/MatMaul/libstorage/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MatMaul/libstorage/merges","archive_url":"https://api.github.com/repos/MatMaul/libstorage/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MatMaul/libstorage/downloads","issues_url":"https://api.github.com/repos/MatMaul/libstorage/issues{/number}","pulls_url":"https://api.github.com/repos/MatMaul/libstorage/pulls{/number}","milestones_url":"https://api.github.com/repos/MatMaul/libstorage/milestones{/number}","notifications_url":"https://api.github.com/repos/MatMaul/libstorage/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MatMaul/libstorage/labels{/name}","releases_url":"https://api.github.com/repos/MatMaul/libstorage/releases{/id}","deployments_url":"https://api.github.com/repos/MatMaul/libstorage/deployments","created_at":"2016-08-12T11:30:22Z","updated_at":"2016-08-12T11:30:24Z","pushed_at":"2017-04-07T15:28:08Z","git_url":"git://github.com/MatMaul/libstorage.git","ssh_url":"git@github.com:MatMaul/libstorage.git","clone_url":"https://github.com/MatMaul/libstorage.git","svn_url":"https://github.com/MatMaul/libstorage","homepage":"","size":2064,"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":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"codedellemc:master","ref":"master","sha":"017cfe76373297063f80dbed940142dc63a36ec2","user":{"login":"codedellemc","id":20977737,"avatar_url":"https://avatars2.githubusercontent.com/u/20977737?v=3","gravatar_id":"","url":"https://api.github.com/users/codedellemc","html_url":"https://github.com/codedellemc","followers_url":"https://api.github.com/users/codedellemc/followers","following_url":"https://api.github.com/users/codedellemc/following{/other_user}","gists_url":"https://api.github.com/users/codedellemc/gists{/gist_id}","starred_url":"https://api.github.com/users/codedellemc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codedellemc/subscriptions","organizations_url":"https://api.github.com/users/codedellemc/orgs","repos_url":"https://api.github.com/users/codedellemc/repos","events_url":"https://api.github.com/users/codedellemc/events{/privacy}","received_events_url":"https://api.github.com/users/codedellemc/received_events","type":"Organization","site_admin":false},"repo":{"id":46084622,"name":"libstorage","full_name":"codedellemc/libstorage","owner":{"login":"codedellemc","id":20977737,"avatar_url":"https://avatars2.githubusercontent.com/u/20977737?v=3","gravatar_id":"","url":"https://api.github.com/users/codedellemc","html_url":"https://github.com/codedellemc","followers_url":"https://api.github.com/users/codedellemc/followers","following_url":"https://api.github.com/users/codedellemc/following{/other_user}","gists_url":"https://api.github.com/users/codedellemc/gists{/gist_id}","starred_url":"https://api.github.com/users/codedellemc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codedellemc/subscriptions","organizations_url":"https://api.github.com/users/codedellemc/orgs","repos_url":"https://api.github.com/users/codedellemc/repos","events_url":"https://api.github.com/users/codedellemc/events{/privacy}","received_events_url":"https://api.github.com/users/codedellemc/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/codedellemc/libstorage","description":"libStorage provides a portable and remotable storage plugin framework.","fork":false,"url":"https://api.github.com/repos/codedellemc/libstorage","forks_url":"https://api.github.com/repos/codedellemc/libstorage/forks","keys_url":"https://api.github.com/repos/codedellemc/libstorage/keys{/key_id}","collaborators_url":"https://api.github.com/repos/codedellemc/libstorage/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/codedellemc/libstorage/teams","hooks_url":"https://api.github.com/repos/codedellemc/libstorage/hooks","issue_events_url":"https://api.github.com/repos/codedellemc/libstorage/issues/events{/number}","events_url":"https://api.github.com/repos/codedellemc/libstorage/events","assignees_url":"https://api.github.com/repos/codedellemc/libstorage/assignees{/user}","branches_url":"https://api.github.com/repos/codedellemc/libstorage/branches{/branch}","tags_url":"https://api.github.com/repos/codedellemc/libstorage/tags","blobs_url":"https://api.github.com/repos/codedellemc/libstorage/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/codedellemc/libstorage/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/codedellemc/libstorage/git/refs{/sha}","trees_url":"https://api.github.com/repos/codedellemc/libstorage/git/trees{/sha}","statuses_url":"https://api.github.com/repos/codedellemc/libstorage/statuses/{sha}","languages_url":"https://api.github.com/repos/codedellemc/libstorage/languages","stargazers_url":"https://api.github.com/repos/codedellemc/libstorage/stargazers","contributors_url":"https://api.github.com/repos/codedellemc/libstorage/contributors","subscribers_url":"https://api.github.com/repos/codedellemc/libstorage/subscribers","subscription_url":"https://api.github.com/repos/codedellemc/libstorage/subscription","commits_url":"https://api.github.com/repos/codedellemc/libstorage/commits{/sha}","git_commits_url":"https://api.github.com/repos/codedellemc/libstorage/git/commits{/sha}","comments_url":"https://api.github.com/repos/codedellemc/libstorage/comments{/number}","issue_comment_url":"https://api.github.com/repos/codedellemc/libstorage/issues/comments{/number}","contents_url":"https://api.github.com/repos/codedellemc/libstorage/contents/{+path}","compare_url":"https://api.github.com/repos/codedellemc/libstorage/compare/{base}...{head}","merges_url":"https://api.github.com/repos/codedellemc/libstorage/merges","archive_url":"https://api.github.com/repos/codedellemc/libstorage/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/codedellemc/libstorage/downloads","issues_url":"https://api.github.com/repos/codedellemc/libstorage/issues{/number}","pulls_url":"https://api.github.com/repos/codedellemc/libstorage/pulls{/number}","milestones_url":"https://api.github.com/repos/codedellemc/libstorage/milestones{/number}","notifications_url":"https://api.github.com/repos/codedellemc/libstorage/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/codedellemc/libstorage/labels{/name}","releases_url":"https://api.github.com/repos/codedellemc/libstorage/releases{/id}","deployments_url":"https://api.github.com/repos/codedellemc/libstorage/deployments","created_at":"2015-11-12T22:22:37Z","updated_at":"2017-03-30T07:46:32Z","pushed_at":"2017-04-07T15:28:09Z","git_url":"git://github.com/codedellemc/libstorage.git","ssh_url":"git@github.com:codedellemc/libstorage.git","clone_url":"https://github.com/codedellemc/libstorage.git","svn_url":"https://github.com/codedellemc/libstorage","homepage":"","size":2166,"stargazers_count":109,"watchers_count":109,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":41,"mirror_url":null,"open_issues_count":73,"forks":41,"open_issues":73,"watchers":109,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/codedellemc/libstorage/pulls/243"},"html":{"href":"https://github.com/codedellemc/libstorage/pull/243"},"issue":{"href":"https://api.github.com/repos/codedellemc/libstorage/issues/243"},"comments":{"href":"https://api.github.com/repos/codedellemc/libstorage/issues/243/comments"},"review_comments":{"href":"https://api.github.com/repos/codedellemc/libstorage/pulls/243/comments"},"review_comment":{"href":"https://api.github.com/repos/codedellemc/libstorage/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/codedellemc/libstorage/pulls/243/commits"},"statuses":{"href":"https://api.github.com/repos/codedellemc/libstorage/statuses/71613776ce1052f9d93dd8814189fba1bf611864"}}}}
{"actor":{"display_login":"MatMaul"}}