[openstack-dev] [TripleO] Encapsulating logic and state in the client

Zane Bitter zbitter at redhat.com
Mon Aug 17 16:25:36 UTC 2015


It occurs to me that there has never been a detailed exposition of the 
purpose of the tripleo-common library here, and that this might be a 
good time to rectify that.

Basically, there are two things that it sucks to have in the client:

First, logic - that is, any code that is not related to the core client 
functionality of taking input from the user, making ReST API calls, and 
returning output to the user. This sucks because anyone needing to 
connect to a ReST API using a language other than Python has to 
reimplement the logic in their own language. It also creates potential 
versioning issues, because there's nothing to guarantee that the client 
code and anything it interacts with on the server are kept in sync.

Secondly, state. This sucks because the state is contained in a user's 
individual session, which not only causes all sorts of difficulties for 
anyone trying to implement a web UI but also means that you're at risk 
of losing some state if you e.g. accidentally Ctrl-C the CLI client.

Unfortunately, as undesirable as these are, they're sometimes necessary 
in the world we currently live in. The only long-term solution to this 
is to put all of the logic and state behind a ReST API where it can be 
accessed from any language, and where any state can be stored 
appropriately, possibly in a database. In principle that could be 
accomplished either by creating a tripleo-specific ReST API, or by 
finding native OpenStack undercloud APIs to do everything we need. My 
guess is that we'll find a use for the former before everything is ready 
for the latter, but that's a discussion for another day. We're not there 
yet, but there are things we can do to keep our options open to make 
that transition in the future, and this is where tripleo-common comes in.

I submit that anything that adds logic or state to the client should be 
implemented in the tripleo-common library instead of the client plugin. 
This offers a couple of advantages:

- It provides a defined boundary between code that is CLI-specific and 
code that is shared between the CLI and GUI, which could become the 
model for a future ReST API once it has stabilised and we're ready to 
take that step.
- It allows for an orderly transition when that happens - we can have a 
deprecation period during which the tripleo-common library is imported 
into both the client and the (future, hypothetical) ReST API.

cheers,
Zane.



More information about the OpenStack-dev mailing list