> On Jan 16, 2014, at 2:09 AM, "Flavio Percoco" <fla...@redhat.com> wrote:
> 
>> On 15/01/14 21:35 +0000, Jesse Noller wrote:
>> 
>>> On Jan 15, 2014, at 1:37 PM, Doug Hellmann <doug.hellm...@dreamhost.com> 
>>> wrote:
>>> 
>>> Several people have mentioned to me that they are interested in, or 
>>> actively working on, code related to a "common" client library -- something 
>>> meant to be reused directly as a basis for creating a common library for 
>>> all of the openstack clients to use. There's a blueprint [1] in oslo, and I 
>>> believe the keystone devs and unified CLI teams are probably interested in 
>>> ensuring that the resulting API ends up meeting all of our various 
>>> requirements.
>>> 
>>> If you're interested in this effort, please subscribe to the blueprint and 
>>> use that to coordinate efforts so we don't produce more than one common 
>>> library. ;-)
>>> 
>>> Thanks,
>>> Doug
>>> 
>>> 
>>> [1] https://blueprints.launchpad.net/oslo/+spec/common-client-library-2
>> 
>> *raises hand*
>> 
>> Me me!
>> 
>> I’ve been talking to many contributors about the Developer Experience stuff 
>> I emailed out prior to the holidays and I was starting blueprint work, but 
>> this is a great pointer. I’m going to have to sync up with Alexei.
>> 
>> I think solving this for openstack developers and maintainers as the 
>> blueprint says is a big win in terms of code reuse / maintenance and 
>> consistent but more so for *end-user developers* consuming openstack clouds.
>> 
>> Some background - there’s some terminology mismatch but the rough idea is 
>> the same:
>> 
>> * A centralized “SDK” (Software Development Kit) would be built condensing 
>> the common code and logic and operations into a single namespace.
>> 
>> * This SDK would be able to be used by “downstream” CLIs - essentially the 
>> CLIs become a specialized front end - and in some cases, only an argparse or 
>> cliff front-end to the SDK methods located in the (for example) 
>> openstack.client.api.compute
>> 
>> * The SDK would handle Auth, re-auth (expired tokens, etc) for long-lived 
>> clients - all of the openstack.client.api.** classes would accept an Auth 
>> object to delegate management / mocking of the Auth / service catalog stuff 
>> to. This means developers building applications (say for example, horizon) 
>> don’t need to worry about token/expired authentication/etc.
>> 
>> * Simplify the dependency graph & code for the existing tools to enable 
>> single binary installs (py2exe, py2app, etc) for end users of the command 
>> line tools.
>> 
>> Short version: if a developer wants to consume an openstack cloud; the would 
>> have a single SDK with minimal dependencies and import from a single 
>> namespace. An example application might look like:
>> 
>> from openstack.api import AuthV2
>> from openstack.api import ComputeV2
>> 
>> myauth = AuthV2(…., connect=True)
>> compute = ComputeV2(myauth)
>> 
>> compute.list_flavors()
> 
> I know this is an example but, could we leave the version out of the
> class name? Having something like:
> 
> from openstack.api.v2 import Compute
> 
>       or
> 
> from openstack.compute.v2 import Instance
> 
> (just made that up)
> 
> for marconi we're using the later.

Definitely; it should be based on namespaces. 

> 
>> This greatly improves the developer experience both internal to openstack 
>> and externally. Currently OpenStack has 22+ (counting stackforge) potential 
>> libraries a developer may need to install to use a full deployment of 
>> OpenStack:
>> 
>> * python-keystoneclient (identity)
>> * python-glanceclient (image)
>> * python-novaclient (compute)
>> * python-troveclient (database)
>> * python-neutronclient (network)
>> * python-ironicclient (bare metal)
>> * python-heatclient (orchestration)
>> * python-cinderclient (block storage)
>> * python-ceilometerclient (telemetry, metrics & billing)
>> * python-swiftclient (object storage)
>> * python-savannaclient (big data)
>> * python-openstackclient (meta client package)
>> * python-marconiclient (queueing)
>> * python-tuskarclient (tripleo / management)
>> * python-melangeclient (dead)
>> * python-barbicanclient (secrets)
>> * python-solumclient (ALM)
>> * python-muranoclient (application catalog)
>> * python-manilaclient (shared filesystems)
>> * python-libraclient (load balancers)
>> * python-climateclient (reservations)
>> * python-designateclient (Moniker/DNS)
>> 
>> If you exclude the above and look on PyPI:
>> 
>> On PyPi (client libraries/SDKs only, excluding the above - not maintained by 
>> openstack):
>> 
>> * hpcloud-auth-openstack 1.0
>> * python-openstackclient 0.2.2
>> * rackspace-auth-openstack 1.1
>> * posthaste 0.2.2
>> * pyrax 1.6.2
>> * serverherald 0.0.1
>> * warm 0.3.1
>> * vaporize 0.3.2
>> * swiftsc (https://github.com/mkouhei/swiftsc)
>> * bookofnova 0.007
>> * nova-adminclient 0.1.8
>> * python-quantumclient 2.2.4.3
>> * python-stackhelper 0.0.7.1.gcab1eb0
>> * swift-bench 1.0
>> * swiftly 1.12
>> * txAWS 0.2.3
>> * cfupload 0.5.1
>> * python-reddwarfclient 0.1.2
>> * python-automationclient 1.2.1
>> * rackspace-glanceclient 0.9
>> * rackspace-novaclient 1.4
>> 
>> If you ignore PyPI and just want to install the base say - 7 services, each 
>> one of the python-** clients has its own dependency tree and may or may not 
>> build from one of the others. If a vendor wants to extend any of them, it’s 
>> basically a fork instead of a clean plugin system.
>> 
>> On the CLI front - this would *greatly* simplify the work openstackclient 
>> needs to do - it would be able to import from the main SDK and simply 
>> provide the noun-verb command line and any other end-user sugar it wanted 
>> to. Even if each service wanted to keep its own python-X client instead of 
>> relying on openstackclient it would be minimal to depend on the core SDK and 
>> then plugin/extend to build a specialized CLI for the project - if you 
>> really wanted, you could also extend openstackclient directly.
> 
> Thanks for the info. It's a great way to see where we're standing now
> and the relevance of this argument.
> 
>> 
>> Roughly this is the punch list I was looking at:
>> 
>> 1: a blueprint that explains the rationale behind unifying the Client code 
>> from the openstack clients; using a single REST interface, common object 
>> hierarchy, etc.
>> 2: A path for implementation of the common SDK including operational code
>> 
>> 4: dealing with a single binary cross platform for the CLI that derives from 
>> the common SDK (hard requirement)
>> 5: Standardization of names (e.g Compute != Nova, use the real names, not 
>> project names)
>> 6: Allow vendors to alias names for services to match their offerings
> 
> +1
> 
> Keeping the library separated from the CLI binary is a most. Marconi
> client, for instance, is just a library and we are planning to use
> openstack's common client for the CLI.
> 
>> 
>> I’ll begin working on the blueprint you pointed to - given this is more akin 
>> to a horizon-like UX project than a sub project of Oslo itself; does it 
>> really belong there? I do see the work within the individual clients:
>> 
>> https://review.openstack.org/#/q/topic:bp/common-client-library-2,n,z
>> 
>> Jamie’s comments in:
>> 
>> https://review.openstack.org/#/c/63164/
>> 
>> Do concern me as I’d like to not do this as a lowest common denominator; in 
>> this case the client code for keystoneclient might be in openstack.api.auth 
>> but it would be able to be as advanced as it would like from an api 
>> standpoint - and whatever subset of functionality could be exposed in higher 
>> level abstractions (such as a CLI). Bonus is that horizon could potentially 
>> use this work.
> 
> This one last point is very important as well. The levels of
> abstraction of the common SDK and CLI shouldn't prevent services from
> specializing it.
> 
> FF
> 
> -- 
> @flaper87
> Flavio Percoco
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev@lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to