19:00:22 #startmeeting python-openstacksdk 19:00:23 Meeting started Tue Mar 4 19:00:22 2014 UTC and is due to finish in 60 minutes. The chair is briancurtin. Information about MeetBot at http://wiki.debian.org/MeetBot. 19:00:24 Useful Commands: #action #agreed #help #info #idea #link #topic #startvote. 19:00:26 The meeting name has been set to 'python_openstacksdk' 19:01:01 #link agenda: https://wiki.openstack.org/wiki/Meetings/PythonOpenStackSDK#Agenda_for_2014-03-04_1900_UTC 19:01:40 Can everyone here for the Python OpenStack SDK meeting state their name and affiliation? 19:01:55 Jesse Noller, Rackspace 19:01:58 Matt Farina, HP 19:02:04 Brant Knudson, IBM 19:02:06 Brian Curtin, Rackspace 19:02:08 Chris Johnson, HP 19:02:09 Ed Leafe, Rackspace 19:02:11 Jamie Lennox, Red Hat 19:03:11 dtroyer: we're in the name & affiliation roll call 19:03:32 okā€¦Dean Troyer, Nebula 19:04:06 i think we're probably set to go, people may just roll in late 19:04:11 # topic Feedback on the wiki / current state (open discussion) 19:04:24 #topic Feedback on the wiki / current state (open discussion) 19:04:35 #link https://wiki.openstack.org/wiki/PythonOpenStackSDK 19:05:20 fwiw, i have some wiki stuff to talk about with extensions but it falls explicitly under that topic. the wiki is mostly unchanged since the last meeting outside of that, though 19:06:10 Does anyone have anything to discuss - have people taken a look at the blueprints / etc 19:06:13 has there been any change in the project since last meeting? 19:06:29 i haven't seen anything for blueprint/wiki aspect 19:06:36 is there any code or a repo? 19:06:39 jamielennox: Brian and others have been working on blueprints primarily 19:07:04 jamielennox: perhaps we should discuss your comment on the implement-services blueprint? "I'm still interested in the ability of taking the API version specific core of the various clients and keeping SDK focused on the problem of abstracting that information. It does not affect that we will need to implement bindings to the services though." 19:07:20 bknudson: no - we're still discussing design requirements/ideas 19:07:25 jamielennox: other than that, there's some vendor/third-party extension stuff to discuss that we could jump into 19:08:05 Actually, could you clarify that jamielennox? 19:08:30 briancurtin: sure, it's essentially the same concern i've had previously in the goal of the SDK 19:08:46 is the goal to provide a replacement for all the clients 19:08:57 or a more sane way to deal with them all and do cross api versions nicely 19:09:16 looks like a requirement of this project is to not use the existing clients. 19:09:17 my concern with point a is the duplication of effort 19:09:51 So the blueprint i put up was to start a discussion about how we do cross API versions nicely 19:09:59 jamielennox: The existing clients are not very consistent 19:10:19 i'm particularly coming from keystone here where the change from v2 to v3 is a significant API break 19:10:28 edleafe: i completely agree 19:10:31 I'm not sure there is a way to take the existing client code and have it fit into the requirements 19:11:06 I would say that re-using code from them is good; but the individual clients that we expose as API endpoints to the users needs more consistency: I think the new keystone client is actually a good starting point as an effort for a common backend 19:11:09 mfer: Exactly. There are some good design pieces, but not whole clients 19:11:15 i have been trying to do cross client work recently and i completely agree - but does that mean we start again or try to fix them 19:11:59 jamielennox: were you planning to have other clients import keystoneclient? 19:12:00 Well, there's the other effort under oslo working on code reuse / etc - but I think that we have to actually start from 0 and look at what works and doesn't work - e.g. the keystone changes 19:12:02 if the existing clients can't meet the needs than I don't see another way than to re-implement it. 19:12:02 this is a lot of what andrey is pushing with the common apiclient 19:12:05 jamielennox: in my experience, starting with a good overall design will make adding binding for each additional service that much easier 19:12:19 I think starting fresh rather than trying to do it in-place is a win because we don't have to worry about backward-compatability 19:12:27 dtroyer++ 19:12:29 yep 19:12:31 dtroyer++ 19:12:31 bknudson: not if the session code works out how i would like 19:12:43 dtroyer++ 19:12:57 dtroyer: ok 19:13:24 but I think we *need* to look at what the clients do right jamielennox 19:13:31 we aren't trying to build the next rev for the openstack devs. we're trying to build the first rev for application devs. 19:13:38 mfer: well put 19:14:04 mfer: exactly 19:14:06 mfer: but if it happens to be too good for the openstack devs to pass up, well, win? 19:14:10 mfer: yes, so long as that is not to the exclusion of the devs 19:14:18 (not implying it will) 19:14:30 We have to bring both along for the ride; 19:14:37 but remember the key audience 19:14:49 jamielennox i think it's more about keeping the target in focus so we shoot for a clear goal that try to be all things to all people 19:14:59 there might be something that devs would like. e.g. they're using it to test their REST API. We don't need to support that. 19:15:05 we are building a clean, usable python SDK for python developers 19:15:11 for end-users 19:15:22 ok - didn't mean to sidetrack this again 19:15:53 jamielennox: no man, good question 19:16:04 I think some people were thinking we'd have the API automatically generated. 19:16:12 the blueprint i posted was particularly about how to deal with the cross API versions and distinguishing what is and is not available on a specific api 19:16:19 maybe from the schema for the services. 19:16:22 jamielennox: and I think its fair (and we have to check our assumptions) 19:16:26 (i assume that's where the quote came from) 19:16:43 but I wouldn't expect that would lead to the user API we'd like. 19:16:47 bknudson: I don't think auto-generated code lends itself to sanity 19:17:13 jnoller++ 19:17:45 plus, it'll be a while before that is even available to us for more than 1 or 2 APIs 19:18:15 Yeah, using jsonschema would be awesome, but I *personally* distrust exposing auto-generated code to end-users. 19:18:35 (jumping in late) everyone keeps talking about the "target audience" etc, but it's not clear what segment of developer/users that actually is 19:18:39 jnoller is there much in the form of jsonschema right now? 19:18:58 I like the idea of using that sort of tool to help us as devs keep things up to date tho... 19:19:07 dolphm: from https://wiki.openstack.org/wiki/PythonOpenStackSDK - "application developer consumers" 19:19:08 some APIs are aimed at deployers / cloud administrators - are we targeting them? 19:19:09 the nova v3 api has validation through a schema. 19:19:13 mfer: marconi has some usage of jsonschema from what i remember 19:19:26 dolphm: python developers building apps that use OpenStack services 19:19:46 I saw a small amount of json schema in glance. but, not a whole lot all around 19:20:02 dolphm: I think we discussed some of that last time: the main abstraction wouldn't leak those deployer / admin tools, but there's no reason why the underlying client code would not (essentially a leaky abstraction) 19:20:30 dolphm: Also, I think we totally have room for a OpenStackClient / OpenStackAdmin style set of objects 19:20:33 so I think this is where jamielennox's comment about duplication of effort comes in -- 19:20:50 we're going to have the appllication developer API, but we'll still need the other python-* APIs around 19:21:02 jnoller: i don't see why it can't include admin functionality. probably one of the main people who will want to script these services are the cloud admins 19:21:05 bknudson: Not if we implement those to 19:21:11 bknudson: not sure why that follows 19:21:12 so, the long term goal is to support every API exposed by every service, not just a specific subset 19:21:17 jamielennox: Yeah, I'm just saying name them explicitly 19:21:17 If the SDK has basically two layers we can address both needs: the low-level that is API version-specific and an abstraction over that (like jamielennox talked about) to hide the messiness 19:21:28 you can build tools on the SDK that are targeted for different use cases 19:21:35 dtroyer: ++ 19:21:41 the SDK simply wraps the low-level API in a Pythonic way 19:21:42 so for example an application developer API isn't the cloud management API ... 19:21:50 bknudson: eventually, those python-* APIs can use this SDK as a backend. over time, end-users could move off of those python-* APIs into using the highest level abstractions the SDK provides 19:21:50 and Horizon is going to use the management API 19:22:06 briancurtin: that's... ambitious 19:22:24 dolphm: In the internals - yes, for example, openstacksdk.services.keystone could be rich and support all of the APIs; but developers would not start there, they'd use, say, openstacksdk.client which would expose a clean and consistent subset 19:22:24 clarification: when we say "APIs", are we talking about "CLIs"? 19:22:34 briancurtin: what's the benefit of that dependency relationship? 19:22:36 I'm willing to put up with the code duplication since it's different uses. 19:22:44 edleafe: no 19:22:48 edleafe: i hope not 19:22:49 edleafe: a CLI is an application of an API 19:23:02 That's my understanding 19:23:06 CLIs should come nowhere near this project 19:23:07 but it also looks like, if we do have duplication, some of this could be shared... e.g., "Verified mocks/stubs for testing at all layers. " 19:23:11 jamielennox: ++ 19:23:12 The CLI would use the SDK we are discussing 19:23:14 But it sounds like the two are being confused 19:23:22 if this thing has a CLI beyond python -c then i'm going to cry 19:23:29 no CLI here 19:23:34 jamielennox: That was in the spec / wiki page: ideally the python-* clients could leverage a single dependency (this SDK) 19:23:50 But there is one next door that cares deeply about this project ;) 19:24:11 Then explain what the issue is with apps that would be used for deployment vs. other uses 19:24:24 The API is the API, and the SDK simply wraps that 19:24:27 dolphm: to get to your earlier question about the benefit of the dependency, is that it gets each client away from writing their own HTTP stack, their own everything 19:24:33 jnoller: i think the dependency there is a bit backwards - but it works if your goal is deprecation of the python-*clients 19:24:35 There isn't any other functionality being added, is there? 19:24:41 jamielennox: Mine is. 19:24:41 edleafe: I think the distinction is client needs within OpenStack itself (auth_token for example) vs external 19:24:47 Services expose APIs, the SDK wraps them, CLIs and other applications wrap the SDK 19:24:52 jnoller: i think the compatibility will still kill it 19:25:11 jamielennox: Time will answer that; sort of like the V3 discussions 19:25:12 mfer: exactly. So what's the confusion about devops vs. app devs? 19:25:40 They would use tools built for their needs on top of the SDK 19:26:04 edleafe if a dev ops person wants to write an application that helps with ops they can use the SDK. it's the development part rather than the ops part. Ops part uses tools build on top of the SDK 19:26:28 That's my view, too 19:26:31 the dev in devlops is the target of the SDK not the ops part of devops 19:26:51 there also seems to be some confusion around the term "SDK" -- it's a "client library for openstack as a whole" first and foremost, as i understand it 19:27:03 dolphm / jamielennox - is there an action item for us to to clarify this 19:27:17 dolphm it's an SDK. A CLI or other application is a different project 19:27:20 An SDK is more than just a set of APIs provided to you. A complete SDK provides a consumer focused API for interacting with the system, and it additionally includes: 19:27:20 Documentation aimed at users consuming the SDK and system. 19:27:20 Clear examples of usage, including functioning, executable examples. 19:27:20 dolphm: SDK == language binding + docs + examples, etc. 19:27:35 edleafe: agree 19:27:39 jnoller: i'm asking questions for my own benefit, mostly 19:27:50 jnoller: i was just looking for are we looking to replace existing clients 19:27:54 so, my burning question is... what do we want to get done by the next meeting? 19:27:58 OK 19:28:05 indeed, moving on 19:28:12 mfer: We do have the vendor extensions thing brian drafted 19:28:21 * mfer wants code to be written and magic to be made 19:28:22 shall we move on to that? 19:28:30 yes please 19:28:32 #topic https://wiki.openstack.org/wiki/SDK-Development/PythonOpenStackSDK/Extensions 19:28:56 that's just a bunch of ideas and directions throw out on paper - not written to go any one way, just to put things on the table 19:29:16 a lot of it is pulled from previous meeting and previous talks 19:29:19 Clarification: This intentionally avoids setup tools entrypoints 19:30:33 ++ on explicit importing 19:30:59 i think whether extensions are vendor or service orientated will depend on the structure we come up with for the core 19:31:08 Does anyone have strong feelings here: ideally vendor extensions go the way of the dodo however, since say rackspace and HP have CDN, we could collaborate on a openstack.extensions.cdn extension 19:31:10 but both would be nice 19:31:15 yeah 19:31:56 I think there will always be vendor extensions, as much as we'd wish for them to not be needed 19:31:58 (also, love "CloudVendor Cloud" - modifying summit talk slides) 19:32:03 I'm -1 on vendor extensions in the main repo. 19:32:04 jnoller: -- on the setuptools thing though, i realize it's ugly but let's just wrap it behind stevedore and let the setuptools fixes come as they will 19:32:15 Only concern on my part with external is possibility of degraded quality (inadequate test enforcement) 19:32:32 jamielennox: That prevents single binary builds, and consistently causes random installation problems 19:32:38 do we have to call it 'vendor extensions?' is there a functional disctinction from, say, an extension to support a not-yet-incubated API? 19:32:42 If we were to have vendor extensions, how would we even decide what vendors? 19:32:55 Alex_Gaynor: Allow them to commit to the repo 19:32:57 wchrisj: i think that's the cost you pay for being outside the core and it will hurt those vendors who develop externally 19:33:01 Alex_Gaynor: whichever vendors want to provide their extensions 19:33:02 i'd rather not have vendor-specific code in-tree, period 19:33:05 jnoller: who, anybody? 19:33:22 If I run a server in my apartment am I allowed to put my vendor extensions in here? 19:33:28 Alex_Gaynor: If there is an external vendor thing, for say rackspace, I expect a PR from rackspace exposing it 19:33:37 when i think of this I'm thinking of the end users again. The app developer may want to write an app to connect to an IBM private cloud, an HP managed cloud, and a Rackspace public cloud. Now we want to enable them to do that with as little pain as possible 19:33:39 What's the procedure for testing these things in the gate? 19:33:49 jnoller: is single binary builds a concern? 19:33:53 Alex_Gaynor: that's where the internal thing gets complicated, in that there probably has to be some graduation process, third-party testing, etc 19:33:54 jamielennox: Yes 19:33:57 absolutely 19:34:22 jamielennox: that's a big reason why entrypoints need to go away 19:34:51 mfer: that problem is important, is somewhat addressed by both where the code lives, and how it's distributed (and maybe a combination of both) 19:34:58 relying on setuptools to manage extensions is not a win unless you can guarantee the installation environment 19:35:09 is this a windows thing? (out of interest - not because of redhat) 19:35:17 can we go back to something dtroyer said 19:35:26 jamielennox: Windows, OSX and flavors of linux 19:35:32 jamielennox: windoes is the best (worst) example, but not exclusive 19:35:39 briancurtin not exactly. that app developer writing the guts of their code may not know who they are dealing with at that point. 19:35:41 jamielennox: system python is ... not always awesome 19:35:42 if we want to replace setuptools, we can do that in the stevedore layer for portability 19:36:10 quoting dtroyer: " do we have to call it 'vendor extensions?' is there a functional disctinction from, say, an extension to support a not-yet-incubated API?" 19:36:29 I think that's an interesting point and one we haven't touched on 19:36:35 Let's examine solum support for example 19:36:38 mfer: that problem is what i had in mind with the "kitchen sink" distro, where you get 'em all 19:36:51 I think it's perfectly valid for it to be *in the tree* and shipped, but labeled 19:36:52 briancurtin: but that's a packaging problem 19:36:58 briancurtin it's more than including all of them. it's how you work with services based on them 19:37:24 dtroyer: heh, it's a packaging problem, and python packaging is part of the problem, ask dstufft :) 19:37:47 jnoller: labeled how? 19:38:02 jnoller: having all this stuff 'in tree' is going to be a nightmare 19:38:19 jamielennox: ++ 19:38:26 dolphm: Suggestions? We could just say "external" or something akin to that 19:38:31 jamielennox: Why? 19:39:02 Look at (for example) Fog, JClouds, libcloud, and others 19:39:04 unless you have a really strong distinction between stable SDK features and experimental-this-may-change-dramatically-in-the-next-12-minutes you're just going to create the same maintenance nightmare presented by every other client 19:39:12 we already will have 9ish core services, allow X many incubating services, and then we try to put extensions in that can cross between everything 19:39:38 We have close to 25 total services 19:39:41 even just for review load 19:39:54 Is this a question we can defer until after we've written more of the core bits? 19:40:04 Alex_Gaynor: I think that's fair 19:40:05 Alex_Gaynor: i don't think so - it's a question of "what is the core bits" 19:40:14 oh no 19:40:18 Alex_Gaynor: i think it can be simultaneous 19:40:22 jnoller: not *that* "core" 19:40:23 dolphm: core openstack projects for starters? And we can consider branching out? 19:40:29 dolphm: heh :) 19:40:39 keystone, nova, swift, cinder, glance; that should keep us busy for a little while :-) 19:40:43 Alex_Gaynor: i still think that's too vague/broad/ambitious/unrealistic 19:40:45 Alex_Gaynor dolphm: I would say current integrated 19:41:12 dolphm: Current integrated is basically the MVP for the SDK 19:41:24 Alex_Gaynor: what features of keystone, nova, swift, cinder and glance? which release of those services? 19:41:24 there's a BP for this (mostly empty so far) https://blueprints.launchpad.net/unifiedsdk/+spec/define-supported-services 19:41:31 There is a service hierarchy of dependencies that we can use to decide order 19:41:53 everything needs auth, so Identity is first 19:42:02 etc 19:42:13 I agree Identity is first 19:42:19 I'm wondering what libraries are available that we should be making use of? 19:42:21 Yeah 19:42:31 e.g., we've got requests-based code in keystoneclient 19:42:31 bknudson: Example? 19:42:35 bknudson: for what 19:42:37 Compute, Volume, Image are the next most-depended on services, Object-Store maybe too 19:42:50 dtroyer: but no one needs *all* of keystone 19:43:08 dolphm: true, I haven't broken them down past that yet 19:43:15 I'm happy with requests, but maybe there's some reason we should stay away from it and use something else? 19:43:22 right, auth is first, not necessarily identity 19:43:36 dtroyer: i'd like to have a philosophical goal to start with, to make it easier to say "no" to feature X being exposed in an SDK 19:43:40 Identity; Compute, Volume, Image for starters; and of course the core HTTP client (as bknudson says) - fwiw, Alex_Gaynor has an example construct that abstracts the http client away 19:43:41 dolphm: an end-user may not, but an admin or someone else may. that goes back to providing light abstractions for someone building an app to use openstack versus someone operating an openstack cloud 19:43:56 briancurtin: that's why i asked if we were targeting end users or "admins" 19:44:21 end users. 19:44:33 what would an application need to do with keystone? 19:44:36 define users? 19:44:36 dolphm: i think the ultimate success is if this is useable by end-users. however, along the way, there's no reason this can't be designed so that it's fully usable for admins 19:44:39 bknudson: requests is good, i haven't really come across anything else i'd say really needs to be there 19:44:39 Alex_Gaynor: so, "create domain" would never be exposed in the SDK, correct? 19:45:16 "create identity is currently a cloud-admin feature, not something any end user would need to use 19:45:21 maybe we could come up with a scenario that we can aim towards. 19:45:24 "create identity domain" * 19:45:27 dolphm, Alex_Gaynor: i don't think 'never be exposed' is an option for anything - as soon as something is not available then we cannot deprecate the python-*client that does implement it 19:45:30 dolphm: I don't know if I'd necessarily object to having it, but definitely not a priority, and probably documented somewhere special. 19:45:56 whether it's wrapped in a nice cross-API layer is different 19:45:58 so, i see we're about 15 minutes to the end of this meeting and it would be great if we had some actionable tasks to do before the next meeting. what can we do that will get us to code? 19:46:02 the internal openstack.services.keystone would expose that, but not the high level 19:46:10 Alex_Gaynor: so draw the line between "special" and "not special" for me? and why can't we say "no" to "special" ? 19:46:14 If it's in the API, it should be accessible in the SDK. Just document the hell out of it. 19:46:17 For the first cut, why cant we just take the Identity API and implement based on that? 19:46:30 wchrisj: +1 19:46:37 dolphm: things a person using a cloud would want vs. things a person operating a cloud would want 19:46:38 you mean python-keystoneclient? 19:46:49 Alex_Gaynor: Got a link to your example internal structure 19:47:11 jnoller: https://github.com/stackforge/python-openstacksdk/blob/master/api_strawman/client.py 19:47:12 so, before next week can someone take a shot at identity v2? 19:47:27 identity v2 is deprecated. 19:47:36 i would like to be involved in that if we are looking at identity 19:47:38 and yet a load of people are using it 19:48:18 i suggested v2 because it's more widely available in practice. i'm fine with v3 but we should likely support both at some point 19:48:21 jamielennox: can you link to your auth plugins? 19:48:26 Is this structure that Alex_Gaynor laid out a "good enough" starting point for us to build out the basics and get it functioning? 19:48:40 so i've been talking with dtroyer recently about the current managers approach, do we want to keep that design? eg identity.users.list() 19:48:45 Alex_Gaynor might want to chime in why its done that way 19:48:50 Please note that this is *far* less concerned with the public API, and more concerned with the internals. 19:49:00 identity.uysers.lists() vs. identity.list_users() is of no concern to me :-) 19:49:07 https://github.com/openstack/python-keystoneclient/tree/master/keystoneclient/auth 19:49:13 #topic API status 19:49:33 The key idea is clean seperation between data and executing HTTP requests. 19:50:03 Alex_Gaynor: And that design can be used with any SDK design 19:50:13 jnoller: just glancing at the "strawman," it makes a ton of undocumented assumptions 19:50:14 Indeed 19:50:32 dolphm: Which one 19:50:36 https://github.com/stackforge/python-openstacksdk/blob/master/api_strawman/client.py 19:50:40 thanks' 19:51:38 dolphm: that isn't really an API strawman; the one I outlined in https://github.com/stackforge/python-openstacksdk/tree/master/api_strawman/pystack is a working design 19:51:51 For a basic start on the *public* api, we have two rough drafts: https://github.com/stackforge/python-openstacksdk/blob/master/api_strawman/README.rst 19:51:58 fwiw, Alex's code could work well in mine 19:53:20 why is any of this in the tree? 19:53:25 I'd say let's build out from Alex's core, and then get agreeance on the public API - I definitely prefer the "client = OpenStackClient(KeystoneAuth('http://localhost:8000/', 'alex', '****'))" syntax 19:53:57 i believe dolphm did mention previously to back them out and then run through gerrit reviews (or something along those lines) 19:54:06 if the goal is a solid UX, committing "ideas" is a rough way to start 19:54:35 dolphm: Completely fair: This was my first stab at stack forging - so that's my bad. 19:54:47 dolphm: Also, there were not enough eyeballs (again, my fault) 19:55:14 jnoller given what we know and the api strawman... is it time for someone to roll the initial identity client code and get it up for review? 19:55:28 mfer: yeah I was typing 19:56:00 So goals by next meeting: 1: Back out the straw man, 2: Get the core http stuff done enough to begin work on the identity work 19:56:08 1: https://review.openstack.org/#/c/75362/ 19:56:10 3: Get rough identity client 19:56:38 Excellent 19:56:41 Ok so 1 is done 19:56:42 #action https://review.openstack.org/#/c/75362/ 19:56:43 one of the things that we might want to decide is overall -- do we go with an async implementation (with callbacks) or a simpler synchronous one. 19:57:02 bknudson: That is a question Alex_Gaynor's proposal was trying to avoid 19:57:06 #action core HTTP layer to build on 19:57:07 Even if there is a lot of churn/iterating at first, code talks. 19:57:12 #action rough identity client 19:57:18 jnoller: not so much avoid, as allow us to answer multiple ways 19:57:24 Alex_Gaynor: yes 19:57:41 bknudson: I think the inital API we should expose shoudl be synchrnous, but the internals should make it very easy to do an async (twisted, asyncio, etc.) one without rewriting EVERTYHIGN 19:57:46 I apologize all, I have a hard stop now: mfer those tasks look good? 19:58:06 Alex_Gaynor: ok, will be interesting to see examples. 19:58:08 jnoller sounds good to me 19:58:19 thanks all - brian you got this :) 19:58:55 2 minutes on the clock...anything else to cover? any other action points we want to see? 19:59:21 I think I might have a burrito for lunch. 19:59:30 mfer: so are you taking those 3 jobs? 19:59:36 jnoller: the gate also appears to be already wedged, as there are no newlines in the requirements files 19:59:48 https://review.openstack.org/#/c/75852/ 19:59:54 as i have re-written essentially the first 2 recently (so i have an interest) 20:00:36 jamielennox ha... nope. i just want to make sure they are there. for us wchrisj is going to be doing more of the coding 20:00:37 jamielennox: as long as you stop stuffing things into Session ;) 20:00:44 I'd be glad to help get this done 20:01:03 dtroyer: oh, there's more 20:01:19 rename it Client then 20:01:20 I'm looking to help with the code, too 20:01:29 should we take this back to #openstack-sdks? 20:01:42 #endmeeting