I don't like:

if type(commands) is not list:
    commands = [commands]

It makes the API of _run_openstack_cmd very unclean. In addition, no one calls _run_openstack_cmd and passes in commands as a single string. So we should just remove this.

Also, I would rename the method _run_openstack_cmds, as the parameter is 'commands' (for _run_openstack_cmd, I would expect the parameter to be 'command')