[openstack-dev] [TripleO] Should we have a TripleO API, or simply use Mistral?
Dmitry Tantsur
dtantsur at redhat.com
Wed Jan 13 10:14:05 UTC 2016
On 01/13/2016 10:41 AM, Tzu-Mainn Chen wrote:
> Hey all,
>
> I realize now from the title of the other TripleO/Mistral thread [1] that
> the discussion there may have gotten confused. I think using Mistral for
> TripleO processes that are obviously workflows - stack deployment, node
> registration - makes perfect sense. That thread is exploring practicalities
> for doing that, and I think that's great work.
>
> What I inappropriately started to address in that thread was a somewhat
> orthogonal point that Dan asked in his original email, namely:
>
> "what it might look like if we were to use Mistral as a replacement for the
> TripleO API entirely"
>
> I'd like to create this thread to talk about that; more of a 'should we'
> than 'can we'. And to do that, I want to indulge in a thought exercise
> stemming from an IRC discussion with Dan and others. All, please correct me
> if I've misstated anything.
>
> The IRC discussion revolved around one use case: deploying a Heat stack
> directly from a Swift container. With an updated patch, the Heat CLI can
> support this functionality natively. Then we don't need a TripleO API; we
> can use Mistral to access that functionality, and we're done, with no need
> for additional code within TripleO. And, as I understand it, that's the
> true motivation for using Mistral instead of a TripleO API: avoiding custom
> code within TripleO.
>
> That's definitely a worthy goal... except from my perspective, the story
> doesn't quite end there. A GUI needs additional functionality, which boils
> down to: understanding the Heat deployment templates in order to provide
> options for a user; and persisting those options within a Heat environment
> file.
We also have things like profile matching (on review now), which don't
fall into any other project..
>
> Right away I think we hit a problem. Where does the code for 'understanding
> options' go? Much of that understanding comes from the capabilities map
> in tripleo-heat-templates [2]; it would make sense to me that responsibility
> for that would fall to a TripleO library.
>
> Still, perhaps we can limit the amount of TripleO code. So to give API
> access to 'getDeploymentOptions', we can create a Mistral workflow.
>
> Retrieve Heat templates from Swift -> Parse capabilities map
>
> Which is fine-ish, except from an architectural perspective
> 'getDeploymentOptions' violates the abstraction layer between storage and
> business logic, a problem that is compounded because 'getDeploymentOptions'
> is not the only functionality that accesses the Heat templates and needs
> exposure through an API. And, as has been discussed on a separate TripleO
> thread, we're not even sure Swift is sufficient for our needs; one possible
> consideration right now is allowing deployment from templates stored in
> multiple places, such as the file system or git.
>
> Are we going to have duplicate 'getDeploymentOptions' workflows for each
> storage mechanism? If we consolidate the storage code within a TripleO
> library, do we really need a *workflow* to call a single function? Is a
> thin TripleO API that contains no additional business logic really so bad
> at that point?
>
> My gut reaction is to say that proposing Mistral in place of a TripleO API
> is to look at the engineering concerns from the wrong direction. The
> Mistral alternative comes from a desire to limit custom TripleO code at all
> costs. I think that is an extremely dangerous attitude that leads to
> compromises and workarounds that will quickly lead to a shaky code base
> full of design flaws that make it difficult to implement or extend any
> functionality cleanly.
>
> I think the correct attitude is to simply look at the problem we're
> trying to solve and find the correct architecture. For these get/set
> methods that the API needs, it's pretty simple: storage -> some logic ->
> a REST API. Adding a workflow engine on top of that is unneeded, and I
> believe that means it's an incorrect solution.
>
>
> Thanks,
> Tzu-Mainn Chen
>
>
>
> [1] http://lists.openstack.org/pipermail/openstack-dev/2016-January/083757.html
> [2] https://github.com/openstack/tripleo-heat-templates/blob/master/capabilities_map.yaml
>
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
More information about the OpenStack-dev
mailing list