{"action":"closed","issue":{"url":"https://api.github.com/repos/libopenstorage/openstorage/issues/407","repository_url":"https://api.github.com/repos/libopenstorage/openstorage","labels_url":"https://api.github.com/repos/libopenstorage/openstorage/issues/407/labels{/name}","comments_url":"https://api.github.com/repos/libopenstorage/openstorage/issues/407/comments","events_url":"https://api.github.com/repos/libopenstorage/openstorage/issues/407/events","html_url":"https://github.com/libopenstorage/openstorage/issues/407","id":316899348,"node_id":"MDU6SXNzdWUzMTY4OTkzNDg=","number":407,"title":"SDK for OpenStorage","user":{"login":"lpabon","id":3880001,"node_id":"MDQ6VXNlcjM4ODAwMDE=","avatar_url":"https://avatars2.githubusercontent.com/u/3880001?v=4","gravatar_id":"","url":"https://api.github.com/users/lpabon","html_url":"https://github.com/lpabon","followers_url":"https://api.github.com/users/lpabon/followers","following_url":"https://api.github.com/users/lpabon/following{/other_user}","gists_url":"https://api.github.com/users/lpabon/gists{/gist_id}","starred_url":"https://api.github.com/users/lpabon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lpabon/subscriptions","organizations_url":"https://api.github.com/users/lpabon/orgs","repos_url":"https://api.github.com/users/lpabon/repos","events_url":"https://api.github.com/users/lpabon/events{/privacy}","received_events_url":"https://api.github.com/users/lpabon/received_events","type":"User","site_admin":false},"labels":[{"id":911385064,"node_id":"MDU6TGFiZWw5MTEzODUwNjQ=","url":"https://api.github.com/repos/libopenstorage/openstorage/labels/sdk","name":"sdk","color":"bfdadc","default":false}],"state":"closed","locked":false,"assignee":{"login":"lpabon","id":3880001,"node_id":"MDQ6VXNlcjM4ODAwMDE=","avatar_url":"https://avatars2.githubusercontent.com/u/3880001?v=4","gravatar_id":"","url":"https://api.github.com/users/lpabon","html_url":"https://github.com/lpabon","followers_url":"https://api.github.com/users/lpabon/followers","following_url":"https://api.github.com/users/lpabon/following{/other_user}","gists_url":"https://api.github.com/users/lpabon/gists{/gist_id}","starred_url":"https://api.github.com/users/lpabon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lpabon/subscriptions","organizations_url":"https://api.github.com/users/lpabon/orgs","repos_url":"https://api.github.com/users/lpabon/repos","events_url":"https://api.github.com/users/lpabon/events{/privacy}","received_events_url":"https://api.github.com/users/lpabon/received_events","type":"User","site_admin":false},"assignees":[{"login":"lpabon","id":3880001,"node_id":"MDQ6VXNlcjM4ODAwMDE=","avatar_url":"https://avatars2.githubusercontent.com/u/3880001?v=4","gravatar_id":"","url":"https://api.github.com/users/lpabon","html_url":"https://github.com/lpabon","followers_url":"https://api.github.com/users/lpabon/followers","following_url":"https://api.github.com/users/lpabon/following{/other_user}","gists_url":"https://api.github.com/users/lpabon/gists{/gist_id}","starred_url":"https://api.github.com/users/lpabon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lpabon/subscriptions","organizations_url":"https://api.github.com/users/lpabon/orgs","repos_url":"https://api.github.com/users/lpabon/repos","events_url":"https://api.github.com/users/lpabon/events{/privacy}","received_events_url":"https://api.github.com/users/lpabon/received_events","type":"User","site_admin":false},{"login":"ipochi","id":6972950,"node_id":"MDQ6VXNlcjY5NzI5NTA=","avatar_url":"https://avatars2.githubusercontent.com/u/6972950?v=4","gravatar_id":"","url":"https://api.github.com/users/ipochi","html_url":"https://github.com/ipochi","followers_url":"https://api.github.com/users/ipochi/followers","following_url":"https://api.github.com/users/ipochi/following{/other_user}","gists_url":"https://api.github.com/users/ipochi/gists{/gist_id}","starred_url":"https://api.github.com/users/ipochi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ipochi/subscriptions","organizations_url":"https://api.github.com/users/ipochi/orgs","repos_url":"https://api.github.com/users/ipochi/repos","events_url":"https://api.github.com/users/ipochi/events{/privacy}","received_events_url":"https://api.github.com/users/ipochi/received_events","type":"User","site_admin":false}],"milestone":null,"comments":1,"created_at":"2018-04-23T17:01:25Z","updated_at":"2018-07-03T21:52:49Z","closed_at":"2018-07-03T21:52:49Z","author_association":"MEMBER","body":"**Is this a BUG REPORT or FEATURE REQUEST?**:\r\nFEATURE\r\n\r\n**Description**:\r\nThe SDK for OpenStorage will provide developers with ability to programatically control OpenStorage based storage systems like Portworx. Developers will be provided with documentation, an API, clients for multiple languages, and an mock storage application to test and develop their code.\r\n\r\n**Architecture**:\r\nThe SDK will run a gRPC server which will communicate with the OpenStorage interfaces, exporting only the objects and API functions to be consumed by external developers. See diagram below:\r\n\r\n```\r\n+------------+\r\n|            |        +------------+\r\n|   Current  |        |            |\r\n|   REST     |        |  gRPC SDK  |\r\n|            |        |            |\r\n+------------+--------+------------+\r\n|                                  |\r\n|    OpenStorage Interfaces        |\r\n|                                  |\r\n+----------------------------------+\r\n```\r\n\r\n\r\n**Tasks**:\r\n- [x] Share gRPC code with current CSI server to minimize duplication\r\n- [x] Update `api.proto` with the RPC and Messages needed for the SDK\r\n- [x] Update https://libopenstorage.github.io with documentation based on `api.proto`.\r\n- [x] Create a server which serves gRPC for the SDK in `api/server/sdk`\r\n- [x] Create an implementation for Cluster calls (including unit tests)\r\n- [x] Create an implementation for Volume calls (including unit tests)\r\n- [x] Update `Makefile` to create clients in Python, Ruby, Golang and place them in `api/client/sdk`\r\n- [x] Create a fake in-memory driver implementation which can be used to create a simple application for developers to communicate with while developing and testing their code.\r\n\r\n**Cloud APIs**:\r\n- [x] Cloud Credentials APIs\r\n- [x] Scheduling Policy\r\n\r\n**Volume APIs**:\r\n- [ ] Stat?\r\n- [x] Cloud Backup\r\n- [ ] Cloud Backup Scheduling\r\n- [x] Object Storage\r\n\r\n**Fake Driver**\r\n- [x] Support Credentials\r\n- [x] Support CloudBackup\r\n\r\nOnce done, we need a:\r\n- [ ] Finalize documentation\r\n- [ ] Full Review of the API"}}
{"actor":{"display_login":"lpabon"}}