[openstack-dev] [TripleO] Should we have a TripleO API, or simply use Mistral?
shardy at redhat.com
Mon Jan 25 21:56:09 UTC 2016
On Fri, Jan 22, 2016 at 11:24:20AM -0600, Ben Nemec wrote:
> So I haven't weighed in on this yet, in part because I was on vacation
> when it was first proposed and missed a lot of the initial discussion,
> and also because I wanted to take some time to order my thoughts on it.
> Also because my initial reaction...was not conducive to calm and
> rational discussion. ;-)
> The tldr is that I don't like it. To explain why, I'm going to make a
> list (everyone loves lists, right? Top $NUMBER reasons we should stop
> expecting other people to write our API for us):
> 1) We've been down this road before. Except last time it was with Heat.
> I'm being somewhat tongue-in-cheek here, but expecting a general
> service to provide us a user-friendly API for our specific use case just
> doesn't make sense to me.
Actually, we've been down this road before with Tuskar, and discovered that
designing and maintaining a bespoke API for TripleO is really hard.
I somewhat agree that heat as an API is insufficient, but that doesn't
necessarily imply you have to have a TripleO specific abstraction, just
that *an* abstraction is required.
> 2) The TripleO API is not a workflow API. I also largely missed this
> discussion, but the TripleO API is a _Deployment_ API. In some cases
> there also happens to be a workflow going on behind the scenes, but
> honestly that's not something I want our users to have to care about.
How would you differentiate between "deployment" in a generic sense in
contrast to a generic workflow?
Every deployment I can think of involves a series of steps, involving some
choices and interactions with other services. That *is* a workflow?
> 3) It ties us 100% to a given implementation. If Mistral proves to be a
> poor choice for some reason, or insufficient for a particular use case,
> we have no alternative. If we have an API and decide to change our
> implementation, nobody has to know or care. This is kind of the whole
> point of having an API - it shields users from all the nasty
> implementation details under the surface.
This is a valid argument, but building (and maintining, forever) a bespoke
API is a high cost to pay for this additional degree of abstraction, and
when you think of the target audience, I'm not certain it's entirely
justified (or, honestly, if our community can bear that overhead);
For example, take other single-purpose "deployment" projects, such as
Sahara, Magnum, perhaps Trove. These are designed primarily as user-facing
API's, where the services will ultimately be consumed by public and private
Contrast with TripleO, where our target audience is, for the most part,
sysadmins who deploy and maintain an openstack deployment over a long
period of time. There are two main groups here:
1. PoC "getting started" folks who need a very simple on-ramp (generalizing
somewhat, the audience for the opinionated deployments driven via UI's)
2. Seasoned sysadmins who want plugability, control and flexibility above
all else (and, simplicity and lack of extraneous abstractions)
A bespoke API potentially has a fairly high value to (1), but a very low or
even negative value to (2). Which is why this is turning out to be a tough
and polarized discussion, unfortunately.
> 4) It raises the bar even further for both new deployers and developers.
> You already need to have a pretty firm grasp of Puppet and Heat
> templates to understand how our stuff works, not to mention a decent
> understanding of quite a number of OpenStack services.
I'm not really sure if a bespoke WSGI app vs an existing one (mistral)
really makes much difference at all wrt raising the bar. I see it
primarily as in implementation detail tbh.
Looking at the prototypes Dan has done, it *is* possible to define a much
more strongly versioned API with Mistral than it is with Heat, which is the
main requirement in terms of lowering the bar (stable, relatively
opinionated by default and easy to use).
More information about the OpenStack-dev