Keystoneclient sessions are being used as a common base library to standardize handling of tokens and authentication credentials going beyond a basic username and password.
This improves security as a single point of update for these issues and means that additional authentication mechanisms may be added transparently to individual clients.
Glanceclient should adopt sessions as other clients have.
The OpenStack clients all grew rather organically. Each handled their own authentication and this was copied and pasted between every service. This results in:
- inconsistencies with what parameters are accepted between clients.
- A security issue when bugs are found and need to be patched in each client.
- Inconsistent use of the service catalog, regions etc.
- Problems adding new features as they become available in keystone.
Glanceclient is structured differently from the other clients. It is one of the few that nicely separates the responsibilities of the CLI and the library. However it does do custom HTTPS handling and other security related fixes that are not reused amongst other components.
Because of offloading to the CLI it does not handle things like token refreshing, and puts the onus of operating the service catalog onto the user - generally other services.
I want to bring glanceclient more inline with other clients. Now that there is the facilities that things like the service catalog can be managed consistently by other libraries there is less of an excuse for glanceclient to avoid using this information.
This will involve creating a different type of HTTPClient in the event that session and other options are detected. This will allow glanceclient to continue to operate as it does today unless users opt-in by using new parameters. These new parameters are managed by the keystoneclient Adapter object and so will simply involve passing kwargs through.
The CRUD layers of glanceclient and the requests path will be unaffected.
Glanceclient can continue to operate as it does now. This is not as bad as other clients as it pushes this configuration back on the service, rather than incorrectly handling options internally. However this makes it a special case and glanceclient will not benefit from the efforts to standardize authentication flows and options that the other services gain.
This change will reimplement how glanceclient handles authentication, token management and how you select endpoints. It handles this though by offloading these concepts to keystoneclient so that any security issues can be handled there.
It will deprecate the custom HTTPs handling that glanceclient does. It is my understanding that this custom handling was largely to disable BEAST style attacks by preventing the client from advertising SSL compression capabilities. Whilst compatibility will be maintained for the current client it may not be possible to maintain this functionality when using a common handling logic.
The flow on effect here is that other services that have credentials and parameters in config files that are used to talk to glance will be standardized with other services.
This will change the parameters that are provided when establishing a glanceclient. The new parameters are standardized across all the other OpenStack client libraries. Existing parameters will obviously be maintained and deprecated in time.
This will greatly assist integration with service to service communication as auth_token middleware is providing an auth plugin that can be used directly, as well as standardizing the options that are used for all the clients.
Who is leading the writing of the code? Or is this a blueprint where you’re throwing it out there to see who picks it up?
If more than one person is working on the implementation, please designate the primary author and contact.
I would appreciate anyone who wants to be a point of contact for review.
We can unit test these changes. It should also be possible to use a testscenarios approach such that existing CRUD tests are run with both a traditionally created client and a client created with a session.
Update documentation on how to instantiate a Client.