Wednesday, 2014-02-19

*** ftcjeff has quit IRC00:04
*** yamahata has joined #openstack-meeting-300:25
*** yamahata has quit IRC00:42
*** yamahata has joined #openstack-meeting-300:43
*** david-lyle has quit IRC00:57
*** yamahata has quit IRC02:01
*** yamahata has joined #openstack-meeting-302:59
*** julim has quit IRC03:02
*** david-lyle has joined #openstack-meeting-304:13
*** lcheng has joined #openstack-meeting-304:23
*** coolsvap has joined #openstack-meeting-304:25
*** yamahata_ has quit IRC04:51
*** yamahata_ has joined #openstack-meeting-304:56
*** lcheng has quit IRC05:09
*** lcheng has joined #openstack-meeting-305:24
*** DinaBelova_ is now known as DinaBelova05:37
*** amotoki has quit IRC05:39
*** coolsvap1 has joined #openstack-meeting-305:59
*** coolsvap has quit IRC06:03
*** amotoki has joined #openstack-meeting-306:23
*** amotoki has quit IRC06:25
*** amotoki has joined #openstack-meeting-306:26
*** lcheng has quit IRC06:39
*** lcheng has joined #openstack-meeting-306:52
*** mrunge has joined #openstack-meeting-307:02
*** mrunge has quit IRC07:02
*** lcheng has quit IRC07:04
*** mrunge has joined #openstack-meeting-307:04
*** MaxV has joined #openstack-meeting-307:08
*** saju_m has joined #openstack-meeting-307:30
*** MaxV has quit IRC07:32
*** jtomasek has joined #openstack-meeting-307:35
*** DinaBelova is now known as DinaBelova_07:40
*** MaxV has joined #openstack-meeting-307:53
*** MaxV has quit IRC07:57
*** DinaBelova_ is now known as DinaBelova08:20
*** saju_m has quit IRC08:21
*** DinaBelova is now known as DinaBelova_08:28
*** DinaBelova_ is now known as DinaBelova08:28
*** MaxV has joined #openstack-meeting-308:28
*** openstack has joined #openstack-meeting-308:42
-dickson.freenode.net- [freenode-info] if you're at a conference and other people are having trouble connecting, please mention it to staff: http://freenode.net/faq.shtml#gettinghelp08:42
*** ChanServ sets mode: +o openstack08:42
*** jcoufal has joined #openstack-meeting-308:52
*** coolsvap1 has quit IRC09:06
*** coolsvap has joined #openstack-meeting-309:34
*** DinaBelova is now known as DinaBelova_09:35
*** DinaBelova_ is now known as DinaBelova09:47
*** saju_m has joined #openstack-meeting-309:58
*** coolsvap has quit IRC11:57
*** yamahata has quit IRC12:36
*** enykeev has quit IRC12:38
*** david-lyle has quit IRC13:01
*** tmazur has joined #openstack-meeting-313:08
*** tmazur has quit IRC13:28
*** tmazur has joined #openstack-meeting-313:40
*** ftcjeff has joined #openstack-meeting-313:53
*** saju_m has quit IRC14:11
*** lblanchard has joined #openstack-meeting-314:15
*** yamahata has joined #openstack-meeting-314:19
*** tmazur has quit IRC14:20
*** julim has joined #openstack-meeting-314:23
*** tmazur has joined #openstack-meeting-314:33
*** yamahata has quit IRC14:39
*** yamahata has joined #openstack-meeting-314:39
*** dhellmann has quit IRC14:49
*** dhellmann has joined #openstack-meeting-314:49
*** dguitarbite has joined #openstack-meeting-314:50
*** dhellmann has quit IRC14:50
*** dhellmann has joined #openstack-meeting-314:51
*** mwagner_lap has joined #openstack-meeting-314:56
*** lazy has joined #openstack-meeting-315:15
*** lazy is now known as Guest3160415:16
*** DinaBelova is now known as DinaBelova_15:16
*** coolsvap has joined #openstack-meeting-315:33
*** david-lyle has joined #openstack-meeting-315:39
*** amotoki_ has joined #openstack-meeting-315:58
*** jpomero has joined #openstack-meeting-316:00
*** dguitarbite has quit IRC16:05
*** DinaBelova_ is now known as DinaBelova16:15
*** Guest31604 has quit IRC16:18
*** david_lyle_ has joined #openstack-meeting-316:24
*** jcoufal has quit IRC16:28
*** david-lyle has quit IRC16:28
*** mrunge has quit IRC16:37
*** gyee has joined #openstack-meeting-316:43
*** edleafe has joined #openstack-meeting-316:51
*** tmazur has quit IRC16:52
*** jnoller has joined #openstack-meeting-317:06
*** notmyname has joined #openstack-meeting-317:07
*** amotoki_ has quit IRC17:14
*** dtroyer has joined #openstack-meeting-317:20
*** gyee has quit IRC17:33
*** MaxV has quit IRC17:35
*** jcoufal has joined #openstack-meeting-317:36
*** pballand has joined #openstack-meeting-318:04
*** david_lyle_ is now known as david_lyle18:08
*** chris_johnson has joined #openstack-meeting-318:09
*** pballand has quit IRC18:22
*** pballand has joined #openstack-meeting-318:24
*** chris_johnson is now known as wchrisj|away18:26
*** MaxV has joined #openstack-meeting-318:27
*** wchrisj|away is now known as chris_johnson18:30
*** chris_johnson has quit IRC18:32
*** wchrisj has joined #openstack-meeting-318:32
*** rdodev has joined #openstack-meeting-318:37
*** rgbkrk has joined #openstack-meeting-318:39
*** redrobot has joined #openstack-meeting-318:45
*** Alex_Gaynor has joined #openstack-meeting-318:53
jnollerTwo minutes until the python-openstack meeting18:59
jnollerpython-openstacksdk meeting :|18:59
*** briancurtin has joined #openstack-meeting-318:59
jnollerOk. It's time19:00
jnollerThis is my first openstack meeting MCing - so please be gentle.19:01
*** terrylhowe has joined #openstack-meeting-319:01
jnollerBackground: https://wiki.openstack.org/wiki/PythonOpenStackSDK19:01
*** bknudson has joined #openstack-meeting-319:01
*** markmcclain has joined #openstack-meeting-319:01
dhellmanndo you want to start the meeting bot?19:01
edleafe#startmeeting19:01
jnollerCurrent Agenda: https://wiki.openstack.org/wiki/Meetings/PythonOpenStackSDK19:01
openstackedleafe: Error: A meeting name is required, e.g., '#startmeeting Marketing Committee'19:01
*** MaxV has quit IRC19:01
jnoller#startmeeting Python-Openstacksdk19:01
openstackMeeting started Wed Feb 19 19:01:40 2014 UTC and is due to finish in 60 minutes.  The chair is jnoller. Information about MeetBot at http://wiki.debian.org/MeetBot.19:01
openstackUseful Commands: #action #agreed #help #info #idea #link #topic #startvote.19:01
*** openstack changes topic to " (Meeting topic: Python-Openstacksdk)"19:01
openstackThe meeting name has been set to 'python_openstacksdk'19:01
*** dolphm has joined #openstack-meeting-319:01
jnollerBackground: https://wiki.openstack.org/wiki/PythonOpenStackSDK19:02
jnollerCurrent Agenda: https://wiki.openstack.org/wiki/Meetings/PythonOpenStackSDK19:02
dhellmann#link https://wiki.openstack.org/wiki/PythonOpenStackSDK19:02
jnoller(thank you: I couldn't find the bot commands)19:02
*** jamielennox has joined #openstack-meeting-319:03
*** lbragstad has joined #openstack-meeting-319:03
jnollerFirst Item, if you are here for the python-openstackSDK discussion, please state your name, and affiliation if any.19:03
jnollerJesse Noller, Rackspace19:03
dhellmanno/ dreamhost19:03
dtroyerDean Troyer, Nebula19:04
briancurtinBrian Curtin, Rackspace19:04
rgbkrkKyle Kelley, Rackspace19:04
bknudsonBrant Knudson, IBM19:04
wchrisjChris Johnson, HP19:04
Alex_GaynorAlex Gaynor, Rackspace (many other affiliations you may or may not care about :P)19:04
edleafeEd Leafe, Rackspace19:04
jamielennoxJamie Lennox, Red Hat19:04
lbragstadLance Bragstad, IBM19:04
dhellmannDoug Hellmann, DreamHost19:04
*** ayoung has joined #openstack-meeting-319:05
dolphmo/, i just lurk19:05
*** smashwilson has joined #openstack-meeting-319:05
markmcclainMark McClain, Yahoo19:05
*** mfer has joined #openstack-meeting-319:05
*** glyph has joined #openstack-meeting-319:06
jnollerOkie doke19:06
redrobotDouglas Mendizabal, Rackspace (mostly lurking as well)19:06
jnollerNext Item is this: Feedback on the wiki / current state (open discussion)19:06
smashwilsonAsh Wilson, Rackspace (mostly here to lurk)19:06
dhellmann#topic Feedback on the wiki / current state (open discussion)19:06
jnollerSo, does anyone want a brief summary / background of the problem we're trying to solve for19:06
jnoller#topic Feedback on the wiki / current state (open discussion)19:07
*** openstack changes topic to "Feedback on the wiki / current state (open discussion) (Meeting topic: Python-Openstacksdk)"19:07
dhellmannI think I follow the idea, but I would like to make sure I understand the requirements as listed19:07
rgbkrkThere is a disconnect between users of openstack and developers/operators of openstack, and we need a unified, clean SDK that unites OpenStack.19:07
dhellmannSpecifically, the "Jargon free" statement.19:08
*** MaxV has joined #openstack-meeting-319:08
jnollerIn summary: This project aims to create a unified and clear software development toolkit that is clear, consistent and of high quality for developer consumers of openstack clouds.19:08
Alex_Gaynordhellmann: So, a big problem for consumers of OpenStack clouds is they don't know what a "Swift" or a "Glance" is. They know what "Object storage" or "Image storage" is though.19:08
jnollerdhellmann: What's the question you had?19:08
dhellmannIn the CLI, we've avoided using the service names at all. Do we think the SDK will require using service names at all?19:08
dhellmannFor example, one doesn't say "openstack neutron do something for me" one says "openstack object action"19:09
edleafedhellmann: in the CLI the service name is the command. In an SDK it would be akin to a module name19:09
Alex_GaynorI don't necessarily think we'll need to, but if we do prefer "Compute" to "Nova".19:09
dtroyerdhellmann: I've interpreted this as being the same thing we've done in OSC… no project names19:09
dhellmannedleafe: right, but does the module need to be "compute" or would it be "server"?19:09
Alex_Gaynorcompute or server seem equally fine19:09
jnollerI think using the service names (e.g.: swift vs. storage) should be aliased/hidden from end-users. When you want storage, you want storage.19:09
bknudsondhellmann: what if the same object + action exists on 2 different services? (e.g., nova network and neutron19:09
dtroyerthere's a difference between objects and API names19:09
edleafedhellmann: it could be either, but certainly not 'nova'19:10
dhellmannyeah, I agree, we should not use code names19:10
jnollerId look at it as namespacing of the clients19:10
jnollerfrom openstack.services.compute import Blah for example19:10
dhellmannI'm trying to suggest that we talk about the actions the cloud can take and the objects, rather than any implementation details of those services19:10
Alex_Gaynor==dhellmann19:10
dhellmannso from openstack.server import something19:10
jamielennoxjnoller: i've come around a little on the all-in-one approach, but is that that much better than from keystoneclient import ?19:11
jnoller#idea I'm trying to suggest that we talk about the actions the cloud can take and the objects, rather than any implementation details of those services dhellmann19:11
edleafedhellmann: iow, create_server() rather than server.create() ?19:11
dhellmannin the case where an action can be handled by more than one service, the client needs to figure out which to use19:11
dhellmannif neutron is in the service catalog, use that, otherwise, use nova's api19:11
dolphmjamielennox: import keystoneclient as identityclient  # namespace problem solved ;)19:11
jnollerjamielennox: Yes: it is as its consistent namespacing and doesn't rely on the fragility of python's packaging system19:11
dhellmannedleafe:  no, server.create() is great, but no "compute" module in the public API19:11
jamielennoxdolphm: ++19:11
*** wchrisj has quit IRC19:11
Alex_GaynorThe issue here is not namespacing, it's that no actual user knows or cares what keystone is.19:12
jnoller+119:12
*** chris_johnson has joined #openstack-meeting-319:12
briancurtinyes19:12
dhellmannAlex_Gaynor: +119:12
mfer+119:12
jnollerand they don't want to install it19:12
dhellmannbut they also don't know what "identity" is19:12
jamielennoxjnoller: i agree that the clients need cleaning up and some consistency, i'm not sure we should work around pypis faults19:12
dhellmannthey know "I want to login"19:12
edleafedhellmann: so no outside knowledge of endpoints?19:12
dhellmannedleafe: if we can avoid it, yes19:12
dolphmAlex_Gaynor: right, i don't care either; i'm all on board with presenting high level operations to end users19:12
edleafeok, got it19:12
dhellmannedleafe: maybe an API for saying "I want to talk to a specific region, give me a handle to that region"19:13
dolphmedleafe: ++19:13
edleafeso no separate clients at all19:13
dhellmannedleafe: right19:13
jnollerjamielennox: We've gotten this complaint from *most* users trying to use openstack clouds, big and small. They do not want to developer against 22 packages with varying dependencies and namespaces and client names / behaviors.19:13
edleafejust a single client that should know how to do what you want19:13
dhellmannedleafe: right19:13
chris_johnson+119:13
dhellmannthat does raise the question of where to stop, though19:13
Alex_Gaynor==edleafe; and maybe it doesn't have every single method on it, you can get child clients or something, but one entry point19:13
dhellmannfor example, not all projects are integrated -- do they belong in the sdk or not?19:13
jamielennoxdhellmann: ++19:14
Alex_GaynorI think "integrated projects" is a reasonable initial criterion.19:14
jamielennoxjnoller: i don't disagree with the umbrella project19:14
jnollerdhellmann: For non integrated projects the plugin system needs to work for it19:14
dhellmannbut I think starting out with the integrated projects will give us plenty to do, so we can answer that question later19:14
edleafewhat about multiple region support?19:14
Alex_Gaynor==dhellmann19:14
jamielennoxjnoller: so back to core and non-core plugins?19:14
dhellmannjnoller: there's a specific prohibition against an extension system in the requirements19:14
dhellmannjamielennox: I think of it as a matter of priority19:14
jnollerdhellmann: No, there's a restriction against using setuptools19:15
jamielennoxedleafe: i'm sure that will be handled19:15
*** julim has quit IRC19:15
dolphmi read the wiki page as "pluggability is mandatory"19:15
briancurtindhellmann: that was my intention (re: priority, core/non-core)19:15
dhellmannjnoller: that's a conversation for the mailing list then19:15
jnollerSpecifically using setup tools as the plugin / extension mechanism causes daily support pain, installation problems and other things I think we can easily avoid19:15
bknudsonis the goal to eventually get rid of the python-*clients ?19:16
dhellmannjnoller: I'd like to hear more about the details of those issues on the ML19:16
bknudsonI don't want to support 2 versions of python-keystoneclient19:16
Alex_Gaynorbknudson: I think it should be.19:16
jamielennoxjnoller: it is also better than writing another one19:16
dhellmannjnoller: I don't want to derail the entire meeting with the technical issues19:16
bknudsonthen I think a requirement is that it has to implement everything the *clients do.19:16
*** morganfainberg has joined #openstack-meeting-319:17
briancurtinbknudson: i don't know over what timespan, but yes19:17
jnollerbknudson: I would like the python-* clients to eventually use this as their backend if they wish to keep them around19:17
edleafebknudson: the idea is to separate the python module from the CLI19:17
dhellmannI also think we need to be careful with the next requirement, of allowing anyone to drop in extensions19:17
edleafethe CLIs could then use the python module19:17
dolphmbriancurtin: it's taken 1.5 years to get any sort of adoption around python-openstackclient, so i wouldn't expect anything very quickly19:17
dhellmannwe are, as a community, working to a goal of interoperability19:17
edleafedevelopers won't need to import all the CLI stuff for their apps19:17
dhellmannvendor and cloud-specific extensions seem to be going in the opposite direction19:17
rdodevbelated intro (sorry!) Ruben Orduz, Rackspace19:17
dolphmedleafe: that's already being solved with python-openstackclient19:17
jnollerdolphm: Do you mean internal adoption or user adoption19:18
jamielennoxedleafe: we are working towards that already19:18
dolphmjnoller: user19:18
dhellmannso I think we should encourage those extensions to be implemented as wrappers, to make it clear they are not part of the client itself19:18
jnollerdolphm: I'd say adoption is a matter of the vendors making it the recommended path for developers and users19:19
edleafejamielennox: but each python-*client re-implements a lot of stuff19:19
jamielennoxedleafe: preaching to the choir19:19
edleafejamielennox: understood. Just 'splaining for everyone else19:19
jnollerdhellmann: Vendor extensions - specifically differences in say, auth, are probably never going away19:19
dhellmannauth may be a separate question, I see utility in that19:20
jnollerdhellmann: the SDK abstracts those differences so that END USERS get the experience of interop19:20
dhellmannbut APIs that are not part of OpenStack for other purposes shouldn't blend in with the client library19:20
bknudsonan auth plugin doesn't have to extend the api if you can pass it in.19:20
jnollerwhile vendors can fulfill business needs19:20
dhellmannbknudson: sure, auth may be an exception19:20
jnollerThere's also the concrete example: CDNs19:21
edleafejnoller: exactly19:21
dhellmannis CDN a feature of openstack?19:21
jnollerthe two major openstack public clouds have CDN support. From a consumer level - I don't care about the implementation of the API, nor do I care about who the host is. I just want to have my "openstack thingie work with the CDN capability if it is on"19:21
bknudsonhow do you verify mocks/stubs? (other than disable as a mock)19:22
edleafedhellmann: no, but it's a feature that many business want/need19:22
dhellmannwell, that's fine -- as openstack developers we should focus on the features of openstack, though19:22
Alex_GaynorYou don't verify a mock/stub, you verify a fake!19:22
edleafedhellmann: the OpenStack SDK will not support it.19:22
Alex_Gaynorhttp://martinfowler.com/articles/mocksArentStubs.html19:22
edleafeBut vendor subclasses might19:22
dhellmannedleafe: what I want to avoid is "from openstack import cdn"19:22
jamielennoxjnoller: right, but on the other hand as a developer i do care about the api. You need to provide that as well19:23
dhellmannbecause if CDN isn't a feature of openstack, it shouldn't look like it is from the API19:23
bknudsonAlex_Gaynor: OK OK! how do you verify a fake, other than not fake?19:23
jnollerdhellmann: I completely agree! Vendor extensions need to come from and be maintained by the vendors, but we should not exclude the potential for them in the design19:23
mferedleafe and the end of the day, the goal is to support end user developers, right? to make it easy for their real world and practical development19:23
jnollerjamielennox: Which API19:23
Alex_Gaynorbknudson: you test it like any other code! In this context a fake ObjectStroage client would just put files in a dic, instead of doing HTTP requests19:23
edleafedhellmann: right, but the SDK should be extensible19:23
dhellmannjnoller: as long as it is not possible for users to be confused when using it, hence the suggestion to use a vendor-specific wrapper19:23
jamielennoxjnoller: identity.v3.user.create()19:23
dhellmannfrom vendor import wrapper; from openstack import client; from provider import auth; c = wrapper(client(auth()))19:24
jamielennoxjnoller: we are a long way off overarching things like CDN19:24
jnollerdhellmann: vendor specific wrappers become vendor specific forks19:24
dolphmjamielennox: openstack.create_user()19:24
bknudsonseems like a vendor could just provide their own api... why does it need to be in openstack api?19:24
edleafedhellmann: I've done just that to add Rackspace CDN stuff to my base OpenStack object storage client19:24
dhellmannjnoller: I have no interest in supporting vendor-specific APIs in the shared client19:24
mfera wrapper is just one way to implement extensions19:24
jamielennoxdolphm: that namespace is going to get very busy19:24
bknudsonjamielennox: openstack.user.create()19:25
jamielennoxdolphm: also there are times i care about v2 vs v319:25
edleafebknudson: because apps written to a vendor API would not be portable19:25
dhellmannmfer: the difference is no user would be confused that the wrapper is part of the client itself19:25
briancurtinbingo19:25
dolphmjamielennox: you shouldn't19:25
dolphmjamielennox: as an end user19:25
dhellmannmfer: and it leaves open the ability of openstack to choose a different API without confusing the user, depending on which plugins are installed in their SDK19:25
glyphbknudson, Alex_Gaynor: A good way to think about "verified fakes" is to think about "fake" as meaning "introspectable, in-memory implementation" rather than "not real implementation"19:25
jamielennoxdolphm: if this is going to replace the various -clients then it will probably need to19:25
mferdhellmann and what about developers who write apps against multiple openstack installs. those with and without extensions19:25
dolphmjamielennox: it needs to care about API versions, sure. but end users should not19:26
mferreal world practicality for end users is of interest to me19:26
glyphbknudson: one of the best examples of "verified fake" as a pattern is SQLite's ":memory:" database connection type; it's tested just as well as the one that writes to files.19:26
dhellmannmfer: how would a wrapper be any different than a plugin? if both clouds don't support the feature in the same way, the code isn't going to be portable19:26
jamielennoxdolphm: the way i see it is you still need support in there somewhere for each api version, which is wrapped in an api agnostic one19:26
dhellmannif rackspace and hp can agree on a cdn API, then they can share a wrapper library19:27
dolphmjamielennox: right19:27
dolphmdhellmann: ++19:27
dhellmannotherwise their shared users aren't going to have the same experience anyway, and we shouldn't make it appear that it is openstack's fault19:27
jnollerdolphm jamielennox the abstraction *most* users would use != remove the ability for advanced users to do: from openstack.services.auth import v2client and manipulate things directly. We won't actively expose those interfaces in the high level abstractions, but the lower levels will exist. The best abstraction is leaky19:27
rgbkrkdhellmann ++19:27
mferdhellmann there are ways to have a plugin work well and then have that cleanly work in applications. i know because i've done it19:27
edleafedhellmann: that's why specific vendor imports are preferable over setuptools entry points19:28
jnollerdhellmann: the high level abstraction would be.19:28
*** rdodev has left #openstack-meeting-319:28
jamielennoxjnoller: ++19:28
rgbkrkjnoller++19:28
dhellmannjnoller: if this is going to be an openstack sdk, it should be an openstack sdk and not an HP & Rackspace sdk19:28
dhellmannI just want users to be clear about what is and is not part of openstack as a whole19:28
jnollerdhellmann: I'm advocating for Openstack first, but vendor extensions are something which affect users day to day19:29
edleafedhellmann: I don't imagine that the vendor-specific stuff would live in this project19:29
jnollerdhellmann: we should *plan* for it, and architect for it19:29
mferdhellmann note, it's not just HP and Rackspace doing extensions. I'm aware of others19:29
dhellmannmfer: sure, that's just the example that was raise19:29
dhellmannit's likely Dreamhost will offer extra services, too19:29
mferarchitect to enable users to use extensions19:29
dhellmannarchitect to ensure users know when they are using an extension, and when not19:30
mferI hope a goal is to endable end user developers to be successful19:30
mferdhellmann yes.19:30
jnollerVendor extensions should be maintained by the vendors: but we need to have a guide and set of common abstractions to show them what to check in, where, how to plugin, where and how to cooperate on high level abstractions.19:30
edleafein this discussion, user == developer19:30
dhellmannedleafe: yes19:30
jnoller"architect to ensure users know when they are using an extension, and when not" +1000000000 dhellmann19:30
mferimagine 3 vendors do extensions in a different manner. if you plan for it they can all do it the same way. one way is better for users19:31
jnollerIt should be clear. Let's call it "extension" ;)19:31
edleafethat's why importing a vendor module for an extension is preferred over setuptools-type extensions19:31
dhellmannedleafe: I'm not sure what that looks like in practice19:31
jnollerOk19:32
mferimport a vendor module that does all the things... or register a vendor extension with the openstack module?19:32
Alex_Gaynorpeople importing modules is clearly preferably to mutating global state19:32
edleafedhellmann: ok, the identity example I have would be something like: from rs_identity import RackspaceIdentity19:33
jnollerSo can I call time out for a second and say it's clear we need to flesh out a wiki page about vendor extension requirements / standards and how they would live / register into the namespace of say, openstack.extensions.*19:33
edleafeIt's clear that you're not using standard OpenStack identity19:33
dhellmannedleafe: ok, sure, that's similar to the generic example I mentioned earlier19:33
edleafeyep19:33
jnollerThat's a concrete action item for a wiki page / blue print19:33
dhellmannand that's what I want19:33
briancurtinjnoller noted19:33
jnollerbriancurtin: thanks!19:33
edleafedhellmann: and the Rackspace class follows the same structure (methods/atts) as the base OpenStack class19:34
dhellmannedleafe: makes sense19:34
jnoller#action it's clear we need to flesh out a wiki page about vendor extension requirements / standards and how they would live / register into the namespace of say, openstack.extensions.*19:35
*** jrist has quit IRC19:35
Alex_GaynorErr, why would they live in the openstack namespace at all?19:35
jnoller#action briancurtin wiki page outlining vendor extension plugins/namespacing/loading and abstractions19:35
dhellmannare there any pages other than https://wiki.openstack.org/wiki/PythonOpenStackSDK that are relevant?19:35
dhellmannI want to make sure I've read everything I should...19:36
edleafeAlex_Gaynor: +119:36
dhellmannit wasn't clear if https://wiki.openstack.org/wiki/SDK-Development was part of this?19:36
jnollerIt is19:36
dhellmannor https://wiki.openstack.org/wiki/SDKs as well19:36
dhellmannok19:36
jnollerdhellmann: I meant to #link to https://wiki.openstack.org/wiki/SDK-Development19:36
dhellmannso one point of feedback is to collect all of those under a namespace19:36
dhellmannit's possible to have slashes in the URLs, for example, so we could have everything live under that SDK page19:36
jnollernaming things is hard19:36
dhellmannalso, making sure the top level page links to the others would help with discoverability19:37
jnollerWho wants to fix the wiki namespacing :)19:37
briancurtini can do some rearranging19:37
dhellmannsearching brought up those few pages, so that worked, but obviously I wasn't sure they were all together19:37
dhellmannthe wiki is full of old project notes :-)19:37
jnoller#action briancurtin fix wiki namespaces / cleaning things up19:37
dhellmannbriancurtin: cool, thanks19:37
jnollerOk19:37
jnoller#topic State of blueprints / API strawman19:38
*** openstack changes topic to "State of blueprints / API strawman (Meeting topic: Python-Openstacksdk)"19:38
briancurtinas for blueprints, these are super high level and contain some thoughts, but no issues have been filed, and we haven't gone that deep yet: https://blueprints.launchpad.net/unifiedsdk19:38
briancurtin(first time writing blue prints, comments/criticism more than welcome)19:38
jnollerYes, we've all held off on deep blue prints until we could discuss this as a community19:39
jnollerSame with so much code19:39
* dhellmann brings up one more pedantic point19:39
dtroyerI did throw some stuff into https://blueprints.launchpad.net/unifiedsdk/+spec/rest-client that reflects some of the work already underway elsewhere19:39
dhellmannshould that be "openstack-sdk" or something? launchpad is used for lots of non-openstack projects19:39
dhellmannalthough I guess there could be a trademark issue19:39
jnollerdhellmann: yeah, the name changed *after* I made the launchpad19:39
dhellmannthat's why we have code names for the other projects19:40
dhellmannjnoller: ok19:40
mferi'd like it to be openstack-sdk-python ... a reusable pattern with the language on the end19:40
dhellmannit's fine as it is, we can fix it when we incubate19:40
mferthis is what developers are used to19:40
jnoller#action jollier rename launchpad project19:40
dhellmannwe should also talk about who is on the drivers team, and eventually the core review team19:40
jnollermfer: Which developers? Python devs for AWS use boto19:40
jnollermfer: how widespread is that naming pattern?19:41
dhellmannjnoller: could you also change the python-osdk-team to allow people to request membership?19:41
dhellmannI think that's called a "moderated team"19:42
jnollerdhellmann: can you show me how offline? I deleted the team the last time I tried ;)19:42
dhellmannhaha, I'll try19:42
jnollerOk19:42
mferaws and azure use it. google calls it a google cloud sdk but doesn't have multiple languages19:42
jnolleraws is inconsistent on the names though, I double checked they vary - but we should have a cross-language standard for naming19:43
dhellmannso aside from those nits, I think there is a lot of good info in the wiki and clearly a lot of thought has gone into this19:43
jnollerdhellmann: thanks!19:43
jnollerok19:43
briancurtindhellmann: as for blueprints, do you have any thought as to direction to take them or do they look ok for the current time/state of the project?19:44
briancurtini can't tell if they're light or just right for where we're at19:44
dhellmannbriancurtin: I didn't find the launchpad project until you linked it above, so I haven't had a chance to review those yet19:44
dhellmannI will, before our next meeting19:44
jnollerbefore everything goes crazy: please let me know if you want to work on blueprints. I'd like to get a sniff-test for two proposed end-user APIs19:44
dolphmbriancurtin: they need content :)19:44
jnollerif you all look at:19:44
jnollerhttps://github.com/stackforge/python-openstacksdk/tree/master/api_strawman19:44
jnoller#link https://github.com/stackforge/python-openstacksdk/tree/master/api_strawman19:45
jnollerWe'll start with the API / structure Alex proposed: Alex_Gaynor you're up19:45
Alex_GaynorSo, I have somewhat limited opinions on the overall public API, but I want to discuss two particular points with respect to implementation strategy:19:46
Alex_Gaynor* Doing all auth using the API hooks in the HTTP layer19:46
Alex_Gaynor* Seperating compute from IO19:46
Alex_GaynorWhat do these mean and why?19:46
Alex_GaynorThe first means we can truly write these as "Just HTTP requests", which gives clean seperation.19:46
rgbkrkWhat holds us back from doing direct auth or simplifying auth? I feel like this is the major hangup everytime someone ends up on a support call.19:46
Alex_GaynorThe latter makes this far easier to test, and makes it more reusable if you change the HTTP layer.19:47
dhellmannI don't understand the issue with auth?19:47
rgbkrkAre we really supporting swauth here?19:47
dolphmbriancurtin: it'd be nice if these "API mockups" were actually in review as WIP for final docs19:47
bknudsonjamielennox has been doing a lot of work on auth plugins in keystoneclient.19:47
Alex_GaynorYou can see if you look in client.py that there's a seperation between the representation of HTTP requests and their execution.19:47
jamielennoxright, i would realllly like you to look through all the plugin stuff we have19:47
dolphmjamielennox: ++19:47
briancurtindolphm: good idea19:48
bknudsonso if there's a difference between v2 and v3 compute API -- how does the python API handle that?19:48
rgbkrkWould the point here in having multiple auths be where the extensions come in to make it simpler for each provider?19:48
bknudsone.g., maybe compute v3 gives you a task handle for a boot request19:49
dhellmannAlex_Gaynor: that seems like a good idea on the face of it, but I wonder if some request types (uploading to glance and swift) might need tighter interaction with the execution?19:49
bknudsonthese are things that it would be nice if the API could hide, but not sure if that's possible.19:49
dolphmbknudson: that would be a backwards compatible addition to the python sdk if a v3 compute endpoint was available19:49
dhellmannAlex_Gaynor: that may just be a matter of ensuring the  request class has a rich enough API, though19:49
Alex_Gaynordhellmann: Upload seems straightforward, the abstract definition of a request just needs to include a file-like/iterable/etc.19:50
Alex_Gaynorfor body that is19:50
dhellmanndolphm: so if the way the caller interacts with the API is completely different, it should be a separate API in the client?19:51
jnollerSo yeah, let's focus on Alex's mock first and his points (readme.rst "import io" example) and https://github.com/stackforge/python-openstacksdk/blob/master/api_strawman/client.py19:51
dhellmannAlex_Gaynor: yeah, I think that works, I just wanted to point out that not all request types are equal19:51
dhellmannwe've already talked about whether it should be client.compute.list_images() or client.images.list()19:51
Alex_GaynorI don't really care which we pick between those two :-)19:52
dolphmAlex_Gaynor: they're quite different!19:52
dhellmannI obviously prefer the latter19:52
dolphmdhellmann: ++19:52
bknudsonLet's got with the latter19:52
chris_johnson++19:52
rgbkrkdhellmann++19:52
dolphmi just don't want 'compute' in there19:52
bknudsonbut why have compute? aren't images in the image source?19:52
bknudsonimages.list()19:53
dhellmannit makes naming things a little challenging, but we can look at what the cli did for some of the object names (it would be nice to be consistent where that makes sense)19:53
dolphmclient.list_images() vs client.images.list()  are both identical to me19:53
edleafedolphm: aren't there cinder images as well?19:53
glyphdhellmann: I'm very much on board with Alex_Gaynor's recommendation about separating request representation from I/O; basically that's the reason I'm here :-).  All request types may not be equal, but all requests are requests and as "request" is a noun, should have an associated type :)19:53
dhellmanndolphm: the difference will come out in how the docs read19:53
dhellmannif it is client.list_images() then we have a HUGE flat API19:53
dolphmdhellmann: e.g. openstack --help19:53
rgbkrkyuck19:53
dhellmannif it is client.images.list() then we have some namespacing, and all of the image-related methods are together in the docs19:53
jnollerYeah, I'd really prefer NOT to have ONE GIANT NAMESPACE19:54
jnollerit's confusing as all get-out19:54
dhellmanndolphm: right, it's the same reason I suggested "object verb" for the CLI instead of "verb object"19:54
jamielennoxdhellmann: as mentioned though there is some contention around words like images19:54
rgbkrkAssuming there's only one context for images, ever.19:54
dolphmfwiw openstack --help: http://pasteraw.com/t01pe2jm4rqzlwvlqrelulrzfswr2ik19:54
dhellmannjamielennox: images are a glance thing, where is the contention?19:54
*** annegentle has joined #openstack-meeting-319:54
rgbkrkThey make sense to someone used to working with raw disk dumps as images, less to someone is more of a web dev19:55
edleafedhellmann: cinder uses images, too19:55
rgbkrkas far as nomenclature is concerned19:55
dhellmannrgbkrk: we're not going to get away from terminology overload19:55
jnollerthis is why I think we need the official service names contain the caller methods19:55
glyphdhellmann: IMHO, client.list_images and client.images.list are _both_ wrong :)19:55
dhellmannedleafe: the cinder-implemented operations for images would need to be named differently, I guess19:56
dhellmannglyph: alternate?19:56
dolphmjnoller: like .identity. ?19:56
edleafedhellmann: sure - just pointing out name overloading19:56
jnollerservices.blockstorage.list_block() gives me context as a developer19:56
rgbkrkThat was my thought on what the contention is, from supporting web devs using our services.19:56
glyphdhellmann: As a very basic straw man, ImagesClient(client).list_images()19:56
dolphmglyph: what's your alternative suggestion?19:56
* dolphm spoke too soon19:56
edleafewhich is why I don't think we'll get 100% away from services in the namespace.19:56
dhellmannglyph: I don't see how that's substantially different, except that in my example the main client may implicitly create an ImagesClient19:56
jamielennoxglyph: hey i'm writing that design in keystoneclient now19:56
dolphmglyph: yeah, that's not so different than what we're providing today with the existing libraries19:57
dhellmannedleafe: what operations does cinder support on images?19:57
dolphmjamielennox: ++19:57
chris_johnsondhellmann: Implicit in the approach of client.images.list() is the idea of having a collection named images that has operations on it - more OO. It's a good thing IMO19:57
jnollerdhellmann: YES the main client could implicitly interrogate the service catalog and create the sub clients19:57
edleafedhellmann: create, delete, and use as base for a new volume19:57
jamielennoxjnoller: that's getting awfully automagical19:58
dhellmannjnoller: it could, or it could just create them when the code calls for it19:58
dolphmjamielennox: is that not exactly what you're providing the tooling for?19:58
jnollerjamielennox: Users don't care about authentication or service catalogs. They want to "make server start from my application"19:58
dtroyersounds like a ClientManager to me…we're already doing that19:58
dhellmannedleafe: maybe those are "volume images"19:58
dhellmanndtroyer: right19:58
jnollerok19:58
dhellmannedleafe: i.e., different object type19:58
jnollerwe're just about out of time19:58
jnollerquestion19:59
dhellmannbut we can work out those details with more thought19:59
jamielennoxdolphm: i don't like the idea of attributes sometimes available and sometimes not19:59
jamielennoxi would much prefer the error after i've called something19:59
edleafedhellmann: yep, in my strawman it's volume.create_image()19:59
dhellmannjamielennox: +1 - make the object on demand, and let the api call fail if the service isn't there19:59
jnollerwhich of the HIGH level APIs on https://github.com/stackforge/python-openstacksdk/blob/master/api_strawman/README.rst makes more logical sense to you19:59
jnollerthere's two there.19:59
dhellmannedleafe: volume_images.create()19:59
edleafedhellmann: no, since you're acting on the volume20:00
edleafecreating an image of that volume20:00
rgbkrkthe first20:00
*** pballand has quit IRC20:00
jamielennoxjnoller: the second one bundles the auth with the transport layer - don't do that20:00
dhellmannedleafe: ah, didn't get that20:00
dolphmjnoller: an hour is up20:00
glyphdhellmann: The difference is that in your example the main client needs to know how to implicitly create ImagesClient, there needs to be a registry somewhere, and that configurable run-time registry can change what attributes are on your object, and hence what API contract you can expect, making the behavior of subsequent executions of the same code unpredictable in the face of intermittent outages20:00
jnoller#action jollier "note make the object on demand, and let the api call fail if the service isn't there"20:00
dhellmannjnoller or Alex_Gaynor : could you describe the difference20:00
rgbkrkI don't like the list_image20:00
*** lblanchard has quit IRC20:01
*** julim has joined #openstack-meeting-320:01
dtroyerglyph: welcome to OpenStack versioned APIs20:01
rgbkrkwhoops20:01
dhellmannglyph: well, that gets back to the original question of what should be included, only OpenStack features or any plugins20:01
*** jrist has joined #openstack-meeting-320:01
jamielennoxjnoller: on an administrative note can we make these meetings one day before - it's probably the difference in me being able to attend20:01
dhellmannglyph: because if it's only OpenStack features, then the main client can just import the classes it needs without a registry20:01
jnollerjamielennox: I made it a week? before20:02
dhellmanndtroyer: good point, I don't see versioning exposed anywhere, should it be?20:02
Alex_GaynorI think glyph's point is that if people create ImageClient themselves, it obviates the need for a distiction20:02
edleafewe're over time and haven't really discussed the different approaches, or how they can be combined. How about review between now and next week?20:02
jamielennoxjnoller: i meant the start time - 24 hours20:02
Alex_Gaynorthere's simply stuff you import from openstack and stuff you import from somewhere else20:02
dtroyerdhellmann: once we know how to do it, yes20:02
edleafeAnd then discuss next meeting?20:02
jamielennoxthat buts it up against keystone20:02
rgbkrkThe only annoyance about failing if a service isn't there is that you have to try each operation to see what your provider supports (in case their docs don't list it somehow).20:02
dhellmannedleafe: good idea20:02
jnollerjamielennox: yeah, this was based on the doodle: I'm email a new one and we'll pick an official cadence/time20:02
*** lblanchard has joined #openstack-meeting-320:03
jnollerYeah, we're over time: what's the best way to flesh out the API and get reviews on them: check them in, or blueprint, or wiki?20:03
dhellmannI'd like to see a blueprint and a ML discussion20:03
dhellmanndo we have a git repo?20:03
jnolleryeah, I linked to it20:04
jnollerhttps://github.com/stackforge/python-openstacksdk/tree/master/api_strawman20:04
dhellmannok, I'll read the logs20:04
briancurtinhttps://github.com/stackforge/python-openstacksdk20:04
jamielennoxjnoller: i'd prefer some wiki or blueprints before we write any code - testing or not20:04
dhellmannoh, that one, ok20:04
dhellmannI didn't even read the URL, I just clicked it20:04
* dhellmann is too trusting20:04
jnollerjamielennox: have a link to a BP that walks through a high level API and then underlying architecture?20:04
jnollerjamielennox: It's helps us newbs do some big design up front ;)20:05
jamielennoxjnoller: not sure it exists - but this is fairly ambitious so we might need a first20:05
jnoller#action Alex_Gaynor Flesh out your underlying http transport separation example documented on the wiki / blueprints20:05
jamielennoxlet's move back to -sdks at least20:06
jnollerOk20:06
jnollerThank you everyone, I mean it - it's really helpful to hear from everyone. We want to do this for the benefit of openstack** so it's good to have all these perspectives!20:07
dhellmann++20:07
chris_johnsonThanks jnoller:20:07
jnoller#endmeeting20:07
*** openstack changes topic to "Free for all (Meeting topic: Horizon)"20:07
openstackMeeting ended Wed Feb 19 20:07:31 2014 UTC.  Information about MeetBot at http://wiki.debian.org/MeetBot . (v 0.1.4)20:07
openstackMinutes:        http://eavesdrop.openstack.org/meetings/python_openstacksdk/2014/python_openstacksdk.2014-02-19-19.01.html20:07
openstackMinutes (text): http://eavesdrop.openstack.org/meetings/python_openstacksdk/2014/python_openstacksdk.2014-02-19-19.01.txt20:07
openstackLog:            http://eavesdrop.openstack.org/meetings/python_openstacksdk/2014/python_openstacksdk.2014-02-19-19.01.log.html20:07
jnollerjoin us in #openstack-sdks20:07
*** smashwilson has left #openstack-meeting-320:08
*** rgbkrk has left #openstack-meeting-320:08
*** dolphm has left #openstack-meeting-320:10
*** markmcclain has quit IRC20:12
*** lbragstad has left #openstack-meeting-320:19
*** markmcclain has joined #openstack-meeting-320:30
*** markmcclain1 has joined #openstack-meeting-320:31
*** markmcclain1 has quit IRC20:32
*** carl_baldwin has joined #openstack-meeting-320:33
*** redrobot has left #openstack-meeting-320:34
*** markmcclain has quit IRC20:34
*** jamielennox has left #openstack-meeting-320:49
*** mwagner_lap has quit IRC20:53
*** bknudson has left #openstack-meeting-320:55
*** DinaBelova is now known as DinaBelova_20:58
*** redrobot has joined #openstack-meeting-321:06
*** rgbkrk has joined #openstack-meeting-321:21
*** markmcclain has joined #openstack-meeting-321:28
*** markmcclain has quit IRC21:48
*** julim has quit IRC21:58
*** ttrifonov is now known as ttrifonov_zZzz21:58
*** mfer has quit IRC22:22
*** jtomasek has quit IRC22:27
*** jomara has quit IRC22:29
*** lblanchard has quit IRC22:36
*** glyph has left #openstack-meeting-322:41
*** markmcclain has joined #openstack-meeting-323:03
*** rgbkrk has quit IRC23:03
*** markmcclain1 has joined #openstack-meeting-323:05
*** rgbkrk has joined #openstack-meeting-323:07
*** markmcclain has quit IRC23:07
*** julim has joined #openstack-meeting-323:08
*** jnoller has quit IRC23:10
*** carl_baldwin has quit IRC23:10
*** pballand has joined #openstack-meeting-323:10
*** yamahata has quit IRC23:21
*** chris_johnson has quit IRC23:28
*** openstack has joined #openstack-meeting-323:34
*** ChanServ sets mode: +o openstack23:34
*** pballand has quit IRC23:34
*** terrylhowe has left #openstack-meeting-323:34
*** MaxV has quit IRC23:36
*** MaxV has joined #openstack-meeting-323:37
*** MaxV has quit IRC23:42
*** rgbkrk has quit IRC23:45
*** pballand has joined #openstack-meeting-323:54
*** pballand has quit IRC23:57
ayoung\close23:58
*** ayoung has left #openstack-meeting-323:58
*** briancurtin has left #openstack-meeting-323:58
*** redrobot has left #openstack-meeting-323:58
*** ftcjeff has quit IRC23:58
*** Alex_Gaynor has left #openstack-meeting-323:59

Generated by irclog2html.py 2.14.0 by Marius Gedminas - find it at mg.pov.lt!