Example code reorg and auth examples
A slight reorganization on the example code to avoid conflicts and make it clearer how to use the example code: * Move transport code out of common.py to transport.py * Try to keep example code in silos of functionality to avoid conflicts (transport.py, authenticate.py, ...) For the authentication examples: * Added basic identity v2 and v3 authentication command To run: python -m examples.authenticate python -m examples.transport https://region-a.geo-1.identity.hpcloudsvc.com:35357/ Change-Id: I3f342409a7df645bfed82963488b665e1fb191e7
This commit is contained in:
74
examples/authenticate.py
Normal file
74
examples/authenticate.py
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from examples import common
|
||||||
|
from examples import transport
|
||||||
|
from openstack.auth import base
|
||||||
|
from openstack.auth.identity import v2
|
||||||
|
from openstack.auth.identity import v3
|
||||||
|
|
||||||
|
|
||||||
|
class TestAuthenticator(base.BaseAuthenticator):
|
||||||
|
def __init__(self, token, endpoint):
|
||||||
|
super(TestAuthenticator, self).__init__()
|
||||||
|
self.token = token
|
||||||
|
self.endpoint = endpoint
|
||||||
|
|
||||||
|
def get_token(self, transport, **kwargs):
|
||||||
|
return self.token
|
||||||
|
|
||||||
|
def get_endpoint(self, transport, service, **kwargs):
|
||||||
|
return self.endpoint
|
||||||
|
|
||||||
|
|
||||||
|
def make_authenticate(opts):
|
||||||
|
"""Create authenticator of some sort."""
|
||||||
|
token = opts.os_token
|
||||||
|
username = opts.os_username
|
||||||
|
password = opts.os_password
|
||||||
|
auth_url = opts.os_auth_url
|
||||||
|
project_name = opts.os_project_name
|
||||||
|
version = opts.os_identity_api_version
|
||||||
|
if version is None:
|
||||||
|
version = '3'
|
||||||
|
else:
|
||||||
|
version = version.lower().replace('v', '')
|
||||||
|
if version == '3':
|
||||||
|
if not token:
|
||||||
|
args = {'username': username, 'password': password}
|
||||||
|
if project_name:
|
||||||
|
args['project_name'] = project_name
|
||||||
|
return v3.Password(auth_url, **args)
|
||||||
|
else:
|
||||||
|
return v3.Token(auth_url, token=token)
|
||||||
|
elif version == '2':
|
||||||
|
if not token:
|
||||||
|
args = {}
|
||||||
|
if project_name:
|
||||||
|
args['tenant_name'] = project_name
|
||||||
|
return v2.Password(auth_url, username, password, **args)
|
||||||
|
else:
|
||||||
|
return v2.Token(auth_url, token)
|
||||||
|
raise Exception("No support for version: %s" % version)
|
||||||
|
|
||||||
|
|
||||||
|
def run_authenticate(opts):
|
||||||
|
auth = make_authenticate(opts)
|
||||||
|
xport = transport.make_transport(opts)
|
||||||
|
print(auth.authorize(xport))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
opts = common.setup()
|
||||||
|
sys.exit(common.main(opts, run_authenticate))
|
@@ -33,13 +33,7 @@ import subprocess
|
|||||||
import sys
|
import sys
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
from openstack import transport
|
|
||||||
|
|
||||||
CONSOLE_MESSAGE_FORMAT = '%(levelname)s: %(name)s %(message)s'
|
CONSOLE_MESSAGE_FORMAT = '%(levelname)s: %(name)s %(message)s'
|
||||||
DEFAULT_VERBOSE_LEVEL = 1
|
|
||||||
USER_AGENT = 'qwiktest'
|
|
||||||
|
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
@@ -61,38 +55,6 @@ def get_open_fds():
|
|||||||
return [d.replace('\000', '|') for d in procs_list]
|
return [d.replace('\000', '|') for d in procs_list]
|
||||||
|
|
||||||
|
|
||||||
def run_transport(opts):
|
|
||||||
"""Create a transport given some options."""
|
|
||||||
|
|
||||||
# Certificate verification - defaults to True
|
|
||||||
if opts.os_cacert:
|
|
||||||
verify = opts.os_cacert
|
|
||||||
else:
|
|
||||||
verify = not opts.insecure
|
|
||||||
|
|
||||||
trans = transport.Transport(
|
|
||||||
verify=verify,
|
|
||||||
user_agent=USER_AGENT,
|
|
||||||
)
|
|
||||||
print("transport: %s" % trans)
|
|
||||||
if opts.os_url:
|
|
||||||
print(trans.get(opts.os_url).text)
|
|
||||||
return
|
|
||||||
|
|
||||||
COMMANDS = {'transport': run_transport}
|
|
||||||
|
|
||||||
|
|
||||||
def run(opts):
|
|
||||||
if opts.debug:
|
|
||||||
print("start fds: %s" % get_open_fds())
|
|
||||||
|
|
||||||
# Run
|
|
||||||
COMMANDS[opts.command](opts)
|
|
||||||
|
|
||||||
if opts.debug:
|
|
||||||
print("end fds: %s" % get_open_fds())
|
|
||||||
|
|
||||||
|
|
||||||
def env(*vars, **kwargs):
|
def env(*vars, **kwargs):
|
||||||
"""Search for the first defined of possibly many env vars
|
"""Search for the first defined of possibly many env vars
|
||||||
|
|
||||||
@@ -195,9 +157,10 @@ def option_parser():
|
|||||||
help='show tracebacks on errors',
|
help='show tracebacks on errors',
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'command',
|
'argument',
|
||||||
choices=list(COMMANDS),
|
default=None,
|
||||||
help='Command to run.',
|
nargs='?',
|
||||||
|
help='Argument to use.',
|
||||||
)
|
)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@@ -239,8 +202,3 @@ def main(opts, run):
|
|||||||
else:
|
else:
|
||||||
_logger.error('Exception raised: ' + str(e))
|
_logger.error('Exception raised: ' + str(e))
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
opts = setup()
|
|
||||||
sys.exit(main(opts, run))
|
|
||||||
|
@@ -24,41 +24,29 @@ REST API calls.
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from examples import common
|
from examples import common
|
||||||
|
from openstack import transport
|
||||||
|
|
||||||
|
USER_AGENT = 'SDKExample'
|
||||||
|
|
||||||
|
|
||||||
def do_transport(opts):
|
def make_transport(opts):
|
||||||
trans = common.run_transport(opts)
|
# Certificate verification - defaults to True
|
||||||
|
if opts.os_cacert:
|
||||||
|
verify = opts.os_cacert
|
||||||
|
else:
|
||||||
|
verify = not opts.insecure
|
||||||
|
return transport.Transport(verify=verify, user_agent=USER_AGENT)
|
||||||
|
|
||||||
# Get the version data from the auth URL
|
|
||||||
resp = trans.get(opts.os_auth_url).json()
|
|
||||||
ver = resp['version']
|
|
||||||
print("\nAuth URL: %s" % opts.os_auth_url)
|
|
||||||
print(" version: %s" % ver['id'])
|
|
||||||
print(" status: %s" % ver['status'])
|
|
||||||
|
|
||||||
# Do a basic call to somewhere fun
|
def run_transport(opts):
|
||||||
url = 'https://api.github.com/users/openstack'
|
"""Create a transport given some options."""
|
||||||
resp = trans.get(url).json()
|
argument = opts.argument
|
||||||
print("\nGitHub API URL: %s" % url)
|
trans = make_transport(opts)
|
||||||
print(" gists: %s" % resp['gists_url'])
|
print("transport: %s" % trans)
|
||||||
print(" repos: %s" % resp['public_repos'])
|
print(trans.get(argument).text)
|
||||||
|
return
|
||||||
url = 'https://api.github.com/users/openstack-dev'
|
|
||||||
resp = trans.get(url).json()
|
|
||||||
print("\nGitHub API URL: %s" % url)
|
|
||||||
print(" gists: %s" % resp['gists_url'])
|
|
||||||
print(" repos: %s" % resp['public_repos'])
|
|
||||||
|
|
||||||
# stats
|
|
||||||
print('\nTransport connection pools:')
|
|
||||||
print(" http pool: %s" % (
|
|
||||||
trans.adapters['http://'].poolmanager.pools.keys(),
|
|
||||||
))
|
|
||||||
print(" https pool: %s" % (
|
|
||||||
trans.adapters['https://'].poolmanager.pools.keys(),
|
|
||||||
))
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
opts = common.setup()
|
opts = common.setup()
|
||||||
sys.exit(common.main(opts, do_transport))
|
sys.exit(common.main(opts, run_transport))
|
||||||
|
Reference in New Issue
Block a user