[openstack-dev] [all][OSC] OpenStack Interpreter: A useful tool python interpreter tool for the OpenStack client libraries.

Adrian Turjak adriant at catalyst.net.nz
Wed May 3 00:32:28 UTC 2017

On 03/05/17 01:23, Monty Taylor wrote:
> On 05/02/2017 12:11 AM, Adrian Turjak wrote:
>> Hello OpenStack folks,
>> As part of my dev work I recently put together a cool little tool which
>> lets me have much easier access to the various OpenStack python clients
>> in the scope of a python interpreter session. The first version was a
>> little rough and without os-client-config support. The current version
>> is now a plugin for the openstackclient and introduces a command that
>> simply authenticates you, sets up the environment and helper tools, and
>> then drops you into an ipython interactive session. The helper stuff is
>> fairly simple, but combined with the features of ipython it really lets
>> you start playing with the tools quickly, and by piggybacking onto
>> openstackclient I get access to a lot of the niceties and inbuilt auth
>> mechanisms.
>> It is useful for learning, testing, or development against the various
>> openstack client libraries, and even as an ops tool to quickly run some
>> basic actions without having to resort to weird or silly bash command
>> combinations.
>> I personally use it to test out commands or libraries I'm not familiar
>> with, or if I just need to work out what the output from something is.
>> Often even doing once off admin actions that require parsing through and
>> comparing different values and resources, but isn't worth writing a
>> script for.
>> My goal was to make something easy to use, and help almost anyone pick
>> up and start using the various python clients without needing to dig
>> through too much docs.
>> https://pypi.python.org/pypi/openstack-interpreter
> Nice work! I'd love to help you connect the shade bits - as well as
> raw REST clients. (I frequently just open a python REPL and type:
> import shade
> shade.simple_logging(http_debug=True)
> c = shade.openstack_cloud(cloud='vexxhost')
> and then do a bunch of stuff with c. In fact, that's my most common
> form of interaction with OpenStack these days. :)
Much the same here, although swap out shade for
python-<project_name>client. I've been doing a lot in an ipython
interpreter lately, so anything to get me up and running quickly helps,
hence this silly little project.

> So since you did the nice work to connect it to OSC, I'd love to help
> you connect a few more options in there. (shade's constructor takes an
> os-client-config OpenStackCloudConfig object and uses the session from
> it, so if you've got occ support already, plumbing in shade with
> shared session should be easy. If it's not, I'm happy to help sort
> that out.)
> Monty
I've got support for the various python-<project_name>client libraries,
and adding new ones is easy, even if they have slightly different
constructors (*shakes fist at SwiftClient*). I tend to use these the
most, and prefer them over the openstackSDK so they were the first to be
implemented in this.

OpenstackSDK is also reasonably easy, but I want to create a nice little
factory for configuring it because at first glance the Profile objects
it uses are a little confusing, and it would be nice to abstract all of
that away into a factory function that just spits out a connection
object based on the params you give it but reusing the existing
keystoneauth session.

I should point out though that by os-client-config support I mainly
mean, I'm letting OSC handle that, and then just pilfering the
keystoneauth session it builds. :P

Shade in this context is both really easy, and harder since I can't just
give it the same session so it can reuse the same token. I've tried
seeing if I can pilfer the OpenStackCloudConfig from OSC but passing
that to shade seemed to break. If you run that interpreter command you
can explore the OSC objects too. "self.app.cloud_config" or
"self.app.cloud" appears to be close to what we want, but I can't get it
to play nice with shade as it appears to be a OSC extension of the
os-client-config class.

If the interpreter is started from envvars you can do "cloud =
openstack_cloud()" and shade does the right thing. If it was started
with --os-cloud then you can also do "cloud =
openstack_cloud(cloud=self.app.cloud.config.get('cloud'))". The latter
also works with envvars as "self.app.cloud.config.get('cloud')" returns
an empty string so shade looks at envvars. I can easily make a function
that just returns shade with a new token, just kind of sucks that there
is no way to pass it a valid session/token for it to reuse. Would be
fantastic if you can take a gander at that as I don't know that much
about Shade. I'd prefer to have this thing use a single shared session
or token as much as possible.


More information about the OpenStack-dev mailing list