This is the first step in reworking the shell argument handling, clean up and add tests to ensure functionality doesn't change. * Rework shell tests to break down global options and auth options. * Make tests table-driven * Remove 'os_' from 'cacert' and 'default_domain' internal option names Change-Id: Icf69c7e84f3f44b366fe64b6bbf4e3fe958eb302
		
			
				
	
	
		
			115 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python
 | 
						|
# osc-lib.py - Example using OSC as a library
 | 
						|
 | 
						|
# 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.
 | 
						|
 | 
						|
"""
 | 
						|
OpenStackClient Library Examples
 | 
						|
 | 
						|
This script shows the basic use of the OpenStackClient ClientManager
 | 
						|
as a library.
 | 
						|
 | 
						|
"""
 | 
						|
 | 
						|
import argparse
 | 
						|
import logging
 | 
						|
import sys
 | 
						|
 | 
						|
import common
 | 
						|
 | 
						|
from openstackclient.common import clientmanager
 | 
						|
 | 
						|
from os_client_config import config as cloud_config
 | 
						|
 | 
						|
 | 
						|
LOG = logging.getLogger('')
 | 
						|
 | 
						|
 | 
						|
def run(opts):
 | 
						|
    """Run the examples"""
 | 
						|
 | 
						|
    # Do configuration file handling
 | 
						|
    cc = cloud_config.OpenStackConfig()
 | 
						|
    LOG.debug("defaults: %s", cc.defaults)
 | 
						|
 | 
						|
    cloud = cc.get_one_cloud(
 | 
						|
        cloud=opts.cloud,
 | 
						|
        argparse=opts,
 | 
						|
    )
 | 
						|
    LOG.debug("cloud cfg: %s", cloud.config)
 | 
						|
 | 
						|
    # Loop through extensions to get API versions
 | 
						|
    # Currently API versions are statically selected.  Once discovery
 | 
						|
    # is working this can go away...
 | 
						|
    api_version = {}
 | 
						|
    for mod in clientmanager.PLUGIN_MODULES:
 | 
						|
        version_opt = getattr(opts, mod.API_VERSION_OPTION, None)
 | 
						|
        if version_opt:
 | 
						|
            api = mod.API_NAME
 | 
						|
            api_version[api] = version_opt
 | 
						|
 | 
						|
    # Set up certificate verification and CA bundle
 | 
						|
    # NOTE(dtroyer): This converts from the usual OpenStack way to the single
 | 
						|
    #                requests argument and is an app-specific thing because
 | 
						|
    #                we want to be like OpenStackClient.
 | 
						|
    if opts.cacert:
 | 
						|
        verify = opts.cacert
 | 
						|
    else:
 | 
						|
        verify = not opts.insecure
 | 
						|
 | 
						|
    # Get a ClientManager
 | 
						|
    # Collect the auth and config options together and give them to
 | 
						|
    # ClientManager and it will wrangle all of the goons into place.
 | 
						|
    client_manager = clientmanager.ClientManager(
 | 
						|
        cli_options=cloud,
 | 
						|
        verify=verify,
 | 
						|
        api_version=api_version,
 | 
						|
    )
 | 
						|
 | 
						|
    # At this point we have a working client manager with a configured
 | 
						|
    # session and authentication plugin.  From here on it is the app
 | 
						|
    # making the decisions.  Need to talk to two clouds?  Make another
 | 
						|
    # client manager with different opts.  Or use a config file and load it
 | 
						|
    # directly into the plugin.  This example doesn't show that (yet).
 | 
						|
 | 
						|
    # Do useful things with it
 | 
						|
 | 
						|
    # Look in the object store
 | 
						|
    c_list = client_manager.object_store.container_list()
 | 
						|
    print("Name\tCount\tBytes")
 | 
						|
    for c in c_list:
 | 
						|
        print("%s\t%d\t%d" % (c['name'], c['count'], c['bytes']))
 | 
						|
 | 
						|
    if len(c_list) > 0:
 | 
						|
        # See what is in the first container
 | 
						|
        o_list = client_manager.object_store.object_list(c_list[0]['name'])
 | 
						|
        print("\nObject")
 | 
						|
        for o in o_list:
 | 
						|
            print("%s" % o)
 | 
						|
 | 
						|
    # Look at the compute flavors
 | 
						|
    flavor_list = client_manager.compute.flavors.list()
 | 
						|
    print("\nFlavors:")
 | 
						|
    for f in flavor_list:
 | 
						|
        print("%s" % f)
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    parser = argparse.ArgumentParser(description='ClientManager Example')
 | 
						|
    opts = common.base_parser(
 | 
						|
        clientmanager.build_plugin_option_parser(parser),
 | 
						|
    ).parse_args()
 | 
						|
 | 
						|
    common.configure_logging(opts)
 | 
						|
    sys.exit(common.main(opts, run))
 |