OpenStack libraries now use Authenication plugins from the keystoneauth1 library. One othe the plugins has disappered? Kerbersop. This used to be in the python-keystoneclient-kerberos package, but that is not shipped with Mitaka. What happened?
To list the posted entry points on a Centos Based system, you can first look in the entry_points.txt file:
cat /usr/lib/python2.7/site-packages/keystoneauth1-2.4.1-py2.7.egg-info/entry_points.txt [keystoneauth1.plugin] v2token = keystoneauth1.loading._plugins.identity.v2:Token admin_token = keystoneauth1.loading._plugins.admin_token:AdminToken v3oidcauthcode = keystoneauth1.loading._plugins.identity.v3:OpenIDConnectAuthorizationCode v2password = keystoneauth1.loading._plugins.identity.v2:Password v3password = keystoneauth1.loading._plugins.identity.v3:Password v3oidcpassword = keystoneauth1.loading._plugins.identity.v3:OpenIDConnectPassword token = keystoneauth1.loading._plugins.identity.generic:Token v3token = keystoneauth1.loading._plugins.identity.v3:Token password = keystoneauth1.loading._plugins.identity.generic:Password
But are there others?
Looking in the source repo: We can see a reference to Kerberos (as well as SAML, which has also gone missing), before the enumeration of the entry points we see above.
[extras] kerberos = requests-kerberos>=0.6:python_version=='2.7' or python_version=='2.6' # MIT saml2 = lxml>=2.3 # BSD oauth1 = oauthlib>=0.6 # BSD betamax = betamax>=0.7.0 # Apache-2.0 fixtures>=3.0.0 # Apache-2.0/BSD mock>=2.0 # BSD [entry_points] keystoneauth1.plugin = password = keystoneauth1.loading._plugins.identity.generic:Password token = keystoneauth1.loading._plugins.identity.generic:Token admin_token = keystoneauth1.loading._plugins.admin_token:AdminToken v2password = keystoneauth1.loading._plugins.identity.v2:Password v2token = keystoneauth1.loading._plugins.identity.v2:Token v3password = keystoneauth1.loading._plugins.identity.v3:Password v3token = keystoneauth1.loading._plugins.identity.v3:Token v3oidcpassword = keystoneauth1.loading._plugins.identity.v3:OpenIDConnectPassword v3oidcauthcode = keystoneauth1.loading._plugins.identity.v3:OpenIDConnectAuthorizationCode v3oidcaccesstoken = keystoneauth1.loading._plugins.identity.v3:OpenIDConnectAccessToken v3oauth1 = keystoneauth1.extras.oauth1._loading:V3OAuth1 v3kerberos = keystoneauth1.extras.kerberos._loading:Kerberos v3totp = keystoneauth1.loading._plugins.identity.v3:TOTP
We see that the Kerberos plugin requires requests-kerberos>=0.6 so let’s get that installed via
sudo yum install python-requests-kerbero
And then try to enumerate the entry points via python
>>> import pkg_resources >>> named_objects = {} >>> for ep in pkg_resources.iter_entry_points(group='keystoneauth1.plugin'): ... named_objects.update({ep.name: ep.load()}) ... >>> print (named_objects) {'v2token':, 'token': , 'admin_token': , 'v3oidcauthcode': , 'v3token': , 'v2password': , 'password': , 'v3password': , 'v3oidcpassword': }
We still don’t have the Kerberos plugin. Going back to the setup.cfg file, we see the Python class for the Kerberos plugin is not listed. Kerberos is implemented here in the source tree. Does that exist in our package managed file system?
$ rpm --query --list python2-keystoneauth1-2.4.1-1.el7.noarch | grep kerberos.py$ /usr/lib/python2.7/site-packages/keystoneauth1/extras/kerberos.py
Yes. It does. Can we load that by class?
>>> from keystoneauth1.extras import kerberos >>> print kerberos
Yes, although the RPM version is a little earlier than the git repo. So what is the entry point name? There is not one, yet. The only way to get the class is by the full class name.
We’ll fix this, but the tools for enumerating the entrypoints are something I’ve used often enough that I want to get them documented.
You may find https://pypi.python.org/pypi/entry_point_inspector useful.